Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/jgraph/drawio.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Benson <david@jgraph.com>2017-03-24 14:59:37 +0300
committerDavid Benson <david@jgraph.com>2017-03-24 14:59:37 +0300
commit3c75dc69a84fceea373e3f66218ce34b99cd04b6 (patch)
treed2d2553e7dc725190153a0ff0e5da8cb26a20730
parentd9fca61424ce0442a9de807015370ebf71adccb1 (diff)
6.4.1 releasev6.4.1
Former-commit-id: 5f8102fae0a70efe36921baad2bcd416aad746ad
-rw-r--r--ChangeLog17
-rw-r--r--VERSION2
-rw-r--r--etc/build/build.xml1
-rw-r--r--src/com/mxgraph/io/mxVsdxCodec.java163
-rw-r--r--src/com/mxgraph/io/vsdx/Shape.java70
-rw-r--r--src/com/mxgraph/io/vsdx/Style.java50
-rw-r--r--src/com/mxgraph/io/vsdx/VsdxShape.java24
-rw-r--r--src/com/mxgraph/io/vsdx/mxVsdxModel.java62
-rw-r--r--src/com/mxgraph/io/vsdx/mxVsdxPage.java47
-rw-r--r--src/com/mxgraph/io/vsdx/mxVsdxTheme.java453
-rw-r--r--src/com/mxgraph/io/vsdx/mxVsdxUtils.java73
-rw-r--r--src/com/mxgraph/io/vsdx/theme/Color.java92
-rw-r--r--src/com/mxgraph/io/vsdx/theme/FillStyle.java7
-rw-r--r--src/com/mxgraph/io/vsdx/theme/FillStyleFactory.java36
-rw-r--r--src/com/mxgraph/io/vsdx/theme/GradFill.java46
-rw-r--r--src/com/mxgraph/io/vsdx/theme/HSLColor.java120
-rw-r--r--src/com/mxgraph/io/vsdx/theme/HslClr.java12
-rw-r--r--src/com/mxgraph/io/vsdx/theme/NoFillStyle.java15
-rw-r--r--src/com/mxgraph/io/vsdx/theme/OoxmlColor.java253
-rw-r--r--src/com/mxgraph/io/vsdx/theme/OoxmlColorFactory.java98
-rw-r--r--src/com/mxgraph/io/vsdx/theme/PrstClr.java155
-rw-r--r--src/com/mxgraph/io/vsdx/theme/SchemeClr.java45
-rw-r--r--src/com/mxgraph/io/vsdx/theme/ScrgbClr.java14
-rw-r--r--src/com/mxgraph/io/vsdx/theme/SolidFillStyle.java20
-rw-r--r--src/com/mxgraph/io/vsdx/theme/SrgbClr.java10
-rw-r--r--src/com/mxgraph/io/vsdx/theme/SysClr.java57
-rw-r--r--war/cache.manifest2
-rw-r--r--war/images/sidebar-gcp.pngbin34754 -> 27946 bytes
-rw-r--r--war/js/app.min.js303
-rw-r--r--war/js/atlas.min.js197
-rw-r--r--war/js/diagramly/App.js11
-rw-r--r--war/js/diagramly/Devel.js1
-rw-r--r--war/js/diagramly/DrawioUser.js29
-rw-r--r--war/js/diagramly/DriveClient.js2
-rw-r--r--war/js/diagramly/sidebar/Sidebar-GCP.js218
-rw-r--r--war/js/diagramly/sidebar/Sidebar.js17
-rw-r--r--war/js/embed-static.min.js2
-rw-r--r--war/js/mxgraph/Format.js20
-rw-r--r--war/js/reader.min.js2
-rw-r--r--war/resources/dia_de.txt2
-rw-r--r--war/stencils.xml106
-rw-r--r--war/stencils/gcp/product_cards.xml106
42 files changed, 2640 insertions, 320 deletions
diff --git a/ChangeLog b/ChangeLog
index 2498830b..a75adbf6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+24-MAR-2017: 6.4.1
+
+- Initial .vsdx theming support
+
+21-MAR-2017: 6.4.0
+
+- Fixes scaling on .vsdx import
+- Adds Google Cloud Platform cards
+
+18-MAR-2017: 6.3.8
+
+- Changes display on marker pull-down for no marker in use
+
+17-MAR-2017: 6.3.7
+
+- Adds locale information to drive user
+
16-MAR-2017: 6.3.6
- Fixes selection of deleted parents after delete actions
diff --git a/VERSION b/VERSION
index 5995717c..306894a1 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-6.3.6 \ No newline at end of file
+6.4.1 \ No newline at end of file
diff --git a/etc/build/build.xml b/etc/build/build.xml
index cab4e446..f41775c6 100644
--- a/etc/build/build.xml
+++ b/etc/build/build.xml
@@ -96,6 +96,7 @@
<file name="Sidebar-ER.js" />
<file name="Sidebar-Floorplan.js" />
<file name="Sidebar-Flowchart.js" />
+ <file name="Sidebar-GCP.js" />
<file name="Sidebar-Gmdl.js" />
<file name="Sidebar-Ios.js" />
<file name="Sidebar-Ios7.js" />
diff --git a/src/com/mxgraph/io/mxVsdxCodec.java b/src/com/mxgraph/io/mxVsdxCodec.java
index 85486d84..de2713ff 100644
--- a/src/com/mxgraph/io/mxVsdxCodec.java
+++ b/src/com/mxgraph/io/mxVsdxCodec.java
@@ -1,6 +1,6 @@
/**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
+ * Copyright (c) 2006-2017, JGraph Ltd
+ * Copyright (c) 2006-2017, Gaudenz Alder
*/
package com.mxgraph.io;
@@ -27,6 +27,11 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
+import com.google.appengine.api.images.Image;
+import com.google.appengine.api.images.ImagesService;
+import com.google.appengine.api.images.ImagesServiceFactory;
+import com.google.appengine.api.images.Transform;
+import com.google.appengine.api.images.ImagesService.OutputEncoding;
import com.mxgraph.io.vsdx.Shape;
import com.mxgraph.io.vsdx.ShapePageId;
import com.mxgraph.io.vsdx.VsdxShape;
@@ -39,13 +44,14 @@ import com.mxgraph.io.vsdx.mxVsdxModel;
import com.mxgraph.io.vsdx.mxVsdxPage;
import com.mxgraph.model.mxCell;
import com.mxgraph.model.mxGeometry;
+import com.mxgraph.model.mxGraphModel;
import com.mxgraph.model.mxIGraphModel;
import com.mxgraph.online.Utils;
import com.mxgraph.online.mxBase64;
import com.mxgraph.util.mxConstants;
import com.mxgraph.util.mxPoint;
+import com.mxgraph.util.mxRectangle;
import com.mxgraph.util.mxXmlUtils;
-import com.mxgraph.view.mxCellState;
import com.mxgraph.view.mxConnectionConstraint;
import com.mxgraph.view.mxGraph;
import com.mxgraph.view.mxGraphHeadless;
@@ -101,12 +107,12 @@ public class mxVsdxCodec
{
if (cellParent != null)
{
- mxCellState state = graph.getView().getState(cellParent);
+ mxGeometry geo = graph.getModel().getGeometry(cellParent);
- if (state != null)
+ if (geo != null)
{
- point.setX(point.getX() + state.getX());
- point.setY(point.getY() + state.getY());
+ point.setX(point.getX() + geo.getX());
+ point.setY(point.getY() + geo.getY());
}
}
@@ -151,7 +157,36 @@ public class mxVsdxCodec
}
else if (filename.toLowerCase().startsWith(mxVsdxCodec.vsdxPlaceholder + "/media"))
{
- mediaData.put(filename, StringUtils.newStringUtf8(Base64.encodeBase64(out.toByteArray(), false)));
+ String base64Str;
+ //Bmp images are huge and doesn't show up in the browser, so, it is better to compress it as jpeg
+ if (filename.toLowerCase().endsWith(".bmp"))
+ {
+ try
+ {
+ ImagesService imagesService = ImagesServiceFactory.getImagesService();
+
+ Image image = ImagesServiceFactory.makeImage(out.toByteArray());
+
+ //dummy transform
+ Transform transform = ImagesServiceFactory.makeCrop(0.0, 0.0, 1.0, 1.0);
+
+ //Use PNG format as it is lossless similar to bmp but compressed
+ Image newImage = imagesService.applyTransform(transform, image, OutputEncoding.PNG);
+
+ base64Str = StringUtils.newStringUtf8(Base64.encodeBase64(newImage.getImageData(), false));
+ }
+ catch (Exception e)
+ {
+ //conversion failed, nothing we can do!
+ base64Str = StringUtils.newStringUtf8(Base64.encodeBase64(out.toByteArray(), false));
+ }
+ }
+ else
+ {
+ base64Str = StringUtils.newStringUtf8(Base64.encodeBase64(out.toByteArray(), false));
+ }
+
+ mediaData.put(filename, base64Str);
}
}
}
@@ -207,6 +242,42 @@ public class mxVsdxCodec
importPage(backPage, graph, graph.getDefaultParent());
}
+ //scale page
+ double scale = page.getPageScale() / page.getDrawingScale();
+
+ if (scale != 1)
+ {
+ mxGraphModel model = (mxGraphModel)graph.getModel();
+
+ for (Object c : model.getCells().values())
+ {
+ mxGeometry geo = model.getGeometry(c);
+
+ if (geo != null)
+ {
+ scaleRect(geo, scale);
+ scaleRect(geo.getAlternateBounds(), scale);
+
+ if (model.isEdge(c))
+ {
+ //scale edge waypoints, offset, ...
+ scalePoint(geo.getSourcePoint(), scale);
+ scalePoint(geo.getTargetPoint(), scale);
+ scalePoint(geo.getOffset(), scale);
+ List<mxPoint> points = geo.getPoints();
+
+ if (points != null)
+ {
+ for (mxPoint p : points)
+ {
+ scalePoint(p, scale);
+ }
+ }
+ }
+ }
+ }
+ }
+
graph.getModel().endUpdate();
mxCodec codec = new mxCodec();
@@ -230,6 +301,44 @@ public class mxVsdxCodec
}
/**
+ * Scale a point in place
+ *
+ * @param p point to scale in place
+ * @param scale scale
+ * @return scaled point
+ */
+ private mxPoint scalePoint(mxPoint p, double scale)
+ {
+ if (p != null)
+ {
+ p.setX(p.getX() * scale);
+ p.setY(p.getY() * scale);
+ }
+
+ return p;
+ }
+
+ /**
+ * Scale a rectangle in place
+ *
+ * @param rect rectangle to scale in place
+ * @param scale scale
+ * @return scaled rectangle
+ */
+ private mxRectangle scaleRect(mxRectangle rect, double scale)
+ {
+ if (rect != null)
+ {
+ rect.setX(rect.getX() * scale);
+ rect.setY(rect.getY() * scale);
+ rect.setHeight(rect.getHeight() * scale);
+ rect.setWidth(rect.getWidth() * scale);
+ }
+
+ return rect;
+ }
+
+ /**
*
* @param rootDoc
* @param currentNode
@@ -701,15 +810,17 @@ public class mxVsdxCodec
}
else
{
+ mxCell srcTopParent = findTopParent(source, (mxCell) graph.getDefaultParent());
+
mxPoint dimensionFrom = fromShape.getDimensions();
//Get From shape origin and begin/end of edge in absolutes values.
double height = pageHeight;
- if ((source.getParent() != null)
- && (source.getParent().getGeometry() != null))
+ if ((srcTopParent != null)
+ && (srcTopParent.getGeometry() != null))
{
- height = source.getParent().getGeometry().getHeight();
+ height = srcTopParent.getGeometry().getHeight();
}
mxPoint originFrom = fromShape.getOriginPoint(height, false);
@@ -717,7 +828,7 @@ public class mxVsdxCodec
if (sourceToPart != mxVsdxConstants.CONNECT_TO_PART_WHOLE_SHAPE)
{
- mxPoint absOriginFrom = calculateAbsolutePoint(source.getParent(), graph, originFrom);
+ mxPoint absOriginFrom = calculateAbsolutePoint(srcTopParent, graph, originFrom);
fromConstraint = new mxPoint(
(beginXY.getX() - absOriginFrom.getX())
/ dimensionFrom.getX(),
@@ -748,16 +859,16 @@ public class mxVsdxCodec
else
{
target = vertexMap.get(new ShapePageId(pageId, toSheet));
-
+ mxCell trgTopParent = findTopParent(target, (mxCell) graph.getDefaultParent());
mxPoint dimentionTo = toShape.getDimensions();
//Get To shape origin.
double height = pageHeight;
- if ((target.getParent() != null)
- && (target.getParent().getGeometry() != null))
+ if ((trgTopParent != null)
+ && (trgTopParent.getGeometry() != null))
{
- height = target.getParent().getGeometry().getHeight();
+ height = trgTopParent.getGeometry().getHeight();
}
mxPoint originTo = toShape.getOriginPoint(height, false);
@@ -765,7 +876,7 @@ public class mxVsdxCodec
if (targetToPart != mxVsdxConstants.CONNECT_TO_PART_WHOLE_SHAPE)
{
- mxPoint absOriginTo = calculateAbsolutePoint( target.getParent(), graph, originTo);
+ mxPoint absOriginTo = calculateAbsolutePoint( trgTopParent, graph, originTo);
toConstraint = new mxPoint(
(endXY.getX() - absOriginTo.getX())
/ dimentionTo.getX(),
@@ -809,6 +920,24 @@ public class mxVsdxCodec
}
/**
+ * Find the top parent in a group
+ *
+ * @param cell
+ * @return the top most parent (which has the defaultParent as its parent)
+ */
+ private mxCell findTopParent(mxCell cell, mxCell defaultParent)
+ {
+ mxCell parent = (mxCell) cell.getParent();
+
+ while (parent.getParent() != null && parent.getParent() != defaultParent)
+ {
+ parent = (mxCell) parent.getParent();
+ }
+
+ return parent;
+ }
+
+ /**
* Adds a new edge not connected to any vertex to the graph.
* @param graph Graph where the parsed graph is included.
* @param parent Parent cell of the edge to be imported.
diff --git a/src/com/mxgraph/io/vsdx/Shape.java b/src/com/mxgraph/io/vsdx/Shape.java
index bc27cf9a..8ec25d86 100644
--- a/src/com/mxgraph/io/vsdx/Shape.java
+++ b/src/com/mxgraph/io/vsdx/Shape.java
@@ -70,6 +70,10 @@ public class Shape extends Style
protected Map<String, String> imageData;
+ protected mxVsdxTheme theme;
+
+ protected int themeVariant = 0;
+
public mxPathDebug debug = null;
public Shape(Element shape, mxVsdxModel model)
@@ -79,6 +83,21 @@ public class Shape extends Style
this.height = getScreenNumericalValue(this.cellElements.get(mxVsdxConstants.HEIGHT), 0);
}
+ public void setThemeAndVariant(mxVsdxTheme theme, int themeVariant)
+ {
+ this.theme = theme;
+ this.themeVariant = themeVariant;
+ }
+
+ public mxVsdxTheme getTheme()
+ {
+ if (theme != null)
+ {
+ theme.setVariant(themeVariant);
+ }
+ return theme;
+ }
+
/**
* Caches the specified element
* @param elem the element to cache
@@ -164,6 +183,13 @@ public class Shape extends Style
{
this.imageData = new HashMap<String, String>();
this.imageData.put("iData", model.getMedia(mxVsdxCodec.vsdxPlaceholder + "/media/" + target));
+
+ //since we convert BMP files to PNG, we set the compression to PNG
+ if (target.toLowerCase().endsWith(".bmp"))
+ {
+ compression = "png";
+ }
+
this.imageData.put("iType", compression);
}
}
@@ -1386,8 +1412,15 @@ public class Shape extends Style
if (!style.equals(""))
{
- int value = Integer.parseInt(style);
- isBold = ((value & 1) == 1);
+ if (style.toLowerCase().equals("themed"))
+ {
+ // TODO theme support
+ }
+ else
+ {
+ int value = Integer.parseInt(style);
+ isBold = ((value & 1) == 1);
+ }
}
return isBold;
@@ -1409,8 +1442,15 @@ public class Shape extends Style
if (!style.equals(""))
{
- int value = Integer.parseInt(style);
- isItalic = ((value & 2) == 2);
+ if (style.toLowerCase().equals("themed"))
+ {
+ // TODO theme support
+ }
+ else
+ {
+ int value = Integer.parseInt(style);
+ isItalic = ((value & 2) == 2);
+ }
}
return isItalic;
@@ -1432,8 +1472,15 @@ public class Shape extends Style
if (!style.equals(""))
{
- int value = Integer.parseInt(style);
- isUnderline = ((value & 4) == 4);
+ if (style.toLowerCase().equals("themed"))
+ {
+ // TODO theme support
+ }
+ else
+ {
+ int value = Integer.parseInt(style);
+ isUnderline = ((value & 4) == 4);
+ }
}
return isUnderline;
@@ -1455,8 +1502,15 @@ public class Shape extends Style
if (!style.equals(""))
{
- int value = Integer.parseInt(style);
- isSmallCaps = ((value & 8) == 8);
+ if (style.toLowerCase().equals("themed"))
+ {
+ // TODO theme support
+ }
+ else
+ {
+ int value = Integer.parseInt(style);
+ isSmallCaps = ((value & 8) == 8);
+ }
}
return isSmallCaps;
diff --git a/src/com/mxgraph/io/vsdx/Style.java b/src/com/mxgraph/io/vsdx/Style.java
index 3b9779e2..b360d106 100644
--- a/src/com/mxgraph/io/vsdx/Style.java
+++ b/src/com/mxgraph/io/vsdx/Style.java
@@ -12,6 +12,7 @@ import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import com.mxgraph.io.vsdx.theme.Color;
import com.mxgraph.util.mxConstants;
/**
@@ -38,8 +39,8 @@ public class Style
*/
protected Map<String, Style> styleParents = new HashMap<String, Style>();
- protected Style theme;
-
+ protected Style style;
+
private final static Logger LOGGER = Logger.getLogger(Style.class.getName());
public static boolean vsdxStyleDebug = false;
@@ -56,7 +57,9 @@ public class Style
styleTypes.put(mxVsdxConstants.FILL_PATTERN , mxVsdxConstants.FILL_STYLE);
styleTypes.put(mxVsdxConstants.SHDW_PATTERN, mxVsdxConstants.FILL_STYLE);
styleTypes.put(mxVsdxConstants.FILL_STYLE, mxVsdxConstants.FILL_STYLE);
-
+ styleTypes.put("QuickStyleFillColor", mxVsdxConstants.FILL_STYLE);
+ styleTypes.put("QuickStyleFillMatrix", mxVsdxConstants.FILL_STYLE);
+
styleTypes.put(mxVsdxConstants.BEGIN_ARROW, mxVsdxConstants.LINE_STYLE);
styleTypes.put(mxVsdxConstants.END_ARROW, mxVsdxConstants.LINE_STYLE);
styleTypes.put(mxVsdxConstants.LINE_PATTERN, mxVsdxConstants.LINE_STYLE);
@@ -97,6 +100,11 @@ public class Style
stylesheetRefs(model);
}
+ public mxVsdxTheme getTheme()
+ {
+ return null;
+ }
+
public void styleDebug(String debug)
{
if (vsdxStyleDebug)
@@ -111,8 +119,8 @@ public class Style
styleParents.put(mxVsdxConstants.LINE_STYLE, model.getStylesheet(shape.getAttribute(mxVsdxConstants.LINE_STYLE)));
styleParents.put(mxVsdxConstants.TEXT_STYLE, model.getStylesheet(shape.getAttribute(mxVsdxConstants.TEXT_STYLE)));
- Style theme = model.getStylesheet("0");
- this.theme = theme;
+ Style style = model.getStylesheet("0");
+ this.style = style;
}
/**
@@ -378,10 +386,10 @@ public class Style
{
inherit = true;
}
- else if (form.equals("THEMEVAL()") && value.equals("Themed") && theme != null)
+ else if (form.equals("THEMEVAL()") && value.equals("Themed") && style != null)
{
// Use "no style" style
- Element themeElem = theme.getCellElement(cellKey, index, sectKey);
+ Element themeElem = style.getCellElement(cellKey, index, sectKey);
if (themeElem != null)
{
@@ -435,10 +443,14 @@ public class Style
{
inherit = true;
}
- else if (form.equals("THEMEVAL()") && value.equals("Themed") && theme != null)
+ else if (form.equals("THEMEVAL()") && value.equals("Themed") && style != null)
{
+ //Handle theme here
+ //FIXME this is a very hacky way to test themes until fully integrating themes
+ if ("FillForegnd".equals(key)) return elem;
+
// Use "no style" style
- Element themeElem = theme.getCellElement(key);
+ Element themeElem = style.getCellElement(key);
if (themeElem != null)
{
@@ -501,6 +513,24 @@ public class Style
protected String getFillColor()
{
String fillForeColor = this.getColor(this.getCellElement(mxVsdxConstants.FILL_FOREGND));
+
+ if ("Themed".equals(fillForeColor))
+ {
+ mxVsdxTheme theme = getTheme();
+
+ if (theme != null)
+ {
+ int styleFillClr = Integer.parseInt(this.getValue(this.getCellElement("QuickStyleFillColor"), "1"));
+ int styleFillMtx = Integer.parseInt(this.getValue(this.getCellElement("QuickStyleFillMatrix"), "0"));
+ Color color = theme.getFillColor(styleFillClr, styleFillMtx);
+ fillForeColor = color.toHexStr();
+ }
+ else
+ {
+ fillForeColor = "";
+ }
+ }
+
String fillPattern = this.getValue(this.getCellElement(mxVsdxConstants.FILL_PATTERN), "0");
if (fillPattern != null && fillPattern.equals("0"))
@@ -517,7 +547,7 @@ public class Style
{
String color = this.getValue(elem, "");
- if (!color.startsWith("#"))
+ if (!"Themed".equals(color) && !color.startsWith("#"))
{
color = pm.getColor(color);
}
diff --git a/src/com/mxgraph/io/vsdx/VsdxShape.java b/src/com/mxgraph/io/vsdx/VsdxShape.java
index 87e1a106..2c42d3b9 100644
--- a/src/com/mxgraph/io/vsdx/VsdxShape.java
+++ b/src/com/mxgraph/io/vsdx/VsdxShape.java
@@ -4,25 +4,17 @@
*/
package com.mxgraph.io.vsdx;
-import com.mxgraph.model.mxCell;
-import com.mxgraph.model.mxGeometry;
-import com.mxgraph.online.Utils;
-import com.mxgraph.util.mxConstants;
-import com.mxgraph.util.mxPoint;
-import com.mxgraph.util.mxResources;
-import com.mxgraph.view.mxGraph;
-
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.HashSet;
import java.util.logging.Logger;
import java.util.zip.Deflater;
@@ -35,6 +27,14 @@ import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import com.mxgraph.model.mxCell;
+import com.mxgraph.model.mxGeometry;
+import com.mxgraph.online.Utils;
+import com.mxgraph.util.mxConstants;
+import com.mxgraph.util.mxPoint;
+import com.mxgraph.util.mxResources;
+import com.mxgraph.view.mxGraph;
+
/**
* This class is a wrapper for one Shape Element.<br/>
* This class is responsible for retrieve all the properties of the shape and add it
@@ -198,6 +198,11 @@ public class VsdxShape extends Shape
this.rotation = this.rotation % 360.0;
this.vertex = vertex;
+
+ mxVsdxTheme theme = model.getThemes().get(page.getCellIntValue("ThemeIndex", 33));
+ int variant = page.getCellIntValue("VariationColorIndex", 0);
+
+ setThemeAndVariant(theme, variant);
}
/**
@@ -1314,6 +1319,7 @@ public class VsdxShape extends Shape
result.put("aspect", "fixed");
String iType = this.imageData.get("iType");
String iData = this.imageData.get("iData");
+
result.put("image", "data:image/" + iType + "," + iData);
return result;
}
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxModel.java b/src/com/mxgraph/io/vsdx/mxVsdxModel.java
index 266837e1..da395dbb 100644
--- a/src/com/mxgraph/io/vsdx/mxVsdxModel.java
+++ b/src/com/mxgraph/io/vsdx/mxVsdxModel.java
@@ -56,6 +56,11 @@ public class mxVsdxModel {
*/
protected Map<String, Style> stylesheets = new HashMap<String, Style>();
+ /**
+ * Map themes indexed by their index
+ */
+ protected Map<Integer, mxVsdxTheme> themes = new HashMap<>();
+
mxPropertiesManager pm;
public mxVsdxModel(Document doc, Map<String, Document> docData, Map<String, String> mediaData)
@@ -79,11 +84,63 @@ public class mxVsdxModel {
this.pm = new mxPropertiesManager();
this.pm.initialise(rootElement, this);
initStylesheets();
+ initThemes();
initMasters();
initPages();
}
/**
+ * Initialize theme objects from the XML files
+ */
+ private void initThemes()
+ {
+ // Lazy build up the master structure
+ if (this.xmlDocs != null)
+ {
+ boolean more = true;
+ int index = 1;
+
+ while (more)
+ {
+ String path = mxVsdxCodec.vsdxPlaceholder + "/theme/theme"+ index +".xml";
+ Document themeDoc = this.xmlDocs.get(path);
+
+ if (themeDoc != null)
+ {
+ Node child = themeDoc.getFirstChild();
+
+ while (child != null)
+ {
+ if (child instanceof Element && ((Element)child).getTagName().equals("a:theme"))
+ {
+ mxVsdxTheme theme = new mxVsdxTheme((Element) child);
+
+ if (theme.getThemeIndex() > -1)
+ {
+ themes.put(theme.getThemeIndex(), theme);
+ }
+ else
+ {
+ //theme index cannot be determined unless the theme is parsed
+ theme.processTheme();
+ themes.put(theme.getThemeIndex(), theme);
+ }
+ break;
+ }
+
+ child = child.getNextSibling();
+ }
+ index++;
+ }
+ else
+ {
+ more = false;
+ }
+ }
+ }
+ }
+
+ /**
* Load the map with the stylesheets elements in the document.<br/>
* The masters are wrapped for instances of mxStyleSheet.
* @param doc Document with the stylesheets.
@@ -237,6 +294,11 @@ public class mxVsdxModel {
return this.pages;
}
+ public Map<Integer, mxVsdxTheme> getThemes()
+ {
+ return this.themes;
+ }
+
protected Element getRelationship(String rid, String path)
{
Document relsDoc = this.xmlDocs.get(path);
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxPage.java b/src/com/mxgraph/io/vsdx/mxVsdxPage.java
index df39b436..136e2f70 100644
--- a/src/com/mxgraph/io/vsdx/mxVsdxPage.java
+++ b/src/com/mxgraph/io/vsdx/mxVsdxPage.java
@@ -59,9 +59,7 @@ public class mxVsdxPage {
this.Id = Integer.valueOf(pageElem.getAttribute(mxVsdxConstants.ID));
this.pageName = pageElem.getAttribute(mxVsdxConstants.NAME);
-
- parseNodes(pageElem, model, "pages");
-
+
ArrayList<Element> pageSheets = mxVsdxUtils.getDirectChildNamedElements(pageElem, "PageSheet");
if (pageSheets.size() > 0)
@@ -75,6 +73,8 @@ public class mxVsdxPage {
this.cellElements.put(n, cellElem);
}
}
+
+ parseNodes(pageElem, model, "pages");
}
/**
@@ -324,8 +324,49 @@ public class mxVsdxPage {
return 1;
}
+
/**
+ * Returns the page scale attribute of this page
+ * @return the PageScale
+ */
+ public double getPageScale()
+ {
+ Element scale = this.cellElements.get("PageScale");
+
+ if (scale != null)
+ {
+ return Double.valueOf(scale.getAttribute("V")) * mxVsdxUtils.conversionFactor;
+ }
+
+ return 1;
+ }
+
+ public String getCellValue(String cellName)
+ {
+ Element cell = this.cellElements.get(cellName);
+
+ if (cell != null)
+ {
+ return cell.getAttribute("V");
+ }
+
+ return null;
+ }
+
+ public int getCellIntValue(String cellName, int defVal)
+ {
+ String val = getCellValue(cellName);
+
+ if (val != null)
+ {
+ return Integer.parseInt(val);
+ }
+
+ return defVal;
+ }
+
+ /**
* Returns the ID of the page
* @return the ID of the page
*/
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxTheme.java b/src/com/mxgraph/io/vsdx/mxVsdxTheme.java
new file mode 100644
index 00000000..8bd628f0
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/mxVsdxTheme.java
@@ -0,0 +1,453 @@
+package com.mxgraph.io.vsdx;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import com.mxgraph.io.vsdx.theme.Color;
+import com.mxgraph.io.vsdx.theme.FillStyle;
+import com.mxgraph.io.vsdx.theme.FillStyleFactory;
+import com.mxgraph.io.vsdx.theme.OoxmlColor;
+import com.mxgraph.io.vsdx.theme.OoxmlColorFactory;
+
+//Holds office 2013 theme data which applies to all office file formats
+public class mxVsdxTheme
+{
+ //Theme names to ID mapping
+ private static Map<String, Integer> themesIds = new HashMap<>();
+
+ //Theme index can be found deep inside the theme file, so this is faster for standard 2013 format
+ static
+ {
+ themesIds.put("Office", 33);
+ themesIds.put("Linear", 34);
+ themesIds.put("Zephyr", 35);
+ themesIds.put("Integral", 36);
+ themesIds.put("Simple", 37);
+ themesIds.put("Whisp", 38);
+ themesIds.put("Daybreak", 39);
+ themesIds.put("Parallel", 40);
+ themesIds.put("Sequence", 41);
+ themesIds.put("Slice", 42);
+ themesIds.put("Ion", 43);
+ themesIds.put("Retrospect", 44);
+ themesIds.put("Organic", 45);
+ themesIds.put("Bubble", 46);
+ themesIds.put("Clouds", 47);
+ themesIds.put("Gemstone", 48);
+ themesIds.put("Lines", 49);
+ themesIds.put("Facet", 50);
+ themesIds.put("Prominence", 51);
+ themesIds.put("Smoke", 52);
+ themesIds.put("Radiance", 53);
+ themesIds.put("Shade", 54);
+ themesIds.put("Pencil", 55);
+ themesIds.put("Pen", 56);
+ themesIds.put("Marker", 57);
+ themesIds.put("Whiteboard", 58);
+ }
+
+ //color id to color name
+ private static Map<Integer, String> colorIds = new HashMap<>();
+
+ //https://msdn.microsoft.com/en-us/library/hh661351%28v=office.12%29.aspx
+ //There are non standard values of 200 -> 206 also which are handled the same as 100 -> 106
+ static
+ {
+ colorIds.put(0, "dk1");
+ colorIds.put(1, "lt1");
+ colorIds.put(2, "accent1");
+ colorIds.put(3, "accent2");
+ colorIds.put(4, "accent3");
+ colorIds.put(5, "accent4");
+ colorIds.put(6, "accent5");
+ colorIds.put(7, "accent6");
+ }
+
+ private Element theme;
+
+ private int themeIndex = -1;
+
+ private int themeVariant = 0;
+
+ //colors handling
+ private Map<String, OoxmlColor> baseColors = new HashMap<>();
+
+ //Dynamic background color (index 8)
+ private OoxmlColor bkgndColor;
+
+ //Variant colors
+ private OoxmlColor[][] variantsColors = new OoxmlColor[4][7];
+
+ private boolean[] isMonotoneVariant = new boolean[4];
+
+ private Color defaultClr = new Color(255, 255, 255);
+
+ //fill style
+ private ArrayList<FillStyle> fillStyles = new ArrayList<>(6);
+
+ private int[] variantEmbellishment = new int[4];
+ private int[][] variantFillIdx = new int[4][4];
+ private int[][] variantLineIdx = new int[4][4];
+ private int[][] variantEffectIdx = new int[4][4];
+ private int[][] variantFontIdx = new int[4][4];
+
+ private boolean isProcessed = false;
+
+ public mxVsdxTheme(Element theme)
+ {
+ this.theme = theme;
+
+ Integer themeId = themesIds.get(theme.getAttribute("name"));
+
+ if (themeId != null)
+ {
+ themeIndex = themeId;
+ }
+ }
+
+ public int getThemeIndex()
+ {
+ return themeIndex;
+ }
+
+ public void setVariant(int variant)
+ {
+ themeVariant = variant;
+ }
+
+ public void processTheme()
+ {
+ if (isProcessed) return;
+
+ try
+ {
+ Node child = theme.getFirstChild();
+
+ while (child != null)
+ {
+ if (child instanceof Element && ((Element)child).getNodeName().equals("a:themeElements"))
+ {
+ Node child2 = child.getFirstChild();
+ while (child2 != null)
+ {
+ if (child2 instanceof Element)
+ {
+ Element elem = (Element)child2;
+ String nodeName = elem.getNodeName();
+ if (nodeName.equals("a:clrScheme"))
+ {
+ //Process the color scheme
+ processColors(elem);
+ }
+ else if (nodeName.equals("a:fontScheme"))
+ {
+ //Process the font scheme
+ processFonts(elem);
+ }
+ else if (nodeName.equals("a:fmtScheme"))
+ {
+ //Process the format scheme
+ processFormats(elem);
+ }
+ else if (nodeName.equals("a:extLst"))
+ {
+ //Process the extra list
+ processExtras(elem);
+ }
+ }
+ child2 = child2.getNextSibling();
+ }
+ }
+ child = child.getNextSibling();
+ }
+ }
+ catch (Exception e)
+ {
+ //cannot parse the theme format, probably it has non-standard format
+ e.printStackTrace();
+ }
+ isProcessed = true;
+ }
+
+ private void processExtras(Element element)
+ {
+ ArrayList<Element> exts = mxVsdxUtils.getDirectChildElements(element);
+
+ for (Element ext : exts)
+ {
+ Element vt = mxVsdxUtils.getDirectFirstChildElement(ext);
+ switch (vt.getNodeName())
+ {
+ case "vt:fmtConnectorScheme":
+ //TODO implement connector format scheme
+ break;
+ case "vt:lineStyles":
+ //TODO implement line styles
+ break;
+ case "vt:fontStylesGroup":
+ //TODO implement font styles
+ break;
+ case "vt:variationStyleSchemeLst":
+ ArrayList<Element> varStyleSchemes = mxVsdxUtils.getDirectChildElements(vt);
+
+ int i=0;
+ for (Element varStyleScheme : varStyleSchemes)
+ {
+ variantEmbellishment[i] = mxVsdxUtils.getIntAttr(varStyleScheme, "embellishment");
+
+ ArrayList<Element> varStyles = mxVsdxUtils.getDirectChildElements(varStyleScheme);
+ int j = 0;
+ for (Element varStyle : varStyles)
+ {
+ variantFillIdx[i][j] = mxVsdxUtils.getIntAttr(varStyle, "fillIdx");
+ variantLineIdx[i][j] = mxVsdxUtils.getIntAttr(varStyle, "lineIdx");
+ variantEffectIdx[i][j] = mxVsdxUtils.getIntAttr(varStyle, "effectIdx");
+ variantFontIdx[i][j] = mxVsdxUtils.getIntAttr(varStyle, "fontIdx");
+ j++;
+ }
+ i++;
+ }
+ break;
+ }
+ }
+ }
+
+ private void processFormats(Element element)
+ {
+ ArrayList<Element> styles = mxVsdxUtils.getDirectChildElements(element);
+ for (Element style : styles)
+ {
+ if (style.getNodeName().equals("a:fillStyleLst"))
+ {
+ ArrayList<Element> fillStyleElems = mxVsdxUtils.getDirectChildElements(style);
+ for (Element fillStyle : fillStyleElems)
+ {
+ fillStyles.add(FillStyleFactory.getFillStyle(fillStyle));
+ }
+ }
+ }
+ }
+
+ private void processFonts(Element element) {
+ // TODO Auto-generated method stub
+
+ }
+
+ private void processColors(Element element)
+ {
+ Node child = element.getFirstChild();
+
+ while (child != null)
+ {
+ if (child instanceof Element)
+ {
+ Element elem = (Element)child;
+ String nodeName = elem.getNodeName();
+ ArrayList<Element> children = mxVsdxUtils.getDirectChildElements(elem);
+ if (nodeName.equals("a:extLst"))
+ {
+ if (children.size() == 3) //the format has three a:ext nodes
+ {
+ if (themeIndex < 0)
+ {
+ extractThemeIndex(children.get(0));
+ }
+ addBkgndColor(children.get(1));
+ addVariantColors(children.get(2));
+ }
+ }
+ else
+ {
+ String clrName = nodeName.substring(2);
+
+ if (children.size() > 0)
+ {
+ addBasicColor(clrName, children.get(0));
+ }
+ }
+ }
+ child = child.getNextSibling();
+ }
+ }
+
+ private void addVariantColors(Element element)
+ {
+ Element parent = mxVsdxUtils.getDirectFirstChildElement(element);
+
+ if (parent != null)
+ {
+ ArrayList<Element> variants = mxVsdxUtils.getDirectChildElements(parent);
+ int i = 0;
+ for (Element variant : variants)
+ {
+ addVariantColorsSet(i++, variant);
+ }
+ }
+ }
+
+ private void addVariantColorsSet(int index, Element variant)
+ {
+ ArrayList<Element> colors = mxVsdxUtils.getDirectChildElements(variant);
+
+ isMonotoneVariant[index] = variant.hasAttribute("monotone");
+
+ for (Element color : colors)
+ {
+ String name = color.getNodeName();
+ switch (name)
+ {
+ case "vt:varColor1":
+ variantsColors[index][0] = OoxmlColorFactory.getOoxmlColor(
+ mxVsdxUtils.getDirectFirstChildElement(color));
+ break;
+ case "vt:varColor2":
+ variantsColors[index][1] = OoxmlColorFactory.getOoxmlColor(
+ mxVsdxUtils.getDirectFirstChildElement(color));
+ break;
+ case "vt:varColor3":
+ variantsColors[index][2] = OoxmlColorFactory.getOoxmlColor(
+ mxVsdxUtils.getDirectFirstChildElement(color));
+ break;
+ case "vt:varColor4":
+ variantsColors[index][3] = OoxmlColorFactory.getOoxmlColor(
+ mxVsdxUtils.getDirectFirstChildElement(color));
+ break;
+ case "vt:varColor5":
+ variantsColors[index][4] = OoxmlColorFactory.getOoxmlColor(
+ mxVsdxUtils.getDirectFirstChildElement(color));
+ break;
+ case "vt:varColor6":
+ variantsColors[index][5] = OoxmlColorFactory.getOoxmlColor(
+ mxVsdxUtils.getDirectFirstChildElement(color));
+ break;
+ case "vt:varColor7":
+ variantsColors[index][6] = OoxmlColorFactory.getOoxmlColor(
+ mxVsdxUtils.getDirectFirstChildElement(color));
+ break;
+ }
+ }
+ }
+
+ private void addBkgndColor(Element element)
+ {
+ Element elem = mxVsdxUtils.getDirectFirstChildElement(element);
+
+ if (elem != null)
+ {
+ bkgndColor = OoxmlColorFactory.getOoxmlColor(mxVsdxUtils.getDirectFirstChildElement(elem));
+ }
+ }
+
+ private void extractThemeIndex(Element element)
+ {
+ Element elem = mxVsdxUtils.getDirectFirstChildElement(element);
+
+ if (elem != null)
+ {
+ themeIndex = Integer.parseInt(elem.getAttribute("schemeEnum"));
+ }
+ }
+
+ private void addBasicColor(String clrName, Element element)
+ {
+ baseColors.put(clrName, OoxmlColorFactory.getOoxmlColor(element));
+ }
+
+ public Color getSchemeColor(String val)
+ {
+ processTheme();
+
+ OoxmlColor color = baseColors.get(val);
+
+ return color != null? color.getColor(this) : defaultClr;
+ }
+
+ // QuickStyleFillColor
+ public Color getStyleColor(int styleColor)
+ {
+ processTheme();
+
+ if (styleColor < 8)
+ {
+ OoxmlColor color = baseColors.get(colorIds.get(styleColor));
+ if (color != null)
+ {
+ return color.getColor(this);
+ }
+ }
+ else if (styleColor == 8)
+ {
+ if (bkgndColor != null)
+ {
+ return bkgndColor.getColor(this);
+ }
+ }
+ else
+ {
+ OoxmlColor color = null;
+ int clrIndex = 0;
+
+ if (styleColor >= 200) //200-206
+ {
+ clrIndex = styleColor - 200;
+ }
+ else if (styleColor >= 100) //100-106
+ {
+ clrIndex = styleColor - 100;
+ }
+ if (clrIndex >= 0 && clrIndex <= 6) //0 - 6
+ {
+ color = variantsColors[themeVariant][clrIndex];
+ }
+
+ if (color != null)
+ {
+ return color.getColor(this);
+ }
+ }
+ return defaultClr;
+ }
+
+ //Get fill color based on QuickStyleFillColor & QuickStyleFillMatrix
+ public Color getFillColor(int quickStyleFillColor, int quickStyleFillMatrix)
+ {
+ processTheme();
+
+ int fillColorStyle = quickStyleFillColor;
+ FillStyle fillStyle = null;
+ switch (quickStyleFillMatrix)
+ {
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ fillStyle = fillStyles.get(quickStyleFillMatrix - 1);
+ break;
+ case 100:
+ case 101:
+ case 102:
+ case 103:
+ if (isMonotoneVariant[themeVariant]) fillColorStyle = 100;
+
+ int index = quickStyleFillMatrix - 100;
+ //get style index of variants
+ fillStyle = fillStyles.get(variantFillIdx[themeVariant][index] - 1);
+ break;
+ }
+
+ if (fillStyle != null)
+ {
+ return fillStyle.applyStyle(fillColorStyle, this);
+ }
+ else
+ {
+ return getStyleColor(fillColorStyle);
+ }
+ }
+}
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxUtils.java b/src/com/mxgraph/io/vsdx/mxVsdxUtils.java
index 62b62869..4dacc1b3 100644
--- a/src/com/mxgraph/io/vsdx/mxVsdxUtils.java
+++ b/src/com/mxgraph/io/vsdx/mxVsdxUtils.java
@@ -51,6 +51,79 @@ public class mxVsdxUtils
}
/**
+ * Returns a collection of direct child Elements
+ * @param parent the parent whose direct children will be processed
+ * @return a collection of all child Elements
+ */
+ public static ArrayList<Element> getDirectChildElements(Element parent)
+ {
+ ArrayList<Element> result = new ArrayList<Element>();
+
+ for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ if (child instanceof Element)
+ {
+ result.add((Element)child);
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Returns the first direct child Element
+ * @param parent the parent whose direct first child will be processed
+ * @return the first child Element
+ */
+ public static Element getDirectFirstChildElement(Element parent)
+ {
+ for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling())
+ {
+ if (child instanceof Element)
+ {
+ return (Element)child;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Return the value of an integer attribute or the default value
+ * @param elem Element
+ * @param attName Attribute name
+ * @param defVal default value
+ * @return the parsed attribute value or the default value
+ */
+ public static int getIntAttr(Element elem, String attName, int defVal)
+ {
+ try
+ {
+ String val = elem.getAttribute(attName);
+ if (val != null)
+ {
+ return Integer.parseInt(val);
+ }
+ }
+ catch (NumberFormatException e)
+ {
+ //nothing, just return the default value
+ }
+ return defVal;
+ }
+
+ /**
+ * Return the value of an integer attribute or zero
+ * @param elem Element
+ * @param attName Attribute name
+ * @return the parsed attribute value or zero
+ */
+ public static int getIntAttr(Element elem, String attName)
+ {
+ return getIntAttr(elem, attName, 0);
+ }
+
+ /**
* Returns the string that represents the content of a given style map.
* @param styleMap Map with the styles values
* @return string that represents the style.
diff --git a/src/com/mxgraph/io/vsdx/theme/Color.java b/src/com/mxgraph/io/vsdx/theme/Color.java
new file mode 100644
index 00000000..b11b41ed
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/Color.java
@@ -0,0 +1,92 @@
+package com.mxgraph.io.vsdx.theme;
+
+public class Color {
+ //Special none color
+ public static final Color NONE = new Color(-1, -1, -1);
+
+ private int red, green, blue;
+ private Color gradientClr;
+
+ public Color(int red, int green, int blue) {
+ this.red = red;
+ this.green = green;
+ this.blue = blue;
+ }
+
+ public int getRed() {
+ return red;
+ }
+
+ public void setRed(int red) {
+ this.red = red;
+ }
+
+ public int getGreen() {
+ return green;
+ }
+
+ public void setGreen(int green) {
+ this.green = green;
+ }
+
+ public int getBlue() {
+ return blue;
+ }
+
+ public void setBlue(int blue) {
+ this.blue = blue;
+ }
+
+ public HSLColor toHsl()
+ {
+ double r = this.getRed()/255.0, g = this.getGreen()/255.0, b = this.getBlue()/255.0;
+ double max = Math.max(r, Math.max(g, b));
+ double min = Math.min(r, Math.min(g, b));
+ double l = (max + min) / 2.0;
+ double h, s;
+
+ if(max == min)
+ {
+ h = s = 0; // achromatic
+ }
+ else
+ {
+ double d = max - min;
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
+ if (max == r)
+ {
+ h = (g - b) / d + (g < b ? 6 : 0);
+ }
+ else if (max == g)
+ {
+ h = (b - r) / d + 2;
+ }
+ else
+ {
+ h = (r - g) / d + 4;
+ }
+
+ h /= 6;
+ }
+ return new HSLColor(h, s, l);
+ }
+
+ public static Color decodeColorHex(String hex)
+ {
+ int color = Integer.parseInt(hex, 16);
+ return new Color((color >> 16) & 0xff , (color >> 8) & 0xff, color & 0xff);
+ }
+
+ public String toHexStr() {
+ int clr = (red << 16) | (green << 8) | blue;
+ return "#" + Integer.toHexString(clr);
+ }
+
+ public Color getGradientClr() {
+ return gradientClr;
+ }
+
+ public void setGradientClr(Color gradientClr) {
+ this.gradientClr = gradientClr;
+ }
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/FillStyle.java b/src/com/mxgraph/io/vsdx/theme/FillStyle.java
new file mode 100644
index 00000000..2b6710c4
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/FillStyle.java
@@ -0,0 +1,7 @@
+package com.mxgraph.io.vsdx.theme;
+
+import com.mxgraph.io.vsdx.mxVsdxTheme;
+
+public interface FillStyle {
+ public Color applyStyle(int styleValue, mxVsdxTheme theme);
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/FillStyleFactory.java b/src/com/mxgraph/io/vsdx/theme/FillStyleFactory.java
new file mode 100644
index 00000000..432a2d74
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/FillStyleFactory.java
@@ -0,0 +1,36 @@
+package com.mxgraph.io.vsdx.theme;
+
+import org.w3c.dom.Element;
+
+import com.mxgraph.io.vsdx.mxVsdxUtils;
+
+public class FillStyleFactory
+{
+ public static FillStyle getFillStyle(Element fillStyle)
+ {
+ FillStyle fillObj = null;
+ switch (fillStyle.getNodeName())
+ {
+ case "a:solidFill":
+ fillObj = new SolidFillStyle(OoxmlColorFactory.getOoxmlColor(
+ mxVsdxUtils.getDirectFirstChildElement(fillStyle)));
+ break;
+ case "a:noFill":
+ fillObj = new NoFillStyle();
+ break;
+ case "a:gradFill":
+ fillObj = new GradFill(fillStyle);
+ break;
+ case "a:blipFill":
+ //TODO implement Picture Fill if it can be approximated in mxGraph
+ break;
+ case "a:pattFill":
+ //TODO implement Pattern Fill if it can be approximated in mxGraph
+ break;
+ case "a:grpFill":
+ //TODO implement Group Fill if it can be approximated in mxGraph
+ break;
+ }
+ return fillObj;
+ }
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/GradFill.java b/src/com/mxgraph/io/vsdx/theme/GradFill.java
new file mode 100644
index 00000000..bfeb31ea
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/GradFill.java
@@ -0,0 +1,46 @@
+package com.mxgraph.io.vsdx.theme;
+
+import java.util.ArrayList;
+
+import org.w3c.dom.Element;
+
+import com.mxgraph.io.vsdx.mxVsdxTheme;
+import com.mxgraph.io.vsdx.mxVsdxUtils;
+
+//mxGraph doesn't support such a complex gradient fill style. So, we will approximate the gradient by the first two colors only
+public class GradFill implements FillStyle
+{
+ private OoxmlColor color1 = null, color2 = null;
+
+ public GradFill(Element elem)
+ {
+ ArrayList<Element> gsLst = mxVsdxUtils.getDirectChildNamedElements(elem, "a:gsLst");
+
+ if (gsLst.size() > 0)
+ {
+ ArrayList<Element> gs = mxVsdxUtils.getDirectChildElements(gsLst.get(0));
+
+ if (gs.size() >= 2)
+ {
+ color1 = OoxmlColorFactory.getOoxmlColor(
+ mxVsdxUtils.getDirectFirstChildElement(gs.get(0)));
+ color2 = OoxmlColorFactory.getOoxmlColor(
+ mxVsdxUtils.getDirectFirstChildElement(gs.get(1)));
+ }
+ }
+
+ if (color1 == null)
+ {
+ color1 = color2 = new SrgbClr("FFFFFF");
+ }
+ }
+
+ @Override
+ public Color applyStyle(int styleValue, mxVsdxTheme theme)
+ {
+ Color color = color1.getColor(styleValue, theme);
+ color.setGradientClr(color2.getColor(styleValue, theme));
+ return color;
+ }
+
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/HSLColor.java b/src/com/mxgraph/io/vsdx/theme/HSLColor.java
new file mode 100644
index 00000000..eaae1597
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/HSLColor.java
@@ -0,0 +1,120 @@
+package com.mxgraph.io.vsdx.theme;
+
+public class HSLColor
+{
+ private double hue, sat, lum;
+
+ public HSLColor(double hue, double sat, double lum)
+ {
+ this.hue = hue;
+ this.sat = sat;
+ this.lum = lum;
+ }
+
+ public double getHue() {
+ return hue;
+ }
+
+
+
+ public void setHue(double hue) {
+ this.hue = hue;
+ }
+
+
+
+ public double getSat() {
+ return sat;
+ }
+
+
+
+ public void setSat(double sat) {
+ this.sat = sat;
+ }
+
+
+
+ public double getLum() {
+ return lum;
+ }
+
+
+
+ public void setLum(double lum) {
+ this.lum = lum;
+ }
+
+ private double hue2rgb(double p, double q, double t)
+ {
+ if (t < 0) t += 1;
+ if (t > 1) t -= 1;
+ if (t < 1/6.0) return p + (q - p) * 6 * t;
+ if (t < 0.5) return q;
+ if (t < 2/3.0) return p + (q - p) * (2/3.0 - t) * 6;
+ return p;
+ }
+
+ public Color toRgb()
+ {
+ double r, g, b;
+
+ double h = this.hue;
+ double s = this.sat;
+ double l = this.lum;
+
+
+ if(s == 0)
+ {
+ r = g = b = l; // achromatic
+ }
+ else
+ {
+ double q = l < 0.5 ? l * (1 + s) : l + s - l * s;
+ double p = 2 * l - q;
+ r = hue2rgb(p, q, h + 1/3.0);
+ g = hue2rgb(p, q, h);
+ b = hue2rgb(p, q, h - 1/3.0);
+ }
+
+ return new Color((int) (r * 255), (int) (g * 255), (int) (b * 255));
+ }
+
+ // Force a number between 0 and 1
+ private double clamp01(double val)
+ {
+ return Math.min(1, Math.max(0, val));
+ }
+
+ //lighten or tint
+ public HSLColor tint (int amount)
+ {
+// HSLColor hsl = color.toHsl();
+ this.lum *= (1 + (amount / 100.0));
+ this.lum = clamp01(this.lum);
+ return this;
+ }
+
+ //darken or shade
+ public HSLColor shade(int amount)
+ {
+ this.lum *= amount / 100.0;
+ this.lum = clamp01(this.lum);
+ return this;
+ }
+
+ public HSLColor satMod(int amount)
+ {
+ this.sat *= amount / 100.0;
+ this.sat = clamp01(this.sat);
+ return this;
+ }
+
+ public HSLColor lumMod(int amount)
+ {
+ this.lum *= amount / 100.0;
+ this.lum = clamp01(this.lum);
+ return this;
+ }
+
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/HslClr.java b/src/com/mxgraph/io/vsdx/theme/HslClr.java
new file mode 100644
index 00000000..a6409195
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/HslClr.java
@@ -0,0 +1,12 @@
+package com.mxgraph.io.vsdx.theme;
+
+public class HslClr extends OoxmlColor {
+ private double hue, sat, lum;
+
+ public HslClr(int hue, int sat, int lum) {
+ this.hue = hue / 360.0;
+ this.sat = sat / 100.0;
+ this.lum = lum / 100.0;
+ color = new HSLColor(hue, sat, lum).toRgb();
+ }
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/NoFillStyle.java b/src/com/mxgraph/io/vsdx/theme/NoFillStyle.java
new file mode 100644
index 00000000..8b433900
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/NoFillStyle.java
@@ -0,0 +1,15 @@
+package com.mxgraph.io.vsdx.theme;
+
+import com.mxgraph.io.vsdx.mxVsdxTheme;
+
+public class NoFillStyle implements FillStyle
+{
+
+ @Override
+ public Color applyStyle(int styleValue, mxVsdxTheme theme)
+ {
+ return Color.NONE;
+ }
+
+}
+ \ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/theme/OoxmlColor.java b/src/com/mxgraph/io/vsdx/theme/OoxmlColor.java
new file mode 100644
index 00000000..f7685eda
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/OoxmlColor.java
@@ -0,0 +1,253 @@
+package com.mxgraph.io.vsdx.theme;
+
+import com.mxgraph.io.vsdx.mxVsdxTheme;
+
+abstract public class OoxmlColor
+{
+// a:tint Tint
+ private int tint = 0;
+// a:shade Shade
+ private int shade = 0;
+// a:comp Complement
+ private int comp = 0;
+// a:inv Inverse
+ private int inv = 0;
+// a:gray Gray
+ private int gray = 0;
+// a:alpha Alpha
+ private int alpha = 0;
+// a:alphaOff Alpha Offset
+ private int alphaOff = 0;
+// a:alphaMod Alpha Modulation
+ private int alphaMod = 0;
+// a:hue Hue
+ private int hue = 0;
+// a:hueOff Hue Offset
+ private int hueOff = 0;
+// a:hueMod Hue Modulate
+ private int hueMod = 0;
+// a:sat Saturation
+ private int sat = 0;
+// a:satOff Saturation Offset
+ private int satOff = 0;
+// a:satMod Saturation Modulation
+ private int satMod = 0;
+// a:lum Luminance
+ private int lum = 0;
+// a:lumOff Luminance Offset
+ private int lumOff = 0;
+// a:lumMod Luminance Modulation
+ private int lumMod = 0;
+// a:red Red
+ private int red = 0;
+// a:redOff Red Offset
+ private int redOff = 0;
+// a:redMod Red Modulation
+ private int redMod = 0;
+// a:green Green
+ private int green = 0;
+// a:greenOff Green Offset
+ private int greenOff = 0;
+// a:greenMod Green Modification
+ private int greenMod = 0;
+// a:blue Blue
+ private int blue = 0;
+// a:blueOff Blue Offset
+ private int blueOff = 0;
+// a:blueMod Blue Modification
+ private int blueMod = 0;
+// a:gamma Gamma
+ private int gamma = 0;
+// a:invGamma Inverse Gamma
+ private int invGamma = 0;
+
+ protected Color color;
+
+ protected boolean isDynamic = false;
+
+ protected boolean isInitialized = false;
+
+ protected boolean hasEffects = false;
+
+ protected void calcColor(int styleColor, mxVsdxTheme theme)
+ {
+ if (hasEffects)
+ {
+ //TODO complete the list of effects
+ //currently we support tint, shade, satMod, lumMod
+ HSLColor hslColor = color.toHsl();
+ if (tint != 0)
+ {
+ hslColor.tint(tint);
+ }
+ if (shade != 0)
+ {
+ hslColor.shade(shade);
+ }
+ if (satMod != 0)
+ {
+ hslColor.satMod(satMod);
+ }
+ if (lumMod != 0)
+ {
+ hslColor.lumMod(lumMod);
+ }
+ color = hslColor.toRgb();
+ }
+ }
+
+ public Color getColor(int styleColor, mxVsdxTheme theme)
+ {
+ if (isDynamic || !isInitialized)
+ {
+ calcColor(styleColor, theme);
+ isInitialized = true;
+ }
+ return color;
+ }
+
+ public Color getColor(mxVsdxTheme theme)
+ {
+ return getColor(-1, theme);
+ }
+
+ public void setTint(int tint) {
+ this.tint = tint;
+ hasEffects = true;
+ }
+
+ public void setShade(int shade) {
+ this.shade = shade;
+ hasEffects = true;
+ }
+
+ public void setComp(int comp) {
+ this.comp = comp;
+ hasEffects = true;
+ }
+
+ public void setInv(int inv) {
+ this.inv = inv;
+ hasEffects = true;
+ }
+
+ public void setGray(int gray) {
+ this.gray = gray;
+ hasEffects = true;
+ }
+
+ public void setAlpha(int alpha) {
+ this.alpha = alpha;
+ hasEffects = true;
+ }
+
+ public void setAlphaOff(int alphaOff) {
+ this.alphaOff = alphaOff;
+ hasEffects = true;
+ }
+
+ public void setAlphaMod(int alphaMod) {
+ this.alphaMod = alphaMod;
+ hasEffects = true;
+ }
+
+ public void setHue(int hue) {
+ this.hue = hue;
+ hasEffects = true;
+ }
+
+ public void setHueOff(int hueOff) {
+ this.hueOff = hueOff;
+ hasEffects = true;
+ }
+
+ public void setHueMod(int hueMod) {
+ this.hueMod = hueMod;
+ hasEffects = true;
+ }
+
+ public void setSat(int sat) {
+ this.sat = sat;
+ hasEffects = true;
+ }
+
+ public void setSatOff(int satOff) {
+ this.satOff = satOff;
+ hasEffects = true;
+ }
+
+ public void setSatMod(int satMod) {
+ this.satMod = satMod;
+ hasEffects = true;
+ }
+
+ public void setLum(int lum) {
+ this.lum = lum;
+ hasEffects = true;
+ }
+
+ public void setLumOff(int lumOff) {
+ this.lumOff = lumOff;
+ hasEffects = true;
+ }
+
+ public void setLumMod(int lumMod) {
+ this.lumMod = lumMod;
+ hasEffects = true;
+ }
+
+ public void setRed(int red) {
+ this.red = red;
+ hasEffects = true;
+ }
+
+ public void setRedOff(int redOff) {
+ this.redOff = redOff;
+ hasEffects = true;
+ }
+
+ public void setRedMod(int redMod) {
+ this.redMod = redMod;
+ hasEffects = true;
+ }
+
+ public void setGreen(int green) {
+ this.green = green;
+ hasEffects = true;
+ }
+
+ public void setGreenOff(int greenOff) {
+ this.greenOff = greenOff;
+ hasEffects = true;
+ }
+
+ public void setGreenMod(int greenMod) {
+ this.greenMod = greenMod;
+ hasEffects = true;
+ }
+
+ public void setBlue(int blue) {
+ this.blue = blue;
+ hasEffects = true;
+ }
+
+ public void setBlueOff(int blueOff) {
+ this.blueOff = blueOff;
+ hasEffects = true;
+ }
+
+ public void setBlueMod(int blueMod) {
+ this.blueMod = blueMod;
+ hasEffects = true;
+ }
+
+ public void setGamma(int gamma) {
+ this.gamma = gamma;
+ hasEffects = true;
+ }
+
+ public void setInvGamma(int invGamma) {
+ this.invGamma = invGamma;
+ hasEffects = true;
+ }
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/OoxmlColorFactory.java b/src/com/mxgraph/io/vsdx/theme/OoxmlColorFactory.java
new file mode 100644
index 00000000..2eaffa19
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/OoxmlColorFactory.java
@@ -0,0 +1,98 @@
+package com.mxgraph.io.vsdx.theme;
+
+import java.util.ArrayList;
+
+import org.w3c.dom.Element;
+
+import com.mxgraph.io.vsdx.mxVsdxUtils;
+
+public class OoxmlColorFactory {
+
+ //TODO Refactor the code such that each class parse itself
+ public static OoxmlColor getOoxmlColor(Element element)
+ {
+ OoxmlColor color = null;
+ String nodeName = element.getNodeName();
+ switch (nodeName)
+ {
+ case "a:scrgbClr":
+ color = new ScrgbClr(
+ Integer.parseInt(element.getAttribute("r")),
+ Integer.parseInt(element.getAttribute("g")),
+ Integer.parseInt(element.getAttribute("b")));
+ break;
+ case "a:srgbClr":
+ color = new SrgbClr(element.getAttribute("val"));
+ break;
+ case "a:hslClr":
+ color = new HslClr(
+ Integer.parseInt(element.getAttribute("hue")),
+ Integer.parseInt(element.getAttribute("sat")),
+ Integer.parseInt(element.getAttribute("lum")));
+ break;
+ case "a:sysClr":
+ color = new SysClr(
+ element.getAttribute("val"),
+ element.getAttribute("lastClr")
+ );
+ break;
+ case "a:schemeClr":
+ color = new SchemeClr(element.getAttribute("val"));
+ break;
+ case "a:prstClr":
+ color = new SrgbClr(element.getAttribute("val"));
+ break;
+
+ }
+
+ ArrayList<Element> effects = mxVsdxUtils.getDirectChildElements(element);
+
+ for (Element effect : effects)
+ {
+ int effVal = Integer.parseInt(effect.getAttribute("val")) / 1000; //these values are multiplied by 10,000 so we divide by 1,000 to keep the percentage only
+ String effName = effect.getNodeName();
+ switch(effName)
+ {
+ case "a:tint":
+ color.setTint(effVal);
+ break;
+ case "a:shade":
+ color.setShade(effVal);
+ break;
+ case "a:satMod":
+ color.setSatMod(effVal);
+ break;
+ case "a:lumMod":
+ color.setLumMod(effVal);
+ break;
+ //TODO complete the list when supported
+// a:comp Complement
+// a:inv Inverse
+// a:gray Gray
+// a:alpha Alpha
+// a:alphaOff Alpha Offset
+// a:alphaMod Alpha Modulation
+// a:hue Hue
+// a:hueOff Hue Offset
+// a:hueMod Hue Modulate
+// a:sat Saturation
+// a:satOff Saturation Offset
+// a:lum Luminance
+// a:lumOff Luminance Offset
+// a:red Red
+// a:redOff Red Offset
+// a:redMod Red Modulation
+// a:green Green
+// a:greenOff Green Offset
+// a:greenMod Green Modification
+// a:blue Blue
+// a:blueOff Blue Offset
+// a:blueMod Blue Modification
+// a:gamma Gamma
+// a:invGamma Inverse Gamma
+ }
+ }
+ return color;
+
+ }
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/PrstClr.java b/src/com/mxgraph/io/vsdx/theme/PrstClr.java
new file mode 100644
index 00000000..f957280d
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/PrstClr.java
@@ -0,0 +1,155 @@
+package com.mxgraph.io.vsdx.theme;
+
+public class PrstClr extends OoxmlColor {
+ private String val;
+
+
+ public PrstClr(String val) {
+ this.val = val;
+ //TODO Implement this if it is used
+ color = new Color(255, 255, 255);
+
+// aliceBlue Alice Blue Preset Color
+// antiqueWhite Antique White Preset Color
+// aqua Aqua Preset Color
+// aquamarine Aquamarine Preset Color
+// azure Azure Preset Color
+// beige Beige Preset Color
+// bisque Bisque Preset Color
+// black Black Preset Color
+// blanchedAlmond Blanched Almond Preset Color
+// blue Blue Preset Color
+// blueViolet Blue Violet Preset Color
+// brown Brown Preset Color
+// burlyWood Burly Wood Preset Color
+// cadetBlue Cadet Blue Preset Color
+// chartreuse Chartreuse Preset Color
+// chocolate Chocolate Preset Color
+// coral Coral Preset Color
+// cornflowerBlue Cornflower Blue Preset Color
+// cornsilk Cornsilk Preset Color
+// crimson Crimson Preset Color
+// cyan Cyan Preset Color
+// dkBlue Dark Blue Preset Color
+// dkCyan Dark Cyan Preset Color
+// dkGoldenrod Dark Goldenrod Preset Color
+// dkGray Dark Gray Preset Color
+// dkGreen Dark Green Preset Color
+// dkKhaki Dark Khaki Preset Color
+// dkMagenta Dark Magenta Preset Color
+// dkOliveGreen Dark Olive Green Preset Color
+// dkOrange Dark Orange Preset Color
+// dkOrchid Dark Orchid Preset Color
+// dkRed Dark Red Preset Color
+// dkSalmon Dark Salmon Preset Color
+// dkSeaGreen Dark Sea Green Preset Color
+// dkSlateBlue Dark Slate Blue Preset Color
+// dkSlateGray Dark Slate Gray Preset Color
+// dkTurquoise Dark Turquoise Preset Color
+// dkViolet Dark Violet Preset Color
+// deepPink Deep Pink Preset Color
+// deepSkyBlue Deep Sky Blue Preset Color
+// dimGray Dim Gray Preset Color
+// dodgerBlue Dodger Blue Preset Color
+// firebrick Firebrick Preset Color
+// floralWhite Floral White Preset Color
+// forestGreen Forest Green Preset Color
+// fuchsia Fuchsia Preset Color
+// gainsboro Gainsboro Preset Color
+// ghostWhite Ghost White Preset Color
+// gold Gold Preset Color
+// goldenrod Goldenrod Preset Color
+// gray Gray Preset Color
+// green Green Preset Color
+// greenYellow Green Yellow Preset Color
+// honeydew Honeydew Preset Color
+// hotPink Hot Pink Preset Color
+// indianRed Indian Red Preset Color
+// indigo Indigo Preset Color
+// ivory Ivory Preset Color
+// khaki Khaki Preset Color
+// lavender Lavender Preset Color
+// lavenderBlush Lavender Blush Preset Color
+// lawnGreen Lawn Green Preset Color
+// lemonChiffon Lemon Chiffon Preset Color
+// ltBlue Light Blue Preset Color
+// ltCoral Light Coral Preset Color
+// ltCyan Light Cyan Preset Color
+// ltGoldenrodYellow Light Goldenrod Yellow Preset Color
+// ltGray Light Gray Preset Color
+// ltGreen Light Green Preset Color
+// ltPink Light Pink Preset Color
+// ltSalmon Light Salmon Preset Color
+// ltSeaGreen Light Sea Green Preset Color
+// ltSkyBlue Light Sky Blue Preset Color
+// ltSlateGray Light Slate Gray Preset Color
+// ltSteelBlue Light Steel Blue Preset Color
+// ltYellow Light Yellow Preset Color
+// lime Lime Preset Color
+// limeGreen Lime Green Preset Color
+// linen Linen Preset Color
+// magenta Magenta Preset Color
+// maroon Maroon Preset Color
+// medAquamarine Medium Aquamarine Preset Color
+// medBlue Medium Blue Preset Color
+// medOrchid Medium Orchid Preset Color
+// medPurple Medium Purple Preset Color
+// medSeaGreen Medium Sea Green Preset Color
+// medSlateBlue Medium Slate Blue Preset Color
+// medSpringGreen Medium Spring Green Preset Color
+// medTurquoise Medium Turquoise Preset Color
+// medVioletRed Medium Violet Red Preset Color
+// midnightBlue Midnight Blue Preset Color
+// mintCream Mint Cream Preset Color
+// mistyRose Misty Rose Preset Color
+// moccasin Moccasin Preset Color
+// navajoWhite Navajo White Preset Color
+// navy Navy Preset Color
+// oldLace Old Lace Preset Color
+// olive Olive Preset Color
+// oliveDrab Olive Drab Preset Color
+// orange Orange Preset Color
+// orangeRed Orange Red Preset Color
+// orchid Orchid Preset Color
+// paleGoldenrod Pale Goldenrod Preset Color
+// paleGreen Pale Green Preset Color
+// paleTurquoise Pale Turquoise Preset Color
+// paleVioletRed Pale Violet Red Preset Color
+// papayaWhip Papaya Whip Preset Color
+// peachPuff Peach Puff Preset Color
+// peru Peru Preset Color
+// pink Pink Preset Color
+// plum Plum Preset Color
+// powderBlue Powder Blue Preset Color
+// purple Purple Preset Color
+// red Red Preset Color
+// rosyBrown Rosy Brown Preset Color
+// royalBlue Royal Blue Preset Color
+// saddleBrown Saddle Brown Preset Color
+// salmon Salmon Preset Color
+// sandyBrown Sandy Brown Preset Color
+// seaGreen Sea Green Preset Color
+// seaShell Sea Shell Preset Color
+// sienna Sienna Preset Color
+// silver Silver Preset Color
+// skyBlue Sky Blue Preset Color
+// slateBlue Slate Blue Preset Color
+// slateGray Slate Gray Preset Color
+// snow Snow Preset Color
+// springGreen Spring Green Preset Color
+// steelBlue Steel Blue Preset Color
+// tan Tan Preset Color
+// teal Teal Preset Color
+// thistle Thistle Preset Color
+// tomato Tomato Preset Color
+// turquoise Turquoise Preset Color
+// violet Violet Preset Color
+// wheat Wheat Preset Color
+// white White Preset Color
+// whiteSmoke White Smoke Preset Color
+// yellow Yellow Preset Color
+// yellowGreen Yellow Green Preset Color
+ }
+
+
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/SchemeClr.java b/src/com/mxgraph/io/vsdx/theme/SchemeClr.java
new file mode 100644
index 00000000..979a3dbd
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/SchemeClr.java
@@ -0,0 +1,45 @@
+package com.mxgraph.io.vsdx.theme;
+
+import com.mxgraph.io.vsdx.mxVsdxTheme;
+
+public class SchemeClr extends OoxmlColor
+{
+ private String val;
+
+// bg1 Background Color 1
+// tx1 Text Color 1
+// bg2 Background Color 2
+// tx2 Text Color 2
+// accent1 Accent Color 1
+// accent2 Accent Color 2
+// accent3 Accent Color 3
+// accent4 Accent Color 4
+// accent5 Accent Color 5
+// accent6 Accent Color 6
+// hlink Hyperlink Color
+// folHlink Followed Hyperlink Color
+// phClr Style Color
+// dk1 Dark Color 1
+// lt1 Light Color 1
+// dk2 Dark Color 2
+// lt2 Light Color 2
+
+ public SchemeClr(String val)
+ {
+ isDynamic = true;
+ this.val = val;
+ }
+
+ protected void calcColor(int styleColor, mxVsdxTheme theme)
+ {
+ if (!"phClr".equals(val))
+ {
+ color = theme.getSchemeColor(val);
+ isDynamic = false;
+ } else {
+ color = theme.getStyleColor(styleColor);
+ }
+ super.calcColor(styleColor, theme);
+ }
+
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/ScrgbClr.java b/src/com/mxgraph/io/vsdx/theme/ScrgbClr.java
new file mode 100644
index 00000000..c4bc5c0c
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/ScrgbClr.java
@@ -0,0 +1,14 @@
+package com.mxgraph.io.vsdx.theme;
+
+
+public class ScrgbClr extends OoxmlColor{
+ private int r,g,b;
+
+
+ public ScrgbClr(int r, int g, int b) {
+ this.r = r;
+ this.g = g;
+ this.b = b;
+ color = new Color(r, g, b);
+ }
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/SolidFillStyle.java b/src/com/mxgraph/io/vsdx/theme/SolidFillStyle.java
new file mode 100644
index 00000000..f629aaea
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/SolidFillStyle.java
@@ -0,0 +1,20 @@
+package com.mxgraph.io.vsdx.theme;
+
+import com.mxgraph.io.vsdx.mxVsdxTheme;
+
+public class SolidFillStyle implements FillStyle
+{
+
+ private OoxmlColor color;
+
+ public SolidFillStyle(OoxmlColor color)
+ {
+ this.color = color;
+ }
+
+ @Override
+ public Color applyStyle(int styleValue, mxVsdxTheme theme)
+ {
+ return color.getColor(styleValue, theme);
+ }
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/SrgbClr.java b/src/com/mxgraph/io/vsdx/theme/SrgbClr.java
new file mode 100644
index 00000000..b0922789
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/SrgbClr.java
@@ -0,0 +1,10 @@
+package com.mxgraph.io.vsdx.theme;
+
+
+public class SrgbClr extends OoxmlColor {
+ private String hexVal;
+ public SrgbClr(String hexVal) {
+ this.hexVal = hexVal;
+ color = Color.decodeColorHex(hexVal);
+ }
+}
diff --git a/src/com/mxgraph/io/vsdx/theme/SysClr.java b/src/com/mxgraph/io/vsdx/theme/SysClr.java
new file mode 100644
index 00000000..c85f84a1
--- /dev/null
+++ b/src/com/mxgraph/io/vsdx/theme/SysClr.java
@@ -0,0 +1,57 @@
+package com.mxgraph.io.vsdx.theme;
+
+public class SysClr extends OoxmlColor
+{
+ private String val, lastClr;
+
+ public SysClr(String val, String lastClr)
+ {
+ this.val = val;
+ this.lastClr = lastClr;
+ //System color depends on the system. So, if lastClr is not given, guess best common system color
+ String hexVal = lastClr;
+
+ if (hexVal == null)
+ {
+ switch(val)
+ {
+ case "windowText": hexVal = "000000"; break;
+ case "window": hexVal = "FFFFFF"; break;
+ //TODO complete the cases! but this is rarely used
+// scrollBar Scroll Bar System Color
+// background Background System Color
+// activeCaption Active Caption System Color
+// inactiveCaption Inactive Caption System Color
+// menu Menu System Color
+// windowFrame Window Frame System Color
+// menuText Menu Text System Color
+// captionText Caption Text System Color
+// activeBorder Active Border System Color
+// inactiveBorder Inactive Border System Color
+// appWorkspace Application Workspace System Color
+// highlight Highlight System Color
+// highlightText Highlight Text System Color
+// btnFace Button Face System Color
+// btnShadow Button Shadow System Color
+// grayText Gray Text System Color
+// btnText Button Text System Color
+// inactiveCaptionText Inactive Caption Text System Color
+// btnHighlight Button Highlight System Color
+// 3dDkShadow 3D Dark System Color
+// 3dLight 3D Light System Color
+// infoText Info Text System Color
+// infoBk Info Back System Color
+// hotLight Hot Light System Color
+// gradientActiveCaption Gradient Active Caption System Color
+// gradientInactiveCaption Gradient Inactive Caption System Color
+// menuHighlight Menu Highlight System Color
+// menuBar Menu Bar System Color
+ default:
+ hexVal = "FFFFFF";
+ }
+ }
+ color = Color.decodeColorHex(hexVal);
+ }
+
+
+}
diff --git a/war/cache.manifest b/war/cache.manifest
index 1b8c3a0d..7792099b 100644
--- a/war/cache.manifest
+++ b/war/cache.manifest
@@ -1,7 +1,7 @@
CACHE MANIFEST
# THIS FILE WAS GENERATED. DO NOT MODIFY!
-# 03/16/2017 05:01 PM
+# 03/24/2017 11:20 AM
app.html
index.html?offline=1
diff --git a/war/images/sidebar-gcp.png b/war/images/sidebar-gcp.png
index cbe8f11a..e76b17c2 100644
--- a/war/images/sidebar-gcp.png
+++ b/war/images/sidebar-gcp.png
Binary files differ
diff --git a/war/js/app.min.js b/war/js/app.min.js
index b6881930..fe2ded57 100644
--- a/war/js/app.min.js
+++ b/war/js/app.min.js
@@ -208,17 +208,17 @@ document.createElement("style");a.type="text/css";a.styleSheet.cssText=mxClient.
mxClient.dispose)));
var mxLog={consoleName:"Console",TRACE:!1,DEBUG:!0,WARN:!0,buffer:"",init:function(){if(null==mxLog.window&&null!=document.body){var a=mxLog.consoleName+" - mxGraph "+mxClient.VERSION,c=document.createElement("table");c.setAttribute("width","100%");c.setAttribute("height","100%");var f=document.createElement("tbody"),d=document.createElement("tr"),b=document.createElement("td");b.style.verticalAlign="top";mxLog.textarea=document.createElement("textarea");mxLog.textarea.setAttribute("wrap","off");
mxLog.textarea.setAttribute("readOnly","true");mxLog.textarea.style.height="100%";mxLog.textarea.style.resize="none";mxLog.textarea.value=mxLog.buffer;mxLog.textarea.style.width=mxClient.IS_NS&&"BackCompat"!=document.compatMode?"99%":"100%";b.appendChild(mxLog.textarea);d.appendChild(b);f.appendChild(d);d=document.createElement("tr");mxLog.td=document.createElement("td");mxLog.td.style.verticalAlign="top";mxLog.td.setAttribute("height","30px");d.appendChild(mxLog.td);f.appendChild(d);c.appendChild(f);
-mxLog.addButton("Info",function(a){mxLog.info()});mxLog.addButton("DOM",function(a){a=mxUtils.getInnerHtml(document.body);mxLog.debug(a)});mxLog.addButton("Trace",function(a){mxLog.TRACE=!mxLog.TRACE;mxLog.TRACE?mxLog.debug("Tracing enabled"):mxLog.debug("Tracing disabled")});mxLog.addButton("Copy",function(a){try{mxUtils.copy(mxLog.textarea.value)}catch(k){mxUtils.alert(k)}});mxLog.addButton("Show",function(a){try{mxUtils.popup(mxLog.textarea.value)}catch(k){mxUtils.alert(k)}});mxLog.addButton("Clear",
-function(a){mxLog.textarea.value=""});d=f=0;"number"===typeof window.innerWidth?(f=window.innerHeight,d=window.innerWidth):(f=document.documentElement.clientHeight||document.body.clientHeight,d=document.body.clientWidth);mxLog.window=new mxWindow(a,c,Math.max(0,d-320),Math.max(0,f-210),300,160);mxLog.window.setMaximizable(!0);mxLog.window.setScrollable(!1);mxLog.window.setResizable(!0);mxLog.window.setClosable(!0);mxLog.window.destroyOnClose=!1;if((mxClient.IS_NS||mxClient.IS_IE)&&!mxClient.IS_GC&&
-!mxClient.IS_SF&&"BackCompat"!=document.compatMode||11==document.documentMode){var e=mxLog.window.getElement(),a=function(a,b){mxLog.textarea.style.height=Math.max(0,e.offsetHeight-70)+"px"};mxLog.window.addListener(mxEvent.RESIZE_END,a);mxLog.window.addListener(mxEvent.MAXIMIZE,a);mxLog.window.addListener(mxEvent.NORMALIZE,a);mxLog.textarea.style.height="92px"}}},info:function(){mxLog.writeln(mxUtils.toString(navigator))},addButton:function(a,c){var f=document.createElement("button");mxUtils.write(f,
+mxLog.addButton("Info",function(b){mxLog.info()});mxLog.addButton("DOM",function(b){b=mxUtils.getInnerHtml(document.body);mxLog.debug(b)});mxLog.addButton("Trace",function(b){mxLog.TRACE=!mxLog.TRACE;mxLog.TRACE?mxLog.debug("Tracing enabled"):mxLog.debug("Tracing disabled")});mxLog.addButton("Copy",function(b){try{mxUtils.copy(mxLog.textarea.value)}catch(k){mxUtils.alert(k)}});mxLog.addButton("Show",function(b){try{mxUtils.popup(mxLog.textarea.value)}catch(k){mxUtils.alert(k)}});mxLog.addButton("Clear",
+function(b){mxLog.textarea.value=""});d=f=0;"number"===typeof window.innerWidth?(f=window.innerHeight,d=window.innerWidth):(f=document.documentElement.clientHeight||document.body.clientHeight,d=document.body.clientWidth);mxLog.window=new mxWindow(a,c,Math.max(0,d-320),Math.max(0,f-210),300,160);mxLog.window.setMaximizable(!0);mxLog.window.setScrollable(!1);mxLog.window.setResizable(!0);mxLog.window.setClosable(!0);mxLog.window.destroyOnClose=!1;if((mxClient.IS_NS||mxClient.IS_IE)&&!mxClient.IS_GC&&
+!mxClient.IS_SF&&"BackCompat"!=document.compatMode||11==document.documentMode){var e=mxLog.window.getElement(),a=function(b,a){mxLog.textarea.style.height=Math.max(0,e.offsetHeight-70)+"px"};mxLog.window.addListener(mxEvent.RESIZE_END,a);mxLog.window.addListener(mxEvent.MAXIMIZE,a);mxLog.window.addListener(mxEvent.NORMALIZE,a);mxLog.textarea.style.height="92px"}}},info:function(){mxLog.writeln(mxUtils.toString(navigator))},addButton:function(a,c){var f=document.createElement("button");mxUtils.write(f,
a);mxEvent.addListener(f,"click",c);mxLog.td.appendChild(f)},isVisible:function(){return null!=mxLog.window?mxLog.window.isVisible():!1},show:function(){mxLog.setVisible(!0)},setVisible:function(a){null==mxLog.window&&mxLog.init();null!=mxLog.window&&mxLog.window.setVisible(a)},enter:function(a){if(mxLog.TRACE)return mxLog.writeln("Entering "+a),(new Date).getTime()},leave:function(a,c){if(mxLog.TRACE){var f=0!=c?" ("+((new Date).getTime()-c)+" ms)":"";mxLog.writeln("Leaving "+a+f)}},debug:function(){mxLog.DEBUG&&
mxLog.writeln.apply(this,arguments)},warn:function(){mxLog.WARN&&mxLog.writeln.apply(this,arguments)},write:function(){for(var a="",c=0;c<arguments.length;c++)a+=arguments[c],c<arguments.length-1&&(a+=" ");null!=mxLog.textarea?(mxLog.textarea.value+=a,0<=navigator.userAgent.indexOf("Presto/2.5")&&(mxLog.textarea.style.visibility="hidden",mxLog.textarea.style.visibility="visible"),mxLog.textarea.scrollTop=mxLog.textarea.scrollHeight):mxLog.buffer+=a},writeln:function(){for(var a="",c=0;c<arguments.length;c++)a+=
arguments[c],c<arguments.length-1&&(a+=" ");mxLog.write(a+"\n")}},mxObjectIdentity={FIELD_NAME:"mxObjectId",counter:0,get:function(a){if(null!=a){if(null==a[mxObjectIdentity.FIELD_NAME])if("object"===typeof a){var c=mxUtils.getFunctionName(a.constructor);a[mxObjectIdentity.FIELD_NAME]=c+"#"+mxObjectIdentity.counter++}else"function"===typeof a&&(a[mxObjectIdentity.FIELD_NAME]="Function#"+mxObjectIdentity.counter++);return a[mxObjectIdentity.FIELD_NAME]}return null},clear:function(a){"object"!==typeof a&&
"function"!==typeof a||delete a[mxObjectIdentity.FIELD_NAME]}};function mxDictionary(){this.clear()}mxDictionary.prototype.map=null;mxDictionary.prototype.clear=function(){this.map={}};mxDictionary.prototype.get=function(a){a=mxObjectIdentity.get(a);return this.map[a]};mxDictionary.prototype.put=function(a,c){var f=mxObjectIdentity.get(a),d=this.map[f];this.map[f]=c;return d};mxDictionary.prototype.remove=function(a){a=mxObjectIdentity.get(a);var c=this.map[a];delete this.map[a];return c};
mxDictionary.prototype.getKeys=function(){var a=[],c;for(c in this.map)a.push(c);return a};mxDictionary.prototype.getValues=function(){var a=[],c;for(c in this.map)a.push(this.map[c]);return a};mxDictionary.prototype.visit=function(a){for(var c in this.map)a(c,this.map[c])};
var mxResources={resources:[],extension:mxResourceExtension,resourcesEncoded:!1,loadDefaultBundle:!0,loadSpecialBundle:!0,isLanguageSupported:function(a){return null!=mxClient.languages?0<=mxUtils.indexOf(mxClient.languages,a):!0},getDefaultBundle:function(a,c){return mxResources.loadDefaultBundle||!mxResources.isLanguageSupported(c)?a+mxResources.extension:null},getSpecialBundle:function(a,c){if(null==mxClient.languages||!this.isLanguageSupported(c)){var f=c.indexOf("-");0<f&&(c=c.substring(0,f))}return mxResources.loadSpecialBundle&&
-mxResources.isLanguageSupported(c)&&c!=mxClient.defaultLanguage?a+"_"+c+mxResources.extension:null},add:function(a,c,f){c=null!=c?c:null!=mxClient.language?mxClient.language.toLowerCase():mxConstants.NONE;if(c!=mxConstants.NONE){var d=mxResources.getDefaultBundle(a,c),b=mxResources.getSpecialBundle(a,c),e=function(){if(null!=b)if(f)mxUtils.get(b,function(a){mxResources.parse(a.getText());f()},function(){f()});else try{var a=mxUtils.load(b);a.isReady()&&mxResources.parse(a.getText())}catch(l){}else null!=
-f&&f()};if(null!=d)if(f)mxUtils.get(d,function(a){mxResources.parse(a.getText());e()},function(){e()});else try{var g=mxUtils.load(d);g.isReady()&&mxResources.parse(g.getText());e()}catch(k){}else e()}},parse:function(a){if(null!=a){a=a.split("\n");for(var c=0;c<a.length;c++)if("#"!=a[c].charAt(0)){var f=a[c].indexOf("=");if(0<f){var d=a[c].substring(0,f),b=a[c].length;13==a[c].charCodeAt(b-1)&&b--;f=a[c].substring(f+1,b);this.resourcesEncoded?(f=f.replace(/\\(?=u[a-fA-F\d]{4})/g,"%"),mxResources.resources[d]=
+mxResources.isLanguageSupported(c)&&c!=mxClient.defaultLanguage?a+"_"+c+mxResources.extension:null},add:function(a,c,f){c=null!=c?c:null!=mxClient.language?mxClient.language.toLowerCase():mxConstants.NONE;if(c!=mxConstants.NONE){var d=mxResources.getDefaultBundle(a,c),b=mxResources.getSpecialBundle(a,c),e=function(){if(null!=b)if(f)mxUtils.get(b,function(b){mxResources.parse(b.getText());f()},function(){f()});else try{var a=mxUtils.load(b);a.isReady()&&mxResources.parse(a.getText())}catch(l){}else null!=
+f&&f()};if(null!=d)if(f)mxUtils.get(d,function(b){mxResources.parse(b.getText());e()},function(){e()});else try{var g=mxUtils.load(d);g.isReady()&&mxResources.parse(g.getText());e()}catch(k){}else e()}},parse:function(a){if(null!=a){a=a.split("\n");for(var c=0;c<a.length;c++)if("#"!=a[c].charAt(0)){var f=a[c].indexOf("=");if(0<f){var d=a[c].substring(0,f),b=a[c].length;13==a[c].charCodeAt(b-1)&&b--;f=a[c].substring(f+1,b);this.resourcesEncoded?(f=f.replace(/\\(?=u[a-fA-F\d]{4})/g,"%"),mxResources.resources[d]=
unescape(f)):mxResources.resources[d]=f}}}},get:function(a,c,f){a=mxResources.resources[a];null==a&&(a=f);null!=a&&null!=c&&(a=mxResources.replacePlaceholders(a,c));return a},replacePlaceholders:function(a,c){for(var f=[],d=null,b=0;b<a.length;b++){var e=a.charAt(b);"{"==e?d="":null!=d&&"}"==e?(d=parseInt(d)-1,0<=d&&d<c.length&&f.push(c[d]),d=null):null!=d?d+=e:f.push(e)}return f.join("")},loadResources:function(a){mxResources.add(mxClient.basePath+"/resources/editor",null,function(){mxResources.add(mxClient.basePath+
"/resources/graph",null,a)})}};function mxPoint(a,c){this.x=null!=a?a:0;this.y=null!=c?c:0}mxPoint.prototype.x=null;mxPoint.prototype.y=null;mxPoint.prototype.equals=function(a){return null!=a&&a.x==this.x&&a.y==this.y};mxPoint.prototype.clone=function(){return mxUtils.clone(this)};function mxRectangle(a,c,f,d){mxPoint.call(this,a,c);this.width=null!=f?f:0;this.height=null!=d?d:0}mxRectangle.prototype=new mxPoint;mxRectangle.prototype.constructor=mxRectangle;mxRectangle.prototype.width=null;
mxRectangle.prototype.height=null;mxRectangle.prototype.setRect=function(a,c,f,d){this.x=a;this.y=c;this.width=f;this.height=d};mxRectangle.prototype.getCenterX=function(){return this.x+this.width/2};mxRectangle.prototype.getCenterY=function(){return this.y+this.height/2};
@@ -237,8 +237,8 @@ c&&f.push(d),d=d.nextSibling;return f},importNode:function(a,c,f){if(mxClient.IS
case 3:case 4:case 8:return a.createTextNode(c.value)}else return a.importNode(c,f)},createXmlDocument:function(){var a=null;document.implementation&&document.implementation.createDocument?a=document.implementation.createDocument("","",null):window.ActiveXObject&&(a=new ActiveXObject("Microsoft.XMLDOM"));return a},parseXml:function(){return window.DOMParser?function(a){return(new DOMParser).parseFromString(a,"text/xml")}:function(a){var c=mxUtils.createXmlDocument();c.async=!1;c.validateOnParse=!1;
c.resolveExternals=!1;c.loadXML(a);return c}}(),clearSelection:function(){return document.selection?function(){document.selection.empty()}:window.getSelection?function(){window.getSelection().removeAllRanges()}:function(){}}(),getPrettyXml:function(a,c,f){var d=[];if(null!=a)if(c=c||" ",f=f||"",a.nodeType==mxConstants.NODETYPE_TEXT)d.push(a.value);else{d.push(f+"<"+a.nodeName);var b=a.attributes;if(null!=b)for(var e=0;e<b.length;e++){var g=mxUtils.htmlEntities(b[e].value);d.push(" "+b[e].nodeName+
'="'+g+'"')}b=a.firstChild;if(null!=b){for(d.push(">\n");null!=b;)d.push(mxUtils.getPrettyXml(b,c,f+c)),b=b.nextSibling;d.push(f+"</"+a.nodeName+">\n")}else d.push("/>\n")}return d.join("")},removeWhitespace:function(a,c){for(var f=c?a.previousSibling:a.nextSibling;null!=f&&f.nodeType==mxConstants.NODETYPE_TEXT;){var d=c?f.previousSibling:f.nextSibling,b=mxUtils.getTextContent(f);0==mxUtils.trim(b).length&&f.parentNode.removeChild(f);f=d}},htmlEntities:function(a,c){a=String(a||"");a=a.replace(/&/g,
-"&amp;");a=a.replace(/"/g,"&quot;");a=a.replace(/\'/g,"&#39;");a=a.replace(/</g,"&lt;");a=a.replace(/>/g,"&gt;");if(null==c||c)a=a.replace(/\n/g,"&#xa;");return a},isVml:function(a){return null!=a&&"urn:schemas-microsoft-com:vml"==a.tagUrn},getXml:function(a,c){var f="";null!=window.XMLSerializer?f=(new XMLSerializer).serializeToString(a):null!=a.xml&&(f=a.xml.replace(/\r\n\t[\t]*/g,"").replace(/>\r\n/g,">").replace(/\r\n/g,"\n"));return f.replace(/\n/g,c||"&#xa;")},extractTextWithWhitespace:function(a){function c(a){if(1!=
-a.length||"BR"!=a[0].nodeName&&"\n"!=a[0].innerHTML)for(var b=0;b<a.length;b++){var g=a[b];"BR"==g.nodeName||"\n"==g.innerHTML||(1==a.length||0==b)&&"DIV"==g.nodeName&&"<br>"==g.innerHTML.toLowerCase()?d.push("\n"):(3===g.nodeType||4===g.nodeType?0<g.nodeValue.length&&d.push(g.nodeValue):8!==g.nodeType&&0<g.childNodes.length&&c(g.childNodes),b<a.length-1&&0<=mxUtils.indexOf(f,a[b+1].nodeName)&&d.push("\n"))}}var f="BLOCKQUOTE DIV H1 H2 H3 H4 H5 H6 OL P PRE TABLE UL".split(" "),d=[];c(a);return d.join("")},
+"&amp;");a=a.replace(/"/g,"&quot;");a=a.replace(/\'/g,"&#39;");a=a.replace(/</g,"&lt;");a=a.replace(/>/g,"&gt;");if(null==c||c)a=a.replace(/\n/g,"&#xa;");return a},isVml:function(a){return null!=a&&"urn:schemas-microsoft-com:vml"==a.tagUrn},getXml:function(a,c){var f="";null!=window.XMLSerializer?f=(new XMLSerializer).serializeToString(a):null!=a.xml&&(f=a.xml.replace(/\r\n\t[\t]*/g,"").replace(/>\r\n/g,">").replace(/\r\n/g,"\n"));return f.replace(/\n/g,c||"&#xa;")},extractTextWithWhitespace:function(a){function c(b){if(1!=
+b.length||"BR"!=b[0].nodeName&&"\n"!=b[0].innerHTML)for(var a=0;a<b.length;a++){var g=b[a];"BR"==g.nodeName||"\n"==g.innerHTML||(1==b.length||0==a)&&"DIV"==g.nodeName&&"<br>"==g.innerHTML.toLowerCase()?d.push("\n"):(3===g.nodeType||4===g.nodeType?0<g.nodeValue.length&&d.push(g.nodeValue):8!==g.nodeType&&0<g.childNodes.length&&c(g.childNodes),a<b.length-1&&0<=mxUtils.indexOf(f,b[a+1].nodeName)&&d.push("\n"))}}var f="BLOCKQUOTE DIV H1 H2 H3 H4 H5 H6 OL P PRE TABLE UL".split(" "),d=[];c(a);return d.join("")},
replaceTrailingNewlines:function(a,c){for(var f="";0<a.length&&"\n"==a.charAt(a.length-1);)a=a.substring(0,a.length-1),f+=c;return a+f},getTextContent:function(a){return void 0!==a.innerText?a.innerText:null!=a?a[void 0===a.textContent?"text":"textContent"]:""},setTextContent:function(a,c){void 0!==a.innerText?a.innerText=c:a[void 0===a.textContent?"text":"textContent"]=c},getInnerHtml:function(){return mxClient.IS_IE?function(a){return null!=a?a.innerHTML:""}:function(a){return null!=a?(new XMLSerializer).serializeToString(a):
""}}(),getOuterHtml:function(){return mxClient.IS_IE?function(a){if(null!=a){if(null!=a.outerHTML)return a.outerHTML;var c=[];c.push("<"+a.nodeName);var f=a.attributes;if(null!=f)for(var d=0;d<f.length;d++){var b=f[d].value;null!=b&&0<b.length&&(c.push(" "),c.push(f[d].nodeName),c.push('="'),c.push(b),c.push('"'))}0==a.innerHTML.length?c.push("/>"):(c.push(">"),c.push(a.innerHTML),c.push("</"+a.nodeName+">"));return c.join("")}return""}:function(a){return null!=a?(new XMLSerializer).serializeToString(a):
""}}(),write:function(a,c){var f=a.ownerDocument.createTextNode(c);null!=a&&a.appendChild(f);return f},writeln:function(a,c){var f=a.ownerDocument.createTextNode(c);null!=a&&(a.appendChild(f),a.appendChild(document.createElement("br")));return f},br:function(a,c){c=c||1;for(var f=null,d=0;d<c;d++)null!=a&&(f=a.ownerDocument.createElement("br"),a.appendChild(f));return f},button:function(a,c,f){f=null!=f?f:document;f=f.createElement("button");mxUtils.write(f,a);mxEvent.addListener(f,"click",function(a){c(a)});
@@ -280,9 +280,9 @@ c.close();f=c.createElement("div");f.position="absolute";f.overflow="hidden";f.s
"translate("+k+","+l+")"))}mxUtils.removeCursors(c.body);return c},printScreen:function(a){var c=window.open();a.getGraphBounds();mxUtils.show(a,c.document);a=function(){c.focus();c.print();c.close()};mxClient.IS_GC?c.setTimeout(a,500):a()},popup:function(a,c){if(c){var f=document.createElement("div");f.style.overflow="scroll";f.style.width="636px";f.style.height="460px";var d=document.createElement("pre");d.innerHTML=mxUtils.htmlEntities(a,!1).replace(/\n/g,"<br>").replace(/ /g,"&nbsp;");f.appendChild(d);
f=new mxWindow("Popup Window",f,document.body.clientWidth/2-320,Math.max(document.body.clientHeight||0,document.documentElement.clientHeight)/2-240,640,480,!1,!0);f.setClosable(!0);f.setVisible(!0)}else mxClient.IS_NS?(f=window.open(),f.document.writeln("<pre>"+mxUtils.htmlEntities(a)+"</pre"),f.document.close()):(f=window.open(),d=f.document.createElement("pre"),d.innerHTML=mxUtils.htmlEntities(a,!1).replace(/\n/g,"<br>").replace(/ /g,"&nbsp;"),f.document.body.appendChild(d))},alert:function(a){alert(a)},
prompt:function(a,c){return prompt(a,null!=c?c:"")},confirm:function(a){return confirm(a)},error:function(a,c,f,d){var b=document.createElement("div");b.style.padding="20px";var e=document.createElement("img");e.setAttribute("src",d||mxUtils.errorImage);e.setAttribute("valign","bottom");e.style.verticalAlign="middle";b.appendChild(e);b.appendChild(document.createTextNode(" "));b.appendChild(document.createTextNode(" "));b.appendChild(document.createTextNode(" "));mxUtils.write(b,a);a=document.body.clientWidth;
-d=document.body.clientHeight||document.documentElement.clientHeight;var g=new mxWindow(mxResources.get(mxUtils.errorResource)||mxUtils.errorResource,b,(a-c)/2,d/4,c,null,!1,!0);f&&(mxUtils.br(b),c=document.createElement("p"),f=document.createElement("button"),mxClient.IS_IE?f.style.cssText="float:right":f.setAttribute("style","float:right"),mxEvent.addListener(f,"click",function(a){g.destroy()}),mxUtils.write(f,mxResources.get(mxUtils.closeResource)||mxUtils.closeResource),c.appendChild(f),b.appendChild(c),
-mxUtils.br(b),g.setClosable(!0));g.setVisible(!0);return g},makeDraggable:function(a,c,f,d,b,e,g,k,l,m){a=new mxDragSource(a,f);a.dragOffset=new mxPoint(null!=b?b:0,null!=e?e:mxConstants.TOOLTIP_VERTICAL_OFFSET);a.autoscroll=g;a.setGuidesEnabled(!1);null!=l&&(a.highlightDropTargets=l);null!=m&&(a.getDropTarget=m);a.getGraphForEvent=function(a){return"function"==typeof c?c(a):c};null!=d&&(a.createDragElement=function(){return d.cloneNode(!0)},k&&(a.createPreviewElement=function(a){var b=d.cloneNode(!0),
-c=parseInt(b.style.width),e=parseInt(b.style.height);b.style.width=Math.round(c*a.view.scale)+"px";b.style.height=Math.round(e*a.view.scale)+"px";return b}));return a}},mxConstants={DEFAULT_HOTSPOT:.3,MIN_HOTSPOT_SIZE:8,MAX_HOTSPOT_SIZE:0,RENDERING_HINT_EXACT:"exact",RENDERING_HINT_FASTER:"faster",RENDERING_HINT_FASTEST:"fastest",DIALECT_SVG:"svg",DIALECT_VML:"vml",DIALECT_MIXEDHTML:"mixedHtml",DIALECT_PREFERHTML:"preferHtml",DIALECT_STRICTHTML:"strictHtml",NS_SVG:"http://www.w3.org/2000/svg",NS_XHTML:"http://www.w3.org/1999/xhtml",
+d=document.body.clientHeight||document.documentElement.clientHeight;var g=new mxWindow(mxResources.get(mxUtils.errorResource)||mxUtils.errorResource,b,(a-c)/2,d/4,c,null,!1,!0);f&&(mxUtils.br(b),c=document.createElement("p"),f=document.createElement("button"),mxClient.IS_IE?f.style.cssText="float:right":f.setAttribute("style","float:right"),mxEvent.addListener(f,"click",function(b){g.destroy()}),mxUtils.write(f,mxResources.get(mxUtils.closeResource)||mxUtils.closeResource),c.appendChild(f),b.appendChild(c),
+mxUtils.br(b),g.setClosable(!0));g.setVisible(!0);return g},makeDraggable:function(a,c,f,d,b,e,g,k,l,m){a=new mxDragSource(a,f);a.dragOffset=new mxPoint(null!=b?b:0,null!=e?e:mxConstants.TOOLTIP_VERTICAL_OFFSET);a.autoscroll=g;a.setGuidesEnabled(!1);null!=l&&(a.highlightDropTargets=l);null!=m&&(a.getDropTarget=m);a.getGraphForEvent=function(b){return"function"==typeof c?c(b):c};null!=d&&(a.createDragElement=function(){return d.cloneNode(!0)},k&&(a.createPreviewElement=function(b){var a=d.cloneNode(!0),
+c=parseInt(a.style.width),e=parseInt(a.style.height);a.style.width=Math.round(c*b.view.scale)+"px";a.style.height=Math.round(e*b.view.scale)+"px";return a}));return a}},mxConstants={DEFAULT_HOTSPOT:.3,MIN_HOTSPOT_SIZE:8,MAX_HOTSPOT_SIZE:0,RENDERING_HINT_EXACT:"exact",RENDERING_HINT_FASTER:"faster",RENDERING_HINT_FASTEST:"fastest",DIALECT_SVG:"svg",DIALECT_VML:"vml",DIALECT_MIXEDHTML:"mixedHtml",DIALECT_PREFERHTML:"preferHtml",DIALECT_STRICTHTML:"strictHtml",NS_SVG:"http://www.w3.org/2000/svg",NS_XHTML:"http://www.w3.org/1999/xhtml",
NS_XLINK:"http://www.w3.org/1999/xlink",SHADOWCOLOR:"gray",VML_SHADOWCOLOR:"gray",SHADOW_OFFSET_X:2,SHADOW_OFFSET_Y:3,SHADOW_OPACITY:1,NODETYPE_ELEMENT:1,NODETYPE_ATTRIBUTE:2,NODETYPE_TEXT:3,NODETYPE_CDATA:4,NODETYPE_ENTITY_REFERENCE:5,NODETYPE_ENTITY:6,NODETYPE_PROCESSING_INSTRUCTION:7,NODETYPE_COMMENT:8,NODETYPE_DOCUMENT:9,NODETYPE_DOCUMENTTYPE:10,NODETYPE_DOCUMENT_FRAGMENT:11,NODETYPE_NOTATION:12,TOOLTIP_VERTICAL_OFFSET:16,DEFAULT_VALID_COLOR:"#00FF00",DEFAULT_INVALID_COLOR:"#FF0000",OUTLINE_HIGHLIGHT_COLOR:"#00FF00",
OUTLINE_HIGHLIGHT_STROKEWIDTH:5,HIGHLIGHT_STROKEWIDTH:3,HIGHLIGHT_SIZE:2,HIGHLIGHT_OPACITY:100,CURSOR_MOVABLE_VERTEX:"move",CURSOR_MOVABLE_EDGE:"move",CURSOR_LABEL_HANDLE:"default",CURSOR_TERMINAL_HANDLE:"pointer",CURSOR_BEND_HANDLE:"crosshair",CURSOR_VIRTUAL_BEND_HANDLE:"crosshair",CURSOR_CONNECT:"pointer",HIGHLIGHT_COLOR:"#00FF00",CONNECT_TARGET_COLOR:"#0000FF",INVALID_CONNECT_TARGET_COLOR:"#FF0000",DROP_TARGET_COLOR:"#0000FF",VALID_COLOR:"#00FF00",INVALID_COLOR:"#FF0000",EDGE_SELECTION_COLOR:"#00FF00",
VERTEX_SELECTION_COLOR:"#00FF00",VERTEX_SELECTION_STROKEWIDTH:1,EDGE_SELECTION_STROKEWIDTH:1,VERTEX_SELECTION_DASHED:!0,EDGE_SELECTION_DASHED:!0,GUIDE_COLOR:"#FF0000",GUIDE_STROKEWIDTH:1,OUTLINE_COLOR:"#0099FF",OUTLINE_STROKEWIDTH:mxClient.IS_IE?2:3,HANDLE_SIZE:6,LABEL_HANDLE_SIZE:4,HANDLE_FILLCOLOR:"#00FF00",HANDLE_STROKECOLOR:"black",LABEL_HANDLE_FILLCOLOR:"yellow",CONNECT_HANDLE_FILLCOLOR:"#0000FF",LOCKED_HANDLE_FILLCOLOR:"#FF0000",OUTLINE_HANDLE_FILLCOLOR:"#00FFFF",OUTLINE_HANDLE_STROKECOLOR:"#0033FF",
@@ -307,8 +307,8 @@ mxEventSource.prototype.fireEvent=function(a,c){if(null!=this.eventListeners&&th
var mxEvent={objects:[],addListener:function(){var a=function(a,f,d){null==a.mxListenerList&&(a.mxListenerList=[],mxEvent.objects.push(a));a.mxListenerList.push({name:f,f:d})};return window.addEventListener?function(c,f,d){c.addEventListener(f,d,!1);a(c,f,d)}:function(c,f,d){c.attachEvent("on"+f,d);a(c,f,d)}}(),removeListener:function(){var a=function(a,f,d){if(null!=a.mxListenerList){f=a.mxListenerList.length;for(var b=0;b<f;b++)if(a.mxListenerList[b].f==d){a.mxListenerList.splice(b,1);break}0==
a.mxListenerList.length&&(a.mxListenerList=null,a=mxUtils.indexOf(mxEvent.objects,a),0<=a&&mxEvent.objects.splice(a,1))}};return window.removeEventListener?function(c,f,d){c.removeEventListener(f,d,!1);a(c,f,d)}:function(c,f,d){c.detachEvent("on"+f,d);a(c,f,d)}}(),removeAllListeners:function(a){var c=a.mxListenerList;if(null!=c)for(;0<c.length;){var f=c[0];mxEvent.removeListener(a,f.name,f.f)}},addGestureListeners:function(a,c,f,d){null!=c&&mxEvent.addListener(a,mxClient.IS_POINTER?"pointerdown":
"mousedown",c);null!=f&&mxEvent.addListener(a,mxClient.IS_POINTER?"pointermove":"mousemove",f);null!=d&&mxEvent.addListener(a,mxClient.IS_POINTER?"pointerup":"mouseup",d);!mxClient.IS_POINTER&&mxClient.IS_TOUCH&&(null!=c&&mxEvent.addListener(a,"touchstart",c),null!=f&&mxEvent.addListener(a,"touchmove",f),null!=d&&mxEvent.addListener(a,"touchend",d))},removeGestureListeners:function(a,c,f,d){null!=c&&mxEvent.removeListener(a,mxClient.IS_POINTER?"pointerdown":"mousedown",c);null!=f&&mxEvent.removeListener(a,
-mxClient.IS_POINTER?"pointermove":"mousemove",f);null!=d&&mxEvent.removeListener(a,mxClient.IS_POINTER?"pointerup":"mouseup",d);!mxClient.IS_POINTER&&mxClient.IS_TOUCH&&(null!=c&&mxEvent.removeListener(a,"touchstart",c),null!=f&&mxEvent.removeListener(a,"touchmove",f),null!=d&&mxEvent.removeListener(a,"touchend",d))},redirectMouseEvents:function(a,c,f,d,b,e,g){var k=function(a){return"function"==typeof f?f(a):f};mxEvent.addGestureListeners(a,function(a){null!=d?d(a):mxEvent.isConsumed(a)||c.fireMouseEvent(mxEvent.MOUSE_DOWN,
-new mxMouseEvent(a,k(a)))},function(a){null!=b?b(a):mxEvent.isConsumed(a)||c.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(a,k(a)))},function(a){null!=e?e(a):mxEvent.isConsumed(a)||c.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(a,k(a)))});mxEvent.addListener(a,"dblclick",function(a){if(null!=g)g(a);else if(!mxEvent.isConsumed(a)){var b=k(a);c.dblClick(a,null!=b?b.cell:null)}})},release:function(a){if(null!=a&&(mxEvent.removeAllListeners(a),a=a.childNodes,null!=a))for(var c=a.length,f=0;f<
+mxClient.IS_POINTER?"pointermove":"mousemove",f);null!=d&&mxEvent.removeListener(a,mxClient.IS_POINTER?"pointerup":"mouseup",d);!mxClient.IS_POINTER&&mxClient.IS_TOUCH&&(null!=c&&mxEvent.removeListener(a,"touchstart",c),null!=f&&mxEvent.removeListener(a,"touchmove",f),null!=d&&mxEvent.removeListener(a,"touchend",d))},redirectMouseEvents:function(a,c,f,d,b,e,g){var k=function(b){return"function"==typeof f?f(b):f};mxEvent.addGestureListeners(a,function(b){null!=d?d(b):mxEvent.isConsumed(b)||c.fireMouseEvent(mxEvent.MOUSE_DOWN,
+new mxMouseEvent(b,k(b)))},function(a){null!=b?b(a):mxEvent.isConsumed(a)||c.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(a,k(a)))},function(b){null!=e?e(b):mxEvent.isConsumed(b)||c.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(b,k(b)))});mxEvent.addListener(a,"dblclick",function(b){if(null!=g)g(b);else if(!mxEvent.isConsumed(b)){var a=k(b);c.dblClick(b,null!=a?a.cell:null)}})},release:function(a){if(null!=a&&(mxEvent.removeAllListeners(a),a=a.childNodes,null!=a))for(var c=a.length,f=0;f<
c;f+=1)mxEvent.release(a[f])},addMouseWheelListener:function(a){if(null!=a){var c=function(c){null==c&&(c=window.event);var d;d=mxClient.IS_FF?-c.detail/2:c.wheelDelta/120;0!=d&&a(c,0<d)};mxClient.IS_NS&&null==document.documentMode?mxEvent.addListener(window,mxClient.IS_SF||mxClient.IS_GC?"mousewheel":"DOMMouseScroll",c):mxEvent.addListener(document,"mousewheel",c)}},disableContextMenu:function(){return mxClient.IS_IE&&("undefined"===typeof document.documentMode||9>document.documentMode)?function(a){mxEvent.addListener(a,
"contextmenu",function(){return!1})}:function(a){a.setAttribute("oncontextmenu","return false;")}}(),getSource:function(a){return null!=a.srcElement?a.srcElement:a.target},isConsumed:function(a){return null!=a.isConsumed&&a.isConsumed},isTouchEvent:function(a){return null!=a.pointerType?"touch"==a.pointerType||a.pointerType===a.MSPOINTER_TYPE_TOUCH:null!=a.mozInputSource?5==a.mozInputSource:0==a.type.indexOf("touch")},isMultiTouchEvent:function(a){return null!=a.type&&0==a.type.indexOf("touch")&&
null!=a.touches&&1<a.touches.length},isMouseEvent:function(a){return null!=a.pointerType?"mouse"==a.pointerType||a.pointerType===a.MSPOINTER_TYPE_MOUSE:null!=a.mozInputSource?1==a.mozInputSource:0==a.type.indexOf("mouse")},isLeftMouseButton:function(a){return"buttons"in a&&("mousedown"==a.type||"mousemove"==a.type)?1==a.buttons:"which"in a?1===a.which:1===a.button},isMiddleMouseButton:function(a){return"which"in a?2===a.which:4===a.button},isRightMouseButton:function(a){return"which"in a?3===a.which:
@@ -333,12 +333,12 @@ mxWindow.prototype.minimizeImage=mxClient.imageBasePath+"/minimize.gif";mxWindow
mxWindow.prototype.contentHeightCorrection=8==document.documentMode||7==document.documentMode?6:2;mxWindow.prototype.title=null;mxWindow.prototype.content=null;
mxWindow.prototype.init=function(a,c,f,d,b){b=null!=b?b:"mxWindow";this.div=document.createElement("div");this.div.className=b;this.div.style.left=a+"px";this.div.style.top=c+"px";this.table=document.createElement("table");this.table.className=b;mxClient.IS_POINTER&&(this.div.style.touchAction="none");null!=f&&(mxClient.IS_QUIRKS||(this.div.style.width=f+"px"),this.table.style.width=f+"px");null!=d&&(mxClient.IS_QUIRKS||(this.div.style.height=d+"px"),this.table.style.height=d+"px");a=document.createElement("tbody");
c=document.createElement("tr");this.title=document.createElement("td");this.title.className=b+"Title";this.buttons=document.createElement("div");this.buttons.style.position="absolute";this.buttons.style.display="inline-block";this.buttons.style.right="4px";this.buttons.style.top="5px";this.title.appendChild(this.buttons);c.appendChild(this.title);a.appendChild(c);c=document.createElement("tr");this.td=document.createElement("td");this.td.className=b+"Pane";7==document.documentMode&&(this.td.style.height=
-"100%");this.contentWrapper=document.createElement("div");this.contentWrapper.className=b+"Pane";this.contentWrapper.style.width="100%";this.contentWrapper.appendChild(this.content);if(mxClient.IS_QUIRKS||"DIV"!=this.content.nodeName.toUpperCase())this.contentWrapper.style.height="100%";this.td.appendChild(this.contentWrapper);c.appendChild(this.td);a.appendChild(c);this.table.appendChild(a);this.div.appendChild(this.table);b=mxUtils.bind(this,function(a){this.activate()});mxEvent.addGestureListeners(this.title,
+"100%");this.contentWrapper=document.createElement("div");this.contentWrapper.className=b+"Pane";this.contentWrapper.style.width="100%";this.contentWrapper.appendChild(this.content);if(mxClient.IS_QUIRKS||"DIV"!=this.content.nodeName.toUpperCase())this.contentWrapper.style.height="100%";this.td.appendChild(this.contentWrapper);c.appendChild(this.td);a.appendChild(c);this.table.appendChild(a);this.div.appendChild(this.table);b=mxUtils.bind(this,function(b){this.activate()});mxEvent.addGestureListeners(this.title,
b);mxEvent.addGestureListeners(this.table,b);this.hide()};mxWindow.prototype.setTitle=function(a){for(var c=this.title.firstChild;null!=c;){var f=c.nextSibling;c.nodeType==mxConstants.NODETYPE_TEXT&&c.parentNode.removeChild(c);c=f}mxUtils.write(this.title,a||"");this.title.appendChild(this.buttons)};mxWindow.prototype.setScrollable=function(a){0>navigator.userAgent.indexOf("Presto/2.5")&&(this.contentWrapper.style.overflow=a?"auto":"hidden")};
mxWindow.prototype.activate=function(){if(mxWindow.activeWindow!=this){var a=mxUtils.getCurrentStyle(this.getElement()),a=null!=a?a.zIndex:3;if(mxWindow.activeWindow){var c=mxWindow.activeWindow.getElement();null!=c&&null!=c.style&&(c.style.zIndex=a)}c=mxWindow.activeWindow;this.getElement().style.zIndex=parseInt(a)+1;mxWindow.activeWindow=this;this.fireEvent(new mxEventObject(mxEvent.ACTIVATE,"previousWindow",c))}};mxWindow.prototype.getElement=function(){return this.div};
mxWindow.prototype.fit=function(){mxUtils.fit(this.div)};mxWindow.prototype.isResizable=function(){return null!=this.resize?"none"!=this.resize.style.display:!1};
mxWindow.prototype.setResizable=function(a){if(a)if(null==this.resize){this.resize=document.createElement("img");this.resize.style.position="absolute";this.resize.style.bottom="2px";this.resize.style.right="2px";this.resize.setAttribute("src",mxClient.imageBasePath+"/resize.gif");this.resize.style.cursor="nw-resize";var c=null,f=null,d=null,b=null;a=mxUtils.bind(this,function(a){this.activate();c=mxEvent.getClientX(a);f=mxEvent.getClientY(a);d=this.div.offsetWidth;b=this.div.offsetHeight;mxEvent.addGestureListeners(document,
-null,e,g);this.fireEvent(new mxEventObject(mxEvent.RESIZE_START,"event",a));mxEvent.consume(a)});var e=mxUtils.bind(this,function(a){if(null!=c&&null!=f){var e=mxEvent.getClientX(a)-c,g=mxEvent.getClientY(a)-f;this.setSize(d+e,b+g);this.fireEvent(new mxEventObject(mxEvent.RESIZE,"event",a));mxEvent.consume(a)}}),g=mxUtils.bind(this,function(a){null!=c&&null!=f&&(f=c=null,mxEvent.removeGestureListeners(document,null,e,g),this.fireEvent(new mxEventObject(mxEvent.RESIZE_END,"event",a)),mxEvent.consume(a))});
+null,e,g);this.fireEvent(new mxEventObject(mxEvent.RESIZE_START,"event",a));mxEvent.consume(a)});var e=mxUtils.bind(this,function(a){if(null!=c&&null!=f){var e=mxEvent.getClientX(a)-c,g=mxEvent.getClientY(a)-f;this.setSize(d+e,b+g);this.fireEvent(new mxEventObject(mxEvent.RESIZE,"event",a));mxEvent.consume(a)}}),g=mxUtils.bind(this,function(b){null!=c&&null!=f&&(f=c=null,mxEvent.removeGestureListeners(document,null,e,g),this.fireEvent(new mxEventObject(mxEvent.RESIZE_END,"event",b)),mxEvent.consume(b))});
mxEvent.addGestureListeners(this.resize,a,e,g);this.div.appendChild(this.resize)}else this.resize.style.display="inline";else null!=this.resize&&(this.resize.style.display="none")};
mxWindow.prototype.setSize=function(a,c){a=Math.max(this.minimumSize.width,a);c=Math.max(this.minimumSize.height,c);mxClient.IS_QUIRKS||(this.div.style.width=a+"px",this.div.style.height=c+"px");this.table.style.width=a+"px";this.table.style.height=c+"px";mxClient.IS_QUIRKS||(this.contentWrapper.style.height=this.div.offsetHeight-this.title.offsetHeight-this.contentHeightCorrection+"px")};mxWindow.prototype.setMinimizable=function(a){this.minimize.style.display=a?"":"none"};
mxWindow.prototype.getMinimumSize=function(){return new mxRectangle(0,0,0,this.title.offsetHeight)};
@@ -351,8 +351,8 @@ mxWindow.prototype.installMaximizeHandler=function(){this.maximize=document.crea
d,this.table.style.width=b,null!=this.resize&&(this.resize.style.visibility=""),this.fireEvent(new mxEventObject(mxEvent.NORMALIZE,"event",g));else{a=!0;this.maximize.setAttribute("src",this.normalizeImage);this.maximize.setAttribute("title","Normalize");this.contentWrapper.style.display="";e=this.minimize.style.display;this.minimize.style.display="none";c=parseInt(this.div.style.left);f=parseInt(this.div.style.top);d=this.table.style.height;b=this.table.style.width;this.div.style.left="0px";this.div.style.top=
"0px";k=Math.max(document.body.clientHeight||0,document.documentElement.clientHeight||0);mxClient.IS_QUIRKS||(this.div.style.width=document.body.clientWidth-2+"px",this.div.style.height=k-2+"px");this.table.style.width=document.body.clientWidth-2+"px";this.table.style.height=k-2+"px";null!=this.resize&&(this.resize.style.visibility="hidden");if(!mxClient.IS_QUIRKS){var k=mxUtils.getCurrentStyle(this.contentWrapper);if("auto"==k.overflow||null!=this.resize)this.contentWrapper.style.height=this.div.offsetHeight-
this.title.offsetHeight-this.contentHeightCorrection+"px"}this.fireEvent(new mxEventObject(mxEvent.MAXIMIZE,"event",g))}mxEvent.consume(g)}});mxEvent.addGestureListeners(this.maximize,g);mxEvent.addListener(this.title,"dblclick",g)};
-mxWindow.prototype.installMoveHandler=function(){this.title.style.cursor="move";mxEvent.addGestureListeners(this.title,mxUtils.bind(this,function(a){var c=mxEvent.getClientX(a),f=mxEvent.getClientY(a),d=this.getX(),b=this.getY(),e=mxUtils.bind(this,function(a){var e=mxEvent.getClientX(a)-c,g=mxEvent.getClientY(a)-f;this.setLocation(d+e,b+g);this.fireEvent(new mxEventObject(mxEvent.MOVE,"event",a));mxEvent.consume(a)}),g=mxUtils.bind(this,function(a){mxEvent.removeGestureListeners(document,null,e,
-g);this.fireEvent(new mxEventObject(mxEvent.MOVE_END,"event",a));mxEvent.consume(a)});mxEvent.addGestureListeners(document,null,e,g);this.fireEvent(new mxEventObject(mxEvent.MOVE_START,"event",a));mxEvent.consume(a)}));mxClient.IS_POINTER&&(this.title.style.touchAction="none")};mxWindow.prototype.setLocation=function(a,c){this.div.style.left=a+"px";this.div.style.top=c+"px"};mxWindow.prototype.getX=function(){return parseInt(this.div.style.left)};mxWindow.prototype.getY=function(){return parseInt(this.div.style.top)};
+mxWindow.prototype.installMoveHandler=function(){this.title.style.cursor="move";mxEvent.addGestureListeners(this.title,mxUtils.bind(this,function(a){var c=mxEvent.getClientX(a),f=mxEvent.getClientY(a),d=this.getX(),b=this.getY(),e=mxUtils.bind(this,function(a){var e=mxEvent.getClientX(a)-c,g=mxEvent.getClientY(a)-f;this.setLocation(d+e,b+g);this.fireEvent(new mxEventObject(mxEvent.MOVE,"event",a));mxEvent.consume(a)}),g=mxUtils.bind(this,function(b){mxEvent.removeGestureListeners(document,null,e,
+g);this.fireEvent(new mxEventObject(mxEvent.MOVE_END,"event",b));mxEvent.consume(b)});mxEvent.addGestureListeners(document,null,e,g);this.fireEvent(new mxEventObject(mxEvent.MOVE_START,"event",a));mxEvent.consume(a)}));mxClient.IS_POINTER&&(this.title.style.touchAction="none")};mxWindow.prototype.setLocation=function(a,c){this.div.style.left=a+"px";this.div.style.top=c+"px"};mxWindow.prototype.getX=function(){return parseInt(this.div.style.left)};mxWindow.prototype.getY=function(){return parseInt(this.div.style.top)};
mxWindow.prototype.installCloseHandler=function(){this.closeImg=document.createElement("img");this.closeImg.setAttribute("src",this.closeImage);this.closeImg.setAttribute("title","Close");this.closeImg.style.marginLeft="2px";this.closeImg.style.cursor="pointer";this.closeImg.style.display="none";this.buttons.appendChild(this.closeImg);mxEvent.addGestureListeners(this.closeImg,mxUtils.bind(this,function(a){this.fireEvent(new mxEventObject(mxEvent.CLOSE,"event",a));this.destroyOnClose?this.destroy():
this.setVisible(!1);mxEvent.consume(a)}))};mxWindow.prototype.setImage=function(a){this.image=document.createElement("img");this.image.setAttribute("src",a);this.image.setAttribute("align","left");this.image.style.marginRight="4px";this.image.style.marginLeft="0px";this.image.style.marginTop="-2px";this.title.insertBefore(this.image,this.title.firstChild)};mxWindow.prototype.setClosable=function(a){this.closeImg.style.display=a?"":"none"};
mxWindow.prototype.isVisible=function(){return null!=this.div?"none"!=this.div.style.display:!1};mxWindow.prototype.setVisible=function(a){null!=this.div&&this.isVisible()!=a&&(a?this.show():this.hide())};
@@ -382,13 +382,13 @@ mxDragSource.prototype.dragOver=function(a,c){var f=mxUtils.getOffset(a.containe
this.previewElement.parentNode&&(a.container.appendChild(this.previewElement),this.previewElement.style.zIndex="3",this.previewElement.style.position="absolute");var d=this.isGridEnabled()&&a.isGridEnabledEvent(c),e=!0;if(null!=this.currentGuide&&this.currentGuide.isEnabledForEvent(c))var e=parseInt(this.previewElement.style.width),g=parseInt(this.previewElement.style.height),e=new mxRectangle(0,0,e,g),f=new mxPoint(b,f),f=this.currentGuide.move(e,f,d),e=!1,b=f.x,f=f.y;else if(d)var d=a.view.scale,
g=a.view.translate,k=a.gridSize/2,b=(a.snap(b/d-g.x-k)+g.x)*d,f=(a.snap(f/d-g.y-k)+g.y)*d;null!=this.currentGuide&&e&&this.currentGuide.hide();null!=this.previewOffset&&(b+=this.previewOffset.x,f+=this.previewOffset.y);this.previewElement.style.left=Math.round(b)+"px";this.previewElement.style.top=Math.round(f)+"px";this.previewElement.style.visibility="visible"}this.currentPoint=new mxPoint(b,f)};
mxDragSource.prototype.drop=function(a,c,f,d,b){this.dropHandler(a,c,f,d,b);"hidden"!=a.container.style.visibility&&a.container.focus()};function mxToolbar(a){this.container=a}mxToolbar.prototype=new mxEventSource;mxToolbar.prototype.constructor=mxToolbar;mxToolbar.prototype.container=null;mxToolbar.prototype.enabled=!0;mxToolbar.prototype.noReset=!1;mxToolbar.prototype.updateDefaultMode=!0;
-mxToolbar.prototype.addItem=function(a,c,f,d,b,e){var g=document.createElement(null!=c?"img":"button"),k=b||(null!=e?"mxToolbarMode":"mxToolbarItem");g.className=k;g.setAttribute("src",c);null!=a&&(null!=c?g.setAttribute("title",a):mxUtils.write(g,a));this.container.appendChild(g);null!=f&&(mxEvent.addListener(g,"click",f),mxClient.IS_TOUCH&&mxEvent.addListener(g,"touchend",f));a=mxUtils.bind(this,function(a){null!=d?g.setAttribute("src",c):g.style.backgroundColor=""});mxEvent.addGestureListeners(g,
-mxUtils.bind(this,function(a){null!=d?g.setAttribute("src",d):g.style.backgroundColor="gray";if(null!=e){null==this.menu&&(this.menu=new mxPopupMenu,this.menu.init());var b=this.currentImg;this.menu.isMenuShowing()&&this.menu.hideMenu();b!=g&&(this.currentImg=g,this.menu.factoryMethod=e,b=new mxPoint(g.offsetLeft,g.offsetTop+g.offsetHeight),this.menu.popup(b.x,b.y,null,a),this.menu.isMenuShowing()&&(g.className=k+"Selected",this.menu.hideMenu=function(){mxPopupMenu.prototype.hideMenu.apply(this);
+mxToolbar.prototype.addItem=function(a,c,f,d,b,e){var g=document.createElement(null!=c?"img":"button"),k=b||(null!=e?"mxToolbarMode":"mxToolbarItem");g.className=k;g.setAttribute("src",c);null!=a&&(null!=c?g.setAttribute("title",a):mxUtils.write(g,a));this.container.appendChild(g);null!=f&&(mxEvent.addListener(g,"click",f),mxClient.IS_TOUCH&&mxEvent.addListener(g,"touchend",f));a=mxUtils.bind(this,function(b){null!=d?g.setAttribute("src",c):g.style.backgroundColor=""});mxEvent.addGestureListeners(g,
+mxUtils.bind(this,function(b){null!=d?g.setAttribute("src",d):g.style.backgroundColor="gray";if(null!=e){null==this.menu&&(this.menu=new mxPopupMenu,this.menu.init());var a=this.currentImg;this.menu.isMenuShowing()&&this.menu.hideMenu();a!=g&&(this.currentImg=g,this.menu.factoryMethod=e,a=new mxPoint(g.offsetLeft,g.offsetTop+g.offsetHeight),this.menu.popup(a.x,a.y,null,b),this.menu.isMenuShowing()&&(g.className=k+"Selected",this.menu.hideMenu=function(){mxPopupMenu.prototype.hideMenu.apply(this);
g.className=k;this.currentImg=null}))}}),null,a);mxEvent.addListener(g,"mouseout",a);return g};mxToolbar.prototype.addCombo=function(a){var c=document.createElement("div");c.style.display="inline";c.className="mxToolbarComboContainer";var f=document.createElement("select");f.className=a||"mxToolbarCombo";c.appendChild(f);this.container.appendChild(c);return f};
mxToolbar.prototype.addActionCombo=function(a,c){var f=document.createElement("select");f.className=c||"mxToolbarCombo";this.addOption(f,a,null);mxEvent.addListener(f,"change",function(a){var b=f.options[f.selectedIndex];f.selectedIndex=0;null!=b.funct&&b.funct(a)});this.container.appendChild(f);return f};mxToolbar.prototype.addOption=function(a,c,f){var d=document.createElement("option");mxUtils.writeln(d,c);"function"==typeof f?d.funct=f:d.setAttribute("value",f);a.appendChild(d);return d};
-mxToolbar.prototype.addSwitchMode=function(a,c,f,d,b){var e=document.createElement("img");e.initialClassName=b||"mxToolbarMode";e.className=e.initialClassName;e.setAttribute("src",c);e.altIcon=d;null!=a&&e.setAttribute("title",a);mxEvent.addListener(e,"click",mxUtils.bind(this,function(a){a=this.selectedMode.altIcon;null!=a?(this.selectedMode.altIcon=this.selectedMode.getAttribute("src"),this.selectedMode.setAttribute("src",a)):this.selectedMode.className=this.selectedMode.initialClassName;this.updateDefaultMode&&
-(this.defaultMode=e);this.selectedMode=e;a=e.altIcon;null!=a?(e.altIcon=e.getAttribute("src"),e.setAttribute("src",a)):e.className=e.initialClassName+"Selected";this.fireEvent(new mxEventObject(mxEvent.SELECT));f()}));this.container.appendChild(e);null==this.defaultMode&&(this.defaultMode=e,this.selectMode(e),f());return e};
-mxToolbar.prototype.addMode=function(a,c,f,d,b,e){e=null!=e?e:!0;var g=document.createElement(null!=c?"img":"button");g.initialClassName=b||"mxToolbarMode";g.className=g.initialClassName;g.setAttribute("src",c);g.altIcon=d;null!=a&&g.setAttribute("title",a);this.enabled&&e&&(mxEvent.addListener(g,"click",mxUtils.bind(this,function(a){this.selectMode(g,f);this.noReset=!1})),mxEvent.addListener(g,"dblclick",mxUtils.bind(this,function(a){this.selectMode(g,f);this.noReset=!0})),null==this.defaultMode&&
+mxToolbar.prototype.addSwitchMode=function(a,c,f,d,b){var e=document.createElement("img");e.initialClassName=b||"mxToolbarMode";e.className=e.initialClassName;e.setAttribute("src",c);e.altIcon=d;null!=a&&e.setAttribute("title",a);mxEvent.addListener(e,"click",mxUtils.bind(this,function(b){b=this.selectedMode.altIcon;null!=b?(this.selectedMode.altIcon=this.selectedMode.getAttribute("src"),this.selectedMode.setAttribute("src",b)):this.selectedMode.className=this.selectedMode.initialClassName;this.updateDefaultMode&&
+(this.defaultMode=e);this.selectedMode=e;b=e.altIcon;null!=b?(e.altIcon=e.getAttribute("src"),e.setAttribute("src",b)):e.className=e.initialClassName+"Selected";this.fireEvent(new mxEventObject(mxEvent.SELECT));f()}));this.container.appendChild(e);null==this.defaultMode&&(this.defaultMode=e,this.selectMode(e),f());return e};
+mxToolbar.prototype.addMode=function(a,c,f,d,b,e){e=null!=e?e:!0;var g=document.createElement(null!=c?"img":"button");g.initialClassName=b||"mxToolbarMode";g.className=g.initialClassName;g.setAttribute("src",c);g.altIcon=d;null!=a&&g.setAttribute("title",a);this.enabled&&e&&(mxEvent.addListener(g,"click",mxUtils.bind(this,function(b){this.selectMode(g,f);this.noReset=!1})),mxEvent.addListener(g,"dblclick",mxUtils.bind(this,function(b){this.selectMode(g,f);this.noReset=!0})),null==this.defaultMode&&
(this.defaultMode=g,this.defaultFunction=f,this.selectMode(g,f)));this.container.appendChild(g);return g};
mxToolbar.prototype.selectMode=function(a,c){if(this.selectedMode!=a){if(null!=this.selectedMode){var f=this.selectedMode.altIcon;null!=f?(this.selectedMode.altIcon=this.selectedMode.getAttribute("src"),this.selectedMode.setAttribute("src",f)):this.selectedMode.className=this.selectedMode.initialClassName}this.selectedMode=a;f=this.selectedMode.altIcon;null!=f?(this.selectedMode.altIcon=this.selectedMode.getAttribute("src"),this.selectedMode.setAttribute("src",f)):this.selectedMode.className=this.selectedMode.initialClassName+
"Selected";this.fireEvent(new mxEventObject(mxEvent.SELECT,"function",c))}};mxToolbar.prototype.resetMode=function(a){!a&&this.noReset||this.selectedMode==this.defaultMode||this.selectMode(this.defaultMode,this.defaultFunction)};mxToolbar.prototype.addSeparator=function(a){return this.addItem(null,a,null)};mxToolbar.prototype.addBreak=function(){mxUtils.br(this.container)};
@@ -413,9 +413,9 @@ mxPopupMenu.prototype.enabled=!0;mxPopupMenu.prototype.itemCount=0;mxPopupMenu.p
mxPopupMenu.prototype.init=function(){this.table=document.createElement("table");this.table.className="mxPopupMenu";this.tbody=document.createElement("tbody");this.table.appendChild(this.tbody);this.div=document.createElement("div");this.div.className="mxPopupMenu";this.div.style.display="inline";this.div.style.zIndex=this.zIndex;this.div.appendChild(this.table);mxEvent.disableContextMenu(this.div)};mxPopupMenu.prototype.isEnabled=function(){return this.enabled};
mxPopupMenu.prototype.setEnabled=function(a){this.enabled=a};mxPopupMenu.prototype.isPopupTrigger=function(a){return a.isPopupTrigger()||this.useLeftButtonForPopup&&mxEvent.isLeftMouseButton(a.getEvent())};
mxPopupMenu.prototype.addItem=function(a,c,f,d,b,e,g){d=d||this;this.itemCount++;d.willAddSeparator&&(d.containsItems&&this.addSeparator(d,!0),d.willAddSeparator=!1);d.containsItems=!0;var k=document.createElement("tr");k.className="mxPopupMenuItem";var l=document.createElement("td");l.className="mxPopupMenuIcon";null!=c?(b=document.createElement("img"),b.src=c,l.appendChild(b)):null!=b&&(c=document.createElement("div"),c.className=b,l.appendChild(c));k.appendChild(l);this.labels&&(l=document.createElement("td"),
-l.className="mxPopupMenuItem"+(null==e||e?"":" mxDisabled"),mxUtils.write(l,a),l.align="left",k.appendChild(l),a=document.createElement("td"),a.className="mxPopupMenuItem"+(null==e||e?"":" mxDisabled"),a.style.paddingRight="6px",a.style.textAlign="right",k.appendChild(a),null==d.div&&this.createSubmenu(d));d.tbody.appendChild(k);if(0!=g&&0!=e){var m=null;mxEvent.addGestureListeners(k,mxUtils.bind(this,function(a){this.eventReceiver=k;d.activeRow!=k&&d.activeRow!=d&&(null!=d.activeRow&&null!=d.activeRow.div.parentNode&&
-this.hideSubmenu(d),null!=k.div&&(this.showSubmenu(d,k),d.activeRow=k));if(mxClient.IS_QUIRKS||8==document.documentMode)m=document.selection.createRange();mxEvent.consume(a)}),mxUtils.bind(this,function(a){d.activeRow!=k&&d.activeRow!=d&&(null!=d.activeRow&&null!=d.activeRow.div.parentNode&&this.hideSubmenu(d),this.autoExpand&&null!=k.div&&(this.showSubmenu(d,k),d.activeRow=k));k.className="mxPopupMenuItemHover"}),mxUtils.bind(this,function(a){if(this.eventReceiver==k){d.activeRow!=k&&this.hideMenu();
-if(null!=m){try{m.select()}catch(p){}m=null}null!=f&&f(a)}this.eventReceiver=null;mxEvent.consume(a)}));mxEvent.addListener(k,"mouseout",mxUtils.bind(this,function(a){k.className="mxPopupMenuItem"}))}return k};mxPopupMenu.prototype.addCheckmark=function(a,c){var f=a.firstChild.nextSibling;f.style.backgroundImage="url('"+c+"')";f.style.backgroundRepeat="no-repeat";f.style.backgroundPosition="2px 50%"};
+l.className="mxPopupMenuItem"+(null==e||e?"":" mxDisabled"),mxUtils.write(l,a),l.align="left",k.appendChild(l),a=document.createElement("td"),a.className="mxPopupMenuItem"+(null==e||e?"":" mxDisabled"),a.style.paddingRight="6px",a.style.textAlign="right",k.appendChild(a),null==d.div&&this.createSubmenu(d));d.tbody.appendChild(k);if(0!=g&&0!=e){var m=null;mxEvent.addGestureListeners(k,mxUtils.bind(this,function(b){this.eventReceiver=k;d.activeRow!=k&&d.activeRow!=d&&(null!=d.activeRow&&null!=d.activeRow.div.parentNode&&
+this.hideSubmenu(d),null!=k.div&&(this.showSubmenu(d,k),d.activeRow=k));if(mxClient.IS_QUIRKS||8==document.documentMode)m=document.selection.createRange();mxEvent.consume(b)}),mxUtils.bind(this,function(b){d.activeRow!=k&&d.activeRow!=d&&(null!=d.activeRow&&null!=d.activeRow.div.parentNode&&this.hideSubmenu(d),this.autoExpand&&null!=k.div&&(this.showSubmenu(d,k),d.activeRow=k));k.className="mxPopupMenuItemHover"}),mxUtils.bind(this,function(b){if(this.eventReceiver==k){d.activeRow!=k&&this.hideMenu();
+if(null!=m){try{m.select()}catch(p){}m=null}null!=f&&f(b)}this.eventReceiver=null;mxEvent.consume(b)}));mxEvent.addListener(k,"mouseout",mxUtils.bind(this,function(b){k.className="mxPopupMenuItem"}))}return k};mxPopupMenu.prototype.addCheckmark=function(a,c){var f=a.firstChild.nextSibling;f.style.backgroundImage="url('"+c+"')";f.style.backgroundRepeat="no-repeat";f.style.backgroundPosition="2px 50%"};
mxPopupMenu.prototype.createSubmenu=function(a){a.table=document.createElement("table");a.table.className="mxPopupMenu";a.tbody=document.createElement("tbody");a.table.appendChild(a.tbody);a.div=document.createElement("div");a.div.className="mxPopupMenu";a.div.style.position="absolute";a.div.style.display="inline";a.div.style.zIndex=this.zIndex;a.div.appendChild(a.table);var c=document.createElement("img");c.setAttribute("src",this.submenuImage);td=a.firstChild.nextSibling.nextSibling;td.appendChild(c)};
mxPopupMenu.prototype.showSubmenu=function(a,c){if(null!=c.div){c.div.style.left=a.div.offsetLeft+c.offsetLeft+c.offsetWidth-1+"px";c.div.style.top=a.div.offsetTop+c.offsetTop+"px";document.body.appendChild(c.div);var f=parseInt(c.div.offsetLeft),d=parseInt(c.div.offsetWidth),b=mxUtils.getDocumentScrollOrigin(document),e=document.documentElement;f+d>b.x+(document.body.clientWidth||e.clientWidth)&&(c.div.style.left=a.div.offsetLeft-d+(mxClient.IS_IE?6:-6)+"px");mxUtils.fit(c.div)}};
mxPopupMenu.prototype.addSeparator=function(a,c){a=a||this;if(this.smartSeparators&&!c)a.willAddSeparator=!0;else if(null!=a.tbody){a.willAddSeparator=!1;var f=document.createElement("tr"),d=document.createElement("td");d.className="mxPopupMenuIcon";d.style.padding="0 0 0 0px";f.appendChild(d);d=document.createElement("td");d.style.padding="0 0 0 0px";d.setAttribute("colSpan","2");var b=document.createElement("hr");b.setAttribute("size","1");d.appendChild(b);f.appendChild(d);a.tbody.appendChild(f)}};
@@ -857,16 +857,16 @@ this.extendedDfs(c,l,e,d,b,c.hashCode,g,k+1)}else d(a,c,f,k,1)};function mxHiera
mxMedianHybridCrossingReduction.prototype.nestedBestRanks=null;mxMedianHybridCrossingReduction.prototype.currentBestCrossings=0;mxMedianHybridCrossingReduction.prototype.iterationsWithoutImprovement=0;mxMedianHybridCrossingReduction.prototype.maxNoImprovementIterations=2;
mxMedianHybridCrossingReduction.prototype.execute=function(a){a=this.layout.getModel();this.nestedBestRanks=[];for(var c=0;c<a.ranks.length;c++)this.nestedBestRanks[c]=a.ranks[c].slice();for(var f=0,d=this.calculateCrossings(a),c=0;c<this.maxIterations&&f<this.maxNoImprovementIterations;c++){this.weightedMedian(c,a);this.transpose(c,a);var b=this.calculateCrossings(a);if(b<d)for(d=b,b=f=0;b<this.nestedBestRanks.length;b++)for(var e=a.ranks[b],g=0;g<e.length;g++){var k=e[g];this.nestedBestRanks[b][k.getGeneralPurposeVariable(b)]=
k}else for(f++,b=0;b<this.nestedBestRanks.length;b++)for(e=a.ranks[b],g=0;g<e.length;g++)k=e[g],k.setGeneralPurposeVariable(b,g);if(0==d)break}f=[];d=[];for(c=0;c<a.maxRank+1;c++)d[c]=[],f[c]=d[c];for(c=0;c<this.nestedBestRanks.length;c++)for(b=0;b<this.nestedBestRanks[c].length;b++)d[c].push(this.nestedBestRanks[c][b]);a.ranks=f};mxMedianHybridCrossingReduction.prototype.calculateCrossings=function(a){for(var c=a.ranks.length,f=0,d=1;d<c;d++)f+=this.calculateRankCrossing(d,a);return f};
-mxMedianHybridCrossingReduction.prototype.calculateRankCrossing=function(a,c){for(var f=0,d=c.ranks[a],b=c.ranks[a-1],e=[],g=0;g<d.length;g++){for(var k=d[g],l=k.getGeneralPurposeVariable(a),k=k.getPreviousLayerConnectedCells(a),m=[],n=0;n<k.length;n++){var p=k[n].getGeneralPurposeVariable(a-1);m.push(p)}m.sort(function(a,b){return a-b});e[l]=m}d=[];for(g=0;g<e.length;g++)d=d.concat(e[g]);for(e=1;e<b.length;)e<<=1;l=2*e-1;--e;b=[];for(g=0;g<l;++g)b[g]=0;for(g=0;g<d.length;g++)for(l=d[g]+e,++b[l];0<
+mxMedianHybridCrossingReduction.prototype.calculateRankCrossing=function(a,c){for(var f=0,d=c.ranks[a],b=c.ranks[a-1],e=[],g=0;g<d.length;g++){for(var k=d[g],l=k.getGeneralPurposeVariable(a),k=k.getPreviousLayerConnectedCells(a),m=[],n=0;n<k.length;n++){var p=k[n].getGeneralPurposeVariable(a-1);m.push(p)}m.sort(function(b,a){return b-a});e[l]=m}d=[];for(g=0;g<e.length;g++)d=d.concat(e[g]);for(e=1;e<b.length;)e<<=1;l=2*e-1;--e;b=[];for(g=0;g<l;++g)b[g]=0;for(g=0;g<d.length;g++)for(l=d[g]+e,++b[l];0<
l;)l%2&&(f+=b[l+1]),l=l-1>>1,++b[l];return f};
mxMedianHybridCrossingReduction.prototype.transpose=function(a,c){for(var f=!0,d=0;f&&10>d++;)for(var b=1==a%2&&1==d%2,f=!1,e=0;e<c.ranks.length;e++){for(var g=c.ranks[e],k=[],l=0;l<g.length;l++){var m=g[l],n=m.getGeneralPurposeVariable(e);0>n&&(n=l);k[n]=m}for(var p=null,q=null,u,t,v=null,x=null,y,A=null,l=0;l<g.length-1;l++){if(0==l){y=k[l];m=y.getNextLayerConnectedCells(e);n=y.getPreviousLayerConnectedCells(e);u=[];t=[];for(var B=0;B<m.length;B++)u[B]=m[B].getGeneralPurposeVariable(e+1);for(B=
0;B<n.length;B++)t[B]=n[B].getGeneralPurposeVariable(e-1)}else m=p,n=q,u=v,t=x,y=A;A=k[l+1];p=A.getNextLayerConnectedCells(e);q=A.getPreviousLayerConnectedCells(e);v=[];x=[];for(B=0;B<p.length;B++)v[B]=p[B].getGeneralPurposeVariable(e+1);for(B=0;B<q.length;B++)x[B]=q[B].getGeneralPurposeVariable(e-1);for(var z=0,C=0,B=0;B<u.length;B++)for(var H=0;H<v.length;H++)u[B]>v[H]&&z++,u[B]<v[H]&&C++;for(B=0;B<t.length;B++)for(H=0;H<x.length;H++)t[B]>x[H]&&z++,t[B]<x[H]&&C++;if(C<z||C==z&&b)p=y.getGeneralPurposeVariable(e),
y.setGeneralPurposeVariable(e,A.getGeneralPurposeVariable(e)),A.setGeneralPurposeVariable(e,p),p=m,q=n,v=u,x=t,A=y,b||(f=!0)}}};mxMedianHybridCrossingReduction.prototype.weightedMedian=function(a,c){var f=0==a%2;if(f)for(var d=c.maxRank-1;0<=d;d--)this.medianRank(d,f);else for(d=1;d<c.maxRank;d++)this.medianRank(d,f)};
mxMedianHybridCrossingReduction.prototype.medianRank=function(a,c){for(var f=this.nestedBestRanks[a].length,d=[],b=[],e=0;e<f;e++){var g=this.nestedBestRanks[a][e],k=new MedianCellSorter;k.cell=g;var l;l=c?g.getNextLayerConnectedCells(a):g.getPreviousLayerConnectedCells(a);var m;m=c?a+1:a-1;null!=l&&0!=l.length?(k.medianValue=this.medianValue(l,m),d.push(k)):b[g.getGeneralPurposeVariable(a)]=!0}d.sort(MedianCellSorter.prototype.compare);for(e=0;e<f;e++)null==b[e]&&(g=d.shift().cell,g.setGeneralPurposeVariable(a,
-e))};mxMedianHybridCrossingReduction.prototype.medianValue=function(a,c){for(var f=[],d=0,b=0;b<a.length;b++){var e=a[b];f[d++]=e.getGeneralPurposeVariable(c)}f.sort(function(a,b){return a-b});if(1==d%2)return f[Math.floor(d/2)];if(2==d)return(f[0]+f[1])/2;b=d/2;e=f[b-1]-f[0];d=f[d-1]-f[b];return(f[b-1]*d+f[b]*e)/(e+d)};function MedianCellSorter(){}MedianCellSorter.prototype.medianValue=0;MedianCellSorter.prototype.cell=!1;
+e))};mxMedianHybridCrossingReduction.prototype.medianValue=function(a,c){for(var f=[],d=0,b=0;b<a.length;b++){var e=a[b];f[d++]=e.getGeneralPurposeVariable(c)}f.sort(function(b,a){return b-a});if(1==d%2)return f[Math.floor(d/2)];if(2==d)return(f[0]+f[1])/2;b=d/2;e=f[b-1]-f[0];d=f[d-1]-f[b];return(f[b-1]*d+f[b]*e)/(e+d)};function MedianCellSorter(){}MedianCellSorter.prototype.medianValue=0;MedianCellSorter.prototype.cell=!1;
MedianCellSorter.prototype.compare=function(a,c){return null!=a&&null!=c?c.medianValue>a.medianValue?-1:c.medianValue<a.medianValue?1:0:0};function mxMinimumCycleRemover(a){this.layout=a}mxMinimumCycleRemover.prototype=new mxHierarchicalLayoutStage;mxMinimumCycleRemover.prototype.constructor=mxMinimumCycleRemover;mxMinimumCycleRemover.prototype.layout=null;
-mxMinimumCycleRemover.prototype.execute=function(a){a=this.layout.getModel();for(var c={},f=a.vertexMapper.getValues(),d={},b=0;b<f.length;b++)d[f[b].id]=f[b];f=null;if(null!=a.roots)for(var e=a.roots,f=[],b=0;b<e.length;b++)f[b]=a.vertexMapper.get(e[b]);a.visit(function(a,b,e,f,n){b.isAncestor(a)&&(e.invert(),mxUtils.remove(e,a.connectsAsSource),a.connectsAsTarget.push(e),mxUtils.remove(e,b.connectsAsTarget),b.connectsAsSource.push(e));c[b.id]=b;delete d[b.id]},f,!0,null);b=mxUtils.clone(c,null,
-!0);a.visit(function(a,b,e,f,n){b.isAncestor(a)&&(e.invert(),mxUtils.remove(e,a.connectsAsSource),b.connectsAsSource.push(e),a.connectsAsTarget.push(e),mxUtils.remove(e,b.connectsAsTarget));c[b.id]=b;delete d[b.id]},d,!0,b)};function mxCoordinateAssignment(a,c,f,d,b,e){this.layout=a;this.intraCellSpacing=c;this.interRankCellSpacing=f;this.orientation=d;this.initialX=b;this.parallelEdgeSpacing=e}mxCoordinateAssignment.prototype=new mxHierarchicalLayoutStage;
+mxMinimumCycleRemover.prototype.execute=function(a){a=this.layout.getModel();for(var c={},f=a.vertexMapper.getValues(),d={},b=0;b<f.length;b++)d[f[b].id]=f[b];f=null;if(null!=a.roots)for(var e=a.roots,f=[],b=0;b<e.length;b++)f[b]=a.vertexMapper.get(e[b]);a.visit(function(b,a,e,f,n){a.isAncestor(b)&&(e.invert(),mxUtils.remove(e,b.connectsAsSource),b.connectsAsTarget.push(e),mxUtils.remove(e,a.connectsAsTarget),a.connectsAsSource.push(e));c[a.id]=a;delete d[a.id]},f,!0,null);b=mxUtils.clone(c,null,
+!0);a.visit(function(b,a,e,f,n){a.isAncestor(b)&&(e.invert(),mxUtils.remove(e,b.connectsAsSource),a.connectsAsSource.push(e),b.connectsAsTarget.push(e),mxUtils.remove(e,a.connectsAsTarget));c[a.id]=a;delete d[a.id]},d,!0,b)};function mxCoordinateAssignment(a,c,f,d,b,e){this.layout=a;this.intraCellSpacing=c;this.interRankCellSpacing=f;this.orientation=d;this.initialX=b;this.parallelEdgeSpacing=e}mxCoordinateAssignment.prototype=new mxHierarchicalLayoutStage;
mxCoordinateAssignment.prototype.constructor=mxCoordinateAssignment;mxCoordinateAssignment.prototype.layout=null;mxCoordinateAssignment.prototype.intraCellSpacing=30;mxCoordinateAssignment.prototype.interRankCellSpacing=100;mxCoordinateAssignment.prototype.parallelEdgeSpacing=10;mxCoordinateAssignment.prototype.maxIterations=8;mxCoordinateAssignment.prototype.prefHozEdgeSep=5;mxCoordinateAssignment.prototype.prefVertEdgeOff=2;mxCoordinateAssignment.prototype.minEdgeJetty=12;
mxCoordinateAssignment.prototype.channelBuffer=4;mxCoordinateAssignment.prototype.jettyPositions=null;mxCoordinateAssignment.prototype.orientation=mxConstants.DIRECTION_NORTH;mxCoordinateAssignment.prototype.initialX=null;mxCoordinateAssignment.prototype.limitX=null;mxCoordinateAssignment.prototype.currentXDelta=null;mxCoordinateAssignment.prototype.widestRank=null;mxCoordinateAssignment.prototype.rankTopY=null;mxCoordinateAssignment.prototype.rankBottomY=null;
mxCoordinateAssignment.prototype.widestRankValue=null;mxCoordinateAssignment.prototype.rankWidths=null;mxCoordinateAssignment.prototype.rankY=null;mxCoordinateAssignment.prototype.fineTuning=!0;mxCoordinateAssignment.prototype.nextLayerConnectedCache=null;mxCoordinateAssignment.prototype.previousLayerConnectedCache=null;mxCoordinateAssignment.prototype.groupPadding=10;
@@ -879,7 +879,7 @@ y),p=!0):x>b.getGeneralPurposeVariable(l)+1&&(b.setGeneralPurposeVariable(l,x),p
mxCoordinateAssignment.prototype.rankMedianPosition=function(a,c,f){c=c.ranks[a];for(var d=[],b={},e=0;e<c.length;e++){var g=c[e];d[e]=new WeightedCellSorter;d[e].cell=g;d[e].rankIndex=e;b[g.id]=d[e];var k;k=f<a?g.getPreviousLayerConnectedCells(a):g.getNextLayerConnectedCells(a);d[e].weightedValue=this.calculatedWeightedValue(g,k)}d.sort(WeightedCellSorter.prototype.compare);for(e=0;e<d.length;e++){var l,g=d[e].cell;l=0;k=f<a?g.getPreviousLayerConnectedCells(a).slice():g.getNextLayerConnectedCells(a).slice();
null!=k&&(l=k.length,l=0<l?this.medianXValue(k,f):g.getGeneralPurposeVariable(a));var m=0;k=-1E8;for(var n=d[e].rankIndex-1;0<=n;){var p=b[c[n].id];if(null!=p){var q=p.cell;p.visited?(k=q.getGeneralPurposeVariable(a)+q.width/2+this.intraCellSpacing+m+g.width/2,n=-1):(m+=q.width+this.intraCellSpacing,n--)}}m=0;q=1E8;for(n=d[e].rankIndex+1;n<d.length;)if(p=b[c[n].id],null!=p){var u=p.cell;p.visited?(q=u.getGeneralPurposeVariable(a)-u.width/2-this.intraCellSpacing-m-g.width/2,n=d.length):(m+=u.width+
this.intraCellSpacing,n++)}l>=k&&l<=q?g.setGeneralPurposeVariable(a,l):l<k?(g.setGeneralPurposeVariable(a,k),this.currentXDelta+=k-l):l>q&&(g.setGeneralPurposeVariable(a,q),this.currentXDelta+=l-q);d[e].visited=!0}};mxCoordinateAssignment.prototype.calculatedWeightedValue=function(a,c){for(var f=0,d=0;d<c.length;d++){var b=c[d];a.isVertex()&&b.isVertex()?f++:f=a.isEdge()&&b.isEdge()?f+8:f+2}return f};
-mxCoordinateAssignment.prototype.medianXValue=function(a,c){if(0==a.length)return 0;for(var f=[],d=0;d<a.length;d++)f[d]=a[d].getGeneralPurposeVariable(c);f.sort(function(a,d){return a-d});if(1==a.length%2)return f[Math.floor(a.length/2)];d=a.length/2;return(f[d-1]+f[d])/2};
+mxCoordinateAssignment.prototype.medianXValue=function(a,c){if(0==a.length)return 0;for(var f=[],d=0;d<a.length;d++)f[d]=a[d].getGeneralPurposeVariable(c);f.sort(function(b,a){return b-a});if(1==a.length%2)return f[Math.floor(a.length/2)];d=a.length/2;return(f[d-1]+f[d])/2};
mxCoordinateAssignment.prototype.initialCoords=function(a,c){this.calculateWidestRank(a,c);for(var f=this.widestRank;0<=f;f--)f<c.maxRank&&this.rankCoordinates(f,a,c);for(f=this.widestRank+1;f<=c.maxRank;f++)0<f&&this.rankCoordinates(f,a,c)};
mxCoordinateAssignment.prototype.rankCoordinates=function(a,c,f){c=f.ranks[a];f=this.initialX+(this.widestRankValue-this.rankWidths[a])/2;for(var d=!1,b=0;b<c.length;b++){var e=c[b];if(e.isVertex()){var g=this.layout.getVertexBounds(e.cell);null!=g?this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?(e.width=g.width,e.height=g.height):(e.width=g.height,e.height=g.width):d=!0}else e.isEdge()&&(g=1,null!=e.edges?g=e.edges.length:mxLog.warn("edge.edges is null"),
e.width=(g-1)*this.parallelEdgeSpacing);f+=e.width/2;e.setX(a,f);e.setGeneralPurposeVariable(a,f);f+=e.width/2;f+=this.intraCellSpacing}1==d&&mxLog.warn("At least one cell has no bounds")};
@@ -902,8 +902,8 @@ q.push(new mxPoint(t,v-x)),q.push(new mxPoint(t,v))):(this.layout.edgeStyle==mxH
mxCoordinateAssignment.prototype.setVertexLocation=function(a){var c=a.cell,f=a.x[0]-a.width/2,d=a.y[0]-a.height/2;this.rankTopY[a.minRank]=Math.min(this.rankTopY[a.minRank],d);this.rankBottomY[a.minRank]=Math.max(this.rankBottomY[a.minRank],d+a.height);this.orientation==mxConstants.DIRECTION_NORTH||this.orientation==mxConstants.DIRECTION_SOUTH?this.layout.setVertexLocation(c,f,d):this.layout.setVertexLocation(c,d,f);this.limitX=Math.max(this.limitX,f+a.width)};
mxCoordinateAssignment.prototype.processReversedEdge=function(a,c){};function WeightedCellSorter(a,c){this.cell=a;this.weightedValue=c}WeightedCellSorter.prototype.weightedValue=0;WeightedCellSorter.prototype.nudge=!1;WeightedCellSorter.prototype.visited=!1;WeightedCellSorter.prototype.rankIndex=null;WeightedCellSorter.prototype.cell=null;WeightedCellSorter.prototype.compare=function(a,c){return null!=a&&null!=c?c.weightedValue>a.weightedValue?-1:c.weightedValue<a.weightedValue?1:c.nudge?-1:1:0};
function mxSwimlaneOrdering(a){this.layout=a}mxSwimlaneOrdering.prototype=new mxHierarchicalLayoutStage;mxSwimlaneOrdering.prototype.constructor=mxSwimlaneOrdering;mxSwimlaneOrdering.prototype.layout=null;
-mxSwimlaneOrdering.prototype.execute=function(a){a=this.layout.getModel();var c=mxUtils.clone(a.vertexMapper,null,!0),f=null;if(null!=a.roots)for(var d=a.roots,f=[],b=0;b<d.length;b++)mxCellPath.create(d[b]),f[b]=a.vertexMapper.get(d[b]);a.visit(function(a,b,d,f,m){f=null!=a&&a.swimlaneIndex==b.swimlaneIndex&&b.isAncestor(a);m=null!=a&&null!=d&&a.swimlaneIndex<b.swimlaneIndex&&d.source==b;f?(d.invert(),mxUtils.remove(d,a.connectsAsSource),b.connectsAsSource.push(d),a.connectsAsTarget.push(d),mxUtils.remove(d,
-b.connectsAsTarget)):m&&(d.invert(),mxUtils.remove(d,a.connectsAsTarget),b.connectsAsTarget.push(d),a.connectsAsSource.push(d),mxUtils.remove(d,b.connectsAsSource));a=mxCellPath.create(b.cell);delete c[a]},f,!0,null)};function mxHierarchicalLayout(a,c,f){mxGraphLayout.call(this,a);this.orientation=null!=c?c:mxConstants.DIRECTION_NORTH;this.deterministic=null!=f?f:!0}var mxHierarchicalEdgeStyle={ORTHOGONAL:1,POLYLINE:2,STRAIGHT:3,CURVE:4};mxHierarchicalLayout.prototype=new mxGraphLayout;
+mxSwimlaneOrdering.prototype.execute=function(a){a=this.layout.getModel();var c=mxUtils.clone(a.vertexMapper,null,!0),f=null;if(null!=a.roots)for(var d=a.roots,f=[],b=0;b<d.length;b++)mxCellPath.create(d[b]),f[b]=a.vertexMapper.get(d[b]);a.visit(function(b,a,d,f,m){f=null!=b&&b.swimlaneIndex==a.swimlaneIndex&&a.isAncestor(b);m=null!=b&&null!=d&&b.swimlaneIndex<a.swimlaneIndex&&d.source==a;f?(d.invert(),mxUtils.remove(d,b.connectsAsSource),a.connectsAsSource.push(d),b.connectsAsTarget.push(d),mxUtils.remove(d,
+a.connectsAsTarget)):m&&(d.invert(),mxUtils.remove(d,b.connectsAsTarget),a.connectsAsTarget.push(d),b.connectsAsSource.push(d),mxUtils.remove(d,a.connectsAsSource));b=mxCellPath.create(a.cell);delete c[b]},f,!0,null)};function mxHierarchicalLayout(a,c,f){mxGraphLayout.call(this,a);this.orientation=null!=c?c:mxConstants.DIRECTION_NORTH;this.deterministic=null!=f?f:!0}var mxHierarchicalEdgeStyle={ORTHOGONAL:1,POLYLINE:2,STRAIGHT:3,CURVE:4};mxHierarchicalLayout.prototype=new mxGraphLayout;
mxHierarchicalLayout.prototype.constructor=mxHierarchicalLayout;mxHierarchicalLayout.prototype.roots=null;mxHierarchicalLayout.prototype.resizeParent=!1;mxHierarchicalLayout.prototype.maintainParentLocation=!1;mxHierarchicalLayout.prototype.moveParent=!1;mxHierarchicalLayout.prototype.parentBorder=0;mxHierarchicalLayout.prototype.intraCellSpacing=30;mxHierarchicalLayout.prototype.interRankCellSpacing=100;mxHierarchicalLayout.prototype.interHierarchySpacing=60;
mxHierarchicalLayout.prototype.parallelEdgeSpacing=10;mxHierarchicalLayout.prototype.orientation=mxConstants.DIRECTION_NORTH;mxHierarchicalLayout.prototype.fineTuning=!0;mxHierarchicalLayout.prototype.tightenToSource=!0;mxHierarchicalLayout.prototype.disableEdgeStyle=!0;mxHierarchicalLayout.prototype.traverseAncestors=!0;mxHierarchicalLayout.prototype.model=null;mxHierarchicalLayout.prototype.edgesCache=null;mxHierarchicalLayout.prototype.edgeSourceTermCache=null;
mxHierarchicalLayout.prototype.edgesTargetTermCache=null;mxHierarchicalLayout.prototype.edgeStyle=mxHierarchicalEdgeStyle.POLYLINE;mxHierarchicalLayout.prototype.getModel=function(){return this.model};
@@ -1017,12 +1017,12 @@ function mxPrintPreview(a,c,f,d,b,e,g,k,l){this.graph=a;this.scale=null!=c?c:1/a
mxPrintPreview.prototype.marginTop=0;mxPrintPreview.prototype.marginBottom=0;mxPrintPreview.prototype.x0=0;mxPrintPreview.prototype.y0=0;mxPrintPreview.prototype.autoOrigin=!0;mxPrintPreview.prototype.printOverlays=!1;mxPrintPreview.prototype.printControls=!1;mxPrintPreview.prototype.printBackgroundImage=!1;mxPrintPreview.prototype.backgroundColor="#ffffff";mxPrintPreview.prototype.borderColor=null;mxPrintPreview.prototype.title=null;mxPrintPreview.prototype.pageSelector=null;
mxPrintPreview.prototype.wnd=null;mxPrintPreview.prototype.targetWindow=null;mxPrintPreview.prototype.pageCount=0;mxPrintPreview.prototype.clipping=!0;mxPrintPreview.prototype.getWindow=function(){return this.wnd};
mxPrintPreview.prototype.getDoctype=function(){var a="";5==document.documentMode?a='<meta http-equiv="X-UA-Compatible" content="IE=5">':8==document.documentMode?a='<meta http-equiv="X-UA-Compatible" content="IE=8">':8<document.documentMode&&(a='\x3c!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--\x3e');return a};mxPrintPreview.prototype.appendGraph=function(a,c,f,d,b,e){this.graph=a;this.scale=null!=c?c:1/a.pageScale;this.x0=f;this.y0=d;this.open(null,null,b,e)};
-mxPrintPreview.prototype.open=function(a,c,f,d){var b=this.graph.cellRenderer.initializeOverlay,e=null;try{this.printOverlays&&(this.graph.cellRenderer.initializeOverlay=function(a,b){b.init(a.view.getDrawPane())});this.printControls&&(this.graph.cellRenderer.initControl=function(a,b,d,c){b.dialect=a.view.graph.dialect;b.init(a.view.getDrawPane())});this.wnd=null!=c?c:this.wnd;var g=!1;null==this.wnd&&(g=!0,this.wnd=window.open());var k=this.wnd.document;if(g){var l=this.getDoctype();null!=l&&0<l.length&&
+mxPrintPreview.prototype.open=function(a,c,f,d){var b=this.graph.cellRenderer.initializeOverlay,e=null;try{this.printOverlays&&(this.graph.cellRenderer.initializeOverlay=function(b,a){a.init(b.view.getDrawPane())});this.printControls&&(this.graph.cellRenderer.initControl=function(b,a,d,c){a.dialect=b.view.graph.dialect;a.init(b.view.getDrawPane())});this.wnd=null!=c?c:this.wnd;var g=!1;null==this.wnd&&(g=!0,this.wnd=window.open());var k=this.wnd.document;if(g){var l=this.getDoctype();null!=l&&0<l.length&&
k.writeln(l);mxClient.IS_VML?k.writeln('<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">'):("CSS1Compat"===document.compatMode&&k.writeln("<!DOCTYPE html>"),k.writeln("<html>"));k.writeln("<head>");this.writeHead(k,a);k.writeln("</head>");k.writeln('<body class="mxPage">')}var m=this.graph.getGraphBounds().clone(),n=this.graph.getView().getScale(),p=n/this.scale,q=this.graph.getView().getTranslate();this.autoOrigin||(this.x0-=q.x*this.scale,this.y0-=
-q.y*this.scale,m.width+=m.x,m.height+=m.y,m.x=0,this.border=m.y=0);var u=this.pageFormat.width-2*this.border,t=this.pageFormat.height-2*this.border;this.pageFormat.height+=this.marginTop+this.marginBottom;m.width/=p;m.height/=p;var v=Math.max(1,Math.ceil((m.width+this.x0)/u)),x=Math.max(1,Math.ceil((m.height+this.y0)/t));this.pageCount=v*x;var y=mxUtils.bind(this,function(){if(this.pageSelector&&(1<x||1<v)){var a=this.createPageSelector(x,v);k.body.appendChild(a);if(mxClient.IS_IE&&null==k.documentMode||
-5==k.documentMode||8==k.documentMode||7==k.documentMode){a.style.position="absolute";var b=function(){a.style.top=(k.body.scrollTop||k.documentElement.scrollTop)+10+"px"};mxEvent.addListener(this.wnd,"scroll",function(a){b()});mxEvent.addListener(this.wnd,"resize",function(a){b()})}}}),A=mxUtils.bind(this,function(a,b){null!=this.borderColor&&(a.style.borderColor=this.borderColor,a.style.borderStyle="solid",a.style.borderWidth="1px");a.style.background=this.backgroundColor;if(f||b)a.style.pageBreakAfter=
-"always";g&&(mxClient.IS_IE||11<=document.documentMode||mxClient.IS_EDGE)?(k.writeln(a.outerHTML),a.parentNode.removeChild(a)):(a.parentNode.removeChild(a),k.body.appendChild(a));(f||b)&&this.addPageBreak(k)}),B=this.getCoverPages(this.pageFormat.width,this.pageFormat.height);if(null!=B)for(var z=0;z<B.length;z++)A(B[z],!0);for(var C=this.getAppendices(this.pageFormat.width,this.pageFormat.height),z=0;z<x;z++){var H=z*t/this.scale-this.y0/this.scale+(m.y-q.y*n)/n;for(a=0;a<v;a++){if(null==this.wnd)return null;
-var D=a*u/this.scale-this.x0/this.scale+(m.x-q.x*n)/n,E=z*v+a+1,G=new mxRectangle(D,H,u,t),e=this.renderPage(this.pageFormat.width,this.pageFormat.height,0,0,mxUtils.bind(this,function(a){this.addGraphFragment(-D,-H,this.scale,E,a,G);this.printBackgroundImage&&this.insertBackgroundImage(a,-D,-H)}),E);e.setAttribute("id","mxPage-"+E);A(e,null!=C||z<x-1||a<v-1)}}if(null!=C)for(z=0;z<C.length;z++)A(C[z],z<C.length-1);g&&!d&&(this.closeDocument(),y());this.wnd.focus()}catch(J){null!=e&&null!=e.parentNode&&
+q.y*this.scale,m.width+=m.x,m.height+=m.y,m.x=0,this.border=m.y=0);var u=this.pageFormat.width-2*this.border,t=this.pageFormat.height-2*this.border;this.pageFormat.height+=this.marginTop+this.marginBottom;m.width/=p;m.height/=p;var v=Math.max(1,Math.ceil((m.width+this.x0)/u)),x=Math.max(1,Math.ceil((m.height+this.y0)/t));this.pageCount=v*x;var y=mxUtils.bind(this,function(){if(this.pageSelector&&(1<x||1<v)){var b=this.createPageSelector(x,v);k.body.appendChild(b);if(mxClient.IS_IE&&null==k.documentMode||
+5==k.documentMode||8==k.documentMode||7==k.documentMode){b.style.position="absolute";var a=function(){b.style.top=(k.body.scrollTop||k.documentElement.scrollTop)+10+"px"};mxEvent.addListener(this.wnd,"scroll",function(b){a()});mxEvent.addListener(this.wnd,"resize",function(b){a()})}}}),A=mxUtils.bind(this,function(b,a){null!=this.borderColor&&(b.style.borderColor=this.borderColor,b.style.borderStyle="solid",b.style.borderWidth="1px");b.style.background=this.backgroundColor;if(f||a)b.style.pageBreakAfter=
+"always";g&&(mxClient.IS_IE||11<=document.documentMode||mxClient.IS_EDGE)?(k.writeln(b.outerHTML),b.parentNode.removeChild(b)):(b.parentNode.removeChild(b),k.body.appendChild(b));(f||a)&&this.addPageBreak(k)}),B=this.getCoverPages(this.pageFormat.width,this.pageFormat.height);if(null!=B)for(var z=0;z<B.length;z++)A(B[z],!0);for(var C=this.getAppendices(this.pageFormat.width,this.pageFormat.height),z=0;z<x;z++){var H=z*t/this.scale-this.y0/this.scale+(m.y-q.y*n)/n;for(a=0;a<v;a++){if(null==this.wnd)return null;
+var D=a*u/this.scale-this.x0/this.scale+(m.x-q.x*n)/n,E=z*v+a+1,G=new mxRectangle(D,H,u,t),e=this.renderPage(this.pageFormat.width,this.pageFormat.height,0,0,mxUtils.bind(this,function(b){this.addGraphFragment(-D,-H,this.scale,E,b,G);this.printBackgroundImage&&this.insertBackgroundImage(b,-D,-H)}),E);e.setAttribute("id","mxPage-"+E);A(e,null!=C||z<x-1||a<v-1)}}if(null!=C)for(z=0;z<C.length;z++)A(C[z],z<C.length-1);g&&!d&&(this.closeDocument(),y());this.wnd.focus()}catch(J){null!=e&&null!=e.parentNode&&
e.parentNode.removeChild(e)}finally{this.graph.cellRenderer.initializeOverlay=b}return this.wnd};mxPrintPreview.prototype.addPageBreak=function(a){var c=a.createElement("hr");c.className="mxPageBreak";a.body.appendChild(c)};mxPrintPreview.prototype.closeDocument=function(){if(null!=this.wnd&&null!=this.wnd.document){var a=this.wnd.document;this.writePostfix(a);a.writeln("</body>");a.writeln("</html>");a.close();mxEvent.release(a.body)}};
mxPrintPreview.prototype.writeHead=function(a,c){null!=this.title&&a.writeln("<title>"+this.title+"</title>");mxClient.IS_VML&&a.writeln('<style type="text/css">v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}</style>');mxClient.link("stylesheet",mxClient.basePath+"/css/common.css",a);a.writeln('<style type="text/css">');a.writeln("@media print {");a.writeln(" table.mxPageSelector { display: none; }");a.writeln(" hr.mxPageBreak { display: none; }");a.writeln("}");a.writeln("@media screen {");
a.writeln(" table.mxPageSelector { position: fixed; right: 10px; top: 10px;font-family: Arial; font-size:10pt; border: solid 1px darkgray;background: white; border-collapse:collapse; }");a.writeln(" table.mxPageSelector td { border: solid 1px gray; padding:4px; }");a.writeln(" body.mxPage { background: gray; }");a.writeln("}");null!=c&&a.writeln(c);a.writeln("</style>")};mxPrintPreview.prototype.writePostfix=function(a){};
@@ -1033,7 +1033,7 @@ mxPrintPreview.prototype.renderPage=function(a,c,f,d,b,e){e=this.wnd.document;va
c-2*this.border+"px",l.style.overflow="hidden",!mxClient.IS_IE||null!=e.documentMode&&5!=e.documentMode&&8!=e.documentMode&&7!=e.documentMode?(l.style.top=this.border+"px",l.style.left=this.border+"px"):(l.style.marginTop=this.border+"px",l.style.marginLeft=this.border+"px"),this.graph.dialect==mxConstants.DIALECT_VML&&(l.style.position="absolute"),g.appendChild(l),document.body.appendChild(g),k=l}catch(n){throw g.parentNode.removeChild(g),n;}b(k);return g};
mxPrintPreview.prototype.getRoot=function(){var a=this.graph.view.currentRoot;null==a&&(a=this.graph.getModel().getRoot());return a};
mxPrintPreview.prototype.addGraphFragment=function(a,c,f,d,b,e){var g=this.graph.getView();d=this.graph.container;this.graph.container=b;var k=g.getCanvas(),l=g.getBackgroundPane(),m=g.getDrawPane(),n=g.getOverlayPane();this.graph.dialect==mxConstants.DIALECT_SVG?g.createSvg():this.graph.dialect==mxConstants.DIALECT_VML?g.createVml():g.createHtml();var p=g.isEventsEnabled();g.setEventsEnabled(!1);var q=this.graph.isEnabled();this.graph.setEnabled(!1);var u=g.getTranslate();g.translate=new mxPoint(a,
-c);var t=this.graph.cellRenderer.redraw,v=g.states;a=g.scale;if(this.clipping){var x=new mxRectangle((e.x+u.x)*a,(e.y+u.y)*a,e.width*a/f,e.height*a/f);this.graph.cellRenderer.redraw=function(a,b,d){if(null!=a){var c=v.get(a.cell);if(null!=c&&(c=g.getBoundingBox(c,!1),null!=c&&!mxUtils.intersects(x,c)))return}t.apply(this,arguments)}}a=null;try{var y=[this.getRoot()];a=new mxTemporaryCellStates(g,f,y)}finally{if(mxClient.IS_IE)g.overlayPane.innerHTML="",g.canvas.style.overflow="hidden",g.canvas.style.position=
+c);var t=this.graph.cellRenderer.redraw,v=g.states;a=g.scale;if(this.clipping){var x=new mxRectangle((e.x+u.x)*a,(e.y+u.y)*a,e.width*a/f,e.height*a/f);this.graph.cellRenderer.redraw=function(b,a,d){if(null!=b){var c=v.get(b.cell);if(null!=c&&(c=g.getBoundingBox(c,!1),null!=c&&!mxUtils.intersects(x,c)))return}t.apply(this,arguments)}}a=null;try{var y=[this.getRoot()];a=new mxTemporaryCellStates(g,f,y)}finally{if(mxClient.IS_IE)g.overlayPane.innerHTML="",g.canvas.style.overflow="hidden",g.canvas.style.position=
"relative",g.canvas.style.top=this.marginTop+"px",g.canvas.style.width=e.width+"px",g.canvas.style.height=e.height+"px";else for(f=b.firstChild;null!=f;)y=f.nextSibling,c=f.nodeName.toLowerCase(),"svg"==c?(f.style.overflow="hidden",f.style.position="relative",f.style.top=this.marginTop+"px",f.setAttribute("width",e.width),f.setAttribute("height",e.height),f.style.width="",f.style.height=""):"default"!=f.style.cursor&&"div"!=c&&f.parentNode.removeChild(f),f=y;this.printBackgroundImage&&(b=b.getElementsByTagName("svg"),
0<b.length&&(b[0].style.position="absolute"));g.overlayPane.parentNode.removeChild(g.overlayPane);this.graph.setEnabled(q);this.graph.container=d;this.graph.cellRenderer.redraw=t;g.canvas=k;g.backgroundPane=l;g.drawPane=m;g.overlayPane=n;g.translate=u;a.destroy();g.setEventsEnabled(p)}};
mxPrintPreview.prototype.insertBackgroundImage=function(a,c,f){var d=this.graph.backgroundImage;if(null!=d){var b=document.createElement("img");b.style.position="absolute";b.style.marginLeft=Math.round(c*this.scale)+"px";b.style.marginTop=Math.round(f*this.scale)+"px";b.setAttribute("width",Math.round(this.scale*d.width));b.setAttribute("height",Math.round(this.scale*d.height));b.src=d.src;a.insertBefore(b,a.firstChild)}};mxPrintPreview.prototype.getCoverPages=function(){return null};
@@ -1107,8 +1107,8 @@ mxConstants.DEFAULT_TEXT_DIRECTION));a.text.opacity=mxUtils.getValue(a.style,mxC
d)&&(f.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(d,a)),b=f.dialect!=mxConstants.DIALECT_SVG&&"IMG"==mxEvent.getSource(d).nodeName)}),mxUtils.bind(this,function(b){this.isLabelEvent(a,b)&&f.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(b,e(b)))}),mxUtils.bind(this,function(d){this.isLabelEvent(a,d)&&(f.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(d,e(d))),b=!1)}));f.nativeDblClickEnabled&&mxEvent.addListener(a.text.node,"dblclick",mxUtils.bind(this,function(b){this.isLabelEvent(a,
b)&&(f.dblClick(b,a.cell),mxEvent.consume(b))}))}};mxCellRenderer.prototype.initializeLabel=function(a,c){mxClient.IS_SVG&&mxClient.NO_FO&&c.dialect!=mxConstants.DIALECT_SVG?c.init(a.view.graph.container):c.init(a.view.getDrawPane())};
mxCellRenderer.prototype.createCellOverlays=function(a){var c=a.view.graph.getCellOverlays(a.cell),f=null;if(null!=c)for(var f=new mxDictionary,d=0;d<c.length;d++){var b=null!=a.overlays?a.overlays.remove(c[d]):null;null==b&&(b=new mxImageShape(new mxRectangle,c[d].image.src),b.dialect=a.view.graph.dialect,b.preserveImageAspect=!1,b.overlay=c[d],this.initializeOverlay(a,b),this.installCellOverlayListeners(a,c[d],b),null!=c[d].cursor&&(b.node.style.cursor=c[d].cursor));f.put(c[d],b)}null!=a.overlays&&
-a.overlays.visit(function(a,b){b.destroy()});a.overlays=f};mxCellRenderer.prototype.initializeOverlay=function(a,c){c.init(a.view.getOverlayPane())};
-mxCellRenderer.prototype.installCellOverlayListeners=function(a,c,f){var d=a.view.graph;mxEvent.addListener(f.node,"click",function(b){d.isEditing()&&d.stopEditing(!d.isInvokesStopCellEditing());c.fireEvent(new mxEventObject(mxEvent.CLICK,"event",b,"cell",a.cell))});mxEvent.addGestureListeners(f.node,function(a){mxEvent.consume(a)},function(b){d.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(b,a))});mxClient.IS_TOUCH&&mxEvent.addListener(f.node,"touchend",function(b){c.fireEvent(new mxEventObject(mxEvent.CLICK,
+a.overlays.visit(function(b,a){a.destroy()});a.overlays=f};mxCellRenderer.prototype.initializeOverlay=function(a,c){c.init(a.view.getOverlayPane())};
+mxCellRenderer.prototype.installCellOverlayListeners=function(a,c,f){var d=a.view.graph;mxEvent.addListener(f.node,"click",function(b){d.isEditing()&&d.stopEditing(!d.isInvokesStopCellEditing());c.fireEvent(new mxEventObject(mxEvent.CLICK,"event",b,"cell",a.cell))});mxEvent.addGestureListeners(f.node,function(b){mxEvent.consume(b)},function(b){d.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(b,a))});mxClient.IS_TOUCH&&mxEvent.addListener(f.node,"touchend",function(b){c.fireEvent(new mxEventObject(mxEvent.CLICK,
"event",b,"cell",a.cell))})};mxCellRenderer.prototype.createControl=function(a){var c=a.view.graph,f=c.getFoldingImage(a);if(c.foldingEnabled&&null!=f){if(null==a.control){var d=new mxRectangle(0,0,f.width,f.height);a.control=new mxImageShape(d,f.src);a.control.preserveImageAspect=!1;a.control.dialect=c.dialect;this.initControl(a,a.control,!0,this.createControlClickHandler(a))}}else null!=a.control&&(a.control.destroy(),a.control=null)};
mxCellRenderer.prototype.createControlClickHandler=function(a){var c=a.view.graph;return mxUtils.bind(this,function(f){if(this.forceControlClickHandler||c.isEnabled()){var d=!c.isCellCollapsed(a.cell);c.foldCells(d,!1,[a.cell],null,f);mxEvent.consume(f)}})};
mxCellRenderer.prototype.initControl=function(a,c,f,d){var b=a.view.graph;b.isHtmlLabel(a.cell)&&mxClient.NO_FO&&b.dialect==mxConstants.DIALECT_SVG?(c.dialect=mxConstants.DIALECT_PREFERHTML,c.init(b.container),c.node.style.zIndex=1):c.init(a.view.getOverlayPane());c=c.innerNode||c.node;null==d||mxClient.IS_IOS||(b.isEnabled()&&(c.style.cursor="pointer"),mxEvent.addListener(c,"click",d));if(f){var e=null;mxEvent.addGestureListeners(c,function(d){e=new mxPoint(mxEvent.getClientX(d),mxEvent.getClientY(d));
@@ -1246,7 +1246,7 @@ mxGraphView.prototype.destroy=function(){var a=null!=this.canvas?this.canvas.own
function mxCurrentRootChange(a,c){this.view=a;this.previous=this.root=c;this.isUp=null==c;if(!this.isUp)for(var f=this.view.currentRoot,d=this.view.graph.getModel();null!=f;){if(f==c){this.isUp=!0;break}f=d.getParent(f)}}
mxCurrentRootChange.prototype.execute=function(){var a=this.view.currentRoot;this.view.currentRoot=this.previous;this.previous=a;a=this.view.graph.getTranslateForRoot(this.view.currentRoot);null!=a&&(this.view.translate=new mxPoint(-a.x,-a.y));this.isUp?(this.view.clear(this.view.currentRoot,!0),this.view.validate()):this.view.refresh();this.view.fireEvent(new mxEventObject(this.isUp?mxEvent.UP:mxEvent.DOWN,"root",this.view.currentRoot,"previous",this.previous));this.isUp=!this.isUp};
function mxGraph(a,c,f,d){this.mouseListeners=null;this.renderHint=f;this.dialect=mxClient.IS_SVG?mxConstants.DIALECT_SVG:f==mxConstants.RENDERING_HINT_EXACT&&mxClient.IS_VML?mxConstants.DIALECT_VML:f==mxConstants.RENDERING_HINT_FASTEST?mxConstants.DIALECT_STRICTHTML:f==mxConstants.RENDERING_HINT_FASTER?mxConstants.DIALECT_PREFERHTML:mxConstants.DIALECT_MIXEDHTML;this.model=null!=c?c:new mxGraphModel;this.multiplicities=[];this.imageBundles=[];this.cellRenderer=this.createCellRenderer();this.setSelectionModel(this.createSelectionModel());
-this.setStylesheet(null!=d?d:this.createStylesheet());this.view=this.createGraphView();this.graphModelChangeListener=mxUtils.bind(this,function(a,d){this.graphModelChanged(d.getProperty("edit").changes)});this.model.addListener(mxEvent.CHANGE,this.graphModelChangeListener);this.createHandlers();null!=a&&this.init(a);this.view.revalidate()}mxLoadResources&&mxResources.add(mxClient.basePath+"/resources/graph");mxGraph.prototype=new mxEventSource;mxGraph.prototype.constructor=mxGraph;
+this.setStylesheet(null!=d?d:this.createStylesheet());this.view=this.createGraphView();this.graphModelChangeListener=mxUtils.bind(this,function(b,a){this.graphModelChanged(a.getProperty("edit").changes)});this.model.addListener(mxEvent.CHANGE,this.graphModelChangeListener);this.createHandlers();null!=a&&this.init(a);this.view.revalidate()}mxLoadResources&&mxResources.add(mxClient.basePath+"/resources/graph");mxGraph.prototype=new mxEventSource;mxGraph.prototype.constructor=mxGraph;
mxGraph.prototype.EMPTY_ARRAY=[];mxGraph.prototype.mouseListeners=null;mxGraph.prototype.isMouseDown=!1;mxGraph.prototype.model=null;mxGraph.prototype.view=null;mxGraph.prototype.stylesheet=null;mxGraph.prototype.selectionModel=null;mxGraph.prototype.cellEditor=null;mxGraph.prototype.cellRenderer=null;mxGraph.prototype.multiplicities=null;mxGraph.prototype.renderHint=null;mxGraph.prototype.dialect=null;mxGraph.prototype.gridSize=10;mxGraph.prototype.gridEnabled=!0;mxGraph.prototype.portsEnabled=!0;
mxGraph.prototype.nativeDblClickEnabled=!0;mxGraph.prototype.doubleTapEnabled=!0;mxGraph.prototype.doubleTapTimeout=500;mxGraph.prototype.doubleTapTolerance=25;mxGraph.prototype.lastTouchY=0;mxGraph.prototype.lastTouchY=0;mxGraph.prototype.lastTouchTime=0;mxGraph.prototype.tapAndHoldEnabled=!0;mxGraph.prototype.tapAndHoldDelay=500;mxGraph.prototype.tapAndHoldInProgress=!1;mxGraph.prototype.tapAndHoldValid=!1;mxGraph.prototype.initialTouchX=0;mxGraph.prototype.initialTouchY=0;
mxGraph.prototype.tolerance=4;mxGraph.prototype.defaultOverlap=.5;mxGraph.prototype.defaultParent=null;mxGraph.prototype.alternateEdgeStyle=null;mxGraph.prototype.backgroundImage=null;mxGraph.prototype.pageVisible=!1;mxGraph.prototype.pageBreaksVisible=!1;mxGraph.prototype.pageBreakColor="gray";mxGraph.prototype.pageBreakDashed=!0;mxGraph.prototype.minPageBreakDist=20;mxGraph.prototype.preferPageSize=!1;mxGraph.prototype.pageFormat=mxConstants.PAGE_FORMAT_A4_PORTRAIT;mxGraph.prototype.pageScale=1.5;
@@ -1291,8 +1291,8 @@ mxGraph.prototype.sizeDidChange=function(){var a=this.getGraphBounds();if(null!=
c=d.height*this.view.scale)}null!=this.minimumGraphSize&&(f=Math.max(f,this.minimumGraphSize.width*this.view.scale),c=Math.max(c,this.minimumGraphSize.height*this.view.scale));f=Math.ceil(f);c=Math.ceil(c);this.dialect==mxConstants.DIALECT_SVG?(d=this.view.getDrawPane().ownerSVGElement,d.style.minWidth=Math.max(1,f)+"px",d.style.minHeight=Math.max(1,c)+"px",d.style.width="100%",d.style.height="100%"):mxClient.IS_QUIRKS?this.view.updateHtmlCanvasSize(Math.max(1,f),Math.max(1,c)):(this.view.canvas.style.minWidth=
Math.max(1,f)+"px",this.view.canvas.style.minHeight=Math.max(1,c)+"px");this.updatePageBreaks(this.pageBreaksVisible,f,c)}this.fireEvent(new mxEventObject(mxEvent.SIZE,"bounds",a))};mxGraph.prototype.doResizeContainer=function(a,c){null!=this.maximumContainerSize&&(a=Math.min(this.maximumContainerSize.width,a),c=Math.min(this.maximumContainerSize.height,c));this.container.style.width=Math.ceil(a)+"px";this.container.style.height=Math.ceil(c)+"px"};
mxGraph.prototype.updatePageBreaks=function(a,c,f){c=this.view.scale;f=this.view.translate;var d=this.pageFormat,b=c*this.pageScale,e=new mxRectangle(0,0,d.width*b,d.height*b),d=mxRectangle.fromRectangle(this.getGraphBounds());d.width=Math.max(1,d.width);d.height=Math.max(1,d.height);e.x=Math.floor((d.x-f.x*c)/e.width)*e.width+f.x*c;e.y=Math.floor((d.y-f.y*c)/e.height)*e.height+f.y*c;d.width=Math.ceil((d.width+(d.x-e.x))/e.width)*e.width;d.height=Math.ceil((d.height+(d.y-e.y))/e.height)*e.height;
-var g=(a=a&&Math.min(e.width,e.height)>this.minPageBreakDist)?Math.ceil(d.height/e.height)+1:0,k=a?Math.ceil(d.width/e.width)+1:0,l=(k-1)*e.width,m=(g-1)*e.height;null==this.horizontalPageBreaks&&0<g&&(this.horizontalPageBreaks=[]);null==this.verticalPageBreaks&&0<k&&(this.verticalPageBreaks=[]);a=mxUtils.bind(this,function(a){if(null!=a){for(var b=a==this.horizontalPageBreaks?g:k,d=0;d<=b;d++){var c=a==this.horizontalPageBreaks?[new mxPoint(Math.round(e.x),Math.round(e.y+d*e.height)),new mxPoint(Math.round(e.x+
-l),Math.round(e.y+d*e.height))]:[new mxPoint(Math.round(e.x+d*e.width),Math.round(e.y)),new mxPoint(Math.round(e.x+d*e.width),Math.round(e.y+m))];null!=a[d]?(a[d].points=c,a[d].redraw()):(c=new mxPolyline(c,this.pageBreakColor),c.dialect=this.dialect,c.pointerEvents=!1,c.isDashed=this.pageBreakDashed,c.init(this.view.backgroundPane),c.redraw(),a[d]=c)}for(d=b;d<a.length;d++)a[d].destroy();a.splice(b,a.length-b)}});a(this.horizontalPageBreaks);a(this.verticalPageBreaks)};
+var g=(a=a&&Math.min(e.width,e.height)>this.minPageBreakDist)?Math.ceil(d.height/e.height)+1:0,k=a?Math.ceil(d.width/e.width)+1:0,l=(k-1)*e.width,m=(g-1)*e.height;null==this.horizontalPageBreaks&&0<g&&(this.horizontalPageBreaks=[]);null==this.verticalPageBreaks&&0<k&&(this.verticalPageBreaks=[]);a=mxUtils.bind(this,function(b){if(null!=b){for(var a=b==this.horizontalPageBreaks?g:k,d=0;d<=a;d++){var c=b==this.horizontalPageBreaks?[new mxPoint(Math.round(e.x),Math.round(e.y+d*e.height)),new mxPoint(Math.round(e.x+
+l),Math.round(e.y+d*e.height))]:[new mxPoint(Math.round(e.x+d*e.width),Math.round(e.y)),new mxPoint(Math.round(e.x+d*e.width),Math.round(e.y+m))];null!=b[d]?(b[d].points=c,b[d].redraw()):(c=new mxPolyline(c,this.pageBreakColor),c.dialect=this.dialect,c.pointerEvents=!1,c.isDashed=this.pageBreakDashed,c.init(this.view.backgroundPane),c.redraw(),b[d]=c)}for(d=a;d<b.length;d++)b[d].destroy();b.splice(a,b.length-a)}});a(this.horizontalPageBreaks);a(this.verticalPageBreaks)};
mxGraph.prototype.getCellStyle=function(a){var c=this.model.getStyle(a);a=this.model.isEdge(a)?this.stylesheet.getDefaultEdgeStyle():this.stylesheet.getDefaultVertexStyle();null!=c&&(a=this.postProcessCellStyle(this.stylesheet.getCellStyle(c,a)));null==a&&(a=mxGraph.prototype.EMPTY_ARRAY);return a};
mxGraph.prototype.postProcessCellStyle=function(a){if(null!=a){var c=a[mxConstants.STYLE_IMAGE],f=this.getImageFromBundles(c);null!=f?a[mxConstants.STYLE_IMAGE]=f:f=c;null!=f&&"data:image/"==f.substring(0,11)&&("data:image/svg+xml,<"==f.substring(0,20)?f=f.substring(0,19)+encodeURIComponent(f.substring(19)):"data:image/svg+xml,%3C"!=f.substring(0,22)&&(c=f.indexOf(","),0<c&&";base64,"!=f.substring(c-7,c+1)&&(f=f.substring(0,c)+";base64,"+f.substring(c+1))),a[mxConstants.STYLE_IMAGE]=f)}return a};
mxGraph.prototype.setCellStyle=function(a,c){c=c||this.getSelectionCells();if(null!=c){this.model.beginUpdate();try{for(var f=0;f<c.length;f++)this.model.setStyle(c[f],a)}finally{this.model.endUpdate()}}};mxGraph.prototype.toggleCellStyle=function(a,c,f){f=f||this.getSelectionCell();return this.toggleCellStyles(a,c,[f])};
@@ -1345,7 +1345,7 @@ mxGraph.prototype.resizeChildCells=function(a,c){for(var f=this.model.getGeometr
mxGraph.prototype.scaleCell=function(a,c,f,d){var b=this.model.getGeometry(a);if(null!=b){var e=this.view.getState(a),e=null!=e?e.style:this.getCellStyle(a),b=b.clone(),g=b.x,k=b.y,l=b.width,m=b.height;b.scale(c,f,"fixed"==e[mxConstants.STYLE_ASPECT]);"1"==e[mxConstants.STYLE_RESIZE_WIDTH]?b.width=l*c:"0"==e[mxConstants.STYLE_RESIZE_WIDTH]&&(b.width=l);"1"==e[mxConstants.STYLE_RESIZE_HEIGHT]?b.height=m*f:"0"==e[mxConstants.STYLE_RESIZE_HEIGHT]&&(b.height=m);this.isCellMovable(a)||(b.x=g,b.y=k);this.isCellResizable(a)||
(b.width=l,b.height=m);this.model.isVertex(a)?this.cellResized(a,b,!0,d):this.model.setGeometry(a,b)}};mxGraph.prototype.extendParent=function(a){if(null!=a){var c=this.model.getParent(a),f=this.getCellGeometry(c);null==c||null==f||this.isCellCollapsed(c)||(a=this.getCellGeometry(a),null!=a&&!a.relative&&(f.width<a.x+a.width||f.height<a.y+a.height)&&(f=f.clone(),f.width=Math.max(f.width,a.x+a.width),f.height=Math.max(f.height,a.y+a.height),this.cellsResized([c],[f],!1)))}};
mxGraph.prototype.importCells=function(a,c,f,d,b,e){return this.moveCells(a,c,f,!0,d,b,e)};
-mxGraph.prototype.moveCells=function(a,c,f,d,b,e,g){c=null!=c?c:0;f=null!=f?f:0;d=null!=d?d:!1;if(null!=a&&(0!=c||0!=f||d||null!=b)){a=this.model.getTopmostCells(a);this.model.beginUpdate();try{for(var k=new mxDictionary,l=0;l<a.length;l++)k.put(a[l],!0);for(var m=mxUtils.bind(this,function(a){for(;null!=a;){if(k.get(a))return!0;a=this.model.getParent(a)}return!1}),n=[],l=0;l<a.length;l++){var p=this.getCellGeometry(a[l]),q=this.model.getParent(a[l]);null!=p&&p.relative&&this.model.isEdge(q)&&(m(this.model.getTerminal(q,
+mxGraph.prototype.moveCells=function(a,c,f,d,b,e,g){c=null!=c?c:0;f=null!=f?f:0;d=null!=d?d:!1;if(null!=a&&(0!=c||0!=f||d||null!=b)){a=this.model.getTopmostCells(a);this.model.beginUpdate();try{for(var k=new mxDictionary,l=0;l<a.length;l++)k.put(a[l],!0);for(var m=mxUtils.bind(this,function(b){for(;null!=b;){if(k.get(b))return!0;b=this.model.getParent(b)}return!1}),n=[],l=0;l<a.length;l++){var p=this.getCellGeometry(a[l]),q=this.model.getParent(a[l]);null!=p&&p.relative&&this.model.isEdge(q)&&(m(this.model.getTerminal(q,
!0))||m(this.model.getTerminal(q,!1)))||n.push(a[l])}a=n;d&&(a=this.cloneCells(a,this.isCloneInvalidEdges(),g),null==b&&(b=this.getDefaultParent()));var u=this.isAllowNegativeCoordinates();null!=b&&this.setAllowNegativeCoordinates(!0);this.cellsMoved(a,c,f,!d&&this.isDisconnectOnMove()&&this.isAllowDanglingEdges(),null==b,this.isExtendParentsOnMove()&&null==b);this.setAllowNegativeCoordinates(u);if(null!=b){var t=this.model.getChildCount(b);this.cellsAdded(a,b,t,null,null,!0)}this.fireEvent(new mxEventObject(mxEvent.MOVE_CELLS,
"cells",a,"dx",c,"dy",f,"clone",d,"target",b,"event",e))}finally{this.model.endUpdate()}}return a};
mxGraph.prototype.cellsMoved=function(a,c,f,d,b,e){if(null!=a&&(0!=c||0!=f)){e=null!=e?e:!1;this.model.beginUpdate();try{d&&this.disconnectGraph(a);for(var g=0;g<a.length;g++)this.translateCell(a[g],c,f),e&&this.isExtendParent(a[g])?this.extendParent(a[g]):b&&this.constrainChild(a[g]);this.resetEdgesOnMove&&this.resetEdges(a);this.fireEvent(new mxEventObject(mxEvent.CELLS_MOVED,"cells",a,"dx",c,"dy",f,"disconnect",d))}finally{this.model.endUpdate()}}};
@@ -1374,7 +1374,7 @@ p,!0)){for(;null!=p&&!d.get(p);)p=this.model.getParent(p);null==p&&(e.setTermina
mxGraph.prototype.getCurrentRoot=function(){return this.view.currentRoot};mxGraph.prototype.getTranslateForRoot=function(a){return null};mxGraph.prototype.isPort=function(a){return!1};mxGraph.prototype.getTerminalForPort=function(a,c){return this.model.getParent(a)};mxGraph.prototype.getChildOffsetForCell=function(a){return null};mxGraph.prototype.enterGroup=function(a){a=a||this.getSelectionCell();null!=a&&this.isValidRoot(a)&&(this.view.setCurrentRoot(a),this.clearSelection())};
mxGraph.prototype.exitGroup=function(){var a=this.model.getRoot(),c=this.getCurrentRoot();if(null!=c){for(var f=this.model.getParent(c);f!=a&&!this.isValidRoot(f)&&this.model.getParent(f)!=a;)f=this.model.getParent(f);f==a||this.model.getParent(f)==a?this.view.setCurrentRoot(null):this.view.setCurrentRoot(f);null!=this.view.getState(c)&&this.setSelectionCell(c)}};mxGraph.prototype.home=function(){var a=this.getCurrentRoot();null!=a&&(this.view.setCurrentRoot(null),null!=this.view.getState(a)&&this.setSelectionCell(a))};
mxGraph.prototype.isValidRoot=function(a){return null!=a};mxGraph.prototype.getGraphBounds=function(){return this.view.getGraphBounds()};mxGraph.prototype.getCellBounds=function(a,c,f){var d=[a];c&&(d=d.concat(this.model.getEdges(a)));d=this.view.getBounds(d);if(f){f=this.model.getChildCount(a);for(var b=0;b<f;b++){var e=this.getCellBounds(this.model.getChildAt(a,b),c,!0);null!=d?d.add(e):d=e}}return d};
-mxGraph.prototype.getBoundingBoxFromGeometry=function(a,c){c=null!=c?c:!1;var f=null;if(null!=a)for(var d=0;d<a.length;d++)if(c||this.model.isVertex(a[d])){var b=this.getCellGeometry(a[d]);if(null!=b){var e=null;if(this.model.isEdge(a[d])){e=function(a){null!=a&&(null==g?g=new mxRectangle(a.x,a.y,0,0):g.add(new mxRectangle(a.x,a.y,0,0)))};null==this.model.getTerminal(a[d],!0)&&e(b.getTerminalPoint(!0));null==this.model.getTerminal(a[d],!1)&&e(b.getTerminalPoint(!1));b=b.points;if(null!=b&&0<b.length)for(var g=
+mxGraph.prototype.getBoundingBoxFromGeometry=function(a,c){c=null!=c?c:!1;var f=null;if(null!=a)for(var d=0;d<a.length;d++)if(c||this.model.isVertex(a[d])){var b=this.getCellGeometry(a[d]);if(null!=b){var e=null;if(this.model.isEdge(a[d])){e=function(b){null!=b&&(null==g?g=new mxRectangle(b.x,b.y,0,0):g.add(new mxRectangle(b.x,b.y,0,0)))};null==this.model.getTerminal(a[d],!0)&&e(b.getTerminalPoint(!0));null==this.model.getTerminal(a[d],!1)&&e(b.getTerminalPoint(!1));b=b.points;if(null!=b&&0<b.length)for(var g=
new mxRectangle(b[0].x,b[0].y,0,0),k=1;k<b.length;k++)e(b[k]);e=g}else k=this.model.getParent(a[d]),b.relative?this.model.isVertex(k)&&k!=this.view.currentRoot&&(g=this.getBoundingBoxFromGeometry([k],!1),null!=g&&(e=new mxRectangle(b.x*g.width,b.y*g.height,b.width,b.height),0<=mxUtils.indexOf(a,k)&&(e.x+=g.x,e.y+=g.y))):(e=mxRectangle.fromRectangle(b),this.model.isVertex(k)&&0<=mxUtils.indexOf(a,k)&&(g=this.getBoundingBoxFromGeometry([k],!1),null!=g&&(e.x+=g.x,e.y+=g.y))),null!=e&&null!=b.offset&&
(e.x+=b.offset.x,e.y+=b.offset.y);null!=e&&(null==f?f=mxRectangle.fromRectangle(e):f.add(e))}}return f};mxGraph.prototype.refresh=function(a){this.view.clear(a,null==a);this.view.validate();this.sizeDidChange();this.fireEvent(new mxEventObject(mxEvent.REFRESH))};mxGraph.prototype.snap=function(a){this.gridEnabled&&(a=Math.round(a/this.gridSize)*this.gridSize);return a};
mxGraph.prototype.panGraph=function(a,c){if(this.useScrollbarsForPanning&&mxUtils.hasScrollbars(this.container))this.container.scrollLeft=-a,this.container.scrollTop=-c;else{var f=this.view.getCanvas();if(this.dialect==mxConstants.DIALECT_SVG)if(0==a&&0==c){if(mxClient.IS_IE?f.setAttribute("transform","translate("+a+","+c+")"):f.removeAttribute("transform"),null!=this.shiftPreview1){for(var d=this.shiftPreview1.firstChild;null!=d;){var b=d.nextSibling;this.container.appendChild(d);d=b}null!=this.shiftPreview1.parentNode&&
@@ -1462,7 +1462,7 @@ mxGraph.prototype.addMouseListener=function(a){null==this.mouseListeners&&(this.
mxGraph.prototype.updateMouseEvent=function(a,c){if(null==a.graphX||null==a.graphY){var f=mxUtils.convertPoint(this.container,a.getX(),a.getY());a.graphX=f.x-this.panDx;a.graphY=f.y-this.panDy;null==a.getCell()&&this.isMouseDown&&c==mxEvent.MOUSE_MOVE&&(a.state=this.view.getState(this.getCellAt(f.x,f.y,null,null,null,function(a){return null==a.shape||a.shape.paintBackground!=mxRectangleShape.prototype.paintBackground||"1"==mxUtils.getValue(a.style,mxConstants.STYLE_POINTER_EVENTS,"1")||null!=a.shape.fill&&
a.shape.fill!=mxConstants.NONE})))}return a};mxGraph.prototype.getStateForTouchEvent=function(a){var c=mxEvent.getClientX(a);a=mxEvent.getClientY(a);c=mxUtils.convertPoint(this.container,c,a);return this.view.getState(this.getCellAt(c.x,c.y))};
mxGraph.prototype.isEventIgnored=function(a,c,f){var d=mxEvent.isMouseEvent(c.getEvent()),b=!1;c.getEvent()==this.lastEvent?b=!0:this.lastEvent=c.getEvent();null!=this.eventSource&&a!=mxEvent.MOUSE_MOVE?(mxEvent.removeGestureListeners(this.eventSource,null,this.mouseMoveRedirect,this.mouseUpRedirect),this.eventSource=this.mouseUpRedirect=this.mouseMoveRedirect=null):null!=this.eventSource&&c.getSource()!=this.eventSource?b=!0:mxClient.IS_TOUCH&&a==mxEvent.MOUSE_DOWN&&!d&&(this.eventSource=c.getSource(),
-this.mouseMoveRedirect=mxUtils.bind(this,function(a){this.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(a,this.getStateForTouchEvent(a)))}),this.mouseUpRedirect=mxUtils.bind(this,function(a){this.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(a,this.getStateForTouchEvent(a)))}),mxEvent.addGestureListeners(this.eventSource,null,this.mouseMoveRedirect,this.mouseUpRedirect));this.isSyntheticEventIgnored(a,c,f)&&(b=!0);if(!mxEvent.isPopupTrigger(this.lastEvent)&&a!=mxEvent.MOUSE_MOVE&&2==this.lastEvent.detail)return!0;
+this.mouseMoveRedirect=mxUtils.bind(this,function(b){this.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(b,this.getStateForTouchEvent(b)))}),this.mouseUpRedirect=mxUtils.bind(this,function(b){this.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(b,this.getStateForTouchEvent(b)))}),mxEvent.addGestureListeners(this.eventSource,null,this.mouseMoveRedirect,this.mouseUpRedirect));this.isSyntheticEventIgnored(a,c,f)&&(b=!0);if(!mxEvent.isPopupTrigger(this.lastEvent)&&a!=mxEvent.MOUSE_MOVE&&2==this.lastEvent.detail)return!0;
a==mxEvent.MOUSE_UP&&this.isMouseDown?this.isMouseDown=!1:a!=mxEvent.MOUSE_DOWN||this.isMouseDown?!b&&((!mxClient.IS_FF||a!=mxEvent.MOUSE_MOVE)&&this.isMouseDown&&this.isMouseTrigger!=d||a==mxEvent.MOUSE_DOWN&&this.isMouseDown||a==mxEvent.MOUSE_UP&&!this.isMouseDown)&&(b=!0):(this.isMouseDown=!0,this.isMouseTrigger=d);b||a!=mxEvent.MOUSE_DOWN||(this.lastMouseX=c.getX(),this.lastMouseY=c.getY());return b};
mxGraph.prototype.isSyntheticEventIgnored=function(a,c,f){f=!1;c=mxEvent.isMouseEvent(c.getEvent());this.ignoreMouseEvents&&c&&a!=mxEvent.MOUSE_MOVE?(this.ignoreMouseEvents=a!=mxEvent.MOUSE_UP,f=!0):mxClient.IS_FF&&!c&&a==mxEvent.MOUSE_UP&&(this.ignoreMouseEvents=!0);return f};
mxGraph.prototype.isEventSourceIgnored=function(a,c){var f=c.getSource(),d=null!=f.nodeName?f.nodeName.toLowerCase():"",b=!mxEvent.isMouseEvent(c.getEvent())||mxEvent.isLeftMouseButton(c.getEvent());return a==mxEvent.MOUSE_DOWN&&b&&("select"==d||"option"==d||"input"==d&&"checkbox"!=f.type&&"radio"!=f.type&&"button"!=f.type&&"submit"!=f.type&&"file"!=f.type)};mxGraph.prototype.getEventState=function(a){return a};
@@ -1483,7 +1483,7 @@ mxOutline.prototype.border=10;mxOutline.prototype.sizerSize=8;mxOutline.prototyp
mxOutline.prototype.init=function(a){this.outline=this.createGraph(a);var c=this.outline.graphModelChanged;this.outline.graphModelChanged=mxUtils.bind(this,function(a){this.suspended||null==this.outline||c.apply(this.outline,arguments)});mxClient.IS_SVG&&(a=this.outline.getView().getCanvas().parentNode,a.setAttribute("shape-rendering","optimizeSpeed"),a.setAttribute("image-rendering","optimizeSpeed"));this.outline.labelsVisible=this.labelsVisible;this.outline.setEnabled(!1);this.updateHandler=mxUtils.bind(this,
function(a,d){this.suspended||this.active||this.update()});this.source.getModel().addListener(mxEvent.CHANGE,this.updateHandler);this.outline.addMouseListener(this);a=this.source.getView();a.addListener(mxEvent.SCALE,this.updateHandler);a.addListener(mxEvent.TRANSLATE,this.updateHandler);a.addListener(mxEvent.SCALE_AND_TRANSLATE,this.updateHandler);a.addListener(mxEvent.DOWN,this.updateHandler);a.addListener(mxEvent.UP,this.updateHandler);mxEvent.addListener(this.source.container,"scroll",this.updateHandler);
this.panHandler=mxUtils.bind(this,function(a){this.updateOnPan&&this.updateHandler.apply(this,arguments)});this.source.addListener(mxEvent.PAN,this.panHandler);this.refreshHandler=mxUtils.bind(this,function(a){this.outline.setStylesheet(this.source.getStylesheet());this.outline.refresh()});this.source.addListener(mxEvent.REFRESH,this.refreshHandler);this.bounds=new mxRectangle(0,0,0,0);this.selectionBorder=new mxRectangleShape(this.bounds,null,mxConstants.OUTLINE_COLOR,mxConstants.OUTLINE_STROKEWIDTH);
-this.selectionBorder.dialect=this.outline.dialect;this.forceVmlHandles&&(this.selectionBorder.isHtmlAllowed=function(){return!1});this.selectionBorder.init(this.outline.getView().getOverlayPane());a=mxUtils.bind(this,function(a){var d=mxEvent.getSource(a),b=mxUtils.bind(this,function(a){this.outline.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(a))}),c=mxUtils.bind(this,function(a){mxEvent.removeGestureListeners(d,null,b,c);this.outline.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(a))});
+this.selectionBorder.dialect=this.outline.dialect;this.forceVmlHandles&&(this.selectionBorder.isHtmlAllowed=function(){return!1});this.selectionBorder.init(this.outline.getView().getOverlayPane());a=mxUtils.bind(this,function(a){var d=mxEvent.getSource(a),b=mxUtils.bind(this,function(b){this.outline.fireMouseEvent(mxEvent.MOUSE_MOVE,new mxMouseEvent(b))}),c=mxUtils.bind(this,function(a){mxEvent.removeGestureListeners(d,null,b,c);this.outline.fireMouseEvent(mxEvent.MOUSE_UP,new mxMouseEvent(a))});
mxEvent.addGestureListeners(d,null,b,c);this.outline.fireMouseEvent(mxEvent.MOUSE_DOWN,new mxMouseEvent(a))});mxEvent.addGestureListeners(this.selectionBorder.node,a);this.sizer=this.createSizer();this.forceVmlHandles&&(this.sizer.isHtmlAllowed=function(){return!1});this.sizer.init(this.outline.getView().getOverlayPane());this.enabled&&(this.sizer.node.style.cursor="nwse-resize");mxEvent.addGestureListeners(this.sizer.node,a);this.selectionBorder.node.style.display=this.showViewport?"":"none";this.sizer.node.style.display=
this.selectionBorder.node.style.display;this.selectionBorder.node.style.cursor="move";this.update(!1)};mxOutline.prototype.isEnabled=function(){return this.enabled};mxOutline.prototype.setEnabled=function(a){this.enabled=a};mxOutline.prototype.setZoomEnabled=function(a){this.sizer.node.style.visibility=a?"visible":"hidden"};mxOutline.prototype.refresh=function(){this.update(!0)};
mxOutline.prototype.createSizer=function(){var a=null!=this.sizerImage?new mxImageShape(new mxRectangle(0,0,this.sizerImage.width,this.sizerImage.height),this.sizerImage.src):new mxRectangleShape(new mxRectangle(0,0,this.sizerSize,this.sizerSize),mxConstants.OUTLINE_HANDLE_FILLCOLOR,mxConstants.OUTLINE_HANDLE_STROKECOLOR);a.dialect=this.outline.dialect;return a};mxOutline.prototype.getSourceContainerSize=function(){return new mxRectangle(0,0,this.source.container.scrollWidth,this.source.container.scrollHeight)};
@@ -1512,7 +1512,7 @@ mxLayoutManager.prototype.cellsMoved=function(a,c){if(null!=a&&null!=c)for(var f
mxLayoutManager.prototype.getCellsForChanges=function(a){for(var c=new mxDictionary,f=[],d=0;d<a.length;d++){var b=a[d];if(b instanceof mxRootChange)return[];for(var b=this.getCellsForChange(b),e=0;e<b.length;e++)null==b[e]||c.get(b[e])||(c.put(b[e],!0),f.push(b[e]))}return f};
mxLayoutManager.prototype.getCellsForChange=function(a){var c=this.getGraph().getModel();return a instanceof mxChildChange?[a.child,a.previous,c.getParent(a.child)]:a instanceof mxTerminalChange||a instanceof mxGeometryChange?[a.cell,c.getParent(a.cell)]:a instanceof mxVisibleChange||a instanceof mxStyleChange?[a.cell]:[]};
mxLayoutManager.prototype.layoutCells=function(a){if(0<a.length){var c=this.getGraph().getModel();c.beginUpdate();try{for(var f=null,d=0;d<a.length;d++)a[d]!=c.getRoot()&&a[d]!=f&&this.executeLayout(this.getLayout(a[d]),a[d])&&(f=a[d]);this.fireEvent(new mxEventObject(mxEvent.LAYOUT_CELLS,"cells",a))}finally{c.endUpdate()}}};mxLayoutManager.prototype.executeLayout=function(a,c){var f=!1;null!=a&&null!=c&&(a.execute(c),f=!0);return f};mxLayoutManager.prototype.destroy=function(){this.setGraph(null)};
-function mxSwimlaneManager(a,c,f,d){this.horizontal=null!=c?c:!0;this.addEnabled=null!=f?f:!0;this.resizeEnabled=null!=d?d:!0;this.addHandler=mxUtils.bind(this,function(a,d){this.isEnabled()&&this.isAddEnabled()&&this.cellsAdded(d.getProperty("cells"))});this.resizeHandler=mxUtils.bind(this,function(a,d){this.isEnabled()&&this.isResizeEnabled()&&this.cellsResized(d.getProperty("cells"))});this.setGraph(a)}mxSwimlaneManager.prototype=new mxEventSource;mxSwimlaneManager.prototype.constructor=mxSwimlaneManager;
+function mxSwimlaneManager(a,c,f,d){this.horizontal=null!=c?c:!0;this.addEnabled=null!=f?f:!0;this.resizeEnabled=null!=d?d:!0;this.addHandler=mxUtils.bind(this,function(b,a){this.isEnabled()&&this.isAddEnabled()&&this.cellsAdded(a.getProperty("cells"))});this.resizeHandler=mxUtils.bind(this,function(b,a){this.isEnabled()&&this.isResizeEnabled()&&this.cellsResized(a.getProperty("cells"))});this.setGraph(a)}mxSwimlaneManager.prototype=new mxEventSource;mxSwimlaneManager.prototype.constructor=mxSwimlaneManager;
mxSwimlaneManager.prototype.graph=null;mxSwimlaneManager.prototype.enabled=!0;mxSwimlaneManager.prototype.horizontal=!0;mxSwimlaneManager.prototype.addEnabled=!0;mxSwimlaneManager.prototype.resizeEnabled=!0;mxSwimlaneManager.prototype.addHandler=null;mxSwimlaneManager.prototype.resizeHandler=null;mxSwimlaneManager.prototype.isEnabled=function(){return this.enabled};mxSwimlaneManager.prototype.setEnabled=function(a){this.enabled=a};mxSwimlaneManager.prototype.isHorizontal=function(){return this.horizontal};
mxSwimlaneManager.prototype.setHorizontal=function(a){this.horizontal=a};mxSwimlaneManager.prototype.isAddEnabled=function(){return this.addEnabled};mxSwimlaneManager.prototype.setAddEnabled=function(a){this.addEnabled=a};mxSwimlaneManager.prototype.isResizeEnabled=function(){return this.resizeEnabled};mxSwimlaneManager.prototype.setResizeEnabled=function(a){this.resizeEnabled=a};mxSwimlaneManager.prototype.getGraph=function(){return this.graph};
mxSwimlaneManager.prototype.setGraph=function(a){null!=this.graph&&(this.graph.removeListener(this.addHandler),this.graph.removeListener(this.resizeHandler));this.graph=a;null!=this.graph&&(this.graph.addListener(mxEvent.ADD_CELLS,this.addHandler),this.graph.addListener(mxEvent.CELLS_RESIZED,this.resizeHandler))};mxSwimlaneManager.prototype.isSwimlaneIgnored=function(a){return!this.getGraph().isSwimlane(a)};
@@ -1582,8 +1582,8 @@ mxCellMarker.prototype.intersects=function(a,c){return this.hotspotEnabled?mxUti
function mxSelectionCellsHandler(a){mxEventSource.call(this);this.graph=a;this.handlers=new mxDictionary;this.graph.addMouseListener(this);this.refreshHandler=mxUtils.bind(this,function(a,f){this.isEnabled()&&this.refresh()});this.graph.getSelectionModel().addListener(mxEvent.CHANGE,this.refreshHandler);this.graph.getModel().addListener(mxEvent.CHANGE,this.refreshHandler);this.graph.getView().addListener(mxEvent.SCALE,this.refreshHandler);this.graph.getView().addListener(mxEvent.TRANSLATE,this.refreshHandler);
this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE,this.refreshHandler);this.graph.getView().addListener(mxEvent.DOWN,this.refreshHandler);this.graph.getView().addListener(mxEvent.UP,this.refreshHandler)}mxUtils.extend(mxSelectionCellsHandler,mxEventSource);mxSelectionCellsHandler.prototype.graph=null;mxSelectionCellsHandler.prototype.enabled=!0;mxSelectionCellsHandler.prototype.refreshHandler=null;mxSelectionCellsHandler.prototype.maxHandlers=100;
mxSelectionCellsHandler.prototype.handlers=null;mxSelectionCellsHandler.prototype.isEnabled=function(){return this.enabled};mxSelectionCellsHandler.prototype.setEnabled=function(a){this.enabled=a};mxSelectionCellsHandler.prototype.getHandler=function(a){return this.handlers.get(a)};mxSelectionCellsHandler.prototype.reset=function(){this.handlers.visit(function(a,c){c.reset.apply(c)})};
-mxSelectionCellsHandler.prototype.refresh=function(){var a=this.handlers;this.handlers=new mxDictionary;for(var c=this.graph.getSelectionCells(),f=0;f<c.length;f++){var d=this.graph.view.getState(c[f]);if(null!=d){var b=a.remove(c[f]);null!=b&&(b.state!=d?(b.destroy(),b=null):(null!=b.refresh&&b.refresh(),b.redraw()));null==b&&(b=this.graph.createHandler(d),this.fireEvent(new mxEventObject(mxEvent.ADD,"state",d)));null!=b&&this.handlers.put(c[f],b)}}a.visit(mxUtils.bind(this,function(a,b){this.fireEvent(new mxEventObject(mxEvent.REMOVE,
-"state",b.state));b.destroy()}))};mxSelectionCellsHandler.prototype.updateHandler=function(a){var c=this.handlers.remove(a.cell);null!=c&&(c.destroy(),c=this.graph.createHandler(a),null!=c&&this.handlers.put(a.cell,c))};mxSelectionCellsHandler.prototype.mouseDown=function(a,c){if(this.graph.isEnabled()&&this.isEnabled()){var f=[a,c];this.handlers.visit(function(a,b){b.mouseDown.apply(b,f)})}};
+mxSelectionCellsHandler.prototype.refresh=function(){var a=this.handlers;this.handlers=new mxDictionary;for(var c=this.graph.getSelectionCells(),f=0;f<c.length;f++){var d=this.graph.view.getState(c[f]);if(null!=d){var b=a.remove(c[f]);null!=b&&(b.state!=d?(b.destroy(),b=null):(null!=b.refresh&&b.refresh(),b.redraw()));null==b&&(b=this.graph.createHandler(d),this.fireEvent(new mxEventObject(mxEvent.ADD,"state",d)));null!=b&&this.handlers.put(c[f],b)}}a.visit(mxUtils.bind(this,function(b,a){this.fireEvent(new mxEventObject(mxEvent.REMOVE,
+"state",a.state));a.destroy()}))};mxSelectionCellsHandler.prototype.updateHandler=function(a){var c=this.handlers.remove(a.cell);null!=c&&(c.destroy(),c=this.graph.createHandler(a),null!=c&&this.handlers.put(a.cell,c))};mxSelectionCellsHandler.prototype.mouseDown=function(a,c){if(this.graph.isEnabled()&&this.isEnabled()){var f=[a,c];this.handlers.visit(function(a,b){b.mouseDown.apply(b,f)})}};
mxSelectionCellsHandler.prototype.mouseMove=function(a,c){if(this.graph.isEnabled()&&this.isEnabled()){var f=[a,c];this.handlers.visit(function(a,b){b.mouseMove.apply(b,f)})}};mxSelectionCellsHandler.prototype.mouseUp=function(a,c){if(this.graph.isEnabled()&&this.isEnabled()){var f=[a,c];this.handlers.visit(function(a,b){b.mouseUp.apply(b,f)})}};
mxSelectionCellsHandler.prototype.destroy=function(){this.graph.removeMouseListener(this);null!=this.refreshHandler&&(this.graph.getSelectionModel().removeListener(this.refreshHandler),this.graph.getModel().removeListener(this.refreshHandler),this.graph.getView().removeListener(this.refreshHandler),this.refreshHandler=null)};
function mxConnectionHandler(a,c){mxEventSource.call(this);null!=a&&(this.graph=a,this.factoryMethod=c,this.init(),this.escapeHandler=mxUtils.bind(this,function(a,d){this.reset()}),this.graph.addListener(mxEvent.ESCAPE,this.escapeHandler))}mxUtils.extend(mxConnectionHandler,mxEventSource);mxConnectionHandler.prototype.graph=null;mxConnectionHandler.prototype.factoryMethod=!0;mxConnectionHandler.prototype.moveIconFront=!1;mxConnectionHandler.prototype.moveIconBack=!1;
@@ -1659,14 +1659,14 @@ mxConstraintHandler.prototype.redraw=function(){if(null!=this.currentFocus&&null
this.focusIcons[c].bounds=d;this.focusIcons[c].redraw();this.currentFocusArea.add(this.focusIcons[c].bounds);this.focusPoints[c]=f}}};
mxConstraintHandler.prototype.setFocus=function(a,c,f){this.constraints=null!=c&&!this.isStateIgnored(c,f)&&this.graph.isCellConnectable(c.cell)?this.isEnabled()?this.graph.getAllConnectionConstraints(c,f)||[]:[]:null;if(null!=this.constraints){this.currentFocus=c;this.currentFocusArea=new mxRectangle(c.x,c.y,c.width,c.height);if(null!=this.focusIcons){for(f=0;f<this.focusIcons.length;f++)this.focusIcons[f].destroy();this.focusPoints=this.focusIcons=null}this.focusPoints=[];this.focusIcons=[];for(f=
0;f<this.constraints.length;f++){var d=this.graph.getConnectionPoint(c,this.constraints[f]),b=this.getImageForConstraint(c,this.constraints[f],d),e=b.src,b=new mxRectangle(Math.round(d.x-b.width/2),Math.round(d.y-b.height/2),b.width,b.height),e=new mxImageShape(b,e);e.dialect=this.graph.dialect!=mxConstants.DIALECT_SVG?mxConstants.DIALECT_MIXEDHTML:mxConstants.DIALECT_SVG;e.preserveImageAspect=!1;e.init(this.graph.getView().getDecoratorPane());(mxClient.IS_QUIRKS||8==document.documentMode)&&mxEvent.addListener(e.node,
-"dragstart",function(a){mxEvent.consume(a);return!1});null!=e.node.previousSibling&&e.node.parentNode.insertBefore(e.node,e.node.parentNode.firstChild);b=mxUtils.bind(this,function(){return null!=this.currentFocus?this.currentFocus:c});e.redraw();mxEvent.redirectMouseEvents(e.node,this.graph,b);this.currentFocusArea.add(e.bounds);this.focusIcons.push(e);this.focusPoints.push(d)}this.currentFocusArea.grow(this.getTolerance(a))}else this.destroyIcons(),this.destroyFocusHighlight()};
+"dragstart",function(b){mxEvent.consume(b);return!1});null!=e.node.previousSibling&&e.node.parentNode.insertBefore(e.node,e.node.parentNode.firstChild);b=mxUtils.bind(this,function(){return null!=this.currentFocus?this.currentFocus:c});e.redraw();mxEvent.redirectMouseEvents(e.node,this.graph,b);this.currentFocusArea.add(e.bounds);this.focusIcons.push(e);this.focusPoints.push(d)}this.currentFocusArea.grow(this.getTolerance(a))}else this.destroyIcons(),this.destroyFocusHighlight()};
mxConstraintHandler.prototype.createHighlightShape=function(){var a=new mxRectangleShape(null,this.highlightColor,this.highlightColor,mxConstants.HIGHLIGHT_STROKEWIDTH);a.opacity=mxConstants.HIGHLIGHT_OPACITY;return a};mxConstraintHandler.prototype.intersects=function(a,c,f,d){return mxUtils.intersects(a.bounds,c)};
mxConstraintHandler.prototype.destroy=function(){this.reset();null!=this.resetHandler&&(this.graph.model.removeListener(this.resetHandler),this.graph.view.removeListener(this.resetHandler),this.graph.removeListener(this.resetHandler),this.resetHandler=null);null!=this.mouseleaveHandler&&null!=this.graph.container&&(mxEvent.removeListener(this.graph.container,"mouseleave",this.mouseleaveHandler),this.mouseleaveHandler=null)};
function mxRubberband(a){null!=a&&(this.graph=a,this.graph.addMouseListener(this),this.forceRubberbandHandler=mxUtils.bind(this,function(a,f){var d=f.getProperty("eventName"),b=f.getProperty("event");if(d==mxEvent.MOUSE_DOWN&&this.isForceRubberbandEvent(b)){var d=mxUtils.getOffset(this.graph.container),c=mxUtils.getScrollOrigin(this.graph.container);c.x-=d.x;c.y-=d.y;this.start(b.getX()+c.x,b.getY()+c.y);b.consume(!1)}}),this.graph.addListener(mxEvent.FIRE_MOUSE_EVENT,this.forceRubberbandHandler),
this.panHandler=mxUtils.bind(this,function(){this.repaint()}),this.graph.addListener(mxEvent.PAN,this.panHandler),this.gestureHandler=mxUtils.bind(this,function(a,f){null!=this.first&&this.reset()}),this.graph.addListener(mxEvent.GESTURE,this.gestureHandler),mxClient.IS_IE&&mxEvent.addListener(window,"unload",mxUtils.bind(this,function(){this.destroy()})))}mxRubberband.prototype.defaultOpacity=20;mxRubberband.prototype.enabled=!0;mxRubberband.prototype.div=null;mxRubberband.prototype.sharedDiv=null;
mxRubberband.prototype.currentX=0;mxRubberband.prototype.currentY=0;mxRubberband.prototype.isEnabled=function(){return this.enabled};mxRubberband.prototype.setEnabled=function(a){this.enabled=a};mxRubberband.prototype.isForceRubberbandEvent=function(a){return mxEvent.isAltDown(a.getEvent())};
mxRubberband.prototype.mouseDown=function(a,c){if(!c.isConsumed()&&this.isEnabled()&&this.graph.isEnabled()&&null==c.getState()&&!mxEvent.isMultiTouchEvent(c.getEvent())){var f=mxUtils.getOffset(this.graph.container),d=mxUtils.getScrollOrigin(this.graph.container);d.x-=f.x;d.y-=f.y;this.start(c.getX()+d.x,c.getY()+d.y);c.consume(!1)}};
-mxRubberband.prototype.start=function(a,c){function f(a){a=new mxMouseEvent(a);var b=mxUtils.convertPoint(d,a.getX(),a.getY());a.graphX=b.x;a.graphY=b.y;return a}this.first=new mxPoint(a,c);var d=this.graph.container;this.dragHandler=mxUtils.bind(this,function(a){this.mouseMove(this.graph,f(a))});this.dropHandler=mxUtils.bind(this,function(a){this.mouseUp(this.graph,f(a))});mxClient.IS_FF&&mxEvent.addGestureListeners(document,null,this.dragHandler,this.dropHandler)};
+mxRubberband.prototype.start=function(a,c){function f(b){b=new mxMouseEvent(b);var a=mxUtils.convertPoint(d,b.getX(),b.getY());b.graphX=a.x;b.graphY=a.y;return b}this.first=new mxPoint(a,c);var d=this.graph.container;this.dragHandler=mxUtils.bind(this,function(b){this.mouseMove(this.graph,f(b))});this.dropHandler=mxUtils.bind(this,function(b){this.mouseUp(this.graph,f(b))});mxClient.IS_FF&&mxEvent.addGestureListeners(document,null,this.dragHandler,this.dropHandler)};
mxRubberband.prototype.mouseMove=function(a,c){if(!c.isConsumed()&&null!=this.first){var f=mxUtils.getScrollOrigin(this.graph.container),d=mxUtils.getOffset(this.graph.container);f.x-=d.x;f.y-=d.y;var d=c.getX()+f.x,f=c.getY()+f.y,b=this.first.x-d,e=this.first.y-f,g=this.graph.tolerance;if(null!=this.div||Math.abs(b)>g||Math.abs(e)>g)null==this.div&&(this.div=this.createShape()),mxUtils.clearSelection(),this.update(d,f),c.consume()}};
mxRubberband.prototype.createShape=function(){null==this.sharedDiv&&(this.sharedDiv=document.createElement("div"),this.sharedDiv.className="mxRubberband",mxUtils.setOpacity(this.sharedDiv,this.defaultOpacity));this.graph.container.appendChild(this.sharedDiv);return this.sharedDiv};mxRubberband.prototype.isActive=function(a,c){return null!=this.div&&"none"!=this.div.style.display};mxRubberband.prototype.mouseUp=function(a,c){var f=this.isActive();this.reset();f&&(this.execute(c.getEvent()),c.consume())};
mxRubberband.prototype.execute=function(a){var c=new mxRectangle(this.x,this.y,this.width,this.height);this.graph.selectRegion(c,a)};mxRubberband.prototype.reset=function(){null!=this.div&&this.div.parentNode.removeChild(this.div);mxEvent.removeGestureListeners(document,null,this.dragHandler,this.dropHandler);this.dropHandler=this.dragHandler=null;this.currentY=this.currentX=0;this.div=this.first=null};mxRubberband.prototype.update=function(a,c){this.currentX=a;this.currentY=c;this.repaint()};
@@ -2930,42 +2930,42 @@ null,!0).setAttribute("title",mxResources.get("straight")),this.editorUi.menus.e
null,!0).setAttribute("title",mxResources.get("simple")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_EDGE,mxConstants.STYLE_ELBOW,mxConstants.STYLE_CURVED,mxConstants.STYLE_NOEDGESTYLE],["elbowEdgeStyle","vertical",null,null],"geIcon geSprite geSprite-verticalelbow",null,!0).setAttribute("title",mxResources.get("simple")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_EDGE,mxConstants.STYLE_ELBOW,mxConstants.STYLE_CURVED,mxConstants.STYLE_NOEDGESTYLE],["isometricEdgeStyle",
null,null,null],"geIcon geSprite geSprite-horizontalisometric",null,!0).setAttribute("title",mxResources.get("isometric")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_EDGE,mxConstants.STYLE_ELBOW,mxConstants.STYLE_CURVED,mxConstants.STYLE_NOEDGESTYLE],["isometricEdgeStyle","vertical",null,null],"geIcon geSprite geSprite-verticalisometric",null,!0).setAttribute("title",mxResources.get("isometric")),"connector"==e.style.shape&&this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_EDGE,
mxConstants.STYLE_CURVED,mxConstants.STYLE_NOEDGESTYLE],["orthogonalEdgeStyle","1",null],"geIcon geSprite geSprite-curved",null,!0).setAttribute("title",mxResources.get("curved")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_EDGE,mxConstants.STYLE_CURVED,mxConstants.STYLE_NOEDGESTYLE],["entityRelationEdgeStyle",null,null],"geIcon geSprite geSprite-entity",null,!0).setAttribute("title",mxResources.get("entityRelation")))})),C=this.editorUi.toolbar.addMenuFunctionInContainer(l,"geSprite-startclassic",
-mxResources.get("linestart"),!1,mxUtils.bind(this,function(a){if("connector"==e.style.shape||"flexArrow"==e.style.shape)this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.NONE,0],"geIcon geSprite geSprite-noarrow",null,!1).setAttribute("title",mxResources.get("none")),"connector"==e.style.shape?(this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC,1],"geIcon geSprite geSprite-startclassic",null,
-!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC_THIN,1],"geIcon geSprite geSprite-startclassicthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OPEN,0],"geIcon geSprite geSprite-startopen",null,!1).setAttribute("title",mxResources.get("openArrow")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],[mxConstants.ARROW_OPEN_THIN,0],"geIcon geSprite geSprite-startopenthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["openAsync",0],"geIcon geSprite geSprite-startopenasync",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK,1],"geIcon geSprite geSprite-startblock",null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],[mxConstants.ARROW_BLOCK_THIN,1],"geIcon geSprite geSprite-startblockthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["async",1],"geIcon geSprite geSprite-startasync",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OVAL,1],"geIcon geSprite geSprite-startoval",null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],[mxConstants.ARROW_DIAMOND,1],"geIcon geSprite geSprite-startdiamond",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND_THIN,1],"geIcon geSprite geSprite-startthindiamond",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC,0],"geIcon geSprite geSprite-startclassictrans",
-null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC_THIN,0],"geIcon geSprite geSprite-startclassicthintrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK,0],"geIcon geSprite geSprite-startblocktrans",null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],[mxConstants.ARROW_BLOCK_THIN,0],"geIcon geSprite geSprite-startblockthintrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["async",0],"geIcon geSprite geSprite-startasynctrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OVAL,0],"geIcon geSprite geSprite-startovaltrans",null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],[mxConstants.ARROW_DIAMOND,0],"geIcon geSprite geSprite-startdiamondtrans",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND_THIN,0],"geIcon geSprite geSprite-startthindiamondtrans",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["dash",0],"geIcon geSprite geSprite-startdash",
-null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["cross",0],"geIcon geSprite geSprite-startcross",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["circlePlus",0],"geIcon geSprite geSprite-startcircleplus",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["circle",1],"geIcon geSprite geSprite-startcircle",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],["ERone",0],"geIcon geSprite geSprite-starterone",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERmandOne",0],"geIcon geSprite geSprite-starteronetoone",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERmany",0],"geIcon geSprite geSprite-startermany",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERoneToMany",0],"geIcon geSprite geSprite-starteronetomany",
-null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERzeroToOne",1],"geIcon geSprite geSprite-starteroneopt",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERzeroToMany",1],"geIcon geSprite geSprite-startermanyopt",null,!1)):this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_BLOCK],"geIcon geSprite geSprite-startblocktrans",null,!1).setAttribute("title",mxResources.get("block"))})),
-H=this.editorUi.toolbar.addMenuFunctionInContainer(l,"geSprite-endclassic",mxResources.get("lineend"),!1,mxUtils.bind(this,function(a){if("connector"==e.style.shape||"flexArrow"==e.style.shape)this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.NONE,0],"geIcon geSprite geSprite-noarrow",null,!1).setAttribute("title",mxResources.get("none")),"connector"==e.style.shape?(this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC,
-1],"geIcon geSprite geSprite-endclassic",null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC_THIN,1],"geIcon geSprite geSprite-endclassicthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OPEN,0],"geIcon geSprite geSprite-endopen",null,!1).setAttribute("title",mxResources.get("openArrow")),this.editorUi.menus.edgeStyleChange(a,
-"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OPEN_THIN,0],"geIcon geSprite geSprite-endopenthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["openAsync",0],"geIcon geSprite geSprite-endopenasync",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK,1],"geIcon geSprite geSprite-endblock",null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(a,
-"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK_THIN,1],"geIcon geSprite geSprite-endblockthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["async",1],"geIcon geSprite geSprite-endasync",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OVAL,1],"geIcon geSprite geSprite-endoval",null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,
-"endFill"],[mxConstants.ARROW_DIAMOND,1],"geIcon geSprite geSprite-enddiamond",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND_THIN,1],"geIcon geSprite geSprite-endthindiamond",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC,0],"geIcon geSprite geSprite-endclassictrans",
-null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC_THIN,0],"geIcon geSprite geSprite-endclassicthintrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK,0],"geIcon geSprite geSprite-endblocktrans",null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,
-"endFill"],[mxConstants.ARROW_BLOCK_THIN,0],"geIcon geSprite geSprite-endblockthintrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["async",0],"geIcon geSprite geSprite-endasynctrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OVAL,0],"geIcon geSprite geSprite-endovaltrans",null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,
-"endFill"],[mxConstants.ARROW_DIAMOND,0],"geIcon geSprite geSprite-enddiamondtrans",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND_THIN,0],"geIcon geSprite geSprite-endthindiamondtrans",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["dash",0],"geIcon geSprite geSprite-enddash",null,!1),
-this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["cross",0],"geIcon geSprite geSprite-endcross",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["circlePlus",0],"geIcon geSprite geSprite-endcircleplus",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["circle",1],"geIcon geSprite geSprite-endcircle",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],
-["ERone",0],"geIcon geSprite geSprite-enderone",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERmandOne",0],"geIcon geSprite geSprite-enderonetoone",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERmany",0],"geIcon geSprite geSprite-endermany",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERoneToMany",0],"geIcon geSprite geSprite-enderonetomany",null,!1),this.editorUi.menus.edgeStyleChange(a,
-"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERzeroToOne",1],"geIcon geSprite geSprite-enderoneopt",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERzeroToMany",1],"geIcon geSprite geSprite-endermanyopt",null,!1)):this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_BLOCK],"geIcon geSprite geSprite-endblocktrans",null,!1).setAttribute("title",mxResources.get("block"))}));this.addArrow(v,8);this.addArrow(z);this.addArrow(C);
-this.addArrow(H);A=this.addArrow(m,9);A.className="geIcon";A.style.width="84px";B=this.addArrow(n,9);B.className="geIcon";B.style.width="22px";var D=document.createElement("div");D.style.width="85px";D.style.height="1px";D.style.borderBottom="1px solid black";D.style.marginBottom="9px";A.appendChild(D);var E=document.createElement("div");E.style.width="23px";E.style.height="1px";E.style.borderBottom="1px solid black";E.style.marginBottom="9px";B.appendChild(E);m.style.height="15px";n.style.height=
-"15px";v.style.height="15px";z.style.height="17px";C.style.marginLeft="3px";C.style.height="17px";H.style.marginLeft="3px";H.style.height="17px";a.appendChild(g);a.appendChild(t);a.appendChild(q);m=q.cloneNode(!1);m.style.paddingBottom="6px";m.style.paddingTop="4px";m.style.fontWeight="normal";n=document.createElement("div");n.style.position="absolute";n.style.marginLeft="3px";n.style.marginBottom="12px";n.style.marginTop="2px";n.style.fontWeight="normal";n.style.width="76px";mxUtils.write(n,mxResources.get("lineend"));
-m.appendChild(n);var G,J,I=this.addUnitInput(m,"pt",74,33,function(){G.apply(this,arguments)}),K=this.addUnitInput(m,"pt",20,33,function(){J.apply(this,arguments)});mxUtils.br(m);A=document.createElement("div");A.style.height="8px";m.appendChild(A);n=n.cloneNode(!1);mxUtils.write(n,mxResources.get("linestart"));m.appendChild(n);var L,N,Q=this.addUnitInput(m,"pt",74,33,function(){L.apply(this,arguments)}),V=this.addUnitInput(m,"pt",20,33,function(){N.apply(this,arguments)});mxUtils.br(m);this.addLabel(m,
-mxResources.get("spacing"),74,50);this.addLabel(m,mxResources.get("size"),20,50);mxUtils.br(m);g=g.cloneNode(!1);g.style.fontWeight="normal";g.style.position="relative";g.style.paddingLeft="16px";g.style.marginBottom="2px";g.style.marginTop="6px";g.style.borderWidth="0px";g.style.paddingBottom="18px";n=document.createElement("div");n.style.position="absolute";n.style.marginLeft="3px";n.style.marginBottom="12px";n.style.marginTop="1px";n.style.fontWeight="normal";n.style.width="120px";mxUtils.write(n,
-mxResources.get("perimeter"));g.appendChild(n);var O,F=this.addUnitInput(g,"pt",20,41,function(){O.apply(this,arguments)});e.edges.length==b.getSelectionCount()?(a.appendChild(l),mxClient.IS_QUIRKS&&(mxUtils.br(a),mxUtils.br(a)),a.appendChild(m)):e.vertices.length==b.getSelectionCount()&&(mxClient.IS_QUIRKS&&mxUtils.br(a),a.appendChild(g));var W=mxUtils.bind(this,function(a,c,f){function g(a,b,c,f){c=c.getElementsByTagName("div")[0];c.className=d.getCssClassForMarker(f,e.style.shape,a,b);return c}
-e=this.format.getSelectionState();mxUtils.getValue(e.style,p,null);if(f||document.activeElement!=x)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_STROKEWIDTH,1)),x.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=y)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_STROKEWIDTH,1)),y.value=isNaN(a)?"":a+" pt";k.style.visibility="connector"==e.style.shape?"":"hidden";"1"==mxUtils.getValue(e.style,mxConstants.STYLE_CURVED,null)?k.value="curved":"1"==mxUtils.getValue(e.style,mxConstants.STYLE_ROUNDED,
-null)&&(k.value="rounded");"1"==mxUtils.getValue(e.style,mxConstants.STYLE_DASHED,null)?null==mxUtils.getValue(e.style,mxConstants.STYLE_DASH_PATTERN,null)?D.style.borderBottom="1px dashed black":D.style.borderBottom="1px dotted black":D.style.borderBottom="1px solid black";E.style.borderBottom=D.style.borderBottom;a=z.getElementsByTagName("div")[0];c=mxUtils.getValue(e.style,mxConstants.STYLE_EDGE,null);"1"==mxUtils.getValue(e.style,mxConstants.STYLE_NOEDGESTYLE,null)&&(c=null);"orthogonalEdgeStyle"==
-c&&"1"==mxUtils.getValue(e.style,mxConstants.STYLE_CURVED,null)?a.className="geSprite geSprite-curved":a.className="straight"==c||"none"==c||null==c?"geSprite geSprite-straight":"entityRelationEdgeStyle"==c?"geSprite geSprite-entity":"elbowEdgeStyle"==c?"geSprite "+("vertical"==mxUtils.getValue(e.style,mxConstants.STYLE_ELBOW,null)?"geSprite-verticalelbow":"geSprite-horizontalelbow"):"isometricEdgeStyle"==c?"geSprite "+("vertical"==mxUtils.getValue(e.style,mxConstants.STYLE_ELBOW,null)?"geSprite-verticalisometric":
-"geSprite-horizontalisometric"):"geSprite geSprite-orthogonal";v.getElementsByTagName("div")[0].className="link"==e.style.shape?"geSprite geSprite-linkedge":"flexArrow"==e.style.shape?"geSprite geSprite-arrow":"arrow"==e.style.shape?"geSprite geSprite-simplearrow":"geSprite geSprite-connection";e.edges.length==b.getSelectionCount()?(t.style.display="",q.style.display="none"):(t.style.display="none",q.style.display="");a=g(mxUtils.getValue(e.style,mxConstants.STYLE_STARTARROW,null),mxUtils.getValue(e.style,
-"startFill","1"),C,"start");c=g(mxUtils.getValue(e.style,mxConstants.STYLE_ENDARROW,null),mxUtils.getValue(e.style,"endFill","1"),H,"end");"arrow"==e.style.shape?(a.className="geSprite geSprite-noarrow",c.className="geSprite geSprite-endblocktrans"):"link"==e.style.shape&&(a.className="geSprite geSprite-noarrow",c.className="geSprite geSprite-noarrow");mxUtils.setOpacity(z,"arrow"==e.style.shape?30:100);"connector"!=e.style.shape&&"flexArrow"!=e.style.shape?(mxUtils.setOpacity(C,30),mxUtils.setOpacity(H,
-30)):(mxUtils.setOpacity(C,100),mxUtils.setOpacity(H,100));if(f||document.activeElement!=V)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE)),V.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=Q)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_SOURCE_PERIMETER_SPACING,0)),Q.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=K)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE)),K.value=isNaN(a)?
-"":a+" pt";if(f||document.activeElement!=Q)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_TARGET_PERIMETER_SPACING,0)),I.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=F)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_PERIMETER_SPACING,0)),F.value=isNaN(a)?"":a+" pt"});N=this.installInputHandler(V,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE,0,999," pt");L=this.installInputHandler(Q,mxConstants.STYLE_SOURCE_PERIMETER_SPACING,0,-999,999," pt");J=this.installInputHandler(K,
-mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE,0,999," pt");G=this.installInputHandler(I,mxConstants.STYLE_TARGET_PERIMETER_SPACING,0,-999,999," pt");O=this.installInputHandler(F,mxConstants.STYLE_PERIMETER_SPACING,0,0,999," pt");this.addKeyHandler(x,W);this.addKeyHandler(V,W);this.addKeyHandler(Q,W);this.addKeyHandler(K,W);this.addKeyHandler(I,W);this.addKeyHandler(F,W);b.getModel().addListener(mxEvent.CHANGE,W);this.listeners.push({destroy:function(){b.getModel().removeListener(W)}});
-W();return a};
+mxResources.get("linestart"),!1,mxUtils.bind(this,function(a){if("connector"==e.style.shape||"flexArrow"==e.style.shape){var b=this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.NONE,0],"geIcon",null,!1);b.setAttribute("title",mxResources.get("none"));b.firstChild.firstChild.innerHTML='<font style="font-size:10px;">'+mxUtils.htmlEntities(mxResources.get("none"))+"</font>";"connector"==e.style.shape?(this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,
+"startFill"],[mxConstants.ARROW_CLASSIC,1],"geIcon geSprite geSprite-startclassic",null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC_THIN,1],"geIcon geSprite geSprite-startclassicthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OPEN,0],"geIcon geSprite geSprite-startopen",null,!1).setAttribute("title",mxResources.get("openArrow")),
+this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OPEN_THIN,0],"geIcon geSprite geSprite-startopenthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["openAsync",0],"geIcon geSprite geSprite-startopenasync",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK,1],"geIcon geSprite geSprite-startblock",null,!1).setAttribute("title",mxResources.get("block")),
+this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK_THIN,1],"geIcon geSprite geSprite-startblockthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["async",1],"geIcon geSprite geSprite-startasync",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OVAL,1],"geIcon geSprite geSprite-startoval",null,!1).setAttribute("title",mxResources.get("oval")),
+this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND,1],"geIcon geSprite geSprite-startdiamond",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND_THIN,1],"geIcon geSprite geSprite-startthindiamond",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,
+"startFill"],[mxConstants.ARROW_CLASSIC,0],"geIcon geSprite geSprite-startclassictrans",null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC_THIN,0],"geIcon geSprite geSprite-startclassicthintrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK,0],"geIcon geSprite geSprite-startblocktrans",null,!1).setAttribute("title",
+mxResources.get("block")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK_THIN,0],"geIcon geSprite geSprite-startblockthintrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["async",0],"geIcon geSprite geSprite-startasynctrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OVAL,0],"geIcon geSprite geSprite-startovaltrans",null,
+!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND,0],"geIcon geSprite geSprite-startdiamondtrans",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND_THIN,0],"geIcon geSprite geSprite-startthindiamondtrans",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(a,
+"",[mxConstants.STYLE_STARTARROW,"startFill"],["dash",0],"geIcon geSprite geSprite-startdash",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["cross",0],"geIcon geSprite geSprite-startcross",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["circlePlus",0],"geIcon geSprite geSprite-startcircleplus",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["circle",1],"geIcon geSprite geSprite-startcircle",
+null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERone",0],"geIcon geSprite geSprite-starterone",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERmandOne",0],"geIcon geSprite geSprite-starteronetoone",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERmany",0],"geIcon geSprite geSprite-startermany",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,
+"startFill"],["ERoneToMany",0],"geIcon geSprite geSprite-starteronetomany",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERzeroToOne",1],"geIcon geSprite geSprite-starteroneopt",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERzeroToMany",1],"geIcon geSprite geSprite-startermanyopt",null,!1)):this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_BLOCK],"geIcon geSprite geSprite-startblocktrans",
+null,!1).setAttribute("title",mxResources.get("block"))}})),H=this.editorUi.toolbar.addMenuFunctionInContainer(l,"geSprite-endclassic",mxResources.get("lineend"),!1,mxUtils.bind(this,function(a){if("connector"==e.style.shape||"flexArrow"==e.style.shape){var b=this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.NONE,0],"geIcon",null,!1);b.setAttribute("title",mxResources.get("none"));b.firstChild.firstChild.innerHTML='<font style="font-size:10px;">'+mxUtils.htmlEntities(mxResources.get("none"))+
+"</font>";"connector"==e.style.shape?(this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC,1],"geIcon geSprite geSprite-endclassic",null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC_THIN,1],"geIcon geSprite geSprite-endclassicthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OPEN,
+0],"geIcon geSprite geSprite-endopen",null,!1).setAttribute("title",mxResources.get("openArrow")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OPEN_THIN,0],"geIcon geSprite geSprite-endopenthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["openAsync",0],"geIcon geSprite geSprite-endopenasync",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK,
+1],"geIcon geSprite geSprite-endblock",null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK_THIN,1],"geIcon geSprite geSprite-endblockthin",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["async",1],"geIcon geSprite geSprite-endasync",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OVAL,1],
+"geIcon geSprite geSprite-endoval",null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND,1],"geIcon geSprite geSprite-enddiamond",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND_THIN,1],"geIcon geSprite geSprite-endthindiamond",null,!1).setAttribute("title",mxResources.get("diamondThin")),
+this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC,0],"geIcon geSprite geSprite-endclassictrans",null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC_THIN,0],"geIcon geSprite geSprite-endclassicthintrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK,0],"geIcon geSprite geSprite-endblocktrans",
+null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK_THIN,0],"geIcon geSprite geSprite-endblockthintrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["async",0],"geIcon geSprite geSprite-endasynctrans",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OVAL,0],"geIcon geSprite geSprite-endovaltrans",
+null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND,0],"geIcon geSprite geSprite-enddiamondtrans",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND_THIN,0],"geIcon geSprite geSprite-endthindiamondtrans",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(a,
+"",[mxConstants.STYLE_ENDARROW,"endFill"],["dash",0],"geIcon geSprite geSprite-enddash",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["cross",0],"geIcon geSprite geSprite-endcross",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["circlePlus",0],"geIcon geSprite geSprite-endcircleplus",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["circle",1],"geIcon geSprite geSprite-endcircle",
+null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERone",0],"geIcon geSprite geSprite-enderone",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERmandOne",0],"geIcon geSprite geSprite-enderonetoone",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERmany",0],"geIcon geSprite geSprite-endermany",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],
+["ERoneToMany",0],"geIcon geSprite geSprite-enderonetomany",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERzeroToOne",1],"geIcon geSprite geSprite-enderoneopt",null,!1),this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERzeroToMany",1],"geIcon geSprite geSprite-endermanyopt",null,!1)):this.editorUi.menus.edgeStyleChange(a,"",[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_BLOCK],"geIcon geSprite geSprite-endblocktrans",
+null,!1).setAttribute("title",mxResources.get("block"))}}));this.addArrow(v,8);this.addArrow(z);this.addArrow(C);this.addArrow(H);A=this.addArrow(m,9);A.className="geIcon";A.style.width="84px";B=this.addArrow(n,9);B.className="geIcon";B.style.width="22px";var D=document.createElement("div");D.style.width="85px";D.style.height="1px";D.style.borderBottom="1px solid black";D.style.marginBottom="9px";A.appendChild(D);var E=document.createElement("div");E.style.width="23px";E.style.height="1px";E.style.borderBottom=
+"1px solid black";E.style.marginBottom="9px";B.appendChild(E);m.style.height="15px";n.style.height="15px";v.style.height="15px";z.style.height="17px";C.style.marginLeft="3px";C.style.height="17px";H.style.marginLeft="3px";H.style.height="17px";a.appendChild(g);a.appendChild(t);a.appendChild(q);m=q.cloneNode(!1);m.style.paddingBottom="6px";m.style.paddingTop="4px";m.style.fontWeight="normal";n=document.createElement("div");n.style.position="absolute";n.style.marginLeft="3px";n.style.marginBottom="12px";
+n.style.marginTop="2px";n.style.fontWeight="normal";n.style.width="76px";mxUtils.write(n,mxResources.get("lineend"));m.appendChild(n);var G,J,I=this.addUnitInput(m,"pt",74,33,function(){G.apply(this,arguments)}),K=this.addUnitInput(m,"pt",20,33,function(){J.apply(this,arguments)});mxUtils.br(m);A=document.createElement("div");A.style.height="8px";m.appendChild(A);n=n.cloneNode(!1);mxUtils.write(n,mxResources.get("linestart"));m.appendChild(n);var L,N,Q=this.addUnitInput(m,"pt",74,33,function(){L.apply(this,
+arguments)}),V=this.addUnitInput(m,"pt",20,33,function(){N.apply(this,arguments)});mxUtils.br(m);this.addLabel(m,mxResources.get("spacing"),74,50);this.addLabel(m,mxResources.get("size"),20,50);mxUtils.br(m);g=g.cloneNode(!1);g.style.fontWeight="normal";g.style.position="relative";g.style.paddingLeft="16px";g.style.marginBottom="2px";g.style.marginTop="6px";g.style.borderWidth="0px";g.style.paddingBottom="18px";n=document.createElement("div");n.style.position="absolute";n.style.marginLeft="3px";n.style.marginBottom=
+"12px";n.style.marginTop="1px";n.style.fontWeight="normal";n.style.width="120px";mxUtils.write(n,mxResources.get("perimeter"));g.appendChild(n);var O,F=this.addUnitInput(g,"pt",20,41,function(){O.apply(this,arguments)});e.edges.length==b.getSelectionCount()?(a.appendChild(l),mxClient.IS_QUIRKS&&(mxUtils.br(a),mxUtils.br(a)),a.appendChild(m)):e.vertices.length==b.getSelectionCount()&&(mxClient.IS_QUIRKS&&mxUtils.br(a),a.appendChild(g));var W=mxUtils.bind(this,function(a,c,f){function g(a,b,c,f){c=
+c.getElementsByTagName("div")[0];c.className=d.getCssClassForMarker(f,e.style.shape,a,b);"geSprite geSprite-noarrow"==c.className&&(c.innerHTML=mxUtils.htmlEntities(mxResources.get("none")),c.style.backgroundImage="none",c.style.verticalAlign="top",c.style.marginTop="5px",c.style.fontSize="10px",c.nextSibling.style.marginTop="0px");return c}e=this.format.getSelectionState();mxUtils.getValue(e.style,p,null);if(f||document.activeElement!=x)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_STROKEWIDTH,
+1)),x.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=y)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_STROKEWIDTH,1)),y.value=isNaN(a)?"":a+" pt";k.style.visibility="connector"==e.style.shape?"":"hidden";"1"==mxUtils.getValue(e.style,mxConstants.STYLE_CURVED,null)?k.value="curved":"1"==mxUtils.getValue(e.style,mxConstants.STYLE_ROUNDED,null)&&(k.value="rounded");"1"==mxUtils.getValue(e.style,mxConstants.STYLE_DASHED,null)?null==mxUtils.getValue(e.style,mxConstants.STYLE_DASH_PATTERN,
+null)?D.style.borderBottom="1px dashed black":D.style.borderBottom="1px dotted black":D.style.borderBottom="1px solid black";E.style.borderBottom=D.style.borderBottom;a=z.getElementsByTagName("div")[0];c=mxUtils.getValue(e.style,mxConstants.STYLE_EDGE,null);"1"==mxUtils.getValue(e.style,mxConstants.STYLE_NOEDGESTYLE,null)&&(c=null);"orthogonalEdgeStyle"==c&&"1"==mxUtils.getValue(e.style,mxConstants.STYLE_CURVED,null)?a.className="geSprite geSprite-curved":a.className="straight"==c||"none"==c||null==
+c?"geSprite geSprite-straight":"entityRelationEdgeStyle"==c?"geSprite geSprite-entity":"elbowEdgeStyle"==c?"geSprite "+("vertical"==mxUtils.getValue(e.style,mxConstants.STYLE_ELBOW,null)?"geSprite-verticalelbow":"geSprite-horizontalelbow"):"isometricEdgeStyle"==c?"geSprite "+("vertical"==mxUtils.getValue(e.style,mxConstants.STYLE_ELBOW,null)?"geSprite-verticalisometric":"geSprite-horizontalisometric"):"geSprite geSprite-orthogonal";v.getElementsByTagName("div")[0].className="link"==e.style.shape?
+"geSprite geSprite-linkedge":"flexArrow"==e.style.shape?"geSprite geSprite-arrow":"arrow"==e.style.shape?"geSprite geSprite-simplearrow":"geSprite geSprite-connection";e.edges.length==b.getSelectionCount()?(t.style.display="",q.style.display="none"):(t.style.display="none",q.style.display="");a=g(mxUtils.getValue(e.style,mxConstants.STYLE_STARTARROW,null),mxUtils.getValue(e.style,"startFill","1"),C,"start");c=g(mxUtils.getValue(e.style,mxConstants.STYLE_ENDARROW,null),mxUtils.getValue(e.style,"endFill",
+"1"),H,"end");"arrow"==e.style.shape?(a.className="geSprite geSprite-noarrow",c.className="geSprite geSprite-endblocktrans"):"link"==e.style.shape&&(a.className="geSprite geSprite-noarrow",c.className="geSprite geSprite-noarrow");mxUtils.setOpacity(z,"arrow"==e.style.shape?30:100);"connector"!=e.style.shape&&"flexArrow"!=e.style.shape?(mxUtils.setOpacity(C,30),mxUtils.setOpacity(H,30)):(mxUtils.setOpacity(C,100),mxUtils.setOpacity(H,100));if(f||document.activeElement!=V)a=parseInt(mxUtils.getValue(e.style,
+mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE)),V.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=Q)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_SOURCE_PERIMETER_SPACING,0)),Q.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=K)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE)),K.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=Q)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_TARGET_PERIMETER_SPACING,0)),
+I.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=F)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_PERIMETER_SPACING,0)),F.value=isNaN(a)?"":a+" pt"});N=this.installInputHandler(V,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE,0,999," pt");L=this.installInputHandler(Q,mxConstants.STYLE_SOURCE_PERIMETER_SPACING,0,-999,999," pt");J=this.installInputHandler(K,mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE,0,999," pt");G=this.installInputHandler(I,mxConstants.STYLE_TARGET_PERIMETER_SPACING,
+0,-999,999," pt");O=this.installInputHandler(F,mxConstants.STYLE_PERIMETER_SPACING,0,0,999," pt");this.addKeyHandler(x,W);this.addKeyHandler(V,W);this.addKeyHandler(Q,W);this.addKeyHandler(K,W);this.addKeyHandler(I,W);this.addKeyHandler(F,W);b.getModel().addListener(mxEvent.CHANGE,W);this.listeners.push({destroy:function(){b.getModel().removeListener(W)}});W();return a};
StyleFormatPanel.prototype.addEffects=function(a){var c=this.editorUi.editor.graph,f=this.format.getSelectionState();a.style.paddingTop="0px";a.style.paddingBottom="2px";var d=document.createElement("table");mxClient.IS_QUIRKS&&(d.style.fontSize="1em");d.style.width="100%";d.style.fontWeight="bold";d.style.paddingRight="20px";var b=document.createElement("tbody"),e=document.createElement("tr");e.style.padding="0px";var g=document.createElement("td");g.style.padding="0px";g.style.width="50%";g.setAttribute("valign",
"top");var k=g.cloneNode(!0);k.style.paddingLeft="8px";e.appendChild(g);e.appendChild(k);b.appendChild(e);d.appendChild(b);a.appendChild(d);var l=g,m=0,n=mxUtils.bind(this,function(a,b,d){a=this.createCellOption(a,b,d);a.style.width="100%";l.appendChild(a);l=l==g?k:g;m++}),p=mxUtils.bind(this,function(b,d,c){f=this.format.getSelectionState();g.innerHTML="";k.innerHTML="";l=g;f.rounded&&n(mxResources.get("rounded"),mxConstants.STYLE_ROUNDED,0);"swimlane"==f.style.shape&&n(mxResources.get("divider"),
"swimlaneLine",1);f.containsImage||n(mxResources.get("shadow"),mxConstants.STYLE_SHADOW,0);f.glass&&n(mxResources.get("glass"),mxConstants.STYLE_GLASS,0);f.comic&&n(mxResources.get("comic"),"comic",0);0==m&&(a.style.display="none")});c.getModel().addListener(mxEvent.CHANGE,p);this.listeners.push({destroy:function(){c.getModel().removeListener(p)}});p();return a};
@@ -3141,7 +3141,7 @@ k.selectAll(a)}});k.isEnabled()||(B.className="geButton mxDisabled");v.appendChi
"geButton mxDisabled");v.appendChild(m);l.appendChild(v);g();k.model.addListener(mxEvent.CHANGE,function(){g()});k.selectionModel.addListener(mxEvent.CHANGE,function(){k.isSelectionEmpty()?y.className="geButton mxDisabled":y.className="geButton"});this.window=new mxWindow(mxResources.get("layers"),l,c,f,d,b,!0,!0);this.window.destroyOnClose=!1;this.window.setMaximizable(!1);this.window.setResizable(!0);this.window.setClosable(!0);this.window.setVisible(!0);this.refreshLayers=g;this.window.setLocation=
function(a,b){a=Math.max(0,a);b=Math.max(0,b);mxWindow.prototype.setLocation.apply(this,arguments)};mxEvent.addListener(window,"resize",mxUtils.bind(this,function(){var a=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,b=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,d=this.window.getX(),c=this.window.getY();d+this.window.table.clientWidth>a&&(d=Math.max(0,a-this.window.table.clientWidth));c+this.window.table.clientHeight>b&&
(c=Math.max(0,b-this.window.table.clientHeight));this.window.getX()==d&&this.window.getY()==c||this.window.setLocation(d,c)}))};(function(){Sidebar.prototype.tagIndex="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";
-Sidebar.prototype.searchFileUrl="search.xml";Sidebar.prototype.gearImage=GRAPH_IMAGE_PATH+"/clipart/Gear_128x128.png";Sidebar.prototype.defaultEntries="general;images;uml;er;bpmn;flowchart;basic;arrows2";Sidebar.prototype.signs="Animals Food Healthcare Nature People Safety Science Sports Tech Transportation Travel".split(" ");Sidebar.prototype.gcp="Big Data;Compute;Developer Tools;Extras;Identity and Security;Machine Learning;Management Tools;Networking;Storage Databases".split(";");Sidebar.prototype.rack=
+Sidebar.prototype.searchFileUrl="search.xml";Sidebar.prototype.gearImage=GRAPH_IMAGE_PATH+"/clipart/Gear_128x128.png";Sidebar.prototype.defaultEntries="general;images;uml;er;bpmn;flowchart;basic;arrows2";Sidebar.prototype.signs="Animals Food Healthcare Nature People Safety Science Sports Tech Transportation Travel".split(" ");Sidebar.prototype.gcp="Cards;Big Data;Compute;Developer Tools;Extras;Identity and Security;Machine Learning;Management Tools;Networking;Storage Databases".split(";");Sidebar.prototype.rack=
"General APC Cisco Dell F5 HP IBM Oracle".split(" ");Sidebar.prototype.pids="Agitators;Apparatus Elements;Centrifuges;Compressors;Compressors ISO;Crushers Grinding;Driers;Engines;Feeders;Filters;Fittings;Flow Sensors;Heat Exchangers;Instruments;Misc;Mixers;Piping;Pumps;Pumps DIN;Pumps ISO;Separators;Shaping Machines;Valves;Vessels".split(";");Sidebar.prototype.cisco="Buildings;Computers and Peripherals;Controllers and Modules;Directors;Hubs and Gateways;Misc;Modems and Phones;People;Routers;Security;Servers;Storage;Switches;Wireless".split(";");
Sidebar.prototype.sysml="Model Elements;Blocks;Ports and Flows;Constraint Blocks;Activities;Interactions;State Machines;Use Cases;Allocations;Requirements;Profiles;Stereotypes".split(";");Sidebar.prototype.eip="Message Construction;Message Routing;Message Transformation;Messaging Channels;Messaging Endpoints;Messaging Systems;System Management".split(";");Sidebar.prototype.gmdl="Bottom Navigation;Bottom Sheets;Buttons;Cards;Chips;Dialogs;Dividers;Grid Lists;Icons;Lists;Menus;Misc;Pickers;Selection Controls;Sliders;Steppers;Tabs;Text Fields".split(";");
Sidebar.prototype.aws2="Analytics;Application Services;Compute;Database;Developer Tools;Enterprise Applications;Game Development;General;Internet of Things;Management Tools;Mobile Services;Networking;On-Demand Workforce;SDKs;Security and Identity;Storage and Content Delivery;Groups".split(";");Sidebar.prototype.aws3="Analytics;Application Services;Artificial Intelligence;Business Productivity;Compute;Database;Desktop and App Streaming;Developer Tools;Game Development;General;Groups;Internet of Things;Management Tools;Messaging;Migration;Mobile Services;Networking and Content Delivery;On Demand Workforce;SDKs;Security Identity and Compliance;Storage".split(";");
@@ -3176,19 +3176,19 @@ this.addArrows2Palette();this.addImagePalette("computer","Clipart / Computer",a+
"Bridge;Certificate;Certificate Off;Cloud;Cloud Computer;Cloud Computer Private;Cloud Rack;Cloud Rack Private;Cloud Server;Cloud Server Private;Cloud Storage;Concentrator;Email;Firewall 1;Firewall 2;Firewall;Camera;Modem;Power Distribution Unit;Print Server;Print Server Wireless;Repeater;Router;Router Icon;Switch;UPS;Wireless Router;Wireless Router N".split(";"),{Wireless_Router:"wireless router switch wap wifi access point wlan",Wireless_Router_N:"wireless router switch wap wifi access point wlan",
Router:"router switch",Router_Icon:"router switch"});this.addImagePalette("people","Clipart / People",a+"/lib/clip_art/people/","_128x128.png","Suit_Man Suit_Man_Black Suit_Man_Blue Suit_Man_Green Suit_Man_Green_Black Suit_Woman Suit_Woman_Black Suit_Woman_Blue Suit_Woman_Green Suit_Woman_Green_Black Construction_Worker_Man Construction_Worker_Man_Black Construction_Worker_Woman Construction_Worker_Woman_Black Doctor_Man Doctor_Man_Black Doctor_Woman Doctor_Woman_Black Farmer_Man Farmer_Man_Black Farmer_Woman Farmer_Woman_Black Nurse_Man Nurse_Man_Black Nurse_Man_Green Nurse_Man_Red Nurse_Woman Nurse_Woman_Black Nurse_Woman_Green Nurse_Woman_Red Military_Officer Military_Officer_Black Military_Officer_Woman Military_Officer_Woman_Black Pilot_Man Pilot_Man_Black Pilot_Woman Pilot_Woman_Black Scientist_Man Scientist_Man_Black Scientist_Woman Scientist_Woman_Black Security_Man Security_Man_Black Security_Woman Security_Woman_Black Soldier Soldier_Black Tech_Man Tech_Man_Black Telesales_Man Telesales_Man_Black Telesales_Woman Telesales_Woman_Black Waiter Waiter_Black Waiter_Woman Waiter_Woman_Black Worker_Black Worker_Man Worker_Woman Worker_Woman_Black".split(" "));
this.addImagePalette("telco","Clipart / Telecommunication",a+"/lib/clip_art/telecommunication/","_128x128.png","BlackBerry Cellphone HTC_smartphone iPhone Palm_Treo Signal_tower_off Signal_tower_on".split(" "),"BlackBerry;Cellphone;HTC smartphone;iPhone;Palm Treo;Signaltower off;Signaltower on".split(";"));for(a=0;a<d.length;a++)this.addStencilPalette("signs"+d[a],"Signs / "+d[a],b+"/signs/"+d[a].toLowerCase()+".xml",";html=1;fillColor=#000000;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;");
-for(a=0;a<c.length;a++)this.addStencilPalette("gcp"+c[a],"GCP / "+c[a],b+"/gcp/"+c[a].toLowerCase().replace(/ /g,"_")+".xml",";html=1;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;");for(a=0;a<f.length;a++)"general"===f[a].toLowerCase()?this.addRackGeneralPalette():"f5"===f[a].toLowerCase()?this.addRackF5Palette():this.addStencilPalette("rack"+f[a],"Rack / "+f[a],b+"/rack/"+f[a].toLowerCase()+".xml",";html=1;labelPosition=right;align=left;spacingLeft=15;dashed=0;shadow=0;fillColor=#ffffff;");
-for(a=0;a<n.length;a++)"Instruments"==n[a]?this.addPidInstrumentsPalette():"Misc"==n[a]?this.addPidMiscPalette():"Valves"==n[a]?this.addPidValvesPalette():"Compressors"==n[a]?this.addPidCompressorsPalette():"Engines"==n[a]?this.addPidEnginesPalette():"Filters"==n[a]?this.addPidFiltersPalette():"Flow Sensors"==n[a]?this.addPidFlowSensorsPalette():"Piping"==n[a]?this.addPidPipingPalette():this.addStencilPalette("pid"+n[a],"Proc. Eng. / "+n[a],b+"/pid/"+n[a].toLowerCase().replace(" ","_")+".xml",";html=1;align=center;"+
-mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;dashed=0;");for(a=0;a<q.length;a++)"Model Elements"==q[a]?this.addSysMLModelElementsPalette():"Blocks"==q[a]?this.addSysMLBlocksPalette():"Ports and Flows"==q[a]?this.addSysMLPortsAndFlowsPalette():"Constraint Blocks"==q[a]?this.addSysMLConstraintBlocksPalette():"Activities"==q[a]?this.addSysMLActivitiesPalette():"Interactions"==q[a]?this.addSysMLInteractionsPalette():"State Machines"==q[a]?this.addSysMLStateMachinesPalette():
-"Use Cases"==q[a]?this.addSysMLUseCasesPalette():"Allocations"==q[a]?this.addSysMLAllocationsPalette():"Requirements"==q[a]?this.addSysMLRequirementsPalette():"Profiles"==q[a]?this.addSysMLProfilesPalette():"Stereotypes"==q[a]&&this.addSysMLStereotypesPalette();for(a=0;a<u.length;a++)"Message Construction"==u[a]?this.addEipMessageConstructionPalette():"Message Routing"==u[a]?this.addEipMessageRoutingPalette():"Message Transformation"==u[a]?this.addEipMessageTransformationPalette():"Messaging Channels"==
-u[a]?this.addEipMessagingChannelsPalette():"Messaging Endpoints"==u[a]?this.addEipMessagingEndpointsPalette():"Messaging Systems"==u[a]?this.addEipMessagingSystemsPalette():"System Management"==u[a]&&this.addEipSystemManagementPalette();for(a=0;a<p.length;a++)this.addStencilPalette("cisco"+p[a],"Cisco / "+p[a],b+"/cisco/"+p[a].toLowerCase().replace(/ /g,"_")+".xml",";html=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top",null,null,1.6);
-this.addFloorplanPalette();this.addBootstrapPalette();for(a=0;a<t.length;a++)"Bottom Navigation"==t[a]?this.addGMDLBottomNavigationPalette():"Bottom Sheets"==t[a]?this.addGMDLBottomSheetsPalette():"Buttons"==t[a]?this.addGMDLButtonsPalette():"Cards"==t[a]?this.addGMDLCardsPalette():"Chips"==t[a]?this.addGMDLChipsPalette():"Dialogs"==t[a]?this.addGMDLDialogsPalette():"Dividers"==t[a]?this.addGMDLDividersPalette():"Grid Lists"==t[a]?this.addGMDLGridListsPalette():"Icons"==t[a]?this.addGMDLIconsPalette():
-"Lists"==t[a]?this.addGMDLListsPalette():"Menus"==t[a]?this.addGMDLMenusPalette():"Misc"==t[a]?this.addGMDLMiscPalette():"Pickers"==t[a]?this.addGMDLPickersPalette():"Selection Controls"==t[a]?this.addGMDLSelectionControlsPalette():"Sliders"==t[a]?this.addGMDLSlidersPalette():"Steppers"==t[a]?this.addGMDLSteppersPalette():"Tabs"==t[a]?this.addGMDLTabsPalette():"Text Fields"==t[a]&&this.addGMDLTextFieldsPalette();this.addCabinetsPalette();this.addArchimate3Palette();this.addArchiMatePalette();this.addWebIconsPalette();
-this.addWebLogosPalette();this.showEntries()};if("1"==urlParams.createindex){var f=Sidebar.prototype.addStencilPalette;Sidebar.prototype.addStencilPalette=function(a,b,d,c,m,n,p,q){f.apply(this,arguments);p=null!=p?p:1;mxStencilRegistry.loadStencilSet(d,mxUtils.bind(this,function(a,b,d,e,f){if(null==m||0>mxUtils.indexOf(m,b))d=null!=q?q[b]:null,mxLog.debug('<shape style="shape='+a+b+c+'" w="'+Math.round(e*p)+'" h="'+Math.round(f*p)+'"'+(null!=d?' tags="'+d+'"':"")+"/>")}),!0)}}var d=Sidebar.prototype.searchEntries;
-Sidebar.prototype.searchEntries=function(a,b,c,f,m){var e=f;if(this.editorUi.enableLogging&&!this.editorUi.isOffline()&&0==c)try{(new Image).src=(null!=window.DRAWIO_LOG_URL?window.DRAWIO_LOG_URL:"")+"/log?severity=CONFIG&msg=shapesearch:"+encodeURIComponent(a)+"&v="+encodeURIComponent(EditorUi.VERSION)}catch(p){}f=mxUtils.bind(this,function(d,f,g,k){!this.editorUi.isOffline()&&d.length<=b/4?(g=c-Math.ceil((f-b/4)/b),mxUtils.get(ICONSEARCH_PATH+"?v=2&q="+encodeURIComponent(a)+"&p="+g+"&c="+b,mxUtils.bind(this,
-function(a){try{if(200<=a.getStatus()&&299>=a.getStatus()){var g=JSON.parse(a.getText());for(a=0;a<g.icons.length;a++){for(var l=g.icons[a].raster_sizes,m=l.length-1;0<m&&128<l[m].size;)m--;var n=l[m].size,p=l[m].formats[0].preview_url;null!=n&&null!=p&&mxUtils.bind(this,function(a,b){d.push(mxUtils.bind(this,function(){return this.createVertexTemplate("shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image="+b,a,a,"")}))})(n,
-p)}e(d,(c-1)*b+d.length,g.icons.length==b,k)}else e(d,f,!1,k),this.editorUi.handleError({message:mxResources.get("unknownError")})}catch(C){e(d,f,!1,k),this.editorUi.handleError(C)}},function(){e(d,f,!1,k)}))):e(d,f,g||!this.editorUi.isOffline(),k)});d.apply(this,arguments)};var b=Sidebar.prototype.itemClicked;Sidebar.prototype.itemClicked=function(a,d,c){var e=this.editorUi.editor.graph,f=!1;if(null!=a&&1==e.getSelectionCount()&&e.getModel().isVertex(a[0])){var g=e.cloneCells(a)[0];if(e.getModel().isEdge(e.getSelectionCell())&&
-null==e.getModel().getTerminal(e.getSelectionCell(),!1)&&e.getModel().isVertex(g)){e.getModel().beginUpdate();try{var k=e.view.getState(e.getSelectionCell());if(null!=k){var q=e.view.translate,u=e.view.scale,t=k.absolutePoints[k.absolutePoints.length-1];g.geometry.x=t.x/u-q.x-g.geometry.width/2;g.geometry.y=t.y/u-q.y-g.geometry.height/2}e.addCell(g);e.getModel().setTerminal(e.getSelectionCell(),g,!1)}finally{e.getModel().endUpdate()}e.scrollCellToVisible(g);e.setSelectionCell(g);f=!0}}f||b.apply(this,
-arguments)}})();
+for(a=0;a<c.length;a++)"cards"===c[a].toLowerCase()?this.addGoogleCloudPlatformCardsPalette():this.addStencilPalette("gcp"+c[a],"GCP / "+c[a],b+"/gcp/"+c[a].toLowerCase().replace(/ /g,"_")+".xml",";html=1;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;");for(a=0;a<f.length;a++)"general"===f[a].toLowerCase()?this.addRackGeneralPalette():"f5"===f[a].toLowerCase()?this.addRackF5Palette():this.addStencilPalette("rack"+f[a],"Rack / "+
+f[a],b+"/rack/"+f[a].toLowerCase()+".xml",";html=1;labelPosition=right;align=left;spacingLeft=15;dashed=0;shadow=0;fillColor=#ffffff;");for(a=0;a<n.length;a++)"Instruments"==n[a]?this.addPidInstrumentsPalette():"Misc"==n[a]?this.addPidMiscPalette():"Valves"==n[a]?this.addPidValvesPalette():"Compressors"==n[a]?this.addPidCompressorsPalette():"Engines"==n[a]?this.addPidEnginesPalette():"Filters"==n[a]?this.addPidFiltersPalette():"Flow Sensors"==n[a]?this.addPidFlowSensorsPalette():"Piping"==n[a]?this.addPidPipingPalette():
+this.addStencilPalette("pid"+n[a],"Proc. Eng. / "+n[a],b+"/pid/"+n[a].toLowerCase().replace(" ","_")+".xml",";html=1;align=center;"+mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;dashed=0;");for(a=0;a<q.length;a++)"Model Elements"==q[a]?this.addSysMLModelElementsPalette():"Blocks"==q[a]?this.addSysMLBlocksPalette():"Ports and Flows"==q[a]?this.addSysMLPortsAndFlowsPalette():"Constraint Blocks"==q[a]?this.addSysMLConstraintBlocksPalette():"Activities"==
+q[a]?this.addSysMLActivitiesPalette():"Interactions"==q[a]?this.addSysMLInteractionsPalette():"State Machines"==q[a]?this.addSysMLStateMachinesPalette():"Use Cases"==q[a]?this.addSysMLUseCasesPalette():"Allocations"==q[a]?this.addSysMLAllocationsPalette():"Requirements"==q[a]?this.addSysMLRequirementsPalette():"Profiles"==q[a]?this.addSysMLProfilesPalette():"Stereotypes"==q[a]&&this.addSysMLStereotypesPalette();for(a=0;a<u.length;a++)"Message Construction"==u[a]?this.addEipMessageConstructionPalette():
+"Message Routing"==u[a]?this.addEipMessageRoutingPalette():"Message Transformation"==u[a]?this.addEipMessageTransformationPalette():"Messaging Channels"==u[a]?this.addEipMessagingChannelsPalette():"Messaging Endpoints"==u[a]?this.addEipMessagingEndpointsPalette():"Messaging Systems"==u[a]?this.addEipMessagingSystemsPalette():"System Management"==u[a]&&this.addEipSystemManagementPalette();for(a=0;a<p.length;a++)this.addStencilPalette("cisco"+p[a],"Cisco / "+p[a],b+"/cisco/"+p[a].toLowerCase().replace(/ /g,
+"_")+".xml",";html=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top",null,null,1.6);this.addFloorplanPalette();this.addBootstrapPalette();for(a=0;a<t.length;a++)"Bottom Navigation"==t[a]?this.addGMDLBottomNavigationPalette():"Bottom Sheets"==t[a]?this.addGMDLBottomSheetsPalette():"Buttons"==t[a]?this.addGMDLButtonsPalette():"Cards"==t[a]?this.addGMDLCardsPalette():"Chips"==t[a]?this.addGMDLChipsPalette():"Dialogs"==t[a]?this.addGMDLDialogsPalette():
+"Dividers"==t[a]?this.addGMDLDividersPalette():"Grid Lists"==t[a]?this.addGMDLGridListsPalette():"Icons"==t[a]?this.addGMDLIconsPalette():"Lists"==t[a]?this.addGMDLListsPalette():"Menus"==t[a]?this.addGMDLMenusPalette():"Misc"==t[a]?this.addGMDLMiscPalette():"Pickers"==t[a]?this.addGMDLPickersPalette():"Selection Controls"==t[a]?this.addGMDLSelectionControlsPalette():"Sliders"==t[a]?this.addGMDLSlidersPalette():"Steppers"==t[a]?this.addGMDLSteppersPalette():"Tabs"==t[a]?this.addGMDLTabsPalette():
+"Text Fields"==t[a]&&this.addGMDLTextFieldsPalette();this.addCabinetsPalette();this.addArchimate3Palette();this.addArchiMatePalette();this.addWebIconsPalette();this.addWebLogosPalette();this.showEntries()};if("1"==urlParams.createindex){var f=Sidebar.prototype.addStencilPalette;Sidebar.prototype.addStencilPalette=function(a,b,d,c,m,n,p,q){f.apply(this,arguments);p=null!=p?p:1;mxStencilRegistry.loadStencilSet(d,mxUtils.bind(this,function(a,b,d,e,f){if(null==m||0>mxUtils.indexOf(m,b))d=null!=q?q[b]:
+null,mxLog.debug('<shape style="shape='+a+b+c+'" w="'+Math.round(e*p)+'" h="'+Math.round(f*p)+'"'+(null!=d?' tags="'+d+'"':"")+"/>")}),!0)}}var d=Sidebar.prototype.searchEntries;Sidebar.prototype.searchEntries=function(a,b,c,f,m){var e=f;if(this.editorUi.enableLogging&&!this.editorUi.isOffline()&&0==c)try{(new Image).src=(null!=window.DRAWIO_LOG_URL?window.DRAWIO_LOG_URL:"")+"/log?severity=CONFIG&msg=shapesearch:"+encodeURIComponent(a)+"&v="+encodeURIComponent(EditorUi.VERSION)}catch(p){}f=mxUtils.bind(this,
+function(d,f,g,k){!this.editorUi.isOffline()&&d.length<=b/4?(g=c-Math.ceil((f-b/4)/b),mxUtils.get(ICONSEARCH_PATH+"?v=2&q="+encodeURIComponent(a)+"&p="+g+"&c="+b,mxUtils.bind(this,function(a){try{if(200<=a.getStatus()&&299>=a.getStatus()){var g=JSON.parse(a.getText());for(a=0;a<g.icons.length;a++){for(var l=g.icons[a].raster_sizes,m=l.length-1;0<m&&128<l[m].size;)m--;var n=l[m].size,p=l[m].formats[0].preview_url;null!=n&&null!=p&&mxUtils.bind(this,function(a,b){d.push(mxUtils.bind(this,function(){return this.createVertexTemplate("shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image="+
+b,a,a,"")}))})(n,p)}e(d,(c-1)*b+d.length,g.icons.length==b,k)}else e(d,f,!1,k),this.editorUi.handleError({message:mxResources.get("unknownError")})}catch(C){e(d,f,!1,k),this.editorUi.handleError(C)}},function(){e(d,f,!1,k)}))):e(d,f,g||!this.editorUi.isOffline(),k)});d.apply(this,arguments)};var b=Sidebar.prototype.itemClicked;Sidebar.prototype.itemClicked=function(a,d,c){var e=this.editorUi.editor.graph,f=!1;if(null!=a&&1==e.getSelectionCount()&&e.getModel().isVertex(a[0])){var g=e.cloneCells(a)[0];
+if(e.getModel().isEdge(e.getSelectionCell())&&null==e.getModel().getTerminal(e.getSelectionCell(),!1)&&e.getModel().isVertex(g)){e.getModel().beginUpdate();try{var k=e.view.getState(e.getSelectionCell());if(null!=k){var q=e.view.translate,u=e.view.scale,t=k.absolutePoints[k.absolutePoints.length-1];g.geometry.x=t.x/u-q.x-g.geometry.width/2;g.geometry.y=t.y/u-q.y-g.geometry.height/2}e.addCell(g);e.getModel().setTerminal(e.getSelectionCell(),g,!1)}finally{e.getModel().endUpdate()}e.scrollCellToVisible(g);
+e.setSelectionCell(g);f=!0}}f||b.apply(this,arguments)}})();
(function(){var a=Sidebar.prototype.createAdvancedShapes;Sidebar.prototype.createAdvancedShapes=function(){var c=a.apply(this,arguments),f=this,d=new mxCell("Vertical Flow Layout",new mxGeometry(0,0,270,280),"swimlane;html=1;startSize=20;horizontal=1;childLayout=flowLayout;flowOrientation=north;resizable=0;interRankCellSpacing=50;");d.vertex=!0;var b=new mxCell("Start",new mxGeometry(20,20,100,40),"whiteSpace=wrap;html=1;");b.vertex=!0;d.insert(b);var e=new mxCell("Task",new mxGeometry(20,20,100,
40),"whiteSpace=wrap;html=1;");e.vertex=!0;d.insert(e);var g=new mxCell("",new mxGeometry(0,0,0,0),"html=1;curved=1;");g.geometry.relative=!0;g.edge=!0;b.insertEdge(g,!0);e.insertEdge(g,!1);d.insert(g);var k=new mxCell("Task",new mxGeometry(20,20,100,40),"whiteSpace=wrap;html=1;");k.vertex=!0;d.insert(k);g=g.clone();b.insertEdge(g,!0);k.insertEdge(g,!1);d.insert(g);b=new mxCell("End",new mxGeometry(20,20,100,40),"whiteSpace=wrap;html=1;");b.vertex=!0;d.insert(b);g=g.clone();e.insertEdge(g,!0);b.insertEdge(g,
!1);d.insert(g);g=g.clone();k.insertEdge(g,!0);b.insertEdge(g,!1);d.insert(g);return c.concat([this.addEntry("container swimlane pool horizontal",function(){var a=new mxCell("Pool",new mxGeometry(0,0,480,380),"swimlane;html=1;childLayout=stackLayout;horizontal=1;startSize=20;horizontalStack=0;");a.vertex=!0;var b=new mxCell("Lane 1",new mxGeometry(0,20,480,120),"swimlane;html=1;startSize=20;horizontal=0;");b.vertex=!0;a.insert(b);b=new mxCell("Lane 2",new mxGeometry(0,140,480,120),"swimlane;html=1;startSize=20;horizontal=0;");
@@ -4592,43 +4592,60 @@ this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.doc
null,null,this.getTagsForStencil("mxgraph.flowchart","start_1","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.start_2;whiteSpace=wrap;",100,100,"","Start",null,null,this.getTagsForStencil("mxgraph.flowchart","start_2","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.stored_data;whiteSpace=wrap;",100,60,"","Stored Data",null,null,this.getTagsForStencil("mxgraph.flowchart","stored_data","").join(" ")),this.createVertexTemplateEntry(a+
"or;",70,70,"","Summing Junction",null,null,this.getTagsForStencil("mxgraph.flowchart","or","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.terminator;whiteSpace=wrap;",100,60,"","Terminator",null,null,this.getTagsForStencil("mxgraph.flowchart","terminator","").join(" ")),this.createVertexTemplateEntry(mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;html=1;strokeWidth=2;shape=mxgraph.arrows2.arrow;dy=0.6;dx=40;notch=0;",
100,70,"","Transfer",null,null,this.getTagsForStencil("mxgraph.flowchart","transfer","").join(" "))])}})();
-(function(){Sidebar.prototype.addGMDLBottomNavigationPalette=function(a){var c=this,f=[this.addEntry("gmdl google media design library bottom navigation bottom navigation",function(){var a=new mxCell("",new mxGeometry(0,0,358,48),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;shadow=0;");a.vertex=!0;var b=new mxCell("Recents",new mxGeometry(.15,.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.recents;fillColor=#808080;strokeColor=none;fontColor=#808080;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;");b.geometry.relative=
-!0;b.geometry.offset=new mxPoint(-10,-15);b.vertex=!0;a.insert(b);b=new mxCell("Favorites",new mxGeometry(.5,.5,20,18),"dashed=0;html=1;shape=mxgraph.gmdl.heart;fillColor=#00796B;strokeColor=none;fontColor=#00796B;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-5;");b.geometry.offset=new mxPoint(-10,-14);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("Nearby",new mxGeometry(.85,.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.nearby;fillColor=#808080;strokeColor=none;fontColor=#808080;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;");
-b.geometry.offset=new mxPoint(-10,-15);b.geometry.relative=!0;b.vertex=!0;a.insert(b);return c.createVertexTemplateFromCells([a],a.geometry.width,a.geometry.height,"Bottom Navigation")}),this.addEntry("gmdl google media design library bottom navigation dropdown menu",function(){var a=new mxCell("",new mxGeometry(0,0,358,48),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#00796B;strokeColor=none;shadow=0;");a.vertex=!0;var b=new mxCell("",new mxGeometry(.15,.5,20,16),"dashed=0;html=1;shape=mxgraph.gmdl.video_2;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(-10,-8);b.vertex=!0;a.insert(b);b=new mxCell("Music",new mxGeometry(.38,.5,14,20),"dashed=0;html=1;shape=mxgraph.gmdl.music;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-5;");b.geometry.offset=new mxPoint(-10,-14);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("",new mxGeometry(.62,.5,16,20),
-"dashed=0;html=1;shape=mxgraph.gmdl.book;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");b.geometry.offset=new mxPoint(-8,-10);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("",new mxGeometry(.85,.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.webpage;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");
-b.geometry.offset=new mxPoint(-10,-15);b.geometry.relative=!0;b.vertex=!0;a.insert(b);return c.createVertexTemplateFromCells([a],a.geometry.width,a.geometry.height,"Bottom Navigation")})];this.addPalette("gmdlBottom Navigation","GMDL / Bottom Navigation",a||!1,mxUtils.bind(this,function(a){for(var b=0;b<f.length;b++)a.appendChild(f[b](a))}))};Sidebar.prototype.addGMDLBottomSheetsPalette=function(a){var c=this,f=[this.addEntry("gmdl google media design library bottom sheets bottom sheet",function(){var a=
-new mxCell("",new mxGeometry(0,0,358,320),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;shadow=0;recursiveResize=0;");a.vertex=!0;var b=new mxCell("Open in",new mxGeometry(10,15,200,20),"shape=rect;strokeColor=none;fillColor=none;align=left;fontColor=#808080;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Keep",new mxGeometry(10,60,20,20),"shape=mxgraph.gmdl.keep;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");
-b.vertex=!0;a.insert(b);b=new mxCell("Inbox",new mxGeometry(10,110,22,20),"shape=mxgraph.gmdl.inbox;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Hangouts",new mxGeometry(10,160,20,22),"shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#0F9755;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=
-!0;a.insert(b);b=new mxCell("Messenger",new mxGeometry(10,210,22,20),"shape=mxgraph.gmdl.messenger;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(10,260,20,20),"shape=mxgraph.gmdl.google_plus;strokeColor=none;fillColor=#D14235;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=
-!0;a.insert(b);return c.createVertexTemplateFromCells([a],a.geometry.width,a.geometry.height,"Bottom Sheet")}),this.addEntry("gmdl google media design library bottom sheets grid style options",function(){var a=new mxCell("",new mxGeometry(0,0,358,642),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;");a.vertex=!0;var b=new mxCell("12:30",new mxGeometry(0,0,358,24),"dashed=0;align=center;fontSize=12;shape=rect;align=right;fillColor=#2D3986;strokeColor=none;fontColor=#FFFFFF;spacingRight=4;spacingTop=1;fontStyle=0;fontSize=13;resizeWidth=1;");
-b.geometry.relative=!0;b.vertex=!0;a.insert(b);var e=new mxCell("",new mxGeometry(1,.5,46,14),"dashed=0;html=1;shape=mxgraph.gmdl.top_bar;strokeColor=none;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-92,-7);e.vertex=!0;b.insert(e);b=new mxCell("Ali Connors",new mxGeometry(0,0,358,57),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#394797;resizeWidth=1;fontSize=22;fontColor=#FFFFFF;spacingTop=-3;verticalAlign=middle;align=left;spacingLeft=72;");b.geometry.relative=
-!0;b.geometry.offset=new mxPoint(0,24);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.left;strokeColor=#ffffff;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.edit;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-65,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,
-.5,5,16),"dashed=0;html=1;shape=mxgraph.gmdl.settings;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,-8);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,81);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,20,24),"dashed=0;html=1;shape=mxgraph.gmdl.telephone;strokeColor=none;fillColor=#3F51B5;");
-e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-12);e.vertex=!0;b.insert(e);e=new mxCell("(650) 555-1234",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Mobile",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=
-!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,146);b.vertex=!0;a.insert(b);e=new mxCell("(323) 555-6789",new mxGeometry(0,
-.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");
-e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,20),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,211);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.2011,.5,286,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-5);
-e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,231);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,24,16),"dashed=0;html=1;shape=mxgraph.gmdl.mail;strokeColor=#ffffff;fillColor=#3F51B5;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(24,-8);e.vertex=!0;b.insert(e);e=new mxCell("aliconnors@example.com",
-new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Personal",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,296);b.vertex=!0;a.insert(b);e=new mxCell("ali_connors@example.com",new mxGeometry(0,.5,150,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=
-!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,356);b.vertex=!0;a.insert(b);e=new mxCell("Gmail",new mxGeometry(.148,0,46,34),"dashed=0;fontSize=10;shape=mxgraph.gmdl.gmail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=6;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-23,392);
-e.vertex=!0;a.insert(e);b=new mxCell("Hangout",new mxGeometry(.5,0,40,46),"dashed=0;fontSize=10;shape=mxgraph.gmdl.hangout;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#19A05E;strokeColor=none;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(-20,386);b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(.8547,0,46,46),"dashed=0;fontSize=10;shape=mxgraph.gmdl.google_plus;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;strokeColor=none;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(-23,386);b.vertex=!0;a.insert(b);e=new mxCell("Mail",new mxGeometry(.148,0,40,32),"dashed=0;fontSize=10;shape=mxgraph.gmdl.mail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=4;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=3;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,494);e.vertex=!0;a.insert(e);e=new mxCell("Message",new mxGeometry(.5,0,44,42),"dashed=0;fontSize=10;shape=mxgraph.gmdl.message;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=-1;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=4;");
-e.geometry.relative=!0;e.geometry.offset=new mxPoint(-22,489);e.vertex=!0;a.insert(e);e=new mxCell("More",new mxGeometry(.8547,0,40,12),"dashed=0;fontSize=10;shape=mxgraph.gmdl.more;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=16;fillColor=#BDBDBD;strokeColor=none;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,504);e.vertex=!0;a.insert(e);b=new mxCell("",new mxGeometry(0,1,358,48),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;resizeWidth=1;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,-48);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.25,.5,14,14),"dashed=0;html=1;shape=mxgraph.gmdl.back;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,-7);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(.5,.5,14,14),"shape=ellipse;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,-7);e.vertex=!0;b.insert(e);
-e=new mxCell("",new mxGeometry(.75,.5,14,14),"shape=rect;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,-7);e.vertex=!0;b.insert(e);return c.createVertexTemplateFromCells([a],358,642,"Grid Style With Some Options")}),this.addEntry("gmdl google media design library bottom sheets grid style all options",function(){var a=new mxCell("",new mxGeometry(0,0,358,642),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;");
-a.vertex=!0;var b=new mxCell("12:30",new mxGeometry(0,0,358,24),"dashed=0;align=center;fontSize=12;shape=rect;align=right;fillColor=#2D3986;strokeColor=none;fontColor=#FFFFFF;spacingRight=4;spacingTop=1;fontStyle=0;fontSize=13;resizeWidth=1;");b.geometry.relative=!0;b.vertex=!0;a.insert(b);var e=new mxCell("",new mxGeometry(1,.5,46,14),"dashed=0;html=1;shape=mxgraph.gmdl.top_bar;fillColor=#2D3986;strokeColor=none;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-92,-7);e.vertex=!0;b.insert(e);
-b=new mxCell("Ali Connors",new mxGeometry(0,0,358,57),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#394797;resizeWidth=1;fontSize=22;fontColor=#FFFFFF;spacingTop=-3;verticalAlign=middle;align=left;spacingLeft=72;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,24);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.left;strokeColor=#ffffff;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,
--8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.edit;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-65,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,5,16),"dashed=0;html=1;shape=mxgraph.gmdl.settings;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,-8);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,81);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,20,24),"dashed=0;html=1;shape=mxgraph.gmdl.telephone;strokeColor=none;fillColor=#3F51B5;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-12);e.vertex=!0;b.insert(e);e=new mxCell("(650) 555-1234",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=
-!0;b.insert(e);e=new mxCell("Mobile",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,146);b.vertex=!0;a.insert(b);e=new mxCell("(323) 555-6789",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=
-!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,20),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,211);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.2011,.5,
-286,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-5);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,231);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,24,16),"dashed=0;html=1;shape=mxgraph.gmdl.mail;strokeColor=#ffffff;fillColor=#3F51B5;strokeWidth=2;");
-e.geometry.relative=!0;e.geometry.offset=new mxPoint(24,-8);e.vertex=!0;b.insert(e);e=new mxCell("aliconnors@example.com",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Personal",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=
-!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,291);b.vertex=!0;a.insert(b);e=new mxCell("Gmail",new mxGeometry(.148,0,46,34),"dashed=0;fontSize=12;shape=mxgraph.gmdl.gmail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=6;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-23,327);
-e.vertex=!0;a.insert(e);b=new mxCell("Hangout",new mxGeometry(.5,0,40,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.hangout;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#19A05E;strokeColor=none;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(-20,321);b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(.8547,0,46,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.google_plus;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;strokeColor=none;");
+(function(){Sidebar.prototype.addGoogleCloudPlatformCardsPalette=function(){var a=this,c="dashed=0;html=1;"+mxConstants.STYLE_SHAPE+"=mxgraph.gcp.compute.",f=[this.addEntry("gcp google cloud platform cardproduct",function(){var d=new mxCell("",new mxGeometry(0,0,170,55),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;");
+b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,10);d.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,.5,110,20),"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,-12);d.insert(b);return a.createVertexTemplateFromCells([d],d.geometry.width,d.geometry.height,"Product Card")}),this.addEntry("gcp google cloud platform cardproduct",function(){var d=new mxCell("",new mxGeometry(0,0,190,
+55),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,10);d.insert(b);b=new mxCell("Analytics Backend",new mxGeometry(0,.5,130,20),"text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=
+new mxPoint(60,-20);d.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,.5,130,20),"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,0);d.insert(b);return a.createVertexTemplateFromCells([d],d.geometry.width,d.geometry.height,"Product Card")}),this.addEntry("gcp google cloud platform cardproduct",function(){var d=new mxCell("",new mxGeometry(0,0,190,55),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");
+d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,10);d.insert(b);b=new mxCell("Analytics Backend",new mxGeometry(0,.5,130,20),"text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,-20);d.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,.5,130,20),
+"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,0);d.insert(b);var e=new mxCell("",new mxGeometry(0,55,190,55),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");e.vertex=!0;b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,
+10);e.insert(b);b=new mxCell("Analytics Backend",new mxGeometry(0,.5,130,20),"text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,-20);e.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,.5,130,20),"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,0);e.insert(b);return a.createVertexTemplateFromCells([d,e],d.geometry.width,
+2*d.geometry.height,"Product Card")}),this.addEntry("gcp google cloud platform cardexpanded product",function(){var d=new mxCell("",new mxGeometry(0,0,190,80),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,10);d.insert(b);b=new mxCell("Batch Processing",
+new mxGeometry(0,0,130,20),"text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,8);d.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,0,130,20),"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,28);d.insert(b);b=new mxCell("",new mxGeometry(0,0,130,10),"shape=line;strokeColor=#dddddd;");b.vertex=!0;b.geometry.relative=
+!0;b.geometry.offset=new mxPoint(60,48);d.insert(b);b=new mxCell("Multiple Instances",new mxGeometry(0,0,130,20),"text;fontSize=12;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,58);d.insert(b);return a.createVertexTemplateFromCells([d],d.geometry.width,d.geometry.height,"Expanded Product Card")}),this.addEntry("gcp google cloud platform cardexpanded product",function(){var d=new mxCell("",new mxGeometry(0,0,150,100),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");
+d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,19.5,17.4),c+"compute_engine;fillColor=#757575;gradientColor=none;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,10);d.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,0,110,20),"text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(40,8);d.insert(b);b=new mxCell("",new mxGeometry(0,0,110,10),"shape=line;strokeColor=#dddddd;");
+b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(40,28);d.insert(b);b=new mxCell("10GB PD",new mxGeometry(0,0,110,20),"text;fontSize=12;fontColor=#888888;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(40,38);d.insert(b);b=new mxCell("",new mxGeometry(0,0,17,17),"dashed=0;html=1;shape=mxgraph.gcp.product_cards.standard_machine;fillColor=#757575;gradientColor=none;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=
+new mxPoint(30,60);d.insert(b);b=new mxCell("",new mxGeometry(0,0,17,17),"dashed=0;html=1;shape=mxgraph.gcp.product_cards.disk;fillColor=#757575;gradientColor=none;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(70,60);d.insert(b);b=new mxCell("",new mxGeometry(0,0,17,17),"dashed=0;html=1;shape=mxgraph.gcp.product_cards.close;fillColor=#757575;gradientColor=none;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(110,60);d.insert(b);
+b=new mxCell("4",new mxGeometry(0,0,14,14),"dashed=0;html=1;ellipse;fillColor=#3979F1;gradientColor=none;strokeColor=none;fontColor=#FFFFFF;fontSize=10;verticalAlign=middle;spacing=0;spacingBottom=1;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(22,68);d.insert(b);b=new mxCell("2",new mxGeometry(0,0,14,14),"dashed=0;html=1;ellipse;fillColor=#3979F1;gradientColor=none;strokeColor=none;fontColor=#FFFFFF;fontSize=10;verticalAlign=middle;spacing=0;spacingBottom=1;");b.vertex=!0;b.geometry.relative=
+!0;b.geometry.offset=new mxPoint(42,68);d.insert(b);b=new mxCell("1",new mxGeometry(0,0,14,14),"dashed=0;html=1;ellipse;fillColor=#3979F1;gradientColor=none;strokeColor=none;fontColor=#FFFFFF;fontSize=10;verticalAlign=middle;spacing=0;spacingBottom=1;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(82,68);d.insert(b);return a.createVertexTemplateFromCells([d],d.geometry.width,d.geometry.height,"Expanded Product Card")}),this.addEntry("gcp google cloud platform cardservice",function(){var d=
+new mxCell("",new mxGeometry(0,0,110,50),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#757575;gradientColor=none;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,8);d.insert(b);b=new mxCell("Local\nCompute",new mxGeometry(0,0,60,50),"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(50,0);d.insert(b);return a.createVertexTemplateFromCells([d],d.geometry.width,d.geometry.height,"Service Card")})];this.addPalette("gcpCards","GCP / Cards",!1,mxUtils.bind(this,function(a){for(var b=0;b<f.length;b++)a.appendChild(f[b](a))}))}})();
+(function(){Sidebar.prototype.addGMDLBottomNavigationPalette=function(a){var c=this,f=[this.addEntry("gmdl google media design library bottom navigation bottom navigation",function(){var a=new mxCell("",new mxGeometry(0,0,358,48),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;shadow=0;");a.vertex=!0;var b=new mxCell("Recents",new mxGeometry(.15,.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.recents;fillColor=#808080;strokeColor=none;fontColor=#808080;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;");
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(-10,-15);b.vertex=!0;a.insert(b);b=new mxCell("Favorites",new mxGeometry(.5,.5,20,18),"dashed=0;html=1;shape=mxgraph.gmdl.heart;fillColor=#00796B;strokeColor=none;fontColor=#00796B;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-5;");b.geometry.offset=new mxPoint(-10,-14);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("Nearby",new mxGeometry(.85,
+.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.nearby;fillColor=#808080;strokeColor=none;fontColor=#808080;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;");b.geometry.offset=new mxPoint(-10,-15);b.geometry.relative=!0;b.vertex=!0;a.insert(b);return c.createVertexTemplateFromCells([a],a.geometry.width,a.geometry.height,"Bottom Navigation")}),this.addEntry("gmdl google media design library bottom navigation dropdown menu",
+function(){var a=new mxCell("",new mxGeometry(0,0,358,48),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#00796B;strokeColor=none;shadow=0;");a.vertex=!0;var b=new mxCell("",new mxGeometry(.15,.5,20,16),"dashed=0;html=1;shape=mxgraph.gmdl.video_2;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");b.geometry.relative=!0;b.geometry.offset=
+new mxPoint(-10,-8);b.vertex=!0;a.insert(b);b=new mxCell("Music",new mxGeometry(.38,.5,14,20),"dashed=0;html=1;shape=mxgraph.gmdl.music;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-5;");b.geometry.offset=new mxPoint(-10,-14);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("",new mxGeometry(.62,.5,16,20),"dashed=0;html=1;shape=mxgraph.gmdl.book;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");
+b.geometry.offset=new mxPoint(-8,-10);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("",new mxGeometry(.85,.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.webpage;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");b.geometry.offset=new mxPoint(-10,-15);b.geometry.relative=!0;b.vertex=!0;a.insert(b);return c.createVertexTemplateFromCells([a],
+a.geometry.width,a.geometry.height,"Bottom Navigation")})];this.addPalette("gmdlBottom Navigation","GMDL / Bottom Navigation",a||!1,mxUtils.bind(this,function(a){for(var b=0;b<f.length;b++)a.appendChild(f[b](a))}))};Sidebar.prototype.addGMDLBottomSheetsPalette=function(a){var c=this,f=[this.addEntry("gmdl google media design library bottom sheets bottom sheet",function(){var a=new mxCell("",new mxGeometry(0,0,358,320),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;shadow=0;recursiveResize=0;");
+a.vertex=!0;var b=new mxCell("Open in",new mxGeometry(10,15,200,20),"shape=rect;strokeColor=none;fillColor=none;align=left;fontColor=#808080;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Keep",new mxGeometry(10,60,20,20),"shape=mxgraph.gmdl.keep;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Inbox",new mxGeometry(10,110,22,20),"shape=mxgraph.gmdl.inbox;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");
+b.vertex=!0;a.insert(b);b=new mxCell("Hangouts",new mxGeometry(10,160,20,22),"shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#0F9755;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Messenger",new mxGeometry(10,210,22,20),"shape=mxgraph.gmdl.messenger;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");
+b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(10,260,20,20),"shape=mxgraph.gmdl.google_plus;strokeColor=none;fillColor=#D14235;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=!0;a.insert(b);return c.createVertexTemplateFromCells([a],a.geometry.width,a.geometry.height,"Bottom Sheet")}),this.addEntry("gmdl google media design library bottom sheets grid style options",function(){var a=new mxCell("",new mxGeometry(0,
+0,358,642),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;");a.vertex=!0;var b=new mxCell("12:30",new mxGeometry(0,0,358,24),"dashed=0;align=center;fontSize=12;shape=rect;align=right;fillColor=#2D3986;strokeColor=none;fontColor=#FFFFFF;spacingRight=4;spacingTop=1;fontStyle=0;fontSize=13;resizeWidth=1;");b.geometry.relative=!0;b.vertex=!0;a.insert(b);var e=new mxCell("",new mxGeometry(1,.5,46,14),"dashed=0;html=1;shape=mxgraph.gmdl.top_bar;strokeColor=none;");e.geometry.relative=
+!0;e.geometry.offset=new mxPoint(-92,-7);e.vertex=!0;b.insert(e);b=new mxCell("Ali Connors",new mxGeometry(0,0,358,57),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#394797;resizeWidth=1;fontSize=22;fontColor=#FFFFFF;spacingTop=-3;verticalAlign=middle;align=left;spacingLeft=72;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,24);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.left;strokeColor=#ffffff;strokeWidth=2;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.edit;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-65,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,5,16),"dashed=0;html=1;shape=mxgraph.gmdl.settings;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,-8);e.vertex=!0;b.insert(e);
+b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,81);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,20,24),"dashed=0;html=1;shape=mxgraph.gmdl.telephone;strokeColor=none;fillColor=#3F51B5;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-12);e.vertex=!0;b.insert(e);e=new mxCell("(650) 555-1234",new mxGeometry(0,.5,358,
+20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Mobile",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,146);b.vertex=!0;a.insert(b);e=new mxCell("(323) 555-6789",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;
+e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,
+358,20),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,211);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.2011,.5,286,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-5);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,231);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,24,16),"dashed=0;html=1;shape=mxgraph.gmdl.mail;strokeColor=#ffffff;fillColor=#3F51B5;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(24,-8);e.vertex=!0;b.insert(e);e=new mxCell("aliconnors@example.com",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=
+new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Personal",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,296);b.vertex=!0;a.insert(b);e=new mxCell("ali_connors@example.com",
+new mxGeometry(0,.5,150,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,356);b.vertex=!0;a.insert(b);e=new mxCell("Gmail",new mxGeometry(.148,0,46,34),"dashed=0;fontSize=10;shape=mxgraph.gmdl.gmail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=6;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-23,392);e.vertex=!0;a.insert(e);b=new mxCell("Hangout",new mxGeometry(.5,0,40,46),"dashed=0;fontSize=10;shape=mxgraph.gmdl.hangout;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#19A05E;strokeColor=none;");
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(-20,386);b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(.8547,0,46,46),"dashed=0;fontSize=10;shape=mxgraph.gmdl.google_plus;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;strokeColor=none;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(-23,386);b.vertex=!0;a.insert(b);e=new mxCell("Mail",new mxGeometry(.148,0,40,32),"dashed=0;fontSize=10;shape=mxgraph.gmdl.mail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=4;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=3;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,494);e.vertex=!0;a.insert(e);e=new mxCell("Message",new mxGeometry(.5,0,44,42),"dashed=0;fontSize=10;shape=mxgraph.gmdl.message;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=-1;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=4;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-22,489);e.vertex=!0;a.insert(e);e=new mxCell("More",new mxGeometry(.8547,0,40,12),"dashed=0;fontSize=10;shape=mxgraph.gmdl.more;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=16;fillColor=#BDBDBD;strokeColor=none;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,504);e.vertex=!0;a.insert(e);b=new mxCell("",new mxGeometry(0,1,358,48),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,-48);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.25,.5,14,14),"dashed=0;html=1;shape=mxgraph.gmdl.back;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,
+-7);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(.5,.5,14,14),"shape=ellipse;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,-7);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(.75,.5,14,14),"shape=rect;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,-7);e.vertex=!0;b.insert(e);return c.createVertexTemplateFromCells([a],358,642,"Grid Style With Some Options")}),
+this.addEntry("gmdl google media design library bottom sheets grid style all options",function(){var a=new mxCell("",new mxGeometry(0,0,358,642),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;");a.vertex=!0;var b=new mxCell("12:30",new mxGeometry(0,0,358,24),"dashed=0;align=center;fontSize=12;shape=rect;align=right;fillColor=#2D3986;strokeColor=none;fontColor=#FFFFFF;spacingRight=4;spacingTop=1;fontStyle=0;fontSize=13;resizeWidth=1;");b.geometry.relative=!0;b.vertex=
+!0;a.insert(b);var e=new mxCell("",new mxGeometry(1,.5,46,14),"dashed=0;html=1;shape=mxgraph.gmdl.top_bar;fillColor=#2D3986;strokeColor=none;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-92,-7);e.vertex=!0;b.insert(e);b=new mxCell("Ali Connors",new mxGeometry(0,0,358,57),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#394797;resizeWidth=1;fontSize=22;fontColor=#FFFFFF;spacingTop=-3;verticalAlign=middle;align=left;spacingLeft=72;");b.geometry.relative=!0;b.geometry.offset=
+new mxPoint(0,24);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.left;strokeColor=#ffffff;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.edit;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-65,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,5,16),"dashed=0;html=1;shape=mxgraph.gmdl.settings;strokeColor=none;fillColor=#ffffff;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,-8);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,81);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,20,24),"dashed=0;html=1;shape=mxgraph.gmdl.telephone;strokeColor=none;fillColor=#3F51B5;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,
+-12);e.vertex=!0;b.insert(e);e=new mxCell("(650) 555-1234",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Mobile",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,146);b.vertex=!0;a.insert(b);e=new mxCell("(323) 555-6789",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;
+e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,
+358,20),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,211);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.2011,.5,286,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-5);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,231);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,24,16),"dashed=0;html=1;shape=mxgraph.gmdl.mail;strokeColor=#ffffff;fillColor=#3F51B5;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(24,-8);e.vertex=!0;b.insert(e);e=new mxCell("aliconnors@example.com",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=
+new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Personal",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,291);b.vertex=!0;a.insert(b);e=new mxCell("Gmail",new mxGeometry(.148,0,46,34),"dashed=0;fontSize=12;shape=mxgraph.gmdl.gmail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=6;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-23,327);e.vertex=!0;a.insert(e);b=new mxCell("Hangout",new mxGeometry(.5,0,40,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.hangout;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#19A05E;strokeColor=none;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(-20,321);b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(.8547,0,46,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.google_plus;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;strokeColor=none;");
b.geometry.relative=!0;b.geometry.offset=new mxPoint(-23,321);b.vertex=!0;a.insert(b);e=new mxCell("Mail",new mxGeometry(.148,0,40,32),"dashed=0;fontSize=12;shape=mxgraph.gmdl.mail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=4;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=3;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,422);e.vertex=!0;a.insert(e);e=new mxCell("Message",new mxGeometry(.5,0,44,42),"dashed=0;fontSize=12;shape=mxgraph.gmdl.message;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=-1;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=4;");
e.geometry.relative=!0;e.geometry.offset=new mxPoint(-22,417);e.vertex=!0;a.insert(e);e=new mxCell("Copy",new mxGeometry(.8547,0,34,40),"dashed=0;fontSize=12;shape=mxgraph.gmdl.copy;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=2;fillColor=none;strokeColor=#BDBDBD;strokeWidth=4;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-17,418);e.vertex=!0;a.insert(e);b=new mxCell("Facebook",new mxGeometry(.148,0,46,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.facebook;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#BDBDBD;strokeColor=none;");
b.geometry.relative=!0;b.geometry.offset=new mxPoint(-23,513);b.vertex=!0;a.insert(b);b=new mxCell("Twitter",new mxGeometry(.5,0,46,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.twitter;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#BDBDBD;strokeColor=none;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(-23,513);b.vertex=!0;a.insert(b);b=new mxCell("",new mxGeometry(0,1,358,48),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;resizeWidth=1;");
@@ -7516,7 +7533,7 @@ c);while(c++<a&&"1"==mxUtils.getValue(this.getCellStyle(b),"locked","0"));null!=
[SHAPES_PATH+"/mockup/mxMockupGraphics.js",STENCIL_PATH+"/mockup/misc.xml"];mxStencilRegistry.libraries["mockup/markup"]=[SHAPES_PATH+"/mockup/mxMockupMarkup.js"];mxStencilRegistry.libraries["mockup/misc"]=[SHAPES_PATH+"/mockup/mxMockupMisc.js",STENCIL_PATH+"/mockup/misc.xml"];mxStencilRegistry.libraries["mockup/navigation"]=[SHAPES_PATH+"/mockup/mxMockupNavigation.js",STENCIL_PATH+"/mockup/misc.xml"];mxStencilRegistry.libraries["mockup/text"]=[SHAPES_PATH+"/mockup/mxMockupText.js"];mxStencilRegistry.libraries.floorplan=
[SHAPES_PATH+"/mxFloorplan.js",STENCIL_PATH+"/floorplan.xml"];mxStencilRegistry.libraries.bootstrap=[SHAPES_PATH+"/mxBootstrap.js",STENCIL_PATH+"/bootstrap.xml"];mxStencilRegistry.libraries.gmdl=[SHAPES_PATH+"/mxGmdl.js",STENCIL_PATH+"/gmdl.xml"];mxStencilRegistry.libraries.cabinets=[SHAPES_PATH+"/mxCabinets.js",STENCIL_PATH+"/cabinets.xml"];mxStencilRegistry.libraries.archimate=[SHAPES_PATH+"/mxArchiMate.js"];mxStencilRegistry.libraries.archimate3=[SHAPES_PATH+"/mxArchiMate3.js"];mxStencilRegistry.libraries.sysml=
[SHAPES_PATH+"/mxSysML.js"];mxStencilRegistry.libraries.eip=[SHAPES_PATH+"/mxEip.js",STENCIL_PATH+"/eip.xml"];mxStencilRegistry.libraries.networks=[SHAPES_PATH+"/mxNetworks.js",STENCIL_PATH+"/networks.xml"];mxStencilRegistry.libraries.aws3d=[SHAPES_PATH+"/mxAWS3D.js",STENCIL_PATH+"/aws3d.xml"];mxStencilRegistry.libraries.pid2inst=[SHAPES_PATH+"/pid2/mxPidInstruments.js"];mxStencilRegistry.libraries.pid2misc=[SHAPES_PATH+"/pid2/mxPidMisc.js",STENCIL_PATH+"/pid/misc.xml"];mxStencilRegistry.libraries.pid2valves=
-[SHAPES_PATH+"/pid2/mxPidValves.js"];mxStencilRegistry.libraries.pidFlowSensors=[STENCIL_PATH+"/pid/flow_sensors.xml"];mxMarker.getPackageForType=function(a){var b=null;null!=a&&0<a.length&&("ER"==a.substring(0,2)?b="mxgraph.er":"sysML"==a.substring(0,5)&&(b="mxgraph.sysml"));return b};var u=mxMarker.createMarker;mxMarker.createMarker=function(a,b,c,d,e,f,k,g,l,m){if(null!=c&&null==mxMarker.markers[c]){var n=this.getPackageForType(c);null!=n&&mxStencilRegistry.getStencil(n)}return u.apply(this,arguments)}})();(function(){EditorUi.VERSION="6.3.6";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.isElectronApp=window&&window.process&&window.process.type;EditorUi.prototype.emptyDiagramXml='<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>';EditorUi.prototype.emptyLibraryXml="<mxlibrary>[]</mxlibrary>";EditorUi.prototype.mode=null;EditorUi.prototype.sidebarFooterHeight=36;EditorUi.prototype.defaultCustomShapeStyle="shape=stencil(tZRtTsQgEEBPw1+DJR7AoN6DbWftpAgE0Ortd/jYRGq72R+YNE2YgTePloEJGWblgA18ZuKFDcMj5/Sm8boZq+BgjCX4pTyqk6ZlKROitwusOMXKQDODx5iy4pXxZ5qTHiFHawxB0JrQZH7lCabQ0Fr+XWC1/E8zcsT/gAi+Subo2/3Mh6d/oJb5nU1b5tW7r2knautaa3T+U32o7f7vZwpJkaNDLORJjcu7t59m2jXxqX9un+tt022acsfmoKaQZ+vhhswZtS6Ne/ThQGt0IV0N3Yyv6P3CeT9/tHO0XFI5cAE=);whiteSpace=wrap;html=1;";
+[SHAPES_PATH+"/pid2/mxPidValves.js"];mxStencilRegistry.libraries.pidFlowSensors=[STENCIL_PATH+"/pid/flow_sensors.xml"];mxMarker.getPackageForType=function(a){var b=null;null!=a&&0<a.length&&("ER"==a.substring(0,2)?b="mxgraph.er":"sysML"==a.substring(0,5)&&(b="mxgraph.sysml"));return b};var u=mxMarker.createMarker;mxMarker.createMarker=function(a,b,c,d,e,f,k,g,l,m){if(null!=c&&null==mxMarker.markers[c]){var n=this.getPackageForType(c);null!=n&&mxStencilRegistry.getStencil(n)}return u.apply(this,arguments)}})();(function(){EditorUi.VERSION="6.4.1";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.isElectronApp=window&&window.process&&window.process.type;EditorUi.prototype.emptyDiagramXml='<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>';EditorUi.prototype.emptyLibraryXml="<mxlibrary>[]</mxlibrary>";EditorUi.prototype.mode=null;EditorUi.prototype.sidebarFooterHeight=36;EditorUi.prototype.defaultCustomShapeStyle="shape=stencil(tZRtTsQgEEBPw1+DJR7AoN6DbWftpAgE0Ortd/jYRGq72R+YNE2YgTePloEJGWblgA18ZuKFDcMj5/Sm8boZq+BgjCX4pTyqk6ZlKROitwusOMXKQDODx5iy4pXxZ5qTHiFHawxB0JrQZH7lCabQ0Fr+XWC1/E8zcsT/gAi+Subo2/3Mh6d/oJb5nU1b5tW7r2knautaa3T+U32o7f7vZwpJkaNDLORJjcu7t59m2jXxqX9un+tt022acsfmoKaQZ+vhhswZtS6Ne/ThQGt0IV0N3Yyv6P3CeT9/tHO0XFI5cAE=);whiteSpace=wrap;html=1;";
EditorUi.prototype.maxBackgroundSize=1600;EditorUi.prototype.maxImageSize=520;EditorUi.prototype.resampleThreshold=1E5;EditorUi.prototype.maxImageBytes=1E6;EditorUi.prototype.maxBackgroundBytes=25E5;EditorUi.prototype.currentFile=null;EditorUi.prototype.enableLogging=!0;EditorUi.prototype.pdfPageExport=!0;(function(){EditorUi.prototype.useCanvasForExport=!1;EditorUi.prototype.jpgSupported=!1;try{var a=document.createElement("canvas"),b=new Image;b.onload=function(){try{a.getContext("2d").drawImage(b,
0,0);var c=a.toDataURL("image/png");EditorUi.prototype.useCanvasForExport=null!=c&&6<c.length}catch(p){}};b.src="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1px" height="1px" version="1.1"><foreignObject pointer-events="all" width="1" height="1"><div xmlns="http://www.w3.org/1999/xhtml"></div></foreignObject></svg>')))}catch(n){}try{a=document.createElement("canvas");a.width=a.height=1;var c=
a.toDataURL("image/jpeg");EditorUi.prototype.jpgSupported=null!==c.match("image/jpeg")}catch(n){}})();EditorUi.prototype.getLocalData=function(a,b){b(localStorage.getItem(a))};EditorUi.prototype.setLocalData=function(a,b,c){localStorage.setItem(a,b);c()};EditorUi.prototype.removeLocalData=function(a,b){localStorage.removeItem(a);b()};EditorUi.prototype.setMathEnabled=function(a){this.editor.graph.mathEnabled=a;this.editor.updateGraphComponents();this.editor.graph.refresh();this.fireEvent(new mxEventObject("mathEnabledChanged"))};
@@ -7778,7 +7795,7 @@ a=Math.round(a)-.5;l=Math.round(l)-.5;null!=this.state.fontBackgroundColor&&(thi
mxJsCanvas.prototype.getCanvas=function(){return canvas};mxJsCanvas.prototype.finish=function(a){0==this.waitCounter?a():this.onComplete=a};DrawioClient=function(a,c){mxEventSource.call(this);this.ui=a;this.cookieName=c;this.token=this.getPersistentToken()};mxUtils.extend(DrawioClient,mxEventSource);DrawioClient.prototype.token=null;DrawioClient.prototype.user=null;DrawioClient.prototype.setUser=function(a){this.user=a;this.fireEvent(new mxEventObject("userChanged"))};DrawioClient.prototype.getUser=function(){return this.user};
DrawioClient.prototype.clearPersistentToken=function(){if(isLocalStorage)localStorage.removeItem("."+this.cookieName);else if("undefined"!=typeof Storage){var a=new Date;a.setYear(a.getFullYear()-1);document.cookie=this.cookieName+"=; expires="+a.toUTCString()}};
DrawioClient.prototype.getPersistentToken=function(){var a=null;isLocalStorage&&(a=localStorage.getItem("."+this.cookieName));if(null==a&&"undefined"!=typeof Storage){var c=document.cookie,f=this.cookieName+"=",d=c.indexOf(f);0<=d&&(d+=f.length,a=c.indexOf(";",d),0>a?a=c.length:postCookie=c.substring(a),a=c.substring(d,a),a=0<a.length?a:null,null!=a&&isLocalStorage&&(c=new Date,c.setYear(c.getFullYear()-1),document.cookie=f+"; expires="+c.toUTCString(),localStorage.setItem("."+this.cookieName,a)))}return a};
-DrawioClient.prototype.setPersistentToken=function(a){if(null!=a)if(isLocalStorage)localStorage.setItem("."+this.cookieName,a);else{if("undefined"!=typeof Storage){var c=new Date;c.setYear(c.getFullYear()+10);a=this.cookieName+"="+a+"; path=/; expires="+c.toUTCString();"https"==document.location.protocol.toLowerCase()&&(a+=";secure");document.cookie=a}}else this.clearPersistentToken()};DrawioUser=function(a,c,f,d){this.id=a;this.email=c;this.displayName=f;this.pictureUrl=d};UrlLibrary=function(a,c,f){StorageFile.call(this,a,c,f);a=f;c=a.lastIndexOf("/");0<=c&&(a=a.substring(c+1));this.fname=a};mxUtils.extend(UrlLibrary,StorageFile);UrlLibrary.prototype.getHash=function(){return"U"+encodeURIComponent(this.title)};UrlLibrary.prototype.getTitle=function(){return this.fname};UrlLibrary.prototype.isAutosave=function(){return!1};UrlLibrary.prototype.isEditable=function(a,c,f){return!1};UrlLibrary.prototype.saveAs=function(a,c,f){};UrlLibrary.prototype.open=function(){};function DriveRealtime(a,c){this.realtimeAutosaveDelay=this.defaultRealtimeAutosaveDelay;this.realtimeMaxAutosaveDelay=this.defaultRealtimeMaxAutosaveDelay;this.file=a;this.doc=c;this.rtModel=this.doc.getModel();this.root=this.rtModel.getRoot();this.ui=a.getUi();this.graph=this.ui.editor.graph;this.model=this.graph.model;this.userId=this.ui.drive.user.id;this.ui.allowAnimation=!1;this.codec=new mxCodec;this.disconnectListener=mxUtils.bind(this,function(){this.sessionExpiredError()});this.ui.drive.addListener("disconnected",
+DrawioClient.prototype.setPersistentToken=function(a){if(null!=a)if(isLocalStorage)localStorage.setItem("."+this.cookieName,a);else{if("undefined"!=typeof Storage){var c=new Date;c.setYear(c.getFullYear()+10);a=this.cookieName+"="+a+"; path=/; expires="+c.toUTCString();"https"==document.location.protocol.toLowerCase()&&(a+=";secure");document.cookie=a}}else this.clearPersistentToken()};DrawioUser=function(a,c,f,d,b){this.id=a;this.email=c;this.displayName=f;this.pictureUrl=d;this.locale=b};UrlLibrary=function(a,c,f){StorageFile.call(this,a,c,f);a=f;c=a.lastIndexOf("/");0<=c&&(a=a.substring(c+1));this.fname=a};mxUtils.extend(UrlLibrary,StorageFile);UrlLibrary.prototype.getHash=function(){return"U"+encodeURIComponent(this.title)};UrlLibrary.prototype.getTitle=function(){return this.fname};UrlLibrary.prototype.isAutosave=function(){return!1};UrlLibrary.prototype.isEditable=function(a,c,f){return!1};UrlLibrary.prototype.saveAs=function(a,c,f){};UrlLibrary.prototype.open=function(){};function DriveRealtime(a,c){this.realtimeAutosaveDelay=this.defaultRealtimeAutosaveDelay;this.realtimeMaxAutosaveDelay=this.defaultRealtimeMaxAutosaveDelay;this.file=a;this.doc=c;this.rtModel=this.doc.getModel();this.root=this.rtModel.getRoot();this.ui=a.getUi();this.graph=this.ui.editor.graph;this.model=this.graph.model;this.userId=this.ui.drive.user.id;this.ui.allowAnimation=!1;this.codec=new mxCodec;this.disconnectListener=mxUtils.bind(this,function(){this.sessionExpiredError()});this.ui.drive.addListener("disconnected",
this.disconnectListener);this.autosaveChangeListener=mxUtils.bind(this,function(){var a=this.ui.drive.enableThumbnails;this.ui.drive.enableThumbnails=this.ui.editor.autosave;this.ui.editor.setStatus(mxUtils.htmlEntities(mxResources.get("saving"))+"...");this.file.save(!0,mxUtils.bind(this,function(){this.ui.editor.setStatus(mxUtils.htmlEntities(mxResources.get("allChangesSaved")))}));this.ui.drive.enableThumbnails=a});this.ui.editor.addListener("autosaveChanged",this.autosaveChangeListener)}
DriveRealtime.prototype.logLevel=2;DriveRealtime.prototype.updateStatusInterval=2E4;DriveRealtime.prototype.diagramsKey="diagrams";DriveRealtime.prototype.diagrams=null;DriveRealtime.prototype.rootKey="root";DriveRealtime.prototype.diagramMap=null;DriveRealtime.prototype.chatHistory=null;DriveRealtime.prototype.saving=!1;DriveRealtime.prototype.defaultRealtimeAutosaveDelay=5E3;DriveRealtime.prototype.defaultRealtimeMaxAutosaveDelay=6E4;DriveRealtime.prototype.realtimeHeartbeat=3E4;
DriveRealtime.prototype.ignoreChange=!1;DriveRealtime.prototype.ignorePageFormatChanged=!1;DriveRealtime.prototype.ignoreScaleChanged=!1;DriveRealtime.prototype.ignoreBackgroundColorChanged=!1;DriveRealtime.prototype.ignoreShadowVisibleChanged=!1;DriveRealtime.prototype.ignoreBackgroundImageChanged=!1;DriveRealtime.prototype.ignoreMathEnabledChanged=!1;DriveRealtime.prototype.getDiagramMap=function(){return null!=this.ui.currentPage?this.ui.currentPage.mapping.diagramMap:this.diagramMap};
@@ -7909,7 +7926,7 @@ DriveClient.prototype.executeRequest=function(a,c,f){var d=!0,b=null,e=0;null!=t
this.execute(g):g()};DriveClient.prototype.authorize=function(a,c,f,d){var b=this.getUserId();null!=this.ui.stateArg&&null!=this.ui.stateArg.userId&&(b=this.ui.stateArg.userId);if(a&&null==b)null!=f&&f();else{var e={scope:this.scopes,client_id:this.clientId};a&&null!=b?(e.immediate=!0,e.user_id=b):(e.immediate=!1,e.authuser=-1);gapi.auth.authorize(e,mxUtils.bind(this,function(e){null!=e&&null==e.error?null!=this.user&&a&&this.user.id==b?null!=c&&c():this.updateUser(c,f,d):null!=f&&f(e);this.resetTokenRefresh(e)}))}};
DriveClient.prototype.resetTokenRefresh=function(a){null!=this.tokenRefreshThread&&(window.clearTimeout(this.tokenRefreshThread),this.tokenRefreshThread=null);null!=a&&null==a.error&&0<a.expires_in&&(this.tokenRefreshInterval=1E3*parseInt(a.expires_in),this.lastTokenRefresh=(new Date).getTime(),this.tokenRefreshThread=window.setTimeout(mxUtils.bind(this,function(){this.authorize(!0,mxUtils.bind(this,function(){}),mxUtils.bind(this,function(){}))}),900*a.expires_in))};
DriveClient.prototype.checkToken=function(a){var c=0<this.lastTokenRefresh;(new Date).getTime()-this.lastTokenRefresh>this.tokenRefreshInterval||null==this.tokenRefreshThread?this.execute(mxUtils.bind(this,function(){a();c&&this.fireEvent(new mxEventObject("disconnected"))})):a()};
-DriveClient.prototype.updateUser=function(a,c,f){var d=gapi.auth.getToken().access_token;this.ui.loadUrl("https://www.googleapis.com/oauth2/v2/userinfo?alt=json&access_token="+d,mxUtils.bind(this,function(b){var d=JSON.parse(b);this.executeRequest(gapi.client.drive.about.get(),mxUtils.bind(this,function(b){this.setUser(new DrawioUser(d.id,b.user.emailAddress,b.user.displayName,null!=b.user.picture?b.user.picture.url:null));this.setUserId(d.id,f);null!=a&&a()}),c)}),c)};
+DriveClient.prototype.updateUser=function(a,c,f){var d=gapi.auth.getToken().access_token;this.ui.loadUrl("https://www.googleapis.com/oauth2/v2/userinfo?alt=json&access_token="+d,mxUtils.bind(this,function(b){var d=JSON.parse(b);this.executeRequest(gapi.client.drive.about.get(),mxUtils.bind(this,function(b){this.setUser(new DrawioUser(d.id,b.user.emailAddress,b.user.displayName,null!=b.user.picture?b.user.picture.url:null,d.locale));this.setUserId(d.id,f);null!=a&&a()}),c)}),c)};
DriveClient.prototype.copyFile=function(a,c,f,d){null!=a&&null!=c&&this.executeRequest(gapi.client.drive.files.copy({fileId:a,resource:{title:c},supportsTeamDrives:!0}),f,d)};DriveClient.prototype.renameFile=function(a,c,f,d){null!=a&&null!=c&&this.executeRequest(this.createDriveRequest(a,{title:c}),f,d)};DriveClient.prototype.moveFile=function(a,c,f,d){null!=a&&null!=c&&this.executeRequest(this.createDriveRequest(a,{parents:[{kind:"drive#fileLink",id:c}]}),f,d)};
DriveClient.prototype.createDriveRequest=function(a,c){return gapi.client.request({path:"/drive/v2/files/"+a,method:"PUT",params:{uploadType:"multipart",supportsTeamDrives:!0},headers:{"Content-Type":"application/json; charset=UTF-8"},body:JSON.stringify(c)})};DriveClient.prototype.getLibrary=function(a,c,f){return this.getFile(a,c,f,!0,!0)};
DriveClient.prototype.getFile=function(a,c,f,d,b){d=null!=d?d:!1;b=null!=b?b:!1;null!=urlParams.rev?this.executeRequest(gapi.client.drive.revisions.get({fileId:a,revisionId:urlParams.rev}),mxUtils.bind(this,function(a){this.getXmlFile(a,null,c,f)}),f):this.executeRequest(gapi.client.drive.files.get({fileId:a,supportsTeamDrives:!0}),mxUtils.bind(this,function(a){if(null!=this.user)if(/\.vsdx$/i.test(a.title)||/\.gliffy$/i.test(a.title)||/\.png$/i.test(a.title)){var e=a.downloadUrl+"&access_token="+
@@ -8077,8 +8094,8 @@ this.icon.setAttribute("title",mxResources.get("draw.io")),this.icon.style.paddi
mxSettings.save()})),this.editor.graph.pageFormat=mxSettings.getPageFormat(),this.addListener("pageFormatChanged",mxUtils.bind(this,function(a,b){mxSettings.setPageFormat(this.editor.graph.pageFormat);mxSettings.save()})),this.editor.graph.view.gridColor=mxSettings.getGridColor(),this.addListener("gridColorChanged",mxUtils.bind(this,function(a,b){mxSettings.setGridColor(this.editor.graph.view.gridColor);mxSettings.save()})),mxClient.IS_CHROMEAPP&&(this.editor.addListener("autosaveChanged",mxUtils.bind(this,
function(a,b){mxSettings.setAutosave(this.editor.autosave);mxSettings.save()})),this.editor.autosave=mxSettings.getAutosave()),null!=this.sidebar&&this.sidebar.showPalette("search",mxSettings.settings.search),!this.editor.chromeless&&null!=this.sidebar&&(mxSettings.settings.isNew||8>=parseInt(mxSettings.settings.version||0))&&(this.toggleScratchpad(),mxSettings.save()),this.addListener("formatWidthChanged",function(){mxSettings.setFormatWidth(this.formatWidth);mxSettings.save()})};
App.prototype.isDriveDomain=function(){return"0"!=urlParams.drive&&("test.draw.io"==window.location.hostname||"cdn.draw.io"==window.location.hostname||"www.draw.io"==window.location.hostname||"drive.draw.io"==window.location.hostname||"jgraph.github.io"==window.location.hostname)};App.prototype.isLegacyDriveDomain=function(){return 0==urlParams.drive||"legacy.draw.io"==window.location.hostname};
-App.prototype.checkLicense=function(){var a=this.drive.getUser(),a=("1"==urlParams.dev?urlParams.lic:null)||(null!=a?a.email:null);if(!this.isOffline()&&!this.editor.chromeless&&null!=a){var c=a.lastIndexOf("@"),f=a;0<=c&&(f=a.substring(c+1),a=this.crc32(a.substring(0,c))+"@"+f);mxUtils.post("/license","domain="+encodeURIComponent(f)+"&email="+encodeURIComponent(a)+"&ts="+(new Date).getTime(),mxUtils.bind(this,function(a){try{if(200<=a.getStatus()&&299>=a.getStatus()){var b=a.getText();if(0<b.length){var c=
-JSON.parse(b);null!=c&&this.handleLicense(c,f)}}}catch(g){}}))}};
+App.prototype.checkLicense=function(){var a=this.drive.getUser(),c=("1"==urlParams.dev?urlParams.lic:null)||(null!=a?a.email:null);if(!this.isOffline()&&!this.editor.chromeless&&null!=c){var f=c.lastIndexOf("@"),d=c;0<=f&&(d=c.substring(f+1));mxUtils.post("/license","domain="+encodeURIComponent(d)+"&email="+encodeURIComponent(c)+"&ds="+encodeURIComponent(a.displayName)+"&lc="+encodeURIComponent(a.locale)+"&ts="+(new Date).getTime(),mxUtils.bind(this,function(a){try{if(200<=a.getStatus()&&299>=a.getStatus()){var b=
+a.getText();if(0<b.length){var c=JSON.parse(b);null!=c&&this.handleLicense(c,d)}}}catch(k){}}))}};
App.prototype.handleLicense=function(a,c){var f=document.getElementById("geFooter"),d=null;if(null!=f&&null!=a)if(d=a.expiry,null!=a.footer)f.innerHTML=decodeURIComponent(a.footer);else if(this.hideFooter(),null!=d&&"never"!=d){var b=new Date(Date.parse(d)),e=Math.round((b-Date.now())/864E5);if(90>e){var g="https://support.draw.io/display/DKB/draw.io+footer+state+that+license+is+expiring+on+Google+For+Work+account?domain="+encodeURIComponent(c);f.style.height="100%";f.style.margin="0px";f.style.display=
"";0>e?(this.footerHeight=80,f.innerHTML='<table height="100%"><tr><td valign="middle" align="center" class="geStatusAlert geBlink"><a href="'+g+'" style="padding-top:16px;" target="_blank"><img border="0" src="'+mxGraph.prototype.warningImage.src+'" align="top" style="margin-right:6px">'+mxResources.get("licenseHasExpired",[c,b.toLocaleDateString()])+"</a></td></tr></table>"):(this.footerHeight=46,f.innerHTML='<table height="100%"><tr><td valign="middle" align="center" class="geStatusAlert"><a href="'+
g+'" target="_blank"><img border="0" src="'+mxGraph.prototype.warningImage.src+'" align="top" style="margin-right:6px">'+mxResources.get("licenseWillExpire",[c,b.toLocaleDateString()])+"</a></td></tr></table>");this.refresh()}}return d};App.prototype.getEditBlankXml=function(){var a=this.getCurrentFile();return null!=a&&this.editor.chromeless&&this.editor.graph.lightbox&&null==a.realtime?a.getData():this.getFileData(!0)};
diff --git a/war/js/atlas.min.js b/war/js/atlas.min.js
index caaa6e5f..383f07f5 100644
--- a/war/js/atlas.min.js
+++ b/war/js/atlas.min.js
@@ -2935,42 +2935,42 @@ null,!0).setAttribute("title",mxResources.get("straight")),this.editorUi.menus.e
null,!0).setAttribute("title",mxResources.get("simple")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_EDGE,mxConstants.STYLE_ELBOW,mxConstants.STYLE_CURVED,mxConstants.STYLE_NOEDGESTYLE],["elbowEdgeStyle","vertical",null,null],"geIcon geSprite geSprite-verticalelbow",null,!0).setAttribute("title",mxResources.get("simple")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_EDGE,mxConstants.STYLE_ELBOW,mxConstants.STYLE_CURVED,mxConstants.STYLE_NOEDGESTYLE],["isometricEdgeStyle",
null,null,null],"geIcon geSprite geSprite-horizontalisometric",null,!0).setAttribute("title",mxResources.get("isometric")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_EDGE,mxConstants.STYLE_ELBOW,mxConstants.STYLE_CURVED,mxConstants.STYLE_NOEDGESTYLE],["isometricEdgeStyle","vertical",null,null],"geIcon geSprite geSprite-verticalisometric",null,!0).setAttribute("title",mxResources.get("isometric")),"connector"==e.style.shape&&this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_EDGE,
mxConstants.STYLE_CURVED,mxConstants.STYLE_NOEDGESTYLE],["orthogonalEdgeStyle","1",null],"geIcon geSprite geSprite-curved",null,!0).setAttribute("title",mxResources.get("curved")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_EDGE,mxConstants.STYLE_CURVED,mxConstants.STYLE_NOEDGESTYLE],["entityRelationEdgeStyle",null,null],"geIcon geSprite geSprite-entity",null,!0).setAttribute("title",mxResources.get("entityRelation")))})),C=this.editorUi.toolbar.addMenuFunctionInContainer(l,"geSprite-startclassic",
-mxResources.get("linestart"),!1,mxUtils.bind(this,function(b){if("connector"==e.style.shape||"flexArrow"==e.style.shape)this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.NONE,0],"geIcon geSprite geSprite-noarrow",null,!1).setAttribute("title",mxResources.get("none")),"connector"==e.style.shape?(this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC,1],"geIcon geSprite geSprite-startclassic",null,
-!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC_THIN,1],"geIcon geSprite geSprite-startclassicthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OPEN,0],"geIcon geSprite geSprite-startopen",null,!1).setAttribute("title",mxResources.get("openArrow")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],[mxConstants.ARROW_OPEN_THIN,0],"geIcon geSprite geSprite-startopenthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["openAsync",0],"geIcon geSprite geSprite-startopenasync",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK,1],"geIcon geSprite geSprite-startblock",null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],[mxConstants.ARROW_BLOCK_THIN,1],"geIcon geSprite geSprite-startblockthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["async",1],"geIcon geSprite geSprite-startasync",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OVAL,1],"geIcon geSprite geSprite-startoval",null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],[mxConstants.ARROW_DIAMOND,1],"geIcon geSprite geSprite-startdiamond",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND_THIN,1],"geIcon geSprite geSprite-startthindiamond",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC,0],"geIcon geSprite geSprite-startclassictrans",
-null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC_THIN,0],"geIcon geSprite geSprite-startclassicthintrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK,0],"geIcon geSprite geSprite-startblocktrans",null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],[mxConstants.ARROW_BLOCK_THIN,0],"geIcon geSprite geSprite-startblockthintrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["async",0],"geIcon geSprite geSprite-startasynctrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OVAL,0],"geIcon geSprite geSprite-startovaltrans",null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],[mxConstants.ARROW_DIAMOND,0],"geIcon geSprite geSprite-startdiamondtrans",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND_THIN,0],"geIcon geSprite geSprite-startthindiamondtrans",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["dash",0],"geIcon geSprite geSprite-startdash",
-null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["cross",0],"geIcon geSprite geSprite-startcross",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["circlePlus",0],"geIcon geSprite geSprite-startcircleplus",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["circle",1],"geIcon geSprite geSprite-startcircle",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,
-"startFill"],["ERone",0],"geIcon geSprite geSprite-starterone",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERmandOne",0],"geIcon geSprite geSprite-starteronetoone",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERmany",0],"geIcon geSprite geSprite-startermany",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERoneToMany",0],"geIcon geSprite geSprite-starteronetomany",
-null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERzeroToOne",1],"geIcon geSprite geSprite-starteroneopt",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERzeroToMany",1],"geIcon geSprite geSprite-startermanyopt",null,!1)):this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_BLOCK],"geIcon geSprite geSprite-startblocktrans",null,!1).setAttribute("title",mxResources.get("block"))})),
-H=this.editorUi.toolbar.addMenuFunctionInContainer(l,"geSprite-endclassic",mxResources.get("lineend"),!1,mxUtils.bind(this,function(b){if("connector"==e.style.shape||"flexArrow"==e.style.shape)this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.NONE,0],"geIcon geSprite geSprite-noarrow",null,!1).setAttribute("title",mxResources.get("none")),"connector"==e.style.shape?(this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC,
-1],"geIcon geSprite geSprite-endclassic",null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC_THIN,1],"geIcon geSprite geSprite-endclassicthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OPEN,0],"geIcon geSprite geSprite-endopen",null,!1).setAttribute("title",mxResources.get("openArrow")),this.editorUi.menus.edgeStyleChange(b,
-"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OPEN_THIN,0],"geIcon geSprite geSprite-endopenthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["openAsync",0],"geIcon geSprite geSprite-endopenasync",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK,1],"geIcon geSprite geSprite-endblock",null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(b,
-"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK_THIN,1],"geIcon geSprite geSprite-endblockthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["async",1],"geIcon geSprite geSprite-endasync",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OVAL,1],"geIcon geSprite geSprite-endoval",null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,
-"endFill"],[mxConstants.ARROW_DIAMOND,1],"geIcon geSprite geSprite-enddiamond",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND_THIN,1],"geIcon geSprite geSprite-endthindiamond",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC,0],"geIcon geSprite geSprite-endclassictrans",
-null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC_THIN,0],"geIcon geSprite geSprite-endclassicthintrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK,0],"geIcon geSprite geSprite-endblocktrans",null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,
-"endFill"],[mxConstants.ARROW_BLOCK_THIN,0],"geIcon geSprite geSprite-endblockthintrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["async",0],"geIcon geSprite geSprite-endasynctrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OVAL,0],"geIcon geSprite geSprite-endovaltrans",null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,
-"endFill"],[mxConstants.ARROW_DIAMOND,0],"geIcon geSprite geSprite-enddiamondtrans",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND_THIN,0],"geIcon geSprite geSprite-endthindiamondtrans",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["dash",0],"geIcon geSprite geSprite-enddash",null,!1),
-this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["cross",0],"geIcon geSprite geSprite-endcross",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["circlePlus",0],"geIcon geSprite geSprite-endcircleplus",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["circle",1],"geIcon geSprite geSprite-endcircle",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],
-["ERone",0],"geIcon geSprite geSprite-enderone",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERmandOne",0],"geIcon geSprite geSprite-enderonetoone",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERmany",0],"geIcon geSprite geSprite-endermany",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERoneToMany",0],"geIcon geSprite geSprite-enderonetomany",null,!1),this.editorUi.menus.edgeStyleChange(b,
-"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERzeroToOne",1],"geIcon geSprite geSprite-enderoneopt",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERzeroToMany",1],"geIcon geSprite geSprite-endermanyopt",null,!1)):this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_BLOCK],"geIcon geSprite geSprite-endblocktrans",null,!1).setAttribute("title",mxResources.get("block"))}));this.addArrow(v,8);this.addArrow(z);this.addArrow(C);
-this.addArrow(H);A=this.addArrow(m,9);A.className="geIcon";A.style.width="84px";B=this.addArrow(n,9);B.className="geIcon";B.style.width="22px";var E=document.createElement("div");E.style.width="85px";E.style.height="1px";E.style.borderBottom="1px solid black";E.style.marginBottom="9px";A.appendChild(E);var D=document.createElement("div");D.style.width="23px";D.style.height="1px";D.style.borderBottom="1px solid black";D.style.marginBottom="9px";B.appendChild(D);m.style.height="15px";n.style.height=
-"15px";v.style.height="15px";z.style.height="17px";C.style.marginLeft="3px";C.style.height="17px";H.style.marginLeft="3px";H.style.height="17px";a.appendChild(g);a.appendChild(t);a.appendChild(q);m=q.cloneNode(!1);m.style.paddingBottom="6px";m.style.paddingTop="4px";m.style.fontWeight="normal";n=document.createElement("div");n.style.position="absolute";n.style.marginLeft="3px";n.style.marginBottom="12px";n.style.marginTop="2px";n.style.fontWeight="normal";n.style.width="76px";mxUtils.write(n,mxResources.get("lineend"));
-m.appendChild(n);var G,I,J=this.addUnitInput(m,"pt",74,33,function(){G.apply(this,arguments)}),K=this.addUnitInput(m,"pt",20,33,function(){I.apply(this,arguments)});mxUtils.br(m);A=document.createElement("div");A.style.height="8px";m.appendChild(A);n=n.cloneNode(!1);mxUtils.write(n,mxResources.get("linestart"));m.appendChild(n);var L,N,R=this.addUnitInput(m,"pt",74,33,function(){L.apply(this,arguments)}),V=this.addUnitInput(m,"pt",20,33,function(){N.apply(this,arguments)});mxUtils.br(m);this.addLabel(m,
-mxResources.get("spacing"),74,50);this.addLabel(m,mxResources.get("size"),20,50);mxUtils.br(m);g=g.cloneNode(!1);g.style.fontWeight="normal";g.style.position="relative";g.style.paddingLeft="16px";g.style.marginBottom="2px";g.style.marginTop="6px";g.style.borderWidth="0px";g.style.paddingBottom="18px";n=document.createElement("div");n.style.position="absolute";n.style.marginLeft="3px";n.style.marginBottom="12px";n.style.marginTop="1px";n.style.fontWeight="normal";n.style.width="120px";mxUtils.write(n,
-mxResources.get("perimeter"));g.appendChild(n);var O,F=this.addUnitInput(g,"pt",20,41,function(){O.apply(this,arguments)});e.edges.length==b.getSelectionCount()?(a.appendChild(l),mxClient.IS_QUIRKS&&(mxUtils.br(a),mxUtils.br(a)),a.appendChild(m)):e.vertices.length==b.getSelectionCount()&&(mxClient.IS_QUIRKS&&mxUtils.br(a),a.appendChild(g));var W=mxUtils.bind(this,function(a,c,f){function g(b,a,c,f){c=c.getElementsByTagName("div")[0];c.className=d.getCssClassForMarker(f,e.style.shape,b,a);return c}
-e=this.format.getSelectionState();mxUtils.getValue(e.style,p,null);if(f||document.activeElement!=y)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_STROKEWIDTH,1)),y.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=x)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_STROKEWIDTH,1)),x.value=isNaN(a)?"":a+" pt";k.style.visibility="connector"==e.style.shape?"":"hidden";"1"==mxUtils.getValue(e.style,mxConstants.STYLE_CURVED,null)?k.value="curved":"1"==mxUtils.getValue(e.style,mxConstants.STYLE_ROUNDED,
-null)&&(k.value="rounded");"1"==mxUtils.getValue(e.style,mxConstants.STYLE_DASHED,null)?null==mxUtils.getValue(e.style,mxConstants.STYLE_DASH_PATTERN,null)?E.style.borderBottom="1px dashed black":E.style.borderBottom="1px dotted black":E.style.borderBottom="1px solid black";D.style.borderBottom=E.style.borderBottom;a=z.getElementsByTagName("div")[0];c=mxUtils.getValue(e.style,mxConstants.STYLE_EDGE,null);"1"==mxUtils.getValue(e.style,mxConstants.STYLE_NOEDGESTYLE,null)&&(c=null);"orthogonalEdgeStyle"==
-c&&"1"==mxUtils.getValue(e.style,mxConstants.STYLE_CURVED,null)?a.className="geSprite geSprite-curved":a.className="straight"==c||"none"==c||null==c?"geSprite geSprite-straight":"entityRelationEdgeStyle"==c?"geSprite geSprite-entity":"elbowEdgeStyle"==c?"geSprite "+("vertical"==mxUtils.getValue(e.style,mxConstants.STYLE_ELBOW,null)?"geSprite-verticalelbow":"geSprite-horizontalelbow"):"isometricEdgeStyle"==c?"geSprite "+("vertical"==mxUtils.getValue(e.style,mxConstants.STYLE_ELBOW,null)?"geSprite-verticalisometric":
-"geSprite-horizontalisometric"):"geSprite geSprite-orthogonal";v.getElementsByTagName("div")[0].className="link"==e.style.shape?"geSprite geSprite-linkedge":"flexArrow"==e.style.shape?"geSprite geSprite-arrow":"arrow"==e.style.shape?"geSprite geSprite-simplearrow":"geSprite geSprite-connection";e.edges.length==b.getSelectionCount()?(t.style.display="",q.style.display="none"):(t.style.display="none",q.style.display="");a=g(mxUtils.getValue(e.style,mxConstants.STYLE_STARTARROW,null),mxUtils.getValue(e.style,
-"startFill","1"),C,"start");c=g(mxUtils.getValue(e.style,mxConstants.STYLE_ENDARROW,null),mxUtils.getValue(e.style,"endFill","1"),H,"end");"arrow"==e.style.shape?(a.className="geSprite geSprite-noarrow",c.className="geSprite geSprite-endblocktrans"):"link"==e.style.shape&&(a.className="geSprite geSprite-noarrow",c.className="geSprite geSprite-noarrow");mxUtils.setOpacity(z,"arrow"==e.style.shape?30:100);"connector"!=e.style.shape&&"flexArrow"!=e.style.shape?(mxUtils.setOpacity(C,30),mxUtils.setOpacity(H,
-30)):(mxUtils.setOpacity(C,100),mxUtils.setOpacity(H,100));if(f||document.activeElement!=V)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE)),V.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=R)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_SOURCE_PERIMETER_SPACING,0)),R.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=K)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE)),K.value=isNaN(a)?
-"":a+" pt";if(f||document.activeElement!=R)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_TARGET_PERIMETER_SPACING,0)),J.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=F)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_PERIMETER_SPACING,0)),F.value=isNaN(a)?"":a+" pt"});N=this.installInputHandler(V,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE,0,999," pt");L=this.installInputHandler(R,mxConstants.STYLE_SOURCE_PERIMETER_SPACING,0,-999,999," pt");I=this.installInputHandler(K,
-mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE,0,999," pt");G=this.installInputHandler(J,mxConstants.STYLE_TARGET_PERIMETER_SPACING,0,-999,999," pt");O=this.installInputHandler(F,mxConstants.STYLE_PERIMETER_SPACING,0,0,999," pt");this.addKeyHandler(y,W);this.addKeyHandler(V,W);this.addKeyHandler(R,W);this.addKeyHandler(K,W);this.addKeyHandler(J,W);this.addKeyHandler(F,W);b.getModel().addListener(mxEvent.CHANGE,W);this.listeners.push({destroy:function(){b.getModel().removeListener(W)}});
-W();return a};
+mxResources.get("linestart"),!1,mxUtils.bind(this,function(b){if("connector"==e.style.shape||"flexArrow"==e.style.shape){var a=this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.NONE,0],"geIcon",null,!1);a.setAttribute("title",mxResources.get("none"));a.firstChild.firstChild.innerHTML='<font style="font-size:10px;">'+mxUtils.htmlEntities(mxResources.get("none"))+"</font>";"connector"==e.style.shape?(this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,
+"startFill"],[mxConstants.ARROW_CLASSIC,1],"geIcon geSprite geSprite-startclassic",null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC_THIN,1],"geIcon geSprite geSprite-startclassicthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OPEN,0],"geIcon geSprite geSprite-startopen",null,!1).setAttribute("title",mxResources.get("openArrow")),
+this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OPEN_THIN,0],"geIcon geSprite geSprite-startopenthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["openAsync",0],"geIcon geSprite geSprite-startopenasync",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK,1],"geIcon geSprite geSprite-startblock",null,!1).setAttribute("title",mxResources.get("block")),
+this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK_THIN,1],"geIcon geSprite geSprite-startblockthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["async",1],"geIcon geSprite geSprite-startasync",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OVAL,1],"geIcon geSprite geSprite-startoval",null,!1).setAttribute("title",mxResources.get("oval")),
+this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND,1],"geIcon geSprite geSprite-startdiamond",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND_THIN,1],"geIcon geSprite geSprite-startthindiamond",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,
+"startFill"],[mxConstants.ARROW_CLASSIC,0],"geIcon geSprite geSprite-startclassictrans",null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_CLASSIC_THIN,0],"geIcon geSprite geSprite-startclassicthintrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK,0],"geIcon geSprite geSprite-startblocktrans",null,!1).setAttribute("title",
+mxResources.get("block")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_BLOCK_THIN,0],"geIcon geSprite geSprite-startblockthintrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["async",0],"geIcon geSprite geSprite-startasynctrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_OVAL,0],"geIcon geSprite geSprite-startovaltrans",null,
+!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND,0],"geIcon geSprite geSprite-startdiamondtrans",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],[mxConstants.ARROW_DIAMOND_THIN,0],"geIcon geSprite geSprite-startthindiamondtrans",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(b,
+"",[mxConstants.STYLE_STARTARROW,"startFill"],["dash",0],"geIcon geSprite geSprite-startdash",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["cross",0],"geIcon geSprite geSprite-startcross",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["circlePlus",0],"geIcon geSprite geSprite-startcircleplus",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["circle",1],"geIcon geSprite geSprite-startcircle",
+null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERone",0],"geIcon geSprite geSprite-starterone",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERmandOne",0],"geIcon geSprite geSprite-starteronetoone",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERmany",0],"geIcon geSprite geSprite-startermany",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,
+"startFill"],["ERoneToMany",0],"geIcon geSprite geSprite-starteronetomany",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERzeroToOne",1],"geIcon geSprite geSprite-starteroneopt",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW,"startFill"],["ERzeroToMany",1],"geIcon geSprite geSprite-startermanyopt",null,!1)):this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_STARTARROW],[mxConstants.ARROW_BLOCK],"geIcon geSprite geSprite-startblocktrans",
+null,!1).setAttribute("title",mxResources.get("block"))}})),H=this.editorUi.toolbar.addMenuFunctionInContainer(l,"geSprite-endclassic",mxResources.get("lineend"),!1,mxUtils.bind(this,function(b){if("connector"==e.style.shape||"flexArrow"==e.style.shape){var a=this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.NONE,0],"geIcon",null,!1);a.setAttribute("title",mxResources.get("none"));a.firstChild.firstChild.innerHTML='<font style="font-size:10px;">'+mxUtils.htmlEntities(mxResources.get("none"))+
+"</font>";"connector"==e.style.shape?(this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC,1],"geIcon geSprite geSprite-endclassic",null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC_THIN,1],"geIcon geSprite geSprite-endclassicthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OPEN,
+0],"geIcon geSprite geSprite-endopen",null,!1).setAttribute("title",mxResources.get("openArrow")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OPEN_THIN,0],"geIcon geSprite geSprite-endopenthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["openAsync",0],"geIcon geSprite geSprite-endopenasync",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK,
+1],"geIcon geSprite geSprite-endblock",null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK_THIN,1],"geIcon geSprite geSprite-endblockthin",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["async",1],"geIcon geSprite geSprite-endasync",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OVAL,1],
+"geIcon geSprite geSprite-endoval",null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND,1],"geIcon geSprite geSprite-enddiamond",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND_THIN,1],"geIcon geSprite geSprite-endthindiamond",null,!1).setAttribute("title",mxResources.get("diamondThin")),
+this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC,0],"geIcon geSprite geSprite-endclassictrans",null,!1).setAttribute("title",mxResources.get("classic")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_CLASSIC_THIN,0],"geIcon geSprite geSprite-endclassicthintrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK,0],"geIcon geSprite geSprite-endblocktrans",
+null,!1).setAttribute("title",mxResources.get("block")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_BLOCK_THIN,0],"geIcon geSprite geSprite-endblockthintrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["async",0],"geIcon geSprite geSprite-endasynctrans",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_OVAL,0],"geIcon geSprite geSprite-endovaltrans",
+null,!1).setAttribute("title",mxResources.get("oval")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND,0],"geIcon geSprite geSprite-enddiamondtrans",null,!1).setAttribute("title",mxResources.get("diamond")),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],[mxConstants.ARROW_DIAMOND_THIN,0],"geIcon geSprite geSprite-endthindiamondtrans",null,!1).setAttribute("title",mxResources.get("diamondThin")),this.editorUi.menus.edgeStyleChange(b,
+"",[mxConstants.STYLE_ENDARROW,"endFill"],["dash",0],"geIcon geSprite geSprite-enddash",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["cross",0],"geIcon geSprite geSprite-endcross",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["circlePlus",0],"geIcon geSprite geSprite-endcircleplus",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["circle",1],"geIcon geSprite geSprite-endcircle",
+null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERone",0],"geIcon geSprite geSprite-enderone",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERmandOne",0],"geIcon geSprite geSprite-enderonetoone",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERmany",0],"geIcon geSprite geSprite-endermany",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],
+["ERoneToMany",0],"geIcon geSprite geSprite-enderonetomany",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERzeroToOne",1],"geIcon geSprite geSprite-enderoneopt",null,!1),this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW,"endFill"],["ERzeroToMany",1],"geIcon geSprite geSprite-endermanyopt",null,!1)):this.editorUi.menus.edgeStyleChange(b,"",[mxConstants.STYLE_ENDARROW],[mxConstants.ARROW_BLOCK],"geIcon geSprite geSprite-endblocktrans",
+null,!1).setAttribute("title",mxResources.get("block"))}}));this.addArrow(v,8);this.addArrow(z);this.addArrow(C);this.addArrow(H);A=this.addArrow(m,9);A.className="geIcon";A.style.width="84px";B=this.addArrow(n,9);B.className="geIcon";B.style.width="22px";var E=document.createElement("div");E.style.width="85px";E.style.height="1px";E.style.borderBottom="1px solid black";E.style.marginBottom="9px";A.appendChild(E);var D=document.createElement("div");D.style.width="23px";D.style.height="1px";D.style.borderBottom=
+"1px solid black";D.style.marginBottom="9px";B.appendChild(D);m.style.height="15px";n.style.height="15px";v.style.height="15px";z.style.height="17px";C.style.marginLeft="3px";C.style.height="17px";H.style.marginLeft="3px";H.style.height="17px";a.appendChild(g);a.appendChild(t);a.appendChild(q);m=q.cloneNode(!1);m.style.paddingBottom="6px";m.style.paddingTop="4px";m.style.fontWeight="normal";n=document.createElement("div");n.style.position="absolute";n.style.marginLeft="3px";n.style.marginBottom="12px";
+n.style.marginTop="2px";n.style.fontWeight="normal";n.style.width="76px";mxUtils.write(n,mxResources.get("lineend"));m.appendChild(n);var G,I,J=this.addUnitInput(m,"pt",74,33,function(){G.apply(this,arguments)}),K=this.addUnitInput(m,"pt",20,33,function(){I.apply(this,arguments)});mxUtils.br(m);A=document.createElement("div");A.style.height="8px";m.appendChild(A);n=n.cloneNode(!1);mxUtils.write(n,mxResources.get("linestart"));m.appendChild(n);var L,N,R=this.addUnitInput(m,"pt",74,33,function(){L.apply(this,
+arguments)}),V=this.addUnitInput(m,"pt",20,33,function(){N.apply(this,arguments)});mxUtils.br(m);this.addLabel(m,mxResources.get("spacing"),74,50);this.addLabel(m,mxResources.get("size"),20,50);mxUtils.br(m);g=g.cloneNode(!1);g.style.fontWeight="normal";g.style.position="relative";g.style.paddingLeft="16px";g.style.marginBottom="2px";g.style.marginTop="6px";g.style.borderWidth="0px";g.style.paddingBottom="18px";n=document.createElement("div");n.style.position="absolute";n.style.marginLeft="3px";n.style.marginBottom=
+"12px";n.style.marginTop="1px";n.style.fontWeight="normal";n.style.width="120px";mxUtils.write(n,mxResources.get("perimeter"));g.appendChild(n);var O,F=this.addUnitInput(g,"pt",20,41,function(){O.apply(this,arguments)});e.edges.length==b.getSelectionCount()?(a.appendChild(l),mxClient.IS_QUIRKS&&(mxUtils.br(a),mxUtils.br(a)),a.appendChild(m)):e.vertices.length==b.getSelectionCount()&&(mxClient.IS_QUIRKS&&mxUtils.br(a),a.appendChild(g));var W=mxUtils.bind(this,function(a,c,f){function g(b,a,c,f){c=
+c.getElementsByTagName("div")[0];c.className=d.getCssClassForMarker(f,e.style.shape,b,a);"geSprite geSprite-noarrow"==c.className&&(c.innerHTML=mxUtils.htmlEntities(mxResources.get("none")),c.style.backgroundImage="none",c.style.verticalAlign="top",c.style.marginTop="5px",c.style.fontSize="10px",c.nextSibling.style.marginTop="0px");return c}e=this.format.getSelectionState();mxUtils.getValue(e.style,p,null);if(f||document.activeElement!=y)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_STROKEWIDTH,
+1)),y.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=x)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_STROKEWIDTH,1)),x.value=isNaN(a)?"":a+" pt";k.style.visibility="connector"==e.style.shape?"":"hidden";"1"==mxUtils.getValue(e.style,mxConstants.STYLE_CURVED,null)?k.value="curved":"1"==mxUtils.getValue(e.style,mxConstants.STYLE_ROUNDED,null)&&(k.value="rounded");"1"==mxUtils.getValue(e.style,mxConstants.STYLE_DASHED,null)?null==mxUtils.getValue(e.style,mxConstants.STYLE_DASH_PATTERN,
+null)?E.style.borderBottom="1px dashed black":E.style.borderBottom="1px dotted black":E.style.borderBottom="1px solid black";D.style.borderBottom=E.style.borderBottom;a=z.getElementsByTagName("div")[0];c=mxUtils.getValue(e.style,mxConstants.STYLE_EDGE,null);"1"==mxUtils.getValue(e.style,mxConstants.STYLE_NOEDGESTYLE,null)&&(c=null);"orthogonalEdgeStyle"==c&&"1"==mxUtils.getValue(e.style,mxConstants.STYLE_CURVED,null)?a.className="geSprite geSprite-curved":a.className="straight"==c||"none"==c||null==
+c?"geSprite geSprite-straight":"entityRelationEdgeStyle"==c?"geSprite geSprite-entity":"elbowEdgeStyle"==c?"geSprite "+("vertical"==mxUtils.getValue(e.style,mxConstants.STYLE_ELBOW,null)?"geSprite-verticalelbow":"geSprite-horizontalelbow"):"isometricEdgeStyle"==c?"geSprite "+("vertical"==mxUtils.getValue(e.style,mxConstants.STYLE_ELBOW,null)?"geSprite-verticalisometric":"geSprite-horizontalisometric"):"geSprite geSprite-orthogonal";v.getElementsByTagName("div")[0].className="link"==e.style.shape?
+"geSprite geSprite-linkedge":"flexArrow"==e.style.shape?"geSprite geSprite-arrow":"arrow"==e.style.shape?"geSprite geSprite-simplearrow":"geSprite geSprite-connection";e.edges.length==b.getSelectionCount()?(t.style.display="",q.style.display="none"):(t.style.display="none",q.style.display="");a=g(mxUtils.getValue(e.style,mxConstants.STYLE_STARTARROW,null),mxUtils.getValue(e.style,"startFill","1"),C,"start");c=g(mxUtils.getValue(e.style,mxConstants.STYLE_ENDARROW,null),mxUtils.getValue(e.style,"endFill",
+"1"),H,"end");"arrow"==e.style.shape?(a.className="geSprite geSprite-noarrow",c.className="geSprite geSprite-endblocktrans"):"link"==e.style.shape&&(a.className="geSprite geSprite-noarrow",c.className="geSprite geSprite-noarrow");mxUtils.setOpacity(z,"arrow"==e.style.shape?30:100);"connector"!=e.style.shape&&"flexArrow"!=e.style.shape?(mxUtils.setOpacity(C,30),mxUtils.setOpacity(H,30)):(mxUtils.setOpacity(C,100),mxUtils.setOpacity(H,100));if(f||document.activeElement!=V)a=parseInt(mxUtils.getValue(e.style,
+mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE)),V.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=R)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_SOURCE_PERIMETER_SPACING,0)),R.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=K)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE)),K.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=R)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_TARGET_PERIMETER_SPACING,0)),
+J.value=isNaN(a)?"":a+" pt";if(f||document.activeElement!=F)a=parseInt(mxUtils.getValue(e.style,mxConstants.STYLE_PERIMETER_SPACING,0)),F.value=isNaN(a)?"":a+" pt"});N=this.installInputHandler(V,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE,0,999," pt");L=this.installInputHandler(R,mxConstants.STYLE_SOURCE_PERIMETER_SPACING,0,-999,999," pt");I=this.installInputHandler(K,mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE,0,999," pt");G=this.installInputHandler(J,mxConstants.STYLE_TARGET_PERIMETER_SPACING,
+0,-999,999," pt");O=this.installInputHandler(F,mxConstants.STYLE_PERIMETER_SPACING,0,0,999," pt");this.addKeyHandler(y,W);this.addKeyHandler(V,W);this.addKeyHandler(R,W);this.addKeyHandler(K,W);this.addKeyHandler(J,W);this.addKeyHandler(F,W);b.getModel().addListener(mxEvent.CHANGE,W);this.listeners.push({destroy:function(){b.getModel().removeListener(W)}});W();return a};
StyleFormatPanel.prototype.addEffects=function(a){var c=this.editorUi.editor.graph,f=this.format.getSelectionState();a.style.paddingTop="0px";a.style.paddingBottom="2px";var d=document.createElement("table");mxClient.IS_QUIRKS&&(d.style.fontSize="1em");d.style.width="100%";d.style.fontWeight="bold";d.style.paddingRight="20px";var b=document.createElement("tbody"),e=document.createElement("tr");e.style.padding="0px";var g=document.createElement("td");g.style.padding="0px";g.style.width="50%";g.setAttribute("valign",
"top");var k=g.cloneNode(!0);k.style.paddingLeft="8px";e.appendChild(g);e.appendChild(k);b.appendChild(e);d.appendChild(b);a.appendChild(d);var l=g,m=0,n=mxUtils.bind(this,function(b,a,d){b=this.createCellOption(b,a,d);b.style.width="100%";l.appendChild(b);l=l==g?k:g;m++}),p=mxUtils.bind(this,function(b,d,e){f=this.format.getSelectionState();g.innerHTML="";k.innerHTML="";l=g;f.rounded&&n(mxResources.get("rounded"),mxConstants.STYLE_ROUNDED,0);"swimlane"==f.style.shape&&n(mxResources.get("divider"),
"swimlaneLine",1);f.containsImage||n(mxResources.get("shadow"),mxConstants.STYLE_SHADOW,0);f.glass&&n(mxResources.get("glass"),mxConstants.STYLE_GLASS,0);f.comic&&n(mxResources.get("comic"),"comic",0);0==m&&(a.style.display="none")});c.getModel().addListener(mxEvent.CHANGE,p);this.listeners.push({destroy:function(){c.getModel().removeListener(p)}});p();return a};
@@ -3147,7 +3147,7 @@ k.selectAll(b)}});k.isEnabled()||(B.className="geButton mxDisabled");v.appendChi
function(b,a){b=Math.max(0,b);a=Math.max(0,a);mxWindow.prototype.setLocation.apply(this,arguments)};mxEvent.addListener(window,"resize",mxUtils.bind(this,function(){var b=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,a=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,d=this.window.getX(),e=this.window.getY();d+this.window.table.clientWidth>b&&(d=Math.max(0,b-this.window.table.clientWidth));e+this.window.table.clientHeight>a&&
(e=Math.max(0,a-this.window.table.clientHeight));this.window.getX()==d&&this.window.getY()==e||this.window.setLocation(d,e)}))};
(function(){Sidebar.prototype.tagIndex="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";Sidebar.prototype.searchFileUrl=
-"search.xml";Sidebar.prototype.gearImage=GRAPH_IMAGE_PATH+"/clipart/Gear_128x128.png";Sidebar.prototype.defaultEntries="general;images;uml;er;bpmn;flowchart;basic;arrows2";Sidebar.prototype.signs="Animals Food Healthcare Nature People Safety Science Sports Tech Transportation Travel".split(" ");Sidebar.prototype.gcp="Big Data;Compute;Developer Tools;Extras;Identity and Security;Machine Learning;Management Tools;Networking;Storage Databases".split(";");Sidebar.prototype.rack="General APC Cisco Dell F5 HP IBM Oracle".split(" ");
+"search.xml";Sidebar.prototype.gearImage=GRAPH_IMAGE_PATH+"/clipart/Gear_128x128.png";Sidebar.prototype.defaultEntries="general;images;uml;er;bpmn;flowchart;basic;arrows2";Sidebar.prototype.signs="Animals Food Healthcare Nature People Safety Science Sports Tech Transportation Travel".split(" ");Sidebar.prototype.gcp="Cards;Big Data;Compute;Developer Tools;Extras;Identity and Security;Machine Learning;Management Tools;Networking;Storage Databases".split(";");Sidebar.prototype.rack="General APC Cisco Dell F5 HP IBM Oracle".split(" ");
Sidebar.prototype.pids="Agitators;Apparatus Elements;Centrifuges;Compressors;Compressors ISO;Crushers Grinding;Driers;Engines;Feeders;Filters;Fittings;Flow Sensors;Heat Exchangers;Instruments;Misc;Mixers;Piping;Pumps;Pumps DIN;Pumps ISO;Separators;Shaping Machines;Valves;Vessels".split(";");Sidebar.prototype.cisco="Buildings;Computers and Peripherals;Controllers and Modules;Directors;Hubs and Gateways;Misc;Modems and Phones;People;Routers;Security;Servers;Storage;Switches;Wireless".split(";");Sidebar.prototype.sysml=
"Model Elements;Blocks;Ports and Flows;Constraint Blocks;Activities;Interactions;State Machines;Use Cases;Allocations;Requirements;Profiles;Stereotypes".split(";");Sidebar.prototype.eip="Message Construction;Message Routing;Message Transformation;Messaging Channels;Messaging Endpoints;Messaging Systems;System Management".split(";");Sidebar.prototype.gmdl="Bottom Navigation;Bottom Sheets;Buttons;Cards;Chips;Dialogs;Dividers;Grid Lists;Icons;Lists;Menus;Misc;Pickers;Selection Controls;Sliders;Steppers;Tabs;Text Fields".split(";");
Sidebar.prototype.aws2="Analytics;Application Services;Compute;Database;Developer Tools;Enterprise Applications;Game Development;General;Internet of Things;Management Tools;Mobile Services;Networking;On-Demand Workforce;SDKs;Security and Identity;Storage and Content Delivery;Groups".split(";");Sidebar.prototype.aws3="Analytics;Application Services;Artificial Intelligence;Business Productivity;Compute;Database;Desktop and App Streaming;Developer Tools;Game Development;General;Groups;Internet of Things;Management Tools;Messaging;Migration;Mobile Services;Networking and Content Delivery;On Demand Workforce;SDKs;Security Identity and Compliance;Storage".split(";");
@@ -3182,19 +3182,19 @@ this.addArrows2Palette();this.addImagePalette("computer","Clipart / Computer",b+
"Bridge;Certificate;Certificate Off;Cloud;Cloud Computer;Cloud Computer Private;Cloud Rack;Cloud Rack Private;Cloud Server;Cloud Server Private;Cloud Storage;Concentrator;Email;Firewall 1;Firewall 2;Firewall;Camera;Modem;Power Distribution Unit;Print Server;Print Server Wireless;Repeater;Router;Router Icon;Switch;UPS;Wireless Router;Wireless Router N".split(";"),{Wireless_Router:"wireless router switch wap wifi access point wlan",Wireless_Router_N:"wireless router switch wap wifi access point wlan",
Router:"router switch",Router_Icon:"router switch"});this.addImagePalette("people","Clipart / People",b+"/lib/clip_art/people/","_128x128.png","Suit_Man Suit_Man_Black Suit_Man_Blue Suit_Man_Green Suit_Man_Green_Black Suit_Woman Suit_Woman_Black Suit_Woman_Blue Suit_Woman_Green Suit_Woman_Green_Black Construction_Worker_Man Construction_Worker_Man_Black Construction_Worker_Woman Construction_Worker_Woman_Black Doctor_Man Doctor_Man_Black Doctor_Woman Doctor_Woman_Black Farmer_Man Farmer_Man_Black Farmer_Woman Farmer_Woman_Black Nurse_Man Nurse_Man_Black Nurse_Man_Green Nurse_Man_Red Nurse_Woman Nurse_Woman_Black Nurse_Woman_Green Nurse_Woman_Red Military_Officer Military_Officer_Black Military_Officer_Woman Military_Officer_Woman_Black Pilot_Man Pilot_Man_Black Pilot_Woman Pilot_Woman_Black Scientist_Man Scientist_Man_Black Scientist_Woman Scientist_Woman_Black Security_Man Security_Man_Black Security_Woman Security_Woman_Black Soldier Soldier_Black Tech_Man Tech_Man_Black Telesales_Man Telesales_Man_Black Telesales_Woman Telesales_Woman_Black Waiter Waiter_Black Waiter_Woman Waiter_Woman_Black Worker_Black Worker_Man Worker_Woman Worker_Woman_Black".split(" "));
this.addImagePalette("telco","Clipart / Telecommunication",b+"/lib/clip_art/telecommunication/","_128x128.png","BlackBerry Cellphone HTC_smartphone iPhone Palm_Treo Signal_tower_off Signal_tower_on".split(" "),"BlackBerry;Cellphone;HTC smartphone;iPhone;Palm Treo;Signaltower off;Signaltower on".split(";"));for(b=0;b<d.length;b++)this.addStencilPalette("signs"+d[b],"Signs / "+d[b],a+"/signs/"+d[b].toLowerCase()+".xml",";html=1;fillColor=#000000;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;");
-for(b=0;b<c.length;b++)this.addStencilPalette("gcp"+c[b],"GCP / "+c[b],a+"/gcp/"+c[b].toLowerCase().replace(/ /g,"_")+".xml",";html=1;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;");for(b=0;b<f.length;b++)"general"===f[b].toLowerCase()?this.addRackGeneralPalette():"f5"===f[b].toLowerCase()?this.addRackF5Palette():this.addStencilPalette("rack"+f[b],"Rack / "+f[b],a+"/rack/"+f[b].toLowerCase()+".xml",";html=1;labelPosition=right;align=left;spacingLeft=15;dashed=0;shadow=0;fillColor=#ffffff;");
-for(b=0;b<n.length;b++)"Instruments"==n[b]?this.addPidInstrumentsPalette():"Misc"==n[b]?this.addPidMiscPalette():"Valves"==n[b]?this.addPidValvesPalette():"Compressors"==n[b]?this.addPidCompressorsPalette():"Engines"==n[b]?this.addPidEnginesPalette():"Filters"==n[b]?this.addPidFiltersPalette():"Flow Sensors"==n[b]?this.addPidFlowSensorsPalette():"Piping"==n[b]?this.addPidPipingPalette():this.addStencilPalette("pid"+n[b],"Proc. Eng. / "+n[b],a+"/pid/"+n[b].toLowerCase().replace(" ","_")+".xml",";html=1;align=center;"+
-mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;dashed=0;");for(b=0;b<q.length;b++)"Model Elements"==q[b]?this.addSysMLModelElementsPalette():"Blocks"==q[b]?this.addSysMLBlocksPalette():"Ports and Flows"==q[b]?this.addSysMLPortsAndFlowsPalette():"Constraint Blocks"==q[b]?this.addSysMLConstraintBlocksPalette():"Activities"==q[b]?this.addSysMLActivitiesPalette():"Interactions"==q[b]?this.addSysMLInteractionsPalette():"State Machines"==q[b]?this.addSysMLStateMachinesPalette():
-"Use Cases"==q[b]?this.addSysMLUseCasesPalette():"Allocations"==q[b]?this.addSysMLAllocationsPalette():"Requirements"==q[b]?this.addSysMLRequirementsPalette():"Profiles"==q[b]?this.addSysMLProfilesPalette():"Stereotypes"==q[b]&&this.addSysMLStereotypesPalette();for(b=0;b<u.length;b++)"Message Construction"==u[b]?this.addEipMessageConstructionPalette():"Message Routing"==u[b]?this.addEipMessageRoutingPalette():"Message Transformation"==u[b]?this.addEipMessageTransformationPalette():"Messaging Channels"==
-u[b]?this.addEipMessagingChannelsPalette():"Messaging Endpoints"==u[b]?this.addEipMessagingEndpointsPalette():"Messaging Systems"==u[b]?this.addEipMessagingSystemsPalette():"System Management"==u[b]&&this.addEipSystemManagementPalette();for(b=0;b<p.length;b++)this.addStencilPalette("cisco"+p[b],"Cisco / "+p[b],a+"/cisco/"+p[b].toLowerCase().replace(/ /g,"_")+".xml",";html=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top",null,null,1.6);
-this.addFloorplanPalette();this.addBootstrapPalette();for(b=0;b<t.length;b++)"Bottom Navigation"==t[b]?this.addGMDLBottomNavigationPalette():"Bottom Sheets"==t[b]?this.addGMDLBottomSheetsPalette():"Buttons"==t[b]?this.addGMDLButtonsPalette():"Cards"==t[b]?this.addGMDLCardsPalette():"Chips"==t[b]?this.addGMDLChipsPalette():"Dialogs"==t[b]?this.addGMDLDialogsPalette():"Dividers"==t[b]?this.addGMDLDividersPalette():"Grid Lists"==t[b]?this.addGMDLGridListsPalette():"Icons"==t[b]?this.addGMDLIconsPalette():
-"Lists"==t[b]?this.addGMDLListsPalette():"Menus"==t[b]?this.addGMDLMenusPalette():"Misc"==t[b]?this.addGMDLMiscPalette():"Pickers"==t[b]?this.addGMDLPickersPalette():"Selection Controls"==t[b]?this.addGMDLSelectionControlsPalette():"Sliders"==t[b]?this.addGMDLSlidersPalette():"Steppers"==t[b]?this.addGMDLSteppersPalette():"Tabs"==t[b]?this.addGMDLTabsPalette():"Text Fields"==t[b]&&this.addGMDLTextFieldsPalette();this.addCabinetsPalette();this.addArchimate3Palette();this.addArchiMatePalette();this.addWebIconsPalette();
-this.addWebLogosPalette();this.showEntries()};if("1"==urlParams.createindex){var f=Sidebar.prototype.addStencilPalette;Sidebar.prototype.addStencilPalette=function(b,a,d,c,m,n,p,q){f.apply(this,arguments);p=null!=p?p:1;mxStencilRegistry.loadStencilSet(d,mxUtils.bind(this,function(b,a,d,e,f){if(null==m||0>mxUtils.indexOf(m,a))d=null!=q?q[a]:null,mxLog.debug('<shape style="shape='+b+a+c+'" w="'+Math.round(e*p)+'" h="'+Math.round(f*p)+'"'+(null!=d?' tags="'+d+'"':"")+"/>")}),!0)}}var d=Sidebar.prototype.searchEntries;
-Sidebar.prototype.searchEntries=function(b,a,c,f,m){var e=f;if(this.editorUi.enableLogging&&!this.editorUi.isOffline()&&0==c)try{(new Image).src=(null!=window.DRAWIO_LOG_URL?window.DRAWIO_LOG_URL:"")+"/log?severity=CONFIG&msg=shapesearch:"+encodeURIComponent(b)+"&v="+encodeURIComponent(EditorUi.VERSION)}catch(p){}f=mxUtils.bind(this,function(d,f,k,g){!this.editorUi.isOffline()&&d.length<=a/4?(k=c-Math.ceil((f-a/4)/a),mxUtils.get(ICONSEARCH_PATH+"?v=2&q="+encodeURIComponent(b)+"&p="+k+"&c="+a,mxUtils.bind(this,
-function(b){try{if(200<=b.getStatus()&&299>=b.getStatus()){var k=JSON.parse(b.getText());for(b=0;b<k.icons.length;b++){for(var l=k.icons[b].raster_sizes,m=l.length-1;0<m&&128<l[m].size;)m--;var n=l[m].size,p=l[m].formats[0].preview_url;null!=n&&null!=p&&mxUtils.bind(this,function(b,a){d.push(mxUtils.bind(this,function(){return this.createVertexTemplate("shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image="+a,b,b,"")}))})(n,
-p)}e(d,(c-1)*a+d.length,k.icons.length==a,g)}else e(d,f,!1,g),this.editorUi.handleError({message:mxResources.get("unknownError")})}catch(C){e(d,f,!1,g),this.editorUi.handleError(C)}},function(){e(d,f,!1,g)}))):e(d,f,k||!this.editorUi.isOffline(),g)});d.apply(this,arguments)};var b=Sidebar.prototype.itemClicked;Sidebar.prototype.itemClicked=function(a,d,c){var e=this.editorUi.editor.graph,f=!1;if(null!=a&&1==e.getSelectionCount()&&e.getModel().isVertex(a[0])){var k=e.cloneCells(a)[0];if(e.getModel().isEdge(e.getSelectionCell())&&
-null==e.getModel().getTerminal(e.getSelectionCell(),!1)&&e.getModel().isVertex(k)){e.getModel().beginUpdate();try{var g=e.view.getState(e.getSelectionCell());if(null!=g){var q=e.view.translate,u=e.view.scale,t=g.absolutePoints[g.absolutePoints.length-1];k.geometry.x=t.x/u-q.x-k.geometry.width/2;k.geometry.y=t.y/u-q.y-k.geometry.height/2}e.addCell(k);e.getModel().setTerminal(e.getSelectionCell(),k,!1)}finally{e.getModel().endUpdate()}e.scrollCellToVisible(k);e.setSelectionCell(k);f=!0}}f||b.apply(this,
-arguments)}})();
+for(b=0;b<c.length;b++)"cards"===c[b].toLowerCase()?this.addGoogleCloudPlatformCardsPalette():this.addStencilPalette("gcp"+c[b],"GCP / "+c[b],a+"/gcp/"+c[b].toLowerCase().replace(/ /g,"_")+".xml",";html=1;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;");for(b=0;b<f.length;b++)"general"===f[b].toLowerCase()?this.addRackGeneralPalette():"f5"===f[b].toLowerCase()?this.addRackF5Palette():this.addStencilPalette("rack"+f[b],"Rack / "+
+f[b],a+"/rack/"+f[b].toLowerCase()+".xml",";html=1;labelPosition=right;align=left;spacingLeft=15;dashed=0;shadow=0;fillColor=#ffffff;");for(b=0;b<n.length;b++)"Instruments"==n[b]?this.addPidInstrumentsPalette():"Misc"==n[b]?this.addPidMiscPalette():"Valves"==n[b]?this.addPidValvesPalette():"Compressors"==n[b]?this.addPidCompressorsPalette():"Engines"==n[b]?this.addPidEnginesPalette():"Filters"==n[b]?this.addPidFiltersPalette():"Flow Sensors"==n[b]?this.addPidFlowSensorsPalette():"Piping"==n[b]?this.addPidPipingPalette():
+this.addStencilPalette("pid"+n[b],"Proc. Eng. / "+n[b],a+"/pid/"+n[b].toLowerCase().replace(" ","_")+".xml",";html=1;align=center;"+mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;dashed=0;");for(b=0;b<q.length;b++)"Model Elements"==q[b]?this.addSysMLModelElementsPalette():"Blocks"==q[b]?this.addSysMLBlocksPalette():"Ports and Flows"==q[b]?this.addSysMLPortsAndFlowsPalette():"Constraint Blocks"==q[b]?this.addSysMLConstraintBlocksPalette():"Activities"==
+q[b]?this.addSysMLActivitiesPalette():"Interactions"==q[b]?this.addSysMLInteractionsPalette():"State Machines"==q[b]?this.addSysMLStateMachinesPalette():"Use Cases"==q[b]?this.addSysMLUseCasesPalette():"Allocations"==q[b]?this.addSysMLAllocationsPalette():"Requirements"==q[b]?this.addSysMLRequirementsPalette():"Profiles"==q[b]?this.addSysMLProfilesPalette():"Stereotypes"==q[b]&&this.addSysMLStereotypesPalette();for(b=0;b<u.length;b++)"Message Construction"==u[b]?this.addEipMessageConstructionPalette():
+"Message Routing"==u[b]?this.addEipMessageRoutingPalette():"Message Transformation"==u[b]?this.addEipMessageTransformationPalette():"Messaging Channels"==u[b]?this.addEipMessagingChannelsPalette():"Messaging Endpoints"==u[b]?this.addEipMessagingEndpointsPalette():"Messaging Systems"==u[b]?this.addEipMessagingSystemsPalette():"System Management"==u[b]&&this.addEipSystemManagementPalette();for(b=0;b<p.length;b++)this.addStencilPalette("cisco"+p[b],"Cisco / "+p[b],a+"/cisco/"+p[b].toLowerCase().replace(/ /g,
+"_")+".xml",";html=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top",null,null,1.6);this.addFloorplanPalette();this.addBootstrapPalette();for(b=0;b<t.length;b++)"Bottom Navigation"==t[b]?this.addGMDLBottomNavigationPalette():"Bottom Sheets"==t[b]?this.addGMDLBottomSheetsPalette():"Buttons"==t[b]?this.addGMDLButtonsPalette():"Cards"==t[b]?this.addGMDLCardsPalette():"Chips"==t[b]?this.addGMDLChipsPalette():"Dialogs"==t[b]?this.addGMDLDialogsPalette():
+"Dividers"==t[b]?this.addGMDLDividersPalette():"Grid Lists"==t[b]?this.addGMDLGridListsPalette():"Icons"==t[b]?this.addGMDLIconsPalette():"Lists"==t[b]?this.addGMDLListsPalette():"Menus"==t[b]?this.addGMDLMenusPalette():"Misc"==t[b]?this.addGMDLMiscPalette():"Pickers"==t[b]?this.addGMDLPickersPalette():"Selection Controls"==t[b]?this.addGMDLSelectionControlsPalette():"Sliders"==t[b]?this.addGMDLSlidersPalette():"Steppers"==t[b]?this.addGMDLSteppersPalette():"Tabs"==t[b]?this.addGMDLTabsPalette():
+"Text Fields"==t[b]&&this.addGMDLTextFieldsPalette();this.addCabinetsPalette();this.addArchimate3Palette();this.addArchiMatePalette();this.addWebIconsPalette();this.addWebLogosPalette();this.showEntries()};if("1"==urlParams.createindex){var f=Sidebar.prototype.addStencilPalette;Sidebar.prototype.addStencilPalette=function(b,a,d,c,m,n,p,q){f.apply(this,arguments);p=null!=p?p:1;mxStencilRegistry.loadStencilSet(d,mxUtils.bind(this,function(b,a,d,e,f){if(null==m||0>mxUtils.indexOf(m,a))d=null!=q?q[a]:
+null,mxLog.debug('<shape style="shape='+b+a+c+'" w="'+Math.round(e*p)+'" h="'+Math.round(f*p)+'"'+(null!=d?' tags="'+d+'"':"")+"/>")}),!0)}}var d=Sidebar.prototype.searchEntries;Sidebar.prototype.searchEntries=function(b,a,c,f,m){var e=f;if(this.editorUi.enableLogging&&!this.editorUi.isOffline()&&0==c)try{(new Image).src=(null!=window.DRAWIO_LOG_URL?window.DRAWIO_LOG_URL:"")+"/log?severity=CONFIG&msg=shapesearch:"+encodeURIComponent(b)+"&v="+encodeURIComponent(EditorUi.VERSION)}catch(p){}f=mxUtils.bind(this,
+function(d,f,k,g){!this.editorUi.isOffline()&&d.length<=a/4?(k=c-Math.ceil((f-a/4)/a),mxUtils.get(ICONSEARCH_PATH+"?v=2&q="+encodeURIComponent(b)+"&p="+k+"&c="+a,mxUtils.bind(this,function(b){try{if(200<=b.getStatus()&&299>=b.getStatus()){var k=JSON.parse(b.getText());for(b=0;b<k.icons.length;b++){for(var l=k.icons[b].raster_sizes,m=l.length-1;0<m&&128<l[m].size;)m--;var n=l[m].size,p=l[m].formats[0].preview_url;null!=n&&null!=p&&mxUtils.bind(this,function(b,a){d.push(mxUtils.bind(this,function(){return this.createVertexTemplate("shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image="+
+a,b,b,"")}))})(n,p)}e(d,(c-1)*a+d.length,k.icons.length==a,g)}else e(d,f,!1,g),this.editorUi.handleError({message:mxResources.get("unknownError")})}catch(C){e(d,f,!1,g),this.editorUi.handleError(C)}},function(){e(d,f,!1,g)}))):e(d,f,k||!this.editorUi.isOffline(),g)});d.apply(this,arguments)};var b=Sidebar.prototype.itemClicked;Sidebar.prototype.itemClicked=function(a,d,c){var e=this.editorUi.editor.graph,f=!1;if(null!=a&&1==e.getSelectionCount()&&e.getModel().isVertex(a[0])){var k=e.cloneCells(a)[0];
+if(e.getModel().isEdge(e.getSelectionCell())&&null==e.getModel().getTerminal(e.getSelectionCell(),!1)&&e.getModel().isVertex(k)){e.getModel().beginUpdate();try{var g=e.view.getState(e.getSelectionCell());if(null!=g){var q=e.view.translate,u=e.view.scale,t=g.absolutePoints[g.absolutePoints.length-1];k.geometry.x=t.x/u-q.x-k.geometry.width/2;k.geometry.y=t.y/u-q.y-k.geometry.height/2}e.addCell(k);e.getModel().setTerminal(e.getSelectionCell(),k,!1)}finally{e.getModel().endUpdate()}e.scrollCellToVisible(k);
+e.setSelectionCell(k);f=!0}}f||b.apply(this,arguments)}})();
(function(){var a=Sidebar.prototype.createAdvancedShapes;Sidebar.prototype.createAdvancedShapes=function(){var c=a.apply(this,arguments),f=this,d=new mxCell("Vertical Flow Layout",new mxGeometry(0,0,270,280),"swimlane;html=1;startSize=20;horizontal=1;childLayout=flowLayout;flowOrientation=north;resizable=0;interRankCellSpacing=50;");d.vertex=!0;var b=new mxCell("Start",new mxGeometry(20,20,100,40),"whiteSpace=wrap;html=1;");b.vertex=!0;d.insert(b);var e=new mxCell("Task",new mxGeometry(20,20,100,
40),"whiteSpace=wrap;html=1;");e.vertex=!0;d.insert(e);var g=new mxCell("",new mxGeometry(0,0,0,0),"html=1;curved=1;");g.geometry.relative=!0;g.edge=!0;b.insertEdge(g,!0);e.insertEdge(g,!1);d.insert(g);var k=new mxCell("Task",new mxGeometry(20,20,100,40),"whiteSpace=wrap;html=1;");k.vertex=!0;d.insert(k);g=g.clone();b.insertEdge(g,!0);k.insertEdge(g,!1);d.insert(g);b=new mxCell("End",new mxGeometry(20,20,100,40),"whiteSpace=wrap;html=1;");b.vertex=!0;d.insert(b);g=g.clone();e.insertEdge(g,!0);b.insertEdge(g,
!1);d.insert(g);g=g.clone();k.insertEdge(g,!0);b.insertEdge(g,!1);d.insert(g);return c.concat([this.addEntry("container swimlane pool horizontal",function(){var b=new mxCell("Pool",new mxGeometry(0,0,480,380),"swimlane;html=1;childLayout=stackLayout;horizontal=1;startSize=20;horizontalStack=0;");b.vertex=!0;var a=new mxCell("Lane 1",new mxGeometry(0,20,480,120),"swimlane;html=1;startSize=20;horizontal=0;");a.vertex=!0;b.insert(a);a=new mxCell("Lane 2",new mxGeometry(0,140,480,120),"swimlane;html=1;startSize=20;horizontal=0;");
@@ -4598,43 +4598,60 @@ this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.doc
null,null,this.getTagsForStencil("mxgraph.flowchart","start_1","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.start_2;whiteSpace=wrap;",100,100,"","Start",null,null,this.getTagsForStencil("mxgraph.flowchart","start_2","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.stored_data;whiteSpace=wrap;",100,60,"","Stored Data",null,null,this.getTagsForStencil("mxgraph.flowchart","stored_data","").join(" ")),this.createVertexTemplateEntry(a+
"or;",70,70,"","Summing Junction",null,null,this.getTagsForStencil("mxgraph.flowchart","or","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.terminator;whiteSpace=wrap;",100,60,"","Terminator",null,null,this.getTagsForStencil("mxgraph.flowchart","terminator","").join(" ")),this.createVertexTemplateEntry(mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;html=1;strokeWidth=2;shape=mxgraph.arrows2.arrow;dy=0.6;dx=40;notch=0;",
100,70,"","Transfer",null,null,this.getTagsForStencil("mxgraph.flowchart","transfer","").join(" "))])}})();
-(function(){Sidebar.prototype.addGMDLBottomNavigationPalette=function(a){var c=this,f=[this.addEntry("gmdl google media design library bottom navigation bottom navigation",function(){var a=new mxCell("",new mxGeometry(0,0,358,48),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;shadow=0;");a.vertex=!0;var b=new mxCell("Recents",new mxGeometry(.15,.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.recents;fillColor=#808080;strokeColor=none;fontColor=#808080;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;");b.geometry.relative=
-!0;b.geometry.offset=new mxPoint(-10,-15);b.vertex=!0;a.insert(b);b=new mxCell("Favorites",new mxGeometry(.5,.5,20,18),"dashed=0;html=1;shape=mxgraph.gmdl.heart;fillColor=#00796B;strokeColor=none;fontColor=#00796B;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-5;");b.geometry.offset=new mxPoint(-10,-14);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("Nearby",new mxGeometry(.85,.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.nearby;fillColor=#808080;strokeColor=none;fontColor=#808080;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;");
-b.geometry.offset=new mxPoint(-10,-15);b.geometry.relative=!0;b.vertex=!0;a.insert(b);return c.createVertexTemplateFromCells([a],a.geometry.width,a.geometry.height,"Bottom Navigation")}),this.addEntry("gmdl google media design library bottom navigation dropdown menu",function(){var a=new mxCell("",new mxGeometry(0,0,358,48),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#00796B;strokeColor=none;shadow=0;");a.vertex=!0;var b=new mxCell("",new mxGeometry(.15,.5,20,16),"dashed=0;html=1;shape=mxgraph.gmdl.video_2;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(-10,-8);b.vertex=!0;a.insert(b);b=new mxCell("Music",new mxGeometry(.38,.5,14,20),"dashed=0;html=1;shape=mxgraph.gmdl.music;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-5;");b.geometry.offset=new mxPoint(-10,-14);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("",new mxGeometry(.62,.5,16,20),
-"dashed=0;html=1;shape=mxgraph.gmdl.book;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");b.geometry.offset=new mxPoint(-8,-10);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("",new mxGeometry(.85,.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.webpage;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");
-b.geometry.offset=new mxPoint(-10,-15);b.geometry.relative=!0;b.vertex=!0;a.insert(b);return c.createVertexTemplateFromCells([a],a.geometry.width,a.geometry.height,"Bottom Navigation")})];this.addPalette("gmdlBottom Navigation","GMDL / Bottom Navigation",a||!1,mxUtils.bind(this,function(a){for(var b=0;b<f.length;b++)a.appendChild(f[b](a))}))};Sidebar.prototype.addGMDLBottomSheetsPalette=function(a){var c=this,f=[this.addEntry("gmdl google media design library bottom sheets bottom sheet",function(){var a=
-new mxCell("",new mxGeometry(0,0,358,320),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;shadow=0;recursiveResize=0;");a.vertex=!0;var b=new mxCell("Open in",new mxGeometry(10,15,200,20),"shape=rect;strokeColor=none;fillColor=none;align=left;fontColor=#808080;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Keep",new mxGeometry(10,60,20,20),"shape=mxgraph.gmdl.keep;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");
-b.vertex=!0;a.insert(b);b=new mxCell("Inbox",new mxGeometry(10,110,22,20),"shape=mxgraph.gmdl.inbox;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Hangouts",new mxGeometry(10,160,20,22),"shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#0F9755;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=
-!0;a.insert(b);b=new mxCell("Messenger",new mxGeometry(10,210,22,20),"shape=mxgraph.gmdl.messenger;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(10,260,20,20),"shape=mxgraph.gmdl.google_plus;strokeColor=none;fillColor=#D14235;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=
-!0;a.insert(b);return c.createVertexTemplateFromCells([a],a.geometry.width,a.geometry.height,"Bottom Sheet")}),this.addEntry("gmdl google media design library bottom sheets grid style options",function(){var a=new mxCell("",new mxGeometry(0,0,358,642),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;");a.vertex=!0;var b=new mxCell("12:30",new mxGeometry(0,0,358,24),"dashed=0;align=center;fontSize=12;shape=rect;align=right;fillColor=#2D3986;strokeColor=none;fontColor=#FFFFFF;spacingRight=4;spacingTop=1;fontStyle=0;fontSize=13;resizeWidth=1;");
-b.geometry.relative=!0;b.vertex=!0;a.insert(b);var e=new mxCell("",new mxGeometry(1,.5,46,14),"dashed=0;html=1;shape=mxgraph.gmdl.top_bar;strokeColor=none;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-92,-7);e.vertex=!0;b.insert(e);b=new mxCell("Ali Connors",new mxGeometry(0,0,358,57),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#394797;resizeWidth=1;fontSize=22;fontColor=#FFFFFF;spacingTop=-3;verticalAlign=middle;align=left;spacingLeft=72;");b.geometry.relative=
-!0;b.geometry.offset=new mxPoint(0,24);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.left;strokeColor=#ffffff;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.edit;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-65,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,
-.5,5,16),"dashed=0;html=1;shape=mxgraph.gmdl.settings;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,-8);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,81);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,20,24),"dashed=0;html=1;shape=mxgraph.gmdl.telephone;strokeColor=none;fillColor=#3F51B5;");
-e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-12);e.vertex=!0;b.insert(e);e=new mxCell("(650) 555-1234",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Mobile",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=
-!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,146);b.vertex=!0;a.insert(b);e=new mxCell("(323) 555-6789",new mxGeometry(0,
-.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");
-e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,20),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,211);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.2011,.5,286,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-5);
-e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,231);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,24,16),"dashed=0;html=1;shape=mxgraph.gmdl.mail;strokeColor=#ffffff;fillColor=#3F51B5;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(24,-8);e.vertex=!0;b.insert(e);e=new mxCell("aliconnors@example.com",
-new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Personal",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,296);b.vertex=!0;a.insert(b);e=new mxCell("ali_connors@example.com",new mxGeometry(0,.5,150,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=
-!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,356);b.vertex=!0;a.insert(b);e=new mxCell("Gmail",new mxGeometry(.148,0,46,34),"dashed=0;fontSize=10;shape=mxgraph.gmdl.gmail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=6;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-23,392);
-e.vertex=!0;a.insert(e);b=new mxCell("Hangout",new mxGeometry(.5,0,40,46),"dashed=0;fontSize=10;shape=mxgraph.gmdl.hangout;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#19A05E;strokeColor=none;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(-20,386);b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(.8547,0,46,46),"dashed=0;fontSize=10;shape=mxgraph.gmdl.google_plus;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;strokeColor=none;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(-23,386);b.vertex=!0;a.insert(b);e=new mxCell("Mail",new mxGeometry(.148,0,40,32),"dashed=0;fontSize=10;shape=mxgraph.gmdl.mail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=4;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=3;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,494);e.vertex=!0;a.insert(e);e=new mxCell("Message",new mxGeometry(.5,0,44,42),"dashed=0;fontSize=10;shape=mxgraph.gmdl.message;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=-1;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=4;");
-e.geometry.relative=!0;e.geometry.offset=new mxPoint(-22,489);e.vertex=!0;a.insert(e);e=new mxCell("More",new mxGeometry(.8547,0,40,12),"dashed=0;fontSize=10;shape=mxgraph.gmdl.more;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=16;fillColor=#BDBDBD;strokeColor=none;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,504);e.vertex=!0;a.insert(e);b=new mxCell("",new mxGeometry(0,1,358,48),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;resizeWidth=1;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,-48);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.25,.5,14,14),"dashed=0;html=1;shape=mxgraph.gmdl.back;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,-7);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(.5,.5,14,14),"shape=ellipse;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,-7);e.vertex=!0;b.insert(e);
-e=new mxCell("",new mxGeometry(.75,.5,14,14),"shape=rect;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,-7);e.vertex=!0;b.insert(e);return c.createVertexTemplateFromCells([a],358,642,"Grid Style With Some Options")}),this.addEntry("gmdl google media design library bottom sheets grid style all options",function(){var a=new mxCell("",new mxGeometry(0,0,358,642),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;");
-a.vertex=!0;var b=new mxCell("12:30",new mxGeometry(0,0,358,24),"dashed=0;align=center;fontSize=12;shape=rect;align=right;fillColor=#2D3986;strokeColor=none;fontColor=#FFFFFF;spacingRight=4;spacingTop=1;fontStyle=0;fontSize=13;resizeWidth=1;");b.geometry.relative=!0;b.vertex=!0;a.insert(b);var e=new mxCell("",new mxGeometry(1,.5,46,14),"dashed=0;html=1;shape=mxgraph.gmdl.top_bar;fillColor=#2D3986;strokeColor=none;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-92,-7);e.vertex=!0;b.insert(e);
-b=new mxCell("Ali Connors",new mxGeometry(0,0,358,57),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#394797;resizeWidth=1;fontSize=22;fontColor=#FFFFFF;spacingTop=-3;verticalAlign=middle;align=left;spacingLeft=72;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,24);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.left;strokeColor=#ffffff;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,
--8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.edit;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-65,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,5,16),"dashed=0;html=1;shape=mxgraph.gmdl.settings;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,-8);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,81);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,20,24),"dashed=0;html=1;shape=mxgraph.gmdl.telephone;strokeColor=none;fillColor=#3F51B5;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-12);e.vertex=!0;b.insert(e);e=new mxCell("(650) 555-1234",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=
-!0;b.insert(e);e=new mxCell("Mobile",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");
-b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,146);b.vertex=!0;a.insert(b);e=new mxCell("(323) 555-6789",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=
-!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,20),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,211);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.2011,.5,
-286,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-5);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,231);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,24,16),"dashed=0;html=1;shape=mxgraph.gmdl.mail;strokeColor=#ffffff;fillColor=#3F51B5;strokeWidth=2;");
-e.geometry.relative=!0;e.geometry.offset=new mxPoint(24,-8);e.vertex=!0;b.insert(e);e=new mxCell("aliconnors@example.com",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Personal",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=
-!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,291);b.vertex=!0;a.insert(b);e=new mxCell("Gmail",new mxGeometry(.148,0,46,34),"dashed=0;fontSize=12;shape=mxgraph.gmdl.gmail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=6;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-23,327);
-e.vertex=!0;a.insert(e);b=new mxCell("Hangout",new mxGeometry(.5,0,40,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.hangout;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#19A05E;strokeColor=none;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(-20,321);b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(.8547,0,46,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.google_plus;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;strokeColor=none;");
+(function(){Sidebar.prototype.addGoogleCloudPlatformCardsPalette=function(){var a=this,c="dashed=0;html=1;"+mxConstants.STYLE_SHAPE+"=mxgraph.gcp.compute.",f=[this.addEntry("gcp google cloud platform cardproduct",function(){var d=new mxCell("",new mxGeometry(0,0,170,55),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;");
+b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,10);d.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,.5,110,20),"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,-12);d.insert(b);return a.createVertexTemplateFromCells([d],d.geometry.width,d.geometry.height,"Product Card")}),this.addEntry("gcp google cloud platform cardproduct",function(){var d=new mxCell("",new mxGeometry(0,0,190,
+55),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,10);d.insert(b);b=new mxCell("Analytics Backend",new mxGeometry(0,.5,130,20),"text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=
+new mxPoint(60,-20);d.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,.5,130,20),"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,0);d.insert(b);return a.createVertexTemplateFromCells([d],d.geometry.width,d.geometry.height,"Product Card")}),this.addEntry("gcp google cloud platform cardproduct",function(){var d=new mxCell("",new mxGeometry(0,0,190,55),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");
+d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,10);d.insert(b);b=new mxCell("Analytics Backend",new mxGeometry(0,.5,130,20),"text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,-20);d.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,.5,130,20),
+"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,0);d.insert(b);var e=new mxCell("",new mxGeometry(0,55,190,55),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");e.vertex=!0;b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,
+10);e.insert(b);b=new mxCell("Analytics Backend",new mxGeometry(0,.5,130,20),"text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,-20);e.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,.5,130,20),"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,0);e.insert(b);return a.createVertexTemplateFromCells([d,e],d.geometry.width,
+2*d.geometry.height,"Product Card")}),this.addEntry("gcp google cloud platform cardexpanded product",function(){var d=new mxCell("",new mxGeometry(0,0,190,80),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,10);d.insert(b);b=new mxCell("Batch Processing",
+new mxGeometry(0,0,130,20),"text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,8);d.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,0,130,20),"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,28);d.insert(b);b=new mxCell("",new mxGeometry(0,0,130,10),"shape=line;strokeColor=#dddddd;");b.vertex=!0;b.geometry.relative=
+!0;b.geometry.offset=new mxPoint(60,48);d.insert(b);b=new mxCell("Multiple Instances",new mxGeometry(0,0,130,20),"text;fontSize=12;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(60,58);d.insert(b);return a.createVertexTemplateFromCells([d],d.geometry.width,d.geometry.height,"Expanded Product Card")}),this.addEntry("gcp google cloud platform cardexpanded product",function(){var d=new mxCell("",new mxGeometry(0,0,150,100),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");
+d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,19.5,17.4),c+"compute_engine;fillColor=#757575;gradientColor=none;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,10);d.insert(b);b=new mxCell("Compute Engine",new mxGeometry(0,0,110,20),"text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(40,8);d.insert(b);b=new mxCell("",new mxGeometry(0,0,110,10),"shape=line;strokeColor=#dddddd;");
+b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(40,28);d.insert(b);b=new mxCell("10GB PD",new mxGeometry(0,0,110,20),"text;fontSize=12;fontColor=#888888;align=left;verticalAlign=middle;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(40,38);d.insert(b);b=new mxCell("",new mxGeometry(0,0,17,17),"dashed=0;html=1;shape=mxgraph.gcp.product_cards.standard_machine;fillColor=#757575;gradientColor=none;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=
+new mxPoint(30,60);d.insert(b);b=new mxCell("",new mxGeometry(0,0,17,17),"dashed=0;html=1;shape=mxgraph.gcp.product_cards.disk;fillColor=#757575;gradientColor=none;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(70,60);d.insert(b);b=new mxCell("",new mxGeometry(0,0,17,17),"dashed=0;html=1;shape=mxgraph.gcp.product_cards.close;fillColor=#757575;gradientColor=none;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(110,60);d.insert(b);
+b=new mxCell("4",new mxGeometry(0,0,14,14),"dashed=0;html=1;ellipse;fillColor=#3979F1;gradientColor=none;strokeColor=none;fontColor=#FFFFFF;fontSize=10;verticalAlign=middle;spacing=0;spacingBottom=1;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(22,68);d.insert(b);b=new mxCell("2",new mxGeometry(0,0,14,14),"dashed=0;html=1;ellipse;fillColor=#3979F1;gradientColor=none;strokeColor=none;fontColor=#FFFFFF;fontSize=10;verticalAlign=middle;spacing=0;spacingBottom=1;");b.vertex=!0;b.geometry.relative=
+!0;b.geometry.offset=new mxPoint(42,68);d.insert(b);b=new mxCell("1",new mxGeometry(0,0,14,14),"dashed=0;html=1;ellipse;fillColor=#3979F1;gradientColor=none;strokeColor=none;fontColor=#FFFFFF;fontSize=10;verticalAlign=middle;spacing=0;spacingBottom=1;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(82,68);d.insert(b);return a.createVertexTemplateFromCells([d],d.geometry.width,d.geometry.height,"Expanded Product Card")}),this.addEntry("gcp google cloud platform cardservice",function(){var d=
+new mxCell("",new mxGeometry(0,0,110,50),"dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;");d.vertex=!0;var b=new mxCell("",new mxGeometry(0,0,.3*129,34.5),c+"compute_engine;fillColor=#757575;gradientColor=none;strokeColor=none;");b.vertex=!0;b.geometry.relative=!0;b.geometry.offset=new mxPoint(10,8);d.insert(b);b=new mxCell("Local\nCompute",new mxGeometry(0,0,60,50),"text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;");b.vertex=!0;
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(50,0);d.insert(b);return a.createVertexTemplateFromCells([d],d.geometry.width,d.geometry.height,"Service Card")})];this.addPalette("gcpCards","GCP / Cards",!1,mxUtils.bind(this,function(a){for(var b=0;b<f.length;b++)a.appendChild(f[b](a))}))}})();
+(function(){Sidebar.prototype.addGMDLBottomNavigationPalette=function(a){var c=this,f=[this.addEntry("gmdl google media design library bottom navigation bottom navigation",function(){var a=new mxCell("",new mxGeometry(0,0,358,48),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;shadow=0;");a.vertex=!0;var b=new mxCell("Recents",new mxGeometry(.15,.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.recents;fillColor=#808080;strokeColor=none;fontColor=#808080;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;");
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(-10,-15);b.vertex=!0;a.insert(b);b=new mxCell("Favorites",new mxGeometry(.5,.5,20,18),"dashed=0;html=1;shape=mxgraph.gmdl.heart;fillColor=#00796B;strokeColor=none;fontColor=#00796B;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-5;");b.geometry.offset=new mxPoint(-10,-14);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("Nearby",new mxGeometry(.85,
+.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.nearby;fillColor=#808080;strokeColor=none;fontColor=#808080;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;");b.geometry.offset=new mxPoint(-10,-15);b.geometry.relative=!0;b.vertex=!0;a.insert(b);return c.createVertexTemplateFromCells([a],a.geometry.width,a.geometry.height,"Bottom Navigation")}),this.addEntry("gmdl google media design library bottom navigation dropdown menu",
+function(){var a=new mxCell("",new mxGeometry(0,0,358,48),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#00796B;strokeColor=none;shadow=0;");a.vertex=!0;var b=new mxCell("",new mxGeometry(.15,.5,20,16),"dashed=0;html=1;shape=mxgraph.gmdl.video_2;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");b.geometry.relative=!0;b.geometry.offset=
+new mxPoint(-10,-8);b.vertex=!0;a.insert(b);b=new mxCell("Music",new mxGeometry(.38,.5,14,20),"dashed=0;html=1;shape=mxgraph.gmdl.music;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-5;");b.geometry.offset=new mxPoint(-10,-14);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("",new mxGeometry(.62,.5,16,20),"dashed=0;html=1;shape=mxgraph.gmdl.book;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");
+b.geometry.offset=new mxPoint(-8,-10);b.geometry.relative=!0;b.vertex=!0;a.insert(b);b=new mxCell("",new mxGeometry(.85,.5,20,20),"dashed=0;html=1;shape=mxgraph.gmdl.webpage;fillColor=#ffffff;strokeColor=none;fontColor=#ffffff;verticalAlign=top;spacingLeft=0;fontSize=10;labelPosition=center;verticalLabelPosition=bottom;align=center;spacingBottom=0;spacingTop=-6;opacity=60;");b.geometry.offset=new mxPoint(-10,-15);b.geometry.relative=!0;b.vertex=!0;a.insert(b);return c.createVertexTemplateFromCells([a],
+a.geometry.width,a.geometry.height,"Bottom Navigation")})];this.addPalette("gmdlBottom Navigation","GMDL / Bottom Navigation",a||!1,mxUtils.bind(this,function(a){for(var b=0;b<f.length;b++)a.appendChild(f[b](a))}))};Sidebar.prototype.addGMDLBottomSheetsPalette=function(a){var c=this,f=[this.addEntry("gmdl google media design library bottom sheets bottom sheet",function(){var a=new mxCell("",new mxGeometry(0,0,358,320),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;shadow=0;recursiveResize=0;");
+a.vertex=!0;var b=new mxCell("Open in",new mxGeometry(10,15,200,20),"shape=rect;strokeColor=none;fillColor=none;align=left;fontColor=#808080;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Keep",new mxGeometry(10,60,20,20),"shape=mxgraph.gmdl.keep;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Inbox",new mxGeometry(10,110,22,20),"shape=mxgraph.gmdl.inbox;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");
+b.vertex=!0;a.insert(b);b=new mxCell("Hangouts",new mxGeometry(10,160,20,22),"shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#0F9755;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=!0;a.insert(b);b=new mxCell("Messenger",new mxGeometry(10,210,22,20),"shape=mxgraph.gmdl.messenger;strokeColor=none;fillColor=#F4B70B;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");
+b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(10,260,20,20),"shape=mxgraph.gmdl.google_plus;strokeColor=none;fillColor=#D14235;align=left;labelPosition=right;verticalLabelPosition=middle;verticalAlign=middle;spacingLeft=20;fontSize=14;");b.vertex=!0;a.insert(b);return c.createVertexTemplateFromCells([a],a.geometry.width,a.geometry.height,"Bottom Sheet")}),this.addEntry("gmdl google media design library bottom sheets grid style options",function(){var a=new mxCell("",new mxGeometry(0,
+0,358,642),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;");a.vertex=!0;var b=new mxCell("12:30",new mxGeometry(0,0,358,24),"dashed=0;align=center;fontSize=12;shape=rect;align=right;fillColor=#2D3986;strokeColor=none;fontColor=#FFFFFF;spacingRight=4;spacingTop=1;fontStyle=0;fontSize=13;resizeWidth=1;");b.geometry.relative=!0;b.vertex=!0;a.insert(b);var e=new mxCell("",new mxGeometry(1,.5,46,14),"dashed=0;html=1;shape=mxgraph.gmdl.top_bar;strokeColor=none;");e.geometry.relative=
+!0;e.geometry.offset=new mxPoint(-92,-7);e.vertex=!0;b.insert(e);b=new mxCell("Ali Connors",new mxGeometry(0,0,358,57),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#394797;resizeWidth=1;fontSize=22;fontColor=#FFFFFF;spacingTop=-3;verticalAlign=middle;align=left;spacingLeft=72;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,24);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.left;strokeColor=#ffffff;strokeWidth=2;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.edit;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-65,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,5,16),"dashed=0;html=1;shape=mxgraph.gmdl.settings;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,-8);e.vertex=!0;b.insert(e);
+b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,81);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,20,24),"dashed=0;html=1;shape=mxgraph.gmdl.telephone;strokeColor=none;fillColor=#3F51B5;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-12);e.vertex=!0;b.insert(e);e=new mxCell("(650) 555-1234",new mxGeometry(0,.5,358,
+20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Mobile",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,146);b.vertex=!0;a.insert(b);e=new mxCell("(323) 555-6789",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;
+e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,
+358,20),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,211);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.2011,.5,286,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-5);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,231);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,24,16),"dashed=0;html=1;shape=mxgraph.gmdl.mail;strokeColor=#ffffff;fillColor=#3F51B5;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(24,-8);e.vertex=!0;b.insert(e);e=new mxCell("aliconnors@example.com",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=
+new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Personal",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,296);b.vertex=!0;a.insert(b);e=new mxCell("ali_connors@example.com",
+new mxGeometry(0,.5,150,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,150,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,356);b.vertex=!0;a.insert(b);e=new mxCell("Gmail",new mxGeometry(.148,0,46,34),"dashed=0;fontSize=10;shape=mxgraph.gmdl.gmail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=6;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-23,392);e.vertex=!0;a.insert(e);b=new mxCell("Hangout",new mxGeometry(.5,0,40,46),"dashed=0;fontSize=10;shape=mxgraph.gmdl.hangout;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#19A05E;strokeColor=none;");
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(-20,386);b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(.8547,0,46,46),"dashed=0;fontSize=10;shape=mxgraph.gmdl.google_plus;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;strokeColor=none;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(-23,386);b.vertex=!0;a.insert(b);e=new mxCell("Mail",new mxGeometry(.148,0,40,32),"dashed=0;fontSize=10;shape=mxgraph.gmdl.mail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=4;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=3;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,494);e.vertex=!0;a.insert(e);e=new mxCell("Message",new mxGeometry(.5,0,44,42),"dashed=0;fontSize=10;shape=mxgraph.gmdl.message;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=-1;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=4;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-22,489);e.vertex=!0;a.insert(e);e=new mxCell("More",new mxGeometry(.8547,0,40,12),"dashed=0;fontSize=10;shape=mxgraph.gmdl.more;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=16;fillColor=#BDBDBD;strokeColor=none;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,504);e.vertex=!0;a.insert(e);b=new mxCell("",new mxGeometry(0,1,358,48),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,-48);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.25,.5,14,14),"dashed=0;html=1;shape=mxgraph.gmdl.back;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,
+-7);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(.5,.5,14,14),"shape=ellipse;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,-7);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(.75,.5,14,14),"shape=rect;strokeColor=#ffffff;fillColor=#000000;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-7,-7);e.vertex=!0;b.insert(e);return c.createVertexTemplateFromCells([a],358,642,"Grid Style With Some Options")}),
+this.addEntry("gmdl google media design library bottom sheets grid style all options",function(){var a=new mxCell("",new mxGeometry(0,0,358,642),"dashed=0;align=center;fontSize=12;shape=rect;fillColor=#ffffff;strokeColor=none;");a.vertex=!0;var b=new mxCell("12:30",new mxGeometry(0,0,358,24),"dashed=0;align=center;fontSize=12;shape=rect;align=right;fillColor=#2D3986;strokeColor=none;fontColor=#FFFFFF;spacingRight=4;spacingTop=1;fontStyle=0;fontSize=13;resizeWidth=1;");b.geometry.relative=!0;b.vertex=
+!0;a.insert(b);var e=new mxCell("",new mxGeometry(1,.5,46,14),"dashed=0;html=1;shape=mxgraph.gmdl.top_bar;fillColor=#2D3986;strokeColor=none;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-92,-7);e.vertex=!0;b.insert(e);b=new mxCell("Ali Connors",new mxGeometry(0,0,358,57),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#394797;resizeWidth=1;fontSize=22;fontColor=#FFFFFF;spacingTop=-3;verticalAlign=middle;align=left;spacingLeft=72;");b.geometry.relative=!0;b.geometry.offset=
+new mxPoint(0,24);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.left;strokeColor=#ffffff;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,16,16),"dashed=0;html=1;shape=mxgraph.gmdl.edit;strokeColor=none;fillColor=#ffffff;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-65,-8);e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,5,16),"dashed=0;html=1;shape=mxgraph.gmdl.settings;strokeColor=none;fillColor=#ffffff;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,-8);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,81);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,20,24),"dashed=0;html=1;shape=mxgraph.gmdl.telephone;strokeColor=none;fillColor=#3F51B5;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(25,
+-12);e.vertex=!0;b.insert(e);e=new mxCell("(650) 555-1234",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Mobile",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,146);b.vertex=!0;a.insert(b);e=new mxCell("(323) 555-6789",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;
+e.geometry.offset=new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Work",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);e=new mxCell("",new mxGeometry(1,.5,17,20),"dashed=0;html=1;shape=mxgraph.gmdl.hangout;strokeColor=none;fillColor=#BDBDBD;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-40,-10);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,
+358,20),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,211);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(.2011,.5,286,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(0,-5);e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,65),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;opacity=20;resizeWidth=1;");
+b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,231);b.vertex=!0;a.insert(b);e=new mxCell("",new mxGeometry(0,.5,24,16),"dashed=0;html=1;shape=mxgraph.gmdl.mail;strokeColor=#ffffff;fillColor=#3F51B5;strokeWidth=2;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(24,-8);e.vertex=!0;b.insert(e);e=new mxCell("aliconnors@example.com",new mxGeometry(0,.5,358,20),"text;fontSize=14;fontColor=#000000;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.geometry.offset=
+new mxPoint(0,-21);e.vertex=!0;b.insert(e);e=new mxCell("Personal",new mxGeometry(0,.5,358,20),"text;fontSize=13;fontColor=#504F4F;verticalAlign=middle;resizeWidth=1;align=left;spacingLeft=72;");e.geometry.relative=!0;e.vertex=!0;b.insert(e);b=new mxCell("",new mxGeometry(0,0,358,10),"shape=line;strokeColor=#000000;strokeWidth=1;opacity=20;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,291);b.vertex=!0;a.insert(b);e=new mxCell("Gmail",new mxGeometry(.148,0,46,34),"dashed=0;fontSize=12;shape=mxgraph.gmdl.gmail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=6;");
+e.geometry.relative=!0;e.geometry.offset=new mxPoint(-23,327);e.vertex=!0;a.insert(e);b=new mxCell("Hangout",new mxGeometry(.5,0,40,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.hangout;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#19A05E;strokeColor=none;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(-20,321);b.vertex=!0;a.insert(b);b=new mxCell("Google+",new mxGeometry(.8547,0,46,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.google_plus;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;strokeColor=none;");
b.geometry.relative=!0;b.geometry.offset=new mxPoint(-23,321);b.vertex=!0;a.insert(b);e=new mxCell("Mail",new mxGeometry(.148,0,40,32),"dashed=0;fontSize=12;shape=mxgraph.gmdl.mail;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=4;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=3;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-20,422);e.vertex=!0;a.insert(e);e=new mxCell("Message",new mxGeometry(.5,0,44,42),"dashed=0;fontSize=12;shape=mxgraph.gmdl.message;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=-1;fillColor=#BDBDBD;strokeColor=#ffffff;strokeWidth=4;");
e.geometry.relative=!0;e.geometry.offset=new mxPoint(-22,417);e.vertex=!0;a.insert(e);e=new mxCell("Copy",new mxGeometry(.8547,0,34,40),"dashed=0;fontSize=12;shape=mxgraph.gmdl.copy;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=2;fillColor=none;strokeColor=#BDBDBD;strokeWidth=4;");e.geometry.relative=!0;e.geometry.offset=new mxPoint(-17,418);e.vertex=!0;a.insert(e);b=new mxCell("Facebook",new mxGeometry(.148,0,46,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.facebook;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#BDBDBD;strokeColor=none;");
b.geometry.relative=!0;b.geometry.offset=new mxPoint(-23,513);b.vertex=!0;a.insert(b);b=new mxCell("Twitter",new mxGeometry(.5,0,46,46),"dashed=0;fontSize=12;shape=mxgraph.gmdl.twitter;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontColor=#504F4F;spacingTop=1;fillColor=#BDBDBD;strokeColor=none;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(-23,513);b.vertex=!0;a.insert(b);b=new mxCell("",new mxGeometry(0,1,358,48),"dashed=0;align=center;fontSize=12;shape=rect;strokeColor=none;fillColor=#000000;resizeWidth=1;");
@@ -7529,7 +7546,7 @@ c);while(c++<a&&"1"==mxUtils.getValue(this.getCellStyle(b),"locked","0"));null!=
[SHAPES_PATH+"/mxFloorplan.js",STENCIL_PATH+"/floorplan.xml"];mxStencilRegistry.libraries.bootstrap=[SHAPES_PATH+"/mxBootstrap.js",STENCIL_PATH+"/bootstrap.xml"];mxStencilRegistry.libraries.gmdl=[SHAPES_PATH+"/mxGmdl.js",STENCIL_PATH+"/gmdl.xml"];mxStencilRegistry.libraries.cabinets=[SHAPES_PATH+"/mxCabinets.js",STENCIL_PATH+"/cabinets.xml"];mxStencilRegistry.libraries.archimate=[SHAPES_PATH+"/mxArchiMate.js"];mxStencilRegistry.libraries.archimate3=[SHAPES_PATH+"/mxArchiMate3.js"];mxStencilRegistry.libraries.sysml=
[SHAPES_PATH+"/mxSysML.js"];mxStencilRegistry.libraries.eip=[SHAPES_PATH+"/mxEip.js",STENCIL_PATH+"/eip.xml"];mxStencilRegistry.libraries.networks=[SHAPES_PATH+"/mxNetworks.js",STENCIL_PATH+"/networks.xml"];mxStencilRegistry.libraries.aws3d=[SHAPES_PATH+"/mxAWS3D.js",STENCIL_PATH+"/aws3d.xml"];mxStencilRegistry.libraries.pid2inst=[SHAPES_PATH+"/pid2/mxPidInstruments.js"];mxStencilRegistry.libraries.pid2misc=[SHAPES_PATH+"/pid2/mxPidMisc.js",STENCIL_PATH+"/pid/misc.xml"];mxStencilRegistry.libraries.pid2valves=
[SHAPES_PATH+"/pid2/mxPidValves.js"];mxStencilRegistry.libraries.pidFlowSensors=[STENCIL_PATH+"/pid/flow_sensors.xml"];mxMarker.getPackageForType=function(a){var b=null;null!=a&&0<a.length&&("ER"==a.substring(0,2)?b="mxgraph.er":"sysML"==a.substring(0,5)&&(b="mxgraph.sysml"));return b};var u=mxMarker.createMarker;mxMarker.createMarker=function(a,b,c,d,e,f,k,g,l,m){if(null!=c&&null==mxMarker.markers[c]){var n=this.getPackageForType(c);null!=n&&mxStencilRegistry.getStencil(n)}return u.apply(this,arguments)}})();
-(function(){EditorUi.VERSION="6.3.6";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.isElectronApp=window&&window.process&&window.process.type;EditorUi.prototype.emptyDiagramXml='<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>';EditorUi.prototype.emptyLibraryXml="<mxlibrary>[]</mxlibrary>";EditorUi.prototype.mode=null;EditorUi.prototype.sidebarFooterHeight=36;EditorUi.prototype.defaultCustomShapeStyle="shape=stencil(tZRtTsQgEEBPw1+DJR7AoN6DbWftpAgE0Ortd/jYRGq72R+YNE2YgTePloEJGWblgA18ZuKFDcMj5/Sm8boZq+BgjCX4pTyqk6ZlKROitwusOMXKQDODx5iy4pXxZ5qTHiFHawxB0JrQZH7lCabQ0Fr+XWC1/E8zcsT/gAi+Subo2/3Mh6d/oJb5nU1b5tW7r2knautaa3T+U32o7f7vZwpJkaNDLORJjcu7t59m2jXxqX9un+tt022acsfmoKaQZ+vhhswZtS6Ne/ThQGt0IV0N3Yyv6P3CeT9/tHO0XFI5cAE=);whiteSpace=wrap;html=1;";
+(function(){EditorUi.VERSION="6.4.1";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.isElectronApp=window&&window.process&&window.process.type;EditorUi.prototype.emptyDiagramXml='<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>';EditorUi.prototype.emptyLibraryXml="<mxlibrary>[]</mxlibrary>";EditorUi.prototype.mode=null;EditorUi.prototype.sidebarFooterHeight=36;EditorUi.prototype.defaultCustomShapeStyle="shape=stencil(tZRtTsQgEEBPw1+DJR7AoN6DbWftpAgE0Ortd/jYRGq72R+YNE2YgTePloEJGWblgA18ZuKFDcMj5/Sm8boZq+BgjCX4pTyqk6ZlKROitwusOMXKQDODx5iy4pXxZ5qTHiFHawxB0JrQZH7lCabQ0Fr+XWC1/E8zcsT/gAi+Subo2/3Mh6d/oJb5nU1b5tW7r2knautaa3T+U32o7f7vZwpJkaNDLORJjcu7t59m2jXxqX9un+tt022acsfmoKaQZ+vhhswZtS6Ne/ThQGt0IV0N3Yyv6P3CeT9/tHO0XFI5cAE=);whiteSpace=wrap;html=1;";
EditorUi.prototype.maxBackgroundSize=1600;EditorUi.prototype.maxImageSize=520;EditorUi.prototype.resampleThreshold=1E5;EditorUi.prototype.maxImageBytes=1E6;EditorUi.prototype.maxBackgroundBytes=25E5;EditorUi.prototype.currentFile=null;EditorUi.prototype.enableLogging=!0;EditorUi.prototype.pdfPageExport=!0;(function(){EditorUi.prototype.useCanvasForExport=!1;EditorUi.prototype.jpgSupported=!1;try{var a=document.createElement("canvas"),b=new Image;b.onload=function(){try{a.getContext("2d").drawImage(b,
0,0);var c=a.toDataURL("image/png");EditorUi.prototype.useCanvasForExport=null!=c&&6<c.length}catch(p){}};b.src="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1px" height="1px" version="1.1"><foreignObject pointer-events="all" width="1" height="1"><div xmlns="http://www.w3.org/1999/xhtml"></div></foreignObject></svg>')))}catch(n){}try{a=document.createElement("canvas");a.width=a.height=1;var c=
a.toDataURL("image/jpeg");EditorUi.prototype.jpgSupported=null!==c.match("image/jpeg")}catch(n){}})();EditorUi.prototype.getLocalData=function(a,b){b(localStorage.getItem(a))};EditorUi.prototype.setLocalData=function(a,b,c){localStorage.setItem(a,b);c()};EditorUi.prototype.removeLocalData=function(a,b){localStorage.removeItem(a);b()};EditorUi.prototype.setMathEnabled=function(a){this.editor.graph.mathEnabled=a;this.editor.updateGraphComponents();this.editor.graph.refresh();this.fireEvent(new mxEventObject("mathEnabledChanged"))};
@@ -7808,8 +7825,8 @@ this.icon.setAttribute("title",mxResources.get("draw.io")),this.icon.style.paddi
mxSettings.save()})),this.editor.graph.pageFormat=mxSettings.getPageFormat(),this.addListener("pageFormatChanged",mxUtils.bind(this,function(a,b){mxSettings.setPageFormat(this.editor.graph.pageFormat);mxSettings.save()})),this.editor.graph.view.gridColor=mxSettings.getGridColor(),this.addListener("gridColorChanged",mxUtils.bind(this,function(a,b){mxSettings.setGridColor(this.editor.graph.view.gridColor);mxSettings.save()})),mxClient.IS_CHROMEAPP&&(this.editor.addListener("autosaveChanged",mxUtils.bind(this,
function(a,b){mxSettings.setAutosave(this.editor.autosave);mxSettings.save()})),this.editor.autosave=mxSettings.getAutosave()),null!=this.sidebar&&this.sidebar.showPalette("search",mxSettings.settings.search),!this.editor.chromeless&&null!=this.sidebar&&(mxSettings.settings.isNew||8>=parseInt(mxSettings.settings.version||0))&&(this.toggleScratchpad(),mxSettings.save()),this.addListener("formatWidthChanged",function(){mxSettings.setFormatWidth(this.formatWidth);mxSettings.save()})};
App.prototype.isDriveDomain=function(){return"0"!=urlParams.drive&&("test.draw.io"==window.location.hostname||"cdn.draw.io"==window.location.hostname||"www.draw.io"==window.location.hostname||"drive.draw.io"==window.location.hostname||"jgraph.github.io"==window.location.hostname)};App.prototype.isLegacyDriveDomain=function(){return 0==urlParams.drive||"legacy.draw.io"==window.location.hostname};
-App.prototype.checkLicense=function(){var a=this.drive.getUser(),a=("1"==urlParams.dev?urlParams.lic:null)||(null!=a?a.email:null);if(!this.isOffline()&&!this.editor.chromeless&&null!=a){var c=a.lastIndexOf("@"),f=a;0<=c&&(f=a.substring(c+1),a=this.crc32(a.substring(0,c))+"@"+f);mxUtils.post("/license","domain="+encodeURIComponent(f)+"&email="+encodeURIComponent(a)+"&ts="+(new Date).getTime(),mxUtils.bind(this,function(a){try{if(200<=a.getStatus()&&299>=a.getStatus()){var b=a.getText();if(0<b.length){var c=
-JSON.parse(b);null!=c&&this.handleLicense(c,f)}}}catch(g){}}))}};
+App.prototype.checkLicense=function(){var a=this.drive.getUser(),c=("1"==urlParams.dev?urlParams.lic:null)||(null!=a?a.email:null);if(!this.isOffline()&&!this.editor.chromeless&&null!=c){var f=c.lastIndexOf("@"),d=c;0<=f&&(d=c.substring(f+1));mxUtils.post("/license","domain="+encodeURIComponent(d)+"&email="+encodeURIComponent(c)+"&ds="+encodeURIComponent(a.displayName)+"&lc="+encodeURIComponent(a.locale)+"&ts="+(new Date).getTime(),mxUtils.bind(this,function(a){try{if(200<=a.getStatus()&&299>=a.getStatus()){var b=
+a.getText();if(0<b.length){var c=JSON.parse(b);null!=c&&this.handleLicense(c,d)}}}catch(k){}}))}};
App.prototype.handleLicense=function(a,c){var f=document.getElementById("geFooter"),d=null;if(null!=f&&null!=a)if(d=a.expiry,null!=a.footer)f.innerHTML=decodeURIComponent(a.footer);else if(this.hideFooter(),null!=d&&"never"!=d){var b=new Date(Date.parse(d)),e=Math.round((b-Date.now())/864E5);if(90>e){var g="https://support.draw.io/display/DKB/draw.io+footer+state+that+license+is+expiring+on+Google+For+Work+account?domain="+encodeURIComponent(c);f.style.height="100%";f.style.margin="0px";f.style.display=
"";0>e?(this.footerHeight=80,f.innerHTML='<table height="100%"><tr><td valign="middle" align="center" class="geStatusAlert geBlink"><a href="'+g+'" style="padding-top:16px;" target="_blank"><img border="0" src="'+mxGraph.prototype.warningImage.src+'" align="top" style="margin-right:6px">'+mxResources.get("licenseHasExpired",[c,b.toLocaleDateString()])+"</a></td></tr></table>"):(this.footerHeight=46,f.innerHTML='<table height="100%"><tr><td valign="middle" align="center" class="geStatusAlert"><a href="'+
g+'" target="_blank"><img border="0" src="'+mxGraph.prototype.warningImage.src+'" align="top" style="margin-right:6px">'+mxResources.get("licenseWillExpire",[c,b.toLocaleDateString()])+"</a></td></tr></table>");this.refresh()}}return d};App.prototype.getEditBlankXml=function(){var a=this.getCurrentFile();return null!=a&&this.editor.chromeless&&this.editor.graph.lightbox&&null==a.realtime?a.getData():this.getFileData(!0)};
diff --git a/war/js/diagramly/App.js b/war/js/diagramly/App.js
index 14aa381a..3f704f76 100644
--- a/war/js/diagramly/App.js
+++ b/war/js/diagramly/App.js
@@ -1,6 +1,6 @@
/**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
+ * Copyright (c) 2006-2017, JGraph Ltd
+ * Copyright (c) 2006-2017, Gaudenz Alder
*/
/**
* Constructs a new point for the optional x and y coordinates. If no
@@ -1161,12 +1161,13 @@ App.prototype.checkLicense = function()
if (at >= 0)
{
domain = email.substring(at + 1);
- email = this.crc32(email.substring(0, at)) + '@' + domain;
+ //email = this.crc32(email.substring(0, at)) + '@' + domain;
}
// Timestamp is workaround for cached response in certain environments
- mxUtils.post('/license', 'domain=' + encodeURIComponent(domain) + '&email=' +
- encodeURIComponent(email) + '&ts=' + new Date().getTime(),
+ mxUtils.post('/license', 'domain=' + encodeURIComponent(domain) + '&email=' + encodeURIComponent(email) +
+ '&ds=' + encodeURIComponent(driveUser.displayName) + '&lc=' + encodeURIComponent(driveUser.locale) +
+ '&ts=' + new Date().getTime(),
mxUtils.bind(this, function(req)
{
var registered = false;
diff --git a/war/js/diagramly/Devel.js b/war/js/diagramly/Devel.js
index c644b8d0..7000d444 100644
--- a/war/js/diagramly/Devel.js
+++ b/war/js/diagramly/Devel.js
@@ -45,6 +45,7 @@ mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-Electrical.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-ER.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-Floorplan.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-Flowchart.js');
+mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-GCP.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-Gmdl.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-Ios.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-Ios7.js');
diff --git a/war/js/diagramly/DrawioUser.js b/war/js/diagramly/DrawioUser.js
index a226e997..a1979b59 100644
--- a/war/js/diagramly/DrawioUser.js
+++ b/war/js/diagramly/DrawioUser.js
@@ -2,33 +2,20 @@
* Copyright (c) 2006-2017, JGraph Ltd
* Copyright (c) 2006-2017, Gaudenz Alder
*/
-DrawioUser = function(id, email, displayName, pictureUrl)
+DrawioUser = function(id, email, displayName, pictureUrl, locale)
{
- /**
- * Holds the x-coordinate of the point.
- * @type number
- * @default 0
- */
+ // Unique ID of the user for the current storage system
this.id = id;
- /**
- * Holds the x-coordinate of the point.
- * @type number
- * @default 0
- */
+ // Email address of the user
this.email = email;
- /**
- * Holds the x-coordinate of the point.
- * @type number
- * @default 0
- */
+ // Display name of the user
this.displayName = displayName;
- /**
- * Holds the x-coordinate of the point.
- * @type number
- * @default 0
- */
+ // URL to an image of the user
this.pictureUrl = pictureUrl;
+
+ // country code locale of the user
+ this.locale = locale;
};
diff --git a/war/js/diagramly/DriveClient.js b/war/js/diagramly/DriveClient.js
index aaa7aba1..6588e0b2 100644
--- a/war/js/diagramly/DriveClient.js
+++ b/war/js/diagramly/DriveClient.js
@@ -535,7 +535,7 @@ DriveClient.prototype.updateUser = function(success, error, remember)
this.executeRequest(gapi.client.drive.about.get(), mxUtils.bind(this, function(resp)
{
this.setUser(new DrawioUser(info.id, resp.user.emailAddress, resp.user.displayName,
- (resp.user.picture != null) ? resp.user.picture.url : null));
+ (resp.user.picture != null) ? resp.user.picture.url : null, info.locale));
this.setUserId(info.id, remember);
if (success != null)
diff --git a/war/js/diagramly/sidebar/Sidebar-GCP.js b/war/js/diagramly/sidebar/Sidebar-GCP.js
new file mode 100644
index 00000000..6e626fc4
--- /dev/null
+++ b/war/js/diagramly/sidebar/Sidebar-GCP.js
@@ -0,0 +1,218 @@
+(function()
+{
+ // Adds GCP (Google Cloud Platform) shapes
+ Sidebar.prototype.addGoogleCloudPlatformCardsPalette = function()
+ {
+ var sb = this;
+ var n = 'dashed=0;html=1;' + mxConstants.STYLE_SHAPE + '=mxgraph.gcp.compute.';
+ var n1 = 'dashed=0;html=1;strokeColor=#dddddd;fillcolor=#ffffff;gradientColor=none;shadow=1;strokeWidth=1;';
+ var gn = 'mxgraph.gcp.product_cards';
+ var dt = 'gcp google cloud platform card';
+ var s = 0.3; //scale
+
+ var fns =
+ [
+ this.addEntry(dt + 'product', function()
+ {
+ var bg = new mxCell('', new mxGeometry(0, 0, 170, 55), n1);
+ bg.vertex = true;
+ var icon = new mxCell('', new mxGeometry(0, 0, s * 129, s * 115), n + 'compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;');
+ icon.vertex = true;
+ icon.geometry.relative = true;
+ icon.geometry.offset = new mxPoint(10, 10);
+ bg.insert(icon);
+ var text1 = new mxCell('Compute Engine', new mxGeometry(0, 0.5, 110, 20), 'text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;');
+ text1.vertex = true;
+ text1.geometry.relative = true;
+ text1.geometry.offset = new mxPoint(60, -12);
+ bg.insert(text1);
+
+ return sb.createVertexTemplateFromCells([bg], bg.geometry.width, bg.geometry.height, 'Product Card');
+ }),
+
+ this.addEntry(dt + 'product', function()
+ {
+ var bg = new mxCell('', new mxGeometry(0, 0, 190, 55), n1);
+ bg.vertex = true;
+ var icon = new mxCell('', new mxGeometry(0, 0, s * 129, s * 115), n + 'compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;');
+ icon.vertex = true;
+ icon.geometry.relative = true;
+ icon.geometry.offset = new mxPoint(10, 10);
+ bg.insert(icon);
+ var text1 = new mxCell('Analytics Backend', new mxGeometry(0, 0.5, 130, 20), 'text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;');
+ text1.vertex = true;
+ text1.geometry.relative = true;
+ text1.geometry.offset = new mxPoint(60, -20);
+ bg.insert(text1);
+ var text2 = new mxCell('Compute Engine', new mxGeometry(0, 0.5, 130, 20), 'text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;');
+ text2.vertex = true;
+ text2.geometry.relative = true;
+ text2.geometry.offset = new mxPoint(60, 0);
+ bg.insert(text2);
+
+ return sb.createVertexTemplateFromCells([bg], bg.geometry.width, bg.geometry.height, 'Product Card');
+ }),
+
+ this.addEntry(dt + 'product', function()
+ {
+ var bg1 = new mxCell('', new mxGeometry(0, 0, 190, 55), n1);
+ bg1.vertex = true;
+ var icon = new mxCell('', new mxGeometry(0, 0, s * 129, s * 115), n + 'compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;');
+ icon.vertex = true;
+ icon.geometry.relative = true;
+ icon.geometry.offset = new mxPoint(10, 10);
+ bg1.insert(icon);
+ var text1 = new mxCell('Analytics Backend', new mxGeometry(0, 0.5, 130, 20), 'text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;');
+ text1.vertex = true;
+ text1.geometry.relative = true;
+ text1.geometry.offset = new mxPoint(60, -20);
+ bg1.insert(text1);
+ var text2 = new mxCell('Compute Engine', new mxGeometry(0, 0.5, 130, 20), 'text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;');
+ text2.vertex = true;
+ text2.geometry.relative = true;
+ text2.geometry.offset = new mxPoint(60, 0);
+ bg1.insert(text2);
+
+ var bg2 = new mxCell('', new mxGeometry(0, 55, 190, 55), n1);
+ bg2.vertex = true;
+ var icon = new mxCell('', new mxGeometry(0, 0, s * 129, s * 115), n + 'compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;');
+ icon.vertex = true;
+ icon.geometry.relative = true;
+ icon.geometry.offset = new mxPoint(10, 10);
+ bg2.insert(icon);
+ var text1 = new mxCell('Analytics Backend', new mxGeometry(0, 0.5, 130, 20), 'text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;');
+ text1.vertex = true;
+ text1.geometry.relative = true;
+ text1.geometry.offset = new mxPoint(60, -20);
+ bg2.insert(text1);
+ var text2 = new mxCell('Compute Engine', new mxGeometry(0, 0.5, 130, 20), 'text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;');
+ text2.vertex = true;
+ text2.geometry.relative = true;
+ text2.geometry.offset = new mxPoint(60, 0);
+ bg2.insert(text2);
+
+ return sb.createVertexTemplateFromCells([bg1, bg2], bg1.geometry.width, bg1.geometry.height * 2, 'Product Card');
+ }),
+
+ this.addEntry(dt + 'expanded product', function()
+ {
+ var bg = new mxCell('', new mxGeometry(0, 0, 190, 80), n1);
+ bg.vertex = true;
+ var icon = new mxCell('', new mxGeometry(0, 0, s * 129, s * 115), n + 'compute_engine;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;');
+ icon.vertex = true;
+ icon.geometry.relative = true;
+ icon.geometry.offset = new mxPoint(10, 10);
+ bg.insert(icon);
+ var text1 = new mxCell('Batch Processing', new mxGeometry(0, 0, 130, 20), 'text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;');
+ text1.vertex = true;
+ text1.geometry.relative = true;
+ text1.geometry.offset = new mxPoint(60, 8);
+ bg.insert(text1);
+ var text2 = new mxCell('Compute Engine', new mxGeometry(0, 0, 130, 20), 'text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;');
+ text2.vertex = true;
+ text2.geometry.relative = true;
+ text2.geometry.offset = new mxPoint(60, 28);
+ bg.insert(text2);
+ var part = new mxCell('', new mxGeometry(0, 0, 130, 10), 'shape=line;strokeColor=#dddddd;');
+ part.vertex = true;
+ part.geometry.relative = true;
+ part.geometry.offset = new mxPoint(60, 48);
+ bg.insert(part);
+ var text3 = new mxCell('Multiple Instances', new mxGeometry(0, 0, 130, 20), 'text;fontSize=12;fontColor=#444444;align=left;verticalAlign=middle;');
+ text3.vertex = true;
+ text3.geometry.relative = true;
+ text3.geometry.offset = new mxPoint(60, 58);
+ bg.insert(text3);
+
+ return sb.createVertexTemplateFromCells([bg], bg.geometry.width, bg.geometry.height, 'Expanded Product Card');
+ }),
+
+ this.addEntry(dt + 'expanded product', function()
+ {
+ var bg = new mxCell('', new mxGeometry(0, 0, 150, 100), n1);
+ bg.vertex = true;
+ var icon1 = new mxCell('', new mxGeometry(0, 0, s * 65, s * 58), n + 'compute_engine;fillColor=#757575;gradientColor=none;strokeColor=none;');
+ icon1.vertex = true;
+ icon1.geometry.relative = true;
+ icon1.geometry.offset = new mxPoint(10, 10);
+ bg.insert(icon1);
+ var text1 = new mxCell('Compute Engine', new mxGeometry(0, 0, 110, 20), 'text;fontSize=13;fontColor=#444444;align=left;verticalAlign=middle;');
+ text1.vertex = true;
+ text1.geometry.relative = true;
+ text1.geometry.offset = new mxPoint(40, 8);
+ bg.insert(text1);
+ var part = new mxCell('', new mxGeometry(0, 0, 110, 10), 'shape=line;strokeColor=#dddddd;');
+ part.vertex = true;
+ part.geometry.relative = true;
+ part.geometry.offset = new mxPoint(40, 28);
+ bg.insert(part);
+ var text2 = new mxCell('10GB PD', new mxGeometry(0, 0, 110, 20), 'text;fontSize=12;fontColor=#888888;align=left;verticalAlign=middle;');
+ text2.vertex = true;
+ text2.geometry.relative = true;
+ text2.geometry.offset = new mxPoint(40, 38);
+ bg.insert(text2);
+ var icon2 = new mxCell('', new mxGeometry(0, 0, 17, 17), 'dashed=0;html=1;shape=mxgraph.gcp.product_cards.standard_machine;fillColor=#757575;gradientColor=none;strokeColor=none;');
+ icon2.vertex = true;
+ icon2.geometry.relative = true;
+ icon2.geometry.offset = new mxPoint(30, 60);
+ bg.insert(icon2);
+ var icon3 = new mxCell('', new mxGeometry(0, 0, 17, 17), 'dashed=0;html=1;shape=mxgraph.gcp.product_cards.disk;fillColor=#757575;gradientColor=none;strokeColor=none;');
+ icon3.vertex = true;
+ icon3.geometry.relative = true;
+ icon3.geometry.offset = new mxPoint(70, 60);
+ bg.insert(icon3);
+ var icon4 = new mxCell('', new mxGeometry(0, 0, 17, 17), 'dashed=0;html=1;shape=mxgraph.gcp.product_cards.close;fillColor=#757575;gradientColor=none;strokeColor=none;');
+ icon4.vertex = true;
+ icon4.geometry.relative = true;
+ icon4.geometry.offset = new mxPoint(110, 60);
+ bg.insert(icon4);
+ var icon5 = new mxCell('4', new mxGeometry(0, 0, 14, 14), 'dashed=0;html=1;ellipse;fillColor=#3979F1;gradientColor=none;strokeColor=none;fontColor=#FFFFFF;fontSize=10;verticalAlign=middle;spacing=0;spacingBottom=1;');
+ icon5.vertex = true;
+ icon5.geometry.relative = true;
+ icon5.geometry.offset = new mxPoint(22, 68);
+ bg.insert(icon5);
+ var icon6 = new mxCell('2', new mxGeometry(0, 0, 14, 14), 'dashed=0;html=1;ellipse;fillColor=#3979F1;gradientColor=none;strokeColor=none;fontColor=#FFFFFF;fontSize=10;verticalAlign=middle;spacing=0;spacingBottom=1;');
+ icon6.vertex = true;
+ icon6.geometry.relative = true;
+ icon6.geometry.offset = new mxPoint(42, 68);
+ bg.insert(icon6);
+ var icon7 = new mxCell('1', new mxGeometry(0, 0, 14, 14), 'dashed=0;html=1;ellipse;fillColor=#3979F1;gradientColor=none;strokeColor=none;fontColor=#FFFFFF;fontSize=10;verticalAlign=middle;spacing=0;spacingBottom=1;');
+ icon7.vertex = true;
+ icon7.geometry.relative = true;
+ icon7.geometry.offset = new mxPoint(82, 68);
+ bg.insert(icon7);
+
+ return sb.createVertexTemplateFromCells([bg], bg.geometry.width, bg.geometry.height, 'Expanded Product Card');
+ }),
+
+ this.addEntry(dt + 'service', function()
+ {
+ var bg = new mxCell('', new mxGeometry(0, 0, 110, 50), n1);
+ bg.vertex = true;
+ var icon = new mxCell('', new mxGeometry(0, 0, s * 129, s * 115), n + 'compute_engine;fillColor=#757575;gradientColor=none;strokeColor=none;');
+ icon.vertex = true;
+ icon.geometry.relative = true;
+ icon.geometry.offset = new mxPoint(10, 8);
+ bg.insert(icon);
+ var text1 = new mxCell('Local\nCompute', new mxGeometry(0, 0, 60, 50), 'text;fontSize=13;fontColor=#808080;align=left;verticalAlign=middle;');
+ text1.vertex = true;
+ text1.geometry.relative = true;
+ text1.geometry.offset = new mxPoint(50, 0);
+ bg.insert(text1);
+
+ return sb.createVertexTemplateFromCells([bg], bg.geometry.width, bg.geometry.height, 'Service Card');
+ })
+
+
+ ];
+
+ this.addPalette('gcpCards', 'GCP / Cards', false, mxUtils.bind(this, function(content)
+ {
+ for (var i = 0; i < fns.length; i++)
+ {
+ content.appendChild(fns[i](content));
+ }
+ }));
+ };
+
+})();
diff --git a/war/js/diagramly/sidebar/Sidebar.js b/war/js/diagramly/sidebar/Sidebar.js
index 4e41f062..c2838fa7 100644
--- a/war/js/diagramly/sidebar/Sidebar.js
+++ b/war/js/diagramly/sidebar/Sidebar.js
@@ -30,7 +30,7 @@
/**
*
*/
- Sidebar.prototype.gcp = ['Big Data', 'Compute', 'Developer Tools', 'Extras', 'Identity and Security', 'Machine Learning', 'Management Tools', 'Networking', 'Storage Databases'];
+ Sidebar.prototype.gcp = ['Cards', 'Big Data', 'Compute', 'Developer Tools', 'Extras', 'Identity and Security', 'Machine Learning', 'Management Tools', 'Networking', 'Storage Databases'];
/**
*
*/
@@ -729,11 +729,18 @@
for (var i = 0; i < gcp.length; i++)
{
- this.addStencilPalette('gcp' + gcp[i], 'GCP / ' + gcp[i],
- dir + '/gcp/' + gcp[i].toLowerCase().replace(/ /g, '_') + '.xml',
- ';html=1;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;');
+ if (gcp[i].toLowerCase() === 'cards')
+ {
+ this.addGoogleCloudPlatformCardsPalette();
+ }
+ else
+ {
+ this.addStencilPalette('gcp' + gcp[i], 'GCP / ' + gcp[i],
+ dir + '/gcp/' + gcp[i].toLowerCase().replace(/ /g, '_') + '.xml',
+ ';html=1;fillColor=#4387FD;gradientColor=#4683EA;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;');
+ }
}
-
+
for (var i = 0; i < rack.length; i++)
{
if (rack[i].toLowerCase() === 'general')
diff --git a/war/js/embed-static.min.js b/war/js/embed-static.min.js
index 4988b02c..c805c447 100644
--- a/war/js/embed-static.min.js
+++ b/war/js/embed-static.min.js
@@ -184,7 +184,7 @@ f)+"\n"+t+"}":"{"+x.join(",")+"}";f=t;return l}}"function"!==typeof Date.prototy
e=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,f,g,h={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},k;"function"!==typeof JSON.stringify&&(JSON.stringify=function(a,b,d){var e;g=f="";if("number"===typeof d)for(e=0;e<d;e+=1)g+=" ";else"string"===typeof d&&(g=d);if((k=b)&&"function"!==typeof b&&("object"!==typeof b||"number"!==typeof b.length))throw Error("JSON.stringify");return c("",{"":a})});
"function"!==typeof JSON.parse&&(JSON.parse=function(a,b){function c(a,d){var e,f,g=a[d];if(g&&"object"===typeof g)for(e in g)Object.prototype.hasOwnProperty.call(g,e)&&(f=c(g,e),void 0!==f?g[e]=f:delete g[e]);return b.call(a,d,g)}var e;a=""+a;d.lastIndex=0;d.test(a)&&(a=a.replace(d,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),"function"===typeof b?c({"":e},""):e;throw new SyntaxError("JSON.parse");})})();var mxBasePath="https://www.draw.io/mxgraph/",mxLoadStylesheets=mxLoadResources=!1,mxLanguage="en";window.urlParams=window.urlParams||{};window.MAX_REQUEST_SIZE=window.MAX_REQUEST_SIZE||10485760;window.MAX_AREA=window.MAX_AREA||225E6;window.EXPORT_URL=window.EXPORT_URL||"/export";window.SAVE_URL=window.SAVE_URL||"/save";window.OPEN_URL=window.OPEN_URL||"/open";window.RESOURCES_PATH=window.RESOURCES_PATH||"resources";window.RESOURCE_BASE=window.RESOURCE_BASE||window.RESOURCES_PATH+"/grapheditor";window.STENCIL_PATH=window.STENCIL_PATH||"stencils";window.IMAGE_PATH=window.IMAGE_PATH||"images";
-window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"6.3.6",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
+window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"6.4.1",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
0>navigator.userAgent.indexOf("Edge/"),IS_OP:0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("OPR/"),IS_OT:0<=navigator.userAgent.indexOf("Presto/")&&0>navigator.userAgent.indexOf("Presto/2.4.")&&0>navigator.userAgent.indexOf("Presto/2.3.")&&0>navigator.userAgent.indexOf("Presto/2.2.")&&0>navigator.userAgent.indexOf("Presto/2.1.")&&0>navigator.userAgent.indexOf("Presto/2.0.")&&0>navigator.userAgent.indexOf("Presto/1."),IS_SF:0<=navigator.userAgent.indexOf("AppleWebKit/")&&
0>navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_IOS:navigator.userAgent.match(/(iPad|iPhone|iPod)/g)?!0:!1,IS_GC:0<=navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_CHROMEAPP:null!=window.chrome&&null!=chrome.app&&null!=chrome.app.runtime,IS_FF:0<=navigator.userAgent.indexOf("Firefox/"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&0>navigator.userAgent.indexOf("Firefox/1.")&&0>navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/")&&
0>navigator.userAgent.indexOf("Iceweasel/1.")&&0>navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/")&&0>navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/")&&0>navigator.userAgent.indexOf("Iceape/1."),IS_SVG:0<=navigator.userAgent.indexOf("Firefox/")||0<=navigator.userAgent.indexOf("Iceweasel/")||0<=navigator.userAgent.indexOf("Seamonkey/")||0<=navigator.userAgent.indexOf("Iceape/")||0<=navigator.userAgent.indexOf("Galeon/")||
diff --git a/war/js/mxgraph/Format.js b/war/js/mxgraph/Format.js
index d357adc1..73da9e17 100644
--- a/war/js/mxgraph/Format.js
+++ b/war/js/mxgraph/Format.js
@@ -3730,7 +3730,9 @@ StyleFormatPanel.prototype.addStroke = function(container)
{
if (ss.style.shape == 'connector' || ss.style.shape == 'flexArrow')
{
- this.editorUi.menus.edgeStyleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null, false).setAttribute('title', mxResources.get('none'));
+ var item = this.editorUi.menus.edgeStyleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.NONE, 0], 'geIcon', null, false);
+ item.setAttribute('title', mxResources.get('none'));
+ item.firstChild.firstChild.innerHTML = '<font style="font-size:10px;">' + mxUtils.htmlEntities(mxResources.get('none')) + '</font>';
if (ss.style.shape == 'connector')
{
@@ -3776,8 +3778,10 @@ StyleFormatPanel.prototype.addStroke = function(container)
{
if (ss.style.shape == 'connector' || ss.style.shape == 'flexArrow')
{
- this.editorUi.menus.edgeStyleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null, false).setAttribute('title', mxResources.get('none'));
-
+ var item = this.editorUi.menus.edgeStyleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.NONE, 0], 'geIcon', null, false);
+ item.setAttribute('title', mxResources.get('none'));
+ item.firstChild.firstChild.innerHTML = '<font style="font-size:10px;">' + mxUtils.htmlEntities(mxResources.get('none')) + '</font>';
+
if (ss.style.shape == 'connector')
{
this.editorUi.menus.edgeStyleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-endclassic', null, false).setAttribute('title', mxResources.get('classic'));
@@ -4077,6 +4081,16 @@ StyleFormatPanel.prototype.addStroke = function(container)
markerDiv.className = ui.getCssClassForMarker(prefix, ss.style.shape, marker, fill);
+ if (markerDiv.className == 'geSprite geSprite-noarrow')
+ {
+ markerDiv.innerHTML = mxUtils.htmlEntities(mxResources.get('none'));
+ markerDiv.style.backgroundImage = 'none';
+ markerDiv.style.verticalAlign = 'top';
+ markerDiv.style.marginTop = '5px';
+ markerDiv.style.fontSize = '10px';
+ markerDiv.nextSibling.style.marginTop = '0px';
+ }
+
return markerDiv;
};
diff --git a/war/js/reader.min.js b/war/js/reader.min.js
index 1a796b23..0f9ec87d 100644
--- a/war/js/reader.min.js
+++ b/war/js/reader.min.js
@@ -184,7 +184,7 @@ f)+"\n"+t+"}":"{"+x.join(",")+"}";f=t;return l}}"function"!==typeof Date.prototy
e=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,f,g,h={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},k;"function"!==typeof JSON.stringify&&(JSON.stringify=function(a,b,d){var e;g=f="";if("number"===typeof d)for(e=0;e<d;e+=1)g+=" ";else"string"===typeof d&&(g=d);if((k=b)&&"function"!==typeof b&&("object"!==typeof b||"number"!==typeof b.length))throw Error("JSON.stringify");return c("",{"":a})});
"function"!==typeof JSON.parse&&(JSON.parse=function(a,b){function c(a,d){var e,f,g=a[d];if(g&&"object"===typeof g)for(e in g)Object.prototype.hasOwnProperty.call(g,e)&&(f=c(g,e),void 0!==f?g[e]=f:delete g[e]);return b.call(a,d,g)}var e;a=""+a;d.lastIndex=0;d.test(a)&&(a=a.replace(d,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),"function"===typeof b?c({"":e},""):e;throw new SyntaxError("JSON.parse");})})();var mxBasePath="https://www.draw.io/mxgraph/",mxLoadStylesheets=mxLoadResources=!1,mxLanguage="en";window.urlParams=window.urlParams||{};window.MAX_REQUEST_SIZE=window.MAX_REQUEST_SIZE||10485760;window.MAX_AREA=window.MAX_AREA||225E6;window.EXPORT_URL=window.EXPORT_URL||"/export";window.SAVE_URL=window.SAVE_URL||"/save";window.OPEN_URL=window.OPEN_URL||"/open";window.RESOURCES_PATH=window.RESOURCES_PATH||"resources";window.RESOURCE_BASE=window.RESOURCE_BASE||window.RESOURCES_PATH+"/grapheditor";window.STENCIL_PATH=window.STENCIL_PATH||"stencils";window.IMAGE_PATH=window.IMAGE_PATH||"images";
-window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"6.3.6",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
+window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"6.4.1",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
0>navigator.userAgent.indexOf("Edge/"),IS_OP:0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("OPR/"),IS_OT:0<=navigator.userAgent.indexOf("Presto/")&&0>navigator.userAgent.indexOf("Presto/2.4.")&&0>navigator.userAgent.indexOf("Presto/2.3.")&&0>navigator.userAgent.indexOf("Presto/2.2.")&&0>navigator.userAgent.indexOf("Presto/2.1.")&&0>navigator.userAgent.indexOf("Presto/2.0.")&&0>navigator.userAgent.indexOf("Presto/1."),IS_SF:0<=navigator.userAgent.indexOf("AppleWebKit/")&&
0>navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_IOS:navigator.userAgent.match(/(iPad|iPhone|iPod)/g)?!0:!1,IS_GC:0<=navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_CHROMEAPP:null!=window.chrome&&null!=chrome.app&&null!=chrome.app.runtime,IS_FF:0<=navigator.userAgent.indexOf("Firefox/"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&0>navigator.userAgent.indexOf("Firefox/1.")&&0>navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/")&&
0>navigator.userAgent.indexOf("Iceweasel/1.")&&0>navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/")&&0>navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/")&&0>navigator.userAgent.indexOf("Iceape/1."),IS_SVG:0<=navigator.userAgent.indexOf("Firefox/")||0<=navigator.userAgent.indexOf("Iceweasel/")||0<=navigator.userAgent.indexOf("Seamonkey/")||0<=navigator.userAgent.indexOf("Iceape/")||0<=navigator.userAgent.indexOf("Galeon/")||
diff --git a/war/resources/dia_de.txt b/war/resources/dia_de.txt
index a9413499..1b044748 100644
--- a/war/resources/dia_de.txt
+++ b/war/resources/dia_de.txt
@@ -423,7 +423,7 @@ noFiles=Keine Dateien
noFileSelected=Keine Datei ausgewählt
noLibraries=Keine Bibliotheken gefunden
noMoreResults=Keine Weiteren Resultate
-none=Keine
+none=Ohne
noOtherViewers=Keine weiteren Betrachter
noPlugins=Keine Plugins
noPreview=Keine Vorschau
diff --git a/war/stencils.xml b/war/stencils.xml
index 3fe87d96..7f826539 100644
--- a/war/stencils.xml
+++ b/war/stencils.xml
@@ -168509,6 +168509,112 @@
</foreground>
</shape>
</shapes>
+<shapes name="mxgraph.gcp.product_cards">
+<shape aspect="variable" h="122.19" name="Close" strokewidth="inherit" w="121.43">
+ <connections/>
+ <foreground>
+ <path>
+ <move x="74.62" y="122.19"/>
+ <line x="74.62" y="109.96"/>
+ <line x="100.43" y="109.96"/>
+ <line x="32.44" y="41.96"/>
+ <line x="41.36" y="32.88"/>
+ <line x="109.06" y="101.18"/>
+ <line x="109.06" y="75.88"/>
+ <line x="121.43" y="75.88"/>
+ <line x="121.43" y="122.19"/>
+ <close/>
+ <move x="60.26" y="122.19"/>
+ <line x="11.61" y="122.19"/>
+ <curve x1="6.31" x2="0" x3="0" y1="122.19" y2="117.2" y3="111.44"/>
+ <line x="0" y="12.8"/>
+ <curve x1="0" x2="4.61" x3="13.39" y1="7.15" y2="0" y3="0"/>
+ <line x="109.29" y="0"/>
+ <curve x1="114.53" x2="121.43" x3="121.43" y1="0" y2="5.14" y3="11.46"/>
+ <line x="121.43" y="60.11"/>
+ <line x="109.06" y="60.11"/>
+ <line x="109.06" y="13.4"/>
+ <line x="12.05" y="13.4"/>
+ <line x="12.05" y="109.96"/>
+ <line x="60.26" y="109.96"/>
+ <close/>
+ </path>
+ <fillstroke/>
+ </foreground>
+</shape>
+<shape aspect="variable" h="98.49" name="Disk" strokewidth="inherit" w="121.9">
+ <connections/>
+ <foreground>
+ <path>
+ <move x="11.64" y="18.28"/>
+ <line x="24.19" y="18.28"/>
+ <line x="24.19" y="6.02"/>
+ <line x="11.64" y="6.02"/>
+ <close/>
+ <move x="0.0" y="24.01"/>
+ <line x="0.0" y="0.0"/>
+ <line x="121.9" y="0.0"/>
+ <line x="121.9" y="24.01"/>
+ <close/>
+ <move x="11.64" y="55.6"/>
+ <line x="24.19" y="55.6"/>
+ <line x="24.19" y="42.71"/>
+ <line x="11.64" y="42.71"/>
+ <close/>
+ <move x="0.0" y="61.18"/>
+ <line x="0.0" y="37.59"/>
+ <line x="121.9" y="37.59"/>
+ <line x="121.9" y="61.18"/>
+ <close/>
+ <move x="11.64" y="93.04"/>
+ <line x="24.19" y="93.04"/>
+ <line x="24.19" y="79.44"/>
+ <line x="11.64" y="79.44"/>
+ <close/>
+ <move x="0.0" y="98.49"/>
+ <line x="0.0" y="73.77"/>
+ <line x="121.9" y="73.77"/>
+ <line x="121.9" y="98.49"/>
+ <close/>
+ </path>
+ <fillstroke/>
+ </foreground>
+</shape>
+<shape aspect="variable" h="123.25" name="Standard Machine" strokewidth="inherit" w="122.48">
+ <connections/>
+ <foreground>
+ <path>
+ <move x="87.91" y="96.71"/>
+ <line x="102.86" y="96.71"/>
+ <line x="102.86" y="26.7"/>
+ <line x="74.15" y="26.7"/>
+ <line x="74.15" y="41.73"/>
+ <line x="87.91" y="41.73"/>
+ <close/>
+ <move x="19.32" y="96.71"/>
+ <line x="34.79" y="96.71"/>
+ <line x="34.79" y="41.73"/>
+ <line x="46.4" y="41.73"/>
+ <line x="46.4" y="96.71"/>
+ <line x="61.72" y="96.71"/>
+ <line x="61.72" y="42.48"/>
+ <curve x1="61.72" x2="56.68" x3="49.22" y1="33.67" y2="26.7" y3="26.7"/>
+ <line x="19.32" y="26.7"/>
+ <close/>
+ <move x="11.92" y="123.25"/>
+ <curve x1="5.49" x2="0.0" x3="0.0" y1="123.25" y2="116.63" y3="109.42"/>
+ <line x="0.0" y="11.66"/>
+ <curve x1="0.0" x2="7.14" x3="13.14" y1="6.98" y2="0.0" y3="0.0"/>
+ <line x="109.64" y="0.0"/>
+ <curve x1="115.46" x2="122.48" x3="122.48" y1="0.0" y2="5.16" y3="13.92"/>
+ <line x="122.48" y="111.66"/>
+ <curve x1="122.48" x2="116.9" x3="110.6" y1="117.33" y2="123.25" y3="123.25"/>
+ <close/>
+ </path>
+ <fillstroke/>
+ </foreground>
+</shape>
+</shapes>
<shapes name="mxgraph.gcp.storage_databases">
<shape aspect="variable" h="115.01" name="Cloud Bigtable" strokewidth="inherit" w="129.03">
<connections/>
diff --git a/war/stencils/gcp/product_cards.xml b/war/stencils/gcp/product_cards.xml
new file mode 100644
index 00000000..217c05c3
--- /dev/null
+++ b/war/stencils/gcp/product_cards.xml
@@ -0,0 +1,106 @@
+<shapes name="mxgraph.gcp.product_cards">
+<shape aspect="variable" h="122.19" name="Close" strokewidth="inherit" w="121.43">
+ <connections/>
+ <foreground>
+ <path>
+ <move x="74.62" y="122.19"/>
+ <line x="74.62" y="109.96"/>
+ <line x="100.43" y="109.96"/>
+ <line x="32.44" y="41.96"/>
+ <line x="41.36" y="32.88"/>
+ <line x="109.06" y="101.18"/>
+ <line x="109.06" y="75.88"/>
+ <line x="121.43" y="75.88"/>
+ <line x="121.43" y="122.19"/>
+ <close/>
+ <move x="60.26" y="122.19"/>
+ <line x="11.61" y="122.19"/>
+ <curve x1="6.31" x2="0" x3="0" y1="122.19" y2="117.2" y3="111.44"/>
+ <line x="0" y="12.8"/>
+ <curve x1="0" x2="4.61" x3="13.39" y1="7.15" y2="0" y3="0"/>
+ <line x="109.29" y="0"/>
+ <curve x1="114.53" x2="121.43" x3="121.43" y1="0" y2="5.14" y3="11.46"/>
+ <line x="121.43" y="60.11"/>
+ <line x="109.06" y="60.11"/>
+ <line x="109.06" y="13.4"/>
+ <line x="12.05" y="13.4"/>
+ <line x="12.05" y="109.96"/>
+ <line x="60.26" y="109.96"/>
+ <close/>
+ </path>
+ <fillstroke/>
+ </foreground>
+</shape>
+<shape aspect="variable" h="98.49" name="Disk" strokewidth="inherit" w="121.9">
+ <connections/>
+ <foreground>
+ <path>
+ <move x="11.64" y="18.28"/>
+ <line x="24.19" y="18.28"/>
+ <line x="24.19" y="6.02"/>
+ <line x="11.64" y="6.02"/>
+ <close/>
+ <move x="0.0" y="24.01"/>
+ <line x="0.0" y="0.0"/>
+ <line x="121.9" y="0.0"/>
+ <line x="121.9" y="24.01"/>
+ <close/>
+ <move x="11.64" y="55.6"/>
+ <line x="24.19" y="55.6"/>
+ <line x="24.19" y="42.71"/>
+ <line x="11.64" y="42.71"/>
+ <close/>
+ <move x="0.0" y="61.18"/>
+ <line x="0.0" y="37.59"/>
+ <line x="121.9" y="37.59"/>
+ <line x="121.9" y="61.18"/>
+ <close/>
+ <move x="11.64" y="93.04"/>
+ <line x="24.19" y="93.04"/>
+ <line x="24.19" y="79.44"/>
+ <line x="11.64" y="79.44"/>
+ <close/>
+ <move x="0.0" y="98.49"/>
+ <line x="0.0" y="73.77"/>
+ <line x="121.9" y="73.77"/>
+ <line x="121.9" y="98.49"/>
+ <close/>
+ </path>
+ <fillstroke/>
+ </foreground>
+</shape>
+<shape aspect="variable" h="123.25" name="Standard Machine" strokewidth="inherit" w="122.48">
+ <connections/>
+ <foreground>
+ <path>
+ <move x="87.91" y="96.71"/>
+ <line x="102.86" y="96.71"/>
+ <line x="102.86" y="26.7"/>
+ <line x="74.15" y="26.7"/>
+ <line x="74.15" y="41.73"/>
+ <line x="87.91" y="41.73"/>
+ <close/>
+ <move x="19.32" y="96.71"/>
+ <line x="34.79" y="96.71"/>
+ <line x="34.79" y="41.73"/>
+ <line x="46.4" y="41.73"/>
+ <line x="46.4" y="96.71"/>
+ <line x="61.72" y="96.71"/>
+ <line x="61.72" y="42.48"/>
+ <curve x1="61.72" x2="56.68" x3="49.22" y1="33.67" y2="26.7" y3="26.7"/>
+ <line x="19.32" y="26.7"/>
+ <close/>
+ <move x="11.92" y="123.25"/>
+ <curve x1="5.49" x2="0.0" x3="0.0" y1="123.25" y2="116.63" y3="109.42"/>
+ <line x="0.0" y="11.66"/>
+ <curve x1="0.0" x2="7.14" x3="13.14" y1="6.98" y2="0.0" y3="0.0"/>
+ <line x="109.64" y="0.0"/>
+ <curve x1="115.46" x2="122.48" x3="122.48" y1="0.0" y2="5.16" y3="13.92"/>
+ <line x="122.48" y="111.66"/>
+ <curve x1="122.48" x2="116.9" x3="110.6" y1="117.33" y2="123.25" y3="123.25"/>
+ <close/>
+ </path>
+ <fillstroke/>
+ </foreground>
+</shape>
+</shapes> \ No newline at end of file