From 7a7e167f663a809b80d76a1733a9e5d433bf4130 Mon Sep 17 00:00:00 2001
From: David Benson <david@jgraph.com>
Date: Sat, 31 Mar 2018 15:00:01 +0100
Subject: [PATCH] 8.5.2 release

---
 ChangeLog                                     |   10 +
 VERSION                                       |    2 +-
 .../mxgraph/io/gliffy/model/GliffyObject.java |   27 +-
 src/main/webapp/cache.manifest                |    2 +-
 .../connect/confluence/connect-dev.json       |  270 ----
 .../webapp/connect/confluence/connect.json    |    9 +
 .../connect/confluence/connectUtils-1-4-8.js  |  112 +-
 .../connect/confluence/macroEditor-1-4-8.html |    2 +-
 .../connect/confluence/macroEditor.html       |    2 +
 .../connect/confluence/viewer-1-4-8.html      |   72 +-
 src/main/webapp/connect/jira/connect-dev.json |   93 --
 src/main/webapp/images/logo-quip.png          |  Bin 0 -> 2628 bytes
 src/main/webapp/images/sidebar-basic.png      |  Bin 12642 -> 17205 bytes
 src/main/webapp/images/sidebar-flowchart.png  |  Bin 8569 -> 10059 bytes
 src/main/webapp/index.html                    |    6 +-
 src/main/webapp/js/app.min.js                 |  105 +-
 src/main/webapp/js/atlas-viewer.min.js        |   52 +-
 src/main/webapp/js/atlas.min.js               |  105 +-
 src/main/webapp/js/diagramly/Editor.js        |    1 +
 .../js/diagramly/sidebar/Sidebar-Basic.js     |   19 +-
 .../js/diagramly/sidebar/Sidebar-Flowchart.js |   17 +-
 src/main/webapp/js/embed-static.min.js        |    2 +-
 src/main/webapp/js/reader.min.js              |    2 +-
 src/main/webapp/js/shapes.min.js              |   73 +-
 src/main/webapp/js/viewer.min.js              |   52 +-
 src/main/webapp/plugins/cConf-1-4-8.js        |   22 +-
 src/main/webapp/shapes/mxBasic.js             | 1370 ++++++++++++++++-
 src/main/webapp/shapes/mxFlowchart.js         |   74 +
 28 files changed, 1932 insertions(+), 569 deletions(-)
 delete mode 100644 src/main/webapp/connect/confluence/connect-dev.json
 delete mode 100644 src/main/webapp/connect/jira/connect-dev.json
 create mode 100644 src/main/webapp/images/logo-quip.png
 create mode 100644 src/main/webapp/shapes/mxFlowchart.js

diff --git a/ChangeLog b/ChangeLog
index c9a91426b..e7854de3e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+31-MAR-2018: 8.5.2
+
+- Add mass gliffy import in Confluence Cloud
+- Fixes importing Gliffy sitemap stencils
+- Adds workaround for Confluence Cloud saveMacro problem
+
+28-MAR-2018: 8.5.1
+
+- Confluence Cloud integration improvements
+
 23-MAR-2018: 8.5.0
 
 - Adds shapes in Basic sidebar
diff --git a/VERSION b/VERSION
index 5eaed3b7c..bd0b85a9b 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-8.5.0
\ No newline at end of file
+8.5.2
\ No newline at end of file
diff --git a/src/main/java/com/mxgraph/io/gliffy/model/GliffyObject.java b/src/main/java/com/mxgraph/io/gliffy/model/GliffyObject.java
index 31fc60fc9..16b1f5b65 100644
--- a/src/main/java/com/mxgraph/io/gliffy/model/GliffyObject.java
+++ b/src/main/java/com/mxgraph/io/gliffy/model/GliffyObject.java
@@ -121,9 +121,32 @@ public class GliffyObject implements PostDeserializable
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.home");
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.gliffy");
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.form");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.shopping_cart");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.text");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.video");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.upload");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.slideshow");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.sitemap");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.settings");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.search");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.script");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.print");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.pricing");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.photo");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.map");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.login");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.game");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.gallery");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.download");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.document");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.chat");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.calendar");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.audio");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.profile");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.error");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.success");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.cloud");
 
-		/*GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.page");
-		*/
 
 		GROUP_SHAPES.add("com.gliffy.shape.basic.basic_v1.default.group");
 		GROUP_SHAPES.add("com.gliffy.shape.erd.erd_v1.default.entity_with_attributes");
diff --git a/src/main/webapp/cache.manifest b/src/main/webapp/cache.manifest
index 73a03cc8a..5460179ff 100644
--- a/src/main/webapp/cache.manifest
+++ b/src/main/webapp/cache.manifest
@@ -1,7 +1,7 @@
 CACHE MANIFEST
 
 # THIS FILE WAS GENERATED. DO NOT MODIFY!
-# 03/23/2018 11:58 AM
+# 03/31/2018 02:35 PM
 
 app.html
 index.html?offline=1
diff --git a/src/main/webapp/connect/confluence/connect-dev.json b/src/main/webapp/connect/confluence/connect-dev.json
deleted file mode 100644
index c4fa7ff5e..000000000
--- a/src/main/webapp/connect/confluence/connect-dev.json
+++ /dev/null
@@ -1,270 +0,0 @@
-{
-    "name": "Draw.io gaudenz",
-    "description": "Draw.io add-on for Confluence",
-    "key": "com.mxgraph.confluence.plugins.diagramly",
-    "baseUrl": "https://bb63834e.ngrok.io",
-    "vendor": 
-    {
-        "name": "JGraph Ltd.",
-        "url": "https://www.jgraph.com"
-    },
-    "links": {
-        "documentation": "https://support.draw.io/display/DFCC/draw.io+for+Confluence+Cloud"
-    },
-    "version": "1.4.8",
-    "authentication": 
-    {
-        "type": "none"
-    },
-    "modules": 
-    {
-		"generalPages": [
-            {
-                "key": "lightbox",
-                "url": "/connect/confluence/viewer-1-4-8.html?lightbox=1",
-                "name": {
-                    "value": "Lightbox"
-                }
-            },
-            {
-                "key": "customContentViewer",
-                "url": "/connect/confluence/viewer-1-4-8.html?custom=1&contentId={content.id}",
-                "name": {
-                    "value": "Draw.io Viewer"
-                }
-            }
-        ],
-        "customContent": [{
-                "key": "drawio-diagram",
-                "name": {
-                    "value": "Draw.io Diagrams"
-                },
-                "uiSupport": {
-                    "contentViewComponent": {
-                        "moduleKey": "customContentViewer"
-                    },
-                    "icons": {
-                        "item": {
-                            "url": "/images/drawlogo48.png"
-                        }
-                    }
-                },
-                "apiSupport": {
-                    "supportedContainerTypes": ["page", "comment", "space", "blogpost"],
-                    "supportedChildTypes": ["attachment"],
-                    "indexing": {
-                        "enabled": true
-                    }
-                }
-            }
-        ],
-        "dynamicContentMacros": 
-        [
-            {
-                "name": 
-                {
-                    "i18n": "drawioMacro",
-                    "value": "Draw.io Diagram"
-                },
-                "url": "/connect/confluence/viewer-1-4-8.html?ceoId=${page.id}&diagramName=${diagramName}&revision=${revision}&width=${width}&height=${height}&tbstyle=${tbstyle}&lbox=${lbox}&zoom=${zoom}&links=${links}&owningPageId=${pageId}",
-                "width": "100%",
-                "description": 
-                {
-                    "i18n": "description",
-                    "value": "Inserts a new Draw.io Diagram"
-                }, "icon": 
-                {
-		          "width": 128,
-		          "height": 128,
-		          "url": "/images/drawlogo128.png"
-		        },
-		        "categories": [
-		          "visuals"
-		        ],
-		        "outputType": "block",
-		        "featured": true,
-                "key": "drawio",
-			    "parameters": 
-			    [
-				    {
-				      "identifier": "diagramName",
-				      "name": 
-				      {
-				        "value": "Diagram name (do not change)"
-				      },
-				      "type": "string"
-				    },
-				    {
-				      "identifier": "autoSize",
-				      "name": 
-				      {
-				        "value": "automatic size"
-				      },
-				      "type": "boolean"
-				    },
-				    {
-				      "identifier": "PageId",
-				      "name": 
-				      {
-				        "value": "Parent page ID"
-				      },
-				      "type": "string"
-				    },
-				    {
-				      "identifier": "baseUrl",
-				      "name": 
-				      {
-				        "value": "Confluence Base URL"
-				      },
-				      "type": "string"
-				    },
-				    {
-				      "identifier": "width",
-				      "name": 
-				      {
-				        "value": "Diagram width"
-				      },
-				      "type": "string"
-				    },
-				    {
-				      "identifier": "height",
-				      "name": 
-				      {
-				        "value": "Diagram Height"
-				      },
-				      "type": "string"
-				    }
-  				],
-  				"editor": {
-				    "url": "/connect/confluence/macroEditor-1-4-8.html?ceoId=${page.id}&diagramName=${diagramName}",
-				    "width": "100%",
-				    "height": "100%",
-				    "editTitle":
-				    {
-				    	"value" : "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"
-				    },
-				    "insertTitle":
-				    {
-				    	"value" : "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"
-				    }
-				},
-				"imagePlaceholder": {
-				    "width": 500,
-				    "height": 300,
-				    "url": "/connectImage",
-				    "applyChrome": false
-				},
-				"renderModes": {
-		          "default": {
-		            "url": "/connectRender?pageId=${page.id}&diagramName=${diagramName}"
-		          }
-		        }
-            },
-            {
-                "name": 
-                {
-                    "i18n": "drawioMacro",
-                    "value": "Legacy macro - do not use"
-                },
-                "url": "/connect/confluence/viewer.html?ceoId=${page.id}&diagramName=${diagramName}&revision=${revision}&width=${width}&height=${height}",
-                "width": "100%",
-                "description": 
-                {
-                    "i18n": "description",
-                    "value": "Do not use"
-                }, "icon": 
-                {
-		          "width": 80,
-		          "height": 80,
-		          "url": "/images/stop-flat-icon-80.png"
-		        },
-		        "categories": [
-		          "visuals"
-		        ],
-		        "outputType": "block",
-		        "featured": false,
-                "key": "drawio-macro",
-			    "parameters": 
-			    [
-				    {
-				      "identifier": "diagramName",
-				      "name": 
-				      {
-				        "value": "Diagram name (do not change)"
-				      },
-				      "type": "string"
-				    },
-				    {
-				      "identifier": "autoSize",
-				      "name": 
-				      {
-				        "value": "automatic size"
-				      },
-				      "type": "boolean"
-				    },
-				    {
-				      "identifier": "PageId",
-				      "name": 
-				      {
-				        "value": "Parent page ID"
-				      },
-				      "type": "string"
-				    },
-				    {
-				      "identifier": "baseUrl",
-				      "name": 
-				      {
-				        "value": "Confluence Base URL"
-				      },
-				      "type": "string"
-				    },
-				    {
-				      "identifier": "width",
-				      "name": 
-				      {
-				        "value": "Diagram width"
-				      },
-				      "type": "string"
-				    },
-				    {
-				      "identifier": "height",
-				      "name": 
-				      {
-				        "value": "Diagram Height"
-				      },
-				      "type": "string"
-				    }
-  				],
-  				"editor": {
-				    "url": "/connect/confluence/macroEditor.html?ceoId=${page.id}&diagramName=${diagramName}",
-				    "editTitle": {
-				      "value": "Edit MarkDown",
-				      "i18n": "macro.md.edit"
-				    },
-				    "insertTitle": {
-				      "value": "Insert New MarkDown",
-				      "i18n": "macro.md.insert"
-				    },
-				    "width": "100%",
-				    "height": "100%"
-				},
-				"imagePlaceholder": {
-				    "width": 500,
-				    "height": 300,
-				    "url": "/connectImage",
-				    "applyChrome": true
-				},
-				"renderModes": {
-		          "default": {
-		            "url": "/connectRender?pageId=${page.id}&diagramName=${diagramName}&revision=${revision}"
-		          }
-		        }
-            }
-        ]
-    },
-    "scopes": [
-    "read",
-    "write",
-    "delete"
-  	]
-}
\ No newline at end of file
diff --git a/src/main/webapp/connect/confluence/connect.json b/src/main/webapp/connect/confluence/connect.json
index 4c698cece..2751c51d2 100644
--- a/src/main/webapp/connect/confluence/connect.json
+++ b/src/main/webapp/connect/confluence/connect.json
@@ -19,6 +19,15 @@
     },
     "modules": 
     {
+		"adminPages": [
+			{
+                "key": "gliffyImport",
+                "url": "/connect/confluence/admin.html",
+                "name": {
+                    "value": "Gliffy - draw.io Conversion"
+                }
+            }
+		],
 		"generalPages": [
             {
                 "key": "lightbox",
diff --git a/src/main/webapp/connect/confluence/connectUtils-1-4-8.js b/src/main/webapp/connect/confluence/connectUtils-1-4-8.js
index eec192639..4543d009c 100644
--- a/src/main/webapp/connect/confluence/connectUtils-1-4-8.js
+++ b/src/main/webapp/connect/confluence/connectUtils-1-4-8.js
@@ -1172,15 +1172,103 @@ AC.init = function(baseUrl, location, pageId, editor, diagramName, initialXml, d
 	});
 };
 
-AC.loadDiagram = function (pageId, diagramName, revision, success, error, owningPageId, tryRev1) {
+AC.loadDiagram = function (pageId, diagramName, revision, success, error, owningPageId, tryRev1, dontCheckVer) {
 	// TODO: Get binary
 	
-	AP.require('request', function(request) {
+	AP.require(['request', 'confluence'], function(request, confluence) {
+		//Confirm that the macro is in sync with the diagram
+		//Sometimes the diagram is saved but the macro is not updated
+		var attInfo = null;
+		var pageInfo = null;
+		
+		function confirmDiagramInSync()
+		{
+			if (attInfo == null || pageInfo == null) 
+				return;
+			
+			//TODO is this condition enough or we need to check timestamps also?
+			if (attInfo.version.number > revision 
+					&& (pageInfo.version.message == null || pageInfo.version.message.indexOf("Reverted") < 0)) 
+			{
+				AC.loadDiagram(pageId, diagramName, attInfo.version.number, success, error, owningPageId, tryRev1, true);
+				//Update the macro
+				//Custom Content version will be fixed on next save, this will not affect correctness 
+				confluence.getMacroData(function (macroData) 
+		    	{
+					if (macroData != null) 
+					{
+						confluence.saveMacro(
+						{
+							diagramName: macroData.diagramName,
+							revision: attInfo.version.number,
+							pageId: macroData.pageId,
+							contentId: macroData.contentId,
+							contentVer: macroData.contentVer,
+							baseUrl: macroData.baseUrl,
+							width: macroData.width,
+							height: macroData.height,
+							tbstyle: macroData.tbstyle,
+							links: macroData.links,
+							lbox: macroData.lbox != null ? macroData.lbox : '1',
+							zoom: macroData.zoom != null ? macroData.zoom : '1'
+						});
+					}
+		    	});
+			}
+		}
+		
+		//To avoid race we do the version check after loading the diagram in the macro 
+		var localSuccess = function()
+		{
+			success.apply(this, arguments);
+			
+			if (!dontCheckVer && revision != null)
+			{
+	            request({
+	                type: 'GET',
+	                url: '/rest/api/content/' + pageId + '?expand=version',
+	                contentType: 'application/json;charset=UTF-8',
+	                success: function (resp) 
+	                {
+	                	pageInfo = JSON.parse(resp);
+	                    
+	                	confirmDiagramInSync();
+	                },
+	                error: function (resp) 
+	                {
+	                    //Ignore
+	                }
+	            });
+	
+	            request({
+	                type: 'GET',
+	                url: '/rest/api/content/' + pageId + '/child/attachment?filename=' + 
+	                		encodeURIComponent(diagramName) + '&expand=version',
+	                contentType: 'application/json;charset=UTF-8',
+	                success: function (resp) 
+	                {
+	                	var tmp = JSON.parse(resp);
+	                    
+	                	if (tmp.results && tmp.results.length == 1)
+	                	{
+	                		attInfo = tmp.results[0];
+	                	}
+	                	
+	                	confirmDiagramInSync();
+	                },
+	                error: function (resp) 
+	                {
+	                    //Ignore
+	                }
+	            });
+			}
+		}
+		
 		request({
 			//TODO find out the ID of the page that actually holds the attachments because historical revisions do not have attachments
 			url: '/download/attachments/' + pageId + '/' + encodeURIComponent(diagramName) +
 				((revision != null) ? '?version=' + revision : ''),
-			success: success,
+			success: localSuccess,
 			error : function(resp) 
 			{
 				//When a page is copied, attachments are reset to version 1 while the revision parameter remains the same
@@ -1188,14 +1276,14 @@ AC.loadDiagram = function (pageId, diagramName, revision, success, error, owning
 				{
 					request({
 						url: '/download/attachments/' + pageId + '/' + encodeURIComponent(diagramName),
-						success: success,
+						success: localSuccess,
 						error : function(resp) { //If revesion 1 failed, then try the owningPageId
 							if (owningPageId && resp.status == 404)
 							{
 								request({
 									url: '/download/attachments/' + owningPageId + '/' + encodeURIComponent(diagramName)
 										+'?version=' + revision, //this version should exists in the original owning page
-									success: success,
+									success: localSuccess,
 									error : error
 								});
 							}
@@ -1206,7 +1294,7 @@ AC.loadDiagram = function (pageId, diagramName, revision, success, error, owning
 				{
 					request({
 						url: '/download/attachments/' + owningPageId + '/' + encodeURIComponent(diagramName),
-						success: success,
+						success: localSuccess,
 						error : error
 					});
 				}
@@ -1268,6 +1356,18 @@ AC.saveCustomContent = function(spaceKey, pageId, pageType, diagramName, revisio
                {
                    AC.saveCustomContent(spaceKey, pageId, pageType, diagramName, revision, null, null, success, error);
                }
+               //Sometimes the macro is not updated such that the version is not correct. The same happens when a page version is restored
+               else if (err.statusCode == 409 && err.message.indexOf("Current version is:") > 0)
+        	   {
+            	   //We will use the error message to detect the correct version instead of doing another request. 
+            	   //It should be safe as long as error messages are not translated or changed
+            	   var curContentVer = err.message.match(/\d+/);
+            	   
+            	   if (curContentVer != null)
+        		   {
+            		   AC.saveCustomContent(spaceKey, pageId, pageType, diagramName, revision, contentId, curContentVer[0], success, error);
+        		   }
+        	   }
                else
                {
                    error(resp);
diff --git a/src/main/webapp/connect/confluence/macroEditor-1-4-8.html b/src/main/webapp/connect/confluence/macroEditor-1-4-8.html
index b40b8b31a..8bf6ae5e8 100644
--- a/src/main/webapp/connect/confluence/macroEditor-1-4-8.html
+++ b/src/main/webapp/connect/confluence/macroEditor-1-4-8.html
@@ -38,7 +38,7 @@
 	
 	if (license != null && license == 'none')
 	{
-		if (xdm_e != null && (xdm_e == "https://drawio.atlassian.net" || xdm_e.indexOf('ngrok') > -1))
+		if (xdm_e != null && (xdm_e == "https://drawio.atlassian.net" || xdm_e.indexOf('ngrok') > -1 || xdm_e.indexOf('incura') > -1))
 		{
 			console.log("License status = ", license);
 		}
diff --git a/src/main/webapp/connect/confluence/macroEditor.html b/src/main/webapp/connect/confluence/macroEditor.html
index 4df633943..7c34c3355 100644
--- a/src/main/webapp/connect/confluence/macroEditor.html
+++ b/src/main/webapp/connect/confluence/macroEditor.html
@@ -34,6 +34,8 @@
 	var script = document.createElement('script');
 	script.setAttribute('data-options', 'resize:false;margin:false');
 	
+	alert("Unsupported draw.io version, please upgrade.");
+	
 	// Main
 	script.onload = function()
 	{
diff --git a/src/main/webapp/connect/confluence/viewer-1-4-8.html b/src/main/webapp/connect/confluence/viewer-1-4-8.html
index 7237be4fd..d01eeafd0 100644
--- a/src/main/webapp/connect/confluence/viewer-1-4-8.html
+++ b/src/main/webapp/connect/confluence/viewer-1-4-8.html
@@ -233,11 +233,19 @@ if (lang != null)
 										}
 										else
 										{
+											//In case we want to load another diagram
+											var oldContainer = document.getElementById("drawIODiagram");
+											
+											if (oldContainer != null)
+											{
+												oldContainer.parentNode.removeChild(oldContainer);
+											}
 											// LATER: Fix horizontal alignment ignored with 100% width of iframe
 											// LATER: Fix page scrolling on touch device if trigger event on diagram
 											// LATER: Hide toolbar after second container click for iOS
 											// LATER: Disable responsive resize while lightbox shows
 											var container = document.createElement('div');
+											container.id = "drawIODiagram";
 											container.style.cssText = 'position:absolute;box-sizing:border-box;' +
 												'max-width:100%;border:1px solid transparent;';
 											document.body.appendChild(container);
@@ -322,6 +330,68 @@ if (lang != null)
 											};
 
 										}
+										//Confirm that the macro is in sync with the diagram
+										//Sometimes the diagram is saved but the macro is not updated
+										var attInfo = null;
+										var pageInfo = null;
+										
+										function confirmDiagramInSync()
+										{
+											if (attInfo == null || pageInfo == null) 
+												return;
+											
+											var loadedVer = parseInt(revision);
+											
+											//TODO is this condition enough or we need to check timestamps also?
+											if (attInfo.version.number > loadedVer 
+													&& (pageInfo.version.message == null || pageInfo.version.message.indexOf("Reverted") < 0)) 
+											{
+												showDiagram(id, backupId, name, attInfo.version.number + '', page, links, {dontCheckVer: true});
+												//I think updating macro here is too risky since calling confluence.getMacroData returns null
+											}
+										}
+										
+										if (!retryParams.dontCheckVer && revision != null && revision.length > 0)
+										{
+						                    request({
+						                        type: 'GET',
+						                        url: '/rest/api/content/' + id + '?expand=version',
+						                        contentType: 'application/json;charset=UTF-8',
+						                        success: function (resp) 
+						                        {
+						                        	pageInfo = JSON.parse(resp);
+						                            
+						                        	confirmDiagramInSync();
+						                        },
+						                        error: function (resp) 
+						                        {
+						                            //Ignore
+						                        }
+						                    });
+	
+						                    request({
+						                        type: 'GET',
+						                        url: '/rest/api/content/' + id + '/child/attachment?filename=' + 
+						                        		encodeURIComponent(name) + '&expand=version',
+						                        contentType: 'application/json;charset=UTF-8',
+						                        success: function (resp) 
+						                        {
+						                        	var tmp = JSON.parse(resp);
+						                            
+						                        	if (tmp.results && tmp.results.length == 1)
+						                        	{
+						                        		attInfo = tmp.results[0];
+						                        	}
+						                        	
+						                        	confirmDiagramInSync();
+						                        },
+						                        error: function (resp) 
+						                        {
+						                            //Ignore
+						                        }
+						                    });
+										}
+										
 										//Saving the diagram to this page negates page linking feature!
 										//May be we should ask the user first or saving is not needed all together
 										/*if (retryParams.saveIt)
@@ -401,7 +471,7 @@ if (lang != null)
                             
                             var info = JSON.parse(decodeURIComponent(resp.body.storage.value));
                             
-                            showDiagram(info.pageId, info.pageId, info.diagramName, info.version, null, links);
+                            showDiagram(info.pageId, info.pageId, info.diagramName, info.version, null, links, {dontCheckVer: true}); //custom content can load old versions which will be overridden by version check
                         },
                         error: function (resp) 
                         {
diff --git a/src/main/webapp/connect/jira/connect-dev.json b/src/main/webapp/connect/jira/connect-dev.json
deleted file mode 100644
index 16c3f2772..000000000
--- a/src/main/webapp/connect/jira/connect-dev.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-     "name": "Draw.io gaudenz",
-     "description": "Draw.io add-on for JIRA",
-     "key": "com.mxgraph.jira.plugins.drawio.gaudenz",
-     "baseUrl": "https://0d961297.ngrok.io/",
-     "vendor": {
-         "name": "JGraph Ltd.",
-         "url": "https://www.jgraph.com"
-     },
-     "authentication": 
-     {
-         "type": "none"
-     },
-     "version": "1.0.4",
-     "scopes": 
-     [
-     	"READ",
-     	"WRITE",
-     	"DELETE"
-	 ],
-     "modules": 
-     {
-      "generalPages": 
-      [
-      	{
-			"url":"/connect/jira/editor2.html?issueId=${issue.id}",
-			"key":"drawioEditor",
-			"name":
-			{
-				"value":"Draw.io Editor"
-			},
-			"location":"hidden"
-		},
-		{
-			"url":"/connect/jira/fullScreenViewer2.html?issueId=${issue.id}",
-			"key":"drawioFullScreenViewer",
-			"name":
-			{
-				"value":"Draw.io Full Screen Viewer"
-			},
-			"location":"hidden"
-		}
-      ],
-	  "webItems": [
-	    {
-	      "location": "operations-attachments",
-	      "weight": 50,
-	      "key": "drawioEditorBlank",
-	      "url": "/connect/jira/editor2.html?issueId=${issue.id}",
-	      "name": {
-	        "value": "Add Draw.io Diagram"
-	      },
-	      "target": 
-	      {
-			"type":"dialog",
-			"options": 
-			{
-				"width":"100%",
-				"height":"100%",
-				"chrome":false
-			}
-		  }
-	    }, 
-	    {
-       	   "key": "drawioEditorDialog",
-	        "name": 
-	        {
-	            "value": "Draw.io Editor"
-	        },
-	        "url": "/connect/jira/editor2.html?issueId=${issue.id}",
-	        "location": "none",
-	        "context": "addon"
-	    }
-	  ],
-	  "webPanels": 
-	  [
-      {
-        "url": "/connect/jira/viewerPanel2.html?issueId=${issue.id}",
-        "location": "atl.jira.view.issue.right.context",
-        "layout": 
-        {
-          "width": "300px"
-        },
-        "weight": 50,
-        "key": "drawioViewerPanel",
-        "name": 
-        {
-          "value": "Draw.io Diagrams"
-        }
-      }
-    ] 
-	}
- }
\ No newline at end of file
diff --git a/src/main/webapp/images/logo-quip.png b/src/main/webapp/images/logo-quip.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d8986ae5608a0923f1931a7d694bfc7f5181f73
GIT binary patch
literal 2628
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

literal 0
HcmV?d00001

diff --git a/src/main/webapp/images/sidebar-basic.png b/src/main/webapp/images/sidebar-basic.png
index a7054dd77800174081f340d4461570df5c10ead5..3b2b363a3b7db1b2078af10db46051539258f5e2 100644
GIT binary patch
literal 17205
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

literal 12642
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
bttcPwUmTWh)}8-;N<hg=t4P&Jm<IhX9HH3&

diff --git a/src/main/webapp/images/sidebar-flowchart.png b/src/main/webapp/images/sidebar-flowchart.png
index 2ca3d991e761bbc15f2dc54a888758e84c5b800e..46ecf664a6339b6d5031286bfe30bb655d3aa0e5 100644
GIT binary patch
literal 10059
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
UrUvKzNgRxvw1QNngkj+S0VNo_s{jB1

literal 8569
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

diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html
index bfff74b7f..950766efd 100644
--- a/src/main/webapp/index.html
+++ b/src/main/webapp/index.html
@@ -397,10 +397,10 @@
 						width="26" height="20" src="images/youtube.png"/>Quick Start Video</a>
 			</td>
 			<td id="geFooterItem1" align="center" style="width:260px;">
-				<a id="geFooterLink1" title="#1 Rated Confluence Add-on" target="_blank"
-					href="https://about.draw.io/integrations/confluence-integration/">
+				<a id="geFooterLink1" title="draw.io for Quip" target="_blank"
+					href="https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000FH8dSUAT">
 					<img border="0" width="24" height="24" align="absmiddle" style="padding-right:10px;"
-						src="images/logo-confluence.png"/>#1 Rated Confluence App
+						src="images/logo-quip.png"/>Announcing draw.io for Quip
 				</a>
 			</td>
 		</tr>
diff --git a/src/main/webapp/js/app.min.js b/src/main/webapp/js/app.min.js
index 461ba6a6b..68899de88 100644
--- a/src/main/webapp/js/app.min.js
+++ b/src/main/webapp/js/app.min.js
@@ -3879,15 +3879,20 @@ this.createVertexTemplateEntry(a+"unidentified_code_object;",50,42.5,"","Unident
 120,60,"","Partial Rectangle"),this.createVertexTemplateEntry("shape=partialRectangle;whiteSpace=wrap;html=1;bottom=0;right=0;fillColor=none;",120,60,"","Partial Rectangle"),this.createVertexTemplateEntry("shape=partialRectangle;whiteSpace=wrap;html=1;top=0;left=0;fillColor=none;",120,60,"","Partial Rectangle"),this.createVertexTemplateEntry(a+"4_point_star_2;dx=0.8;",100,100,"","4 Point Star",null,null,this.getTagsForStencil("mxgraph.basic","4_point_star","").join(" ")),this.createVertexTemplateEntry(a+
 "6_point_star",100,90,"","6 Point Star",null,null,this.getTagsForStencil("mxgraph.basic","6_point_star","").join(" ")),this.createVertexTemplateEntry(a+"8_point_star",100,100,"","8 Point Star",null,null,this.getTagsForStencil("mxgraph.basic","8_point_star","").join(" ")),this.createVertexTemplateEntry(a+"banner",100,50,"","Banner",null,null,this.getTagsForStencil("mxgraph.basic","banner","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.cloud_callout",
 90,60,"","Cloud Callout",null,null,this.getTagsForStencil("mxgraph.basic","cloud_callout","").join(" ")),this.createVertexTemplateEntry(a+"cone",100,100,"","Cone",null,null,this.getTagsForStencil("mxgraph.basic","cone","").join(" ")),this.createVertexTemplateEntry(a+"cone2;dx=0.5;dy=0.9;",100,100,"","Cone (adjustable)",null,null,this.getTagsForStencil("mxgraph.basic","cone","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.document",100,100,"",
-"Document",null,null,this.getTagsForStencil("mxgraph.basic","document","").join(" ")),this.createVertexTemplateEntry(a+"drop",70,100,"","Drop",null,null,this.getTagsForStencil("mxgraph.basic","drop","").join(" ")),this.createVertexTemplateEntry(a+"flash",60,100,"","Flash",null,null,this.getTagsForStencil("mxgraph.basic","flash","").join(" ")),this.createVertexTemplateEntry(a+"half_circle",100,50,"","Half Circle",null,null,this.getTagsForStencil("mxgraph.basic","half_circle","").join(" ")),this.createVertexTemplateEntry(a+
-"heart",100,100,"","Heart",null,null,this.getTagsForStencil("mxgraph.basic","heart","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.isocube;isoAngle=15;",100,100,"","Isometric Cube",null,null,this.getTagsForStencil("mxgraph.basic","isometric cube","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.loud_callout",100,60,"","Loud Callout",null,null,this.getTagsForStencil("mxgraph.basic","loud_callout",
-"").join(" ")),this.createVertexTemplateEntry(a+"moon",75,100,"","Moon",null,null,this.getTagsForStencil("mxgraph.basic","moon","").join(" ")),this.createVertexTemplateEntry(a+"no_symbol",100,100,"","No Symbol",null,null,this.getTagsForStencil("mxgraph.basic","no_symbol","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.octagon2;align=center;verticalAlign=middle;dx=15;",100,100,"","Octagon",null,null,this.getTagsForStencil("mxgraph.basic","octagon",
-"").join(" ")),this.createVertexTemplateEntry(a+"orthogonal_triangle",100,70,"","Orthogonal Triangle",null,null,this.getTagsForStencil("mxgraph.basic","orthogonal_triangle","").join(" ")),this.createVertexTemplateEntry(a+"acute_triangle;dx=0.5;",100,70,"","Acute Triangle",null,null,this.getTagsForStencil("mxgraph.basic","acute_triangle","").join(" ")),this.createVertexTemplateEntry(a+"obtuse_triangle;dx=0.25;",100,70,"","Obtuse Triangle",null,null,this.getTagsForStencil("mxgraph.basic","obtuse_triangle",
-"").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.oval_callout",100,60,"","Oval Callout",null,null,this.getTagsForStencil("mxgraph.basic","oval_callout","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.pentagon",100,90,"","Pentagon",null,null,this.getTagsForStencil("mxgraph.basic","pentagon","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.pointed_oval",
-50,100,"","Pointed Oval",null,null,this.getTagsForStencil("mxgraph.basic","pointed oval","").join(" ")),this.createVertexTemplateEntry(a+"pyramid;dx1=0.4;dx2=0.6;dy1=0.9;dy2=0.8;",100,100,"","Pyramid",null,null,this.getTagsForStencil("mxgraph.basic","pyramid","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.rectCallout;dx=30;dy=15;boundedLbl=1;",100,60,"","Rectangular Callout",null,null,this.getTagsForStencil("mxgraph.basic","rectangular_callout",
-"").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.roundRectCallout;dx=30;dy=15;size=5;boundedLbl=1;",100,60,"","Rounded Rectangular Callout",null,null,this.getTagsForStencil("mxgraph.basic","rectangular_callout","").join(" ")),this.createVertexTemplateEntry(a+"smiley",100,100,"","Smiley",null,null,this.getTagsForStencil("mxgraph.basic","smiley","").join(" ")),this.createVertexTemplateEntry(a+"star",100,95,"","Star",null,null,this.getTagsForStencil("mxgraph.basic",
-"star","").join(" ")),this.createVertexTemplateEntry(a+"sun",100,100,"","Sun",null,null,this.getTagsForStencil("mxgraph.basic","sun","").join(" ")),this.createVertexTemplateEntry(a+"tick",85,100,"","Tick",null,null,this.getTagsForStencil("mxgraph.basic","tick","").join(" ")),this.createVertexTemplateEntry(a+"wave2;dy=0.3;",100,60,"","Wave",null,null,this.getTagsForStencil("mxgraph.basic","wave","").join(" ")),this.createVertexTemplateEntry(a+"x",100,100,"","X",null,null,this.getTagsForStencil("mxgraph.basic",
-"x","").join(" "))])}})();(function(){Sidebar.prototype.addBootstrapPalette=function(){var a=this,e=[this.addDataEntry("bootstrap button bar dark",800,40,"Button Bar (Dark)","5ZhRb5swEMc/DY+NDKaEvIZ2fdm0qpH27gUDVg2HjNuQfvod2EnJnGxRWqJUsRQJn332+ffnbBOPJmX7oFhd/ICUS4/eezRRANo8lW3CpfQCIlKP3nlBQPDnBd8OtPp9K6mZ4pU+xiEwDq9MvnBjMYZGr6U1FLrEsO58j86bgqWwwgrBSsqagqe2gi11179s824tk9+4gkbj40TxJUYyz4SUCUhQ/aA06EvnqBU8801LBRWOMl8VQvNFzZbdkCscBW02UK40bw8utjfZlT5wKLlWa+yyEqkuTI+YGCCk4CIvrFtobawx9Xzr+o4OHyy9/SSpQzKBsmbV+jSgQ16Wyl5U/wcPlR6An/XF2hfirfP1w48wD45gPg7y0EH+yKFGzGd5hUlfDunyF/asL11nJCyq/MmSoGQE9O0u9oESs5GUuHWUiMNPV8HKoOxbG7uSZNkpkpyMP/wnfuuwttvw5NZRY4NtqIYfGZvikmnxynfG2ieRnf8RBIa1nfyGkp3pb+LdESDLGq4diberOEr1yFH9l4AubKiaC931zph+/tTNP98fKQGnjhTh55/kF5eA0ZUnYOyovtAYdKPF8lITcKRk23fYjXXtmLnUuda4q1wZcxq5zKcjMd/sm8O7ngIkd+Jl76syj87J3HeYf4ccDT9f9HVRn9LRqGP1/WvfHAHDPwP+AA=="),
+"Document",null,null,this.getTagsForStencil("mxgraph.basic","document","").join(" ")),this.createVertexTemplateEntry(a+"donut;dx=25;",100,100,"","Donut",null,null,this.getTagsForStencil("mxgraph.basic","donut","").join(" ")),this.createVertexTemplateEntry(a+"drop",70,100,"","Drop",null,null,this.getTagsForStencil("mxgraph.basic","drop","").join(" ")),this.createVertexTemplateEntry(a+"flash",60,100,"","Flash",null,null,this.getTagsForStencil("mxgraph.basic","flash","").join(" ")),this.createVertexTemplateEntry(a+
+"half_circle",100,50,"","Half Circle",null,null,this.getTagsForStencil("mxgraph.basic","half_circle","").join(" ")),this.createVertexTemplateEntry(a+"heart",100,100,"","Heart",null,null,this.getTagsForStencil("mxgraph.basic","heart","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.isocube;isoAngle=15;",100,100,"","Isometric Cube",null,null,this.getTagsForStencil("mxgraph.basic","isometric cube","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.loud_callout",
+100,60,"","Loud Callout",null,null,this.getTagsForStencil("mxgraph.basic","loud_callout","").join(" ")),this.createVertexTemplateEntry(a+"moon",75,100,"","Moon",null,null,this.getTagsForStencil("mxgraph.basic","moon","").join(" ")),this.createVertexTemplateEntry(a+"no_symbol",100,100,"","No Symbol",null,null,this.getTagsForStencil("mxgraph.basic","no_symbol","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.octagon2;align=center;verticalAlign=middle;dx=15;",
+100,100,"","Octagon",null,null,this.getTagsForStencil("mxgraph.basic","octagon","").join(" ")),this.createVertexTemplateEntry(a+"orthogonal_triangle",100,70,"","Orthogonal Triangle",null,null,this.getTagsForStencil("mxgraph.basic","orthogonal_triangle","").join(" ")),this.createVertexTemplateEntry(a+"acute_triangle;dx=0.5;",100,70,"","Acute Triangle",null,null,this.getTagsForStencil("mxgraph.basic","acute_triangle","").join(" ")),this.createVertexTemplateEntry(a+"obtuse_triangle;dx=0.25;",100,70,
+"","Obtuse Triangle",null,null,this.getTagsForStencil("mxgraph.basic","obtuse_triangle","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.oval_callout",100,60,"","Oval Callout",null,null,this.getTagsForStencil("mxgraph.basic","oval_callout","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.pentagon",100,90,"","Pentagon",null,null,this.getTagsForStencil("mxgraph.basic","pentagon","").join(" ")),
+this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.pointed_oval",50,100,"","Pointed Oval",null,null,this.getTagsForStencil("mxgraph.basic","pointed oval","").join(" ")),this.createVertexTemplateEntry(a+"pyramid;dx1=0.4;dx2=0.6;dy1=0.9;dy2=0.8;",100,100,"","Pyramid",null,null,this.getTagsForStencil("mxgraph.basic","pyramid","").join(" ")),this.createVertexTemplateEntry(a+"diag_snip_rect;dx=6;",100,60,"","Diagonal Snip Rectangle",null,null,this.getTagsForStencil("mxgraph.basic",
+"diag_snip_rect","").join(" ")),this.createVertexTemplateEntry(a+"diag_round_rect;dx=6;",100,60,"","Diagonal Rounded Rectangle",null,null,this.getTagsForStencil("mxgraph.basic","diag_round_rect","").join(" ")),this.createVertexTemplateEntry(a+"corner_round_rect;dx=6;",100,60,"","Corner Rounded Rectangle",null,null,this.getTagsForStencil("mxgraph.basic","corner_round_rect","").join(" ")),this.createVertexTemplateEntry(a+"plaque;dx=6;",100,60,"","Plaque",null,null,this.getTagsForStencil("mxgraph.basic",
+"plaque","").join(" ")),this.createVertexTemplateEntry(a+"frame;dx=10;",100,60,"","Frame",null,null,this.getTagsForStencil("mxgraph.basic","frame","").join(" ")),this.createVertexTemplateEntry(a+"rounded_frame;dx=10;",100,60,"","Rounded Frame",null,null,this.getTagsForStencil("mxgraph.basic","rounded_frame","").join(" ")),this.createVertexTemplateEntry(a+"plaque_frame;dx=10;",100,60,"","Plaque Frame",null,null,this.getTagsForStencil("mxgraph.basic","plaque_frame","").join(" ")),this.createVertexTemplateEntry(a+
+"frame_corner;dx=10;",100,60,"","Frame Corner",null,null,this.getTagsForStencil("mxgraph.basic","frame_corner","").join(" ")),this.createVertexTemplateEntry(a+"diag_stripe;dx=10;",100,60,"","Diagonal Stripe",null,null,this.getTagsForStencil("mxgraph.basic","diag_stripe","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.rectCallout;dx=30;dy=15;boundedLbl=1;",100,60,"","Rectangular Callout",null,null,this.getTagsForStencil("mxgraph.basic","rectangular_callout",
+"").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.roundRectCallout;dx=30;dy=15;size=5;boundedLbl=1;",100,60,"","Rounded Rectangular Callout",null,null,this.getTagsForStencil("mxgraph.basic","rectangular_callout","").join(" ")),this.createVertexTemplateEntry(a+"layered_rect;dx=10;",100,60,"","Layered Rectangle",null,null,this.getTagsForStencil("mxgraph.basic","layered_rect","").join(" ")),this.createVertexTemplateEntry(a+"smiley",100,100,"","Smiley",
+null,null,this.getTagsForStencil("mxgraph.basic","smiley","").join(" ")),this.createVertexTemplateEntry(a+"star",100,95,"","Star",null,null,this.getTagsForStencil("mxgraph.basic","star","").join(" ")),this.createVertexTemplateEntry(a+"sun",100,100,"","Sun",null,null,this.getTagsForStencil("mxgraph.basic","sun","").join(" ")),this.createVertexTemplateEntry(a+"tick",85,100,"","Tick",null,null,this.getTagsForStencil("mxgraph.basic","tick","").join(" ")),this.createVertexTemplateEntry(a+"wave2;dy=0.3;",
+100,60,"","Wave",null,null,this.getTagsForStencil("mxgraph.basic","wave","").join(" ")),this.createVertexTemplateEntry("labelPosition=center;verticalLabelPosition=middle;html=1;strokeWidth=2;shape=mxgraph.basic.button;dx=10;",100,60,"Button","Button",null,null,this.getTagsForStencil("mxgraph.basic","button","").join(" ")),this.createVertexTemplateEntry("labelPosition=center;verticalLabelPosition=middle;html=1;strokeWidth=2;shape=mxgraph.basic.shaded_button;dx=10;fillColor=#E6E6E6;strokeColor=none;",
+100,60,"Button","Button (shaded)",null,null,this.getTagsForStencil("mxgraph.basic","button","").join(" ")),this.createVertexTemplateEntry(a+"x",100,100,"","X",null,null,this.getTagsForStencil("mxgraph.basic","x","").join(" ")),this.createVertexTemplateEntry(a+"pie;startAngle=0.2;endAngle=0.9;",100,100,"","Pie",null,null,this.getTagsForStencil("mxgraph.basic","pie","").join(" ")),this.createVertexTemplateEntry(a+"arc;startAngle=0.3;endAngle=0.1;",100,100,"","Arc",null,null,this.getTagsForStencil("mxgraph.basic",
+"arc","").join(" ")),this.createVertexTemplateEntry(a+"partConcEllipse;startAngle=0.25;endAngle=0.1;arcWidth=0.5;",100,100,"","Partial Concentric Ellipse",null,null,this.getTagsForStencil("mxgraph.basic","partConcEllipse","").join(" "))])}})();(function(){Sidebar.prototype.addBootstrapPalette=function(){var a=this,e=[this.addDataEntry("bootstrap button bar dark",800,40,"Button Bar (Dark)","5ZhRb5swEMc/DY+NDKaEvIZ2fdm0qpH27gUDVg2HjNuQfvod2EnJnGxRWqJUsRQJn332+ffnbBOPJmX7oFhd/ICUS4/eezRRANo8lW3CpfQCIlKP3nlBQPDnBd8OtPp9K6mZ4pU+xiEwDq9MvnBjMYZGr6U1FLrEsO58j86bgqWwwgrBSsqagqe2gi11179s824tk9+4gkbj40TxJUYyz4SUCUhQ/aA06EvnqBU8801LBRWOMl8VQvNFzZbdkCscBW02UK40bw8utjfZlT5wKLlWa+yyEqkuTI+YGCCk4CIvrFtobawx9Xzr+o4OHyy9/SSpQzKBsmbV+jSgQ16Wyl5U/wcPlR6An/XF2hfirfP1w48wD45gPg7y0EH+yKFGzGd5hUlfDunyF/asL11nJCyq/MmSoGQE9O0u9oESs5GUuHWUiMNPV8HKoOxbG7uSZNkpkpyMP/wnfuuwttvw5NZRY4NtqIYfGZvikmnxynfG2ieRnf8RBIa1nfyGkp3pb+LdESDLGq4diberOEr1yFH9l4AubKiaC931zph+/tTNP98fKQGnjhTh55/kF5eA0ZUnYOyovtAYdKPF8lITcKRk23fYjXXtmLnUuda4q1wZcxq5zKcjMd/sm8O7ngIkd+Jl76syj87J3HeYf4ccDT9f9HVRn9LRqGP1/WvfHAHDPwP+AA=="),
 this.addDataEntry("bootstrap button bar bright",800,40,"Button Bar (Bright)","5ZdRb5swEMc/DY9FBhNCXkPavmxStUh798IB1gxGxmvIPv0OcBKoSZetpYpUIyT77DP278+dwaFx0TwqVuVfZQLCofcOjZWUuq8VTQxCOD7hiUM3ju8TvB3/4UKv1/WSiiko9TUOfu/wzMQv6C29odYHYQy5LnBZG8+h6zpnidxjg2AjYXUOiWlgT9WOL5qs3Yv7A3dQa6y6Cna4knXKhYilkKqblKZhe7WOWsmfcOwpZYmzrPc517Ct2K6dco+zoM0sFJSG5uJmO5PZ6SPIArQ64JA9T3Tej4hID4TkwLPcuAXGxuq+nZ1cz+iwYuhNk6QWyVgWFSsP/wd0yMtQmUT1d/Cy1APwSVeMfct/t75e8Bbm/hXM50EeWMifQFaI+WNeYdJel3R5gX3VlXYwEuZl9s2QoGQG9M0Y+0CJ1UxKLCwlouDdVTAyKPPWRhOSpATLlZKkXXkL/uBV/MbhYNKwu7DUOGIbquGFvU2BYJo/w2iuKYnM858kx2WdHn5Hyejxd9F4BpmmNWhL4tMurlI9tFT/zmW7bFnWN5r1PjD8vKUdf543UwAuLSmC9z/Jby4Aw08egJGl+lbjomvNd7cagDMF29RhN9dnx8qmDlpjVvlkzGloM1/OxPyYN0fQmdrlruvOnecWU3nOpK6xUC+/r6fsTPCsRJuAVJ8PpC9da+PNeB6Fi3FGstOhRyfUo/+uHjbPf7B9Whv+4P4B"),
 this.addEntry("bootstrap button group vertical",function(){var d=new mxCell("",new mxGeometry(0,0,100,150),"html=1;shadow=0;dashed=0;shape=mxgraph.bootstrap.rrect;rSize=5;strokeColor=#dddddd;html=1;whiteSpace=wrap;fillColor=#ffffff;");d.vertex=!0;var b=new mxCell("Edit",new mxGeometry(0,0,100,30),"strokeColor=inherit;fillColor=inherit;gradientColor=inherit;html=1;shadow=0;dashed=0;shape=mxgraph.bootstrap.topButton;rSize=5;perimeter=none;whiteSpace=wrap;resizeWidth=1;");b.geometry.relative=!0;b.vertex=
 !0;d.insert(b);b=new mxCell("Create",new mxGeometry(0,0,100,30),"strokeColor=inherit;fillColor=inherit;gradientColor=inherit;html=1;shadow=0;dashed=0;shape=mxgraph.bootstrap.rect;perimeter=none;whiteSpace=wrap;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,30);b.vertex=!0;d.insert(b);var c=new mxCell("Delete",new mxGeometry(0,0,100,30),"strokeColor=inherit;fillColor=inherit;gradientColor=inherit;html=1;shadow=0;dashed=0;shape=mxgraph.bootstrap.rect;perimeter=none;whiteSpace=wrap;resizeWidth=1;");
@@ -4585,20 +4590,20 @@ function(){var e=new mxCell("",new mxGeometry(20,20,520,100),"shape=ellipse;shad
 new mxCell("",new mxGeometry(110,0,40,43),a+"office_chair;shadow=0;");g.vertex=!0;var k=new mxCell("",new mxGeometry(110,97,40,43),a+"office_chair;shadow=0;direction=west;");k.vertex=!0;var m=new mxCell("",new mxGeometry(170,0,40,43),a+"office_chair;shadow=0;");m.vertex=!0;var l=new mxCell("",new mxGeometry(170,97,40,43),a+"office_chair;shadow=0;direction=west;");l.vertex=!0;var r=new mxCell("",new mxGeometry(230,0,40,43),a+"office_chair;shadow=0;");r.vertex=!0;var n=new mxCell("",new mxGeometry(230,
 97,40,43),a+"office_chair;shadow=0;direction=west;");n.vertex=!0;var p=new mxCell("",new mxGeometry(290,0,40,43),a+"office_chair;shadow=0;");p.vertex=!0;var q=new mxCell("",new mxGeometry(290,97,40,43),a+"office_chair;shadow=0;direction=west;");q.vertex=!0;var w=new mxCell("",new mxGeometry(350,0,40,43),a+"office_chair;shadow=0;");w.vertex=!0;var v=new mxCell("",new mxGeometry(350,97,40,43),a+"office_chair;shadow=0;direction=west;");v.vertex=!0;var y=new mxCell("",new mxGeometry(410,0,40,43),a+"office_chair;shadow=0;");
 y.vertex=!0;var x=new mxCell("",new mxGeometry(410,97,40,43),a+"office_chair;shadow=0;direction=west;");x.vertex=!0;var u=new mxCell("",new mxGeometry(470,0,40,43),a+"office_chair;shadow=0;");u.vertex=!0;var t=new mxCell("",new mxGeometry(470,97,40,43),a+"office_chair;shadow=0;direction=west;");t.vertex=!0;return sb.createVertexTemplateFromCells([b,c,h,f,g,k,m,l,r,n,p,q,w,v,y,x,u,t,e],560,140,"Conference table")})];this.addPalette("floorplan",mxResources.get("floorplans"),!1,mxUtils.bind(this,function(a){for(var b=
-0;b<e.length;b++)a.appendChild(e[b](a))}))}})();(function(){Sidebar.prototype.addFlowchartPalette=function(){var a=mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;html=1;strokeWidth=2;shape=mxgraph.flowchart.";this.addPaletteFunctions("flowchart",mxResources.get("flowchart"),!1,[this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;",50,100,"","Annotation",null,null,this.getTagsForStencil("mxgraph.flowchart","annotation_1","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_2;align=left;",
-50,100,"","Annotation",null,null,this.getTagsForStencil("mxgraph.flowchart","annotation_2","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.card;whiteSpace=wrap;",100,60,"","Card",null,null,this.getTagsForStencil("mxgraph.flowchart","card","").join(" ")),this.createVertexTemplateEntry(a+"collate;",100,100,"","Collate",null,null,this.getTagsForStencil("mxgraph.flowchart","collate","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.data;whiteSpace=wrap;",
-100,60,"","Data",null,null,this.getTagsForStencil("mxgraph.flowchart","data","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.database;whiteSpace=wrap;",60,60,"","Database",null,null,this.getTagsForStencil("mxgraph.flowchart","database","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.decision;whiteSpace=wrap;",100,100,"","Decision",null,null,this.getTagsForStencil("mxgraph.flowchart","decision","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.delay;whiteSpace=wrap;",
-100,60,"","Delay",null,null,this.getTagsForStencil("mxgraph.flowchart","delay","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.direct_data;whiteSpace=wrap;",100,60,"","Direct Data",null,null,this.getTagsForStencil("mxgraph.flowchart","direct_data","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.display;whiteSpace=wrap;",100,60,"","Display",null,null,this.getTagsForStencil("mxgraph.flowchart","display","").join(" ")),
-this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.document;whiteSpace=wrap;",100,60,"","Document",null,null,this.getTagsForStencil("mxgraph.flowchart","document","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.extract_or_measurement;whiteSpace=wrap;",95,60,"","Extract or Measurement",null,null,this.getTagsForStencil("mxgraph.flowchart","extract_or_measurement","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.internal_storage;whiteSpace=wrap;",
-70,70,"","Internal Storage",null,null,this.getTagsForStencil("mxgraph.flowchart","internal_storage","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.loop_limit;whiteSpace=wrap;",100,60,"","Loop Limit",null,null,this.getTagsForStencil("mxgraph.flowchart","loop_limit","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.manual_input;whiteSpace=wrap;",100,60,"","Manual Input",null,null,this.getTagsForStencil("mxgraph.flowchart",
-"manual_input","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.manual_operation;whiteSpace=wrap;",100,60,"","Manual Operation",null,null,this.getTagsForStencil("mxgraph.flowchart","manual_operation","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.merge_or_storage;whiteSpace=wrap;",95,60,"","Merge or Storage",null,null,this.getTagsForStencil("mxgraph.flowchart","merge_or_storage","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.multi-document;whiteSpace=wrap;",
-88,60,"","Multi-Document",null,null,this.getTagsForStencil("mxgraph.flowchart","multi-document","").join(" ")),this.createVertexTemplateEntry(a+"off-page_reference;",60,60,"","Off-Page Reference",null,null,this.getTagsForStencil("mxgraph.flowchart","off-page_reference","").join(" ")),this.createVertexTemplateEntry(a+"on-page_reference;",60,60,"","On-Page Reference",null,null,this.getTagsForStencil("mxgraph.flowchart","on-page_reference","").join(" ")),this.createVertexTemplateEntry(a+"summing_function;",
-70,70,"","Or",null,null,this.getTagsForStencil("mxgraph.flowchart","summing_function","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.paper_tape;whiteSpace=wrap;",100,65,"","Paper Tape",null,null,this.getTagsForStencil("mxgraph.flowchart","paper_tape","").join(" ")),this.createVertexTemplateEntry(a+"parallel_mode;",95,40,"","Parallel Mode",null,null,this.getTagsForStencil("mxgraph.flowchart","parallel_mode","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.predefined_process;whiteSpace=wrap;",
-100,60,"","Predefined Process",null,null,this.getTagsForStencil("mxgraph.flowchart","predefined_process","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.preparation;whiteSpace=wrap;",100,60,"","Preparation",null,null,this.getTagsForStencil("mxgraph.flowchart","preparation","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.process;whiteSpace=wrap;",100,100,"","Process",null,null,this.getTagsForStencil("mxgraph.flowchart",
-"process","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.sequential_data;whiteSpace=wrap;",100,100,"","Sequential Data",null,null,this.getTagsForStencil("mxgraph.flowchart","sequential_data","").join(" ")),this.createVertexTemplateEntry(a+"sort;",100,100,"","Sort",null,null,this.getTagsForStencil("mxgraph.flowchart","sort","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.start_1;whiteSpace=wrap;",100,60,"","Start",
-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.addGoogleCloudPlatformCardsPalette=function(){var a=[this.addDataEntry("gcp google cloud platform cardproduct",170,55,"Product Card","rZRdb4MgFIZ/DZczKq11l539uFqyZBe7XIgclQzFIG3tfv1AsNXpsi4dxggv5+DxeQWEk7LdS1IXz4ICR3iLcCKFULZXtglwjkKfUYQ3KAx9faNw98Ns0M36NZFQqVsSQptwJPwAVrFCo87cCZQ0BZhwH+GnQpW6xk2gu42S4gMSwYXsAjHtmp7JGOfpVc+6pvVcEsp0YX1OJSowCxWEitNo1TdGVeEUVyFIBe2PX9lJ7hP3IEpQ8qxDTm4dE7GyJPwCWF64tOXSaqSx4/ySemWmOw7bPEJ8B8KC1CakbHPzB3h5WnupKOuDgv75DlXOOkyG6oD2Aser3WaGqpmLYrxdTzxyvDU39Re24a9scexFj8MWTVHjhedgS+BEsSOMXjjngHvni2C6lNDvK3Q+nsfDfgGRZQ2oiYGXwm/ydDHxNLF2aHFrDfnusSaojEuiUq/s04gBduOBM7FvLq0TzvJKaxwyk2YsYCnhayeXjFL+j2Y5WH7vwXBjBDMbwx0b93oVjb16CML7zdLD6/low4fH5xc="),
+0;b<e.length;b++)a.appendChild(e[b](a))}))}})();(function(){Sidebar.prototype.addFlowchartPalette=function(){var a=mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;html=1;strokeWidth=2;shape=mxgraph.flowchart.",e=mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;html=1;strokeWidth=2;shape=";this.addPaletteFunctions("flowchart",mxResources.get("flowchart"),!1,[this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;",
+50,100,"","Annotation",null,null,this.getTagsForStencil("mxgraph.flowchart","annotation_1","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_2;align=left;",50,100,"","Annotation",null,null,this.getTagsForStencil("mxgraph.flowchart","annotation_2","").join(" ")),this.createVertexTemplateEntry(e+"card;whiteSpace=wrap;size=20;arcSize=12;",100,60,"","Card",null,null,this.getTagsForStencil("mxgraph.flowchart","card","").join(" ")),this.createVertexTemplateEntry(a+
+"collate;",100,100,"","Collate",null,null,this.getTagsForStencil("mxgraph.flowchart","collate","").join(" ")),this.createVertexTemplateEntry(e+"parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;rounded=1;arcSize=12;size=0.23;",100,60,"","Data",null,null,this.getTagsForStencil("mxgraph.flowchart","data","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.database;whiteSpace=wrap;",60,60,"","Database",null,null,this.getTagsForStencil("mxgraph.flowchart",
+"database","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.decision;whiteSpace=wrap;",100,100,"","Decision",null,null,this.getTagsForStencil("mxgraph.flowchart","decision","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.delay;whiteSpace=wrap;",100,60,"","Delay",null,null,this.getTagsForStencil("mxgraph.flowchart","delay","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.direct_data;whiteSpace=wrap;",
+100,60,"","Direct Data",null,null,this.getTagsForStencil("mxgraph.flowchart","direct_data","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.display;whiteSpace=wrap;",100,60,"","Display",null,null,this.getTagsForStencil("mxgraph.flowchart","display","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.document2;whiteSpace=wrap;size=0.25;",100,60,"","Document",null,null,this.getTagsForStencil("mxgraph.flowchart","document",
+"").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.extract_or_measurement;whiteSpace=wrap;",95,60,"","Extract or Measurement",null,null,this.getTagsForStencil("mxgraph.flowchart","extract_or_measurement","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.internal_storage;whiteSpace=wrap;",70,70,"","Internal Storage",null,null,this.getTagsForStencil("mxgraph.flowchart","internal_storage","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.loop_limit;whiteSpace=wrap;",
+100,60,"","Loop Limit",null,null,this.getTagsForStencil("mxgraph.flowchart","loop_limit","").join(" ")),this.createVertexTemplateEntry(e+"manualInput;whiteSpace=wrap;rounded=1;size=26;arcSize=11;",100,60,"","Manual Input",null,null,this.getTagsForStencil("mxgraph.flowchart","manual_input","").join(" ")),this.createVertexTemplateEntry(e+"trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;size=0.23;arcSize=10;flipV=1;",100,60,"","Manual Operation",null,null,this.getTagsForStencil("mxgraph.flowchart",
+"manual_operation","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.merge_or_storage;whiteSpace=wrap;",95,60,"","Merge or Storage",null,null,this.getTagsForStencil("mxgraph.flowchart","merge_or_storage","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.multi-document;whiteSpace=wrap;",88,60,"","Multi-Document",null,null,this.getTagsForStencil("mxgraph.flowchart","multi-document","").join(" ")),this.createVertexTemplateEntry(e+
+"offPageConnector;rounded=0;size=0.5;",60,60,"","Off-Page Reference",null,null,this.getTagsForStencil("mxgraph.flowchart","off-page_reference","").join(" ")),this.createVertexTemplateEntry(a+"on-page_reference;",60,60,"","On-Page Reference",null,null,this.getTagsForStencil("mxgraph.flowchart","on-page_reference","").join(" ")),this.createVertexTemplateEntry(a+"summing_function;",70,70,"","Or",null,null,this.getTagsForStencil("mxgraph.flowchart","summing_function","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.paper_tape;whiteSpace=wrap;",
+100,65,"","Paper Tape",null,null,this.getTagsForStencil("mxgraph.flowchart","paper_tape","").join(" ")),this.createVertexTemplateEntry(a+"parallel_mode;",95,40,"","Parallel Mode",null,null,this.getTagsForStencil("mxgraph.flowchart","parallel_mode","").join(" ")),this.createVertexTemplateEntry(e+"process;whiteSpace=wrap;rounded=1;size=0.14;arcSize=6;",100,60,"","Predefined Process",null,null,this.getTagsForStencil("mxgraph.flowchart","predefined_process","").join(" ")),this.createVertexTemplateEntry(e+
+"hexagon;perimeter=hexagonPerimeter2;arcSize=6;size=0.27;",100,60,"","Preparation",null,null,this.getTagsForStencil("mxgraph.flowchart","preparation","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.process;whiteSpace=wrap;",100,100,"","Process",null,null,this.getTagsForStencil("mxgraph.flowchart","process","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.sequential_data;whiteSpace=wrap;",100,100,"","Sequential Data",
+null,null,this.getTagsForStencil("mxgraph.flowchart","sequential_data","").join(" ")),this.createVertexTemplateEntry(a+"sort;",100,100,"","Sort",null,null,this.getTagsForStencil("mxgraph.flowchart","sort","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.start_1;whiteSpace=wrap;",100,60,"","Start",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.addGoogleCloudPlatformCardsPalette=function(){var a=[this.addDataEntry("gcp google cloud platform cardproduct",170,55,"Product Card","rZRdb4MgFIZ/DZczKq11l539uFqyZBe7XIgclQzFIG3tfv1AsNXpsi4dxggv5+DxeQWEk7LdS1IXz4ICR3iLcCKFULZXtglwjkKfUYQ3KAx9faNw98Ns0M36NZFQqVsSQptwJPwAVrFCo87cCZQ0BZhwH+GnQpW6xk2gu42S4gMSwYXsAjHtmp7JGOfpVc+6pvVcEsp0YX1OJSowCxWEitNo1TdGVeEUVyFIBe2PX9lJ7hP3IEpQ8qxDTm4dE7GyJPwCWF64tOXSaqSx4/ySemWmOw7bPEJ8B8KC1CakbHPzB3h5WnupKOuDgv75DlXOOkyG6oD2Aser3WaGqpmLYrxdTzxyvDU39Re24a9scexFj8MWTVHjhedgS+BEsSOMXjjngHvni2C6lNDvK3Q+nsfDfgGRZQ2oiYGXwm/ydDHxNLF2aHFrDfnusSaojEuiUq/s04gBduOBM7FvLq0TzvJKaxwyk2YsYCnhayeXjFL+j2Y5WH7vwXBjBDMbwx0b93oVjb16CML7zdLD6/low4fH5xc="),
 this.addDataEntry("gcp google cloud platform cardproduct",190,55,"Product Card","5ZVdb4MgFIZ/jZczVlpnLzv7cbVkyS52uRA5KimKQdrqfv1AsNVos27droYxwss5eHwfUQdFeb0TuMyeOQHmoI2DIsG5NL28joAxx/cocdDa8X1PnY6/vTI7a2e9Egso5C0Jvkk4YnYAoxihkg2zAsFVBjrcc9BTJnNV43qmupUUfA8RZ1y0gYi0Tc0klLH4oidtU3oqMKGqsC6n4AXohTJM+Gmw6hslMrOKrRCEhPrqU7aSfcQd8BykaFTIya6jI5bGCS8DmmY2bbEwGq7MOD2nXjxTHWvbtIXoDgszXOqQvE71G+CmcenGPC8PErrrOxQpbW3SrvbcnqPwcbuecFXPBSHarEaMrN/KN/kdb/0vvUWhGyz7LRhbjeauNVsAw5IeYXDDKQL2ni+cqlJ8r6vQcmyGw24BniQVyBHAc+E3MZ2PmK4KzBpJ40rJTzjeQ0FGmJWJUoPihXylH1qcITvuw2mb0jGjaaE0BolO0xRojNnKyjklhP0iL+uX12Ho7w00sTfsl+NeXMEQ14P/F7wWI16R2T5K3JgN9DNYoaePfwfrHjhqePl/mfD+7+0T"),
 this.addDataEntry("gcp google cloud platform cardproduct",190,110,"Product Card","5ZddT4MwFIZ/DZcujG7ILif7uDIx8cJL09ADNBZKSlXw19vS4iCwOJ0at3VZ1r49p5T3oTvBQWFWbQUu0ltOgDlo7aBQcC5NL6tCYMzxXEoctHI8z1Vfx9vsmZ02s26BBeTykATPJLxg9gxGMUIpa2YFgssUdLjroJtUZmqPq6nqllLwJwg546IJRKRpaiamjEU7PW6a0hOBCVUba3NynoNeKMWEv/ZWfaBEplaxOwQhodp7l41kb3ELPAMpahXyatfREQvjhJsCTVKbNp8bDZdmnHyk7jxTHWvbuIXoCAtTXOiQrEr0EzBJomIS8ax4ltD+PkKe0MYm7WrH7RkKrjerEVf1nB+g9XLAyPqtfJNf8db71FsUTPxFt/lDq9FsYs0WwLCkL9C74BgBe807TtVWPLfdoeVY94ftAjyOS5ADgB8bP4jpbMB0mWNWSxqVSr7B0RPkZIBZmSg1KJ7Le/qmxSmy4y6cpikdM5rkSmMQ6zRNgUaYLa2cUULYD/Kyfrkthu7ZQCNnw/5zHIvL7+O68n6D13zAKzTHR4lrc4C+Bytw9efiYP0oHP+8a0zdLyV/UXKuz73k+JdXcoJTLjl7eJ1zyVmcbMn5n7COgaOGu1cmE959o3oH"),
 this.addDataEntry("gcp google cloud platform cardexpanded product",190,80,"Expanded Product Card","5ZZdb4MgFIZ/jbdGpbXusrMf2UWTJbvY5ULkKGQIBunW7tcPBPsR26zZ5s1G0xRezkF8Xjw1QHm9Wyvc0I0kwAO0DFCupNSuV+9y4DxIIkYCtAiSJDLfIFldmY272ajBCoS+JSFxCW+Yb8EpTmj1nnuB4JaCDY8CdE91bfa4iE231Uq+Qi65VF0gIl0zMyXjvDjqZdeMXilMmNlYnyOkALsQxUS+n636zIimXvE7BKVhd/UuO8nf4hpkDVrtTci7X8dG3DkSEQVWUZ+WeQ23blwdUo/MTMdju4wQ/QAhxY0NqXeVPQFhVTRhIetmq6H/fQFRsQ6TpXpCe4Ky2WpxgaqdSzO0nA888rxvApp8CRRlYXp32tIhXzQJp05VwLFmb3B2wUvY/TUfJTNbSaJ+h96o/fmwX0CWZQt64Nph4zcZORkYeY91QY30qGQBbctENbDWMNTWHCn0E/uwYoz8+NSQrhkdc1YJo3EobZo1gRWYz71cM0L4L3oUowuH3peEn1qSnluSjeDIdOBI7p4KIy7dc/E9P7LIfv60H6MYkn5d6/qaxl3Vuv4vMSbSeBSkkzGQzgZIN1uuWcPtIX8QrcbC1J5bznnyL+vO9BdMMcPjK5cLP30j+wQ="),
@@ -6824,33 +6829,33 @@ k.setAttribute("in","blur");k.setAttribute("dx",this.svgShadowSize);k.setAttribu
 d.createElement("feComposite");k.setAttribute("in","offsetColor");k.setAttribute("in2","offsetBlur");k.setAttribute("operator","in");k.setAttribute("result","offsetBlur");g.appendChild(k);k=null!=d.createElementNS?d.createElementNS(mxConstants.NS_SVG,"feBlend"):d.createElement("feBlend");k.setAttribute("in","SourceGraphic");k.setAttribute("in2","offsetBlur");g.appendChild(k);k=a.getElementsByTagName("defs");0==k.length?(d=null!=d.createElementNS?d.createElementNS(mxConstants.NS_SVG,"defs"):d.createElement("defs"),
 null!=a.firstChild?a.insertBefore(d,a.firstChild):a.appendChild(d)):d=k[0];d.appendChild(g);c||((b||a.getElementsByTagName("g")[0]).setAttribute("filter","url(#"+this.shadowId+")"),isNaN(parseInt(a.getAttribute("width")))||(a.setAttribute("width",parseInt(a.getAttribute("width"))+6),a.setAttribute("height",parseInt(a.getAttribute("height"))+6)));return g};Graph.prototype.setShadowVisible=function(a,b){mxClient.IS_SVG&&(b=null!=b?b:!0,(this.shadowVisible=a)?this.view.getDrawPane().setAttribute("filter",
 "url(#"+this.shadowId+")"):this.view.getDrawPane().removeAttribute("filter"),b&&this.fireEvent(new mxEventObject("shadowVisibleChanged")))};Graph.prototype.selectUnlockedLayer=function(){if(null==this.defaultParent){var a=this.model.getChildCount(this.model.root),b,c=0;do b=this.model.getChildAt(this.model.root,c);while(c++<a&&"1"==mxUtils.getValue(this.getCellStyle(b),"locked","0"));null!=b&&this.setDefaultParent(b)}};mxStencilRegistry.libraries.mockup=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];
-mxStencilRegistry.libraries.arrows2=[SHAPES_PATH+"/mxArrows.js"];mxStencilRegistry.libraries.atlassian=[STENCIL_PATH+"/atlassian.xml"];mxStencilRegistry.libraries.bpmn=[SHAPES_PATH+"/bpmn/mxBpmnShape2.js",STENCIL_PATH+"/bpmn.xml"];mxStencilRegistry.libraries.er=[SHAPES_PATH+"/er/mxER.js"];mxStencilRegistry.libraries.ios=[SHAPES_PATH+"/mockup/mxMockupiOS.js"];mxStencilRegistry.libraries.rackGeneral=[SHAPES_PATH+"/rack/mxRack.js",STENCIL_PATH+"/rack/general.xml"];mxStencilRegistry.libraries.rackF5=
-[STENCIL_PATH+"/rack/f5.xml"];mxStencilRegistry.libraries.lean_mapping=[SHAPES_PATH+"/mxLeanMap.js",STENCIL_PATH+"/lean_mapping.xml"];mxStencilRegistry.libraries.basic=[SHAPES_PATH+"/mxBasic.js",STENCIL_PATH+"/basic.xml"];mxStencilRegistry.libraries.ios7icons=[STENCIL_PATH+"/ios7/icons.xml"];mxStencilRegistry.libraries.ios7ui=[SHAPES_PATH+"/ios7/mxIOS7Ui.js",STENCIL_PATH+"/ios7/misc.xml"];mxStencilRegistry.libraries.android=[SHAPES_PATH+"/mxAndroid.js",STENCIL_PATH+"/android/android.xml"];mxStencilRegistry.libraries["electrical/transmission"]=
-[SHAPES_PATH+"/mxElectrical.js",STENCIL_PATH+"/electrical/transmission.xml"];mxStencilRegistry.libraries["mockup/buttons"]=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];mxStencilRegistry.libraries["mockup/containers"]=[SHAPES_PATH+"/mockup/mxMockupContainers.js"];mxStencilRegistry.libraries["mockup/forms"]=[SHAPES_PATH+"/mockup/mxMockupForms.js"];mxStencilRegistry.libraries["mockup/graphics"]=[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 p=mxMarker.createMarker;mxMarker.createMarker=function(a,b,c,d,g,k,e,n,f,h){if(null!=c&&null==mxMarker.markers[c]){var t=this.getPackageForType(c);null!=t&&mxStencilRegistry.getStencil(t)}return p.apply(this,arguments)};PrintDialog.prototype.create=function(a,b){function c(){p.value=Math.max(1,
-Math.min(n,Math.max(parseInt(p.value),parseInt(u.value))));u.value=Math.max(1,Math.min(n,Math.min(parseInt(p.value),parseInt(u.value))))}function d(b){function c(b,c,g){var k=b.getGraphBounds(),e=0,n=0,f=X.get(),t=1/b.pageScale,h=y.checked;if(h)var t=parseInt(R.value),q=parseInt(U.value),t=Math.min(f.height*q/(k.height/b.view.scale),f.width*t/(k.width/b.view.scale));else t=parseInt(x.value)/(100*b.pageScale),isNaN(t)&&(d=1/b.pageScale,x.value="100 %");f=mxRectangle.fromRectangle(f);f.width=Math.ceil(f.width*
-d);f.height=Math.ceil(f.height*d);t*=d;!h&&b.pageVisible?(k=b.getPageLayout(),e-=k.x*f.width,n-=k.y*f.height):h=!0;if(null==c){c=PrintDialog.createPrintPreview(b,t,f,0,e,n,h);c.pageSelector=!1;c.mathEnabled=!1;b=a.getCurrentFile();null!=b&&(c.title=b.getTitle());var u=c.writeHead;c.writeHead=function(b){u.apply(this,arguments);null!=a.editor.fontCss&&(b.writeln('<style type="text/css">'),b.writeln(a.editor.fontCss),b.writeln("</style>"))};if("undefined"!==typeof MathJax){var l=c.renderPage;c.renderPage=
-function(a,b,c,d,g,k){var e=l.apply(this,arguments);this.graph.mathEnabled?this.mathEnabled=!0:e.className="geDisableMathJax";return e}}c.open(null,null,g,!0)}else{f=b.background;if(null==f||""==f||f==mxConstants.NONE)f="#ffffff";c.backgroundColor=f;c.autoOrigin=h;c.appendGraph(b,t,e,n,g,!0)}return c}var d=parseInt(P.value)/100;isNaN(d)&&(d=1,P.value="100 %");var d=.75*d,k=u.value,e=p.value,n=!q.checked,t=null;n&&(n=k==f&&e==f);if(!n&&null!=a.pages&&a.pages.length){var h=0,n=a.pages.length-1;q.checked||
-(h=parseInt(k)-1,n=parseInt(e)-1);for(var l=h;l<=n;l++){var m=a.pages[l],k=m==a.currentPage?g:null;if(null==k){var k=a.createTemporaryGraph(g.getStylesheet()),e=!0,h=!1,z=null,w=null;null==m.viewState&&null==m.mapping&&null==m.root&&a.updatePageRoot(m);null!=m.viewState?(e=m.viewState.pageVisible,h=m.viewState.mathEnabled,z=m.viewState.background,w=m.viewState.backgroundImage):null!=m.mapping&&null!=m.mapping.diagramMap&&(h="0"!=m.mapping.diagramMap.get("mathEnabled"),z=m.mapping.diagramMap.get("background"),
-w=m.mapping.diagramMap.get("backgroundImage"),w=null!=w&&0<w.length?JSON.parse(w):null);k.background=z;k.backgroundImage=null!=w?new mxImage(w.src,w.width,w.height):null;k.pageVisible=e;k.mathEnabled=h;var A=k.getGlobalVariable;k.getGlobalVariable=function(a){return"page"==a?m.getName():"pagenumber"==a?l+1:A.apply(this,arguments)};document.body.appendChild(k.container);a.updatePageRoot(m);k.model.setRoot(m.root)}t=c(k,t,l!=n);k!=g&&k.container.parentNode.removeChild(k.container)}}else t=c(g);t.mathEnabled&&
-(n=t.wnd.document,n.writeln('<script type="text/x-mathjax-config">'),n.writeln("MathJax.Hub.Config({"),n.writeln('messageStyle: "none",'),n.writeln('jax: ["input/TeX", "input/MathML", "input/AsciiMath", "output/HTML-CSS"],'),n.writeln('extensions: ["tex2jax.js", "mml2jax.js", "asciimath2jax.js"],'),n.writeln("TeX: {"),n.writeln('extensions: ["AMSmath.js", "AMSsymbols.js", "noErrors.js", "noUndefined.js"]'),n.writeln("},"),n.writeln("tex2jax: {"),n.writeln('\tignoreClass: "geDisableMathJax"'),n.writeln("},"),
-n.writeln("asciimath2jax: {"),n.writeln('\tignoreClass: "geDisableMathJax"'),n.writeln("}"),n.writeln("});"),b&&(n.writeln("MathJax.Hub.Queue(function () {"),n.writeln("window.print();"),n.writeln("});")),n.writeln("\x3c/script>"),n.writeln('<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js">\x3c/script>'));t.closeDocument();!t.mathEnabled&&b&&PrintDialog.printPreview(t)}var g=a.editor.graph,k=document.createElement("div"),e=document.createElement("h3");
-e.style.width="100%";e.style.textAlign="center";e.style.marginTop="0px";mxUtils.write(e,b||mxResources.get("print"));k.appendChild(e);var n=1,f=1,h=document.createElement("div");h.style.cssText="border-bottom:1px solid lightGray;padding-bottom:12px;margin-bottom:12px;";var q=document.createElement("input");q.style.cssText="margin-right:8px;margin-bottom:8px;";q.setAttribute("value","all");q.setAttribute("type","radio");q.setAttribute("name","pages-printdialog");h.appendChild(q);e=document.createElement("span");
-mxUtils.write(e,mxResources.get("printAllPages"));h.appendChild(e);mxUtils.br(h);var l=q.cloneNode(!0);q.setAttribute("checked","checked");l.setAttribute("value","range");h.appendChild(l);e=document.createElement("span");mxUtils.write(e,mxResources.get("pages")+":");h.appendChild(e);var u=document.createElement("input");u.style.cssText="margin:0 8px 0 8px;";u.setAttribute("value","1");u.setAttribute("type","number");u.setAttribute("min","1");u.style.width="50px";h.appendChild(u);e=document.createElement("span");
-mxUtils.write(e,mxResources.get("to"));h.appendChild(e);var p=u.cloneNode(!0);h.appendChild(p);mxEvent.addListener(u,"focus",function(){l.checked=!0});mxEvent.addListener(p,"focus",function(){l.checked=!0});mxEvent.addListener(u,"change",c);mxEvent.addListener(p,"change",c);if(null!=a.pages&&(n=a.pages.length,null!=a.currentPage))for(e=0;e<a.pages.length;e++)if(a.currentPage==a.pages[e]){f=e+1;u.value=f;p.value=f;break}u.setAttribute("max",n);p.setAttribute("max",n);1<n&&k.appendChild(h);var m=document.createElement("div");
-m.style.marginBottom="10px";var w=document.createElement("input");w.style.marginRight="8px";w.setAttribute("value","adjust");w.setAttribute("type","radio");w.setAttribute("name","printZoom");m.appendChild(w);e=document.createElement("span");mxUtils.write(e,mxResources.get("adjustTo"));m.appendChild(e);var x=document.createElement("input");x.style.cssText="margin:0 8px 0 8px;";x.setAttribute("value","100 %");x.style.width="50px";m.appendChild(x);mxEvent.addListener(x,"focus",function(){w.checked=!0});
-k.appendChild(m);var h=h.cloneNode(!1),y=w.cloneNode(!0);y.setAttribute("value","fit");w.setAttribute("checked","checked");e=document.createElement("div");e.style.cssText="display:inline-block;height:100%;vertical-align:top;padding-top:2px;";e.appendChild(y);h.appendChild(e);m=document.createElement("table");m.style.display="inline-block";var N=document.createElement("tbody"),M=document.createElement("tr"),W=M.cloneNode(!0),I=document.createElement("td"),Q=I.cloneNode(!0),Z=I.cloneNode(!0),J=I.cloneNode(!0),
-V=I.cloneNode(!0),T=I.cloneNode(!0);I.style.textAlign="right";J.style.textAlign="right";mxUtils.write(I,mxResources.get("fitTo"));var R=document.createElement("input");R.style.cssText="margin:0 8px 0 8px;";R.setAttribute("value","1");R.setAttribute("min","1");R.setAttribute("type","number");R.style.width="40px";Q.appendChild(R);e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsAcross"));Z.appendChild(e);mxUtils.write(J,mxResources.get("fitToBy"));var U=R.cloneNode(!0);V.appendChild(U);
-mxEvent.addListener(R,"focus",function(){y.checked=!0});mxEvent.addListener(U,"focus",function(){y.checked=!0});e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsDown"));T.appendChild(e);M.appendChild(I);M.appendChild(Q);M.appendChild(Z);W.appendChild(J);W.appendChild(V);W.appendChild(T);N.appendChild(M);N.appendChild(W);m.appendChild(N);h.appendChild(m);k.appendChild(h);h=document.createElement("div");e=document.createElement("div");e.style.fontWeight="bold";e.style.marginBottom=
-"12px";mxUtils.write(e,mxResources.get("paperSize"));h.appendChild(e);e=document.createElement("div");e.style.marginBottom="12px";var X=PageSetupDialog.addPageFormatPanel(e,"printdialog",a.editor.graph.pageFormat||mxConstants.PAGE_FORMAT_A4_PORTRAIT);h.appendChild(e);e=document.createElement("span");mxUtils.write(e,mxResources.get("pageScale"));h.appendChild(e);var P=document.createElement("input");P.style.cssText="margin:0 8px 0 8px;";P.setAttribute("value","100 %");P.style.width="60px";h.appendChild(P);
-k.appendChild(h);e=document.createElement("div");e.style.cssText="text-align:right;margin:62px 0 0 0;";h=mxUtils.button(mxResources.get("cancel"),function(){a.hideDialog()});h.className="geBtn";a.editor.cancelFirst&&e.appendChild(h);a.isOffline()||(m=mxUtils.button(mxResources.get("help"),function(){g.openLink("https://desk.draw.io/support/solutions/articles/16000048947")}),m.className="geBtn",e.appendChild(m));PrintDialog.previewEnabled&&(m=mxUtils.button(mxResources.get("preview"),function(){a.hideDialog();
-d(!1)}),m.className="geBtn",e.appendChild(m));m=mxUtils.button(mxResources.get(PrintDialog.previewEnabled?"print":"ok"),function(){a.hideDialog();d(!0)});m.className="geBtn gePrimaryBtn";e.appendChild(m);a.editor.cancelFirst||e.appendChild(h);k.appendChild(e);this.container=k};var w=ChangePageSetup.prototype.execute;ChangePageSetup.prototype.execute=function(){null==this.page&&(this.page=this.ui.currentPage);this.page!=this.ui.currentPage?null!=this.page.viewState&&(this.ignoreColor||(this.page.viewState.background=
-this.color),this.ignoreImage||(this.page.viewState.backgroundImage=this.image),null!=this.format&&(this.page.viewState.pageFormat=this.format),null!=this.mathEnabled&&(this.page.viewState.mathEnabled=this.mathEnabled),null!=this.shadowVisible&&(this.page.viewState.shadowVisible=this.shadowVisible)):(w.apply(this,arguments),null!=this.mathEnabled&&this.mathEnabled!=this.ui.isMathEnabled()&&(this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=
-this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible))}})();
-(function(){var a=new mxObjectCodec(new ChangePageSetup,["ui","previousColor","previousImage","previousFormat"]);a.beforeDecode=function(a,d,c){c.ui=a.ui;return d};a.afterDecode=function(a,d,c){c.previousColor=c.color;c.previousImage=c.image;c.previousFormat=c.format;null!=c.foldingEnabled&&(c.foldingEnabled=!c.foldingEnabled);null!=c.mathEnabled&&(c.mathEnabled=!c.mathEnabled);null!=c.shadowVisible&&(c.shadowVisible=!c.shadowVisible);return c};mxCodecRegistry.register(a)})();(function(){EditorUi.VERSION="8.5.0";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.enableLogging=/.*\.draw\.io$/.test(window.location.hostname);EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.scratchpadHelpLink="https://desk.draw.io/support/solutions/articles/16000042367";EditorUi.prototype.emptyDiagramXml='<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>';
+mxStencilRegistry.libraries.arrows2=[SHAPES_PATH+"/mxArrows.js"];mxStencilRegistry.libraries.atlassian=[STENCIL_PATH+"/atlassian.xml"];mxStencilRegistry.libraries.bpmn=[SHAPES_PATH+"/bpmn/mxBpmnShape2.js",STENCIL_PATH+"/bpmn.xml"];mxStencilRegistry.libraries.er=[SHAPES_PATH+"/er/mxER.js"];mxStencilRegistry.libraries.flowchart=[SHAPES_PATH+"/mxFlowchart.js",STENCIL_PATH+"/flowchart.xml"];mxStencilRegistry.libraries.ios=[SHAPES_PATH+"/mockup/mxMockupiOS.js"];mxStencilRegistry.libraries.rackGeneral=
+[SHAPES_PATH+"/rack/mxRack.js",STENCIL_PATH+"/rack/general.xml"];mxStencilRegistry.libraries.rackF5=[STENCIL_PATH+"/rack/f5.xml"];mxStencilRegistry.libraries.lean_mapping=[SHAPES_PATH+"/mxLeanMap.js",STENCIL_PATH+"/lean_mapping.xml"];mxStencilRegistry.libraries.basic=[SHAPES_PATH+"/mxBasic.js",STENCIL_PATH+"/basic.xml"];mxStencilRegistry.libraries.ios7icons=[STENCIL_PATH+"/ios7/icons.xml"];mxStencilRegistry.libraries.ios7ui=[SHAPES_PATH+"/ios7/mxIOS7Ui.js",STENCIL_PATH+"/ios7/misc.xml"];mxStencilRegistry.libraries.android=
+[SHAPES_PATH+"/mxAndroid.js",STENCIL_PATH+"/android/android.xml"];mxStencilRegistry.libraries["electrical/transmission"]=[SHAPES_PATH+"/mxElectrical.js",STENCIL_PATH+"/electrical/transmission.xml"];mxStencilRegistry.libraries["mockup/buttons"]=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];mxStencilRegistry.libraries["mockup/containers"]=[SHAPES_PATH+"/mockup/mxMockupContainers.js"];mxStencilRegistry.libraries["mockup/forms"]=[SHAPES_PATH+"/mockup/mxMockupForms.js"];mxStencilRegistry.libraries["mockup/graphics"]=
+[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 p=mxMarker.createMarker;mxMarker.createMarker=function(a,b,c,d,g,k,e,n,f,h){if(null!=c&&null==mxMarker.markers[c]){var t=this.getPackageForType(c);null!=t&&mxStencilRegistry.getStencil(t)}return p.apply(this,arguments)};
+PrintDialog.prototype.create=function(a,b){function c(){p.value=Math.max(1,Math.min(n,Math.max(parseInt(p.value),parseInt(u.value))));u.value=Math.max(1,Math.min(n,Math.min(parseInt(p.value),parseInt(u.value))))}function d(b){function c(b,c,g){var k=b.getGraphBounds(),e=0,n=0,f=X.get(),t=1/b.pageScale,h=y.checked;if(h)var t=parseInt(R.value),q=parseInt(U.value),t=Math.min(f.height*q/(k.height/b.view.scale),f.width*t/(k.width/b.view.scale));else t=parseInt(x.value)/(100*b.pageScale),isNaN(t)&&(d=1/
+b.pageScale,x.value="100 %");f=mxRectangle.fromRectangle(f);f.width=Math.ceil(f.width*d);f.height=Math.ceil(f.height*d);t*=d;!h&&b.pageVisible?(k=b.getPageLayout(),e-=k.x*f.width,n-=k.y*f.height):h=!0;if(null==c){c=PrintDialog.createPrintPreview(b,t,f,0,e,n,h);c.pageSelector=!1;c.mathEnabled=!1;b=a.getCurrentFile();null!=b&&(c.title=b.getTitle());var u=c.writeHead;c.writeHead=function(b){u.apply(this,arguments);null!=a.editor.fontCss&&(b.writeln('<style type="text/css">'),b.writeln(a.editor.fontCss),
+b.writeln("</style>"))};if("undefined"!==typeof MathJax){var l=c.renderPage;c.renderPage=function(a,b,c,d,g,k){var e=l.apply(this,arguments);this.graph.mathEnabled?this.mathEnabled=!0:e.className="geDisableMathJax";return e}}c.open(null,null,g,!0)}else{f=b.background;if(null==f||""==f||f==mxConstants.NONE)f="#ffffff";c.backgroundColor=f;c.autoOrigin=h;c.appendGraph(b,t,e,n,g,!0)}return c}var d=parseInt(P.value)/100;isNaN(d)&&(d=1,P.value="100 %");var d=.75*d,k=u.value,e=p.value,n=!q.checked,t=null;
+n&&(n=k==f&&e==f);if(!n&&null!=a.pages&&a.pages.length){var h=0,n=a.pages.length-1;q.checked||(h=parseInt(k)-1,n=parseInt(e)-1);for(var l=h;l<=n;l++){var m=a.pages[l],k=m==a.currentPage?g:null;if(null==k){var k=a.createTemporaryGraph(g.getStylesheet()),e=!0,h=!1,z=null,w=null;null==m.viewState&&null==m.mapping&&null==m.root&&a.updatePageRoot(m);null!=m.viewState?(e=m.viewState.pageVisible,h=m.viewState.mathEnabled,z=m.viewState.background,w=m.viewState.backgroundImage):null!=m.mapping&&null!=m.mapping.diagramMap&&
+(h="0"!=m.mapping.diagramMap.get("mathEnabled"),z=m.mapping.diagramMap.get("background"),w=m.mapping.diagramMap.get("backgroundImage"),w=null!=w&&0<w.length?JSON.parse(w):null);k.background=z;k.backgroundImage=null!=w?new mxImage(w.src,w.width,w.height):null;k.pageVisible=e;k.mathEnabled=h;var A=k.getGlobalVariable;k.getGlobalVariable=function(a){return"page"==a?m.getName():"pagenumber"==a?l+1:A.apply(this,arguments)};document.body.appendChild(k.container);a.updatePageRoot(m);k.model.setRoot(m.root)}t=
+c(k,t,l!=n);k!=g&&k.container.parentNode.removeChild(k.container)}}else t=c(g);t.mathEnabled&&(n=t.wnd.document,n.writeln('<script type="text/x-mathjax-config">'),n.writeln("MathJax.Hub.Config({"),n.writeln('messageStyle: "none",'),n.writeln('jax: ["input/TeX", "input/MathML", "input/AsciiMath", "output/HTML-CSS"],'),n.writeln('extensions: ["tex2jax.js", "mml2jax.js", "asciimath2jax.js"],'),n.writeln("TeX: {"),n.writeln('extensions: ["AMSmath.js", "AMSsymbols.js", "noErrors.js", "noUndefined.js"]'),
+n.writeln("},"),n.writeln("tex2jax: {"),n.writeln('\tignoreClass: "geDisableMathJax"'),n.writeln("},"),n.writeln("asciimath2jax: {"),n.writeln('\tignoreClass: "geDisableMathJax"'),n.writeln("}"),n.writeln("});"),b&&(n.writeln("MathJax.Hub.Queue(function () {"),n.writeln("window.print();"),n.writeln("});")),n.writeln("\x3c/script>"),n.writeln('<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js">\x3c/script>'));t.closeDocument();!t.mathEnabled&&b&&PrintDialog.printPreview(t)}
+var g=a.editor.graph,k=document.createElement("div"),e=document.createElement("h3");e.style.width="100%";e.style.textAlign="center";e.style.marginTop="0px";mxUtils.write(e,b||mxResources.get("print"));k.appendChild(e);var n=1,f=1,h=document.createElement("div");h.style.cssText="border-bottom:1px solid lightGray;padding-bottom:12px;margin-bottom:12px;";var q=document.createElement("input");q.style.cssText="margin-right:8px;margin-bottom:8px;";q.setAttribute("value","all");q.setAttribute("type","radio");
+q.setAttribute("name","pages-printdialog");h.appendChild(q);e=document.createElement("span");mxUtils.write(e,mxResources.get("printAllPages"));h.appendChild(e);mxUtils.br(h);var l=q.cloneNode(!0);q.setAttribute("checked","checked");l.setAttribute("value","range");h.appendChild(l);e=document.createElement("span");mxUtils.write(e,mxResources.get("pages")+":");h.appendChild(e);var u=document.createElement("input");u.style.cssText="margin:0 8px 0 8px;";u.setAttribute("value","1");u.setAttribute("type",
+"number");u.setAttribute("min","1");u.style.width="50px";h.appendChild(u);e=document.createElement("span");mxUtils.write(e,mxResources.get("to"));h.appendChild(e);var p=u.cloneNode(!0);h.appendChild(p);mxEvent.addListener(u,"focus",function(){l.checked=!0});mxEvent.addListener(p,"focus",function(){l.checked=!0});mxEvent.addListener(u,"change",c);mxEvent.addListener(p,"change",c);if(null!=a.pages&&(n=a.pages.length,null!=a.currentPage))for(e=0;e<a.pages.length;e++)if(a.currentPage==a.pages[e]){f=e+
+1;u.value=f;p.value=f;break}u.setAttribute("max",n);p.setAttribute("max",n);1<n&&k.appendChild(h);var m=document.createElement("div");m.style.marginBottom="10px";var w=document.createElement("input");w.style.marginRight="8px";w.setAttribute("value","adjust");w.setAttribute("type","radio");w.setAttribute("name","printZoom");m.appendChild(w);e=document.createElement("span");mxUtils.write(e,mxResources.get("adjustTo"));m.appendChild(e);var x=document.createElement("input");x.style.cssText="margin:0 8px 0 8px;";
+x.setAttribute("value","100 %");x.style.width="50px";m.appendChild(x);mxEvent.addListener(x,"focus",function(){w.checked=!0});k.appendChild(m);var h=h.cloneNode(!1),y=w.cloneNode(!0);y.setAttribute("value","fit");w.setAttribute("checked","checked");e=document.createElement("div");e.style.cssText="display:inline-block;height:100%;vertical-align:top;padding-top:2px;";e.appendChild(y);h.appendChild(e);m=document.createElement("table");m.style.display="inline-block";var N=document.createElement("tbody"),
+M=document.createElement("tr"),W=M.cloneNode(!0),I=document.createElement("td"),Q=I.cloneNode(!0),Z=I.cloneNode(!0),J=I.cloneNode(!0),V=I.cloneNode(!0),T=I.cloneNode(!0);I.style.textAlign="right";J.style.textAlign="right";mxUtils.write(I,mxResources.get("fitTo"));var R=document.createElement("input");R.style.cssText="margin:0 8px 0 8px;";R.setAttribute("value","1");R.setAttribute("min","1");R.setAttribute("type","number");R.style.width="40px";Q.appendChild(R);e=document.createElement("span");mxUtils.write(e,
+mxResources.get("fitToSheetsAcross"));Z.appendChild(e);mxUtils.write(J,mxResources.get("fitToBy"));var U=R.cloneNode(!0);V.appendChild(U);mxEvent.addListener(R,"focus",function(){y.checked=!0});mxEvent.addListener(U,"focus",function(){y.checked=!0});e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsDown"));T.appendChild(e);M.appendChild(I);M.appendChild(Q);M.appendChild(Z);W.appendChild(J);W.appendChild(V);W.appendChild(T);N.appendChild(M);N.appendChild(W);m.appendChild(N);
+h.appendChild(m);k.appendChild(h);h=document.createElement("div");e=document.createElement("div");e.style.fontWeight="bold";e.style.marginBottom="12px";mxUtils.write(e,mxResources.get("paperSize"));h.appendChild(e);e=document.createElement("div");e.style.marginBottom="12px";var X=PageSetupDialog.addPageFormatPanel(e,"printdialog",a.editor.graph.pageFormat||mxConstants.PAGE_FORMAT_A4_PORTRAIT);h.appendChild(e);e=document.createElement("span");mxUtils.write(e,mxResources.get("pageScale"));h.appendChild(e);
+var P=document.createElement("input");P.style.cssText="margin:0 8px 0 8px;";P.setAttribute("value","100 %");P.style.width="60px";h.appendChild(P);k.appendChild(h);e=document.createElement("div");e.style.cssText="text-align:right;margin:62px 0 0 0;";h=mxUtils.button(mxResources.get("cancel"),function(){a.hideDialog()});h.className="geBtn";a.editor.cancelFirst&&e.appendChild(h);a.isOffline()||(m=mxUtils.button(mxResources.get("help"),function(){g.openLink("https://desk.draw.io/support/solutions/articles/16000048947")}),
+m.className="geBtn",e.appendChild(m));PrintDialog.previewEnabled&&(m=mxUtils.button(mxResources.get("preview"),function(){a.hideDialog();d(!1)}),m.className="geBtn",e.appendChild(m));m=mxUtils.button(mxResources.get(PrintDialog.previewEnabled?"print":"ok"),function(){a.hideDialog();d(!0)});m.className="geBtn gePrimaryBtn";e.appendChild(m);a.editor.cancelFirst||e.appendChild(h);k.appendChild(e);this.container=k};var w=ChangePageSetup.prototype.execute;ChangePageSetup.prototype.execute=function(){null==
+this.page&&(this.page=this.ui.currentPage);this.page!=this.ui.currentPage?null!=this.page.viewState&&(this.ignoreColor||(this.page.viewState.background=this.color),this.ignoreImage||(this.page.viewState.backgroundImage=this.image),null!=this.format&&(this.page.viewState.pageFormat=this.format),null!=this.mathEnabled&&(this.page.viewState.mathEnabled=this.mathEnabled),null!=this.shadowVisible&&(this.page.viewState.shadowVisible=this.shadowVisible)):(w.apply(this,arguments),null!=this.mathEnabled&&
+this.mathEnabled!=this.ui.isMathEnabled()&&(this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible))}})();
+(function(){var a=new mxObjectCodec(new ChangePageSetup,["ui","previousColor","previousImage","previousFormat"]);a.beforeDecode=function(a,d,c){c.ui=a.ui;return d};a.afterDecode=function(a,d,c){c.previousColor=c.color;c.previousImage=c.image;c.previousFormat=c.format;null!=c.foldingEnabled&&(c.foldingEnabled=!c.foldingEnabled);null!=c.mathEnabled&&(c.mathEnabled=!c.mathEnabled);null!=c.shadowVisible&&(c.shadowVisible=!c.shadowVisible);return c};mxCodecRegistry.register(a)})();(function(){EditorUi.VERSION="8.5.2";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.enableLogging=/.*\.draw\.io$/.test(window.location.hostname);EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.scratchpadHelpLink="https://desk.draw.io/support/solutions/articles/16000042367";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.svgBrokenImage=Graph.createSvgImage(10,10,'<rect x="0" y="0" width="10" height="10" stroke="#000" fill="transparent"/><path d="m 0 0 L 10 10 L 0 10 L 10 0" stroke="#000" fill="transparent"/>');EditorUi.prototype.crossOriginImages=!mxClient.IS_IE;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.printPdfExport=
 !1;EditorUi.prototype.pdfPageExport=!0;EditorUi.prototype.formatEnabled="0"!=urlParams.format;(function(){EditorUi.prototype.useCanvasForExport=!1;EditorUi.prototype.jpgSupported=!1;try{var a=document.createElement("canvas");EditorUi.prototype.canvasSupported=!(!a.getContext||!a.getContext("2d"))}catch(u){}try{var b=document.createElement("canvas"),c=new Image;c.onload=function(){try{b.getContext("2d").drawImage(c,0,0);var a=b.toDataURL("image/png");EditorUi.prototype.useCanvasForExport=null!=a&&
diff --git a/src/main/webapp/js/atlas-viewer.min.js b/src/main/webapp/js/atlas-viewer.min.js
index be02c5e68..96a85ed84 100644
--- a/src/main/webapp/js/atlas-viewer.min.js
+++ b/src/main/webapp/js/atlas-viewer.min.js
@@ -2675,32 +2675,32 @@ g.setAttribute("in","blur");g.setAttribute("dx",this.svgShadowSize);g.setAttribu
 c.createElement("feComposite");g.setAttribute("in","offsetColor");g.setAttribute("in2","offsetBlur");g.setAttribute("operator","in");g.setAttribute("result","offsetBlur");f.appendChild(g);g=null!=c.createElementNS?c.createElementNS(mxConstants.NS_SVG,"feBlend"):c.createElement("feBlend");g.setAttribute("in","SourceGraphic");g.setAttribute("in2","offsetBlur");f.appendChild(g);g=a.getElementsByTagName("defs");0==g.length?(c=null!=c.createElementNS?c.createElementNS(mxConstants.NS_SVG,"defs"):c.createElement("defs"),
 null!=a.firstChild?a.insertBefore(c,a.firstChild):a.appendChild(c)):c=g[0];c.appendChild(f);b||((d||a.getElementsByTagName("g")[0]).setAttribute("filter","url(#"+this.shadowId+")"),isNaN(parseInt(a.getAttribute("width")))||(a.setAttribute("width",parseInt(a.getAttribute("width"))+6),a.setAttribute("height",parseInt(a.getAttribute("height"))+6)));return f};Graph.prototype.setShadowVisible=function(a,d){mxClient.IS_SVG&&(d=null!=d?d:!0,(this.shadowVisible=a)?this.view.getDrawPane().setAttribute("filter",
 "url(#"+this.shadowId+")"):this.view.getDrawPane().removeAttribute("filter"),d&&this.fireEvent(new mxEventObject("shadowVisibleChanged")))};Graph.prototype.selectUnlockedLayer=function(){if(null==this.defaultParent){var a=this.model.getChildCount(this.model.root),d,b=0;do d=this.model.getChildAt(this.model.root,b);while(b++<a&&"1"==mxUtils.getValue(this.getCellStyle(d),"locked","0"));null!=d&&this.setDefaultParent(d)}};mxStencilRegistry.libraries.mockup=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];
-mxStencilRegistry.libraries.arrows2=[SHAPES_PATH+"/mxArrows.js"];mxStencilRegistry.libraries.atlassian=[STENCIL_PATH+"/atlassian.xml"];mxStencilRegistry.libraries.bpmn=[SHAPES_PATH+"/bpmn/mxBpmnShape2.js",STENCIL_PATH+"/bpmn.xml"];mxStencilRegistry.libraries.er=[SHAPES_PATH+"/er/mxER.js"];mxStencilRegistry.libraries.ios=[SHAPES_PATH+"/mockup/mxMockupiOS.js"];mxStencilRegistry.libraries.rackGeneral=[SHAPES_PATH+"/rack/mxRack.js",STENCIL_PATH+"/rack/general.xml"];mxStencilRegistry.libraries.rackF5=
-[STENCIL_PATH+"/rack/f5.xml"];mxStencilRegistry.libraries.lean_mapping=[SHAPES_PATH+"/mxLeanMap.js",STENCIL_PATH+"/lean_mapping.xml"];mxStencilRegistry.libraries.basic=[SHAPES_PATH+"/mxBasic.js",STENCIL_PATH+"/basic.xml"];mxStencilRegistry.libraries.ios7icons=[STENCIL_PATH+"/ios7/icons.xml"];mxStencilRegistry.libraries.ios7ui=[SHAPES_PATH+"/ios7/mxIOS7Ui.js",STENCIL_PATH+"/ios7/misc.xml"];mxStencilRegistry.libraries.android=[SHAPES_PATH+"/mxAndroid.js",STENCIL_PATH+"/android/android.xml"];mxStencilRegistry.libraries["electrical/transmission"]=
-[SHAPES_PATH+"/mxElectrical.js",STENCIL_PATH+"/electrical/transmission.xml"];mxStencilRegistry.libraries["mockup/buttons"]=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];mxStencilRegistry.libraries["mockup/containers"]=[SHAPES_PATH+"/mockup/mxMockupContainers.js"];mxStencilRegistry.libraries["mockup/forms"]=[SHAPES_PATH+"/mockup/mxMockupForms.js"];mxStencilRegistry.libraries["mockup/graphics"]=[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 d=null;null!=a&&0<a.length&&("ER"==a.substring(0,2)?d="mxgraph.er":"sysML"==a.substring(0,5)&&(d="mxgraph.sysml"));return d};var h=mxMarker.createMarker;mxMarker.createMarker=function(a,d,b,c,f,g,e,p,m,k){if(null!=b&&null==mxMarker.markers[b]){var u=this.getPackageForType(b);null!=u&&mxStencilRegistry.getStencil(u)}return h.apply(this,arguments)};PrintDialog.prototype.create=function(a,d){function b(){l.value=Math.max(1,
-Math.min(h,Math.max(parseInt(l.value),parseInt(w.value))));w.value=Math.max(1,Math.min(h,Math.min(parseInt(l.value),parseInt(w.value))))}function c(d){function b(d,b,f){var g=d.getGraphBounds(),e=0,h=0,p=Y.get(),m=1/d.pageScale,k=t.checked;if(k)var m=parseInt(T.value),r=parseInt(V.value),m=Math.min(p.height*r/(g.height/d.view.scale),p.width*m/(g.width/d.view.scale));else m=parseInt(q.value)/(100*d.pageScale),isNaN(m)&&(c=1/d.pageScale,q.value="100 %");p=mxRectangle.fromRectangle(p);p.width=Math.ceil(p.width*
-c);p.height=Math.ceil(p.height*c);m*=c;!k&&d.pageVisible?(g=d.getPageLayout(),e-=g.x*p.width,h-=g.y*p.height):k=!0;if(null==b){b=PrintDialog.createPrintPreview(d,m,p,0,e,h,k);b.pageSelector=!1;b.mathEnabled=!1;d=a.getCurrentFile();null!=d&&(b.title=d.getTitle());var u=b.writeHead;b.writeHead=function(d){u.apply(this,arguments);null!=a.editor.fontCss&&(d.writeln('<style type="text/css">'),d.writeln(a.editor.fontCss),d.writeln("</style>"))};if("undefined"!==typeof MathJax){var w=b.renderPage;b.renderPage=
-function(a,d,b,c,f,g){var e=w.apply(this,arguments);this.graph.mathEnabled?this.mathEnabled=!0:e.className="geDisableMathJax";return e}}b.open(null,null,f,!0)}else{p=d.background;if(null==p||""==p||p==mxConstants.NONE)p="#ffffff";b.backgroundColor=p;b.autoOrigin=k;b.appendGraph(d,m,e,h,f,!0)}return b}var c=parseInt(M.value)/100;isNaN(c)&&(c=1,M.value="100 %");var c=.75*c,g=w.value,e=l.value,h=!k.checked,m=null;h&&(h=g==p&&e==p);if(!h&&null!=a.pages&&a.pages.length){var r=0,h=a.pages.length-1;k.checked||
-(r=parseInt(g)-1,h=parseInt(e)-1);for(var u=r;u<=h;u++){var x=a.pages[u],g=x==a.currentPage?f:null;if(null==g){var g=a.createTemporaryGraph(f.getStylesheet()),e=!0,r=!1,n=null,v=null;null==x.viewState&&null==x.mapping&&null==x.root&&a.updatePageRoot(x);null!=x.viewState?(e=x.viewState.pageVisible,r=x.viewState.mathEnabled,n=x.viewState.background,v=x.viewState.backgroundImage):null!=x.mapping&&null!=x.mapping.diagramMap&&(r="0"!=x.mapping.diagramMap.get("mathEnabled"),n=x.mapping.diagramMap.get("background"),
-v=x.mapping.diagramMap.get("backgroundImage"),v=null!=v&&0<v.length?JSON.parse(v):null);g.background=n;g.backgroundImage=null!=v?new mxImage(v.src,v.width,v.height):null;g.pageVisible=e;g.mathEnabled=r;var A=g.getGlobalVariable;g.getGlobalVariable=function(a){return"page"==a?x.getName():"pagenumber"==a?u+1:A.apply(this,arguments)};document.body.appendChild(g.container);a.updatePageRoot(x);g.model.setRoot(x.root)}m=b(g,m,u!=h);g!=f&&g.container.parentNode.removeChild(g.container)}}else m=b(f);m.mathEnabled&&
-(h=m.wnd.document,h.writeln('<script type="text/x-mathjax-config">'),h.writeln("MathJax.Hub.Config({"),h.writeln('messageStyle: "none",'),h.writeln('jax: ["input/TeX", "input/MathML", "input/AsciiMath", "output/HTML-CSS"],'),h.writeln('extensions: ["tex2jax.js", "mml2jax.js", "asciimath2jax.js"],'),h.writeln("TeX: {"),h.writeln('extensions: ["AMSmath.js", "AMSsymbols.js", "noErrors.js", "noUndefined.js"]'),h.writeln("},"),h.writeln("tex2jax: {"),h.writeln('\tignoreClass: "geDisableMathJax"'),h.writeln("},"),
-h.writeln("asciimath2jax: {"),h.writeln('\tignoreClass: "geDisableMathJax"'),h.writeln("}"),h.writeln("});"),d&&(h.writeln("MathJax.Hub.Queue(function () {"),h.writeln("window.print();"),h.writeln("});")),h.writeln("\x3c/script>"),h.writeln('<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js">\x3c/script>'));m.closeDocument();!m.mathEnabled&&d&&PrintDialog.printPreview(m)}var f=a.editor.graph,g=document.createElement("div"),e=document.createElement("h3");
-e.style.width="100%";e.style.textAlign="center";e.style.marginTop="0px";mxUtils.write(e,d||mxResources.get("print"));g.appendChild(e);var h=1,p=1,m=document.createElement("div");m.style.cssText="border-bottom:1px solid lightGray;padding-bottom:12px;margin-bottom:12px;";var k=document.createElement("input");k.style.cssText="margin-right:8px;margin-bottom:8px;";k.setAttribute("value","all");k.setAttribute("type","radio");k.setAttribute("name","pages-printdialog");m.appendChild(k);e=document.createElement("span");
-mxUtils.write(e,mxResources.get("printAllPages"));m.appendChild(e);mxUtils.br(m);var u=k.cloneNode(!0);k.setAttribute("checked","checked");u.setAttribute("value","range");m.appendChild(u);e=document.createElement("span");mxUtils.write(e,mxResources.get("pages")+":");m.appendChild(e);var w=document.createElement("input");w.style.cssText="margin:0 8px 0 8px;";w.setAttribute("value","1");w.setAttribute("type","number");w.setAttribute("min","1");w.style.width="50px";m.appendChild(w);e=document.createElement("span");
-mxUtils.write(e,mxResources.get("to"));m.appendChild(e);var l=w.cloneNode(!0);m.appendChild(l);mxEvent.addListener(w,"focus",function(){u.checked=!0});mxEvent.addListener(l,"focus",function(){u.checked=!0});mxEvent.addListener(w,"change",b);mxEvent.addListener(l,"change",b);if(null!=a.pages&&(h=a.pages.length,null!=a.currentPage))for(e=0;e<a.pages.length;e++)if(a.currentPage==a.pages[e]){p=e+1;w.value=p;l.value=p;break}w.setAttribute("max",h);l.setAttribute("max",h);1<h&&g.appendChild(m);var n=document.createElement("div");
-n.style.marginBottom="10px";var v=document.createElement("input");v.style.marginRight="8px";v.setAttribute("value","adjust");v.setAttribute("type","radio");v.setAttribute("name","printZoom");n.appendChild(v);e=document.createElement("span");mxUtils.write(e,mxResources.get("adjustTo"));n.appendChild(e);var q=document.createElement("input");q.style.cssText="margin:0 8px 0 8px;";q.setAttribute("value","100 %");q.style.width="50px";n.appendChild(q);mxEvent.addListener(q,"focus",function(){v.checked=!0});
-g.appendChild(n);var m=m.cloneNode(!1),t=v.cloneNode(!0);t.setAttribute("value","fit");v.setAttribute("checked","checked");e=document.createElement("div");e.style.cssText="display:inline-block;height:100%;vertical-align:top;padding-top:2px;";e.appendChild(t);m.appendChild(e);n=document.createElement("table");n.style.display="inline-block";var G=document.createElement("tbody"),K=document.createElement("tr"),S=K.cloneNode(!0),J=document.createElement("td"),N=J.cloneNode(!0),U=J.cloneNode(!0),D=J.cloneNode(!0),
-W=J.cloneNode(!0),O=J.cloneNode(!0);J.style.textAlign="right";D.style.textAlign="right";mxUtils.write(J,mxResources.get("fitTo"));var T=document.createElement("input");T.style.cssText="margin:0 8px 0 8px;";T.setAttribute("value","1");T.setAttribute("min","1");T.setAttribute("type","number");T.style.width="40px";N.appendChild(T);e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsAcross"));U.appendChild(e);mxUtils.write(D,mxResources.get("fitToBy"));var V=T.cloneNode(!0);W.appendChild(V);
-mxEvent.addListener(T,"focus",function(){t.checked=!0});mxEvent.addListener(V,"focus",function(){t.checked=!0});e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsDown"));O.appendChild(e);K.appendChild(J);K.appendChild(N);K.appendChild(U);S.appendChild(D);S.appendChild(W);S.appendChild(O);G.appendChild(K);G.appendChild(S);n.appendChild(G);m.appendChild(n);g.appendChild(m);m=document.createElement("div");e=document.createElement("div");e.style.fontWeight="bold";e.style.marginBottom=
-"12px";mxUtils.write(e,mxResources.get("paperSize"));m.appendChild(e);e=document.createElement("div");e.style.marginBottom="12px";var Y=PageSetupDialog.addPageFormatPanel(e,"printdialog",a.editor.graph.pageFormat||mxConstants.PAGE_FORMAT_A4_PORTRAIT);m.appendChild(e);e=document.createElement("span");mxUtils.write(e,mxResources.get("pageScale"));m.appendChild(e);var M=document.createElement("input");M.style.cssText="margin:0 8px 0 8px;";M.setAttribute("value","100 %");M.style.width="60px";m.appendChild(M);
-g.appendChild(m);e=document.createElement("div");e.style.cssText="text-align:right;margin:62px 0 0 0;";m=mxUtils.button(mxResources.get("cancel"),function(){a.hideDialog()});m.className="geBtn";a.editor.cancelFirst&&e.appendChild(m);a.isOffline()||(n=mxUtils.button(mxResources.get("help"),function(){f.openLink("https://desk.draw.io/support/solutions/articles/16000048947")}),n.className="geBtn",e.appendChild(n));PrintDialog.previewEnabled&&(n=mxUtils.button(mxResources.get("preview"),function(){a.hideDialog();
-c(!1)}),n.className="geBtn",e.appendChild(n));n=mxUtils.button(mxResources.get(PrintDialog.previewEnabled?"print":"ok"),function(){a.hideDialog();c(!0)});n.className="geBtn gePrimaryBtn";e.appendChild(n);a.editor.cancelFirst||e.appendChild(m);g.appendChild(e);this.container=g};var w=ChangePageSetup.prototype.execute;ChangePageSetup.prototype.execute=function(){null==this.page&&(this.page=this.ui.currentPage);this.page!=this.ui.currentPage?null!=this.page.viewState&&(this.ignoreColor||(this.page.viewState.background=
-this.color),this.ignoreImage||(this.page.viewState.backgroundImage=this.image),null!=this.format&&(this.page.viewState.pageFormat=this.format),null!=this.mathEnabled&&(this.page.viewState.mathEnabled=this.mathEnabled),null!=this.shadowVisible&&(this.page.viewState.shadowVisible=this.shadowVisible)):(w.apply(this,arguments),null!=this.mathEnabled&&this.mathEnabled!=this.ui.isMathEnabled()&&(this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=
-this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible))}})();
+mxStencilRegistry.libraries.arrows2=[SHAPES_PATH+"/mxArrows.js"];mxStencilRegistry.libraries.atlassian=[STENCIL_PATH+"/atlassian.xml"];mxStencilRegistry.libraries.bpmn=[SHAPES_PATH+"/bpmn/mxBpmnShape2.js",STENCIL_PATH+"/bpmn.xml"];mxStencilRegistry.libraries.er=[SHAPES_PATH+"/er/mxER.js"];mxStencilRegistry.libraries.flowchart=[SHAPES_PATH+"/mxFlowchart.js",STENCIL_PATH+"/flowchart.xml"];mxStencilRegistry.libraries.ios=[SHAPES_PATH+"/mockup/mxMockupiOS.js"];mxStencilRegistry.libraries.rackGeneral=
+[SHAPES_PATH+"/rack/mxRack.js",STENCIL_PATH+"/rack/general.xml"];mxStencilRegistry.libraries.rackF5=[STENCIL_PATH+"/rack/f5.xml"];mxStencilRegistry.libraries.lean_mapping=[SHAPES_PATH+"/mxLeanMap.js",STENCIL_PATH+"/lean_mapping.xml"];mxStencilRegistry.libraries.basic=[SHAPES_PATH+"/mxBasic.js",STENCIL_PATH+"/basic.xml"];mxStencilRegistry.libraries.ios7icons=[STENCIL_PATH+"/ios7/icons.xml"];mxStencilRegistry.libraries.ios7ui=[SHAPES_PATH+"/ios7/mxIOS7Ui.js",STENCIL_PATH+"/ios7/misc.xml"];mxStencilRegistry.libraries.android=
+[SHAPES_PATH+"/mxAndroid.js",STENCIL_PATH+"/android/android.xml"];mxStencilRegistry.libraries["electrical/transmission"]=[SHAPES_PATH+"/mxElectrical.js",STENCIL_PATH+"/electrical/transmission.xml"];mxStencilRegistry.libraries["mockup/buttons"]=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];mxStencilRegistry.libraries["mockup/containers"]=[SHAPES_PATH+"/mockup/mxMockupContainers.js"];mxStencilRegistry.libraries["mockup/forms"]=[SHAPES_PATH+"/mockup/mxMockupForms.js"];mxStencilRegistry.libraries["mockup/graphics"]=
+[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 d=null;null!=a&&0<a.length&&("ER"==a.substring(0,2)?d="mxgraph.er":"sysML"==a.substring(0,5)&&(d="mxgraph.sysml"));return d};var h=mxMarker.createMarker;mxMarker.createMarker=function(a,d,b,c,f,g,e,p,m,k){if(null!=b&&null==mxMarker.markers[b]){var u=this.getPackageForType(b);null!=u&&mxStencilRegistry.getStencil(u)}return h.apply(this,arguments)};
+PrintDialog.prototype.create=function(a,d){function b(){l.value=Math.max(1,Math.min(h,Math.max(parseInt(l.value),parseInt(w.value))));w.value=Math.max(1,Math.min(h,Math.min(parseInt(l.value),parseInt(w.value))))}function c(d){function b(d,b,f){var g=d.getGraphBounds(),e=0,h=0,p=Y.get(),m=1/d.pageScale,k=t.checked;if(k)var m=parseInt(T.value),r=parseInt(V.value),m=Math.min(p.height*r/(g.height/d.view.scale),p.width*m/(g.width/d.view.scale));else m=parseInt(q.value)/(100*d.pageScale),isNaN(m)&&(c=1/
+d.pageScale,q.value="100 %");p=mxRectangle.fromRectangle(p);p.width=Math.ceil(p.width*c);p.height=Math.ceil(p.height*c);m*=c;!k&&d.pageVisible?(g=d.getPageLayout(),e-=g.x*p.width,h-=g.y*p.height):k=!0;if(null==b){b=PrintDialog.createPrintPreview(d,m,p,0,e,h,k);b.pageSelector=!1;b.mathEnabled=!1;d=a.getCurrentFile();null!=d&&(b.title=d.getTitle());var u=b.writeHead;b.writeHead=function(d){u.apply(this,arguments);null!=a.editor.fontCss&&(d.writeln('<style type="text/css">'),d.writeln(a.editor.fontCss),
+d.writeln("</style>"))};if("undefined"!==typeof MathJax){var w=b.renderPage;b.renderPage=function(a,d,b,c,f,g){var e=w.apply(this,arguments);this.graph.mathEnabled?this.mathEnabled=!0:e.className="geDisableMathJax";return e}}b.open(null,null,f,!0)}else{p=d.background;if(null==p||""==p||p==mxConstants.NONE)p="#ffffff";b.backgroundColor=p;b.autoOrigin=k;b.appendGraph(d,m,e,h,f,!0)}return b}var c=parseInt(M.value)/100;isNaN(c)&&(c=1,M.value="100 %");var c=.75*c,g=w.value,e=l.value,h=!k.checked,m=null;
+h&&(h=g==p&&e==p);if(!h&&null!=a.pages&&a.pages.length){var r=0,h=a.pages.length-1;k.checked||(r=parseInt(g)-1,h=parseInt(e)-1);for(var u=r;u<=h;u++){var x=a.pages[u],g=x==a.currentPage?f:null;if(null==g){var g=a.createTemporaryGraph(f.getStylesheet()),e=!0,r=!1,n=null,v=null;null==x.viewState&&null==x.mapping&&null==x.root&&a.updatePageRoot(x);null!=x.viewState?(e=x.viewState.pageVisible,r=x.viewState.mathEnabled,n=x.viewState.background,v=x.viewState.backgroundImage):null!=x.mapping&&null!=x.mapping.diagramMap&&
+(r="0"!=x.mapping.diagramMap.get("mathEnabled"),n=x.mapping.diagramMap.get("background"),v=x.mapping.diagramMap.get("backgroundImage"),v=null!=v&&0<v.length?JSON.parse(v):null);g.background=n;g.backgroundImage=null!=v?new mxImage(v.src,v.width,v.height):null;g.pageVisible=e;g.mathEnabled=r;var A=g.getGlobalVariable;g.getGlobalVariable=function(a){return"page"==a?x.getName():"pagenumber"==a?u+1:A.apply(this,arguments)};document.body.appendChild(g.container);a.updatePageRoot(x);g.model.setRoot(x.root)}m=
+b(g,m,u!=h);g!=f&&g.container.parentNode.removeChild(g.container)}}else m=b(f);m.mathEnabled&&(h=m.wnd.document,h.writeln('<script type="text/x-mathjax-config">'),h.writeln("MathJax.Hub.Config({"),h.writeln('messageStyle: "none",'),h.writeln('jax: ["input/TeX", "input/MathML", "input/AsciiMath", "output/HTML-CSS"],'),h.writeln('extensions: ["tex2jax.js", "mml2jax.js", "asciimath2jax.js"],'),h.writeln("TeX: {"),h.writeln('extensions: ["AMSmath.js", "AMSsymbols.js", "noErrors.js", "noUndefined.js"]'),
+h.writeln("},"),h.writeln("tex2jax: {"),h.writeln('\tignoreClass: "geDisableMathJax"'),h.writeln("},"),h.writeln("asciimath2jax: {"),h.writeln('\tignoreClass: "geDisableMathJax"'),h.writeln("}"),h.writeln("});"),d&&(h.writeln("MathJax.Hub.Queue(function () {"),h.writeln("window.print();"),h.writeln("});")),h.writeln("\x3c/script>"),h.writeln('<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js">\x3c/script>'));m.closeDocument();!m.mathEnabled&&d&&PrintDialog.printPreview(m)}
+var f=a.editor.graph,g=document.createElement("div"),e=document.createElement("h3");e.style.width="100%";e.style.textAlign="center";e.style.marginTop="0px";mxUtils.write(e,d||mxResources.get("print"));g.appendChild(e);var h=1,p=1,m=document.createElement("div");m.style.cssText="border-bottom:1px solid lightGray;padding-bottom:12px;margin-bottom:12px;";var k=document.createElement("input");k.style.cssText="margin-right:8px;margin-bottom:8px;";k.setAttribute("value","all");k.setAttribute("type","radio");
+k.setAttribute("name","pages-printdialog");m.appendChild(k);e=document.createElement("span");mxUtils.write(e,mxResources.get("printAllPages"));m.appendChild(e);mxUtils.br(m);var u=k.cloneNode(!0);k.setAttribute("checked","checked");u.setAttribute("value","range");m.appendChild(u);e=document.createElement("span");mxUtils.write(e,mxResources.get("pages")+":");m.appendChild(e);var w=document.createElement("input");w.style.cssText="margin:0 8px 0 8px;";w.setAttribute("value","1");w.setAttribute("type",
+"number");w.setAttribute("min","1");w.style.width="50px";m.appendChild(w);e=document.createElement("span");mxUtils.write(e,mxResources.get("to"));m.appendChild(e);var l=w.cloneNode(!0);m.appendChild(l);mxEvent.addListener(w,"focus",function(){u.checked=!0});mxEvent.addListener(l,"focus",function(){u.checked=!0});mxEvent.addListener(w,"change",b);mxEvent.addListener(l,"change",b);if(null!=a.pages&&(h=a.pages.length,null!=a.currentPage))for(e=0;e<a.pages.length;e++)if(a.currentPage==a.pages[e]){p=e+
+1;w.value=p;l.value=p;break}w.setAttribute("max",h);l.setAttribute("max",h);1<h&&g.appendChild(m);var n=document.createElement("div");n.style.marginBottom="10px";var v=document.createElement("input");v.style.marginRight="8px";v.setAttribute("value","adjust");v.setAttribute("type","radio");v.setAttribute("name","printZoom");n.appendChild(v);e=document.createElement("span");mxUtils.write(e,mxResources.get("adjustTo"));n.appendChild(e);var q=document.createElement("input");q.style.cssText="margin:0 8px 0 8px;";
+q.setAttribute("value","100 %");q.style.width="50px";n.appendChild(q);mxEvent.addListener(q,"focus",function(){v.checked=!0});g.appendChild(n);var m=m.cloneNode(!1),t=v.cloneNode(!0);t.setAttribute("value","fit");v.setAttribute("checked","checked");e=document.createElement("div");e.style.cssText="display:inline-block;height:100%;vertical-align:top;padding-top:2px;";e.appendChild(t);m.appendChild(e);n=document.createElement("table");n.style.display="inline-block";var G=document.createElement("tbody"),
+K=document.createElement("tr"),S=K.cloneNode(!0),J=document.createElement("td"),N=J.cloneNode(!0),U=J.cloneNode(!0),D=J.cloneNode(!0),W=J.cloneNode(!0),O=J.cloneNode(!0);J.style.textAlign="right";D.style.textAlign="right";mxUtils.write(J,mxResources.get("fitTo"));var T=document.createElement("input");T.style.cssText="margin:0 8px 0 8px;";T.setAttribute("value","1");T.setAttribute("min","1");T.setAttribute("type","number");T.style.width="40px";N.appendChild(T);e=document.createElement("span");mxUtils.write(e,
+mxResources.get("fitToSheetsAcross"));U.appendChild(e);mxUtils.write(D,mxResources.get("fitToBy"));var V=T.cloneNode(!0);W.appendChild(V);mxEvent.addListener(T,"focus",function(){t.checked=!0});mxEvent.addListener(V,"focus",function(){t.checked=!0});e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsDown"));O.appendChild(e);K.appendChild(J);K.appendChild(N);K.appendChild(U);S.appendChild(D);S.appendChild(W);S.appendChild(O);G.appendChild(K);G.appendChild(S);n.appendChild(G);
+m.appendChild(n);g.appendChild(m);m=document.createElement("div");e=document.createElement("div");e.style.fontWeight="bold";e.style.marginBottom="12px";mxUtils.write(e,mxResources.get("paperSize"));m.appendChild(e);e=document.createElement("div");e.style.marginBottom="12px";var Y=PageSetupDialog.addPageFormatPanel(e,"printdialog",a.editor.graph.pageFormat||mxConstants.PAGE_FORMAT_A4_PORTRAIT);m.appendChild(e);e=document.createElement("span");mxUtils.write(e,mxResources.get("pageScale"));m.appendChild(e);
+var M=document.createElement("input");M.style.cssText="margin:0 8px 0 8px;";M.setAttribute("value","100 %");M.style.width="60px";m.appendChild(M);g.appendChild(m);e=document.createElement("div");e.style.cssText="text-align:right;margin:62px 0 0 0;";m=mxUtils.button(mxResources.get("cancel"),function(){a.hideDialog()});m.className="geBtn";a.editor.cancelFirst&&e.appendChild(m);a.isOffline()||(n=mxUtils.button(mxResources.get("help"),function(){f.openLink("https://desk.draw.io/support/solutions/articles/16000048947")}),
+n.className="geBtn",e.appendChild(n));PrintDialog.previewEnabled&&(n=mxUtils.button(mxResources.get("preview"),function(){a.hideDialog();c(!1)}),n.className="geBtn",e.appendChild(n));n=mxUtils.button(mxResources.get(PrintDialog.previewEnabled?"print":"ok"),function(){a.hideDialog();c(!0)});n.className="geBtn gePrimaryBtn";e.appendChild(n);a.editor.cancelFirst||e.appendChild(m);g.appendChild(e);this.container=g};var w=ChangePageSetup.prototype.execute;ChangePageSetup.prototype.execute=function(){null==
+this.page&&(this.page=this.ui.currentPage);this.page!=this.ui.currentPage?null!=this.page.viewState&&(this.ignoreColor||(this.page.viewState.background=this.color),this.ignoreImage||(this.page.viewState.backgroundImage=this.image),null!=this.format&&(this.page.viewState.pageFormat=this.format),null!=this.mathEnabled&&(this.page.viewState.mathEnabled=this.mathEnabled),null!=this.shadowVisible&&(this.page.viewState.shadowVisible=this.shadowVisible)):(w.apply(this,arguments),null!=this.mathEnabled&&
+this.mathEnabled!=this.ui.isMathEnabled()&&(this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible))}})();
 (function(){var a=new mxObjectCodec(new ChangePageSetup,["ui","previousColor","previousImage","previousFormat"]);a.beforeDecode=function(a,e,c){c.ui=a.ui;return e};a.afterDecode=function(a,e,c){c.previousColor=c.color;c.previousImage=c.image;c.previousFormat=c.format;null!=c.foldingEnabled&&(c.foldingEnabled=!c.foldingEnabled);null!=c.mathEnabled&&(c.mathEnabled=!c.mathEnabled);null!=c.shadowVisible&&(c.shadowVisible=!c.shadowVisible);return c};mxCodecRegistry.register(a)})();(function(){EditorUi.VERSION="@DRAWIO-VERSION@";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.enableLogging=/.*\.draw\.io$/.test(window.location.hostname);EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.scratchpadHelpLink="https://desk.draw.io/support/solutions/articles/16000042367";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.svgBrokenImage=Graph.createSvgImage(10,10,'<rect x="0" y="0" width="10" height="10" stroke="#000" fill="transparent"/><path d="m 0 0 L 10 10 L 0 10 L 10 0" stroke="#000" fill="transparent"/>');EditorUi.prototype.crossOriginImages=!mxClient.IS_IE;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.printPdfExport=
diff --git a/src/main/webapp/js/atlas.min.js b/src/main/webapp/js/atlas.min.js
index f785234ff..156da7d88 100644
--- a/src/main/webapp/js/atlas.min.js
+++ b/src/main/webapp/js/atlas.min.js
@@ -3879,15 +3879,20 @@ this.createVertexTemplateEntry(a+"unidentified_code_object;",50,42.5,"","Unident
 120,60,"","Partial Rectangle"),this.createVertexTemplateEntry("shape=partialRectangle;whiteSpace=wrap;html=1;bottom=0;right=0;fillColor=none;",120,60,"","Partial Rectangle"),this.createVertexTemplateEntry("shape=partialRectangle;whiteSpace=wrap;html=1;top=0;left=0;fillColor=none;",120,60,"","Partial Rectangle"),this.createVertexTemplateEntry(a+"4_point_star_2;dx=0.8;",100,100,"","4 Point Star",null,null,this.getTagsForStencil("mxgraph.basic","4_point_star","").join(" ")),this.createVertexTemplateEntry(a+
 "6_point_star",100,90,"","6 Point Star",null,null,this.getTagsForStencil("mxgraph.basic","6_point_star","").join(" ")),this.createVertexTemplateEntry(a+"8_point_star",100,100,"","8 Point Star",null,null,this.getTagsForStencil("mxgraph.basic","8_point_star","").join(" ")),this.createVertexTemplateEntry(a+"banner",100,50,"","Banner",null,null,this.getTagsForStencil("mxgraph.basic","banner","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.cloud_callout",
 90,60,"","Cloud Callout",null,null,this.getTagsForStencil("mxgraph.basic","cloud_callout","").join(" ")),this.createVertexTemplateEntry(a+"cone",100,100,"","Cone",null,null,this.getTagsForStencil("mxgraph.basic","cone","").join(" ")),this.createVertexTemplateEntry(a+"cone2;dx=0.5;dy=0.9;",100,100,"","Cone (adjustable)",null,null,this.getTagsForStencil("mxgraph.basic","cone","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.document",100,100,"",
-"Document",null,null,this.getTagsForStencil("mxgraph.basic","document","").join(" ")),this.createVertexTemplateEntry(a+"drop",70,100,"","Drop",null,null,this.getTagsForStencil("mxgraph.basic","drop","").join(" ")),this.createVertexTemplateEntry(a+"flash",60,100,"","Flash",null,null,this.getTagsForStencil("mxgraph.basic","flash","").join(" ")),this.createVertexTemplateEntry(a+"half_circle",100,50,"","Half Circle",null,null,this.getTagsForStencil("mxgraph.basic","half_circle","").join(" ")),this.createVertexTemplateEntry(a+
-"heart",100,100,"","Heart",null,null,this.getTagsForStencil("mxgraph.basic","heart","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.isocube;isoAngle=15;",100,100,"","Isometric Cube",null,null,this.getTagsForStencil("mxgraph.basic","isometric cube","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.loud_callout",100,60,"","Loud Callout",null,null,this.getTagsForStencil("mxgraph.basic","loud_callout",
-"").join(" ")),this.createVertexTemplateEntry(a+"moon",75,100,"","Moon",null,null,this.getTagsForStencil("mxgraph.basic","moon","").join(" ")),this.createVertexTemplateEntry(a+"no_symbol",100,100,"","No Symbol",null,null,this.getTagsForStencil("mxgraph.basic","no_symbol","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.octagon2;align=center;verticalAlign=middle;dx=15;",100,100,"","Octagon",null,null,this.getTagsForStencil("mxgraph.basic","octagon",
-"").join(" ")),this.createVertexTemplateEntry(a+"orthogonal_triangle",100,70,"","Orthogonal Triangle",null,null,this.getTagsForStencil("mxgraph.basic","orthogonal_triangle","").join(" ")),this.createVertexTemplateEntry(a+"acute_triangle;dx=0.5;",100,70,"","Acute Triangle",null,null,this.getTagsForStencil("mxgraph.basic","acute_triangle","").join(" ")),this.createVertexTemplateEntry(a+"obtuse_triangle;dx=0.25;",100,70,"","Obtuse Triangle",null,null,this.getTagsForStencil("mxgraph.basic","obtuse_triangle",
-"").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.oval_callout",100,60,"","Oval Callout",null,null,this.getTagsForStencil("mxgraph.basic","oval_callout","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.pentagon",100,90,"","Pentagon",null,null,this.getTagsForStencil("mxgraph.basic","pentagon","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.pointed_oval",
-50,100,"","Pointed Oval",null,null,this.getTagsForStencil("mxgraph.basic","pointed oval","").join(" ")),this.createVertexTemplateEntry(a+"pyramid;dx1=0.4;dx2=0.6;dy1=0.9;dy2=0.8;",100,100,"","Pyramid",null,null,this.getTagsForStencil("mxgraph.basic","pyramid","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.rectCallout;dx=30;dy=15;boundedLbl=1;",100,60,"","Rectangular Callout",null,null,this.getTagsForStencil("mxgraph.basic","rectangular_callout",
-"").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.roundRectCallout;dx=30;dy=15;size=5;boundedLbl=1;",100,60,"","Rounded Rectangular Callout",null,null,this.getTagsForStencil("mxgraph.basic","rectangular_callout","").join(" ")),this.createVertexTemplateEntry(a+"smiley",100,100,"","Smiley",null,null,this.getTagsForStencil("mxgraph.basic","smiley","").join(" ")),this.createVertexTemplateEntry(a+"star",100,95,"","Star",null,null,this.getTagsForStencil("mxgraph.basic",
-"star","").join(" ")),this.createVertexTemplateEntry(a+"sun",100,100,"","Sun",null,null,this.getTagsForStencil("mxgraph.basic","sun","").join(" ")),this.createVertexTemplateEntry(a+"tick",85,100,"","Tick",null,null,this.getTagsForStencil("mxgraph.basic","tick","").join(" ")),this.createVertexTemplateEntry(a+"wave2;dy=0.3;",100,60,"","Wave",null,null,this.getTagsForStencil("mxgraph.basic","wave","").join(" ")),this.createVertexTemplateEntry(a+"x",100,100,"","X",null,null,this.getTagsForStencil("mxgraph.basic",
-"x","").join(" "))])}})();(function(){Sidebar.prototype.addBootstrapPalette=function(){var a=this,e=[this.addDataEntry("bootstrap button bar dark",800,40,"Button Bar (Dark)","5ZhRb5swEMc/DY+NDKaEvIZ2fdm0qpH27gUDVg2HjNuQfvod2EnJnGxRWqJUsRQJn332+ffnbBOPJmX7oFhd/ICUS4/eezRRANo8lW3CpfQCIlKP3nlBQPDnBd8OtPp9K6mZ4pU+xiEwDq9MvnBjMYZGr6U1FLrEsO58j86bgqWwwgrBSsqagqe2gi11179s824tk9+4gkbj40TxJUYyz4SUCUhQ/aA06EvnqBU8801LBRWOMl8VQvNFzZbdkCscBW02UK40bw8utjfZlT5wKLlWa+yyEqkuTI+YGCCk4CIvrFtobawx9Xzr+o4OHyy9/SSpQzKBsmbV+jSgQ16Wyl5U/wcPlR6An/XF2hfirfP1w48wD45gPg7y0EH+yKFGzGd5hUlfDunyF/asL11nJCyq/MmSoGQE9O0u9oESs5GUuHWUiMNPV8HKoOxbG7uSZNkpkpyMP/wnfuuwttvw5NZRY4NtqIYfGZvikmnxynfG2ieRnf8RBIa1nfyGkp3pb+LdESDLGq4diberOEr1yFH9l4AubKiaC931zph+/tTNP98fKQGnjhTh55/kF5eA0ZUnYOyovtAYdKPF8lITcKRk23fYjXXtmLnUuda4q1wZcxq5zKcjMd/sm8O7ngIkd+Jl76syj87J3HeYf4ccDT9f9HVRn9LRqGP1/WvfHAHDPwP+AA=="),
+"Document",null,null,this.getTagsForStencil("mxgraph.basic","document","").join(" ")),this.createVertexTemplateEntry(a+"donut;dx=25;",100,100,"","Donut",null,null,this.getTagsForStencil("mxgraph.basic","donut","").join(" ")),this.createVertexTemplateEntry(a+"drop",70,100,"","Drop",null,null,this.getTagsForStencil("mxgraph.basic","drop","").join(" ")),this.createVertexTemplateEntry(a+"flash",60,100,"","Flash",null,null,this.getTagsForStencil("mxgraph.basic","flash","").join(" ")),this.createVertexTemplateEntry(a+
+"half_circle",100,50,"","Half Circle",null,null,this.getTagsForStencil("mxgraph.basic","half_circle","").join(" ")),this.createVertexTemplateEntry(a+"heart",100,100,"","Heart",null,null,this.getTagsForStencil("mxgraph.basic","heart","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.isocube;isoAngle=15;",100,100,"","Isometric Cube",null,null,this.getTagsForStencil("mxgraph.basic","isometric cube","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.loud_callout",
+100,60,"","Loud Callout",null,null,this.getTagsForStencil("mxgraph.basic","loud_callout","").join(" ")),this.createVertexTemplateEntry(a+"moon",75,100,"","Moon",null,null,this.getTagsForStencil("mxgraph.basic","moon","").join(" ")),this.createVertexTemplateEntry(a+"no_symbol",100,100,"","No Symbol",null,null,this.getTagsForStencil("mxgraph.basic","no_symbol","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.octagon2;align=center;verticalAlign=middle;dx=15;",
+100,100,"","Octagon",null,null,this.getTagsForStencil("mxgraph.basic","octagon","").join(" ")),this.createVertexTemplateEntry(a+"orthogonal_triangle",100,70,"","Orthogonal Triangle",null,null,this.getTagsForStencil("mxgraph.basic","orthogonal_triangle","").join(" ")),this.createVertexTemplateEntry(a+"acute_triangle;dx=0.5;",100,70,"","Acute Triangle",null,null,this.getTagsForStencil("mxgraph.basic","acute_triangle","").join(" ")),this.createVertexTemplateEntry(a+"obtuse_triangle;dx=0.25;",100,70,
+"","Obtuse Triangle",null,null,this.getTagsForStencil("mxgraph.basic","obtuse_triangle","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.oval_callout",100,60,"","Oval Callout",null,null,this.getTagsForStencil("mxgraph.basic","oval_callout","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.pentagon",100,90,"","Pentagon",null,null,this.getTagsForStencil("mxgraph.basic","pentagon","").join(" ")),
+this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.pointed_oval",50,100,"","Pointed Oval",null,null,this.getTagsForStencil("mxgraph.basic","pointed oval","").join(" ")),this.createVertexTemplateEntry(a+"pyramid;dx1=0.4;dx2=0.6;dy1=0.9;dy2=0.8;",100,100,"","Pyramid",null,null,this.getTagsForStencil("mxgraph.basic","pyramid","").join(" ")),this.createVertexTemplateEntry(a+"diag_snip_rect;dx=6;",100,60,"","Diagonal Snip Rectangle",null,null,this.getTagsForStencil("mxgraph.basic",
+"diag_snip_rect","").join(" ")),this.createVertexTemplateEntry(a+"diag_round_rect;dx=6;",100,60,"","Diagonal Rounded Rectangle",null,null,this.getTagsForStencil("mxgraph.basic","diag_round_rect","").join(" ")),this.createVertexTemplateEntry(a+"corner_round_rect;dx=6;",100,60,"","Corner Rounded Rectangle",null,null,this.getTagsForStencil("mxgraph.basic","corner_round_rect","").join(" ")),this.createVertexTemplateEntry(a+"plaque;dx=6;",100,60,"","Plaque",null,null,this.getTagsForStencil("mxgraph.basic",
+"plaque","").join(" ")),this.createVertexTemplateEntry(a+"frame;dx=10;",100,60,"","Frame",null,null,this.getTagsForStencil("mxgraph.basic","frame","").join(" ")),this.createVertexTemplateEntry(a+"rounded_frame;dx=10;",100,60,"","Rounded Frame",null,null,this.getTagsForStencil("mxgraph.basic","rounded_frame","").join(" ")),this.createVertexTemplateEntry(a+"plaque_frame;dx=10;",100,60,"","Plaque Frame",null,null,this.getTagsForStencil("mxgraph.basic","plaque_frame","").join(" ")),this.createVertexTemplateEntry(a+
+"frame_corner;dx=10;",100,60,"","Frame Corner",null,null,this.getTagsForStencil("mxgraph.basic","frame_corner","").join(" ")),this.createVertexTemplateEntry(a+"diag_stripe;dx=10;",100,60,"","Diagonal Stripe",null,null,this.getTagsForStencil("mxgraph.basic","diag_stripe","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.rectCallout;dx=30;dy=15;boundedLbl=1;",100,60,"","Rectangular Callout",null,null,this.getTagsForStencil("mxgraph.basic","rectangular_callout",
+"").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;whiteSpace=wrap;html=1;shape=mxgraph.basic.roundRectCallout;dx=30;dy=15;size=5;boundedLbl=1;",100,60,"","Rounded Rectangular Callout",null,null,this.getTagsForStencil("mxgraph.basic","rectangular_callout","").join(" ")),this.createVertexTemplateEntry(a+"layered_rect;dx=10;",100,60,"","Layered Rectangle",null,null,this.getTagsForStencil("mxgraph.basic","layered_rect","").join(" ")),this.createVertexTemplateEntry(a+"smiley",100,100,"","Smiley",
+null,null,this.getTagsForStencil("mxgraph.basic","smiley","").join(" ")),this.createVertexTemplateEntry(a+"star",100,95,"","Star",null,null,this.getTagsForStencil("mxgraph.basic","star","").join(" ")),this.createVertexTemplateEntry(a+"sun",100,100,"","Sun",null,null,this.getTagsForStencil("mxgraph.basic","sun","").join(" ")),this.createVertexTemplateEntry(a+"tick",85,100,"","Tick",null,null,this.getTagsForStencil("mxgraph.basic","tick","").join(" ")),this.createVertexTemplateEntry(a+"wave2;dy=0.3;",
+100,60,"","Wave",null,null,this.getTagsForStencil("mxgraph.basic","wave","").join(" ")),this.createVertexTemplateEntry("labelPosition=center;verticalLabelPosition=middle;html=1;strokeWidth=2;shape=mxgraph.basic.button;dx=10;",100,60,"Button","Button",null,null,this.getTagsForStencil("mxgraph.basic","button","").join(" ")),this.createVertexTemplateEntry("labelPosition=center;verticalLabelPosition=middle;html=1;strokeWidth=2;shape=mxgraph.basic.shaded_button;dx=10;fillColor=#E6E6E6;strokeColor=none;",
+100,60,"Button","Button (shaded)",null,null,this.getTagsForStencil("mxgraph.basic","button","").join(" ")),this.createVertexTemplateEntry(a+"x",100,100,"","X",null,null,this.getTagsForStencil("mxgraph.basic","x","").join(" ")),this.createVertexTemplateEntry(a+"pie;startAngle=0.2;endAngle=0.9;",100,100,"","Pie",null,null,this.getTagsForStencil("mxgraph.basic","pie","").join(" ")),this.createVertexTemplateEntry(a+"arc;startAngle=0.3;endAngle=0.1;",100,100,"","Arc",null,null,this.getTagsForStencil("mxgraph.basic",
+"arc","").join(" ")),this.createVertexTemplateEntry(a+"partConcEllipse;startAngle=0.25;endAngle=0.1;arcWidth=0.5;",100,100,"","Partial Concentric Ellipse",null,null,this.getTagsForStencil("mxgraph.basic","partConcEllipse","").join(" "))])}})();(function(){Sidebar.prototype.addBootstrapPalette=function(){var a=this,e=[this.addDataEntry("bootstrap button bar dark",800,40,"Button Bar (Dark)","5ZhRb5swEMc/DY+NDKaEvIZ2fdm0qpH27gUDVg2HjNuQfvod2EnJnGxRWqJUsRQJn332+ffnbBOPJmX7oFhd/ICUS4/eezRRANo8lW3CpfQCIlKP3nlBQPDnBd8OtPp9K6mZ4pU+xiEwDq9MvnBjMYZGr6U1FLrEsO58j86bgqWwwgrBSsqagqe2gi11179s824tk9+4gkbj40TxJUYyz4SUCUhQ/aA06EvnqBU8801LBRWOMl8VQvNFzZbdkCscBW02UK40bw8utjfZlT5wKLlWa+yyEqkuTI+YGCCk4CIvrFtobawx9Xzr+o4OHyy9/SSpQzKBsmbV+jSgQ16Wyl5U/wcPlR6An/XF2hfirfP1w48wD45gPg7y0EH+yKFGzGd5hUlfDunyF/asL11nJCyq/MmSoGQE9O0u9oESs5GUuHWUiMNPV8HKoOxbG7uSZNkpkpyMP/wnfuuwttvw5NZRY4NtqIYfGZvikmnxynfG2ieRnf8RBIa1nfyGkp3pb+LdESDLGq4diberOEr1yFH9l4AubKiaC931zph+/tTNP98fKQGnjhTh55/kF5eA0ZUnYOyovtAYdKPF8lITcKRk23fYjXXtmLnUuda4q1wZcxq5zKcjMd/sm8O7ngIkd+Jl76syj87J3HeYf4ccDT9f9HVRn9LRqGP1/WvfHAHDPwP+AA=="),
 this.addDataEntry("bootstrap button bar bright",800,40,"Button Bar (Bright)","5ZdRb5swEMc/DY9FBhNCXkPavmxStUh798IB1gxGxmvIPv0OcBKoSZetpYpUIyT77DP278+dwaFx0TwqVuVfZQLCofcOjZWUuq8VTQxCOD7hiUM3ju8TvB3/4UKv1/WSiiko9TUOfu/wzMQv6C29odYHYQy5LnBZG8+h6zpnidxjg2AjYXUOiWlgT9WOL5qs3Yv7A3dQa6y6Cna4knXKhYilkKqblKZhe7WOWsmfcOwpZYmzrPc517Ct2K6dco+zoM0sFJSG5uJmO5PZ6SPIArQ64JA9T3Tej4hID4TkwLPcuAXGxuq+nZ1cz+iwYuhNk6QWyVgWFSsP/wd0yMtQmUT1d/Cy1APwSVeMfct/t75e8Bbm/hXM50EeWMifQFaI+WNeYdJel3R5gX3VlXYwEuZl9s2QoGQG9M0Y+0CJ1UxKLCwlouDdVTAyKPPWRhOSpATLlZKkXXkL/uBV/MbhYNKwu7DUOGIbquGFvU2BYJo/w2iuKYnM858kx2WdHn5Hyejxd9F4BpmmNWhL4tMurlI9tFT/zmW7bFnWN5r1PjD8vKUdf543UwAuLSmC9z/Jby4Aw08egJGl+lbjomvNd7cagDMF29RhN9dnx8qmDlpjVvlkzGloM1/OxPyYN0fQmdrlruvOnecWU3nOpK6xUC+/r6fsTPCsRJuAVJ8PpC9da+PNeB6Fi3FGstOhRyfUo/+uHjbPf7B9Whv+4P4B"),
 this.addEntry("bootstrap button group vertical",function(){var d=new mxCell("",new mxGeometry(0,0,100,150),"html=1;shadow=0;dashed=0;shape=mxgraph.bootstrap.rrect;rSize=5;strokeColor=#dddddd;html=1;whiteSpace=wrap;fillColor=#ffffff;");d.vertex=!0;var b=new mxCell("Edit",new mxGeometry(0,0,100,30),"strokeColor=inherit;fillColor=inherit;gradientColor=inherit;html=1;shadow=0;dashed=0;shape=mxgraph.bootstrap.topButton;rSize=5;perimeter=none;whiteSpace=wrap;resizeWidth=1;");b.geometry.relative=!0;b.vertex=
 !0;d.insert(b);b=new mxCell("Create",new mxGeometry(0,0,100,30),"strokeColor=inherit;fillColor=inherit;gradientColor=inherit;html=1;shadow=0;dashed=0;shape=mxgraph.bootstrap.rect;perimeter=none;whiteSpace=wrap;resizeWidth=1;");b.geometry.relative=!0;b.geometry.offset=new mxPoint(0,30);b.vertex=!0;d.insert(b);var c=new mxCell("Delete",new mxGeometry(0,0,100,30),"strokeColor=inherit;fillColor=inherit;gradientColor=inherit;html=1;shadow=0;dashed=0;shape=mxgraph.bootstrap.rect;perimeter=none;whiteSpace=wrap;resizeWidth=1;");
@@ -4585,20 +4590,20 @@ function(){var e=new mxCell("",new mxGeometry(20,20,520,100),"shape=ellipse;shad
 new mxCell("",new mxGeometry(110,0,40,43),a+"office_chair;shadow=0;");g.vertex=!0;var k=new mxCell("",new mxGeometry(110,97,40,43),a+"office_chair;shadow=0;direction=west;");k.vertex=!0;var m=new mxCell("",new mxGeometry(170,0,40,43),a+"office_chair;shadow=0;");m.vertex=!0;var l=new mxCell("",new mxGeometry(170,97,40,43),a+"office_chair;shadow=0;direction=west;");l.vertex=!0;var r=new mxCell("",new mxGeometry(230,0,40,43),a+"office_chair;shadow=0;");r.vertex=!0;var n=new mxCell("",new mxGeometry(230,
 97,40,43),a+"office_chair;shadow=0;direction=west;");n.vertex=!0;var p=new mxCell("",new mxGeometry(290,0,40,43),a+"office_chair;shadow=0;");p.vertex=!0;var q=new mxCell("",new mxGeometry(290,97,40,43),a+"office_chair;shadow=0;direction=west;");q.vertex=!0;var w=new mxCell("",new mxGeometry(350,0,40,43),a+"office_chair;shadow=0;");w.vertex=!0;var v=new mxCell("",new mxGeometry(350,97,40,43),a+"office_chair;shadow=0;direction=west;");v.vertex=!0;var y=new mxCell("",new mxGeometry(410,0,40,43),a+"office_chair;shadow=0;");
 y.vertex=!0;var x=new mxCell("",new mxGeometry(410,97,40,43),a+"office_chair;shadow=0;direction=west;");x.vertex=!0;var u=new mxCell("",new mxGeometry(470,0,40,43),a+"office_chair;shadow=0;");u.vertex=!0;var t=new mxCell("",new mxGeometry(470,97,40,43),a+"office_chair;shadow=0;direction=west;");t.vertex=!0;return sb.createVertexTemplateFromCells([b,c,h,f,g,k,m,l,r,n,p,q,w,v,y,x,u,t,e],560,140,"Conference table")})];this.addPalette("floorplan",mxResources.get("floorplans"),!1,mxUtils.bind(this,function(a){for(var b=
-0;b<e.length;b++)a.appendChild(e[b](a))}))}})();(function(){Sidebar.prototype.addFlowchartPalette=function(){var a=mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;html=1;strokeWidth=2;shape=mxgraph.flowchart.";this.addPaletteFunctions("flowchart",mxResources.get("flowchart"),!1,[this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;",50,100,"","Annotation",null,null,this.getTagsForStencil("mxgraph.flowchart","annotation_1","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_2;align=left;",
-50,100,"","Annotation",null,null,this.getTagsForStencil("mxgraph.flowchart","annotation_2","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.card;whiteSpace=wrap;",100,60,"","Card",null,null,this.getTagsForStencil("mxgraph.flowchart","card","").join(" ")),this.createVertexTemplateEntry(a+"collate;",100,100,"","Collate",null,null,this.getTagsForStencil("mxgraph.flowchart","collate","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.data;whiteSpace=wrap;",
-100,60,"","Data",null,null,this.getTagsForStencil("mxgraph.flowchart","data","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.database;whiteSpace=wrap;",60,60,"","Database",null,null,this.getTagsForStencil("mxgraph.flowchart","database","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.decision;whiteSpace=wrap;",100,100,"","Decision",null,null,this.getTagsForStencil("mxgraph.flowchart","decision","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.delay;whiteSpace=wrap;",
-100,60,"","Delay",null,null,this.getTagsForStencil("mxgraph.flowchart","delay","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.direct_data;whiteSpace=wrap;",100,60,"","Direct Data",null,null,this.getTagsForStencil("mxgraph.flowchart","direct_data","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.display;whiteSpace=wrap;",100,60,"","Display",null,null,this.getTagsForStencil("mxgraph.flowchart","display","").join(" ")),
-this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.document;whiteSpace=wrap;",100,60,"","Document",null,null,this.getTagsForStencil("mxgraph.flowchart","document","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.extract_or_measurement;whiteSpace=wrap;",95,60,"","Extract or Measurement",null,null,this.getTagsForStencil("mxgraph.flowchart","extract_or_measurement","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.internal_storage;whiteSpace=wrap;",
-70,70,"","Internal Storage",null,null,this.getTagsForStencil("mxgraph.flowchart","internal_storage","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.loop_limit;whiteSpace=wrap;",100,60,"","Loop Limit",null,null,this.getTagsForStencil("mxgraph.flowchart","loop_limit","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.manual_input;whiteSpace=wrap;",100,60,"","Manual Input",null,null,this.getTagsForStencil("mxgraph.flowchart",
-"manual_input","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.manual_operation;whiteSpace=wrap;",100,60,"","Manual Operation",null,null,this.getTagsForStencil("mxgraph.flowchart","manual_operation","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.merge_or_storage;whiteSpace=wrap;",95,60,"","Merge or Storage",null,null,this.getTagsForStencil("mxgraph.flowchart","merge_or_storage","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.multi-document;whiteSpace=wrap;",
-88,60,"","Multi-Document",null,null,this.getTagsForStencil("mxgraph.flowchart","multi-document","").join(" ")),this.createVertexTemplateEntry(a+"off-page_reference;",60,60,"","Off-Page Reference",null,null,this.getTagsForStencil("mxgraph.flowchart","off-page_reference","").join(" ")),this.createVertexTemplateEntry(a+"on-page_reference;",60,60,"","On-Page Reference",null,null,this.getTagsForStencil("mxgraph.flowchart","on-page_reference","").join(" ")),this.createVertexTemplateEntry(a+"summing_function;",
-70,70,"","Or",null,null,this.getTagsForStencil("mxgraph.flowchart","summing_function","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.paper_tape;whiteSpace=wrap;",100,65,"","Paper Tape",null,null,this.getTagsForStencil("mxgraph.flowchart","paper_tape","").join(" ")),this.createVertexTemplateEntry(a+"parallel_mode;",95,40,"","Parallel Mode",null,null,this.getTagsForStencil("mxgraph.flowchart","parallel_mode","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.predefined_process;whiteSpace=wrap;",
-100,60,"","Predefined Process",null,null,this.getTagsForStencil("mxgraph.flowchart","predefined_process","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.preparation;whiteSpace=wrap;",100,60,"","Preparation",null,null,this.getTagsForStencil("mxgraph.flowchart","preparation","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.process;whiteSpace=wrap;",100,100,"","Process",null,null,this.getTagsForStencil("mxgraph.flowchart",
-"process","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.sequential_data;whiteSpace=wrap;",100,100,"","Sequential Data",null,null,this.getTagsForStencil("mxgraph.flowchart","sequential_data","").join(" ")),this.createVertexTemplateEntry(a+"sort;",100,100,"","Sort",null,null,this.getTagsForStencil("mxgraph.flowchart","sort","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.start_1;whiteSpace=wrap;",100,60,"","Start",
-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.addGoogleCloudPlatformCardsPalette=function(){var a=[this.addDataEntry("gcp google cloud platform cardproduct",170,55,"Product Card","rZRdb4MgFIZ/DZczKq11l539uFqyZBe7XIgclQzFIG3tfv1AsNXpsi4dxggv5+DxeQWEk7LdS1IXz4ICR3iLcCKFULZXtglwjkKfUYQ3KAx9faNw98Ns0M36NZFQqVsSQptwJPwAVrFCo87cCZQ0BZhwH+GnQpW6xk2gu42S4gMSwYXsAjHtmp7JGOfpVc+6pvVcEsp0YX1OJSowCxWEitNo1TdGVeEUVyFIBe2PX9lJ7hP3IEpQ8qxDTm4dE7GyJPwCWF64tOXSaqSx4/ySemWmOw7bPEJ8B8KC1CakbHPzB3h5WnupKOuDgv75DlXOOkyG6oD2Aser3WaGqpmLYrxdTzxyvDU39Re24a9scexFj8MWTVHjhedgS+BEsSOMXjjngHvni2C6lNDvK3Q+nsfDfgGRZQ2oiYGXwm/ydDHxNLF2aHFrDfnusSaojEuiUq/s04gBduOBM7FvLq0TzvJKaxwyk2YsYCnhayeXjFL+j2Y5WH7vwXBjBDMbwx0b93oVjb16CML7zdLD6/low4fH5xc="),
+0;b<e.length;b++)a.appendChild(e[b](a))}))}})();(function(){Sidebar.prototype.addFlowchartPalette=function(){var a=mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;html=1;strokeWidth=2;shape=mxgraph.flowchart.",e=mxConstants.STYLE_VERTICAL_LABEL_POSITION+"=bottom;"+mxConstants.STYLE_VERTICAL_ALIGN+"=top;html=1;strokeWidth=2;shape=";this.addPaletteFunctions("flowchart",mxResources.get("flowchart"),!1,[this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;",
+50,100,"","Annotation",null,null,this.getTagsForStencil("mxgraph.flowchart","annotation_1","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_2;align=left;",50,100,"","Annotation",null,null,this.getTagsForStencil("mxgraph.flowchart","annotation_2","").join(" ")),this.createVertexTemplateEntry(e+"card;whiteSpace=wrap;size=20;arcSize=12;",100,60,"","Card",null,null,this.getTagsForStencil("mxgraph.flowchart","card","").join(" ")),this.createVertexTemplateEntry(a+
+"collate;",100,100,"","Collate",null,null,this.getTagsForStencil("mxgraph.flowchart","collate","").join(" ")),this.createVertexTemplateEntry(e+"parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;rounded=1;arcSize=12;size=0.23;",100,60,"","Data",null,null,this.getTagsForStencil("mxgraph.flowchart","data","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.database;whiteSpace=wrap;",60,60,"","Database",null,null,this.getTagsForStencil("mxgraph.flowchart",
+"database","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.decision;whiteSpace=wrap;",100,100,"","Decision",null,null,this.getTagsForStencil("mxgraph.flowchart","decision","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.delay;whiteSpace=wrap;",100,60,"","Delay",null,null,this.getTagsForStencil("mxgraph.flowchart","delay","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.direct_data;whiteSpace=wrap;",
+100,60,"","Direct Data",null,null,this.getTagsForStencil("mxgraph.flowchart","direct_data","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.display;whiteSpace=wrap;",100,60,"","Display",null,null,this.getTagsForStencil("mxgraph.flowchart","display","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.document2;whiteSpace=wrap;size=0.25;",100,60,"","Document",null,null,this.getTagsForStencil("mxgraph.flowchart","document",
+"").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.extract_or_measurement;whiteSpace=wrap;",95,60,"","Extract or Measurement",null,null,this.getTagsForStencil("mxgraph.flowchart","extract_or_measurement","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.internal_storage;whiteSpace=wrap;",70,70,"","Internal Storage",null,null,this.getTagsForStencil("mxgraph.flowchart","internal_storage","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.loop_limit;whiteSpace=wrap;",
+100,60,"","Loop Limit",null,null,this.getTagsForStencil("mxgraph.flowchart","loop_limit","").join(" ")),this.createVertexTemplateEntry(e+"manualInput;whiteSpace=wrap;rounded=1;size=26;arcSize=11;",100,60,"","Manual Input",null,null,this.getTagsForStencil("mxgraph.flowchart","manual_input","").join(" ")),this.createVertexTemplateEntry(e+"trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;size=0.23;arcSize=10;flipV=1;",100,60,"","Manual Operation",null,null,this.getTagsForStencil("mxgraph.flowchart",
+"manual_operation","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.merge_or_storage;whiteSpace=wrap;",95,60,"","Merge or Storage",null,null,this.getTagsForStencil("mxgraph.flowchart","merge_or_storage","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.multi-document;whiteSpace=wrap;",88,60,"","Multi-Document",null,null,this.getTagsForStencil("mxgraph.flowchart","multi-document","").join(" ")),this.createVertexTemplateEntry(e+
+"offPageConnector;rounded=0;size=0.5;",60,60,"","Off-Page Reference",null,null,this.getTagsForStencil("mxgraph.flowchart","off-page_reference","").join(" ")),this.createVertexTemplateEntry(a+"on-page_reference;",60,60,"","On-Page Reference",null,null,this.getTagsForStencil("mxgraph.flowchart","on-page_reference","").join(" ")),this.createVertexTemplateEntry(a+"summing_function;",70,70,"","Or",null,null,this.getTagsForStencil("mxgraph.flowchart","summing_function","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.paper_tape;whiteSpace=wrap;",
+100,65,"","Paper Tape",null,null,this.getTagsForStencil("mxgraph.flowchart","paper_tape","").join(" ")),this.createVertexTemplateEntry(a+"parallel_mode;",95,40,"","Parallel Mode",null,null,this.getTagsForStencil("mxgraph.flowchart","parallel_mode","").join(" ")),this.createVertexTemplateEntry(e+"process;whiteSpace=wrap;rounded=1;size=0.14;arcSize=6;",100,60,"","Predefined Process",null,null,this.getTagsForStencil("mxgraph.flowchart","predefined_process","").join(" ")),this.createVertexTemplateEntry(e+
+"hexagon;perimeter=hexagonPerimeter2;arcSize=6;size=0.27;",100,60,"","Preparation",null,null,this.getTagsForStencil("mxgraph.flowchart","preparation","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.process;whiteSpace=wrap;",100,100,"","Process",null,null,this.getTagsForStencil("mxgraph.flowchart","process","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.sequential_data;whiteSpace=wrap;",100,100,"","Sequential Data",
+null,null,this.getTagsForStencil("mxgraph.flowchart","sequential_data","").join(" ")),this.createVertexTemplateEntry(a+"sort;",100,100,"","Sort",null,null,this.getTagsForStencil("mxgraph.flowchart","sort","").join(" ")),this.createVertexTemplateEntry("strokeWidth=2;html=1;shape=mxgraph.flowchart.start_1;whiteSpace=wrap;",100,60,"","Start",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.addGoogleCloudPlatformCardsPalette=function(){var a=[this.addDataEntry("gcp google cloud platform cardproduct",170,55,"Product Card","rZRdb4MgFIZ/DZczKq11l539uFqyZBe7XIgclQzFIG3tfv1AsNXpsi4dxggv5+DxeQWEk7LdS1IXz4ICR3iLcCKFULZXtglwjkKfUYQ3KAx9faNw98Ns0M36NZFQqVsSQptwJPwAVrFCo87cCZQ0BZhwH+GnQpW6xk2gu42S4gMSwYXsAjHtmp7JGOfpVc+6pvVcEsp0YX1OJSowCxWEitNo1TdGVeEUVyFIBe2PX9lJ7hP3IEpQ8qxDTm4dE7GyJPwCWF64tOXSaqSx4/ySemWmOw7bPEJ8B8KC1CakbHPzB3h5WnupKOuDgv75DlXOOkyG6oD2Aser3WaGqpmLYrxdTzxyvDU39Re24a9scexFj8MWTVHjhedgS+BEsSOMXjjngHvni2C6lNDvK3Q+nsfDfgGRZQ2oiYGXwm/ydDHxNLF2aHFrDfnusSaojEuiUq/s04gBduOBM7FvLq0TzvJKaxwyk2YsYCnhayeXjFL+j2Y5WH7vwXBjBDMbwx0b93oVjb16CML7zdLD6/low4fH5xc="),
 this.addDataEntry("gcp google cloud platform cardproduct",190,55,"Product Card","5ZVdb4MgFIZ/jZczVlpnLzv7cbVkyS52uRA5KimKQdrqfv1AsNVos27droYxwss5eHwfUQdFeb0TuMyeOQHmoI2DIsG5NL28joAxx/cocdDa8X1PnY6/vTI7a2e9Egso5C0Jvkk4YnYAoxihkg2zAsFVBjrcc9BTJnNV43qmupUUfA8RZ1y0gYi0Tc0klLH4oidtU3oqMKGqsC6n4AXohTJM+Gmw6hslMrOKrRCEhPrqU7aSfcQd8BykaFTIya6jI5bGCS8DmmY2bbEwGq7MOD2nXjxTHWvbtIXoDgszXOqQvE71G+CmcenGPC8PErrrOxQpbW3SrvbcnqPwcbuecFXPBSHarEaMrN/KN/kdb/0vvUWhGyz7LRhbjeauNVsAw5IeYXDDKQL2ni+cqlJ8r6vQcmyGw24BniQVyBHAc+E3MZ2PmK4KzBpJ40rJTzjeQ0FGmJWJUoPihXylH1qcITvuw2mb0jGjaaE0BolO0xRojNnKyjklhP0iL+uX12Ho7w00sTfsl+NeXMEQ14P/F7wWI16R2T5K3JgN9DNYoaePfwfrHjhqePl/mfD+7+0T"),
 this.addDataEntry("gcp google cloud platform cardproduct",190,110,"Product Card","5ZddT4MwFIZ/DZcujG7ILif7uDIx8cJL09ADNBZKSlXw19vS4iCwOJ0at3VZ1r49p5T3oTvBQWFWbQUu0ltOgDlo7aBQcC5NL6tCYMzxXEoctHI8z1Vfx9vsmZ02s26BBeTykATPJLxg9gxGMUIpa2YFgssUdLjroJtUZmqPq6nqllLwJwg546IJRKRpaiamjEU7PW6a0hOBCVUba3NynoNeKMWEv/ZWfaBEplaxOwQhodp7l41kb3ELPAMpahXyatfREQvjhJsCTVKbNp8bDZdmnHyk7jxTHWvbuIXoCAtTXOiQrEr0EzBJomIS8ax4ltD+PkKe0MYm7WrH7RkKrjerEVf1nB+g9XLAyPqtfJNf8db71FsUTPxFt/lDq9FsYs0WwLCkL9C74BgBe807TtVWPLfdoeVY94ftAjyOS5ADgB8bP4jpbMB0mWNWSxqVSr7B0RPkZIBZmSg1KJ7Le/qmxSmy4y6cpikdM5rkSmMQ6zRNgUaYLa2cUULYD/Kyfrkthu7ZQCNnw/5zHIvL7+O68n6D13zAKzTHR4lrc4C+Bytw9efiYP0oHP+8a0zdLyV/UXKuz73k+JdXcoJTLjl7eJ1zyVmcbMn5n7COgaOGu1cmE959o3oH"),
 this.addDataEntry("gcp google cloud platform cardexpanded product",190,80,"Expanded Product Card","5ZZdb4MgFIZ/jbdGpbXusrMf2UWTJbvY5ULkKGQIBunW7tcPBPsR26zZ5s1G0xRezkF8Xjw1QHm9Wyvc0I0kwAO0DFCupNSuV+9y4DxIIkYCtAiSJDLfIFldmY272ajBCoS+JSFxCW+Yb8EpTmj1nnuB4JaCDY8CdE91bfa4iE231Uq+Qi65VF0gIl0zMyXjvDjqZdeMXilMmNlYnyOkALsQxUS+n636zIimXvE7BKVhd/UuO8nf4hpkDVrtTci7X8dG3DkSEQVWUZ+WeQ23blwdUo/MTMdju4wQ/QAhxY0NqXeVPQFhVTRhIetmq6H/fQFRsQ6TpXpCe4Ky2WpxgaqdSzO0nA888rxvApp8CRRlYXp32tIhXzQJp05VwLFmb3B2wUvY/TUfJTNbSaJ+h96o/fmwX0CWZQt64Nph4zcZORkYeY91QY30qGQBbctENbDWMNTWHCn0E/uwYoz8+NSQrhkdc1YJo3EobZo1gRWYz71cM0L4L3oUowuH3peEn1qSnluSjeDIdOBI7p4KIy7dc/E9P7LIfv60H6MYkn5d6/qaxl3Vuv4vMSbSeBSkkzGQzgZIN1uuWcPtIX8QrcbC1J5bznnyL+vO9BdMMcPjK5cLP30j+wQ="),
@@ -6824,33 +6829,33 @@ m.setAttribute("in","blur");m.setAttribute("dx",this.svgShadowSize);m.setAttribu
 f.createElement("feComposite");m.setAttribute("in","offsetColor");m.setAttribute("in2","offsetBlur");m.setAttribute("operator","in");m.setAttribute("result","offsetBlur");h.appendChild(m);m=null!=f.createElementNS?f.createElementNS(mxConstants.NS_SVG,"feBlend"):f.createElement("feBlend");m.setAttribute("in","SourceGraphic");m.setAttribute("in2","offsetBlur");h.appendChild(m);m=a.getElementsByTagName("defs");0==m.length?(f=null!=f.createElementNS?f.createElementNS(mxConstants.NS_SVG,"defs"):f.createElement("defs"),
 null!=a.firstChild?a.insertBefore(f,a.firstChild):a.appendChild(f)):f=m[0];f.appendChild(h);b||((c||a.getElementsByTagName("g")[0]).setAttribute("filter","url(#"+this.shadowId+")"),isNaN(parseInt(a.getAttribute("width")))||(a.setAttribute("width",parseInt(a.getAttribute("width"))+6),a.setAttribute("height",parseInt(a.getAttribute("height"))+6)));return h};Graph.prototype.setShadowVisible=function(a,c){mxClient.IS_SVG&&(c=null!=c?c:!0,(this.shadowVisible=a)?this.view.getDrawPane().setAttribute("filter",
 "url(#"+this.shadowId+")"):this.view.getDrawPane().removeAttribute("filter"),c&&this.fireEvent(new mxEventObject("shadowVisibleChanged")))};Graph.prototype.selectUnlockedLayer=function(){if(null==this.defaultParent){var a=this.model.getChildCount(this.model.root),c,b=0;do c=this.model.getChildAt(this.model.root,b);while(b++<a&&"1"==mxUtils.getValue(this.getCellStyle(c),"locked","0"));null!=c&&this.setDefaultParent(c)}};mxStencilRegistry.libraries.mockup=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];
-mxStencilRegistry.libraries.arrows2=[SHAPES_PATH+"/mxArrows.js"];mxStencilRegistry.libraries.atlassian=[STENCIL_PATH+"/atlassian.xml"];mxStencilRegistry.libraries.bpmn=[SHAPES_PATH+"/bpmn/mxBpmnShape2.js",STENCIL_PATH+"/bpmn.xml"];mxStencilRegistry.libraries.er=[SHAPES_PATH+"/er/mxER.js"];mxStencilRegistry.libraries.ios=[SHAPES_PATH+"/mockup/mxMockupiOS.js"];mxStencilRegistry.libraries.rackGeneral=[SHAPES_PATH+"/rack/mxRack.js",STENCIL_PATH+"/rack/general.xml"];mxStencilRegistry.libraries.rackF5=
-[STENCIL_PATH+"/rack/f5.xml"];mxStencilRegistry.libraries.lean_mapping=[SHAPES_PATH+"/mxLeanMap.js",STENCIL_PATH+"/lean_mapping.xml"];mxStencilRegistry.libraries.basic=[SHAPES_PATH+"/mxBasic.js",STENCIL_PATH+"/basic.xml"];mxStencilRegistry.libraries.ios7icons=[STENCIL_PATH+"/ios7/icons.xml"];mxStencilRegistry.libraries.ios7ui=[SHAPES_PATH+"/ios7/mxIOS7Ui.js",STENCIL_PATH+"/ios7/misc.xml"];mxStencilRegistry.libraries.android=[SHAPES_PATH+"/mxAndroid.js",STENCIL_PATH+"/android/android.xml"];mxStencilRegistry.libraries["electrical/transmission"]=
-[SHAPES_PATH+"/mxElectrical.js",STENCIL_PATH+"/electrical/transmission.xml"];mxStencilRegistry.libraries["mockup/buttons"]=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];mxStencilRegistry.libraries["mockup/containers"]=[SHAPES_PATH+"/mockup/mxMockupContainers.js"];mxStencilRegistry.libraries["mockup/forms"]=[SHAPES_PATH+"/mockup/mxMockupForms.js"];mxStencilRegistry.libraries["mockup/graphics"]=[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 c=null;null!=a&&0<a.length&&("ER"==a.substring(0,2)?c="mxgraph.er":"sysML"==a.substring(0,5)&&(c="mxgraph.sysml"));return c};var u=mxMarker.createMarker;mxMarker.createMarker=function(a,c,b,f,h,d,e,g,t,q){if(null!=b&&null==mxMarker.markers[b]){var m=this.getPackageForType(b);null!=m&&mxStencilRegistry.getStencil(m)}return u.apply(this,arguments)};PrintDialog.prototype.create=function(a,c){function b(){l.value=Math.max(1,
-Math.min(g,Math.max(parseInt(l.value),parseInt(n.value))));n.value=Math.max(1,Math.min(g,Math.min(parseInt(l.value),parseInt(n.value))))}function f(c){function b(c,b,h){var m=c.getGraphBounds(),d=0,e=0,g=X.get(),q=1/c.pageScale,t=z.checked;if(t)var q=parseInt(R.value),u=parseInt(U.value),q=Math.min(g.height*u/(m.height/c.view.scale),g.width*q/(m.width/c.view.scale));else q=parseInt(p.value)/(100*c.pageScale),isNaN(q)&&(f=1/c.pageScale,p.value="100 %");g=mxRectangle.fromRectangle(g);g.width=Math.ceil(g.width*
-f);g.height=Math.ceil(g.height*f);q*=f;!t&&c.pageVisible?(m=c.getPageLayout(),d-=m.x*g.width,e-=m.y*g.height):t=!0;if(null==b){b=PrintDialog.createPrintPreview(c,q,g,0,d,e,t);b.pageSelector=!1;b.mathEnabled=!1;c=a.getCurrentFile();null!=c&&(b.title=c.getTitle());var k=b.writeHead;b.writeHead=function(c){k.apply(this,arguments);null!=a.editor.fontCss&&(c.writeln('<style type="text/css">'),c.writeln(a.editor.fontCss),c.writeln("</style>"))};if("undefined"!==typeof MathJax){var v=b.renderPage;b.renderPage=
-function(a,c,b,f,h,m){var d=v.apply(this,arguments);this.graph.mathEnabled?this.mathEnabled=!0:d.className="geDisableMathJax";return d}}b.open(null,null,h,!0)}else{g=c.background;if(null==g||""==g||g==mxConstants.NONE)g="#ffffff";b.backgroundColor=g;b.autoOrigin=t;b.appendGraph(c,q,d,e,h,!0)}return b}var f=parseInt(P.value)/100;isNaN(f)&&(f=1,P.value="100 %");var f=.75*f,m=n.value,e=l.value,d=!u.checked,g=null;d&&(d=m==t&&e==t);if(!d&&null!=a.pages&&a.pages.length){var q=0,d=a.pages.length-1;u.checked||
-(q=parseInt(m)-1,d=parseInt(e)-1);for(var v=q;v<=d;v++){var k=a.pages[v],m=k==a.currentPage?h:null;if(null==m){var m=a.createTemporaryGraph(h.getStylesheet()),e=!0,q=!1,w=null,y=null;null==k.viewState&&null==k.mapping&&null==k.root&&a.updatePageRoot(k);null!=k.viewState?(e=k.viewState.pageVisible,q=k.viewState.mathEnabled,w=k.viewState.background,y=k.viewState.backgroundImage):null!=k.mapping&&null!=k.mapping.diagramMap&&(q="0"!=k.mapping.diagramMap.get("mathEnabled"),w=k.mapping.diagramMap.get("background"),
-y=k.mapping.diagramMap.get("backgroundImage"),y=null!=y&&0<y.length?JSON.parse(y):null);m.background=w;m.backgroundImage=null!=y?new mxImage(y.src,y.width,y.height):null;m.pageVisible=e;m.mathEnabled=q;var A=m.getGlobalVariable;m.getGlobalVariable=function(a){return"page"==a?k.getName():"pagenumber"==a?v+1:A.apply(this,arguments)};document.body.appendChild(m.container);a.updatePageRoot(k);m.model.setRoot(k.root)}g=b(m,g,v!=d);m!=h&&m.container.parentNode.removeChild(m.container)}}else g=b(h);g.mathEnabled&&
-(d=g.wnd.document,d.writeln('<script type="text/x-mathjax-config">'),d.writeln("MathJax.Hub.Config({"),d.writeln('messageStyle: "none",'),d.writeln('jax: ["input/TeX", "input/MathML", "input/AsciiMath", "output/HTML-CSS"],'),d.writeln('extensions: ["tex2jax.js", "mml2jax.js", "asciimath2jax.js"],'),d.writeln("TeX: {"),d.writeln('extensions: ["AMSmath.js", "AMSsymbols.js", "noErrors.js", "noUndefined.js"]'),d.writeln("},"),d.writeln("tex2jax: {"),d.writeln('\tignoreClass: "geDisableMathJax"'),d.writeln("},"),
-d.writeln("asciimath2jax: {"),d.writeln('\tignoreClass: "geDisableMathJax"'),d.writeln("}"),d.writeln("});"),c&&(d.writeln("MathJax.Hub.Queue(function () {"),d.writeln("window.print();"),d.writeln("});")),d.writeln("\x3c/script>"),d.writeln('<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js">\x3c/script>'));g.closeDocument();!g.mathEnabled&&c&&PrintDialog.printPreview(g)}var h=a.editor.graph,d=document.createElement("div"),e=document.createElement("h3");
-e.style.width="100%";e.style.textAlign="center";e.style.marginTop="0px";mxUtils.write(e,c||mxResources.get("print"));d.appendChild(e);var g=1,t=1,q=document.createElement("div");q.style.cssText="border-bottom:1px solid lightGray;padding-bottom:12px;margin-bottom:12px;";var u=document.createElement("input");u.style.cssText="margin-right:8px;margin-bottom:8px;";u.setAttribute("value","all");u.setAttribute("type","radio");u.setAttribute("name","pages-printdialog");q.appendChild(u);e=document.createElement("span");
-mxUtils.write(e,mxResources.get("printAllPages"));q.appendChild(e);mxUtils.br(q);var k=u.cloneNode(!0);u.setAttribute("checked","checked");k.setAttribute("value","range");q.appendChild(k);e=document.createElement("span");mxUtils.write(e,mxResources.get("pages")+":");q.appendChild(e);var n=document.createElement("input");n.style.cssText="margin:0 8px 0 8px;";n.setAttribute("value","1");n.setAttribute("type","number");n.setAttribute("min","1");n.style.width="50px";q.appendChild(n);e=document.createElement("span");
-mxUtils.write(e,mxResources.get("to"));q.appendChild(e);var l=n.cloneNode(!0);q.appendChild(l);mxEvent.addListener(n,"focus",function(){k.checked=!0});mxEvent.addListener(l,"focus",function(){k.checked=!0});mxEvent.addListener(n,"change",b);mxEvent.addListener(l,"change",b);if(null!=a.pages&&(g=a.pages.length,null!=a.currentPage))for(e=0;e<a.pages.length;e++)if(a.currentPage==a.pages[e]){t=e+1;n.value=t;l.value=t;break}n.setAttribute("max",g);l.setAttribute("max",g);1<g&&d.appendChild(q);var w=document.createElement("div");
-w.style.marginBottom="10px";var y=document.createElement("input");y.style.marginRight="8px";y.setAttribute("value","adjust");y.setAttribute("type","radio");y.setAttribute("name","printZoom");w.appendChild(y);e=document.createElement("span");mxUtils.write(e,mxResources.get("adjustTo"));w.appendChild(e);var p=document.createElement("input");p.style.cssText="margin:0 8px 0 8px;";p.setAttribute("value","100 %");p.style.width="50px";w.appendChild(p);mxEvent.addListener(p,"focus",function(){y.checked=!0});
-d.appendChild(w);var q=q.cloneNode(!1),z=y.cloneNode(!0);z.setAttribute("value","fit");y.setAttribute("checked","checked");e=document.createElement("div");e.style.cssText="display:inline-block;height:100%;vertical-align:top;padding-top:2px;";e.appendChild(z);q.appendChild(e);w=document.createElement("table");w.style.display="inline-block";var N=document.createElement("tbody"),M=document.createElement("tr"),W=M.cloneNode(!0),I=document.createElement("td"),Q=I.cloneNode(!0),Z=I.cloneNode(!0),J=I.cloneNode(!0),
-V=I.cloneNode(!0),T=I.cloneNode(!0);I.style.textAlign="right";J.style.textAlign="right";mxUtils.write(I,mxResources.get("fitTo"));var R=document.createElement("input");R.style.cssText="margin:0 8px 0 8px;";R.setAttribute("value","1");R.setAttribute("min","1");R.setAttribute("type","number");R.style.width="40px";Q.appendChild(R);e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsAcross"));Z.appendChild(e);mxUtils.write(J,mxResources.get("fitToBy"));var U=R.cloneNode(!0);V.appendChild(U);
-mxEvent.addListener(R,"focus",function(){z.checked=!0});mxEvent.addListener(U,"focus",function(){z.checked=!0});e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsDown"));T.appendChild(e);M.appendChild(I);M.appendChild(Q);M.appendChild(Z);W.appendChild(J);W.appendChild(V);W.appendChild(T);N.appendChild(M);N.appendChild(W);w.appendChild(N);q.appendChild(w);d.appendChild(q);q=document.createElement("div");e=document.createElement("div");e.style.fontWeight="bold";e.style.marginBottom=
-"12px";mxUtils.write(e,mxResources.get("paperSize"));q.appendChild(e);e=document.createElement("div");e.style.marginBottom="12px";var X=PageSetupDialog.addPageFormatPanel(e,"printdialog",a.editor.graph.pageFormat||mxConstants.PAGE_FORMAT_A4_PORTRAIT);q.appendChild(e);e=document.createElement("span");mxUtils.write(e,mxResources.get("pageScale"));q.appendChild(e);var P=document.createElement("input");P.style.cssText="margin:0 8px 0 8px;";P.setAttribute("value","100 %");P.style.width="60px";q.appendChild(P);
-d.appendChild(q);e=document.createElement("div");e.style.cssText="text-align:right;margin:62px 0 0 0;";q=mxUtils.button(mxResources.get("cancel"),function(){a.hideDialog()});q.className="geBtn";a.editor.cancelFirst&&e.appendChild(q);a.isOffline()||(w=mxUtils.button(mxResources.get("help"),function(){h.openLink("https://desk.draw.io/support/solutions/articles/16000048947")}),w.className="geBtn",e.appendChild(w));PrintDialog.previewEnabled&&(w=mxUtils.button(mxResources.get("preview"),function(){a.hideDialog();
-f(!1)}),w.className="geBtn",e.appendChild(w));w=mxUtils.button(mxResources.get(PrintDialog.previewEnabled?"print":"ok"),function(){a.hideDialog();f(!0)});w.className="geBtn gePrimaryBtn";e.appendChild(w);a.editor.cancelFirst||e.appendChild(q);d.appendChild(e);this.container=d};var w=ChangePageSetup.prototype.execute;ChangePageSetup.prototype.execute=function(){null==this.page&&(this.page=this.ui.currentPage);this.page!=this.ui.currentPage?null!=this.page.viewState&&(this.ignoreColor||(this.page.viewState.background=
-this.color),this.ignoreImage||(this.page.viewState.backgroundImage=this.image),null!=this.format&&(this.page.viewState.pageFormat=this.format),null!=this.mathEnabled&&(this.page.viewState.mathEnabled=this.mathEnabled),null!=this.shadowVisible&&(this.page.viewState.shadowVisible=this.shadowVisible)):(w.apply(this,arguments),null!=this.mathEnabled&&this.mathEnabled!=this.ui.isMathEnabled()&&(this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=
-this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible))}})();
-(function(){var a=new mxObjectCodec(new ChangePageSetup,["ui","previousColor","previousImage","previousFormat"]);a.beforeDecode=function(a,d,b){b.ui=a.ui;return d};a.afterDecode=function(a,d,b){b.previousColor=b.color;b.previousImage=b.image;b.previousFormat=b.format;null!=b.foldingEnabled&&(b.foldingEnabled=!b.foldingEnabled);null!=b.mathEnabled&&(b.mathEnabled=!b.mathEnabled);null!=b.shadowVisible&&(b.shadowVisible=!b.shadowVisible);return b};mxCodecRegistry.register(a)})();(function(){EditorUi.VERSION="8.5.0";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.enableLogging=/.*\.draw\.io$/.test(window.location.hostname);EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.scratchpadHelpLink="https://desk.draw.io/support/solutions/articles/16000042367";EditorUi.prototype.emptyDiagramXml='<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>';
+mxStencilRegistry.libraries.arrows2=[SHAPES_PATH+"/mxArrows.js"];mxStencilRegistry.libraries.atlassian=[STENCIL_PATH+"/atlassian.xml"];mxStencilRegistry.libraries.bpmn=[SHAPES_PATH+"/bpmn/mxBpmnShape2.js",STENCIL_PATH+"/bpmn.xml"];mxStencilRegistry.libraries.er=[SHAPES_PATH+"/er/mxER.js"];mxStencilRegistry.libraries.flowchart=[SHAPES_PATH+"/mxFlowchart.js",STENCIL_PATH+"/flowchart.xml"];mxStencilRegistry.libraries.ios=[SHAPES_PATH+"/mockup/mxMockupiOS.js"];mxStencilRegistry.libraries.rackGeneral=
+[SHAPES_PATH+"/rack/mxRack.js",STENCIL_PATH+"/rack/general.xml"];mxStencilRegistry.libraries.rackF5=[STENCIL_PATH+"/rack/f5.xml"];mxStencilRegistry.libraries.lean_mapping=[SHAPES_PATH+"/mxLeanMap.js",STENCIL_PATH+"/lean_mapping.xml"];mxStencilRegistry.libraries.basic=[SHAPES_PATH+"/mxBasic.js",STENCIL_PATH+"/basic.xml"];mxStencilRegistry.libraries.ios7icons=[STENCIL_PATH+"/ios7/icons.xml"];mxStencilRegistry.libraries.ios7ui=[SHAPES_PATH+"/ios7/mxIOS7Ui.js",STENCIL_PATH+"/ios7/misc.xml"];mxStencilRegistry.libraries.android=
+[SHAPES_PATH+"/mxAndroid.js",STENCIL_PATH+"/android/android.xml"];mxStencilRegistry.libraries["electrical/transmission"]=[SHAPES_PATH+"/mxElectrical.js",STENCIL_PATH+"/electrical/transmission.xml"];mxStencilRegistry.libraries["mockup/buttons"]=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];mxStencilRegistry.libraries["mockup/containers"]=[SHAPES_PATH+"/mockup/mxMockupContainers.js"];mxStencilRegistry.libraries["mockup/forms"]=[SHAPES_PATH+"/mockup/mxMockupForms.js"];mxStencilRegistry.libraries["mockup/graphics"]=
+[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 c=null;null!=a&&0<a.length&&("ER"==a.substring(0,2)?c="mxgraph.er":"sysML"==a.substring(0,5)&&(c="mxgraph.sysml"));return c};var u=mxMarker.createMarker;mxMarker.createMarker=function(a,c,b,f,h,d,e,g,t,q){if(null!=b&&null==mxMarker.markers[b]){var m=this.getPackageForType(b);null!=m&&mxStencilRegistry.getStencil(m)}return u.apply(this,arguments)};
+PrintDialog.prototype.create=function(a,c){function b(){l.value=Math.max(1,Math.min(g,Math.max(parseInt(l.value),parseInt(n.value))));n.value=Math.max(1,Math.min(g,Math.min(parseInt(l.value),parseInt(n.value))))}function f(c){function b(c,b,h){var m=c.getGraphBounds(),d=0,e=0,g=X.get(),q=1/c.pageScale,t=z.checked;if(t)var q=parseInt(R.value),u=parseInt(U.value),q=Math.min(g.height*u/(m.height/c.view.scale),g.width*q/(m.width/c.view.scale));else q=parseInt(p.value)/(100*c.pageScale),isNaN(q)&&(f=1/
+c.pageScale,p.value="100 %");g=mxRectangle.fromRectangle(g);g.width=Math.ceil(g.width*f);g.height=Math.ceil(g.height*f);q*=f;!t&&c.pageVisible?(m=c.getPageLayout(),d-=m.x*g.width,e-=m.y*g.height):t=!0;if(null==b){b=PrintDialog.createPrintPreview(c,q,g,0,d,e,t);b.pageSelector=!1;b.mathEnabled=!1;c=a.getCurrentFile();null!=c&&(b.title=c.getTitle());var k=b.writeHead;b.writeHead=function(c){k.apply(this,arguments);null!=a.editor.fontCss&&(c.writeln('<style type="text/css">'),c.writeln(a.editor.fontCss),
+c.writeln("</style>"))};if("undefined"!==typeof MathJax){var v=b.renderPage;b.renderPage=function(a,c,b,f,h,m){var d=v.apply(this,arguments);this.graph.mathEnabled?this.mathEnabled=!0:d.className="geDisableMathJax";return d}}b.open(null,null,h,!0)}else{g=c.background;if(null==g||""==g||g==mxConstants.NONE)g="#ffffff";b.backgroundColor=g;b.autoOrigin=t;b.appendGraph(c,q,d,e,h,!0)}return b}var f=parseInt(P.value)/100;isNaN(f)&&(f=1,P.value="100 %");var f=.75*f,m=n.value,e=l.value,d=!u.checked,g=null;
+d&&(d=m==t&&e==t);if(!d&&null!=a.pages&&a.pages.length){var q=0,d=a.pages.length-1;u.checked||(q=parseInt(m)-1,d=parseInt(e)-1);for(var v=q;v<=d;v++){var k=a.pages[v],m=k==a.currentPage?h:null;if(null==m){var m=a.createTemporaryGraph(h.getStylesheet()),e=!0,q=!1,w=null,y=null;null==k.viewState&&null==k.mapping&&null==k.root&&a.updatePageRoot(k);null!=k.viewState?(e=k.viewState.pageVisible,q=k.viewState.mathEnabled,w=k.viewState.background,y=k.viewState.backgroundImage):null!=k.mapping&&null!=k.mapping.diagramMap&&
+(q="0"!=k.mapping.diagramMap.get("mathEnabled"),w=k.mapping.diagramMap.get("background"),y=k.mapping.diagramMap.get("backgroundImage"),y=null!=y&&0<y.length?JSON.parse(y):null);m.background=w;m.backgroundImage=null!=y?new mxImage(y.src,y.width,y.height):null;m.pageVisible=e;m.mathEnabled=q;var A=m.getGlobalVariable;m.getGlobalVariable=function(a){return"page"==a?k.getName():"pagenumber"==a?v+1:A.apply(this,arguments)};document.body.appendChild(m.container);a.updatePageRoot(k);m.model.setRoot(k.root)}g=
+b(m,g,v!=d);m!=h&&m.container.parentNode.removeChild(m.container)}}else g=b(h);g.mathEnabled&&(d=g.wnd.document,d.writeln('<script type="text/x-mathjax-config">'),d.writeln("MathJax.Hub.Config({"),d.writeln('messageStyle: "none",'),d.writeln('jax: ["input/TeX", "input/MathML", "input/AsciiMath", "output/HTML-CSS"],'),d.writeln('extensions: ["tex2jax.js", "mml2jax.js", "asciimath2jax.js"],'),d.writeln("TeX: {"),d.writeln('extensions: ["AMSmath.js", "AMSsymbols.js", "noErrors.js", "noUndefined.js"]'),
+d.writeln("},"),d.writeln("tex2jax: {"),d.writeln('\tignoreClass: "geDisableMathJax"'),d.writeln("},"),d.writeln("asciimath2jax: {"),d.writeln('\tignoreClass: "geDisableMathJax"'),d.writeln("}"),d.writeln("});"),c&&(d.writeln("MathJax.Hub.Queue(function () {"),d.writeln("window.print();"),d.writeln("});")),d.writeln("\x3c/script>"),d.writeln('<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js">\x3c/script>'));g.closeDocument();!g.mathEnabled&&c&&PrintDialog.printPreview(g)}
+var h=a.editor.graph,d=document.createElement("div"),e=document.createElement("h3");e.style.width="100%";e.style.textAlign="center";e.style.marginTop="0px";mxUtils.write(e,c||mxResources.get("print"));d.appendChild(e);var g=1,t=1,q=document.createElement("div");q.style.cssText="border-bottom:1px solid lightGray;padding-bottom:12px;margin-bottom:12px;";var u=document.createElement("input");u.style.cssText="margin-right:8px;margin-bottom:8px;";u.setAttribute("value","all");u.setAttribute("type","radio");
+u.setAttribute("name","pages-printdialog");q.appendChild(u);e=document.createElement("span");mxUtils.write(e,mxResources.get("printAllPages"));q.appendChild(e);mxUtils.br(q);var k=u.cloneNode(!0);u.setAttribute("checked","checked");k.setAttribute("value","range");q.appendChild(k);e=document.createElement("span");mxUtils.write(e,mxResources.get("pages")+":");q.appendChild(e);var n=document.createElement("input");n.style.cssText="margin:0 8px 0 8px;";n.setAttribute("value","1");n.setAttribute("type",
+"number");n.setAttribute("min","1");n.style.width="50px";q.appendChild(n);e=document.createElement("span");mxUtils.write(e,mxResources.get("to"));q.appendChild(e);var l=n.cloneNode(!0);q.appendChild(l);mxEvent.addListener(n,"focus",function(){k.checked=!0});mxEvent.addListener(l,"focus",function(){k.checked=!0});mxEvent.addListener(n,"change",b);mxEvent.addListener(l,"change",b);if(null!=a.pages&&(g=a.pages.length,null!=a.currentPage))for(e=0;e<a.pages.length;e++)if(a.currentPage==a.pages[e]){t=e+
+1;n.value=t;l.value=t;break}n.setAttribute("max",g);l.setAttribute("max",g);1<g&&d.appendChild(q);var w=document.createElement("div");w.style.marginBottom="10px";var y=document.createElement("input");y.style.marginRight="8px";y.setAttribute("value","adjust");y.setAttribute("type","radio");y.setAttribute("name","printZoom");w.appendChild(y);e=document.createElement("span");mxUtils.write(e,mxResources.get("adjustTo"));w.appendChild(e);var p=document.createElement("input");p.style.cssText="margin:0 8px 0 8px;";
+p.setAttribute("value","100 %");p.style.width="50px";w.appendChild(p);mxEvent.addListener(p,"focus",function(){y.checked=!0});d.appendChild(w);var q=q.cloneNode(!1),z=y.cloneNode(!0);z.setAttribute("value","fit");y.setAttribute("checked","checked");e=document.createElement("div");e.style.cssText="display:inline-block;height:100%;vertical-align:top;padding-top:2px;";e.appendChild(z);q.appendChild(e);w=document.createElement("table");w.style.display="inline-block";var N=document.createElement("tbody"),
+M=document.createElement("tr"),W=M.cloneNode(!0),I=document.createElement("td"),Q=I.cloneNode(!0),Z=I.cloneNode(!0),J=I.cloneNode(!0),V=I.cloneNode(!0),T=I.cloneNode(!0);I.style.textAlign="right";J.style.textAlign="right";mxUtils.write(I,mxResources.get("fitTo"));var R=document.createElement("input");R.style.cssText="margin:0 8px 0 8px;";R.setAttribute("value","1");R.setAttribute("min","1");R.setAttribute("type","number");R.style.width="40px";Q.appendChild(R);e=document.createElement("span");mxUtils.write(e,
+mxResources.get("fitToSheetsAcross"));Z.appendChild(e);mxUtils.write(J,mxResources.get("fitToBy"));var U=R.cloneNode(!0);V.appendChild(U);mxEvent.addListener(R,"focus",function(){z.checked=!0});mxEvent.addListener(U,"focus",function(){z.checked=!0});e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsDown"));T.appendChild(e);M.appendChild(I);M.appendChild(Q);M.appendChild(Z);W.appendChild(J);W.appendChild(V);W.appendChild(T);N.appendChild(M);N.appendChild(W);w.appendChild(N);
+q.appendChild(w);d.appendChild(q);q=document.createElement("div");e=document.createElement("div");e.style.fontWeight="bold";e.style.marginBottom="12px";mxUtils.write(e,mxResources.get("paperSize"));q.appendChild(e);e=document.createElement("div");e.style.marginBottom="12px";var X=PageSetupDialog.addPageFormatPanel(e,"printdialog",a.editor.graph.pageFormat||mxConstants.PAGE_FORMAT_A4_PORTRAIT);q.appendChild(e);e=document.createElement("span");mxUtils.write(e,mxResources.get("pageScale"));q.appendChild(e);
+var P=document.createElement("input");P.style.cssText="margin:0 8px 0 8px;";P.setAttribute("value","100 %");P.style.width="60px";q.appendChild(P);d.appendChild(q);e=document.createElement("div");e.style.cssText="text-align:right;margin:62px 0 0 0;";q=mxUtils.button(mxResources.get("cancel"),function(){a.hideDialog()});q.className="geBtn";a.editor.cancelFirst&&e.appendChild(q);a.isOffline()||(w=mxUtils.button(mxResources.get("help"),function(){h.openLink("https://desk.draw.io/support/solutions/articles/16000048947")}),
+w.className="geBtn",e.appendChild(w));PrintDialog.previewEnabled&&(w=mxUtils.button(mxResources.get("preview"),function(){a.hideDialog();f(!1)}),w.className="geBtn",e.appendChild(w));w=mxUtils.button(mxResources.get(PrintDialog.previewEnabled?"print":"ok"),function(){a.hideDialog();f(!0)});w.className="geBtn gePrimaryBtn";e.appendChild(w);a.editor.cancelFirst||e.appendChild(q);d.appendChild(e);this.container=d};var w=ChangePageSetup.prototype.execute;ChangePageSetup.prototype.execute=function(){null==
+this.page&&(this.page=this.ui.currentPage);this.page!=this.ui.currentPage?null!=this.page.viewState&&(this.ignoreColor||(this.page.viewState.background=this.color),this.ignoreImage||(this.page.viewState.backgroundImage=this.image),null!=this.format&&(this.page.viewState.pageFormat=this.format),null!=this.mathEnabled&&(this.page.viewState.mathEnabled=this.mathEnabled),null!=this.shadowVisible&&(this.page.viewState.shadowVisible=this.shadowVisible)):(w.apply(this,arguments),null!=this.mathEnabled&&
+this.mathEnabled!=this.ui.isMathEnabled()&&(this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible))}})();
+(function(){var a=new mxObjectCodec(new ChangePageSetup,["ui","previousColor","previousImage","previousFormat"]);a.beforeDecode=function(a,d,b){b.ui=a.ui;return d};a.afterDecode=function(a,d,b){b.previousColor=b.color;b.previousImage=b.image;b.previousFormat=b.format;null!=b.foldingEnabled&&(b.foldingEnabled=!b.foldingEnabled);null!=b.mathEnabled&&(b.mathEnabled=!b.mathEnabled);null!=b.shadowVisible&&(b.shadowVisible=!b.shadowVisible);return b};mxCodecRegistry.register(a)})();(function(){EditorUi.VERSION="8.5.2";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.enableLogging=/.*\.draw\.io$/.test(window.location.hostname);EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.scratchpadHelpLink="https://desk.draw.io/support/solutions/articles/16000042367";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.svgBrokenImage=Graph.createSvgImage(10,10,'<rect x="0" y="0" width="10" height="10" stroke="#000" fill="transparent"/><path d="m 0 0 L 10 10 L 0 10 L 10 0" stroke="#000" fill="transparent"/>');EditorUi.prototype.crossOriginImages=!mxClient.IS_IE;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.printPdfExport=
 !1;EditorUi.prototype.pdfPageExport=!0;EditorUi.prototype.formatEnabled="0"!=urlParams.format;(function(){EditorUi.prototype.useCanvasForExport=!1;EditorUi.prototype.jpgSupported=!1;try{var a=document.createElement("canvas");EditorUi.prototype.canvasSupported=!(!a.getContext||!a.getContext("2d"))}catch(t){}try{var b=document.createElement("canvas"),h=new Image;h.onload=function(){try{b.getContext("2d").drawImage(h,0,0);var a=b.toDataURL("image/png");EditorUi.prototype.useCanvasForExport=null!=a&&
diff --git a/src/main/webapp/js/diagramly/Editor.js b/src/main/webapp/js/diagramly/Editor.js
index f01330a87..1243e2602 100644
--- a/src/main/webapp/js/diagramly/Editor.js
+++ b/src/main/webapp/js/diagramly/Editor.js
@@ -1487,6 +1487,7 @@
 	mxStencilRegistry.libraries['atlassian'] = [STENCIL_PATH + '/atlassian.xml'];
 	mxStencilRegistry.libraries['bpmn'] = [SHAPES_PATH + '/bpmn/mxBpmnShape2.js', STENCIL_PATH + '/bpmn.xml'];
 	mxStencilRegistry.libraries['er'] = [SHAPES_PATH + '/er/mxER.js'];
+	mxStencilRegistry.libraries['flowchart'] = [SHAPES_PATH + '/mxFlowchart.js', STENCIL_PATH + '/flowchart.xml'];
 	mxStencilRegistry.libraries['ios'] = [SHAPES_PATH + '/mockup/mxMockupiOS.js'];
 	mxStencilRegistry.libraries['rackGeneral'] = [SHAPES_PATH + '/rack/mxRack.js', STENCIL_PATH + '/rack/general.xml'];
 	mxStencilRegistry.libraries['rackF5'] = [STENCIL_PATH + '/rack/f5.xml'];
diff --git a/src/main/webapp/js/diagramly/sidebar/Sidebar-Basic.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Basic.js
index a0985f364..1f2ea488c 100644
--- a/src/main/webapp/js/diagramly/sidebar/Sidebar-Basic.js
+++ b/src/main/webapp/js/diagramly/sidebar/Sidebar-Basic.js
@@ -24,6 +24,7 @@
 			this.createVertexTemplateEntry(s2 + 'cone', w, h, '', 'Cone', null, null, this.getTagsForStencil(gn, 'cone', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'cone2;dx=0.5;dy=0.9;', w, h, '', 'Cone (adjustable)', null, null, this.getTagsForStencil(gn, 'cone', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'document', w, h, '', 'Document', null, null, this.getTagsForStencil(gn, 'document', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'donut;dx=25;', w, h, '', 'Donut', null, null, this.getTagsForStencil(gn, 'donut', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'drop', w * 0.7, h, '', 'Drop', null, null, this.getTagsForStencil(gn, 'drop', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'flash', w * 0.6, h, '', 'Flash', null, null, this.getTagsForStencil(gn, 'flash', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'half_circle', w, h * 0.5, '', 'Half Circle', null, null, this.getTagsForStencil(gn, 'half_circle', dt).join(' ')),
@@ -40,15 +41,29 @@
 			this.createVertexTemplateEntry(s + 'pentagon', w, h * 0.9, '', 'Pentagon', null, null, this.getTagsForStencil(gn, 'pentagon', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'pointed_oval', w * 0.5, h, '', 'Pointed Oval', null, null, this.getTagsForStencil(gn, 'pointed oval', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'pyramid;dx1=0.4;dx2=0.6;dy1=0.9;dy2=0.8;', w, h, '', 'Pyramid', null, null, this.getTagsForStencil(gn, 'pyramid', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'diag_snip_rect;dx=6;', w, h * 0.6, '', 'Diagonal Snip Rectangle', null, null, this.getTagsForStencil(gn, 'diag_snip_rect', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'diag_round_rect;dx=6;', w, h * 0.6, '', 'Diagonal Rounded Rectangle', null, null, this.getTagsForStencil(gn, 'diag_round_rect', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'corner_round_rect;dx=6;', w, h * 0.6, '', 'Corner Rounded Rectangle', null, null, this.getTagsForStencil(gn, 'corner_round_rect', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'plaque;dx=6;', w, h * 0.6, '', 'Plaque', null, null, this.getTagsForStencil(gn, 'plaque', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'frame;dx=10;', w, h * 0.6, '', 'Frame', null, null, this.getTagsForStencil(gn, 'frame', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'rounded_frame;dx=10;', w, h * 0.6, '', 'Rounded Frame', null, null, this.getTagsForStencil(gn, 'rounded_frame', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'plaque_frame;dx=10;', w, h * 0.6, '', 'Plaque Frame', null, null, this.getTagsForStencil(gn, 'plaque_frame', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'frame_corner;dx=10;', w, h * 0.6, '', 'Frame Corner', null, null, this.getTagsForStencil(gn, 'frame_corner', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'diag_stripe;dx=10;', w, h * 0.6, '', 'Diagonal Stripe', null, null, this.getTagsForStencil(gn, 'diag_stripe', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'rectCallout;dx=30;dy=15;boundedLbl=1;', w, h * 0.6, '', 'Rectangular Callout', null, null, this.getTagsForStencil(gn, 'rectangular_callout', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'roundRectCallout;dx=30;dy=15;size=5;boundedLbl=1;', w, h * 0.6, '', 'Rounded Rectangular Callout', null, null, this.getTagsForStencil(gn, 'rectangular_callout', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'layered_rect;dx=10;', w, h * 0.6, '', 'Layered Rectangle', null, null, this.getTagsForStencil(gn, 'layered_rect', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'smiley', w, h, '', 'Smiley', null, null, this.getTagsForStencil(gn, 'smiley', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'star', w, h * 0.95, '', 'Star', null, null, this.getTagsForStencil(gn, 'star', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'sun', w, h, '', 'Sun', null, null, this.getTagsForStencil(gn, 'sun', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'tick', w * 0.85, h, '', 'Tick', null, null, this.getTagsForStencil(gn, 'tick', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'wave2;dy=0.3;', w, h * 0.6, '', 'Wave', null, null, this.getTagsForStencil(gn, 'wave', dt).join(' ')),
-			this.createVertexTemplateEntry(s2 + 'x', w, h, '', 'X', null, null, this.getTagsForStencil(gn, 'x', dt).join(' '))
-			
+			this.createVertexTemplateEntry('labelPosition=center;verticalLabelPosition=middle;html=1;strokeWidth=2;shape=mxgraph.basic.button;dx=10;', w, h * 0.6, 'Button', 'Button', null, null, this.getTagsForStencil(gn, 'button', dt).join(' ')),
+			this.createVertexTemplateEntry('labelPosition=center;verticalLabelPosition=middle;html=1;strokeWidth=2;shape=mxgraph.basic.shaded_button;dx=10;fillColor=#E6E6E6;strokeColor=none;', w, h * 0.6, 'Button', 'Button (shaded)', null, null, this.getTagsForStencil(gn, 'button', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'x', w, h, '', 'X', null, null, this.getTagsForStencil(gn, 'x', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'pie;startAngle=0.2;endAngle=0.9;', w, h, '', 'Pie', null, null, this.getTagsForStencil(gn, 'pie', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'arc;startAngle=0.3;endAngle=0.1;', w, h, '', 'Arc', null, null, this.getTagsForStencil(gn, 'arc', dt).join(' ')),
+			this.createVertexTemplateEntry(s2 + 'partConcEllipse;startAngle=0.25;endAngle=0.1;arcWidth=0.5;', w, h, '', 'Partial Concentric Ellipse', null, null, this.getTagsForStencil(gn, 'partConcEllipse', dt).join(' '))
 		]);
 	};
 
diff --git a/src/main/webapp/js/diagramly/sidebar/Sidebar-Flowchart.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Flowchart.js
index 1fdaa6333..503f479b4 100644
--- a/src/main/webapp/js/diagramly/sidebar/Sidebar-Flowchart.js
+++ b/src/main/webapp/js/diagramly/sidebar/Sidebar-Flowchart.js
@@ -6,6 +6,7 @@
 		var h = 100;
 		var s = 'strokeWidth=2;html=1;shape=mxgraph.flowchart.';
 		var s2 = mxConstants.STYLE_VERTICAL_LABEL_POSITION + '=bottom;' + mxConstants.STYLE_VERTICAL_ALIGN + '=top;html=1;strokeWidth=2;shape=mxgraph.flowchart.';
+		var s3 = mxConstants.STYLE_VERTICAL_LABEL_POSITION + '=bottom;' + mxConstants.STYLE_VERTICAL_ALIGN + '=top;html=1;strokeWidth=2;shape=';
 		var gn = 'mxgraph.flowchart';
 		var dt = '';
 		
@@ -13,29 +14,29 @@
 		[
 			this.createVertexTemplateEntry(s + 'annotation_1;align=left;', w * 0.5, h, '', 'Annotation', null, null, this.getTagsForStencil(gn, 'annotation_1', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'annotation_2;align=left;', w * 0.5, h, '', 'Annotation', null, null, this.getTagsForStencil(gn, 'annotation_2', dt).join(' ')),
-			this.createVertexTemplateEntry(s + 'card;whiteSpace=wrap;', w, h * 0.6, '', 'Card', null, null, this.getTagsForStencil(gn, 'card', dt).join(' ')),
+			this.createVertexTemplateEntry(s3 + 'card;whiteSpace=wrap;size=20;arcSize=12;', w, h * 0.6, '', 'Card', null, null, this.getTagsForStencil(gn, 'card', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'collate;', w, h, '', 'Collate', null, null, this.getTagsForStencil(gn, 'collate', dt).join(' ')),
-			this.createVertexTemplateEntry(s + 'data;whiteSpace=wrap;', w, h * 0.6, '', 'Data', null, null, this.getTagsForStencil(gn, 'data', dt).join(' ')),
+			this.createVertexTemplateEntry(s3 + 'parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;rounded=1;arcSize=12;size=0.23;', w, h * 0.6, '', 'Data', null, null, this.getTagsForStencil(gn, 'data', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'database;whiteSpace=wrap;', w * 0.6, h * 0.6, '', 'Database', null, null, this.getTagsForStencil(gn, 'database', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'decision;whiteSpace=wrap;', w, h, '', 'Decision', null, null, this.getTagsForStencil(gn, 'decision', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'delay;whiteSpace=wrap;', w, h * 0.6, '', 'Delay', null, null, this.getTagsForStencil(gn, 'delay', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'direct_data;whiteSpace=wrap;', w, h * 0.6, '', 'Direct Data', null, null, this.getTagsForStencil(gn, 'direct_data', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'display;whiteSpace=wrap;', w, h * 0.6, '', 'Display', null, null, this.getTagsForStencil(gn, 'display', dt).join(' ')),
-			this.createVertexTemplateEntry(s + 'document;whiteSpace=wrap;', w, h * 0.6, '', 'Document', null, null, this.getTagsForStencil(gn, 'document', dt).join(' ')),
+			this.createVertexTemplateEntry(s + 'document2;whiteSpace=wrap;size=0.25;', w, h * 0.6, '', 'Document', null, null, this.getTagsForStencil(gn, 'document', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'extract_or_measurement;whiteSpace=wrap;', w * 0.95, h * 0.6, '', 'Extract or Measurement', null, null, this.getTagsForStencil(gn, 'extract_or_measurement', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'internal_storage;whiteSpace=wrap;', w * 0.7, h * 0.7, '', 'Internal Storage', null, null, this.getTagsForStencil(gn, 'internal_storage', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'loop_limit;whiteSpace=wrap;', w, h * 0.6, '', 'Loop Limit', null, null, this.getTagsForStencil(gn, 'loop_limit', dt).join(' ')),
-			this.createVertexTemplateEntry(s + 'manual_input;whiteSpace=wrap;', w, h * 0.6, '', 'Manual Input', null, null, this.getTagsForStencil(gn, 'manual_input', dt).join(' ')),
-			this.createVertexTemplateEntry(s + 'manual_operation;whiteSpace=wrap;', w, h * 0.6, '', 'Manual Operation', null, null, this.getTagsForStencil(gn, 'manual_operation', dt).join(' ')),
+			this.createVertexTemplateEntry(s3 + 'manualInput;whiteSpace=wrap;rounded=1;size=26;arcSize=11;', w, h * 0.6, '', 'Manual Input', null, null, this.getTagsForStencil(gn, 'manual_input', dt).join(' ')),
+			this.createVertexTemplateEntry(s3 + 'trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;size=0.23;arcSize=10;flipV=1;', w, h * 0.6, '', 'Manual Operation', null, null, this.getTagsForStencil(gn, 'manual_operation', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'merge_or_storage;whiteSpace=wrap;', w * 0.95, h * 0.6, '', 'Merge or Storage', null, null, this.getTagsForStencil(gn, 'merge_or_storage', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'multi-document;whiteSpace=wrap;', w * 0.88, h * 0.6, '', 'Multi-Document', null, null, this.getTagsForStencil(gn, 'multi-document', dt).join(' ')),
-			this.createVertexTemplateEntry(s2 + 'off-page_reference;', w * 0.6, h * 0.6, '', 'Off-Page Reference', null, null, this.getTagsForStencil(gn, 'off-page_reference', dt).join(' ')),
+			this.createVertexTemplateEntry(s3 + 'offPageConnector;rounded=0;size=0.5;', w * 0.6, h * 0.6, '', 'Off-Page Reference', null, null, this.getTagsForStencil(gn, 'off-page_reference', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'on-page_reference;', w * 0.6, h * 0.6, '', 'On-Page Reference', null, null, this.getTagsForStencil(gn, 'on-page_reference', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'summing_function;', w * 0.7, h * 0.7, '', 'Or', null, null, this.getTagsForStencil(gn, 'summing_function', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'paper_tape;whiteSpace=wrap;', w, h * 0.65, '', 'Paper Tape', null, null, this.getTagsForStencil(gn, 'paper_tape', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'parallel_mode;', w * 0.95, h * 0.4, '', 'Parallel Mode', null, null, this.getTagsForStencil(gn, 'parallel_mode', dt).join(' ')),
-			this.createVertexTemplateEntry(s + 'predefined_process;whiteSpace=wrap;', w, h * 0.6, '', 'Predefined Process', null, null, this.getTagsForStencil(gn, 'predefined_process', dt).join(' ')),
-			this.createVertexTemplateEntry(s + 'preparation;whiteSpace=wrap;', w, h * 0.6, '', 'Preparation', null, null, this.getTagsForStencil(gn, 'preparation', dt).join(' ')),
+			this.createVertexTemplateEntry(s3 + 'process;whiteSpace=wrap;rounded=1;size=0.14;arcSize=6;', w, h * 0.6, '', 'Predefined Process', null, null, this.getTagsForStencil(gn, 'predefined_process', dt).join(' ')),
+			this.createVertexTemplateEntry(s3 + 'hexagon;perimeter=hexagonPerimeter2;arcSize=6;size=0.27;', w, h * 0.6, '', 'Preparation', null, null, this.getTagsForStencil(gn, 'preparation', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'process;whiteSpace=wrap;', w, h, '', 'Process', null, null, this.getTagsForStencil(gn, 'process', dt).join(' ')),
 			this.createVertexTemplateEntry(s + 'sequential_data;whiteSpace=wrap;', w, h, '', 'Sequential Data', null, null, this.getTagsForStencil(gn, 'sequential_data', dt).join(' ')),
 			this.createVertexTemplateEntry(s2 + 'sort;', w, h, '', 'Sort', null, null, this.getTagsForStencil(gn, 'sort', dt).join(' ')),
diff --git a/src/main/webapp/js/embed-static.min.js b/src/main/webapp/js/embed-static.min.js
index 2e9f396b4..c506a862a 100644
--- a/src/main/webapp/js/embed-static.min.js
+++ b/src/main/webapp/js/embed-static.min.js
@@ -184,7 +184,7 @@ f)+"\n"+t+"}":"{"+z.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");})})();"undefined"===typeof window.mxBasePath&&(window.mxBasePath="https://www.draw.io/mxgraph/");window.mxLoadStylesheets=window.mxLoadStylesheets||!1;window.mxLoadResources=window.mxLoadResources||!1;window.mxLanguage=window.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:"8.5.0",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:"8.5.2",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/src/main/webapp/js/reader.min.js b/src/main/webapp/js/reader.min.js
index c7e262b22..10b380b58 100644
--- a/src/main/webapp/js/reader.min.js
+++ b/src/main/webapp/js/reader.min.js
@@ -184,7 +184,7 @@ f)+"\n"+t+"}":"{"+z.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");})})();"undefined"===typeof window.mxBasePath&&(window.mxBasePath="https://www.draw.io/mxgraph/");window.mxLoadStylesheets=window.mxLoadStylesheets||!1;window.mxLoadResources=window.mxLoadResources||!1;window.mxLanguage=window.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:"8.5.0",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:"8.5.2",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/src/main/webapp/js/shapes.min.js b/src/main/webapp/js/shapes.min.js
index b886276c1..9ab7f818c 100644
--- a/src/main/webapp/js/shapes.min.js
+++ b/src/main/webapp/js/shapes.min.js
@@ -1542,7 +1542,8 @@ mxShapeBasicOctagon.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d
 Graph.handleFactory[mxShapeBasicOctagon.prototype.cst.OCTAGON]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/4,a.width/4,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/4,a.width/4,e.x-a.x)))/100})]};
 function mxShapeBasicIsoCube(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.isoAngle=15}mxUtils.extend(mxShapeBasicIsoCube,mxActor);mxShapeBasicIsoCube.prototype.cst={ISO_CUBE:"mxgraph.basic.isocube"};
 mxShapeBasicIsoCube.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=Math.max(.01,Math.min(94,parseFloat(mxUtils.getValue(this.style,"isoAngle",this.isoAngle))))*Math.PI/200;d=Math.min(b*Math.tan(d),.5*c);a.begin();a.moveTo(.5*b,0);a.lineTo(b,d);a.lineTo(b,c-d);a.lineTo(.5*b,c);a.lineTo(0,c-d);a.lineTo(0,d);a.close();a.fillAndStroke();a.setShadow(!1);a.begin();a.moveTo(0,d);a.lineTo(.5*b,2*d);a.lineTo(b,d);a.moveTo(.5*b,2*d);a.lineTo(.5*b,c);a.stroke()};
-mxCellRenderer.registerShape(mxShapeBasicIsoCube.prototype.cst.ISO_CUBE,mxShapeBasicIsoCube);mxShapeBasicIsoCube.prototype.constraints=null;Graph.handleFactory[mxShapeBasicIsoCube.prototype.cst.ISO_CUBE]=function(a){return[Graph.createHandle(a,["isoAngle"],function(a){var d=Math.max(0,Math.min(100,parseFloat(mxUtils.getValue(this.state.style,"isoAngle",this.isoAngle))));return new mxPoint(a.x,a.y+d)},function(a,e){this.state.style.isoAngle=Math.round(100*Math.max(0,Math.min(100,e.y-a.y)))/100})]};
+mxCellRenderer.registerShape(mxShapeBasicIsoCube.prototype.cst.ISO_CUBE,mxShapeBasicIsoCube);mxShapeBasicIsoCube.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicIsoCube.prototype.cst.ISO_CUBE]=function(a){return[Graph.createHandle(a,["isoAngle"],function(a){var d=Math.max(.01,Math.min(94,parseFloat(mxUtils.getValue(this.state.style,"isoAngle",this.isoAngle))))*Math.PI/200;return new mxPoint(a.x,a.y+Math.min(a.width*Math.tan(d),.5*a.height))},function(a,e){this.state.style.isoAngle=Math.round(100*Math.max(0,Math.min(100,e.y-a.y)))/100})]};
 function mxShapeBasicTriangleAcute(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicTriangleAcute,mxActor);mxShapeBasicTriangleAcute.prototype.cst={ACUTE_TRIANGLE:"mxgraph.basic.acute_triangle"};
 mxShapeBasicTriangleAcute.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=b*Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));a.begin();a.moveTo(0,c);a.lineTo(d,0);a.lineTo(b,c);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicTriangleAcute.prototype.cst.ACUTE_TRIANGLE,mxShapeBasicTriangleAcute);mxShapeBasicTriangleAcute.prototype.constraints=null;
 Graph.handleFactory[mxShapeBasicTriangleAcute.prototype.cst.ACUTE_TRIANGLE]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d*a.width,a.y+10)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(1,(e.x-a.x)/a.width)))/100})]};
@@ -1562,7 +1563,68 @@ Graph.handleFactory[mxShapeBasicPyramid.prototype.cst.PYRAMID]=function(a){var d
 b*a.width,a.y+a.height-10)},function(a,c){this.state.style.dx2=Math.round(100*Math.max(0,Math.min(1,(c.x-a.x)/a.width)))/100});d.push(e);e=Graph.createHandle(a,["dy1"],function(a){var b=Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"dy1",this.dy1))));return new mxPoint(a.x+10,a.y+b*a.height)},function(a,c){this.state.style.dy1=Math.round(100*Math.max(0,Math.min(1,(c.y-a.y)/a.height)))/100});d.push(e);a=Graph.createHandle(a,["dy2"],function(a){var b=Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,
 "dy2",this.dy2))));return new mxPoint(a.x+a.width-10,a.y+b*a.height)},function(a,c){this.state.style.dy2=Math.round(100*Math.max(0,Math.min(1,(c.y-a.y)/a.height)))/100});d.push(a);return d};function mxShapeBasic4PointStar2(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.8}mxUtils.extend(mxShapeBasic4PointStar2,mxActor);mxShapeBasic4PointStar2.prototype.cst={FOUR_POINT_STAR_2:"mxgraph.basic.4_point_star_2"};
 mxShapeBasic4PointStar2.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=.5*Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));a.begin();a.moveTo(0,.5*c);a.lineTo(d*b,d*c);a.lineTo(.5*b,0);a.lineTo(b-d*b,d*c);a.lineTo(b,.5*c);a.lineTo(b-d*b,c-d*c);a.lineTo(.5*b,c);a.lineTo(d*b,c-d*c);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasic4PointStar2.prototype.cst.FOUR_POINT_STAR_2,mxShapeBasic4PointStar2);
-mxShapeBasic4PointStar2.prototype.constraints=null;Graph.handleFactory[mxShapeBasic4PointStar2.prototype.cst.FOUR_POINT_STAR_2]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d*a.width/2,a.y+10)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(1,2*(e.x-a.x)/a.width)))/100})]};
+mxShapeBasic4PointStar2.prototype.constraints=null;Graph.handleFactory[mxShapeBasic4PointStar2.prototype.cst.FOUR_POINT_STAR_2]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d*a.width/2,a.y+d*a.height/2)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(1,2*(e.x-a.x)/a.width)))/100})]};
+function mxShapeBasicDiagSnipRect(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicDiagSnipRect,mxActor);mxShapeBasicDiagSnipRect.prototype.cst={DIAG_SNIP_RECT:"mxgraph.basic.diag_snip_rect"};
+mxShapeBasicDiagSnipRect.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=2*Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.5*b,.5*c,d);a.begin();a.moveTo(d,0);a.lineTo(b,0);a.lineTo(b,c-d);a.lineTo(b-d,c);a.lineTo(0,c);a.lineTo(0,d);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicDiagSnipRect.prototype.cst.DIAG_SNIP_RECT,mxShapeBasicDiagSnipRect);mxShapeBasicDiagSnipRect.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicDiagSnipRect.prototype.cst.DIAG_SNIP_RECT]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/4,a.width/4,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/4,a.width/4,e.x-a.x)))/100})]};
+function mxShapeBasicDiagRoundRect(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicDiagRoundRect,mxActor);mxShapeBasicDiagRoundRect.prototype.cst={DIAG_ROUND_RECT:"mxgraph.basic.diag_round_rect"};
+mxShapeBasicDiagRoundRect.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=2*Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.5*b,.5*c,d);a.begin();a.moveTo(d,0);a.lineTo(b,0);a.lineTo(b,c-d);a.arcTo(d,d,0,0,1,b-d,c);a.lineTo(0,c);a.lineTo(0,d);a.arcTo(d,d,0,0,1,d,0);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicDiagRoundRect.prototype.cst.DIAG_ROUND_RECT,mxShapeBasicDiagRoundRect);
+mxShapeBasicDiagRoundRect.prototype.constraints=null;Graph.handleFactory[mxShapeBasicDiagRoundRect.prototype.cst.DIAG_ROUND_RECT]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/4,a.width/4,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/4,a.width/4,e.x-a.x)))/100})]};
+function mxShapeBasicCornerRoundRect(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicCornerRoundRect,mxActor);mxShapeBasicCornerRoundRect.prototype.cst={CORNER_ROUND_RECT:"mxgraph.basic.corner_round_rect"};
+mxShapeBasicCornerRoundRect.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=2*Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.5*b,.5*c,d);a.begin();a.moveTo(d,0);a.lineTo(b,0);a.lineTo(b,c);a.lineTo(0,c);a.lineTo(0,d);a.arcTo(d,d,0,0,1,d,0);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicCornerRoundRect.prototype.cst.CORNER_ROUND_RECT,mxShapeBasicCornerRoundRect);mxShapeBasicCornerRoundRect.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicCornerRoundRect.prototype.cst.CORNER_ROUND_RECT]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/4,a.width/4,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/4,a.width/4,e.x-a.x)))/100})]};
+function mxShapeBasicPlaque(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicPlaque,mxActor);mxShapeBasicPlaque.prototype.cst={PLAQUE:"mxgraph.basic.plaque"};
+mxShapeBasicPlaque.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=2*Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.5*b,.5*c,d);a.begin();a.moveTo(b-d,0);a.arcTo(d,d,0,0,0,b,d);a.lineTo(b,c-d);a.arcTo(d,d,0,0,0,b-d,c);a.lineTo(d,c);a.arcTo(d,d,0,0,0,0,c-d);a.lineTo(0,d);a.arcTo(d,d,0,0,0,d,0);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicPlaque.prototype.cst.PLAQUE,mxShapeBasicPlaque);
+mxShapeBasicPlaque.prototype.constraints=null;Graph.handleFactory[mxShapeBasicPlaque.prototype.cst.PLAQUE]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/4,a.width/4,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+1.41*d,a.y+1.41*d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/4,a.width/4,e.x-a.x)))/100})]};
+function mxShapeBasicFrame(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicFrame,mxActor);mxShapeBasicFrame.prototype.cst={FRAME:"mxgraph.basic.frame"};
+mxShapeBasicFrame.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.5*b,.5*c,d);a.begin();a.moveTo(b,0);a.lineTo(b,c);a.lineTo(0,c);a.lineTo(0,0);a.close();a.moveTo(d,d);a.lineTo(d,c-d);a.lineTo(b-d,c-d);a.lineTo(b-d,d);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicFrame.prototype.cst.FRAME,mxShapeBasicFrame);mxShapeBasicFrame.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicFrame.prototype.cst.FRAME]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/2,a.width/2,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/2,a.width/2,e.x-a.x)))/100})]};
+function mxShapeBasicPlaqueFrame(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicPlaqueFrame,mxActor);mxShapeBasicPlaqueFrame.prototype.cst={PLAQUE_FRAME:"mxgraph.basic.plaque_frame"};
+mxShapeBasicPlaqueFrame.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.25*b,.25*c,d);a.begin();a.moveTo(b-d,0);a.arcTo(d,d,0,0,0,b,d);a.lineTo(b,c-d);a.arcTo(d,d,0,0,0,b-d,c);a.lineTo(d,c);a.arcTo(d,d,0,0,0,0,c-d);a.lineTo(0,d);a.arcTo(d,d,0,0,0,d,0);a.close();a.moveTo(2*d,d);a.arcTo(2*d,2*d,0,0,1,d,2*d);a.lineTo(d,c-2*d);a.arcTo(2*d,2*d,0,0,1,2*d,c-d);a.lineTo(b-2*d,c-d);a.arcTo(2*d,2*d,0,
+0,1,b-d,c-2*d);a.lineTo(b-d,2*d);a.arcTo(2*d,2*d,0,0,1,b-2*d,d);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicPlaqueFrame.prototype.cst.PLAQUE_FRAME,mxShapeBasicPlaqueFrame);mxShapeBasicPlaqueFrame.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicPlaqueFrame.prototype.cst.PLAQUE_FRAME]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/4,a.width/4,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/4,a.width/4,e.x-a.x)))/100})]};
+function mxShapeBasicRoundedFrame(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicRoundedFrame,mxActor);mxShapeBasicRoundedFrame.prototype.cst={ROUNDED_FRAME:"mxgraph.basic.rounded_frame"};
+mxShapeBasicRoundedFrame.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.25*b,.25*c,d);a.begin();a.moveTo(b-2*d,0);a.arcTo(2*d,2*d,0,0,1,b,2*d);a.lineTo(b,c-2*d);a.arcTo(2*d,2*d,0,0,1,b-2*d,c);a.lineTo(2*d,c);a.arcTo(2*d,2*d,0,0,1,0,c-2*d);a.lineTo(0,2*d);a.arcTo(2*d,2*d,0,0,1,2*d,0);a.close();a.moveTo(2*d,d);a.arcTo(d,d,0,0,0,d,2*d);a.lineTo(d,c-2*d);a.arcTo(d,d,0,0,0,2*d,c-d);a.lineTo(b-2*
+d,c-d);a.arcTo(d,d,0,0,0,b-d,c-2*d);a.lineTo(b-d,2*d);a.arcTo(d,d,0,0,0,b-2*d,d);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicRoundedFrame.prototype.cst.ROUNDED_FRAME,mxShapeBasicRoundedFrame);mxShapeBasicRoundedFrame.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicRoundedFrame.prototype.cst.ROUNDED_FRAME]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/4,a.width/4,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/4,a.width/4,e.x-a.x)))/100})]};
+function mxShapeBasicFrameCorner(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicFrameCorner,mxActor);mxShapeBasicFrameCorner.prototype.cst={FRAME_CORNER:"mxgraph.basic.frame_corner"};
+mxShapeBasicFrameCorner.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.5*b,.5*c,d);a.begin();a.moveTo(0,0);a.lineTo(b,0);a.lineTo(b-d,d);a.lineTo(d,d);a.lineTo(d,c-d);a.lineTo(0,c);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicFrameCorner.prototype.cst.FRAME_CORNER,mxShapeBasicFrameCorner);mxShapeBasicFrameCorner.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicFrameCorner.prototype.cst.FRAME_CORNER]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/2,a.width/2,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/2,a.width/2,e.x-a.x)))/100})]};
+function mxShapeBasicDiagStripe(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicDiagStripe,mxActor);mxShapeBasicDiagStripe.prototype.cst={DIAG_STRIPE:"mxgraph.basic.diag_stripe"};
+mxShapeBasicDiagStripe.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(b,c,d);a.begin();a.moveTo(0,c);a.lineTo(b,0);a.lineTo(b,Math.min(100*d/b,c));a.lineTo(Math.min(100*d/c,b),c);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicDiagStripe.prototype.cst.DIAG_STRIPE,mxShapeBasicDiagStripe);mxShapeBasicDiagStripe.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicDiagStripe.prototype.cst.DIAG_STRIPE]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/2,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+a.height)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/2,a.width/2,e.x-a.x)))/100})]};
+function mxShapeBasicDonut(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicDonut,mxActor);mxShapeBasicDonut.prototype.cst={DONUT:"mxgraph.basic.donut"};
+mxShapeBasicDonut.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.5*b,.5*c,d);a.begin();a.moveTo(0,.5*c);a.arcTo(.5*b,.5*c,0,0,1,.5*b,0);a.arcTo(.5*b,.5*c,0,0,1,b,.5*c);a.arcTo(.5*b,.5*c,0,0,1,.5*b,c);a.arcTo(.5*b,.5*c,0,0,1,0,.5*c);a.close();a.moveTo(.5*b,d);a.arcTo(.5*b-d,.5*c-d,0,0,0,d,.5*c);a.arcTo(.5*b-d,.5*c-d,0,0,0,.5*b,c-d);a.arcTo(.5*b-d,.5*c-d,0,0,0,b-d,.5*c);a.arcTo(.5*b-d,.5*c-d,
+0,0,0,.5*b,d);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicDonut.prototype.cst.DONUT,mxShapeBasicDonut);mxShapeBasicDonut.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicDonut.prototype.cst.DONUT]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/2,a.width/2,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+a.height/2)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/2,a.width/2,e.x-a.x)))/100})]};
+function mxShapeBasicLayeredRect(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicLayeredRect,mxActor);mxShapeBasicLayeredRect.prototype.cst={LAYERED_RECT:"mxgraph.basic.layered_rect"};
+mxShapeBasicLayeredRect.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.5*b,.5*c,d);a.begin();a.moveTo(d,d);a.lineTo(b,d);a.lineTo(b,c);a.lineTo(d,c);a.close();a.fillAndStroke();a.begin();a.moveTo(.5*d,.5*d);a.lineTo(b-.5*d,.5*d);a.lineTo(b-.5*d,c-.5*d);a.lineTo(.5*d,c-.5*d);a.close();a.fillAndStroke();a.begin();a.moveTo(0,0);a.lineTo(b-d,0);a.lineTo(b-d,c-d);a.lineTo(0,c-d);a.close();a.fillAndStroke()};
+mxCellRenderer.registerShape(mxShapeBasicLayeredRect.prototype.cst.LAYERED_RECT,mxShapeBasicLayeredRect);mxShapeBasicLayeredRect.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicLayeredRect.prototype.cst.LAYERED_RECT]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/2,a.width/2,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+a.width-d,a.y+a.height-d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/2,a.width/2,-e.x+a.width+a.x)))/100})]};
+function mxShapeBasicButton(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicButton,mxActor);mxShapeBasicButton.prototype.cst={BUTTON:"mxgraph.basic.button"};
+mxShapeBasicButton.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.5*b,.5*c,d);a.begin();a.moveTo(0,0);a.lineTo(b,0);a.lineTo(b,c);a.lineTo(0,c);a.close();a.fillAndStroke();a.setShadow(!1);a.setLineJoin("round");a.begin();a.moveTo(0,c);a.lineTo(0,0);a.lineTo(d,d);a.lineTo(d,c-d);a.close();a.fillAndStroke();a.begin();a.moveTo(0,0);a.lineTo(b,0);a.lineTo(b-d,d);a.lineTo(d,d);a.close();a.fillAndStroke();
+a.begin();a.moveTo(b,0);a.lineTo(b,c);a.lineTo(b-d,c-d);a.lineTo(b-d,d);a.close();a.fillAndStroke();a.begin();a.moveTo(0,c);a.lineTo(d,c-d);a.lineTo(b-d,c-d);a.lineTo(b,c);a.close();a.fillAndStroke();a.begin();a.moveTo(0,c);a.lineTo(0,0);a.lineTo(d,d);a.lineTo(d,c-d);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicButton.prototype.cst.BUTTON,mxShapeBasicButton);mxShapeBasicButton.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicButton.prototype.cst.BUTTON]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/2,a.width/2,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/2,a.width/2,e.x-a.x)))/100})]};
+function mxShapeBasicShadedButton(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicShadedButton,mxActor);mxShapeBasicShadedButton.prototype.cst={SHADED_BUTTON:"mxgraph.basic.shaded_button"};
+mxShapeBasicShadedButton.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);a.setShadow(!1);d=Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));d=Math.min(.5*b,.5*c,d);a.begin();a.moveTo(0,0);a.lineTo(b,0);a.lineTo(b,c);a.lineTo(0,c);a.close();a.fill();a.setFillColor("#ffffff");a.setAlpha(.25);a.begin();a.moveTo(0,c);a.lineTo(0,0);a.lineTo(d,d);a.lineTo(d,c-d);a.close();a.fill();a.setAlpha(.5);a.begin();a.moveTo(0,0);a.lineTo(b,0);a.lineTo(b-d,d);a.lineTo(d,
+d);a.close();a.fill();a.setFillColor("#000000");a.setAlpha(.25);a.begin();a.moveTo(b,0);a.lineTo(b,c);a.lineTo(b-d,c-d);a.lineTo(b-d,d);a.close();a.fill();a.setAlpha(.5);a.begin();a.moveTo(0,c);a.lineTo(d,c-d);a.lineTo(b-d,c-d);a.lineTo(b,c);a.close();a.fill()};mxCellRenderer.registerShape(mxShapeBasicShadedButton.prototype.cst.SHADED_BUTTON,mxShapeBasicShadedButton);mxShapeBasicShadedButton.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicShadedButton.prototype.cst.SHADED_BUTTON]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(a.width/2,a.width/2,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d,a.y+d)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(a.height/2,a.width/2,e.x-a.x)))/100})]};
+function mxShapeBasicPie(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.startAngle=.25;this.endAngle=.75}mxUtils.extend(mxShapeBasicPie,mxActor);mxShapeBasicPie.prototype.cst={PIE:"mxgraph.basic.pie"};
+mxShapeBasicPie.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.style,"startAngle",this.startAngle))));e=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.style,"endAngle",this.endAngle))));b*=.5;c*=.5;var f=b+Math.sin(d)*b,g=c-Math.cos(d)*c,h=b+Math.sin(e)*b,k=c-Math.cos(e)*c;d=e-d;0>d&&(d+=2*Math.PI);e=0;d>Math.PI&&(e=1);a.begin();a.moveTo(b,c);a.lineTo(f,g);a.arcTo(b,c,0,e,1,h,k);a.close();a.fillAndStroke()};
+mxCellRenderer.registerShape(mxShapeBasicPie.prototype.cst.PIE,mxShapeBasicPie);mxShapeBasicPie.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicPie.prototype.cst.PIE]=function(a){var d=[Graph.createHandle(a,["startAngle"],function(a){var b=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"startAngle",this.startAngle))));return new mxPoint(a.x+.5*a.width+Math.sin(b)*a.width*.5,a.y+.5*a.height-Math.cos(b)*a.height*.5)},function(a,b){var c=.5*Math.atan2(Math.round(100*Math.max(-1,Math.min(1,(b.x-a.x-.5*a.width)/(.5*a.width))))/100,-Math.round(100*Math.max(-1,Math.min(1,(b.y-a.y-.5*
+a.height)/(.5*a.height))))/100)/Math.PI;0>c&&(c=1+c);this.state.style.startAngle=c})];a=Graph.createHandle(a,["endAngle"],function(a){var b=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"endAngle",this.endAngle))));return new mxPoint(a.x+.5*a.width+Math.sin(b)*a.width*.5,a.y+.5*a.height-Math.cos(b)*a.height*.5)},function(a,b){var c=.5*Math.atan2(Math.round(100*Math.max(-1,Math.min(1,(b.x-a.x-.5*a.width)/(.5*a.width))))/100,-Math.round(100*Math.max(-1,Math.min(1,(b.y-
+a.y-.5*a.height)/(.5*a.height))))/100)/Math.PI;0>c&&(c=1+c);this.state.style.endAngle=c});d.push(a);return d};function mxShapeBasicArc(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.startAngle=.25;this.endAngle=.75}mxUtils.extend(mxShapeBasicArc,mxActor);mxShapeBasicArc.prototype.cst={ARC:"mxgraph.basic.arc"};
+mxShapeBasicArc.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.style,"startAngle",this.startAngle))));e=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.style,"endAngle",this.endAngle))));b*=.5;c*=.5;var f=b+Math.sin(d)*b,g=c-Math.cos(d)*c,h=b+Math.sin(e)*b,k=c-Math.cos(e)*c;d=e-d;0>d&&(d+=2*Math.PI);e=0;d>Math.PI&&(e=1);a.begin();a.moveTo(f,g);a.arcTo(b,c,0,e,1,h,k);a.stroke()};
+mxCellRenderer.registerShape(mxShapeBasicArc.prototype.cst.ARC,mxShapeBasicArc);mxShapeBasicArc.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicArc.prototype.cst.ARC]=function(a){var d=[Graph.createHandle(a,["startAngle"],function(a){var b=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"startAngle",this.startAngle))));return new mxPoint(a.x+.5*a.width+Math.sin(b)*a.width*.5,a.y+.5*a.height-Math.cos(b)*a.height*.5)},function(a,b){var c=.5*Math.atan2(Math.round(100*Math.max(-1,Math.min(1,(b.x-a.x-.5*a.width)/(.5*a.width))))/100,-Math.round(100*Math.max(-1,Math.min(1,(b.y-a.y-.5*
+a.height)/(.5*a.height))))/100)/Math.PI;0>c&&(c=1+c);this.state.style.startAngle=c})];a=Graph.createHandle(a,["endAngle"],function(a){var b=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"endAngle",this.endAngle))));return new mxPoint(a.x+.5*a.width+Math.sin(b)*a.width*.5,a.y+.5*a.height-Math.cos(b)*a.height*.5)},function(a,b){var c=.5*Math.atan2(Math.round(100*Math.max(-1,Math.min(1,(b.x-a.x-.5*a.width)/(.5*a.width))))/100,-Math.round(100*Math.max(-1,Math.min(1,(b.y-
+a.y-.5*a.height)/(.5*a.height))))/100)/Math.PI;0>c&&(c=1+c);this.state.style.endAngle=c});d.push(a);return d};function mxShapeBasicPartConcEllipse(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.startAngle=.25;this.endAngle=.75;this.arcWidth=.5}mxUtils.extend(mxShapeBasicPartConcEllipse,mxActor);mxShapeBasicPartConcEllipse.prototype.cst={PART_CONC_ELLIPSE:"mxgraph.basic.partConcEllipse"};
+mxShapeBasicPartConcEllipse.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.style,"startAngle",this.startAngle))));e=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.style,"endAngle",this.endAngle))));var f=1-Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.style,"arcWidth",this.arcWidth))));b*=.5;c*=.5;var g=b*f,f=c*f,h=b+Math.sin(d)*b,k=c-Math.cos(d)*c,l=b+Math.sin(d)*g,n=c-Math.cos(d)*f,m=b+
+Math.sin(e)*b,p=c-Math.cos(e)*c,q=b+Math.sin(e)*g,u=c-Math.cos(e)*f;d=e-d;0>d&&(d+=2*Math.PI);e=0;d>Math.PI&&(e=1);a.begin();a.moveTo(h,k);a.arcTo(b,c,0,e,1,m,p);a.lineTo(q,u);a.arcTo(g,f,0,e,0,l,n);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicPartConcEllipse.prototype.cst.PART_CONC_ELLIPSE,mxShapeBasicPartConcEllipse);mxShapeBasicPartConcEllipse.prototype.constraints=null;
+Graph.handleFactory[mxShapeBasicPartConcEllipse.prototype.cst.PART_CONC_ELLIPSE]=function(a){var d=[Graph.createHandle(a,["startAngle"],function(a){var b=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"startAngle",this.startAngle))));return new mxPoint(a.x+.5*a.width+Math.sin(b)*a.width*.5,a.y+.5*a.height-Math.cos(b)*a.height*.5)},function(a,c){var b=.5*Math.atan2(Math.round(100*Math.max(-1,Math.min(1,(c.x-a.x-.5*a.width)/(.5*a.width))))/100,-Math.round(100*Math.max(-1,
+Math.min(1,(c.y-a.y-.5*a.height)/(.5*a.height))))/100)/Math.PI;0>b&&(b=1+b);this.state.style.startAngle=b})],e=Graph.createHandle(a,["endAngle"],function(a){var b=2*Math.PI*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"endAngle",this.endAngle))));return new mxPoint(a.x+.5*a.width+Math.sin(b)*a.width*.5,a.y+.5*a.height-Math.cos(b)*a.height*.5)},function(a,c){var b=.5*Math.atan2(Math.round(100*Math.max(-1,Math.min(1,(c.x-a.x-.5*a.width)/(.5*a.width))))/100,-Math.round(100*Math.max(-1,
+Math.min(1,(c.y-a.y-.5*a.height)/(.5*a.height))))/100)/Math.PI;0>b&&(b=1+b);this.state.style.endAngle=b});d.push(e);a=Graph.createHandle(a,["arcWidth"],function(a){var b=Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"arcWidth",this.arcWidth))));return new mxPoint(a.x+a.width/2,a.y+b*a.height*.5)},function(a,c){this.state.style.arcWidth=Math.round(100*Math.max(0,Math.min(a.height/2,a.width/2,(c.y-a.y)/(.5*a.height))))/100});d.push(a);return d};
 function mxShapeBootstrapRRect(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1}mxUtils.extend(mxShapeBootstrapRRect,mxShape);mxShapeBootstrapRRect.prototype.cst={PACKAGE:"mxgraph.bootstrap.rrect",R_SIZE:"rSize"};mxShapeBootstrapRRect.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=parseInt(mxUtils.getValue(this.style,mxShapeBootstrapRRect.prototype.cst.R_SIZE,"10"));a.roundrect(0,0,b,c,d);a.fillAndStroke()};
 mxCellRenderer.registerShape(mxShapeBootstrapRRect.prototype.cst.PACKAGE,mxShapeBootstrapRRect);function mxShapeBootstrapTopButton(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1}mxUtils.extend(mxShapeBootstrapTopButton,mxShape);mxShapeBootstrapTopButton.prototype.cst={TOP_BUTTON:"mxgraph.bootstrap.topButton",R_SIZE:"rSize"};
 mxShapeBootstrapTopButton.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=parseInt(mxUtils.getValue(this.style,mxShapeBootstrapTopButton.prototype.cst.R_SIZE,"10"));a.begin();a.moveTo(0,d);a.arcTo(d,d,0,0,1,d,0);a.lineTo(b-d,0);a.arcTo(d,d,0,0,1,b,d);a.lineTo(b,c);a.lineTo(0,c);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBootstrapTopButton.prototype.cst.TOP_BUTTON,mxShapeBootstrapTopButton);
@@ -1681,8 +1743,11 @@ function mxFloorplanDoorLeft(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill
 mxFloorplanDoorLeft.prototype.background=function(a,d,e,b,c){a.rect(0,0,b,5);a.fillAndStroke();a.begin();a.moveTo(b,5);a.arcTo(b,b,0,0,1,0,5+b);a.lineTo(0,5);a.stroke()};mxCellRenderer.registerShape(mxFloorplanDoorLeft.prototype.cst.DOOR_LEFT,mxFloorplanDoorLeft);function mxFloorplanDoorRight(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1}mxUtils.extend(mxFloorplanDoorRight,mxShape);mxFloorplanDoorRight.prototype.cst={DOOR_RIGHT:"mxgraph.floorplan.doorRight"};
 mxFloorplanDoorRight.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);this.background(a,d,e,b,c)};mxFloorplanDoorRight.prototype.background=function(a,d,e,b,c){a.rect(0,0,b,5);a.fillAndStroke();a.begin();a.moveTo(0,5);a.arcTo(b,b,0,0,0,b,5+b);a.lineTo(b,5);a.stroke()};mxCellRenderer.registerShape(mxFloorplanDoorRight.prototype.cst.DOOR_RIGHT,mxFloorplanDoorRight);
 function mxFloorplanDoorDouble(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1}mxUtils.extend(mxFloorplanDoorDouble,mxShape);mxFloorplanDoorDouble.prototype.cst={DOOR_DOUBLE:"mxgraph.floorplan.doorDouble"};mxFloorplanDoorDouble.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);this.background(a,d,e,b,c)};
-mxFloorplanDoorDouble.prototype.background=function(a,d,e,b,c){d=.5*b;a.rect(0,0,b,5);a.fillAndStroke();a.begin();a.moveTo(d,0);a.lineTo(d,5);a.moveTo(d,5);a.arcTo(d,d,0,0,1,0,5+d);a.lineTo(0,5);a.moveTo(d,5);a.arcTo(d,d,0,0,0,b,5+d);a.lineTo(b,5);a.stroke()};mxCellRenderer.registerShape(mxFloorplanDoorDouble.prototype.cst.DOOR_DOUBLE,mxFloorplanDoorDouble);function mxShapeGmdlPlayer(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1}
-mxUtils.extend(mxShapeGmdlPlayer,mxShape);mxShapeGmdlPlayer.prototype.cst={SHAPE_PLAYER:"mxgraph.gmdl.player"};mxShapeGmdlPlayer.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);a.begin();a.rect(0,0,b,c);a.fill();a.setShadow(!1);this.foreground(a,d,e,b,c)};
+mxFloorplanDoorDouble.prototype.background=function(a,d,e,b,c){d=.5*b;a.rect(0,0,b,5);a.fillAndStroke();a.begin();a.moveTo(d,0);a.lineTo(d,5);a.moveTo(d,5);a.arcTo(d,d,0,0,1,0,5+d);a.lineTo(0,5);a.moveTo(d,5);a.arcTo(d,d,0,0,0,b,5+d);a.lineTo(b,5);a.stroke()};mxCellRenderer.registerShape(mxFloorplanDoorDouble.prototype.cst.DOOR_DOUBLE,mxFloorplanDoorDouble);
+function mxShapeFlowchartDocument2(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.size=.5}mxUtils.extend(mxShapeFlowchartDocument2,mxActor);mxShapeFlowchartDocument2.prototype.cst={DOCUMENT2:"mxgraph.flowchart.document2"};
+mxShapeFlowchartDocument2.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=c*Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.style,"size",this.size))));a.begin();a.moveTo(b-5,0);a.arcTo(5,5,0,0,1,b,5);a.lineTo(b,c-d/2);a.quadTo(3*b/4,c-1.4*d,b/2,c-d/2);a.quadTo(b/4,c-d*(1-1.4),0,c-d/2);a.lineTo(0,d/2);a.lineTo(0,5);a.arcTo(5,5,0,0,1,5,0);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeFlowchartDocument2.prototype.cst.DOCUMENT2,mxShapeFlowchartDocument2);
+mxShapeFlowchartDocument2.prototype.constraints=null;Graph.handleFactory[mxShapeFlowchartDocument2.prototype.cst.DOCUMENT2]=function(a){return[Graph.createHandle(a,["size"],function(a){var d=Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"size",this.size))));return new mxPoint(a.x+3*a.width/4,a.y+(1-d)*a.height)},function(a,e){this.state.style.size=Math.max(0,Math.min(1,(a.y+a.height-e.y)/a.height))})]};
+function mxShapeGmdlPlayer(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1}mxUtils.extend(mxShapeGmdlPlayer,mxShape);mxShapeGmdlPlayer.prototype.cst={SHAPE_PLAYER:"mxgraph.gmdl.player"};mxShapeGmdlPlayer.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);a.begin();a.rect(0,0,b,c);a.fill();a.setShadow(!1);this.foreground(a,d,e,b,c)};
 mxShapeGmdlPlayer.prototype.foreground=function(a,d,e,b,c){4<=c&&(a.setFillColor("#FFED00"),a.begin(),a.rect(0,0,.8*b,4),a.fill());14<=c&&33<=b&&(a.setFillColor("#717171"),a.begin(),a.rect(b-33,.5*c-7,4,14),a.fill(),a.begin(),a.rect(b-25,.5*c-7,4,14),a.fill())};mxCellRenderer.registerShape(mxShapeGmdlPlayer.prototype.cst.SHAPE_PLAYER,mxShapeGmdlPlayer);function mxShapeGmdlSwitch(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1}
 mxUtils.extend(mxShapeGmdlSwitch,mxShape);mxShapeGmdlSwitch.prototype.cst={SHAPE_SWITCH:"mxgraph.gmdl.switch",STATE:"switchState",STATE_ON:"on",STATE_OFF:"off"};mxShapeGmdlSwitch.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);var f=mxUtils.getValue(this.style,mxShapeGmdlSwitch.prototype.cst.STATE,mxShapeGmdlSwitch.prototype.cst.STATE_ON);this.background(a,d,e,b,c,f);a.setShadow(!0);this.foreground(a,d,e,b,c,f)};
 mxShapeGmdlSwitch.prototype.background=function(a,d,e,b,c,f){a.begin();f===mxShapeGmdlSwitch.prototype.cst.STATE_ON?(a.save(),a.setAlpha("0.5"),a.moveTo(.135*b,.8*c),a.arcTo(.135*b,.3*c,0,0,1,.135*b,.2*c),a.lineTo(.675*b,.2*c),a.arcTo(.135*b,.3*c,0,0,1,.675*b,.8*c),a.close(),a.fillAndStroke(),a.restore()):(a.setFillColor("#BCBBBB"),a.moveTo(.225*b,.8*c),a.arcTo(.135*b,.3*c,0,0,1,.225*b,.2*c),a.lineTo(.865*b,.2*c),a.arcTo(.135*b,.3*c,0,0,1,.865*b,.8*c),a.close(),a.fillAndStroke())};
diff --git a/src/main/webapp/js/viewer.min.js b/src/main/webapp/js/viewer.min.js
index 6b24794a9..76ee129a7 100644
--- a/src/main/webapp/js/viewer.min.js
+++ b/src/main/webapp/js/viewer.min.js
@@ -2675,32 +2675,32 @@ g.setAttribute("in","blur");g.setAttribute("dx",this.svgShadowSize);g.setAttribu
 c.createElement("feComposite");g.setAttribute("in","offsetColor");g.setAttribute("in2","offsetBlur");g.setAttribute("operator","in");g.setAttribute("result","offsetBlur");f.appendChild(g);g=null!=c.createElementNS?c.createElementNS(mxConstants.NS_SVG,"feBlend"):c.createElement("feBlend");g.setAttribute("in","SourceGraphic");g.setAttribute("in2","offsetBlur");f.appendChild(g);g=a.getElementsByTagName("defs");0==g.length?(c=null!=c.createElementNS?c.createElementNS(mxConstants.NS_SVG,"defs"):c.createElement("defs"),
 null!=a.firstChild?a.insertBefore(c,a.firstChild):a.appendChild(c)):c=g[0];c.appendChild(f);b||((d||a.getElementsByTagName("g")[0]).setAttribute("filter","url(#"+this.shadowId+")"),isNaN(parseInt(a.getAttribute("width")))||(a.setAttribute("width",parseInt(a.getAttribute("width"))+6),a.setAttribute("height",parseInt(a.getAttribute("height"))+6)));return f};Graph.prototype.setShadowVisible=function(a,d){mxClient.IS_SVG&&(d=null!=d?d:!0,(this.shadowVisible=a)?this.view.getDrawPane().setAttribute("filter",
 "url(#"+this.shadowId+")"):this.view.getDrawPane().removeAttribute("filter"),d&&this.fireEvent(new mxEventObject("shadowVisibleChanged")))};Graph.prototype.selectUnlockedLayer=function(){if(null==this.defaultParent){var a=this.model.getChildCount(this.model.root),d,b=0;do d=this.model.getChildAt(this.model.root,b);while(b++<a&&"1"==mxUtils.getValue(this.getCellStyle(d),"locked","0"));null!=d&&this.setDefaultParent(d)}};mxStencilRegistry.libraries.mockup=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];
-mxStencilRegistry.libraries.arrows2=[SHAPES_PATH+"/mxArrows.js"];mxStencilRegistry.libraries.atlassian=[STENCIL_PATH+"/atlassian.xml"];mxStencilRegistry.libraries.bpmn=[SHAPES_PATH+"/bpmn/mxBpmnShape2.js",STENCIL_PATH+"/bpmn.xml"];mxStencilRegistry.libraries.er=[SHAPES_PATH+"/er/mxER.js"];mxStencilRegistry.libraries.ios=[SHAPES_PATH+"/mockup/mxMockupiOS.js"];mxStencilRegistry.libraries.rackGeneral=[SHAPES_PATH+"/rack/mxRack.js",STENCIL_PATH+"/rack/general.xml"];mxStencilRegistry.libraries.rackF5=
-[STENCIL_PATH+"/rack/f5.xml"];mxStencilRegistry.libraries.lean_mapping=[SHAPES_PATH+"/mxLeanMap.js",STENCIL_PATH+"/lean_mapping.xml"];mxStencilRegistry.libraries.basic=[SHAPES_PATH+"/mxBasic.js",STENCIL_PATH+"/basic.xml"];mxStencilRegistry.libraries.ios7icons=[STENCIL_PATH+"/ios7/icons.xml"];mxStencilRegistry.libraries.ios7ui=[SHAPES_PATH+"/ios7/mxIOS7Ui.js",STENCIL_PATH+"/ios7/misc.xml"];mxStencilRegistry.libraries.android=[SHAPES_PATH+"/mxAndroid.js",STENCIL_PATH+"/android/android.xml"];mxStencilRegistry.libraries["electrical/transmission"]=
-[SHAPES_PATH+"/mxElectrical.js",STENCIL_PATH+"/electrical/transmission.xml"];mxStencilRegistry.libraries["mockup/buttons"]=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];mxStencilRegistry.libraries["mockup/containers"]=[SHAPES_PATH+"/mockup/mxMockupContainers.js"];mxStencilRegistry.libraries["mockup/forms"]=[SHAPES_PATH+"/mockup/mxMockupForms.js"];mxStencilRegistry.libraries["mockup/graphics"]=[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 d=null;null!=a&&0<a.length&&("ER"==a.substring(0,2)?d="mxgraph.er":"sysML"==a.substring(0,5)&&(d="mxgraph.sysml"));return d};var h=mxMarker.createMarker;mxMarker.createMarker=function(a,d,b,c,f,g,e,p,m,k){if(null!=b&&null==mxMarker.markers[b]){var u=this.getPackageForType(b);null!=u&&mxStencilRegistry.getStencil(u)}return h.apply(this,arguments)};PrintDialog.prototype.create=function(a,d){function b(){l.value=Math.max(1,
-Math.min(h,Math.max(parseInt(l.value),parseInt(w.value))));w.value=Math.max(1,Math.min(h,Math.min(parseInt(l.value),parseInt(w.value))))}function c(d){function b(d,b,f){var g=d.getGraphBounds(),e=0,h=0,p=Y.get(),m=1/d.pageScale,k=t.checked;if(k)var m=parseInt(T.value),r=parseInt(V.value),m=Math.min(p.height*r/(g.height/d.view.scale),p.width*m/(g.width/d.view.scale));else m=parseInt(q.value)/(100*d.pageScale),isNaN(m)&&(c=1/d.pageScale,q.value="100 %");p=mxRectangle.fromRectangle(p);p.width=Math.ceil(p.width*
-c);p.height=Math.ceil(p.height*c);m*=c;!k&&d.pageVisible?(g=d.getPageLayout(),e-=g.x*p.width,h-=g.y*p.height):k=!0;if(null==b){b=PrintDialog.createPrintPreview(d,m,p,0,e,h,k);b.pageSelector=!1;b.mathEnabled=!1;d=a.getCurrentFile();null!=d&&(b.title=d.getTitle());var u=b.writeHead;b.writeHead=function(d){u.apply(this,arguments);null!=a.editor.fontCss&&(d.writeln('<style type="text/css">'),d.writeln(a.editor.fontCss),d.writeln("</style>"))};if("undefined"!==typeof MathJax){var w=b.renderPage;b.renderPage=
-function(a,d,b,c,f,g){var e=w.apply(this,arguments);this.graph.mathEnabled?this.mathEnabled=!0:e.className="geDisableMathJax";return e}}b.open(null,null,f,!0)}else{p=d.background;if(null==p||""==p||p==mxConstants.NONE)p="#ffffff";b.backgroundColor=p;b.autoOrigin=k;b.appendGraph(d,m,e,h,f,!0)}return b}var c=parseInt(M.value)/100;isNaN(c)&&(c=1,M.value="100 %");var c=.75*c,g=w.value,e=l.value,h=!k.checked,m=null;h&&(h=g==p&&e==p);if(!h&&null!=a.pages&&a.pages.length){var r=0,h=a.pages.length-1;k.checked||
-(r=parseInt(g)-1,h=parseInt(e)-1);for(var u=r;u<=h;u++){var x=a.pages[u],g=x==a.currentPage?f:null;if(null==g){var g=a.createTemporaryGraph(f.getStylesheet()),e=!0,r=!1,n=null,v=null;null==x.viewState&&null==x.mapping&&null==x.root&&a.updatePageRoot(x);null!=x.viewState?(e=x.viewState.pageVisible,r=x.viewState.mathEnabled,n=x.viewState.background,v=x.viewState.backgroundImage):null!=x.mapping&&null!=x.mapping.diagramMap&&(r="0"!=x.mapping.diagramMap.get("mathEnabled"),n=x.mapping.diagramMap.get("background"),
-v=x.mapping.diagramMap.get("backgroundImage"),v=null!=v&&0<v.length?JSON.parse(v):null);g.background=n;g.backgroundImage=null!=v?new mxImage(v.src,v.width,v.height):null;g.pageVisible=e;g.mathEnabled=r;var A=g.getGlobalVariable;g.getGlobalVariable=function(a){return"page"==a?x.getName():"pagenumber"==a?u+1:A.apply(this,arguments)};document.body.appendChild(g.container);a.updatePageRoot(x);g.model.setRoot(x.root)}m=b(g,m,u!=h);g!=f&&g.container.parentNode.removeChild(g.container)}}else m=b(f);m.mathEnabled&&
-(h=m.wnd.document,h.writeln('<script type="text/x-mathjax-config">'),h.writeln("MathJax.Hub.Config({"),h.writeln('messageStyle: "none",'),h.writeln('jax: ["input/TeX", "input/MathML", "input/AsciiMath", "output/HTML-CSS"],'),h.writeln('extensions: ["tex2jax.js", "mml2jax.js", "asciimath2jax.js"],'),h.writeln("TeX: {"),h.writeln('extensions: ["AMSmath.js", "AMSsymbols.js", "noErrors.js", "noUndefined.js"]'),h.writeln("},"),h.writeln("tex2jax: {"),h.writeln('\tignoreClass: "geDisableMathJax"'),h.writeln("},"),
-h.writeln("asciimath2jax: {"),h.writeln('\tignoreClass: "geDisableMathJax"'),h.writeln("}"),h.writeln("});"),d&&(h.writeln("MathJax.Hub.Queue(function () {"),h.writeln("window.print();"),h.writeln("});")),h.writeln("\x3c/script>"),h.writeln('<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js">\x3c/script>'));m.closeDocument();!m.mathEnabled&&d&&PrintDialog.printPreview(m)}var f=a.editor.graph,g=document.createElement("div"),e=document.createElement("h3");
-e.style.width="100%";e.style.textAlign="center";e.style.marginTop="0px";mxUtils.write(e,d||mxResources.get("print"));g.appendChild(e);var h=1,p=1,m=document.createElement("div");m.style.cssText="border-bottom:1px solid lightGray;padding-bottom:12px;margin-bottom:12px;";var k=document.createElement("input");k.style.cssText="margin-right:8px;margin-bottom:8px;";k.setAttribute("value","all");k.setAttribute("type","radio");k.setAttribute("name","pages-printdialog");m.appendChild(k);e=document.createElement("span");
-mxUtils.write(e,mxResources.get("printAllPages"));m.appendChild(e);mxUtils.br(m);var u=k.cloneNode(!0);k.setAttribute("checked","checked");u.setAttribute("value","range");m.appendChild(u);e=document.createElement("span");mxUtils.write(e,mxResources.get("pages")+":");m.appendChild(e);var w=document.createElement("input");w.style.cssText="margin:0 8px 0 8px;";w.setAttribute("value","1");w.setAttribute("type","number");w.setAttribute("min","1");w.style.width="50px";m.appendChild(w);e=document.createElement("span");
-mxUtils.write(e,mxResources.get("to"));m.appendChild(e);var l=w.cloneNode(!0);m.appendChild(l);mxEvent.addListener(w,"focus",function(){u.checked=!0});mxEvent.addListener(l,"focus",function(){u.checked=!0});mxEvent.addListener(w,"change",b);mxEvent.addListener(l,"change",b);if(null!=a.pages&&(h=a.pages.length,null!=a.currentPage))for(e=0;e<a.pages.length;e++)if(a.currentPage==a.pages[e]){p=e+1;w.value=p;l.value=p;break}w.setAttribute("max",h);l.setAttribute("max",h);1<h&&g.appendChild(m);var n=document.createElement("div");
-n.style.marginBottom="10px";var v=document.createElement("input");v.style.marginRight="8px";v.setAttribute("value","adjust");v.setAttribute("type","radio");v.setAttribute("name","printZoom");n.appendChild(v);e=document.createElement("span");mxUtils.write(e,mxResources.get("adjustTo"));n.appendChild(e);var q=document.createElement("input");q.style.cssText="margin:0 8px 0 8px;";q.setAttribute("value","100 %");q.style.width="50px";n.appendChild(q);mxEvent.addListener(q,"focus",function(){v.checked=!0});
-g.appendChild(n);var m=m.cloneNode(!1),t=v.cloneNode(!0);t.setAttribute("value","fit");v.setAttribute("checked","checked");e=document.createElement("div");e.style.cssText="display:inline-block;height:100%;vertical-align:top;padding-top:2px;";e.appendChild(t);m.appendChild(e);n=document.createElement("table");n.style.display="inline-block";var G=document.createElement("tbody"),K=document.createElement("tr"),S=K.cloneNode(!0),J=document.createElement("td"),N=J.cloneNode(!0),U=J.cloneNode(!0),D=J.cloneNode(!0),
-W=J.cloneNode(!0),O=J.cloneNode(!0);J.style.textAlign="right";D.style.textAlign="right";mxUtils.write(J,mxResources.get("fitTo"));var T=document.createElement("input");T.style.cssText="margin:0 8px 0 8px;";T.setAttribute("value","1");T.setAttribute("min","1");T.setAttribute("type","number");T.style.width="40px";N.appendChild(T);e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsAcross"));U.appendChild(e);mxUtils.write(D,mxResources.get("fitToBy"));var V=T.cloneNode(!0);W.appendChild(V);
-mxEvent.addListener(T,"focus",function(){t.checked=!0});mxEvent.addListener(V,"focus",function(){t.checked=!0});e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsDown"));O.appendChild(e);K.appendChild(J);K.appendChild(N);K.appendChild(U);S.appendChild(D);S.appendChild(W);S.appendChild(O);G.appendChild(K);G.appendChild(S);n.appendChild(G);m.appendChild(n);g.appendChild(m);m=document.createElement("div");e=document.createElement("div");e.style.fontWeight="bold";e.style.marginBottom=
-"12px";mxUtils.write(e,mxResources.get("paperSize"));m.appendChild(e);e=document.createElement("div");e.style.marginBottom="12px";var Y=PageSetupDialog.addPageFormatPanel(e,"printdialog",a.editor.graph.pageFormat||mxConstants.PAGE_FORMAT_A4_PORTRAIT);m.appendChild(e);e=document.createElement("span");mxUtils.write(e,mxResources.get("pageScale"));m.appendChild(e);var M=document.createElement("input");M.style.cssText="margin:0 8px 0 8px;";M.setAttribute("value","100 %");M.style.width="60px";m.appendChild(M);
-g.appendChild(m);e=document.createElement("div");e.style.cssText="text-align:right;margin:62px 0 0 0;";m=mxUtils.button(mxResources.get("cancel"),function(){a.hideDialog()});m.className="geBtn";a.editor.cancelFirst&&e.appendChild(m);a.isOffline()||(n=mxUtils.button(mxResources.get("help"),function(){f.openLink("https://desk.draw.io/support/solutions/articles/16000048947")}),n.className="geBtn",e.appendChild(n));PrintDialog.previewEnabled&&(n=mxUtils.button(mxResources.get("preview"),function(){a.hideDialog();
-c(!1)}),n.className="geBtn",e.appendChild(n));n=mxUtils.button(mxResources.get(PrintDialog.previewEnabled?"print":"ok"),function(){a.hideDialog();c(!0)});n.className="geBtn gePrimaryBtn";e.appendChild(n);a.editor.cancelFirst||e.appendChild(m);g.appendChild(e);this.container=g};var w=ChangePageSetup.prototype.execute;ChangePageSetup.prototype.execute=function(){null==this.page&&(this.page=this.ui.currentPage);this.page!=this.ui.currentPage?null!=this.page.viewState&&(this.ignoreColor||(this.page.viewState.background=
-this.color),this.ignoreImage||(this.page.viewState.backgroundImage=this.image),null!=this.format&&(this.page.viewState.pageFormat=this.format),null!=this.mathEnabled&&(this.page.viewState.mathEnabled=this.mathEnabled),null!=this.shadowVisible&&(this.page.viewState.shadowVisible=this.shadowVisible)):(w.apply(this,arguments),null!=this.mathEnabled&&this.mathEnabled!=this.ui.isMathEnabled()&&(this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=
-this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible))}})();
+mxStencilRegistry.libraries.arrows2=[SHAPES_PATH+"/mxArrows.js"];mxStencilRegistry.libraries.atlassian=[STENCIL_PATH+"/atlassian.xml"];mxStencilRegistry.libraries.bpmn=[SHAPES_PATH+"/bpmn/mxBpmnShape2.js",STENCIL_PATH+"/bpmn.xml"];mxStencilRegistry.libraries.er=[SHAPES_PATH+"/er/mxER.js"];mxStencilRegistry.libraries.flowchart=[SHAPES_PATH+"/mxFlowchart.js",STENCIL_PATH+"/flowchart.xml"];mxStencilRegistry.libraries.ios=[SHAPES_PATH+"/mockup/mxMockupiOS.js"];mxStencilRegistry.libraries.rackGeneral=
+[SHAPES_PATH+"/rack/mxRack.js",STENCIL_PATH+"/rack/general.xml"];mxStencilRegistry.libraries.rackF5=[STENCIL_PATH+"/rack/f5.xml"];mxStencilRegistry.libraries.lean_mapping=[SHAPES_PATH+"/mxLeanMap.js",STENCIL_PATH+"/lean_mapping.xml"];mxStencilRegistry.libraries.basic=[SHAPES_PATH+"/mxBasic.js",STENCIL_PATH+"/basic.xml"];mxStencilRegistry.libraries.ios7icons=[STENCIL_PATH+"/ios7/icons.xml"];mxStencilRegistry.libraries.ios7ui=[SHAPES_PATH+"/ios7/mxIOS7Ui.js",STENCIL_PATH+"/ios7/misc.xml"];mxStencilRegistry.libraries.android=
+[SHAPES_PATH+"/mxAndroid.js",STENCIL_PATH+"/android/android.xml"];mxStencilRegistry.libraries["electrical/transmission"]=[SHAPES_PATH+"/mxElectrical.js",STENCIL_PATH+"/electrical/transmission.xml"];mxStencilRegistry.libraries["mockup/buttons"]=[SHAPES_PATH+"/mockup/mxMockupButtons.js"];mxStencilRegistry.libraries["mockup/containers"]=[SHAPES_PATH+"/mockup/mxMockupContainers.js"];mxStencilRegistry.libraries["mockup/forms"]=[SHAPES_PATH+"/mockup/mxMockupForms.js"];mxStencilRegistry.libraries["mockup/graphics"]=
+[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 d=null;null!=a&&0<a.length&&("ER"==a.substring(0,2)?d="mxgraph.er":"sysML"==a.substring(0,5)&&(d="mxgraph.sysml"));return d};var h=mxMarker.createMarker;mxMarker.createMarker=function(a,d,b,c,f,g,e,p,m,k){if(null!=b&&null==mxMarker.markers[b]){var u=this.getPackageForType(b);null!=u&&mxStencilRegistry.getStencil(u)}return h.apply(this,arguments)};
+PrintDialog.prototype.create=function(a,d){function b(){l.value=Math.max(1,Math.min(h,Math.max(parseInt(l.value),parseInt(w.value))));w.value=Math.max(1,Math.min(h,Math.min(parseInt(l.value),parseInt(w.value))))}function c(d){function b(d,b,f){var g=d.getGraphBounds(),e=0,h=0,p=Y.get(),m=1/d.pageScale,k=t.checked;if(k)var m=parseInt(T.value),r=parseInt(V.value),m=Math.min(p.height*r/(g.height/d.view.scale),p.width*m/(g.width/d.view.scale));else m=parseInt(q.value)/(100*d.pageScale),isNaN(m)&&(c=1/
+d.pageScale,q.value="100 %");p=mxRectangle.fromRectangle(p);p.width=Math.ceil(p.width*c);p.height=Math.ceil(p.height*c);m*=c;!k&&d.pageVisible?(g=d.getPageLayout(),e-=g.x*p.width,h-=g.y*p.height):k=!0;if(null==b){b=PrintDialog.createPrintPreview(d,m,p,0,e,h,k);b.pageSelector=!1;b.mathEnabled=!1;d=a.getCurrentFile();null!=d&&(b.title=d.getTitle());var u=b.writeHead;b.writeHead=function(d){u.apply(this,arguments);null!=a.editor.fontCss&&(d.writeln('<style type="text/css">'),d.writeln(a.editor.fontCss),
+d.writeln("</style>"))};if("undefined"!==typeof MathJax){var w=b.renderPage;b.renderPage=function(a,d,b,c,f,g){var e=w.apply(this,arguments);this.graph.mathEnabled?this.mathEnabled=!0:e.className="geDisableMathJax";return e}}b.open(null,null,f,!0)}else{p=d.background;if(null==p||""==p||p==mxConstants.NONE)p="#ffffff";b.backgroundColor=p;b.autoOrigin=k;b.appendGraph(d,m,e,h,f,!0)}return b}var c=parseInt(M.value)/100;isNaN(c)&&(c=1,M.value="100 %");var c=.75*c,g=w.value,e=l.value,h=!k.checked,m=null;
+h&&(h=g==p&&e==p);if(!h&&null!=a.pages&&a.pages.length){var r=0,h=a.pages.length-1;k.checked||(r=parseInt(g)-1,h=parseInt(e)-1);for(var u=r;u<=h;u++){var x=a.pages[u],g=x==a.currentPage?f:null;if(null==g){var g=a.createTemporaryGraph(f.getStylesheet()),e=!0,r=!1,n=null,v=null;null==x.viewState&&null==x.mapping&&null==x.root&&a.updatePageRoot(x);null!=x.viewState?(e=x.viewState.pageVisible,r=x.viewState.mathEnabled,n=x.viewState.background,v=x.viewState.backgroundImage):null!=x.mapping&&null!=x.mapping.diagramMap&&
+(r="0"!=x.mapping.diagramMap.get("mathEnabled"),n=x.mapping.diagramMap.get("background"),v=x.mapping.diagramMap.get("backgroundImage"),v=null!=v&&0<v.length?JSON.parse(v):null);g.background=n;g.backgroundImage=null!=v?new mxImage(v.src,v.width,v.height):null;g.pageVisible=e;g.mathEnabled=r;var A=g.getGlobalVariable;g.getGlobalVariable=function(a){return"page"==a?x.getName():"pagenumber"==a?u+1:A.apply(this,arguments)};document.body.appendChild(g.container);a.updatePageRoot(x);g.model.setRoot(x.root)}m=
+b(g,m,u!=h);g!=f&&g.container.parentNode.removeChild(g.container)}}else m=b(f);m.mathEnabled&&(h=m.wnd.document,h.writeln('<script type="text/x-mathjax-config">'),h.writeln("MathJax.Hub.Config({"),h.writeln('messageStyle: "none",'),h.writeln('jax: ["input/TeX", "input/MathML", "input/AsciiMath", "output/HTML-CSS"],'),h.writeln('extensions: ["tex2jax.js", "mml2jax.js", "asciimath2jax.js"],'),h.writeln("TeX: {"),h.writeln('extensions: ["AMSmath.js", "AMSsymbols.js", "noErrors.js", "noUndefined.js"]'),
+h.writeln("},"),h.writeln("tex2jax: {"),h.writeln('\tignoreClass: "geDisableMathJax"'),h.writeln("},"),h.writeln("asciimath2jax: {"),h.writeln('\tignoreClass: "geDisableMathJax"'),h.writeln("}"),h.writeln("});"),d&&(h.writeln("MathJax.Hub.Queue(function () {"),h.writeln("window.print();"),h.writeln("});")),h.writeln("\x3c/script>"),h.writeln('<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js">\x3c/script>'));m.closeDocument();!m.mathEnabled&&d&&PrintDialog.printPreview(m)}
+var f=a.editor.graph,g=document.createElement("div"),e=document.createElement("h3");e.style.width="100%";e.style.textAlign="center";e.style.marginTop="0px";mxUtils.write(e,d||mxResources.get("print"));g.appendChild(e);var h=1,p=1,m=document.createElement("div");m.style.cssText="border-bottom:1px solid lightGray;padding-bottom:12px;margin-bottom:12px;";var k=document.createElement("input");k.style.cssText="margin-right:8px;margin-bottom:8px;";k.setAttribute("value","all");k.setAttribute("type","radio");
+k.setAttribute("name","pages-printdialog");m.appendChild(k);e=document.createElement("span");mxUtils.write(e,mxResources.get("printAllPages"));m.appendChild(e);mxUtils.br(m);var u=k.cloneNode(!0);k.setAttribute("checked","checked");u.setAttribute("value","range");m.appendChild(u);e=document.createElement("span");mxUtils.write(e,mxResources.get("pages")+":");m.appendChild(e);var w=document.createElement("input");w.style.cssText="margin:0 8px 0 8px;";w.setAttribute("value","1");w.setAttribute("type",
+"number");w.setAttribute("min","1");w.style.width="50px";m.appendChild(w);e=document.createElement("span");mxUtils.write(e,mxResources.get("to"));m.appendChild(e);var l=w.cloneNode(!0);m.appendChild(l);mxEvent.addListener(w,"focus",function(){u.checked=!0});mxEvent.addListener(l,"focus",function(){u.checked=!0});mxEvent.addListener(w,"change",b);mxEvent.addListener(l,"change",b);if(null!=a.pages&&(h=a.pages.length,null!=a.currentPage))for(e=0;e<a.pages.length;e++)if(a.currentPage==a.pages[e]){p=e+
+1;w.value=p;l.value=p;break}w.setAttribute("max",h);l.setAttribute("max",h);1<h&&g.appendChild(m);var n=document.createElement("div");n.style.marginBottom="10px";var v=document.createElement("input");v.style.marginRight="8px";v.setAttribute("value","adjust");v.setAttribute("type","radio");v.setAttribute("name","printZoom");n.appendChild(v);e=document.createElement("span");mxUtils.write(e,mxResources.get("adjustTo"));n.appendChild(e);var q=document.createElement("input");q.style.cssText="margin:0 8px 0 8px;";
+q.setAttribute("value","100 %");q.style.width="50px";n.appendChild(q);mxEvent.addListener(q,"focus",function(){v.checked=!0});g.appendChild(n);var m=m.cloneNode(!1),t=v.cloneNode(!0);t.setAttribute("value","fit");v.setAttribute("checked","checked");e=document.createElement("div");e.style.cssText="display:inline-block;height:100%;vertical-align:top;padding-top:2px;";e.appendChild(t);m.appendChild(e);n=document.createElement("table");n.style.display="inline-block";var G=document.createElement("tbody"),
+K=document.createElement("tr"),S=K.cloneNode(!0),J=document.createElement("td"),N=J.cloneNode(!0),U=J.cloneNode(!0),D=J.cloneNode(!0),W=J.cloneNode(!0),O=J.cloneNode(!0);J.style.textAlign="right";D.style.textAlign="right";mxUtils.write(J,mxResources.get("fitTo"));var T=document.createElement("input");T.style.cssText="margin:0 8px 0 8px;";T.setAttribute("value","1");T.setAttribute("min","1");T.setAttribute("type","number");T.style.width="40px";N.appendChild(T);e=document.createElement("span");mxUtils.write(e,
+mxResources.get("fitToSheetsAcross"));U.appendChild(e);mxUtils.write(D,mxResources.get("fitToBy"));var V=T.cloneNode(!0);W.appendChild(V);mxEvent.addListener(T,"focus",function(){t.checked=!0});mxEvent.addListener(V,"focus",function(){t.checked=!0});e=document.createElement("span");mxUtils.write(e,mxResources.get("fitToSheetsDown"));O.appendChild(e);K.appendChild(J);K.appendChild(N);K.appendChild(U);S.appendChild(D);S.appendChild(W);S.appendChild(O);G.appendChild(K);G.appendChild(S);n.appendChild(G);
+m.appendChild(n);g.appendChild(m);m=document.createElement("div");e=document.createElement("div");e.style.fontWeight="bold";e.style.marginBottom="12px";mxUtils.write(e,mxResources.get("paperSize"));m.appendChild(e);e=document.createElement("div");e.style.marginBottom="12px";var Y=PageSetupDialog.addPageFormatPanel(e,"printdialog",a.editor.graph.pageFormat||mxConstants.PAGE_FORMAT_A4_PORTRAIT);m.appendChild(e);e=document.createElement("span");mxUtils.write(e,mxResources.get("pageScale"));m.appendChild(e);
+var M=document.createElement("input");M.style.cssText="margin:0 8px 0 8px;";M.setAttribute("value","100 %");M.style.width="60px";m.appendChild(M);g.appendChild(m);e=document.createElement("div");e.style.cssText="text-align:right;margin:62px 0 0 0;";m=mxUtils.button(mxResources.get("cancel"),function(){a.hideDialog()});m.className="geBtn";a.editor.cancelFirst&&e.appendChild(m);a.isOffline()||(n=mxUtils.button(mxResources.get("help"),function(){f.openLink("https://desk.draw.io/support/solutions/articles/16000048947")}),
+n.className="geBtn",e.appendChild(n));PrintDialog.previewEnabled&&(n=mxUtils.button(mxResources.get("preview"),function(){a.hideDialog();c(!1)}),n.className="geBtn",e.appendChild(n));n=mxUtils.button(mxResources.get(PrintDialog.previewEnabled?"print":"ok"),function(){a.hideDialog();c(!0)});n.className="geBtn gePrimaryBtn";e.appendChild(n);a.editor.cancelFirst||e.appendChild(m);g.appendChild(e);this.container=g};var w=ChangePageSetup.prototype.execute;ChangePageSetup.prototype.execute=function(){null==
+this.page&&(this.page=this.ui.currentPage);this.page!=this.ui.currentPage?null!=this.page.viewState&&(this.ignoreColor||(this.page.viewState.background=this.color),this.ignoreImage||(this.page.viewState.backgroundImage=this.image),null!=this.format&&(this.page.viewState.pageFormat=this.format),null!=this.mathEnabled&&(this.page.viewState.mathEnabled=this.mathEnabled),null!=this.shadowVisible&&(this.page.viewState.shadowVisible=this.shadowVisible)):(w.apply(this,arguments),null!=this.mathEnabled&&
+this.mathEnabled!=this.ui.isMathEnabled()&&(this.ui.setMathEnabled(this.mathEnabled),this.mathEnabled=!this.mathEnabled),null!=this.shadowVisible&&this.shadowVisible!=this.ui.editor.graph.shadowVisible&&(this.ui.editor.graph.setShadowVisible(this.shadowVisible),this.shadowVisible=!this.shadowVisible))}})();
 (function(){var a=new mxObjectCodec(new ChangePageSetup,["ui","previousColor","previousImage","previousFormat"]);a.beforeDecode=function(a,e,c){c.ui=a.ui;return e};a.afterDecode=function(a,e,c){c.previousColor=c.color;c.previousImage=c.image;c.previousFormat=c.format;null!=c.foldingEnabled&&(c.foldingEnabled=!c.foldingEnabled);null!=c.mathEnabled&&(c.mathEnabled=!c.mathEnabled);null!=c.shadowVisible&&(c.shadowVisible=!c.shadowVisible);return c};mxCodecRegistry.register(a)})();(function(){EditorUi.VERSION="@DRAWIO-VERSION@";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.enableLogging=/.*\.draw\.io$/.test(window.location.hostname);EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.scratchpadHelpLink="https://desk.draw.io/support/solutions/articles/16000042367";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.svgBrokenImage=Graph.createSvgImage(10,10,'<rect x="0" y="0" width="10" height="10" stroke="#000" fill="transparent"/><path d="m 0 0 L 10 10 L 0 10 L 10 0" stroke="#000" fill="transparent"/>');EditorUi.prototype.crossOriginImages=!mxClient.IS_IE;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.printPdfExport=
diff --git a/src/main/webapp/plugins/cConf-1-4-8.js b/src/main/webapp/plugins/cConf-1-4-8.js
index 161dee641..1eacda247 100644
--- a/src/main/webapp/plugins/cConf-1-4-8.js
+++ b/src/main/webapp/plugins/cConf-1-4-8.js
@@ -156,8 +156,8 @@ Draw.loadPlugin(function(ui)
 		
 		if (td != null)
 		{
-			td.innerHTML = '<a title="faq" href="https://marketplace.atlassian.com/plugins/com.mxgraph.confluence.plugins.diagramly/cloud/reviews" target="_blank">' +
-			'<img border="0" align="absmiddle" style="margin-top:-4px;"/>Enjoying this free plugin? Please help us to 4 stars.</a>';
+			td.innerHTML = '<a title="faq" href="/wiki/plugins/servlet/upm" target="_blank">' +
+			'<img border="0" align="absmiddle" style="margin-top:-4px;"/>Please license draw.io to enable all functionality</a>';
 		}
 		
 		td = document.getElementById('geFooterItem1');	
@@ -174,22 +174,4 @@ Draw.loadPlugin(function(ui)
 			td.parentNode.removeChild(td);
 		}
 	}
-	
-	var lang = urlParams['lang'];
-	var site = urlParams['site'];
-	var user = urlParams['user'];
-	
-	try
-	{
-		var img = new Image();
-		img.src = 'https://log.draw.io/log?severity=CONFIG&msg=conf-cloud-edit' +
-				((lang != null) ? ':lang=' + encodeURIComponent(lang) : '') + 
-				((site != null) ? ':site=' + encodeURIComponent(site) : '') + 
-				((user != null) ? ':user=' + encodeURIComponent(user) : '') +
-				'&v=' + encodeURIComponent(EditorUi.VERSION);
-	}
-	catch (e)
-	{
-		// not important, just don't break editing because of a log
-	}
 });
diff --git a/src/main/webapp/shapes/mxBasic.js b/src/main/webapp/shapes/mxBasic.js
index a83bbce7f..fc29cff8f 100644
--- a/src/main/webapp/shapes/mxBasic.js
+++ b/src/main/webapp/shapes/mxBasic.js
@@ -441,9 +441,10 @@ Graph.handleFactory[mxShapeBasicIsoCube.prototype.cst.ISO_CUBE] = function(state
 {
 	var handles = [Graph.createHandle(state, ['isoAngle'], function(bounds)
 	{
-		var isoAngle = Math.max(0, Math.min(100, parseFloat(mxUtils.getValue(this.state.style, 'isoAngle', this.isoAngle))));
+		var isoAngle = Math.max(0.01, Math.min(94, parseFloat(mxUtils.getValue(this.state.style, 'isoAngle', this.isoAngle)))) * Math.PI / 200 ;
+		var isoH = Math.min(bounds.width * Math.tan(isoAngle), bounds.height * 0.5);
 
-		return new mxPoint(bounds.x, bounds.y + isoAngle);
+		return new mxPoint(bounds.x, bounds.y + isoH);
 	}, function(bounds, pt)
 	{
 		this.state.style['isoAngle'] = Math.round(100 * Math.max(0, Math.min(100, pt.y - bounds.y))) / 100;
@@ -885,7 +886,7 @@ Graph.handleFactory[mxShapeBasic4PointStar2.prototype.cst.FOUR_POINT_STAR_2] = f
 	{
 		var dx = Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
 
-		return new mxPoint(bounds.x + dx * bounds.width / 2, bounds.y + 10);
+		return new mxPoint(bounds.x + dx * bounds.width / 2, bounds.y + dx * bounds.height / 2);
 	}, function(bounds, pt)
 	{
 		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(1, 2 * (pt.x - bounds.x) / bounds.width))) / 100;
@@ -894,3 +895,1366 @@ Graph.handleFactory[mxShapeBasic4PointStar2.prototype.cst.FOUR_POINT_STAR_2] = f
 	return handles;
 };
 
+//**********************************************************************************************************************************************************
+//Diagonal Snip Rectangle
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicDiagSnipRect(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicDiagSnipRect, mxActor);
+
+mxShapeBasicDiagSnipRect.prototype.cst = {DIAG_SNIP_RECT : 'mxgraph.basic.diag_snip_rect'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicDiagSnipRect.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx)))) * 2;
+
+	dx = Math.min(w * 0.5, h * 0.5, dx);
+	
+	c.begin();
+	c.moveTo(dx, 0);
+	c.lineTo(w, 0);
+	c.lineTo(w, h - dx);
+	c.lineTo(w - dx, h);
+	c.lineTo(0, h);
+	c.lineTo(0, dx);
+	c.close();
+	c.fillAndStroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicDiagSnipRect.prototype.cst.DIAG_SNIP_RECT, mxShapeBasicDiagSnipRect);
+
+mxShapeBasicDiagSnipRect.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicDiagSnipRect.prototype.cst.DIAG_SNIP_RECT] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 4, bounds.width / 4, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx, bounds.y + dx);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 4, bounds.width / 4, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+
+//**********************************************************************************************************************************************************
+//Diagonal Round Rectangle
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicDiagRoundRect(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicDiagRoundRect, mxActor);
+
+mxShapeBasicDiagRoundRect.prototype.cst = {DIAG_ROUND_RECT : 'mxgraph.basic.diag_round_rect'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicDiagRoundRect.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx)))) * 2;
+
+	dx = Math.min(w * 0.5, h * 0.5, dx);
+	
+	c.begin();
+	c.moveTo(dx, 0);
+	c.lineTo(w, 0);
+	c.lineTo(w, h - dx);
+	c.arcTo(dx, dx, 0, 0, 1, w - dx, h);
+	c.lineTo(0, h);
+	c.lineTo(0, dx);
+	c.arcTo(dx, dx, 0, 0, 1, dx, 0);
+	c.close();
+	c.fillAndStroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicDiagRoundRect.prototype.cst.DIAG_ROUND_RECT, mxShapeBasicDiagRoundRect);
+
+mxShapeBasicDiagRoundRect.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicDiagRoundRect.prototype.cst.DIAG_ROUND_RECT] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 4, bounds.width / 4, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx, bounds.y + dx);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 4, bounds.width / 4, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Corner Round Rectangle
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicCornerRoundRect(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicCornerRoundRect, mxActor);
+
+mxShapeBasicCornerRoundRect.prototype.cst = {CORNER_ROUND_RECT : 'mxgraph.basic.corner_round_rect'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicCornerRoundRect.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx)))) * 2;
+
+	dx = Math.min(w * 0.5, h * 0.5, dx);
+	
+	c.begin();
+	c.moveTo(dx, 0);
+	c.lineTo(w, 0);
+	c.lineTo(w, h);
+	c.lineTo(0, h);
+	c.lineTo(0, dx);
+	c.arcTo(dx, dx, 0, 0, 1, dx, 0);
+	c.close();
+	c.fillAndStroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicCornerRoundRect.prototype.cst.CORNER_ROUND_RECT, mxShapeBasicCornerRoundRect);
+
+mxShapeBasicCornerRoundRect.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicCornerRoundRect.prototype.cst.CORNER_ROUND_RECT] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 4, bounds.width / 4, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx, bounds.y + dx);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 4, bounds.width / 4, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Plaque
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicPlaque(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicPlaque, mxActor);
+
+mxShapeBasicPlaque.prototype.cst = {PLAQUE : 'mxgraph.basic.plaque'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicPlaque.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx)))) * 2;
+
+	dx = Math.min(w * 0.5, h * 0.5, dx);
+	
+	c.begin();
+	c.moveTo(w - dx, 0);
+	c.arcTo(dx, dx, 0, 0, 0, w, dx);
+	c.lineTo(w, h - dx);
+	c.arcTo(dx, dx, 0, 0, 0, w - dx, h);
+	c.lineTo(dx, h);
+	c.arcTo(dx, dx, 0, 0, 0, 0, h - dx);
+	c.lineTo(0, dx);
+	c.arcTo(dx, dx, 0, 0, 0, dx, 0);
+	c.close();
+	c.fillAndStroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicPlaque.prototype.cst.PLAQUE, mxShapeBasicPlaque);
+
+mxShapeBasicPlaque.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicPlaque.prototype.cst.PLAQUE] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 4, bounds.width / 4, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx * 1.41, bounds.y + dx * 1.41);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 4, bounds.width / 4, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Frame
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicFrame(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicFrame, mxActor);
+
+mxShapeBasicFrame.prototype.cst = {FRAME : 'mxgraph.basic.frame'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicFrame.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+
+	dx = Math.min(w * 0.5, h * 0.5, dx);
+	
+	c.begin();
+	c.moveTo(w, 0);
+	c.lineTo(w, h);
+	c.lineTo(0, h);
+	c.lineTo(0, 0);
+	c.close();
+	c.moveTo(dx, dx);
+	c.lineTo(dx, h - dx);
+	c.lineTo(w - dx, h - dx);
+	c.lineTo(w - dx, dx);
+	c.close();
+	c.fillAndStroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicFrame.prototype.cst.FRAME, mxShapeBasicFrame);
+
+mxShapeBasicFrame.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicFrame.prototype.cst.FRAME] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 2, bounds.width / 2, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx, bounds.y + dx);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 2, bounds.width / 2, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Plaque Frame
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicPlaqueFrame(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicPlaqueFrame, mxActor);
+
+mxShapeBasicPlaqueFrame.prototype.cst = {PLAQUE_FRAME : 'mxgraph.basic.plaque_frame'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicPlaqueFrame.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+
+	dx = Math.min(w * 0.25, h * 0.25, dx);
+	
+	c.begin();
+	c.moveTo(w - dx, 0);
+	c.arcTo(dx, dx, 0, 0, 0, w, dx);
+	c.lineTo(w, h - dx);
+	c.arcTo(dx, dx, 0, 0, 0, w - dx, h);
+	c.lineTo(dx, h);
+	c.arcTo(dx, dx, 0, 0, 0, 0, h - dx);
+	c.lineTo(0, dx);
+	c.arcTo(dx, dx, 0, 0, 0, dx, 0);
+	c.close();
+	
+	c.moveTo(dx * 2, dx);
+	c.arcTo(dx * 2, dx * 2, 0, 0, 1, dx, dx * 2);
+	c.lineTo(dx, h - 2 * dx);
+	c.arcTo(dx * 2, dx * 2, 0, 0, 1, dx * 2, h - dx);
+	c.lineTo(w - 2 * dx, h - dx);
+	c.arcTo(dx * 2, dx * 2, 0, 0, 1, w - dx, h - 2 * dx);
+	c.lineTo(w - dx, dx * 2);
+	c.arcTo(dx * 2, dx * 2, 0, 0, 1, w - 2 * dx, dx);
+	c.close();
+
+	c.fillAndStroke();
+
+};
+
+mxCellRenderer.registerShape(mxShapeBasicPlaqueFrame.prototype.cst.PLAQUE_FRAME, mxShapeBasicPlaqueFrame);
+
+mxShapeBasicPlaqueFrame.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicPlaqueFrame.prototype.cst.PLAQUE_FRAME] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 4, bounds.width / 4, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx, bounds.y + dx);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 4, bounds.width / 4, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Rounded Frame
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicRoundedFrame(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicRoundedFrame, mxActor);
+
+mxShapeBasicRoundedFrame.prototype.cst = {ROUNDED_FRAME : 'mxgraph.basic.rounded_frame'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicRoundedFrame.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+
+	dx = Math.min(w * 0.25, h * 0.25, dx);
+	
+	c.begin();
+	c.moveTo(w - 2 * dx, 0);
+	c.arcTo(dx * 2, dx * 2, 0, 0, 1, w, 2 * dx);
+	c.lineTo(w, h - 2 * dx);
+	c.arcTo(dx * 2, dx * 2, 0, 0, 1, w - 2 * dx, h);
+	c.lineTo(dx * 2, h);
+	c.arcTo(dx * 2, dx * 2, 0, 0, 1, 0, h - 2 * dx);
+	c.lineTo(0, 2 * dx);
+	c.arcTo(dx * 2, dx * 2, 0, 0, 1, 2 * dx, 0);
+	c.close();
+	
+	c.moveTo(dx * 2, dx);
+	c.arcTo(dx, dx, 0, 0, 0, dx, dx * 2);
+	c.lineTo(dx, h - 2 * dx);
+	c.arcTo(dx, dx, 0, 0, 0, dx * 2, h - dx);
+	c.lineTo(w - 2 * dx, h - dx);
+	c.arcTo(dx, dx, 0, 0, 0, w - dx, h - 2 * dx);
+	c.lineTo(w - dx, dx * 2);
+	c.arcTo(dx, dx, 0, 0, 0, w - 2 * dx, dx);
+	c.close();
+
+	c.fillAndStroke();
+
+};
+
+mxCellRenderer.registerShape(mxShapeBasicRoundedFrame.prototype.cst.ROUNDED_FRAME, mxShapeBasicRoundedFrame);
+
+mxShapeBasicRoundedFrame.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicRoundedFrame.prototype.cst.ROUNDED_FRAME] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 4, bounds.width / 4, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx, bounds.y + dx);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 4, bounds.width / 4, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Frame Corner
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicFrameCorner(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicFrameCorner, mxActor);
+
+mxShapeBasicFrameCorner.prototype.cst = {FRAME_CORNER : 'mxgraph.basic.frame_corner'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicFrameCorner.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+
+	dx = Math.min(w * 0.5, h * 0.5, dx);
+	
+	c.begin();
+	c.moveTo(0, 0);
+	c.lineTo(w, 0);
+	c.lineTo(w - dx, dx);
+	c.lineTo(dx, dx);
+	c.lineTo(dx, h - dx);
+	c.lineTo(0, h);
+	c.close();
+	c.fillAndStroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicFrameCorner.prototype.cst.FRAME_CORNER, mxShapeBasicFrameCorner);
+
+mxShapeBasicFrameCorner.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicFrameCorner.prototype.cst.FRAME_CORNER] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 2, bounds.width / 2, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx, bounds.y + dx);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 2, bounds.width / 2, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Diagonal Stripe
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicDiagStripe(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicDiagStripe, mxActor);
+
+mxShapeBasicDiagStripe.prototype.cst = {DIAG_STRIPE : 'mxgraph.basic.diag_stripe'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicDiagStripe.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+
+	dx = Math.min(w, h, dx);
+	
+	c.begin();
+	c.moveTo(0, h);
+	c.lineTo(w, 0);
+	c.lineTo(w, Math.min(dx * 100 / w, h));
+	c.lineTo(Math.min(dx * 100 / h, w), h);
+	c.close();
+	c.fillAndStroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicDiagStripe.prototype.cst.DIAG_STRIPE, mxShapeBasicDiagStripe);
+
+mxShapeBasicDiagStripe.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicDiagStripe.prototype.cst.DIAG_STRIPE] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 2, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx, bounds.y + bounds.height);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 2, bounds.width / 2, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Donut
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicDonut(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicDonut, mxActor);
+
+mxShapeBasicDonut.prototype.cst = {DONUT : 'mxgraph.basic.donut'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicDonut.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+
+	dx = Math.min(w * 0.5, h * 0.5, dx);
+	
+	c.begin();
+	c.moveTo(0, h * 0.5);
+	c.arcTo(w * 0.5, h * 0.5, 0, 0, 1, w * 0.5, 0);
+	c.arcTo(w * 0.5, h * 0.5, 0, 0, 1, w, h * 0.5);
+	c.arcTo(w * 0.5, h * 0.5, 0, 0, 1, w * 0.5, h);
+	c.arcTo(w * 0.5, h * 0.5, 0, 0, 1, 0, h * 0.5);
+	c.close();
+	c.moveTo(w * 0.5, dx);
+	c.arcTo(w * 0.5 - dx, h * 0.5 - dx, 0, 0, 0, dx, h * 0.5);
+	c.arcTo(w * 0.5 - dx, h * 0.5 - dx, 0, 0, 0, w * 0.5, h - dx);
+	c.arcTo(w * 0.5 - dx, h * 0.5 - dx, 0, 0, 0, w - dx, h * 0.5);
+	c.arcTo(w * 0.5 - dx, h * 0.5 - dx, 0, 0, 0, w * 0.5, dx);
+	c.close();
+	c.fillAndStroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicDonut.prototype.cst.DONUT, mxShapeBasicDonut);
+
+mxShapeBasicDonut.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicDonut.prototype.cst.DONUT] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 2, bounds.width / 2, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx, bounds.y + bounds.height / 2);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 2, bounds.width / 2, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Layered Rect
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicLayeredRect(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicLayeredRect, mxActor);
+
+mxShapeBasicLayeredRect.prototype.cst = {LAYERED_RECT : 'mxgraph.basic.layered_rect'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicLayeredRect.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+
+	dx = Math.min(w * 0.5, h * 0.5, dx);
+	
+	c.begin();
+	c.moveTo(dx, dx);
+	c.lineTo(w, dx);
+	c.lineTo(w, h);
+	c.lineTo(dx, h);
+	c.close();
+	c.fillAndStroke();
+	
+	c.begin();
+	c.moveTo(dx * 0.5, dx * 0.5);
+	c.lineTo(w - dx * 0.5, dx * 0.5);
+	c.lineTo(w - dx * 0.5, h - dx * 0.5);
+	c.lineTo(dx * 0.5, h - dx * 0.5);
+	c.close();
+	c.fillAndStroke();
+	
+	c.begin();
+	c.moveTo(0, 0);
+	c.lineTo(w - dx, 0);
+	c.lineTo(w - dx, h - dx);
+	c.lineTo(0, h - dx);
+	c.close();
+	c.fillAndStroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicLayeredRect.prototype.cst.LAYERED_RECT, mxShapeBasicLayeredRect);
+
+mxShapeBasicLayeredRect.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicLayeredRect.prototype.cst.LAYERED_RECT] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 2, bounds.width / 2, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + bounds.width - dx, bounds.y + bounds.height - dx);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 2, bounds.width / 2, - pt.x + bounds.width + bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Button
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicButton(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicButton, mxActor);
+
+mxShapeBasicButton.prototype.cst = {BUTTON : 'mxgraph.basic.button'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicButton.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+
+	dx = Math.min(w * 0.5, h * 0.5, dx);
+	
+	c.begin();
+	c.moveTo(0, 0);
+	c.lineTo(w, 0);
+	c.lineTo(w, h);
+	c.lineTo(0, h);
+	c.close();
+	c.fillAndStroke();
+	
+	c.setShadow(false);
+	c.setLineJoin('round');
+	
+	c.begin();
+	c.moveTo(0, h);
+	c.lineTo(0, 0);
+	c.lineTo(dx, dx);
+	c.lineTo(dx, h - dx);
+	c.close();
+	c.fillAndStroke();
+	
+	c.begin();
+	c.moveTo(0, 0);
+	c.lineTo(w, 0);
+	c.lineTo(w - dx, dx);
+	c.lineTo(dx, dx);
+	c.close();
+	c.fillAndStroke();
+	
+	c.begin();
+	c.moveTo(w, 0);
+	c.lineTo(w, h);
+	c.lineTo(w - dx, h - dx);
+	c.lineTo(w - dx, dx);
+	c.close();
+	c.fillAndStroke();
+	
+	c.begin();
+	c.moveTo(0, h);
+	c.lineTo(dx, h - dx);
+	c.lineTo(w - dx, h - dx);
+	c.lineTo(w, h);
+	c.close();
+	c.fillAndStroke();
+	
+	c.begin();
+	c.moveTo(0, h);
+	c.lineTo(0, 0);
+	c.lineTo(dx, dx);
+	c.lineTo(dx, h - dx);
+	c.close();
+	c.fillAndStroke();
+	
+	
+};
+
+mxCellRenderer.registerShape(mxShapeBasicButton.prototype.cst.BUTTON, mxShapeBasicButton);
+
+mxShapeBasicButton.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicButton.prototype.cst.BUTTON] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 2, bounds.width / 2, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx, bounds.y + dx);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 2, bounds.width / 2, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Shaded Button
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicShadedButton(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.dx = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicShadedButton, mxActor);
+
+mxShapeBasicShadedButton.prototype.cst = {SHADED_BUTTON : 'mxgraph.basic.shaded_button'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicShadedButton.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+	
+	c.setShadow(false);
+
+	var dx = Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
+
+	dx = Math.min(w * 0.5, h * 0.5, dx);
+	
+	c.begin();
+	c.moveTo(0, 0);
+	c.lineTo(w, 0);
+	c.lineTo(w, h);
+	c.lineTo(0, h);
+	c.close();
+	c.fill();
+	
+	c.setFillColor('#ffffff');
+	c.setAlpha(0.25);
+	c.begin();
+	c.moveTo(0, h);
+	c.lineTo(0, 0);
+	c.lineTo(dx, dx);
+	c.lineTo(dx, h - dx);
+	c.close();
+	c.fill();
+	
+	c.setAlpha(0.5);
+	c.begin();
+	c.moveTo(0, 0);
+	c.lineTo(w, 0);
+	c.lineTo(w - dx, dx);
+	c.lineTo(dx, dx);
+	c.close();
+	c.fill();
+	
+	c.setFillColor('#000000');
+	c.setAlpha(0.25);
+	c.begin();
+	c.moveTo(w, 0);
+	c.lineTo(w, h);
+	c.lineTo(w - dx, h - dx);
+	c.lineTo(w - dx, dx);
+	c.close();
+	c.fill();
+	
+	c.setAlpha(0.5);
+	c.begin();
+	c.moveTo(0, h);
+	c.lineTo(dx, h - dx);
+	c.lineTo(w - dx, h - dx);
+	c.lineTo(w, h);
+	c.close();
+	c.fill();
+	
+	
+};
+
+mxCellRenderer.registerShape(mxShapeBasicShadedButton.prototype.cst.SHADED_BUTTON, mxShapeBasicShadedButton);
+
+mxShapeBasicShadedButton.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicShadedButton.prototype.cst.SHADED_BUTTON] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['dx'], function(bounds)
+	{
+		var dx = Math.max(0, Math.min(bounds.width / 2, bounds.width / 2, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
+
+		return new mxPoint(bounds.x + dx, bounds.y + dx);
+	}, function(bounds, pt)
+	{
+		this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 2, bounds.width / 2, pt.x - bounds.x))) / 100;
+	})];
+			
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Pie
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicPie(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.startAngle = 0.25;
+	this.endAngle = 0.75;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicPie, mxActor);
+
+mxShapeBasicPie.prototype.cst = {PIE : 'mxgraph.basic.pie'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicPie.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var startAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'startAngle', this.startAngle))));
+	var endAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'endAngle', this.endAngle))));
+	var rx = w * 0.5;
+	var ry = h * 0.5;
+	
+	var startX = rx + Math.sin(startAngle) * rx;
+	var startY = ry - Math.cos(startAngle) * ry;
+	var endX = rx + Math.sin(endAngle) * rx;
+	var endY = ry - Math.cos(endAngle) * ry;
+	
+	var angDiff = endAngle - startAngle;
+	
+	if (angDiff < 0)
+	{
+		angDiff = angDiff + Math.PI * 2;
+	}
+		
+	var bigArc = 0;
+	
+	if (angDiff > Math.PI)
+	{
+		bigArc = 1;
+	}
+		
+	c.begin();
+	c.moveTo(rx, ry);
+	c.lineTo(startX, startY);
+	c.arcTo(rx, ry, 0, bigArc, 1, endX, endY);
+	c.close();
+	c.fillAndStroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicPie.prototype.cst.PIE, mxShapeBasicPie);
+
+mxShapeBasicPie.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicPie.prototype.cst.PIE] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['startAngle'], function(bounds)
+	{
+		var startAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'startAngle', this.startAngle))));
+
+		return new mxPoint(bounds.x + bounds.width * 0.5 + Math.sin(startAngle) * bounds.width * 0.5, bounds.y + bounds.height * 0.5 - Math.cos(startAngle) * bounds.height * 0.5);
+	}, function(bounds, pt)
+	{
+		var handleX = Math.round(100 * Math.max(-1, Math.min(1, (pt.x - bounds.x - bounds.width * 0.5) / (bounds.width * 0.5)))) / 100;
+		var handleY = -Math.round(100 * Math.max(-1, Math.min(1, (pt.y - bounds.y - bounds.height * 0.5) / (bounds.height * 0.5)))) / 100;
+		
+		var res =  0.5 * Math.atan2(handleX, handleY) / Math.PI;
+		
+		if (res < 0)
+		{
+			res = 1 + res;
+		}
+
+		this.state.style['startAngle'] = res;
+		
+	})];
+
+	var handle2 = Graph.createHandle(state, ['endAngle'], function(bounds)
+	{
+		var endAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'endAngle', this.endAngle))));
+
+		return new mxPoint(bounds.x + bounds.width * 0.5 + Math.sin(endAngle) * bounds.width * 0.5, bounds.y + bounds.height * 0.5 - Math.cos(endAngle) * bounds.height * 0.5);
+	}, function(bounds, pt)
+	{
+		var handleX = Math.round(100 * Math.max(-1, Math.min(1, (pt.x - bounds.x - bounds.width * 0.5) / (bounds.width * 0.5)))) / 100;
+		var handleY = -Math.round(100 * Math.max(-1, Math.min(1, (pt.y - bounds.y - bounds.height * 0.5) / (bounds.height * 0.5)))) / 100;
+		
+		var res =  0.5 * Math.atan2(handleX, handleY) / Math.PI;
+		
+		if (res < 0)
+		{
+			res = 1 + res;
+		}
+		
+		this.state.style['endAngle'] = res;
+	});
+	
+	handles.push(handle2);
+	
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Arc
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicArc(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.startAngle = 0.25;
+	this.endAngle = 0.75;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicArc, mxActor);
+
+mxShapeBasicArc.prototype.cst = {ARC : 'mxgraph.basic.arc'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicArc.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var startAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'startAngle', this.startAngle))));
+	var endAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'endAngle', this.endAngle))));
+	var rx = w * 0.5;
+	var ry = h * 0.5;
+	
+	var startX = rx + Math.sin(startAngle) * rx;
+	var startY = ry - Math.cos(startAngle) * ry;
+	var endX = rx + Math.sin(endAngle) * rx;
+	var endY = ry - Math.cos(endAngle) * ry;
+	
+	var angDiff = endAngle - startAngle;
+	
+	if (angDiff < 0)
+	{
+		angDiff = angDiff + Math.PI * 2;
+	}
+		
+	var bigArc = 0;
+	
+	if (angDiff > Math.PI)
+	{
+		bigArc = 1;
+	}
+		
+	c.begin();
+	c.moveTo(startX, startY);
+	c.arcTo(rx, ry, 0, bigArc, 1, endX, endY);
+	c.stroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicArc.prototype.cst.ARC, mxShapeBasicArc);
+
+mxShapeBasicArc.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicArc.prototype.cst.ARC] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['startAngle'], function(bounds)
+	{
+		var startAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'startAngle', this.startAngle))));
+
+		return new mxPoint(bounds.x + bounds.width * 0.5 + Math.sin(startAngle) * bounds.width * 0.5, bounds.y + bounds.height * 0.5 - Math.cos(startAngle) * bounds.height * 0.5);
+	}, function(bounds, pt)
+	{
+		var handleX = Math.round(100 * Math.max(-1, Math.min(1, (pt.x - bounds.x - bounds.width * 0.5) / (bounds.width * 0.5)))) / 100;
+		var handleY = -Math.round(100 * Math.max(-1, Math.min(1, (pt.y - bounds.y - bounds.height * 0.5) / (bounds.height * 0.5)))) / 100;
+		
+		var res =  0.5 * Math.atan2(handleX, handleY) / Math.PI;
+		
+		if (res < 0)
+		{
+			res = 1 + res;
+		}
+
+		this.state.style['startAngle'] = res;
+		
+	})];
+
+	var handle2 = Graph.createHandle(state, ['endAngle'], function(bounds)
+	{
+		var endAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'endAngle', this.endAngle))));
+
+		return new mxPoint(bounds.x + bounds.width * 0.5 + Math.sin(endAngle) * bounds.width * 0.5, bounds.y + bounds.height * 0.5 - Math.cos(endAngle) * bounds.height * 0.5);
+	}, function(bounds, pt)
+	{
+		var handleX = Math.round(100 * Math.max(-1, Math.min(1, (pt.x - bounds.x - bounds.width * 0.5) / (bounds.width * 0.5)))) / 100;
+		var handleY = -Math.round(100 * Math.max(-1, Math.min(1, (pt.y - bounds.y - bounds.height * 0.5) / (bounds.height * 0.5)))) / 100;
+		
+		var res =  0.5 * Math.atan2(handleX, handleY) / Math.PI;
+		
+		if (res < 0)
+		{
+			res = 1 + res;
+		}
+		
+		this.state.style['endAngle'] = res;
+	});
+	
+	handles.push(handle2);
+	
+	return handles;
+};
+
+//**********************************************************************************************************************************************************
+//Partial Concentric Ellipse
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeBasicPartConcEllipse(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.startAngle = 0.25;
+	this.endAngle = 0.75;
+	this.arcWidth = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeBasicPartConcEllipse, mxActor);
+
+mxShapeBasicPartConcEllipse.prototype.cst = {PART_CONC_ELLIPSE : 'mxgraph.basic.partConcEllipse'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeBasicPartConcEllipse.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var startAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'startAngle', this.startAngle))));
+	var endAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'endAngle', this.endAngle))));
+	var arcWidth = 1 - Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'arcWidth', this.arcWidth))));
+	var rx = w * 0.5;
+	var ry = h * 0.5;
+	var rx2 = rx * arcWidth;
+	var ry2 = ry * arcWidth;
+	
+	var startX = rx + Math.sin(startAngle) * rx;
+	var startY = ry - Math.cos(startAngle) * ry;
+	var innerStartX = rx + Math.sin(startAngle) * rx2;
+	var innerStartY = ry - Math.cos(startAngle) * ry2;
+	var endX = rx + Math.sin(endAngle) * rx;
+	var endY = ry - Math.cos(endAngle) * ry;
+	var innerEndX = rx + Math.sin(endAngle) * rx2;
+	var innerEndY = ry - Math.cos(endAngle) * ry2;
+	
+	var angDiff = endAngle - startAngle;
+	
+	if (angDiff < 0)
+	{
+		angDiff = angDiff + Math.PI * 2;
+	}
+		
+	var bigArc = 0;
+	
+	if (angDiff > Math.PI)
+	{
+		bigArc = 1;
+	}
+		
+	c.begin();
+	c.moveTo(startX, startY);
+	c.arcTo(rx, ry, 0, bigArc, 1, endX, endY);
+	c.lineTo(innerEndX, innerEndY);
+	c.arcTo(rx2, ry2, 0, bigArc, 0, innerStartX, innerStartY);
+	c.close();
+	c.fillAndStroke();
+};
+
+mxCellRenderer.registerShape(mxShapeBasicPartConcEllipse.prototype.cst.PART_CONC_ELLIPSE, mxShapeBasicPartConcEllipse);
+
+mxShapeBasicPartConcEllipse.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeBasicPartConcEllipse.prototype.cst.PART_CONC_ELLIPSE] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['startAngle'], function(bounds)
+	{
+		var startAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'startAngle', this.startAngle))));
+
+		return new mxPoint(bounds.x + bounds.width * 0.5 + Math.sin(startAngle) * bounds.width * 0.5, bounds.y + bounds.height * 0.5 - Math.cos(startAngle) * bounds.height * 0.5);
+	}, function(bounds, pt)
+	{
+		var handleX = Math.round(100 * Math.max(-1, Math.min(1, (pt.x - bounds.x - bounds.width * 0.5) / (bounds.width * 0.5)))) / 100;
+		var handleY = -Math.round(100 * Math.max(-1, Math.min(1, (pt.y - bounds.y - bounds.height * 0.5) / (bounds.height * 0.5)))) / 100;
+		
+		var res =  0.5 * Math.atan2(handleX, handleY) / Math.PI;
+		
+		if (res < 0)
+		{
+			res = 1 + res;
+		}
+
+		this.state.style['startAngle'] = res;
+		
+	})];
+
+	var handle2 = Graph.createHandle(state, ['endAngle'], function(bounds)
+	{
+		var endAngle = 2 * Math.PI * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'endAngle', this.endAngle))));
+
+		return new mxPoint(bounds.x + bounds.width * 0.5 + Math.sin(endAngle) * bounds.width * 0.5, bounds.y + bounds.height * 0.5 - Math.cos(endAngle) * bounds.height * 0.5);
+	}, function(bounds, pt)
+	{
+		var handleX = Math.round(100 * Math.max(-1, Math.min(1, (pt.x - bounds.x - bounds.width * 0.5) / (bounds.width * 0.5)))) / 100;
+		var handleY = -Math.round(100 * Math.max(-1, Math.min(1, (pt.y - bounds.y - bounds.height * 0.5) / (bounds.height * 0.5)))) / 100;
+		
+		var res =  0.5 * Math.atan2(handleX, handleY) / Math.PI;
+		
+		if (res < 0)
+		{
+			res = 1 + res;
+		}
+		
+		this.state.style['endAngle'] = res;
+	});
+	
+	handles.push(handle2);
+	
+	var handle3 = Graph.createHandle(state, ['arcWidth'], function(bounds)
+	{
+		var arcWidth = Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'arcWidth', this.arcWidth))));
+
+		return new mxPoint(bounds.x + bounds.width / 2, bounds.y + arcWidth * bounds.height * 0.5);
+	}, function(bounds, pt)
+	{
+		this.state.style['arcWidth'] = Math.round(100 * Math.max(0, Math.min(bounds.height / 2, bounds.width / 2, (pt.y - bounds.y) / (bounds.height * 0.5)))) / 100;
+	});
+			
+	handles.push(handle3);
+	
+	return handles;
+};
+
diff --git a/src/main/webapp/shapes/mxFlowchart.js b/src/main/webapp/shapes/mxFlowchart.js
new file mode 100644
index 000000000..ab41ee675
--- /dev/null
+++ b/src/main/webapp/shapes/mxFlowchart.js
@@ -0,0 +1,74 @@
+/**
+ * $Id: mxFlowchart.js,v 1.5 2016/04/1 12:32:06 mate Exp $
+ * Copyright (c) 2006-2018, JGraph Ltd
+ */
+//**********************************************************************************************************************************************************
+// Document 2
+//**********************************************************************************************************************************************************
+/**
+* Extends mxShape.
+*/
+function mxShapeFlowchartDocument2(bounds, fill, stroke, strokewidth)
+{
+	mxShape.call(this);
+	this.bounds = bounds;
+	this.fill = fill;
+	this.stroke = stroke;
+	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+	this.size = 0.5;
+};
+
+/**
+* Extends mxShape.
+*/
+mxUtils.extend(mxShapeFlowchartDocument2, mxActor);
+
+mxShapeFlowchartDocument2.prototype.cst = {DOCUMENT2 : 'mxgraph.flowchart.document2'};
+
+/**
+* Function: paintVertexShape
+* 
+* Paints the vertex shape.
+*/
+mxShapeFlowchartDocument2.prototype.paintVertexShape = function(c, x, y, w, h)
+{
+	c.translate(x, y);
+
+	var dy = h * Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.style, 'size', this.size))));
+	var fy = 1.4;
+	var r = 5;
+	
+	c.begin();
+	c.moveTo(w - r, 0);
+	c.arcTo(r, r, 0, 0, 1, w, r);
+	c.lineTo(w, h - dy / 2);
+	c.quadTo(w * 3 / 4, h - dy * fy, w / 2, h - dy / 2);
+	c.quadTo(w / 4, h - dy * (1 - fy), 0, h - dy / 2);
+	c.lineTo(0, dy / 2);
+	c.lineTo(0, r);
+	c.arcTo(r, r, 0, 0, 1, r, 0);
+	c.close();
+	c.fillAndStroke();
+
+};
+
+mxCellRenderer.registerShape(mxShapeFlowchartDocument2.prototype.cst.DOCUMENT2, mxShapeFlowchartDocument2);
+
+mxShapeFlowchartDocument2.prototype.constraints = null;
+
+Graph.handleFactory[mxShapeFlowchartDocument2.prototype.cst.DOCUMENT2] = function(state)
+{
+	var handles = [Graph.createHandle(state, ['size'], function(bounds)
+	{
+		var size = Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'size', this.size))));
+
+		return new mxPoint(bounds.x + 3 * bounds.width / 4, bounds.y + (1 - size) * bounds.height);
+
+	}, function(bounds, pt)
+	{
+		this.state.style['size'] = Math.max(0, Math.min(1, (bounds.y + bounds.height - pt.y) / bounds.height));
+	})];
+			
+	return handles;
+};
+
-- 
GitLab