diff --git a/dist/vis.js b/dist/vis.js
index 4f6b1796..8a6ce8c9 100644
--- a/dist/vis.js
+++ b/dist/vis.js
@@ -4,7 +4,7 @@
*
* A dynamic, browser-based visualization library.
*
- * @version 3.0.1-SNAPSHOT
+ * @version 3.1.0
* @date 2014-07-22
*
* @license
@@ -109,22 +109,22 @@ return /******/ (function(modules) { // webpackBootstrap
components: {
items: {
- Item: __webpack_require__(18),
- ItemBox: __webpack_require__(19),
- ItemPoint: __webpack_require__(20),
- ItemRange: __webpack_require__(21)
+ Item: __webpack_require__(28),
+ ItemBox: __webpack_require__(29),
+ ItemPoint: __webpack_require__(30),
+ ItemRange: __webpack_require__(31)
},
- Component: __webpack_require__(22),
- CurrentTime: __webpack_require__(23),
- CustomTime: __webpack_require__(24),
- DataAxis: __webpack_require__(25),
- GraphGroup: __webpack_require__(26),
- Group: __webpack_require__(27),
- ItemSet: __webpack_require__(28),
- Legend: __webpack_require__(29),
- LineGraph: __webpack_require__(30),
- TimeAxis: __webpack_require__(31)
+ Component: __webpack_require__(18),
+ CurrentTime: __webpack_require__(19),
+ CustomTime: __webpack_require__(20),
+ DataAxis: __webpack_require__(21),
+ GraphGroup: __webpack_require__(22),
+ Group: __webpack_require__(23),
+ ItemSet: __webpack_require__(24),
+ Legend: __webpack_require__(25),
+ LineGraph: __webpack_require__(26),
+ TimeAxis: __webpack_require__(27)
}
};
@@ -2790,7 +2790,7 @@ return /******/ (function(modules) { // webpackBootstrap
/* 5 */
/***/ function(module, exports, __webpack_require__) {
- var Emitter = __webpack_require__(42);
+ var Emitter = __webpack_require__(45);
var DataSet = __webpack_require__(3);
var DataView = __webpack_require__(4);
var util = __webpack_require__(1);
@@ -6034,16 +6034,16 @@ return /******/ (function(modules) { // webpackBootstrap
/* 12 */
/***/ function(module, exports, __webpack_require__) {
- var Emitter = __webpack_require__(42);
+ var Emitter = __webpack_require__(45);
var Hammer = __webpack_require__(41);
var util = __webpack_require__(1);
var DataSet = __webpack_require__(3);
var DataView = __webpack_require__(4);
var Range = __webpack_require__(15);
- var TimeAxis = __webpack_require__(31);
- var CurrentTime = __webpack_require__(23);
- var CustomTime = __webpack_require__(24);
- var ItemSet = __webpack_require__(28);
+ var TimeAxis = __webpack_require__(27);
+ var CurrentTime = __webpack_require__(19);
+ var CustomTime = __webpack_require__(20);
+ var ItemSet = __webpack_require__(24);
/**
* Create a timeline visualization
@@ -6949,16 +6949,16 @@ return /******/ (function(modules) { // webpackBootstrap
/* 13 */
/***/ function(module, exports, __webpack_require__) {
- var Emitter = __webpack_require__(42);
+ var Emitter = __webpack_require__(45);
var Hammer = __webpack_require__(41);
var util = __webpack_require__(1);
var DataSet = __webpack_require__(3);
var DataView = __webpack_require__(4);
var Range = __webpack_require__(15);
- var TimeAxis = __webpack_require__(31);
- var CurrentTime = __webpack_require__(23);
- var CustomTime = __webpack_require__(24);
- var LineGraph = __webpack_require__(30);
+ var TimeAxis = __webpack_require__(27);
+ var CurrentTime = __webpack_require__(19);
+ var CustomTime = __webpack_require__(20);
+ var LineGraph = __webpack_require__(26);
/**
* Create a timeline visualization
@@ -8066,9 +8066,9 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ function(module, exports, __webpack_require__) {
var util = __webpack_require__(1);
- var hammerUtil = __webpack_require__(43);
+ var hammerUtil = __webpack_require__(42);
var moment = __webpack_require__(40);
- var Component = __webpack_require__(22);
+ var Component = __webpack_require__(18);
/**
* @constructor Range
@@ -9195,958 +9195,1000 @@ return /******/ (function(modules) { // webpackBootstrap
/* 18 */
/***/ function(module, exports, __webpack_require__) {
- var Hammer = __webpack_require__(41);
-
/**
- * @constructor Item
- * @param {Object} data Object containing (optional) parameters type,
- * start, end, content, group, className.
- * @param {{toScreen: function, toTime: function}} conversion
- * Conversion functions from time to screen and vice versa
- * @param {Object} options Configuration options
- * // TODO: describe available options
+ * Prototype for visual components
+ * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body]
+ * @param {Object} [options]
*/
- function Item (data, conversion, options) {
- this.id = null;
- this.parent = null;
- this.data = data;
- this.dom = null;
- this.conversion = conversion || {};
- this.options = options || {};
-
- this.selected = false;
- this.displayed = false;
- this.dirty = true;
-
- this.top = null;
- this.left = null;
- this.width = null;
- this.height = null;
+ function Component (body, options) {
+ this.options = null;
+ this.props = null;
}
/**
- * Select current item
+ * Set options for the component. The new options will be merged into the
+ * current options.
+ * @param {Object} options
*/
- Item.prototype.select = function() {
- this.selected = true;
- if (this.displayed) this.redraw();
+ Component.prototype.setOptions = function(options) {
+ if (options) {
+ util.extend(this.options, options);
+ }
};
/**
- * Unselect current item
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
*/
- Item.prototype.unselect = function() {
- this.selected = false;
- if (this.displayed) this.redraw();
+ Component.prototype.redraw = function() {
+ // should be implemented by the component
+ return false;
};
/**
- * Set a parent for the item
- * @param {ItemSet | Group} parent
+ * Destroy the component. Cleanup DOM and event listeners
*/
- Item.prototype.setParent = function(parent) {
- if (this.displayed) {
- this.hide();
- this.parent = parent;
- if (this.parent) {
- this.show();
- }
- }
- else {
- this.parent = parent;
- }
+ Component.prototype.destroy = function() {
+ // should be implemented by the component
};
/**
- * Check whether this item is visible inside given range
- * @returns {{start: Number, end: Number}} range with a timestamp for start and end
- * @returns {boolean} True if visible
+ * Test whether the component is resized since the last time _isResized() was
+ * called.
+ * @return {Boolean} Returns true if the component is resized
+ * @protected
*/
- Item.prototype.isVisible = function(range) {
- // Should be implemented by Item implementations
- return false;
+ Component.prototype._isResized = function() {
+ var resized = (this.props._previousWidth !== this.props.width ||
+ this.props._previousHeight !== this.props.height);
+
+ this.props._previousWidth = this.props.width;
+ this.props._previousHeight = this.props.height;
+
+ return resized;
};
+ module.exports = Component;
+
+
+/***/ },
+/* 19 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var util = __webpack_require__(1);
+ var Component = __webpack_require__(18);
+
/**
- * Show the Item in the DOM (when not already visible)
- * @return {Boolean} changed
+ * A current time bar
+ * @param {{range: Range, dom: Object, domProps: Object}} body
+ * @param {Object} [options] Available parameters:
+ * {Boolean} [showCurrentTime]
+ * @constructor CurrentTime
+ * @extends Component
*/
- Item.prototype.show = function() {
- return false;
- };
+ function CurrentTime (body, options) {
+ this.body = body;
+
+ // default options
+ this.defaultOptions = {
+ showCurrentTime: true
+ };
+ this.options = util.extend({}, this.defaultOptions);
+
+ this._create();
+
+ this.setOptions(options);
+ }
+
+ CurrentTime.prototype = new Component();
/**
- * Hide the Item from the DOM (when visible)
- * @return {Boolean} changed
+ * Create the HTML DOM for the current time bar
+ * @private
*/
- Item.prototype.hide = function() {
- return false;
+ CurrentTime.prototype._create = function() {
+ var bar = document.createElement('div');
+ bar.className = 'currenttime';
+ bar.style.position = 'absolute';
+ bar.style.top = '0px';
+ bar.style.height = '100%';
+
+ this.bar = bar;
};
/**
- * Repaint the item
+ * Destroy the CurrentTime bar
*/
- Item.prototype.redraw = function() {
- // should be implemented by the item
+ CurrentTime.prototype.destroy = function () {
+ this.options.showCurrentTime = false;
+ this.redraw(); // will remove the bar from the DOM and stop refreshing
+
+ this.body = null;
};
/**
- * Reposition the Item horizontally
+ * Set options for the component. Options will be merged in current options.
+ * @param {Object} options Available parameters:
+ * {boolean} [showCurrentTime]
*/
- Item.prototype.repositionX = function() {
- // should be implemented by the item
+ CurrentTime.prototype.setOptions = function(options) {
+ if (options) {
+ // copy all options that we know
+ util.selectiveExtend(['showCurrentTime'], this.options, options);
+ }
};
/**
- * Reposition the Item vertically
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
*/
- Item.prototype.repositionY = function() {
- // should be implemented by the item
+ CurrentTime.prototype.redraw = function() {
+ if (this.options.showCurrentTime) {
+ var parent = this.body.dom.backgroundVertical;
+ if (this.bar.parentNode != parent) {
+ // attach to the dom
+ if (this.bar.parentNode) {
+ this.bar.parentNode.removeChild(this.bar);
+ }
+ parent.appendChild(this.bar);
+
+ this.start();
+ }
+
+ var now = new Date();
+ var x = this.body.util.toScreen(now);
+
+ this.bar.style.left = x + 'px';
+ this.bar.title = 'Current time: ' + now;
+ }
+ else {
+ // remove the line from the DOM
+ if (this.bar.parentNode) {
+ this.bar.parentNode.removeChild(this.bar);
+ }
+ this.stop();
+ }
+
+ return false;
};
/**
- * Repaint a delete button on the top right of the item when the item is selected
- * @param {HTMLElement} anchor
- * @protected
+ * Start auto refreshing the current time bar
*/
- Item.prototype._repaintDeleteButton = function (anchor) {
- if (this.selected && this.options.editable.remove && !this.dom.deleteButton) {
- // create and show button
- var me = this;
+ CurrentTime.prototype.start = function() {
+ var me = this;
- var deleteButton = document.createElement('div');
- deleteButton.className = 'delete';
- deleteButton.title = 'Delete this item';
+ function update () {
+ me.stop();
- Hammer(deleteButton, {
- preventDefault: true
- }).on('tap', function (event) {
- me.parent.removeFromDataSet(me);
- event.stopPropagation();
- });
+ // determine interval to refresh
+ var scale = me.body.range.conversion(me.body.domProps.center.width).scale;
+ var interval = 1 / scale / 10;
+ if (interval < 30) interval = 30;
+ if (interval > 1000) interval = 1000;
- anchor.appendChild(deleteButton);
- this.dom.deleteButton = deleteButton;
+ me.redraw();
+
+ // start a timer to adjust for the new time
+ me.currentTimeTimer = setTimeout(update, interval);
}
- else if (!this.selected && this.dom.deleteButton) {
- // remove button
- if (this.dom.deleteButton.parentNode) {
- this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton);
- }
- this.dom.deleteButton = null;
+
+ update();
+ };
+
+ /**
+ * Stop auto refreshing the current time bar
+ */
+ CurrentTime.prototype.stop = function() {
+ if (this.currentTimeTimer !== undefined) {
+ clearTimeout(this.currentTimeTimer);
+ delete this.currentTimeTimer;
}
};
- module.exports = Item;
+ module.exports = CurrentTime;
/***/ },
-/* 19 */
+/* 20 */
/***/ function(module, exports, __webpack_require__) {
- var Item = __webpack_require__(18);
+ var Hammer = __webpack_require__(41);
+ var util = __webpack_require__(1);
+ var Component = __webpack_require__(18);
/**
- * @constructor ItemBox
- * @extends Item
- * @param {Object} data Object containing parameters start
- * content, className.
- * @param {{toScreen: function, toTime: function}} conversion
- * Conversion functions from time to screen and vice versa
- * @param {Object} [options] Configuration options
- * // TODO: describe available options
+ * A custom time bar
+ * @param {{range: Range, dom: Object}} body
+ * @param {Object} [options] Available parameters:
+ * {Boolean} [showCustomTime]
+ * @constructor CustomTime
+ * @extends Component
*/
- function ItemBox (data, conversion, options) {
- this.props = {
- dot: {
- width: 0,
- height: 0
- },
- line: {
- width: 0,
- height: 0
- }
+
+ function CustomTime (body, options) {
+ this.body = body;
+
+ // default options
+ this.defaultOptions = {
+ showCustomTime: false
};
+ this.options = util.extend({}, this.defaultOptions);
- // validate data
- if (data) {
- if (data.start == undefined) {
- throw new Error('Property "start" missing in item ' + data);
- }
- }
+ this.customTime = new Date();
+ this.eventParams = {}; // stores state parameters while dragging the bar
- Item.call(this, data, conversion, options);
+ // create the DOM
+ this._create();
+
+ this.setOptions(options);
}
- ItemBox.prototype = new Item (null, null, null);
+ CustomTime.prototype = new Component();
/**
- * Check whether this item is visible inside given range
- * @returns {{start: Number, end: Number}} range with a timestamp for start and end
- * @returns {boolean} True if visible
+ * Set options for the component. Options will be merged in current options.
+ * @param {Object} options Available parameters:
+ * {boolean} [showCustomTime]
*/
- ItemBox.prototype.isVisible = function(range) {
- // determine visibility
- // TODO: account for the real width of the item. Right now we just add 1/4 to the window
- var interval = (range.end - range.start) / 4;
- return (this.data.start > range.start - interval) && (this.data.start < range.end + interval);
+ CustomTime.prototype.setOptions = function(options) {
+ if (options) {
+ // copy all options that we know
+ util.selectiveExtend(['showCustomTime'], this.options, options);
+ }
};
/**
- * Repaint the item
+ * Create the DOM for the custom time
+ * @private
*/
- ItemBox.prototype.redraw = function() {
- var dom = this.dom;
- if (!dom) {
- // create DOM
- this.dom = {};
- dom = this.dom;
-
- // create main box
- dom.box = document.createElement('DIV');
+ CustomTime.prototype._create = function() {
+ var bar = document.createElement('div');
+ bar.className = 'customtime';
+ bar.style.position = 'absolute';
+ bar.style.top = '0px';
+ bar.style.height = '100%';
+ this.bar = bar;
- // contents box (inside the background box). used for making margins
- dom.content = document.createElement('DIV');
- dom.content.className = 'content';
- dom.box.appendChild(dom.content);
+ var drag = document.createElement('div');
+ drag.style.position = 'relative';
+ drag.style.top = '0px';
+ drag.style.left = '-10px';
+ drag.style.height = '100%';
+ drag.style.width = '20px';
+ bar.appendChild(drag);
- // line to axis
- dom.line = document.createElement('DIV');
- dom.line.className = 'line';
+ // attach event listeners
+ this.hammer = Hammer(bar, {
+ prevent_default: true
+ });
+ this.hammer.on('dragstart', this._onDragStart.bind(this));
+ this.hammer.on('drag', this._onDrag.bind(this));
+ this.hammer.on('dragend', this._onDragEnd.bind(this));
+ };
- // dot on axis
- dom.dot = document.createElement('DIV');
- dom.dot.className = 'dot';
+ /**
+ * Destroy the CustomTime bar
+ */
+ CustomTime.prototype.destroy = function () {
+ this.options.showCustomTime = false;
+ this.redraw(); // will remove the bar from the DOM
- // attach this item as attribute
- dom.box['timeline-item'] = this;
- }
+ this.hammer.enable(false);
+ this.hammer = null;
- // append DOM to parent DOM
- if (!this.parent) {
- throw new Error('Cannot redraw item: no parent attached');
- }
- if (!dom.box.parentNode) {
- var foreground = this.parent.dom.foreground;
- if (!foreground) throw new Error('Cannot redraw time axis: parent has no foreground container element');
- foreground.appendChild(dom.box);
- }
- if (!dom.line.parentNode) {
- var background = this.parent.dom.background;
- if (!background) throw new Error('Cannot redraw time axis: parent has no background container element');
- background.appendChild(dom.line);
- }
- if (!dom.dot.parentNode) {
- var axis = this.parent.dom.axis;
- if (!background) throw new Error('Cannot redraw time axis: parent has no axis container element');
- axis.appendChild(dom.dot);
- }
- this.displayed = true;
+ this.body = null;
+ };
- // update contents
- if (this.data.content != this.content) {
- this.content = this.data.content;
- if (this.content instanceof Element) {
- dom.content.innerHTML = '';
- dom.content.appendChild(this.content);
- }
- else if (this.data.content != undefined) {
- dom.content.innerHTML = this.content;
- }
- else {
- throw new Error('Property "content" missing in item ' + this.data.id);
+ /**
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
+ */
+ CustomTime.prototype.redraw = function () {
+ if (this.options.showCustomTime) {
+ var parent = this.body.dom.backgroundVertical;
+ if (this.bar.parentNode != parent) {
+ // attach to the dom
+ if (this.bar.parentNode) {
+ this.bar.parentNode.removeChild(this.bar);
+ }
+ parent.appendChild(this.bar);
}
- this.dirty = true;
- }
+ var x = this.body.util.toScreen(this.customTime);
- // update title
- if (this.data.title != this.title) {
- dom.box.title = this.data.title;
- this.title = this.data.title;
+ this.bar.style.left = x + 'px';
+ this.bar.title = 'Time: ' + this.customTime;
}
-
- // update class
- var className = (this.data.className? ' ' + this.data.className : '') +
- (this.selected ? ' selected' : '');
- if (this.className != className) {
- this.className = className;
- dom.box.className = 'item box' + className;
- dom.line.className = 'item line' + className;
- dom.dot.className = 'item dot' + className;
-
- this.dirty = true;
+ else {
+ // remove the line from the DOM
+ if (this.bar.parentNode) {
+ this.bar.parentNode.removeChild(this.bar);
+ }
}
- // recalculate size
- if (this.dirty) {
- this.props.dot.height = dom.dot.offsetHeight;
- this.props.dot.width = dom.dot.offsetWidth;
- this.props.line.width = dom.line.offsetWidth;
- this.width = dom.box.offsetWidth;
- this.height = dom.box.offsetHeight;
+ return false;
+ };
- this.dirty = false;
- }
+ /**
+ * Set custom time.
+ * @param {Date} time
+ */
+ CustomTime.prototype.setCustomTime = function(time) {
+ this.customTime = new Date(time.valueOf());
+ this.redraw();
+ };
- this._repaintDeleteButton(dom.box);
+ /**
+ * Retrieve the current custom time.
+ * @return {Date} customTime
+ */
+ CustomTime.prototype.getCustomTime = function() {
+ return new Date(this.customTime.valueOf());
};
/**
- * Show the item in the DOM (when not already displayed). The items DOM will
- * be created when needed.
+ * Start moving horizontally
+ * @param {Event} event
+ * @private
*/
- ItemBox.prototype.show = function() {
- if (!this.displayed) {
- this.redraw();
- }
+ CustomTime.prototype._onDragStart = function(event) {
+ this.eventParams.dragging = true;
+ this.eventParams.customTime = this.customTime;
+
+ event.stopPropagation();
+ event.preventDefault();
};
/**
- * Hide the item from the DOM (when visible)
+ * Perform moving operating.
+ * @param {Event} event
+ * @private
*/
- ItemBox.prototype.hide = function() {
- if (this.displayed) {
- var dom = this.dom;
+ CustomTime.prototype._onDrag = function (event) {
+ if (!this.eventParams.dragging) return;
- if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box);
- if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line);
- if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot);
+ var deltaX = event.gesture.deltaX,
+ x = this.body.util.toScreen(this.eventParams.customTime) + deltaX,
+ time = this.body.util.toTime(x);
- this.top = null;
- this.left = null;
+ this.setCustomTime(time);
- this.displayed = false;
- }
+ // fire a timechange event
+ this.body.emitter.emit('timechange', {
+ time: new Date(this.customTime.valueOf())
+ });
+
+ event.stopPropagation();
+ event.preventDefault();
};
/**
- * Reposition the item horizontally
- * @Override
+ * Stop moving operating.
+ * @param {event} event
+ * @private
*/
- ItemBox.prototype.repositionX = function() {
- var start = this.conversion.toScreen(this.data.start),
- align = this.options.align,
- left,
- box = this.dom.box,
- line = this.dom.line,
- dot = this.dom.dot;
-
- // calculate left position of the box
- if (align == 'right') {
- this.left = start - this.width;
- }
- else if (align == 'left') {
- this.left = start;
- }
- else {
- // default or 'center'
- this.left = start - this.width / 2;
- }
-
- // reposition box
- box.style.left = this.left + 'px';
-
- // reposition line
- line.style.left = (start - this.props.line.width / 2) + 'px';
-
- // reposition dot
- dot.style.left = (start - this.props.dot.width / 2) + 'px';
- };
-
- /**
- * Reposition the item vertically
- * @Override
- */
- ItemBox.prototype.repositionY = function() {
- var orientation = this.options.orientation,
- box = this.dom.box,
- line = this.dom.line,
- dot = this.dom.dot;
-
- if (orientation == 'top') {
- box.style.top = (this.top || 0) + 'px';
-
- line.style.top = '0';
- line.style.height = (this.parent.top + this.top + 1) + 'px';
- line.style.bottom = '';
- }
- else { // orientation 'bottom'
- var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty
- var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top;
+ CustomTime.prototype._onDragEnd = function (event) {
+ if (!this.eventParams.dragging) return;
- box.style.top = (this.parent.height - this.top - this.height || 0) + 'px';
- line.style.top = (itemSetHeight - lineHeight) + 'px';
- line.style.bottom = '0';
- }
+ // fire a timechanged event
+ this.body.emitter.emit('timechanged', {
+ time: new Date(this.customTime.valueOf())
+ });
- dot.style.top = (-this.props.dot.height / 2) + 'px';
+ event.stopPropagation();
+ event.preventDefault();
};
- module.exports = ItemBox;
+ module.exports = CustomTime;
/***/ },
-/* 20 */
+/* 21 */
/***/ function(module, exports, __webpack_require__) {
- var Item = __webpack_require__(18);
+ var util = __webpack_require__(1);
+ var DOMutil = __webpack_require__(2);
+ var Component = __webpack_require__(18);
+ var DataStep = __webpack_require__(14);
/**
- * @constructor ItemPoint
- * @extends Item
- * @param {Object} data Object containing parameters start
- * content, className.
- * @param {{toScreen: function, toTime: function}} conversion
- * Conversion functions from time to screen and vice versa
- * @param {Object} [options] Configuration options
- * // TODO: describe available options
+ * A horizontal time axis
+ * @param {Object} [options] See DataAxis.setOptions for the available
+ * options.
+ * @constructor DataAxis
+ * @extends Component
+ * @param body
*/
- function ItemPoint (data, conversion, options) {
- this.props = {
- dot: {
- top: 0,
- width: 0,
- height: 0
- },
- content: {
- height: 0,
- marginLeft: 0
- }
+ function DataAxis (body, options, svg) {
+ this.id = util.randomUUID();
+ this.body = body;
+
+ this.defaultOptions = {
+ orientation: 'left', // supported: 'left', 'right'
+ showMinorLabels: true,
+ showMajorLabels: true,
+ icons: true,
+ majorLinesOffset: 7,
+ minorLinesOffset: 4,
+ labelOffsetX: 10,
+ labelOffsetY: 2,
+ iconWidth: 20,
+ width: '40px',
+ visible: true
};
- // validate data
- if (data) {
- if (data.start == undefined) {
- throw new Error('Property "start" missing in item ' + data);
- }
- }
+ this.linegraphSVG = svg;
+ this.props = {};
+ this.DOMelements = { // dynamic elements
+ lines: {},
+ labels: {}
+ };
- Item.call(this, data, conversion, options);
- }
+ this.dom = {};
- ItemPoint.prototype = new Item (null, null, null);
+ this.range = {start:0, end:0};
- /**
- * Check whether this item is visible inside given range
- * @returns {{start: Number, end: Number}} range with a timestamp for start and end
- * @returns {boolean} True if visible
- */
- ItemPoint.prototype.isVisible = function(range) {
- // determine visibility
- // TODO: account for the real width of the item. Right now we just add 1/4 to the window
- var interval = (range.end - range.start) / 4;
- return (this.data.start > range.start - interval) && (this.data.start < range.end + interval);
- };
+ this.options = util.extend({}, this.defaultOptions);
+ this.conversionFactor = 1;
- /**
- * Repaint the item
- */
- ItemPoint.prototype.redraw = function() {
- var dom = this.dom;
- if (!dom) {
- // create DOM
- this.dom = {};
- dom = this.dom;
+ this.setOptions(options);
+ this.width = Number(('' + this.options.width).replace("px",""));
+ this.minWidth = this.width;
+ this.height = this.linegraphSVG.offsetHeight;
- // background box
- dom.point = document.createElement('div');
- // className is updated in redraw()
+ this.stepPixels = 25;
+ this.stepPixelsForced = 25;
+ this.lineOffset = 0;
+ this.master = true;
+ this.svgElements = {};
- // contents box, right from the dot
- dom.content = document.createElement('div');
- dom.content.className = 'content';
- dom.point.appendChild(dom.content);
- // dot at start
- dom.dot = document.createElement('div');
- dom.point.appendChild(dom.dot);
+ this.groups = {};
+ this.amountOfGroups = 0;
- // attach this item as attribute
- dom.point['timeline-item'] = this;
- }
+ // create the HTML DOM
+ this._create();
+ }
- // append DOM to parent DOM
- if (!this.parent) {
- throw new Error('Cannot redraw item: no parent attached');
- }
- if (!dom.point.parentNode) {
- var foreground = this.parent.dom.foreground;
- if (!foreground) {
- throw new Error('Cannot redraw time axis: parent has no foreground container element');
- }
- foreground.appendChild(dom.point);
- }
- this.displayed = true;
+ DataAxis.prototype = new Component();
- // update contents
- if (this.data.content != this.content) {
- this.content = this.data.content;
- if (this.content instanceof Element) {
- dom.content.innerHTML = '';
- dom.content.appendChild(this.content);
- }
- else if (this.data.content != undefined) {
- dom.content.innerHTML = this.content;
- }
- else {
- throw new Error('Property "content" missing in item ' + this.data.id);
- }
- this.dirty = true;
- }
- // update title
- if (this.data.title != this.title) {
- dom.point.title = this.data.title;
- this.title = this.data.title;
+ DataAxis.prototype.addGroup = function(label, graphOptions) {
+ if (!this.groups.hasOwnProperty(label)) {
+ this.groups[label] = graphOptions;
}
+ this.amountOfGroups += 1;
+ };
- // update class
- var className = (this.data.className? ' ' + this.data.className : '') +
- (this.selected ? ' selected' : '');
- if (this.className != className) {
- this.className = className;
- dom.point.className = 'item point' + className;
- dom.dot.className = 'item dot' + className;
+ DataAxis.prototype.updateGroup = function(label, graphOptions) {
+ this.groups[label] = graphOptions;
+ };
- this.dirty = true;
+ DataAxis.prototype.removeGroup = function(label) {
+ if (this.groups.hasOwnProperty(label)) {
+ delete this.groups[label];
+ this.amountOfGroups -= 1;
}
+ };
- // recalculate size
- if (this.dirty) {
- this.width = dom.point.offsetWidth;
- this.height = dom.point.offsetHeight;
- this.props.dot.width = dom.dot.offsetWidth;
- this.props.dot.height = dom.dot.offsetHeight;
- this.props.content.height = dom.content.offsetHeight;
- // resize contents
- dom.content.style.marginLeft = 2 * this.props.dot.width + 'px';
- //dom.content.style.marginRight = ... + 'px'; // TODO: margin right
+ DataAxis.prototype.setOptions = function (options) {
+ if (options) {
+ var redraw = false;
+ if (this.options.orientation != options.orientation && options.orientation !== undefined) {
+ redraw = true;
+ }
+ var fields = [
+ 'orientation',
+ 'showMinorLabels',
+ 'showMajorLabels',
+ 'icons',
+ 'majorLinesOffset',
+ 'minorLinesOffset',
+ 'labelOffsetX',
+ 'labelOffsetY',
+ 'iconWidth',
+ 'width',
+ 'visible'];
+ util.selectiveExtend(fields, this.options, options);
- dom.dot.style.top = ((this.height - this.props.dot.height) / 2) + 'px';
- dom.dot.style.left = (this.props.dot.width / 2) + 'px';
+ this.minWidth = Number(('' + this.options.width).replace("px",""));
- this.dirty = false;
+ if (redraw == true && this.dom.frame) {
+ this.hide();
+ this.show();
+ }
}
-
- this._repaintDeleteButton(dom.point);
};
+
/**
- * Show the item in the DOM (when not already visible). The items DOM will
- * be created when needed.
+ * Create the HTML DOM for the DataAxis
*/
- ItemPoint.prototype.show = function() {
- if (!this.displayed) {
- this.redraw();
+ DataAxis.prototype._create = function() {
+ this.dom.frame = document.createElement('div');
+ this.dom.frame.style.width = this.options.width;
+ this.dom.frame.style.height = this.height;
+
+ this.dom.lineContainer = document.createElement('div');
+ this.dom.lineContainer.style.width = '100%';
+ this.dom.lineContainer.style.height = this.height;
+
+ // create svg element for graph drawing.
+ this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg");
+ this.svg.style.position = "absolute";
+ this.svg.style.top = '0px';
+ this.svg.style.height = '100%';
+ this.svg.style.width = '100%';
+ this.svg.style.display = "block";
+ this.dom.frame.appendChild(this.svg);
+ };
+
+ DataAxis.prototype._redrawGroupIcons = function () {
+ DOMutil.prepareElements(this.svgElements);
+
+ var x;
+ var iconWidth = this.options.iconWidth;
+ var iconHeight = 15;
+ var iconOffset = 4;
+ var y = iconOffset + 0.5 * iconHeight;
+
+ if (this.options.orientation == 'left') {
+ x = iconOffset;
+ }
+ else {
+ x = this.width - iconWidth - iconOffset;
+ }
+
+ for (var groupId in this.groups) {
+ if (this.groups.hasOwnProperty(groupId)) {
+ this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight);
+ y += iconHeight + iconOffset;
+ }
}
+
+ DOMutil.cleanupElements(this.svgElements);
};
/**
- * Hide the item from the DOM (when visible)
+ * Create the HTML DOM for the DataAxis
*/
- ItemPoint.prototype.hide = function() {
- if (this.displayed) {
- if (this.dom.point.parentNode) {
- this.dom.point.parentNode.removeChild(this.dom.point);
+ DataAxis.prototype.show = function() {
+ if (!this.dom.frame.parentNode) {
+ if (this.options.orientation == 'left') {
+ this.body.dom.left.appendChild(this.dom.frame);
}
+ else {
+ this.body.dom.right.appendChild(this.dom.frame);
+ }
+ }
- this.top = null;
- this.left = null;
-
- this.displayed = false;
+ if (!this.dom.lineContainer.parentNode) {
+ this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer);
}
};
/**
- * Reposition the item horizontally
- * @Override
+ * Create the HTML DOM for the DataAxis
*/
- ItemPoint.prototype.repositionX = function() {
- var start = this.conversion.toScreen(this.data.start);
-
- this.left = start - this.props.dot.width;
+ DataAxis.prototype.hide = function() {
+ if (this.dom.frame.parentNode) {
+ this.dom.frame.parentNode.removeChild(this.dom.frame);
+ }
- // reposition point
- this.dom.point.style.left = this.left + 'px';
+ if (this.dom.lineContainer.parentNode) {
+ this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer);
+ }
};
/**
- * Reposition the item vertically
- * @Override
+ * Set a range (start and end)
+ * @param end
+ * @param start
+ * @param end
*/
- ItemPoint.prototype.repositionY = function() {
- var orientation = this.options.orientation,
- point = this.dom.point;
+ DataAxis.prototype.setRange = function (start, end) {
+ this.range.start = start;
+ this.range.end = end;
+ };
- if (orientation == 'top') {
- point.style.top = this.top + 'px';
+ /**
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
+ */
+ DataAxis.prototype.redraw = function () {
+ var changeCalled = false;
+ if (this.amountOfGroups == 0) {
+ this.hide();
}
else {
- point.style.top = (this.parent.height - this.top - this.height) + 'px';
- }
- };
+ this.show();
+ this.height = Number(this.linegraphSVG.style.height.replace("px",""));
+ // svg offsetheight did not work in firefox and explorer...
- module.exports = ItemPoint;
+ this.dom.lineContainer.style.height = this.height + 'px';
+ this.width = this.options.visible == true ? Number(('' + this.options.width).replace("px","")) : 0;
+ var props = this.props;
+ var frame = this.dom.frame;
-/***/ },
-/* 21 */
-/***/ function(module, exports, __webpack_require__) {
+ // update classname
+ frame.className = 'dataaxis';
- var Hammer = __webpack_require__(41);
- var Item = __webpack_require__(18);
+ // calculate character width and height
+ this._calculateCharSize();
- /**
- * @constructor ItemRange
- * @extends Item
- * @param {Object} data Object containing parameters start, end
- * content, className.
- * @param {{toScreen: function, toTime: function}} conversion
- * Conversion functions from time to screen and vice versa
- * @param {Object} [options] Configuration options
- * // TODO: describe options
- */
- function ItemRange (data, conversion, options) {
- this.props = {
- content: {
- width: 0
- }
- };
- this.overflow = false; // if contents can overflow (css styling), this flag is set to true
+ var orientation = this.options.orientation;
+ var showMinorLabels = this.options.showMinorLabels;
+ var showMajorLabels = this.options.showMajorLabels;
- // validate data
- if (data) {
- if (data.start == undefined) {
- throw new Error('Property "start" missing in item ' + data.id);
+ // determine the width and height of the elemens for the axis
+ props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;
+ props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;
+
+ props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset;
+ props.minorLineHeight = 1;
+ props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset;
+ props.majorLineHeight = 1;
+
+ // take frame offline while updating (is almost twice as fast)
+ if (orientation == 'left') {
+ frame.style.top = '0';
+ frame.style.left = '0';
+ frame.style.bottom = '';
+ frame.style.width = this.width + 'px';
+ frame.style.height = this.height + "px";
}
- if (data.end == undefined) {
- throw new Error('Property "end" missing in item ' + data.id);
+ else { // right
+ frame.style.top = '';
+ frame.style.bottom = '0';
+ frame.style.left = '0';
+ frame.style.width = this.width + 'px';
+ frame.style.height = this.height + "px";
+ }
+ changeCalled = this._redrawLabels();
+ if (this.options.icons == true) {
+ this._redrawGroupIcons();
}
}
-
- Item.call(this, data, conversion, options);
- }
-
- ItemRange.prototype = new Item (null, null, null);
-
- ItemRange.prototype.baseClassName = 'item range';
-
- /**
- * Check whether this item is visible inside given range
- * @returns {{start: Number, end: Number}} range with a timestamp for start and end
- * @returns {boolean} True if visible
- */
- ItemRange.prototype.isVisible = function(range) {
- // determine visibility
- return (this.data.start < range.end) && (this.data.end > range.start);
+ return changeCalled;
};
/**
- * Repaint the item
+ * Repaint major and minor text labels and vertical grid lines
+ * @private
*/
- ItemRange.prototype.redraw = function() {
- var dom = this.dom;
- if (!dom) {
- // create DOM
- this.dom = {};
- dom = this.dom;
+ DataAxis.prototype._redrawLabels = function () {
+ DOMutil.prepareElements(this.DOMelements);
- // background box
- dom.box = document.createElement('div');
- // className is updated in redraw()
+ var orientation = this.options['orientation'];
- // contents box
- dom.content = document.createElement('div');
- dom.content.className = 'content';
- dom.box.appendChild(dom.content);
+ // calculate range and step (step such that we have space for 7 characters per label)
+ var minimumStep = this.master ? this.props.majorCharHeight || 10 : this.stepPixelsForced;
+ var step = new DataStep(this.range.start, this.range.end, minimumStep, this.dom.frame.offsetHeight);
+ this.step = step;
+ step.first();
- // attach this item as attribute
- dom.box['timeline-item'] = this;
- }
+ // get the distance in pixels for a step
+ var stepPixels = this.dom.frame.offsetHeight / ((step.marginRange / step.step) + 1);
+ this.stepPixels = stepPixels;
- // append DOM to parent DOM
- if (!this.parent) {
- throw new Error('Cannot redraw item: no parent attached');
- }
- if (!dom.box.parentNode) {
- var foreground = this.parent.dom.foreground;
- if (!foreground) {
- throw new Error('Cannot redraw time axis: parent has no foreground container element');
+ var amountOfSteps = this.height / stepPixels;
+ var stepDifference = 0;
+
+ if (this.master == false) {
+ stepPixels = this.stepPixelsForced;
+ stepDifference = Math.round((this.height / stepPixels) - amountOfSteps);
+ for (var i = 0; i < 0.5 * stepDifference; i++) {
+ step.previous();
}
- foreground.appendChild(dom.box);
+ amountOfSteps = this.height / stepPixels;
}
- this.displayed = true;
- // update contents
- if (this.data.content != this.content) {
- this.content = this.data.content;
- if (this.content instanceof Element) {
- dom.content.innerHTML = '';
- dom.content.appendChild(this.content);
- }
- else if (this.data.content != undefined) {
- dom.content.innerHTML = this.content;
- }
- else {
- throw new Error('Property "content" missing in item ' + this.data.id);
- }
- this.dirty = true;
- }
+ this.valueAtZero = step.marginEnd;
+ var marginStartPos = 0;
- // update title
- if (this.data.title != this.title) {
- dom.box.title = this.data.title;
- this.title = this.data.title;
- }
+ // do not draw the first label
+ var max = 1;
+ step.next();
- // update class
- var className = (this.data.className ? (' ' + this.data.className) : '') +
- (this.selected ? ' selected' : '');
- if (this.className != className) {
- this.className = className;
- dom.box.className = this.baseClassName + className;
+ this.maxLabelSize = 0;
+ var y = 0;
+ while (max < Math.round(amountOfSteps)) {
- this.dirty = true;
- }
+ y = Math.round(max * stepPixels);
+ marginStartPos = max * stepPixels;
+ var isMajor = step.isMajor();
- // recalculate size
- if (this.dirty) {
- // determine from css whether this box has overflow
- this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden';
+ if (this.options['showMinorLabels'] && isMajor == false || this.master == false && this.options['showMinorLabels'] == true) {
+ this._redrawLabel(y - 2, step.getCurrent(), orientation, 'yAxis minor', this.props.minorCharHeight);
+ }
- this.props.content.width = this.dom.content.offsetWidth;
- this.height = this.dom.box.offsetHeight;
+ if (isMajor && this.options['showMajorLabels'] && this.master == true ||
+ this.options['showMinorLabels'] == false && this.master == false && isMajor == true) {
- this.dirty = false;
+ if (y >= 0) {
+ this._redrawLabel(y - 2, step.getCurrent(), orientation, 'yAxis major', this.props.majorCharHeight);
+ }
+ this._redrawLine(y, orientation, 'grid horizontal major', this.options.majorLinesOffset, this.props.majorLineWidth);
+ }
+ else {
+ this._redrawLine(y, orientation, 'grid horizontal minor', this.options.minorLinesOffset, this.props.minorLineWidth);
+ }
+
+ step.next();
+ max++;
}
- this._repaintDeleteButton(dom.box);
- this._repaintDragLeft();
- this._repaintDragRight();
- };
+ this.conversionFactor = marginStartPos/((amountOfSteps-1) * step.step);
- /**
- * Show the item in the DOM (when not already visible). The items DOM will
- * be created when needed.
- */
- ItemRange.prototype.show = function() {
- if (!this.displayed) {
+ var offset = this.options.icons == true ? this.options.iconWidth + this.options.labelOffsetX + 15 : this.options.labelOffsetX + 15;
+ // this will resize the yAxis to accomodate the labels.
+ if (this.maxLabelSize > (this.width - offset) && this.options.visible == true) {
+ this.width = this.maxLabelSize + offset;
+ this.options.width = this.width + "px";
+ DOMutil.cleanupElements(this.DOMelements);
+ this.redraw();
+ return true;
+ }
+ // this will resize the yAxis if it is too big for the labels.
+ else if (this.maxLabelSize < (this.width - offset) && this.options.visible == true && this.width > this.minWidth) {
+ this.width = Math.max(this.minWidth,this.maxLabelSize + offset);
+ this.options.width = this.width + "px";
+ DOMutil.cleanupElements(this.DOMelements);
this.redraw();
+ return true;
+ }
+ else {
+ DOMutil.cleanupElements(this.DOMelements);
+ return false;
}
};
/**
- * Hide the item from the DOM (when visible)
- * @return {Boolean} changed
+ * Create a label for the axis at position x
+ * @private
+ * @param y
+ * @param text
+ * @param orientation
+ * @param className
+ * @param characterHeight
*/
- ItemRange.prototype.hide = function() {
- if (this.displayed) {
- var box = this.dom.box;
+ DataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) {
+ // reuse redundant label
+ var label = DOMutil.getDOMElement('div',this.DOMelements, this.dom.frame); //this.dom.redundant.labels.shift();
+ label.className = className;
+ label.innerHTML = text;
- if (box.parentNode) {
- box.parentNode.removeChild(box);
- }
+ if (orientation == 'left') {
+ label.style.left = '-' + this.options.labelOffsetX + 'px';
+ label.style.textAlign = "right";
+ }
+ else {
+ label.style.right = '-' + this.options.labelOffsetX + 'px';
+ label.style.textAlign = "left";
+ }
- this.top = null;
- this.left = null;
+ label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px';
- this.displayed = false;
+ text += '';
+
+ var largestWidth = Math.max(this.props.majorCharWidth,this.props.minorCharWidth);
+ if (this.maxLabelSize < text.length * largestWidth) {
+ this.maxLabelSize = text.length * largestWidth;
}
};
/**
- * Reposition the item horizontally
- * @Override
+ * Create a minor line for the axis at position y
+ * @param y
+ * @param orientation
+ * @param className
+ * @param offset
+ * @param width
*/
- // TODO: delete the old function
- ItemRange.prototype.repositionX = function() {
- var props = this.props,
- parentWidth = this.parent.width,
- start = this.conversion.toScreen(this.data.start),
- end = this.conversion.toScreen(this.data.end),
- padding = this.options.padding,
- contentLeft;
-
- // limit the width of the this, as browsers cannot draw very wide divs
- if (start < -parentWidth) {
- start = -parentWidth;
- }
- if (end > 2 * parentWidth) {
- end = 2 * parentWidth;
- }
- var boxWidth = Math.max(end - start, 1);
-
- if (this.overflow) {
- // when range exceeds left of the window, position the contents at the left of the visible area
- contentLeft = Math.max(-start, 0);
+ DataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) {
+ if (this.master == true) {
+ var line = DOMutil.getDOMElement('div',this.DOMelements, this.dom.lineContainer);//this.dom.redundant.lines.shift();
+ line.className = className;
+ line.innerHTML = '';
- this.left = start;
- this.width = boxWidth + this.props.content.width;
- // Note: The calculation of width is an optimistic calculation, giving
- // a width which will not change when moving the Timeline
- // So no restacking needed, which is nicer for the eye;
- }
- else { // no overflow
- // when range exceeds left of the window, position the contents at the left of the visible area
- if (start < 0) {
- contentLeft = Math.min(-start,
- (end - start - props.content.width - 2 * padding));
- // TODO: remove the need for options.padding. it's terrible.
+ if (orientation == 'left') {
+ line.style.left = (this.width - offset) + 'px';
}
else {
- contentLeft = 0;
+ line.style.right = (this.width - offset) + 'px';
}
- this.left = start;
- this.width = boxWidth;
+ line.style.width = width + 'px';
+ line.style.top = y + 'px';
}
-
- this.dom.box.style.left = this.left + 'px';
- this.dom.box.style.width = boxWidth + 'px';
- this.dom.content.style.left = contentLeft + 'px';
};
- /**
- * Reposition the item vertically
- * @Override
- */
- ItemRange.prototype.repositionY = function() {
- var orientation = this.options.orientation,
- box = this.dom.box;
- if (orientation == 'top') {
- box.style.top = this.top + 'px';
- }
- else {
- box.style.top = (this.parent.height - this.top - this.height) + 'px';
- }
+ DataAxis.prototype.convertValue = function (value) {
+ var invertedValue = this.valueAtZero - value;
+ var convertedValue = invertedValue * this.conversionFactor;
+ return convertedValue; // the -2 is to compensate for the borders
};
+
/**
- * Repaint a drag area on the left side of the range when the range is selected
- * @protected
+ * Determine the size of text on the axis (both major and minor axis).
+ * The size is calculated only once and then cached in this.props.
+ * @private
*/
- ItemRange.prototype._repaintDragLeft = function () {
- if (this.selected && this.options.editable.updateTime && !this.dom.dragLeft) {
- // create and show drag area
- var dragLeft = document.createElement('div');
- dragLeft.className = 'drag-left';
- dragLeft.dragLeftItem = this;
+ DataAxis.prototype._calculateCharSize = function () {
+ // determine the char width and height on the minor axis
+ if (!('minorCharHeight' in this.props)) {
- // TODO: this should be redundant?
- Hammer(dragLeft, {
- preventDefault: true
- }).on('drag', function () {
- //console.log('drag left')
- });
+ var textMinor = document.createTextNode('0');
+ var measureCharMinor = document.createElement('DIV');
+ measureCharMinor.className = 'yAxis minor measure';
+ measureCharMinor.appendChild(textMinor);
+ this.dom.frame.appendChild(measureCharMinor);
- this.dom.box.appendChild(dragLeft);
- this.dom.dragLeft = dragLeft;
+ this.props.minorCharHeight = measureCharMinor.clientHeight;
+ this.props.minorCharWidth = measureCharMinor.clientWidth;
+
+ this.dom.frame.removeChild(measureCharMinor);
}
- else if (!this.selected && this.dom.dragLeft) {
- // delete drag area
- if (this.dom.dragLeft.parentNode) {
- this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft);
- }
- this.dom.dragLeft = null;
+
+ if (!('majorCharHeight' in this.props)) {
+ var textMajor = document.createTextNode('0');
+ var measureCharMajor = document.createElement('DIV');
+ measureCharMajor.className = 'yAxis major measure';
+ measureCharMajor.appendChild(textMajor);
+ this.dom.frame.appendChild(measureCharMajor);
+
+ this.props.majorCharHeight = measureCharMajor.clientHeight;
+ this.props.majorCharWidth = measureCharMajor.clientWidth;
+
+ this.dom.frame.removeChild(measureCharMajor);
}
};
/**
- * Repaint a drag area on the right side of the range when the range is selected
- * @protected
+ * Snap a date to a rounded value.
+ * The snap intervals are dependent on the current scale and step.
+ * @param {Date} date the date to be snapped.
+ * @return {Date} snappedDate
*/
- ItemRange.prototype._repaintDragRight = function () {
- if (this.selected && this.options.editable.updateTime && !this.dom.dragRight) {
- // create and show drag area
- var dragRight = document.createElement('div');
- dragRight.className = 'drag-right';
- dragRight.dragRightItem = this;
-
- // TODO: this should be redundant?
- Hammer(dragRight, {
- preventDefault: true
- }).on('drag', function () {
- //console.log('drag right')
- });
-
- this.dom.box.appendChild(dragRight);
- this.dom.dragRight = dragRight;
- }
- else if (!this.selected && this.dom.dragRight) {
- // delete drag area
- if (this.dom.dragRight.parentNode) {
- this.dom.dragRight.parentNode.removeChild(this.dom.dragRight);
- }
- this.dom.dragRight = null;
- }
+ DataAxis.prototype.snap = function(date) {
+ return this.step.snap(date);
};
- module.exports = ItemRange;
+ module.exports = DataAxis;
/***/ },
/* 22 */
/***/ function(module, exports, __webpack_require__) {
+ var util = __webpack_require__(1);
+ var DOMutil = __webpack_require__(2);
+
/**
- * Prototype for visual components
- * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body]
- * @param {Object} [options]
+ * @constructor Group
+ * @param {Number | String} groupId
+ * @param {Object} data
+ * @param {ItemSet} itemSet
*/
- function Component (body, options) {
- this.options = null;
- this.props = null;
+ function GraphGroup (group, groupId, options, groupsUsingDefaultStyles) {
+ this.id = groupId;
+ var fields = ['sampling','style','sort','yAxisOrientation','barChart','drawPoints','shaded','catmullRom']
+ this.options = util.selectiveBridgeObject(fields,options);
+ this.usingDefaultStyle = group.className === undefined;
+ this.groupsUsingDefaultStyles = groupsUsingDefaultStyles;
+ this.zeroPosition = 0;
+ this.update(group);
+ if (this.usingDefaultStyle == true) {
+ this.groupsUsingDefaultStyles[0] += 1;
+ }
+ this.itemsData = [];
}
- /**
- * Set options for the component. The new options will be merged into the
- * current options.
- * @param {Object} options
- */
- Component.prototype.setOptions = function(options) {
- if (options) {
- util.extend(this.options, options);
+ GraphGroup.prototype.setItems = function(items) {
+ if (items != null) {
+ this.itemsData = items;
+ if (this.options.sort == true) {
+ this.itemsData.sort(function (a,b) {return a.x - b.x;})
+ }
+ }
+ else {
+ this.itemsData = [];
}
};
- /**
- * Repaint the component
- * @return {boolean} Returns true if the component is resized
- */
- Component.prototype.redraw = function() {
- // should be implemented by the component
- return false;
+ GraphGroup.prototype.setZeroPosition = function(pos) {
+ this.zeroPosition = pos;
};
- /**
- * Destroy the component. Cleanup DOM and event listeners
- */
- Component.prototype.destroy = function() {
- // should be implemented by the component
+ GraphGroup.prototype.setOptions = function(options) {
+ if (options !== undefined) {
+ var fields = ['sampling','style','sort','yAxisOrientation','barChart'];
+ util.selectiveDeepExtend(fields, this.options, options);
+
+ util.mergeOptions(this.options, options,'catmullRom');
+ util.mergeOptions(this.options, options,'drawPoints');
+ util.mergeOptions(this.options, options,'shaded');
+
+ if (options.catmullRom) {
+ if (typeof options.catmullRom == 'object') {
+ if (options.catmullRom.parametrization) {
+ if (options.catmullRom.parametrization == 'uniform') {
+ this.options.catmullRom.alpha = 0;
+ }
+ else if (options.catmullRom.parametrization == 'chordal') {
+ this.options.catmullRom.alpha = 1.0;
+ }
+ else {
+ this.options.catmullRom.parametrization = 'centripetal';
+ this.options.catmullRom.alpha = 0.5;
+ }
+ }
+ }
+ }
+ }
};
- /**
- * Test whether the component is resized since the last time _isResized() was
- * called.
- * @return {Boolean} Returns true if the component is resized
- * @protected
- */
- Component.prototype._isResized = function() {
- var resized = (this.props._previousWidth !== this.props.width ||
- this.props._previousHeight !== this.props.height);
+ GraphGroup.prototype.update = function(group) {
+ this.group = group;
+ this.content = group.content || 'graph';
+ this.className = group.className || this.className || "graphGroup" + this.groupsUsingDefaultStyles[0] % 10;
+ this.setOptions(group.options);
+ };
- this.props._previousWidth = this.props.width;
- this.props._previousHeight = this.props.height;
+ GraphGroup.prototype.drawIcon = function(x, y, JSONcontainer, SVGcontainer, iconWidth, iconHeight) {
+ var fillHeight = iconHeight * 0.5;
+ var path, fillPath;
- return resized;
+ var outline = DOMutil.getSVGElement("rect", JSONcontainer, SVGcontainer);
+ outline.setAttributeNS(null, "x", x);
+ outline.setAttributeNS(null, "y", y - fillHeight);
+ outline.setAttributeNS(null, "width", iconWidth);
+ outline.setAttributeNS(null, "height", 2*fillHeight);
+ outline.setAttributeNS(null, "class", "outline");
+
+ if (this.options.style == 'line') {
+ path = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer);
+ path.setAttributeNS(null, "class", this.className);
+ path.setAttributeNS(null, "d", "M" + x + ","+y+" L" + (x + iconWidth) + ","+y+"");
+ if (this.options.shaded.enabled == true) {
+ fillPath = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer);
+ if (this.options.shaded.orientation == 'top') {
+ fillPath.setAttributeNS(null, "d", "M"+x+", " + (y - fillHeight) +
+ "L"+x+","+y+" L"+ (x + iconWidth) + ","+y+" L"+ (x + iconWidth) + "," + (y - fillHeight));
+ }
+ else {
+ fillPath.setAttributeNS(null, "d", "M"+x+","+y+" " +
+ "L"+x+"," + (y + fillHeight) + " " +
+ "L"+ (x + iconWidth) + "," + (y + fillHeight) +
+ "L"+ (x + iconWidth) + ","+y);
+ }
+ fillPath.setAttributeNS(null, "class", this.className + " iconFill");
+ }
+
+ if (this.options.drawPoints.enabled == true) {
+ DOMutil.drawPoint(x + 0.5 * iconWidth,y, this, JSONcontainer, SVGcontainer);
+ }
+ }
+ else {
+ var barWidth = Math.round(0.3 * iconWidth);
+ var bar1Height = Math.round(0.4 * iconHeight);
+ var bar2Height = Math.round(0.75 * iconHeight);
+
+ var offset = Math.round((iconWidth - (2 * barWidth))/3);
+
+ DOMutil.drawBar(x + 0.5*barWidth + offset , y + fillHeight - bar1Height - 1, barWidth, bar1Height, this.className + ' bar', JSONcontainer, SVGcontainer);
+ DOMutil.drawBar(x + 1.5*barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, this.className + ' bar', JSONcontainer, SVGcontainer);
+ }
};
- module.exports = Component;
+ module.exports = GraphGroup;
/***/ },
@@ -10154,1253 +10196,1434 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ function(module, exports, __webpack_require__) {
var util = __webpack_require__(1);
- var Component = __webpack_require__(22);
+ var stack = __webpack_require__(16);
+ var ItemRange = __webpack_require__(31);
/**
- * A current time bar
- * @param {{range: Range, dom: Object, domProps: Object}} body
- * @param {Object} [options] Available parameters:
- * {Boolean} [showCurrentTime]
- * @constructor CurrentTime
- * @extends Component
+ * @constructor Group
+ * @param {Number | String} groupId
+ * @param {Object} data
+ * @param {ItemSet} itemSet
*/
- function CurrentTime (body, options) {
- this.body = body;
+ function Group (groupId, data, itemSet) {
+ this.groupId = groupId;
- // default options
- this.defaultOptions = {
- showCurrentTime: true
+ this.itemSet = itemSet;
+
+ this.dom = {};
+ this.props = {
+ label: {
+ width: 0,
+ height: 0
+ }
+ };
+ this.className = null;
+
+ this.items = {}; // items filtered by groupId of this group
+ this.visibleItems = []; // items currently visible in window
+ this.orderedItems = { // items sorted by start and by end
+ byStart: [],
+ byEnd: []
};
- this.options = util.extend({}, this.defaultOptions);
this._create();
- this.setOptions(options);
+ this.setData(data);
}
- CurrentTime.prototype = new Component();
-
/**
- * Create the HTML DOM for the current time bar
+ * Create DOM elements for the group
* @private
*/
- CurrentTime.prototype._create = function() {
- var bar = document.createElement('div');
- bar.className = 'currenttime';
- bar.style.position = 'absolute';
- bar.style.top = '0px';
- bar.style.height = '100%';
+ Group.prototype._create = function() {
+ var label = document.createElement('div');
+ label.className = 'vlabel';
+ this.dom.label = label;
- this.bar = bar;
- };
+ var inner = document.createElement('div');
+ inner.className = 'inner';
+ label.appendChild(inner);
+ this.dom.inner = inner;
- /**
- * Destroy the CurrentTime bar
- */
- CurrentTime.prototype.destroy = function () {
- this.options.showCurrentTime = false;
- this.redraw(); // will remove the bar from the DOM and stop refreshing
+ var foreground = document.createElement('div');
+ foreground.className = 'group';
+ foreground['timeline-group'] = this;
+ this.dom.foreground = foreground;
- this.body = null;
+ this.dom.background = document.createElement('div');
+ this.dom.background.className = 'group';
+
+ this.dom.axis = document.createElement('div');
+ this.dom.axis.className = 'group';
+
+ // create a hidden marker to detect when the Timelines container is attached
+ // to the DOM, or the style of a parent of the Timeline is changed from
+ // display:none is changed to visible.
+ this.dom.marker = document.createElement('div');
+ this.dom.marker.style.visibility = 'hidden';
+ this.dom.marker.innerHTML = '?';
+ this.dom.background.appendChild(this.dom.marker);
};
/**
- * Set options for the component. Options will be merged in current options.
- * @param {Object} options Available parameters:
- * {boolean} [showCurrentTime]
+ * Set the group data for this group
+ * @param {Object} data Group data, can contain properties content and className
*/
- CurrentTime.prototype.setOptions = function(options) {
- if (options) {
- // copy all options that we know
- util.selectiveExtend(['showCurrentTime'], this.options, options);
+ Group.prototype.setData = function(data) {
+ // update contents
+ var content = data && data.content;
+ if (content instanceof Element) {
+ this.dom.inner.appendChild(content);
+ }
+ else if (content != undefined) {
+ this.dom.inner.innerHTML = content;
+ }
+ else {
+ this.dom.inner.innerHTML = this.groupId;
}
- };
-
- /**
- * Repaint the component
- * @return {boolean} Returns true if the component is resized
- */
- CurrentTime.prototype.redraw = function() {
- if (this.options.showCurrentTime) {
- var parent = this.body.dom.backgroundVertical;
- if (this.bar.parentNode != parent) {
- // attach to the dom
- if (this.bar.parentNode) {
- this.bar.parentNode.removeChild(this.bar);
- }
- parent.appendChild(this.bar);
-
- this.start();
- }
- var now = new Date();
- var x = this.body.util.toScreen(now);
+ // update title
+ this.dom.label.title = data && data.title || '';
- this.bar.style.left = x + 'px';
- this.bar.title = 'Current time: ' + now;
+ if (!this.dom.inner.firstChild) {
+ util.addClassName(this.dom.inner, 'hidden');
}
else {
- // remove the line from the DOM
- if (this.bar.parentNode) {
- this.bar.parentNode.removeChild(this.bar);
+ util.removeClassName(this.dom.inner, 'hidden');
+ }
+
+ // update className
+ var className = data && data.className || null;
+ if (className != this.className) {
+ if (this.className) {
+ util.removeClassName(this.dom.label, className);
+ util.removeClassName(this.dom.foreground, className);
+ util.removeClassName(this.dom.background, className);
+ util.removeClassName(this.dom.axis, className);
}
- this.stop();
+ util.addClassName(this.dom.label, className);
+ util.addClassName(this.dom.foreground, className);
+ util.addClassName(this.dom.background, className);
+ util.addClassName(this.dom.axis, className);
}
+ };
- return false;
+ /**
+ * Get the width of the group label
+ * @return {number} width
+ */
+ Group.prototype.getLabelWidth = function() {
+ return this.props.label.width;
};
+
/**
- * Start auto refreshing the current time bar
+ * Repaint this group
+ * @param {{start: number, end: number}} range
+ * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin
+ * @param {boolean} [restack=false] Force restacking of all items
+ * @return {boolean} Returns true if the group is resized
*/
- CurrentTime.prototype.start = function() {
- var me = this;
+ Group.prototype.redraw = function(range, margin, restack) {
+ var resized = false;
- function update () {
- me.stop();
+ this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range);
- // determine interval to refresh
- var scale = me.body.range.conversion(me.body.domProps.center.width).scale;
- var interval = 1 / scale / 10;
- if (interval < 30) interval = 30;
- if (interval > 1000) interval = 1000;
+ // force recalculation of the height of the items when the marker height changed
+ // (due to the Timeline being attached to the DOM or changed from display:none to visible)
+ var markerHeight = this.dom.marker.clientHeight;
+ if (markerHeight != this.lastMarkerHeight) {
+ this.lastMarkerHeight = markerHeight;
- me.redraw();
+ util.forEach(this.items, function (item) {
+ item.dirty = true;
+ if (item.displayed) item.redraw();
+ });
- // start a timer to adjust for the new time
- me.currentTimeTimer = setTimeout(update, interval);
+ restack = true;
}
- update();
- };
+ // reposition visible items vertically
+ if (this.itemSet.options.stack) { // TODO: ugly way to access options...
+ stack.stack(this.visibleItems, margin, restack);
+ }
+ else { // no stacking
+ stack.nostack(this.visibleItems, margin);
+ }
- /**
- * Stop auto refreshing the current time bar
- */
- CurrentTime.prototype.stop = function() {
- if (this.currentTimeTimer !== undefined) {
- clearTimeout(this.currentTimeTimer);
- delete this.currentTimeTimer;
+ // recalculate the height of the group
+ var height;
+ var visibleItems = this.visibleItems;
+ if (visibleItems.length) {
+ var min = visibleItems[0].top;
+ var max = visibleItems[0].top + visibleItems[0].height;
+ util.forEach(visibleItems, function (item) {
+ min = Math.min(min, item.top);
+ max = Math.max(max, (item.top + item.height));
+ });
+ if (min > margin.axis) {
+ // there is an empty gap between the lowest item and the axis
+ var offset = min - margin.axis;
+ max -= offset;
+ util.forEach(visibleItems, function (item) {
+ item.top -= offset;
+ });
+ }
+ height = max + margin.item.vertical / 2;
}
- };
+ else {
+ height = margin.axis + margin.item.vertical;
+ }
+ height = Math.max(height, this.props.label.height);
- module.exports = CurrentTime;
+ // calculate actual size and position
+ var foreground = this.dom.foreground;
+ this.top = foreground.offsetTop;
+ this.left = foreground.offsetLeft;
+ this.width = foreground.offsetWidth;
+ resized = util.updateProperty(this, 'height', height) || resized;
+ // recalculate size of label
+ resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized;
+ resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized;
-/***/ },
-/* 24 */
-/***/ function(module, exports, __webpack_require__) {
+ // apply new height
+ this.dom.background.style.height = height + 'px';
+ this.dom.foreground.style.height = height + 'px';
+ this.dom.label.style.height = height + 'px';
- var Hammer = __webpack_require__(41);
- var util = __webpack_require__(1);
- var Component = __webpack_require__(22);
+ // update vertical position of items after they are re-stacked and the height of the group is calculated
+ for (var i = 0, ii = this.visibleItems.length; i < ii; i++) {
+ var item = this.visibleItems[i];
+ item.repositionY();
+ }
+
+ return resized;
+ };
/**
- * A custom time bar
- * @param {{range: Range, dom: Object}} body
- * @param {Object} [options] Available parameters:
- * {Boolean} [showCustomTime]
- * @constructor CustomTime
- * @extends Component
+ * Show this group: attach to the DOM
*/
+ Group.prototype.show = function() {
+ if (!this.dom.label.parentNode) {
+ this.itemSet.dom.labelSet.appendChild(this.dom.label);
+ }
- function CustomTime (body, options) {
- this.body = body;
+ if (!this.dom.foreground.parentNode) {
+ this.itemSet.dom.foreground.appendChild(this.dom.foreground);
+ }
- // default options
- this.defaultOptions = {
- showCustomTime: false
- };
- this.options = util.extend({}, this.defaultOptions);
+ if (!this.dom.background.parentNode) {
+ this.itemSet.dom.background.appendChild(this.dom.background);
+ }
- this.customTime = new Date();
- this.eventParams = {}; // stores state parameters while dragging the bar
+ if (!this.dom.axis.parentNode) {
+ this.itemSet.dom.axis.appendChild(this.dom.axis);
+ }
+ };
- // create the DOM
- this._create();
+ /**
+ * Hide this group: remove from the DOM
+ */
+ Group.prototype.hide = function() {
+ var label = this.dom.label;
+ if (label.parentNode) {
+ label.parentNode.removeChild(label);
+ }
- this.setOptions(options);
- }
+ var foreground = this.dom.foreground;
+ if (foreground.parentNode) {
+ foreground.parentNode.removeChild(foreground);
+ }
- CustomTime.prototype = new Component();
+ var background = this.dom.background;
+ if (background.parentNode) {
+ background.parentNode.removeChild(background);
+ }
+
+ var axis = this.dom.axis;
+ if (axis.parentNode) {
+ axis.parentNode.removeChild(axis);
+ }
+ };
/**
- * Set options for the component. Options will be merged in current options.
- * @param {Object} options Available parameters:
- * {boolean} [showCustomTime]
+ * Add an item to the group
+ * @param {Item} item
*/
- CustomTime.prototype.setOptions = function(options) {
- if (options) {
- // copy all options that we know
- util.selectiveExtend(['showCustomTime'], this.options, options);
+ Group.prototype.add = function(item) {
+ this.items[item.id] = item;
+ item.setParent(this);
+
+ if (item instanceof ItemRange && this.visibleItems.indexOf(item) == -1) {
+ var range = this.itemSet.body.range; // TODO: not nice accessing the range like this
+ this._checkIfVisible(item, this.visibleItems, range);
}
};
/**
- * Create the DOM for the custom time
- * @private
+ * Remove an item from the group
+ * @param {Item} item
*/
- CustomTime.prototype._create = function() {
- var bar = document.createElement('div');
- bar.className = 'customtime';
- bar.style.position = 'absolute';
- bar.style.top = '0px';
- bar.style.height = '100%';
- this.bar = bar;
+ Group.prototype.remove = function(item) {
+ delete this.items[item.id];
+ item.setParent(this.itemSet);
- var drag = document.createElement('div');
- drag.style.position = 'relative';
- drag.style.top = '0px';
- drag.style.left = '-10px';
- drag.style.height = '100%';
- drag.style.width = '20px';
- bar.appendChild(drag);
+ // remove from visible items
+ var index = this.visibleItems.indexOf(item);
+ if (index != -1) this.visibleItems.splice(index, 1);
- // attach event listeners
- this.hammer = Hammer(bar, {
- prevent_default: true
- });
- this.hammer.on('dragstart', this._onDragStart.bind(this));
- this.hammer.on('drag', this._onDrag.bind(this));
- this.hammer.on('dragend', this._onDragEnd.bind(this));
+ // TODO: also remove from ordered items?
};
/**
- * Destroy the CustomTime bar
+ * Remove an item from the corresponding DataSet
+ * @param {Item} item
*/
- CustomTime.prototype.destroy = function () {
- this.options.showCustomTime = false;
- this.redraw(); // will remove the bar from the DOM
-
- this.hammer.enable(false);
- this.hammer = null;
-
- this.body = null;
+ Group.prototype.removeFromDataSet = function(item) {
+ this.itemSet.removeItem(item.id);
};
/**
- * Repaint the component
- * @return {boolean} Returns true if the component is resized
+ * Reorder the items
*/
- CustomTime.prototype.redraw = function () {
- if (this.options.showCustomTime) {
- var parent = this.body.dom.backgroundVertical;
- if (this.bar.parentNode != parent) {
- // attach to the dom
- if (this.bar.parentNode) {
- this.bar.parentNode.removeChild(this.bar);
- }
- parent.appendChild(this.bar);
- }
-
- var x = this.body.util.toScreen(this.customTime);
-
- this.bar.style.left = x + 'px';
- this.bar.title = 'Time: ' + this.customTime;
- }
- else {
- // remove the line from the DOM
- if (this.bar.parentNode) {
- this.bar.parentNode.removeChild(this.bar);
- }
- }
+ Group.prototype.order = function() {
+ var array = util.toArray(this.items);
+ this.orderedItems.byStart = array;
+ this.orderedItems.byEnd = this._constructByEndArray(array);
- return false;
+ stack.orderByStart(this.orderedItems.byStart);
+ stack.orderByEnd(this.orderedItems.byEnd);
};
/**
- * Set custom time.
- * @param {Date} time
+ * Create an array containing all items being a range (having an end date)
+ * @param {Item[]} array
+ * @returns {ItemRange[]}
+ * @private
*/
- CustomTime.prototype.setCustomTime = function(time) {
- this.customTime = new Date(time.valueOf());
- this.redraw();
- };
+ Group.prototype._constructByEndArray = function(array) {
+ var endArray = [];
- /**
- * Retrieve the current custom time.
- * @return {Date} customTime
- */
- CustomTime.prototype.getCustomTime = function() {
- return new Date(this.customTime.valueOf());
+ for (var i = 0; i < array.length; i++) {
+ if (array[i] instanceof ItemRange) {
+ endArray.push(array[i]);
+ }
+ }
+ return endArray;
};
/**
- * Start moving horizontally
- * @param {Event} event
+ * Update the visible items
+ * @param {{byStart: Item[], byEnd: Item[]}} orderedItems All items ordered by start date and by end date
+ * @param {Item[]} visibleItems The previously visible items.
+ * @param {{start: number, end: number}} range Visible range
+ * @return {Item[]} visibleItems The new visible items.
* @private
*/
- CustomTime.prototype._onDragStart = function(event) {
- this.eventParams.dragging = true;
- this.eventParams.customTime = this.customTime;
+ Group.prototype._updateVisibleItems = function(orderedItems, visibleItems, range) {
+ var initialPosByStart,
+ newVisibleItems = [],
+ i;
- event.stopPropagation();
- event.preventDefault();
- };
+ // first check if the items that were in view previously are still in view.
+ // this handles the case for the ItemRange that is both before and after the current one.
+ if (visibleItems.length > 0) {
+ for (i = 0; i < visibleItems.length; i++) {
+ this._checkIfVisible(visibleItems[i], newVisibleItems, range);
+ }
+ }
- /**
- * Perform moving operating.
- * @param {Event} event
- * @private
- */
- CustomTime.prototype._onDrag = function (event) {
- if (!this.eventParams.dragging) return;
+ // If there were no visible items previously, use binarySearch to find a visible ItemPoint or ItemRange (based on startTime)
+ if (newVisibleItems.length == 0) {
+ initialPosByStart = util.binarySearch(orderedItems.byStart, range, 'data','start');
+ }
+ else {
+ initialPosByStart = orderedItems.byStart.indexOf(newVisibleItems[0]);
+ }
- var deltaX = event.gesture.deltaX,
- x = this.body.util.toScreen(this.eventParams.customTime) + deltaX,
- time = this.body.util.toTime(x);
+ // use visible search to find a visible ItemRange (only based on endTime)
+ var initialPosByEnd = util.binarySearch(orderedItems.byEnd, range, 'data','end');
- this.setCustomTime(time);
+ // if we found a initial ID to use, trace it up and down until we meet an invisible item.
+ if (initialPosByStart != -1) {
+ for (i = initialPosByStart; i >= 0; i--) {
+ if (this._checkIfInvisible(orderedItems.byStart[i], newVisibleItems, range)) {break;}
+ }
+ for (i = initialPosByStart + 1; i < orderedItems.byStart.length; i++) {
+ if (this._checkIfInvisible(orderedItems.byStart[i], newVisibleItems, range)) {break;}
+ }
+ }
- // fire a timechange event
- this.body.emitter.emit('timechange', {
- time: new Date(this.customTime.valueOf())
- });
+ // if we found a initial ID to use, trace it up and down until we meet an invisible item.
+ if (initialPosByEnd != -1) {
+ for (i = initialPosByEnd; i >= 0; i--) {
+ if (this._checkIfInvisible(orderedItems.byEnd[i], newVisibleItems, range)) {break;}
+ }
+ for (i = initialPosByEnd + 1; i < orderedItems.byEnd.length; i++) {
+ if (this._checkIfInvisible(orderedItems.byEnd[i], newVisibleItems, range)) {break;}
+ }
+ }
- event.stopPropagation();
- event.preventDefault();
+ return newVisibleItems;
};
+
+
/**
- * Stop moving operating.
- * @param {event} event
+ * this function checks if an item is invisible. If it is NOT we make it visible
+ * and add it to the global visible items. If it is, return true.
+ *
+ * @param {Item} item
+ * @param {Item[]} visibleItems
+ * @param {{start:number, end:number}} range
+ * @returns {boolean}
* @private
*/
- CustomTime.prototype._onDragEnd = function (event) {
- if (!this.eventParams.dragging) return;
-
- // fire a timechanged event
- this.body.emitter.emit('timechanged', {
- time: new Date(this.customTime.valueOf())
- });
+ Group.prototype._checkIfInvisible = function(item, visibleItems, range) {
+ if (item.isVisible(range)) {
+ if (!item.displayed) item.show();
+ item.repositionX();
+ if (visibleItems.indexOf(item) == -1) {
+ visibleItems.push(item);
+ }
+ return false;
+ }
+ else {
+ if (item.displayed) item.hide();
+ return true;
+ }
+ };
- event.stopPropagation();
- event.preventDefault();
+ /**
+ * this function is very similar to the _checkIfInvisible() but it does not
+ * return booleans, hides the item if it should not be seen and always adds to
+ * the visibleItems.
+ * this one is for brute forcing and hiding.
+ *
+ * @param {Item} item
+ * @param {Array} visibleItems
+ * @param {{start:number, end:number}} range
+ * @private
+ */
+ Group.prototype._checkIfVisible = function(item, visibleItems, range) {
+ if (item.isVisible(range)) {
+ if (!item.displayed) item.show();
+ // reposition item horizontally
+ item.repositionX();
+ visibleItems.push(item);
+ }
+ else {
+ if (item.displayed) item.hide();
+ }
};
- module.exports = CustomTime;
+ module.exports = Group;
/***/ },
-/* 25 */
+/* 24 */
/***/ function(module, exports, __webpack_require__) {
+ var Hammer = __webpack_require__(41);
var util = __webpack_require__(1);
- var DOMutil = __webpack_require__(2);
- var Component = __webpack_require__(22);
- var DataStep = __webpack_require__(14);
+ var DataSet = __webpack_require__(3);
+ var DataView = __webpack_require__(4);
+ var Component = __webpack_require__(18);
+ var Group = __webpack_require__(23);
+ var ItemBox = __webpack_require__(29);
+ var ItemPoint = __webpack_require__(30);
+ var ItemRange = __webpack_require__(31);
+
+
+ var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items
/**
- * A horizontal time axis
- * @param {Object} [options] See DataAxis.setOptions for the available
- * options.
- * @constructor DataAxis
+ * An ItemSet holds a set of items and ranges which can be displayed in a
+ * range. The width is determined by the parent of the ItemSet, and the height
+ * is determined by the size of the items.
+ * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body
+ * @param {Object} [options] See ItemSet.setOptions for the available options.
+ * @constructor ItemSet
* @extends Component
- * @param body
*/
- function DataAxis (body, options, svg) {
- this.id = util.randomUUID();
+ function ItemSet(body, options) {
this.body = body;
this.defaultOptions = {
- orientation: 'left', // supported: 'left', 'right'
- showMinorLabels: true,
- showMajorLabels: true,
- icons: true,
- majorLinesOffset: 7,
- minorLinesOffset: 4,
- labelOffsetX: 10,
- labelOffsetY: 2,
- iconWidth: 20,
- width: '40px',
- visible: true
- };
+ type: null, // 'box', 'point', 'range'
+ orientation: 'bottom', // 'top' or 'bottom'
+ align: 'center', // alignment of box items
+ stack: true,
+ groupOrder: null,
- this.linegraphSVG = svg;
- this.props = {};
- this.DOMelements = { // dynamic elements
- lines: {},
- labels: {}
- };
+ selectable: true,
+ editable: {
+ updateTime: false,
+ updateGroup: false,
+ add: false,
+ remove: false
+ },
- this.dom = {};
+ onAdd: function (item, callback) {
+ callback(item);
+ },
+ onUpdate: function (item, callback) {
+ callback(item);
+ },
+ onMove: function (item, callback) {
+ callback(item);
+ },
+ onRemove: function (item, callback) {
+ callback(item);
+ },
- this.range = {start:0, end:0};
+ margin: {
+ item: {
+ horizontal: 10,
+ vertical: 10
+ },
+ axis: 20
+ },
+ padding: 5
+ };
+ // options is shared by this ItemSet and all its items
this.options = util.extend({}, this.defaultOptions);
- this.conversionFactor = 1;
-
- this.setOptions(options);
- this.width = Number(('' + this.options.width).replace("px",""));
- this.minWidth = this.width;
- this.height = this.linegraphSVG.offsetHeight;
-
- this.stepPixels = 25;
- this.stepPixelsForced = 25;
- this.lineOffset = 0;
- this.master = true;
- this.svgElements = {};
-
- this.groups = {};
- this.amountOfGroups = 0;
+ // options for getting items from the DataSet with the correct type
+ this.itemOptions = {
+ type: {start: 'Date', end: 'Date'}
+ };
- // create the HTML DOM
- this._create();
- }
+ this.conversion = {
+ toScreen: body.util.toScreen,
+ toTime: body.util.toTime
+ };
+ this.dom = {};
+ this.props = {};
+ this.hammer = null;
- DataAxis.prototype = new Component();
+ var me = this;
+ this.itemsData = null; // DataSet
+ this.groupsData = null; // DataSet
+ // listeners for the DataSet of the items
+ this.itemListeners = {
+ 'add': function (event, params, senderId) {
+ me._onAdd(params.items);
+ },
+ 'update': function (event, params, senderId) {
+ me._onUpdate(params.items);
+ },
+ 'remove': function (event, params, senderId) {
+ me._onRemove(params.items);
+ }
+ };
+ // listeners for the DataSet of the groups
+ this.groupListeners = {
+ 'add': function (event, params, senderId) {
+ me._onAddGroups(params.items);
+ },
+ 'update': function (event, params, senderId) {
+ me._onUpdateGroups(params.items);
+ },
+ 'remove': function (event, params, senderId) {
+ me._onRemoveGroups(params.items);
+ }
+ };
- DataAxis.prototype.addGroup = function(label, graphOptions) {
- if (!this.groups.hasOwnProperty(label)) {
- this.groups[label] = graphOptions;
- }
- this.amountOfGroups += 1;
- };
+ this.items = {}; // object with an Item for every data item
+ this.groups = {}; // Group object for every group
+ this.groupIds = [];
- DataAxis.prototype.updateGroup = function(label, graphOptions) {
- this.groups[label] = graphOptions;
- };
+ this.selection = []; // list with the ids of all selected nodes
+ this.stackDirty = true; // if true, all items will be restacked on next redraw
- DataAxis.prototype.removeGroup = function(label) {
- if (this.groups.hasOwnProperty(label)) {
- delete this.groups[label];
- this.amountOfGroups -= 1;
- }
- };
+ this.touchParams = {}; // stores properties while dragging
+ // create the HTML DOM
+ this._create();
- DataAxis.prototype.setOptions = function (options) {
- if (options) {
- var redraw = false;
- if (this.options.orientation != options.orientation && options.orientation !== undefined) {
- redraw = true;
- }
- var fields = [
- 'orientation',
- 'showMinorLabels',
- 'showMajorLabels',
- 'icons',
- 'majorLinesOffset',
- 'minorLinesOffset',
- 'labelOffsetX',
- 'labelOffsetY',
- 'iconWidth',
- 'width',
- 'visible'];
- util.selectiveExtend(fields, this.options, options);
+ this.setOptions(options);
+ }
- this.minWidth = Number(('' + this.options.width).replace("px",""));
+ ItemSet.prototype = new Component();
- if (redraw == true && this.dom.frame) {
- this.hide();
- this.show();
- }
- }
+ // available item types will be registered here
+ ItemSet.types = {
+ box: ItemBox,
+ range: ItemRange,
+ point: ItemPoint
};
-
/**
- * Create the HTML DOM for the DataAxis
+ * Create the HTML DOM for the ItemSet
*/
- DataAxis.prototype._create = function() {
- this.dom.frame = document.createElement('div');
- this.dom.frame.style.width = this.options.width;
- this.dom.frame.style.height = this.height;
+ ItemSet.prototype._create = function(){
+ var frame = document.createElement('div');
+ frame.className = 'itemset';
+ frame['timeline-itemset'] = this;
+ this.dom.frame = frame;
- this.dom.lineContainer = document.createElement('div');
- this.dom.lineContainer.style.width = '100%';
- this.dom.lineContainer.style.height = this.height;
+ // create background panel
+ var background = document.createElement('div');
+ background.className = 'background';
+ frame.appendChild(background);
+ this.dom.background = background;
- // create svg element for graph drawing.
- this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg");
- this.svg.style.position = "absolute";
- this.svg.style.top = '0px';
- this.svg.style.height = '100%';
- this.svg.style.width = '100%';
- this.svg.style.display = "block";
- this.dom.frame.appendChild(this.svg);
- };
+ // create foreground panel
+ var foreground = document.createElement('div');
+ foreground.className = 'foreground';
+ frame.appendChild(foreground);
+ this.dom.foreground = foreground;
- DataAxis.prototype._redrawGroupIcons = function () {
- DOMutil.prepareElements(this.svgElements);
+ // create axis panel
+ var axis = document.createElement('div');
+ axis.className = 'axis';
+ this.dom.axis = axis;
- var x;
- var iconWidth = this.options.iconWidth;
- var iconHeight = 15;
- var iconOffset = 4;
- var y = iconOffset + 0.5 * iconHeight;
+ // create labelset
+ var labelSet = document.createElement('div');
+ labelSet.className = 'labelset';
+ this.dom.labelSet = labelSet;
- if (this.options.orientation == 'left') {
- x = iconOffset;
- }
- else {
- x = this.width - iconWidth - iconOffset;
- }
+ // create ungrouped Group
+ this._updateUngrouped();
- for (var groupId in this.groups) {
- if (this.groups.hasOwnProperty(groupId)) {
- this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight);
- y += iconHeight + iconOffset;
- }
- }
+ // attach event listeners
+ // Note: we bind to the centerContainer for the case where the height
+ // of the center container is larger than of the ItemSet, so we
+ // can click in the empty area to create a new item or deselect an item.
+ this.hammer = Hammer(this.body.dom.centerContainer, {
+ prevent_default: true
+ });
- DOMutil.cleanupElements(this.svgElements);
- };
+ // drag items when selected
+ this.hammer.on('touch', this._onTouch.bind(this));
+ this.hammer.on('dragstart', this._onDragStart.bind(this));
+ this.hammer.on('drag', this._onDrag.bind(this));
+ this.hammer.on('dragend', this._onDragEnd.bind(this));
- /**
- * Create the HTML DOM for the DataAxis
- */
- DataAxis.prototype.show = function() {
- if (!this.dom.frame.parentNode) {
- if (this.options.orientation == 'left') {
- this.body.dom.left.appendChild(this.dom.frame);
- }
- else {
- this.body.dom.right.appendChild(this.dom.frame);
- }
- }
+ // single select (or unselect) when tapping an item
+ this.hammer.on('tap', this._onSelectItem.bind(this));
- if (!this.dom.lineContainer.parentNode) {
- this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer);
- }
+ // multi select when holding mouse/touch, or on ctrl+click
+ this.hammer.on('hold', this._onMultiSelectItem.bind(this));
+
+ // add item on doubletap
+ this.hammer.on('doubletap', this._onAddItem.bind(this));
+
+ // attach to the DOM
+ this.show();
};
/**
- * Create the HTML DOM for the DataAxis
- */
- DataAxis.prototype.hide = function() {
- if (this.dom.frame.parentNode) {
- this.dom.frame.parentNode.removeChild(this.dom.frame);
- }
+ * Set options for the ItemSet. Existing options will be extended/overwritten.
+ * @param {Object} [options] The following options are available:
+ * {String} type
+ * Default type for the items. Choose from 'box'
+ * (default), 'point', or 'range'. The default
+ * Style can be overwritten by individual items.
+ * {String} align
+ * Alignment for the items, only applicable for
+ * ItemBox. Choose 'center' (default), 'left', or
+ * 'right'.
+ * {String} orientation
+ * Orientation of the item set. Choose 'top' or
+ * 'bottom' (default).
+ * {Function} groupOrder
+ * A sorting function for ordering groups
+ * {Boolean} stack
+ * If true (deafult), items will be stacked on
+ * top of each other.
+ * {Number} margin.axis
+ * Margin between the axis and the items in pixels.
+ * Default is 20.
+ * {Number} margin.item.horizontal
+ * Horizontal margin between items in pixels.
+ * Default is 10.
+ * {Number} margin.item.vertical
+ * Vertical Margin between items in pixels.
+ * Default is 10.
+ * {Number} margin.item
+ * Margin between items in pixels in both horizontal
+ * and vertical direction. Default is 10.
+ * {Number} margin
+ * Set margin for both axis and items in pixels.
+ * {Number} padding
+ * Padding of the contents of an item in pixels.
+ * Must correspond with the items css. Default is 5.
+ * {Boolean} selectable
+ * If true (default), items can be selected.
+ * {Boolean} editable
+ * Set all editable options to true or false
+ * {Boolean} editable.updateTime
+ * Allow dragging an item to an other moment in time
+ * {Boolean} editable.updateGroup
+ * Allow dragging an item to an other group
+ * {Boolean} editable.add
+ * Allow creating new items on double tap
+ * {Boolean} editable.remove
+ * Allow removing items by clicking the delete button
+ * top right of a selected item.
+ * {Function(item: Item, callback: Function)} onAdd
+ * Callback function triggered when an item is about to be added:
+ * when the user double taps an empty space in the Timeline.
+ * {Function(item: Item, callback: Function)} onUpdate
+ * Callback function fired when an item is about to be updated.
+ * This function typically has to show a dialog where the user
+ * change the item. If not implemented, nothing happens.
+ * {Function(item: Item, callback: Function)} onMove
+ * Fired when an item has been moved. If not implemented,
+ * the move action will be accepted.
+ * {Function(item: Item, callback: Function)} onRemove
+ * Fired when an item is about to be deleted.
+ * If not implemented, the item will be always removed.
+ */
+ ItemSet.prototype.setOptions = function(options) {
+ if (options) {
+ // copy all options that we know
+ var fields = ['type', 'align', 'orientation', 'padding', 'stack', 'selectable', 'groupOrder'];
+ util.selectiveExtend(fields, this.options, options);
- if (this.dom.lineContainer.parentNode) {
- this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer);
+ if ('margin' in options) {
+ if (typeof options.margin === 'number') {
+ this.options.margin.axis = options.margin;
+ this.options.margin.item.horizontal = options.margin;
+ this.options.margin.item.vertical = options.margin;
+ }
+ else if (typeof options.margin === 'object') {
+ util.selectiveExtend(['axis'], this.options.margin, options.margin);
+ if ('item' in options.margin) {
+ if (typeof options.margin.item === 'number') {
+ this.options.margin.item.horizontal = options.margin.item;
+ this.options.margin.item.vertical = options.margin.item;
+ }
+ else if (typeof options.margin.item === 'object') {
+ util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item);
+ }
+ }
+ }
+ }
+
+ if ('editable' in options) {
+ if (typeof options.editable === 'boolean') {
+ this.options.editable.updateTime = options.editable;
+ this.options.editable.updateGroup = options.editable;
+ this.options.editable.add = options.editable;
+ this.options.editable.remove = options.editable;
+ }
+ else if (typeof options.editable === 'object') {
+ util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove'], this.options.editable, options.editable);
+ }
+ }
+
+ // callback functions
+ var addCallback = (function (name) {
+ if (name in options) {
+ var fn = options[name];
+ if (!(fn instanceof Function)) {
+ throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)');
+ }
+ this.options[name] = fn;
+ }
+ }).bind(this);
+ ['onAdd', 'onUpdate', 'onRemove', 'onMove'].forEach(addCallback);
+
+ // force the itemSet to refresh: options like orientation and margins may be changed
+ this.markDirty();
}
};
/**
- * Set a range (start and end)
- * @param end
- * @param start
- * @param end
+ * Mark the ItemSet dirty so it will refresh everything with next redraw
*/
- DataAxis.prototype.setRange = function (start, end) {
- this.range.start = start;
- this.range.end = end;
+ ItemSet.prototype.markDirty = function() {
+ this.groupIds = [];
+ this.stackDirty = true;
};
/**
- * Repaint the component
- * @return {boolean} Returns true if the component is resized
+ * Destroy the ItemSet
*/
- DataAxis.prototype.redraw = function () {
- var changeCalled = false;
- if (this.amountOfGroups == 0) {
- this.hide();
- }
- else {
- this.show();
- this.height = Number(this.linegraphSVG.style.height.replace("px",""));
- // svg offsetheight did not work in firefox and explorer...
+ ItemSet.prototype.destroy = function() {
+ this.hide();
+ this.setItems(null);
+ this.setGroups(null);
- this.dom.lineContainer.style.height = this.height + 'px';
- this.width = this.options.visible == true ? Number(('' + this.options.width).replace("px","")) : 0;
+ this.hammer = null;
- var props = this.props;
- var frame = this.dom.frame;
+ this.body = null;
+ this.conversion = null;
+ };
- // update classname
- frame.className = 'dataaxis';
+ /**
+ * Hide the component from the DOM
+ */
+ ItemSet.prototype.hide = function() {
+ // remove the frame containing the items
+ if (this.dom.frame.parentNode) {
+ this.dom.frame.parentNode.removeChild(this.dom.frame);
+ }
- // calculate character width and height
- this._calculateCharSize();
+ // remove the axis with dots
+ if (this.dom.axis.parentNode) {
+ this.dom.axis.parentNode.removeChild(this.dom.axis);
+ }
- var orientation = this.options.orientation;
- var showMinorLabels = this.options.showMinorLabels;
- var showMajorLabels = this.options.showMajorLabels;
+ // remove the labelset containing all group labels
+ if (this.dom.labelSet.parentNode) {
+ this.dom.labelSet.parentNode.removeChild(this.dom.labelSet);
+ }
+ };
- // determine the width and height of the elemens for the axis
- props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;
- props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;
+ /**
+ * Show the component in the DOM (when not already visible).
+ * @return {Boolean} changed
+ */
+ ItemSet.prototype.show = function() {
+ // show frame containing the items
+ if (!this.dom.frame.parentNode) {
+ this.body.dom.center.appendChild(this.dom.frame);
+ }
- props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset;
- props.minorLineHeight = 1;
- props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset;
- props.majorLineHeight = 1;
+ // show axis with dots
+ if (!this.dom.axis.parentNode) {
+ this.body.dom.backgroundVertical.appendChild(this.dom.axis);
+ }
- // take frame offline while updating (is almost twice as fast)
- if (orientation == 'left') {
- frame.style.top = '0';
- frame.style.left = '0';
- frame.style.bottom = '';
- frame.style.width = this.width + 'px';
- frame.style.height = this.height + "px";
+ // show labelset containing labels
+ if (!this.dom.labelSet.parentNode) {
+ this.body.dom.left.appendChild(this.dom.labelSet);
+ }
+ };
+
+ /**
+ * Set selected items by their id. Replaces the current selection
+ * Unknown id's are silently ignored.
+ * @param {Array} [ids] An array with zero or more id's of the items to be
+ * selected. If ids is an empty array, all items will be
+ * unselected.
+ */
+ ItemSet.prototype.setSelection = function(ids) {
+ var i, ii, id, item;
+
+ if (ids) {
+ if (!Array.isArray(ids)) {
+ throw new TypeError('Array expected');
}
- else { // right
- frame.style.top = '';
- frame.style.bottom = '0';
- frame.style.left = '0';
- frame.style.width = this.width + 'px';
- frame.style.height = this.height + "px";
+
+ // unselect currently selected items
+ for (i = 0, ii = this.selection.length; i < ii; i++) {
+ id = this.selection[i];
+ item = this.items[id];
+ if (item) item.unselect();
}
- changeCalled = this._redrawLabels();
- if (this.options.icons == true) {
- this._redrawGroupIcons();
+
+ // select items
+ this.selection = [];
+ for (i = 0, ii = ids.length; i < ii; i++) {
+ id = ids[i];
+ item = this.items[id];
+ if (item) {
+ this.selection.push(id);
+ item.select();
+ }
}
}
- return changeCalled;
};
/**
- * Repaint major and minor text labels and vertical grid lines
- * @private
+ * Get the selected items by their id
+ * @return {Array} ids The ids of the selected items
*/
- DataAxis.prototype._redrawLabels = function () {
- DOMutil.prepareElements(this.DOMelements);
+ ItemSet.prototype.getSelection = function() {
+ return this.selection.concat([]);
+ };
- var orientation = this.options['orientation'];
+ /**
+ * Get the id's of the currently visible items.
+ * @returns {Array} The ids of the visible items
+ */
+ ItemSet.prototype.getVisibleItems = function() {
+ var range = this.body.range.getRange();
+ var left = this.body.util.toScreen(range.start);
+ var right = this.body.util.toScreen(range.end);
- // calculate range and step (step such that we have space for 7 characters per label)
- var minimumStep = this.master ? this.props.majorCharHeight || 10 : this.stepPixelsForced;
- var step = new DataStep(this.range.start, this.range.end, minimumStep, this.dom.frame.offsetHeight);
- this.step = step;
- step.first();
+ var ids = [];
+ for (var groupId in this.groups) {
+ if (this.groups.hasOwnProperty(groupId)) {
+ var group = this.groups[groupId];
+ var rawVisibleItems = group.visibleItems;
- // get the distance in pixels for a step
- var stepPixels = this.dom.frame.offsetHeight / ((step.marginRange / step.step) + 1);
- this.stepPixels = stepPixels;
+ // filter the "raw" set with visibleItems into a set which is really
+ // visible by pixels
+ for (var i = 0; i < rawVisibleItems.length; i++) {
+ var item = rawVisibleItems[i];
+ // TODO: also check whether visible vertically
+ if ((item.left < right) && (item.left + item.width > left)) {
+ ids.push(item.id);
+ }
+ }
+ }
+ }
- var amountOfSteps = this.height / stepPixels;
- var stepDifference = 0;
+ return ids;
+ };
- if (this.master == false) {
- stepPixels = this.stepPixelsForced;
- stepDifference = Math.round((this.height / stepPixels) - amountOfSteps);
- for (var i = 0; i < 0.5 * stepDifference; i++) {
- step.previous();
+ /**
+ * Deselect a selected item
+ * @param {String | Number} id
+ * @private
+ */
+ ItemSet.prototype._deselect = function(id) {
+ var selection = this.selection;
+ for (var i = 0, ii = selection.length; i < ii; i++) {
+ if (selection[i] == id) { // non-strict comparison!
+ selection.splice(i, 1);
+ break;
}
- amountOfSteps = this.height / stepPixels;
}
+ };
+ /**
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
+ */
+ ItemSet.prototype.redraw = function() {
+ var margin = this.options.margin,
+ range = this.body.range,
+ asSize = util.option.asSize,
+ options = this.options,
+ orientation = options.orientation,
+ resized = false,
+ frame = this.dom.frame,
+ editable = options.editable.updateTime || options.editable.updateGroup;
- this.valueAtZero = step.marginEnd;
- var marginStartPos = 0;
-
- // do not draw the first label
- var max = 1;
- step.next();
+ // update class name
+ frame.className = 'itemset' + (editable ? ' editable' : '');
- this.maxLabelSize = 0;
- var y = 0;
- while (max < Math.round(amountOfSteps)) {
+ // reorder the groups (if needed)
+ resized = this._orderGroups() || resized;
- y = Math.round(max * stepPixels);
- marginStartPos = max * stepPixels;
- var isMajor = step.isMajor();
+ // check whether zoomed (in that case we need to re-stack everything)
+ // TODO: would be nicer to get this as a trigger from Range
+ var visibleInterval = range.end - range.start;
+ var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.props.width != this.props.lastWidth);
+ if (zoomed) this.stackDirty = true;
+ this.lastVisibleInterval = visibleInterval;
+ this.props.lastWidth = this.props.width;
- if (this.options['showMinorLabels'] && isMajor == false || this.master == false && this.options['showMinorLabels'] == true) {
- this._redrawLabel(y - 2, step.getCurrent(), orientation, 'yAxis minor', this.props.minorCharHeight);
- }
+ // redraw all groups
+ var restack = this.stackDirty,
+ firstGroup = this._firstGroup(),
+ firstMargin = {
+ item: margin.item,
+ axis: margin.axis
+ },
+ nonFirstMargin = {
+ item: margin.item,
+ axis: margin.item.vertical / 2
+ },
+ height = 0,
+ minHeight = margin.axis + margin.item.vertical;
+ util.forEach(this.groups, function (group) {
+ var groupMargin = (group == firstGroup) ? firstMargin : nonFirstMargin;
+ var groupResized = group.redraw(range, groupMargin, restack);
+ resized = groupResized || resized;
+ height += group.height;
+ });
+ height = Math.max(height, minHeight);
+ this.stackDirty = false;
- if (isMajor && this.options['showMajorLabels'] && this.master == true ||
- this.options['showMinorLabels'] == false && this.master == false && isMajor == true) {
+ // update frame height
+ frame.style.height = asSize(height);
- if (y >= 0) {
- this._redrawLabel(y - 2, step.getCurrent(), orientation, 'yAxis major', this.props.majorCharHeight);
- }
- this._redrawLine(y, orientation, 'grid horizontal major', this.options.majorLinesOffset, this.props.majorLineWidth);
- }
- else {
- this._redrawLine(y, orientation, 'grid horizontal minor', this.options.minorLinesOffset, this.props.minorLineWidth);
- }
+ // calculate actual size and position
+ this.props.top = frame.offsetTop;
+ this.props.left = frame.offsetLeft;
+ this.props.width = frame.offsetWidth;
+ this.props.height = height;
- step.next();
- max++;
- }
+ // reposition axis
+ this.dom.axis.style.top = asSize((orientation == 'top') ?
+ (this.body.domProps.top.height + this.body.domProps.border.top) :
+ (this.body.domProps.top.height + this.body.domProps.centerContainer.height));
+ this.dom.axis.style.left = this.body.domProps.border.left + 'px';
- this.conversionFactor = marginStartPos/((amountOfSteps-1) * step.step);
+ // check if this component is resized
+ resized = this._isResized() || resized;
- var offset = this.options.icons == true ? this.options.iconWidth + this.options.labelOffsetX + 15 : this.options.labelOffsetX + 15;
- // this will resize the yAxis to accomodate the labels.
- if (this.maxLabelSize > (this.width - offset) && this.options.visible == true) {
- this.width = this.maxLabelSize + offset;
- this.options.width = this.width + "px";
- DOMutil.cleanupElements(this.DOMelements);
- this.redraw();
- return true;
- }
- // this will resize the yAxis if it is too big for the labels.
- else if (this.maxLabelSize < (this.width - offset) && this.options.visible == true && this.width > this.minWidth) {
- this.width = Math.max(this.minWidth,this.maxLabelSize + offset);
- this.options.width = this.width + "px";
- DOMutil.cleanupElements(this.DOMelements);
- this.redraw();
- return true;
- }
- else {
- DOMutil.cleanupElements(this.DOMelements);
- return false;
- }
+ return resized;
};
/**
- * Create a label for the axis at position x
+ * Get the first group, aligned with the axis
+ * @return {Group | null} firstGroup
* @private
- * @param y
- * @param text
- * @param orientation
- * @param className
- * @param characterHeight
*/
- DataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) {
- // reuse redundant label
- var label = DOMutil.getDOMElement('div',this.DOMelements, this.dom.frame); //this.dom.redundant.labels.shift();
- label.className = className;
- label.innerHTML = text;
-
- if (orientation == 'left') {
- label.style.left = '-' + this.options.labelOffsetX + 'px';
- label.style.textAlign = "right";
- }
- else {
- label.style.right = '-' + this.options.labelOffsetX + 'px';
- label.style.textAlign = "left";
- }
-
- label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px';
-
- text += '';
+ ItemSet.prototype._firstGroup = function() {
+ var firstGroupIndex = (this.options.orientation == 'top') ? 0 : (this.groupIds.length - 1);
+ var firstGroupId = this.groupIds[firstGroupIndex];
+ var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED];
- var largestWidth = Math.max(this.props.majorCharWidth,this.props.minorCharWidth);
- if (this.maxLabelSize < text.length * largestWidth) {
- this.maxLabelSize = text.length * largestWidth;
- }
+ return firstGroup || null;
};
/**
- * Create a minor line for the axis at position y
- * @param y
- * @param orientation
- * @param className
- * @param offset
- * @param width
+ * Create or delete the group holding all ungrouped items. This group is used when
+ * there are no groups specified.
+ * @protected
*/
- DataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) {
- if (this.master == true) {
- var line = DOMutil.getDOMElement('div',this.DOMelements, this.dom.lineContainer);//this.dom.redundant.lines.shift();
- line.className = className;
- line.innerHTML = '';
+ ItemSet.prototype._updateUngrouped = function() {
+ var ungrouped = this.groups[UNGROUPED];
- if (orientation == 'left') {
- line.style.left = (this.width - offset) + 'px';
- }
- else {
- line.style.right = (this.width - offset) + 'px';
+ if (this.groupsData) {
+ // remove the group holding all ungrouped items
+ if (ungrouped) {
+ ungrouped.hide();
+ delete this.groups[UNGROUPED];
}
-
- line.style.width = width + 'px';
- line.style.top = y + 'px';
}
- };
+ else {
+ // create a group holding all (unfiltered) items
+ if (!ungrouped) {
+ var id = null;
+ var data = null;
+ ungrouped = new Group(id, data, this);
+ this.groups[UNGROUPED] = ungrouped;
+ for (var itemId in this.items) {
+ if (this.items.hasOwnProperty(itemId)) {
+ ungrouped.add(this.items[itemId]);
+ }
+ }
- DataAxis.prototype.convertValue = function (value) {
- var invertedValue = this.valueAtZero - value;
- var convertedValue = invertedValue * this.conversionFactor;
- return convertedValue; // the -2 is to compensate for the borders
+ ungrouped.show();
+ }
+ }
};
-
/**
- * Determine the size of text on the axis (both major and minor axis).
- * The size is calculated only once and then cached in this.props.
- * @private
+ * Get the element for the labelset
+ * @return {HTMLElement} labelSet
*/
- DataAxis.prototype._calculateCharSize = function () {
- // determine the char width and height on the minor axis
- if (!('minorCharHeight' in this.props)) {
+ ItemSet.prototype.getLabelSet = function() {
+ return this.dom.labelSet;
+ };
- var textMinor = document.createTextNode('0');
- var measureCharMinor = document.createElement('DIV');
- measureCharMinor.className = 'yAxis minor measure';
- measureCharMinor.appendChild(textMinor);
- this.dom.frame.appendChild(measureCharMinor);
+ /**
+ * Set items
+ * @param {vis.DataSet | null} items
+ */
+ ItemSet.prototype.setItems = function(items) {
+ var me = this,
+ ids,
+ oldItemsData = this.itemsData;
- this.props.minorCharHeight = measureCharMinor.clientHeight;
- this.props.minorCharWidth = measureCharMinor.clientWidth;
+ // replace the dataset
+ if (!items) {
+ this.itemsData = null;
+ }
+ else if (items instanceof DataSet || items instanceof DataView) {
+ this.itemsData = items;
+ }
+ else {
+ throw new TypeError('Data must be an instance of DataSet or DataView');
+ }
- this.dom.frame.removeChild(measureCharMinor);
+ if (oldItemsData) {
+ // unsubscribe from old dataset
+ util.forEach(this.itemListeners, function (callback, event) {
+ oldItemsData.off(event, callback);
+ });
+
+ // remove all drawn items
+ ids = oldItemsData.getIds();
+ this._onRemove(ids);
}
- if (!('majorCharHeight' in this.props)) {
- var textMajor = document.createTextNode('0');
- var measureCharMajor = document.createElement('DIV');
- measureCharMajor.className = 'yAxis major measure';
- measureCharMajor.appendChild(textMajor);
- this.dom.frame.appendChild(measureCharMajor);
+ if (this.itemsData) {
+ // subscribe to new dataset
+ var id = this.id;
+ util.forEach(this.itemListeners, function (callback, event) {
+ me.itemsData.on(event, callback, id);
+ });
- this.props.majorCharHeight = measureCharMajor.clientHeight;
- this.props.majorCharWidth = measureCharMajor.clientWidth;
+ // add all new items
+ ids = this.itemsData.getIds();
+ this._onAdd(ids);
- this.dom.frame.removeChild(measureCharMajor);
+ // update the group holding all ungrouped items
+ this._updateUngrouped();
}
};
/**
- * Snap a date to a rounded value.
- * The snap intervals are dependent on the current scale and step.
- * @param {Date} date the date to be snapped.
- * @return {Date} snappedDate
+ * Get the current items
+ * @returns {vis.DataSet | null}
*/
- DataAxis.prototype.snap = function(date) {
- return this.step.snap(date);
+ ItemSet.prototype.getItems = function() {
+ return this.itemsData;
};
- module.exports = DataAxis;
-
-
-/***/ },
-/* 26 */
-/***/ function(module, exports, __webpack_require__) {
-
- var util = __webpack_require__(1);
- var DOMutil = __webpack_require__(2);
-
/**
- * @constructor Group
- * @param {Number | String} groupId
- * @param {Object} data
- * @param {ItemSet} itemSet
+ * Set groups
+ * @param {vis.DataSet} groups
*/
- function GraphGroup (group, groupId, options, groupsUsingDefaultStyles) {
- this.id = groupId;
- var fields = ['sampling','style','sort','yAxisOrientation','barChart','drawPoints','shaded','catmullRom']
- this.options = util.selectiveBridgeObject(fields,options);
- this.usingDefaultStyle = group.className === undefined;
- this.groupsUsingDefaultStyles = groupsUsingDefaultStyles;
- this.zeroPosition = 0;
- this.update(group);
- if (this.usingDefaultStyle == true) {
- this.groupsUsingDefaultStyles[0] += 1;
+ ItemSet.prototype.setGroups = function(groups) {
+ var me = this,
+ ids;
+
+ // unsubscribe from current dataset
+ if (this.groupsData) {
+ util.forEach(this.groupListeners, function (callback, event) {
+ me.groupsData.unsubscribe(event, callback);
+ });
+
+ // remove all drawn groups
+ ids = this.groupsData.getIds();
+ this.groupsData = null;
+ this._onRemoveGroups(ids); // note: this will cause a redraw
}
- this.itemsData = [];
- }
- GraphGroup.prototype.setItems = function(items) {
- if (items != null) {
- this.itemsData = items;
- if (this.options.sort == true) {
- this.itemsData.sort(function (a,b) {return a.x - b.x;})
- }
+ // replace the dataset
+ if (!groups) {
+ this.groupsData = null;
+ }
+ else if (groups instanceof DataSet || groups instanceof DataView) {
+ this.groupsData = groups;
}
else {
- this.itemsData = [];
+ throw new TypeError('Data must be an instance of DataSet or DataView');
}
- };
- GraphGroup.prototype.setZeroPosition = function(pos) {
- this.zeroPosition = pos;
+ if (this.groupsData) {
+ // subscribe to new dataset
+ var id = this.id;
+ util.forEach(this.groupListeners, function (callback, event) {
+ me.groupsData.on(event, callback, id);
+ });
+
+ // draw all ms
+ ids = this.groupsData.getIds();
+ this._onAddGroups(ids);
+ }
+
+ // update the group holding all ungrouped items
+ this._updateUngrouped();
+
+ // update the order of all items in each group
+ this._order();
+
+ this.body.emitter.emit('change');
};
- GraphGroup.prototype.setOptions = function(options) {
- if (options !== undefined) {
- var fields = ['sampling','style','sort','yAxisOrientation','barChart'];
- util.selectiveDeepExtend(fields, this.options, options);
+ /**
+ * Get the current groups
+ * @returns {vis.DataSet | null} groups
+ */
+ ItemSet.prototype.getGroups = function() {
+ return this.groupsData;
+ };
- util.mergeOptions(this.options, options,'catmullRom');
- util.mergeOptions(this.options, options,'drawPoints');
- util.mergeOptions(this.options, options,'shaded');
+ /**
+ * Remove an item by its id
+ * @param {String | Number} id
+ */
+ ItemSet.prototype.removeItem = function(id) {
+ var item = this.itemsData.get(id),
+ dataset = this.itemsData.getDataSet();
- if (options.catmullRom) {
- if (typeof options.catmullRom == 'object') {
- if (options.catmullRom.parametrization) {
- if (options.catmullRom.parametrization == 'uniform') {
- this.options.catmullRom.alpha = 0;
- }
- else if (options.catmullRom.parametrization == 'chordal') {
- this.options.catmullRom.alpha = 1.0;
- }
- else {
- this.options.catmullRom.parametrization = 'centripetal';
- this.options.catmullRom.alpha = 0.5;
- }
- }
+ if (item) {
+ // confirm deletion
+ this.options.onRemove(item, function (item) {
+ if (item) {
+ // remove by id here, it is possible that an item has no id defined
+ // itself, so better not delete by the item itself
+ dataset.remove(id);
}
- }
+ });
}
};
- GraphGroup.prototype.update = function(group) {
- this.group = group;
- this.content = group.content || 'graph';
- this.className = group.className || this.className || "graphGroup" + this.groupsUsingDefaultStyles[0] % 10;
- this.setOptions(group.options);
- };
+ /**
+ * Handle updated items
+ * @param {Number[]} ids
+ * @protected
+ */
+ ItemSet.prototype._onUpdate = function(ids) {
+ var me = this;
- GraphGroup.prototype.drawIcon = function(x, y, JSONcontainer, SVGcontainer, iconWidth, iconHeight) {
- var fillHeight = iconHeight * 0.5;
- var path, fillPath;
+ ids.forEach(function (id) {
+ var itemData = me.itemsData.get(id, me.itemOptions),
+ item = me.items[id],
+ type = itemData.type || me.options.type || (itemData.end ? 'range' : 'box');
- var outline = DOMutil.getSVGElement("rect", JSONcontainer, SVGcontainer);
- outline.setAttributeNS(null, "x", x);
- outline.setAttributeNS(null, "y", y - fillHeight);
- outline.setAttributeNS(null, "width", iconWidth);
- outline.setAttributeNS(null, "height", 2*fillHeight);
- outline.setAttributeNS(null, "class", "outline");
+ var constructor = ItemSet.types[type];
- if (this.options.style == 'line') {
- path = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer);
- path.setAttributeNS(null, "class", this.className);
- path.setAttributeNS(null, "d", "M" + x + ","+y+" L" + (x + iconWidth) + ","+y+"");
- if (this.options.shaded.enabled == true) {
- fillPath = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer);
- if (this.options.shaded.orientation == 'top') {
- fillPath.setAttributeNS(null, "d", "M"+x+", " + (y - fillHeight) +
- "L"+x+","+y+" L"+ (x + iconWidth) + ","+y+" L"+ (x + iconWidth) + "," + (y - fillHeight));
+ if (item) {
+ // update item
+ if (!constructor || !(item instanceof constructor)) {
+ // item type has changed, delete the item and recreate it
+ me._removeItem(item);
+ item = null;
}
else {
- fillPath.setAttributeNS(null, "d", "M"+x+","+y+" " +
- "L"+x+"," + (y + fillHeight) + " " +
- "L"+ (x + iconWidth) + "," + (y + fillHeight) +
- "L"+ (x + iconWidth) + ","+y);
+ me._updateItem(item, itemData);
}
- fillPath.setAttributeNS(null, "class", this.className + " iconFill");
}
- if (this.options.drawPoints.enabled == true) {
- DOMutil.drawPoint(x + 0.5 * iconWidth,y, this, JSONcontainer, SVGcontainer);
+ if (!item) {
+ // create item
+ if (constructor) {
+ item = new constructor(itemData, me.conversion, me.options);
+ item.id = id; // TODO: not so nice setting id afterwards
+ me._addItem(item);
+ }
+ else if (type == 'rangeoverflow') {
+ // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day
+ throw new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: ' +
+ '.vis.timeline .item.range .content {overflow: visible;}');
+ }
+ else {
+ throw new TypeError('Unknown item type "' + type + '"');
+ }
}
- }
- else {
- var barWidth = Math.round(0.3 * iconWidth);
- var bar1Height = Math.round(0.4 * iconHeight);
- var bar2Height = Math.round(0.75 * iconHeight);
-
- var offset = Math.round((iconWidth - (2 * barWidth))/3);
+ });
- DOMutil.drawBar(x + 0.5*barWidth + offset , y + fillHeight - bar1Height - 1, barWidth, bar1Height, this.className + ' bar', JSONcontainer, SVGcontainer);
- DOMutil.drawBar(x + 1.5*barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, this.className + ' bar', JSONcontainer, SVGcontainer);
- }
+ this._order();
+ this.stackDirty = true; // force re-stacking of all items next redraw
+ this.body.emitter.emit('change');
};
- module.exports = GraphGroup;
+ /**
+ * Handle added items
+ * @param {Number[]} ids
+ * @protected
+ */
+ ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate;
+ /**
+ * Handle removed items
+ * @param {Number[]} ids
+ * @protected
+ */
+ ItemSet.prototype._onRemove = function(ids) {
+ var count = 0;
+ var me = this;
+ ids.forEach(function (id) {
+ var item = me.items[id];
+ if (item) {
+ count++;
+ me._removeItem(item);
+ }
+ });
-/***/ },
-/* 27 */
-/***/ function(module, exports, __webpack_require__) {
+ if (count) {
+ // update order
+ this._order();
+ this.stackDirty = true; // force re-stacking of all items next redraw
+ this.body.emitter.emit('change');
+ }
+ };
- var util = __webpack_require__(1);
- var stack = __webpack_require__(16);
- var ItemRange = __webpack_require__(21);
+ /**
+ * Update the order of item in all groups
+ * @private
+ */
+ ItemSet.prototype._order = function() {
+ // reorder the items in all groups
+ // TODO: optimization: only reorder groups affected by the changed items
+ util.forEach(this.groups, function (group) {
+ group.order();
+ });
+ };
/**
- * @constructor Group
- * @param {Number | String} groupId
- * @param {Object} data
- * @param {ItemSet} itemSet
+ * Handle updated groups
+ * @param {Number[]} ids
+ * @private
*/
- function Group (groupId, data, itemSet) {
- this.groupId = groupId;
+ ItemSet.prototype._onUpdateGroups = function(ids) {
+ this._onAddGroups(ids);
+ };
- this.itemSet = itemSet;
+ /**
+ * Handle changed groups
+ * @param {Number[]} ids
+ * @private
+ */
+ ItemSet.prototype._onAddGroups = function(ids) {
+ var me = this;
- this.dom = {};
- this.props = {
- label: {
- width: 0,
- height: 0
- }
- };
- this.className = null;
+ ids.forEach(function (id) {
+ var groupData = me.groupsData.get(id);
+ var group = me.groups[id];
- this.items = {}; // items filtered by groupId of this group
- this.visibleItems = []; // items currently visible in window
- this.orderedItems = { // items sorted by start and by end
- byStart: [],
- byEnd: []
- };
+ if (!group) {
+ // check for reserved ids
+ if (id == UNGROUPED) {
+ throw new Error('Illegal group id. ' + id + ' is a reserved id.');
+ }
- this._create();
+ var groupOptions = Object.create(me.options);
+ util.extend(groupOptions, {
+ height: null
+ });
- this.setData(data);
- }
+ group = new Group(id, groupData, me);
+ me.groups[id] = group;
+
+ // add items with this groupId to the new group
+ for (var itemId in me.items) {
+ if (me.items.hasOwnProperty(itemId)) {
+ var item = me.items[itemId];
+ if (item.data.group == id) {
+ group.add(item);
+ }
+ }
+ }
+
+ group.order();
+ group.show();
+ }
+ else {
+ // update group
+ group.setData(groupData);
+ }
+ });
+
+ this.body.emitter.emit('change');
+ };
/**
- * Create DOM elements for the group
+ * Handle removed groups
+ * @param {Number[]} ids
* @private
*/
- Group.prototype._create = function() {
- var label = document.createElement('div');
- label.className = 'vlabel';
- this.dom.label = label;
-
- var inner = document.createElement('div');
- inner.className = 'inner';
- label.appendChild(inner);
- this.dom.inner = inner;
-
- var foreground = document.createElement('div');
- foreground.className = 'group';
- foreground['timeline-group'] = this;
- this.dom.foreground = foreground;
+ ItemSet.prototype._onRemoveGroups = function(ids) {
+ var groups = this.groups;
+ ids.forEach(function (id) {
+ var group = groups[id];
- this.dom.background = document.createElement('div');
- this.dom.background.className = 'group';
+ if (group) {
+ group.hide();
+ delete groups[id];
+ }
+ });
- this.dom.axis = document.createElement('div');
- this.dom.axis.className = 'group';
+ this.markDirty();
- // create a hidden marker to detect when the Timelines container is attached
- // to the DOM, or the style of a parent of the Timeline is changed from
- // display:none is changed to visible.
- this.dom.marker = document.createElement('div');
- this.dom.marker.style.visibility = 'hidden';
- this.dom.marker.innerHTML = '?';
- this.dom.background.appendChild(this.dom.marker);
+ this.body.emitter.emit('change');
};
/**
- * Set the group data for this group
- * @param {Object} data Group data, can contain properties content and className
+ * Reorder the groups if needed
+ * @return {boolean} changed
+ * @private
*/
- Group.prototype.setData = function(data) {
- // update contents
- var content = data && data.content;
- if (content instanceof Element) {
- this.dom.inner.appendChild(content);
- }
- else if (content != undefined) {
- this.dom.inner.innerHTML = content;
- }
- else {
- this.dom.inner.innerHTML = this.groupId;
- }
+ ItemSet.prototype._orderGroups = function () {
+ if (this.groupsData) {
+ // reorder the groups
+ var groupIds = this.groupsData.getIds({
+ order: this.options.groupOrder
+ });
- // update title
- this.dom.label.title = data && data.title || '';
+ var changed = !util.equalArray(groupIds, this.groupIds);
+ if (changed) {
+ // hide all groups, removes them from the DOM
+ var groups = this.groups;
+ groupIds.forEach(function (groupId) {
+ groups[groupId].hide();
+ });
- if (!this.dom.inner.firstChild) {
- util.addClassName(this.dom.inner, 'hidden');
- }
- else {
- util.removeClassName(this.dom.inner, 'hidden');
- }
+ // show the groups again, attach them to the DOM in correct order
+ groupIds.forEach(function (groupId) {
+ groups[groupId].show();
+ });
- // update className
- var className = data && data.className || null;
- if (className != this.className) {
- if (this.className) {
- util.removeClassName(this.dom.label, className);
- util.removeClassName(this.dom.foreground, className);
- util.removeClassName(this.dom.background, className);
- util.removeClassName(this.dom.axis, className);
+ this.groupIds = groupIds;
}
- util.addClassName(this.dom.label, className);
- util.addClassName(this.dom.foreground, className);
- util.addClassName(this.dom.background, className);
- util.addClassName(this.dom.axis, className);
+
+ return changed;
+ }
+ else {
+ return false;
}
};
/**
- * Get the width of the group label
- * @return {number} width
+ * Add a new item
+ * @param {Item} item
+ * @private
*/
- Group.prototype.getLabelWidth = function() {
- return this.props.label.width;
- };
+ ItemSet.prototype._addItem = function(item) {
+ this.items[item.id] = item;
+ // add to group
+ var groupId = this.groupsData ? item.data.group : UNGROUPED;
+ var group = this.groups[groupId];
+ if (group) group.add(item);
+ };
/**
- * Repaint this group
- * @param {{start: number, end: number}} range
- * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin
- * @param {boolean} [restack=false] Force restacking of all items
- * @return {boolean} Returns true if the group is resized
+ * Update an existing item
+ * @param {Item} item
+ * @param {Object} itemData
+ * @private
*/
- Group.prototype.redraw = function(range, margin, restack) {
- var resized = false;
-
- this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range);
-
- // force recalculation of the height of the items when the marker height changed
- // (due to the Timeline being attached to the DOM or changed from display:none to visible)
- var markerHeight = this.dom.marker.clientHeight;
- if (markerHeight != this.lastMarkerHeight) {
- this.lastMarkerHeight = markerHeight;
-
- util.forEach(this.items, function (item) {
- item.dirty = true;
- if (item.displayed) item.redraw();
- });
-
- restack = true;
- }
-
- // reposition visible items vertically
- if (this.itemSet.options.stack) { // TODO: ugly way to access options...
- stack.stack(this.visibleItems, margin, restack);
- }
- else { // no stacking
- stack.nostack(this.visibleItems, margin);
- }
-
- // recalculate the height of the group
- var height;
- var visibleItems = this.visibleItems;
- if (visibleItems.length) {
- var min = visibleItems[0].top;
- var max = visibleItems[0].top + visibleItems[0].height;
- util.forEach(visibleItems, function (item) {
- min = Math.min(min, item.top);
- max = Math.max(max, (item.top + item.height));
- });
- if (min > margin.axis) {
- // there is an empty gap between the lowest item and the axis
- var offset = min - margin.axis;
- max -= offset;
- util.forEach(visibleItems, function (item) {
- item.top -= offset;
- });
- }
- height = max + margin.item.vertical / 2;
- }
- else {
- height = margin.axis + margin.item.vertical;
- }
- height = Math.max(height, this.props.label.height);
-
- // calculate actual size and position
- var foreground = this.dom.foreground;
- this.top = foreground.offsetTop;
- this.left = foreground.offsetLeft;
- this.width = foreground.offsetWidth;
- resized = util.updateProperty(this, 'height', height) || resized;
-
- // recalculate size of label
- resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized;
- resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized;
-
- // apply new height
- this.dom.background.style.height = height + 'px';
- this.dom.foreground.style.height = height + 'px';
- this.dom.label.style.height = height + 'px';
-
- // update vertical position of items after they are re-stacked and the height of the group is calculated
- for (var i = 0, ii = this.visibleItems.length; i < ii; i++) {
- var item = this.visibleItems[i];
- item.repositionY();
- }
-
- return resized;
- };
-
- /**
- * Show this group: attach to the DOM
- */
- Group.prototype.show = function() {
- if (!this.dom.label.parentNode) {
- this.itemSet.dom.labelSet.appendChild(this.dom.label);
- }
-
- if (!this.dom.foreground.parentNode) {
- this.itemSet.dom.foreground.appendChild(this.dom.foreground);
- }
-
- if (!this.dom.background.parentNode) {
- this.itemSet.dom.background.appendChild(this.dom.background);
- }
-
- if (!this.dom.axis.parentNode) {
- this.itemSet.dom.axis.appendChild(this.dom.axis);
- }
- };
-
- /**
- * Hide this group: remove from the DOM
- */
- Group.prototype.hide = function() {
- var label = this.dom.label;
- if (label.parentNode) {
- label.parentNode.removeChild(label);
- }
+ ItemSet.prototype._updateItem = function(item, itemData) {
+ var oldGroupId = item.data.group;
- var foreground = this.dom.foreground;
- if (foreground.parentNode) {
- foreground.parentNode.removeChild(foreground);
+ item.data = itemData;
+ if (item.displayed) {
+ item.redraw();
}
- var background = this.dom.background;
- if (background.parentNode) {
- background.parentNode.removeChild(background);
- }
+ // update group
+ if (oldGroupId != item.data.group) {
+ var oldGroup = this.groups[oldGroupId];
+ if (oldGroup) oldGroup.remove(item);
- var axis = this.dom.axis;
- if (axis.parentNode) {
- axis.parentNode.removeChild(axis);
+ var groupId = this.groupsData ? item.data.group : UNGROUPED;
+ var group = this.groups[groupId];
+ if (group) group.add(item);
}
};
/**
- * Add an item to the group
+ * Delete an item from the ItemSet: remove it from the DOM, from the map
+ * with items, and from the map with visible items, and from the selection
* @param {Item} item
+ * @private
*/
- Group.prototype.add = function(item) {
- this.items[item.id] = item;
- item.setParent(this);
-
- if (item instanceof ItemRange && this.visibleItems.indexOf(item) == -1) {
- var range = this.itemSet.body.range; // TODO: not nice accessing the range like this
- this._checkIfVisible(item, this.visibleItems, range);
- }
- };
+ ItemSet.prototype._removeItem = function(item) {
+ // remove from DOM
+ item.hide();
- /**
- * Remove an item from the group
- * @param {Item} item
- */
- Group.prototype.remove = function(item) {
+ // remove from items
delete this.items[item.id];
- item.setParent(this.itemSet);
-
- // remove from visible items
- var index = this.visibleItems.indexOf(item);
- if (index != -1) this.visibleItems.splice(index, 1);
-
- // TODO: also remove from ordered items?
- };
-
- /**
- * Remove an item from the corresponding DataSet
- * @param {Item} item
- */
- Group.prototype.removeFromDataSet = function(item) {
- this.itemSet.removeItem(item.id);
- };
- /**
- * Reorder the items
- */
- Group.prototype.order = function() {
- var array = util.toArray(this.items);
- this.orderedItems.byStart = array;
- this.orderedItems.byEnd = this._constructByEndArray(array);
+ // remove from selection
+ var index = this.selection.indexOf(item.id);
+ if (index != -1) this.selection.splice(index, 1);
- stack.orderByStart(this.orderedItems.byStart);
- stack.orderByEnd(this.orderedItems.byEnd);
+ // remove from group
+ var groupId = this.groupsData ? item.data.group : UNGROUPED;
+ var group = this.groups[groupId];
+ if (group) group.remove(item);
};
/**
* Create an array containing all items being a range (having an end date)
- * @param {Item[]} array
- * @returns {ItemRange[]}
+ * @param array
+ * @returns {Array}
* @private
*/
- Group.prototype._constructByEndArray = function(array) {
+ ItemSet.prototype._constructByEndArray = function(array) {
var endArray = [];
for (var i = 0; i < array.length; i++) {
@@ -11412,714 +11635,824 @@ return /******/ (function(modules) { // webpackBootstrap
};
/**
- * Update the visible items
- * @param {{byStart: Item[], byEnd: Item[]}} orderedItems All items ordered by start date and by end date
- * @param {Item[]} visibleItems The previously visible items.
- * @param {{start: number, end: number}} range Visible range
- * @return {Item[]} visibleItems The new visible items.
+ * Register the clicked item on touch, before dragStart is initiated.
+ *
+ * dragStart is initiated from a mousemove event, which can have left the item
+ * already resulting in an item == null
+ *
+ * @param {Event} event
* @private
*/
- Group.prototype._updateVisibleItems = function(orderedItems, visibleItems, range) {
- var initialPosByStart,
- newVisibleItems = [],
- i;
+ ItemSet.prototype._onTouch = function (event) {
+ // store the touched item, used in _onDragStart
+ this.touchParams.item = ItemSet.itemFromTarget(event);
+ };
- // first check if the items that were in view previously are still in view.
- // this handles the case for the ItemRange that is both before and after the current one.
- if (visibleItems.length > 0) {
- for (i = 0; i < visibleItems.length; i++) {
- this._checkIfVisible(visibleItems[i], newVisibleItems, range);
- }
+ /**
+ * Start dragging the selected events
+ * @param {Event} event
+ * @private
+ */
+ ItemSet.prototype._onDragStart = function (event) {
+ if (!this.options.editable.updateTime && !this.options.editable.updateGroup) {
+ return;
}
- // If there were no visible items previously, use binarySearch to find a visible ItemPoint or ItemRange (based on startTime)
- if (newVisibleItems.length == 0) {
- initialPosByStart = util.binarySearch(orderedItems.byStart, range, 'data','start');
- }
- else {
- initialPosByStart = orderedItems.byStart.indexOf(newVisibleItems[0]);
- }
+ var item = this.touchParams.item || null,
+ me = this,
+ props;
- // use visible search to find a visible ItemRange (only based on endTime)
- var initialPosByEnd = util.binarySearch(orderedItems.byEnd, range, 'data','end');
+ if (item && item.selected) {
+ var dragLeftItem = event.target.dragLeftItem;
+ var dragRightItem = event.target.dragRightItem;
- // if we found a initial ID to use, trace it up and down until we meet an invisible item.
- if (initialPosByStart != -1) {
- for (i = initialPosByStart; i >= 0; i--) {
- if (this._checkIfInvisible(orderedItems.byStart[i], newVisibleItems, range)) {break;}
- }
- for (i = initialPosByStart + 1; i < orderedItems.byStart.length; i++) {
- if (this._checkIfInvisible(orderedItems.byStart[i], newVisibleItems, range)) {break;}
- }
- }
+ if (dragLeftItem) {
+ props = {
+ item: dragLeftItem
+ };
- // if we found a initial ID to use, trace it up and down until we meet an invisible item.
- if (initialPosByEnd != -1) {
- for (i = initialPosByEnd; i >= 0; i--) {
- if (this._checkIfInvisible(orderedItems.byEnd[i], newVisibleItems, range)) {break;}
- }
- for (i = initialPosByEnd + 1; i < orderedItems.byEnd.length; i++) {
- if (this._checkIfInvisible(orderedItems.byEnd[i], newVisibleItems, range)) {break;}
- }
- }
+ if (me.options.editable.updateTime) {
+ props.start = item.data.start.valueOf();
+ }
+ if (me.options.editable.updateGroup) {
+ if ('group' in item.data) props.group = item.data.group;
+ }
- return newVisibleItems;
- };
+ this.touchParams.itemProps = [props];
+ }
+ else if (dragRightItem) {
+ props = {
+ item: dragRightItem
+ };
+ if (me.options.editable.updateTime) {
+ props.end = item.data.end.valueOf();
+ }
+ if (me.options.editable.updateGroup) {
+ if ('group' in item.data) props.group = item.data.group;
+ }
+ this.touchParams.itemProps = [props];
+ }
+ else {
+ this.touchParams.itemProps = this.getSelection().map(function (id) {
+ var item = me.items[id];
+ var props = {
+ item: item
+ };
- /**
- * this function checks if an item is invisible. If it is NOT we make it visible
- * and add it to the global visible items. If it is, return true.
- *
- * @param {Item} item
- * @param {Item[]} visibleItems
- * @param {{start:number, end:number}} range
- * @returns {boolean}
- * @private
- */
- Group.prototype._checkIfInvisible = function(item, visibleItems, range) {
- if (item.isVisible(range)) {
- if (!item.displayed) item.show();
- item.repositionX();
- if (visibleItems.indexOf(item) == -1) {
- visibleItems.push(item);
+ if (me.options.editable.updateTime) {
+ if ('start' in item.data) props.start = item.data.start.valueOf();
+ if ('end' in item.data) props.end = item.data.end.valueOf();
+ }
+ if (me.options.editable.updateGroup) {
+ if ('group' in item.data) props.group = item.data.group;
+ }
+
+ return props;
+ });
}
- return false;
- }
- else {
- if (item.displayed) item.hide();
- return true;
+
+ event.stopPropagation();
}
};
/**
- * this function is very similar to the _checkIfInvisible() but it does not
- * return booleans, hides the item if it should not be seen and always adds to
- * the visibleItems.
- * this one is for brute forcing and hiding.
- *
- * @param {Item} item
- * @param {Array} visibleItems
- * @param {{start:number, end:number}} range
+ * Drag selected items
+ * @param {Event} event
* @private
*/
- Group.prototype._checkIfVisible = function(item, visibleItems, range) {
- if (item.isVisible(range)) {
- if (!item.displayed) item.show();
- // reposition item horizontally
- item.repositionX();
- visibleItems.push(item);
- }
- else {
- if (item.displayed) item.hide();
- }
- };
+ ItemSet.prototype._onDrag = function (event) {
+ if (this.touchParams.itemProps) {
+ var range = this.body.range,
+ snap = this.body.util.snap || null,
+ deltaX = event.gesture.deltaX,
+ scale = (this.props.width / (range.end - range.start)),
+ offset = deltaX / scale;
- module.exports = Group;
+ // move
+ this.touchParams.itemProps.forEach(function (props) {
+ if ('start' in props) {
+ var start = new Date(props.start + offset);
+ props.item.data.start = snap ? snap(start) : start;
+ }
+ if ('end' in props) {
+ var end = new Date(props.end + offset);
+ props.item.data.end = snap ? snap(end) : end;
+ }
-/***/ },
-/* 28 */
-/***/ function(module, exports, __webpack_require__) {
+ if ('group' in props) {
+ // drag from one group to another
+ var group = ItemSet.groupFromTarget(event);
+ if (group && group.groupId != props.item.data.group) {
+ var oldGroup = props.item.parent;
+ oldGroup.remove(props.item);
+ oldGroup.order();
+ group.add(props.item);
+ group.order();
- var Hammer = __webpack_require__(41);
- var util = __webpack_require__(1);
- var DataSet = __webpack_require__(3);
- var DataView = __webpack_require__(4);
- var Component = __webpack_require__(22);
- var Group = __webpack_require__(27);
- var ItemBox = __webpack_require__(19);
- var ItemPoint = __webpack_require__(20);
- var ItemRange = __webpack_require__(21);
+ props.item.data.group = group.groupId;
+ }
+ }
+ });
+ // TODO: implement onMoving handler
- var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items
+ this.stackDirty = true; // force re-stacking of all items next redraw
+ this.body.emitter.emit('change');
+
+ event.stopPropagation();
+ }
+ };
/**
- * An ItemSet holds a set of items and ranges which can be displayed in a
- * range. The width is determined by the parent of the ItemSet, and the height
- * is determined by the size of the items.
- * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body
- * @param {Object} [options] See ItemSet.setOptions for the available options.
- * @constructor ItemSet
- * @extends Component
+ * End of dragging selected items
+ * @param {Event} event
+ * @private
*/
- function ItemSet(body, options) {
- this.body = body;
+ ItemSet.prototype._onDragEnd = function (event) {
+ if (this.touchParams.itemProps) {
+ // prepare a change set for the changed items
+ var changes = [],
+ me = this,
+ dataset = this.itemsData.getDataSet();
- this.defaultOptions = {
- type: null, // 'box', 'point', 'range'
- orientation: 'bottom', // 'top' or 'bottom'
- align: 'center', // alignment of box items
- stack: true,
- groupOrder: null,
+ this.touchParams.itemProps.forEach(function (props) {
+ var id = props.item.id,
+ itemData = me.itemsData.get(id, me.itemOptions);
- selectable: true,
- editable: {
- updateTime: false,
- updateGroup: false,
- add: false,
- remove: false
- },
+ var changed = false;
+ if ('start' in props.item.data) {
+ changed = (props.start != props.item.data.start.valueOf());
+ itemData.start = util.convert(props.item.data.start,
+ dataset._options.type && dataset._options.type.start || 'Date');
+ }
+ if ('end' in props.item.data) {
+ changed = changed || (props.end != props.item.data.end.valueOf());
+ itemData.end = util.convert(props.item.data.end,
+ dataset._options.type && dataset._options.type.end || 'Date');
+ }
+ if ('group' in props.item.data) {
+ changed = changed || (props.group != props.item.data.group);
+ itemData.group = props.item.data.group;
+ }
- onAdd: function (item, callback) {
- callback(item);
- },
- onUpdate: function (item, callback) {
- callback(item);
- },
- onMove: function (item, callback) {
- callback(item);
- },
- onRemove: function (item, callback) {
- callback(item);
- },
+ // only apply changes when start or end is actually changed
+ if (changed) {
+ me.options.onMove(itemData, function (itemData) {
+ if (itemData) {
+ // apply changes
+ itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined)
+ changes.push(itemData);
+ }
+ else {
+ // restore original values
+ if ('start' in props) props.item.data.start = props.start;
+ if ('end' in props) props.item.data.end = props.end;
- margin: {
- item: {
- horizontal: 10,
- vertical: 10
- },
- axis: 20
- },
- padding: 5
- };
+ me.stackDirty = true; // force re-stacking of all items next redraw
+ me.body.emitter.emit('change');
+ }
+ });
+ }
+ });
+ this.touchParams.itemProps = null;
- // options is shared by this ItemSet and all its items
- this.options = util.extend({}, this.defaultOptions);
+ // apply the changes to the data (if there are changes)
+ if (changes.length) {
+ dataset.update(changes);
+ }
- // options for getting items from the DataSet with the correct type
- this.itemOptions = {
- type: {start: 'Date', end: 'Date'}
- };
+ event.stopPropagation();
+ }
+ };
- this.conversion = {
- toScreen: body.util.toScreen,
- toTime: body.util.toTime
- };
- this.dom = {};
- this.props = {};
- this.hammer = null;
+ /**
+ * Handle selecting/deselecting an item when tapping it
+ * @param {Event} event
+ * @private
+ */
+ ItemSet.prototype._onSelectItem = function (event) {
+ if (!this.options.selectable) return;
- var me = this;
- this.itemsData = null; // DataSet
- this.groupsData = null; // DataSet
+ var ctrlKey = event.gesture.srcEvent && event.gesture.srcEvent.ctrlKey;
+ var shiftKey = event.gesture.srcEvent && event.gesture.srcEvent.shiftKey;
+ if (ctrlKey || shiftKey) {
+ this._onMultiSelectItem(event);
+ return;
+ }
- // listeners for the DataSet of the items
- this.itemListeners = {
- 'add': function (event, params, senderId) {
- me._onAdd(params.items);
- },
- 'update': function (event, params, senderId) {
- me._onUpdate(params.items);
- },
- 'remove': function (event, params, senderId) {
- me._onRemove(params.items);
- }
- };
+ var oldSelection = this.getSelection();
- // listeners for the DataSet of the groups
- this.groupListeners = {
- 'add': function (event, params, senderId) {
- me._onAddGroups(params.items);
- },
- 'update': function (event, params, senderId) {
- me._onUpdateGroups(params.items);
- },
- 'remove': function (event, params, senderId) {
- me._onRemoveGroups(params.items);
- }
- };
+ var item = ItemSet.itemFromTarget(event);
+ var selection = item ? [item.id] : [];
+ this.setSelection(selection);
- this.items = {}; // object with an Item for every data item
- this.groups = {}; // Group object for every group
- this.groupIds = [];
+ var newSelection = this.getSelection();
- this.selection = []; // list with the ids of all selected nodes
- this.stackDirty = true; // if true, all items will be restacked on next redraw
+ // emit a select event,
+ // except when old selection is empty and new selection is still empty
+ if (newSelection.length > 0 || oldSelection.length > 0) {
+ this.body.emitter.emit('select', {
+ items: this.getSelection()
+ });
+ }
- this.touchParams = {}; // stores properties while dragging
- // create the HTML DOM
+ event.stopPropagation();
+ };
- this._create();
+ /**
+ * Handle creation and updates of an item on double tap
+ * @param event
+ * @private
+ */
+ ItemSet.prototype._onAddItem = function (event) {
+ if (!this.options.selectable) return;
+ if (!this.options.editable.add) return;
- this.setOptions(options);
- }
+ var me = this,
+ snap = this.body.util.snap || null,
+ item = ItemSet.itemFromTarget(event);
- ItemSet.prototype = new Component();
+ if (item) {
+ // update item
- // available item types will be registered here
- ItemSet.types = {
- box: ItemBox,
- range: ItemRange,
- point: ItemPoint
+ // execute async handler to update the item (or cancel it)
+ var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset
+ this.options.onUpdate(itemData, function (itemData) {
+ if (itemData) {
+ me.itemsData.update(itemData);
+ }
+ });
+ }
+ else {
+ // add item
+ var xAbs = util.getAbsoluteLeft(this.dom.frame);
+ var x = event.gesture.center.pageX - xAbs;
+ var start = this.body.util.toTime(x);
+ var newItem = {
+ start: snap ? snap(start) : start,
+ content: 'new item'
+ };
+
+ // when default type is a range, add a default end date to the new item
+ if (this.options.type === 'range') {
+ var end = this.body.util.toTime(x + this.props.width / 5);
+ newItem.end = snap ? snap(end) : end;
+ }
+
+ newItem[this.itemsData.fieldId] = util.randomUUID();
+
+ var group = ItemSet.groupFromTarget(event);
+ if (group) {
+ newItem.group = group.groupId;
+ }
+
+ // execute async handler to customize (or cancel) adding an item
+ this.options.onAdd(newItem, function (item) {
+ if (item) {
+ me.itemsData.add(newItem);
+ // TODO: need to trigger a redraw?
+ }
+ });
+ }
};
/**
- * Create the HTML DOM for the ItemSet
+ * Handle selecting/deselecting multiple items when holding an item
+ * @param {Event} event
+ * @private
*/
- ItemSet.prototype._create = function(){
- var frame = document.createElement('div');
- frame.className = 'itemset';
- frame['timeline-itemset'] = this;
- this.dom.frame = frame;
-
- // create background panel
- var background = document.createElement('div');
- background.className = 'background';
- frame.appendChild(background);
- this.dom.background = background;
+ ItemSet.prototype._onMultiSelectItem = function (event) {
+ if (!this.options.selectable) return;
- // create foreground panel
- var foreground = document.createElement('div');
- foreground.className = 'foreground';
- frame.appendChild(foreground);
- this.dom.foreground = foreground;
+ var selection,
+ item = ItemSet.itemFromTarget(event);
- // create axis panel
- var axis = document.createElement('div');
- axis.className = 'axis';
- this.dom.axis = axis;
+ if (item) {
+ // multi select items
+ selection = this.getSelection(); // current selection
+ var index = selection.indexOf(item.id);
+ if (index == -1) {
+ // item is not yet selected -> select it
+ selection.push(item.id);
+ }
+ else {
+ // item is already selected -> deselect it
+ selection.splice(index, 1);
+ }
+ this.setSelection(selection);
- // create labelset
- var labelSet = document.createElement('div');
- labelSet.className = 'labelset';
- this.dom.labelSet = labelSet;
+ this.body.emitter.emit('select', {
+ items: this.getSelection()
+ });
- // create ungrouped Group
- this._updateUngrouped();
+ event.stopPropagation();
+ }
+ };
- // attach event listeners
- // Note: we bind to the centerContainer for the case where the height
- // of the center container is larger than of the ItemSet, so we
- // can click in the empty area to create a new item or deselect an item.
- this.hammer = Hammer(this.body.dom.centerContainer, {
- prevent_default: true
- });
+ /**
+ * Find an item from an event target:
+ * searches for the attribute 'timeline-item' in the event target's element tree
+ * @param {Event} event
+ * @return {Item | null} item
+ */
+ ItemSet.itemFromTarget = function(event) {
+ var target = event.target;
+ while (target) {
+ if (target.hasOwnProperty('timeline-item')) {
+ return target['timeline-item'];
+ }
+ target = target.parentNode;
+ }
- // drag items when selected
- this.hammer.on('touch', this._onTouch.bind(this));
- this.hammer.on('dragstart', this._onDragStart.bind(this));
- this.hammer.on('drag', this._onDrag.bind(this));
- this.hammer.on('dragend', this._onDragEnd.bind(this));
+ return null;
+ };
- // single select (or unselect) when tapping an item
- this.hammer.on('tap', this._onSelectItem.bind(this));
+ /**
+ * Find the Group from an event target:
+ * searches for the attribute 'timeline-group' in the event target's element tree
+ * @param {Event} event
+ * @return {Group | null} group
+ */
+ ItemSet.groupFromTarget = function(event) {
+ var target = event.target;
+ while (target) {
+ if (target.hasOwnProperty('timeline-group')) {
+ return target['timeline-group'];
+ }
+ target = target.parentNode;
+ }
- // multi select when holding mouse/touch, or on ctrl+click
- this.hammer.on('hold', this._onMultiSelectItem.bind(this));
+ return null;
+ };
- // add item on doubletap
- this.hammer.on('doubletap', this._onAddItem.bind(this));
+ /**
+ * Find the ItemSet from an event target:
+ * searches for the attribute 'timeline-itemset' in the event target's element tree
+ * @param {Event} event
+ * @return {ItemSet | null} item
+ */
+ ItemSet.itemSetFromTarget = function(event) {
+ var target = event.target;
+ while (target) {
+ if (target.hasOwnProperty('timeline-itemset')) {
+ return target['timeline-itemset'];
+ }
+ target = target.parentNode;
+ }
- // attach to the DOM
- this.show();
+ return null;
};
+ module.exports = ItemSet;
+
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var util = __webpack_require__(1);
+ var DOMutil = __webpack_require__(2);
+ var Component = __webpack_require__(18);
+
/**
- * Set options for the ItemSet. Existing options will be extended/overwritten.
- * @param {Object} [options] The following options are available:
- * {String} type
- * Default type for the items. Choose from 'box'
- * (default), 'point', or 'range'. The default
- * Style can be overwritten by individual items.
- * {String} align
- * Alignment for the items, only applicable for
- * ItemBox. Choose 'center' (default), 'left', or
- * 'right'.
- * {String} orientation
- * Orientation of the item set. Choose 'top' or
- * 'bottom' (default).
- * {Function} groupOrder
- * A sorting function for ordering groups
- * {Boolean} stack
- * If true (deafult), items will be stacked on
- * top of each other.
- * {Number} margin.axis
- * Margin between the axis and the items in pixels.
- * Default is 20.
- * {Number} margin.item.horizontal
- * Horizontal margin between items in pixels.
- * Default is 10.
- * {Number} margin.item.vertical
- * Vertical Margin between items in pixels.
- * Default is 10.
- * {Number} margin.item
- * Margin between items in pixels in both horizontal
- * and vertical direction. Default is 10.
- * {Number} margin
- * Set margin for both axis and items in pixels.
- * {Number} padding
- * Padding of the contents of an item in pixels.
- * Must correspond with the items css. Default is 5.
- * {Boolean} selectable
- * If true (default), items can be selected.
- * {Boolean} editable
- * Set all editable options to true or false
- * {Boolean} editable.updateTime
- * Allow dragging an item to an other moment in time
- * {Boolean} editable.updateGroup
- * Allow dragging an item to an other group
- * {Boolean} editable.add
- * Allow creating new items on double tap
- * {Boolean} editable.remove
- * Allow removing items by clicking the delete button
- * top right of a selected item.
- * {Function(item: Item, callback: Function)} onAdd
- * Callback function triggered when an item is about to be added:
- * when the user double taps an empty space in the Timeline.
- * {Function(item: Item, callback: Function)} onUpdate
- * Callback function fired when an item is about to be updated.
- * This function typically has to show a dialog where the user
- * change the item. If not implemented, nothing happens.
- * {Function(item: Item, callback: Function)} onMove
- * Fired when an item has been moved. If not implemented,
- * the move action will be accepted.
- * {Function(item: Item, callback: Function)} onRemove
- * Fired when an item is about to be deleted.
- * If not implemented, the item will be always removed.
+ * Legend for Graph2d
*/
- ItemSet.prototype.setOptions = function(options) {
- if (options) {
- // copy all options that we know
- var fields = ['type', 'align', 'orientation', 'padding', 'stack', 'selectable', 'groupOrder'];
- util.selectiveExtend(fields, this.options, options);
-
- if ('margin' in options) {
- if (typeof options.margin === 'number') {
- this.options.margin.axis = options.margin;
- this.options.margin.item.horizontal = options.margin;
- this.options.margin.item.vertical = options.margin;
- }
- else if (typeof options.margin === 'object') {
- util.selectiveExtend(['axis'], this.options.margin, options.margin);
- if ('item' in options.margin) {
- if (typeof options.margin.item === 'number') {
- this.options.margin.item.horizontal = options.margin.item;
- this.options.margin.item.vertical = options.margin.item;
- }
- else if (typeof options.margin.item === 'object') {
- util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item);
- }
- }
- }
+ function Legend(body, options, side) {
+ this.body = body;
+ this.defaultOptions = {
+ enabled: true,
+ icons: true,
+ iconSize: 20,
+ iconSpacing: 6,
+ left: {
+ visible: true,
+ position: 'top-left' // top/bottom - left,center,right
+ },
+ right: {
+ visible: true,
+ position: 'top-left' // top/bottom - left,center,right
}
+ }
+ this.side = side;
+ this.options = util.extend({},this.defaultOptions);
- if ('editable' in options) {
- if (typeof options.editable === 'boolean') {
- this.options.editable.updateTime = options.editable;
- this.options.editable.updateGroup = options.editable;
- this.options.editable.add = options.editable;
- this.options.editable.remove = options.editable;
- }
- else if (typeof options.editable === 'object') {
- util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove'], this.options.editable, options.editable);
- }
- }
+ this.svgElements = {};
+ this.dom = {};
+ this.groups = {};
+ this.amountOfGroups = 0;
+ this._create();
- // callback functions
- var addCallback = (function (name) {
- if (name in options) {
- var fn = options[name];
- if (!(fn instanceof Function)) {
- throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)');
- }
- this.options[name] = fn;
- }
- }).bind(this);
- ['onAdd', 'onUpdate', 'onRemove', 'onMove'].forEach(addCallback);
+ this.setOptions(options);
+ }
- // force the itemSet to refresh: options like orientation and margins may be changed
- this.markDirty();
+ Legend.prototype = new Component();
+
+
+ Legend.prototype.addGroup = function(label, graphOptions) {
+ if (!this.groups.hasOwnProperty(label)) {
+ this.groups[label] = graphOptions;
}
+ this.amountOfGroups += 1;
};
- /**
- * Mark the ItemSet dirty so it will refresh everything with next redraw
- */
- ItemSet.prototype.markDirty = function() {
- this.groupIds = [];
- this.stackDirty = true;
+ Legend.prototype.updateGroup = function(label, graphOptions) {
+ this.groups[label] = graphOptions;
};
- /**
- * Destroy the ItemSet
- */
- ItemSet.prototype.destroy = function() {
- this.hide();
- this.setItems(null);
- this.setGroups(null);
+ Legend.prototype.removeGroup = function(label) {
+ if (this.groups.hasOwnProperty(label)) {
+ delete this.groups[label];
+ this.amountOfGroups -= 1;
+ }
+ };
- this.hammer = null;
+ Legend.prototype._create = function() {
+ this.dom.frame = document.createElement('div');
+ this.dom.frame.className = 'legend';
+ this.dom.frame.style.position = "absolute";
+ this.dom.frame.style.top = "10px";
+ this.dom.frame.style.display = "block";
- this.body = null;
- this.conversion = null;
+ this.dom.textArea = document.createElement('div');
+ this.dom.textArea.className = 'legendText';
+ this.dom.textArea.style.position = "relative";
+ this.dom.textArea.style.top = "0px";
+
+ this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg");
+ this.svg.style.position = 'absolute';
+ this.svg.style.top = 0 +'px';
+ this.svg.style.width = this.options.iconSize + 5 + 'px';
+
+ this.dom.frame.appendChild(this.svg);
+ this.dom.frame.appendChild(this.dom.textArea);
};
/**
* Hide the component from the DOM
*/
- ItemSet.prototype.hide = function() {
+ Legend.prototype.hide = function() {
// remove the frame containing the items
if (this.dom.frame.parentNode) {
this.dom.frame.parentNode.removeChild(this.dom.frame);
}
-
- // remove the axis with dots
- if (this.dom.axis.parentNode) {
- this.dom.axis.parentNode.removeChild(this.dom.axis);
- }
-
- // remove the labelset containing all group labels
- if (this.dom.labelSet.parentNode) {
- this.dom.labelSet.parentNode.removeChild(this.dom.labelSet);
- }
};
/**
* Show the component in the DOM (when not already visible).
* @return {Boolean} changed
*/
- ItemSet.prototype.show = function() {
+ Legend.prototype.show = function() {
// show frame containing the items
if (!this.dom.frame.parentNode) {
this.body.dom.center.appendChild(this.dom.frame);
}
-
- // show axis with dots
- if (!this.dom.axis.parentNode) {
- this.body.dom.backgroundVertical.appendChild(this.dom.axis);
- }
-
- // show labelset containing labels
- if (!this.dom.labelSet.parentNode) {
- this.body.dom.left.appendChild(this.dom.labelSet);
- }
};
- /**
- * Set selected items by their id. Replaces the current selection
- * Unknown id's are silently ignored.
- * @param {Array} [ids] An array with zero or more id's of the items to be
- * selected. If ids is an empty array, all items will be
- * unselected.
- */
- ItemSet.prototype.setSelection = function(ids) {
- var i, ii, id, item;
+ Legend.prototype.setOptions = function(options) {
+ var fields = ['enabled','orientation','icons','left','right'];
+ util.selectiveDeepExtend(fields, this.options, options);
+ };
- if (ids) {
- if (!Array.isArray(ids)) {
- throw new TypeError('Array expected');
+ Legend.prototype.redraw = function() {
+ if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false) {
+ this.hide();
+ }
+ else {
+ this.show();
+ if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') {
+ this.dom.frame.style.left = '4px';
+ this.dom.frame.style.textAlign = "left";
+ this.dom.textArea.style.textAlign = "left";
+ this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px';
+ this.dom.textArea.style.right = '';
+ this.svg.style.left = 0 +'px';
+ this.svg.style.right = '';
+ }
+ else {
+ this.dom.frame.style.right = '4px';
+ this.dom.frame.style.textAlign = "right";
+ this.dom.textArea.style.textAlign = "right";
+ this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px';
+ this.dom.textArea.style.left = '';
+ this.svg.style.right = 0 +'px';
+ this.svg.style.left = '';
}
- // unselect currently selected items
- for (i = 0, ii = this.selection.length; i < ii; i++) {
- id = this.selection[i];
- item = this.items[id];
- if (item) item.unselect();
+ if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') {
+ this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px';
+ this.dom.frame.style.bottom = '';
+ }
+ else {
+ this.dom.frame.style.bottom = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px';
+ this.dom.frame.style.top = '';
}
- // select items
- this.selection = [];
- for (i = 0, ii = ids.length; i < ii; i++) {
- id = ids[i];
- item = this.items[id];
- if (item) {
- this.selection.push(id);
- item.select();
- }
+ if (this.options.icons == false) {
+ this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px';
+ this.dom.textArea.style.right = '';
+ this.dom.textArea.style.left = '';
+ this.svg.style.width = '0px';
+ }
+ else {
+ this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px'
+ this.drawLegendIcons();
}
- }
- };
- /**
- * Get the selected items by their id
- * @return {Array} ids The ids of the selected items
- */
- ItemSet.prototype.getSelection = function() {
- return this.selection.concat([]);
+ var content = '';
+ for (var groupId in this.groups) {
+ if (this.groups.hasOwnProperty(groupId)) {
+ content += this.groups[groupId].content + ' ';
+ }
+ }
+ this.dom.textArea.innerHTML = content;
+ this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px';
+ }
};
- /**
- * Get the id's of the currently visible items.
- * @returns {Array} The ids of the visible items
- */
- ItemSet.prototype.getVisibleItems = function() {
- var range = this.body.range.getRange();
- var left = this.body.util.toScreen(range.start);
- var right = this.body.util.toScreen(range.end);
+ Legend.prototype.drawLegendIcons = function() {
+ if (this.dom.frame.parentNode) {
+ DOMutil.prepareElements(this.svgElements);
+ var padding = window.getComputedStyle(this.dom.frame).paddingTop;
+ var iconOffset = Number(padding.replace('px',''));
+ var x = iconOffset;
+ var iconWidth = this.options.iconSize;
+ var iconHeight = 0.75 * this.options.iconSize;
+ var y = iconOffset + 0.5 * iconHeight + 3;
- var ids = [];
- for (var groupId in this.groups) {
- if (this.groups.hasOwnProperty(groupId)) {
- var group = this.groups[groupId];
- var rawVisibleItems = group.visibleItems;
+ this.svg.style.width = iconWidth + 5 + iconOffset + 'px';
- // filter the "raw" set with visibleItems into a set which is really
- // visible by pixels
- for (var i = 0; i < rawVisibleItems.length; i++) {
- var item = rawVisibleItems[i];
- // TODO: also check whether visible vertically
- if ((item.left < right) && (item.left + item.width > left)) {
- ids.push(item.id);
- }
+ for (var groupId in this.groups) {
+ if (this.groups.hasOwnProperty(groupId)) {
+ this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight);
+ y += iconHeight + this.options.iconSpacing;
}
}
- }
-
- return ids;
- };
- /**
- * Deselect a selected item
- * @param {String | Number} id
- * @private
- */
- ItemSet.prototype._deselect = function(id) {
- var selection = this.selection;
- for (var i = 0, ii = selection.length; i < ii; i++) {
- if (selection[i] == id) { // non-strict comparison!
- selection.splice(i, 1);
- break;
- }
+ DOMutil.cleanupElements(this.svgElements);
}
};
- /**
- * Repaint the component
- * @return {boolean} Returns true if the component is resized
- */
- ItemSet.prototype.redraw = function() {
- var margin = this.options.margin,
- range = this.body.range,
- asSize = util.option.asSize,
- options = this.options,
- orientation = options.orientation,
- resized = false,
- frame = this.dom.frame,
- editable = options.editable.updateTime || options.editable.updateGroup;
-
- // update class name
- frame.className = 'itemset' + (editable ? ' editable' : '');
-
- // reorder the groups (if needed)
- resized = this._orderGroups() || resized;
-
- // check whether zoomed (in that case we need to re-stack everything)
- // TODO: would be nicer to get this as a trigger from Range
- var visibleInterval = range.end - range.start;
- var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.props.width != this.props.lastWidth);
- if (zoomed) this.stackDirty = true;
- this.lastVisibleInterval = visibleInterval;
- this.props.lastWidth = this.props.width;
-
- // redraw all groups
- var restack = this.stackDirty,
- firstGroup = this._firstGroup(),
- firstMargin = {
- item: margin.item,
- axis: margin.axis
- },
- nonFirstMargin = {
- item: margin.item,
- axis: margin.item.vertical / 2
- },
- height = 0,
- minHeight = margin.axis + margin.item.vertical;
- util.forEach(this.groups, function (group) {
- var groupMargin = (group == firstGroup) ? firstMargin : nonFirstMargin;
- var groupResized = group.redraw(range, groupMargin, restack);
- resized = groupResized || resized;
- height += group.height;
- });
- height = Math.max(height, minHeight);
- this.stackDirty = false;
-
- // update frame height
- frame.style.height = asSize(height);
-
- // calculate actual size and position
- this.props.top = frame.offsetTop;
- this.props.left = frame.offsetLeft;
- this.props.width = frame.offsetWidth;
- this.props.height = height;
-
- // reposition axis
- this.dom.axis.style.top = asSize((orientation == 'top') ?
- (this.body.domProps.top.height + this.body.domProps.border.top) :
- (this.body.domProps.top.height + this.body.domProps.centerContainer.height));
- this.dom.axis.style.left = this.body.domProps.border.left + 'px';
+ module.exports = Legend;
- // check if this component is resized
- resized = this._isResized() || resized;
- return resized;
- };
+/***/ },
+/* 26 */
+/***/ function(module, exports, __webpack_require__) {
- /**
- * Get the first group, aligned with the axis
- * @return {Group | null} firstGroup
- * @private
- */
- ItemSet.prototype._firstGroup = function() {
- var firstGroupIndex = (this.options.orientation == 'top') ? 0 : (this.groupIds.length - 1);
- var firstGroupId = this.groupIds[firstGroupIndex];
- var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED];
+ var util = __webpack_require__(1);
+ var DOMutil = __webpack_require__(2);
+ var DataSet = __webpack_require__(3);
+ var DataView = __webpack_require__(4);
+ var Component = __webpack_require__(18);
+ var DataAxis = __webpack_require__(21);
+ var GraphGroup = __webpack_require__(22);
+ var Legend = __webpack_require__(25);
- return firstGroup || null;
- };
+ var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items
/**
- * Create or delete the group holding all ungrouped items. This group is used when
- * there are no groups specified.
- * @protected
+ * This is the constructor of the LineGraph. It requires a Timeline body and options.
+ *
+ * @param body
+ * @param options
+ * @constructor
*/
- ItemSet.prototype._updateUngrouped = function() {
- var ungrouped = this.groups[UNGROUPED];
+ function LineGraph(body, options) {
+ this.id = util.randomUUID();
+ this.body = body;
- if (this.groupsData) {
- // remove the group holding all ungrouped items
- if (ungrouped) {
- ungrouped.hide();
- delete this.groups[UNGROUPED];
+ this.defaultOptions = {
+ yAxisOrientation: 'left',
+ defaultGroup: 'default',
+ sort: true,
+ sampling: true,
+ graphHeight: '400px',
+ shaded: {
+ enabled: false,
+ orientation: 'bottom' // top, bottom
+ },
+ style: 'line', // line, bar
+ barChart: {
+ width: 50,
+ align: 'center' // left, center, right
+ },
+ catmullRom: {
+ enabled: true,
+ parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)
+ alpha: 0.5
+ },
+ drawPoints: {
+ enabled: true,
+ size: 6,
+ style: 'square' // square, circle
+ },
+ dataAxis: {
+ showMinorLabels: true,
+ showMajorLabels: true,
+ icons: false,
+ width: '40px',
+ visible: true
+ },
+ legend: {
+ enabled: false,
+ icons: true,
+ left: {
+ visible: true,
+ position: 'top-left' // top/bottom - left,right
+ },
+ right: {
+ visible: true,
+ position: 'top-right' // top/bottom - left,right
+ }
}
- }
- else {
- // create a group holding all (unfiltered) items
- if (!ungrouped) {
- var id = null;
- var data = null;
- ungrouped = new Group(id, data, this);
- this.groups[UNGROUPED] = ungrouped;
+ };
- for (var itemId in this.items) {
- if (this.items.hasOwnProperty(itemId)) {
- ungrouped.add(this.items[itemId]);
- }
- }
+ // options is shared by this ItemSet and all its items
+ this.options = util.extend({}, this.defaultOptions);
+ this.dom = {};
+ this.props = {};
+ this.hammer = null;
+ this.groups = {};
- ungrouped.show();
+ var me = this;
+ this.itemsData = null; // DataSet
+ this.groupsData = null; // DataSet
+
+ // listeners for the DataSet of the items
+ this.itemListeners = {
+ 'add': function (event, params, senderId) {
+ me._onAdd(params.items);
+ },
+ 'update': function (event, params, senderId) {
+ me._onUpdate(params.items);
+ },
+ 'remove': function (event, params, senderId) {
+ me._onRemove(params.items);
}
- }
- };
+ };
- /**
- * Get the element for the labelset
- * @return {HTMLElement} labelSet
+ // listeners for the DataSet of the groups
+ this.groupListeners = {
+ 'add': function (event, params, senderId) {
+ me._onAddGroups(params.items);
+ },
+ 'update': function (event, params, senderId) {
+ me._onUpdateGroups(params.items);
+ },
+ 'remove': function (event, params, senderId) {
+ me._onRemoveGroups(params.items);
+ }
+ };
+
+ this.items = {}; // object with an Item for every data item
+ this.selection = []; // list with the ids of all selected nodes
+ this.lastStart = this.body.range.start;
+ this.touchParams = {}; // stores properties while dragging
+
+ this.svgElements = {};
+ this.setOptions(options);
+ this.groupsUsingDefaultStyles = [0];
+
+ this.body.emitter.on("rangechange",function() {
+ if (me.lastStart != 0) {
+ var offset = me.body.range.start - me.lastStart;
+ var range = me.body.range.end - me.body.range.start;
+ if (me.width != 0) {
+ var rangePerPixelInv = me.width/range;
+ var xOffset = offset * rangePerPixelInv;
+ me.svg.style.left = (-me.width - xOffset) + "px";
+ }
+ }
+ });
+ this.body.emitter.on("rangechanged", function() {
+ me.lastStart = me.body.range.start;
+ me.svg.style.left = util.option.asSize(-me.width);
+ me._updateGraph.apply(me);
+ });
+
+ // create the HTML DOM
+ this._create();
+ this.body.emitter.emit("change");
+ }
+
+ LineGraph.prototype = new Component();
+
+ /**
+ * Create the HTML DOM for the ItemSet
*/
- ItemSet.prototype.getLabelSet = function() {
- return this.dom.labelSet;
+ LineGraph.prototype._create = function(){
+ var frame = document.createElement('div');
+ frame.className = 'LineGraph';
+ this.dom.frame = frame;
+
+ // create svg element for graph drawing.
+ this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg");
+ this.svg.style.position = "relative";
+ this.svg.style.height = ('' + this.options.graphHeight).replace("px",'') + 'px';
+ this.svg.style.display = "block";
+ frame.appendChild(this.svg);
+
+ // data axis
+ this.options.dataAxis.orientation = 'left';
+ this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg);
+
+ this.options.dataAxis.orientation = 'right';
+ this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg);
+ delete this.options.dataAxis.orientation;
+
+ // legends
+ this.legendLeft = new Legend(this.body, this.options.legend, 'left');
+ this.legendRight = new Legend(this.body, this.options.legend, 'right');
+
+ this.show();
+ };
+
+ /**
+ * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element.
+ * @param options
+ */
+ LineGraph.prototype.setOptions = function(options) {
+ if (options) {
+ var fields = ['sampling','defaultGroup','graphHeight','yAxisOrientation','style','barChart','dataAxis','sort'];
+ util.selectiveDeepExtend(fields, this.options, options);
+ util.mergeOptions(this.options, options,'catmullRom');
+ util.mergeOptions(this.options, options,'drawPoints');
+ util.mergeOptions(this.options, options,'shaded');
+ util.mergeOptions(this.options, options,'legend');
+
+ if (options.catmullRom) {
+ if (typeof options.catmullRom == 'object') {
+ if (options.catmullRom.parametrization) {
+ if (options.catmullRom.parametrization == 'uniform') {
+ this.options.catmullRom.alpha = 0;
+ }
+ else if (options.catmullRom.parametrization == 'chordal') {
+ this.options.catmullRom.alpha = 1.0;
+ }
+ else {
+ this.options.catmullRom.parametrization = 'centripetal';
+ this.options.catmullRom.alpha = 0.5;
+ }
+ }
+ }
+ }
+
+ if (this.yAxisLeft) {
+ if (options.dataAxis !== undefined) {
+ this.yAxisLeft.setOptions(this.options.dataAxis);
+ this.yAxisRight.setOptions(this.options.dataAxis);
+ }
+ }
+
+ if (this.legendLeft) {
+ if (options.legend !== undefined) {
+ this.legendLeft.setOptions(this.options.legend);
+ this.legendRight.setOptions(this.options.legend);
+ }
+ }
+
+ if (this.groups.hasOwnProperty(UNGROUPED)) {
+ this.groups[UNGROUPED].setOptions(options);
+ }
+ }
+ if (this.dom.frame) {
+ this._updateGraph();
+ }
+ };
+
+ /**
+ * Hide the component from the DOM
+ */
+ LineGraph.prototype.hide = function() {
+ // remove the frame containing the items
+ if (this.dom.frame.parentNode) {
+ this.dom.frame.parentNode.removeChild(this.dom.frame);
+ }
+ };
+
+ /**
+ * Show the component in the DOM (when not already visible).
+ * @return {Boolean} changed
+ */
+ LineGraph.prototype.show = function() {
+ // show frame containing the items
+ if (!this.dom.frame.parentNode) {
+ this.body.dom.center.appendChild(this.dom.frame);
+ }
};
+
/**
* Set items
* @param {vis.DataSet | null} items
*/
- ItemSet.prototype.setItems = function(items) {
+ LineGraph.prototype.setItems = function(items) {
var me = this,
- ids,
- oldItemsData = this.itemsData;
+ ids,
+ oldItemsData = this.itemsData;
// replace the dataset
if (!items) {
@@ -12153,27 +12486,19 @@ return /******/ (function(modules) { // webpackBootstrap
// add all new items
ids = this.itemsData.getIds();
this._onAdd(ids);
-
- // update the group holding all ungrouped items
- this._updateUngrouped();
}
- };
-
- /**
- * Get the current items
- * @returns {vis.DataSet | null}
- */
- ItemSet.prototype.getItems = function() {
- return this.itemsData;
+ this._updateUngrouped();
+ this._updateGraph();
+ this.redraw();
};
/**
* Set groups
* @param {vis.DataSet} groups
*/
- ItemSet.prototype.setGroups = function(groups) {
+ LineGraph.prototype.setGroups = function(groups) {
var me = this,
- ids;
+ ids;
// unsubscribe from current dataset
if (this.groupsData) {
@@ -12209,2430 +12534,2105 @@ return /******/ (function(modules) { // webpackBootstrap
ids = this.groupsData.getIds();
this._onAddGroups(ids);
}
+ this._onUpdate();
+ };
- // update the group holding all ungrouped items
- this._updateUngrouped();
- // update the order of all items in each group
- this._order();
- this.body.emitter.emit('change');
+ LineGraph.prototype._onUpdate = function(ids) {
+ this._updateUngrouped();
+ this._updateAllGroupData();
+ this._updateGraph();
+ this.redraw();
};
+ LineGraph.prototype._onAdd = function (ids) {this._onUpdate(ids);};
+ LineGraph.prototype._onRemove = function (ids) {this._onUpdate(ids);};
+ LineGraph.prototype._onUpdateGroups = function (groupIds) {
+ for (var i = 0; i < groupIds.length; i++) {
+ var group = this.groupsData.get(groupIds[i]);
+ this._updateGroup(group, groupIds[i]);
+ }
- /**
- * Get the current groups
- * @returns {vis.DataSet | null} groups
- */
- ItemSet.prototype.getGroups = function() {
- return this.groupsData;
+ this._updateGraph();
+ this.redraw();
};
+ LineGraph.prototype._onAddGroups = function (groupIds) {this._onUpdateGroups(groupIds);};
- /**
- * Remove an item by its id
- * @param {String | Number} id
- */
- ItemSet.prototype.removeItem = function(id) {
- var item = this.itemsData.get(id),
- dataset = this.itemsData.getDataSet();
-
- if (item) {
- // confirm deletion
- this.options.onRemove(item, function (item) {
- if (item) {
- // remove by id here, it is possible that an item has no id defined
- // itself, so better not delete by the item itself
- dataset.remove(id);
+ LineGraph.prototype._onRemoveGroups = function (groupIds) {
+ for (var i = 0; i < groupIds.length; i++) {
+ if (!this.groups.hasOwnProperty(groupIds[i])) {
+ if (this.groups[groupIds[i]].options.yAxisOrientation == 'right') {
+ this.yAxisRight.removeGroup(groupIds[i]);
+ this.legendRight.removeGroup(groupIds[i]);
+ this.legendRight.redraw();
}
- });
+ else {
+ this.yAxisLeft.removeGroup(groupIds[i]);
+ this.legendLeft.removeGroup(groupIds[i]);
+ this.legendLeft.redraw();
+ }
+ delete this.groups[groupIds[i]];
+ }
}
+ this._updateUngrouped();
+ this._updateGraph();
+ this.redraw();
};
/**
- * Handle updated items
- * @param {Number[]} ids
- * @protected
+ * update a group object
+ *
+ * @param group
+ * @param groupId
+ * @private
*/
- ItemSet.prototype._onUpdate = function(ids) {
- var me = this;
-
- ids.forEach(function (id) {
- var itemData = me.itemsData.get(id, me.itemOptions),
- item = me.items[id],
- type = itemData.type || me.options.type || (itemData.end ? 'range' : 'box');
-
- var constructor = ItemSet.types[type];
-
- if (item) {
- // update item
- if (!constructor || !(item instanceof constructor)) {
- // item type has changed, delete the item and recreate it
- me._removeItem(item);
- item = null;
- }
- else {
- me._updateItem(item, itemData);
- }
+ LineGraph.prototype._updateGroup = function (group, groupId) {
+ if (!this.groups.hasOwnProperty(groupId)) {
+ this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles);
+ if (this.groups[groupId].options.yAxisOrientation == 'right') {
+ this.yAxisRight.addGroup(groupId, this.groups[groupId]);
+ this.legendRight.addGroup(groupId, this.groups[groupId]);
+ }
+ else {
+ this.yAxisLeft.addGroup(groupId, this.groups[groupId]);
+ this.legendLeft.addGroup(groupId, this.groups[groupId]);
+ }
+ }
+ else {
+ this.groups[groupId].update(group);
+ if (this.groups[groupId].options.yAxisOrientation == 'right') {
+ this.yAxisRight.updateGroup(groupId, this.groups[groupId]);
+ this.legendRight.updateGroup(groupId, this.groups[groupId]);
+ }
+ else {
+ this.yAxisLeft.updateGroup(groupId, this.groups[groupId]);
+ this.legendLeft.updateGroup(groupId, this.groups[groupId]);
}
+ }
+ this.legendLeft.redraw();
+ this.legendRight.redraw();
+ };
- if (!item) {
- // create item
- if (constructor) {
- item = new constructor(itemData, me.conversion, me.options);
- item.id = id; // TODO: not so nice setting id afterwards
- me._addItem(item);
+ LineGraph.prototype._updateAllGroupData = function () {
+ if (this.itemsData != null) {
+ // ~450 ms @ 500k
+
+ var groupsContent = {};
+ for (var groupId in this.groups) {
+ if (this.groups.hasOwnProperty(groupId)) {
+ groupsContent[groupId] = [];
}
- else if (type == 'rangeoverflow') {
- // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day
- throw new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: ' +
- '.vis.timeline .item.range .content {overflow: visible;}');
+ }
+ for (var itemId in this.itemsData._data) {
+ if (this.itemsData._data.hasOwnProperty(itemId)) {
+ var item = this.itemsData._data[itemId];
+ item.x = util.convert(item.x,"Date");
+ groupsContent[item.group].push(item);
}
- else {
- throw new TypeError('Unknown item type "' + type + '"');
+ }
+ for (var groupId in this.groups) {
+ if (this.groups.hasOwnProperty(groupId)) {
+ this.groups[groupId].setItems(groupsContent[groupId]);
}
}
- });
-
- this._order();
- this.stackDirty = true; // force re-stacking of all items next redraw
- this.body.emitter.emit('change');
+ // // ~4500ms @ 500k
+ // for (var groupId in this.groups) {
+ // if (this.groups.hasOwnProperty(groupId)) {
+ // this.groups[groupId].setItems(this.itemsData.get({filter:
+ // function (item) {
+ // return (item.group == groupId);
+ // }, type:{x:"Date"}}
+ // ));
+ // }
+ // }
+ }
};
/**
- * Handle added items
- * @param {Number[]} ids
- * @protected
- */
- ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate;
-
- /**
- * Handle removed items
- * @param {Number[]} ids
+ * Create or delete the group holding all ungrouped items. This group is used when
+ * there are no groups specified. This anonymous group is called 'graph'.
* @protected
*/
- ItemSet.prototype._onRemove = function(ids) {
- var count = 0;
- var me = this;
- ids.forEach(function (id) {
- var item = me.items[id];
- if (item) {
- count++;
- me._removeItem(item);
+ LineGraph.prototype._updateUngrouped = function() {
+ if (this.itemsData != null) {
+ // var t0 = new Date();
+ var group = {id: UNGROUPED, content: this.options.defaultGroup};
+ this._updateGroup(group, UNGROUPED);
+ var ungroupedCounter = 0;
+ if (this.itemsData) {
+ for (var itemId in this.itemsData._data) {
+ if (this.itemsData._data.hasOwnProperty(itemId)) {
+ var item = this.itemsData._data[itemId];
+ if (item != undefined) {
+ if (item.hasOwnProperty('group')) {
+ if (item.group === undefined) {
+ item.group = UNGROUPED;
+ }
+ }
+ else {
+ item.group = UNGROUPED;
+ }
+ ungroupedCounter = item.group == UNGROUPED ? ungroupedCounter + 1 : ungroupedCounter;
+ }
+ }
+ }
}
- });
- if (count) {
- // update order
- this._order();
- this.stackDirty = true; // force re-stacking of all items next redraw
- this.body.emitter.emit('change');
+ // much much slower
+ // var datapoints = this.itemsData.get({
+ // filter: function (item) {return item.group === undefined;},
+ // showInternalIds:true
+ // });
+ // if (datapoints.length > 0) {
+ // var updateQuery = [];
+ // for (var i = 0; i < datapoints.length; i++) {
+ // updateQuery.push({id:datapoints[i].id, group: UNGROUPED});
+ // }
+ // this.itemsData.update(updateQuery, true);
+ // }
+ // var t1 = new Date();
+ // var pointInUNGROUPED = this.itemsData.get({filter: function (item) {return item.group == UNGROUPED;}});
+ if (ungroupedCounter == 0) {
+ delete this.groups[UNGROUPED];
+ this.legendLeft.removeGroup(UNGROUPED);
+ this.legendRight.removeGroup(UNGROUPED);
+ this.yAxisLeft.removeGroup(UNGROUPED);
+ this.yAxisRight.removeGroup(UNGROUPED);
+ }
+ // console.log("getting amount ungrouped",new Date() - t1);
+ // console.log("putting in ungrouped",new Date() - t0);
+ }
+ else {
+ delete this.groups[UNGROUPED];
+ this.legendLeft.removeGroup(UNGROUPED);
+ this.legendRight.removeGroup(UNGROUPED);
+ this.yAxisLeft.removeGroup(UNGROUPED);
+ this.yAxisRight.removeGroup(UNGROUPED);
}
- };
- /**
- * Update the order of item in all groups
- * @private
- */
- ItemSet.prototype._order = function() {
- // reorder the items in all groups
- // TODO: optimization: only reorder groups affected by the changed items
- util.forEach(this.groups, function (group) {
- group.order();
- });
+ this.legendLeft.redraw();
+ this.legendRight.redraw();
};
- /**
- * Handle updated groups
- * @param {Number[]} ids
- * @private
- */
- ItemSet.prototype._onUpdateGroups = function(ids) {
- this._onAddGroups(ids);
- };
/**
- * Handle changed groups
- * @param {Number[]} ids
- * @private
+ * Redraw the component, mandatory function
+ * @return {boolean} Returns true if the component is resized
*/
- ItemSet.prototype._onAddGroups = function(ids) {
- var me = this;
-
- ids.forEach(function (id) {
- var groupData = me.groupsData.get(id);
- var group = me.groups[id];
-
- if (!group) {
- // check for reserved ids
- if (id == UNGROUPED) {
- throw new Error('Illegal group id. ' + id + ' is a reserved id.');
- }
+ LineGraph.prototype.redraw = function() {
+ var resized = false;
- var groupOptions = Object.create(me.options);
- util.extend(groupOptions, {
- height: null
- });
+ this.svg.style.height = ('' + this.options.graphHeight).replace('px','') + 'px';
+ if (this.lastWidth === undefined && this.width || this.lastWidth != this.width) {
+ resized = true;
+ }
+ // check if this component is resized
+ resized = this._isResized() || resized;
+ // check whether zoomed (in that case we need to re-stack everything)
+ var visibleInterval = this.body.range.end - this.body.range.start;
+ var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.width != this.lastWidth);
+ this.lastVisibleInterval = visibleInterval;
+ this.lastWidth = this.width;
- group = new Group(id, groupData, me);
- me.groups[id] = group;
+ // calculate actual size and position
+ this.width = this.dom.frame.offsetWidth;
- // add items with this groupId to the new group
- for (var itemId in me.items) {
- if (me.items.hasOwnProperty(itemId)) {
- var item = me.items[itemId];
- if (item.data.group == id) {
- group.add(item);
- }
- }
- }
+ // the svg element is three times as big as the width, this allows for fully dragging left and right
+ // without reloading the graph. the controls for this are bound to events in the constructor
+ if (resized == true) {
+ this.svg.style.width = util.option.asSize(3*this.width);
+ this.svg.style.left = util.option.asSize(-this.width);
+ }
+ if (zoomed == true) {
+ this._updateGraph();
+ }
- group.order();
- group.show();
- }
- else {
- // update group
- group.setData(groupData);
- }
- });
+ this.legendLeft.redraw();
+ this.legendRight.redraw();
- this.body.emitter.emit('change');
+ return resized;
};
/**
- * Handle removed groups
- * @param {Number[]} ids
- * @private
+ * Update and redraw the graph.
+ *
*/
- ItemSet.prototype._onRemoveGroups = function(ids) {
- var groups = this.groups;
- ids.forEach(function (id) {
- var group = groups[id];
-
- if (group) {
- group.hide();
- delete groups[id];
+ LineGraph.prototype._updateGraph = function () {
+ // reset the svg elements
+ DOMutil.prepareElements(this.svgElements);
+ // // very slow...
+ // groupData = group.itemsData.get({filter:
+ // function (item) {
+ // return (item.x > minDate && item.x < maxDate);
+ // }}
+ // );
+
+
+ if (this.width != 0 && this.itemsData != null) {
+ var group, groupData, preprocessedGroup, i;
+ var preprocessedGroupData = [];
+ var processedGroupData = [];
+ var groupRanges = [];
+ var changeCalled = false;
+
+ // getting group Ids
+ var groupIds = [];
+ for (var groupId in this.groups) {
+ if (this.groups.hasOwnProperty(groupId)) {
+ groupIds.push(groupId);
+ }
}
- });
- this.markDirty();
+ // this is the range of the SVG canvas
+ var minDate = this.body.util.toGlobalTime(- this.body.domProps.root.width);
+ var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width);
- this.body.emitter.emit('change');
- };
+ // first select and preprocess the data from the datasets.
+ // the groups have their preselection of data, we now loop over this data to see
+ // what data we need to draw. Sorted data is much faster.
+ // more optimization is possible by doing the sampling before and using the binary search
+ // to find the end date to determine the increment.
+ if (groupIds.length > 0) {
+ for (i = 0; i < groupIds.length; i++) {
+ group = this.groups[groupIds[i]];
+ groupData = [];
+ // optimization for sorted data
+ if (group.options.sort == true) {
+ var guess = Math.max(0,util.binarySearchGeneric(group.itemsData, minDate, 'x', 'before'));
- /**
- * Reorder the groups if needed
- * @return {boolean} changed
- * @private
- */
- ItemSet.prototype._orderGroups = function () {
- if (this.groupsData) {
- // reorder the groups
- var groupIds = this.groupsData.getIds({
- order: this.options.groupOrder
- });
+ for (var j = guess; j < group.itemsData.length; j++) {
+ var item = group.itemsData[j];
+ if (item !== undefined) {
+ if (item.x > maxDate) {
+ groupData.push(item);
+ break;
+ }
+ else {
+ groupData.push(item);
+ }
+ }
+ }
+ }
+ else {
+ for (var j = 0; j < group.itemsData.length; j++) {
+ var item = group.itemsData[j];
+ if (item !== undefined) {
+ if (item.x > minDate && item.x < maxDate) {
+ groupData.push(item);
+ }
+ }
+ }
+ }
+ // preprocess, split into ranges and data
+ preprocessedGroup = this._preprocessData(groupData, group);
+ groupRanges.push({min: preprocessedGroup.min, max: preprocessedGroup.max});
+ preprocessedGroupData.push(preprocessedGroup.data);
+ }
- var changed = !util.equalArray(groupIds, this.groupIds);
- if (changed) {
- // hide all groups, removes them from the DOM
- var groups = this.groups;
- groupIds.forEach(function (groupId) {
- groups[groupId].hide();
- });
+ // update the Y axis first, we use this data to draw at the correct Y points
+ // changeCalled is required to clean the SVG on a change emit.
+ changeCalled = this._updateYAxis(groupIds, groupRanges);
+ if (changeCalled == true) {
+ DOMutil.cleanupElements(this.svgElements);
+ this.body.emitter.emit("change");
+ return;
+ }
- // show the groups again, attach them to the DOM in correct order
- groupIds.forEach(function (groupId) {
- groups[groupId].show();
- });
+ // with the yAxis scaled correctly, use this to get the Y values of the points.
+ for (i = 0; i < groupIds.length; i++) {
+ group = this.groups[groupIds[i]];
+ processedGroupData.push(this._convertYvalues(preprocessedGroupData[i],group))
+ }
- this.groupIds = groupIds;
+ // draw the groups
+ for (i = 0; i < groupIds.length; i++) {
+ group = this.groups[groupIds[i]];
+ if (group.options.style == 'line') {
+ this._drawLineGraph(processedGroupData[i], group);
+ }
+ else {
+ this._drawBarGraph (processedGroupData[i], group);
+ }
+ }
}
-
- return changed;
- }
- else {
- return false;
}
- };
-
- /**
- * Add a new item
- * @param {Item} item
- * @private
- */
- ItemSet.prototype._addItem = function(item) {
- this.items[item.id] = item;
- // add to group
- var groupId = this.groupsData ? item.data.group : UNGROUPED;
- var group = this.groups[groupId];
- if (group) group.add(item);
+ // cleanup unused svg elements
+ DOMutil.cleanupElements(this.svgElements);
};
/**
- * Update an existing item
- * @param {Item} item
- * @param {Object} itemData
+ * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden.
+ * @param {array} groupIds
* @private
*/
- ItemSet.prototype._updateItem = function(item, itemData) {
- var oldGroupId = item.data.group;
+ LineGraph.prototype._updateYAxis = function (groupIds, groupRanges) {
+ var changeCalled = false;
+ var yAxisLeftUsed = false;
+ var yAxisRightUsed = false;
+ var minLeft = 1e9, minRight = 1e9, maxLeft = -1e9, maxRight = -1e9, minVal, maxVal;
+ var orientation = 'left';
- item.data = itemData;
- if (item.displayed) {
- item.redraw();
- }
+ // if groups are present
+ if (groupIds.length > 0) {
+ for (var i = 0; i < groupIds.length; i++) {
+ orientation = 'left';
+ var group = this.groups[groupIds[i]];
+ if (group.options.yAxisOrientation == 'right') {
+ orientation = 'right';
+ }
- // update group
- if (oldGroupId != item.data.group) {
- var oldGroup = this.groups[oldGroupId];
- if (oldGroup) oldGroup.remove(item);
+ minVal = groupRanges[i].min;
+ maxVal = groupRanges[i].max;
- var groupId = this.groupsData ? item.data.group : UNGROUPED;
- var group = this.groups[groupId];
- if (group) group.add(item);
+ if (orientation == 'left') {
+ yAxisLeftUsed = true;
+ minLeft = minLeft > minVal ? minVal : minLeft;
+ maxLeft = maxLeft < maxVal ? maxVal : maxLeft;
+ }
+ else {
+ yAxisRightUsed = true;
+ minRight = minRight > minVal ? minVal : minRight;
+ maxRight = maxRight < maxVal ? maxVal : maxRight;
+ }
+ }
+ if (yAxisLeftUsed == true) {
+ this.yAxisLeft.setRange(minLeft, maxLeft);
+ }
+ if (yAxisRightUsed == true) {
+ this.yAxisRight.setRange(minRight, maxRight);
+ }
}
- };
- /**
- * Delete an item from the ItemSet: remove it from the DOM, from the map
- * with items, and from the map with visible items, and from the selection
- * @param {Item} item
- * @private
- */
- ItemSet.prototype._removeItem = function(item) {
- // remove from DOM
- item.hide();
-
- // remove from items
- delete this.items[item.id];
-
- // remove from selection
- var index = this.selection.indexOf(item.id);
- if (index != -1) this.selection.splice(index, 1);
+ changeCalled = this._toggleAxisVisiblity(yAxisLeftUsed , this.yAxisLeft) || changeCalled;
+ changeCalled = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || changeCalled;
- // remove from group
- var groupId = this.groupsData ? item.data.group : UNGROUPED;
- var group = this.groups[groupId];
- if (group) group.remove(item);
- };
+ if (yAxisRightUsed == true && yAxisLeftUsed == true) {
+ this.yAxisLeft.drawIcons = true;
+ this.yAxisRight.drawIcons = true;
+ }
+ else {
+ this.yAxisLeft.drawIcons = false;
+ this.yAxisRight.drawIcons = false;
+ }
- /**
- * Create an array containing all items being a range (having an end date)
- * @param array
- * @returns {Array}
- * @private
- */
- ItemSet.prototype._constructByEndArray = function(array) {
- var endArray = [];
+ this.yAxisRight.master = !yAxisLeftUsed;
- for (var i = 0; i < array.length; i++) {
- if (array[i] instanceof ItemRange) {
- endArray.push(array[i]);
+ if (this.yAxisRight.master == false) {
+ if (yAxisRightUsed == true) {
+ this.yAxisLeft.lineOffset = this.yAxisRight.width;
}
+ changeCalled = this.yAxisLeft.redraw() || changeCalled;
+ this.yAxisRight.stepPixelsForced = this.yAxisLeft.stepPixels;
+ changeCalled = this.yAxisRight.redraw() || changeCalled;
}
- return endArray;
+ else {
+ changeCalled = this.yAxisRight.redraw() || changeCalled;
+ }
+ return changeCalled;
};
/**
- * Register the clicked item on touch, before dragStart is initiated.
- *
- * dragStart is initiated from a mousemove event, which can have left the item
- * already resulting in an item == null
+ * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function
*
- * @param {Event} event
+ * @param {boolean} axisUsed
+ * @returns {boolean}
* @private
+ * @param axis
*/
- ItemSet.prototype._onTouch = function (event) {
- // store the touched item, used in _onDragStart
- this.touchParams.item = ItemSet.itemFromTarget(event);
+ LineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) {
+ var changed = false;
+ if (axisUsed == false) {
+ if (axis.dom.frame.parentNode) {
+ axis.hide();
+ changed = true;
+ }
+ }
+ else {
+ if (!axis.dom.frame.parentNode) {
+ axis.show();
+ changed = true;
+ }
+ }
+ return changed;
};
+
/**
- * Start dragging the selected events
- * @param {Event} event
- * @private
+ * draw a bar graph
+ * @param datapoints
+ * @param group
*/
- ItemSet.prototype._onDragStart = function (event) {
- if (!this.options.editable.updateTime && !this.options.editable.updateGroup) {
- return;
- }
-
- var item = this.touchParams.item || null,
- me = this,
- props;
+ LineGraph.prototype._drawBarGraph = function (dataset, group) {
+ if (dataset != null) {
+ if (dataset.length > 0) {
+ var coreDistance;
+ var minWidth = 0.1 * group.options.barChart.width;
+ var offset = 0;
+ var width = group.options.barChart.width;
- if (item && item.selected) {
- var dragLeftItem = event.target.dragLeftItem;
- var dragRightItem = event.target.dragRightItem;
+ if (group.options.barChart.align == 'left') {offset -= 0.5*width;}
+ else if (group.options.barChart.align == 'right') {offset += 0.5*width;}
- if (dragLeftItem) {
- props = {
- item: dragLeftItem
- };
+ for (var i = 0; i < dataset.length; i++) {
+ // dynammically downscale the width so there is no overlap up to 1/10th the original width
+ if (i+1 < dataset.length) {coreDistance = Math.abs(dataset[i+1].x - dataset[i].x);}
+ if (i > 0) {coreDistance = Math.min(coreDistance,Math.abs(dataset[i-1].x - dataset[i].x));}
+ if (coreDistance < width) {width = coreDistance < minWidth ? minWidth : coreDistance;}
- if (me.options.editable.updateTime) {
- props.start = item.data.start.valueOf();
- }
- if (me.options.editable.updateGroup) {
- if ('group' in item.data) props.group = item.data.group;
+ DOMutil.drawBar(dataset[i].x + offset, dataset[i].y, width, group.zeroPosition - dataset[i].y, group.className + ' bar', this.svgElements, this.svg);
}
- this.touchParams.itemProps = [props];
+ // draw points
+ if (group.options.drawPoints.enabled == true) {
+ this._drawPoints(dataset, group, this.svgElements, this.svg, offset);
+ }
}
- else if (dragRightItem) {
- props = {
- item: dragRightItem
- };
+ }
+ };
- if (me.options.editable.updateTime) {
- props.end = item.data.end.valueOf();
+
+ /**
+ * draw a line graph
+ *
+ * @param datapoints
+ * @param group
+ */
+ LineGraph.prototype._drawLineGraph = function (dataset, group) {
+ if (dataset != null) {
+ if (dataset.length > 0) {
+ var path, d;
+ var svgHeight = Number(this.svg.style.height.replace("px",""));
+ path = DOMutil.getSVGElement('path', this.svgElements, this.svg);
+ path.setAttributeNS(null, "class", group.className);
+
+ // construct path from dataset
+ if (group.options.catmullRom.enabled == true) {
+ d = this._catmullRom(dataset, group);
}
- if (me.options.editable.updateGroup) {
- if ('group' in item.data) props.group = item.data.group;
+ else {
+ d = this._linear(dataset);
}
- this.touchParams.itemProps = [props];
- }
- else {
- this.touchParams.itemProps = this.getSelection().map(function (id) {
- var item = me.items[id];
- var props = {
- item: item
- };
-
- if (me.options.editable.updateTime) {
- if ('start' in item.data) props.start = item.data.start.valueOf();
- if ('end' in item.data) props.end = item.data.end.valueOf();
+ // append with points for fill and finalize the path
+ if (group.options.shaded.enabled == true) {
+ var fillPath = DOMutil.getSVGElement('path',this.svgElements, this.svg);
+ var dFill;
+ if (group.options.shaded.orientation == 'top') {
+ dFill = "M" + dataset[0].x + "," + 0 + " " + d + "L" + dataset[dataset.length - 1].x + "," + 0;
}
- if (me.options.editable.updateGroup) {
- if ('group' in item.data) props.group = item.data.group;
+ else {
+ dFill = "M" + dataset[0].x + "," + svgHeight + " " + d + "L" + dataset[dataset.length - 1].x + "," + svgHeight;
}
+ fillPath.setAttributeNS(null, "class", group.className + " fill");
+ fillPath.setAttributeNS(null, "d", dFill);
+ }
+ // copy properties to path for drawing.
+ path.setAttributeNS(null, "d", "M" + d);
- return props;
- });
+ // draw points
+ if (group.options.drawPoints.enabled == true) {
+ this._drawPoints(dataset, group, this.svgElements, this.svg);
+ }
}
-
- event.stopPropagation();
}
};
/**
- * Drag selected items
- * @param {Event} event
- * @private
+ * draw the data points
+ *
+ * @param dataset
+ * @param JSONcontainer
+ * @param svg
+ * @param group
*/
- ItemSet.prototype._onDrag = function (event) {
- if (this.touchParams.itemProps) {
- var range = this.body.range,
- snap = this.body.util.snap || null,
- deltaX = event.gesture.deltaX,
- scale = (this.props.width / (range.end - range.start)),
- offset = deltaX / scale;
+ LineGraph.prototype._drawPoints = function (dataset, group, JSONcontainer, svg, offset) {
+ if (offset === undefined) {offset = 0;}
+ for (var i = 0; i < dataset.length; i++) {
+ DOMutil.drawPoint(dataset[i].x + offset, dataset[i].y, group, JSONcontainer, svg);
+ }
+ };
- // move
- this.touchParams.itemProps.forEach(function (props) {
- if ('start' in props) {
- var start = new Date(props.start + offset);
- props.item.data.start = snap ? snap(start) : start;
- }
- if ('end' in props) {
- var end = new Date(props.end + offset);
- props.item.data.end = snap ? snap(end) : end;
- }
- if ('group' in props) {
- // drag from one group to another
- var group = ItemSet.groupFromTarget(event);
- if (group && group.groupId != props.item.data.group) {
- var oldGroup = props.item.parent;
- oldGroup.remove(props.item);
- oldGroup.order();
- group.add(props.item);
- group.order();
+ /**
+ * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the
+ * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for
+ * the yAxis.
+ *
+ * @param datapoints
+ * @returns {Array}
+ * @private
+ */
+ LineGraph.prototype._preprocessData = function (datapoints, group) {
+ var extractedData = [];
+ var xValue, yValue;
+ var toScreen = this.body.util.toScreen;
- props.item.data.group = group.groupId;
- }
- }
- });
+ var increment = 1;
+ var amountOfPoints = datapoints.length;
- // TODO: implement onMoving handler
+ var yMin = datapoints[0].y;
+ var yMax = datapoints[0].y;
- this.stackDirty = true; // force re-stacking of all items next redraw
- this.body.emitter.emit('change');
+ // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop
+ // of width changing of the yAxis.
+ if (group.options.sampling == true) {
+ var xDistance = this.body.util.toGlobalScreen(datapoints[datapoints.length-1].x) - this.body.util.toGlobalScreen(datapoints[0].x);
+ var pointsPerPixel = amountOfPoints/xDistance;
+ increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1,Math.round(pointsPerPixel)));
+ }
- event.stopPropagation();
+ for (var i = 0; i < amountOfPoints; i += increment) {
+ xValue = toScreen(datapoints[i].x) + this.width - 1;
+ yValue = datapoints[i].y;
+ extractedData.push({x: xValue, y: yValue});
+ yMin = yMin > yValue ? yValue : yMin;
+ yMax = yMax < yValue ? yValue : yMax;
}
+
+ // extractedData.sort(function (a,b) {return a.x - b.x;});
+ return {min: yMin, max: yMax, data: extractedData};
};
/**
- * End of dragging selected items
- * @param {Event} event
+ * This uses the DataAxis object to generate the correct Y coordinate on the SVG window. It uses the
+ * util function toScreen to get the x coordinate from the timestamp.
+ *
+ * @param datapoints
+ * @param options
+ * @returns {Array}
* @private
*/
- ItemSet.prototype._onDragEnd = function (event) {
- if (this.touchParams.itemProps) {
- // prepare a change set for the changed items
- var changes = [],
- me = this,
- dataset = this.itemsData.getDataSet();
+ LineGraph.prototype._convertYvalues = function (datapoints, group) {
+ var extractedData = [];
+ var xValue, yValue;
+ var axis = this.yAxisLeft;
+ var svgHeight = Number(this.svg.style.height.replace("px",""));
- this.touchParams.itemProps.forEach(function (props) {
- var id = props.item.id,
- itemData = me.itemsData.get(id, me.itemOptions);
+ if (group.options.yAxisOrientation == 'right') {
+ axis = this.yAxisRight;
+ }
- var changed = false;
- if ('start' in props.item.data) {
- changed = (props.start != props.item.data.start.valueOf());
- itemData.start = util.convert(props.item.data.start,
- dataset._options.type && dataset._options.type.start || 'Date');
- }
- if ('end' in props.item.data) {
- changed = changed || (props.end != props.item.data.end.valueOf());
- itemData.end = util.convert(props.item.data.end,
- dataset._options.type && dataset._options.type.end || 'Date');
- }
- if ('group' in props.item.data) {
- changed = changed || (props.group != props.item.data.group);
- itemData.group = props.item.data.group;
- }
+ for (var i = 0; i < datapoints.length; i++) {
+ xValue = datapoints[i].x;
+ yValue = Math.round(axis.convertValue(datapoints[i].y));
+ extractedData.push({x: xValue, y: yValue});
+ }
- // only apply changes when start or end is actually changed
- if (changed) {
- me.options.onMove(itemData, function (itemData) {
- if (itemData) {
- // apply changes
- itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined)
- changes.push(itemData);
- }
- else {
- // restore original values
- if ('start' in props) props.item.data.start = props.start;
- if ('end' in props) props.item.data.end = props.end;
-
- me.stackDirty = true; // force re-stacking of all items next redraw
- me.body.emitter.emit('change');
- }
- });
- }
- });
- this.touchParams.itemProps = null;
-
- // apply the changes to the data (if there are changes)
- if (changes.length) {
- dataset.update(changes);
- }
+ group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0)));
- event.stopPropagation();
- }
+ // extractedData.sort(function (a,b) {return a.x - b.x;});
+ return extractedData;
};
+
/**
- * Handle selecting/deselecting an item when tapping it
- * @param {Event} event
+ * This uses an uniform parametrization of the CatmullRom algorithm:
+ * "On the Parameterization of Catmull-Rom Curves" by Cem Yuksel et al.
+ * @param data
+ * @returns {string}
* @private
*/
- ItemSet.prototype._onSelectItem = function (event) {
- if (!this.options.selectable) return;
+ LineGraph.prototype._catmullRomUniform = function(data) {
+ // catmull rom
+ var p0, p1, p2, p3, bp1, bp2;
+ var d = Math.round(data[0].x) + "," + Math.round(data[0].y) + " ";
+ var normalization = 1/6;
+ var length = data.length;
+ for (var i = 0; i < length - 1; i++) {
- var ctrlKey = event.gesture.srcEvent && event.gesture.srcEvent.ctrlKey;
- var shiftKey = event.gesture.srcEvent && event.gesture.srcEvent.shiftKey;
- if (ctrlKey || shiftKey) {
- this._onMultiSelectItem(event);
- return;
- }
+ p0 = (i == 0) ? data[0] : data[i-1];
+ p1 = data[i];
+ p2 = data[i+1];
+ p3 = (i + 2 < length) ? data[i+2] : p2;
- var oldSelection = this.getSelection();
- var item = ItemSet.itemFromTarget(event);
- var selection = item ? [item.id] : [];
- this.setSelection(selection);
+ // Catmull-Rom to Cubic Bezier conversion matrix
+ // 0 1 0 0
+ // -1/6 1 1/6 0
+ // 0 1/6 1 -1/6
+ // 0 0 1 0
- var newSelection = this.getSelection();
+ // bp0 = { x: p1.x, y: p1.y };
+ bp1 = { x: ((-p0.x + 6*p1.x + p2.x) *normalization), y: ((-p0.y + 6*p1.y + p2.y) *normalization)};
+ bp2 = { x: (( p1.x + 6*p2.x - p3.x) *normalization), y: (( p1.y + 6*p2.y - p3.y) *normalization)};
+ // bp0 = { x: p2.x, y: p2.y };
- // emit a select event,
- // except when old selection is empty and new selection is still empty
- if (newSelection.length > 0 || oldSelection.length > 0) {
- this.body.emitter.emit('select', {
- items: this.getSelection()
- });
+ d += "C" +
+ bp1.x + "," +
+ bp1.y + " " +
+ bp2.x + "," +
+ bp2.y + " " +
+ p2.x + "," +
+ p2.y + " ";
}
- event.stopPropagation();
+ return d;
};
/**
- * Handle creation and updates of an item on double tap
- * @param event
+ * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm.
+ * By default, the centripetal parameterization is used because this gives the nicest results.
+ * These parameterizations are relatively heavy because the distance between 4 points have to be calculated.
+ *
+ * One optimization can be used to reuse distances since this is a sliding window approach.
+ * @param data
+ * @returns {string}
* @private
*/
- ItemSet.prototype._onAddItem = function (event) {
- if (!this.options.selectable) return;
- if (!this.options.editable.add) return;
+ LineGraph.prototype._catmullRom = function(data, group) {
+ var alpha = group.options.catmullRom.alpha;
+ if (alpha == 0 || alpha === undefined) {
+ return this._catmullRomUniform(data);
+ }
+ else {
+ var p0, p1, p2, p3, bp1, bp2, d1,d2,d3, A, B, N, M;
+ var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;
+ var d = Math.round(data[0].x) + "," + Math.round(data[0].y) + " ";
+ var length = data.length;
+ for (var i = 0; i < length - 1; i++) {
- var me = this,
- snap = this.body.util.snap || null,
- item = ItemSet.itemFromTarget(event);
+ p0 = (i == 0) ? data[0] : data[i-1];
+ p1 = data[i];
+ p2 = data[i+1];
+ p3 = (i + 2 < length) ? data[i+2] : p2;
- if (item) {
- // update item
+ d1 = Math.sqrt(Math.pow(p0.x - p1.x,2) + Math.pow(p0.y - p1.y,2));
+ d2 = Math.sqrt(Math.pow(p1.x - p2.x,2) + Math.pow(p1.y - p2.y,2));
+ d3 = Math.sqrt(Math.pow(p2.x - p3.x,2) + Math.pow(p2.y - p3.y,2));
- // execute async handler to update the item (or cancel it)
- var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset
- this.options.onUpdate(itemData, function (itemData) {
- if (itemData) {
- me.itemsData.update(itemData);
- }
- });
- }
- else {
- // add item
- var xAbs = util.getAbsoluteLeft(this.dom.frame);
- var x = event.gesture.center.pageX - xAbs;
- var start = this.body.util.toTime(x);
- var newItem = {
- start: snap ? snap(start) : start,
- content: 'new item'
- };
+ // Catmull-Rom to Cubic Bezier conversion matrix
+ //
+ // A = 2d1^2a + 3d1^a * d2^a + d3^2a
+ // B = 2d3^2a + 3d3^a * d2^a + d2^2a
+ //
+ // [ 0 1 0 0 ]
+ // [ -d2^2a/N A/N d1^2a/N 0 ]
+ // [ 0 d3^2a/M B/M -d2^2a/M ]
+ // [ 0 0 1 0 ]
- // when default type is a range, add a default end date to the new item
- if (this.options.type === 'range') {
- var end = this.body.util.toTime(x + this.props.width / 5);
- newItem.end = snap ? snap(end) : end;
- }
+ // [ 0 1 0 0 ]
+ // [ -d2pow2a/N A/N d1pow2a/N 0 ]
+ // [ 0 d3pow2a/M B/M -d2pow2a/M ]
+ // [ 0 0 1 0 ]
- newItem[this.itemsData.fieldId] = util.randomUUID();
+ d3powA = Math.pow(d3, alpha);
+ d3pow2A = Math.pow(d3,2*alpha);
+ d2powA = Math.pow(d2, alpha);
+ d2pow2A = Math.pow(d2,2*alpha);
+ d1powA = Math.pow(d1, alpha);
+ d1pow2A = Math.pow(d1,2*alpha);
- var group = ItemSet.groupFromTarget(event);
- if (group) {
- newItem.group = group.groupId;
+ A = 2*d1pow2A + 3*d1powA * d2powA + d2pow2A;
+ B = 2*d3pow2A + 3*d3powA * d2powA + d2pow2A;
+ N = 3*d1powA * (d1powA + d2powA);
+ if (N > 0) {N = 1 / N;}
+ M = 3*d3powA * (d3powA + d2powA);
+ if (M > 0) {M = 1 / M;}
+
+ bp1 = { x: ((-d2pow2A * p0.x + A*p1.x + d1pow2A * p2.x) * N),
+ y: ((-d2pow2A * p0.y + A*p1.y + d1pow2A * p2.y) * N)};
+
+ bp2 = { x: (( d3pow2A * p1.x + B*p2.x - d2pow2A * p3.x) * M),
+ y: (( d3pow2A * p1.y + B*p2.y - d2pow2A * p3.y) * M)};
+
+ if (bp1.x == 0 && bp1.y == 0) {bp1 = p1;}
+ if (bp2.x == 0 && bp2.y == 0) {bp2 = p2;}
+ d += "C" +
+ bp1.x + "," +
+ bp1.y + " " +
+ bp2.x + "," +
+ bp2.y + " " +
+ p2.x + "," +
+ p2.y + " ";
}
- // execute async handler to customize (or cancel) adding an item
- this.options.onAdd(newItem, function (item) {
- if (item) {
- me.itemsData.add(newItem);
- // TODO: need to trigger a redraw?
- }
- });
+ return d;
}
};
/**
- * Handle selecting/deselecting multiple items when holding an item
- * @param {Event} event
+ * this generates the SVG path for a linear drawing between datapoints.
+ * @param data
+ * @returns {string}
* @private
*/
- ItemSet.prototype._onMultiSelectItem = function (event) {
- if (!this.options.selectable) return;
-
- var selection,
- item = ItemSet.itemFromTarget(event);
-
- if (item) {
- // multi select items
- selection = this.getSelection(); // current selection
- var index = selection.indexOf(item.id);
- if (index == -1) {
- // item is not yet selected -> select it
- selection.push(item.id);
+ LineGraph.prototype._linear = function(data) {
+ // linear
+ var d = "";
+ for (var i = 0; i < data.length; i++) {
+ if (i == 0) {
+ d += data[i].x + "," + data[i].y;
}
else {
- // item is already selected -> deselect it
- selection.splice(index, 1);
+ d += " " + data[i].x + "," + data[i].y;
}
- this.setSelection(selection);
-
- this.body.emitter.emit('select', {
- items: this.getSelection()
- });
-
- event.stopPropagation();
}
+ return d;
};
- /**
- * Find an item from an event target:
- * searches for the attribute 'timeline-item' in the event target's element tree
- * @param {Event} event
- * @return {Item | null} item
- */
- ItemSet.itemFromTarget = function(event) {
- var target = event.target;
- while (target) {
- if (target.hasOwnProperty('timeline-item')) {
- return target['timeline-item'];
- }
- target = target.parentNode;
- }
+ module.exports = LineGraph;
- return null;
- };
+
+/***/ },
+/* 27 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var util = __webpack_require__(1);
+ var Component = __webpack_require__(18);
+ var TimeStep = __webpack_require__(17);
/**
- * Find the Group from an event target:
- * searches for the attribute 'timeline-group' in the event target's element tree
- * @param {Event} event
- * @return {Group | null} group
+ * A horizontal time axis
+ * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body
+ * @param {Object} [options] See TimeAxis.setOptions for the available
+ * options.
+ * @constructor TimeAxis
+ * @extends Component
*/
- ItemSet.groupFromTarget = function(event) {
- var target = event.target;
- while (target) {
- if (target.hasOwnProperty('timeline-group')) {
- return target['timeline-group'];
+ function TimeAxis (body, options) {
+ this.dom = {
+ foreground: null,
+ majorLines: [],
+ majorTexts: [],
+ minorLines: [],
+ minorTexts: [],
+ redundant: {
+ majorLines: [],
+ majorTexts: [],
+ minorLines: [],
+ minorTexts: []
}
- target = target.parentNode;
- }
+ };
+ this.props = {
+ range: {
+ start: 0,
+ end: 0,
+ minimumStep: 0
+ },
+ lineTop: 0
+ };
- return null;
- };
+ this.defaultOptions = {
+ orientation: 'bottom', // supported: 'top', 'bottom'
+ // TODO: implement timeaxis orientations 'left' and 'right'
+ showMinorLabels: true,
+ showMajorLabels: true
+ };
+ this.options = util.extend({}, this.defaultOptions);
+
+ this.body = body;
+
+ // create the HTML DOM
+ this._create();
+
+ this.setOptions(options);
+ }
+
+ TimeAxis.prototype = new Component();
/**
- * Find the ItemSet from an event target:
- * searches for the attribute 'timeline-itemset' in the event target's element tree
- * @param {Event} event
- * @return {ItemSet | null} item
+ * Set options for the TimeAxis.
+ * Parameters will be merged in current options.
+ * @param {Object} options Available options:
+ * {string} [orientation]
+ * {boolean} [showMinorLabels]
+ * {boolean} [showMajorLabels]
*/
- ItemSet.itemSetFromTarget = function(event) {
- var target = event.target;
- while (target) {
- if (target.hasOwnProperty('timeline-itemset')) {
- return target['timeline-itemset'];
- }
- target = target.parentNode;
+ TimeAxis.prototype.setOptions = function(options) {
+ if (options) {
+ // copy all options that we know
+ util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels'], this.options, options);
}
-
- return null;
};
- module.exports = ItemSet;
-
-
-/***/ },
-/* 29 */
-/***/ function(module, exports, __webpack_require__) {
+ /**
+ * Create the HTML DOM for the TimeAxis
+ */
+ TimeAxis.prototype._create = function() {
+ this.dom.foreground = document.createElement('div');
+ this.dom.background = document.createElement('div');
- var util = __webpack_require__(1);
- var DOMutil = __webpack_require__(2);
- var Component = __webpack_require__(22);
+ this.dom.foreground.className = 'timeaxis foreground';
+ this.dom.background.className = 'timeaxis background';
+ };
/**
- * Legend for Graph2d
+ * Destroy the TimeAxis
*/
- function Legend(body, options, side) {
- this.body = body;
- this.defaultOptions = {
- enabled: true,
- icons: true,
- iconSize: 20,
- iconSpacing: 6,
- left: {
- visible: true,
- position: 'top-left' // top/bottom - left,center,right
- },
- right: {
- visible: true,
- position: 'top-left' // top/bottom - left,center,right
- }
+ TimeAxis.prototype.destroy = function() {
+ // remove from DOM
+ if (this.dom.foreground.parentNode) {
+ this.dom.foreground.parentNode.removeChild(this.dom.foreground);
+ }
+ if (this.dom.background.parentNode) {
+ this.dom.background.parentNode.removeChild(this.dom.background);
}
- this.side = side;
- this.options = util.extend({},this.defaultOptions);
-
- this.svgElements = {};
- this.dom = {};
- this.groups = {};
- this.amountOfGroups = 0;
- this._create();
- this.setOptions(options);
- }
+ this.body = null;
+ };
- Legend.prototype = new Component();
+ /**
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
+ */
+ TimeAxis.prototype.redraw = function () {
+ var options = this.options,
+ props = this.props,
+ foreground = this.dom.foreground,
+ background = this.dom.background;
+ // determine the correct parent DOM element (depending on option orientation)
+ var parent = (options.orientation == 'top') ? this.body.dom.top : this.body.dom.bottom;
+ var parentChanged = (foreground.parentNode !== parent);
- Legend.prototype.addGroup = function(label, graphOptions) {
- if (!this.groups.hasOwnProperty(label)) {
- this.groups[label] = graphOptions;
- }
- this.amountOfGroups += 1;
- };
+ // calculate character width and height
+ this._calculateCharSize();
- Legend.prototype.updateGroup = function(label, graphOptions) {
- this.groups[label] = graphOptions;
- };
+ // TODO: recalculate sizes only needed when parent is resized or options is changed
+ var orientation = this.options.orientation,
+ showMinorLabels = this.options.showMinorLabels,
+ showMajorLabels = this.options.showMajorLabels;
- Legend.prototype.removeGroup = function(label) {
- if (this.groups.hasOwnProperty(label)) {
- delete this.groups[label];
- this.amountOfGroups -= 1;
- }
- };
+ // determine the width and height of the elemens for the axis
+ props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;
+ props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;
+ props.height = props.minorLabelHeight + props.majorLabelHeight;
+ props.width = foreground.offsetWidth;
- Legend.prototype._create = function() {
- this.dom.frame = document.createElement('div');
- this.dom.frame.className = 'legend';
- this.dom.frame.style.position = "absolute";
- this.dom.frame.style.top = "10px";
- this.dom.frame.style.display = "block";
+ props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight -
+ (options.orientation == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height);
+ props.minorLineWidth = 1; // TODO: really calculate width
+ props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight;
+ props.majorLineWidth = 1; // TODO: really calculate width
- this.dom.textArea = document.createElement('div');
- this.dom.textArea.className = 'legendText';
- this.dom.textArea.style.position = "relative";
- this.dom.textArea.style.top = "0px";
+ // take foreground and background offline while updating (is almost twice as fast)
+ var foregroundNextSibling = foreground.nextSibling;
+ var backgroundNextSibling = background.nextSibling;
+ foreground.parentNode && foreground.parentNode.removeChild(foreground);
+ background.parentNode && background.parentNode.removeChild(background);
- this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg");
- this.svg.style.position = 'absolute';
- this.svg.style.top = 0 +'px';
- this.svg.style.width = this.options.iconSize + 5 + 'px';
+ foreground.style.height = this.props.height + 'px';
- this.dom.frame.appendChild(this.svg);
- this.dom.frame.appendChild(this.dom.textArea);
- };
+ this._repaintLabels();
- /**
- * Hide the component from the DOM
- */
- Legend.prototype.hide = function() {
- // remove the frame containing the items
- if (this.dom.frame.parentNode) {
- this.dom.frame.parentNode.removeChild(this.dom.frame);
+ // put DOM online again (at the same place)
+ if (foregroundNextSibling) {
+ parent.insertBefore(foreground, foregroundNextSibling);
+ }
+ else {
+ parent.appendChild(foreground)
+ }
+ if (backgroundNextSibling) {
+ this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling);
+ }
+ else {
+ this.body.dom.backgroundVertical.appendChild(background)
}
+
+ return this._isResized() || parentChanged;
};
/**
- * Show the component in the DOM (when not already visible).
- * @return {Boolean} changed
+ * Repaint major and minor text labels and vertical grid lines
+ * @private
*/
- Legend.prototype.show = function() {
- // show frame containing the items
- if (!this.dom.frame.parentNode) {
- this.body.dom.center.appendChild(this.dom.frame);
- }
- };
+ TimeAxis.prototype._repaintLabels = function () {
+ var orientation = this.options.orientation;
- Legend.prototype.setOptions = function(options) {
- var fields = ['enabled','orientation','icons','left','right'];
- util.selectiveDeepExtend(fields, this.options, options);
- };
+ // calculate range and step (step such that we have space for 7 characters per label)
+ var start = util.convert(this.body.range.start, 'Number'),
+ end = util.convert(this.body.range.end, 'Number'),
+ minimumStep = this.body.util.toTime((this.props.minorCharWidth || 10) * 7).valueOf()
+ -this.body.util.toTime(0).valueOf();
+ var step = new TimeStep(new Date(start), new Date(end), minimumStep);
+ this.step = step;
- Legend.prototype.redraw = function() {
- if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false) {
- this.hide();
- }
- else {
- this.show();
- if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') {
- this.dom.frame.style.left = '4px';
- this.dom.frame.style.textAlign = "left";
- this.dom.textArea.style.textAlign = "left";
- this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px';
- this.dom.textArea.style.right = '';
- this.svg.style.left = 0 +'px';
- this.svg.style.right = '';
- }
- else {
- this.dom.frame.style.right = '4px';
- this.dom.frame.style.textAlign = "right";
- this.dom.textArea.style.textAlign = "right";
- this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px';
- this.dom.textArea.style.left = '';
- this.svg.style.right = 0 +'px';
- this.svg.style.left = '';
- }
+ // Move all DOM elements to a "redundant" list, where they
+ // can be picked for re-use, and clear the lists with lines and texts.
+ // At the end of the function _repaintLabels, left over elements will be cleaned up
+ var dom = this.dom;
+ dom.redundant.majorLines = dom.majorLines;
+ dom.redundant.majorTexts = dom.majorTexts;
+ dom.redundant.minorLines = dom.minorLines;
+ dom.redundant.minorTexts = dom.minorTexts;
+ dom.majorLines = [];
+ dom.majorTexts = [];
+ dom.minorLines = [];
+ dom.minorTexts = [];
- if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') {
- this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px';
- this.dom.frame.style.bottom = '';
- }
- else {
- this.dom.frame.style.bottom = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px';
- this.dom.frame.style.top = '';
+ step.first();
+ var xFirstMajorLabel = undefined;
+ var max = 0;
+ while (step.hasNext() && max < 1000) {
+ max++;
+ var cur = step.getCurrent(),
+ x = this.body.util.toScreen(cur),
+ isMajor = step.isMajor();
+
+ // TODO: lines must have a width, such that we can create css backgrounds
+
+ if (this.options.showMinorLabels) {
+ this._repaintMinorText(x, step.getLabelMinor(), orientation);
}
- if (this.options.icons == false) {
- this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px';
- this.dom.textArea.style.right = '';
- this.dom.textArea.style.left = '';
- this.svg.style.width = '0px';
+ if (isMajor && this.options.showMajorLabels) {
+ if (x > 0) {
+ if (xFirstMajorLabel == undefined) {
+ xFirstMajorLabel = x;
+ }
+ this._repaintMajorText(x, step.getLabelMajor(), orientation);
+ }
+ this._repaintMajorLine(x, orientation);
}
else {
- this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px'
- this.drawLegendIcons();
+ this._repaintMinorLine(x, orientation);
}
- var content = '';
- for (var groupId in this.groups) {
- if (this.groups.hasOwnProperty(groupId)) {
- content += this.groups[groupId].content + ' ';
- }
- }
- this.dom.textArea.innerHTML = content;
- this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px';
+ step.next();
}
- };
- Legend.prototype.drawLegendIcons = function() {
- if (this.dom.frame.parentNode) {
- DOMutil.prepareElements(this.svgElements);
- var padding = window.getComputedStyle(this.dom.frame).paddingTop;
- var iconOffset = Number(padding.replace('px',''));
- var x = iconOffset;
- var iconWidth = this.options.iconSize;
- var iconHeight = 0.75 * this.options.iconSize;
- var y = iconOffset + 0.5 * iconHeight + 3;
+ // create a major label on the left when needed
+ if (this.options.showMajorLabels) {
+ var leftTime = this.body.util.toTime(0),
+ leftText = step.getLabelMajor(leftTime),
+ widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation
- this.svg.style.width = iconWidth + 5 + iconOffset + 'px';
+ if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) {
+ this._repaintMajorText(0, leftText, orientation);
+ }
+ }
- for (var groupId in this.groups) {
- if (this.groups.hasOwnProperty(groupId)) {
- this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight);
- y += iconHeight + this.options.iconSpacing;
+ // Cleanup leftover DOM elements from the redundant list
+ util.forEach(this.dom.redundant, function (arr) {
+ while (arr.length) {
+ var elem = arr.pop();
+ if (elem && elem.parentNode) {
+ elem.parentNode.removeChild(elem);
}
}
+ });
+ };
- DOMutil.cleanupElements(this.svgElements);
+ /**
+ * Create a minor label for the axis at position x
+ * @param {Number} x
+ * @param {String} text
+ * @param {String} orientation "top" or "bottom" (default)
+ * @private
+ */
+ TimeAxis.prototype._repaintMinorText = function (x, text, orientation) {
+ // reuse redundant label
+ var label = this.dom.redundant.minorTexts.shift();
+
+ if (!label) {
+ // create new label
+ var content = document.createTextNode('');
+ label = document.createElement('div');
+ label.appendChild(content);
+ label.className = 'text minor';
+ this.dom.foreground.appendChild(label);
}
- };
+ this.dom.minorTexts.push(label);
- module.exports = Legend;
+ label.childNodes[0].nodeValue = text;
+ label.style.top = (orientation == 'top') ? (this.props.majorLabelHeight + 'px') : '0';
+ label.style.left = x + 'px';
+ //label.title = title; // TODO: this is a heavy operation
+ };
-/***/ },
-/* 30 */
-/***/ function(module, exports, __webpack_require__) {
+ /**
+ * Create a Major label for the axis at position x
+ * @param {Number} x
+ * @param {String} text
+ * @param {String} orientation "top" or "bottom" (default)
+ * @private
+ */
+ TimeAxis.prototype._repaintMajorText = function (x, text, orientation) {
+ // reuse redundant label
+ var label = this.dom.redundant.majorTexts.shift();
- var util = __webpack_require__(1);
- var DOMutil = __webpack_require__(2);
- var DataSet = __webpack_require__(3);
- var DataView = __webpack_require__(4);
- var Component = __webpack_require__(22);
- var DataAxis = __webpack_require__(25);
- var GraphGroup = __webpack_require__(26);
- var Legend = __webpack_require__(29);
+ if (!label) {
+ // create label
+ var content = document.createTextNode(text);
+ label = document.createElement('div');
+ label.className = 'text major';
+ label.appendChild(content);
+ this.dom.foreground.appendChild(label);
+ }
+ this.dom.majorTexts.push(label);
- var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items
+ label.childNodes[0].nodeValue = text;
+ //label.title = title; // TODO: this is a heavy operation
+
+ label.style.top = (orientation == 'top') ? '0' : (this.props.minorLabelHeight + 'px');
+ label.style.left = x + 'px';
+ };
/**
- * This is the constructor of the LineGraph. It requires a Timeline body and options.
- *
- * @param body
- * @param options
- * @constructor
+ * Create a minor line for the axis at position x
+ * @param {Number} x
+ * @param {String} orientation "top" or "bottom" (default)
+ * @private
*/
- function LineGraph(body, options) {
- this.id = util.randomUUID();
- this.body = body;
+ TimeAxis.prototype._repaintMinorLine = function (x, orientation) {
+ // reuse redundant line
+ var line = this.dom.redundant.minorLines.shift();
- this.defaultOptions = {
- yAxisOrientation: 'left',
- defaultGroup: 'default',
- sort: true,
- sampling: true,
- graphHeight: '400px',
- shaded: {
- enabled: false,
- orientation: 'bottom' // top, bottom
- },
- style: 'line', // line, bar
- barChart: {
- width: 50,
- align: 'center' // left, center, right
- },
- catmullRom: {
- enabled: true,
- parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)
- alpha: 0.5
- },
- drawPoints: {
- enabled: true,
- size: 6,
- style: 'square' // square, circle
- },
- dataAxis: {
- showMinorLabels: true,
- showMajorLabels: true,
- icons: false,
- width: '40px',
- visible: true
- },
- legend: {
- enabled: false,
- icons: true,
- left: {
- visible: true,
- position: 'top-left' // top/bottom - left,right
- },
- right: {
- visible: true,
- position: 'top-right' // top/bottom - left,right
- }
- }
- };
+ if (!line) {
+ // create vertical line
+ line = document.createElement('div');
+ line.className = 'grid vertical minor';
+ this.dom.background.appendChild(line);
+ }
+ this.dom.minorLines.push(line);
- // options is shared by this ItemSet and all its items
- this.options = util.extend({}, this.defaultOptions);
- this.dom = {};
- this.props = {};
- this.hammer = null;
- this.groups = {};
+ var props = this.props;
+ if (orientation == 'top') {
+ line.style.top = props.majorLabelHeight + 'px';
+ }
+ else {
+ line.style.top = this.body.domProps.top.height + 'px';
+ }
+ line.style.height = props.minorLineHeight + 'px';
+ line.style.left = (x - props.minorLineWidth / 2) + 'px';
+ };
- var me = this;
- this.itemsData = null; // DataSet
- this.groupsData = null; // DataSet
+ /**
+ * Create a Major line for the axis at position x
+ * @param {Number} x
+ * @param {String} orientation "top" or "bottom" (default)
+ * @private
+ */
+ TimeAxis.prototype._repaintMajorLine = function (x, orientation) {
+ // reuse redundant line
+ var line = this.dom.redundant.majorLines.shift();
- // listeners for the DataSet of the items
- this.itemListeners = {
- 'add': function (event, params, senderId) {
- me._onAdd(params.items);
- },
- 'update': function (event, params, senderId) {
- me._onUpdate(params.items);
- },
- 'remove': function (event, params, senderId) {
- me._onRemove(params.items);
- }
- };
+ if (!line) {
+ // create vertical line
+ line = document.createElement('DIV');
+ line.className = 'grid vertical major';
+ this.dom.background.appendChild(line);
+ }
+ this.dom.majorLines.push(line);
- // listeners for the DataSet of the groups
- this.groupListeners = {
- 'add': function (event, params, senderId) {
- me._onAddGroups(params.items);
- },
- 'update': function (event, params, senderId) {
- me._onUpdateGroups(params.items);
- },
- 'remove': function (event, params, senderId) {
- me._onRemoveGroups(params.items);
- }
- };
+ var props = this.props;
+ if (orientation == 'top') {
+ line.style.top = '0';
+ }
+ else {
+ line.style.top = this.body.domProps.top.height + 'px';
+ }
+ line.style.left = (x - props.majorLineWidth / 2) + 'px';
+ line.style.height = props.majorLineHeight + 'px';
+ };
- this.items = {}; // object with an Item for every data item
- this.selection = []; // list with the ids of all selected nodes
- this.lastStart = this.body.range.start;
- this.touchParams = {}; // stores properties while dragging
+ /**
+ * Determine the size of text on the axis (both major and minor axis).
+ * The size is calculated only once and then cached in this.props.
+ * @private
+ */
+ TimeAxis.prototype._calculateCharSize = function () {
+ // Note: We calculate char size with every redraw. Size may change, for
+ // example when any of the timelines parents had display:none for example.
- this.svgElements = {};
- this.setOptions(options);
- this.groupsUsingDefaultStyles = [0];
+ // determine the char width and height on the minor axis
+ if (!this.dom.measureCharMinor) {
+ this.dom.measureCharMinor = document.createElement('DIV');
+ this.dom.measureCharMinor.className = 'text minor measure';
+ this.dom.measureCharMinor.style.position = 'absolute';
- this.body.emitter.on("rangechange",function() {
- if (me.lastStart != 0) {
- var offset = me.body.range.start - me.lastStart;
- var range = me.body.range.end - me.body.range.start;
- if (me.width != 0) {
- var rangePerPixelInv = me.width/range;
- var xOffset = offset * rangePerPixelInv;
- me.svg.style.left = (-me.width - xOffset) + "px";
- }
- }
- });
- this.body.emitter.on("rangechanged", function() {
- me.lastStart = me.body.range.start;
- me.svg.style.left = util.option.asSize(-me.width);
- me._updateGraph.apply(me);
- });
+ this.dom.measureCharMinor.appendChild(document.createTextNode('0'));
+ this.dom.foreground.appendChild(this.dom.measureCharMinor);
+ }
+ this.props.minorCharHeight = this.dom.measureCharMinor.clientHeight;
+ this.props.minorCharWidth = this.dom.measureCharMinor.clientWidth;
- // create the HTML DOM
- this._create();
- this.body.emitter.emit("change");
- }
+ // determine the char width and height on the major axis
+ if (!this.dom.measureCharMajor) {
+ this.dom.measureCharMajor = document.createElement('DIV');
+ this.dom.measureCharMajor.className = 'text minor measure';
+ this.dom.measureCharMajor.style.position = 'absolute';
- LineGraph.prototype = new Component();
+ this.dom.measureCharMajor.appendChild(document.createTextNode('0'));
+ this.dom.foreground.appendChild(this.dom.measureCharMajor);
+ }
+ this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight;
+ this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth;
+ };
/**
- * Create the HTML DOM for the ItemSet
+ * Snap a date to a rounded value.
+ * The snap intervals are dependent on the current scale and step.
+ * @param {Date} date the date to be snapped.
+ * @return {Date} snappedDate
*/
- LineGraph.prototype._create = function(){
- var frame = document.createElement('div');
- frame.className = 'LineGraph';
- this.dom.frame = frame;
-
- // create svg element for graph drawing.
- this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg");
- this.svg.style.position = "relative";
- this.svg.style.height = ('' + this.options.graphHeight).replace("px",'') + 'px';
- this.svg.style.display = "block";
- frame.appendChild(this.svg);
+ TimeAxis.prototype.snap = function(date) {
+ return this.step.snap(date);
+ };
- // data axis
- this.options.dataAxis.orientation = 'left';
- this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg);
+ module.exports = TimeAxis;
- this.options.dataAxis.orientation = 'right';
- this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg);
- delete this.options.dataAxis.orientation;
- // legends
- this.legendLeft = new Legend(this.body, this.options.legend, 'left');
- this.legendRight = new Legend(this.body, this.options.legend, 'right');
+/***/ },
+/* 28 */
+/***/ function(module, exports, __webpack_require__) {
- this.show();
- };
+ var Hammer = __webpack_require__(41);
/**
- * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element.
- * @param options
+ * @constructor Item
+ * @param {Object} data Object containing (optional) parameters type,
+ * start, end, content, group, className.
+ * @param {{toScreen: function, toTime: function}} conversion
+ * Conversion functions from time to screen and vice versa
+ * @param {Object} options Configuration options
+ * // TODO: describe available options
*/
- LineGraph.prototype.setOptions = function(options) {
- if (options) {
- var fields = ['sampling','defaultGroup','graphHeight','yAxisOrientation','style','barChart','dataAxis','sort'];
- util.selectiveDeepExtend(fields, this.options, options);
- util.mergeOptions(this.options, options,'catmullRom');
- util.mergeOptions(this.options, options,'drawPoints');
- util.mergeOptions(this.options, options,'shaded');
- util.mergeOptions(this.options, options,'legend');
+ function Item (data, conversion, options) {
+ this.id = null;
+ this.parent = null;
+ this.data = data;
+ this.dom = null;
+ this.conversion = conversion || {};
+ this.options = options || {};
- if (options.catmullRom) {
- if (typeof options.catmullRom == 'object') {
- if (options.catmullRom.parametrization) {
- if (options.catmullRom.parametrization == 'uniform') {
- this.options.catmullRom.alpha = 0;
- }
- else if (options.catmullRom.parametrization == 'chordal') {
- this.options.catmullRom.alpha = 1.0;
- }
- else {
- this.options.catmullRom.parametrization = 'centripetal';
- this.options.catmullRom.alpha = 0.5;
- }
- }
- }
- }
+ this.selected = false;
+ this.displayed = false;
+ this.dirty = true;
- if (this.yAxisLeft) {
- if (options.dataAxis !== undefined) {
- this.yAxisLeft.setOptions(this.options.dataAxis);
- this.yAxisRight.setOptions(this.options.dataAxis);
- }
- }
+ this.top = null;
+ this.left = null;
+ this.width = null;
+ this.height = null;
+ }
- if (this.legendLeft) {
- if (options.legend !== undefined) {
- this.legendLeft.setOptions(this.options.legend);
- this.legendRight.setOptions(this.options.legend);
- }
- }
+ /**
+ * Select current item
+ */
+ Item.prototype.select = function() {
+ this.selected = true;
+ if (this.displayed) this.redraw();
+ };
- if (this.groups.hasOwnProperty(UNGROUPED)) {
- this.groups[UNGROUPED].setOptions(options);
+ /**
+ * Unselect current item
+ */
+ Item.prototype.unselect = function() {
+ this.selected = false;
+ if (this.displayed) this.redraw();
+ };
+
+ /**
+ * Set a parent for the item
+ * @param {ItemSet | Group} parent
+ */
+ Item.prototype.setParent = function(parent) {
+ if (this.displayed) {
+ this.hide();
+ this.parent = parent;
+ if (this.parent) {
+ this.show();
}
}
- if (this.dom.frame) {
- this._updateGraph();
+ else {
+ this.parent = parent;
}
};
/**
- * Hide the component from the DOM
+ * Check whether this item is visible inside given range
+ * @returns {{start: Number, end: Number}} range with a timestamp for start and end
+ * @returns {boolean} True if visible
*/
- LineGraph.prototype.hide = function() {
- // remove the frame containing the items
- if (this.dom.frame.parentNode) {
- this.dom.frame.parentNode.removeChild(this.dom.frame);
- }
+ Item.prototype.isVisible = function(range) {
+ // Should be implemented by Item implementations
+ return false;
};
/**
- * Show the component in the DOM (when not already visible).
+ * Show the Item in the DOM (when not already visible)
* @return {Boolean} changed
*/
- LineGraph.prototype.show = function() {
- // show frame containing the items
- if (!this.dom.frame.parentNode) {
- this.body.dom.center.appendChild(this.dom.frame);
- }
+ Item.prototype.show = function() {
+ return false;
};
-
/**
- * Set items
- * @param {vis.DataSet | null} items
+ * Hide the Item from the DOM (when visible)
+ * @return {Boolean} changed
*/
- LineGraph.prototype.setItems = function(items) {
- var me = this,
- ids,
- oldItemsData = this.itemsData;
+ Item.prototype.hide = function() {
+ return false;
+ };
- // replace the dataset
- if (!items) {
- this.itemsData = null;
- }
- else if (items instanceof DataSet || items instanceof DataView) {
- this.itemsData = items;
- }
- else {
- throw new TypeError('Data must be an instance of DataSet or DataView');
- }
-
- if (oldItemsData) {
- // unsubscribe from old dataset
- util.forEach(this.itemListeners, function (callback, event) {
- oldItemsData.off(event, callback);
- });
-
- // remove all drawn items
- ids = oldItemsData.getIds();
- this._onRemove(ids);
- }
-
- if (this.itemsData) {
- // subscribe to new dataset
- var id = this.id;
- util.forEach(this.itemListeners, function (callback, event) {
- me.itemsData.on(event, callback, id);
- });
-
- // add all new items
- ids = this.itemsData.getIds();
- this._onAdd(ids);
- }
- this._updateUngrouped();
- this._updateGraph();
- this.redraw();
+ /**
+ * Repaint the item
+ */
+ Item.prototype.redraw = function() {
+ // should be implemented by the item
};
/**
- * Set groups
- * @param {vis.DataSet} groups
+ * Reposition the Item horizontally
*/
- LineGraph.prototype.setGroups = function(groups) {
- var me = this,
- ids;
+ Item.prototype.repositionX = function() {
+ // should be implemented by the item
+ };
- // unsubscribe from current dataset
- if (this.groupsData) {
- util.forEach(this.groupListeners, function (callback, event) {
- me.groupsData.unsubscribe(event, callback);
- });
+ /**
+ * Reposition the Item vertically
+ */
+ Item.prototype.repositionY = function() {
+ // should be implemented by the item
+ };
- // remove all drawn groups
- ids = this.groupsData.getIds();
- this.groupsData = null;
- this._onRemoveGroups(ids); // note: this will cause a redraw
- }
+ /**
+ * Repaint a delete button on the top right of the item when the item is selected
+ * @param {HTMLElement} anchor
+ * @protected
+ */
+ Item.prototype._repaintDeleteButton = function (anchor) {
+ if (this.selected && this.options.editable.remove && !this.dom.deleteButton) {
+ // create and show button
+ var me = this;
- // replace the dataset
- if (!groups) {
- this.groupsData = null;
- }
- else if (groups instanceof DataSet || groups instanceof DataView) {
- this.groupsData = groups;
- }
- else {
- throw new TypeError('Data must be an instance of DataSet or DataView');
- }
+ var deleteButton = document.createElement('div');
+ deleteButton.className = 'delete';
+ deleteButton.title = 'Delete this item';
- if (this.groupsData) {
- // subscribe to new dataset
- var id = this.id;
- util.forEach(this.groupListeners, function (callback, event) {
- me.groupsData.on(event, callback, id);
+ Hammer(deleteButton, {
+ preventDefault: true
+ }).on('tap', function (event) {
+ me.parent.removeFromDataSet(me);
+ event.stopPropagation();
});
- // draw all ms
- ids = this.groupsData.getIds();
- this._onAddGroups(ids);
+ anchor.appendChild(deleteButton);
+ this.dom.deleteButton = deleteButton;
+ }
+ else if (!this.selected && this.dom.deleteButton) {
+ // remove button
+ if (this.dom.deleteButton.parentNode) {
+ this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton);
+ }
+ this.dom.deleteButton = null;
}
- this._onUpdate();
};
+ module.exports = Item;
- LineGraph.prototype._onUpdate = function(ids) {
- this._updateUngrouped();
- this._updateAllGroupData();
- this._updateGraph();
- this.redraw();
- };
- LineGraph.prototype._onAdd = function (ids) {this._onUpdate(ids);};
- LineGraph.prototype._onRemove = function (ids) {this._onUpdate(ids);};
- LineGraph.prototype._onUpdateGroups = function (groupIds) {
- for (var i = 0; i < groupIds.length; i++) {
- var group = this.groupsData.get(groupIds[i]);
- this._updateGroup(group, groupIds[i]);
- }
-
- this._updateGraph();
- this.redraw();
- };
- LineGraph.prototype._onAddGroups = function (groupIds) {this._onUpdateGroups(groupIds);};
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
- LineGraph.prototype._onRemoveGroups = function (groupIds) {
- for (var i = 0; i < groupIds.length; i++) {
- if (!this.groups.hasOwnProperty(groupIds[i])) {
- if (this.groups[groupIds[i]].options.yAxisOrientation == 'right') {
- this.yAxisRight.removeGroup(groupIds[i]);
- this.legendRight.removeGroup(groupIds[i]);
- this.legendRight.redraw();
- }
- else {
- this.yAxisLeft.removeGroup(groupIds[i]);
- this.legendLeft.removeGroup(groupIds[i]);
- this.legendLeft.redraw();
- }
- delete this.groups[groupIds[i]];
- }
- }
- this._updateUngrouped();
- this._updateGraph();
- this.redraw();
- };
+ var Item = __webpack_require__(28);
/**
- * update a group object
- *
- * @param group
- * @param groupId
- * @private
+ * @constructor ItemBox
+ * @extends Item
+ * @param {Object} data Object containing parameters start
+ * content, className.
+ * @param {{toScreen: function, toTime: function}} conversion
+ * Conversion functions from time to screen and vice versa
+ * @param {Object} [options] Configuration options
+ * // TODO: describe available options
*/
- LineGraph.prototype._updateGroup = function (group, groupId) {
- if (!this.groups.hasOwnProperty(groupId)) {
- this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles);
- if (this.groups[groupId].options.yAxisOrientation == 'right') {
- this.yAxisRight.addGroup(groupId, this.groups[groupId]);
- this.legendRight.addGroup(groupId, this.groups[groupId]);
- }
- else {
- this.yAxisLeft.addGroup(groupId, this.groups[groupId]);
- this.legendLeft.addGroup(groupId, this.groups[groupId]);
- }
- }
- else {
- this.groups[groupId].update(group);
- if (this.groups[groupId].options.yAxisOrientation == 'right') {
- this.yAxisRight.updateGroup(groupId, this.groups[groupId]);
- this.legendRight.updateGroup(groupId, this.groups[groupId]);
+ function ItemBox (data, conversion, options) {
+ this.props = {
+ dot: {
+ width: 0,
+ height: 0
+ },
+ line: {
+ width: 0,
+ height: 0
}
- else {
- this.yAxisLeft.updateGroup(groupId, this.groups[groupId]);
- this.legendLeft.updateGroup(groupId, this.groups[groupId]);
+ };
+
+ // validate data
+ if (data) {
+ if (data.start == undefined) {
+ throw new Error('Property "start" missing in item ' + data);
}
}
- this.legendLeft.redraw();
- this.legendRight.redraw();
- };
- LineGraph.prototype._updateAllGroupData = function () {
- if (this.itemsData != null) {
- // ~450 ms @ 500k
+ Item.call(this, data, conversion, options);
+ }
- var groupsContent = {};
- for (var groupId in this.groups) {
- if (this.groups.hasOwnProperty(groupId)) {
- groupsContent[groupId] = [];
- }
- }
- for (var itemId in this.itemsData._data) {
- if (this.itemsData._data.hasOwnProperty(itemId)) {
- var item = this.itemsData._data[itemId];
- item.x = util.convert(item.x,"Date");
- groupsContent[item.group].push(item);
- }
- }
- for (var groupId in this.groups) {
- if (this.groups.hasOwnProperty(groupId)) {
- this.groups[groupId].setItems(groupsContent[groupId]);
- }
- }
- // // ~4500ms @ 500k
- // for (var groupId in this.groups) {
- // if (this.groups.hasOwnProperty(groupId)) {
- // this.groups[groupId].setItems(this.itemsData.get({filter:
- // function (item) {
- // return (item.group == groupId);
- // }, type:{x:"Date"}}
- // ));
- // }
- // }
- }
+ ItemBox.prototype = new Item (null, null, null);
+
+ /**
+ * Check whether this item is visible inside given range
+ * @returns {{start: Number, end: Number}} range with a timestamp for start and end
+ * @returns {boolean} True if visible
+ */
+ ItemBox.prototype.isVisible = function(range) {
+ // determine visibility
+ // TODO: account for the real width of the item. Right now we just add 1/4 to the window
+ var interval = (range.end - range.start) / 4;
+ return (this.data.start > range.start - interval) && (this.data.start < range.end + interval);
};
/**
- * Create or delete the group holding all ungrouped items. This group is used when
- * there are no groups specified. This anonymous group is called 'graph'.
- * @protected
+ * Repaint the item
*/
- LineGraph.prototype._updateUngrouped = function() {
- if (this.itemsData != null) {
- // var t0 = new Date();
- var group = {id: UNGROUPED, content: this.options.defaultGroup};
- this._updateGroup(group, UNGROUPED);
- var ungroupedCounter = 0;
- if (this.itemsData) {
- for (var itemId in this.itemsData._data) {
- if (this.itemsData._data.hasOwnProperty(itemId)) {
- var item = this.itemsData._data[itemId];
- if (item != undefined) {
- if (item.hasOwnProperty('group')) {
- if (item.group === undefined) {
- item.group = UNGROUPED;
- }
- }
- else {
- item.group = UNGROUPED;
- }
- ungroupedCounter = item.group == UNGROUPED ? ungroupedCounter + 1 : ungroupedCounter;
- }
- }
- }
- }
+ ItemBox.prototype.redraw = function() {
+ var dom = this.dom;
+ if (!dom) {
+ // create DOM
+ this.dom = {};
+ dom = this.dom;
- // much much slower
- // var datapoints = this.itemsData.get({
- // filter: function (item) {return item.group === undefined;},
- // showInternalIds:true
- // });
- // if (datapoints.length > 0) {
- // var updateQuery = [];
- // for (var i = 0; i < datapoints.length; i++) {
- // updateQuery.push({id:datapoints[i].id, group: UNGROUPED});
- // }
- // this.itemsData.update(updateQuery, true);
- // }
- // var t1 = new Date();
- // var pointInUNGROUPED = this.itemsData.get({filter: function (item) {return item.group == UNGROUPED;}});
- if (ungroupedCounter == 0) {
- delete this.groups[UNGROUPED];
- this.legendLeft.removeGroup(UNGROUPED);
- this.legendRight.removeGroup(UNGROUPED);
- this.yAxisLeft.removeGroup(UNGROUPED);
- this.yAxisRight.removeGroup(UNGROUPED);
+ // create main box
+ dom.box = document.createElement('DIV');
+
+ // contents box (inside the background box). used for making margins
+ dom.content = document.createElement('DIV');
+ dom.content.className = 'content';
+ dom.box.appendChild(dom.content);
+
+ // line to axis
+ dom.line = document.createElement('DIV');
+ dom.line.className = 'line';
+
+ // dot on axis
+ dom.dot = document.createElement('DIV');
+ dom.dot.className = 'dot';
+
+ // attach this item as attribute
+ dom.box['timeline-item'] = this;
+ }
+
+ // append DOM to parent DOM
+ if (!this.parent) {
+ throw new Error('Cannot redraw item: no parent attached');
+ }
+ if (!dom.box.parentNode) {
+ var foreground = this.parent.dom.foreground;
+ if (!foreground) throw new Error('Cannot redraw time axis: parent has no foreground container element');
+ foreground.appendChild(dom.box);
+ }
+ if (!dom.line.parentNode) {
+ var background = this.parent.dom.background;
+ if (!background) throw new Error('Cannot redraw time axis: parent has no background container element');
+ background.appendChild(dom.line);
+ }
+ if (!dom.dot.parentNode) {
+ var axis = this.parent.dom.axis;
+ if (!background) throw new Error('Cannot redraw time axis: parent has no axis container element');
+ axis.appendChild(dom.dot);
+ }
+ this.displayed = true;
+
+ // update contents
+ if (this.data.content != this.content) {
+ this.content = this.data.content;
+ if (this.content instanceof Element) {
+ dom.content.innerHTML = '';
+ dom.content.appendChild(this.content);
}
- // console.log("getting amount ungrouped",new Date() - t1);
- // console.log("putting in ungrouped",new Date() - t0);
+ else if (this.data.content != undefined) {
+ dom.content.innerHTML = this.content;
+ }
+ else {
+ throw new Error('Property "content" missing in item ' + this.data.id);
+ }
+
+ this.dirty = true;
}
- else {
- delete this.groups[UNGROUPED];
- this.legendLeft.removeGroup(UNGROUPED);
- this.legendRight.removeGroup(UNGROUPED);
- this.yAxisLeft.removeGroup(UNGROUPED);
- this.yAxisRight.removeGroup(UNGROUPED);
+
+ // update title
+ if (this.data.title != this.title) {
+ dom.box.title = this.data.title;
+ this.title = this.data.title;
}
- this.legendLeft.redraw();
- this.legendRight.redraw();
+ // update class
+ var className = (this.data.className? ' ' + this.data.className : '') +
+ (this.selected ? ' selected' : '');
+ if (this.className != className) {
+ this.className = className;
+ dom.box.className = 'item box' + className;
+ dom.line.className = 'item line' + className;
+ dom.dot.className = 'item dot' + className;
+
+ this.dirty = true;
+ }
+
+ // recalculate size
+ if (this.dirty) {
+ this.props.dot.height = dom.dot.offsetHeight;
+ this.props.dot.width = dom.dot.offsetWidth;
+ this.props.line.width = dom.line.offsetWidth;
+ this.width = dom.box.offsetWidth;
+ this.height = dom.box.offsetHeight;
+
+ this.dirty = false;
+ }
+
+ this._repaintDeleteButton(dom.box);
};
+ /**
+ * Show the item in the DOM (when not already displayed). The items DOM will
+ * be created when needed.
+ */
+ ItemBox.prototype.show = function() {
+ if (!this.displayed) {
+ this.redraw();
+ }
+ };
/**
- * Redraw the component, mandatory function
- * @return {boolean} Returns true if the component is resized
+ * Hide the item from the DOM (when visible)
*/
- LineGraph.prototype.redraw = function() {
- var resized = false;
+ ItemBox.prototype.hide = function() {
+ if (this.displayed) {
+ var dom = this.dom;
- this.svg.style.height = ('' + this.options.graphHeight).replace('px','') + 'px';
- if (this.lastWidth === undefined && this.width || this.lastWidth != this.width) {
- resized = true;
+ if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box);
+ if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line);
+ if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot);
+
+ this.top = null;
+ this.left = null;
+
+ this.displayed = false;
}
- // check if this component is resized
- resized = this._isResized() || resized;
- // check whether zoomed (in that case we need to re-stack everything)
- var visibleInterval = this.body.range.end - this.body.range.start;
- var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.width != this.lastWidth);
- this.lastVisibleInterval = visibleInterval;
- this.lastWidth = this.width;
+ };
- // calculate actual size and position
- this.width = this.dom.frame.offsetWidth;
+ /**
+ * Reposition the item horizontally
+ * @Override
+ */
+ ItemBox.prototype.repositionX = function() {
+ var start = this.conversion.toScreen(this.data.start),
+ align = this.options.align,
+ left,
+ box = this.dom.box,
+ line = this.dom.line,
+ dot = this.dom.dot;
- // the svg element is three times as big as the width, this allows for fully dragging left and right
- // without reloading the graph. the controls for this are bound to events in the constructor
- if (resized == true) {
- this.svg.style.width = util.option.asSize(3*this.width);
- this.svg.style.left = util.option.asSize(-this.width);
+ // calculate left position of the box
+ if (align == 'right') {
+ this.left = start - this.width;
}
- if (zoomed == true) {
- this._updateGraph();
+ else if (align == 'left') {
+ this.left = start;
+ }
+ else {
+ // default or 'center'
+ this.left = start - this.width / 2;
}
- this.legendLeft.redraw();
- this.legendRight.redraw();
+ // reposition box
+ box.style.left = this.left + 'px';
- return resized;
+ // reposition line
+ line.style.left = (start - this.props.line.width / 2) + 'px';
+
+ // reposition dot
+ dot.style.left = (start - this.props.dot.width / 2) + 'px';
};
/**
- * Update and redraw the graph.
- *
+ * Reposition the item vertically
+ * @Override
*/
- LineGraph.prototype._updateGraph = function () {
- // reset the svg elements
- DOMutil.prepareElements(this.svgElements);
- // // very slow...
- // groupData = group.itemsData.get({filter:
- // function (item) {
- // return (item.x > minDate && item.x < maxDate);
- // }}
- // );
+ ItemBox.prototype.repositionY = function() {
+ var orientation = this.options.orientation,
+ box = this.dom.box,
+ line = this.dom.line,
+ dot = this.dom.dot;
+ if (orientation == 'top') {
+ box.style.top = (this.top || 0) + 'px';
- if (this.width != 0 && this.itemsData != null) {
- var group, groupData, preprocessedGroup, i;
- var preprocessedGroupData = [];
- var processedGroupData = [];
- var groupRanges = [];
- var changeCalled = false;
+ line.style.top = '0';
+ line.style.height = (this.parent.top + this.top + 1) + 'px';
+ line.style.bottom = '';
+ }
+ else { // orientation 'bottom'
+ var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty
+ var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top;
- // getting group Ids
- var groupIds = [];
- for (var groupId in this.groups) {
- if (this.groups.hasOwnProperty(groupId)) {
- groupIds.push(groupId);
- }
- }
+ box.style.top = (this.parent.height - this.top - this.height || 0) + 'px';
+ line.style.top = (itemSetHeight - lineHeight) + 'px';
+ line.style.bottom = '0';
+ }
- // this is the range of the SVG canvas
- var minDate = this.body.util.toGlobalTime(- this.body.domProps.root.width);
- var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width);
+ dot.style.top = (-this.props.dot.height / 2) + 'px';
+ };
- // first select and preprocess the data from the datasets.
- // the groups have their preselection of data, we now loop over this data to see
- // what data we need to draw. Sorted data is much faster.
- // more optimization is possible by doing the sampling before and using the binary search
- // to find the end date to determine the increment.
- if (groupIds.length > 0) {
- for (i = 0; i < groupIds.length; i++) {
- group = this.groups[groupIds[i]];
- groupData = [];
- // optimization for sorted data
- if (group.options.sort == true) {
- var guess = Math.max(0,util.binarySearchGeneric(group.itemsData, minDate, 'x', 'before'));
+ module.exports = ItemBox;
- for (var j = guess; j < group.itemsData.length; j++) {
- var item = group.itemsData[j];
- if (item !== undefined) {
- if (item.x > maxDate) {
- groupData.push(item);
- break;
- }
- else {
- groupData.push(item);
- }
- }
- }
- }
- else {
- for (var j = 0; j < group.itemsData.length; j++) {
- var item = group.itemsData[j];
- if (item !== undefined) {
- if (item.x > minDate && item.x < maxDate) {
- groupData.push(item);
- }
- }
- }
- }
- // preprocess, split into ranges and data
- preprocessedGroup = this._preprocessData(groupData, group);
- groupRanges.push({min: preprocessedGroup.min, max: preprocessedGroup.max});
- preprocessedGroupData.push(preprocessedGroup.data);
- }
- // update the Y axis first, we use this data to draw at the correct Y points
- // changeCalled is required to clean the SVG on a change emit.
- changeCalled = this._updateYAxis(groupIds, groupRanges);
- if (changeCalled == true) {
- DOMutil.cleanupElements(this.svgElements);
- this.body.emitter.emit("change");
- return;
- }
+/***/ },
+/* 30 */
+/***/ function(module, exports, __webpack_require__) {
- // with the yAxis scaled correctly, use this to get the Y values of the points.
- for (i = 0; i < groupIds.length; i++) {
- group = this.groups[groupIds[i]];
- processedGroupData.push(this._convertYvalues(preprocessedGroupData[i],group))
- }
+ var Item = __webpack_require__(28);
- // draw the groups
- for (i = 0; i < groupIds.length; i++) {
- group = this.groups[groupIds[i]];
- if (group.options.style == 'line') {
- this._drawLineGraph(processedGroupData[i], group);
- }
- else {
- this._drawBarGraph (processedGroupData[i], group);
- }
- }
+ /**
+ * @constructor ItemPoint
+ * @extends Item
+ * @param {Object} data Object containing parameters start
+ * content, className.
+ * @param {{toScreen: function, toTime: function}} conversion
+ * Conversion functions from time to screen and vice versa
+ * @param {Object} [options] Configuration options
+ * // TODO: describe available options
+ */
+ function ItemPoint (data, conversion, options) {
+ this.props = {
+ dot: {
+ top: 0,
+ width: 0,
+ height: 0
+ },
+ content: {
+ height: 0,
+ marginLeft: 0
+ }
+ };
+
+ // validate data
+ if (data) {
+ if (data.start == undefined) {
+ throw new Error('Property "start" missing in item ' + data);
}
}
- // cleanup unused svg elements
- DOMutil.cleanupElements(this.svgElements);
+ Item.call(this, data, conversion, options);
+ }
+
+ ItemPoint.prototype = new Item (null, null, null);
+
+ /**
+ * Check whether this item is visible inside given range
+ * @returns {{start: Number, end: Number}} range with a timestamp for start and end
+ * @returns {boolean} True if visible
+ */
+ ItemPoint.prototype.isVisible = function(range) {
+ // determine visibility
+ // TODO: account for the real width of the item. Right now we just add 1/4 to the window
+ var interval = (range.end - range.start) / 4;
+ return (this.data.start > range.start - interval) && (this.data.start < range.end + interval);
};
/**
- * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden.
- * @param {array} groupIds
- * @private
+ * Repaint the item
*/
- LineGraph.prototype._updateYAxis = function (groupIds, groupRanges) {
- var changeCalled = false;
- var yAxisLeftUsed = false;
- var yAxisRightUsed = false;
- var minLeft = 1e9, minRight = 1e9, maxLeft = -1e9, maxRight = -1e9, minVal, maxVal;
- var orientation = 'left';
+ ItemPoint.prototype.redraw = function() {
+ var dom = this.dom;
+ if (!dom) {
+ // create DOM
+ this.dom = {};
+ dom = this.dom;
- // if groups are present
- if (groupIds.length > 0) {
- for (var i = 0; i < groupIds.length; i++) {
- orientation = 'left';
- var group = this.groups[groupIds[i]];
- if (group.options.yAxisOrientation == 'right') {
- orientation = 'right';
- }
+ // background box
+ dom.point = document.createElement('div');
+ // className is updated in redraw()
- minVal = groupRanges[i].min;
- maxVal = groupRanges[i].max;
+ // contents box, right from the dot
+ dom.content = document.createElement('div');
+ dom.content.className = 'content';
+ dom.point.appendChild(dom.content);
- if (orientation == 'left') {
- yAxisLeftUsed = true;
- minLeft = minLeft > minVal ? minVal : minLeft;
- maxLeft = maxLeft < maxVal ? maxVal : maxLeft;
- }
- else {
- yAxisRightUsed = true;
- minRight = minRight > minVal ? minVal : minRight;
- maxRight = maxRight < maxVal ? maxVal : maxRight;
- }
- }
- if (yAxisLeftUsed == true) {
- this.yAxisLeft.setRange(minLeft, maxLeft);
- }
- if (yAxisRightUsed == true) {
- this.yAxisRight.setRange(minRight, maxRight);
+ // dot at start
+ dom.dot = document.createElement('div');
+ dom.point.appendChild(dom.dot);
+
+ // attach this item as attribute
+ dom.point['timeline-item'] = this;
+ }
+
+ // append DOM to parent DOM
+ if (!this.parent) {
+ throw new Error('Cannot redraw item: no parent attached');
+ }
+ if (!dom.point.parentNode) {
+ var foreground = this.parent.dom.foreground;
+ if (!foreground) {
+ throw new Error('Cannot redraw time axis: parent has no foreground container element');
}
+ foreground.appendChild(dom.point);
}
+ this.displayed = true;
- changeCalled = this._toggleAxisVisiblity(yAxisLeftUsed , this.yAxisLeft) || changeCalled;
- changeCalled = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || changeCalled;
+ // update contents
+ if (this.data.content != this.content) {
+ this.content = this.data.content;
+ if (this.content instanceof Element) {
+ dom.content.innerHTML = '';
+ dom.content.appendChild(this.content);
+ }
+ else if (this.data.content != undefined) {
+ dom.content.innerHTML = this.content;
+ }
+ else {
+ throw new Error('Property "content" missing in item ' + this.data.id);
+ }
- if (yAxisRightUsed == true && yAxisLeftUsed == true) {
- this.yAxisLeft.drawIcons = true;
- this.yAxisRight.drawIcons = true;
+ this.dirty = true;
}
- else {
- this.yAxisLeft.drawIcons = false;
- this.yAxisRight.drawIcons = false;
+
+ // update title
+ if (this.data.title != this.title) {
+ dom.point.title = this.data.title;
+ this.title = this.data.title;
}
- this.yAxisRight.master = !yAxisLeftUsed;
+ // update class
+ var className = (this.data.className? ' ' + this.data.className : '') +
+ (this.selected ? ' selected' : '');
+ if (this.className != className) {
+ this.className = className;
+ dom.point.className = 'item point' + className;
+ dom.dot.className = 'item dot' + className;
- if (this.yAxisRight.master == false) {
- if (yAxisRightUsed == true) {
- this.yAxisLeft.lineOffset = this.yAxisRight.width;
- }
- changeCalled = this.yAxisLeft.redraw() || changeCalled;
- this.yAxisRight.stepPixelsForced = this.yAxisLeft.stepPixels;
- changeCalled = this.yAxisRight.redraw() || changeCalled;
+ this.dirty = true;
}
- else {
- changeCalled = this.yAxisRight.redraw() || changeCalled;
+
+ // recalculate size
+ if (this.dirty) {
+ this.width = dom.point.offsetWidth;
+ this.height = dom.point.offsetHeight;
+ this.props.dot.width = dom.dot.offsetWidth;
+ this.props.dot.height = dom.dot.offsetHeight;
+ this.props.content.height = dom.content.offsetHeight;
+
+ // resize contents
+ dom.content.style.marginLeft = 2 * this.props.dot.width + 'px';
+ //dom.content.style.marginRight = ... + 'px'; // TODO: margin right
+
+ dom.dot.style.top = ((this.height - this.props.dot.height) / 2) + 'px';
+ dom.dot.style.left = (this.props.dot.width / 2) + 'px';
+
+ this.dirty = false;
}
- return changeCalled;
+
+ this._repaintDeleteButton(dom.point);
};
/**
- * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function
- *
- * @param {boolean} axisUsed
- * @returns {boolean}
- * @private
- * @param axis
+ * Show the item in the DOM (when not already visible). The items DOM will
+ * be created when needed.
*/
- LineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) {
- var changed = false;
- if (axisUsed == false) {
- if (axis.dom.frame.parentNode) {
- axis.hide();
- changed = true;
- }
- }
- else {
- if (!axis.dom.frame.parentNode) {
- axis.show();
- changed = true;
- }
+ ItemPoint.prototype.show = function() {
+ if (!this.displayed) {
+ this.redraw();
}
- return changed;
};
-
/**
- * draw a bar graph
- * @param datapoints
- * @param group
+ * Hide the item from the DOM (when visible)
*/
- LineGraph.prototype._drawBarGraph = function (dataset, group) {
- if (dataset != null) {
- if (dataset.length > 0) {
- var coreDistance;
- var minWidth = 0.1 * group.options.barChart.width;
- var offset = 0;
- var width = group.options.barChart.width;
-
- if (group.options.barChart.align == 'left') {offset -= 0.5*width;}
- else if (group.options.barChart.align == 'right') {offset += 0.5*width;}
-
- for (var i = 0; i < dataset.length; i++) {
- // dynammically downscale the width so there is no overlap up to 1/10th the original width
- if (i+1 < dataset.length) {coreDistance = Math.abs(dataset[i+1].x - dataset[i].x);}
- if (i > 0) {coreDistance = Math.min(coreDistance,Math.abs(dataset[i-1].x - dataset[i].x));}
- if (coreDistance < width) {width = coreDistance < minWidth ? minWidth : coreDistance;}
+ ItemPoint.prototype.hide = function() {
+ if (this.displayed) {
+ if (this.dom.point.parentNode) {
+ this.dom.point.parentNode.removeChild(this.dom.point);
+ }
- DOMutil.drawBar(dataset[i].x + offset, dataset[i].y, width, group.zeroPosition - dataset[i].y, group.className + ' bar', this.svgElements, this.svg);
- }
+ this.top = null;
+ this.left = null;
- // draw points
- if (group.options.drawPoints.enabled == true) {
- this._drawPoints(dataset, group, this.svgElements, this.svg, offset);
- }
- }
+ this.displayed = false;
}
};
-
/**
- * draw a line graph
- *
- * @param datapoints
- * @param group
+ * Reposition the item horizontally
+ * @Override
*/
- LineGraph.prototype._drawLineGraph = function (dataset, group) {
- if (dataset != null) {
- if (dataset.length > 0) {
- var path, d;
- var svgHeight = Number(this.svg.style.height.replace("px",""));
- path = DOMutil.getSVGElement('path', this.svgElements, this.svg);
- path.setAttributeNS(null, "class", group.className);
-
- // construct path from dataset
- if (group.options.catmullRom.enabled == true) {
- d = this._catmullRom(dataset, group);
- }
- else {
- d = this._linear(dataset);
- }
+ ItemPoint.prototype.repositionX = function() {
+ var start = this.conversion.toScreen(this.data.start);
- // append with points for fill and finalize the path
- if (group.options.shaded.enabled == true) {
- var fillPath = DOMutil.getSVGElement('path',this.svgElements, this.svg);
- var dFill;
- if (group.options.shaded.orientation == 'top') {
- dFill = "M" + dataset[0].x + "," + 0 + " " + d + "L" + dataset[dataset.length - 1].x + "," + 0;
- }
- else {
- dFill = "M" + dataset[0].x + "," + svgHeight + " " + d + "L" + dataset[dataset.length - 1].x + "," + svgHeight;
- }
- fillPath.setAttributeNS(null, "class", group.className + " fill");
- fillPath.setAttributeNS(null, "d", dFill);
- }
- // copy properties to path for drawing.
- path.setAttributeNS(null, "d", "M" + d);
+ this.left = start - this.props.dot.width;
- // draw points
- if (group.options.drawPoints.enabled == true) {
- this._drawPoints(dataset, group, this.svgElements, this.svg);
- }
- }
- }
+ // reposition point
+ this.dom.point.style.left = this.left + 'px';
};
/**
- * draw the data points
- *
- * @param dataset
- * @param JSONcontainer
- * @param svg
- * @param group
+ * Reposition the item vertically
+ * @Override
*/
- LineGraph.prototype._drawPoints = function (dataset, group, JSONcontainer, svg, offset) {
- if (offset === undefined) {offset = 0;}
- for (var i = 0; i < dataset.length; i++) {
- DOMutil.drawPoint(dataset[i].x + offset, dataset[i].y, group, JSONcontainer, svg);
+ ItemPoint.prototype.repositionY = function() {
+ var orientation = this.options.orientation,
+ point = this.dom.point;
+
+ if (orientation == 'top') {
+ point.style.top = this.top + 'px';
+ }
+ else {
+ point.style.top = (this.parent.height - this.top - this.height) + 'px';
}
};
+ module.exports = ItemPoint;
+
+
+/***/ },
+/* 31 */
+/***/ function(module, exports, __webpack_require__) {
+ var Hammer = __webpack_require__(41);
+ var Item = __webpack_require__(28);
/**
- * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the
- * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for
- * the yAxis.
- *
- * @param datapoints
- * @returns {Array}
- * @private
+ * @constructor ItemRange
+ * @extends Item
+ * @param {Object} data Object containing parameters start, end
+ * content, className.
+ * @param {{toScreen: function, toTime: function}} conversion
+ * Conversion functions from time to screen and vice versa
+ * @param {Object} [options] Configuration options
+ * // TODO: describe options
*/
- LineGraph.prototype._preprocessData = function (datapoints, group) {
- var extractedData = [];
- var xValue, yValue;
- var toScreen = this.body.util.toScreen;
+ function ItemRange (data, conversion, options) {
+ this.props = {
+ content: {
+ width: 0
+ }
+ };
+ this.overflow = false; // if contents can overflow (css styling), this flag is set to true
- var increment = 1;
- var amountOfPoints = datapoints.length;
+ // validate data
+ if (data) {
+ if (data.start == undefined) {
+ throw new Error('Property "start" missing in item ' + data.id);
+ }
+ if (data.end == undefined) {
+ throw new Error('Property "end" missing in item ' + data.id);
+ }
+ }
- var yMin = datapoints[0].y;
- var yMax = datapoints[0].y;
+ Item.call(this, data, conversion, options);
+ }
- // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop
- // of width changing of the yAxis.
- if (group.options.sampling == true) {
- var xDistance = this.body.util.toGlobalScreen(datapoints[datapoints.length-1].x) - this.body.util.toGlobalScreen(datapoints[0].x);
- var pointsPerPixel = amountOfPoints/xDistance;
- increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1,Math.round(pointsPerPixel)));
- }
+ ItemRange.prototype = new Item (null, null, null);
- for (var i = 0; i < amountOfPoints; i += increment) {
- xValue = toScreen(datapoints[i].x) + this.width - 1;
- yValue = datapoints[i].y;
- extractedData.push({x: xValue, y: yValue});
- yMin = yMin > yValue ? yValue : yMin;
- yMax = yMax < yValue ? yValue : yMax;
- }
+ ItemRange.prototype.baseClassName = 'item range';
- // extractedData.sort(function (a,b) {return a.x - b.x;});
- return {min: yMin, max: yMax, data: extractedData};
+ /**
+ * Check whether this item is visible inside given range
+ * @returns {{start: Number, end: Number}} range with a timestamp for start and end
+ * @returns {boolean} True if visible
+ */
+ ItemRange.prototype.isVisible = function(range) {
+ // determine visibility
+ return (this.data.start < range.end) && (this.data.end > range.start);
};
/**
- * This uses the DataAxis object to generate the correct Y coordinate on the SVG window. It uses the
- * util function toScreen to get the x coordinate from the timestamp.
- *
- * @param datapoints
- * @param options
- * @returns {Array}
- * @private
+ * Repaint the item
*/
- LineGraph.prototype._convertYvalues = function (datapoints, group) {
- var extractedData = [];
- var xValue, yValue;
- var axis = this.yAxisLeft;
- var svgHeight = Number(this.svg.style.height.replace("px",""));
-
- if (group.options.yAxisOrientation == 'right') {
- axis = this.yAxisRight;
- }
+ ItemRange.prototype.redraw = function() {
+ var dom = this.dom;
+ if (!dom) {
+ // create DOM
+ this.dom = {};
+ dom = this.dom;
- for (var i = 0; i < datapoints.length; i++) {
- xValue = datapoints[i].x;
- yValue = Math.round(axis.convertValue(datapoints[i].y));
- extractedData.push({x: xValue, y: yValue});
- }
+ // background box
+ dom.box = document.createElement('div');
+ // className is updated in redraw()
- group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0)));
+ // contents box
+ dom.content = document.createElement('div');
+ dom.content.className = 'content';
+ dom.box.appendChild(dom.content);
- // extractedData.sort(function (a,b) {return a.x - b.x;});
- return extractedData;
- };
+ // attach this item as attribute
+ dom.box['timeline-item'] = this;
+ }
+ // append DOM to parent DOM
+ if (!this.parent) {
+ throw new Error('Cannot redraw item: no parent attached');
+ }
+ if (!dom.box.parentNode) {
+ var foreground = this.parent.dom.foreground;
+ if (!foreground) {
+ throw new Error('Cannot redraw time axis: parent has no foreground container element');
+ }
+ foreground.appendChild(dom.box);
+ }
+ this.displayed = true;
- /**
- * This uses an uniform parametrization of the CatmullRom algorithm:
- * "On the Parameterization of Catmull-Rom Curves" by Cem Yuksel et al.
- * @param data
- * @returns {string}
- * @private
- */
- LineGraph.prototype._catmullRomUniform = function(data) {
- // catmull rom
- var p0, p1, p2, p3, bp1, bp2;
- var d = Math.round(data[0].x) + "," + Math.round(data[0].y) + " ";
- var normalization = 1/6;
- var length = data.length;
- for (var i = 0; i < length - 1; i++) {
+ // update contents
+ if (this.data.content != this.content) {
+ this.content = this.data.content;
+ if (this.content instanceof Element) {
+ dom.content.innerHTML = '';
+ dom.content.appendChild(this.content);
+ }
+ else if (this.data.content != undefined) {
+ dom.content.innerHTML = this.content;
+ }
+ else {
+ throw new Error('Property "content" missing in item ' + this.data.id);
+ }
- p0 = (i == 0) ? data[0] : data[i-1];
- p1 = data[i];
- p2 = data[i+1];
- p3 = (i + 2 < length) ? data[i+2] : p2;
+ this.dirty = true;
+ }
+ // update title
+ if (this.data.title != this.title) {
+ dom.box.title = this.data.title;
+ this.title = this.data.title;
+ }
- // Catmull-Rom to Cubic Bezier conversion matrix
- // 0 1 0 0
- // -1/6 1 1/6 0
- // 0 1/6 1 -1/6
- // 0 0 1 0
+ // update class
+ var className = (this.data.className ? (' ' + this.data.className) : '') +
+ (this.selected ? ' selected' : '');
+ if (this.className != className) {
+ this.className = className;
+ dom.box.className = this.baseClassName + className;
- // bp0 = { x: p1.x, y: p1.y };
- bp1 = { x: ((-p0.x + 6*p1.x + p2.x) *normalization), y: ((-p0.y + 6*p1.y + p2.y) *normalization)};
- bp2 = { x: (( p1.x + 6*p2.x - p3.x) *normalization), y: (( p1.y + 6*p2.y - p3.y) *normalization)};
- // bp0 = { x: p2.x, y: p2.y };
+ this.dirty = true;
+ }
- d += "C" +
- bp1.x + "," +
- bp1.y + " " +
- bp2.x + "," +
- bp2.y + " " +
- p2.x + "," +
- p2.y + " ";
+ // recalculate size
+ if (this.dirty) {
+ // determine from css whether this box has overflow
+ this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden';
+
+ this.props.content.width = this.dom.content.offsetWidth;
+ this.height = this.dom.box.offsetHeight;
+
+ this.dirty = false;
}
- return d;
+ this._repaintDeleteButton(dom.box);
+ this._repaintDragLeft();
+ this._repaintDragRight();
};
/**
- * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm.
- * By default, the centripetal parameterization is used because this gives the nicest results.
- * These parameterizations are relatively heavy because the distance between 4 points have to be calculated.
- *
- * One optimization can be used to reuse distances since this is a sliding window approach.
- * @param data
- * @returns {string}
- * @private
+ * Show the item in the DOM (when not already visible). The items DOM will
+ * be created when needed.
*/
- LineGraph.prototype._catmullRom = function(data, group) {
- var alpha = group.options.catmullRom.alpha;
- if (alpha == 0 || alpha === undefined) {
- return this._catmullRomUniform(data);
+ ItemRange.prototype.show = function() {
+ if (!this.displayed) {
+ this.redraw();
}
- else {
- var p0, p1, p2, p3, bp1, bp2, d1,d2,d3, A, B, N, M;
- var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;
- var d = Math.round(data[0].x) + "," + Math.round(data[0].y) + " ";
- var length = data.length;
- for (var i = 0; i < length - 1; i++) {
-
- p0 = (i == 0) ? data[0] : data[i-1];
- p1 = data[i];
- p2 = data[i+1];
- p3 = (i + 2 < length) ? data[i+2] : p2;
+ };
- d1 = Math.sqrt(Math.pow(p0.x - p1.x,2) + Math.pow(p0.y - p1.y,2));
- d2 = Math.sqrt(Math.pow(p1.x - p2.x,2) + Math.pow(p1.y - p2.y,2));
- d3 = Math.sqrt(Math.pow(p2.x - p3.x,2) + Math.pow(p2.y - p3.y,2));
+ /**
+ * Hide the item from the DOM (when visible)
+ * @return {Boolean} changed
+ */
+ ItemRange.prototype.hide = function() {
+ if (this.displayed) {
+ var box = this.dom.box;
- // Catmull-Rom to Cubic Bezier conversion matrix
- //
- // A = 2d1^2a + 3d1^a * d2^a + d3^2a
- // B = 2d3^2a + 3d3^a * d2^a + d2^2a
- //
- // [ 0 1 0 0 ]
- // [ -d2^2a/N A/N d1^2a/N 0 ]
- // [ 0 d3^2a/M B/M -d2^2a/M ]
- // [ 0 0 1 0 ]
+ if (box.parentNode) {
+ box.parentNode.removeChild(box);
+ }
- // [ 0 1 0 0 ]
- // [ -d2pow2a/N A/N d1pow2a/N 0 ]
- // [ 0 d3pow2a/M B/M -d2pow2a/M ]
- // [ 0 0 1 0 ]
+ this.top = null;
+ this.left = null;
- d3powA = Math.pow(d3, alpha);
- d3pow2A = Math.pow(d3,2*alpha);
- d2powA = Math.pow(d2, alpha);
- d2pow2A = Math.pow(d2,2*alpha);
- d1powA = Math.pow(d1, alpha);
- d1pow2A = Math.pow(d1,2*alpha);
+ this.displayed = false;
+ }
+ };
- A = 2*d1pow2A + 3*d1powA * d2powA + d2pow2A;
- B = 2*d3pow2A + 3*d3powA * d2powA + d2pow2A;
- N = 3*d1powA * (d1powA + d2powA);
- if (N > 0) {N = 1 / N;}
- M = 3*d3powA * (d3powA + d2powA);
- if (M > 0) {M = 1 / M;}
+ /**
+ * Reposition the item horizontally
+ * @Override
+ */
+ // TODO: delete the old function
+ ItemRange.prototype.repositionX = function() {
+ var props = this.props,
+ parentWidth = this.parent.width,
+ start = this.conversion.toScreen(this.data.start),
+ end = this.conversion.toScreen(this.data.end),
+ padding = this.options.padding,
+ contentLeft;
- bp1 = { x: ((-d2pow2A * p0.x + A*p1.x + d1pow2A * p2.x) * N),
- y: ((-d2pow2A * p0.y + A*p1.y + d1pow2A * p2.y) * N)};
+ // limit the width of the this, as browsers cannot draw very wide divs
+ if (start < -parentWidth) {
+ start = -parentWidth;
+ }
+ if (end > 2 * parentWidth) {
+ end = 2 * parentWidth;
+ }
+ var boxWidth = Math.max(end - start, 1);
- bp2 = { x: (( d3pow2A * p1.x + B*p2.x - d2pow2A * p3.x) * M),
- y: (( d3pow2A * p1.y + B*p2.y - d2pow2A * p3.y) * M)};
+ if (this.overflow) {
+ // when range exceeds left of the window, position the contents at the left of the visible area
+ contentLeft = Math.max(-start, 0);
- if (bp1.x == 0 && bp1.y == 0) {bp1 = p1;}
- if (bp2.x == 0 && bp2.y == 0) {bp2 = p2;}
- d += "C" +
- bp1.x + "," +
- bp1.y + " " +
- bp2.x + "," +
- bp2.y + " " +
- p2.x + "," +
- p2.y + " ";
+ this.left = start;
+ this.width = boxWidth + this.props.content.width;
+ // Note: The calculation of width is an optimistic calculation, giving
+ // a width which will not change when moving the Timeline
+ // So no restacking needed, which is nicer for the eye;
+ }
+ else { // no overflow
+ // when range exceeds left of the window, position the contents at the left of the visible area
+ if (start < 0) {
+ contentLeft = Math.min(-start,
+ (end - start - props.content.width - 2 * padding));
+ // TODO: remove the need for options.padding. it's terrible.
+ }
+ else {
+ contentLeft = 0;
}
- return d;
+ this.left = start;
+ this.width = boxWidth;
}
+
+ this.dom.box.style.left = this.left + 'px';
+ this.dom.box.style.width = boxWidth + 'px';
+ this.dom.content.style.left = contentLeft + 'px';
};
/**
- * this generates the SVG path for a linear drawing between datapoints.
- * @param data
- * @returns {string}
- * @private
+ * Reposition the item vertically
+ * @Override
*/
- LineGraph.prototype._linear = function(data) {
- // linear
- var d = "";
- for (var i = 0; i < data.length; i++) {
- if (i == 0) {
- d += data[i].x + "," + data[i].y;
- }
- else {
- d += " " + data[i].x + "," + data[i].y;
- }
+ ItemRange.prototype.repositionY = function() {
+ var orientation = this.options.orientation,
+ box = this.dom.box;
+
+ if (orientation == 'top') {
+ box.style.top = this.top + 'px';
+ }
+ else {
+ box.style.top = (this.parent.height - this.top - this.height) + 'px';
}
- return d;
};
- module.exports = LineGraph;
-
-
-/***/ },
-/* 31 */
-/***/ function(module, exports, __webpack_require__) {
-
- var util = __webpack_require__(1);
- var Component = __webpack_require__(22);
- var TimeStep = __webpack_require__(17);
-
/**
- * A horizontal time axis
- * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body
- * @param {Object} [options] See TimeAxis.setOptions for the available
- * options.
- * @constructor TimeAxis
- * @extends Component
+ * Repaint a drag area on the left side of the range when the range is selected
+ * @protected
*/
- function TimeAxis (body, options) {
- this.dom = {
- foreground: null,
- majorLines: [],
- majorTexts: [],
- minorLines: [],
- minorTexts: [],
- redundant: {
- majorLines: [],
- majorTexts: [],
- minorLines: [],
- minorTexts: []
- }
- };
- this.props = {
- range: {
- start: 0,
- end: 0,
- minimumStep: 0
- },
- lineTop: 0
- };
-
- this.defaultOptions = {
- orientation: 'bottom', // supported: 'top', 'bottom'
- // TODO: implement timeaxis orientations 'left' and 'right'
- showMinorLabels: true,
- showMajorLabels: true
- };
- this.options = util.extend({}, this.defaultOptions);
-
- this.body = body;
-
- // create the HTML DOM
- this._create();
-
- this.setOptions(options);
- }
+ ItemRange.prototype._repaintDragLeft = function () {
+ if (this.selected && this.options.editable.updateTime && !this.dom.dragLeft) {
+ // create and show drag area
+ var dragLeft = document.createElement('div');
+ dragLeft.className = 'drag-left';
+ dragLeft.dragLeftItem = this;
- TimeAxis.prototype = new Component();
+ // TODO: this should be redundant?
+ Hammer(dragLeft, {
+ preventDefault: true
+ }).on('drag', function () {
+ //console.log('drag left')
+ });
- /**
- * Set options for the TimeAxis.
- * Parameters will be merged in current options.
- * @param {Object} options Available options:
- * {string} [orientation]
- * {boolean} [showMinorLabels]
- * {boolean} [showMajorLabels]
- */
- TimeAxis.prototype.setOptions = function(options) {
- if (options) {
- // copy all options that we know
- util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels'], this.options, options);
+ this.dom.box.appendChild(dragLeft);
+ this.dom.dragLeft = dragLeft;
+ }
+ else if (!this.selected && this.dom.dragLeft) {
+ // delete drag area
+ if (this.dom.dragLeft.parentNode) {
+ this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft);
+ }
+ this.dom.dragLeft = null;
}
};
/**
- * Create the HTML DOM for the TimeAxis
+ * Repaint a drag area on the right side of the range when the range is selected
+ * @protected
*/
- TimeAxis.prototype._create = function() {
- this.dom.foreground = document.createElement('div');
- this.dom.background = document.createElement('div');
+ ItemRange.prototype._repaintDragRight = function () {
+ if (this.selected && this.options.editable.updateTime && !this.dom.dragRight) {
+ // create and show drag area
+ var dragRight = document.createElement('div');
+ dragRight.className = 'drag-right';
+ dragRight.dragRightItem = this;
- this.dom.foreground.className = 'timeaxis foreground';
- this.dom.background.className = 'timeaxis background';
- };
+ // TODO: this should be redundant?
+ Hammer(dragRight, {
+ preventDefault: true
+ }).on('drag', function () {
+ //console.log('drag right')
+ });
- /**
- * Destroy the TimeAxis
- */
- TimeAxis.prototype.destroy = function() {
- // remove from DOM
- if (this.dom.foreground.parentNode) {
- this.dom.foreground.parentNode.removeChild(this.dom.foreground);
+ this.dom.box.appendChild(dragRight);
+ this.dom.dragRight = dragRight;
}
- if (this.dom.background.parentNode) {
- this.dom.background.parentNode.removeChild(this.dom.background);
+ else if (!this.selected && this.dom.dragRight) {
+ // delete drag area
+ if (this.dom.dragRight.parentNode) {
+ this.dom.dragRight.parentNode.removeChild(this.dom.dragRight);
+ }
+ this.dom.dragRight = null;
}
-
- this.body = null;
};
- /**
- * Repaint the component
- * @return {boolean} Returns true if the component is resized
- */
- TimeAxis.prototype.redraw = function () {
- var options = this.options,
- props = this.props,
- foreground = this.dom.foreground,
- background = this.dom.background;
-
- // determine the correct parent DOM element (depending on option orientation)
- var parent = (options.orientation == 'top') ? this.body.dom.top : this.body.dom.bottom;
- var parentChanged = (foreground.parentNode !== parent);
-
- // calculate character width and height
- this._calculateCharSize();
-
- // TODO: recalculate sizes only needed when parent is resized or options is changed
- var orientation = this.options.orientation,
- showMinorLabels = this.options.showMinorLabels,
- showMajorLabels = this.options.showMajorLabels;
-
- // determine the width and height of the elemens for the axis
- props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;
- props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;
- props.height = props.minorLabelHeight + props.majorLabelHeight;
- props.width = foreground.offsetWidth;
-
- props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight -
- (options.orientation == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height);
- props.minorLineWidth = 1; // TODO: really calculate width
- props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight;
- props.majorLineWidth = 1; // TODO: really calculate width
-
- // take foreground and background offline while updating (is almost twice as fast)
- var foregroundNextSibling = foreground.nextSibling;
- var backgroundNextSibling = background.nextSibling;
- foreground.parentNode && foreground.parentNode.removeChild(foreground);
- background.parentNode && background.parentNode.removeChild(background);
+ module.exports = ItemRange;
- foreground.style.height = this.props.height + 'px';
- this._repaintLabels();
+/***/ },
+/* 32 */
+/***/ function(module, exports, __webpack_require__) {
- // put DOM online again (at the same place)
- if (foregroundNextSibling) {
- parent.insertBefore(foreground, foregroundNextSibling);
- }
- else {
- parent.appendChild(foreground)
- }
- if (backgroundNextSibling) {
- this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling);
- }
- else {
- this.body.dom.backgroundVertical.appendChild(background)
- }
+ var Emitter = __webpack_require__(45);
+ var Hammer = __webpack_require__(41);
+ var mousetrap = __webpack_require__(46);
+ var util = __webpack_require__(1);
+ var hammerUtil = __webpack_require__(42);
+ var DataSet = __webpack_require__(3);
+ var DataView = __webpack_require__(4);
+ var dotparser = __webpack_require__(38);
+ var gephiParser = __webpack_require__(39);
+ var Groups = __webpack_require__(34);
+ var Images = __webpack_require__(35);
+ var Node = __webpack_require__(36);
+ var Edge = __webpack_require__(33);
+ var Popup = __webpack_require__(37);
+ var MixinLoader = __webpack_require__(44);
- return this._isResized() || parentChanged;
- };
+ // Load custom shapes into CanvasRenderingContext2D
+ __webpack_require__(43);
/**
- * Repaint major and minor text labels and vertical grid lines
- * @private
+ * @constructor Network
+ * Create a network visualization, displaying nodes and edges.
+ *
+ * @param {Element} container The DOM element in which the Network will
+ * be created. Normally a div element.
+ * @param {Object} data An object containing parameters
+ * {Array} nodes
+ * {Array} edges
+ * @param {Object} options Options
*/
- TimeAxis.prototype._repaintLabels = function () {
- var orientation = this.options.orientation;
-
- // calculate range and step (step such that we have space for 7 characters per label)
- var start = util.convert(this.body.range.start, 'Number'),
- end = util.convert(this.body.range.end, 'Number'),
- minimumStep = this.body.util.toTime((this.props.minorCharWidth || 10) * 7).valueOf()
- -this.body.util.toTime(0).valueOf();
- var step = new TimeStep(new Date(start), new Date(end), minimumStep);
- this.step = step;
+ function Network (container, data, options) {
+ if (!(this instanceof Network)) {
+ throw new SyntaxError('Constructor must be called with the new operator');
+ }
- // Move all DOM elements to a "redundant" list, where they
- // can be picked for re-use, and clear the lists with lines and texts.
- // At the end of the function _repaintLabels, left over elements will be cleaned up
- var dom = this.dom;
- dom.redundant.majorLines = dom.majorLines;
- dom.redundant.majorTexts = dom.majorTexts;
- dom.redundant.minorLines = dom.minorLines;
- dom.redundant.minorTexts = dom.minorTexts;
- dom.majorLines = [];
- dom.majorTexts = [];
- dom.minorLines = [];
- dom.minorTexts = [];
+ this._initializeMixinLoaders();
- step.first();
- var xFirstMajorLabel = undefined;
- var max = 0;
- while (step.hasNext() && max < 1000) {
- max++;
- var cur = step.getCurrent(),
- x = this.body.util.toScreen(cur),
- isMajor = step.isMajor();
+ // create variables and set default values
+ this.containerElement = container;
+ this.width = '100%';
+ this.height = '100%';
- // TODO: lines must have a width, such that we can create css backgrounds
+ // render and calculation settings
+ this.renderRefreshRate = 60; // hz (fps)
+ this.renderTimestep = 1000 / this.renderRefreshRate; // ms -- saves calculation later on
+ this.renderTime = 0.5 * this.renderTimestep; // measured time it takes to render a frame
+ this.maxPhysicsTicksPerRender = 3; // max amount of physics ticks per render step.
+ this.physicsDiscreteStepsize = 0.50; // discrete stepsize of the simulation
- if (this.options.showMinorLabels) {
- this._repaintMinorText(x, step.getLabelMinor(), orientation);
- }
+ this.stabilize = true; // stabilize before displaying the network
+ this.selectable = true;
+ this.initializing = true;
- if (isMajor && this.options.showMajorLabels) {
- if (x > 0) {
- if (xFirstMajorLabel == undefined) {
- xFirstMajorLabel = x;
- }
- this._repaintMajorText(x, step.getLabelMajor(), orientation);
- }
- this._repaintMajorLine(x, orientation);
- }
- else {
- this._repaintMinorLine(x, orientation);
- }
-
- step.next();
- }
-
- // create a major label on the left when needed
- if (this.options.showMajorLabels) {
- var leftTime = this.body.util.toTime(0),
- leftText = step.getLabelMajor(leftTime),
- widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation
-
- if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) {
- this._repaintMajorText(0, leftText, orientation);
- }
- }
-
- // Cleanup leftover DOM elements from the redundant list
- util.forEach(this.dom.redundant, function (arr) {
- while (arr.length) {
- var elem = arr.pop();
- if (elem && elem.parentNode) {
- elem.parentNode.removeChild(elem);
- }
- }
- });
- };
-
- /**
- * Create a minor label for the axis at position x
- * @param {Number} x
- * @param {String} text
- * @param {String} orientation "top" or "bottom" (default)
- * @private
- */
- TimeAxis.prototype._repaintMinorText = function (x, text, orientation) {
- // reuse redundant label
- var label = this.dom.redundant.minorTexts.shift();
-
- if (!label) {
- // create new label
- var content = document.createTextNode('');
- label = document.createElement('div');
- label.appendChild(content);
- label.className = 'text minor';
- this.dom.foreground.appendChild(label);
- }
- this.dom.minorTexts.push(label);
-
- label.childNodes[0].nodeValue = text;
-
- label.style.top = (orientation == 'top') ? (this.props.majorLabelHeight + 'px') : '0';
- label.style.left = x + 'px';
- //label.title = title; // TODO: this is a heavy operation
- };
-
- /**
- * Create a Major label for the axis at position x
- * @param {Number} x
- * @param {String} text
- * @param {String} orientation "top" or "bottom" (default)
- * @private
- */
- TimeAxis.prototype._repaintMajorText = function (x, text, orientation) {
- // reuse redundant label
- var label = this.dom.redundant.majorTexts.shift();
-
- if (!label) {
- // create label
- var content = document.createTextNode(text);
- label = document.createElement('div');
- label.className = 'text major';
- label.appendChild(content);
- this.dom.foreground.appendChild(label);
- }
- this.dom.majorTexts.push(label);
-
- label.childNodes[0].nodeValue = text;
- //label.title = title; // TODO: this is a heavy operation
-
- label.style.top = (orientation == 'top') ? '0' : (this.props.minorLabelHeight + 'px');
- label.style.left = x + 'px';
- };
-
- /**
- * Create a minor line for the axis at position x
- * @param {Number} x
- * @param {String} orientation "top" or "bottom" (default)
- * @private
- */
- TimeAxis.prototype._repaintMinorLine = function (x, orientation) {
- // reuse redundant line
- var line = this.dom.redundant.minorLines.shift();
-
- if (!line) {
- // create vertical line
- line = document.createElement('div');
- line.className = 'grid vertical minor';
- this.dom.background.appendChild(line);
- }
- this.dom.minorLines.push(line);
-
- var props = this.props;
- if (orientation == 'top') {
- line.style.top = props.majorLabelHeight + 'px';
- }
- else {
- line.style.top = this.body.domProps.top.height + 'px';
- }
- line.style.height = props.minorLineHeight + 'px';
- line.style.left = (x - props.minorLineWidth / 2) + 'px';
- };
-
- /**
- * Create a Major line for the axis at position x
- * @param {Number} x
- * @param {String} orientation "top" or "bottom" (default)
- * @private
- */
- TimeAxis.prototype._repaintMajorLine = function (x, orientation) {
- // reuse redundant line
- var line = this.dom.redundant.majorLines.shift();
-
- if (!line) {
- // create vertical line
- line = document.createElement('DIV');
- line.className = 'grid vertical major';
- this.dom.background.appendChild(line);
- }
- this.dom.majorLines.push(line);
-
- var props = this.props;
- if (orientation == 'top') {
- line.style.top = '0';
- }
- else {
- line.style.top = this.body.domProps.top.height + 'px';
- }
- line.style.left = (x - props.majorLineWidth / 2) + 'px';
- line.style.height = props.majorLineHeight + 'px';
- };
-
- /**
- * Determine the size of text on the axis (both major and minor axis).
- * The size is calculated only once and then cached in this.props.
- * @private
- */
- TimeAxis.prototype._calculateCharSize = function () {
- // Note: We calculate char size with every redraw. Size may change, for
- // example when any of the timelines parents had display:none for example.
-
- // determine the char width and height on the minor axis
- if (!this.dom.measureCharMinor) {
- this.dom.measureCharMinor = document.createElement('DIV');
- this.dom.measureCharMinor.className = 'text minor measure';
- this.dom.measureCharMinor.style.position = 'absolute';
-
- this.dom.measureCharMinor.appendChild(document.createTextNode('0'));
- this.dom.foreground.appendChild(this.dom.measureCharMinor);
- }
- this.props.minorCharHeight = this.dom.measureCharMinor.clientHeight;
- this.props.minorCharWidth = this.dom.measureCharMinor.clientWidth;
-
- // determine the char width and height on the major axis
- if (!this.dom.measureCharMajor) {
- this.dom.measureCharMajor = document.createElement('DIV');
- this.dom.measureCharMajor.className = 'text minor measure';
- this.dom.measureCharMajor.style.position = 'absolute';
-
- this.dom.measureCharMajor.appendChild(document.createTextNode('0'));
- this.dom.foreground.appendChild(this.dom.measureCharMajor);
- }
- this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight;
- this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth;
- };
-
- /**
- * Snap a date to a rounded value.
- * The snap intervals are dependent on the current scale and step.
- * @param {Date} date the date to be snapped.
- * @return {Date} snappedDate
- */
- TimeAxis.prototype.snap = function(date) {
- return this.step.snap(date);
- };
-
- module.exports = TimeAxis;
-
-
-/***/ },
-/* 32 */
-/***/ function(module, exports, __webpack_require__) {
-
- var Emitter = __webpack_require__(42);
- var Hammer = __webpack_require__(41);
- var mousetrap = __webpack_require__(44);
- var util = __webpack_require__(1);
- var hammerUtil = __webpack_require__(43);
- var DataSet = __webpack_require__(3);
- var DataView = __webpack_require__(4);
- var dotparser = __webpack_require__(38);
- var gephiParser = __webpack_require__(39);
- var Groups = __webpack_require__(34);
- var Images = __webpack_require__(35);
- var Node = __webpack_require__(36);
- var Edge = __webpack_require__(33);
- var Popup = __webpack_require__(37);
- var MixinLoader = __webpack_require__(45);
-
- // Load custom shapes into CanvasRenderingContext2D
- __webpack_require__(46);
-
- /**
- * @constructor Network
- * Create a network visualization, displaying nodes and edges.
- *
- * @param {Element} container The DOM element in which the Network will
- * be created. Normally a div element.
- * @param {Object} data An object containing parameters
- * {Array} nodes
- * {Array} edges
- * @param {Object} options Options
- */
- function Network (container, data, options) {
- if (!(this instanceof Network)) {
- throw new SyntaxError('Constructor must be called with the new operator');
- }
-
- this._initializeMixinLoaders();
-
- // create variables and set default values
- this.containerElement = container;
- this.width = '100%';
- this.height = '100%';
-
- // render and calculation settings
- this.renderRefreshRate = 60; // hz (fps)
- this.renderTimestep = 1000 / this.renderRefreshRate; // ms -- saves calculation later on
- this.renderTime = 0.5 * this.renderTimestep; // measured time it takes to render a frame
- this.maxPhysicsTicksPerRender = 3; // max amount of physics ticks per render step.
- this.physicsDiscreteStepsize = 0.50; // discrete stepsize of the simulation
-
- this.stabilize = true; // stabilize before displaying the network
- this.selectable = true;
- this.initializing = true;
-
- // these functions are triggered when the dataset is edited
- this.triggerFunctions = {add:null,edit:null,editEdge:null,connect:null,del:null};
+ // these functions are triggered when the dataset is edited
+ this.triggerFunctions = {add:null,edit:null,editEdge:null,connect:null,del:null};
// set constant values
@@ -18498,7 +18498,6 @@ return /******/ (function(modules) { // webpackBootstrap
}
}
-
// individual shape properties
if (properties.shape !== undefined) {this.shape = properties.shape;}
if (properties.image !== undefined) {this.image = properties.image;}
@@ -20366,185 +20365,15 @@ return /******/ (function(modules) { // webpackBootstrap
/* 42 */
/***/ function(module, exports, __webpack_require__) {
-
- /**
- * Expose `Emitter`.
- */
-
- module.exports = Emitter;
+ var Hammer = __webpack_require__(41);
/**
- * Initialize a new `Emitter`.
- *
- * @api public
+ * Fake a hammer.js gesture. Event can be a ScrollEvent or MouseMoveEvent
+ * @param {Element} element
+ * @param {Event} event
*/
-
- function Emitter(obj) {
- if (obj) return mixin(obj);
- };
-
- /**
- * Mixin the emitter properties.
- *
- * @param {Object} obj
- * @return {Object}
- * @api private
- */
-
- function mixin(obj) {
- for (var key in Emitter.prototype) {
- obj[key] = Emitter.prototype[key];
- }
- return obj;
- }
-
- /**
- * Listen on the given `event` with `fn`.
- *
- * @param {String} event
- * @param {Function} fn
- * @return {Emitter}
- * @api public
- */
-
- Emitter.prototype.on =
- Emitter.prototype.addEventListener = function(event, fn){
- this._callbacks = this._callbacks || {};
- (this._callbacks[event] = this._callbacks[event] || [])
- .push(fn);
- return this;
- };
-
- /**
- * Adds an `event` listener that will be invoked a single
- * time then automatically removed.
- *
- * @param {String} event
- * @param {Function} fn
- * @return {Emitter}
- * @api public
- */
-
- Emitter.prototype.once = function(event, fn){
- var self = this;
- this._callbacks = this._callbacks || {};
-
- function on() {
- self.off(event, on);
- fn.apply(this, arguments);
- }
-
- on.fn = fn;
- this.on(event, on);
- return this;
- };
-
- /**
- * Remove the given callback for `event` or all
- * registered callbacks.
- *
- * @param {String} event
- * @param {Function} fn
- * @return {Emitter}
- * @api public
- */
-
- Emitter.prototype.off =
- Emitter.prototype.removeListener =
- Emitter.prototype.removeAllListeners =
- Emitter.prototype.removeEventListener = function(event, fn){
- this._callbacks = this._callbacks || {};
-
- // all
- if (0 == arguments.length) {
- this._callbacks = {};
- return this;
- }
-
- // specific event
- var callbacks = this._callbacks[event];
- if (!callbacks) return this;
-
- // remove all handlers
- if (1 == arguments.length) {
- delete this._callbacks[event];
- return this;
- }
-
- // remove specific handler
- var cb;
- for (var i = 0; i < callbacks.length; i++) {
- cb = callbacks[i];
- if (cb === fn || cb.fn === fn) {
- callbacks.splice(i, 1);
- break;
- }
- }
- return this;
- };
-
- /**
- * Emit `event` with the given args.
- *
- * @param {String} event
- * @param {Mixed} ...
- * @return {Emitter}
- */
-
- Emitter.prototype.emit = function(event){
- this._callbacks = this._callbacks || {};
- var args = [].slice.call(arguments, 1)
- , callbacks = this._callbacks[event];
-
- if (callbacks) {
- callbacks = callbacks.slice(0);
- for (var i = 0, len = callbacks.length; i < len; ++i) {
- callbacks[i].apply(this, args);
- }
- }
-
- return this;
- };
-
- /**
- * Return array of callbacks for `event`.
- *
- * @param {String} event
- * @return {Array}
- * @api public
- */
-
- Emitter.prototype.listeners = function(event){
- this._callbacks = this._callbacks || {};
- return this._callbacks[event] || [];
- };
-
- /**
- * Check if this emitter has `event` handlers.
- *
- * @param {String} event
- * @return {Boolean}
- * @api public
- */
-
- Emitter.prototype.hasListeners = function(event){
- return !! this.listeners(event).length;
- };
-
-
-/***/ },
-/* 43 */
-/***/ function(module, exports, __webpack_require__) {
-
- var Hammer = __webpack_require__(41);
-
- /**
- * Fake a hammer.js gesture. Event can be a ScrollEvent or MouseMoveEvent
- * @param {Element} element
- * @param {Event} event
- */
- exports.fakeGesture = function(element, event) {
- var eventType = null;
+ exports.fakeGesture = function(element, event) {
+ var eventType = null;
// for hammer.js 1.0.5
// var gesture = Hammer.event.collectEventData(this, eventType, event);
@@ -20567,1243 +20396,1413 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
-/* 44 */
+/* 43 */
/***/ function(module, exports, __webpack_require__) {
/**
- * Copyright 2012 Craig Campbell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Mousetrap is a simple keyboard shortcut library for Javascript with
- * no external dependencies
- *
- * @version 1.1.2
- * @url craig.is/killing/mice
+ * Canvas shapes used by Network
*/
+ if (typeof CanvasRenderingContext2D !== 'undefined') {
/**
- * mapping of special keycodes to their corresponding keys
- *
- * everything in this dictionary cannot use keypress events
- * so it has to be here to map to the correct keycodes for
- * keyup/keydown events
- *
- * @type {Object}
+ * Draw a circle shape
*/
- var _MAP = {
- 8: 'backspace',
- 9: 'tab',
- 13: 'enter',
- 16: 'shift',
- 17: 'ctrl',
- 18: 'alt',
- 20: 'capslock',
- 27: 'esc',
- 32: 'space',
- 33: 'pageup',
- 34: 'pagedown',
- 35: 'end',
- 36: 'home',
- 37: 'left',
- 38: 'up',
- 39: 'right',
- 40: 'down',
- 45: 'ins',
- 46: 'del',
- 91: 'meta',
- 93: 'meta',
- 224: 'meta'
- },
-
- /**
- * mapping for special characters so they can support
- *
- * this dictionary is only used incase you want to bind a
- * keyup or keydown event to one of these keys
- *
- * @type {Object}
- */
- _KEYCODE_MAP = {
- 106: '*',
- 107: '+',
- 109: '-',
- 110: '.',
- 111 : '/',
- 186: ';',
- 187: '=',
- 188: ',',
- 189: '-',
- 190: '.',
- 191: '/',
- 192: '`',
- 219: '[',
- 220: '\\',
- 221: ']',
- 222: '\''
- },
+ CanvasRenderingContext2D.prototype.circle = function(x, y, r) {
+ this.beginPath();
+ this.arc(x, y, r, 0, 2*Math.PI, false);
+ };
- /**
- * this is a mapping of keys that require shift on a US keypad
- * back to the non shift equivelents
- *
- * this is so you can use keyup events with these keys
- *
- * note that this will only work reliably on US keyboards
- *
- * @type {Object}
- */
- _SHIFT_MAP = {
- '~': '`',
- '!': '1',
- '@': '2',
- '#': '3',
- '$': '4',
- '%': '5',
- '^': '6',
- '&': '7',
- '*': '8',
- '(': '9',
- ')': '0',
- '_': '-',
- '+': '=',
- ':': ';',
- '\"': '\'',
- '<': ',',
- '>': '.',
- '?': '/',
- '|': '\\'
- },
-
- /**
- * this is a list of special strings you can use to map
- * to modifier keys when you specify your keyboard shortcuts
- *
- * @type {Object}
- */
- _SPECIAL_ALIASES = {
- 'option': 'alt',
- 'command': 'meta',
- 'return': 'enter',
- 'escape': 'esc'
- },
-
- /**
- * variable to store the flipped version of _MAP from above
- * needed to check if we should use keypress or not when no action
- * is specified
- *
- * @type {Object|undefined}
- */
- _REVERSE_MAP,
+ /**
+ * Draw a square shape
+ * @param {Number} x horizontal center
+ * @param {Number} y vertical center
+ * @param {Number} r size, width and height of the square
+ */
+ CanvasRenderingContext2D.prototype.square = function(x, y, r) {
+ this.beginPath();
+ this.rect(x - r, y - r, r * 2, r * 2);
+ };
- /**
- * a list of all the callbacks setup via Mousetrap.bind()
- *
- * @type {Object}
- */
- _callbacks = {},
+ /**
+ * Draw a triangle shape
+ * @param {Number} x horizontal center
+ * @param {Number} y vertical center
+ * @param {Number} r radius, half the length of the sides of the triangle
+ */
+ CanvasRenderingContext2D.prototype.triangle = function(x, y, r) {
+ // http://en.wikipedia.org/wiki/Equilateral_triangle
+ this.beginPath();
- /**
- * direct map of string combinations to callbacks used for trigger()
- *
- * @type {Object}
- */
- _direct_map = {},
+ var s = r * 2;
+ var s2 = s / 2;
+ var ir = Math.sqrt(3) / 6 * s; // radius of inner circle
+ var h = Math.sqrt(s * s - s2 * s2); // height
- /**
- * keeps track of what level each sequence is at since multiple
- * sequences can start out with the same sequence
- *
- * @type {Object}
- */
- _sequence_levels = {},
+ this.moveTo(x, y - (h - ir));
+ this.lineTo(x + s2, y + ir);
+ this.lineTo(x - s2, y + ir);
+ this.lineTo(x, y - (h - ir));
+ this.closePath();
+ };
- /**
- * variable to store the setTimeout call
- *
- * @type {null|number}
- */
- _reset_timer,
+ /**
+ * Draw a triangle shape in downward orientation
+ * @param {Number} x horizontal center
+ * @param {Number} y vertical center
+ * @param {Number} r radius
+ */
+ CanvasRenderingContext2D.prototype.triangleDown = function(x, y, r) {
+ // http://en.wikipedia.org/wiki/Equilateral_triangle
+ this.beginPath();
- /**
- * temporary state where we will ignore the next keyup
- *
- * @type {boolean|string}
- */
- _ignore_next_keyup = false,
+ var s = r * 2;
+ var s2 = s / 2;
+ var ir = Math.sqrt(3) / 6 * s; // radius of inner circle
+ var h = Math.sqrt(s * s - s2 * s2); // height
- /**
- * are we currently inside of a sequence?
- * type of action ("keyup" or "keydown" or "keypress") or false
- *
- * @type {boolean|string}
- */
- _inside_sequence = false;
+ this.moveTo(x, y + (h - ir));
+ this.lineTo(x + s2, y - ir);
+ this.lineTo(x - s2, y - ir);
+ this.lineTo(x, y + (h - ir));
+ this.closePath();
+ };
/**
- * loop through the f keys, f1 to f19 and add them to the map
- * programatically
+ * Draw a star shape, a star with 5 points
+ * @param {Number} x horizontal center
+ * @param {Number} y vertical center
+ * @param {Number} r radius, half the length of the sides of the triangle
*/
- for (var i = 1; i < 20; ++i) {
- _MAP[111 + i] = 'f' + i;
- }
+ CanvasRenderingContext2D.prototype.star = function(x, y, r) {
+ // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/
+ this.beginPath();
+
+ for (var n = 0; n < 10; n++) {
+ var radius = (n % 2 === 0) ? r * 1.3 : r * 0.5;
+ this.lineTo(
+ x + radius * Math.sin(n * 2 * Math.PI / 10),
+ y - radius * Math.cos(n * 2 * Math.PI / 10)
+ );
+ }
+
+ this.closePath();
+ };
/**
- * loop through to map numbers on the numeric keypad
+ * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas
*/
- for (i = 0; i <= 9; ++i) {
- _MAP[i + 96] = i;
- }
+ CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) {
+ var r2d = Math.PI/180;
+ if( w - ( 2 * r ) < 0 ) { r = ( w / 2 ); } //ensure that the radius isn't too large for x
+ if( h - ( 2 * r ) < 0 ) { r = ( h / 2 ); } //ensure that the radius isn't too large for y
+ this.beginPath();
+ this.moveTo(x+r,y);
+ this.lineTo(x+w-r,y);
+ this.arc(x+w-r,y+r,r,r2d*270,r2d*360,false);
+ this.lineTo(x+w,y+h-r);
+ this.arc(x+w-r,y+h-r,r,0,r2d*90,false);
+ this.lineTo(x+r,y+h);
+ this.arc(x+r,y+h-r,r,r2d*90,r2d*180,false);
+ this.lineTo(x,y+r);
+ this.arc(x+r,y+r,r,r2d*180,r2d*270,false);
+ };
/**
- * cross browser add event method
- *
- * @param {Element|HTMLDocument} object
- * @param {string} type
- * @param {Function} callback
- * @returns void
+ * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas
*/
- function _addEvent(object, type, callback) {
- if (object.addEventListener) {
- return object.addEventListener(type, callback, false);
- }
+ CanvasRenderingContext2D.prototype.ellipse = function(x, y, w, h) {
+ var kappa = .5522848,
+ ox = (w / 2) * kappa, // control point offset horizontal
+ oy = (h / 2) * kappa, // control point offset vertical
+ xe = x + w, // x-end
+ ye = y + h, // y-end
+ xm = x + w / 2, // x-middle
+ ym = y + h / 2; // y-middle
+
+ this.beginPath();
+ this.moveTo(x, ym);
+ this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
+ this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
+ this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
+ this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
+ };
+
- object.attachEvent('on' + type, callback);
- }
/**
- * takes the event and returns the key character
- *
- * @param {Event} e
- * @return {string}
+ * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas
*/
- function _characterFromEvent(e) {
+ CanvasRenderingContext2D.prototype.database = function(x, y, w, h) {
+ var f = 1/3;
+ var wEllipse = w;
+ var hEllipse = h * f;
- // for keypress events we should return the character as is
- if (e.type == 'keypress') {
- return String.fromCharCode(e.which);
- }
+ var kappa = .5522848,
+ ox = (wEllipse / 2) * kappa, // control point offset horizontal
+ oy = (hEllipse / 2) * kappa, // control point offset vertical
+ xe = x + wEllipse, // x-end
+ ye = y + hEllipse, // y-end
+ xm = x + wEllipse / 2, // x-middle
+ ym = y + hEllipse / 2, // y-middle
+ ymb = y + (h - hEllipse/2), // y-midlle, bottom ellipse
+ yeb = y + h; // y-end, bottom ellipse
- // for non keypress events the special maps are needed
- if (_MAP[e.which]) {
- return _MAP[e.which];
- }
+ this.beginPath();
+ this.moveTo(xe, ym);
- if (_KEYCODE_MAP[e.which]) {
- return _KEYCODE_MAP[e.which];
- }
+ this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
+ this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
- // if it is not in the special map
- return String.fromCharCode(e.which).toLowerCase();
- }
+ this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
+ this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
- /**
- * should we stop this event before firing off callbacks
- *
- * @param {Event} e
- * @return {boolean}
- */
- function _stop(e) {
- var element = e.target || e.srcElement,
- tag_name = element.tagName;
+ this.lineTo(xe, ymb);
- // if the element has the class "mousetrap" then no need to stop
- if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {
- return false;
- }
+ this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb);
+ this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb);
- // stop for input, select, and textarea
- return tag_name == 'INPUT' || tag_name == 'SELECT' || tag_name == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true');
- }
+ this.lineTo(x, ym);
+ };
- /**
- * checks if two arrays are equal
- *
- * @param {Array} modifiers1
- * @param {Array} modifiers2
- * @returns {boolean}
- */
- function _modifiersMatch(modifiers1, modifiers2) {
- return modifiers1.sort().join(',') === modifiers2.sort().join(',');
- }
/**
- * resets all sequence counters except for the ones passed in
- *
- * @param {Object} do_not_reset
- * @returns void
+ * Draw an arrow point (no line)
*/
- function _resetSequences(do_not_reset) {
- do_not_reset = do_not_reset || {};
+ CanvasRenderingContext2D.prototype.arrow = function(x, y, angle, length) {
+ // tail
+ var xt = x - length * Math.cos(angle);
+ var yt = y - length * Math.sin(angle);
- var active_sequences = false,
- key;
+ // inner tail
+ // TODO: allow to customize different shapes
+ var xi = x - length * 0.9 * Math.cos(angle);
+ var yi = y - length * 0.9 * Math.sin(angle);
- for (key in _sequence_levels) {
- if (do_not_reset[key]) {
- active_sequences = true;
- continue;
- }
- _sequence_levels[key] = 0;
- }
+ // left
+ var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI);
+ var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI);
- if (!active_sequences) {
- _inside_sequence = false;
- }
- }
+ // right
+ var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI);
+ var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI);
+
+ this.beginPath();
+ this.moveTo(x, y);
+ this.lineTo(xl, yl);
+ this.lineTo(xi, yi);
+ this.lineTo(xr, yr);
+ this.closePath();
+ };
/**
- * finds all callbacks that match based on the keycode, modifiers,
- * and action
- *
- * @param {string} character
- * @param {Array} modifiers
- * @param {string} action
- * @param {boolean=} remove - should we remove any matches
- * @param {string=} combination
- * @returns {Array}
+ * Sets up the dashedLine functionality for drawing
+ * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas
+ * @author David Jordan
+ * @date 2012-08-08
*/
- function _getMatches(character, modifiers, action, remove, combination) {
- var i,
- callback,
- matches = [];
+ CanvasRenderingContext2D.prototype.dashedLine = function(x,y,x2,y2,dashArray){
+ if (!dashArray) dashArray=[10,5];
+ if (dashLength==0) dashLength = 0.001; // Hack for Safari
+ var dashCount = dashArray.length;
+ this.moveTo(x, y);
+ var dx = (x2-x), dy = (y2-y);
+ var slope = dy/dx;
+ var distRemaining = Math.sqrt( dx*dx + dy*dy );
+ var dashIndex=0, draw=true;
+ while (distRemaining>=0.1){
+ var dashLength = dashArray[dashIndex++%dashCount];
+ if (dashLength > distRemaining) dashLength = distRemaining;
+ var xStep = Math.sqrt( dashLength*dashLength / (1 + slope*slope) );
+ if (dx<0) xStep = -xStep;
+ x += xStep;
+ y += slope*xStep;
+ this[draw ? 'lineTo' : 'moveTo'](x,y);
+ distRemaining -= dashLength;
+ draw = !draw;
+ }
+ };
- // if there are no events related to this keycode
- if (!_callbacks[character]) {
- return [];
- }
+ // TODO: add diamond shape
+ }
- // if a modifier key is coming up on its own we should allow it
- if (action == 'keyup' && _isModifier(character)) {
- modifiers = [character];
- }
- // loop through all callbacks for the key that was pressed
- // and see if any of them match
- for (i = 0; i < _callbacks[character].length; ++i) {
- callback = _callbacks[character][i];
+/***/ },
+/* 44 */
+/***/ function(module, exports, __webpack_require__) {
- // if this is a sequence but it is not at the right level
- // then move onto the next match
- if (callback.seq && _sequence_levels[callback.seq] != callback.level) {
- continue;
- }
+ var PhysicsMixin = __webpack_require__(55);
+ var ClusterMixin = __webpack_require__(49);
+ var SectorsMixin = __webpack_require__(50);
+ var SelectionMixin = __webpack_require__(51);
+ var ManipulationMixin = __webpack_require__(52);
+ var NavigationMixin = __webpack_require__(53);
+ var HierarchicalLayoutMixin = __webpack_require__(54);
- // if the action we are looking for doesn't match the action we got
- // then we should keep going
- if (action != callback.action) {
- continue;
- }
+ /**
+ * Load a mixin into the network object
+ *
+ * @param {Object} sourceVariable | this object has to contain functions.
+ * @private
+ */
+ exports._loadMixin = function (sourceVariable) {
+ for (var mixinFunction in sourceVariable) {
+ if (sourceVariable.hasOwnProperty(mixinFunction)) {
+ this[mixinFunction] = sourceVariable[mixinFunction];
+ }
+ }
+ };
- // if this is a keypress event that means that we need to only
- // look at the character, otherwise check the modifiers as
- // well
- if (action == 'keypress' || _modifiersMatch(modifiers, callback.modifiers)) {
- // remove is used so if you change your mind and call bind a
- // second time with a new function the first one is overwritten
- if (remove && callback.combo == combination) {
- _callbacks[character].splice(i, 1);
- }
+ /**
+ * removes a mixin from the network object.
+ *
+ * @param {Object} sourceVariable | this object has to contain functions.
+ * @private
+ */
+ exports._clearMixin = function (sourceVariable) {
+ for (var mixinFunction in sourceVariable) {
+ if (sourceVariable.hasOwnProperty(mixinFunction)) {
+ this[mixinFunction] = undefined;
+ }
+ }
+ };
- matches.push(callback);
- }
- }
- return matches;
+ /**
+ * Mixin the physics system and initialize the parameters required.
+ *
+ * @private
+ */
+ exports._loadPhysicsSystem = function () {
+ this._loadMixin(PhysicsMixin);
+ this._loadSelectedForceSolver();
+ if (this.constants.configurePhysics == true) {
+ this._loadPhysicsConfiguration();
}
+ };
- /**
- * takes a key event and figures out what the modifiers are
- *
- * @param {Event} e
- * @returns {Array}
- */
- function _eventModifiers(e) {
- var modifiers = [];
-
- if (e.shiftKey) {
- modifiers.push('shift');
- }
- if (e.altKey) {
- modifiers.push('alt');
- }
+ /**
+ * Mixin the cluster system and initialize the parameters required.
+ *
+ * @private
+ */
+ exports._loadClusterSystem = function () {
+ this.clusterSession = 0;
+ this.hubThreshold = 5;
+ this._loadMixin(ClusterMixin);
+ };
- if (e.ctrlKey) {
- modifiers.push('ctrl');
- }
- if (e.metaKey) {
- modifiers.push('meta');
- }
+ /**
+ * Mixin the sector system and initialize the parameters required
+ *
+ * @private
+ */
+ exports._loadSectorSystem = function () {
+ this.sectors = {};
+ this.activeSector = ["default"];
+ this.sectors["active"] = {};
+ this.sectors["active"]["default"] = {"nodes": {},
+ "edges": {},
+ "nodeIndices": [],
+ "formationScale": 1.0,
+ "drawingNode": undefined };
+ this.sectors["frozen"] = {};
+ this.sectors["support"] = {"nodes": {},
+ "edges": {},
+ "nodeIndices": [],
+ "formationScale": 1.0,
+ "drawingNode": undefined };
- return modifiers;
- }
+ this.nodeIndices = this.sectors["active"]["default"]["nodeIndices"]; // the node indices list is used to speed up the computation of the repulsion fields
- /**
- * actually calls the callback function
- *
- * if your callback function returns false this will use the jquery
- * convention - prevent default and stop propogation on the event
- *
- * @param {Function} callback
- * @param {Event} e
- * @returns void
- */
- function _fireCallback(callback, e) {
- if (callback(e) === false) {
- if (e.preventDefault) {
- e.preventDefault();
- }
+ this._loadMixin(SectorsMixin);
+ };
- if (e.stopPropagation) {
- e.stopPropagation();
- }
- e.returnValue = false;
- e.cancelBubble = true;
- }
- }
-
- /**
- * handles a character key event
- *
- * @param {string} character
- * @param {Event} e
- * @returns void
- */
- function _handleCharacter(character, e) {
-
- // if this event should not happen stop here
- if (_stop(e)) {
- return;
- }
-
- var callbacks = _getMatches(character, _eventModifiers(e), e.type),
- i,
- do_not_reset = {},
- processed_sequence_callback = false;
+ /**
+ * Mixin the selection system and initialize the parameters required
+ *
+ * @private
+ */
+ exports._loadSelectionSystem = function () {
+ this.selectionObj = {nodes: {}, edges: {}};
- // loop through matching callbacks for this key event
- for (i = 0; i < callbacks.length; ++i) {
+ this._loadMixin(SelectionMixin);
+ };
- // fire for all sequence callbacks
- // this is because if for example you have multiple sequences
- // bound such as "g i" and "g t" they both need to fire the
- // callback for matching g cause otherwise you can only ever
- // match the first one
- if (callbacks[i].seq) {
- processed_sequence_callback = true;
- // keep a list of which sequences were matches for later
- do_not_reset[callbacks[i].seq] = 1;
- _fireCallback(callbacks[i].callback, e);
- continue;
- }
+ /**
+ * Mixin the navigationUI (User Interface) system and initialize the parameters required
+ *
+ * @private
+ */
+ exports._loadManipulationSystem = function () {
+ // reset global variables -- these are used by the selection of nodes and edges.
+ this.blockConnectingEdgeSelection = false;
+ this.forceAppendSelection = false;
- // if there were no sequence matches but we are still here
- // that means this is a regular match so we should fire that
- if (!processed_sequence_callback && !_inside_sequence) {
- _fireCallback(callbacks[i].callback, e);
- }
+ if (this.constants.dataManipulation.enabled == true) {
+ // load the manipulator HTML elements. All styling done in css.
+ if (this.manipulationDiv === undefined) {
+ this.manipulationDiv = document.createElement('div');
+ this.manipulationDiv.className = 'network-manipulationDiv';
+ this.manipulationDiv.id = 'network-manipulationDiv';
+ if (this.editMode == true) {
+ this.manipulationDiv.style.display = "block";
}
-
- // if you are inside of a sequence and the key you are pressing
- // is not a modifier key then we should reset all sequences
- // that were not matched by this key event
- if (e.type == _inside_sequence && !_isModifier(character)) {
- _resetSequences(do_not_reset);
+ else {
+ this.manipulationDiv.style.display = "none";
}
- }
-
- /**
- * handles a keydown event
- *
- * @param {Event} e
- * @returns void
- */
- function _handleKey(e) {
-
- // normalize e.which for key events
- // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion
- e.which = typeof e.which == "number" ? e.which : e.keyCode;
-
- var character = _characterFromEvent(e);
+ this.containerElement.insertBefore(this.manipulationDiv, this.frame);
+ }
- // no character found then stop
- if (!character) {
- return;
+ if (this.editModeDiv === undefined) {
+ this.editModeDiv = document.createElement('div');
+ this.editModeDiv.className = 'network-manipulation-editMode';
+ this.editModeDiv.id = 'network-manipulation-editMode';
+ if (this.editMode == true) {
+ this.editModeDiv.style.display = "none";
}
-
- if (e.type == 'keyup' && _ignore_next_keyup == character) {
- _ignore_next_keyup = false;
- return;
+ else {
+ this.editModeDiv.style.display = "block";
}
+ this.containerElement.insertBefore(this.editModeDiv, this.frame);
+ }
- _handleCharacter(character, e);
- }
+ if (this.closeDiv === undefined) {
+ this.closeDiv = document.createElement('div');
+ this.closeDiv.className = 'network-manipulation-closeDiv';
+ this.closeDiv.id = 'network-manipulation-closeDiv';
+ this.closeDiv.style.display = this.manipulationDiv.style.display;
+ this.containerElement.insertBefore(this.closeDiv, this.frame);
+ }
- /**
- * determines if the keycode specified is a modifier key or not
- *
- * @param {string} key
- * @returns {boolean}
- */
- function _isModifier(key) {
- return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';
+ // load the manipulation functions
+ this._loadMixin(ManipulationMixin);
+
+ // create the manipulator toolbar
+ this._createManipulatorBar();
}
+ else {
+ if (this.manipulationDiv !== undefined) {
+ // removes all the bindings and overloads
+ this._createManipulatorBar();
+ // remove the manipulation divs
+ this.containerElement.removeChild(this.manipulationDiv);
+ this.containerElement.removeChild(this.editModeDiv);
+ this.containerElement.removeChild(this.closeDiv);
- /**
- * called to set a 1 second timeout on the specified sequence
- *
- * this is so after each key press in the sequence you have 1 second
- * to press the next key before you have to start over
- *
- * @returns void
- */
- function _resetSequenceTimer() {
- clearTimeout(_reset_timer);
- _reset_timer = setTimeout(_resetSequences, 1000);
+ this.manipulationDiv = undefined;
+ this.editModeDiv = undefined;
+ this.closeDiv = undefined;
+ // remove the mixin functions
+ this._clearMixin(ManipulationMixin);
+ }
}
+ };
- /**
- * reverses the map lookup so that we can look for specific keys
- * to see what can and can't use keypress
- *
- * @return {Object}
- */
- function _getReverseMap() {
- if (!_REVERSE_MAP) {
- _REVERSE_MAP = {};
- for (var key in _MAP) {
- // pull out the numeric keypad from here cause keypress should
- // be able to detect the keys from the character
- if (key > 95 && key < 112) {
- continue;
- }
+ /**
+ * Mixin the navigation (User Interface) system and initialize the parameters required
+ *
+ * @private
+ */
+ exports._loadNavigationControls = function () {
+ this._loadMixin(NavigationMixin);
- if (_MAP.hasOwnProperty(key)) {
- _REVERSE_MAP[_MAP[key]] = key;
- }
- }
- }
- return _REVERSE_MAP;
+ // the clean function removes the button divs, this is done to remove the bindings.
+ this._cleanNavigation();
+ if (this.constants.navigation.enabled == true) {
+ this._loadNavigationElements();
}
+ };
- /**
- * picks the best action based on the key combination
- *
- * @param {string} key - character for key
- * @param {Array} modifiers
- * @param {string=} action passed in
- */
- function _pickBestAction(key, modifiers, action) {
- // if no action was picked in we should try to pick the one
- // that we think would work best for this key
- if (!action) {
- action = _getReverseMap()[key] ? 'keydown' : 'keypress';
- }
+ /**
+ * Mixin the hierarchical layout system.
+ *
+ * @private
+ */
+ exports._loadHierarchySystem = function () {
+ this._loadMixin(HierarchicalLayoutMixin);
+ };
- // modifier keys don't work as expected with keypress,
- // switch to keydown
- if (action == 'keypress' && modifiers.length) {
- action = 'keydown';
- }
- return action;
- }
+/***/ },
+/* 45 */
+/***/ function(module, exports, __webpack_require__) {
- /**
- * binds a key sequence to an event
- *
- * @param {string} combo - combo specified in bind call
- * @param {Array} keys
- * @param {Function} callback
- * @param {string=} action
- * @returns void
- */
- function _bindSequence(combo, keys, callback, action) {
+
+ /**
+ * Expose `Emitter`.
+ */
- // start off by adding a sequence level record for this combination
- // and setting the level to 0
- _sequence_levels[combo] = 0;
+ module.exports = Emitter;
- // if there is no action pick the best one for the first key
- // in the sequence
- if (!action) {
- action = _pickBestAction(keys[0], []);
- }
+ /**
+ * Initialize a new `Emitter`.
+ *
+ * @api public
+ */
- /**
- * callback to increase the sequence level for this sequence and reset
- * all other sequences that were active
- *
- * @param {Event} e
- * @returns void
- */
- var _increaseSequence = function(e) {
- _inside_sequence = action;
- ++_sequence_levels[combo];
- _resetSequenceTimer();
- },
+ function Emitter(obj) {
+ if (obj) return mixin(obj);
+ };
- /**
- * wraps the specified callback inside of another function in order
- * to reset all sequence counters as soon as this sequence is done
- *
- * @param {Event} e
- * @returns void
- */
- _callbackAndReset = function(e) {
- _fireCallback(callback, e);
+ /**
+ * Mixin the emitter properties.
+ *
+ * @param {Object} obj
+ * @return {Object}
+ * @api private
+ */
- // we should ignore the next key up if the action is key down
- // or keypress. this is so if you finish a sequence and
- // release the key the final key will not trigger a keyup
- if (action !== 'keyup') {
- _ignore_next_keyup = _characterFromEvent(e);
- }
+ function mixin(obj) {
+ for (var key in Emitter.prototype) {
+ obj[key] = Emitter.prototype[key];
+ }
+ return obj;
+ }
- // weird race condition if a sequence ends with the key
- // another sequence begins with
- setTimeout(_resetSequences, 10);
- },
- i;
+ /**
+ * Listen on the given `event` with `fn`.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
- // loop through keys one at a time and bind the appropriate callback
- // function. for any key leading up to the final one it should
- // increase the sequence. after the final, it should reset all sequences
- for (i = 0; i < keys.length; ++i) {
- _bindSingle(keys[i], i < keys.length - 1 ? _increaseSequence : _callbackAndReset, action, combo, i);
- }
- }
+ Emitter.prototype.on =
+ Emitter.prototype.addEventListener = function(event, fn){
+ this._callbacks = this._callbacks || {};
+ (this._callbacks[event] = this._callbacks[event] || [])
+ .push(fn);
+ return this;
+ };
- /**
- * binds a single keyboard combination
- *
- * @param {string} combination
- * @param {Function} callback
- * @param {string=} action
- * @param {string=} sequence_name - name of sequence if part of sequence
- * @param {number=} level - what part of the sequence the command is
- * @returns void
- */
- function _bindSingle(combination, callback, action, sequence_name, level) {
+ /**
+ * Adds an `event` listener that will be invoked a single
+ * time then automatically removed.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
- // make sure multiple spaces in a row become a single space
- combination = combination.replace(/\s+/g, ' ');
+ Emitter.prototype.once = function(event, fn){
+ var self = this;
+ this._callbacks = this._callbacks || {};
- var sequence = combination.split(' '),
- i,
- key,
- keys,
- modifiers = [];
+ function on() {
+ self.off(event, on);
+ fn.apply(this, arguments);
+ }
- // if this pattern is a sequence of keys then run through this method
- // to reprocess each pattern one key at a time
- if (sequence.length > 1) {
- return _bindSequence(combination, sequence, callback, action);
- }
+ on.fn = fn;
+ this.on(event, on);
+ return this;
+ };
- // take the keys from this pattern and figure out what the actual
- // pattern is all about
- keys = combination === '+' ? ['+'] : combination.split('+');
+ /**
+ * Remove the given callback for `event` or all
+ * registered callbacks.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
- for (i = 0; i < keys.length; ++i) {
- key = keys[i];
+ Emitter.prototype.off =
+ Emitter.prototype.removeListener =
+ Emitter.prototype.removeAllListeners =
+ Emitter.prototype.removeEventListener = function(event, fn){
+ this._callbacks = this._callbacks || {};
- // normalize key names
- if (_SPECIAL_ALIASES[key]) {
- key = _SPECIAL_ALIASES[key];
- }
+ // all
+ if (0 == arguments.length) {
+ this._callbacks = {};
+ return this;
+ }
- // if this is not a keypress event then we should
- // be smart about using shift keys
- // this will only work for US keyboards however
- if (action && action != 'keypress' && _SHIFT_MAP[key]) {
- key = _SHIFT_MAP[key];
- modifiers.push('shift');
- }
+ // specific event
+ var callbacks = this._callbacks[event];
+ if (!callbacks) return this;
- // if this key is a modifier then add it to the list of modifiers
- if (_isModifier(key)) {
- modifiers.push(key);
- }
- }
+ // remove all handlers
+ if (1 == arguments.length) {
+ delete this._callbacks[event];
+ return this;
+ }
- // depending on what the key combination is
- // we will try to pick the best event for it
- action = _pickBestAction(key, modifiers, action);
+ // remove specific handler
+ var cb;
+ for (var i = 0; i < callbacks.length; i++) {
+ cb = callbacks[i];
+ if (cb === fn || cb.fn === fn) {
+ callbacks.splice(i, 1);
+ break;
+ }
+ }
+ return this;
+ };
- // make sure to initialize array if this is the first time
- // a callback is added for this key
- if (!_callbacks[key]) {
- _callbacks[key] = [];
- }
+ /**
+ * Emit `event` with the given args.
+ *
+ * @param {String} event
+ * @param {Mixed} ...
+ * @return {Emitter}
+ */
- // remove an existing match if there is one
- _getMatches(key, modifiers, action, !sequence_name, combination);
+ Emitter.prototype.emit = function(event){
+ this._callbacks = this._callbacks || {};
+ var args = [].slice.call(arguments, 1)
+ , callbacks = this._callbacks[event];
- // add this call back to the array
- // if it is a sequence put it at the beginning
- // if not put it at the end
- //
- // this is important because the way these are processed expects
- // the sequence ones to come first
- _callbacks[key][sequence_name ? 'unshift' : 'push']({
- callback: callback,
- modifiers: modifiers,
- action: action,
- seq: sequence_name,
- level: level,
- combo: combination
- });
+ if (callbacks) {
+ callbacks = callbacks.slice(0);
+ for (var i = 0, len = callbacks.length; i < len; ++i) {
+ callbacks[i].apply(this, args);
+ }
}
+ return this;
+ };
+
+ /**
+ * Return array of callbacks for `event`.
+ *
+ * @param {String} event
+ * @return {Array}
+ * @api public
+ */
+
+ Emitter.prototype.listeners = function(event){
+ this._callbacks = this._callbacks || {};
+ return this._callbacks[event] || [];
+ };
+
+ /**
+ * Check if this emitter has `event` handlers.
+ *
+ * @param {String} event
+ * @return {Boolean}
+ * @api public
+ */
+
+ Emitter.prototype.hasListeners = function(event){
+ return !! this.listeners(event).length;
+ };
+
+
+/***/ },
+/* 46 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Copyright 2012 Craig Campbell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Mousetrap is a simple keyboard shortcut library for Javascript with
+ * no external dependencies
+ *
+ * @version 1.1.2
+ * @url craig.is/killing/mice
+ */
+
/**
- * binds multiple combinations to the same callback
+ * mapping of special keycodes to their corresponding keys
*
- * @param {Array} combinations
- * @param {Function} callback
- * @param {string|undefined} action
- * @returns void
+ * everything in this dictionary cannot use keypress events
+ * so it has to be here to map to the correct keycodes for
+ * keyup/keydown events
+ *
+ * @type {Object}
*/
- function _bindMultiple(combinations, callback, action) {
- for (var i = 0; i < combinations.length; ++i) {
- _bindSingle(combinations[i], callback, action);
- }
- }
+ var _MAP = {
+ 8: 'backspace',
+ 9: 'tab',
+ 13: 'enter',
+ 16: 'shift',
+ 17: 'ctrl',
+ 18: 'alt',
+ 20: 'capslock',
+ 27: 'esc',
+ 32: 'space',
+ 33: 'pageup',
+ 34: 'pagedown',
+ 35: 'end',
+ 36: 'home',
+ 37: 'left',
+ 38: 'up',
+ 39: 'right',
+ 40: 'down',
+ 45: 'ins',
+ 46: 'del',
+ 91: 'meta',
+ 93: 'meta',
+ 224: 'meta'
+ },
- // start!
- _addEvent(document, 'keypress', _handleKey);
- _addEvent(document, 'keydown', _handleKey);
- _addEvent(document, 'keyup', _handleKey);
+ /**
+ * mapping for special characters so they can support
+ *
+ * this dictionary is only used incase you want to bind a
+ * keyup or keydown event to one of these keys
+ *
+ * @type {Object}
+ */
+ _KEYCODE_MAP = {
+ 106: '*',
+ 107: '+',
+ 109: '-',
+ 110: '.',
+ 111 : '/',
+ 186: ';',
+ 187: '=',
+ 188: ',',
+ 189: '-',
+ 190: '.',
+ 191: '/',
+ 192: '`',
+ 219: '[',
+ 220: '\\',
+ 221: ']',
+ 222: '\''
+ },
- var mousetrap = {
+ /**
+ * this is a mapping of keys that require shift on a US keypad
+ * back to the non shift equivelents
+ *
+ * this is so you can use keyup events with these keys
+ *
+ * note that this will only work reliably on US keyboards
+ *
+ * @type {Object}
+ */
+ _SHIFT_MAP = {
+ '~': '`',
+ '!': '1',
+ '@': '2',
+ '#': '3',
+ '$': '4',
+ '%': '5',
+ '^': '6',
+ '&': '7',
+ '*': '8',
+ '(': '9',
+ ')': '0',
+ '_': '-',
+ '+': '=',
+ ':': ';',
+ '\"': '\'',
+ '<': ',',
+ '>': '.',
+ '?': '/',
+ '|': '\\'
+ },
/**
- * binds an event to mousetrap
- *
- * can be a single key, a combination of keys separated with +,
- * a comma separated list of keys, an array of keys, or
- * a sequence of keys separated by spaces
- *
- * be sure to list the modifier keys first to make sure that the
- * correct key ends up getting bound (the last key in the pattern)
+ * this is a list of special strings you can use to map
+ * to modifier keys when you specify your keyboard shortcuts
*
- * @param {string|Array} keys
- * @param {Function} callback
- * @param {string=} action - 'keypress', 'keydown', or 'keyup'
- * @returns void
+ * @type {Object}
*/
- bind: function(keys, callback, action) {
- _bindMultiple(keys instanceof Array ? keys : [keys], callback, action);
- _direct_map[keys + ':' + action] = callback;
- return this;
+ _SPECIAL_ALIASES = {
+ 'option': 'alt',
+ 'command': 'meta',
+ 'return': 'enter',
+ 'escape': 'esc'
},
/**
- * unbinds an event to mousetrap
+ * variable to store the flipped version of _MAP from above
+ * needed to check if we should use keypress or not when no action
+ * is specified
*
- * the unbinding sets the callback function of the specified key combo
- * to an empty function and deletes the corresponding key in the
- * _direct_map dict.
+ * @type {Object|undefined}
+ */
+ _REVERSE_MAP,
+
+ /**
+ * a list of all the callbacks setup via Mousetrap.bind()
*
- * the keycombo+action has to be exactly the same as
- * it was defined in the bind method
+ * @type {Object}
+ */
+ _callbacks = {},
+
+ /**
+ * direct map of string combinations to callbacks used for trigger()
*
- * TODO: actually remove this from the _callbacks dictionary instead
- * of binding an empty function
+ * @type {Object}
+ */
+ _direct_map = {},
+
+ /**
+ * keeps track of what level each sequence is at since multiple
+ * sequences can start out with the same sequence
*
- * @param {string|Array} keys
- * @param {string} action
- * @returns void
+ * @type {Object}
*/
- unbind: function(keys, action) {
- if (_direct_map[keys + ':' + action]) {
- delete _direct_map[keys + ':' + action];
- this.bind(keys, function() {}, action);
- }
- return this;
- },
+ _sequence_levels = {},
/**
- * triggers an event that has already been bound
+ * variable to store the setTimeout call
*
- * @param {string} keys
- * @param {string=} action
- * @returns void
+ * @type {null|number}
*/
- trigger: function(keys, action) {
- _direct_map[keys + ':' + action]();
- return this;
- },
+ _reset_timer,
/**
- * resets the library back to its initial state. this is useful
- * if you want to clear out the current keyboard shortcuts and bind
- * new ones - for example if you switch to another page
+ * temporary state where we will ignore the next keyup
*
- * @returns void
+ * @type {boolean|string}
*/
- reset: function() {
- _callbacks = {};
- _direct_map = {};
- return this;
+ _ignore_next_keyup = false,
+
+ /**
+ * are we currently inside of a sequence?
+ * type of action ("keyup" or "keydown" or "keypress") or false
+ *
+ * @type {boolean|string}
+ */
+ _inside_sequence = false;
+
+ /**
+ * loop through the f keys, f1 to f19 and add them to the map
+ * programatically
+ */
+ for (var i = 1; i < 20; ++i) {
+ _MAP[111 + i] = 'f' + i;
+ }
+
+ /**
+ * loop through to map numbers on the numeric keypad
+ */
+ for (i = 0; i <= 9; ++i) {
+ _MAP[i + 96] = i;
+ }
+
+ /**
+ * cross browser add event method
+ *
+ * @param {Element|HTMLDocument} object
+ * @param {string} type
+ * @param {Function} callback
+ * @returns void
+ */
+ function _addEvent(object, type, callback) {
+ if (object.addEventListener) {
+ return object.addEventListener(type, callback, false);
}
- };
- module.exports = mousetrap;
+ object.attachEvent('on' + type, callback);
+ }
+ /**
+ * takes the event and returns the key character
+ *
+ * @param {Event} e
+ * @return {string}
+ */
+ function _characterFromEvent(e) {
+ // for keypress events we should return the character as is
+ if (e.type == 'keypress') {
+ return String.fromCharCode(e.which);
+ }
-/***/ },
-/* 45 */
-/***/ function(module, exports, __webpack_require__) {
+ // for non keypress events the special maps are needed
+ if (_MAP[e.which]) {
+ return _MAP[e.which];
+ }
- var PhysicsMixin = __webpack_require__(49);
- var ClusterMixin = __webpack_require__(50);
- var SectorsMixin = __webpack_require__(51);
- var SelectionMixin = __webpack_require__(52);
- var ManipulationMixin = __webpack_require__(53);
- var NavigationMixin = __webpack_require__(54);
- var HierarchicalLayoutMixin = __webpack_require__(55);
+ if (_KEYCODE_MAP[e.which]) {
+ return _KEYCODE_MAP[e.which];
+ }
- /**
- * Load a mixin into the network object
- *
- * @param {Object} sourceVariable | this object has to contain functions.
- * @private
- */
- exports._loadMixin = function (sourceVariable) {
- for (var mixinFunction in sourceVariable) {
- if (sourceVariable.hasOwnProperty(mixinFunction)) {
- this[mixinFunction] = sourceVariable[mixinFunction];
- }
+ // if it is not in the special map
+ return String.fromCharCode(e.which).toLowerCase();
}
- };
+ /**
+ * should we stop this event before firing off callbacks
+ *
+ * @param {Event} e
+ * @return {boolean}
+ */
+ function _stop(e) {
+ var element = e.target || e.srcElement,
+ tag_name = element.tagName;
- /**
- * removes a mixin from the network object.
- *
- * @param {Object} sourceVariable | this object has to contain functions.
- * @private
- */
- exports._clearMixin = function (sourceVariable) {
- for (var mixinFunction in sourceVariable) {
- if (sourceVariable.hasOwnProperty(mixinFunction)) {
- this[mixinFunction] = undefined;
- }
+ // if the element has the class "mousetrap" then no need to stop
+ if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {
+ return false;
+ }
+
+ // stop for input, select, and textarea
+ return tag_name == 'INPUT' || tag_name == 'SELECT' || tag_name == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true');
}
- };
+ /**
+ * checks if two arrays are equal
+ *
+ * @param {Array} modifiers1
+ * @param {Array} modifiers2
+ * @returns {boolean}
+ */
+ function _modifiersMatch(modifiers1, modifiers2) {
+ return modifiers1.sort().join(',') === modifiers2.sort().join(',');
+ }
- /**
- * Mixin the physics system and initialize the parameters required.
- *
- * @private
- */
- exports._loadPhysicsSystem = function () {
- this._loadMixin(PhysicsMixin);
- this._loadSelectedForceSolver();
- if (this.constants.configurePhysics == true) {
- this._loadPhysicsConfiguration();
+ /**
+ * resets all sequence counters except for the ones passed in
+ *
+ * @param {Object} do_not_reset
+ * @returns void
+ */
+ function _resetSequences(do_not_reset) {
+ do_not_reset = do_not_reset || {};
+
+ var active_sequences = false,
+ key;
+
+ for (key in _sequence_levels) {
+ if (do_not_reset[key]) {
+ active_sequences = true;
+ continue;
+ }
+ _sequence_levels[key] = 0;
+ }
+
+ if (!active_sequences) {
+ _inside_sequence = false;
+ }
}
- };
+ /**
+ * finds all callbacks that match based on the keycode, modifiers,
+ * and action
+ *
+ * @param {string} character
+ * @param {Array} modifiers
+ * @param {string} action
+ * @param {boolean=} remove - should we remove any matches
+ * @param {string=} combination
+ * @returns {Array}
+ */
+ function _getMatches(character, modifiers, action, remove, combination) {
+ var i,
+ callback,
+ matches = [];
- /**
- * Mixin the cluster system and initialize the parameters required.
- *
- * @private
- */
- exports._loadClusterSystem = function () {
- this.clusterSession = 0;
- this.hubThreshold = 5;
- this._loadMixin(ClusterMixin);
- };
+ // if there are no events related to this keycode
+ if (!_callbacks[character]) {
+ return [];
+ }
+ // if a modifier key is coming up on its own we should allow it
+ if (action == 'keyup' && _isModifier(character)) {
+ modifiers = [character];
+ }
- /**
- * Mixin the sector system and initialize the parameters required
- *
- * @private
- */
- exports._loadSectorSystem = function () {
- this.sectors = {};
- this.activeSector = ["default"];
- this.sectors["active"] = {};
- this.sectors["active"]["default"] = {"nodes": {},
- "edges": {},
- "nodeIndices": [],
- "formationScale": 1.0,
- "drawingNode": undefined };
- this.sectors["frozen"] = {};
- this.sectors["support"] = {"nodes": {},
- "edges": {},
- "nodeIndices": [],
- "formationScale": 1.0,
- "drawingNode": undefined };
+ // loop through all callbacks for the key that was pressed
+ // and see if any of them match
+ for (i = 0; i < _callbacks[character].length; ++i) {
+ callback = _callbacks[character][i];
- this.nodeIndices = this.sectors["active"]["default"]["nodeIndices"]; // the node indices list is used to speed up the computation of the repulsion fields
+ // if this is a sequence but it is not at the right level
+ // then move onto the next match
+ if (callback.seq && _sequence_levels[callback.seq] != callback.level) {
+ continue;
+ }
- this._loadMixin(SectorsMixin);
- };
+ // if the action we are looking for doesn't match the action we got
+ // then we should keep going
+ if (action != callback.action) {
+ continue;
+ }
+ // if this is a keypress event that means that we need to only
+ // look at the character, otherwise check the modifiers as
+ // well
+ if (action == 'keypress' || _modifiersMatch(modifiers, callback.modifiers)) {
- /**
- * Mixin the selection system and initialize the parameters required
- *
- * @private
- */
- exports._loadSelectionSystem = function () {
- this.selectionObj = {nodes: {}, edges: {}};
+ // remove is used so if you change your mind and call bind a
+ // second time with a new function the first one is overwritten
+ if (remove && callback.combo == combination) {
+ _callbacks[character].splice(i, 1);
+ }
- this._loadMixin(SelectionMixin);
- };
+ matches.push(callback);
+ }
+ }
+ return matches;
+ }
- /**
- * Mixin the navigationUI (User Interface) system and initialize the parameters required
- *
- * @private
- */
- exports._loadManipulationSystem = function () {
- // reset global variables -- these are used by the selection of nodes and edges.
- this.blockConnectingEdgeSelection = false;
- this.forceAppendSelection = false;
+ /**
+ * takes a key event and figures out what the modifiers are
+ *
+ * @param {Event} e
+ * @returns {Array}
+ */
+ function _eventModifiers(e) {
+ var modifiers = [];
- if (this.constants.dataManipulation.enabled == true) {
- // load the manipulator HTML elements. All styling done in css.
- if (this.manipulationDiv === undefined) {
- this.manipulationDiv = document.createElement('div');
- this.manipulationDiv.className = 'network-manipulationDiv';
- this.manipulationDiv.id = 'network-manipulationDiv';
- if (this.editMode == true) {
- this.manipulationDiv.style.display = "block";
+ if (e.shiftKey) {
+ modifiers.push('shift');
}
- else {
- this.manipulationDiv.style.display = "none";
+
+ if (e.altKey) {
+ modifiers.push('alt');
}
- this.containerElement.insertBefore(this.manipulationDiv, this.frame);
- }
- if (this.editModeDiv === undefined) {
- this.editModeDiv = document.createElement('div');
- this.editModeDiv.className = 'network-manipulation-editMode';
- this.editModeDiv.id = 'network-manipulation-editMode';
- if (this.editMode == true) {
- this.editModeDiv.style.display = "none";
+ if (e.ctrlKey) {
+ modifiers.push('ctrl');
}
- else {
- this.editModeDiv.style.display = "block";
+
+ if (e.metaKey) {
+ modifiers.push('meta');
}
- this.containerElement.insertBefore(this.editModeDiv, this.frame);
- }
- if (this.closeDiv === undefined) {
- this.closeDiv = document.createElement('div');
- this.closeDiv.className = 'network-manipulation-closeDiv';
- this.closeDiv.id = 'network-manipulation-closeDiv';
- this.closeDiv.style.display = this.manipulationDiv.style.display;
- this.containerElement.insertBefore(this.closeDiv, this.frame);
- }
+ return modifiers;
+ }
- // load the manipulation functions
- this._loadMixin(ManipulationMixin);
+ /**
+ * actually calls the callback function
+ *
+ * if your callback function returns false this will use the jquery
+ * convention - prevent default and stop propogation on the event
+ *
+ * @param {Function} callback
+ * @param {Event} e
+ * @returns void
+ */
+ function _fireCallback(callback, e) {
+ if (callback(e) === false) {
+ if (e.preventDefault) {
+ e.preventDefault();
+ }
- // create the manipulator toolbar
- this._createManipulatorBar();
- }
- else {
- if (this.manipulationDiv !== undefined) {
- // removes all the bindings and overloads
- this._createManipulatorBar();
- // remove the manipulation divs
- this.containerElement.removeChild(this.manipulationDiv);
- this.containerElement.removeChild(this.editModeDiv);
- this.containerElement.removeChild(this.closeDiv);
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ }
- this.manipulationDiv = undefined;
- this.editModeDiv = undefined;
- this.closeDiv = undefined;
- // remove the mixin functions
- this._clearMixin(ManipulationMixin);
- }
+ e.returnValue = false;
+ e.cancelBubble = true;
+ }
}
- };
+ /**
+ * handles a character key event
+ *
+ * @param {string} character
+ * @param {Event} e
+ * @returns void
+ */
+ function _handleCharacter(character, e) {
- /**
- * Mixin the navigation (User Interface) system and initialize the parameters required
- *
- * @private
- */
- exports._loadNavigationControls = function () {
- this._loadMixin(NavigationMixin);
+ // if this event should not happen stop here
+ if (_stop(e)) {
+ return;
+ }
- // the clean function removes the button divs, this is done to remove the bindings.
- this._cleanNavigation();
- if (this.constants.navigation.enabled == true) {
- this._loadNavigationElements();
- }
- };
+ var callbacks = _getMatches(character, _eventModifiers(e), e.type),
+ i,
+ do_not_reset = {},
+ processed_sequence_callback = false;
+ // loop through matching callbacks for this key event
+ for (i = 0; i < callbacks.length; ++i) {
- /**
- * Mixin the hierarchical layout system.
- *
- * @private
- */
- exports._loadHierarchySystem = function () {
- this._loadMixin(HierarchicalLayoutMixin);
- };
+ // fire for all sequence callbacks
+ // this is because if for example you have multiple sequences
+ // bound such as "g i" and "g t" they both need to fire the
+ // callback for matching g cause otherwise you can only ever
+ // match the first one
+ if (callbacks[i].seq) {
+ processed_sequence_callback = true;
+
+ // keep a list of which sequences were matches for later
+ do_not_reset[callbacks[i].seq] = 1;
+ _fireCallback(callbacks[i].callback, e);
+ continue;
+ }
+
+ // if there were no sequence matches but we are still here
+ // that means this is a regular match so we should fire that
+ if (!processed_sequence_callback && !_inside_sequence) {
+ _fireCallback(callbacks[i].callback, e);
+ }
+ }
+
+ // if you are inside of a sequence and the key you are pressing
+ // is not a modifier key then we should reset all sequences
+ // that were not matched by this key event
+ if (e.type == _inside_sequence && !_isModifier(character)) {
+ _resetSequences(do_not_reset);
+ }
+ }
+
+ /**
+ * handles a keydown event
+ *
+ * @param {Event} e
+ * @returns void
+ */
+ function _handleKey(e) {
+ // normalize e.which for key events
+ // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion
+ e.which = typeof e.which == "number" ? e.which : e.keyCode;
-/***/ },
-/* 46 */
-/***/ function(module, exports, __webpack_require__) {
+ var character = _characterFromEvent(e);
- /**
- * Canvas shapes used by Network
- */
- if (typeof CanvasRenderingContext2D !== 'undefined') {
+ // no character found then stop
+ if (!character) {
+ return;
+ }
+
+ if (e.type == 'keyup' && _ignore_next_keyup == character) {
+ _ignore_next_keyup = false;
+ return;
+ }
+
+ _handleCharacter(character, e);
+ }
/**
- * Draw a circle shape
+ * determines if the keycode specified is a modifier key or not
+ *
+ * @param {string} key
+ * @returns {boolean}
*/
- CanvasRenderingContext2D.prototype.circle = function(x, y, r) {
- this.beginPath();
- this.arc(x, y, r, 0, 2*Math.PI, false);
- };
+ function _isModifier(key) {
+ return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';
+ }
/**
- * Draw a square shape
- * @param {Number} x horizontal center
- * @param {Number} y vertical center
- * @param {Number} r size, width and height of the square
+ * called to set a 1 second timeout on the specified sequence
+ *
+ * this is so after each key press in the sequence you have 1 second
+ * to press the next key before you have to start over
+ *
+ * @returns void
*/
- CanvasRenderingContext2D.prototype.square = function(x, y, r) {
- this.beginPath();
- this.rect(x - r, y - r, r * 2, r * 2);
- };
+ function _resetSequenceTimer() {
+ clearTimeout(_reset_timer);
+ _reset_timer = setTimeout(_resetSequences, 1000);
+ }
/**
- * Draw a triangle shape
- * @param {Number} x horizontal center
- * @param {Number} y vertical center
- * @param {Number} r radius, half the length of the sides of the triangle
+ * reverses the map lookup so that we can look for specific keys
+ * to see what can and can't use keypress
+ *
+ * @return {Object}
*/
- CanvasRenderingContext2D.prototype.triangle = function(x, y, r) {
- // http://en.wikipedia.org/wiki/Equilateral_triangle
- this.beginPath();
+ function _getReverseMap() {
+ if (!_REVERSE_MAP) {
+ _REVERSE_MAP = {};
+ for (var key in _MAP) {
- var s = r * 2;
- var s2 = s / 2;
- var ir = Math.sqrt(3) / 6 * s; // radius of inner circle
- var h = Math.sqrt(s * s - s2 * s2); // height
+ // pull out the numeric keypad from here cause keypress should
+ // be able to detect the keys from the character
+ if (key > 95 && key < 112) {
+ continue;
+ }
- this.moveTo(x, y - (h - ir));
- this.lineTo(x + s2, y + ir);
- this.lineTo(x - s2, y + ir);
- this.lineTo(x, y - (h - ir));
- this.closePath();
- };
+ if (_MAP.hasOwnProperty(key)) {
+ _REVERSE_MAP[_MAP[key]] = key;
+ }
+ }
+ }
+ return _REVERSE_MAP;
+ }
/**
- * Draw a triangle shape in downward orientation
- * @param {Number} x horizontal center
- * @param {Number} y vertical center
- * @param {Number} r radius
+ * picks the best action based on the key combination
+ *
+ * @param {string} key - character for key
+ * @param {Array} modifiers
+ * @param {string=} action passed in
*/
- CanvasRenderingContext2D.prototype.triangleDown = function(x, y, r) {
- // http://en.wikipedia.org/wiki/Equilateral_triangle
- this.beginPath();
+ function _pickBestAction(key, modifiers, action) {
- var s = r * 2;
- var s2 = s / 2;
- var ir = Math.sqrt(3) / 6 * s; // radius of inner circle
- var h = Math.sqrt(s * s - s2 * s2); // height
+ // if no action was picked in we should try to pick the one
+ // that we think would work best for this key
+ if (!action) {
+ action = _getReverseMap()[key] ? 'keydown' : 'keypress';
+ }
- this.moveTo(x, y + (h - ir));
- this.lineTo(x + s2, y - ir);
- this.lineTo(x - s2, y - ir);
- this.lineTo(x, y + (h - ir));
- this.closePath();
- };
+ // modifier keys don't work as expected with keypress,
+ // switch to keydown
+ if (action == 'keypress' && modifiers.length) {
+ action = 'keydown';
+ }
+
+ return action;
+ }
/**
- * Draw a star shape, a star with 5 points
- * @param {Number} x horizontal center
- * @param {Number} y vertical center
- * @param {Number} r radius, half the length of the sides of the triangle
+ * binds a key sequence to an event
+ *
+ * @param {string} combo - combo specified in bind call
+ * @param {Array} keys
+ * @param {Function} callback
+ * @param {string=} action
+ * @returns void
*/
- CanvasRenderingContext2D.prototype.star = function(x, y, r) {
- // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/
- this.beginPath();
+ function _bindSequence(combo, keys, callback, action) {
- for (var n = 0; n < 10; n++) {
- var radius = (n % 2 === 0) ? r * 1.3 : r * 0.5;
- this.lineTo(
- x + radius * Math.sin(n * 2 * Math.PI / 10),
- y - radius * Math.cos(n * 2 * Math.PI / 10)
- );
- }
+ // start off by adding a sequence level record for this combination
+ // and setting the level to 0
+ _sequence_levels[combo] = 0;
- this.closePath();
- };
+ // if there is no action pick the best one for the first key
+ // in the sequence
+ if (!action) {
+ action = _pickBestAction(keys[0], []);
+ }
- /**
- * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas
- */
- CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) {
- var r2d = Math.PI/180;
- if( w - ( 2 * r ) < 0 ) { r = ( w / 2 ); } //ensure that the radius isn't too large for x
- if( h - ( 2 * r ) < 0 ) { r = ( h / 2 ); } //ensure that the radius isn't too large for y
- this.beginPath();
- this.moveTo(x+r,y);
- this.lineTo(x+w-r,y);
- this.arc(x+w-r,y+r,r,r2d*270,r2d*360,false);
- this.lineTo(x+w,y+h-r);
- this.arc(x+w-r,y+h-r,r,0,r2d*90,false);
- this.lineTo(x+r,y+h);
- this.arc(x+r,y+h-r,r,r2d*90,r2d*180,false);
- this.lineTo(x,y+r);
- this.arc(x+r,y+r,r,r2d*180,r2d*270,false);
- };
+ /**
+ * callback to increase the sequence level for this sequence and reset
+ * all other sequences that were active
+ *
+ * @param {Event} e
+ * @returns void
+ */
+ var _increaseSequence = function(e) {
+ _inside_sequence = action;
+ ++_sequence_levels[combo];
+ _resetSequenceTimer();
+ },
+
+ /**
+ * wraps the specified callback inside of another function in order
+ * to reset all sequence counters as soon as this sequence is done
+ *
+ * @param {Event} e
+ * @returns void
+ */
+ _callbackAndReset = function(e) {
+ _fireCallback(callback, e);
+
+ // we should ignore the next key up if the action is key down
+ // or keypress. this is so if you finish a sequence and
+ // release the key the final key will not trigger a keyup
+ if (action !== 'keyup') {
+ _ignore_next_keyup = _characterFromEvent(e);
+ }
+
+ // weird race condition if a sequence ends with the key
+ // another sequence begins with
+ setTimeout(_resetSequences, 10);
+ },
+ i;
+
+ // loop through keys one at a time and bind the appropriate callback
+ // function. for any key leading up to the final one it should
+ // increase the sequence. after the final, it should reset all sequences
+ for (i = 0; i < keys.length; ++i) {
+ _bindSingle(keys[i], i < keys.length - 1 ? _increaseSequence : _callbackAndReset, action, combo, i);
+ }
+ }
/**
- * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas
+ * binds a single keyboard combination
+ *
+ * @param {string} combination
+ * @param {Function} callback
+ * @param {string=} action
+ * @param {string=} sequence_name - name of sequence if part of sequence
+ * @param {number=} level - what part of the sequence the command is
+ * @returns void
*/
- CanvasRenderingContext2D.prototype.ellipse = function(x, y, w, h) {
- var kappa = .5522848,
- ox = (w / 2) * kappa, // control point offset horizontal
- oy = (h / 2) * kappa, // control point offset vertical
- xe = x + w, // x-end
- ye = y + h, // y-end
- xm = x + w / 2, // x-middle
- ym = y + h / 2; // y-middle
+ function _bindSingle(combination, callback, action, sequence_name, level) {
- this.beginPath();
- this.moveTo(x, ym);
- this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
- this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
- this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
- this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
- };
+ // make sure multiple spaces in a row become a single space
+ combination = combination.replace(/\s+/g, ' ');
+ var sequence = combination.split(' '),
+ i,
+ key,
+ keys,
+ modifiers = [];
+ // if this pattern is a sequence of keys then run through this method
+ // to reprocess each pattern one key at a time
+ if (sequence.length > 1) {
+ return _bindSequence(combination, sequence, callback, action);
+ }
- /**
- * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas
- */
- CanvasRenderingContext2D.prototype.database = function(x, y, w, h) {
- var f = 1/3;
- var wEllipse = w;
- var hEllipse = h * f;
+ // take the keys from this pattern and figure out what the actual
+ // pattern is all about
+ keys = combination === '+' ? ['+'] : combination.split('+');
- var kappa = .5522848,
- ox = (wEllipse / 2) * kappa, // control point offset horizontal
- oy = (hEllipse / 2) * kappa, // control point offset vertical
- xe = x + wEllipse, // x-end
- ye = y + hEllipse, // y-end
- xm = x + wEllipse / 2, // x-middle
- ym = y + hEllipse / 2, // y-middle
- ymb = y + (h - hEllipse/2), // y-midlle, bottom ellipse
- yeb = y + h; // y-end, bottom ellipse
+ for (i = 0; i < keys.length; ++i) {
+ key = keys[i];
- this.beginPath();
- this.moveTo(xe, ym);
+ // normalize key names
+ if (_SPECIAL_ALIASES[key]) {
+ key = _SPECIAL_ALIASES[key];
+ }
- this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
- this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
+ // if this is not a keypress event then we should
+ // be smart about using shift keys
+ // this will only work for US keyboards however
+ if (action && action != 'keypress' && _SHIFT_MAP[key]) {
+ key = _SHIFT_MAP[key];
+ modifiers.push('shift');
+ }
- this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
- this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
+ // if this key is a modifier then add it to the list of modifiers
+ if (_isModifier(key)) {
+ modifiers.push(key);
+ }
+ }
- this.lineTo(xe, ymb);
+ // depending on what the key combination is
+ // we will try to pick the best event for it
+ action = _pickBestAction(key, modifiers, action);
- this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb);
- this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb);
+ // make sure to initialize array if this is the first time
+ // a callback is added for this key
+ if (!_callbacks[key]) {
+ _callbacks[key] = [];
+ }
- this.lineTo(x, ym);
- };
+ // remove an existing match if there is one
+ _getMatches(key, modifiers, action, !sequence_name, combination);
+ // add this call back to the array
+ // if it is a sequence put it at the beginning
+ // if not put it at the end
+ //
+ // this is important because the way these are processed expects
+ // the sequence ones to come first
+ _callbacks[key][sequence_name ? 'unshift' : 'push']({
+ callback: callback,
+ modifiers: modifiers,
+ action: action,
+ seq: sequence_name,
+ level: level,
+ combo: combination
+ });
+ }
/**
- * Draw an arrow point (no line)
+ * binds multiple combinations to the same callback
+ *
+ * @param {Array} combinations
+ * @param {Function} callback
+ * @param {string|undefined} action
+ * @returns void
*/
- CanvasRenderingContext2D.prototype.arrow = function(x, y, angle, length) {
- // tail
- var xt = x - length * Math.cos(angle);
- var yt = y - length * Math.sin(angle);
+ function _bindMultiple(combinations, callback, action) {
+ for (var i = 0; i < combinations.length; ++i) {
+ _bindSingle(combinations[i], callback, action);
+ }
+ }
- // inner tail
- // TODO: allow to customize different shapes
- var xi = x - length * 0.9 * Math.cos(angle);
- var yi = y - length * 0.9 * Math.sin(angle);
+ // start!
+ _addEvent(document, 'keypress', _handleKey);
+ _addEvent(document, 'keydown', _handleKey);
+ _addEvent(document, 'keyup', _handleKey);
- // left
- var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI);
- var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI);
+ var mousetrap = {
- // right
- var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI);
- var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI);
+ /**
+ * binds an event to mousetrap
+ *
+ * can be a single key, a combination of keys separated with +,
+ * a comma separated list of keys, an array of keys, or
+ * a sequence of keys separated by spaces
+ *
+ * be sure to list the modifier keys first to make sure that the
+ * correct key ends up getting bound (the last key in the pattern)
+ *
+ * @param {string|Array} keys
+ * @param {Function} callback
+ * @param {string=} action - 'keypress', 'keydown', or 'keyup'
+ * @returns void
+ */
+ bind: function(keys, callback, action) {
+ _bindMultiple(keys instanceof Array ? keys : [keys], callback, action);
+ _direct_map[keys + ':' + action] = callback;
+ return this;
+ },
- this.beginPath();
- this.moveTo(x, y);
- this.lineTo(xl, yl);
- this.lineTo(xi, yi);
- this.lineTo(xr, yr);
- this.closePath();
- };
+ /**
+ * unbinds an event to mousetrap
+ *
+ * the unbinding sets the callback function of the specified key combo
+ * to an empty function and deletes the corresponding key in the
+ * _direct_map dict.
+ *
+ * the keycombo+action has to be exactly the same as
+ * it was defined in the bind method
+ *
+ * TODO: actually remove this from the _callbacks dictionary instead
+ * of binding an empty function
+ *
+ * @param {string|Array} keys
+ * @param {string} action
+ * @returns void
+ */
+ unbind: function(keys, action) {
+ if (_direct_map[keys + ':' + action]) {
+ delete _direct_map[keys + ':' + action];
+ this.bind(keys, function() {}, action);
+ }
+ return this;
+ },
- /**
- * Sets up the dashedLine functionality for drawing
- * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas
- * @author David Jordan
- * @date 2012-08-08
- */
- CanvasRenderingContext2D.prototype.dashedLine = function(x,y,x2,y2,dashArray){
- if (!dashArray) dashArray=[10,5];
- if (dashLength==0) dashLength = 0.001; // Hack for Safari
- var dashCount = dashArray.length;
- this.moveTo(x, y);
- var dx = (x2-x), dy = (y2-y);
- var slope = dy/dx;
- var distRemaining = Math.sqrt( dx*dx + dy*dy );
- var dashIndex=0, draw=true;
- while (distRemaining>=0.1){
- var dashLength = dashArray[dashIndex++%dashCount];
- if (dashLength > distRemaining) dashLength = distRemaining;
- var xStep = Math.sqrt( dashLength*dashLength / (1 + slope*slope) );
- if (dx<0) xStep = -xStep;
- x += xStep;
- y += slope*xStep;
- this[draw ? 'lineTo' : 'moveTo'](x,y);
- distRemaining -= dashLength;
- draw = !draw;
- }
+ /**
+ * triggers an event that has already been bound
+ *
+ * @param {string} keys
+ * @param {string=} action
+ * @returns void
+ */
+ trigger: function(keys, action) {
+ _direct_map[keys + ':' + action]();
+ return this;
+ },
+
+ /**
+ * resets the library back to its initial state. this is useful
+ * if you want to clear out the current keyboard shortcuts and bind
+ * new ones - for example if you switch to another page
+ *
+ * @returns void
+ */
+ reset: function() {
+ _callbacks = {};
+ _direct_map = {};
+ return this;
+ }
};
- // TODO: add diamond shape
- }
+ module.exports = mousetrap;
+
/***/ },
@@ -24421,7 +24420,7 @@ return /******/ (function(modules) { // webpackBootstrap
}
}).call(this);
- /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(57)(module)))
+ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(60)(module)))
/***/ },
/* 48 */
@@ -26594,4219 +26593,4219 @@ return /******/ (function(modules) { // webpackBootstrap
/* 49 */
/***/ function(module, exports, __webpack_require__) {
- var util = __webpack_require__(1);
- var RepulsionMixin = __webpack_require__(58);
- var HierarchialRepulsionMixin = __webpack_require__(59);
- var BarnesHutMixin = __webpack_require__(60);
-
/**
- * Toggling barnes Hut calculation on and off.
+ * Creation of the ClusterMixin var.
*
- * @private
+ * This contains all the functions the Network object can use to employ clustering
*/
- exports._toggleBarnesHut = function () {
- this.constants.physics.barnesHut.enabled = !this.constants.physics.barnesHut.enabled;
- this._loadSelectedForceSolver();
- this.moving = true;
- this.start();
- };
+ /**
+ * This is only called in the constructor of the network object
+ *
+ */
+ exports.startWithClustering = function() {
+ // cluster if the data set is big
+ this.clusterToFit(this.constants.clustering.initialMaxNodes, true);
+
+ // updates the lables after clustering
+ this.updateLabels();
+
+ // this is called here because if clusterin is disabled, the start and stabilize are called in
+ // the setData function.
+ if (this.stabilize) {
+ this._stabilize();
+ }
+ this.start();
+ };
/**
- * This loads the node force solver based on the barnes hut or repulsion algorithm
+ * This function clusters until the initialMaxNodes has been reached
*
- * @private
+ * @param {Number} maxNumberOfNodes
+ * @param {Boolean} reposition
*/
- exports._loadSelectedForceSolver = function () {
- // this overloads the this._calculateNodeForces
- if (this.constants.physics.barnesHut.enabled == true) {
- this._clearMixin(RepulsionMixin);
- this._clearMixin(HierarchialRepulsionMixin);
-
- this.constants.physics.centralGravity = this.constants.physics.barnesHut.centralGravity;
- this.constants.physics.springLength = this.constants.physics.barnesHut.springLength;
- this.constants.physics.springConstant = this.constants.physics.barnesHut.springConstant;
- this.constants.physics.damping = this.constants.physics.barnesHut.damping;
+ exports.clusterToFit = function(maxNumberOfNodes, reposition) {
+ var numberOfNodes = this.nodeIndices.length;
- this._loadMixin(BarnesHutMixin);
- }
- else if (this.constants.physics.hierarchicalRepulsion.enabled == true) {
- this._clearMixin(BarnesHutMixin);
- this._clearMixin(RepulsionMixin);
+ var maxLevels = 50;
+ var level = 0;
- this.constants.physics.centralGravity = this.constants.physics.hierarchicalRepulsion.centralGravity;
- this.constants.physics.springLength = this.constants.physics.hierarchicalRepulsion.springLength;
- this.constants.physics.springConstant = this.constants.physics.hierarchicalRepulsion.springConstant;
- this.constants.physics.damping = this.constants.physics.hierarchicalRepulsion.damping;
+ // we first cluster the hubs, then we pull in the outliers, repeat
+ while (numberOfNodes > maxNumberOfNodes && level < maxLevels) {
+ if (level % 3 == 0) {
+ this.forceAggregateHubs(true);
+ this.normalizeClusterLevels();
+ }
+ else {
+ this.increaseClusterLevel(); // this also includes a cluster normalization
+ }
- this._loadMixin(HierarchialRepulsionMixin);
+ numberOfNodes = this.nodeIndices.length;
+ level += 1;
}
- else {
- this._clearMixin(BarnesHutMixin);
- this._clearMixin(HierarchialRepulsionMixin);
- this.barnesHutTree = undefined;
-
- this.constants.physics.centralGravity = this.constants.physics.repulsion.centralGravity;
- this.constants.physics.springLength = this.constants.physics.repulsion.springLength;
- this.constants.physics.springConstant = this.constants.physics.repulsion.springConstant;
- this.constants.physics.damping = this.constants.physics.repulsion.damping;
- this._loadMixin(RepulsionMixin);
+ // after the clustering we reposition the nodes to reduce the initial chaos
+ if (level > 0 && reposition == true) {
+ this.repositionNodes();
}
+ this._updateCalculationNodes();
};
/**
- * Before calculating the forces, we check if we need to cluster to keep up performance and we check
- * if there is more than one node. If it is just one node, we dont calculate anything.
+ * This function can be called to open up a specific cluster. It is only called by
+ * It will unpack the cluster back one level.
*
- * @private
+ * @param node | Node object: cluster to open.
*/
- exports._initializeForceCalculation = function () {
- // stop calculation if there is only one node
- if (this.nodeIndices.length == 1) {
- this.nodes[this.nodeIndices[0]]._setForce(0, 0);
+ exports.openCluster = function(node) {
+ var isMovingBeforeClustering = this.moving;
+ if (node.clusterSize > this.constants.clustering.sectorThreshold && this._nodeInActiveArea(node) &&
+ !(this._sector() == "default" && this.nodeIndices.length == 1)) {
+ // this loads a new sector, loads the nodes and edges and nodeIndices of it.
+ this._addSector(node);
+ var level = 0;
+
+ // we decluster until we reach a decent number of nodes
+ while ((this.nodeIndices.length < this.constants.clustering.initialMaxNodes) && (level < 10)) {
+ this.decreaseClusterLevel();
+ level += 1;
+ }
+
}
else {
- // if there are too many nodes on screen, we cluster without repositioning
- if (this.nodeIndices.length > this.constants.clustering.clusterThreshold && this.constants.clustering.enabled == true) {
- this.clusterToFit(this.constants.clustering.reduceToNodes, false);
- }
+ this._expandClusterNode(node,false,true);
- // we now start the force calculation
- this._calculateForces();
+ // update the index list, dynamic edges and labels
+ this._updateNodeIndexList();
+ this._updateDynamicEdges();
+ this._updateCalculationNodes();
+ this.updateLabels();
+ }
+
+ // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded
+ if (this.moving != isMovingBeforeClustering) {
+ this.start();
}
};
/**
- * Calculate the external forces acting on the nodes
- * Forces are caused by: edges, repulsing forces between nodes, gravity
- * @private
+ * This calls the updateClustes with default arguments
*/
- exports._calculateForces = function () {
- // Gravity is required to keep separated groups from floating off
- // the forces are reset to zero in this loop by using _setForce instead
- // of _addForce
-
- this._calculateGravitationalForces();
- this._calculateNodeForces();
-
- if (this.constants.physics.springConstant > 0) {
- if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) {
- this._calculateSpringForcesWithSupport();
- }
- else {
- if (this.constants.physics.hierarchicalRepulsion.enabled == true) {
- this._calculateHierarchicalSpringForces();
- }
- else {
- this._calculateSpringForces();
- }
- }
+ exports.updateClustersDefault = function() {
+ if (this.constants.clustering.enabled == true) {
+ this.updateClusters(0,false,false);
}
};
/**
- * Smooth curves are created by adding invisible nodes in the center of the edges. These nodes are also
- * handled in the calculateForces function. We then use a quadratic curve with the center node as control.
- * This function joins the datanodes and invisible (called support) nodes into one object.
- * We do this so we do not contaminate this.nodes with the support nodes.
- *
- * @private
+ * This function can be called to increase the cluster level. This means that the nodes with only one edge connection will
+ * be clustered with their connected node. This can be repeated as many times as needed.
+ * This can be called externally (by a keybind for instance) to reduce the complexity of big datasets.
*/
- exports._updateCalculationNodes = function () {
- if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) {
- this.calculationNodes = {};
- this.calculationNodeIndices = [];
+ exports.increaseClusterLevel = function() {
+ this.updateClusters(-1,false,true);
+ };
- for (var nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- this.calculationNodes[nodeId] = this.nodes[nodeId];
- }
- }
- var supportNodes = this.sectors['support']['nodes'];
- for (var supportNodeId in supportNodes) {
- if (supportNodes.hasOwnProperty(supportNodeId)) {
- if (this.edges.hasOwnProperty(supportNodes[supportNodeId].parentEdgeId)) {
- this.calculationNodes[supportNodeId] = supportNodes[supportNodeId];
- }
- else {
- supportNodes[supportNodeId]._setForce(0, 0);
- }
- }
- }
- for (var idx in this.calculationNodes) {
- if (this.calculationNodes.hasOwnProperty(idx)) {
- this.calculationNodeIndices.push(idx);
- }
- }
- }
- else {
- this.calculationNodes = this.nodes;
- this.calculationNodeIndices = this.nodeIndices;
- }
+ /**
+ * This function can be called to decrease the cluster level. This means that the nodes with only one edge connection will
+ * be unpacked if they are a cluster. This can be repeated as many times as needed.
+ * This can be called externally (by a key-bind for instance) to look into clusters without zooming.
+ */
+ exports.decreaseClusterLevel = function() {
+ this.updateClusters(1,false,true);
};
/**
- * this function applies the central gravity effect to keep groups from floating off
+ * This is the main clustering function. It clusters and declusters on zoom or forced
+ * This function clusters on zoom, it can be called with a predefined zoom direction
+ * If out, check if we can form clusters, if in, check if we can open clusters.
+ * This function is only called from _zoom()
+ *
+ * @param {Number} zoomDirection | -1 / 0 / +1 for zoomOut / determineByZoom / zoomIn
+ * @param {Boolean} recursive | enabled or disable recursive calling of the opening of clusters
+ * @param {Boolean} force | enabled or disable forcing
+ * @param {Boolean} doNotStart | if true do not call start
*
- * @private
*/
- exports._calculateGravitationalForces = function () {
- var dx, dy, distance, node, i;
- var nodes = this.calculationNodes;
- var gravity = this.constants.physics.centralGravity;
- var gravityForce = 0;
+ exports.updateClusters = function(zoomDirection,recursive,force,doNotStart) {
+ var isMovingBeforeClustering = this.moving;
+ var amountOfNodes = this.nodeIndices.length;
- for (i = 0; i < this.calculationNodeIndices.length; i++) {
- node = nodes[this.calculationNodeIndices[i]];
- node.damping = this.constants.physics.damping; // possibly add function to alter damping properties of clusters.
- // gravity does not apply when we are in a pocket sector
- if (this._sector() == "default" && gravity != 0) {
- dx = -node.x;
- dy = -node.y;
- distance = Math.sqrt(dx * dx + dy * dy);
+ // on zoom out collapse the sector if the scale is at the level the sector was made
+ if (this.previousScale > this.scale && zoomDirection == 0) {
+ this._collapseSector();
+ }
- gravityForce = (distance == 0) ? 0 : (gravity / distance);
- node.fx = dx * gravityForce;
- node.fy = dy * gravityForce;
+ // check if we zoom in or out
+ if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out
+ // forming clusters when forced pulls outliers in. When not forced, the edge length of the
+ // outer nodes determines if it is being clustered
+ this._formClusters(force);
+ }
+ else if (this.previousScale < this.scale || zoomDirection == 1) { // zoom in
+ if (force == true) {
+ // _openClusters checks for each node if the formationScale of the cluster is smaller than
+ // the current scale and if so, declusters. When forced, all clusters are reduced by one step
+ this._openClusters(recursive,force);
}
else {
- node.fx = 0;
- node.fy = 0;
+ // if a cluster takes up a set percentage of the active window
+ this._openClustersBySize();
}
}
- };
-
-
-
-
- /**
- * this function calculates the effects of the springs in the case of unsmooth curves.
- *
- * @private
- */
- exports._calculateSpringForces = function () {
- var edgeLength, edge, edgeId;
- var dx, dy, fx, fy, springForce, distance;
- var edges = this.edges;
+ this._updateNodeIndexList();
- // forces caused by the edges, modelled as springs
- for (edgeId in edges) {
- if (edges.hasOwnProperty(edgeId)) {
- edge = edges[edgeId];
- if (edge.connected) {
- // only calculate forces if nodes are in the same sector
- if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) {
- edgeLength = edge.customLength ? edge.length : this.constants.physics.springLength;
- // this implies that the edges between big clusters are longer
- edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth;
+ // if a cluster was NOT formed and the user zoomed out, we try clustering by hubs
+ if (this.nodeIndices.length == amountOfNodes && (this.previousScale > this.scale || zoomDirection == -1)) {
+ this._aggregateHubs(force);
+ this._updateNodeIndexList();
+ }
- dx = (edge.from.x - edge.to.x);
- dy = (edge.from.y - edge.to.y);
- distance = Math.sqrt(dx * dx + dy * dy);
+ // we now reduce chains.
+ if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out
+ this.handleChains();
+ this._updateNodeIndexList();
+ }
- if (distance == 0) {
- distance = 0.01;
- }
+ this.previousScale = this.scale;
- // the 1/distance is so the fx and fy can be calculated without sine or cosine.
- springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance;
+ // rest of the update the index list, dynamic edges and labels
+ this._updateDynamicEdges();
+ this.updateLabels();
- fx = dx * springForce;
- fy = dy * springForce;
+ // if a cluster was formed, we increase the clusterSession
+ if (this.nodeIndices.length < amountOfNodes) { // this means a clustering operation has taken place
+ this.clusterSession += 1;
+ // if clusters have been made, we normalize the cluster level
+ this.normalizeClusterLevels();
+ }
- edge.from.fx += fx;
- edge.from.fy += fy;
- edge.to.fx -= fx;
- edge.to.fy -= fy;
- }
- }
+ if (doNotStart == false || doNotStart === undefined) {
+ // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded
+ if (this.moving != isMovingBeforeClustering) {
+ this.start();
}
}
- };
-
-
+ this._updateCalculationNodes();
+ };
/**
- * This function calculates the springforces on the nodes, accounting for the support nodes.
- *
- * @private
+ * This function handles the chains. It is called on every updateClusters().
*/
- exports._calculateSpringForcesWithSupport = function () {
- var edgeLength, edge, edgeId, combinedClusterSize;
- var edges = this.edges;
-
- // forces caused by the edges, modelled as springs
- for (edgeId in edges) {
- if (edges.hasOwnProperty(edgeId)) {
- edge = edges[edgeId];
- if (edge.connected) {
- // only calculate forces if nodes are in the same sector
- if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) {
- if (edge.via != null) {
- var node1 = edge.to;
- var node2 = edge.via;
- var node3 = edge.from;
-
- edgeLength = edge.customLength ? edge.length : this.constants.physics.springLength;
-
- combinedClusterSize = node1.clusterSize + node3.clusterSize - 2;
+ exports.handleChains = function() {
+ // after clustering we check how many chains there are
+ var chainPercentage = this._getChainFraction();
+ if (chainPercentage > this.constants.clustering.chainThreshold) {
+ this._reduceAmountOfChains(1 - this.constants.clustering.chainThreshold / chainPercentage)
- // this implies that the edges between big clusters are longer
- edgeLength += combinedClusterSize * this.constants.clustering.edgeGrowth;
- this._calculateSpringForce(node1, node2, 0.5 * edgeLength);
- this._calculateSpringForce(node2, node3, 0.5 * edgeLength);
- }
- }
- }
- }
}
};
-
/**
- * This is the code actually performing the calculation for the function above. It is split out to avoid repetition.
+ * this functions starts clustering by hubs
+ * The minimum hub threshold is set globally
*
- * @param node1
- * @param node2
- * @param edgeLength
* @private
*/
- exports._calculateSpringForce = function (node1, node2, edgeLength) {
- var dx, dy, fx, fy, springForce, distance;
-
- dx = (node1.x - node2.x);
- dy = (node1.y - node2.y);
- distance = Math.sqrt(dx * dx + dy * dy);
-
- if (distance == 0) {
- distance = 0.01;
- }
-
- // the 1/distance is so the fx and fy can be calculated without sine or cosine.
- springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance;
-
- fx = dx * springForce;
- fy = dy * springForce;
-
- node1.fx += fx;
- node1.fy += fy;
- node2.fx -= fx;
- node2.fy -= fy;
+ exports._aggregateHubs = function(force) {
+ this._getHubSize();
+ this._formClustersByHub(force,false);
};
/**
- * Load the HTML for the physics config and bind it
- * @private
+ * This function is fired by keypress. It forces hubs to form.
+ *
*/
- exports._loadPhysicsConfiguration = function () {
- if (this.physicsConfiguration === undefined) {
- this.backupConstants = {};
- util.deepExtend(this.backupConstants,this.constants);
-
- var hierarchicalLayoutDirections = ["LR", "RL", "UD", "DU"];
- this.physicsConfiguration = document.createElement('div');
- this.physicsConfiguration.className = "PhysicsConfiguration";
- this.physicsConfiguration.innerHTML = '' +
- '
Simulation Mode:
' +
- '
' +
- '
Barnes Hut
' +
- '
Repulsion
' +
- '
Hierarchical
' +
- '
' +
- '
' +
- '
' +
- '
Barnes Hut
' +
- '
' +
- '
gravitationalConstant
0
-20000
' +
- '
' +
- '
' +
- '
centralGravity
0
3
' +
- '
' +
- '
' +
- '
springLength
0
500
' +
- '
' +
- '
' +
- '
springConstant
0
0.5
' +
- '
' +
- '
' +
- '
damping
0
0.3
' +
- '
' +
- '
' +
- '
' +
- '
Repulsion
' +
- '
' +
- '
nodeDistance
0
300
' +
- '
' +
- '
' +
- '
centralGravity
0
3
' +
- '
' +
- '
' +
- '
springLength
0
500
' +
- '
' +
- '
' +
- '
springConstant
0
0.5
' +
- '
' +
- '
' +
- '
damping
0
0.3
' +
- '
' +
- '
' +
- '
' +
- '
Hierarchical
' +
- '
' +
- '
nodeDistance
0
300
' +
- '
' +
- '
' +
- '
centralGravity
0
3
' +
- '
' +
- '
' +
- '
springLength
0
500
' +
- '
' +
- '
' +
- '
springConstant
0
0.5
' +
- '
' +
- '
' +
- '
damping
0
0.3
' +
- '
' +
- '
' +
- '
direction
1
4
' +
- '
' +
- '
' +
- '
levelSeparation
1
500
' +
- '
' +
- '
' +
- '
nodeSpacing
1
500
' +
- '
' +
- '
' +
- '
Options:
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
'
- this.containerElement.parentElement.insertBefore(this.physicsConfiguration, this.containerElement);
- this.optionsDiv = document.createElement("div");
- this.optionsDiv.style.fontSize = "14px";
- this.optionsDiv.style.fontFamily = "verdana";
- this.containerElement.parentElement.insertBefore(this.optionsDiv, this.containerElement);
-
- var rangeElement;
- rangeElement = document.getElementById('graph_BH_gc');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_gc', -1, "physics_barnesHut_gravitationalConstant");
- rangeElement = document.getElementById('graph_BH_cg');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_cg', 1, "physics_centralGravity");
- rangeElement = document.getElementById('graph_BH_sc');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sc', 1, "physics_springConstant");
- rangeElement = document.getElementById('graph_BH_sl');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sl', 1, "physics_springLength");
- rangeElement = document.getElementById('graph_BH_damp');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_damp', 1, "physics_damping");
-
- rangeElement = document.getElementById('graph_R_nd');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_nd', 1, "physics_repulsion_nodeDistance");
- rangeElement = document.getElementById('graph_R_cg');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_cg', 1, "physics_centralGravity");
- rangeElement = document.getElementById('graph_R_sc');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sc', 1, "physics_springConstant");
- rangeElement = document.getElementById('graph_R_sl');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sl', 1, "physics_springLength");
- rangeElement = document.getElementById('graph_R_damp');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_damp', 1, "physics_damping");
+ exports.forceAggregateHubs = function(doNotStart) {
+ var isMovingBeforeClustering = this.moving;
+ var amountOfNodes = this.nodeIndices.length;
- rangeElement = document.getElementById('graph_H_nd');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance");
- rangeElement = document.getElementById('graph_H_cg');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_cg', 1, "physics_centralGravity");
- rangeElement = document.getElementById('graph_H_sc');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sc', 1, "physics_springConstant");
- rangeElement = document.getElementById('graph_H_sl');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sl', 1, "physics_springLength");
- rangeElement = document.getElementById('graph_H_damp');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_damp', 1, "physics_damping");
- rangeElement = document.getElementById('graph_H_direction');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_direction', hierarchicalLayoutDirections, "hierarchicalLayout_direction");
- rangeElement = document.getElementById('graph_H_levsep');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_levsep', 1, "hierarchicalLayout_levelSeparation");
- rangeElement = document.getElementById('graph_H_nspac');
- rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nspac', 1, "hierarchicalLayout_nodeSpacing");
+ this._aggregateHubs(true);
- var radioButton1 = document.getElementById("graph_physicsMethod1");
- var radioButton2 = document.getElementById("graph_physicsMethod2");
- var radioButton3 = document.getElementById("graph_physicsMethod3");
- radioButton2.checked = true;
- if (this.constants.physics.barnesHut.enabled) {
- radioButton1.checked = true;
- }
- if (this.constants.hierarchicalLayout.enabled) {
- radioButton3.checked = true;
- }
+ // update the index list, dynamic edges and labels
+ this._updateNodeIndexList();
+ this._updateDynamicEdges();
+ this.updateLabels();
- var graph_toggleSmooth = document.getElementById("graph_toggleSmooth");
- var graph_repositionNodes = document.getElementById("graph_repositionNodes");
- var graph_generateOptions = document.getElementById("graph_generateOptions");
+ // if a cluster was formed, we increase the clusterSession
+ if (this.nodeIndices.length != amountOfNodes) {
+ this.clusterSession += 1;
+ }
- graph_toggleSmooth.onclick = graphToggleSmoothCurves.bind(this);
- graph_repositionNodes.onclick = graphRepositionNodes.bind(this);
- graph_generateOptions.onclick = graphGenerateOptions.bind(this);
- if (this.constants.smoothCurves == true && this.constants.dynamicSmoothCurves == false) {
- graph_toggleSmooth.style.background = "#A4FF56";
- }
- else {
- graph_toggleSmooth.style.background = "#FF8532";
+ if (doNotStart == false || doNotStart === undefined) {
+ // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded
+ if (this.moving != isMovingBeforeClustering) {
+ this.start();
}
-
-
- switchConfigurations.apply(this);
-
- radioButton1.onchange = switchConfigurations.bind(this);
- radioButton2.onchange = switchConfigurations.bind(this);
- radioButton3.onchange = switchConfigurations.bind(this);
}
};
/**
- * This overwrites the this.constants.
+ * If a cluster takes up more than a set percentage of the screen, open the cluster
*
- * @param constantsVariableName
- * @param value
* @private
*/
- exports._overWriteGraphConstants = function (constantsVariableName, value) {
- var nameArray = constantsVariableName.split("_");
- if (nameArray.length == 1) {
- this.constants[nameArray[0]] = value;
- }
- else if (nameArray.length == 2) {
- this.constants[nameArray[0]][nameArray[1]] = value;
- }
- else if (nameArray.length == 3) {
- this.constants[nameArray[0]][nameArray[1]][nameArray[2]] = value;
+ exports._openClustersBySize = function() {
+ for (var nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ var node = this.nodes[nodeId];
+ if (node.inView() == true) {
+ if ((node.width*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) ||
+ (node.height*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) {
+ this.openCluster(node);
+ }
+ }
+ }
}
};
/**
- * this function is bound to the toggle smooth curves button. That is also why it is not in the prototype.
- */
- function graphToggleSmoothCurves () {
- this.constants.smoothCurves.enabled = !this.constants.smoothCurves.enabled;
- var graph_toggleSmooth = document.getElementById("graph_toggleSmooth");
- if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";}
- else {graph_toggleSmooth.style.background = "#FF8532";}
-
- this._configureSmoothCurves(false);
- }
-
- /**
- * this function is used to scramble the nodes
+ * This function loops over all nodes in the nodeIndices list. For each node it checks if it is a cluster and if it
+ * has to be opened based on the current zoom level.
*
+ * @private
*/
- function graphRepositionNodes () {
- for (var nodeId in this.calculationNodes) {
- if (this.calculationNodes.hasOwnProperty(nodeId)) {
- this.calculationNodes[nodeId].vx = 0; this.calculationNodes[nodeId].vy = 0;
- this.calculationNodes[nodeId].fx = 0; this.calculationNodes[nodeId].fy = 0;
- }
- }
- if (this.constants.hierarchicalLayout.enabled == true) {
- this._setupHierarchicalLayout();
- showValueOfRange.call(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance");
- showValueOfRange.call(this, 'graph_H_cg', 1, "physics_centralGravity");
- showValueOfRange.call(this, 'graph_H_sc', 1, "physics_springConstant");
- showValueOfRange.call(this, 'graph_H_sl', 1, "physics_springLength");
- showValueOfRange.call(this, 'graph_H_damp', 1, "physics_damping");
- }
- else {
- this.repositionNodes();
+ exports._openClusters = function(recursive,force) {
+ for (var i = 0; i < this.nodeIndices.length; i++) {
+ var node = this.nodes[this.nodeIndices[i]];
+ this._expandClusterNode(node,recursive,force);
+ this._updateCalculationNodes();
}
- this.moving = true;
- this.start();
- }
+ };
/**
- * this is used to generate an options file from the playing with physics system.
+ * This function checks if a node has to be opened. This is done by checking the zoom level.
+ * If the node contains child nodes, this function is recursively called on the child nodes as well.
+ * This recursive behaviour is optional and can be set by the recursive argument.
+ *
+ * @param {Node} parentNode | to check for cluster and expand
+ * @param {Boolean} recursive | enabled or disable recursive calling
+ * @param {Boolean} force | enabled or disable forcing
+ * @param {Boolean} [openAll] | This will recursively force all nodes in the parent to be released
+ * @private
*/
- function graphGenerateOptions () {
- var options = "No options are required, default values used.";
- var optionsSpecific = [];
- var radioButton1 = document.getElementById("graph_physicsMethod1");
- var radioButton2 = document.getElementById("graph_physicsMethod2");
- if (radioButton1.checked == true) {
- if (this.constants.physics.barnesHut.gravitationalConstant != this.backupConstants.physics.barnesHut.gravitationalConstant) {optionsSpecific.push("gravitationalConstant: " + this.constants.physics.barnesHut.gravitationalConstant);}
- if (this.constants.physics.centralGravity != this.backupConstants.physics.barnesHut.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);}
- if (this.constants.physics.springLength != this.backupConstants.physics.barnesHut.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);}
- if (this.constants.physics.springConstant != this.backupConstants.physics.barnesHut.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);}
- if (this.constants.physics.damping != this.backupConstants.physics.barnesHut.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);}
- if (optionsSpecific.length != 0) {
- options = "var options = {";
- options += "physics: {barnesHut: {";
- for (var i = 0; i < optionsSpecific.length; i++) {
- options += optionsSpecific[i];
- if (i < optionsSpecific.length - 1) {
- options += ", "
- }
- }
- options += '}}'
- }
- if (this.constants.smoothCurves.enabled != this.backupConstants.smoothCurves.enabled) {
- if (optionsSpecific.length == 0) {options = "var options = {";}
- else {options += ", "}
- options += "smoothCurves: " + this.constants.smoothCurves.enabled;
- }
- if (options != "No options are required, default values used.") {
- options += '};'
+ exports._expandClusterNode = function(parentNode, recursive, force, openAll) {
+ // first check if node is a cluster
+ if (parentNode.clusterSize > 1) {
+ // this means that on a double tap event or a zoom event, the cluster fully unpacks if it is smaller than 20
+ if (parentNode.clusterSize < this.constants.clustering.sectorThreshold) {
+ openAll = true;
}
- }
- else if (radioButton2.checked == true) {
- options = "var options = {";
- options += "physics: {barnesHut: {enabled: false}";
- if (this.constants.physics.repulsion.nodeDistance != this.backupConstants.physics.repulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.repulsion.nodeDistance);}
- if (this.constants.physics.centralGravity != this.backupConstants.physics.repulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);}
- if (this.constants.physics.springLength != this.backupConstants.physics.repulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);}
- if (this.constants.physics.springConstant != this.backupConstants.physics.repulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);}
- if (this.constants.physics.damping != this.backupConstants.physics.repulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);}
- if (optionsSpecific.length != 0) {
- options += ", repulsion: {";
- for (var i = 0; i < optionsSpecific.length; i++) {
- options += optionsSpecific[i];
- if (i < optionsSpecific.length - 1) {
- options += ", "
+ recursive = openAll ? true : recursive;
+
+ // if the last child has been added on a smaller scale than current scale decluster
+ if (parentNode.formationScale < this.scale || force == true) {
+ // we will check if any of the contained child nodes should be removed from the cluster
+ for (var containedNodeId in parentNode.containedNodes) {
+ if (parentNode.containedNodes.hasOwnProperty(containedNodeId)) {
+ var childNode = parentNode.containedNodes[containedNodeId];
+
+ // force expand will expand the largest cluster size clusters. Since we cluster from outside in, we assume that
+ // the largest cluster is the one that comes from outside
+ if (force == true) {
+ if (childNode.clusterSession == parentNode.clusterSessions[parentNode.clusterSessions.length-1]
+ || openAll) {
+ this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll);
+ }
+ }
+ else {
+ if (this._nodeInActiveArea(parentNode)) {
+ this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll);
+ }
+ }
}
}
- options += '}}'
- }
- if (optionsSpecific.length == 0) {options += "}"}
- if (this.constants.smoothCurves != this.backupConstants.smoothCurves) {
- options += ", smoothCurves: " + this.constants.smoothCurves;
}
- options += '};'
}
- else {
- options = "var options = {";
- if (this.constants.physics.hierarchicalRepulsion.nodeDistance != this.backupConstants.physics.hierarchicalRepulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.hierarchicalRepulsion.nodeDistance);}
- if (this.constants.physics.centralGravity != this.backupConstants.physics.hierarchicalRepulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);}
- if (this.constants.physics.springLength != this.backupConstants.physics.hierarchicalRepulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);}
- if (this.constants.physics.springConstant != this.backupConstants.physics.hierarchicalRepulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);}
- if (this.constants.physics.damping != this.backupConstants.physics.hierarchicalRepulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);}
- if (optionsSpecific.length != 0) {
- options += "physics: {hierarchicalRepulsion: {";
- for (var i = 0; i < optionsSpecific.length; i++) {
- options += optionsSpecific[i];
- if (i < optionsSpecific.length - 1) {
- options += ", ";
- }
- }
- options += '}},';
- }
- options += 'hierarchicalLayout: {';
- optionsSpecific = [];
- if (this.constants.hierarchicalLayout.direction != this.backupConstants.hierarchicalLayout.direction) {optionsSpecific.push("direction: " + this.constants.hierarchicalLayout.direction);}
- if (Math.abs(this.constants.hierarchicalLayout.levelSeparation) != this.backupConstants.hierarchicalLayout.levelSeparation) {optionsSpecific.push("levelSeparation: " + this.constants.hierarchicalLayout.levelSeparation);}
- if (this.constants.hierarchicalLayout.nodeSpacing != this.backupConstants.hierarchicalLayout.nodeSpacing) {optionsSpecific.push("nodeSpacing: " + this.constants.hierarchicalLayout.nodeSpacing);}
- if (optionsSpecific.length != 0) {
- for (var i = 0; i < optionsSpecific.length; i++) {
- options += optionsSpecific[i];
- if (i < optionsSpecific.length - 1) {
- options += ", "
+ };
+
+ /**
+ * ONLY CALLED FROM _expandClusterNode
+ *
+ * This function will expel a child_node from a parent_node. This is to de-cluster the node. This function will remove
+ * the child node from the parent contained_node object and put it back into the global nodes object.
+ * The same holds for the edge that was connected to the child node. It is moved back into the global edges object.
+ *
+ * @param {Node} parentNode | the parent node
+ * @param {String} containedNodeId | child_node id as it is contained in the containedNodes object of the parent node
+ * @param {Boolean} recursive | This will also check if the child needs to be expanded.
+ * With force and recursive both true, the entire cluster is unpacked
+ * @param {Boolean} force | This will disregard the zoom level and will expel this child from the parent
+ * @param {Boolean} openAll | This will recursively force all nodes in the parent to be released
+ * @private
+ */
+ exports._expelChildFromParent = function(parentNode, containedNodeId, recursive, force, openAll) {
+ var childNode = parentNode.containedNodes[containedNodeId];
+
+ // if child node has been added on smaller scale than current, kick out
+ if (childNode.formationScale < this.scale || force == true) {
+ // unselect all selected items
+ this._unselectAll();
+
+ // put the child node back in the global nodes object
+ this.nodes[containedNodeId] = childNode;
+
+ // release the contained edges from this childNode back into the global edges
+ this._releaseContainedEdges(parentNode,childNode);
+
+ // reconnect rerouted edges to the childNode
+ this._connectEdgeBackToChild(parentNode,childNode);
+
+ // validate all edges in dynamicEdges
+ this._validateEdges(parentNode);
+
+ // undo the changes from the clustering operation on the parent node
+ parentNode.mass -= childNode.mass;
+ parentNode.clusterSize -= childNode.clusterSize;
+ parentNode.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize);
+ parentNode.dynamicEdgesLength = parentNode.dynamicEdges.length;
+
+ // place the child node near the parent, not at the exact same location to avoid chaos in the system
+ childNode.x = parentNode.x + parentNode.growthIndicator * (0.5 - Math.random());
+ childNode.y = parentNode.y + parentNode.growthIndicator * (0.5 - Math.random());
+
+ // remove node from the list
+ delete parentNode.containedNodes[containedNodeId];
+
+ // check if there are other childs with this clusterSession in the parent.
+ var othersPresent = false;
+ for (var childNodeId in parentNode.containedNodes) {
+ if (parentNode.containedNodes.hasOwnProperty(childNodeId)) {
+ if (parentNode.containedNodes[childNodeId].clusterSession == childNode.clusterSession) {
+ othersPresent = true;
+ break;
}
}
- options += '}'
}
- else {
- options += "enabled:true}";
+ // if there are no others, remove the cluster session from the list
+ if (othersPresent == false) {
+ parentNode.clusterSessions.pop();
}
- options += '};'
+
+ this._repositionBezierNodes(childNode);
+ // this._repositionBezierNodes(parentNode);
+
+ // remove the clusterSession from the child node
+ childNode.clusterSession = 0;
+
+ // recalculate the size of the node on the next time the node is rendered
+ parentNode.clearSizeCache();
+
+ // restart the simulation to reorganise all nodes
+ this.moving = true;
}
+ // check if a further expansion step is possible if recursivity is enabled
+ if (recursive == true) {
+ this._expandClusterNode(childNode,recursive,force,openAll);
+ }
+ };
- this.optionsDiv.innerHTML = options;
- }
/**
- * this is used to switch between barnesHut, repulsion and hierarchical.
+ * position the bezier nodes at the center of the edges
*
+ * @param node
+ * @private
*/
- function switchConfigurations () {
- var ids = ["graph_BH_table", "graph_R_table", "graph_H_table"];
- var radioButton = document.querySelector('input[name="graph_physicsMethod"]:checked').value;
- var tableId = "graph_" + radioButton + "_table";
- var table = document.getElementById(tableId);
- table.style.display = "block";
- for (var i = 0; i < ids.length; i++) {
- if (ids[i] != tableId) {
- table = document.getElementById(ids[i]);
- table.style.display = "none";
- }
- }
- this._restoreNodes();
- if (radioButton == "R") {
- this.constants.hierarchicalLayout.enabled = false;
- this.constants.physics.hierarchicalRepulsion.enabled = false;
- this.constants.physics.barnesHut.enabled = false;
- }
- else if (radioButton == "H") {
- if (this.constants.hierarchicalLayout.enabled == false) {
- this.constants.hierarchicalLayout.enabled = true;
- this.constants.physics.hierarchicalRepulsion.enabled = true;
- this.constants.physics.barnesHut.enabled = false;
- this.constants.smoothCurves.enabled = false;
- this._setupHierarchicalLayout();
- }
- }
- else {
- this.constants.hierarchicalLayout.enabled = false;
- this.constants.physics.hierarchicalRepulsion.enabled = false;
- this.constants.physics.barnesHut.enabled = true;
+ exports._repositionBezierNodes = function(node) {
+ for (var i = 0; i < node.dynamicEdges.length; i++) {
+ node.dynamicEdges[i].positionBezierNode();
}
- this._loadSelectedForceSolver();
- var graph_toggleSmooth = document.getElementById("graph_toggleSmooth");
- if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";}
- else {graph_toggleSmooth.style.background = "#FF8532";}
- this.moving = true;
- this.start();
- }
+ };
/**
- * this generates the ranges depending on the iniital values.
+ * This function checks if any nodes at the end of their trees have edges below a threshold length
+ * This function is called only from updateClusters()
+ * forceLevelCollapse ignores the length of the edge and collapses one level
+ * This means that a node with only one edge will be clustered with its connected node
*
- * @param id
- * @param map
- * @param constantsVariableName
+ * @private
+ * @param {Boolean} force
*/
- function showValueOfRange (id,map,constantsVariableName) {
- var valueId = id + "_value";
- var rangeValue = document.getElementById(id).value;
-
- if (map instanceof Array) {
- document.getElementById(valueId).value = map[parseInt(rangeValue)];
- this._overWriteGraphConstants(constantsVariableName,map[parseInt(rangeValue)]);
+ exports._formClusters = function(force) {
+ if (force == false) {
+ this._formClustersByZoom();
}
else {
- document.getElementById(valueId).value = parseInt(map) * parseFloat(rangeValue);
- this._overWriteGraphConstants(constantsVariableName, parseInt(map) * parseFloat(rangeValue));
- }
-
- if (constantsVariableName == "hierarchicalLayout_direction" ||
- constantsVariableName == "hierarchicalLayout_levelSeparation" ||
- constantsVariableName == "hierarchicalLayout_nodeSpacing") {
- this._setupHierarchicalLayout();
+ this._forceClustersByZoom();
}
- this.moving = true;
- this.start();
- }
-
+ };
-/***/ },
-/* 50 */
-/***/ function(module, exports, __webpack_require__) {
/**
- * Creation of the ClusterMixin var.
+ * This function handles the clustering by zooming out, this is based on a minimum edge distance
*
- * This contains all the functions the Network object can use to employ clustering
+ * @private
*/
+ exports._formClustersByZoom = function() {
+ var dx,dy,length,
+ minLength = this.constants.clustering.clusterEdgeThreshold/this.scale;
- /**
- * This is only called in the constructor of the network object
- *
- */
- exports.startWithClustering = function() {
- // cluster if the data set is big
- this.clusterToFit(this.constants.clustering.initialMaxNodes, true);
+ // check if any edges are shorter than minLength and start the clustering
+ // the clustering favours the node with the larger mass
+ for (var edgeId in this.edges) {
+ if (this.edges.hasOwnProperty(edgeId)) {
+ var edge = this.edges[edgeId];
+ if (edge.connected) {
+ if (edge.toId != edge.fromId) {
+ dx = (edge.to.x - edge.from.x);
+ dy = (edge.to.y - edge.from.y);
+ length = Math.sqrt(dx * dx + dy * dy);
- // updates the lables after clustering
- this.updateLabels();
- // this is called here because if clusterin is disabled, the start and stabilize are called in
- // the setData function.
- if (this.stabilize) {
- this._stabilize();
- }
- this.start();
+ if (length < minLength) {
+ // first check which node is larger
+ var parentNode = edge.from;
+ var childNode = edge.to;
+ if (edge.to.mass > edge.from.mass) {
+ parentNode = edge.to;
+ childNode = edge.from;
+ }
+
+ if (childNode.dynamicEdgesLength == 1) {
+ this._addToCluster(parentNode,childNode,false);
+ }
+ else if (parentNode.dynamicEdgesLength == 1) {
+ this._addToCluster(childNode,parentNode,false);
+ }
+ }
+ }
+ }
+ }
+ }
};
/**
- * This function clusters until the initialMaxNodes has been reached
+ * This function forces the network to cluster all nodes with only one connecting edge to their
+ * connected node.
*
- * @param {Number} maxNumberOfNodes
- * @param {Boolean} reposition
+ * @private
*/
- exports.clusterToFit = function(maxNumberOfNodes, reposition) {
- var numberOfNodes = this.nodeIndices.length;
+ exports._forceClustersByZoom = function() {
+ for (var nodeId in this.nodes) {
+ // another node could have absorbed this child.
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ var childNode = this.nodes[nodeId];
- var maxLevels = 50;
- var level = 0;
+ // the edges can be swallowed by another decrease
+ if (childNode.dynamicEdgesLength == 1 && childNode.dynamicEdges.length != 0) {
+ var edge = childNode.dynamicEdges[0];
+ var parentNode = (edge.toId == childNode.id) ? this.nodes[edge.fromId] : this.nodes[edge.toId];
- // we first cluster the hubs, then we pull in the outliers, repeat
- while (numberOfNodes > maxNumberOfNodes && level < maxLevels) {
- if (level % 3 == 0) {
- this.forceAggregateHubs(true);
- this.normalizeClusterLevels();
- }
- else {
- this.increaseClusterLevel(); // this also includes a cluster normalization
+ // group to the largest node
+ if (childNode.id != parentNode.id) {
+ if (parentNode.mass > childNode.mass) {
+ this._addToCluster(parentNode,childNode,true);
+ }
+ else {
+ this._addToCluster(childNode,parentNode,true);
+ }
+ }
+ }
}
-
- numberOfNodes = this.nodeIndices.length;
- level += 1;
- }
-
- // after the clustering we reposition the nodes to reduce the initial chaos
- if (level > 0 && reposition == true) {
- this.repositionNodes();
}
- this._updateCalculationNodes();
};
+
/**
- * This function can be called to open up a specific cluster. It is only called by
- * It will unpack the cluster back one level.
+ * To keep the nodes of roughly equal size we normalize the cluster levels.
+ * This function clusters a node to its smallest connected neighbour.
*
- * @param node | Node object: cluster to open.
+ * @param node
+ * @private
*/
- exports.openCluster = function(node) {
- var isMovingBeforeClustering = this.moving;
- if (node.clusterSize > this.constants.clustering.sectorThreshold && this._nodeInActiveArea(node) &&
- !(this._sector() == "default" && this.nodeIndices.length == 1)) {
- // this loads a new sector, loads the nodes and edges and nodeIndices of it.
- this._addSector(node);
- var level = 0;
-
- // we decluster until we reach a decent number of nodes
- while ((this.nodeIndices.length < this.constants.clustering.initialMaxNodes) && (level < 10)) {
- this.decreaseClusterLevel();
- level += 1;
- }
-
- }
- else {
- this._expandClusterNode(node,false,true);
+ exports._clusterToSmallestNeighbour = function(node) {
+ var smallestNeighbour = -1;
+ var smallestNeighbourNode = null;
+ for (var i = 0; i < node.dynamicEdges.length; i++) {
+ if (node.dynamicEdges[i] !== undefined) {
+ var neighbour = null;
+ if (node.dynamicEdges[i].fromId != node.id) {
+ neighbour = node.dynamicEdges[i].from;
+ }
+ else if (node.dynamicEdges[i].toId != node.id) {
+ neighbour = node.dynamicEdges[i].to;
+ }
- // update the index list, dynamic edges and labels
- this._updateNodeIndexList();
- this._updateDynamicEdges();
- this._updateCalculationNodes();
- this.updateLabels();
- }
- // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded
- if (this.moving != isMovingBeforeClustering) {
- this.start();
+ if (neighbour != null && smallestNeighbour > neighbour.clusterSessions.length) {
+ smallestNeighbour = neighbour.clusterSessions.length;
+ smallestNeighbourNode = neighbour;
+ }
+ }
}
- };
-
- /**
- * This calls the updateClustes with default arguments
- */
- exports.updateClustersDefault = function() {
- if (this.constants.clustering.enabled == true) {
- this.updateClusters(0,false,false);
+ if (neighbour != null && this.nodes[neighbour.id] !== undefined) {
+ this._addToCluster(neighbour, node, true);
}
};
/**
- * This function can be called to increase the cluster level. This means that the nodes with only one edge connection will
- * be clustered with their connected node. This can be repeated as many times as needed.
- * This can be called externally (by a keybind for instance) to reduce the complexity of big datasets.
+ * This function forms clusters from hubs, it loops over all nodes
+ *
+ * @param {Boolean} force | Disregard zoom level
+ * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges
+ * @private
*/
- exports.increaseClusterLevel = function() {
- this.updateClusters(-1,false,true);
+ exports._formClustersByHub = function(force, onlyEqual) {
+ // we loop over all nodes in the list
+ for (var nodeId in this.nodes) {
+ // we check if it is still available since it can be used by the clustering in this loop
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ this._formClusterFromHub(this.nodes[nodeId],force,onlyEqual);
+ }
+ }
};
-
/**
- * This function can be called to decrease the cluster level. This means that the nodes with only one edge connection will
- * be unpacked if they are a cluster. This can be repeated as many times as needed.
- * This can be called externally (by a key-bind for instance) to look into clusters without zooming.
+ * This function forms a cluster from a specific preselected hub node
+ *
+ * @param {Node} hubNode | the node we will cluster as a hub
+ * @param {Boolean} force | Disregard zoom level
+ * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges
+ * @param {Number} [absorptionSizeOffset] |
+ * @private
*/
- exports.decreaseClusterLevel = function() {
- this.updateClusters(1,false,true);
+ exports._formClusterFromHub = function(hubNode, force, onlyEqual, absorptionSizeOffset) {
+ if (absorptionSizeOffset === undefined) {
+ absorptionSizeOffset = 0;
+ }
+ // we decide if the node is a hub
+ if ((hubNode.dynamicEdgesLength >= this.hubThreshold && onlyEqual == false) ||
+ (hubNode.dynamicEdgesLength == this.hubThreshold && onlyEqual == true)) {
+ // initialize variables
+ var dx,dy,length;
+ var minLength = this.constants.clustering.clusterEdgeThreshold/this.scale;
+ var allowCluster = false;
+
+ // we create a list of edges because the dynamicEdges change over the course of this loop
+ var edgesIdarray = [];
+ var amountOfInitialEdges = hubNode.dynamicEdges.length;
+ for (var j = 0; j < amountOfInitialEdges; j++) {
+ edgesIdarray.push(hubNode.dynamicEdges[j].id);
+ }
+
+ // if the hub clustering is not forces, we check if one of the edges connected
+ // to a cluster is small enough based on the constants.clustering.clusterEdgeThreshold
+ if (force == false) {
+ allowCluster = false;
+ for (j = 0; j < amountOfInitialEdges; j++) {
+ var edge = this.edges[edgesIdarray[j]];
+ if (edge !== undefined) {
+ if (edge.connected) {
+ if (edge.toId != edge.fromId) {
+ dx = (edge.to.x - edge.from.x);
+ dy = (edge.to.y - edge.from.y);
+ length = Math.sqrt(dx * dx + dy * dy);
+
+ if (length < minLength) {
+ allowCluster = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // start the clustering if allowed
+ if ((!force && allowCluster) || force) {
+ // we loop over all edges INITIALLY connected to this hub
+ for (j = 0; j < amountOfInitialEdges; j++) {
+ edge = this.edges[edgesIdarray[j]];
+ // the edge can be clustered by this function in a previous loop
+ if (edge !== undefined) {
+ var childNode = this.nodes[(edge.fromId == hubNode.id) ? edge.toId : edge.fromId];
+ // we do not want hubs to merge with other hubs nor do we want to cluster itself.
+ if ((childNode.dynamicEdges.length <= (this.hubThreshold + absorptionSizeOffset)) &&
+ (childNode.id != hubNode.id)) {
+ this._addToCluster(hubNode,childNode,force);
+ }
+ }
+ }
+ }
+ }
};
+
/**
- * This is the main clustering function. It clusters and declusters on zoom or forced
- * This function clusters on zoom, it can be called with a predefined zoom direction
- * If out, check if we can form clusters, if in, check if we can open clusters.
- * This function is only called from _zoom()
- *
- * @param {Number} zoomDirection | -1 / 0 / +1 for zoomOut / determineByZoom / zoomIn
- * @param {Boolean} recursive | enabled or disable recursive calling of the opening of clusters
- * @param {Boolean} force | enabled or disable forcing
- * @param {Boolean} doNotStart | if true do not call start
+ * This function adds the child node to the parent node, creating a cluster if it is not already.
*
+ * @param {Node} parentNode | this is the node that will house the child node
+ * @param {Node} childNode | this node will be deleted from the global this.nodes and stored in the parent node
+ * @param {Boolean} force | true will only update the remainingEdges at the very end of the clustering, ensuring single level collapse
+ * @private
*/
- exports.updateClusters = function(zoomDirection,recursive,force,doNotStart) {
- var isMovingBeforeClustering = this.moving;
- var amountOfNodes = this.nodeIndices.length;
-
- // on zoom out collapse the sector if the scale is at the level the sector was made
- if (this.previousScale > this.scale && zoomDirection == 0) {
- this._collapseSector();
- }
+ exports._addToCluster = function(parentNode, childNode, force) {
+ // join child node in the parent node
+ parentNode.containedNodes[childNode.id] = childNode;
- // check if we zoom in or out
- if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out
- // forming clusters when forced pulls outliers in. When not forced, the edge length of the
- // outer nodes determines if it is being clustered
- this._formClusters(force);
- }
- else if (this.previousScale < this.scale || zoomDirection == 1) { // zoom in
- if (force == true) {
- // _openClusters checks for each node if the formationScale of the cluster is smaller than
- // the current scale and if so, declusters. When forced, all clusters are reduced by one step
- this._openClusters(recursive,force);
+ // manage all the edges connected to the child and parent nodes
+ for (var i = 0; i < childNode.dynamicEdges.length; i++) {
+ var edge = childNode.dynamicEdges[i];
+ if (edge.toId == parentNode.id || edge.fromId == parentNode.id) { // edge connected to parentNode
+ this._addToContainedEdges(parentNode,childNode,edge);
}
else {
- // if a cluster takes up a set percentage of the active window
- this._openClustersBySize();
+ this._connectEdgeToCluster(parentNode,childNode,edge);
}
}
- this._updateNodeIndexList();
+ // a contained node has no dynamic edges.
+ childNode.dynamicEdges = [];
- // if a cluster was NOT formed and the user zoomed out, we try clustering by hubs
- if (this.nodeIndices.length == amountOfNodes && (this.previousScale > this.scale || zoomDirection == -1)) {
- this._aggregateHubs(force);
- this._updateNodeIndexList();
- }
+ // remove circular edges from clusters
+ this._containCircularEdgesFromNode(parentNode,childNode);
- // we now reduce chains.
- if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out
- this.handleChains();
- this._updateNodeIndexList();
- }
- this.previousScale = this.scale;
+ // remove the childNode from the global nodes object
+ delete this.nodes[childNode.id];
- // rest of the update the index list, dynamic edges and labels
- this._updateDynamicEdges();
- this.updateLabels();
+ // update the properties of the child and parent
+ var massBefore = parentNode.mass;
+ childNode.clusterSession = this.clusterSession;
+ parentNode.mass += childNode.mass;
+ parentNode.clusterSize += childNode.clusterSize;
+ parentNode.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize);
- // if a cluster was formed, we increase the clusterSession
- if (this.nodeIndices.length < amountOfNodes) { // this means a clustering operation has taken place
- this.clusterSession += 1;
- // if clusters have been made, we normalize the cluster level
- this.normalizeClusterLevels();
+ // keep track of the clustersessions so we can open the cluster up as it has been formed.
+ if (parentNode.clusterSessions[parentNode.clusterSessions.length - 1] != this.clusterSession) {
+ parentNode.clusterSessions.push(this.clusterSession);
}
- if (doNotStart == false || doNotStart === undefined) {
- // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded
- if (this.moving != isMovingBeforeClustering) {
- this.start();
- }
+ // forced clusters only open from screen size and double tap
+ if (force == true) {
+ // parentNode.formationScale = Math.pow(1 - (1.0/11.0),this.clusterSession+3);
+ parentNode.formationScale = 0;
+ }
+ else {
+ parentNode.formationScale = this.scale; // The latest child has been added on this scale
}
- this._updateCalculationNodes();
- };
+ // recalculate the size of the node on the next time the node is rendered
+ parentNode.clearSizeCache();
- /**
- * This function handles the chains. It is called on every updateClusters().
- */
- exports.handleChains = function() {
- // after clustering we check how many chains there are
- var chainPercentage = this._getChainFraction();
- if (chainPercentage > this.constants.clustering.chainThreshold) {
- this._reduceAmountOfChains(1 - this.constants.clustering.chainThreshold / chainPercentage)
+ // set the pop-out scale for the childnode
+ parentNode.containedNodes[childNode.id].formationScale = parentNode.formationScale;
- }
- };
+ // nullify the movement velocity of the child, this is to avoid hectic behaviour
+ childNode.clearVelocity();
- /**
- * this functions starts clustering by hubs
- * The minimum hub threshold is set globally
- *
- * @private
- */
- exports._aggregateHubs = function(force) {
- this._getHubSize();
- this._formClustersByHub(force,false);
+ // the mass has altered, preservation of energy dictates the velocity to be updated
+ parentNode.updateVelocity(massBefore);
+
+ // restart the simulation to reorganise all nodes
+ this.moving = true;
};
/**
- * This function is fired by keypress. It forces hubs to form.
- *
+ * This function will apply the changes made to the remainingEdges during the formation of the clusters.
+ * This is a seperate function to allow for level-wise collapsing of the node barnesHutTree.
+ * It has to be called if a level is collapsed. It is called by _formClusters().
+ * @private
*/
- exports.forceAggregateHubs = function(doNotStart) {
- var isMovingBeforeClustering = this.moving;
- var amountOfNodes = this.nodeIndices.length;
-
- this._aggregateHubs(true);
-
- // update the index list, dynamic edges and labels
- this._updateNodeIndexList();
- this._updateDynamicEdges();
- this.updateLabels();
-
- // if a cluster was formed, we increase the clusterSession
- if (this.nodeIndices.length != amountOfNodes) {
- this.clusterSession += 1;
- }
+ exports._updateDynamicEdges = function() {
+ for (var i = 0; i < this.nodeIndices.length; i++) {
+ var node = this.nodes[this.nodeIndices[i]];
+ node.dynamicEdgesLength = node.dynamicEdges.length;
- if (doNotStart == false || doNotStart === undefined) {
- // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded
- if (this.moving != isMovingBeforeClustering) {
- this.start();
+ // this corrects for multiple edges pointing at the same other node
+ var correction = 0;
+ if (node.dynamicEdgesLength > 1) {
+ for (var j = 0; j < node.dynamicEdgesLength - 1; j++) {
+ var edgeToId = node.dynamicEdges[j].toId;
+ var edgeFromId = node.dynamicEdges[j].fromId;
+ for (var k = j+1; k < node.dynamicEdgesLength; k++) {
+ if ((node.dynamicEdges[k].toId == edgeToId && node.dynamicEdges[k].fromId == edgeFromId) ||
+ (node.dynamicEdges[k].fromId == edgeToId && node.dynamicEdges[k].toId == edgeFromId)) {
+ correction += 1;
+ }
+ }
+ }
}
+ node.dynamicEdgesLength -= correction;
}
};
+
/**
- * If a cluster takes up more than a set percentage of the screen, open the cluster
+ * This adds an edge from the childNode to the contained edges of the parent node
*
+ * @param parentNode | Node object
+ * @param childNode | Node object
+ * @param edge | Edge object
* @private
*/
- exports._openClustersBySize = function() {
- for (var nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- var node = this.nodes[nodeId];
- if (node.inView() == true) {
- if ((node.width*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) ||
- (node.height*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) {
- this.openCluster(node);
- }
- }
+ exports._addToContainedEdges = function(parentNode, childNode, edge) {
+ // create an array object if it does not yet exist for this childNode
+ if (!(parentNode.containedEdges.hasOwnProperty(childNode.id))) {
+ parentNode.containedEdges[childNode.id] = []
+ }
+ // add this edge to the list
+ parentNode.containedEdges[childNode.id].push(edge);
+
+ // remove the edge from the global edges object
+ delete this.edges[edge.id];
+
+ // remove the edge from the parent object
+ for (var i = 0; i < parentNode.dynamicEdges.length; i++) {
+ if (parentNode.dynamicEdges[i].id == edge.id) {
+ parentNode.dynamicEdges.splice(i,1);
+ break;
}
}
};
-
/**
- * This function loops over all nodes in the nodeIndices list. For each node it checks if it is a cluster and if it
- * has to be opened based on the current zoom level.
+ * This function connects an edge that was connected to a child node to the parent node.
+ * It keeps track of which nodes it has been connected to with the originalId array.
*
+ * @param {Node} parentNode | Node object
+ * @param {Node} childNode | Node object
+ * @param {Edge} edge | Edge object
* @private
*/
- exports._openClusters = function(recursive,force) {
- for (var i = 0; i < this.nodeIndices.length; i++) {
- var node = this.nodes[this.nodeIndices[i]];
- this._expandClusterNode(node,recursive,force);
- this._updateCalculationNodes();
+ exports._connectEdgeToCluster = function(parentNode, childNode, edge) {
+ // handle circular edges
+ if (edge.toId == edge.fromId) {
+ this._addToContainedEdges(parentNode, childNode, edge);
+ }
+ else {
+ if (edge.toId == childNode.id) { // edge connected to other node on the "to" side
+ edge.originalToId.push(childNode.id);
+ edge.to = parentNode;
+ edge.toId = parentNode.id;
+ }
+ else { // edge connected to other node with the "from" side
+
+ edge.originalFromId.push(childNode.id);
+ edge.from = parentNode;
+ edge.fromId = parentNode.id;
+ }
+
+ this._addToReroutedEdges(parentNode,childNode,edge);
}
};
+
/**
- * This function checks if a node has to be opened. This is done by checking the zoom level.
- * If the node contains child nodes, this function is recursively called on the child nodes as well.
- * This recursive behaviour is optional and can be set by the recursive argument.
+ * If a node is connected to itself, a circular edge is drawn. When clustering we want to contain
+ * these edges inside of the cluster.
*
- * @param {Node} parentNode | to check for cluster and expand
- * @param {Boolean} recursive | enabled or disable recursive calling
- * @param {Boolean} force | enabled or disable forcing
- * @param {Boolean} [openAll] | This will recursively force all nodes in the parent to be released
+ * @param parentNode
+ * @param childNode
* @private
*/
- exports._expandClusterNode = function(parentNode, recursive, force, openAll) {
- // first check if node is a cluster
- if (parentNode.clusterSize > 1) {
- // this means that on a double tap event or a zoom event, the cluster fully unpacks if it is smaller than 20
- if (parentNode.clusterSize < this.constants.clustering.sectorThreshold) {
- openAll = true;
- }
- recursive = openAll ? true : recursive;
-
- // if the last child has been added on a smaller scale than current scale decluster
- if (parentNode.formationScale < this.scale || force == true) {
- // we will check if any of the contained child nodes should be removed from the cluster
- for (var containedNodeId in parentNode.containedNodes) {
- if (parentNode.containedNodes.hasOwnProperty(containedNodeId)) {
- var childNode = parentNode.containedNodes[containedNodeId];
-
- // force expand will expand the largest cluster size clusters. Since we cluster from outside in, we assume that
- // the largest cluster is the one that comes from outside
- if (force == true) {
- if (childNode.clusterSession == parentNode.clusterSessions[parentNode.clusterSessions.length-1]
- || openAll) {
- this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll);
- }
- }
- else {
- if (this._nodeInActiveArea(parentNode)) {
- this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll);
- }
- }
- }
- }
+ exports._containCircularEdgesFromNode = function(parentNode, childNode) {
+ // manage all the edges connected to the child and parent nodes
+ for (var i = 0; i < parentNode.dynamicEdges.length; i++) {
+ var edge = parentNode.dynamicEdges[i];
+ // handle circular edges
+ if (edge.toId == edge.fromId) {
+ this._addToContainedEdges(parentNode, childNode, edge);
}
}
};
+
/**
- * ONLY CALLED FROM _expandClusterNode
- *
- * This function will expel a child_node from a parent_node. This is to de-cluster the node. This function will remove
- * the child node from the parent contained_node object and put it back into the global nodes object.
- * The same holds for the edge that was connected to the child node. It is moved back into the global edges object.
+ * This adds an edge from the childNode to the rerouted edges of the parent node
*
- * @param {Node} parentNode | the parent node
- * @param {String} containedNodeId | child_node id as it is contained in the containedNodes object of the parent node
- * @param {Boolean} recursive | This will also check if the child needs to be expanded.
- * With force and recursive both true, the entire cluster is unpacked
- * @param {Boolean} force | This will disregard the zoom level and will expel this child from the parent
- * @param {Boolean} openAll | This will recursively force all nodes in the parent to be released
+ * @param parentNode | Node object
+ * @param childNode | Node object
+ * @param edge | Edge object
* @private
*/
- exports._expelChildFromParent = function(parentNode, containedNodeId, recursive, force, openAll) {
- var childNode = parentNode.containedNodes[containedNodeId];
-
- // if child node has been added on smaller scale than current, kick out
- if (childNode.formationScale < this.scale || force == true) {
- // unselect all selected items
- this._unselectAll();
-
- // put the child node back in the global nodes object
- this.nodes[containedNodeId] = childNode;
-
- // release the contained edges from this childNode back into the global edges
- this._releaseContainedEdges(parentNode,childNode);
+ exports._addToReroutedEdges = function(parentNode, childNode, edge) {
+ // create an array object if it does not yet exist for this childNode
+ // we store the edge in the rerouted edges so we can restore it when the cluster pops open
+ if (!(parentNode.reroutedEdges.hasOwnProperty(childNode.id))) {
+ parentNode.reroutedEdges[childNode.id] = [];
+ }
+ parentNode.reroutedEdges[childNode.id].push(edge);
- // reconnect rerouted edges to the childNode
- this._connectEdgeBackToChild(parentNode,childNode);
+ // this edge becomes part of the dynamicEdges of the cluster node
+ parentNode.dynamicEdges.push(edge);
+ };
- // validate all edges in dynamicEdges
- this._validateEdges(parentNode);
- // undo the changes from the clustering operation on the parent node
- parentNode.mass -= childNode.mass;
- parentNode.clusterSize -= childNode.clusterSize;
- parentNode.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize);
- parentNode.dynamicEdgesLength = parentNode.dynamicEdges.length;
- // place the child node near the parent, not at the exact same location to avoid chaos in the system
- childNode.x = parentNode.x + parentNode.growthIndicator * (0.5 - Math.random());
- childNode.y = parentNode.y + parentNode.growthIndicator * (0.5 - Math.random());
+ /**
+ * This function connects an edge that was connected to a cluster node back to the child node.
+ *
+ * @param parentNode | Node object
+ * @param childNode | Node object
+ * @private
+ */
+ exports._connectEdgeBackToChild = function(parentNode, childNode) {
+ if (parentNode.reroutedEdges.hasOwnProperty(childNode.id)) {
+ for (var i = 0; i < parentNode.reroutedEdges[childNode.id].length; i++) {
+ var edge = parentNode.reroutedEdges[childNode.id][i];
+ if (edge.originalFromId[edge.originalFromId.length-1] == childNode.id) {
+ edge.originalFromId.pop();
+ edge.fromId = childNode.id;
+ edge.from = childNode;
+ }
+ else {
+ edge.originalToId.pop();
+ edge.toId = childNode.id;
+ edge.to = childNode;
+ }
- // remove node from the list
- delete parentNode.containedNodes[containedNodeId];
+ // append this edge to the list of edges connecting to the childnode
+ childNode.dynamicEdges.push(edge);
- // check if there are other childs with this clusterSession in the parent.
- var othersPresent = false;
- for (var childNodeId in parentNode.containedNodes) {
- if (parentNode.containedNodes.hasOwnProperty(childNodeId)) {
- if (parentNode.containedNodes[childNodeId].clusterSession == childNode.clusterSession) {
- othersPresent = true;
+ // remove the edge from the parent object
+ for (var j = 0; j < parentNode.dynamicEdges.length; j++) {
+ if (parentNode.dynamicEdges[j].id == edge.id) {
+ parentNode.dynamicEdges.splice(j,1);
break;
}
}
}
- // if there are no others, remove the cluster session from the list
- if (othersPresent == false) {
- parentNode.clusterSessions.pop();
- }
-
- this._repositionBezierNodes(childNode);
- // this._repositionBezierNodes(parentNode);
-
- // remove the clusterSession from the child node
- childNode.clusterSession = 0;
-
- // recalculate the size of the node on the next time the node is rendered
- parentNode.clearSizeCache();
-
- // restart the simulation to reorganise all nodes
- this.moving = true;
- }
-
- // check if a further expansion step is possible if recursivity is enabled
- if (recursive == true) {
- this._expandClusterNode(childNode,recursive,force,openAll);
+ // remove the entry from the rerouted edges
+ delete parentNode.reroutedEdges[childNode.id];
}
};
/**
- * position the bezier nodes at the center of the edges
+ * When loops are clustered, an edge can be both in the rerouted array and the contained array.
+ * This function is called last to verify that all edges in dynamicEdges are in fact connected to the
+ * parentNode
*
- * @param node
+ * @param parentNode | Node object
* @private
*/
- exports._repositionBezierNodes = function(node) {
- for (var i = 0; i < node.dynamicEdges.length; i++) {
- node.dynamicEdges[i].positionBezierNode();
+ exports._validateEdges = function(parentNode) {
+ for (var i = 0; i < parentNode.dynamicEdges.length; i++) {
+ var edge = parentNode.dynamicEdges[i];
+ if (parentNode.id != edge.toId && parentNode.id != edge.fromId) {
+ parentNode.dynamicEdges.splice(i,1);
+ }
}
};
/**
- * This function checks if any nodes at the end of their trees have edges below a threshold length
- * This function is called only from updateClusters()
- * forceLevelCollapse ignores the length of the edge and collapses one level
- * This means that a node with only one edge will be clustered with its connected node
+ * This function released the contained edges back into the global domain and puts them back into the
+ * dynamic edges of both parent and child.
*
+ * @param {Node} parentNode |
+ * @param {Node} childNode |
* @private
- * @param {Boolean} force
*/
- exports._formClusters = function(force) {
- if (force == false) {
- this._formClustersByZoom();
- }
- else {
- this._forceClustersByZoom();
+ exports._releaseContainedEdges = function(parentNode, childNode) {
+ for (var i = 0; i < parentNode.containedEdges[childNode.id].length; i++) {
+ var edge = parentNode.containedEdges[childNode.id][i];
+
+ // put the edge back in the global edges object
+ this.edges[edge.id] = edge;
+
+ // put the edge back in the dynamic edges of the child and parent
+ childNode.dynamicEdges.push(edge);
+ parentNode.dynamicEdges.push(edge);
}
+ // remove the entry from the contained edges
+ delete parentNode.containedEdges[childNode.id];
+
};
- /**
- * This function handles the clustering by zooming out, this is based on a minimum edge distance
- *
- * @private
- */
- exports._formClustersByZoom = function() {
- var dx,dy,length,
- minLength = this.constants.clustering.clusterEdgeThreshold/this.scale;
- // check if any edges are shorter than minLength and start the clustering
- // the clustering favours the node with the larger mass
- for (var edgeId in this.edges) {
- if (this.edges.hasOwnProperty(edgeId)) {
- var edge = this.edges[edgeId];
- if (edge.connected) {
- if (edge.toId != edge.fromId) {
- dx = (edge.to.x - edge.from.x);
- dy = (edge.to.y - edge.from.y);
- length = Math.sqrt(dx * dx + dy * dy);
+
+ // ------------------- UTILITY FUNCTIONS ---------------------------- //
- if (length < minLength) {
- // first check which node is larger
- var parentNode = edge.from;
- var childNode = edge.to;
- if (edge.to.mass > edge.from.mass) {
- parentNode = edge.to;
- childNode = edge.from;
- }
+ /**
+ * This updates the node labels for all nodes (for debugging purposes)
+ */
+ exports.updateLabels = function() {
+ var nodeId;
+ // update node labels
+ for (nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ var node = this.nodes[nodeId];
+ if (node.clusterSize > 1) {
+ node.label = "[".concat(String(node.clusterSize),"]");
+ }
+ }
+ }
- if (childNode.dynamicEdgesLength == 1) {
- this._addToCluster(parentNode,childNode,false);
- }
- else if (parentNode.dynamicEdgesLength == 1) {
- this._addToCluster(childNode,parentNode,false);
- }
- }
+ // update node labels
+ for (nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ node = this.nodes[nodeId];
+ if (node.clusterSize == 1) {
+ if (node.originalLabel !== undefined) {
+ node.label = node.originalLabel;
+ }
+ else {
+ node.label = String(node.id);
}
}
}
}
+
+ // /* Debug Override */
+ // for (nodeId in this.nodes) {
+ // if (this.nodes.hasOwnProperty(nodeId)) {
+ // node = this.nodes[nodeId];
+ // node.label = String(node.level);
+ // }
+ // }
+
};
+
/**
- * This function forces the network to cluster all nodes with only one connecting edge to their
- * connected node.
- *
- * @private
+ * We want to keep the cluster level distribution rather small. This means we do not want unclustered nodes
+ * if the rest of the nodes are already a few cluster levels in.
+ * To fix this we use this function. It determines the min and max cluster level and sends nodes that have not
+ * clustered enough to the clusterToSmallestNeighbours function.
*/
- exports._forceClustersByZoom = function() {
- for (var nodeId in this.nodes) {
- // another node could have absorbed this child.
- if (this.nodes.hasOwnProperty(nodeId)) {
- var childNode = this.nodes[nodeId];
+ exports.normalizeClusterLevels = function() {
+ var maxLevel = 0;
+ var minLevel = 1e9;
+ var clusterLevel = 0;
+ var nodeId;
- // the edges can be swallowed by another decrease
- if (childNode.dynamicEdgesLength == 1 && childNode.dynamicEdges.length != 0) {
- var edge = childNode.dynamicEdges[0];
- var parentNode = (edge.toId == childNode.id) ? this.nodes[edge.fromId] : this.nodes[edge.toId];
+ // we loop over all nodes in the list
+ for (nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ clusterLevel = this.nodes[nodeId].clusterSessions.length;
+ if (maxLevel < clusterLevel) {maxLevel = clusterLevel;}
+ if (minLevel > clusterLevel) {minLevel = clusterLevel;}
+ }
+ }
- // group to the largest node
- if (childNode.id != parentNode.id) {
- if (parentNode.mass > childNode.mass) {
- this._addToCluster(parentNode,childNode,true);
- }
- else {
- this._addToCluster(childNode,parentNode,true);
- }
+ if (maxLevel - minLevel > this.constants.clustering.clusterLevelDifference) {
+ var amountOfNodes = this.nodeIndices.length;
+ var targetLevel = maxLevel - this.constants.clustering.clusterLevelDifference;
+ // we loop over all nodes in the list
+ for (nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ if (this.nodes[nodeId].clusterSessions.length < targetLevel) {
+ this._clusterToSmallestNeighbour(this.nodes[nodeId]);
}
}
}
+ this._updateNodeIndexList();
+ this._updateDynamicEdges();
+ // if a cluster was formed, we increase the clusterSession
+ if (this.nodeIndices.length != amountOfNodes) {
+ this.clusterSession += 1;
+ }
}
};
+
/**
- * To keep the nodes of roughly equal size we normalize the cluster levels.
- * This function clusters a node to its smallest connected neighbour.
+ * This function determines if the cluster we want to decluster is in the active area
+ * this means around the zoom center
*
- * @param node
+ * @param {Node} node
+ * @returns {boolean}
* @private
*/
- exports._clusterToSmallestNeighbour = function(node) {
- var smallestNeighbour = -1;
- var smallestNeighbourNode = null;
- for (var i = 0; i < node.dynamicEdges.length; i++) {
- if (node.dynamicEdges[i] !== undefined) {
- var neighbour = null;
- if (node.dynamicEdges[i].fromId != node.id) {
- neighbour = node.dynamicEdges[i].from;
- }
- else if (node.dynamicEdges[i].toId != node.id) {
- neighbour = node.dynamicEdges[i].to;
- }
-
-
- if (neighbour != null && smallestNeighbour > neighbour.clusterSessions.length) {
- smallestNeighbour = neighbour.clusterSessions.length;
- smallestNeighbourNode = neighbour;
- }
- }
- }
-
- if (neighbour != null && this.nodes[neighbour.id] !== undefined) {
- this._addToCluster(neighbour, node, true);
- }
+ exports._nodeInActiveArea = function(node) {
+ return (
+ Math.abs(node.x - this.areaCenter.x) <= this.constants.clustering.activeAreaBoxSize/this.scale
+ &&
+ Math.abs(node.y - this.areaCenter.y) <= this.constants.clustering.activeAreaBoxSize/this.scale
+ )
};
/**
- * This function forms clusters from hubs, it loops over all nodes
+ * This is an adaptation of the original repositioning function. This is called if the system is clustered initially
+ * It puts large clusters away from the center and randomizes the order.
*
- * @param {Boolean} force | Disregard zoom level
- * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges
- * @private
*/
- exports._formClustersByHub = function(force, onlyEqual) {
- // we loop over all nodes in the list
- for (var nodeId in this.nodes) {
- // we check if it is still available since it can be used by the clustering in this loop
- if (this.nodes.hasOwnProperty(nodeId)) {
- this._formClusterFromHub(this.nodes[nodeId],force,onlyEqual);
+ exports.repositionNodes = function() {
+ for (var i = 0; i < this.nodeIndices.length; i++) {
+ var node = this.nodes[this.nodeIndices[i]];
+ if ((node.xFixed == false || node.yFixed == false)) {
+ var radius = 10 * 0.1*this.nodeIndices.length * Math.min(100,node.mass);
+ var angle = 2 * Math.PI * Math.random();
+ if (node.xFixed == false) {node.x = radius * Math.cos(angle);}
+ if (node.yFixed == false) {node.y = radius * Math.sin(angle);}
+ this._repositionBezierNodes(node);
}
}
};
+
/**
- * This function forms a cluster from a specific preselected hub node
+ * We determine how many connections denote an important hub.
+ * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%)
*
- * @param {Node} hubNode | the node we will cluster as a hub
- * @param {Boolean} force | Disregard zoom level
- * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges
- * @param {Number} [absorptionSizeOffset] |
* @private
*/
- exports._formClusterFromHub = function(hubNode, force, onlyEqual, absorptionSizeOffset) {
- if (absorptionSizeOffset === undefined) {
- absorptionSizeOffset = 0;
- }
- // we decide if the node is a hub
- if ((hubNode.dynamicEdgesLength >= this.hubThreshold && onlyEqual == false) ||
- (hubNode.dynamicEdgesLength == this.hubThreshold && onlyEqual == true)) {
- // initialize variables
- var dx,dy,length;
- var minLength = this.constants.clustering.clusterEdgeThreshold/this.scale;
- var allowCluster = false;
+ exports._getHubSize = function() {
+ var average = 0;
+ var averageSquared = 0;
+ var hubCounter = 0;
+ var largestHub = 0;
- // we create a list of edges because the dynamicEdges change over the course of this loop
- var edgesIdarray = [];
- var amountOfInitialEdges = hubNode.dynamicEdges.length;
- for (var j = 0; j < amountOfInitialEdges; j++) {
- edgesIdarray.push(hubNode.dynamicEdges[j].id);
+ for (var i = 0; i < this.nodeIndices.length; i++) {
+
+ var node = this.nodes[this.nodeIndices[i]];
+ if (node.dynamicEdgesLength > largestHub) {
+ largestHub = node.dynamicEdgesLength;
}
+ average += node.dynamicEdgesLength;
+ averageSquared += Math.pow(node.dynamicEdgesLength,2);
+ hubCounter += 1;
+ }
+ average = average / hubCounter;
+ averageSquared = averageSquared / hubCounter;
- // if the hub clustering is not forces, we check if one of the edges connected
- // to a cluster is small enough based on the constants.clustering.clusterEdgeThreshold
- if (force == false) {
- allowCluster = false;
- for (j = 0; j < amountOfInitialEdges; j++) {
- var edge = this.edges[edgesIdarray[j]];
- if (edge !== undefined) {
- if (edge.connected) {
- if (edge.toId != edge.fromId) {
- dx = (edge.to.x - edge.from.x);
- dy = (edge.to.y - edge.from.y);
- length = Math.sqrt(dx * dx + dy * dy);
+ var variance = averageSquared - Math.pow(average,2);
+
+ var standardDeviation = Math.sqrt(variance);
+
+ this.hubThreshold = Math.floor(average + 2*standardDeviation);
+
+ // always have at least one to cluster
+ if (this.hubThreshold > largestHub) {
+ this.hubThreshold = largestHub;
+ }
+
+ // console.log("average",average,"averageSQ",averageSquared,"var",variance,"std",standardDeviation);
+ // console.log("hubThreshold:",this.hubThreshold);
+ };
- if (length < minLength) {
- allowCluster = true;
- break;
- }
- }
- }
- }
- }
- }
- // start the clustering if allowed
- if ((!force && allowCluster) || force) {
- // we loop over all edges INITIALLY connected to this hub
- for (j = 0; j < amountOfInitialEdges; j++) {
- edge = this.edges[edgesIdarray[j]];
- // the edge can be clustered by this function in a previous loop
- if (edge !== undefined) {
- var childNode = this.nodes[(edge.fromId == hubNode.id) ? edge.toId : edge.fromId];
- // we do not want hubs to merge with other hubs nor do we want to cluster itself.
- if ((childNode.dynamicEdges.length <= (this.hubThreshold + absorptionSizeOffset)) &&
- (childNode.id != hubNode.id)) {
- this._addToCluster(hubNode,childNode,force);
- }
+ /**
+ * We reduce the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods
+ * with this amount we can cluster specifically on these chains.
+ *
+ * @param {Number} fraction | between 0 and 1, the percentage of chains to reduce
+ * @private
+ */
+ exports._reduceAmountOfChains = function(fraction) {
+ this.hubThreshold = 2;
+ var reduceAmount = Math.floor(this.nodeIndices.length * fraction);
+ for (var nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) {
+ if (reduceAmount > 0) {
+ this._formClusterFromHub(this.nodes[nodeId],true,true,1);
+ reduceAmount -= 1;
}
}
}
}
};
-
-
/**
- * This function adds the child node to the parent node, creating a cluster if it is not already.
+ * We get the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods
+ * with this amount we can cluster specifically on these chains.
*
- * @param {Node} parentNode | this is the node that will house the child node
- * @param {Node} childNode | this node will be deleted from the global this.nodes and stored in the parent node
- * @param {Boolean} force | true will only update the remainingEdges at the very end of the clustering, ensuring single level collapse
* @private
*/
- exports._addToCluster = function(parentNode, childNode, force) {
- // join child node in the parent node
- parentNode.containedNodes[childNode.id] = childNode;
-
- // manage all the edges connected to the child and parent nodes
- for (var i = 0; i < childNode.dynamicEdges.length; i++) {
- var edge = childNode.dynamicEdges[i];
- if (edge.toId == parentNode.id || edge.fromId == parentNode.id) { // edge connected to parentNode
- this._addToContainedEdges(parentNode,childNode,edge);
- }
- else {
- this._connectEdgeToCluster(parentNode,childNode,edge);
+ exports._getChainFraction = function() {
+ var chains = 0;
+ var total = 0;
+ for (var nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) {
+ chains += 1;
+ }
+ total += 1;
}
}
- // a contained node has no dynamic edges.
- childNode.dynamicEdges = [];
+ return chains/total;
+ };
- // remove circular edges from clusters
- this._containCircularEdgesFromNode(parentNode,childNode);
+/***/ },
+/* 50 */
+/***/ function(module, exports, __webpack_require__) {
- // remove the childNode from the global nodes object
- delete this.nodes[childNode.id];
+ var util = __webpack_require__(1);
- // update the properties of the child and parent
- var massBefore = parentNode.mass;
- childNode.clusterSession = this.clusterSession;
- parentNode.mass += childNode.mass;
- parentNode.clusterSize += childNode.clusterSize;
- parentNode.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize);
+ /**
+ * Creation of the SectorMixin var.
+ *
+ * This contains all the functions the Network object can use to employ the sector system.
+ * The sector system is always used by Network, though the benefits only apply to the use of clustering.
+ * If clustering is not used, there is no overhead except for a duplicate object with references to nodes and edges.
+ */
- // keep track of the clustersessions so we can open the cluster up as it has been formed.
- if (parentNode.clusterSessions[parentNode.clusterSessions.length - 1] != this.clusterSession) {
- parentNode.clusterSessions.push(this.clusterSession);
- }
+ /**
+ * This function is only called by the setData function of the Network object.
+ * This loads the global references into the active sector. This initializes the sector.
+ *
+ * @private
+ */
+ exports._putDataInSector = function() {
+ this.sectors["active"][this._sector()].nodes = this.nodes;
+ this.sectors["active"][this._sector()].edges = this.edges;
+ this.sectors["active"][this._sector()].nodeIndices = this.nodeIndices;
+ };
- // forced clusters only open from screen size and double tap
- if (force == true) {
- // parentNode.formationScale = Math.pow(1 - (1.0/11.0),this.clusterSession+3);
- parentNode.formationScale = 0;
+
+ /**
+ * /**
+ * This function sets the global references to nodes, edges and nodeIndices back to
+ * those of the supplied (active) sector. If a type is defined, do the specific type
+ *
+ * @param {String} sectorId
+ * @param {String} [sectorType] | "active" or "frozen"
+ * @private
+ */
+ exports._switchToSector = function(sectorId, sectorType) {
+ if (sectorType === undefined || sectorType == "active") {
+ this._switchToActiveSector(sectorId);
}
else {
- parentNode.formationScale = this.scale; // The latest child has been added on this scale
+ this._switchToFrozenSector(sectorId);
}
+ };
- // recalculate the size of the node on the next time the node is rendered
- parentNode.clearSizeCache();
-
- // set the pop-out scale for the childnode
- parentNode.containedNodes[childNode.id].formationScale = parentNode.formationScale;
-
- // nullify the movement velocity of the child, this is to avoid hectic behaviour
- childNode.clearVelocity();
-
- // the mass has altered, preservation of energy dictates the velocity to be updated
- parentNode.updateVelocity(massBefore);
- // restart the simulation to reorganise all nodes
- this.moving = true;
+ /**
+ * This function sets the global references to nodes, edges and nodeIndices back to
+ * those of the supplied active sector.
+ *
+ * @param sectorId
+ * @private
+ */
+ exports._switchToActiveSector = function(sectorId) {
+ this.nodeIndices = this.sectors["active"][sectorId]["nodeIndices"];
+ this.nodes = this.sectors["active"][sectorId]["nodes"];
+ this.edges = this.sectors["active"][sectorId]["edges"];
};
/**
- * This function will apply the changes made to the remainingEdges during the formation of the clusters.
- * This is a seperate function to allow for level-wise collapsing of the node barnesHutTree.
- * It has to be called if a level is collapsed. It is called by _formClusters().
+ * This function sets the global references to nodes, edges and nodeIndices back to
+ * those of the supplied active sector.
+ *
* @private
*/
- exports._updateDynamicEdges = function() {
- for (var i = 0; i < this.nodeIndices.length; i++) {
- var node = this.nodes[this.nodeIndices[i]];
- node.dynamicEdgesLength = node.dynamicEdges.length;
-
- // this corrects for multiple edges pointing at the same other node
- var correction = 0;
- if (node.dynamicEdgesLength > 1) {
- for (var j = 0; j < node.dynamicEdgesLength - 1; j++) {
- var edgeToId = node.dynamicEdges[j].toId;
- var edgeFromId = node.dynamicEdges[j].fromId;
- for (var k = j+1; k < node.dynamicEdgesLength; k++) {
- if ((node.dynamicEdges[k].toId == edgeToId && node.dynamicEdges[k].fromId == edgeFromId) ||
- (node.dynamicEdges[k].fromId == edgeToId && node.dynamicEdges[k].toId == edgeFromId)) {
- correction += 1;
- }
- }
- }
- }
- node.dynamicEdgesLength -= correction;
- }
+ exports._switchToSupportSector = function() {
+ this.nodeIndices = this.sectors["support"]["nodeIndices"];
+ this.nodes = this.sectors["support"]["nodes"];
+ this.edges = this.sectors["support"]["edges"];
};
/**
- * This adds an edge from the childNode to the contained edges of the parent node
+ * This function sets the global references to nodes, edges and nodeIndices back to
+ * those of the supplied frozen sector.
*
- * @param parentNode | Node object
- * @param childNode | Node object
- * @param edge | Edge object
+ * @param sectorId
* @private
*/
- exports._addToContainedEdges = function(parentNode, childNode, edge) {
- // create an array object if it does not yet exist for this childNode
- if (!(parentNode.containedEdges.hasOwnProperty(childNode.id))) {
- parentNode.containedEdges[childNode.id] = []
- }
- // add this edge to the list
- parentNode.containedEdges[childNode.id].push(edge);
+ exports._switchToFrozenSector = function(sectorId) {
+ this.nodeIndices = this.sectors["frozen"][sectorId]["nodeIndices"];
+ this.nodes = this.sectors["frozen"][sectorId]["nodes"];
+ this.edges = this.sectors["frozen"][sectorId]["edges"];
+ };
- // remove the edge from the global edges object
- delete this.edges[edge.id];
- // remove the edge from the parent object
- for (var i = 0; i < parentNode.dynamicEdges.length; i++) {
- if (parentNode.dynamicEdges[i].id == edge.id) {
- parentNode.dynamicEdges.splice(i,1);
- break;
- }
- }
+ /**
+ * This function sets the global references to nodes, edges and nodeIndices back to
+ * those of the currently active sector.
+ *
+ * @private
+ */
+ exports._loadLatestSector = function() {
+ this._switchToSector(this._sector());
};
+
/**
- * This function connects an edge that was connected to a child node to the parent node.
- * It keeps track of which nodes it has been connected to with the originalId array.
+ * This function returns the currently active sector Id
*
- * @param {Node} parentNode | Node object
- * @param {Node} childNode | Node object
- * @param {Edge} edge | Edge object
+ * @returns {String}
* @private
*/
- exports._connectEdgeToCluster = function(parentNode, childNode, edge) {
- // handle circular edges
- if (edge.toId == edge.fromId) {
- this._addToContainedEdges(parentNode, childNode, edge);
- }
- else {
- if (edge.toId == childNode.id) { // edge connected to other node on the "to" side
- edge.originalToId.push(childNode.id);
- edge.to = parentNode;
- edge.toId = parentNode.id;
- }
- else { // edge connected to other node with the "from" side
+ exports._sector = function() {
+ return this.activeSector[this.activeSector.length-1];
+ };
- edge.originalFromId.push(childNode.id);
- edge.from = parentNode;
- edge.fromId = parentNode.id;
- }
- this._addToReroutedEdges(parentNode,childNode,edge);
+ /**
+ * This function returns the previously active sector Id
+ *
+ * @returns {String}
+ * @private
+ */
+ exports._previousSector = function() {
+ if (this.activeSector.length > 1) {
+ return this.activeSector[this.activeSector.length-2];
+ }
+ else {
+ throw new TypeError('there are not enough sectors in the this.activeSector array.');
}
};
/**
- * If a node is connected to itself, a circular edge is drawn. When clustering we want to contain
- * these edges inside of the cluster.
+ * We add the active sector at the end of the this.activeSector array
+ * This ensures it is the currently active sector returned by _sector() and it reaches the top
+ * of the activeSector stack. When we reverse our steps we move from the end to the beginning of this stack.
*
- * @param parentNode
- * @param childNode
+ * @param newId
* @private
*/
- exports._containCircularEdgesFromNode = function(parentNode, childNode) {
- // manage all the edges connected to the child and parent nodes
- for (var i = 0; i < parentNode.dynamicEdges.length; i++) {
- var edge = parentNode.dynamicEdges[i];
- // handle circular edges
- if (edge.toId == edge.fromId) {
- this._addToContainedEdges(parentNode, childNode, edge);
- }
- }
+ exports._setActiveSector = function(newId) {
+ this.activeSector.push(newId);
};
/**
- * This adds an edge from the childNode to the rerouted edges of the parent node
+ * We remove the currently active sector id from the active sector stack. This happens when
+ * we reactivate the previously active sector
*
- * @param parentNode | Node object
- * @param childNode | Node object
- * @param edge | Edge object
* @private
*/
- exports._addToReroutedEdges = function(parentNode, childNode, edge) {
- // create an array object if it does not yet exist for this childNode
- // we store the edge in the rerouted edges so we can restore it when the cluster pops open
- if (!(parentNode.reroutedEdges.hasOwnProperty(childNode.id))) {
- parentNode.reroutedEdges[childNode.id] = [];
- }
- parentNode.reroutedEdges[childNode.id].push(edge);
-
- // this edge becomes part of the dynamicEdges of the cluster node
- parentNode.dynamicEdges.push(edge);
- };
-
+ exports._forgetLastSector = function() {
+ this.activeSector.pop();
+ };
/**
- * This function connects an edge that was connected to a cluster node back to the child node.
+ * This function creates a new active sector with the supplied newId. This newId
+ * is the expanding node id.
*
- * @param parentNode | Node object
- * @param childNode | Node object
+ * @param {String} newId | Id of the new active sector
* @private
*/
- exports._connectEdgeBackToChild = function(parentNode, childNode) {
- if (parentNode.reroutedEdges.hasOwnProperty(childNode.id)) {
- for (var i = 0; i < parentNode.reroutedEdges[childNode.id].length; i++) {
- var edge = parentNode.reroutedEdges[childNode.id][i];
- if (edge.originalFromId[edge.originalFromId.length-1] == childNode.id) {
- edge.originalFromId.pop();
- edge.fromId = childNode.id;
- edge.from = childNode;
- }
- else {
- edge.originalToId.pop();
- edge.toId = childNode.id;
- edge.to = childNode;
- }
-
- // append this edge to the list of edges connecting to the childnode
- childNode.dynamicEdges.push(edge);
+ exports._createNewSector = function(newId) {
+ // create the new sector
+ this.sectors["active"][newId] = {"nodes":{},
+ "edges":{},
+ "nodeIndices":[],
+ "formationScale": this.scale,
+ "drawingNode": undefined};
- // remove the edge from the parent object
- for (var j = 0; j < parentNode.dynamicEdges.length; j++) {
- if (parentNode.dynamicEdges[j].id == edge.id) {
- parentNode.dynamicEdges.splice(j,1);
- break;
+ // create the new sector render node. This gives visual feedback that you are in a new sector.
+ this.sectors["active"][newId]['drawingNode'] = new Node(
+ {id:newId,
+ color: {
+ background: "#eaefef",
+ border: "495c5e"
}
- }
- }
- // remove the entry from the rerouted edges
- delete parentNode.reroutedEdges[childNode.id];
- }
+ },{},{},this.constants);
+ this.sectors["active"][newId]['drawingNode'].clusterSize = 2;
};
/**
- * When loops are clustered, an edge can be both in the rerouted array and the contained array.
- * This function is called last to verify that all edges in dynamicEdges are in fact connected to the
- * parentNode
+ * This function removes the currently active sector. This is called when we create a new
+ * active sector.
*
- * @param parentNode | Node object
+ * @param {String} sectorId | Id of the active sector that will be removed
* @private
*/
- exports._validateEdges = function(parentNode) {
- for (var i = 0; i < parentNode.dynamicEdges.length; i++) {
- var edge = parentNode.dynamicEdges[i];
- if (parentNode.id != edge.toId && parentNode.id != edge.fromId) {
- parentNode.dynamicEdges.splice(i,1);
- }
- }
+ exports._deleteActiveSector = function(sectorId) {
+ delete this.sectors["active"][sectorId];
};
/**
- * This function released the contained edges back into the global domain and puts them back into the
- * dynamic edges of both parent and child.
+ * This function removes the currently active sector. This is called when we reactivate
+ * the previously active sector.
*
- * @param {Node} parentNode |
- * @param {Node} childNode |
+ * @param {String} sectorId | Id of the active sector that will be removed
* @private
*/
- exports._releaseContainedEdges = function(parentNode, childNode) {
- for (var i = 0; i < parentNode.containedEdges[childNode.id].length; i++) {
- var edge = parentNode.containedEdges[childNode.id][i];
-
- // put the edge back in the global edges object
- this.edges[edge.id] = edge;
-
- // put the edge back in the dynamic edges of the child and parent
- childNode.dynamicEdges.push(edge);
- parentNode.dynamicEdges.push(edge);
- }
- // remove the entry from the contained edges
- delete parentNode.containedEdges[childNode.id];
-
+ exports._deleteFrozenSector = function(sectorId) {
+ delete this.sectors["frozen"][sectorId];
};
+ /**
+ * Freezing an active sector means moving it from the "active" object to the "frozen" object.
+ * We copy the references, then delete the active entree.
+ *
+ * @param sectorId
+ * @private
+ */
+ exports._freezeSector = function(sectorId) {
+ // we move the set references from the active to the frozen stack.
+ this.sectors["frozen"][sectorId] = this.sectors["active"][sectorId];
-
- // ------------------- UTILITY FUNCTIONS ---------------------------- //
+ // we have moved the sector data into the frozen set, we now remove it from the active set
+ this._deleteActiveSector(sectorId);
+ };
/**
- * This updates the node labels for all nodes (for debugging purposes)
+ * This is the reverse operation of _freezeSector. Activating means moving the sector from the "frozen"
+ * object to the "active" object.
+ *
+ * @param sectorId
+ * @private
*/
- exports.updateLabels = function() {
- var nodeId;
- // update node labels
- for (nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- var node = this.nodes[nodeId];
- if (node.clusterSize > 1) {
- node.label = "[".concat(String(node.clusterSize),"]");
- }
- }
- }
-
- // update node labels
- for (nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- node = this.nodes[nodeId];
- if (node.clusterSize == 1) {
- if (node.originalLabel !== undefined) {
- node.label = node.originalLabel;
- }
- else {
- node.label = String(node.id);
- }
- }
- }
- }
-
- // /* Debug Override */
- // for (nodeId in this.nodes) {
- // if (this.nodes.hasOwnProperty(nodeId)) {
- // node = this.nodes[nodeId];
- // node.label = String(node.level);
- // }
- // }
+ exports._activateSector = function(sectorId) {
+ // we move the set references from the frozen to the active stack.
+ this.sectors["active"][sectorId] = this.sectors["frozen"][sectorId];
+ // we have moved the sector data into the active set, we now remove it from the frozen stack
+ this._deleteFrozenSector(sectorId);
};
/**
- * We want to keep the cluster level distribution rather small. This means we do not want unclustered nodes
- * if the rest of the nodes are already a few cluster levels in.
- * To fix this we use this function. It determines the min and max cluster level and sends nodes that have not
- * clustered enough to the clusterToSmallestNeighbours function.
+ * This function merges the data from the currently active sector with a frozen sector. This is used
+ * in the process of reverting back to the previously active sector.
+ * The data that is placed in the frozen (the previously active) sector is the node that has been removed from it
+ * upon the creation of a new active sector.
+ *
+ * @param sectorId
+ * @private
*/
- exports.normalizeClusterLevels = function() {
- var maxLevel = 0;
- var minLevel = 1e9;
- var clusterLevel = 0;
- var nodeId;
-
- // we loop over all nodes in the list
- for (nodeId in this.nodes) {
+ exports._mergeThisWithFrozen = function(sectorId) {
+ // copy all nodes
+ for (var nodeId in this.nodes) {
if (this.nodes.hasOwnProperty(nodeId)) {
- clusterLevel = this.nodes[nodeId].clusterSessions.length;
- if (maxLevel < clusterLevel) {maxLevel = clusterLevel;}
- if (minLevel > clusterLevel) {minLevel = clusterLevel;}
+ this.sectors["frozen"][sectorId]["nodes"][nodeId] = this.nodes[nodeId];
}
}
- if (maxLevel - minLevel > this.constants.clustering.clusterLevelDifference) {
- var amountOfNodes = this.nodeIndices.length;
- var targetLevel = maxLevel - this.constants.clustering.clusterLevelDifference;
- // we loop over all nodes in the list
- for (nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- if (this.nodes[nodeId].clusterSessions.length < targetLevel) {
- this._clusterToSmallestNeighbour(this.nodes[nodeId]);
- }
- }
- }
- this._updateNodeIndexList();
- this._updateDynamicEdges();
- // if a cluster was formed, we increase the clusterSession
- if (this.nodeIndices.length != amountOfNodes) {
- this.clusterSession += 1;
+ // copy all edges (if not fully clustered, else there are no edges)
+ for (var edgeId in this.edges) {
+ if (this.edges.hasOwnProperty(edgeId)) {
+ this.sectors["frozen"][sectorId]["edges"][edgeId] = this.edges[edgeId];
}
}
- };
-
-
-
- /**
- * This function determines if the cluster we want to decluster is in the active area
- * this means around the zoom center
- *
- * @param {Node} node
- * @returns {boolean}
- * @private
- */
- exports._nodeInActiveArea = function(node) {
- return (
- Math.abs(node.x - this.areaCenter.x) <= this.constants.clustering.activeAreaBoxSize/this.scale
- &&
- Math.abs(node.y - this.areaCenter.y) <= this.constants.clustering.activeAreaBoxSize/this.scale
- )
+
+ // merge the nodeIndices
+ for (var i = 0; i < this.nodeIndices.length; i++) {
+ this.sectors["frozen"][sectorId]["nodeIndices"].push(this.nodeIndices[i]);
+ }
};
/**
- * This is an adaptation of the original repositioning function. This is called if the system is clustered initially
- * It puts large clusters away from the center and randomizes the order.
+ * This clusters the sector to one cluster. It was a single cluster before this process started so
+ * we revert to that state. The clusterToFit function with a maximum size of 1 node does this.
*
+ * @private
*/
- exports.repositionNodes = function() {
- for (var i = 0; i < this.nodeIndices.length; i++) {
- var node = this.nodes[this.nodeIndices[i]];
- if ((node.xFixed == false || node.yFixed == false)) {
- var radius = 10 * 0.1*this.nodeIndices.length * Math.min(100,node.mass);
- var angle = 2 * Math.PI * Math.random();
- if (node.xFixed == false) {node.x = radius * Math.cos(angle);}
- if (node.yFixed == false) {node.y = radius * Math.sin(angle);}
- this._repositionBezierNodes(node);
- }
- }
+ exports._collapseThisToSingleCluster = function() {
+ this.clusterToFit(1,false);
};
/**
- * We determine how many connections denote an important hub.
- * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%)
+ * We create a new active sector from the node that we want to open.
*
+ * @param node
* @private
*/
- exports._getHubSize = function() {
- var average = 0;
- var averageSquared = 0;
- var hubCounter = 0;
- var largestHub = 0;
+ exports._addSector = function(node) {
+ // this is the currently active sector
+ var sector = this._sector();
- for (var i = 0; i < this.nodeIndices.length; i++) {
+ // // this should allow me to select nodes from a frozen set.
+ // if (this.sectors['active'][sector]["nodes"].hasOwnProperty(node.id)) {
+ // console.log("the node is part of the active sector");
+ // }
+ // else {
+ // console.log("I dont know what the fuck happened!!");
+ // }
- var node = this.nodes[this.nodeIndices[i]];
- if (node.dynamicEdgesLength > largestHub) {
- largestHub = node.dynamicEdgesLength;
- }
- average += node.dynamicEdgesLength;
- averageSquared += Math.pow(node.dynamicEdgesLength,2);
- hubCounter += 1;
- }
- average = average / hubCounter;
- averageSquared = averageSquared / hubCounter;
+ // when we switch to a new sector, we remove the node that will be expanded from the current nodes list.
+ delete this.nodes[node.id];
- var variance = averageSquared - Math.pow(average,2);
+ var unqiueIdentifier = util.randomUUID();
- var standardDeviation = Math.sqrt(variance);
+ // we fully freeze the currently active sector
+ this._freezeSector(sector);
- this.hubThreshold = Math.floor(average + 2*standardDeviation);
+ // we create a new active sector. This sector has the Id of the node to ensure uniqueness
+ this._createNewSector(unqiueIdentifier);
- // always have at least one to cluster
- if (this.hubThreshold > largestHub) {
- this.hubThreshold = largestHub;
- }
+ // we add the active sector to the sectors array to be able to revert these steps later on
+ this._setActiveSector(unqiueIdentifier);
- // console.log("average",average,"averageSQ",averageSquared,"var",variance,"std",standardDeviation);
- // console.log("hubThreshold:",this.hubThreshold);
+ // we redirect the global references to the new sector's references. this._sector() now returns unqiueIdentifier
+ this._switchToSector(this._sector());
+
+ // finally we add the node we removed from our previous active sector to the new active sector
+ this.nodes[node.id] = node;
};
/**
- * We reduce the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods
- * with this amount we can cluster specifically on these chains.
+ * We close the sector that is currently open and revert back to the one before.
+ * If the active sector is the "default" sector, nothing happens.
*
- * @param {Number} fraction | between 0 and 1, the percentage of chains to reduce
* @private
*/
- exports._reduceAmountOfChains = function(fraction) {
- this.hubThreshold = 2;
- var reduceAmount = Math.floor(this.nodeIndices.length * fraction);
- for (var nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) {
- if (reduceAmount > 0) {
- this._formClusterFromHub(this.nodes[nodeId],true,true,1);
- reduceAmount -= 1;
- }
- }
+ exports._collapseSector = function() {
+ // the currently active sector
+ var sector = this._sector();
+
+ // we cannot collapse the default sector
+ if (sector != "default") {
+ if ((this.nodeIndices.length == 1) ||
+ (this.sectors["active"][sector]["drawingNode"].width*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) ||
+ (this.sectors["active"][sector]["drawingNode"].height*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) {
+ var previousSector = this._previousSector();
+
+ // we collapse the sector back to a single cluster
+ this._collapseThisToSingleCluster();
+
+ // we move the remaining nodes, edges and nodeIndices to the previous sector.
+ // This previous sector is the one we will reactivate
+ this._mergeThisWithFrozen(previousSector);
+
+ // the previously active (frozen) sector now has all the data from the currently active sector.
+ // we can now delete the active sector.
+ this._deleteActiveSector(sector);
+
+ // we activate the previously active (and currently frozen) sector.
+ this._activateSector(previousSector);
+
+ // we load the references from the newly active sector into the global references
+ this._switchToSector(previousSector);
+
+ // we forget the previously active sector because we reverted to the one before
+ this._forgetLastSector();
+
+ // finally, we update the node index list.
+ this._updateNodeIndexList();
+
+ // we refresh the list with calulation nodes and calculation node indices.
+ this._updateCalculationNodes();
}
}
};
+
/**
- * We get the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods
- * with this amount we can cluster specifically on these chains.
+ * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation().
*
+ * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors
+ * | we dont pass the function itself because then the "this" is the window object
+ * | instead of the Network object
+ * @param {*} [argument] | Optional: arguments to pass to the runFunction
* @private
*/
- exports._getChainFraction = function() {
- var chains = 0;
- var total = 0;
- for (var nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) {
- chains += 1;
+ exports._doInAllActiveSectors = function(runFunction,argument) {
+ if (argument === undefined) {
+ for (var sector in this.sectors["active"]) {
+ if (this.sectors["active"].hasOwnProperty(sector)) {
+ // switch the global references to those of this sector
+ this._switchToActiveSector(sector);
+ this[runFunction]();
}
- total += 1;
}
}
- return chains/total;
+ else {
+ for (var sector in this.sectors["active"]) {
+ if (this.sectors["active"].hasOwnProperty(sector)) {
+ // switch the global references to those of this sector
+ this._switchToActiveSector(sector);
+ var args = Array.prototype.splice.call(arguments, 1);
+ if (args.length > 1) {
+ this[runFunction](args[0],args[1]);
+ }
+ else {
+ this[runFunction](argument);
+ }
+ }
+ }
+ }
+ // we revert the global references back to our active sector
+ this._loadLatestSector();
};
-/***/ },
-/* 51 */
-/***/ function(module, exports, __webpack_require__) {
-
- var util = __webpack_require__(1);
-
/**
- * Creation of the SectorMixin var.
+ * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation().
*
- * This contains all the functions the Network object can use to employ the sector system.
- * The sector system is always used by Network, though the benefits only apply to the use of clustering.
- * If clustering is not used, there is no overhead except for a duplicate object with references to nodes and edges.
+ * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors
+ * | we dont pass the function itself because then the "this" is the window object
+ * | instead of the Network object
+ * @param {*} [argument] | Optional: arguments to pass to the runFunction
+ * @private
*/
+ exports._doInSupportSector = function(runFunction,argument) {
+ if (argument === undefined) {
+ this._switchToSupportSector();
+ this[runFunction]();
+ }
+ else {
+ this._switchToSupportSector();
+ var args = Array.prototype.splice.call(arguments, 1);
+ if (args.length > 1) {
+ this[runFunction](args[0],args[1]);
+ }
+ else {
+ this[runFunction](argument);
+ }
+ }
+ // we revert the global references back to our active sector
+ this._loadLatestSector();
+ };
+
/**
- * This function is only called by the setData function of the Network object.
- * This loads the global references into the active sector. This initializes the sector.
+ * This runs a function in all frozen sectors. This is used in the _redraw().
*
+ * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors
+ * | we don't pass the function itself because then the "this" is the window object
+ * | instead of the Network object
+ * @param {*} [argument] | Optional: arguments to pass to the runFunction
* @private
*/
- exports._putDataInSector = function() {
- this.sectors["active"][this._sector()].nodes = this.nodes;
- this.sectors["active"][this._sector()].edges = this.edges;
- this.sectors["active"][this._sector()].nodeIndices = this.nodeIndices;
+ exports._doInAllFrozenSectors = function(runFunction,argument) {
+ if (argument === undefined) {
+ for (var sector in this.sectors["frozen"]) {
+ if (this.sectors["frozen"].hasOwnProperty(sector)) {
+ // switch the global references to those of this sector
+ this._switchToFrozenSector(sector);
+ this[runFunction]();
+ }
+ }
+ }
+ else {
+ for (var sector in this.sectors["frozen"]) {
+ if (this.sectors["frozen"].hasOwnProperty(sector)) {
+ // switch the global references to those of this sector
+ this._switchToFrozenSector(sector);
+ var args = Array.prototype.splice.call(arguments, 1);
+ if (args.length > 1) {
+ this[runFunction](args[0],args[1]);
+ }
+ else {
+ this[runFunction](argument);
+ }
+ }
+ }
+ }
+ this._loadLatestSector();
};
/**
- * /**
- * This function sets the global references to nodes, edges and nodeIndices back to
- * those of the supplied (active) sector. If a type is defined, do the specific type
+ * This runs a function in all sectors. This is used in the _redraw().
*
- * @param {String} sectorId
- * @param {String} [sectorType] | "active" or "frozen"
- * @private
- */
- exports._switchToSector = function(sectorId, sectorType) {
- if (sectorType === undefined || sectorType == "active") {
- this._switchToActiveSector(sectorId);
+ * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors
+ * | we don't pass the function itself because then the "this" is the window object
+ * | instead of the Network object
+ * @param {*} [argument] | Optional: arguments to pass to the runFunction
+ * @private
+ */
+ exports._doInAllSectors = function(runFunction,argument) {
+ var args = Array.prototype.splice.call(arguments, 1);
+ if (argument === undefined) {
+ this._doInAllActiveSectors(runFunction);
+ this._doInAllFrozenSectors(runFunction);
}
else {
- this._switchToFrozenSector(sectorId);
+ if (args.length > 1) {
+ this._doInAllActiveSectors(runFunction,args[0],args[1]);
+ this._doInAllFrozenSectors(runFunction,args[0],args[1]);
+ }
+ else {
+ this._doInAllActiveSectors(runFunction,argument);
+ this._doInAllFrozenSectors(runFunction,argument);
+ }
}
};
/**
- * This function sets the global references to nodes, edges and nodeIndices back to
- * those of the supplied active sector.
+ * This clears the nodeIndices list. We cannot use this.nodeIndices = [] because we would break the link with the
+ * active sector. Thus we clear the nodeIndices in the active sector, then reconnect the this.nodeIndices to it.
*
- * @param sectorId
* @private
*/
- exports._switchToActiveSector = function(sectorId) {
- this.nodeIndices = this.sectors["active"][sectorId]["nodeIndices"];
- this.nodes = this.sectors["active"][sectorId]["nodes"];
- this.edges = this.sectors["active"][sectorId]["edges"];
+ exports._clearNodeIndexList = function() {
+ var sector = this._sector();
+ this.sectors["active"][sector]["nodeIndices"] = [];
+ this.nodeIndices = this.sectors["active"][sector]["nodeIndices"];
};
/**
- * This function sets the global references to nodes, edges and nodeIndices back to
- * those of the supplied active sector.
+ * Draw the encompassing sector node
*
+ * @param ctx
+ * @param sectorType
* @private
*/
- exports._switchToSupportSector = function() {
- this.nodeIndices = this.sectors["support"]["nodeIndices"];
- this.nodes = this.sectors["support"]["nodes"];
- this.edges = this.sectors["support"]["edges"];
+ exports._drawSectorNodes = function(ctx,sectorType) {
+ var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node;
+ for (var sector in this.sectors[sectorType]) {
+ if (this.sectors[sectorType].hasOwnProperty(sector)) {
+ if (this.sectors[sectorType][sector]["drawingNode"] !== undefined) {
+
+ this._switchToSector(sector,sectorType);
+
+ minY = 1e9; maxY = -1e9; minX = 1e9; maxX = -1e9;
+ for (var nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ node = this.nodes[nodeId];
+ node.resize(ctx);
+ if (minX > node.x - 0.5 * node.width) {minX = node.x - 0.5 * node.width;}
+ if (maxX < node.x + 0.5 * node.width) {maxX = node.x + 0.5 * node.width;}
+ if (minY > node.y - 0.5 * node.height) {minY = node.y - 0.5 * node.height;}
+ if (maxY < node.y + 0.5 * node.height) {maxY = node.y + 0.5 * node.height;}
+ }
+ }
+ node = this.sectors[sectorType][sector]["drawingNode"];
+ node.x = 0.5 * (maxX + minX);
+ node.y = 0.5 * (maxY + minY);
+ node.width = 2 * (node.x - minX);
+ node.height = 2 * (node.y - minY);
+ node.radius = Math.sqrt(Math.pow(0.5*node.width,2) + Math.pow(0.5*node.height,2));
+ node.setScale(this.scale);
+ node._drawCircle(ctx);
+ }
+ }
+ }
+ };
+
+ exports._drawAllSectorNodes = function(ctx) {
+ this._drawSectorNodes(ctx,"frozen");
+ this._drawSectorNodes(ctx,"active");
+ this._loadLatestSector();
};
+/***/ },
+/* 51 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Node = __webpack_require__(36);
+
/**
- * This function sets the global references to nodes, edges and nodeIndices back to
- * those of the supplied frozen sector.
+ * This function can be called from the _doInAllSectors function
*
- * @param sectorId
+ * @param object
+ * @param overlappingNodes
* @private
*/
- exports._switchToFrozenSector = function(sectorId) {
- this.nodeIndices = this.sectors["frozen"][sectorId]["nodeIndices"];
- this.nodes = this.sectors["frozen"][sectorId]["nodes"];
- this.edges = this.sectors["frozen"][sectorId]["edges"];
+ exports._getNodesOverlappingWith = function(object, overlappingNodes) {
+ var nodes = this.nodes;
+ for (var nodeId in nodes) {
+ if (nodes.hasOwnProperty(nodeId)) {
+ if (nodes[nodeId].isOverlappingWith(object)) {
+ overlappingNodes.push(nodeId);
+ }
+ }
+ }
};
-
/**
- * This function sets the global references to nodes, edges and nodeIndices back to
- * those of the currently active sector.
- *
+ * retrieve all nodes overlapping with given object
+ * @param {Object} object An object with parameters left, top, right, bottom
+ * @return {Number[]} An array with id's of the overlapping nodes
* @private
*/
- exports._loadLatestSector = function() {
- this._switchToSector(this._sector());
+ exports._getAllNodesOverlappingWith = function (object) {
+ var overlappingNodes = [];
+ this._doInAllActiveSectors("_getNodesOverlappingWith",object,overlappingNodes);
+ return overlappingNodes;
};
/**
- * This function returns the currently active sector Id
+ * Return a position object in canvasspace from a single point in screenspace
*
- * @returns {String}
+ * @param pointer
+ * @returns {{left: number, top: number, right: number, bottom: number}}
* @private
*/
- exports._sector = function() {
- return this.activeSector[this.activeSector.length-1];
+ exports._pointerToPositionObject = function(pointer) {
+ var x = this._XconvertDOMtoCanvas(pointer.x);
+ var y = this._YconvertDOMtoCanvas(pointer.y);
+
+ return {
+ left: x,
+ top: y,
+ right: x,
+ bottom: y
+ };
};
/**
- * This function returns the previously active sector Id
+ * Get the top node at the a specific point (like a click)
*
- * @returns {String}
+ * @param {{x: Number, y: Number}} pointer
+ * @return {Node | null} node
* @private
*/
- exports._previousSector = function() {
- if (this.activeSector.length > 1) {
- return this.activeSector[this.activeSector.length-2];
+ exports._getNodeAt = function (pointer) {
+ // we first check if this is an navigation controls element
+ var positionObject = this._pointerToPositionObject(pointer);
+ var overlappingNodes = this._getAllNodesOverlappingWith(positionObject);
+
+ // if there are overlapping nodes, select the last one, this is the
+ // one which is drawn on top of the others
+ if (overlappingNodes.length > 0) {
+ return this.nodes[overlappingNodes[overlappingNodes.length - 1]];
}
else {
- throw new TypeError('there are not enough sectors in the this.activeSector array.');
+ return null;
}
};
/**
- * We add the active sector at the end of the this.activeSector array
- * This ensures it is the currently active sector returned by _sector() and it reaches the top
- * of the activeSector stack. When we reverse our steps we move from the end to the beginning of this stack.
- *
- * @param newId
+ * retrieve all edges overlapping with given object, selector is around center
+ * @param {Object} object An object with parameters left, top, right, bottom
+ * @return {Number[]} An array with id's of the overlapping nodes
* @private
*/
- exports._setActiveSector = function(newId) {
- this.activeSector.push(newId);
+ exports._getEdgesOverlappingWith = function (object, overlappingEdges) {
+ var edges = this.edges;
+ for (var edgeId in edges) {
+ if (edges.hasOwnProperty(edgeId)) {
+ if (edges[edgeId].isOverlappingWith(object)) {
+ overlappingEdges.push(edgeId);
+ }
+ }
+ }
};
/**
- * We remove the currently active sector id from the active sector stack. This happens when
- * we reactivate the previously active sector
- *
+ * retrieve all nodes overlapping with given object
+ * @param {Object} object An object with parameters left, top, right, bottom
+ * @return {Number[]} An array with id's of the overlapping nodes
* @private
*/
- exports._forgetLastSector = function() {
- this.activeSector.pop();
+ exports._getAllEdgesOverlappingWith = function (object) {
+ var overlappingEdges = [];
+ this._doInAllActiveSectors("_getEdgesOverlappingWith",object,overlappingEdges);
+ return overlappingEdges;
};
-
/**
- * This function creates a new active sector with the supplied newId. This newId
- * is the expanding node id.
+ * Place holder. To implement change the _getNodeAt to a _getObjectAt. Have the _getObjectAt call
+ * _getNodeAt and _getEdgesAt, then priortize the selection to user preferences.
*
- * @param {String} newId | Id of the new active sector
+ * @param pointer
+ * @returns {null}
* @private
*/
- exports._createNewSector = function(newId) {
- // create the new sector
- this.sectors["active"][newId] = {"nodes":{},
- "edges":{},
- "nodeIndices":[],
- "formationScale": this.scale,
- "drawingNode": undefined};
-
- // create the new sector render node. This gives visual feedback that you are in a new sector.
- this.sectors["active"][newId]['drawingNode'] = new Node(
- {id:newId,
- color: {
- background: "#eaefef",
- border: "495c5e"
- }
- },{},{},this.constants);
- this.sectors["active"][newId]['drawingNode'].clusterSize = 2;
- };
-
+ exports._getEdgeAt = function(pointer) {
+ var positionObject = this._pointerToPositionObject(pointer);
+ var overlappingEdges = this._getAllEdgesOverlappingWith(positionObject);
- /**
- * This function removes the currently active sector. This is called when we create a new
- * active sector.
- *
- * @param {String} sectorId | Id of the active sector that will be removed
- * @private
- */
- exports._deleteActiveSector = function(sectorId) {
- delete this.sectors["active"][sectorId];
+ if (overlappingEdges.length > 0) {
+ return this.edges[overlappingEdges[overlappingEdges.length - 1]];
+ }
+ else {
+ return null;
+ }
};
/**
- * This function removes the currently active sector. This is called when we reactivate
- * the previously active sector.
+ * Add object to the selection array.
*
- * @param {String} sectorId | Id of the active sector that will be removed
+ * @param obj
* @private
*/
- exports._deleteFrozenSector = function(sectorId) {
- delete this.sectors["frozen"][sectorId];
+ exports._addToSelection = function(obj) {
+ if (obj instanceof Node) {
+ this.selectionObj.nodes[obj.id] = obj;
+ }
+ else {
+ this.selectionObj.edges[obj.id] = obj;
+ }
};
-
/**
- * Freezing an active sector means moving it from the "active" object to the "frozen" object.
- * We copy the references, then delete the active entree.
+ * Add object to the selection array.
*
- * @param sectorId
+ * @param obj
* @private
*/
- exports._freezeSector = function(sectorId) {
- // we move the set references from the active to the frozen stack.
- this.sectors["frozen"][sectorId] = this.sectors["active"][sectorId];
-
- // we have moved the sector data into the frozen set, we now remove it from the active set
- this._deleteActiveSector(sectorId);
+ exports._addToHover = function(obj) {
+ if (obj instanceof Node) {
+ this.hoverObj.nodes[obj.id] = obj;
+ }
+ else {
+ this.hoverObj.edges[obj.id] = obj;
+ }
};
/**
- * This is the reverse operation of _freezeSector. Activating means moving the sector from the "frozen"
- * object to the "active" object.
+ * Remove a single option from selection.
*
- * @param sectorId
+ * @param {Object} obj
* @private
*/
- exports._activateSector = function(sectorId) {
- // we move the set references from the frozen to the active stack.
- this.sectors["active"][sectorId] = this.sectors["frozen"][sectorId];
-
- // we have moved the sector data into the active set, we now remove it from the frozen stack
- this._deleteFrozenSector(sectorId);
+ exports._removeFromSelection = function(obj) {
+ if (obj instanceof Node) {
+ delete this.selectionObj.nodes[obj.id];
+ }
+ else {
+ delete this.selectionObj.edges[obj.id];
+ }
};
-
/**
- * This function merges the data from the currently active sector with a frozen sector. This is used
- * in the process of reverting back to the previously active sector.
- * The data that is placed in the frozen (the previously active) sector is the node that has been removed from it
- * upon the creation of a new active sector.
+ * Unselect all. The selectionObj is useful for this.
*
- * @param sectorId
+ * @param {Boolean} [doNotTrigger] | ignore trigger
* @private
*/
- exports._mergeThisWithFrozen = function(sectorId) {
- // copy all nodes
- for (var nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- this.sectors["frozen"][sectorId]["nodes"][nodeId] = this.nodes[nodeId];
- }
+ exports._unselectAll = function(doNotTrigger) {
+ if (doNotTrigger === undefined) {
+ doNotTrigger = false;
}
-
- // copy all edges (if not fully clustered, else there are no edges)
- for (var edgeId in this.edges) {
- if (this.edges.hasOwnProperty(edgeId)) {
- this.sectors["frozen"][sectorId]["edges"][edgeId] = this.edges[edgeId];
+ for(var nodeId in this.selectionObj.nodes) {
+ if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+ this.selectionObj.nodes[nodeId].unselect();
}
}
-
- // merge the nodeIndices
- for (var i = 0; i < this.nodeIndices.length; i++) {
- this.sectors["frozen"][sectorId]["nodeIndices"].push(this.nodeIndices[i]);
+ for(var edgeId in this.selectionObj.edges) {
+ if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
+ this.selectionObj.edges[edgeId].unselect();
+ }
}
- };
+ this.selectionObj = {nodes:{},edges:{}};
- /**
- * This clusters the sector to one cluster. It was a single cluster before this process started so
- * we revert to that state. The clusterToFit function with a maximum size of 1 node does this.
- *
- * @private
- */
- exports._collapseThisToSingleCluster = function() {
- this.clusterToFit(1,false);
+ if (doNotTrigger == false) {
+ this.emit('select', this.getSelection());
+ }
};
-
/**
- * We create a new active sector from the node that we want to open.
+ * Unselect all clusters. The selectionObj is useful for this.
*
- * @param node
+ * @param {Boolean} [doNotTrigger] | ignore trigger
* @private
*/
- exports._addSector = function(node) {
- // this is the currently active sector
- var sector = this._sector();
-
- // // this should allow me to select nodes from a frozen set.
- // if (this.sectors['active'][sector]["nodes"].hasOwnProperty(node.id)) {
- // console.log("the node is part of the active sector");
- // }
- // else {
- // console.log("I dont know what the fuck happened!!");
- // }
-
- // when we switch to a new sector, we remove the node that will be expanded from the current nodes list.
- delete this.nodes[node.id];
-
- var unqiueIdentifier = util.randomUUID();
-
- // we fully freeze the currently active sector
- this._freezeSector(sector);
-
- // we create a new active sector. This sector has the Id of the node to ensure uniqueness
- this._createNewSector(unqiueIdentifier);
-
- // we add the active sector to the sectors array to be able to revert these steps later on
- this._setActiveSector(unqiueIdentifier);
+ exports._unselectClusters = function(doNotTrigger) {
+ if (doNotTrigger === undefined) {
+ doNotTrigger = false;
+ }
- // we redirect the global references to the new sector's references. this._sector() now returns unqiueIdentifier
- this._switchToSector(this._sector());
+ for (var nodeId in this.selectionObj.nodes) {
+ if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+ if (this.selectionObj.nodes[nodeId].clusterSize > 1) {
+ this.selectionObj.nodes[nodeId].unselect();
+ this._removeFromSelection(this.selectionObj.nodes[nodeId]);
+ }
+ }
+ }
- // finally we add the node we removed from our previous active sector to the new active sector
- this.nodes[node.id] = node;
+ if (doNotTrigger == false) {
+ this.emit('select', this.getSelection());
+ }
};
/**
- * We close the sector that is currently open and revert back to the one before.
- * If the active sector is the "default" sector, nothing happens.
+ * return the number of selected nodes
*
+ * @returns {number}
* @private
*/
- exports._collapseSector = function() {
- // the currently active sector
- var sector = this._sector();
-
- // we cannot collapse the default sector
- if (sector != "default") {
- if ((this.nodeIndices.length == 1) ||
- (this.sectors["active"][sector]["drawingNode"].width*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) ||
- (this.sectors["active"][sector]["drawingNode"].height*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) {
- var previousSector = this._previousSector();
-
- // we collapse the sector back to a single cluster
- this._collapseThisToSingleCluster();
-
- // we move the remaining nodes, edges and nodeIndices to the previous sector.
- // This previous sector is the one we will reactivate
- this._mergeThisWithFrozen(previousSector);
-
- // the previously active (frozen) sector now has all the data from the currently active sector.
- // we can now delete the active sector.
- this._deleteActiveSector(sector);
-
- // we activate the previously active (and currently frozen) sector.
- this._activateSector(previousSector);
-
- // we load the references from the newly active sector into the global references
- this._switchToSector(previousSector);
-
- // we forget the previously active sector because we reverted to the one before
- this._forgetLastSector();
-
- // finally, we update the node index list.
- this._updateNodeIndexList();
-
- // we refresh the list with calulation nodes and calculation node indices.
- this._updateCalculationNodes();
+ exports._getSelectedNodeCount = function() {
+ var count = 0;
+ for (var nodeId in this.selectionObj.nodes) {
+ if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+ count += 1;
}
}
+ return count;
};
-
/**
- * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation().
+ * return the selected node
*
- * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors
- * | we dont pass the function itself because then the "this" is the window object
- * | instead of the Network object
- * @param {*} [argument] | Optional: arguments to pass to the runFunction
+ * @returns {number}
* @private
*/
- exports._doInAllActiveSectors = function(runFunction,argument) {
- if (argument === undefined) {
- for (var sector in this.sectors["active"]) {
- if (this.sectors["active"].hasOwnProperty(sector)) {
- // switch the global references to those of this sector
- this._switchToActiveSector(sector);
- this[runFunction]();
- }
- }
- }
- else {
- for (var sector in this.sectors["active"]) {
- if (this.sectors["active"].hasOwnProperty(sector)) {
- // switch the global references to those of this sector
- this._switchToActiveSector(sector);
- var args = Array.prototype.splice.call(arguments, 1);
- if (args.length > 1) {
- this[runFunction](args[0],args[1]);
- }
- else {
- this[runFunction](argument);
- }
- }
+ exports._getSelectedNode = function() {
+ for (var nodeId in this.selectionObj.nodes) {
+ if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+ return this.selectionObj.nodes[nodeId];
}
}
- // we revert the global references back to our active sector
- this._loadLatestSector();
+ return null;
};
-
/**
- * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation().
+ * return the selected edge
*
- * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors
- * | we dont pass the function itself because then the "this" is the window object
- * | instead of the Network object
- * @param {*} [argument] | Optional: arguments to pass to the runFunction
+ * @returns {number}
* @private
*/
- exports._doInSupportSector = function(runFunction,argument) {
- if (argument === undefined) {
- this._switchToSupportSector();
- this[runFunction]();
- }
- else {
- this._switchToSupportSector();
- var args = Array.prototype.splice.call(arguments, 1);
- if (args.length > 1) {
- this[runFunction](args[0],args[1]);
- }
- else {
- this[runFunction](argument);
+ exports._getSelectedEdge = function() {
+ for (var edgeId in this.selectionObj.edges) {
+ if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
+ return this.selectionObj.edges[edgeId];
}
}
- // we revert the global references back to our active sector
- this._loadLatestSector();
+ return null;
};
/**
- * This runs a function in all frozen sectors. This is used in the _redraw().
+ * return the number of selected edges
*
- * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors
- * | we don't pass the function itself because then the "this" is the window object
- * | instead of the Network object
- * @param {*} [argument] | Optional: arguments to pass to the runFunction
+ * @returns {number}
* @private
*/
- exports._doInAllFrozenSectors = function(runFunction,argument) {
- if (argument === undefined) {
- for (var sector in this.sectors["frozen"]) {
- if (this.sectors["frozen"].hasOwnProperty(sector)) {
- // switch the global references to those of this sector
- this._switchToFrozenSector(sector);
- this[runFunction]();
- }
- }
- }
- else {
- for (var sector in this.sectors["frozen"]) {
- if (this.sectors["frozen"].hasOwnProperty(sector)) {
- // switch the global references to those of this sector
- this._switchToFrozenSector(sector);
- var args = Array.prototype.splice.call(arguments, 1);
- if (args.length > 1) {
- this[runFunction](args[0],args[1]);
- }
- else {
- this[runFunction](argument);
- }
- }
+ exports._getSelectedEdgeCount = function() {
+ var count = 0;
+ for (var edgeId in this.selectionObj.edges) {
+ if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
+ count += 1;
}
}
- this._loadLatestSector();
+ return count;
};
/**
- * This runs a function in all sectors. This is used in the _redraw().
+ * return the number of selected objects.
*
- * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors
- * | we don't pass the function itself because then the "this" is the window object
- * | instead of the Network object
- * @param {*} [argument] | Optional: arguments to pass to the runFunction
+ * @returns {number}
* @private
*/
- exports._doInAllSectors = function(runFunction,argument) {
- var args = Array.prototype.splice.call(arguments, 1);
- if (argument === undefined) {
- this._doInAllActiveSectors(runFunction);
- this._doInAllFrozenSectors(runFunction);
- }
- else {
- if (args.length > 1) {
- this._doInAllActiveSectors(runFunction,args[0],args[1]);
- this._doInAllFrozenSectors(runFunction,args[0],args[1]);
+ exports._getSelectedObjectCount = function() {
+ var count = 0;
+ for(var nodeId in this.selectionObj.nodes) {
+ if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+ count += 1;
}
- else {
- this._doInAllActiveSectors(runFunction,argument);
- this._doInAllFrozenSectors(runFunction,argument);
+ }
+ for(var edgeId in this.selectionObj.edges) {
+ if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
+ count += 1;
}
}
+ return count;
};
-
/**
- * This clears the nodeIndices list. We cannot use this.nodeIndices = [] because we would break the link with the
- * active sector. Thus we clear the nodeIndices in the active sector, then reconnect the this.nodeIndices to it.
+ * Check if anything is selected
*
+ * @returns {boolean}
* @private
*/
- exports._clearNodeIndexList = function() {
- var sector = this._sector();
- this.sectors["active"][sector]["nodeIndices"] = [];
- this.nodeIndices = this.sectors["active"][sector]["nodeIndices"];
+ exports._selectionIsEmpty = function() {
+ for(var nodeId in this.selectionObj.nodes) {
+ if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+ return false;
+ }
+ }
+ for(var edgeId in this.selectionObj.edges) {
+ if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
+ return false;
+ }
+ }
+ return true;
};
/**
- * Draw the encompassing sector node
+ * check if one of the selected nodes is a cluster.
*
- * @param ctx
- * @param sectorType
+ * @returns {boolean}
* @private
*/
- exports._drawSectorNodes = function(ctx,sectorType) {
- var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node;
- for (var sector in this.sectors[sectorType]) {
- if (this.sectors[sectorType].hasOwnProperty(sector)) {
- if (this.sectors[sectorType][sector]["drawingNode"] !== undefined) {
-
- this._switchToSector(sector,sectorType);
-
- minY = 1e9; maxY = -1e9; minX = 1e9; maxX = -1e9;
- for (var nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- node = this.nodes[nodeId];
- node.resize(ctx);
- if (minX > node.x - 0.5 * node.width) {minX = node.x - 0.5 * node.width;}
- if (maxX < node.x + 0.5 * node.width) {maxX = node.x + 0.5 * node.width;}
- if (minY > node.y - 0.5 * node.height) {minY = node.y - 0.5 * node.height;}
- if (maxY < node.y + 0.5 * node.height) {maxY = node.y + 0.5 * node.height;}
- }
- }
- node = this.sectors[sectorType][sector]["drawingNode"];
- node.x = 0.5 * (maxX + minX);
- node.y = 0.5 * (maxY + minY);
- node.width = 2 * (node.x - minX);
- node.height = 2 * (node.y - minY);
- node.radius = Math.sqrt(Math.pow(0.5*node.width,2) + Math.pow(0.5*node.height,2));
- node.setScale(this.scale);
- node._drawCircle(ctx);
+ exports._clusterInSelection = function() {
+ for(var nodeId in this.selectionObj.nodes) {
+ if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+ if (this.selectionObj.nodes[nodeId].clusterSize > 1) {
+ return true;
}
}
}
+ return false;
};
- exports._drawAllSectorNodes = function(ctx) {
- this._drawSectorNodes(ctx,"frozen");
- this._drawSectorNodes(ctx,"active");
- this._loadLatestSector();
- };
-
-
-/***/ },
-/* 52 */
-/***/ function(module, exports, __webpack_require__) {
-
- var Node = __webpack_require__(36);
-
/**
- * This function can be called from the _doInAllSectors function
+ * select the edges connected to the node that is being selected
*
- * @param object
- * @param overlappingNodes
+ * @param {Node} node
* @private
*/
- exports._getNodesOverlappingWith = function(object, overlappingNodes) {
- var nodes = this.nodes;
- for (var nodeId in nodes) {
- if (nodes.hasOwnProperty(nodeId)) {
- if (nodes[nodeId].isOverlappingWith(object)) {
- overlappingNodes.push(nodeId);
- }
- }
+ exports._selectConnectedEdges = function(node) {
+ for (var i = 0; i < node.dynamicEdges.length; i++) {
+ var edge = node.dynamicEdges[i];
+ edge.select();
+ this._addToSelection(edge);
}
};
/**
- * retrieve all nodes overlapping with given object
- * @param {Object} object An object with parameters left, top, right, bottom
- * @return {Number[]} An array with id's of the overlapping nodes
+ * select the edges connected to the node that is being selected
+ *
+ * @param {Node} node
* @private
*/
- exports._getAllNodesOverlappingWith = function (object) {
- var overlappingNodes = [];
- this._doInAllActiveSectors("_getNodesOverlappingWith",object,overlappingNodes);
- return overlappingNodes;
+ exports._hoverConnectedEdges = function(node) {
+ for (var i = 0; i < node.dynamicEdges.length; i++) {
+ var edge = node.dynamicEdges[i];
+ edge.hover = true;
+ this._addToHover(edge);
+ }
};
/**
- * Return a position object in canvasspace from a single point in screenspace
+ * unselect the edges connected to the node that is being selected
*
- * @param pointer
- * @returns {{left: number, top: number, right: number, bottom: number}}
+ * @param {Node} node
* @private
*/
- exports._pointerToPositionObject = function(pointer) {
- var x = this._XconvertDOMtoCanvas(pointer.x);
- var y = this._YconvertDOMtoCanvas(pointer.y);
-
- return {
- left: x,
- top: y,
- right: x,
- bottom: y
- };
+ exports._unselectConnectedEdges = function(node) {
+ for (var i = 0; i < node.dynamicEdges.length; i++) {
+ var edge = node.dynamicEdges[i];
+ edge.unselect();
+ this._removeFromSelection(edge);
+ }
};
+
+
/**
- * Get the top node at the a specific point (like a click)
+ * This is called when someone clicks on a node. either select or deselect it.
+ * If there is an existing selection and we don't want to append to it, clear the existing selection
*
- * @param {{x: Number, y: Number}} pointer
- * @return {Node | null} node
+ * @param {Node || Edge} object
+ * @param {Boolean} append
+ * @param {Boolean} [doNotTrigger] | ignore trigger
* @private
*/
- exports._getNodeAt = function (pointer) {
- // we first check if this is an navigation controls element
- var positionObject = this._pointerToPositionObject(pointer);
- var overlappingNodes = this._getAllNodesOverlappingWith(positionObject);
+ exports._selectObject = function(object, append, doNotTrigger, highlightEdges) {
+ if (doNotTrigger === undefined) {
+ doNotTrigger = false;
+ }
+ if (highlightEdges === undefined) {
+ highlightEdges = true;
+ }
- // if there are overlapping nodes, select the last one, this is the
- // one which is drawn on top of the others
- if (overlappingNodes.length > 0) {
- return this.nodes[overlappingNodes[overlappingNodes.length - 1]];
+ if (this._selectionIsEmpty() == false && append == false && this.forceAppendSelection == false) {
+ this._unselectAll(true);
+ }
+
+ if (object.selected == false) {
+ object.select();
+ this._addToSelection(object);
+ if (object instanceof Node && this.blockConnectingEdgeSelection == false && highlightEdges == true) {
+ this._selectConnectedEdges(object);
+ }
}
else {
- return null;
+ object.unselect();
+ this._removeFromSelection(object);
+ }
+
+ if (doNotTrigger == false) {
+ this.emit('select', this.getSelection());
}
};
/**
- * retrieve all edges overlapping with given object, selector is around center
- * @param {Object} object An object with parameters left, top, right, bottom
- * @return {Number[]} An array with id's of the overlapping nodes
+ * This is called when someone clicks on a node. either select or deselect it.
+ * If there is an existing selection and we don't want to append to it, clear the existing selection
+ *
+ * @param {Node || Edge} object
* @private
*/
- exports._getEdgesOverlappingWith = function (object, overlappingEdges) {
- var edges = this.edges;
- for (var edgeId in edges) {
- if (edges.hasOwnProperty(edgeId)) {
- if (edges[edgeId].isOverlappingWith(object)) {
- overlappingEdges.push(edgeId);
- }
+ exports._blurObject = function(object) {
+ if (object.hover == true) {
+ object.hover = false;
+ this.emit("blurNode",{node:object.id});
+ }
+ };
+
+ /**
+ * This is called when someone clicks on a node. either select or deselect it.
+ * If there is an existing selection and we don't want to append to it, clear the existing selection
+ *
+ * @param {Node || Edge} object
+ * @private
+ */
+ exports._hoverObject = function(object) {
+ if (object.hover == false) {
+ object.hover = true;
+ this._addToHover(object);
+ if (object instanceof Node) {
+ this.emit("hoverNode",{node:object.id});
}
}
+ if (object instanceof Node) {
+ this._hoverConnectedEdges(object);
+ }
};
/**
- * retrieve all nodes overlapping with given object
- * @param {Object} object An object with parameters left, top, right, bottom
- * @return {Number[]} An array with id's of the overlapping nodes
+ * handles the selection part of the touch, only for navigation controls elements;
+ * Touch is triggered before tap, also before hold. Hold triggers after a while.
+ * This is the most responsive solution
+ *
+ * @param {Object} pointer
* @private
- */
- exports._getAllEdgesOverlappingWith = function (object) {
- var overlappingEdges = [];
- this._doInAllActiveSectors("_getEdgesOverlappingWith",object,overlappingEdges);
- return overlappingEdges;
+ */
+ exports._handleTouch = function(pointer) {
};
+
/**
- * Place holder. To implement change the _getNodeAt to a _getObjectAt. Have the _getObjectAt call
- * _getNodeAt and _getEdgesAt, then priortize the selection to user preferences.
+ * handles the selection part of the tap;
*
- * @param pointer
- * @returns {null}
+ * @param {Object} pointer
* @private
*/
- exports._getEdgeAt = function(pointer) {
- var positionObject = this._pointerToPositionObject(pointer);
- var overlappingEdges = this._getAllEdgesOverlappingWith(positionObject);
-
- if (overlappingEdges.length > 0) {
- return this.edges[overlappingEdges[overlappingEdges.length - 1]];
+ exports._handleTap = function(pointer) {
+ var node = this._getNodeAt(pointer);
+ if (node != null) {
+ this._selectObject(node,false);
}
else {
- return null;
+ var edge = this._getEdgeAt(pointer);
+ if (edge != null) {
+ this._selectObject(edge,false);
+ }
+ else {
+ this._unselectAll();
+ }
}
+ this.emit("click", this.getSelection());
+ this._redraw();
};
/**
- * Add object to the selection array.
+ * handles the selection part of the double tap and opens a cluster if needed
*
- * @param obj
+ * @param {Object} pointer
* @private
*/
- exports._addToSelection = function(obj) {
- if (obj instanceof Node) {
- this.selectionObj.nodes[obj.id] = obj;
- }
- else {
- this.selectionObj.edges[obj.id] = obj;
+ exports._handleDoubleTap = function(pointer) {
+ var node = this._getNodeAt(pointer);
+ if (node != null && node !== undefined) {
+ // we reset the areaCenter here so the opening of the node will occur
+ this.areaCenter = {"x" : this._XconvertDOMtoCanvas(pointer.x),
+ "y" : this._YconvertDOMtoCanvas(pointer.y)};
+ this.openCluster(node);
}
+ this.emit("doubleClick", this.getSelection());
};
+
/**
- * Add object to the selection array.
+ * Handle the onHold selection part
*
- * @param obj
+ * @param pointer
* @private
*/
- exports._addToHover = function(obj) {
- if (obj instanceof Node) {
- this.hoverObj.nodes[obj.id] = obj;
+ exports._handleOnHold = function(pointer) {
+ var node = this._getNodeAt(pointer);
+ if (node != null) {
+ this._selectObject(node,true);
}
else {
- this.hoverObj.edges[obj.id] = obj;
+ var edge = this._getEdgeAt(pointer);
+ if (edge != null) {
+ this._selectObject(edge,true);
+ }
}
+ this._redraw();
};
/**
- * Remove a single option from selection.
+ * handle the onRelease event. These functions are here for the navigation controls module.
*
- * @param {Object} obj
- * @private
+ * @private
*/
- exports._removeFromSelection = function(obj) {
- if (obj instanceof Node) {
- delete this.selectionObj.nodes[obj.id];
- }
- else {
- delete this.selectionObj.edges[obj.id];
- }
+ exports._handleOnRelease = function(pointer) {
+
};
+
+
/**
- * Unselect all. The selectionObj is useful for this.
*
- * @param {Boolean} [doNotTrigger] | ignore trigger
- * @private
+ * retrieve the currently selected objects
+ * @return {{nodes: Array., edges: Array.}} selection
*/
- exports._unselectAll = function(doNotTrigger) {
- if (doNotTrigger === undefined) {
- doNotTrigger = false;
- }
+ exports.getSelection = function() {
+ var nodeIds = this.getSelectedNodes();
+ var edgeIds = this.getSelectedEdges();
+ return {nodes:nodeIds, edges:edgeIds};
+ };
+
+ /**
+ *
+ * retrieve the currently selected nodes
+ * @return {String[]} selection An array with the ids of the
+ * selected nodes.
+ */
+ exports.getSelectedNodes = function() {
+ var idArray = [];
for(var nodeId in this.selectionObj.nodes) {
if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
- this.selectionObj.nodes[nodeId].unselect();
+ idArray.push(nodeId);
}
}
+ return idArray
+ };
+
+ /**
+ *
+ * retrieve the currently selected edges
+ * @return {Array} selection An array with the ids of the
+ * selected nodes.
+ */
+ exports.getSelectedEdges = function() {
+ var idArray = [];
for(var edgeId in this.selectionObj.edges) {
if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
- this.selectionObj.edges[edgeId].unselect();
+ idArray.push(edgeId);
}
}
+ return idArray;
+ };
- this.selectionObj = {nodes:{},edges:{}};
- if (doNotTrigger == false) {
- this.emit('select', this.getSelection());
+ /**
+ * select zero or more nodes
+ * @param {Number[] | String[]} selection An array with the ids of the
+ * selected nodes.
+ */
+ exports.setSelection = function(selection) {
+ var i, iMax, id;
+
+ if (!selection || (selection.length == undefined))
+ throw 'Selection must be an array with ids';
+
+ // first unselect any selected node
+ this._unselectAll(true);
+
+ for (i = 0, iMax = selection.length; i < iMax; i++) {
+ id = selection[i];
+
+ var node = this.nodes[id];
+ if (!node) {
+ throw new RangeError('Node with id "' + id + '" not found');
+ }
+ this._selectObject(node,true,true);
}
+
+ console.log("setSelection is deprecated. Please use selectNodes instead.")
+
+ this.redraw();
};
+
/**
- * Unselect all clusters. The selectionObj is useful for this.
- *
- * @param {Boolean} [doNotTrigger] | ignore trigger
- * @private
+ * select zero or more nodes with the option to highlight edges
+ * @param {Number[] | String[]} selection An array with the ids of the
+ * selected nodes.
+ * @param {boolean} [highlightEdges]
*/
- exports._unselectClusters = function(doNotTrigger) {
- if (doNotTrigger === undefined) {
- doNotTrigger = false;
- }
+ exports.selectNodes = function(selection, highlightEdges) {
+ var i, iMax, id;
- for (var nodeId in this.selectionObj.nodes) {
- if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
- if (this.selectionObj.nodes[nodeId].clusterSize > 1) {
- this.selectionObj.nodes[nodeId].unselect();
- this._removeFromSelection(this.selectionObj.nodes[nodeId]);
- }
+ if (!selection || (selection.length == undefined))
+ throw 'Selection must be an array with ids';
+
+ // first unselect any selected node
+ this._unselectAll(true);
+
+ for (i = 0, iMax = selection.length; i < iMax; i++) {
+ id = selection[i];
+
+ var node = this.nodes[id];
+ if (!node) {
+ throw new RangeError('Node with id "' + id + '" not found');
}
+ this._selectObject(node,true,true,highlightEdges);
}
+ this.redraw();
+ };
- if (doNotTrigger == false) {
- this.emit('select', this.getSelection());
+
+ /**
+ * select zero or more edges
+ * @param {Number[] | String[]} selection An array with the ids of the
+ * selected nodes.
+ */
+ exports.selectEdges = function(selection) {
+ var i, iMax, id;
+
+ if (!selection || (selection.length == undefined))
+ throw 'Selection must be an array with ids';
+
+ // first unselect any selected node
+ this._unselectAll(true);
+
+ for (i = 0, iMax = selection.length; i < iMax; i++) {
+ id = selection[i];
+
+ var edge = this.edges[id];
+ if (!edge) {
+ throw new RangeError('Edge with id "' + id + '" not found');
+ }
+ this._selectObject(edge,true,true,highlightEdges);
}
+ this.redraw();
};
-
/**
- * return the number of selected nodes
- *
- * @returns {number}
+ * Validate the selection: remove ids of nodes which no longer exist
* @private
*/
- exports._getSelectedNodeCount = function() {
- var count = 0;
- for (var nodeId in this.selectionObj.nodes) {
- if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
- count += 1;
+ exports._updateSelection = function () {
+ for(var nodeId in this.selectionObj.nodes) {
+ if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+ if (!this.nodes.hasOwnProperty(nodeId)) {
+ delete this.selectionObj.nodes[nodeId];
+ }
+ }
+ }
+ for(var edgeId in this.selectionObj.edges) {
+ if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
+ if (!this.edges.hasOwnProperty(edgeId)) {
+ delete this.selectionObj.edges[edgeId];
+ }
}
}
- return count;
};
+
+/***/ },
+/* 52 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var util = __webpack_require__(1);
+ var Node = __webpack_require__(36);
+ var Edge = __webpack_require__(33);
+
/**
- * return the selected node
+ * clears the toolbar div element of children
*
- * @returns {number}
* @private
*/
- exports._getSelectedNode = function() {
- for (var nodeId in this.selectionObj.nodes) {
- if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
- return this.selectionObj.nodes[nodeId];
- }
+ exports._clearManipulatorBar = function() {
+ while (this.manipulationDiv.hasChildNodes()) {
+ this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);
}
- return null;
};
/**
- * return the selected edge
+ * Manipulation UI temporarily overloads certain functions to extend or replace them. To be able to restore
+ * these functions to their original functionality, we saved them in this.cachedFunctions.
+ * This function restores these functions to their original function.
*
- * @returns {number}
* @private
*/
- exports._getSelectedEdge = function() {
- for (var edgeId in this.selectionObj.edges) {
- if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
- return this.selectionObj.edges[edgeId];
+ exports._restoreOverloadedFunctions = function() {
+ for (var functionName in this.cachedFunctions) {
+ if (this.cachedFunctions.hasOwnProperty(functionName)) {
+ this[functionName] = this.cachedFunctions[functionName];
}
}
- return null;
};
-
/**
- * return the number of selected edges
+ * Enable or disable edit-mode.
*
- * @returns {number}
* @private
*/
- exports._getSelectedEdgeCount = function() {
- var count = 0;
- for (var edgeId in this.selectionObj.edges) {
- if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
- count += 1;
- }
+ exports._toggleEditMode = function() {
+ this.editMode = !this.editMode;
+ var toolbar = document.getElementById("network-manipulationDiv");
+ var closeDiv = document.getElementById("network-manipulation-closeDiv");
+ var editModeDiv = document.getElementById("network-manipulation-editMode");
+ if (this.editMode == true) {
+ toolbar.style.display="block";
+ closeDiv.style.display="block";
+ editModeDiv.style.display="none";
+ closeDiv.onclick = this._toggleEditMode.bind(this);
}
- return count;
+ else {
+ toolbar.style.display="none";
+ closeDiv.style.display="none";
+ editModeDiv.style.display="block";
+ closeDiv.onclick = null;
+ }
+ this._createManipulatorBar()
};
-
/**
- * return the number of selected objects.
+ * main function, creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar.
*
- * @returns {number}
* @private
*/
- exports._getSelectedObjectCount = function() {
- var count = 0;
- for(var nodeId in this.selectionObj.nodes) {
- if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
- count += 1;
- }
+ exports._createManipulatorBar = function() {
+ // remove bound functions
+ if (this.boundFunction) {
+ this.off('select', this.boundFunction);
}
- for(var edgeId in this.selectionObj.edges) {
- if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
- count += 1;
+
+ if (this.edgeBeingEdited !== undefined) {
+ this.edgeBeingEdited._disableControlNodes();
+ this.edgeBeingEdited = undefined;
+ this.selectedControlNode = null;
+ this.controlNodesActive = false;
+ }
+
+ // restore overloaded functions
+ this._restoreOverloadedFunctions();
+
+ // resume calculation
+ this.freezeSimulation = false;
+
+ // reset global variables
+ this.blockConnectingEdgeSelection = false;
+ this.forceAppendSelection = false;
+
+ if (this.editMode == true) {
+ while (this.manipulationDiv.hasChildNodes()) {
+ this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);
+ }
+ // add the icons to the manipulator div
+ this.manipulationDiv.innerHTML = "" +
+ "" +
+ ""+this.constants.labels['add'] +"" +
+ "" +
+ "" +
+ ""+this.constants.labels['link'] +"";
+ if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) {
+ this.manipulationDiv.innerHTML += "" +
+ "" +
+ "" +
+ ""+this.constants.labels['editNode'] +"";
+ }
+ else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) {
+ this.manipulationDiv.innerHTML += "" +
+ "" +
+ "" +
+ ""+this.constants.labels['editEdge'] +"";
+ }
+ if (this._selectionIsEmpty() == false) {
+ this.manipulationDiv.innerHTML += "" +
+ "" +
+ "" +
+ ""+this.constants.labels['del'] +"";
+ }
+
+
+ // bind the icons
+ var addNodeButton = document.getElementById("network-manipulate-addNode");
+ addNodeButton.onclick = this._createAddNodeToolbar.bind(this);
+ var addEdgeButton = document.getElementById("network-manipulate-connectNode");
+ addEdgeButton.onclick = this._createAddEdgeToolbar.bind(this);
+ if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) {
+ var editButton = document.getElementById("network-manipulate-editNode");
+ editButton.onclick = this._editNode.bind(this);
+ }
+ else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) {
+ var editButton = document.getElementById("network-manipulate-editEdge");
+ editButton.onclick = this._createEditEdgeToolbar.bind(this);
+ }
+ if (this._selectionIsEmpty() == false) {
+ var deleteButton = document.getElementById("network-manipulate-delete");
+ deleteButton.onclick = this._deleteSelected.bind(this);
}
+ var closeDiv = document.getElementById("network-manipulation-closeDiv");
+ closeDiv.onclick = this._toggleEditMode.bind(this);
+
+ this.boundFunction = this._createManipulatorBar.bind(this);
+ this.on('select', this.boundFunction);
+ }
+ else {
+ this.editModeDiv.innerHTML = "" +
+ "" +
+ "" + this.constants.labels['edit'] + "";
+ var editModeButton = document.getElementById("network-manipulate-editModeButton");
+ editModeButton.onclick = this._toggleEditMode.bind(this);
}
- return count;
};
+
+
/**
- * Check if anything is selected
+ * Create the toolbar for adding Nodes
*
- * @returns {boolean}
* @private
*/
- exports._selectionIsEmpty = function() {
- for(var nodeId in this.selectionObj.nodes) {
- if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
- return false;
- }
- }
- for(var edgeId in this.selectionObj.edges) {
- if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
- return false;
- }
+ exports._createAddNodeToolbar = function() {
+ // clear the toolbar
+ this._clearManipulatorBar();
+ if (this.boundFunction) {
+ this.off('select', this.boundFunction);
}
- return true;
+
+ // create the toolbar contents
+ this.manipulationDiv.innerHTML = "" +
+ "" +
+ "" + this.constants.labels['back'] + " " +
+ "" +
+ "" +
+ "" + this.constants.labels['addDescription'] + "";
+
+ // bind the icon
+ var backButton = document.getElementById("network-manipulate-back");
+ backButton.onclick = this._createManipulatorBar.bind(this);
+
+ // we use the boundFunction so we can reference it when we unbind it from the "select" event.
+ this.boundFunction = this._addNode.bind(this);
+ this.on('select', this.boundFunction);
};
/**
- * check if one of the selected nodes is a cluster.
+ * create the toolbar to connect nodes
*
- * @returns {boolean}
* @private
*/
- exports._clusterInSelection = function() {
- for(var nodeId in this.selectionObj.nodes) {
- if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
- if (this.selectionObj.nodes[nodeId].clusterSize > 1) {
- return true;
- }
- }
+ exports._createAddEdgeToolbar = function() {
+ // clear the toolbar
+ this._clearManipulatorBar();
+ this._unselectAll(true);
+ this.freezeSimulation = true;
+
+ if (this.boundFunction) {
+ this.off('select', this.boundFunction);
}
- return false;
+
+ this._unselectAll();
+ this.forceAppendSelection = false;
+ this.blockConnectingEdgeSelection = true;
+
+ this.manipulationDiv.innerHTML = "" +
+ "" +
+ "" + this.constants.labels['back'] + " " +
+ "" +
+ "" +
+ "" + this.constants.labels['linkDescription'] + "";
+
+ // bind the icon
+ var backButton = document.getElementById("network-manipulate-back");
+ backButton.onclick = this._createManipulatorBar.bind(this);
+
+ // we use the boundFunction so we can reference it when we unbind it from the "select" event.
+ this.boundFunction = this._handleConnect.bind(this);
+ this.on('select', this.boundFunction);
+
+ // temporarily overload functions
+ this.cachedFunctions["_handleTouch"] = this._handleTouch;
+ this.cachedFunctions["_handleOnRelease"] = this._handleOnRelease;
+ this._handleTouch = this._handleConnect;
+ this._handleOnRelease = this._finishConnect;
+
+ // redraw to show the unselect
+ this._redraw();
};
/**
- * select the edges connected to the node that is being selected
+ * create the toolbar to edit edges
*
- * @param {Node} node
* @private
*/
- exports._selectConnectedEdges = function(node) {
- for (var i = 0; i < node.dynamicEdges.length; i++) {
- var edge = node.dynamicEdges[i];
- edge.select();
- this._addToSelection(edge);
+ exports._createEditEdgeToolbar = function() {
+ // clear the toolbar
+ this._clearManipulatorBar();
+ this.controlNodesActive = true;
+
+ if (this.boundFunction) {
+ this.off('select', this.boundFunction);
}
- };
- /**
- * select the edges connected to the node that is being selected
- *
- * @param {Node} node
- * @private
- */
- exports._hoverConnectedEdges = function(node) {
- for (var i = 0; i < node.dynamicEdges.length; i++) {
- var edge = node.dynamicEdges[i];
- edge.hover = true;
- this._addToHover(edge);
- }
+ this.edgeBeingEdited = this._getSelectedEdge();
+ this.edgeBeingEdited._enableControlNodes();
+
+ this.manipulationDiv.innerHTML = "" +
+ "" +
+ "" + this.constants.labels['back'] + " " +
+ "" +
+ "" +
+ "" + this.constants.labels['editEdgeDescription'] + "";
+
+ // bind the icon
+ var backButton = document.getElementById("network-manipulate-back");
+ backButton.onclick = this._createManipulatorBar.bind(this);
+
+ // temporarily overload functions
+ this.cachedFunctions["_handleTouch"] = this._handleTouch;
+ this.cachedFunctions["_handleOnRelease"] = this._handleOnRelease;
+ this.cachedFunctions["_handleTap"] = this._handleTap;
+ this.cachedFunctions["_handleDragStart"] = this._handleDragStart;
+ this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag;
+ this._handleTouch = this._selectControlNode;
+ this._handleTap = function () {};
+ this._handleOnDrag = this._controlNodeDrag;
+ this._handleDragStart = function () {}
+ this._handleOnRelease = this._releaseControlNode;
+
+ // redraw to show the unselect
+ this._redraw();
};
+
+
+
/**
- * unselect the edges connected to the node that is being selected
+ * the function bound to the selection event. It checks if you want to connect a cluster and changes the description
+ * to walk the user through the process.
*
- * @param {Node} node
* @private
*/
- exports._unselectConnectedEdges = function(node) {
- for (var i = 0; i < node.dynamicEdges.length; i++) {
- var edge = node.dynamicEdges[i];
- edge.unselect();
- this._removeFromSelection(edge);
+ exports._selectControlNode = function(pointer) {
+ this.edgeBeingEdited.controlNodes.from.unselect();
+ this.edgeBeingEdited.controlNodes.to.unselect();
+ this.selectedControlNode = this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(pointer.x),this._YconvertDOMtoCanvas(pointer.y));
+ if (this.selectedControlNode !== null) {
+ this.selectedControlNode.select();
+ this.freezeSimulation = true;
}
+ this._redraw();
};
-
-
-
/**
- * This is called when someone clicks on a node. either select or deselect it.
- * If there is an existing selection and we don't want to append to it, clear the existing selection
+ * the function bound to the selection event. It checks if you want to connect a cluster and changes the description
+ * to walk the user through the process.
*
- * @param {Node || Edge} object
- * @param {Boolean} append
- * @param {Boolean} [doNotTrigger] | ignore trigger
* @private
*/
- exports._selectObject = function(object, append, doNotTrigger, highlightEdges) {
- if (doNotTrigger === undefined) {
- doNotTrigger = false;
- }
- if (highlightEdges === undefined) {
- highlightEdges = true;
- }
-
- if (this._selectionIsEmpty() == false && append == false && this.forceAppendSelection == false) {
- this._unselectAll(true);
+ exports._controlNodeDrag = function(event) {
+ var pointer = this._getPointer(event.gesture.center);
+ if (this.selectedControlNode !== null && this.selectedControlNode !== undefined) {
+ this.selectedControlNode.x = this._XconvertDOMtoCanvas(pointer.x);
+ this.selectedControlNode.y = this._YconvertDOMtoCanvas(pointer.y);
}
+ this._redraw();
+ };
- if (object.selected == false) {
- object.select();
- this._addToSelection(object);
- if (object instanceof Node && this.blockConnectingEdgeSelection == false && highlightEdges == true) {
- this._selectConnectedEdges(object);
+ exports._releaseControlNode = function(pointer) {
+ var newNode = this._getNodeAt(pointer);
+ if (newNode != null) {
+ if (this.edgeBeingEdited.controlNodes.from.selected == true) {
+ this._editEdge(newNode.id, this.edgeBeingEdited.to.id);
+ this.edgeBeingEdited.controlNodes.from.unselect();
+ }
+ if (this.edgeBeingEdited.controlNodes.to.selected == true) {
+ this._editEdge(this.edgeBeingEdited.from.id, newNode.id);
+ this.edgeBeingEdited.controlNodes.to.unselect();
}
}
else {
- object.unselect();
- this._removeFromSelection(object);
- }
-
- if (doNotTrigger == false) {
- this.emit('select', this.getSelection());
+ this.edgeBeingEdited._restoreControlNodes();
}
+ this.freezeSimulation = false;
+ this._redraw();
};
-
/**
- * This is called when someone clicks on a node. either select or deselect it.
- * If there is an existing selection and we don't want to append to it, clear the existing selection
+ * the function bound to the selection event. It checks if you want to connect a cluster and changes the description
+ * to walk the user through the process.
*
- * @param {Node || Edge} object
* @private
*/
- exports._blurObject = function(object) {
- if (object.hover == true) {
- object.hover = false;
- this.emit("blurNode",{node:object.id});
+ exports._handleConnect = function(pointer) {
+ if (this._getSelectedNodeCount() == 0) {
+ var node = this._getNodeAt(pointer);
+ if (node != null) {
+ if (node.clusterSize > 1) {
+ alert("Cannot create edges to a cluster.")
+ }
+ else {
+ this._selectObject(node,false);
+ // create a node the temporary line can look at
+ this.sectors['support']['nodes']['targetNode'] = new Node({id:'targetNode'},{},{},this.constants);
+ this.sectors['support']['nodes']['targetNode'].x = node.x;
+ this.sectors['support']['nodes']['targetNode'].y = node.y;
+ this.sectors['support']['nodes']['targetViaNode'] = new Node({id:'targetViaNode'},{},{},this.constants);
+ this.sectors['support']['nodes']['targetViaNode'].x = node.x;
+ this.sectors['support']['nodes']['targetViaNode'].y = node.y;
+ this.sectors['support']['nodes']['targetViaNode'].parentEdgeId = "connectionEdge";
+
+ // create a temporary edge
+ this.edges['connectionEdge'] = new Edge({id:"connectionEdge",from:node.id,to:this.sectors['support']['nodes']['targetNode'].id}, this, this.constants);
+ this.edges['connectionEdge'].from = node;
+ this.edges['connectionEdge'].connected = true;
+ this.edges['connectionEdge'].smooth = true;
+ this.edges['connectionEdge'].selected = true;
+ this.edges['connectionEdge'].to = this.sectors['support']['nodes']['targetNode'];
+ this.edges['connectionEdge'].via = this.sectors['support']['nodes']['targetViaNode'];
+
+ this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag;
+ this._handleOnDrag = function(event) {
+ var pointer = this._getPointer(event.gesture.center);
+ this.sectors['support']['nodes']['targetNode'].x = this._XconvertDOMtoCanvas(pointer.x);
+ this.sectors['support']['nodes']['targetNode'].y = this._YconvertDOMtoCanvas(pointer.y);
+ this.sectors['support']['nodes']['targetViaNode'].x = 0.5 * (this._XconvertDOMtoCanvas(pointer.x) + this.edges['connectionEdge'].from.x);
+ this.sectors['support']['nodes']['targetViaNode'].y = this._YconvertDOMtoCanvas(pointer.y);
+ };
+
+ this.moving = true;
+ this.start();
+ }
+ }
}
};
- /**
- * This is called when someone clicks on a node. either select or deselect it.
- * If there is an existing selection and we don't want to append to it, clear the existing selection
- *
- * @param {Node || Edge} object
- * @private
- */
- exports._hoverObject = function(object) {
- if (object.hover == false) {
- object.hover = true;
- this._addToHover(object);
- if (object instanceof Node) {
- this.emit("hoverNode",{node:object.id});
+ exports._finishConnect = function(pointer) {
+ if (this._getSelectedNodeCount() == 1) {
+
+ // restore the drag function
+ this._handleOnDrag = this.cachedFunctions["_handleOnDrag"];
+ delete this.cachedFunctions["_handleOnDrag"];
+
+ // remember the edge id
+ var connectFromId = this.edges['connectionEdge'].fromId;
+
+ // remove the temporary nodes and edge
+ delete this.edges['connectionEdge'];
+ delete this.sectors['support']['nodes']['targetNode'];
+ delete this.sectors['support']['nodes']['targetViaNode'];
+
+ var node = this._getNodeAt(pointer);
+ if (node != null) {
+ if (node.clusterSize > 1) {
+ alert("Cannot create edges to a cluster.")
+ }
+ else {
+ this._createEdge(connectFromId,node.id);
+ this._createManipulatorBar();
+ }
}
- }
- if (object instanceof Node) {
- this._hoverConnectedEdges(object);
+ this._unselectAll();
}
};
/**
- * handles the selection part of the touch, only for navigation controls elements;
- * Touch is triggered before tap, also before hold. Hold triggers after a while.
- * This is the most responsive solution
- *
- * @param {Object} pointer
- * @private
+ * Adds a node on the specified location
*/
- exports._handleTouch = function(pointer) {
+ exports._addNode = function() {
+ if (this._selectionIsEmpty() && this.editMode == true) {
+ var positionObject = this._pointerToPositionObject(this.pointerPosition);
+ var defaultData = {id:util.randomUUID(),x:positionObject.left,y:positionObject.top,label:"new",allowedToMoveX:true,allowedToMoveY:true};
+ if (this.triggerFunctions.add) {
+ if (this.triggerFunctions.add.length == 2) {
+ var me = this;
+ this.triggerFunctions.add(defaultData, function(finalizedData) {
+ me.nodesData.add(finalizedData);
+ me._createManipulatorBar();
+ me.moving = true;
+ me.start();
+ });
+ }
+ else {
+ alert(this.constants.labels['addError']);
+ this._createManipulatorBar();
+ this.moving = true;
+ this.start();
+ }
+ }
+ else {
+ this.nodesData.add(defaultData);
+ this._createManipulatorBar();
+ this.moving = true;
+ this.start();
+ }
+ }
};
/**
- * handles the selection part of the tap;
+ * connect two nodes with a new edge.
*
- * @param {Object} pointer
* @private
*/
- exports._handleTap = function(pointer) {
- var node = this._getNodeAt(pointer);
- if (node != null) {
- this._selectObject(node,false);
- }
- else {
- var edge = this._getEdgeAt(pointer);
- if (edge != null) {
- this._selectObject(edge,false);
+ exports._createEdge = function(sourceNodeId,targetNodeId) {
+ if (this.editMode == true) {
+ var defaultData = {from:sourceNodeId, to:targetNodeId};
+ if (this.triggerFunctions.connect) {
+ if (this.triggerFunctions.connect.length == 2) {
+ var me = this;
+ this.triggerFunctions.connect(defaultData, function(finalizedData) {
+ me.edgesData.add(finalizedData);
+ me.moving = true;
+ me.start();
+ });
+ }
+ else {
+ alert(this.constants.labels["linkError"]);
+ this.moving = true;
+ this.start();
+ }
}
else {
- this._unselectAll();
+ this.edgesData.add(defaultData);
+ this.moving = true;
+ this.start();
}
- }
- this.emit("click", this.getSelection());
- this._redraw();
+ }
};
-
/**
- * handles the selection part of the double tap and opens a cluster if needed
+ * connect two nodes with a new edge.
*
- * @param {Object} pointer
* @private
*/
- exports._handleDoubleTap = function(pointer) {
- var node = this._getNodeAt(pointer);
- if (node != null && node !== undefined) {
- // we reset the areaCenter here so the opening of the node will occur
- this.areaCenter = {"x" : this._XconvertDOMtoCanvas(pointer.x),
- "y" : this._YconvertDOMtoCanvas(pointer.y)};
- this.openCluster(node);
+ exports._editEdge = function(sourceNodeId,targetNodeId) {
+ if (this.editMode == true) {
+ var defaultData = {id: this.edgeBeingEdited.id, from:sourceNodeId, to:targetNodeId};
+ if (this.triggerFunctions.editEdge) {
+ if (this.triggerFunctions.editEdge.length == 2) {
+ var me = this;
+ this.triggerFunctions.editEdge(defaultData, function(finalizedData) {
+ me.edgesData.update(finalizedData);
+ me.moving = true;
+ me.start();
+ });
+ }
+ else {
+ alert(this.constants.labels["linkError"]);
+ this.moving = true;
+ this.start();
+ }
+ }
+ else {
+ this.edgesData.update(defaultData);
+ this.moving = true;
+ this.start();
+ }
}
- this.emit("doubleClick", this.getSelection());
};
-
/**
- * Handle the onHold selection part
+ * Create the toolbar to edit the selected node. The label and the color can be changed. Other colors are derived from the chosen color.
*
- * @param pointer
* @private
*/
- exports._handleOnHold = function(pointer) {
- var node = this._getNodeAt(pointer);
- if (node != null) {
- this._selectObject(node,true);
+ exports._editNode = function() {
+ if (this.triggerFunctions.edit && this.editMode == true) {
+ var node = this._getSelectedNode();
+ var data = {id:node.id,
+ label: node.label,
+ group: node.group,
+ shape: node.shape,
+ color: {
+ background:node.color.background,
+ border:node.color.border,
+ highlight: {
+ background:node.color.highlight.background,
+ border:node.color.highlight.border
+ }
+ }};
+ if (this.triggerFunctions.edit.length == 2) {
+ var me = this;
+ this.triggerFunctions.edit(data, function (finalizedData) {
+ me.nodesData.update(finalizedData);
+ me._createManipulatorBar();
+ me.moving = true;
+ me.start();
+ });
+ }
+ else {
+ alert(this.constants.labels["editError"]);
+ }
}
else {
- var edge = this._getEdgeAt(pointer);
- if (edge != null) {
- this._selectObject(edge,true);
- }
+ alert(this.constants.labels["editBoundError"]);
}
- this._redraw();
};
+
+
/**
- * handle the onRelease event. These functions are here for the navigation controls module.
+ * delete everything in the selection
*
- * @private
+ * @private
*/
- exports._handleOnRelease = function(pointer) {
-
+ exports._deleteSelected = function() {
+ if (!this._selectionIsEmpty() && this.editMode == true) {
+ if (!this._clusterInSelection()) {
+ var selectedNodes = this.getSelectedNodes();
+ var selectedEdges = this.getSelectedEdges();
+ if (this.triggerFunctions.del) {
+ var me = this;
+ var data = {nodes: selectedNodes, edges: selectedEdges};
+ if (this.triggerFunctions.del.length = 2) {
+ this.triggerFunctions.del(data, function (finalizedData) {
+ me.edgesData.remove(finalizedData.edges);
+ me.nodesData.remove(finalizedData.nodes);
+ me._unselectAll();
+ me.moving = true;
+ me.start();
+ });
+ }
+ else {
+ alert(this.constants.labels["deleteError"])
+ }
+ }
+ else {
+ this.edgesData.remove(selectedEdges);
+ this.nodesData.remove(selectedNodes);
+ this._unselectAll();
+ this.moving = true;
+ this.start();
+ }
+ }
+ else {
+ alert(this.constants.labels["deleteClusterError"]);
+ }
+ }
};
+/***/ },
+/* 53 */
+/***/ function(module, exports, __webpack_require__) {
- /**
- *
- * retrieve the currently selected objects
- * @return {{nodes: Array., edges: Array.}} selection
- */
- exports.getSelection = function() {
- var nodeIds = this.getSelectedNodes();
- var edgeIds = this.getSelectedEdges();
- return {nodes:nodeIds, edges:edgeIds};
+ var util = __webpack_require__(1);
+
+ exports._cleanNavigation = function() {
+ // clean up previous navigation items
+ var wrapper = document.getElementById('network-navigation_wrapper');
+ if (wrapper != null) {
+ this.containerElement.removeChild(wrapper);
+ }
+ document.onmouseup = null;
};
/**
+ * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation
+ * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent
+ * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false.
+ * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas.
*
- * retrieve the currently selected nodes
- * @return {String[]} selection An array with the ids of the
- * selected nodes.
+ * @private
*/
- exports.getSelectedNodes = function() {
- var idArray = [];
- for(var nodeId in this.selectionObj.nodes) {
- if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
- idArray.push(nodeId);
- }
+ exports._loadNavigationElements = function() {
+ this._cleanNavigation();
+
+ this.navigationDivs = {};
+ var navigationDivs = ['up','down','left','right','zoomIn','zoomOut','zoomExtends'];
+ var navigationDivActions = ['_moveUp','_moveDown','_moveLeft','_moveRight','_zoomIn','_zoomOut','zoomExtent'];
+
+ this.navigationDivs['wrapper'] = document.createElement('div');
+ this.navigationDivs['wrapper'].id = "network-navigation_wrapper";
+ this.navigationDivs['wrapper'].style.position = "absolute";
+ this.navigationDivs['wrapper'].style.width = this.frame.canvas.clientWidth + "px";
+ this.navigationDivs['wrapper'].style.height = this.frame.canvas.clientHeight + "px";
+ this.containerElement.insertBefore(this.navigationDivs['wrapper'],this.frame);
+
+ for (var i = 0; i < navigationDivs.length; i++) {
+ this.navigationDivs[navigationDivs[i]] = document.createElement('div');
+ this.navigationDivs[navigationDivs[i]].id = "network-navigation_" + navigationDivs[i];
+ this.navigationDivs[navigationDivs[i]].className = "network-navigation " + navigationDivs[i];
+ this.navigationDivs['wrapper'].appendChild(this.navigationDivs[navigationDivs[i]]);
+ this.navigationDivs[navigationDivs[i]].onmousedown = this[navigationDivActions[i]].bind(this);
}
- return idArray
+
+ document.onmouseup = this._stopMovement.bind(this);
};
/**
+ * this stops all movement induced by the navigation buttons
*
- * retrieve the currently selected edges
- * @return {Array} selection An array with the ids of the
- * selected nodes.
+ * @private
*/
- exports.getSelectedEdges = function() {
- var idArray = [];
- for(var edgeId in this.selectionObj.edges) {
- if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
- idArray.push(edgeId);
- }
- }
- return idArray;
+ exports._stopMovement = function() {
+ this._xStopMoving();
+ this._yStopMoving();
+ this._stopZoom();
};
/**
- * select zero or more nodes
- * @param {Number[] | String[]} selection An array with the ids of the
- * selected nodes.
+ * move the screen up
+ * By using the increments, instead of adding a fixed number to the translation, we keep fluent and
+ * instant movement. The onKeypress event triggers immediately, then pauses, then triggers frequently
+ * To avoid this behaviour, we do the translation in the start loop.
+ *
+ * @private
*/
- exports.setSelection = function(selection) {
- var i, iMax, id;
-
- if (!selection || (selection.length == undefined))
- throw 'Selection must be an array with ids';
-
- // first unselect any selected node
- this._unselectAll(true);
-
- for (i = 0, iMax = selection.length; i < iMax; i++) {
- id = selection[i];
-
- var node = this.nodes[id];
- if (!node) {
- throw new RangeError('Node with id "' + id + '" not found');
- }
- this._selectObject(node,true,true);
+ exports._moveUp = function(event) {
+ this.yIncrement = this.constants.keyboard.speed.y;
+ this.start(); // if there is no node movement, the calculation wont be done
+ util.preventDefault(event);
+ if (this.navigationDivs) {
+ this.navigationDivs['up'].className += " active";
}
-
- console.log("setSelection is deprecated. Please use selectNodes instead.")
-
- this.redraw();
};
/**
- * select zero or more nodes with the option to highlight edges
- * @param {Number[] | String[]} selection An array with the ids of the
- * selected nodes.
- * @param {boolean} [highlightEdges]
+ * move the screen down
+ * @private
*/
- exports.selectNodes = function(selection, highlightEdges) {
- var i, iMax, id;
-
- if (!selection || (selection.length == undefined))
- throw 'Selection must be an array with ids';
-
- // first unselect any selected node
- this._unselectAll(true);
-
- for (i = 0, iMax = selection.length; i < iMax; i++) {
- id = selection[i];
-
- var node = this.nodes[id];
- if (!node) {
- throw new RangeError('Node with id "' + id + '" not found');
- }
- this._selectObject(node,true,true,highlightEdges);
+ exports._moveDown = function(event) {
+ this.yIncrement = -this.constants.keyboard.speed.y;
+ this.start(); // if there is no node movement, the calculation wont be done
+ util.preventDefault(event);
+ if (this.navigationDivs) {
+ this.navigationDivs['down'].className += " active";
}
- this.redraw();
};
/**
- * select zero or more edges
- * @param {Number[] | String[]} selection An array with the ids of the
- * selected nodes.
+ * move the screen left
+ * @private
*/
- exports.selectEdges = function(selection) {
- var i, iMax, id;
-
- if (!selection || (selection.length == undefined))
- throw 'Selection must be an array with ids';
-
- // first unselect any selected node
- this._unselectAll(true);
-
- for (i = 0, iMax = selection.length; i < iMax; i++) {
- id = selection[i];
-
- var edge = this.edges[id];
- if (!edge) {
- throw new RangeError('Edge with id "' + id + '" not found');
- }
- this._selectObject(edge,true,true,highlightEdges);
+ exports._moveLeft = function(event) {
+ this.xIncrement = this.constants.keyboard.speed.x;
+ this.start(); // if there is no node movement, the calculation wont be done
+ util.preventDefault(event);
+ if (this.navigationDivs) {
+ this.navigationDivs['left'].className += " active";
}
- this.redraw();
};
+
/**
- * Validate the selection: remove ids of nodes which no longer exist
+ * move the screen right
* @private
*/
- exports._updateSelection = function () {
- for(var nodeId in this.selectionObj.nodes) {
- if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
- if (!this.nodes.hasOwnProperty(nodeId)) {
- delete this.selectionObj.nodes[nodeId];
- }
- }
- }
- for(var edgeId in this.selectionObj.edges) {
- if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
- if (!this.edges.hasOwnProperty(edgeId)) {
- delete this.selectionObj.edges[edgeId];
- }
- }
+ exports._moveRight = function(event) {
+ this.xIncrement = -this.constants.keyboard.speed.y;
+ this.start(); // if there is no node movement, the calculation wont be done
+ util.preventDefault(event);
+ if (this.navigationDivs) {
+ this.navigationDivs['right'].className += " active";
}
};
-/***/ },
-/* 53 */
-/***/ function(module, exports, __webpack_require__) {
-
- var util = __webpack_require__(1);
- var Node = __webpack_require__(36);
- var Edge = __webpack_require__(33);
-
/**
- * clears the toolbar div element of children
- *
+ * Zoom in, using the same method as the movement.
* @private
*/
- exports._clearManipulatorBar = function() {
- while (this.manipulationDiv.hasChildNodes()) {
- this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);
+ exports._zoomIn = function(event) {
+ this.zoomIncrement = this.constants.keyboard.speed.zoom;
+ this.start(); // if there is no node movement, the calculation wont be done
+ util.preventDefault(event);
+ if (this.navigationDivs) {
+ this.navigationDivs['zoomIn'].className += " active";
}
};
+
/**
- * Manipulation UI temporarily overloads certain functions to extend or replace them. To be able to restore
- * these functions to their original functionality, we saved them in this.cachedFunctions.
- * This function restores these functions to their original function.
- *
+ * Zoom out
* @private
*/
- exports._restoreOverloadedFunctions = function() {
- for (var functionName in this.cachedFunctions) {
- if (this.cachedFunctions.hasOwnProperty(functionName)) {
- this[functionName] = this.cachedFunctions[functionName];
- }
+ exports._zoomOut = function() {
+ this.zoomIncrement = -this.constants.keyboard.speed.zoom;
+ this.start(); // if there is no node movement, the calculation wont be done
+ util.preventDefault(event);
+ if (this.navigationDivs) {
+ this.navigationDivs['zoomOut'].className += " active";
}
};
+
/**
- * Enable or disable edit-mode.
- *
+ * Stop zooming and unhighlight the zoom controls
* @private
*/
- exports._toggleEditMode = function() {
- this.editMode = !this.editMode;
- var toolbar = document.getElementById("network-manipulationDiv");
- var closeDiv = document.getElementById("network-manipulation-closeDiv");
- var editModeDiv = document.getElementById("network-manipulation-editMode");
- if (this.editMode == true) {
- toolbar.style.display="block";
- closeDiv.style.display="block";
- editModeDiv.style.display="none";
- closeDiv.onclick = this._toggleEditMode.bind(this);
- }
- else {
- toolbar.style.display="none";
- closeDiv.style.display="none";
- editModeDiv.style.display="block";
- closeDiv.onclick = null;
+ exports._stopZoom = function() {
+ this.zoomIncrement = 0;
+ if (this.navigationDivs) {
+ this.navigationDivs['zoomIn'].className = this.navigationDivs['zoomIn'].className.replace(" active","");
+ this.navigationDivs['zoomOut'].className = this.navigationDivs['zoomOut'].className.replace(" active","");
}
- this._createManipulatorBar()
};
+
/**
- * main function, creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar.
- *
+ * Stop moving in the Y direction and unHighlight the up and down
* @private
*/
- exports._createManipulatorBar = function() {
- // remove bound functions
- if (this.boundFunction) {
- this.off('select', this.boundFunction);
+ exports._yStopMoving = function() {
+ this.yIncrement = 0;
+ if (this.navigationDivs) {
+ this.navigationDivs['up'].className = this.navigationDivs['up'].className.replace(" active","");
+ this.navigationDivs['down'].className = this.navigationDivs['down'].className.replace(" active","");
}
+ };
- if (this.edgeBeingEdited !== undefined) {
- this.edgeBeingEdited._disableControlNodes();
- this.edgeBeingEdited = undefined;
- this.selectedControlNode = null;
- this.controlNodesActive = false;
+
+ /**
+ * Stop moving in the X direction and unHighlight left and right.
+ * @private
+ */
+ exports._xStopMoving = function() {
+ this.xIncrement = 0;
+ if (this.navigationDivs) {
+ this.navigationDivs['left'].className = this.navigationDivs['left'].className.replace(" active","");
+ this.navigationDivs['right'].className = this.navigationDivs['right'].className.replace(" active","");
}
+ };
- // restore overloaded functions
- this._restoreOverloadedFunctions();
- // resume calculation
- this.freezeSimulation = false;
+/***/ },
+/* 54 */
+/***/ function(module, exports, __webpack_require__) {
- // reset global variables
- this.blockConnectingEdgeSelection = false;
- this.forceAppendSelection = false;
+ exports._resetLevels = function() {
+ for (var nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ var node = this.nodes[nodeId];
+ if (node.preassignedLevel == false) {
+ node.level = -1;
+ }
+ }
+ }
+ };
- if (this.editMode == true) {
- while (this.manipulationDiv.hasChildNodes()) {
- this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);
+ /**
+ * This is the main function to layout the nodes in a hierarchical way.
+ * It checks if the node details are supplied correctly
+ *
+ * @private
+ */
+ exports._setupHierarchicalLayout = function() {
+ if (this.constants.hierarchicalLayout.enabled == true && this.nodeIndices.length > 0) {
+ if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "DU") {
+ this.constants.hierarchicalLayout.levelSeparation *= -1;
}
- // add the icons to the manipulator div
- this.manipulationDiv.innerHTML = "" +
- "" +
- ""+this.constants.labels['add'] +"" +
- "" +
- "" +
- ""+this.constants.labels['link'] +"";
- if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) {
- this.manipulationDiv.innerHTML += "" +
- "" +
- "" +
- ""+this.constants.labels['editNode'] +"";
+ else {
+ this.constants.hierarchicalLayout.levelSeparation = Math.abs(this.constants.hierarchicalLayout.levelSeparation);
}
- else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) {
- this.manipulationDiv.innerHTML += "" +
- "" +
- "" +
- ""+this.constants.labels['editEdge'] +"";
+
+ if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "LR") {
+ if (this.constants.smoothCurves.enabled == true) {
+ this.constants.smoothCurves.type = "vertical";
+ }
}
- if (this._selectionIsEmpty() == false) {
- this.manipulationDiv.innerHTML += "" +
- "" +
- "" +
- ""+this.constants.labels['del'] +"";
+ else {
+ if (this.constants.smoothCurves.enabled == true) {
+ this.constants.smoothCurves.type = "horizontal";
+ }
}
+ // get the size of the largest hubs and check if the user has defined a level for a node.
+ var hubsize = 0;
+ var node, nodeId;
+ var definedLevel = false;
+ var undefinedLevel = false;
-
- // bind the icons
- var addNodeButton = document.getElementById("network-manipulate-addNode");
- addNodeButton.onclick = this._createAddNodeToolbar.bind(this);
- var addEdgeButton = document.getElementById("network-manipulate-connectNode");
- addEdgeButton.onclick = this._createAddEdgeToolbar.bind(this);
- if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) {
- var editButton = document.getElementById("network-manipulate-editNode");
- editButton.onclick = this._editNode.bind(this);
- }
- else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) {
- var editButton = document.getElementById("network-manipulate-editEdge");
- editButton.onclick = this._createEditEdgeToolbar.bind(this);
+ for (nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ node = this.nodes[nodeId];
+ if (node.level != -1) {
+ definedLevel = true;
+ }
+ else {
+ undefinedLevel = true;
+ }
+ if (hubsize < node.edges.length) {
+ hubsize = node.edges.length;
+ }
+ }
}
- if (this._selectionIsEmpty() == false) {
- var deleteButton = document.getElementById("network-manipulate-delete");
- deleteButton.onclick = this._deleteSelected.bind(this);
+
+ // if the user defined some levels but not all, alert and run without hierarchical layout
+ if (undefinedLevel == true && definedLevel == true) {
+ alert("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");
+ this.zoomExtent(true,this.constants.clustering.enabled);
+ if (!this.constants.clustering.enabled) {
+ this.start();
+ }
}
- var closeDiv = document.getElementById("network-manipulation-closeDiv");
- closeDiv.onclick = this._toggleEditMode.bind(this);
+ else {
+ // setup the system to use hierarchical method.
+ this._changeConstants();
- this.boundFunction = this._createManipulatorBar.bind(this);
- this.on('select', this.boundFunction);
- }
- else {
- this.editModeDiv.innerHTML = "" +
- "" +
- "" + this.constants.labels['edit'] + "";
- var editModeButton = document.getElementById("network-manipulate-editModeButton");
- editModeButton.onclick = this._toggleEditMode.bind(this);
+ // define levels if undefined by the users. Based on hubsize
+ if (undefinedLevel == true) {
+ this._determineLevels(hubsize);
+ }
+ // check the distribution of the nodes per level.
+ var distribution = this._getDistribution();
+
+ // place the nodes on the canvas. This also stablilizes the system.
+ this._placeNodesByHierarchy(distribution);
+
+ // start the simulation.
+ this.start();
+ }
}
};
-
/**
- * Create the toolbar for adding Nodes
+ * This function places the nodes on the canvas based on the hierarchial distribution.
*
+ * @param {Object} distribution | obtained by the function this._getDistribution()
* @private
*/
- exports._createAddNodeToolbar = function() {
- // clear the toolbar
- this._clearManipulatorBar();
- if (this.boundFunction) {
- this.off('select', this.boundFunction);
- }
+ exports._placeNodesByHierarchy = function(distribution) {
+ var nodeId, node;
- // create the toolbar contents
- this.manipulationDiv.innerHTML = "" +
- "" +
- "" + this.constants.labels['back'] + " " +
- "" +
- "" +
- "" + this.constants.labels['addDescription'] + "";
+ // start placing all the level 0 nodes first. Then recursively position their branches.
+ for (var level in distribution) {
+ if (distribution.hasOwnProperty(level)) {
- // bind the icon
- var backButton = document.getElementById("network-manipulate-back");
- backButton.onclick = this._createManipulatorBar.bind(this);
+ for (nodeId in distribution[level].nodes) {
+ if (distribution[level].nodes.hasOwnProperty(nodeId)) {
+ node = distribution[level].nodes[nodeId];
+ if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") {
+ if (node.xFixed) {
+ node.x = distribution[level].minPos;
+ node.xFixed = false;
- // we use the boundFunction so we can reference it when we unbind it from the "select" event.
- this.boundFunction = this._addNode.bind(this);
- this.on('select', this.boundFunction);
+ distribution[level].minPos += distribution[level].nodeSpacing;
+ }
+ }
+ else {
+ if (node.yFixed) {
+ node.y = distribution[level].minPos;
+ node.yFixed = false;
+
+ distribution[level].minPos += distribution[level].nodeSpacing;
+ }
+ }
+ this._placeBranchNodes(node.edges,node.id,distribution,node.level);
+ }
+ }
+ }
+ }
+
+ // stabilize the system after positioning. This function calls zoomExtent.
+ this._stabilize();
};
/**
- * create the toolbar to connect nodes
+ * This function get the distribution of levels based on hubsize
*
+ * @returns {Object}
* @private
*/
- exports._createAddEdgeToolbar = function() {
- // clear the toolbar
- this._clearManipulatorBar();
- this._unselectAll(true);
- this.freezeSimulation = true;
+ exports._getDistribution = function() {
+ var distribution = {};
+ var nodeId, node, level;
- if (this.boundFunction) {
- this.off('select', this.boundFunction);
+ // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time.
+ // the fix of X is removed after the x value has been set.
+ for (nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ node = this.nodes[nodeId];
+ node.xFixed = true;
+ node.yFixed = true;
+ if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") {
+ node.y = this.constants.hierarchicalLayout.levelSeparation*node.level;
+ }
+ else {
+ node.x = this.constants.hierarchicalLayout.levelSeparation*node.level;
+ }
+ if (distribution[node.level] === undefined) {
+ distribution[node.level] = {amount: 0, nodes: {}, minPos:0, nodeSpacing:0};
+ }
+ distribution[node.level].amount += 1;
+ distribution[node.level].nodes[nodeId] = node;
+ }
}
- this._unselectAll();
- this.forceAppendSelection = false;
- this.blockConnectingEdgeSelection = true;
+ // determine the largest amount of nodes of all levels
+ var maxCount = 0;
+ for (level in distribution) {
+ if (distribution.hasOwnProperty(level)) {
+ if (maxCount < distribution[level].amount) {
+ maxCount = distribution[level].amount;
+ }
+ }
+ }
- this.manipulationDiv.innerHTML = "" +
- "" +
- "" + this.constants.labels['back'] + " " +
- "" +
- "" +
- "" + this.constants.labels['linkDescription'] + "";
+ // set the initial position and spacing of each nodes accordingly
+ for (level in distribution) {
+ if (distribution.hasOwnProperty(level)) {
+ distribution[level].nodeSpacing = (maxCount + 1) * this.constants.hierarchicalLayout.nodeSpacing;
+ distribution[level].nodeSpacing /= (distribution[level].amount + 1);
+ distribution[level].minPos = distribution[level].nodeSpacing - (0.5 * (distribution[level].amount + 1) * distribution[level].nodeSpacing);
+ }
+ }
- // bind the icon
- var backButton = document.getElementById("network-manipulate-back");
- backButton.onclick = this._createManipulatorBar.bind(this);
+ return distribution;
+ };
- // we use the boundFunction so we can reference it when we unbind it from the "select" event.
- this.boundFunction = this._handleConnect.bind(this);
- this.on('select', this.boundFunction);
- // temporarily overload functions
- this.cachedFunctions["_handleTouch"] = this._handleTouch;
- this.cachedFunctions["_handleOnRelease"] = this._handleOnRelease;
- this._handleTouch = this._handleConnect;
- this._handleOnRelease = this._finishConnect;
+ /**
+ * this function allocates nodes in levels based on the recursive branching from the largest hubs.
+ *
+ * @param hubsize
+ * @private
+ */
+ exports._determineLevels = function(hubsize) {
+ var nodeId, node;
- // redraw to show the unselect
- this._redraw();
+ // determine hubs
+ for (nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ node = this.nodes[nodeId];
+ if (node.edges.length == hubsize) {
+ node.level = 0;
+ }
+ }
+ }
+
+ // branch from hubs
+ for (nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ node = this.nodes[nodeId];
+ if (node.level == 0) {
+ this._setLevel(1,node.edges,node.id);
+ }
+ }
+ }
};
+
/**
- * create the toolbar to edit edges
+ * Since hierarchical layout does not support:
+ * - smooth curves (based on the physics),
+ * - clustering (based on dynamic node counts)
+ *
+ * We disable both features so there will be no problems.
*
* @private
*/
- exports._createEditEdgeToolbar = function() {
- // clear the toolbar
- this._clearManipulatorBar();
- this.controlNodesActive = true;
-
- if (this.boundFunction) {
- this.off('select', this.boundFunction);
+ exports._changeConstants = function() {
+ this.constants.clustering.enabled = false;
+ this.constants.physics.barnesHut.enabled = false;
+ this.constants.physics.hierarchicalRepulsion.enabled = true;
+ this._loadSelectedForceSolver();
+ if (this.constants.smoothCurves.enabled == true) {
+ this.constants.smoothCurves.dynamic = false;
}
+ this._configureSmoothCurves();
+ };
- this.edgeBeingEdited = this._getSelectedEdge();
- this.edgeBeingEdited._enableControlNodes();
-
- this.manipulationDiv.innerHTML = "" +
- "" +
- "" + this.constants.labels['back'] + " " +
- "" +
- "" +
- "" + this.constants.labels['editEdgeDescription'] + "";
- // bind the icon
- var backButton = document.getElementById("network-manipulate-back");
- backButton.onclick = this._createManipulatorBar.bind(this);
+ /**
+ * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes
+ * on a X position that ensures there will be no overlap.
+ *
+ * @param edges
+ * @param parentId
+ * @param distribution
+ * @param parentLevel
+ * @private
+ */
+ exports._placeBranchNodes = function(edges, parentId, distribution, parentLevel) {
+ for (var i = 0; i < edges.length; i++) {
+ var childNode = null;
+ if (edges[i].toId == parentId) {
+ childNode = edges[i].from;
+ }
+ else {
+ childNode = edges[i].to;
+ }
- // temporarily overload functions
- this.cachedFunctions["_handleTouch"] = this._handleTouch;
- this.cachedFunctions["_handleOnRelease"] = this._handleOnRelease;
- this.cachedFunctions["_handleTap"] = this._handleTap;
- this.cachedFunctions["_handleDragStart"] = this._handleDragStart;
- this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag;
- this._handleTouch = this._selectControlNode;
- this._handleTap = function () {};
- this._handleOnDrag = this._controlNodeDrag;
- this._handleDragStart = function () {}
- this._handleOnRelease = this._releaseControlNode;
+ // if a node is conneceted to another node on the same level (or higher (means lower level))!, this is not handled here.
+ var nodeMoved = false;
+ if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") {
+ if (childNode.xFixed && childNode.level > parentLevel) {
+ childNode.xFixed = false;
+ childNode.x = distribution[childNode.level].minPos;
+ nodeMoved = true;
+ }
+ }
+ else {
+ if (childNode.yFixed && childNode.level > parentLevel) {
+ childNode.yFixed = false;
+ childNode.y = distribution[childNode.level].minPos;
+ nodeMoved = true;
+ }
+ }
- // redraw to show the unselect
- this._redraw();
+ if (nodeMoved == true) {
+ distribution[childNode.level].minPos += distribution[childNode.level].nodeSpacing;
+ if (childNode.edges.length > 1) {
+ this._placeBranchNodes(childNode.edges,childNode.id,distribution,childNode.level);
+ }
+ }
+ }
};
-
-
-
/**
- * the function bound to the selection event. It checks if you want to connect a cluster and changes the description
- * to walk the user through the process.
+ * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level.
*
+ * @param level
+ * @param edges
+ * @param parentId
* @private
*/
- exports._selectControlNode = function(pointer) {
- this.edgeBeingEdited.controlNodes.from.unselect();
- this.edgeBeingEdited.controlNodes.to.unselect();
- this.selectedControlNode = this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(pointer.x),this._YconvertDOMtoCanvas(pointer.y));
- if (this.selectedControlNode !== null) {
- this.selectedControlNode.select();
- this.freezeSimulation = true;
+ exports._setLevel = function(level, edges, parentId) {
+ for (var i = 0; i < edges.length; i++) {
+ var childNode = null;
+ if (edges[i].toId == parentId) {
+ childNode = edges[i].from;
+ }
+ else {
+ childNode = edges[i].to;
+ }
+ if (childNode.level == -1 || childNode.level > level) {
+ childNode.level = level;
+ if (edges.length > 1) {
+ this._setLevel(level+1, childNode.edges, childNode.id);
+ }
+ }
}
- this._redraw();
};
+
/**
- * the function bound to the selection event. It checks if you want to connect a cluster and changes the description
- * to walk the user through the process.
+ * Unfix nodes
*
* @private
*/
- exports._controlNodeDrag = function(event) {
- var pointer = this._getPointer(event.gesture.center);
- if (this.selectedControlNode !== null && this.selectedControlNode !== undefined) {
- this.selectedControlNode.x = this._XconvertDOMtoCanvas(pointer.x);
- this.selectedControlNode.y = this._YconvertDOMtoCanvas(pointer.y);
- }
- this._redraw();
- };
-
- exports._releaseControlNode = function(pointer) {
- var newNode = this._getNodeAt(pointer);
- if (newNode != null) {
- if (this.edgeBeingEdited.controlNodes.from.selected == true) {
- this._editEdge(newNode.id, this.edgeBeingEdited.to.id);
- this.edgeBeingEdited.controlNodes.from.unselect();
- }
- if (this.edgeBeingEdited.controlNodes.to.selected == true) {
- this._editEdge(this.edgeBeingEdited.from.id, newNode.id);
- this.edgeBeingEdited.controlNodes.to.unselect();
+ exports._restoreNodes = function() {
+ for (var nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ this.nodes[nodeId].xFixed = false;
+ this.nodes[nodeId].yFixed = false;
}
}
- else {
- this.edgeBeingEdited._restoreControlNodes();
- }
- this.freezeSimulation = false;
- this._redraw();
};
+
+/***/ },
+/* 55 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var util = __webpack_require__(1);
+ var RepulsionMixin = __webpack_require__(57);
+ var HierarchialRepulsionMixin = __webpack_require__(58);
+ var BarnesHutMixin = __webpack_require__(59);
+
/**
- * the function bound to the selection event. It checks if you want to connect a cluster and changes the description
- * to walk the user through the process.
+ * Toggling barnes Hut calculation on and off.
*
* @private
*/
- exports._handleConnect = function(pointer) {
- if (this._getSelectedNodeCount() == 0) {
- var node = this._getNodeAt(pointer);
- if (node != null) {
- if (node.clusterSize > 1) {
- alert("Cannot create edges to a cluster.")
- }
- else {
- this._selectObject(node,false);
- // create a node the temporary line can look at
- this.sectors['support']['nodes']['targetNode'] = new Node({id:'targetNode'},{},{},this.constants);
- this.sectors['support']['nodes']['targetNode'].x = node.x;
- this.sectors['support']['nodes']['targetNode'].y = node.y;
- this.sectors['support']['nodes']['targetViaNode'] = new Node({id:'targetViaNode'},{},{},this.constants);
- this.sectors['support']['nodes']['targetViaNode'].x = node.x;
- this.sectors['support']['nodes']['targetViaNode'].y = node.y;
- this.sectors['support']['nodes']['targetViaNode'].parentEdgeId = "connectionEdge";
-
- // create a temporary edge
- this.edges['connectionEdge'] = new Edge({id:"connectionEdge",from:node.id,to:this.sectors['support']['nodes']['targetNode'].id}, this, this.constants);
- this.edges['connectionEdge'].from = node;
- this.edges['connectionEdge'].connected = true;
- this.edges['connectionEdge'].smooth = true;
- this.edges['connectionEdge'].selected = true;
- this.edges['connectionEdge'].to = this.sectors['support']['nodes']['targetNode'];
- this.edges['connectionEdge'].via = this.sectors['support']['nodes']['targetViaNode'];
-
- this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag;
- this._handleOnDrag = function(event) {
- var pointer = this._getPointer(event.gesture.center);
- this.sectors['support']['nodes']['targetNode'].x = this._XconvertDOMtoCanvas(pointer.x);
- this.sectors['support']['nodes']['targetNode'].y = this._YconvertDOMtoCanvas(pointer.y);
- this.sectors['support']['nodes']['targetViaNode'].x = 0.5 * (this._XconvertDOMtoCanvas(pointer.x) + this.edges['connectionEdge'].from.x);
- this.sectors['support']['nodes']['targetViaNode'].y = this._YconvertDOMtoCanvas(pointer.y);
- };
-
- this.moving = true;
- this.start();
- }
- }
- }
+ exports._toggleBarnesHut = function () {
+ this.constants.physics.barnesHut.enabled = !this.constants.physics.barnesHut.enabled;
+ this._loadSelectedForceSolver();
+ this.moving = true;
+ this.start();
};
- exports._finishConnect = function(pointer) {
- if (this._getSelectedNodeCount() == 1) {
- // restore the drag function
- this._handleOnDrag = this.cachedFunctions["_handleOnDrag"];
- delete this.cachedFunctions["_handleOnDrag"];
+ /**
+ * This loads the node force solver based on the barnes hut or repulsion algorithm
+ *
+ * @private
+ */
+ exports._loadSelectedForceSolver = function () {
+ // this overloads the this._calculateNodeForces
+ if (this.constants.physics.barnesHut.enabled == true) {
+ this._clearMixin(RepulsionMixin);
+ this._clearMixin(HierarchialRepulsionMixin);
- // remember the edge id
- var connectFromId = this.edges['connectionEdge'].fromId;
+ this.constants.physics.centralGravity = this.constants.physics.barnesHut.centralGravity;
+ this.constants.physics.springLength = this.constants.physics.barnesHut.springLength;
+ this.constants.physics.springConstant = this.constants.physics.barnesHut.springConstant;
+ this.constants.physics.damping = this.constants.physics.barnesHut.damping;
- // remove the temporary nodes and edge
- delete this.edges['connectionEdge'];
- delete this.sectors['support']['nodes']['targetNode'];
- delete this.sectors['support']['nodes']['targetViaNode'];
+ this._loadMixin(BarnesHutMixin);
+ }
+ else if (this.constants.physics.hierarchicalRepulsion.enabled == true) {
+ this._clearMixin(BarnesHutMixin);
+ this._clearMixin(RepulsionMixin);
- var node = this._getNodeAt(pointer);
- if (node != null) {
- if (node.clusterSize > 1) {
- alert("Cannot create edges to a cluster.")
- }
- else {
- this._createEdge(connectFromId,node.id);
- this._createManipulatorBar();
- }
- }
- this._unselectAll();
+ this.constants.physics.centralGravity = this.constants.physics.hierarchicalRepulsion.centralGravity;
+ this.constants.physics.springLength = this.constants.physics.hierarchicalRepulsion.springLength;
+ this.constants.physics.springConstant = this.constants.physics.hierarchicalRepulsion.springConstant;
+ this.constants.physics.damping = this.constants.physics.hierarchicalRepulsion.damping;
+
+ this._loadMixin(HierarchialRepulsionMixin);
}
- };
+ else {
+ this._clearMixin(BarnesHutMixin);
+ this._clearMixin(HierarchialRepulsionMixin);
+ this.barnesHutTree = undefined;
+ this.constants.physics.centralGravity = this.constants.physics.repulsion.centralGravity;
+ this.constants.physics.springLength = this.constants.physics.repulsion.springLength;
+ this.constants.physics.springConstant = this.constants.physics.repulsion.springConstant;
+ this.constants.physics.damping = this.constants.physics.repulsion.damping;
- /**
- * Adds a node on the specified location
- */
- exports._addNode = function() {
- if (this._selectionIsEmpty() && this.editMode == true) {
- var positionObject = this._pointerToPositionObject(this.pointerPosition);
- var defaultData = {id:util.randomUUID(),x:positionObject.left,y:positionObject.top,label:"new",allowedToMoveX:true,allowedToMoveY:true};
- if (this.triggerFunctions.add) {
- if (this.triggerFunctions.add.length == 2) {
- var me = this;
- this.triggerFunctions.add(defaultData, function(finalizedData) {
- me.nodesData.add(finalizedData);
- me._createManipulatorBar();
- me.moving = true;
- me.start();
- });
- }
- else {
- alert(this.constants.labels['addError']);
- this._createManipulatorBar();
- this.moving = true;
- this.start();
- }
- }
- else {
- this.nodesData.add(defaultData);
- this._createManipulatorBar();
- this.moving = true;
- this.start();
- }
+ this._loadMixin(RepulsionMixin);
}
};
-
/**
- * connect two nodes with a new edge.
+ * Before calculating the forces, we check if we need to cluster to keep up performance and we check
+ * if there is more than one node. If it is just one node, we dont calculate anything.
*
* @private
*/
- exports._createEdge = function(sourceNodeId,targetNodeId) {
- if (this.editMode == true) {
- var defaultData = {from:sourceNodeId, to:targetNodeId};
- if (this.triggerFunctions.connect) {
- if (this.triggerFunctions.connect.length == 2) {
- var me = this;
- this.triggerFunctions.connect(defaultData, function(finalizedData) {
- me.edgesData.add(finalizedData);
- me.moving = true;
- me.start();
- });
- }
- else {
- alert(this.constants.labels["linkError"]);
- this.moving = true;
- this.start();
- }
- }
- else {
- this.edgesData.add(defaultData);
- this.moving = true;
- this.start();
+ exports._initializeForceCalculation = function () {
+ // stop calculation if there is only one node
+ if (this.nodeIndices.length == 1) {
+ this.nodes[this.nodeIndices[0]]._setForce(0, 0);
+ }
+ else {
+ // if there are too many nodes on screen, we cluster without repositioning
+ if (this.nodeIndices.length > this.constants.clustering.clusterThreshold && this.constants.clustering.enabled == true) {
+ this.clusterToFit(this.constants.clustering.reduceToNodes, false);
}
+
+ // we now start the force calculation
+ this._calculateForces();
}
};
+
/**
- * connect two nodes with a new edge.
- *
+ * Calculate the external forces acting on the nodes
+ * Forces are caused by: edges, repulsing forces between nodes, gravity
* @private
*/
- exports._editEdge = function(sourceNodeId,targetNodeId) {
- if (this.editMode == true) {
- var defaultData = {id: this.edgeBeingEdited.id, from:sourceNodeId, to:targetNodeId};
- if (this.triggerFunctions.editEdge) {
- if (this.triggerFunctions.editEdge.length == 2) {
- var me = this;
- this.triggerFunctions.editEdge(defaultData, function(finalizedData) {
- me.edgesData.update(finalizedData);
- me.moving = true;
- me.start();
- });
+ exports._calculateForces = function () {
+ // Gravity is required to keep separated groups from floating off
+ // the forces are reset to zero in this loop by using _setForce instead
+ // of _addForce
+
+ this._calculateGravitationalForces();
+ this._calculateNodeForces();
+
+ if (this.constants.physics.springConstant > 0) {
+ if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) {
+ this._calculateSpringForcesWithSupport();
+ }
+ else {
+ if (this.constants.physics.hierarchicalRepulsion.enabled == true) {
+ this._calculateHierarchicalSpringForces();
}
else {
- alert(this.constants.labels["linkError"]);
- this.moving = true;
- this.start();
+ this._calculateSpringForces();
}
}
- else {
- this.edgesData.update(defaultData);
- this.moving = true;
- this.start();
- }
}
};
+
/**
- * Create the toolbar to edit the selected node. The label and the color can be changed. Other colors are derived from the chosen color.
+ * Smooth curves are created by adding invisible nodes in the center of the edges. These nodes are also
+ * handled in the calculateForces function. We then use a quadratic curve with the center node as control.
+ * This function joins the datanodes and invisible (called support) nodes into one object.
+ * We do this so we do not contaminate this.nodes with the support nodes.
*
* @private
*/
- exports._editNode = function() {
- if (this.triggerFunctions.edit && this.editMode == true) {
- var node = this._getSelectedNode();
- var data = {id:node.id,
- label: node.label,
- group: node.group,
- shape: node.shape,
- color: {
- background:node.color.background,
- border:node.color.border,
- highlight: {
- background:node.color.highlight.background,
- border:node.color.highlight.border
+ exports._updateCalculationNodes = function () {
+ if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) {
+ this.calculationNodes = {};
+ this.calculationNodeIndices = [];
+
+ for (var nodeId in this.nodes) {
+ if (this.nodes.hasOwnProperty(nodeId)) {
+ this.calculationNodes[nodeId] = this.nodes[nodeId];
+ }
+ }
+ var supportNodes = this.sectors['support']['nodes'];
+ for (var supportNodeId in supportNodes) {
+ if (supportNodes.hasOwnProperty(supportNodeId)) {
+ if (this.edges.hasOwnProperty(supportNodes[supportNodeId].parentEdgeId)) {
+ this.calculationNodes[supportNodeId] = supportNodes[supportNodeId];
}
- }};
- if (this.triggerFunctions.edit.length == 2) {
- var me = this;
- this.triggerFunctions.edit(data, function (finalizedData) {
- me.nodesData.update(finalizedData);
- me._createManipulatorBar();
- me.moving = true;
- me.start();
- });
+ else {
+ supportNodes[supportNodeId]._setForce(0, 0);
+ }
+ }
}
- else {
- alert(this.constants.labels["editError"]);
+
+ for (var idx in this.calculationNodes) {
+ if (this.calculationNodes.hasOwnProperty(idx)) {
+ this.calculationNodeIndices.push(idx);
+ }
}
}
else {
- alert(this.constants.labels["editBoundError"]);
+ this.calculationNodes = this.nodes;
+ this.calculationNodeIndices = this.nodeIndices;
}
};
-
-
/**
- * delete everything in the selection
+ * this function applies the central gravity effect to keep groups from floating off
*
* @private
*/
- exports._deleteSelected = function() {
- if (!this._selectionIsEmpty() && this.editMode == true) {
- if (!this._clusterInSelection()) {
- var selectedNodes = this.getSelectedNodes();
- var selectedEdges = this.getSelectedEdges();
- if (this.triggerFunctions.del) {
- var me = this;
- var data = {nodes: selectedNodes, edges: selectedEdges};
- if (this.triggerFunctions.del.length = 2) {
- this.triggerFunctions.del(data, function (finalizedData) {
- me.edgesData.remove(finalizedData.edges);
- me.nodesData.remove(finalizedData.nodes);
- me._unselectAll();
- me.moving = true;
- me.start();
- });
- }
- else {
- alert(this.constants.labels["deleteError"])
- }
- }
- else {
- this.edgesData.remove(selectedEdges);
- this.nodesData.remove(selectedNodes);
- this._unselectAll();
- this.moving = true;
- this.start();
- }
+ exports._calculateGravitationalForces = function () {
+ var dx, dy, distance, node, i;
+ var nodes = this.calculationNodes;
+ var gravity = this.constants.physics.centralGravity;
+ var gravityForce = 0;
+
+ for (i = 0; i < this.calculationNodeIndices.length; i++) {
+ node = nodes[this.calculationNodeIndices[i]];
+ node.damping = this.constants.physics.damping; // possibly add function to alter damping properties of clusters.
+ // gravity does not apply when we are in a pocket sector
+ if (this._sector() == "default" && gravity != 0) {
+ dx = -node.x;
+ dy = -node.y;
+ distance = Math.sqrt(dx * dx + dy * dy);
+
+ gravityForce = (distance == 0) ? 0 : (gravity / distance);
+ node.fx = dx * gravityForce;
+ node.fy = dy * gravityForce;
}
else {
- alert(this.constants.labels["deleteClusterError"]);
+ node.fx = 0;
+ node.fy = 0;
}
}
};
-/***/ },
-/* 54 */
-/***/ function(module, exports, __webpack_require__) {
-
- var util = __webpack_require__(1);
-
- exports._cleanNavigation = function() {
- // clean up previous navigation items
- var wrapper = document.getElementById('network-navigation_wrapper');
- if (wrapper != null) {
- this.containerElement.removeChild(wrapper);
- }
- document.onmouseup = null;
- };
-
- /**
- * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation
- * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent
- * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false.
- * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas.
- *
- * @private
- */
- exports._loadNavigationElements = function() {
- this._cleanNavigation();
-
- this.navigationDivs = {};
- var navigationDivs = ['up','down','left','right','zoomIn','zoomOut','zoomExtends'];
- var navigationDivActions = ['_moveUp','_moveDown','_moveLeft','_moveRight','_zoomIn','_zoomOut','zoomExtent'];
-
- this.navigationDivs['wrapper'] = document.createElement('div');
- this.navigationDivs['wrapper'].id = "network-navigation_wrapper";
- this.navigationDivs['wrapper'].style.position = "absolute";
- this.navigationDivs['wrapper'].style.width = this.frame.canvas.clientWidth + "px";
- this.navigationDivs['wrapper'].style.height = this.frame.canvas.clientHeight + "px";
- this.containerElement.insertBefore(this.navigationDivs['wrapper'],this.frame);
-
- for (var i = 0; i < navigationDivs.length; i++) {
- this.navigationDivs[navigationDivs[i]] = document.createElement('div');
- this.navigationDivs[navigationDivs[i]].id = "network-navigation_" + navigationDivs[i];
- this.navigationDivs[navigationDivs[i]].className = "network-navigation " + navigationDivs[i];
- this.navigationDivs['wrapper'].appendChild(this.navigationDivs[navigationDivs[i]]);
- this.navigationDivs[navigationDivs[i]].onmousedown = this[navigationDivActions[i]].bind(this);
- }
- document.onmouseup = this._stopMovement.bind(this);
- };
/**
- * this stops all movement induced by the navigation buttons
+ * this function calculates the effects of the springs in the case of unsmooth curves.
*
* @private
*/
- exports._stopMovement = function() {
- this._xStopMoving();
- this._yStopMoving();
- this._stopZoom();
- };
-
+ exports._calculateSpringForces = function () {
+ var edgeLength, edge, edgeId;
+ var dx, dy, fx, fy, springForce, distance;
+ var edges = this.edges;
- /**
- * move the screen up
- * By using the increments, instead of adding a fixed number to the translation, we keep fluent and
- * instant movement. The onKeypress event triggers immediately, then pauses, then triggers frequently
- * To avoid this behaviour, we do the translation in the start loop.
- *
- * @private
- */
- exports._moveUp = function(event) {
- this.yIncrement = this.constants.keyboard.speed.y;
- this.start(); // if there is no node movement, the calculation wont be done
- util.preventDefault(event);
- if (this.navigationDivs) {
- this.navigationDivs['up'].className += " active";
- }
- };
+ // forces caused by the edges, modelled as springs
+ for (edgeId in edges) {
+ if (edges.hasOwnProperty(edgeId)) {
+ edge = edges[edgeId];
+ if (edge.connected) {
+ // only calculate forces if nodes are in the same sector
+ if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) {
+ edgeLength = edge.customLength ? edge.length : this.constants.physics.springLength;
+ // this implies that the edges between big clusters are longer
+ edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth;
+ dx = (edge.from.x - edge.to.x);
+ dy = (edge.from.y - edge.to.y);
+ distance = Math.sqrt(dx * dx + dy * dy);
- /**
- * move the screen down
- * @private
- */
- exports._moveDown = function(event) {
- this.yIncrement = -this.constants.keyboard.speed.y;
- this.start(); // if there is no node movement, the calculation wont be done
- util.preventDefault(event);
- if (this.navigationDivs) {
- this.navigationDivs['down'].className += " active";
- }
- };
+ if (distance == 0) {
+ distance = 0.01;
+ }
+ // the 1/distance is so the fx and fy can be calculated without sine or cosine.
+ springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance;
- /**
- * move the screen left
- * @private
- */
- exports._moveLeft = function(event) {
- this.xIncrement = this.constants.keyboard.speed.x;
- this.start(); // if there is no node movement, the calculation wont be done
- util.preventDefault(event);
- if (this.navigationDivs) {
- this.navigationDivs['left'].className += " active";
+ fx = dx * springForce;
+ fy = dy * springForce;
+
+ edge.from.fx += fx;
+ edge.from.fy += fy;
+ edge.to.fx -= fx;
+ edge.to.fy -= fy;
+ }
+ }
+ }
}
};
- /**
- * move the screen right
- * @private
- */
- exports._moveRight = function(event) {
- this.xIncrement = -this.constants.keyboard.speed.y;
- this.start(); // if there is no node movement, the calculation wont be done
- util.preventDefault(event);
- if (this.navigationDivs) {
- this.navigationDivs['right'].className += " active";
- }
- };
/**
- * Zoom in, using the same method as the movement.
+ * This function calculates the springforces on the nodes, accounting for the support nodes.
+ *
* @private
*/
- exports._zoomIn = function(event) {
- this.zoomIncrement = this.constants.keyboard.speed.zoom;
- this.start(); // if there is no node movement, the calculation wont be done
- util.preventDefault(event);
- if (this.navigationDivs) {
- this.navigationDivs['zoomIn'].className += " active";
- }
- };
+ exports._calculateSpringForcesWithSupport = function () {
+ var edgeLength, edge, edgeId, combinedClusterSize;
+ var edges = this.edges;
+ // forces caused by the edges, modelled as springs
+ for (edgeId in edges) {
+ if (edges.hasOwnProperty(edgeId)) {
+ edge = edges[edgeId];
+ if (edge.connected) {
+ // only calculate forces if nodes are in the same sector
+ if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) {
+ if (edge.via != null) {
+ var node1 = edge.to;
+ var node2 = edge.via;
+ var node3 = edge.from;
- /**
- * Zoom out
- * @private
- */
- exports._zoomOut = function() {
- this.zoomIncrement = -this.constants.keyboard.speed.zoom;
- this.start(); // if there is no node movement, the calculation wont be done
- util.preventDefault(event);
- if (this.navigationDivs) {
- this.navigationDivs['zoomOut'].className += " active";
- }
- };
+ edgeLength = edge.customLength ? edge.length : this.constants.physics.springLength;
+ combinedClusterSize = node1.clusterSize + node3.clusterSize - 2;
- /**
- * Stop zooming and unhighlight the zoom controls
- * @private
- */
- exports._stopZoom = function() {
- this.zoomIncrement = 0;
- if (this.navigationDivs) {
- this.navigationDivs['zoomIn'].className = this.navigationDivs['zoomIn'].className.replace(" active","");
- this.navigationDivs['zoomOut'].className = this.navigationDivs['zoomOut'].className.replace(" active","");
+ // this implies that the edges between big clusters are longer
+ edgeLength += combinedClusterSize * this.constants.clustering.edgeGrowth;
+ this._calculateSpringForce(node1, node2, 0.5 * edgeLength);
+ this._calculateSpringForce(node2, node3, 0.5 * edgeLength);
+ }
+ }
+ }
+ }
}
};
/**
- * Stop moving in the Y direction and unHighlight the up and down
+ * This is the code actually performing the calculation for the function above. It is split out to avoid repetition.
+ *
+ * @param node1
+ * @param node2
+ * @param edgeLength
* @private
*/
- exports._yStopMoving = function() {
- this.yIncrement = 0;
- if (this.navigationDivs) {
- this.navigationDivs['up'].className = this.navigationDivs['up'].className.replace(" active","");
- this.navigationDivs['down'].className = this.navigationDivs['down'].className.replace(" active","");
- }
- };
+ exports._calculateSpringForce = function (node1, node2, edgeLength) {
+ var dx, dy, fx, fy, springForce, distance;
+ dx = (node1.x - node2.x);
+ dy = (node1.y - node2.y);
+ distance = Math.sqrt(dx * dx + dy * dy);
- /**
- * Stop moving in the X direction and unHighlight left and right.
- * @private
- */
- exports._xStopMoving = function() {
- this.xIncrement = 0;
- if (this.navigationDivs) {
- this.navigationDivs['left'].className = this.navigationDivs['left'].className.replace(" active","");
- this.navigationDivs['right'].className = this.navigationDivs['right'].className.replace(" active","");
+ if (distance == 0) {
+ distance = 0.01;
}
- };
+ // the 1/distance is so the fx and fy can be calculated without sine or cosine.
+ springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance;
-/***/ },
-/* 55 */
-/***/ function(module, exports, __webpack_require__) {
+ fx = dx * springForce;
+ fy = dy * springForce;
- exports._resetLevels = function() {
- for (var nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- var node = this.nodes[nodeId];
- if (node.preassignedLevel == false) {
- node.level = -1;
- }
- }
- }
+ node1.fx += fx;
+ node1.fy += fy;
+ node2.fx -= fx;
+ node2.fy -= fy;
};
+
/**
- * This is the main function to layout the nodes in a hierarchical way.
- * It checks if the node details are supplied correctly
- *
+ * Load the HTML for the physics config and bind it
* @private
*/
- exports._setupHierarchicalLayout = function() {
- if (this.constants.hierarchicalLayout.enabled == true && this.nodeIndices.length > 0) {
- if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "DU") {
- this.constants.hierarchicalLayout.levelSeparation *= -1;
- }
- else {
- this.constants.hierarchicalLayout.levelSeparation = Math.abs(this.constants.hierarchicalLayout.levelSeparation);
- }
+ exports._loadPhysicsConfiguration = function () {
+ if (this.physicsConfiguration === undefined) {
+ this.backupConstants = {};
+ util.deepExtend(this.backupConstants,this.constants);
+
+ var hierarchicalLayoutDirections = ["LR", "RL", "UD", "DU"];
+ this.physicsConfiguration = document.createElement('div');
+ this.physicsConfiguration.className = "PhysicsConfiguration";
+ this.physicsConfiguration.innerHTML = '' +
+ '
Simulation Mode:
' +
+ '
' +
+ '
Barnes Hut
' +
+ '
Repulsion
' +
+ '
Hierarchical
' +
+ '
' +
+ '
' +
+ '
' +
+ '
Barnes Hut
' +
+ '
' +
+ '
gravitationalConstant
0
-20000
' +
+ '
' +
+ '
' +
+ '
centralGravity
0
3
' +
+ '
' +
+ '
' +
+ '
springLength
0
500
' +
+ '
' +
+ '
' +
+ '
springConstant
0
0.5
' +
+ '
' +
+ '
' +
+ '
damping
0
0.3
' +
+ '
' +
+ '
' +
+ '
' +
+ '
Repulsion
' +
+ '
' +
+ '
nodeDistance
0
300
' +
+ '
' +
+ '
' +
+ '
centralGravity
0
3
' +
+ '
' +
+ '
' +
+ '
springLength
0
500
' +
+ '
' +
+ '
' +
+ '
springConstant
0
0.5
' +
+ '
' +
+ '
' +
+ '
damping
0
0.3
' +
+ '
' +
+ '
' +
+ '
' +
+ '
Hierarchical
' +
+ '
' +
+ '
nodeDistance
0
300
' +
+ '
' +
+ '
' +
+ '
centralGravity
0
3
' +
+ '
' +
+ '
' +
+ '
springLength
0
500
' +
+ '
' +
+ '
' +
+ '
springConstant
0
0.5
' +
+ '
' +
+ '
' +
+ '
damping
0
0.3
' +
+ '
' +
+ '
' +
+ '
direction
1
4
' +
+ '
' +
+ '
' +
+ '
levelSeparation
1
500
' +
+ '
' +
+ '
' +
+ '
nodeSpacing
1
500
' +
+ '
' +
+ '
' +
+ '
Options:
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
'
+ this.containerElement.parentElement.insertBefore(this.physicsConfiguration, this.containerElement);
+ this.optionsDiv = document.createElement("div");
+ this.optionsDiv.style.fontSize = "14px";
+ this.optionsDiv.style.fontFamily = "verdana";
+ this.containerElement.parentElement.insertBefore(this.optionsDiv, this.containerElement);
+
+ var rangeElement;
+ rangeElement = document.getElementById('graph_BH_gc');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_gc', -1, "physics_barnesHut_gravitationalConstant");
+ rangeElement = document.getElementById('graph_BH_cg');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_cg', 1, "physics_centralGravity");
+ rangeElement = document.getElementById('graph_BH_sc');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sc', 1, "physics_springConstant");
+ rangeElement = document.getElementById('graph_BH_sl');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sl', 1, "physics_springLength");
+ rangeElement = document.getElementById('graph_BH_damp');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_damp', 1, "physics_damping");
- if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "LR") {
- if (this.constants.smoothCurves.enabled == true) {
- this.constants.smoothCurves.type = "vertical";
- }
+ rangeElement = document.getElementById('graph_R_nd');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_nd', 1, "physics_repulsion_nodeDistance");
+ rangeElement = document.getElementById('graph_R_cg');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_cg', 1, "physics_centralGravity");
+ rangeElement = document.getElementById('graph_R_sc');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sc', 1, "physics_springConstant");
+ rangeElement = document.getElementById('graph_R_sl');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sl', 1, "physics_springLength");
+ rangeElement = document.getElementById('graph_R_damp');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_damp', 1, "physics_damping");
+
+ rangeElement = document.getElementById('graph_H_nd');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance");
+ rangeElement = document.getElementById('graph_H_cg');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_cg', 1, "physics_centralGravity");
+ rangeElement = document.getElementById('graph_H_sc');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sc', 1, "physics_springConstant");
+ rangeElement = document.getElementById('graph_H_sl');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sl', 1, "physics_springLength");
+ rangeElement = document.getElementById('graph_H_damp');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_damp', 1, "physics_damping");
+ rangeElement = document.getElementById('graph_H_direction');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_direction', hierarchicalLayoutDirections, "hierarchicalLayout_direction");
+ rangeElement = document.getElementById('graph_H_levsep');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_levsep', 1, "hierarchicalLayout_levelSeparation");
+ rangeElement = document.getElementById('graph_H_nspac');
+ rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nspac', 1, "hierarchicalLayout_nodeSpacing");
+
+ var radioButton1 = document.getElementById("graph_physicsMethod1");
+ var radioButton2 = document.getElementById("graph_physicsMethod2");
+ var radioButton3 = document.getElementById("graph_physicsMethod3");
+ radioButton2.checked = true;
+ if (this.constants.physics.barnesHut.enabled) {
+ radioButton1.checked = true;
}
- else {
- if (this.constants.smoothCurves.enabled == true) {
- this.constants.smoothCurves.type = "horizontal";
- }
+ if (this.constants.hierarchicalLayout.enabled) {
+ radioButton3.checked = true;
}
- // get the size of the largest hubs and check if the user has defined a level for a node.
- var hubsize = 0;
- var node, nodeId;
- var definedLevel = false;
- var undefinedLevel = false;
- for (nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- node = this.nodes[nodeId];
- if (node.level != -1) {
- definedLevel = true;
- }
- else {
- undefinedLevel = true;
- }
- if (hubsize < node.edges.length) {
- hubsize = node.edges.length;
- }
- }
- }
+ var graph_toggleSmooth = document.getElementById("graph_toggleSmooth");
+ var graph_repositionNodes = document.getElementById("graph_repositionNodes");
+ var graph_generateOptions = document.getElementById("graph_generateOptions");
- // if the user defined some levels but not all, alert and run without hierarchical layout
- if (undefinedLevel == true && definedLevel == true) {
- alert("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");
- this.zoomExtent(true,this.constants.clustering.enabled);
- if (!this.constants.clustering.enabled) {
- this.start();
- }
+ graph_toggleSmooth.onclick = graphToggleSmoothCurves.bind(this);
+ graph_repositionNodes.onclick = graphRepositionNodes.bind(this);
+ graph_generateOptions.onclick = graphGenerateOptions.bind(this);
+ if (this.constants.smoothCurves == true && this.constants.dynamicSmoothCurves == false) {
+ graph_toggleSmooth.style.background = "#A4FF56";
}
else {
- // setup the system to use hierarchical method.
- this._changeConstants();
-
- // define levels if undefined by the users. Based on hubsize
- if (undefinedLevel == true) {
- this._determineLevels(hubsize);
- }
- // check the distribution of the nodes per level.
- var distribution = this._getDistribution();
-
- // place the nodes on the canvas. This also stablilizes the system.
- this._placeNodesByHierarchy(distribution);
-
- // start the simulation.
- this.start();
+ graph_toggleSmooth.style.background = "#FF8532";
}
- }
- };
-
-
- /**
- * This function places the nodes on the canvas based on the hierarchial distribution.
- *
- * @param {Object} distribution | obtained by the function this._getDistribution()
- * @private
- */
- exports._placeNodesByHierarchy = function(distribution) {
- var nodeId, node;
-
- // start placing all the level 0 nodes first. Then recursively position their branches.
- for (var level in distribution) {
- if (distribution.hasOwnProperty(level)) {
- for (nodeId in distribution[level].nodes) {
- if (distribution[level].nodes.hasOwnProperty(nodeId)) {
- node = distribution[level].nodes[nodeId];
- if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") {
- if (node.xFixed) {
- node.x = distribution[level].minPos;
- node.xFixed = false;
- distribution[level].minPos += distribution[level].nodeSpacing;
- }
- }
- else {
- if (node.yFixed) {
- node.y = distribution[level].minPos;
- node.yFixed = false;
+ switchConfigurations.apply(this);
- distribution[level].minPos += distribution[level].nodeSpacing;
- }
- }
- this._placeBranchNodes(node.edges,node.id,distribution,node.level);
- }
- }
- }
+ radioButton1.onchange = switchConfigurations.bind(this);
+ radioButton2.onchange = switchConfigurations.bind(this);
+ radioButton3.onchange = switchConfigurations.bind(this);
}
-
- // stabilize the system after positioning. This function calls zoomExtent.
- this._stabilize();
};
-
/**
- * This function get the distribution of levels based on hubsize
+ * This overwrites the this.constants.
*
- * @returns {Object}
+ * @param constantsVariableName
+ * @param value
* @private
*/
- exports._getDistribution = function() {
- var distribution = {};
- var nodeId, node, level;
-
- // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time.
- // the fix of X is removed after the x value has been set.
- for (nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- node = this.nodes[nodeId];
- node.xFixed = true;
- node.yFixed = true;
- if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") {
- node.y = this.constants.hierarchicalLayout.levelSeparation*node.level;
- }
- else {
- node.x = this.constants.hierarchicalLayout.levelSeparation*node.level;
- }
- if (distribution[node.level] === undefined) {
- distribution[node.level] = {amount: 0, nodes: {}, minPos:0, nodeSpacing:0};
- }
- distribution[node.level].amount += 1;
- distribution[node.level].nodes[nodeId] = node;
- }
+ exports._overWriteGraphConstants = function (constantsVariableName, value) {
+ var nameArray = constantsVariableName.split("_");
+ if (nameArray.length == 1) {
+ this.constants[nameArray[0]] = value;
}
-
- // determine the largest amount of nodes of all levels
- var maxCount = 0;
- for (level in distribution) {
- if (distribution.hasOwnProperty(level)) {
- if (maxCount < distribution[level].amount) {
- maxCount = distribution[level].amount;
- }
- }
+ else if (nameArray.length == 2) {
+ this.constants[nameArray[0]][nameArray[1]] = value;
}
-
- // set the initial position and spacing of each nodes accordingly
- for (level in distribution) {
- if (distribution.hasOwnProperty(level)) {
- distribution[level].nodeSpacing = (maxCount + 1) * this.constants.hierarchicalLayout.nodeSpacing;
- distribution[level].nodeSpacing /= (distribution[level].amount + 1);
- distribution[level].minPos = distribution[level].nodeSpacing - (0.5 * (distribution[level].amount + 1) * distribution[level].nodeSpacing);
- }
+ else if (nameArray.length == 3) {
+ this.constants[nameArray[0]][nameArray[1]][nameArray[2]] = value;
}
-
- return distribution;
};
/**
- * this function allocates nodes in levels based on the recursive branching from the largest hubs.
- *
- * @param hubsize
- * @private
+ * this function is bound to the toggle smooth curves button. That is also why it is not in the prototype.
*/
- exports._determineLevels = function(hubsize) {
- var nodeId, node;
-
- // determine hubs
- for (nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- node = this.nodes[nodeId];
- if (node.edges.length == hubsize) {
- node.level = 0;
- }
- }
- }
-
- // branch from hubs
- for (nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- node = this.nodes[nodeId];
- if (node.level == 0) {
- this._setLevel(1,node.edges,node.id);
- }
- }
- }
- };
+ function graphToggleSmoothCurves () {
+ this.constants.smoothCurves.enabled = !this.constants.smoothCurves.enabled;
+ var graph_toggleSmooth = document.getElementById("graph_toggleSmooth");
+ if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";}
+ else {graph_toggleSmooth.style.background = "#FF8532";}
+ this._configureSmoothCurves(false);
+ }
/**
- * Since hierarchical layout does not support:
- * - smooth curves (based on the physics),
- * - clustering (based on dynamic node counts)
- *
- * We disable both features so there will be no problems.
+ * this function is used to scramble the nodes
*
- * @private
*/
- exports._changeConstants = function() {
- this.constants.clustering.enabled = false;
- this.constants.physics.barnesHut.enabled = false;
- this.constants.physics.hierarchicalRepulsion.enabled = true;
- this._loadSelectedForceSolver();
- if (this.constants.smoothCurves.enabled == true) {
- this.constants.smoothCurves.dynamic = false;
+ function graphRepositionNodes () {
+ for (var nodeId in this.calculationNodes) {
+ if (this.calculationNodes.hasOwnProperty(nodeId)) {
+ this.calculationNodes[nodeId].vx = 0; this.calculationNodes[nodeId].vy = 0;
+ this.calculationNodes[nodeId].fx = 0; this.calculationNodes[nodeId].fy = 0;
+ }
+ }
+ if (this.constants.hierarchicalLayout.enabled == true) {
+ this._setupHierarchicalLayout();
+ showValueOfRange.call(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance");
+ showValueOfRange.call(this, 'graph_H_cg', 1, "physics_centralGravity");
+ showValueOfRange.call(this, 'graph_H_sc', 1, "physics_springConstant");
+ showValueOfRange.call(this, 'graph_H_sl', 1, "physics_springLength");
+ showValueOfRange.call(this, 'graph_H_damp', 1, "physics_damping");
}
- this._configureSmoothCurves();
- };
-
+ else {
+ this.repositionNodes();
+ }
+ this.moving = true;
+ this.start();
+ }
/**
- * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes
- * on a X position that ensures there will be no overlap.
- *
- * @param edges
- * @param parentId
- * @param distribution
- * @param parentLevel
- * @private
+ * this is used to generate an options file from the playing with physics system.
*/
- exports._placeBranchNodes = function(edges, parentId, distribution, parentLevel) {
- for (var i = 0; i < edges.length; i++) {
- var childNode = null;
- if (edges[i].toId == parentId) {
- childNode = edges[i].from;
+ function graphGenerateOptions () {
+ var options = "No options are required, default values used.";
+ var optionsSpecific = [];
+ var radioButton1 = document.getElementById("graph_physicsMethod1");
+ var radioButton2 = document.getElementById("graph_physicsMethod2");
+ if (radioButton1.checked == true) {
+ if (this.constants.physics.barnesHut.gravitationalConstant != this.backupConstants.physics.barnesHut.gravitationalConstant) {optionsSpecific.push("gravitationalConstant: " + this.constants.physics.barnesHut.gravitationalConstant);}
+ if (this.constants.physics.centralGravity != this.backupConstants.physics.barnesHut.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);}
+ if (this.constants.physics.springLength != this.backupConstants.physics.barnesHut.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);}
+ if (this.constants.physics.springConstant != this.backupConstants.physics.barnesHut.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);}
+ if (this.constants.physics.damping != this.backupConstants.physics.barnesHut.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);}
+ if (optionsSpecific.length != 0) {
+ options = "var options = {";
+ options += "physics: {barnesHut: {";
+ for (var i = 0; i < optionsSpecific.length; i++) {
+ options += optionsSpecific[i];
+ if (i < optionsSpecific.length - 1) {
+ options += ", "
+ }
+ }
+ options += '}}'
}
- else {
- childNode = edges[i].to;
+ if (this.constants.smoothCurves.enabled != this.backupConstants.smoothCurves.enabled) {
+ if (optionsSpecific.length == 0) {options = "var options = {";}
+ else {options += ", "}
+ options += "smoothCurves: " + this.constants.smoothCurves.enabled;
}
-
- // if a node is conneceted to another node on the same level (or higher (means lower level))!, this is not handled here.
- var nodeMoved = false;
- if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") {
- if (childNode.xFixed && childNode.level > parentLevel) {
- childNode.xFixed = false;
- childNode.x = distribution[childNode.level].minPos;
- nodeMoved = true;
+ if (options != "No options are required, default values used.") {
+ options += '};'
+ }
+ }
+ else if (radioButton2.checked == true) {
+ options = "var options = {";
+ options += "physics: {barnesHut: {enabled: false}";
+ if (this.constants.physics.repulsion.nodeDistance != this.backupConstants.physics.repulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.repulsion.nodeDistance);}
+ if (this.constants.physics.centralGravity != this.backupConstants.physics.repulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);}
+ if (this.constants.physics.springLength != this.backupConstants.physics.repulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);}
+ if (this.constants.physics.springConstant != this.backupConstants.physics.repulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);}
+ if (this.constants.physics.damping != this.backupConstants.physics.repulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);}
+ if (optionsSpecific.length != 0) {
+ options += ", repulsion: {";
+ for (var i = 0; i < optionsSpecific.length; i++) {
+ options += optionsSpecific[i];
+ if (i < optionsSpecific.length - 1) {
+ options += ", "
+ }
}
+ options += '}}'
}
- else {
- if (childNode.yFixed && childNode.level > parentLevel) {
- childNode.yFixed = false;
- childNode.y = distribution[childNode.level].minPos;
- nodeMoved = true;
+ if (optionsSpecific.length == 0) {options += "}"}
+ if (this.constants.smoothCurves != this.backupConstants.smoothCurves) {
+ options += ", smoothCurves: " + this.constants.smoothCurves;
+ }
+ options += '};'
+ }
+ else {
+ options = "var options = {";
+ if (this.constants.physics.hierarchicalRepulsion.nodeDistance != this.backupConstants.physics.hierarchicalRepulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.hierarchicalRepulsion.nodeDistance);}
+ if (this.constants.physics.centralGravity != this.backupConstants.physics.hierarchicalRepulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);}
+ if (this.constants.physics.springLength != this.backupConstants.physics.hierarchicalRepulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);}
+ if (this.constants.physics.springConstant != this.backupConstants.physics.hierarchicalRepulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);}
+ if (this.constants.physics.damping != this.backupConstants.physics.hierarchicalRepulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);}
+ if (optionsSpecific.length != 0) {
+ options += "physics: {hierarchicalRepulsion: {";
+ for (var i = 0; i < optionsSpecific.length; i++) {
+ options += optionsSpecific[i];
+ if (i < optionsSpecific.length - 1) {
+ options += ", ";
+ }
}
+ options += '}},';
}
-
- if (nodeMoved == true) {
- distribution[childNode.level].minPos += distribution[childNode.level].nodeSpacing;
- if (childNode.edges.length > 1) {
- this._placeBranchNodes(childNode.edges,childNode.id,distribution,childNode.level);
+ options += 'hierarchicalLayout: {';
+ optionsSpecific = [];
+ if (this.constants.hierarchicalLayout.direction != this.backupConstants.hierarchicalLayout.direction) {optionsSpecific.push("direction: " + this.constants.hierarchicalLayout.direction);}
+ if (Math.abs(this.constants.hierarchicalLayout.levelSeparation) != this.backupConstants.hierarchicalLayout.levelSeparation) {optionsSpecific.push("levelSeparation: " + this.constants.hierarchicalLayout.levelSeparation);}
+ if (this.constants.hierarchicalLayout.nodeSpacing != this.backupConstants.hierarchicalLayout.nodeSpacing) {optionsSpecific.push("nodeSpacing: " + this.constants.hierarchicalLayout.nodeSpacing);}
+ if (optionsSpecific.length != 0) {
+ for (var i = 0; i < optionsSpecific.length; i++) {
+ options += optionsSpecific[i];
+ if (i < optionsSpecific.length - 1) {
+ options += ", "
+ }
}
+ options += '}'
+ }
+ else {
+ options += "enabled:true}";
}
+ options += '};'
}
- };
+ this.optionsDiv.innerHTML = options;
+ }
+
/**
- * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level.
+ * this is used to switch between barnesHut, repulsion and hierarchical.
*
- * @param level
- * @param edges
- * @param parentId
- * @private
*/
- exports._setLevel = function(level, edges, parentId) {
- for (var i = 0; i < edges.length; i++) {
- var childNode = null;
- if (edges[i].toId == parentId) {
- childNode = edges[i].from;
- }
- else {
- childNode = edges[i].to;
+ function switchConfigurations () {
+ var ids = ["graph_BH_table", "graph_R_table", "graph_H_table"];
+ var radioButton = document.querySelector('input[name="graph_physicsMethod"]:checked').value;
+ var tableId = "graph_" + radioButton + "_table";
+ var table = document.getElementById(tableId);
+ table.style.display = "block";
+ for (var i = 0; i < ids.length; i++) {
+ if (ids[i] != tableId) {
+ table = document.getElementById(ids[i]);
+ table.style.display = "none";
}
- if (childNode.level == -1 || childNode.level > level) {
- childNode.level = level;
- if (edges.length > 1) {
- this._setLevel(level+1, childNode.edges, childNode.id);
- }
+ }
+ this._restoreNodes();
+ if (radioButton == "R") {
+ this.constants.hierarchicalLayout.enabled = false;
+ this.constants.physics.hierarchicalRepulsion.enabled = false;
+ this.constants.physics.barnesHut.enabled = false;
+ }
+ else if (radioButton == "H") {
+ if (this.constants.hierarchicalLayout.enabled == false) {
+ this.constants.hierarchicalLayout.enabled = true;
+ this.constants.physics.hierarchicalRepulsion.enabled = true;
+ this.constants.physics.barnesHut.enabled = false;
+ this.constants.smoothCurves.enabled = false;
+ this._setupHierarchicalLayout();
}
}
- };
+ else {
+ this.constants.hierarchicalLayout.enabled = false;
+ this.constants.physics.hierarchicalRepulsion.enabled = false;
+ this.constants.physics.barnesHut.enabled = true;
+ }
+ this._loadSelectedForceSolver();
+ var graph_toggleSmooth = document.getElementById("graph_toggleSmooth");
+ if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";}
+ else {graph_toggleSmooth.style.background = "#FF8532";}
+ this.moving = true;
+ this.start();
+ }
/**
- * Unfix nodes
+ * this generates the ranges depending on the iniital values.
*
- * @private
+ * @param id
+ * @param map
+ * @param constantsVariableName
*/
- exports._restoreNodes = function() {
- for (var nodeId in this.nodes) {
- if (this.nodes.hasOwnProperty(nodeId)) {
- this.nodes[nodeId].xFixed = false;
- this.nodes[nodeId].yFixed = false;
- }
+ function showValueOfRange (id,map,constantsVariableName) {
+ var valueId = id + "_value";
+ var rangeValue = document.getElementById(id).value;
+
+ if (map instanceof Array) {
+ document.getElementById(valueId).value = map[parseInt(rangeValue)];
+ this._overWriteGraphConstants(constantsVariableName,map[parseInt(rangeValue)]);
}
- };
+ else {
+ document.getElementById(valueId).value = parseInt(map) * parseFloat(rangeValue);
+ this._overWriteGraphConstants(constantsVariableName, parseInt(map) * parseFloat(rangeValue));
+ }
+
+ if (constantsVariableName == "hierarchicalLayout_direction" ||
+ constantsVariableName == "hierarchicalLayout_levelSeparation" ||
+ constantsVariableName == "hierarchicalLayout_nodeSpacing") {
+ this._setupHierarchicalLayout();
+ }
+ this.moving = true;
+ this.start();
+ }
/***/ },
@@ -30829,22 +30828,6 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 57 */
-/***/ function(module, exports, __webpack_require__) {
-
- module.exports = function(module) {
- if(!module.webpackPolyfill) {
- module.deprecate = function() {};
- module.paths = [];
- // module.parent = undefined by default
- module.children = [];
- module.webpackPolyfill = 1;
- }
- return module;
- }
-
-
-/***/ },
-/* 58 */
/***/ function(module, exports, __webpack_require__) {
/**
@@ -30908,7 +30891,7 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
-/* 59 */
+/* 58 */
/***/ function(module, exports, __webpack_require__) {
/**
@@ -31067,7 +31050,7 @@ return /******/ (function(modules) { // webpackBootstrap
};
/***/ },
-/* 60 */
+/* 59 */
/***/ function(module, exports, __webpack_require__) {
/**
@@ -31465,6 +31448,22 @@ return /******/ (function(modules) { // webpackBootstrap
};
+/***/ },
+/* 60 */
+/***/ function(module, exports, __webpack_require__) {
+
+ module.exports = function(module) {
+ if(!module.webpackPolyfill) {
+ module.deprecate = function() {};
+ module.paths = [];
+ // module.parent = undefined by default
+ module.children = [];
+ module.webpackPolyfill = 1;
+ }
+ return module;
+ }
+
+
/***/ }
/******/ ])
})
diff --git a/dist/vis.map b/dist/vis.map
index afc0414a..87c2c38c 100644
--- a/dist/vis.map
+++ b/dist/vis.map
@@ -1 +1 @@
-{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DataStep","Range","stack","TimeStep","components","items","Item","ItemBox","ItemPoint","ItemRange","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Edge","Groups","Images","Node","Popup","dotparser","Graph","Error","moment","hammer","isNumber","object","Number","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","isDataTable","google","visualization","DataTable","randomUUID","S4","Math","floor","random","toString","extend","a","i","len","arguments","length","other","prop","hasOwnProperty","selectiveExtend","props","Array","isArray","selectiveDeepExtend","b","TypeError","constructor","Object","undefined","deepExtend","equalArray","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","value","getAbsoluteLeft","elem","getBoundingClientRect","left","window","pageXOffset","getAbsoluteTop","top","pageYOffset","addClassName","className","classes","split","indexOf","push","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","returnValue","getTarget","target","srcElement","nodeType","parentNode","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","GiveDec","Hex","Value","eval","GiveHex","Dec","parseColor","color","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","hexToRGB","hex","replace","toUpperCase","substring","d","e","f","r","g","RGBToHex","red","green","blue","RGBToHSV","minRGB","maxRGB","max","hue","saturation","HSVToRGB","q","t","rgb","isOk","test","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","mergeOptions","mergeTarget","options","enabled","binarySearch","orderedItems","range","field","field2","maxIterations","iteration","found","low","high","newLow","newHigh","guess","isVisible","start","console","log","binarySearchGeneric","sidePreference","newGuess","prevValue","nextValue","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","createElement","drawPoint","x","y","group","point","drawPoints","style","setAttributeNS","size","drawBar","width","height","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","prototype","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","columns","_getColumnNames","row","rows","getNumberOfRows","item","col","cols","getValue","update","updatedIds","addOrUpdate","_updateItem","get","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","_appendRow","result","getIds","getDataSet","map","mappedItems","filteredItem","name","sort","av","bv","remove","removedId","removedIds","_remove","clear","keys","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","JSON","stringify","dataTable","getNumberOfColumns","getColumnId","getColumnLabel","addRow","setValue","_ids","_onEvent","apply","setData","viewOptions","getArguments","defaultFilter","dataSet","added","updated","removed","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","eye","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","colorAxis","colorGrid","colorDot","colorDotBorder","setOptions","Emitter","_setScale","scale","z","xCenter","yCenter","zCenter","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","az","cx","getCameraLocation","cy","cz","sinTx","sin","getCameraRotation","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","bx","by","ex","ey","ez","getArmLength","xcenter","frame","canvas","clientWidth","ycenter","_setBackgroundColor","backgroundColor","fill","stroke","strokeWidth","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","counter","column","getDistinctValues","distinctValues","getColumnRange","minMax","_dataInitialize","rawData","_onChange","dataFilter","setOnLoadCallback","redraw","withBars","defaultXBarWidth","dataX","defaultYBarWidth","dataY","xRange","defaultXMin","defaultXMax","defaultXStep","yRange","defaultYMin","defaultYMax","defaultYStep","zRange","defaultZMin","defaultZMax","defaultZStep","valueRange","defaultValueMin","defaultValueMax","_getDataPoints","sortNumber","obj","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","hasChildNodes","firstChild","position","overflow","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","setCameraPosition","pos","horizontal","vertical","setArmRotation","distance","setArmLength","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","next","end","textAlign","textBaseline","fillText","label","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","from","to","prettyStep","text","xText","yText","zText","offset","xOffset","yOffset","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","abs","parseInt","cross","topSideVisible","zAvg","transBottom","dist","sortDepth","aDiff","subtract","bDiff","crossproduct","crossProduct","radius","arc","PI","j","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","diff","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","getMouseX","startMouseY","getMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","round","parameters","emit","delay","mouseX","mouseY","tooltipTimeout","clearTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","setTimeout","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","content","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","clientX","targetTouches","clientY","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","dataView","progress","sub","sum","prev","bar","MozBorderRadius","slide","onclick","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","setStep","calculatePrettyStep","log10","LN10","step1","pow","step2","step5","toPrecision","getStep","defaultOptions","autoResize","orientation","maxHeight","minHeight","_create","body","domProps","emitter","bind","snap","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","timeAxis","currentTime","customTime","itemSet","itemsData","groupsData","setItems","Hammer","backgroundVertical","backgroundHorizontal","centerContainer","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","_onTouch","_onPinch","_onDragStart","_onDrag","prevent_default","listeners","events","args","slice","scrollTop","scrollTopMin","touch","destroy","_stopAutoResize","component","_initAutoResize","setCustomTime","time","getCustomTime","newDataSet","initialLoad","fit","setWindow","getVisibleItems","setGroups","groups","what","dataRange","getItemRange","dataset","minItem","maxStartItem","maxEndItem","setSelection","getSelection","getWindow","getRange","resized","borderRootHeight","borderRootWidth","autoHeight","containerHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","visibility","repaint","conversion","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","allowDragging","initialScrollTop","gesture","deltaY","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","linegraph","backgroundHorizontalContainer","minimumStep","forcedStepSize","current","autoScale","stepIndex","marginStart","marginEnd","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","first","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","isMajor","now","hours","minutes","seconds","milliseconds","clone","direction","moveable","zoomable","zoomMin","zoomMax","_onDragEnd","_onHold","_onMouseWheel","validateDirection","getPointer","pageX","pageY","hammerUtil","changed","_applyRange","newStart","newEnd","deltaX","diffRange","fakeGesture","pointer","pointerDate","_pointerToDate","zoom","touches","initDate","move","EPSILON","orderByStart","orderByEnd","aTime","bTime","force","iMax","axis","collidingItem","jj","collision","nostack","SCALE","DAY","MILLISECOND","SECOND","MINUTE","HOUR","WEEKDAY","MONTH","YEAR","setFullYear","getFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth","setScale","newScale","newStep","setAutoScale","enable","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","date","year","getLabelMinor","format","getLabelMajor","_isResized","_previousWidth","_previousHeight","showCurrentTime","parent","title","currentTimeTimer","showCustomTime","eventParams","drag","dragging","stopPropagation","svg","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","lines","labels","conversionFactor","minWidth","stepPixels","stepPixelsForced","lineOffset","master","svgElements","amountOfGroups","addGroup","graphOptions","updateGroup","removeGroup","hide","show","lineContainer","display","_redrawGroupIcons","iconHeight","iconOffset","groupId","drawIcon","changeCalled","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineWidth","minorLineHeight","majorLineWidth","majorLineHeight","_redrawLabels","amountOfSteps","stepDifference","valueAtZero","marginStartPos","maxLabelSize","_redrawLabel","_redrawLine","characterHeight","largestWidth","majorCharWidth","minorCharWidth","convertValue","invertedValue","convertedValue","textMinor","createTextNode","measureCharMinor","textMajor","measureCharMajor","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","setZeroPosition","catmullRom","parametrization","alpha","SVGcontainer","path","fillPath","fillHeight","outline","shaded","barWidth","bar1Height","bar2Height","visibleItems","byStart","byEnd","inner","foreground","marker","Element","getLabelWidth","restack","_updateVisibleItems","markerHeight","lastMarkerHeight","dirty","displayed","offsetTop","offsetLeft","ii","repositionY","labelSet","setParent","_checkIfVisible","removeFromDataSet","removeItem","_constructByEndArray","endArray","initialPosByStart","newVisibleItems","initialPosByEnd","_checkIfInvisible","repositionX","align","groupOrder","selectable","editable","updateTime","onAdd","onUpdate","onMove","onRemove","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","selection","stackDirty","touchParams","UNGROUPED","box","_updateUngrouped","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","fn","Function","markDirty","unselect","select","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","getLabelSet","oldItemsData","getItems","_order","getGroups","itemData","_removeItem","groupData","groupOptions","oldGroupId","oldGroup","itemFromTarget","selected","dragLeftItem","dragRightItem","itemProps","groupFromTarget","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","itemSetFromTarget","side","iconSize","iconSpacing","textArea","drawLegendIcons","getComputedStyle","paddingTop","yAxisOrientation","defaultGroup","sampling","graphHeight","barChart","dataAxis","legend","lastStart","rangePerPixelInv","_updateGraph","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","preprocessedGroup","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_preprocessData","_updateYAxis","_convertYvalues","_drawLineGraph","_drawBarGraph","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","_toggleAxisVisiblity","drawIcons","axisUsed","coreDistance","_drawPoints","svgHeight","_catmullRom","_linear","dFill","datapoints","xValue","yValue","extractedData","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","majorLines","majorTexts","minorLines","minorTexts","lineTop","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","insertBefore","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","anchor","deleteButton","itemSetHeight","marginLeft","baseClassName","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","dragLeft","dragRight","_initializeMixinLoaders","renderRefreshRate","renderTimestep","renderTime","maxPhysicsTicksPerRender","physicsDiscreteStepsize","stabilize","initializing","triggerFunctions","edit","editEdge","connect","del","constants","nodes","radiusMin","radiusMax","shape","image","fixed","fontColor","fontSize","fontFace","level","highlightColor","edges","widthSelectionMultiplier","hoverWidth","fontFill","arrowScaleFactor","dash","gap","altLength","inheritColor","configurePhysics","physics","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","repulsion","nodeDistance","hierarchicalRepulsion","clustering","initialMaxNodes","clusterThreshold","reduceToNodes","chainThreshold","clusterEdgeThreshold","sectorThreshold","screenSizeThreshold","fontSizeMultiplier","maxFontSize","forceAmplification","distanceAmplification","edgeGrowth","nodeScaling","maxNodeSizeIncrements","activeAreaBoxSize","clusterLevelDifference","navigation","keyboard","speed","dataManipulation","initiallyVisible","hierarchicalLayout","levelSeparation","nodeSpacing","freezeForStabilization","smoothCurves","dynamic","roundness","dynamicSmoothCurves","maxVelocity","minVelocity","stabilizationIterations","link","editNode","back","addDescription","linkDescription","editEdgeDescription","addError","linkError","editError","editBoundError","deleteError","deleteClusterError","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","hoverObj","controlNodesActive","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","calculationNodes","calculationNodeIndices","nodeIndices","canvasTopLeft","canvasBottomRight","pointerPosition","areaCenter","previousScale","nodesData","edgesData","nodesListeners","_addNodes","_updateNodes","_removeNodes","edgesListeners","_addEdges","_updateEdges","_removeEdges","moving","timer","_setupHierarchicalLayout","zoomExtent","startWithClustering","mousetrap","MixinLoader","_getScriptPath","scripts","getElementsByTagName","src","_getRange","node","minY","maxY","minX","maxX","nodeId","_findCenter","_centerNetwork","initialZoom","disableStart","zoomLevel","numberOfNodes","factor","yDistance","xZoomLevel","yZoomLevel","_updateNodeIndexList","_clearNodeIndexList","idx","dotData","DOTToGraph","_setNodes","_setEdges","_putDataInSector","_stabilize","dragGraph","onEdit","onEditEdge","onConnect","onDelete","editMode","groupname","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","_createKeyBinds","pinch","_onTap","_onDoubleTap","_onRelease","_onMouseMoveTitle","reset","_moveUp","_yStopMoving","_moveDown","_moveLeft","_xStopMoving","_moveRight","_zoomIn","_stopZoom","_zoomOut","_createManipulatorBar","_deleteSelected","_getPointer","pinched","_getScale","_handleTouch","_handleDragStart","_getNodeAt","_getTranslation","isSelected","_selectObject","objectId","selectionObj","xFixed","yFixed","_handleOnDrag","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","_handleTap","_handleDoubleTap","_handleOnHold","_handleOnRelease","_zoom","scaleOld","preScaleDragPointer","DOMtoCanvas","scaleFrac","tx","ty","updateClustersDefault","postScaleDragPointer","canvasToDOM","popupObj","_checkHidePopup","checkShow","_checkShowPopup","popupTimer","edgeId","_getEdgeAt","_hoverObject","_blurObject","lastPopupNode","getTitle","isOverlappingWith","edge","connected","popup","setPosition","setText","manipulationDiv","navigationDivs","oldNodesData","_updateSelection","angle","_resetLevels","_updateCalculationNodes","_reconnectEdges","_updateValueRange","updateLabels","setProperties","properties","oldEdgesData","oldEdge","disconnect","showInternalIds","_createBezierNodes","via","sectors","setValueRange","w","save","translate","_doInAllSectors","restore","offsetX","offsetY","_drawNodes","alwaysShow","setScaleAndPos","inArea","draw","sMax","_drawEdges","_drawControlNodes","_freezeDefinedNodes","_physicsTick","_restoreFrozenNodes","iterations","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","_doInAllActiveSectors","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","toggleFreeze","smooth","mass","internalMultiplier","parentEdgeId","positionBezierNode","mixin","storePosition","dataArray","allowedToMoveX","allowedToMoveY","focusOnNode","nodePosition","requiredScale","canvasCenter","distanceFromCenter","fromId","toId","widthSelected","customLength","originalFromId","originalToId","widthFixed","lengthFixed","controlNodesEnabled","controlNodes","positions","connectedNode","_drawLine","_drawArrow","_drawArrowCenter","_drawDashLine","attachEdge","detachEdge","xFrom","yFrom","xTo","yTo","xObj","yObj","_getDistanceToEdge","_getColor","colorObj","_getLineWidth","_line","midpointX","midpointY","_pointOnLine","_label","resize","_circle","_pointOnCircle","networkScaleInv","_getViaCoordinates","xVia","yVia","quadraticCurveTo","measureText","fillRect","mozDash","setLineDash","pattern","lineDashOffset","mozDashOffset","lineCap","dashedLine","percentage","atan2","arrow","edgeSegmentLength","fromBorderDist","distanceToBorder","fromBorderPoint","toBorderDist","toBorderPoint","x1","y1","x2","y2","x3","y3","lastX","lastY","minDistance","_getDistanceToLine","px","py","something","u","nodeIdFrom","nodeIdTo","getControlNodePositions","_enableControlNodes","_disableControlNodes","_getSelectedControlNode","fromDistance","toDistance","_restoreControlNodes","defaultIndex","DEFAULT","load","url","img","Image","onload","imagelist","grouplist","dynamicEdges","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","borderWidthSelected","fx","fy","vx","vy","minForce","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","getDistance","globalAlpha","drawImage","textSize","getTextSize","clusterLineWidth","selectionLineWidth","roundRect","database","diameter","circle","defaultSize","ellipse","_drawShape","radiusMultiplier","baseline","labelUnderNode","lineCount","yLine","inView","clearVelocity","updateVelocity","massBeforeClustering","energyBefore","styleAttr","fontFamily","WebkitBorderRadius","whiteSpace","maxWidth","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","o","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","substr","forEach2","array1","array2","elem1","elem2","convertEdge","dotEdge","graphEdge","graphData","dotNode","graphNode","subEdge","{","}","[","]",";","=",",","->","--","eventType","getTouchList","collectEventData","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","n","r2d","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","dashArray","dashLength","dashCount","slope","distRemaining","dashIndex","PhysicsMixin","ClusterMixin","SectorsMixin","SelectionMixin","ManipulationMixin","NavigationMixin","HierarchicalLayoutMixin","_loadMixin","sourceVariable","mixinFunction","_clearMixin","_loadSelectedForceSolver","_loadPhysicsConfiguration","hubThreshold","activeSector","drawingNode","blockConnectingEdgeSelection","forceAppendSelection","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","_addEvent","_characterFromEvent","fromCharCode","_MAP","_KEYCODE_MAP","_stop","tag_name","tagName","contentEditable","_modifiersMatch","modifiers1","modifiers2","_resetSequences","do_not_reset","active_sequences","_sequence_levels","_inside_sequence","_getMatches","character","modifiers","combination","matches","_isModifier","seq","combo","_eventModifiers","altKey","metaKey","_fireCallback","cancelBubble","_handleCharacter","processed_sequence_callback","_handleKey","keyCode","_ignore_next_keyup","_resetSequenceTimer","_reset_timer","_getReverseMap","_REVERSE_MAP","_pickBestAction","_bindSequence","_increaseSequence","_callbackAndReset","_bindSingle","sequence_name","sequence","_SPECIAL_ALIASES","_SHIFT_MAP","_bindMultiple","combinations",8,9,13,16,17,18,20,27,32,33,34,35,36,37,38,39,40,45,46,91,93,224,106,107,109,110,111,186,187,188,189,190,191,192,219,220,221,222,"~","!","@","#","$","%","^","&","*","(",")","_","+",":","\"","<",">","?","|","command","return","escape","_direct_map","unbind","trigger","__WEBPACK_AMD_DEFINE_RESULT__","global","dfl","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","deprecate","msg","printMsg","suppressDeprecationWarnings","warn","firstTime","padToken","func","leftZeroFill","ordinalizeToken","period","lang","ordinal","Language","Moment","config","checkOverflow","Duration","duration","normalizedInput","normalizeObjectUnits","years","quarters","quarter","months","month","weeks","week","days","day","hour","minute","second","millisecond","_milliseconds","_days","_months","_bubble","cloneMoment","momentProperties","absRound","number","targetLength","forceSign","output","addOrSubtractDurationFromMoment","mom","isAdding","updateOffset","_d","setTime","rawSetter","rawGetter","rawMonthSetter","input","compareArrays","dontConvert","lengthDiff","diffs","toInt","normalizeUnits","units","lowered","unitAliases","camelFunctions","inputObject","normalizedProp","makeList","setter","getter","method","_lang","results","utc","set","argumentForCoercion","coercedNumber","isFinite","daysInMonth","UTC","getUTCDate","weeksInYear","dow","doy","weekOfYear","daysInYear","isLeapYear","_a","_pf","DATE","_overflowDayOfYear","isValid","_isValid","getTime","_strict","normalizeLanguage","makeAs","model","_isUTC","zone","_offset","local","loadLang","abbr","languages","unloadLang","getLangDefinition","k","hasModule","removeFormattingTokens","makeFormatFunction","formattingTokens","formatTokenFunctions","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","getParseRegexForToken","parseTokenOneDigit","parseTokenThreeDigits","parseTokenFourDigits","parseTokenOneToFourDigits","parseTokenSignedNumber","parseTokenSixDigits","parseTokenOneToSixDigits","parseTokenTwoDigits","parseTokenOneToThreeDigits","parseTokenWord","_l","_meridiemParse","parseTokenTimestampMs","parseTokenTimezone","parseTokenT","parseTokenDigits","parseTokenOneOrTwoDigits","parseTokenOrdinal","RegExp","regexpEscape","unescapeFormat","timezoneMinutesFromString","string","possibleTzMatches","tzChunk","parts","parseTimezoneChunker","addTimeToArrayFromToken","datePartArray","monthsParse","_dayOfYear","parseTwoDigitYear","_isPm","isPM","_useUTC","_tzm","weekdaysParse","_w","invalidWeekday","dayOfYearFromWeekInfo","weekYear","weekday","temp","GG","W","E","_week","gg","dayOfYearFromWeeks","dayOfYear","dateFromConfig","currentDate","yearToUse","currentDateArray","makeUTCDate","getUTCMonth","makeDate","setUTCMinutes","getUTCMinutes","dateFromObject","_i","getUTCFullYear","makeDateFromStringAndFormat","_f","ISO_8601","parseISO","parsedInput","tokens","skipped","stringLength","totalParsedInputLength","matched","p4","makeDateFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","NaN","score","l","isoRegex","isoDates","isoTimes","makeDateFromString","createFromInputFallback","makeDateFromInput","aspNetJsonRegex","ms","setUTCFullYear","parseWeekday","language","substituteTimeAgo","withoutSuffix","isFuture","relativeTime","relativeTimeThresholds","dd","dm","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","daysToAdd","getUTCDay","makeMoment","invalid","preparse","pickBy","moments","res","dayOfMonth","unit","makeAccessor","keepTime","makeDurationGetter","makeDurationAsGetter","makeGlobal","shouldDeprecate","ender","oldGlobalMoment","globalScope","VERSION","_isAMomentObject","aspNetTimeSpanJsonRegex","isoDurationRegex","isoFormat","unitMillisecondFactors","Milliseconds","Seconds","Minutes","Hours","Days","Months","Years","D","Q","DDD","dayofyear","isoweekday","isoweek","weekyear","isoweekyear","ordinalizeTokens","paddedTokens","MMM","monthsShort","MMMM","weekdaysMin","ddd","weekdaysShort","dddd","weekdays","isoWeek","YY","YYYY","YYYYY","YYYYYY","gggg","ggggg","isoWeekYear","GGGG","GGGGG","isoWeekday","meridiem","SS","SSS","SSSS","Z","ZZ","zoneAbbr","zz","zoneName","unix","lists","DDDD","_monthsShort","monthName","regex","_monthsParse","_weekdays","_weekdaysShort","_weekdaysMin","weekdayName","_weekdaysParse","_longDateFormat","LT","L","LL","LLL","LLLL","val","isLower","_calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","_relativeTime","future","past","mm","hh","MM","yy","pastFuture","_ordinal","postformat","_invalidDate","ret","parseIso","isDuration","inp","version","defaultFormat","relativeTimeThreshold","threshold","limit","_abbr","langData","flags","parseZone","isDSTShifted","parsingFlags","invalidAt","inputString","dur","asFloat","that","zoneDiff","startOf","humanize","fromNow","sod","isDST","getDay","endOf","isAfter","isBefore","isSame","getTimezoneOffset","_changeInProgress","hasAlignedHourOffset","isoWeeksInYear","weekInfo","dates","isoWeeks","toJSON","withSuffix","difference","toIsoString","asSeconds","asMonths","require","noGlobal","setup","READY","Event","determineEventTypes","Utils","each","gestures","Detection","register","onTouch","DOCUMENT","EVENT_MOVE","detect","EVENT_END","Instance","defaults","behavior","userSelect","touchAction","touchCallout","contentZooming","userDrag","tapHighlightColor","HAS_POINTEREVENTS","pointerEnabled","msPointerEnabled","HAS_TOUCHEVENTS","IS_MOBILE","NO_MOUSEEVENTS","CALCULATE_INTERVAL","EVENT_TYPES","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_UP","DIRECTION_RIGHT","POINTER_MOUSE","POINTER_TOUCH","POINTER_PEN","EVENT_START","EVENT_RELEASE","EVENT_TOUCH","plugins","utils","dest","handler","iterator","context","inStr","find","inArray","hasParent","getCenter","getVelocity","deltaTime","getAngle","touch1","touch2","getDirection","getScale","getRotation","isVertical","setPrefixedCss","toggle","prefixes","toCamelCase","toggleBehavior","falseFn","onselectstart","ondragstart","str","preventMouseEvents","started","shouldDetect","hook","onTouchHandler","ev","triggerType","srcType","isPointer","isMouse","buttons","PointerEvent","matchType","updatePointer","doDetect","touchList","touchListLength","triggerChange","changedLength","changedTouches","evData","identifiers","identifier","pointerType","timeStamp","preventManipulation","stopDetect","pointers","touchlist","pointerEvent","pointerId","pt","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","MSPOINTER_TYPE_PEN","detection","stopped","startDetect","inst","eventData","startEvent","lastEvent","lastCalcEvent","futureCalcEvent","lastCalcData","extendEventData","instOptions","getCalculatedData","recalc","calcEv","calcData","velocity","velocityX","velocityY","interimAngle","interimDirection","startEv","lastEv","rotation","eventStartHandler","eventHandlers","createEvent","initEvent","dispatchEvent","state","dispose","eh","dragGesture","dragMaxTouches","triggered","dragMinDistance","startCenter","dragDistanceCorrection","dragLockToAxis","dragLockMinDistance","lastDirection","dragBlockVertical","dragBlockHorizontal","Drag","Gesture","holdGesture","holdTimeout","holdThreshold","Hold","Release","Infinity","Swipe","swipeMinTouches","swipeMaxTouches","swipeVelocityX","swipeVelocityY","tapGesture","sincePrev","didDoubleTap","hasMoved","tapMaxDistance","tapMaxTime","doubleTapInterval","doubleTapDistance","tapAlways","Tap","Touch","preventMouse","transformGesture","scaleThreshold","rotationThreshold","transformMinScale","transformMinRotation","Transform","clusterToFit","maxNumberOfNodes","reposition","maxLevels","forceAggregateHubs","normalizeClusterLevels","increaseClusterLevel","repositionNodes","openCluster","isMovingBeforeClustering","_nodeInActiveArea","_sector","_addSector","decreaseClusterLevel","_expandClusterNode","_updateDynamicEdges","updateClusters","zoomDirection","recursive","doNotStart","amountOfNodes","_collapseSector","_formClusters","_openClusters","_openClustersBySize","_aggregateHubs","handleChains","chainPercentage","_getChainFraction","_reduceAmountOfChains","_getHubSize","_formClustersByHub","openAll","containedNodeId","childNode","_expelChildFromParent","_unselectAll","_releaseContainedEdges","_connectEdgeBackToChild","_validateEdges","othersPresent","childNodeId","_repositionBezierNodes","_formClustersByZoom","_forceClustersByZoom","minLength","_addToCluster","_clusterToSmallestNeighbour","smallestNeighbour","smallestNeighbourNode","neighbour","onlyEqual","_formClusterFromHub","hubNode","absorptionSizeOffset","allowCluster","edgesIdarray","amountOfInitialEdges","_addToContainedEdges","_connectEdgeToCluster","_containCircularEdgesFromNode","massBefore","correction","edgeToId","edgeFromId","_addToReroutedEdges","maxLevel","minLevel","clusterLevel","targetLevel","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","fraction","reduceAmount","chains","total","_switchToSector","sectorId","sectorType","_switchToActiveSector","_switchToFrozenSector","_switchToSupportSector","_loadLatestSector","_previousSector","_setActiveSector","newId","_forgetLastSector","_createNewSector","_deleteActiveSector","_deleteFrozenSector","_freezeSector","_activateSector","_mergeThisWithFrozen","_collapseThisToSingleCluster","sector","unqiueIdentifier","previousSector","runFunction","argument","_doInAllFrozenSectors","_drawSectorNodes","_drawAllSectorNodes","_getNodesOverlappingWith","overlappingNodes","_getAllNodesOverlappingWith","_pointerToPositionObject","positionObject","_getEdgesOverlappingWith","overlappingEdges","_getAllEdgesOverlappingWith","_addToSelection","_addToHover","_removeFromSelection","doNotTrigger","_unselectClusters","_getSelectedNodeCount","_getSelectedNode","_getSelectedEdge","_getSelectedEdgeCount","_getSelectedObjectCount","_selectionIsEmpty","_clusterInSelection","_selectConnectedEdges","_hoverConnectedEdges","_unselectConnectedEdges","append","highlightEdges","nodeIds","getSelectedNodes","edgeIds","getSelectedEdges","idArray","RangeError","selectNodes","selectEdges","_clearManipulatorBar","_restoreOverloadedFunctions","functionName","_toggleEditMode","toolbar","getElementById","boundFunction","edgeBeingEdited","selectedControlNode","addNodeButton","_createAddNodeToolbar","addEdgeButton","_createAddEdgeToolbar","editButton","_editNode","_createEditEdgeToolbar","editModeButton","backButton","_addNode","_handleConnect","_finishConnect","_selectControlNode","_controlNodeDrag","_releaseControlNode","newNode","_editEdge","alert","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","wrapper","navigationDivActions","_stopMovement","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","amount","maxCount","_setLevel","parentId","parentLevel","nodeMoved","_restoreNodes","graphToggleSmoothCurves","graph_toggleSmooth","graphRepositionNodes","showValueOfRange","graphGenerateOptions","optionsSpecific","radioButton1","radioButton2","checked","backupConstants","optionsDiv","switchConfigurations","radioButton","querySelector","tableId","table","constantsVariableName","valueId","rangeValue","_overWriteGraphConstants","RepulsionMixin","HierarchialRepulsionMixin","BarnesHutMixin","_toggleBarnesHut","barnesHutTree","_initializeForceCalculation","_calculateForces","_calculateGravitationalForces","_calculateNodeForces","_calculateSpringForcesWithSupport","_calculateHierarchicalSpringForces","_calculateSpringForces","supportNodes","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","nameArray","webpackContext","req","webpackContextResolve","resolve","repulsingForce","a_base","minimumDistance","steepness","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","MAX_VALUE","sizeDiff","minimumTreeSize","rootSize","halfRootSize","centerX","centerY","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","_placeInRegion","region","containedNode","_insertRegion","childSize","_drawTree","_drawBranch","branch","webpackPolyfill","paths"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;CAyBA,SAA2CA,EAAMC,GAC1B,gBAAZC,UAA0C,gBAAXC,QACxCA,OAAOD,QAAUD,IACQ,kBAAXG,SAAyBA,OAAOC,IAC9CD,OAAOH,GACmB,gBAAZC,SACdA,QAAa,IAAID,IAEjBD,EAAU,IAAIC,KACbK,KAAM,WACT,MAAgB,UAAUC,GAKhB,QAASC,GAAoBC,GAG5B,GAAGC,EAAiBD,GACnB,MAAOC,GAAiBD,GAAUP,OAGnC,IAAIC,GAASO,EAAiBD,IAC7BP,WACAS,GAAIF,EACJG,QAAQ,EAUT,OANAL,GAAQE,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,GAG/DL,EAAOS,QAAS,EAGTT,EAAOD,QAvBf,GAAIQ,KAqCJ,OATAF,GAAoBM,EAAIP,EAGxBC,EAAoBO,EAAIL,EAGxBF,EAAoBQ,EAAI,GAGjBR,EAAoB,KAK/B,SAASL,EAAQD,EAASM,GAG9BN,EAAQe,KAAOT,EAAoB,GACnCN,EAAQgB,QAAUV,EAAoB,GAGtCN,EAAQiB,QAAUX,EAAoB,GACtCN,EAAQkB,SAAWZ,EAAoB,GAGvCN,EAAQmB,QAAUb,EAAoB,GACtCN,EAAQoB,SACNC,OAAQf,EAAoB,GAC5BgB,OAAQhB,EAAoB,GAC5BiB,QAASjB,EAAoB,GAC7BkB,QAASlB,EAAoB,GAC7BmB,OAAQnB,EAAoB,IAC5BoB,WAAYpB,EAAoB,KAIlCN,EAAQ2B,SAAWrB,EAAoB,IACvCN,EAAQ4B,QAAUtB,EAAoB,IACtCN,EAAQ6B,UACNC,SAAUxB,EAAoB,IAC9ByB,MAAOzB,EAAoB,IAC3B0B,MAAO1B,EAAoB,IAC3B2B,SAAU3B,EAAoB,IAE9B4B,YACEC,OACEC,KAAM9B,EAAoB,IAC1B+B,QAAS/B,EAAoB,IAC7BgC,UAAWhC,EAAoB,IAC/BiC,UAAWjC,EAAoB,KAGjCkC,UAAWlC,EAAoB,IAC/BmC,YAAanC,EAAoB,IACjCoC,WAAYpC,EAAoB,IAChCqC,SAAUrC,EAAoB,IAC9BsC,WAAYtC,EAAoB,IAChCuC,MAAOvC,EAAoB,IAC3BwC,QAASxC,EAAoB,IAC7ByC,OAAQzC,EAAoB,IAC5B0C,UAAW1C,EAAoB,IAC/B2C,SAAU3C,EAAoB,MAKlCN,EAAQkD,QAAU5C,EAAoB,IACtCN,EAAQmD,SACNC,KAAM9C,EAAoB,IAC1B+C,OAAQ/C,EAAoB,IAC5BgD,OAAQhD,EAAoB,IAC5BiD,KAAMjD,EAAoB,IAC1BkD,MAAOlD,EAAoB,IAC3BmD,UAAWnD,EAAoB,KAIjCN,EAAQ0D,MAAQ,WACd,KAAM,IAAIC,OAAM,+EAIlB3D,EAAQ4D,OAAStD,EAAoB,IACrCN,EAAQ6D,OAASvD,EAAoB,KAKjC,SAASL,OAAQD,QAASM,qBAM9B,GAAIsD,QAAStD,oBAAoB,GAOjCN,SAAQ8D,SAAW,SAASC,GAC1B,MAAQA,aAAkBC,SAA2B,gBAAVD,IAQ7C/D,QAAQiE,SAAW,SAASF,GAC1B,MAAQA,aAAkBG,SAA2B,gBAAVH,IAQ7C/D,QAAQmE,OAAS,SAASJ,GACxB,GAAIA,YAAkBK,MACpB,OAAO,CAEJ,IAAIpE,QAAQiE,SAASF,GAAS,CAEjC,GAAIM,GAAQC,aAAaC,KAAKR,EAC9B,IAAIM,EACF,OAAO,CAEJ,KAAKG,MAAMJ,KAAKK,MAAMV,IACzB,OAAO,EAIX,OAAO,GAQT/D,QAAQ0E,YAAc,SAASX,GAC7B,MAA4B,mBAAb,SACVY,OAAoB,eACpBA,OAAOC,cAAuB,WAC9Bb,YAAkBY,QAAOC,cAAcC,WAQ9C7E,QAAQ8E,WAAa,WACnB,GAAIC,GAAK,WACP,MAAOC,MAAKC,MACQ,MAAhBD,KAAKE,UACPC,SAAS,IAGb,OACIJ,KAAOA,IAAO,IACVA,IAAO,IACPA,IAAO,IACPA,IAAO,IACPA,IAAOA,IAAOA,KAWxB/E,QAAQoF,OAAS,SAAUC,GACzB,IAAK,GAAIC,GAAI,EAAGC,EAAMC,UAAUC,OAAYF,EAAJD,EAASA,IAAK,CACpD,GAAII,GAAQF,UAAUF,EACtB,KAAK,GAAIK,KAAQD,GACXA,EAAME,eAAeD,KACvBN,EAAEM,GAAQD,EAAMC,IAKtB,MAAON,IAWTrF,QAAQ6F,gBAAkB,SAAUC,EAAOT,GACzC,IAAKU,MAAMC,QAAQF,GACjB,KAAM,IAAInC,OAAM,uDAGlB,KAAK,GAAI2B,GAAI,EAAGA,EAAIE,UAAUC,OAAQH,IAGpC,IAAK,GAFDI,GAAQF,UAAUF,GAEbxE,EAAI,EAAGA,EAAIgF,EAAML,OAAQ3E,IAAK,CACrC,GAAI6E,GAAOG,EAAMhF,EACb4E,GAAME,eAAeD,KACvBN,EAAEM,GAAQD,EAAMC,IAItB,MAAON,IAWTrF,QAAQiG,oBAAsB,SAAUH,EAAOT,EAAGa,GAEhD,GAAIH,MAAMC,QAAQE,GAChB,KAAM,IAAIC,WAAU,yCAEtB,KAAK,GAAIb,GAAI,EAAGA,EAAIE,UAAUC,OAAQH,IAEpC,IAAK,GADDI,GAAQF,UAAUF,GACbxE,EAAI,EAAGA,EAAIgF,EAAML,OAAQ3E,IAAK,CACrC,GAAI6E,GAAOG,EAAMhF,EACjB,IAAI4E,EAAME,eAAeD,GACvB,GAAIO,EAAEP,IAASO,EAAEP,GAAMS,cAAgBC,OACrBC,SAAZjB,EAAEM,KACJN,EAAEM,OAEAN,EAAEM,GAAMS,cAAgBC,OAC1BrG,QAAQuG,WAAWlB,EAAEM,GAAOO,EAAEP,IAG9BN,EAAEM,GAAQO,EAAEP,OAET,CAAA,GAAII,MAAMC,QAAQE,EAAEP,IACzB,KAAM,IAAIQ,WAAU,yCAEpBd,GAAEM,GAAQO,EAAEP,IAMpB,MAAON,IASTrF,QAAQuG,WAAa,SAASlB,EAAGa,GAE/B,GAAIH,MAAMC,QAAQE,GAChB,KAAM,IAAIC,WAAU,yCAGtB,KAAK,GAAIR,KAAQO,GACf,GAAIA,EAAEN,eAAeD,GACnB,GAAIO,EAAEP,IAASO,EAAEP,GAAMS,cAAgBC,OACrBC,SAAZjB,EAAEM,KACJN,EAAEM,OAEAN,EAAEM,GAAMS,cAAgBC,OAC1BrG,QAAQuG,WAAWlB,EAAEM,GAAOO,EAAEP,IAG9BN,EAAEM,GAAQO,EAAEP,OAET,CAAA,GAAII,MAAMC,QAAQE,EAAEP,IACzB,KAAM,IAAIQ,WAAU,yCAEpBd,GAAEM,GAAQO,EAAEP,GAIlB,MAAON,IAUTrF,QAAQwG,WAAa,SAAUnB,EAAGa,GAChC,GAAIb,EAAEI,QAAUS,EAAET,OAAQ,OAAO,CAEjC,KAAK,GAAIH,GAAI,EAAGC,EAAMF,EAAEI,OAAYF,EAAJD,EAASA,IACvC,GAAID,EAAEC,IAAMY,EAAEZ,GAAI,OAAO,CAG3B,QAAO,GAYTtF,QAAQyG,QAAU,SAAS1C,EAAQ2C,GACjC,GAAIrC,EAEJ,IAAeiC,SAAXvC,EACF,MAAOuC,OAET,IAAe,OAAXvC,EACF,MAAO,KAGT,KAAK2C,EACH,MAAO3C,EAET,IAAsB,gBAAT2C,MAAwBA,YAAgBxC,SACnD,KAAM,IAAIP,OAAM,wBAIlB,QAAQ+C,GACN,IAAK,UACL,IAAK,UACH,MAAOC,SAAQ5C,EAEjB,KAAK,SACL,IAAK,SACH,MAAOC,QAAOD,EAAO6C,UAEvB,KAAK,SACL,IAAK,SACH,MAAO1C,QAAOH,EAEhB,KAAK,OACH,GAAI/D,QAAQ8D,SAASC,GACnB,MAAO,IAAIK,MAAKL,EAElB,IAAIA,YAAkBK,MACpB,MAAO,IAAIA,MAAKL,EAAO6C,UAEpB,IAAIhD,OAAOiD,SAAS9C,GACvB,MAAO,IAAIK,MAAKL,EAAO6C,UAEzB,IAAI5G,QAAQiE,SAASF,GAEnB,MADAM,GAAQC,aAAaC,KAAKR,GACtBM,EAEK,GAAID,MAAKJ,OAAOK,EAAM,KAGtBT,OAAOG,GAAQ+C,QAIxB,MAAM,IAAInD,OACN,iCAAmC3D,QAAQ+G,QAAQhD,GAC/C,gBAGZ,KAAK,SACH,GAAI/D,QAAQ8D,SAASC,GACnB,MAAOH,QAAOG,EAEhB,IAAIA,YAAkBK,MACpB,MAAOR,QAAOG,EAAO6C,UAElB,IAAIhD,OAAOiD,SAAS9C,GACvB,MAAOH,QAAOG,EAEhB,IAAI/D,QAAQiE,SAASF,GAEnB,MADAM,GAAQC,aAAaC,KAAKR,GAGjBH,OAFLS,EAEYL,OAAOK,EAAM,IAGbN,EAIhB,MAAM,IAAIJ,OACN,iCAAmC3D,QAAQ+G,QAAQhD,GAC/C,gBAGZ,KAAK,UACH,GAAI/D,QAAQ8D,SAASC,GACnB,MAAO,IAAIK,MAAKL,EAEb,IAAIA,YAAkBK,MACzB,MAAOL,GAAOiD,aAEX,IAAIpD,OAAOiD,SAAS9C,GACvB,MAAOA,GAAO+C,SAASE,aAEpB,IAAIhH,QAAQiE,SAASF,GAExB,MADAM,GAAQC,aAAaC,KAAKR,GACtBM,EAEK,GAAID,MAAKJ,OAAOK,EAAM,KAAK2C,cAG3B,GAAI5C,MAAKL,GAAQiD,aAI1B,MAAM,IAAIrD,OACN,iCAAmC3D,QAAQ+G,QAAQhD,GAC/C,mBAGZ,KAAK,UACH,GAAI/D,QAAQ8D,SAASC,GACnB,MAAO,SAAWA,EAAS,IAExB,IAAIA,YAAkBK,MACzB,MAAO,SAAWL,EAAO6C,UAAY,IAElC,IAAI5G,QAAQiE,SAASF,GAAS,CACjCM,EAAQC,aAAaC,KAAKR,EAC1B,IAAIkD,EAQJ,OALEA,GAFE5C,EAEM,GAAID,MAAKJ,OAAOK,EAAM,KAAKuC,UAG3B,GAAIxC,MAAKL,GAAQ6C,UAEpB,SAAWK,EAAQ,KAG1B,KAAM,IAAItD,OACN,iCAAmC3D,QAAQ+G,QAAQhD,GAC/C,mBAGZ,SACE,KAAM,IAAIJ,OAAM,iBAAmB+C,EAAO,MAOhD,IAAIpC,cAAe,qBAOnBtE,SAAQ+G,QAAU,SAAShD,GACzB,GAAI2C,SAAc3C,EAElB,OAAY,UAAR2C,EACY,MAAV3C,EACK,OAELA,YAAkB4C,SACb,UAEL5C,YAAkBC,QACb,SAELD,YAAkBG,QACb,SAELH,YAAkBgC,OACb,QAELhC,YAAkBK,MACb,OAEF,SAEQ,UAARsC,EACA,SAEQ,WAARA,EACA,UAEQ,UAARA,EACA,SAGFA,GAST1G,QAAQkH,gBAAkB,SAASC,GACjC,MAAOA,GAAKC,wBAAwBC,KAAOC,OAAOC,aASpDvH,QAAQwH,eAAiB,SAASL,GAChC,MAAOA,GAAKC,wBAAwBK,IAAMH,OAAOI,aAQnD1H,QAAQ2H,aAAe,SAASR,EAAMS,GACpC,GAAIC,GAAUV,EAAKS,UAAUE,MAAM,IACD,KAA9BD,EAAQE,QAAQH,KAClBC,EAAQG,KAAKJ,GACbT,EAAKS,UAAYC,EAAQI,KAAK,OASlCjI,QAAQkI,gBAAkB,SAASf,EAAMS,GACvC,GAAIC,GAAUV,EAAKS,UAAUE,MAAM,KAC/BK,EAAQN,EAAQE,QAAQH,EACf,KAATO,IACFN,EAAQO,OAAOD,EAAO,GACtBhB,EAAKS,UAAYC,EAAQI,KAAK,OAalCjI,QAAQqI,QAAU,SAAStE,EAAQuE,GACjC,GAAIhD,GACAC,CACJ,IAAIxB,YAAkBgC,OAEpB,IAAKT,EAAI,EAAGC,EAAMxB,EAAO0B,OAAYF,EAAJD,EAASA,IACxCgD,EAASvE,EAAOuB,GAAIA,EAAGvB,OAKzB,KAAKuB,IAAKvB,GACJA,EAAO6B,eAAeN,IACxBgD,EAASvE,EAAOuB,GAAIA,EAAGvB,IAY/B/D,QAAQuI,QAAU,SAASxE,GACzB,GAAIyE,KAEJ,KAAK,GAAI7C,KAAQ5B,GACXA,EAAO6B,eAAeD,IAAO6C,EAAMR,KAAKjE,EAAO4B,GAGrD,OAAO6C,IAUTxI,QAAQyI,eAAiB,SAAS1E,EAAQ2E,EAAKzB,GAC7C,MAAIlD,GAAO2E,KAASzB,GAClBlD,EAAO2E,GAAOzB,GACP,IAGA,GAYXjH,QAAQ2I,iBAAmB,SAASC,EAASC,EAAQC,EAAUC,GACzDH,EAAQD,kBACSrC,SAAfyC,IACFA,GAAa,GAEA,eAAXF,GAA2BG,UAAUC,UAAUlB,QAAQ,YAAc,IACvEc,EAAS,kBAGXD,EAAQD,iBAAiBE,EAAQC,EAAUC,IAE3CH,EAAQM,YAAY,KAAOL,EAAQC,IAWvC9I,QAAQmJ,oBAAsB,SAASP,EAASC,EAAQC,EAAUC,GAC5DH,EAAQO,qBAES7C,SAAfyC,IACFA,GAAa,GAEA,eAAXF,GAA2BG,UAAUC,UAAUlB,QAAQ,YAAc,IACvEc,EAAS,kBAGXD,EAAQO,oBAAoBN,EAAQC,EAAUC,IAG9CH,EAAQQ,YAAY,KAAOP,EAAQC,IAOvC9I,QAAQqJ,eAAiB,SAAUC,GAC5BA,IACHA,EAAQhC,OAAOgC,OAEbA,EAAMD,eACRC,EAAMD,iBAGNC,EAAMC,aAAc,GASxBvJ,QAAQwJ,UAAY,SAASF,GAEtBA,IACHA,EAAQhC,OAAOgC,MAGjB,IAAIG,EAcJ,OAZIH,GAAMG,OACRA,EAASH,EAAMG,OAERH,EAAMI,aACbD,EAASH,EAAMI,YAGMpD,QAAnBmD,EAAOE,UAA4C,GAAnBF,EAAOE,WAEzCF,EAASA,EAAOG,YAGXH,GAGTzJ,QAAQ6J,UAQR7J,QAAQ6J,OAAOC,UAAY,SAAU7C,EAAO8C,GAK1C,MAJoB,kBAAT9C,KACTA,EAAQA,KAGG,MAATA,EACe,GAATA,EAGH8C,GAAgB,MASzB/J,QAAQ6J,OAAOG,SAAW,SAAU/C,EAAO8C,GAKzC,MAJoB,kBAAT9C,KACTA,EAAQA,KAGG,MAATA,EACKjD,OAAOiD,IAAU8C,GAAgB,KAGnCA,GAAgB,MASzB/J,QAAQ6J,OAAOI,SAAW,SAAUhD,EAAO8C,GAKzC,MAJoB,kBAAT9C,KACTA,EAAQA,KAGG,MAATA,EACK/C,OAAO+C,GAGT8C,GAAgB,MASzB/J,QAAQ6J,OAAOK,OAAS,SAAUjD,EAAO8C,GAKvC,MAJoB,kBAAT9C,KACTA,EAAQA,KAGNjH,QAAQiE,SAASgD,GACZA,EAEAjH,QAAQ8D,SAASmD,GACjBA,EAAQ,KAGR8C,GAAgB,MAU3B/J,QAAQ6J,OAAOM,UAAY,SAAUlD,EAAO8C,GAK1C,MAJoB,kBAAT9C,KACTA,EAAQA,KAGHA,GAAS8C,GAAgB,MAKlC/J,QAAQoK,QAAU,SAASC,KACzB,GAAIC,MAiBJ,OAdEA,OADS,KAAPD,IACM,GACM,KAAPA,IACC,GACM,KAAPA,IACC,GACM,KAAPA,IACC,GACM,KAAPA,IACC,GACM,KAAPA,IACC,GAEAE,KAAKF,MAKjBrK,QAAQwK,QAAU,SAASC,GACzB,GAAIH,EAiBJ,OAdEA,GADQ,IAAPG,EACO,IACM,IAAPA,EACC,IACM,IAAPA,EACC,IACM,IAAPA,EACC,IACM,IAAPA,EACC,IACM,IAAPA,EACC,IAEA,GAAKA,GAWjBzK,QAAQ0K,WAAa,SAASC,GAC5B,GAAI9J,EACJ,IAAIb,QAAQiE,SAAS0G,GACnB,GAAI3K,QAAQ4K,WAAWD,GAAQ,CAC7B,GAAIE,GAAM7K,QAAQ8K,SAASH,GACvBI,GAAmBC,EAAEH,EAAIG,EAAEC,EAAU,IAARJ,EAAII,EAASC,EAAElG,KAAKmG,IAAI,EAAU,KAARN,EAAIK,IAC3DE,GAAmBJ,EAAEH,EAAIG,EAAEC,EAAEjG,KAAKmG,IAAI,EAAU,KAARN,EAAIK,GAAUA,EAAQ,GAANL,EAAIK,GAC5DG,EAAkBrL,QAAQsL,SAASF,EAAeJ,EAAGI,EAAeJ,EAAGI,EAAeF,GACtFK,EAAkBvL,QAAQsL,SAASP,EAAgBC,EAAED,EAAgBE,EAAEF,EAAgBG,EAE3FrK,IACE2K,WAAYb,EACZc,OAAOJ,EACPK,WACEF,WAAWD,EACXE,OAAOJ,GAETM,OACEH,WAAWD,EACXE,OAAOJ,QAKXxK,IACE2K,WAAWb,EACXc,OAAOd,EACPe,WACEF,WAAWb,EACXc,OAAOd,GAETgB,OACEH,WAAWb,EACXc,OAAOd,QAMb9J,MACAA,EAAE2K,WAAab,EAAMa,YAAc,QACnC3K,EAAE4K,OAASd,EAAMc,QAAU5K,EAAE2K,WAEzBxL,QAAQiE,SAAS0G,EAAMe,WACzB7K,EAAE6K,WACAD,OAAQd,EAAMe,UACdF,WAAYb,EAAMe,YAIpB7K,EAAE6K,aACF7K,EAAE6K,UAAUF,WAAab,EAAMe,WAAaf,EAAMe,UAAUF,YAAc3K,EAAE2K,WAC5E3K,EAAE6K,UAAUD,OAASd,EAAMe,WAAaf,EAAMe,UAAUD,QAAU5K,EAAE4K,QAGlEzL,QAAQiE,SAAS0G,EAAMgB,OACzB9K,EAAE8K,OACAF,OAAQd,EAAMgB,MACdH,WAAYb,EAAMgB,QAIpB9K,EAAE8K,SACF9K,EAAE8K,MAAMH,WAAab,EAAMgB,OAAShB,EAAMgB,MAAMH,YAAc3K,EAAE2K,WAChE3K,EAAE8K,MAAMF,OAASd,EAAMgB,OAAShB,EAAMgB,MAAMF,QAAU5K,EAAE4K,OAI5D,OAAO5K,IASTb,QAAQ4L,SAAW,SAASC,GAC1BA,EAAMA,EAAIC,QAAQ,IAAI,IAAIC,aAE1B,IAAI1G,GAAIrF,QAAQoK,QAAQyB,EAAIG,UAAU,EAAG,IACrC9F,EAAIlG,QAAQoK,QAAQyB,EAAIG,UAAU,EAAG,IACrCnL,EAAIb,QAAQoK,QAAQyB,EAAIG,UAAU,EAAG,IACrCC,EAAIjM,QAAQoK,QAAQyB,EAAIG,UAAU,EAAG,IACrCE,EAAIlM,QAAQoK,QAAQyB,EAAIG,UAAU,EAAG,IACrCG,EAAInM,QAAQoK,QAAQyB,EAAIG,UAAU,EAAG,IAErCI,EAAS,GAAJ/G,EAAUa,EACfmG,EAAS,GAAJxL,EAAUoL,EACf/F,EAAS,GAAJgG,EAAUC,CAEnB,QAAQC,EAAEA,EAAEC,EAAEA,EAAEnG,EAAEA,IAGpBlG,QAAQsM,SAAW,SAASC,EAAIC,EAAMC,GACpC,GAAIpH,GAAIrF,QAAQwK,QAAQxF,KAAKC,MAAMsH,EAAM,KACrCrG,EAAIlG,QAAQwK,QAAQ+B,EAAM,IAC1B1L,EAAIb,QAAQwK,QAAQxF,KAAKC,MAAMuH,EAAQ,KACvCP,EAAIjM,QAAQwK,QAAQgC,EAAQ,IAC5BN,EAAIlM,QAAQwK,QAAQxF,KAAKC,MAAMwH,EAAO,KACtCN,EAAInM,QAAQwK,QAAQiC,EAAO,IAE3BZ,EAAMxG,EAAIa,EAAIrF,EAAIoL,EAAIC,EAAIC,CAC9B,OAAO,IAAMN,GAaf7L,QAAQ0M,SAAW,SAASH,EAAIC,EAAMC,GACpCF,GAAQ,IAAKC,GAAY,IAAKC,GAAU,GACxC,IAAIE,GAAS3H,KAAKmG,IAAIoB,EAAIvH,KAAKmG,IAAIqB,EAAMC,IACrCG,EAAS5H,KAAK6H,IAAIN,EAAIvH,KAAK6H,IAAIL,EAAMC,GAGzC,IAAIE,GAAUC,EACZ,OAAQ5B,EAAE,EAAEC,EAAE,EAAEC,EAAEyB,EAIpB,IAAIV,GAAKM,GAAKI,EAAUH,EAAMC,EAASA,GAAME,EAAUJ,EAAIC,EAAQC,EAAKF,EACpEvB,EAAKuB,GAAKI,EAAU,EAAMF,GAAME,EAAU,EAAI,EAC9CG,EAAM,IAAI9B,EAAIiB,GAAGW,EAASD,IAAS,IACnCI,GAAcH,EAASD,GAAQC,EAC/B3F,EAAQ2F,CACZ,QAAQ5B,EAAE8B,EAAI7B,EAAE8B,EAAW7B,EAAEjE,IAY/BjH,QAAQgN,SAAW,SAAShC,EAAGC,EAAGC,GAChC,GAAIkB,GAAGC,EAAGnG,EAENZ,EAAIN,KAAKC,MAAU,EAAJ+F,GACfmB,EAAQ,EAAJnB,EAAQ1F,EACZxE,EAAIoK,GAAK,EAAID,GACbgC,EAAI/B,GAAK,EAAIiB,EAAIlB,GACjBiC,EAAIhC,GAAK,GAAK,EAAIiB,GAAKlB,EAE3B,QAAQ3F,EAAI,GACV,IAAK,GAAG8G,EAAIlB,EAAGmB,EAAIa,EAAGhH,EAAIpF,CAAG,MAC7B,KAAK,GAAGsL,EAAIa,EAAGZ,EAAInB,EAAGhF,EAAIpF,CAAG,MAC7B,KAAK,GAAGsL,EAAItL,EAAGuL,EAAInB,EAAGhF,EAAIgH,CAAG,MAC7B,KAAK,GAAGd,EAAItL,EAAGuL,EAAIY,EAAG/G,EAAIgF,CAAG,MAC7B,KAAK,GAAGkB,EAAIc,EAAGb,EAAIvL,EAAGoF,EAAIgF,CAAG,MAC7B,KAAK,GAAGkB,EAAIlB,EAAGmB,EAAIvL,EAAGoF,EAAI+G,EAG5B,OAAQb,EAAEpH,KAAKC,MAAU,IAAJmH,GAAUC,EAAErH,KAAKC,MAAU,IAAJoH,GAAUnG,EAAElB,KAAKC,MAAU,IAAJiB,KAGrElG,QAAQsL,SAAW,SAASN,EAAGC,EAAGC,GAChC,GAAIiC,GAAMnN,QAAQgN,SAAShC,EAAGC,EAAGC,EACjC,OAAOlL,SAAQsM,SAASa,EAAIf,EAAGe,EAAId,EAAGc,EAAIjH,IAG5ClG,QAAQ8K,SAAW,SAASe,GAC1B,GAAIsB,GAAMnN,QAAQ4L,SAASC,EAC3B,OAAO7L,SAAQ0M,SAASS,EAAIf,EAAGe,EAAId,EAAGc,EAAIjH,IAG5ClG,QAAQ4K,WAAa,SAASiB,GAC5B,GAAIuB,GAAO,qCAAqCC,KAAKxB,EACrD,OAAOuB,IAWTpN,QAAQsN,sBAAwB,SAASC,EAAQC,GAC/C,GAA8B,gBAAnBA,GAA6B,CAEtC,IAAK,GADDC,GAAWpH,OAAOqH,OAAOF,GACpBlI,EAAI,EAAGA,EAAIiI,EAAO9H,OAAQH,IAC7BkI,EAAgB5H,eAAe2H,EAAOjI,KACC,gBAA9BkI,GAAgBD,EAAOjI,MAChCmI,EAASF,EAAOjI,IAAMtF,QAAQ2N,aAAaH,EAAgBD,EAAOjI,KAIxE,OAAOmI,GAGP,MAAO,OAWXzN,QAAQ2N,aAAe,SAASH,GAC9B,GAA8B,gBAAnBA,GAA6B,CACtC,GAAIC,GAAWpH,OAAOqH,OAAOF,EAC7B,KAAK,GAAIlI,KAAKkI,GACRA,EAAgB5H,eAAeN,IACA,gBAAtBkI,GAAgBlI,KACzBmI,EAASnI,GAAKtF,QAAQ2N,aAAaH,EAAgBlI,IAIzD,OAAOmI,GAGP,MAAO,OAcXzN,QAAQ4N,aAAe,SAAUC,EAAaC,EAASjE,GACrD,GAAwBvD,SAApBwH,EAAQjE,GACV,GAA8B,iBAAnBiE,GAAQjE,GACjBgE,EAAYhE,GAAQkE,QAAUD,EAAQjE,OAEnC,CACHgE,EAAYhE,GAAQkE,SAAU,CAC9B,KAAKpI,OAAQmI,GAAQjE,GACfiE,EAAQjE,GAAQjE,eAAeD,QACjCkI,EAAYhE,GAAQlE,MAAQmI,EAAQjE,GAAQlE,SAiBtD3F,QAAQ4N,aAAe,SAAUC,EAAaC,EAASjE,GACrD,GAAwBvD,SAApBwH,EAAQjE,GACV,GAA8B,iBAAnBiE,GAAQjE,GACjBgE,EAAYhE,GAAQkE,QAAUD,EAAQjE,OAEnC,CACHgE,EAAYhE,GAAQkE,SAAU,CAC9B,KAAKpI,OAAQmI,GAAQjE,GACfiE,EAAQjE,GAAQjE,eAAeD,QACjCkI,EAAYhE,GAAQlE,MAAQmI,EAAQjE,GAAQlE,SA2BtD3F,QAAQgO,aAAe,SAASC,EAAcC,EAAOC,EAAOC,GAC1D,GAUInH,GAVAuB,EAAQyF,EAERI,EAAgB,IAChBC,EAAY,EACZC,GAAQ,EACRC,EAAM,EACNC,EAAOjG,EAAM/C,OACbiJ,EAASF,EACTG,EAAUF,EACVG,EAAQ5J,KAAKC,MAAM,IAAKwJ,EAAKD,GAGjC,IAAY,GAARC,EACFG,EAAQ,OAEL,IAAY,GAARH,EAELG,EADEpG,EAAMoG,GAAOC,UAAUX,GAChB,EAGD,OAGP,CAGH,IAFAO,GAAQ,EAEQ,GAATF,GAA8BF,EAAZC,GACvBrH,EAAmBX,SAAX8H,EAAuB5F,EAAMoG,GAAOT,GAAS3F,EAAMoG,GAAOT,GAAOC,GAErE5F,EAAMoG,GAAOC,UAAUX,GACzBK,GAAQ,GAGJtH,EAAQiH,EAAMY,MAChBJ,EAAS1J,KAAKC,MAAM,IAAKwJ,EAAKD,IAG9BG,EAAU3J,KAAKC,MAAM,IAAKwJ,EAAKD,IAG7BA,GAAOE,GAAUD,GAAQE,GAC3BC,EAAQ,GACRL,GAAQ,IAGRE,EAAOE,EAASH,EAAME,EACtBE,EAAQ5J,KAAKC,MAAM,IAAKwJ,EAAKD,MAGjCF,GAEEA,IAAaD,GACfU,QAAQC,IAAI,+CAGhB,MAAOJ,IAoBT5O,QAAQiP,oBAAsB,SAAShB,EAAcxE,EAAQ0E,EAAOe,GAClE,GASIC,GACAC,EAAWnI,EAAOoI,EAVlBhB,EAAgB,IAChBC,EAAY,EACZ9F,EAAQyF,EACRM,GAAQ,EACRC,EAAM,EACNC,EAAOjG,EAAM/C,OACbiJ,EAASF,EACTG,EAAUF,EACVG,EAAQ5J,KAAKC,MAAM,IAAKwJ,EAAKD,GAIjC,IAAY,GAARC,EAAYG,EAAQ,OACnB,IAAY,GAARH,EACPxH,EAAQuB,EAAMoG,GAAOT,GAEnBS,EADE3H,GAASwC,EACF,EAGD,OAGP,CAEH,IADAgF,GAAQ,EACQ,GAATF,GAA8BF,EAAZC,GACvBc,EAAY5G,EAAMxD,KAAK6H,IAAI,EAAE+B,EAAQ,IAAIT,GACzClH,EAAQuB,EAAMoG,GAAOT,GACrBkB,EAAY7G,EAAMxD,KAAKmG,IAAI3C,EAAM/C,OAAO,EAAEmJ,EAAQ,IAAIT,GAElDlH,GAASwC,GAAsBA,EAAZ2F,GAAsBnI,EAAQwC,GAAkBA,EAARxC,GAAkBoI,EAAY5F,GAC3F8E,GAAQ,EACJtH,GAASwC,IACW,UAAlByF,EACczF,EAAZ2F,GAAsBnI,EAAQwC,IAChCmF,EAAQ5J,KAAK6H,IAAI,EAAE+B,EAAQ,IAIjBnF,EAARxC,GAAkBoI,EAAY5F,IAChCmF,EAAQ5J,KAAKmG,IAAI3C,EAAM/C,OAAO,EAAEmJ,EAAQ,OAMlCnF,EAARxC,EACFyH,EAAS1J,KAAKC,MAAM,IAAKwJ,EAAKD,IAG9BG,EAAU3J,KAAKC,MAAM,IAAKwJ,EAAKD,IAEjCW,EAAWnK,KAAKC,MAAM,IAAKwJ,EAAKD,IAE5BA,GAAOE,GAAUD,GAAQE,GAC3BC,EAAQ,GACRL,GAAQ,IAGRE,EAAOE,EAASH,EAAME,EACtBE,EAAQ5J,KAAKC,MAAM,IAAKwJ,EAAKD,MAGjCF,GAEEA,IAAaD,GACfU,QAAQC,IAAI,+CAGhB,MAAOJ,KAKL,SAAS3O,EAAQD,GASrBA,EAAQsP,gBAAkB,SAASC,GAEjC,IAAK,GAAIC,KAAeD,GAClBA,EAAc3J,eAAe4J,KAC/BD,EAAcC,GAAaC,UAAYF,EAAcC,GAAaE,KAClEH,EAAcC,GAAaE,UAYjC1P,EAAQ2P,gBAAkB,SAASJ,GAEjC,IAAK,GAAIC,KAAeD,GACtB,GAAIA,EAAc3J,eAAe4J,IAC3BD,EAAcC,GAAaC,UAAW,CACxC,IAAK,GAAInK,GAAI,EAAGA,EAAIiK,EAAcC,GAAaC,UAAUhK,OAAQH,IAC/DiK,EAAcC,GAAaC,UAAUnK,GAAGsE,WAAWgG,YAAYL,EAAcC,GAAaC,UAAUnK,GAEtGiK,GAAcC,GAAaC,eAgBnCzP,EAAQ6P,cAAgB,SAAUL,EAAaD,EAAeO,GAC5D,GAAIlH,EAqBJ,OAnBI2G,GAAc3J,eAAe4J,GAE3BD,EAAcC,GAAaC,UAAUhK,OAAS,GAChDmD,EAAU2G,EAAcC,GAAaC,UAAU,GAC/CF,EAAcC,GAAaC,UAAUM,UAIrCnH,EAAUoH,SAASC,gBAAgB,6BAA8BT,GACjEM,EAAaI,YAAYtH,KAK3BA,EAAUoH,SAASC,gBAAgB,6BAA8BT,GACjED,EAAcC,IAAgBE,QAAUD,cACxCK,EAAaI,YAAYtH,IAE3B2G,EAAcC,GAAaE,KAAK1H,KAAKY,GAC9BA,GAcT5I,EAAQmQ,cAAgB,SAAUX,EAAaD,EAAea,GAC5D,GAAIxH,EAqBJ,OAnBI2G,GAAc3J,eAAe4J,GAE3BD,EAAcC,GAAaC,UAAUhK,OAAS,GAChDmD,EAAU2G,EAAcC,GAAaC,UAAU,GAC/CF,EAAcC,GAAaC,UAAUM,UAIrCnH,EAAUoH,SAASK,cAAcb,GACjCY,EAAaF,YAAYtH,KAK3BA,EAAUoH,SAASK,cAAcb,GACjCD,EAAcC,IAAgBE,QAAUD,cACxCW,EAAaF,YAAYtH,IAE3B2G,EAAcC,GAAaE,KAAK1H,KAAKY,GAC9BA,GAkBT5I,EAAQsQ,UAAY,SAASC,EAAGC,EAAGC,EAAOlB,EAAeO,GACvD,GAAIY,EAgBJ,OAfsC,UAAlCD,EAAM3C,QAAQ6C,WAAWC,OAC3BF,EAAQ1Q,EAAQ6P,cAAc,SAASN,EAAcO,GACrDY,EAAMG,eAAe,KAAM,KAAMN,GACjCG,EAAMG,eAAe,KAAM,KAAML,GACjCE,EAAMG,eAAe,KAAM,IAAK,GAAMJ,EAAM3C,QAAQ6C,WAAWG,MAC/DJ,EAAMG,eAAe,KAAM,QAASJ,EAAM7I,UAAY,YAGtD8I,EAAQ1Q,EAAQ6P,cAAc,OAAON,EAAcO,GACnDY,EAAMG,eAAe,KAAM,IAAKN,EAAI,GAAIE,EAAM3C,QAAQ6C,WAAWG,MACjEJ,EAAMG,eAAe,KAAM,IAAKL,EAAI,GAAIC,EAAM3C,QAAQ6C,WAAWG,MACjEJ,EAAMG,eAAe,KAAM,QAASJ,EAAM3C,QAAQ6C,WAAWG,MAC7DJ,EAAMG,eAAe,KAAM,SAAUJ,EAAM3C,QAAQ6C,WAAWG,MAC9DJ,EAAMG,eAAe,KAAM,QAASJ,EAAM7I,UAAY,WAEjD8I,GAUT1Q,EAAQ+Q,QAAU,SAAUR,EAAGC,EAAGQ,EAAOC,EAAQrJ,EAAW2H,EAAeO,GACzE,GAAIoB,GAAOlR,EAAQ6P,cAAc,OAAON,EAAeO,EACvDoB,GAAKL,eAAe,KAAM,IAAKN,EAAI,GAAMS,GACzCE,EAAKL,eAAe,KAAM,IAAKL,GAC/BU,EAAKL,eAAe,KAAM,QAASG,GACnCE,EAAKL,eAAe,KAAM,SAAUI,GACpCC,EAAKL,eAAe,KAAM,QAASjJ,KAKjC,SAAS3H,EAAQD,EAASM,GA0C9B,QAASW,GAASkQ,EAAMrD,GActB,IAZIqD,GAASpL,MAAMC,QAAQmL,IAAUpQ,EAAK2D,YAAYyM,KACpDrD,EAAUqD,EACVA,EAAO,MAGT/Q,KAAKgR,SAAWtD,MAChB1N,KAAKiR,SACLjR,KAAKkR,SAAWlR,KAAKgR,SAASG,SAAW,KACzCnR,KAAKoR,SAIDpR,KAAKgR,SAAS1K,KAChB,IAAK,GAAIyH,KAAS/N,MAAKgR,SAAS1K,KAC9B,GAAItG,KAAKgR,SAAS1K,KAAKd,eAAeuI,GAAQ,CAC5C,GAAIlH,GAAQ7G,KAAKgR,SAAS1K,KAAKyH,EAE7B/N,MAAKoR,MAAMrD,GADA,QAATlH,GAA4B,WAATA,GAA+B,WAATA,EACvB,OAGAA,EAO5B,GAAI7G,KAAKgR,SAAS3K,QAChB,KAAM,IAAI9C,OAAM,sDAGlBvD,MAAKqR,gBAGDN,GACF/Q,KAAKsR,IAAIP,GA7Eb,GAAIpQ,GAAOT,EAAoB,EA0F/BW,GAAQ0Q,UAAUC,GAAK,SAAStI,EAAOhB,GACrC,GAAIuJ,GAAczR,KAAKqR,aAAanI,EAC/BuI,KACHA,KACAzR,KAAKqR,aAAanI,GAASuI,GAG7BA,EAAY7J,MACVM,SAAUA,KAKdrH,EAAQ0Q,UAAUG,UAAY7Q,EAAQ0Q,UAAUC,GAOhD3Q,EAAQ0Q,UAAUI,IAAM,SAASzI,EAAOhB,GACtC,GAAIuJ,GAAczR,KAAKqR,aAAanI,EAChCuI,KACFzR,KAAKqR,aAAanI,GAASuI,EAAYG,OAAO,SAAUlJ,GACtD,MAAQA,GAASR,UAAYA,MAMnCrH,EAAQ0Q,UAAUM,YAAchR,EAAQ0Q,UAAUI,IASlD9Q,EAAQ0Q,UAAUO,SAAW,SAAU5I,EAAO6I,EAAQC,GACpD,GAAa,KAAT9I,EACF,KAAM,IAAI3F,OAAM,yBAGlB,IAAIkO,KACAvI,KAASlJ,MAAKqR,eAChBI,EAAcA,EAAYQ,OAAOjS,KAAKqR,aAAanI,KAEjD,KAAOlJ,MAAKqR,eACdI,EAAcA,EAAYQ,OAAOjS,KAAKqR,aAAa,MAGrD,KAAK,GAAInM,GAAI,EAAGA,EAAIuM,EAAYpM,OAAQH,IAAK,CAC3C,GAAIgN,GAAaT,EAAYvM,EACzBgN,GAAWhK,UACbgK,EAAWhK,SAASgB,EAAO6I,EAAQC,GAAY,QAYrDnR,EAAQ0Q,UAAUD,IAAM,SAAUP,EAAMiB,GACtC,GACI3R,GADA8R,KAEAC,EAAKpS,IAET,IAAI2F,MAAMC,QAAQmL,GAEhB,IAAK,GAAI7L,GAAI,EAAGC,EAAM4L,EAAK1L,OAAYF,EAAJD,EAASA,IAC1C7E,EAAK+R,EAAGC,SAAStB,EAAK7L,IACtBiN,EAASvK,KAAKvH,OAGb,IAAIM,EAAK2D,YAAYyM,GAGxB,IAAK,GADDuB,GAAUtS,KAAKuS,gBAAgBxB,GAC1ByB,EAAM,EAAGC,EAAO1B,EAAK2B,kBAAyBD,EAAND,EAAYA,IAAO,CAElE,IAAK,GADDG,MACKC,EAAM,EAAGC,EAAOP,EAAQjN,OAAcwN,EAAND,EAAYA,IAAO,CAC1D,GAAI7E,GAAQuE,EAAQM,EACpBD,GAAK5E,GAASgD,EAAK+B,SAASN,EAAKI,GAGnCvS,EAAK+R,EAAGC,SAASM,GACjBR,EAASvK,KAAKvH,OAGb,CAAA,KAAI0Q,YAAgB9K,SAMvB,KAAM,IAAI1C,OAAM,mBAJhBlD,GAAK+R,EAAGC,SAAStB,GACjBoB,EAASvK,KAAKvH,GAUhB,MAJI8R,GAAS9M,QACXrF,KAAK8R,SAAS,OAAQ/P,MAAOoQ,GAAWH,GAGnCG,GASTtR,EAAQ0Q,UAAUwB,OAAS,SAAUhC,EAAMiB,GACzC,GAAIG,MACAa,KACAZ,EAAKpS,KACLmR,EAAUiB,EAAGlB,SAEb+B,EAAc,SAAUN,GAC1B,GAAItS,GAAKsS,EAAKxB,EACViB,GAAGnB,MAAM5Q,IAEXA,EAAK+R,EAAGc,YAAYP,GACpBK,EAAWpL,KAAKvH,KAIhBA,EAAK+R,EAAGC,SAASM,GACjBR,EAASvK,KAAKvH,IAIlB,IAAIsF,MAAMC,QAAQmL,GAEhB,IAAK,GAAI7L,GAAI,EAAGC,EAAM4L,EAAK1L,OAAYF,EAAJD,EAASA,IAC1C+N,EAAYlC,EAAK7L,QAGhB,IAAIvE,EAAK2D,YAAYyM,GAGxB,IAAK,GADDuB,GAAUtS,KAAKuS,gBAAgBxB,GAC1ByB,EAAM,EAAGC,EAAO1B,EAAK2B,kBAAyBD,EAAND,EAAYA,IAAO,CAElE,IAAK,GADDG,MACKC,EAAM,EAAGC,EAAOP,EAAQjN,OAAcwN,EAAND,EAAYA,IAAO,CAC1D,GAAI7E,GAAQuE,EAAQM,EACpBD,GAAK5E,GAASgD,EAAK+B,SAASN,EAAKI,GAGnCK,EAAYN,OAGX,CAAA,KAAI5B,YAAgB9K,SAKvB,KAAM,IAAI1C,OAAM,mBAHhB0P,GAAYlC,GAad,MAPIoB,GAAS9M,QACXrF,KAAK8R,SAAS,OAAQ/P,MAAOoQ,GAAWH,GAEtCgB,EAAW3N,QACbrF,KAAK8R,SAAS,UAAW/P,MAAOiR,GAAahB,GAGxCG,EAASF,OAAOe,IAsCzBnS,EAAQ0Q,UAAU4B,IAAM,WACtB,GAGI9S,GAAI+S,EAAK1F,EAASqD,EAHlBqB,EAAKpS,KAILqT,EAAY1S,EAAKgG,QAAQvB,UAAU,GACtB,WAAbiO,GAAsC,UAAbA,GAE3BhT,EAAK+E,UAAU,GACfsI,EAAUtI,UAAU,GACpB2L,EAAO3L,UAAU,IAEG,SAAbiO,GAEPD,EAAMhO,UAAU,GAChBsI,EAAUtI,UAAU,GACpB2L,EAAO3L,UAAU,KAIjBsI,EAAUtI,UAAU,GACpB2L,EAAO3L,UAAU,GAInB,IAAIkO,EACJ,IAAI5F,GAAWA,EAAQ4F,WAAY,CACjC,GAAIC,IAAiB,YAAa,QAAS,SAG3C,IAFAD,EAA0D,IAA7CC,EAAc5L,QAAQ+F,EAAQ4F,YAAoB,QAAU5F,EAAQ4F,WAE7EvC,GAASuC,GAAc3S,EAAKgG,QAAQoK,GACtC,KAAM,IAAIxN,OAAM,6BAA+B5C,EAAKgG,QAAQoK,GAAQ,sDACVrD,EAAQpH,KAAO,IAE3E,IAAkB,aAAdgN,IAA8B3S,EAAK2D,YAAYyM,GACjD,KAAM,IAAIxN,OAAM,6EAKlB+P,GADOvC,GAC6B,aAAtBpQ,EAAKgG,QAAQoK,GAAwB,YAGtC,OAIf,IAEgB4B,GAAMa,EAAQtO,EAAGC,EAF7BmB,EAAOoH,GAAWA,EAAQpH,MAAQtG,KAAKgR,SAAS1K,KAChDsL,EAASlE,GAAWA,EAAQkE,OAC5B7P,IAGJ,IAAUmE,QAAN7F,EAEFsS,EAAOP,EAAGqB,SAASpT,EAAIiG,GACnBsL,IAAWA,EAAOe,KACpBA,EAAO,UAGN,IAAWzM,QAAPkN,EAEP,IAAKlO,EAAI,EAAGC,EAAMiO,EAAI/N,OAAYF,EAAJD,EAASA,IACrCyN,EAAOP,EAAGqB,SAASL,EAAIlO,GAAIoB,KACtBsL,GAAUA,EAAOe,KACpB5Q,EAAM6F,KAAK+K,OAMf,KAAKa,IAAUxT,MAAKiR,MACdjR,KAAKiR,MAAMzL,eAAegO,KAC5Bb,EAAOP,EAAGqB,SAASD,EAAQlN,KACtBsL,GAAUA,EAAOe,KACpB5Q,EAAM6F,KAAK+K,GAYnB,IALIjF,GAAWA,EAAQgG,OAAexN,QAAN7F,GAC9BL,KAAK2T,MAAM5R,EAAO2L,EAAQgG,OAIxBhG,GAAWA,EAAQP,OAAQ,CAC7B,GAAIA,GAASO,EAAQP,MACrB,IAAUjH,QAAN7F,EACFsS,EAAO3S,KAAK4T,cAAcjB,EAAMxF,OAGhC,KAAKjI,EAAI,EAAGC,EAAMpD,EAAMsD,OAAYF,EAAJD,EAASA,IACvCnD,EAAMmD,GAAKlF,KAAK4T,cAAc7R,EAAMmD,GAAIiI,GAM9C,GAAkB,aAAdmG,EAA2B,CAC7B,GAAIhB,GAAUtS,KAAKuS,gBAAgBxB,EACnC,IAAU7K,QAAN7F,EAEF+R,EAAGyB,WAAW9C,EAAMuB,EAASK,OAI7B,KAAKzN,EAAI,EAAGA,EAAInD,EAAMsD,OAAQH,IAC5BkN,EAAGyB,WAAW9C,EAAMuB,EAASvQ,EAAMmD,GAGvC,OAAO6L,GAEJ,GAAkB,UAAduC,EAAwB,CAC/B,GAAIQ,KACJ,KAAK5O,EAAI,EAAGA,EAAInD,EAAMsD,OAAQH,IAC5B4O,EAAO/R,EAAMmD,GAAG7E,IAAM0B,EAAMmD,EAE9B,OAAO4O,GAIP,GAAU5N,QAAN7F,EAEF,MAAOsS,EAIP,IAAI5B,EAAM,CAER,IAAK7L,EAAI,EAAGC,EAAMpD,EAAMsD,OAAYF,EAAJD,EAASA,IACvC6L,EAAKnJ,KAAK7F,EAAMmD,GAElB,OAAO6L,GAIP,MAAOhP,IAcflB,EAAQ0Q,UAAUwC,OAAS,SAAUrG,GACnC,GAIIxI,GACAC,EACA9E,EACAsS,EACA5Q,EARAgP,EAAO/Q,KAAKiR,MACZW,EAASlE,GAAWA,EAAQkE,OAC5B8B,EAAQhG,GAAWA,EAAQgG,MAC3BpN,EAAOoH,GAAWA,EAAQpH,MAAQtG,KAAKgR,SAAS1K,KAMhD8M,IAEJ,IAAIxB,EAEF,GAAI8B,EAAO,CAET3R,IACA,KAAK1B,IAAM0Q,GACLA,EAAKvL,eAAenF,KACtBsS,EAAO3S,KAAKyT,SAASpT,EAAIiG,GACrBsL,EAAOe,IACT5Q,EAAM6F,KAAK+K,GAOjB,KAFA3S,KAAK2T,MAAM5R,EAAO2R,GAEbxO,EAAI,EAAGC,EAAMpD,EAAMsD,OAAYF,EAAJD,EAASA,IACvCkO,EAAIlO,GAAKnD,EAAMmD,GAAGlF,KAAKkR,cAKzB,KAAK7Q,IAAM0Q,GACLA,EAAKvL,eAAenF,KACtBsS,EAAO3S,KAAKyT,SAASpT,EAAIiG,GACrBsL,EAAOe,IACTS,EAAIxL,KAAK+K,EAAK3S,KAAKkR,gBAQ3B,IAAIwC,EAAO,CAET3R,IACA,KAAK1B,IAAM0Q,GACLA,EAAKvL,eAAenF,IACtB0B,EAAM6F,KAAKmJ,EAAK1Q,GAMpB,KAFAL,KAAK2T,MAAM5R,EAAO2R,GAEbxO,EAAI,EAAGC,EAAMpD,EAAMsD,OAAYF,EAAJD,EAASA,IACvCkO,EAAIlO,GAAKnD,EAAMmD,GAAGlF,KAAKkR,cAKzB,KAAK7Q,IAAM0Q,GACLA,EAAKvL,eAAenF,KACtBsS,EAAO5B,EAAK1Q,GACZ+S,EAAIxL,KAAK+K,EAAK3S,KAAKkR,WAM3B,OAAOkC,IAOTvS,EAAQ0Q,UAAUyC,WAAa,WAC7B,MAAOhU,OAaTa,EAAQ0Q,UAAUtJ,QAAU,SAAUC,EAAUwF,GAC9C,GAGIiF,GACAtS,EAJAuR,EAASlE,GAAWA,EAAQkE,OAC5BtL,EAAOoH,GAAWA,EAAQpH,MAAQtG,KAAKgR,SAAS1K,KAChDyK,EAAO/Q,KAAKiR,KAIhB,IAAIvD,GAAWA,EAAQgG,MAIrB,IAAK,GAFD3R,GAAQ/B,KAAKmT,IAAIzF,GAEZxI,EAAI,EAAGC,EAAMpD,EAAMsD,OAAYF,EAAJD,EAASA,IAC3CyN,EAAO5Q,EAAMmD,GACb7E,EAAKsS,EAAK3S,KAAKkR,UACfhJ,EAASyK,EAAMtS,OAKjB,KAAKA,IAAM0Q,GACLA,EAAKvL,eAAenF,KACtBsS,EAAO3S,KAAKyT,SAASpT,EAAIiG,KACpBsL,GAAUA,EAAOe,KACpBzK,EAASyK,EAAMtS,KAkBzBQ,EAAQ0Q,UAAU0C,IAAM,SAAU/L,EAAUwF,GAC1C,GAIIiF,GAJAf,EAASlE,GAAWA,EAAQkE,OAC5BtL,EAAOoH,GAAWA,EAAQpH,MAAQtG,KAAKgR,SAAS1K,KAChD4N,KACAnD,EAAO/Q,KAAKiR,KAIhB,KAAK,GAAI5Q,KAAM0Q,GACTA,EAAKvL,eAAenF,KACtBsS,EAAO3S,KAAKyT,SAASpT,EAAIiG,KACpBsL,GAAUA,EAAOe,KACpBuB,EAAYtM,KAAKM,EAASyK,EAAMtS,IAUtC,OAJIqN,IAAWA,EAAQgG,OACrB1T,KAAK2T,MAAMO,EAAaxG,EAAQgG,OAG3BQ,GAUTrT,EAAQ0Q,UAAUqC,cAAgB,SAAUjB,EAAMxF,GAChD,GAAIgH,KAEJ,KAAK,GAAIpG,KAAS4E,GACZA,EAAKnN,eAAeuI,IAAoC,IAAzBZ,EAAOxF,QAAQoG,KAChDoG,EAAapG,GAAS4E,EAAK5E,GAI/B,OAAOoG,IASTtT,EAAQ0Q,UAAUoC,MAAQ,SAAU5R,EAAO2R,GACzC,GAAI/S,EAAKkD,SAAS6P,GAAQ,CAExB,GAAIU,GAAOV,CACX3R,GAAMsS,KAAK,SAAUpP,EAAGa,GACtB,GAAIwO,GAAKrP,EAAEmP,GACPG,EAAKzO,EAAEsO,EACX,OAAQE,GAAKC,EAAM,EAAWA,EAALD,EAAW,GAAK,QAGxC,CAAA,GAAqB,kBAAVZ,GAOd,KAAM,IAAI3N,WAAU,uCALpBhE,GAAMsS,KAAKX,KAgBf7S,EAAQ0Q,UAAUiD,OAAS,SAAUnU,EAAI2R,GACvC,GACI9M,GAAGC,EAAKsP,EADRC,IAGJ,IAAI/O,MAAMC,QAAQvF,GAChB,IAAK6E,EAAI,EAAGC,EAAM9E,EAAGgF,OAAYF,EAAJD,EAASA,IACpCuP,EAAYzU,KAAK2U,QAAQtU,EAAG6E,IACX,MAAbuP,GACFC,EAAW9M,KAAK6M,OAKpBA,GAAYzU,KAAK2U,QAAQtU,GACR,MAAboU,GACFC,EAAW9M,KAAK6M,EAQpB,OAJIC,GAAWrP,QACbrF,KAAK8R,SAAS,UAAW/P,MAAO2S,GAAa1C,GAGxC0C,GAST7T,EAAQ0Q,UAAUoD,QAAU,SAAUtU,GACpC,GAAIM,EAAK+C,SAASrD,IAAOM,EAAKkD,SAASxD,IACrC,GAAIL,KAAKiR,MAAM5Q,GAEb,aADOL,MAAKiR,MAAM5Q,GACXA,MAGN,IAAIA,YAAc4F,QAAQ,CAC7B,GAAIuN,GAASnT,EAAGL,KAAKkR,SACrB,IAAIsC,GAAUxT,KAAKiR,MAAMuC,GAEvB,aADOxT,MAAKiR,MAAMuC,GACXA,EAGX,MAAO,OAQT3S,EAAQ0Q,UAAUqD,MAAQ,SAAU5C,GAClC,GAAIoB,GAAMnN,OAAO4O,KAAK7U,KAAKiR,MAM3B,OAJAjR,MAAKiR,SAELjR,KAAK8R,SAAS,UAAW/P,MAAOqR,GAAMpB,GAE/BoB,GAQTvS,EAAQ0Q,UAAU9E,IAAM,SAAUsB,GAChC,GAAIgD,GAAO/Q,KAAKiR,MACZxE,EAAM,KACNqI,EAAW,IAEf,KAAK,GAAIzU,KAAM0Q,GACb,GAAIA,EAAKvL,eAAenF,GAAK,CAC3B,GAAIsS,GAAO5B,EAAK1Q,GACZ0U,EAAYpC,EAAK5E,EACJ,OAAbgH,KAAuBtI,GAAOsI,EAAYD,KAC5CrI,EAAMkG,EACNmC,EAAWC,GAKjB,MAAOtI,IAQT5L,EAAQ0Q,UAAUxG,IAAM,SAAUgD,GAChC,GAAIgD,GAAO/Q,KAAKiR,MACZlG,EAAM,KACNiK,EAAW,IAEf,KAAK,GAAI3U,KAAM0Q,GACb,GAAIA,EAAKvL,eAAenF,GAAK,CAC3B,GAAIsS,GAAO5B,EAAK1Q,GACZ0U,EAAYpC,EAAK5E,EACJ,OAAbgH,KAAuBhK,GAAmBiK,EAAZD,KAChChK,EAAM4H,EACNqC,EAAWD,GAKjB,MAAOhK,IAUTlK,EAAQ0Q,UAAU0D,SAAW,SAAUlH,GACrC,GAII7I,GAJA6L,EAAO/Q,KAAKiR,MACZiE,KACAC,EAAYnV,KAAKgR,SAAS1K,MAAQtG,KAAKgR,SAAS1K,KAAKyH,IAAU,KAC/DqH,EAAQ,CAGZ,KAAK,GAAI7P,KAAQwL,GACf,GAAIA,EAAKvL,eAAeD,GAAO,CAC7B,GAAIoN,GAAO5B,EAAKxL,GACZsB,EAAQ8L,EAAK5E,GACbsH,GAAS,CACb,KAAKnQ,EAAI,EAAOkQ,EAAJlQ,EAAWA,IACrB,GAAIgQ,EAAOhQ,IAAM2B,EAAO,CACtBwO,GAAS,CACT,OAGCA,GAAqBnP,SAAVW,IACdqO,EAAOE,GAASvO,EAChBuO,KAKN,GAAID,EACF,IAAKjQ,EAAI,EAAGA,EAAIgQ,EAAO7P,OAAQH,IAC7BgQ,EAAOhQ,GAAKvE,EAAK0F,QAAQ6O,EAAOhQ,GAAIiQ,EAIxC,OAAOD,IASTrU,EAAQ0Q,UAAUc,SAAW,SAAUM,GACrC,GAAItS,GAAKsS,EAAK3S,KAAKkR,SAEnB,IAAUhL,QAAN7F,GAEF,GAAIL,KAAKiR,MAAM5Q,GAEb,KAAM,IAAIkD,OAAM,iCAAmClD,EAAK,uBAK1DA,GAAKM,EAAK+D,aACViO,EAAK3S,KAAKkR,UAAY7Q,CAGxB,IAAIwL,KACJ,KAAK,GAAIkC,KAAS4E,GAChB,GAAIA,EAAKnN,eAAeuI,GAAQ,CAC9B,GAAIoH,GAAYnV,KAAKoR,MAAMrD,EAC3BlC,GAAEkC,GAASpN,EAAK0F,QAAQsM,EAAK5E,GAAQoH,GAKzC,MAFAnV,MAAKiR,MAAM5Q,GAAMwL,EAEVxL,GAUTQ,EAAQ0Q,UAAUkC,SAAW,SAAUpT,EAAIiV,GACzC,GAAIvH,GAAOlH,EAGP0O,EAAMvV,KAAKiR,MAAM5Q,EACrB,KAAKkV,EACH,MAAO,KAIT,IAAIC,KACJ,IAAIF,EACF,IAAKvH,IAASwH,GACRA,EAAI/P,eAAeuI,KACrBlH,EAAQ0O,EAAIxH,GACZyH,EAAUzH,GAASpN,EAAK0F,QAAQQ,EAAOyO,EAAMvH,SAMjD,KAAKA,IAASwH,GACRA,EAAI/P,eAAeuI,KACrBlH,EAAQ0O,EAAIxH,GACZyH,EAAUzH,GAASlH,EAIzB,OAAO2O,IAWT3U,EAAQ0Q,UAAU2B,YAAc,SAAUP,GACxC,GAAItS,GAAKsS,EAAK3S,KAAKkR,SACnB,IAAUhL,QAAN7F,EACF,KAAM,IAAIkD,OAAM,6CAA+CkS,KAAKC,UAAU/C,GAAQ,IAExF,IAAI9G,GAAI7L,KAAKiR,MAAM5Q,EACnB,KAAKwL,EAEH,KAAM,IAAItI,OAAM,uCAAyClD,EAAK,SAIhE,KAAK,GAAI0N,KAAS4E,GAChB,GAAIA,EAAKnN,eAAeuI,GAAQ,CAC9B,GAAIoH,GAAYnV,KAAKoR,MAAMrD,EAC3BlC,GAAEkC,GAASpN,EAAK0F,QAAQsM,EAAK5E,GAAQoH,GAIzC,MAAO9U,IASTQ,EAAQ0Q,UAAUgB,gBAAkB,SAAUoD,GAE5C,IAAK,GADDrD,MACKM,EAAM,EAAGC,EAAO8C,EAAUC,qBAA4B/C,EAAND,EAAYA,IACnEN,EAAQM,GAAO+C,EAAUE,YAAYjD,IAAQ+C,EAAUG,eAAelD,EAExE,OAAON,IAUTzR,EAAQ0Q,UAAUsC,WAAa,SAAU8B,EAAWrD,EAASK,GAG3D,IAAK,GAFDH,GAAMmD,EAAUI,SAEXnD,EAAM,EAAGC,EAAOP,EAAQjN,OAAcwN,EAAND,EAAYA,IAAO,CAC1D,GAAI7E,GAAQuE,EAAQM,EACpB+C,GAAUK,SAASxD,EAAKI,EAAKD,EAAK5E,MAItClO,EAAOD,QAAUiB,GAKb,SAAShB,EAAQD,EAASM,GAe9B,QAASY,GAAUiQ,EAAMrD,GACvB1N,KAAKiR,MAAQ,KACbjR,KAAKiW,QACLjW,KAAKgR,SAAWtD,MAChB1N,KAAKkR,SAAW,KAChBlR,KAAKqR,eAEL,IAAIe,GAAKpS,IACTA,MAAK0I,SAAW,WACd0J,EAAG8D,SAASC,MAAM/D,EAAIhN,YAGxBpF,KAAKoW,QAAQrF,GAzBf,GAAIpQ,GAAOT,EAAoB,GAC3BW,EAAUX,EAAoB,EAkClCY,GAASyQ,UAAU6E,QAAU,SAAUrF,GACrC,GAAIqC,GAAKlO,EAAGC,CAEZ,IAAInF,KAAKiR,MAAO,CAEVjR,KAAKiR,MAAMY,aACb7R,KAAKiR,MAAMY,YAAY,IAAK7R,KAAK0I,UAInC0K,IACA,KAAK,GAAI/S,KAAML,MAAKiW,KACdjW,KAAKiW,KAAKzQ,eAAenF,IAC3B+S,EAAIxL,KAAKvH,EAGbL,MAAKiW,QACLjW,KAAK8R,SAAS,UAAW/P,MAAOqR,IAKlC,GAFApT,KAAKiR,MAAQF,EAET/Q,KAAKiR,MAAO,CAQd,IANAjR,KAAKkR,SAAWlR,KAAKgR,SAASG,SACzBnR,KAAKiR,OAASjR,KAAKiR,MAAMvD,SAAW1N,KAAKiR,MAAMvD,QAAQyD,SACxD,KAGJiC,EAAMpT,KAAKiR,MAAM8C,QAAQnC,OAAQ5R,KAAKgR,UAAYhR,KAAKgR,SAASY,SAC3D1M,EAAI,EAAGC,EAAMiO,EAAI/N,OAAYF,EAAJD,EAASA,IACrC7E,EAAK+S,EAAIlO,GACTlF,KAAKiW,KAAK5V,IAAM,CAElBL,MAAK8R,SAAS,OAAQ/P,MAAOqR,IAGzBpT,KAAKiR,MAAMO,IACbxR,KAAKiR,MAAMO,GAAG,IAAKxR,KAAK0I,YAuC9B5H,EAASyQ,UAAU4B,IAAM,WACvB,GAGIC,GAAK1F,EAASqD,EAHdqB,EAAKpS,KAILqT,EAAY1S,EAAKgG,QAAQvB,UAAU,GACtB,WAAbiO,GAAsC,UAAbA,GAAsC,SAAbA,GAEpDD,EAAMhO,UAAU,GAChBsI,EAAUtI,UAAU,GACpB2L,EAAO3L,UAAU,KAIjBsI,EAAUtI,UAAU,GACpB2L,EAAO3L,UAAU,GAInB,IAAIiR,GAAc1V,EAAKqE,UAAWhF,KAAKgR,SAAUtD,EAG7C1N,MAAKgR,SAASY,QAAUlE,GAAWA,EAAQkE,SAC7CyE,EAAYzE,OAAS,SAAUe,GAC7B,MAAOP,GAAGpB,SAASY,OAAOe,IAASjF,EAAQkE,OAAOe,IAKtD,IAAI2D,KAOJ,OANWpQ,SAAPkN,GACFkD,EAAa1O,KAAKwL,GAEpBkD,EAAa1O,KAAKyO,GAClBC,EAAa1O,KAAKmJ,GAEX/Q,KAAKiR,OAASjR,KAAKiR,MAAMkC,IAAIgD,MAAMnW,KAAKiR,MAAOqF,IAWxDxV,EAASyQ,UAAUwC,OAAS,SAAUrG,GACpC,GAAI0F,EAEJ,IAAIpT,KAAKiR,MAAO,CACd,GACIW,GADA2E,EAAgBvW,KAAKgR,SAASY,MAK9BA,GAFAlE,GAAWA,EAAQkE,OACjB2E,EACO,SAAU5D,GACjB,MAAO4D,GAAc5D,IAASjF,EAAQkE,OAAOe,IAItCjF,EAAQkE,OAIV2E,EAGXnD,EAAMpT,KAAKiR,MAAM8C,QACfnC,OAAQA,EACR8B,MAAOhG,GAAWA,EAAQgG,YAI5BN,KAGF,OAAOA,IAQTtS,EAASyQ,UAAUyC,WAAa,WAE9B,IADA,GAAIwC,GAAUxW,KACPwW,YAAmB1V,IACxB0V,EAAUA,EAAQvF,KAEpB,OAAOuF,IAAW,MAYpB1V,EAASyQ,UAAU2E,SAAW,SAAUhN,EAAO6I,EAAQC,GACrD,GAAI9M,GAAGC,EAAK9E,EAAIsS,EACZS,EAAMrB,GAAUA,EAAOhQ,MACvBgP,EAAO/Q,KAAKiR,MACZwF,KACAC,KACAC,IAEJ,IAAIvD,GAAOrC,EAAM,CACf,OAAQ7H,GACN,IAAK,MAEH,IAAKhE,EAAI,EAAGC,EAAMiO,EAAI/N,OAAYF,EAAJD,EAASA,IACrC7E,EAAK+S,EAAIlO,GACTyN,EAAO3S,KAAKmT,IAAI9S,GACZsS,IACF3S,KAAKiW,KAAK5V,IAAM,EAChBoW,EAAM7O,KAAKvH,GAIf,MAEF,KAAK,SAGH,IAAK6E,EAAI,EAAGC,EAAMiO,EAAI/N,OAAYF,EAAJD,EAASA,IACrC7E,EAAK+S,EAAIlO,GACTyN,EAAO3S,KAAKmT,IAAI9S,GAEZsS,EACE3S,KAAKiW,KAAK5V,GACZqW,EAAQ9O,KAAKvH,IAGbL,KAAKiW,KAAK5V,IAAM,EAChBoW,EAAM7O,KAAKvH,IAITL,KAAKiW,KAAK5V,WACLL,MAAKiW,KAAK5V,GACjBsW,EAAQ/O,KAAKvH,GAQnB,MAEF,KAAK,SAEH,IAAK6E,EAAI,EAAGC,EAAMiO,EAAI/N,OAAYF,EAAJD,EAASA,IACrC7E,EAAK+S,EAAIlO,GACLlF,KAAKiW,KAAK5V,WACLL,MAAKiW,KAAK5V,GACjBsW,EAAQ/O,KAAKvH,IAOjBoW,EAAMpR,QACRrF,KAAK8R,SAAS,OAAQ/P,MAAO0U,GAAQzE,GAEnC0E,EAAQrR,QACVrF,KAAK8R,SAAS,UAAW/P,MAAO2U,GAAU1E,GAExC2E,EAAQtR,QACVrF,KAAK8R,SAAS,UAAW/P,MAAO4U,GAAU3E,KAMhDlR,EAASyQ,UAAUC,GAAK3Q,EAAQ0Q,UAAUC,GAC1C1Q,EAASyQ,UAAUI,IAAM9Q,EAAQ0Q,UAAUI,IAC3C7Q,EAASyQ,UAAUO,SAAWjR,EAAQ0Q,UAAUO,SAGhDhR,EAASyQ,UAAUG,UAAY5Q,EAASyQ,UAAUC,GAClD1Q,EAASyQ,UAAUM,YAAc/Q,EAASyQ,UAAUI,IAEpD9R,EAAOD,QAAUkB,GAIb,SAASjB,EAAQD,EAASM,GAwB9B,QAASa,GAAQ6V,EAAW7F,EAAMrD,GAChC,KAAM1N,eAAgBe,IACpB,KAAM,IAAI8V,aAAY,mDAIxB7W,MAAK8W,iBAAmBF,EACxB5W,KAAK4Q,MAAQ,QACb5Q,KAAK6Q,OAAS,QACd7Q,KAAK+W,OAAS,GACd/W,KAAKgX,eAAiB,MACtBhX,KAAKiX,eAAiB,MAEtBjX,KAAKkX,OAAS,IACdlX,KAAKmX,OAAS,IACdnX,KAAKoX,OAAS,IACdpX,KAAKqX,YAAc,OACnBrX,KAAKsX,YAAc,QAEnBtX,KAAKwQ,MAAQzP,EAAQwW,MAAMC,IAC3BxX,KAAKyX,iBAAkB,EACvBzX,KAAK0X,UAAW,EAChB1X,KAAK2X,iBAAkB,EACvB3X,KAAK4X,YAAa,EAClB5X,KAAK6X,gBAAiB,EACtB7X,KAAK8X,aAAc,EACnB9X,KAAK+X,cAAgB,GAErB/X,KAAKgY,kBAAoB,IACzBhY,KAAKiY,kBAAmB,EAExBjY,KAAKkY,OAAS,GAAIjX,GAClBjB,KAAKmY,IAAM,GAAI/W,GAAQ,EAAG,EAAG,IAE7BpB,KAAK2V,UAAY,KACjB3V,KAAKoY,WAAa,KAGlBpY,KAAKqY,KAAOnS,OACZlG,KAAKsY,KAAOpS,OACZlG,KAAKuY,KAAOrS,OACZlG,KAAKwY,SAAWtS,OAChBlG,KAAKyY,UAAYvS,OAEjBlG,KAAK0Y,KAAO,EACZ1Y,KAAK2Y,MAAQzS,OACblG,KAAK4Y,KAAO,EACZ5Y,KAAK6Y,KAAO,EACZ7Y,KAAK8Y,MAAQ5S,OACblG,KAAK+Y,KAAO,EACZ/Y,KAAKgZ,KAAO,EACZhZ,KAAKiZ,MAAQ/S,OACblG,KAAKkZ,KAAO,EACZlZ,KAAKmZ,SAAW,EAChBnZ,KAAKoZ,SAAW,EAChBpZ,KAAKqZ,UAAY,EACjBrZ,KAAKsZ,UAAY,EAIjBtZ,KAAKuZ,UAAY,UACjBvZ,KAAKwZ,UAAY,UACjBxZ,KAAKyZ,SAAW,UAChBzZ,KAAK0Z,eAAiB,UAGtB1Z,KAAKsN,SAGLtN,KAAK2Z,WAAWjM,GAGZqD,GACF/Q,KAAKoW,QAAQrF,GA/FjB,GAAI6I,GAAU1Z,EAAoB,IAC9BW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/BS,EAAOT,EAAoB,GAC3BkB,EAAUlB,EAAoB,GAC9BiB,EAAUjB,EAAoB,GAC9Be,EAASf,EAAoB,GAC7BgB,EAAShB,EAAoB,GAC7BmB,EAASnB,EAAoB,IAC7BoB,EAAapB,EAAoB,GA2FrC0Z,GAAQ7Y,EAAQwQ,WAKhBxQ,EAAQwQ,UAAUsI,UAAY,WAC5B7Z,KAAK8Z,MAAQ,GAAI1Y,GAAQ,GAAKpB,KAAK4Y,KAAO5Y,KAAK0Y,MAC7C,GAAK1Y,KAAK+Y,KAAO/Y,KAAK6Y,MACtB,GAAK7Y,KAAKkZ,KAAOlZ,KAAKgZ,OAGpBhZ,KAAK2X,kBACH3X,KAAK8Z,MAAM3J,EAAInQ,KAAK8Z,MAAM1J,EAE5BpQ,KAAK8Z,MAAM1J,EAAIpQ,KAAK8Z,MAAM3J,EAI1BnQ,KAAK8Z,MAAM3J,EAAInQ,KAAK8Z,MAAM1J,GAK9BpQ,KAAK8Z,MAAMC,GAAK/Z,KAAK+X,cAIrB/X,KAAK8Z,MAAMjT,MAAQ,GAAK7G,KAAKoZ,SAAWpZ,KAAKmZ,SAG7C,IAAIa,IAAWha,KAAK4Y,KAAO5Y,KAAK0Y,MAAQ,EAAI1Y,KAAK8Z,MAAM3J,EACnD8J,GAAWja,KAAK+Y,KAAO/Y,KAAK6Y,MAAQ,EAAI7Y,KAAK8Z,MAAM1J,EACnD8J,GAAWla,KAAKkZ,KAAOlZ,KAAKgZ,MAAQ,EAAIhZ,KAAK8Z,MAAMC,CACvD/Z,MAAKkY,OAAOiC,eAAeH,EAASC,EAASC,IAU/CnZ,EAAQwQ,UAAU6I,eAAiB,SAASC,GAC1C,GAAIC,GAActa,KAAKua,2BAA2BF,EAClD,OAAOra,MAAKwa,4BAA4BF,IAW1CvZ,EAAQwQ,UAAUgJ,2BAA6B,SAASF,GACtD,GAAII,GAAKJ,EAAQlK,EAAInQ,KAAK8Z,MAAM3J,EAC9BuK,EAAKL,EAAQjK,EAAIpQ,KAAK8Z,MAAM1J,EAC5BuK,EAAKN,EAAQN,EAAI/Z,KAAK8Z,MAAMC,EAE5Ba,EAAK5a,KAAKkY,OAAO2C,oBAAoB1K,EACrC2K,EAAK9a,KAAKkY,OAAO2C,oBAAoBzK,EACrC2K,EAAK/a,KAAKkY,OAAO2C,oBAAoBd,EAGrCiB,EAAQpW,KAAKqW,IAAIjb,KAAKkY,OAAOgD,oBAAoB/K,GACjDgL,EAAQvW,KAAKwW,IAAIpb,KAAKkY,OAAOgD,oBAAoB/K,GACjDkL,EAAQzW,KAAKqW,IAAIjb,KAAKkY,OAAOgD,oBAAoB9K,GACjDkL,EAAQ1W,KAAKwW,IAAIpb,KAAKkY,OAAOgD,oBAAoB9K,GACjDmL,EAAQ3W,KAAKqW,IAAIjb,KAAKkY,OAAOgD,oBAAoBnB,GACjDyB,EAAQ5W,KAAKwW,IAAIpb,KAAKkY,OAAOgD,oBAAoBnB,GAGjD0B,EAAKH,GAASC,GAASb,EAAKI,GAAMU,GAASf,EAAKG,IAAOS,GAASV,EAAKI,GACrEW,EAAKV,GAASM,GAASX,EAAKI,GAAMM,GAASE,GAASb,EAAKI,GAAMU,GAASf,EAAKG,KAAQO,GAASK,GAASd,EAAKI,GAAMS,GAASd,EAAGG,IAC9He,EAAKR,GAASG,GAASX,EAAKI,GAAMM,GAASE,GAASb,EAAKI,GAAMU,GAASf,EAAKG,KAAQI,GAASQ,GAASd,EAAKI,GAAMS,GAASd,EAAGG,GAEhI,OAAO,IAAIxZ,GAAQqa,EAAIC,EAAIC,IAU7B5a,EAAQwQ,UAAUiJ,4BAA8B,SAASF,GACvD,GAQIsB,GACAC,EATAC,EAAK9b,KAAKmY,IAAIhI,EAChB4L,EAAK/b,KAAKmY,IAAI/H,EACd4L,EAAKhc,KAAKmY,IAAI4B,EACd0B,EAAKnB,EAAYnK,EACjBuL,EAAKpB,EAAYlK,EACjBuL,EAAKrB,EAAYP,CAgBnB,OAXI/Z,MAAKyX,iBACPmE,GAAMH,EAAKK,IAAOE,EAAKL,GACvBE,GAAMH,EAAKK,IAAOC,EAAKL,KAGvBC,EAAKH,IAAOO,EAAKhc,KAAKkY,OAAO+D,gBAC7BJ,EAAKH,IAAOM,EAAKhc,KAAKkY,OAAO+D,iBAKxB,GAAI9a,GACTnB,KAAKkc,QAAUN,EAAK5b,KAAKmc,MAAMC,OAAOC,YACtCrc,KAAKsc,QAAUT,EAAK7b,KAAKmc,MAAMC,OAAOC,cAO1Ctb,EAAQwQ,UAAUgL,oBAAsB,SAASC,GAC/C,GAAIC,GAAO,QACPC,EAAS,OACTC,EAAc,CAElB,IAAgC,gBAAtB,GACRF,EAAOD,EACPE,EAAS,OACTC,EAAc,MAEX,IAAgC,gBAAtB,GACgBzW,SAAzBsW,EAAgBC,OAAuBA,EAAOD,EAAgBC,MACnCvW,SAA3BsW,EAAgBE,SAAyBA,EAASF,EAAgBE,QAClCxW,SAAhCsW,EAAgBG,cAA2BA,EAAcH,EAAgBG,iBAE1E,IAAyBzW,SAApBsW,EAIR,KAAM,qCAGRxc,MAAKmc,MAAM3L,MAAMgM,gBAAkBC,EACnCzc,KAAKmc,MAAM3L,MAAMoM,YAAcF,EAC/B1c,KAAKmc,MAAM3L,MAAMqM,YAAcF,EAAc,KAC7C3c,KAAKmc,MAAM3L,MAAMsM,YAAc,SAKjC/b,EAAQwW,OACNwF,IAAK,EACLC,SAAU,EACVC,QAAS,EACTzF,IAAM,EACN0F,QAAU,EACVC,SAAU,EACVC,QAAS,EACTC,KAAO,EACPC,KAAM,EACNC,QAAU,GASZxc,EAAQwQ,UAAUiM,gBAAkB,SAASC,GAC3C,OAAQA,GACN,IAAK,MAAW,MAAO1c,GAAQwW,MAAMC,GACrC,KAAK,WAAa,MAAOzW,GAAQwW,MAAM2F,OACvC,KAAK,YAAe,MAAOnc,GAAQwW,MAAM4F,QACzC,KAAK,WAAa,MAAOpc,GAAQwW,MAAM6F,OACvC,KAAK,OAAW,MAAOrc,GAAQwW,MAAM+F,IACrC,KAAK,OAAW,MAAOvc,GAAQwW,MAAM8F,IACrC,KAAK,UAAa,MAAOtc,GAAQwW,MAAMgG,OACvC,KAAK,MAAW,MAAOxc,GAAQwW,MAAMwF,GACrC,KAAK,YAAe,MAAOhc,GAAQwW,MAAMyF,QACzC,KAAK,WAAa,MAAOjc,GAAQwW,MAAM0F,QAGzC,MAAO,IAQTlc,EAAQwQ,UAAUmM,wBAA0B,SAAS3M,GACnD,GAAI/Q,KAAKwQ,QAAUzP,EAAQwW,MAAMC,KAC/BxX,KAAKwQ,QAAUzP,EAAQwW,MAAM2F,SAC7Bld,KAAKwQ,QAAUzP,EAAQwW,MAAM+F,MAC7Btd,KAAKwQ,QAAUzP,EAAQwW,MAAM8F,MAC7Brd,KAAKwQ,QAAUzP,EAAQwW,MAAMgG,SAC7Bvd,KAAKwQ,QAAUzP,EAAQwW,MAAMwF,IAE7B/c,KAAKqY,KAAO,EACZrY,KAAKsY,KAAO,EACZtY,KAAKuY,KAAO,EACZvY,KAAKwY,SAAWtS,OAEZ6K,EAAK6E,qBAAuB,IAC9B5V,KAAKyY,UAAY,OAGhB,CAAA,GAAIzY,KAAKwQ,QAAUzP,EAAQwW,MAAM4F,UACpCnd,KAAKwQ,QAAUzP,EAAQwW,MAAM6F,SAC7Bpd,KAAKwQ,QAAUzP,EAAQwW,MAAMyF,UAC7Bhd,KAAKwQ,QAAUzP,EAAQwW,MAAM0F,QAY7B,KAAM,kBAAoBjd,KAAKwQ,MAAQ,GAVvCxQ,MAAKqY,KAAO,EACZrY,KAAKsY,KAAO,EACZtY,KAAKuY,KAAO,EACZvY,KAAKwY,SAAW,EAEZzH,EAAK6E,qBAAuB,IAC9B5V,KAAKyY,UAAY,KAQvB1X,EAAQwQ,UAAUmB,gBAAkB,SAAS3B,GAC3C,MAAOA,GAAK1L,QAIdtE,EAAQwQ,UAAUqE,mBAAqB,SAAS7E,GAC9C,GAAI4M,GAAU,CACd,KAAK,GAAIC,KAAU7M,GAAK,GAClBA,EAAK,GAAGvL,eAAeoY,IACzBD,GAGJ,OAAOA,IAIT5c,EAAQwQ,UAAUsM,kBAAoB,SAAS9M,EAAM6M,GAEnD,IAAK,GADDE,MACK5Y,EAAI,EAAGA,EAAI6L,EAAK1L,OAAQH,IACgB,IAA3C4Y,EAAenW,QAAQoJ,EAAK7L,GAAG0Y,KACjCE,EAAelW,KAAKmJ,EAAK7L,GAAG0Y,GAGhC,OAAOE,IAIT/c,EAAQwQ,UAAUwM,eAAiB,SAAShN,EAAK6M,GAE/C,IAAK,GADDI,IAAUjT,IAAIgG,EAAK,GAAG6M,GAAQnR,IAAIsE,EAAK,GAAG6M,IACrC1Y,EAAI,EAAGA,EAAI6L,EAAK1L,OAAQH,IAC3B8Y,EAAOjT,IAAMgG,EAAK7L,GAAG0Y,KAAWI,EAAOjT,IAAMgG,EAAK7L,GAAG0Y,IACrDI,EAAOvR,IAAMsE,EAAK7L,GAAG0Y,KAAWI,EAAOvR,IAAMsE,EAAK7L,GAAG0Y,GAE3D,OAAOI,IASTjd,EAAQwQ,UAAU0M,gBAAkB,SAAUC,GAC5C,GAAI9L,GAAKpS,IAOT,IAJIA,KAAKwW,SACPxW,KAAKwW,QAAQ7E,IAAI,IAAK3R,KAAKme,WAGbjY,SAAZgY,EAAJ,CAGIvY,MAAMC,QAAQsY,KAChBA,EAAU,GAAIrd,GAAQqd,GAGxB,IAAInN,EACJ,MAAImN,YAAmBrd,IAAWqd,YAAmBpd,IAInD,KAAM,IAAIyC,OAAM,uCAGlB,IANEwN,EAAOmN,EAAQ/K,MAME,GAAfpC,EAAK1L,OAAT,CAGArF,KAAKwW,QAAU0H,EACfle,KAAK2V,UAAY5E,EAGjB/Q,KAAKme,UAAY,WACf/L,EAAGgE,QAAQhE,EAAGoE,UAEhBxW,KAAKwW,QAAQhF,GAAG,IAAKxR,KAAKme,WAS1Bne,KAAKqY,KAAO,IACZrY,KAAKsY,KAAO,IACZtY,KAAKuY,KAAO,IACZvY,KAAKwY,SAAW,QAChBxY,KAAKyY,UAAY,SAKb1H,EAAK,GAAGvL,eAAe,WACDU,SAApBlG,KAAKoe,aACPpe,KAAKoe,WAAa,GAAIld,GAAOgd,EAASle,KAAKyY,UAAWzY,MACtDA,KAAKoe,WAAWC,kBAAkB,WAAYjM,EAAGkM,WAKrD,IAAIC,GAAWve,KAAKwQ,OAASzP,EAAQwW,MAAMwF,KACzC/c,KAAKwQ,OAASzP,EAAQwW,MAAMyF,UAC5Bhd,KAAKwQ,OAASzP,EAAQwW,MAAM0F,OAG9B,IAAIsB,EAAU,CACZ,GAA8BrY,SAA1BlG,KAAKwe,iBACPxe,KAAKqZ,UAAYrZ,KAAKwe,qBAEnB,CACH,GAAIC,GAAQze,KAAK6d,kBAAkB9M,EAAK/Q,KAAKqY,KAC7CrY,MAAKqZ,UAAaoF,EAAM,GAAKA,EAAM,IAAO,EAG5C,GAA8BvY,SAA1BlG,KAAK0e,iBACP1e,KAAKsZ,UAAYtZ,KAAK0e,qBAEnB,CACH,GAAIC,GAAQ3e,KAAK6d,kBAAkB9M,EAAK/Q,KAAKsY,KAC7CtY,MAAKsZ,UAAaqF,EAAM,GAAKA,EAAM,IAAO,GAK9C,GAAIC,GAAS5e,KAAK+d,eAAehN,EAAK/Q,KAAKqY,KACvCkG,KACFK,EAAO7T,KAAO/K,KAAKqZ,UAAY,EAC/BuF,EAAOnS,KAAOzM,KAAKqZ,UAAY,GAEjCrZ,KAAK0Y,KAA6BxS,SAArBlG,KAAK6e,YAA6B7e,KAAK6e,YAAcD,EAAO7T,IACzE/K,KAAK4Y,KAA6B1S,SAArBlG,KAAK8e,YAA6B9e,KAAK8e,YAAcF,EAAOnS,IACrEzM,KAAK4Y,MAAQ5Y,KAAK0Y,OAAM1Y,KAAK4Y,KAAO5Y,KAAK0Y,KAAO,GACpD1Y,KAAK2Y,MAA+BzS,SAAtBlG,KAAK+e,aAA8B/e,KAAK+e,cAAgB/e,KAAK4Y,KAAK5Y,KAAK0Y,MAAM,CAE3F,IAAIsG,GAAShf,KAAK+d,eAAehN,EAAK/Q,KAAKsY,KACvCiG,KACFS,EAAOjU,KAAO/K,KAAKsZ,UAAY,EAC/B0F,EAAOvS,KAAOzM,KAAKsZ,UAAY,GAEjCtZ,KAAK6Y,KAA6B3S,SAArBlG,KAAKif,YAA6Bjf,KAAKif,YAAcD,EAAOjU,IACzE/K,KAAK+Y,KAA6B7S,SAArBlG,KAAKkf,YAA6Blf,KAAKkf,YAAcF,EAAOvS,IACrEzM,KAAK+Y,MAAQ/Y,KAAK6Y,OAAM7Y,KAAK+Y,KAAO/Y,KAAK6Y,KAAO,GACpD7Y,KAAK8Y,MAA+B5S,SAAtBlG,KAAKmf,aAA8Bnf,KAAKmf,cAAgBnf,KAAK+Y,KAAK/Y,KAAK6Y,MAAM,CAE3F,IAAIuG,GAASpf,KAAK+d,eAAehN,EAAK/Q,KAAKuY,KAM3C,IALAvY,KAAKgZ,KAA6B9S,SAArBlG,KAAKqf,YAA6Brf,KAAKqf,YAAcD,EAAOrU,IACzE/K,KAAKkZ,KAA6BhT,SAArBlG,KAAKsf,YAA6Btf,KAAKsf,YAAcF,EAAO3S,IACrEzM,KAAKkZ,MAAQlZ,KAAKgZ,OAAMhZ,KAAKkZ,KAAOlZ,KAAKgZ,KAAO,GACpDhZ,KAAKiZ,MAA+B/S,SAAtBlG,KAAKuf,aAA8Bvf,KAAKuf,cAAgBvf,KAAKkZ,KAAKlZ,KAAKgZ,MAAM,EAErE9S,SAAlBlG,KAAKwY,SAAwB,CAC/B,GAAIgH,GAAaxf,KAAK+d,eAAehN,EAAK/Q,KAAKwY,SAC/CxY,MAAKmZ,SAAqCjT,SAAzBlG,KAAKyf,gBAAiCzf,KAAKyf,gBAAkBD,EAAWzU,IACzF/K,KAAKoZ,SAAqClT,SAAzBlG,KAAK0f,gBAAiC1f,KAAK0f,gBAAkBF,EAAW/S,IACrFzM,KAAKoZ,UAAYpZ,KAAKmZ,WAAUnZ,KAAKoZ,SAAWpZ,KAAKmZ,SAAW,GAItEnZ,KAAK6Z,eAUP9Y,EAAQwQ,UAAUoO,eAAiB,SAAU5O,GA0BzC,QAAS6O,GAAW3a,EAAGa,GACrB,MAAOb,GAAIa,EAzBf,GAAIqK,GAAGC,EAAGlL,EAAG6U,EAAG8F,EAAKvP,EAEjB8H,IAEJ,IAAIpY,KAAKwQ,QAAUzP,EAAQwW,MAAM8F,MAC/Brd,KAAKwQ,QAAUzP,EAAQwW,MAAMgG,QAAS,CAKtC,GAAIkB,MACAE,IACJ,KAAKzZ,EAAI,EAAGA,EAAIlF,KAAK0S,gBAAgB3B,GAAO7L,IAC1CiL,EAAIY,EAAK7L,GAAGlF,KAAKqY,OAAS,EAC1BjI,EAAIW,EAAK7L,GAAGlF,KAAKsY,OAAS,EAED,KAArBmG,EAAM9W,QAAQwI,IAChBsO,EAAM7W,KAAKuI,GAEY,KAArBwO,EAAMhX,QAAQyI,IAChBuO,EAAM/W,KAAKwI,EAOfqO,GAAMpK,KAAKuL,GACXjB,EAAMtK,KAAKuL,EAGX,IAAIE,KACJ,KAAK5a,EAAI,EAAGA,EAAI6L,EAAK1L,OAAQH,IAAK,CAChCiL,EAAIY,EAAK7L,GAAGlF,KAAKqY,OAAS,EAC1BjI,EAAIW,EAAK7L,GAAGlF,KAAKsY,OAAS,EAC1ByB,EAAIhJ,EAAK7L,GAAGlF,KAAKuY,OAAS,CAE1B,IAAIwH,GAAStB,EAAM9W,QAAQwI,GACvB6P,EAASrB,EAAMhX,QAAQyI,EAEAlK,UAAvB4Z,EAAWC,KACbD,EAAWC,MAGb,IAAI1F,GAAU,GAAIjZ,EAClBiZ,GAAQlK,EAAIA,EACZkK,EAAQjK,EAAIA,EACZiK,EAAQN,EAAIA,EAEZ8F,KACAA,EAAIvP,MAAQ+J,EACZwF,EAAII,MAAQ/Z,OACZ2Z,EAAIK,OAASha,OACb2Z,EAAIM,OAAS,GAAI/e,GAAQ+O,EAAGC,EAAGpQ,KAAKgZ,MAEpC8G,EAAWC,GAAQC,GAAUH,EAE7BzH,EAAWxQ,KAAKiY,GAIlB,IAAK1P,EAAI,EAAGA,EAAI2P,EAAWza,OAAQ8K,IACjC,IAAKC,EAAI,EAAGA,EAAI0P,EAAW3P,GAAG9K,OAAQ+K,IAChC0P,EAAW3P,GAAGC,KAChB0P,EAAW3P,GAAGC,GAAGgQ,WAAcjQ,EAAI2P,EAAWza,OAAO,EAAKya,EAAW3P,EAAE,GAAGC,GAAKlK,OAC/E4Z,EAAW3P,GAAGC,GAAGiQ,SAAcjQ,EAAI0P,EAAW3P,GAAG9K,OAAO,EAAKya,EAAW3P,GAAGC,EAAE,GAAKlK,OAClF4Z,EAAW3P,GAAGC,GAAGkQ,WACdnQ,EAAI2P,EAAWza,OAAO,GAAK+K,EAAI0P,EAAW3P,GAAG9K,OAAO,EACnDya,EAAW3P,EAAE,GAAGC,EAAE,GAClBlK,YAOV,KAAKhB,EAAI,EAAGA,EAAI6L,EAAK1L,OAAQH,IAC3BoL,EAAQ,GAAIlP,GACZkP,EAAMH,EAAIY,EAAK7L,GAAGlF,KAAKqY,OAAS,EAChC/H,EAAMF,EAAIW,EAAK7L,GAAGlF,KAAKsY,OAAS,EAChChI,EAAMyJ,EAAIhJ,EAAK7L,GAAGlF,KAAKuY,OAAS,EAEVrS,SAAlBlG,KAAKwY,WACPlI,EAAMzJ,MAAQkK,EAAK7L,GAAGlF,KAAKwY,WAAa,GAG1CqH,KACAA,EAAIvP,MAAQA,EACZuP,EAAIM,OAAS,GAAI/e,GAAQkP,EAAMH,EAAGG,EAAMF,EAAGpQ,KAAKgZ,MAChD6G,EAAII,MAAQ/Z,OACZ2Z,EAAIK,OAASha,OAEbkS,EAAWxQ,KAAKiY,EAIpB,OAAOzH,IASTrX,EAAQwQ,UAAUjE,OAAS,WAEzB,KAAOtN,KAAK8W,iBAAiByJ,iBAC3BvgB,KAAK8W,iBAAiBtH,YAAYxP,KAAK8W,iBAAiB0J,WAG1DxgB,MAAKmc,MAAQvM,SAASK,cAAc,OACpCjQ,KAAKmc,MAAM3L,MAAMiQ,SAAW,WAC5BzgB,KAAKmc,MAAM3L,MAAMkQ,SAAW,SAG5B1gB,KAAKmc,MAAMC,OAASxM,SAASK,cAAe,UAC5CjQ,KAAKmc,MAAMC,OAAO5L,MAAMiQ,SAAW,WACnCzgB,KAAKmc,MAAMrM,YAAY9P,KAAKmc,MAAMC,OAGhC,IAAIuE,GAAW/Q,SAASK,cAAe,MACvC0Q,GAASnQ,MAAMjG,MAAQ,MACvBoW,EAASnQ,MAAMoQ,WAAc,OAC7BD,EAASnQ,MAAMqQ,QAAW,OAC1BF,EAASG,UAAa,mDACtB9gB,KAAKmc,MAAMC,OAAOtM,YAAY6Q,GAGhC3gB,KAAKmc,MAAMvK,OAAShC,SAASK,cAAe,OAC5CjQ,KAAKmc,MAAMvK,OAAOpB,MAAMiQ,SAAW,WACnCzgB,KAAKmc,MAAMvK,OAAOpB,MAAM2P,OAAS,MACjCngB,KAAKmc,MAAMvK,OAAOpB,MAAMvJ,KAAO,MAC/BjH,KAAKmc,MAAMvK,OAAOpB,MAAMI,MAAQ,OAChC5Q,KAAKmc,MAAMrM,YAAY9P,KAAKmc,MAAMvK,OAGlC;GAAIQ,GAAKpS,KACL+gB,EAAc,SAAU7X,GAAQkJ,EAAG4O,aAAa9X,IAChD+X,EAAe,SAAU/X,GAAQkJ,EAAG8O,cAAchY,IAClDiY,EAAe,SAAUjY,GAAQkJ,EAAGgP,SAASlY,IAC7CmY,EAAY,SAAUnY,GAAQkJ,EAAGkP,WAAWpY,GAGhDvI,GAAK4H,iBAAiBvI,KAAKmc,MAAMC,OAAQ,UAAWmF,WACpD5gB,EAAK4H,iBAAiBvI,KAAKmc,MAAMC,OAAQ,YAAa2E,GACtDpgB,EAAK4H,iBAAiBvI,KAAKmc,MAAMC,OAAQ,aAAc6E,GACvDtgB,EAAK4H,iBAAiBvI,KAAKmc,MAAMC,OAAQ,aAAc+E,GACvDxgB,EAAK4H,iBAAiBvI,KAAKmc,MAAMC,OAAQ,YAAaiF,GAGtDrhB,KAAK8W,iBAAiBhH,YAAY9P,KAAKmc,QAWzCpb,EAAQwQ,UAAUiQ,QAAU,SAAS5Q,EAAOC,GAC1C7Q,KAAKmc,MAAM3L,MAAMI,MAAQA,EACzB5Q,KAAKmc,MAAM3L,MAAMK,OAASA,EAE1B7Q,KAAKyhB,iBAMP1gB,EAAQwQ,UAAUkQ,cAAgB,WAChCzhB,KAAKmc,MAAMC,OAAO5L,MAAMI,MAAQ,OAChC5Q,KAAKmc,MAAMC,OAAO5L,MAAMK,OAAS,OAEjC7Q,KAAKmc,MAAMC,OAAOxL,MAAQ5Q,KAAKmc,MAAMC,OAAOC,YAC5Crc,KAAKmc,MAAMC,OAAOvL,OAAS7Q,KAAKmc,MAAMC,OAAOsF,aAG7C1hB,KAAKmc,MAAMvK,OAAOpB,MAAMI,MAAS5Q,KAAKmc,MAAMC,OAAOC,YAAc,GAAU,MAM7Etb,EAAQwQ,UAAUoQ,eAAiB,WACjC,IAAK3hB,KAAKmc,MAAMvK,SAAW5R,KAAKmc,MAAMvK,OAAOgQ,OAC3C,KAAM,wBAER5hB,MAAKmc,MAAMvK,OAAOgQ,OAAOC,QAO3B9gB,EAAQwQ,UAAUuQ,cAAgB,WAC3B9hB,KAAKmc,MAAMvK,QAAW5R,KAAKmc,MAAMvK,OAAOgQ,QAE7C5hB,KAAKmc,MAAMvK,OAAOgQ,OAAOG,QAU3BhhB,EAAQwQ,UAAUyQ,cAAgB,WAG9BhiB,KAAKkc,QAD0D,MAA7Dlc,KAAKgX,eAAeiL,OAAOjiB,KAAKgX,eAAe3R,OAAO,GAEtD6c,WAAWliB,KAAKgX,gBAAkB,IAChChX,KAAKmc,MAAMC,OAAOC,YAGP6F,WAAWliB,KAAKgX,gBAK/BhX,KAAKsc,QAD0D,MAA7Dtc,KAAKiX,eAAegL,OAAOjiB,KAAKiX,eAAe5R,OAAO,GAEtD6c,WAAWliB,KAAKiX,gBAAkB,KAC/BjX,KAAKmc,MAAMC,OAAOsF,aAAe1hB,KAAKmc,MAAMvK,OAAO8P,cAGzCQ,WAAWliB,KAAKiX,iBAoBnClW,EAAQwQ,UAAU4Q,kBAAoB,SAASC,GACjClc,SAARkc,IAImBlc,SAAnBkc,EAAIC,YAA6Cnc,SAAjBkc,EAAIE,UACtCtiB,KAAKkY,OAAOqK,eAAeH,EAAIC,WAAYD,EAAIE,UAG5Bpc,SAAjBkc,EAAII,UACNxiB,KAAKkY,OAAOuK,aAAaL,EAAII,UAG/BxiB,KAAKse,WASPvd,EAAQwQ,UAAUmR,kBAAoB,WACpC,GAAIN,GAAMpiB,KAAKkY,OAAOyK,gBAEtB,OADAP,GAAII,SAAWxiB,KAAKkY,OAAO+D,eACpBmG,GAMTrhB,EAAQwQ,UAAUqR,UAAY,SAAS7R,GAErC/Q,KAAKie,gBAAgBlN,EAAM/Q,KAAKwQ,OAK9BxQ,KAAKoY,WAFHpY,KAAKoe,WAEWpe,KAAKoe,WAAWuB,iBAIhB3f,KAAK2f,eAAe3f,KAAK2V,WAI7C3V,KAAK6iB,iBAOP9hB,EAAQwQ,UAAU6E,QAAU,SAAUrF,GACpC/Q,KAAK4iB,UAAU7R,GACf/Q,KAAKse,SAGDte,KAAK8iB,oBAAsB9iB,KAAKoe,YAClCpe,KAAK2hB,kBAQT5gB,EAAQwQ,UAAUoI,WAAa,SAAUjM,GACvC,GAAIqV,GAAiB7c,MAIrB,IAFAlG,KAAK8hB,gBAEW5b,SAAZwH,EAAuB,CAczB,GAZsBxH,SAAlBwH,EAAQkD,QAA2B5Q,KAAK4Q,MAAQlD,EAAQkD,OACrC1K,SAAnBwH,EAAQmD,SAA2B7Q,KAAK6Q,OAASnD,EAAQmD,QAErC3K,SAApBwH,EAAQsM,UAA2Bha,KAAKgX,eAAiBtJ,EAAQsM,SAC7C9T,SAApBwH,EAAQuM,UAA2Bja,KAAKiX,eAAiBvJ,EAAQuM,SAEzC/T,SAAxBwH,EAAQ2J,cAA+BrX,KAAKqX,YAAc3J,EAAQ2J,aAC1CnR,SAAxBwH,EAAQ4J,cAA+BtX,KAAKsX,YAAc5J,EAAQ4J,aAC/CpR,SAAnBwH,EAAQwJ,SAA0BlX,KAAKkX,OAASxJ,EAAQwJ,QACrChR,SAAnBwH,EAAQyJ,SAA0BnX,KAAKmX,OAASzJ,EAAQyJ,QACrCjR,SAAnBwH,EAAQ0J,SAA0BpX,KAAKoX,OAAS1J,EAAQ0J,QAEtClR,SAAlBwH,EAAQ8C,MAAqB,CAC/B,GAAIwS,GAAchjB,KAAKwd,gBAAgB9P,EAAQ8C,MAC3B,MAAhBwS,IACFhjB,KAAKwQ,MAAQwS,GAGQ9c,SAArBwH,EAAQgK,WAA6B1X,KAAK0X,SAAWhK,EAAQgK,UACjCxR,SAA5BwH,EAAQ+J,kBAAiCzX,KAAKyX,gBAAkB/J,EAAQ+J,iBACjDvR,SAAvBwH,EAAQkK,aAA6B5X,KAAK4X,WAAalK,EAAQkK,YAC3C1R,SAApBwH,EAAQuV,UAA6BjjB,KAAK8X,YAAcpK,EAAQuV,SAC9B/c,SAAlCwH,EAAQwV,wBAAqCljB,KAAKkjB,sBAAwBxV,EAAQwV,uBACtDhd,SAA5BwH,EAAQiK,kBAAiC3X,KAAK2X,gBAAkBjK,EAAQiK,iBAC9CzR,SAA1BwH,EAAQqK,gBAA+B/X,KAAK+X,cAAgBrK,EAAQqK,eAEtC7R,SAA9BwH,EAAQsK,oBAAiChY,KAAKgY,kBAAoBtK,EAAQsK,mBAC7C9R,SAA7BwH,EAAQuK,mBAAiCjY,KAAKiY,iBAAmBvK,EAAQuK,kBAC1C/R,SAA/BwH,EAAQoV,qBAAiC9iB,KAAK8iB,mBAAqBpV,EAAQoV,oBAErD5c,SAAtBwH,EAAQ2L,YAAyBrZ,KAAKwe,iBAAmB9Q,EAAQ2L,WAC3CnT,SAAtBwH,EAAQ4L,YAAyBtZ,KAAK0e,iBAAmBhR,EAAQ4L,WAEhDpT,SAAjBwH,EAAQgL,OAAoB1Y,KAAK6e,YAAcnR,EAAQgL,MACrCxS,SAAlBwH,EAAQiL,QAAqB3Y,KAAK+e,aAAerR,EAAQiL,OACxCzS,SAAjBwH,EAAQkL,OAAoB5Y,KAAK8e,YAAcpR,EAAQkL,MACtC1S,SAAjBwH,EAAQmL,OAAoB7Y,KAAKif,YAAcvR,EAAQmL,MACrC3S,SAAlBwH,EAAQoL,QAAqB9Y,KAAKmf,aAAezR,EAAQoL,OACxC5S,SAAjBwH,EAAQqL,OAAoB/Y,KAAKkf,YAAcxR,EAAQqL,MACtC7S,SAAjBwH,EAAQsL,OAAoBhZ,KAAKqf,YAAc3R,EAAQsL,MACrC9S,SAAlBwH,EAAQuL,QAAqBjZ,KAAKuf,aAAe7R,EAAQuL,OACxC/S,SAAjBwH,EAAQwL,OAAoBlZ,KAAKsf,YAAc5R,EAAQwL,MAClChT,SAArBwH,EAAQyL,WAAwBnZ,KAAKyf,gBAAkB/R,EAAQyL,UAC1CjT,SAArBwH,EAAQ0L,WAAwBpZ,KAAK0f,gBAAkBhS,EAAQ0L,UAEpClT,SAA3BwH,EAAQqV,iBAA8BA,EAAiBrV,EAAQqV,gBAE5C7c,SAAnB6c,GACF/iB,KAAKkY,OAAOqK,eAAeQ,EAAeV,WAAYU,EAAeT,UACrEtiB,KAAKkY,OAAOuK,aAAaM,EAAeP,YAGxCxiB,KAAKkY,OAAOqK,eAAe,EAAK,IAChCviB,KAAKkY,OAAOuK,aAAa,MAI7BziB,KAAKuc,oBAAoB7O,GAAWA,EAAQ8O,iBAE5Cxc,KAAKwhB,QAAQxhB,KAAK4Q,MAAO5Q,KAAK6Q,QAG1B7Q,KAAK2V,WACP3V,KAAKoW,QAAQpW,KAAK2V,WAIhB3V,KAAK8iB,oBAAsB9iB,KAAKoe,YAClCpe,KAAK2hB,kBAOT5gB,EAAQwQ,UAAU+M,OAAS,WACzB,GAAwBpY,SAApBlG,KAAKoY,WACP,KAAM,mCAGRpY,MAAKyhB,gBACLzhB,KAAKgiB,gBACLhiB,KAAKmjB,gBACLnjB,KAAKojB,eACLpjB,KAAKqjB,cAEDrjB,KAAKwQ,QAAUzP,EAAQwW,MAAM8F,MAC/Brd,KAAKwQ,QAAUzP,EAAQwW,MAAMgG,QAC7Bvd,KAAKsjB,kBAEEtjB,KAAKwQ,QAAUzP,EAAQwW,MAAM+F,KACpCtd,KAAKujB,kBAEEvjB,KAAKwQ,QAAUzP,EAAQwW,MAAMwF,KACpC/c,KAAKwQ,QAAUzP,EAAQwW,MAAMyF,UAC7Bhd,KAAKwQ,QAAUzP,EAAQwW,MAAM0F,QAC7Bjd,KAAKwjB,iBAILxjB,KAAKyjB,iBAGPzjB,KAAK0jB,cACL1jB,KAAK2jB,iBAMP5iB,EAAQwQ,UAAU6R,aAAe,WAC/B,GAAIhH,GAASpc,KAAKmc,MAAMC,OACpBwH,EAAMxH,EAAOyH,WAAW,KAE5BD,GAAIE,UAAU,EAAG,EAAG1H,EAAOxL,MAAOwL,EAAOvL,SAO3C9P,EAAQwQ,UAAUoS,cAAgB,WAChC,GAAIvT,EAEJ,IAAIpQ,KAAKwQ,QAAUzP,EAAQwW,MAAM4F,UAC/Bnd,KAAKwQ,QAAUzP,EAAQwW,MAAM6F,QAAS,CAEtC,GAEI2G,GAAUC,EAFVC,EAAmC,IAAzBjkB,KAAKmc,MAAME,WAGrBrc,MAAKwQ,QAAUzP,EAAQwW,MAAM6F,SAC/B2G,EAAWE,EAAU,EACrBD,EAAWC,EAAU,EAAc,EAAVA,IAGzBF,EAAW,GACXC,EAAW,GAGb,IAAInT,GAASjM,KAAK6H,IAA8B,IAA1BzM,KAAKmc,MAAMuF,aAAqB,KAClDra,EAAMrH,KAAK+W,OACXmN,EAAQlkB,KAAKmc,MAAME,YAAcrc,KAAK+W,OACtC9P,EAAOid,EAAQF,EACf7D,EAAS9Y,EAAMwJ,EAGrB,GAAIuL,GAASpc,KAAKmc,MAAMC,OACpBwH,EAAMxH,EAAOyH,WAAW,KAI5B,IAHAD,EAAIO,UAAY,EAChBP,EAAIQ,KAAO,aAEPpkB,KAAKwQ,QAAUzP,EAAQwW,MAAM4F,SAAU,CAEzC,GAAIkH,GAAO,EACPC,EAAOzT,CACX,KAAKT,EAAIiU,EAAUC,EAAJlU,EAAUA,IAAK,CAC5B,GAAIrE,IAAKqE,EAAIiU,IAASC,EAAOD,GAGzB3X,EAAU,IAAJX,EACNxB,EAAQvK,KAAKukB,SAAS7X,EAAK,EAAG,EAElCkX,GAAIY,YAAcja,EAClBqZ,EAAIa,YACJb,EAAIc,OAAOzd,EAAMI,EAAM+I,GACvBwT,EAAIe,OAAOT,EAAO7c,EAAM+I,GACxBwT,EAAIlH,SAGNkH,EAAIY,YAAexkB,KAAKuZ,UACxBqK,EAAIgB,WAAW3d,EAAMI,EAAK2c,EAAUnT,GAiBtC,GAdI7Q,KAAKwQ,QAAUzP,EAAQwW,MAAM6F,UAE/BwG,EAAIY,YAAexkB,KAAKuZ,UACxBqK,EAAIiB,UAAa7kB,KAAKyZ,SACtBmK,EAAIa,YACJb,EAAIc,OAAOzd,EAAMI,GACjBuc,EAAIe,OAAOT,EAAO7c,GAClBuc,EAAIe,OAAOT,EAAQF,EAAWD,EAAU5D,GACxCyD,EAAIe,OAAO1d,EAAMkZ,GACjByD,EAAIkB,YACJlB,EAAInH,OACJmH,EAAIlH,UAGF1c,KAAKwQ,QAAUzP,EAAQwW,MAAM4F,UAC/Bnd,KAAKwQ,QAAUzP,EAAQwW,MAAM6F,QAAS,CAEtC,GAAI2H,GAAc,EACdC,EAAO,GAAI1jB,GAAWtB,KAAKmZ,SAAUnZ,KAAKoZ,UAAWpZ,KAAKoZ,SAASpZ,KAAKmZ,UAAU,GAAG,EAKzF,KAJA6L,EAAKtW,QACDsW,EAAKC,aAAejlB,KAAKmZ,UAC3B6L,EAAKE,QAECF,EAAKG,OACX/U,EAAI+P,GAAU6E,EAAKC,aAAejlB,KAAKmZ,WAAanZ,KAAKoZ,SAAWpZ,KAAKmZ,UAAYtI,EAErF+S,EAAIa,YACJb,EAAIc,OAAOzd,EAAO8d,EAAa3U,GAC/BwT,EAAIe,OAAO1d,EAAMmJ,GACjBwT,EAAIlH,SAEJkH,EAAIwB,UAAY,QAChBxB,EAAIyB,aAAe,SACnBzB,EAAIiB,UAAY7kB,KAAKuZ,UACrBqK,EAAI0B,SAASN,EAAKC,aAAche,EAAO,EAAI8d,EAAa3U,GAExD4U,EAAKE,MAGPtB,GAAIwB,UAAY,QAChBxB,EAAIyB,aAAe,KACnB,IAAIE,GAAQvlB,KAAKsX,WACjBsM,GAAI0B,SAASC,EAAOrB,EAAO/D,EAASngB,KAAK+W,UAO7ChW,EAAQwQ,UAAUsR,cAAgB,WAGhC,GAFA7iB,KAAKmc,MAAMvK,OAAOkP,UAAY,GAE1B9gB,KAAKoe,WAAY,CACnB,GAAI1Q,IACF8X,QAAWxlB,KAAKkjB,uBAEdtB,EAAS,GAAIvgB,GAAOrB,KAAKmc,MAAMvK,OAAQlE,EAC3C1N,MAAKmc,MAAMvK,OAAOgQ,OAASA,EAG3B5hB,KAAKmc,MAAMvK,OAAOpB,MAAMqQ,QAAU,OAGlCe,EAAO6D,UAAUzlB,KAAKoe,WAAWlJ,QACjC0M,EAAO8D,gBAAgB1lB,KAAKgY,kBAG5B,IAAI5F,GAAKpS,KACL2lB,EAAW,WACb,GAAI5d,GAAQ6Z,EAAOgE,UAEnBxT,GAAGgM,WAAWyH,YAAY9d,GAC1BqK,EAAGgG,WAAahG,EAAGgM,WAAWuB,iBAE9BvN,EAAGkM,SAELsD,GAAOkE,oBAAoBH,OAG3B3lB,MAAKmc,MAAMvK,OAAOgQ,OAAS1b,QAO/BnF,EAAQwQ,UAAU4R,cAAgB,WACEjd,SAA7BlG,KAAKmc,MAAMvK,OAAOgQ,QACrB5hB,KAAKmc,MAAMvK,OAAOgQ,OAAOtD,UAQ7Bvd,EAAQwQ,UAAUmS,YAAc,WAC9B,GAAI1jB,KAAKoe,WAAY,CACnB,GAAIhC,GAASpc,KAAKmc,MAAMC,OACpBwH,EAAMxH,EAAOyH,WAAW,KAE5BD,GAAIQ,KAAO,aACXR,EAAImC,UAAY,OAChBnC,EAAIiB,UAAY,OAChBjB,EAAIwB,UAAY,OAChBxB,EAAIyB,aAAe,KAEnB,IAAIlV,GAAInQ,KAAK+W,OACT3G,EAAIpQ,KAAK+W,MACb6M,GAAI0B,SAAStlB,KAAKoe,WAAW4H,WAAa,KAAOhmB,KAAKoe,WAAW6H,mBAAoB9V,EAAGC,KAQ5FrP,EAAQwQ,UAAU8R,YAAc,WAC9B,GAEE6C,GAAMC,EAAInB,EAAMoB,EAChBC,EAAMC,EAAOC,EAAOC,EACpBC,EAAQC,EAASC,EACjBC,EAAQC,EALNzK,EAASpc,KAAKmc,MAAMC,OACtBwH,EAAMxH,EAAOyH,WAAW,KAQ1BD,GAAIQ,KAAO,GAAKpkB,KAAKkY,OAAO+D,eAAiB,UAG7C,IAAI6K,GAAW,KAAQ9mB,KAAK8Z,MAAM3J,EAC9B4W,EAAW,KAAQ/mB,KAAK8Z,MAAM1J,EAC9B4W,EAAa,EAAIhnB,KAAKkY,OAAO+D,eAC7BgL,EAAWjnB,KAAKkY,OAAOyK,iBAAiBN,UAU5C,KAPAuB,EAAIO,UAAY,EAChBiC,EAAoClgB,SAAtBlG,KAAK+e,aACnBiG,EAAO,GAAI1jB,GAAWtB,KAAK0Y,KAAM1Y,KAAK4Y,KAAM5Y,KAAK2Y,MAAOyN,GACxDpB,EAAKtW,QACDsW,EAAKC,aAAejlB,KAAK0Y,MAC3BsM,EAAKE,QAECF,EAAKG,OAAO,CAClB,GAAIhV,GAAI6U,EAAKC,YAETjlB,MAAK0X,UACPwO,EAAOlmB,KAAKoa,eAAe,GAAIhZ,GAAQ+O,EAAGnQ,KAAK6Y,KAAM7Y,KAAKgZ,OAC1DmN,EAAKnmB,KAAKoa,eAAe,GAAIhZ,GAAQ+O,EAAGnQ,KAAK+Y,KAAM/Y,KAAKgZ,OACxD4K,EAAIY,YAAcxkB,KAAKwZ,UACvBoK,EAAIa,YACJb,EAAIc,OAAOwB,EAAK/V,EAAG+V,EAAK9V,GACxBwT,EAAIe,OAAOwB,EAAGhW,EAAGgW,EAAG/V,GACpBwT,EAAIlH,WAGJwJ,EAAOlmB,KAAKoa,eAAe,GAAIhZ,GAAQ+O,EAAGnQ,KAAK6Y,KAAM7Y,KAAKgZ,OAC1DmN,EAAKnmB,KAAKoa,eAAe,GAAIhZ,GAAQ+O,EAAGnQ,KAAK6Y,KAAKiO,EAAU9mB,KAAKgZ,OACjE4K,EAAIY,YAAcxkB,KAAKuZ,UACvBqK,EAAIa,YACJb,EAAIc,OAAOwB,EAAK/V,EAAG+V,EAAK9V,GACxBwT,EAAIe,OAAOwB,EAAGhW,EAAGgW,EAAG/V,GACpBwT,EAAIlH,SAEJwJ,EAAOlmB,KAAKoa,eAAe,GAAIhZ,GAAQ+O,EAAGnQ,KAAK+Y,KAAM/Y,KAAKgZ,OAC1DmN,EAAKnmB,KAAKoa,eAAe,GAAIhZ,GAAQ+O,EAAGnQ,KAAK+Y,KAAK+N,EAAU9mB,KAAKgZ,OACjE4K,EAAIY,YAAcxkB,KAAKuZ,UACvBqK,EAAIa,YACJb,EAAIc,OAAOwB,EAAK/V,EAAG+V,EAAK9V,GACxBwT,EAAIe,OAAOwB,EAAGhW,EAAGgW,EAAG/V,GACpBwT,EAAIlH,UAGN6J,EAAS3hB,KAAKwW,IAAI6L,GAAY,EAAKjnB,KAAK6Y,KAAO7Y,KAAK+Y,KACpDsN,EAAOrmB,KAAKoa,eAAe,GAAIhZ,GAAQ+O,EAAGoW,EAAOvmB,KAAKgZ,OAClDpU,KAAKwW,IAAe,EAAX6L,GAAgB,GAC3BrD,EAAIwB,UAAY,SAChBxB,EAAIyB,aAAe,MACnBgB,EAAKjW,GAAK4W,GAEHpiB,KAAKqW,IAAe,EAAXgM,GAAgB,GAChCrD,EAAIwB,UAAY,QAChBxB,EAAIyB,aAAe,WAGnBzB,EAAIwB,UAAY,OAChBxB,EAAIyB,aAAe,UAErBzB,EAAIiB,UAAY7kB,KAAKuZ,UACrBqK,EAAI0B,SAAS,KAAON,EAAKC,aAAe,KAAMoB,EAAKlW,EAAGkW,EAAKjW,GAE3D4U,EAAKE,OAWP,IAPAtB,EAAIO,UAAY,EAChBiC,EAAoClgB,SAAtBlG,KAAKmf,aACnB6F,EAAO,GAAI1jB,GAAWtB,KAAK6Y,KAAM7Y,KAAK+Y,KAAM/Y,KAAK8Y,MAAOsN,GACxDpB,EAAKtW,QACDsW,EAAKC,aAAejlB,KAAK6Y,MAC3BmM,EAAKE,QAECF,EAAKG,OACPnlB,KAAK0X,UACPwO,EAAOlmB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK0Y,KAAMsM,EAAKC,aAAcjlB,KAAKgZ,OAC1EmN,EAAKnmB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK4Y,KAAMoM,EAAKC,aAAcjlB,KAAKgZ,OACxE4K,EAAIY,YAAcxkB,KAAKwZ,UACvBoK,EAAIa,YACJb,EAAIc,OAAOwB,EAAK/V,EAAG+V,EAAK9V,GACxBwT,EAAIe,OAAOwB,EAAGhW,EAAGgW,EAAG/V,GACpBwT,EAAIlH,WAGJwJ,EAAOlmB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK0Y,KAAMsM,EAAKC,aAAcjlB,KAAKgZ,OAC1EmN,EAAKnmB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK0Y,KAAKqO,EAAU/B,EAAKC,aAAcjlB,KAAKgZ,OACjF4K,EAAIY,YAAcxkB,KAAKuZ,UACvBqK,EAAIa,YACJb,EAAIc,OAAOwB,EAAK/V,EAAG+V,EAAK9V,GACxBwT,EAAIe,OAAOwB,EAAGhW,EAAGgW,EAAG/V,GACpBwT,EAAIlH,SAEJwJ,EAAOlmB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK4Y,KAAMoM,EAAKC,aAAcjlB,KAAKgZ,OAC1EmN,EAAKnmB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK4Y,KAAKmO,EAAU/B,EAAKC,aAAcjlB,KAAKgZ,OACjF4K,EAAIY,YAAcxkB,KAAKuZ,UACvBqK,EAAIa,YACJb,EAAIc,OAAOwB,EAAK/V,EAAG+V,EAAK9V,GACxBwT,EAAIe,OAAOwB,EAAGhW,EAAGgW,EAAG/V,GACpBwT,EAAIlH,UAGN4J,EAAS1hB,KAAKqW,IAAIgM,GAAa,EAAKjnB,KAAK0Y,KAAO1Y,KAAK4Y,KACrDyN,EAAOrmB,KAAKoa,eAAe,GAAIhZ,GAAQklB,EAAOtB,EAAKC,aAAcjlB,KAAKgZ,OAClEpU,KAAKwW,IAAe,EAAX6L,GAAgB,GAC3BrD,EAAIwB,UAAY,SAChBxB,EAAIyB,aAAe,MACnBgB,EAAKjW,GAAK4W,GAEHpiB,KAAKqW,IAAe,EAAXgM,GAAgB,GAChCrD,EAAIwB,UAAY,QAChBxB,EAAIyB,aAAe,WAGnBzB,EAAIwB,UAAY,OAChBxB,EAAIyB,aAAe,UAErBzB,EAAIiB,UAAY7kB,KAAKuZ,UACrBqK,EAAI0B,SAAS,KAAON,EAAKC,aAAe,KAAMoB,EAAKlW,EAAGkW,EAAKjW,GAE3D4U,EAAKE,MAaP,KATAtB,EAAIO,UAAY,EAChBiC,EAAoClgB,SAAtBlG,KAAKuf,aACnByF,EAAO,GAAI1jB,GAAWtB,KAAKgZ,KAAMhZ,KAAKkZ,KAAMlZ,KAAKiZ,MAAOmN,GACxDpB,EAAKtW,QACDsW,EAAKC,aAAejlB,KAAKgZ,MAC3BgM,EAAKE,OAEPoB,EAAS1hB,KAAKwW,IAAI6L,GAAa,EAAKjnB,KAAK0Y,KAAO1Y,KAAK4Y,KACrD2N,EAAS3hB,KAAKqW,IAAIgM,GAAa,EAAKjnB,KAAK6Y,KAAO7Y,KAAK+Y,MAC7CiM,EAAKG,OAEXe,EAAOlmB,KAAKoa,eAAe,GAAIhZ,GAAQklB,EAAOC,EAAOvB,EAAKC,eAC1DrB,EAAIY,YAAcxkB,KAAKuZ,UACvBqK,EAAIa,YACJb,EAAIc,OAAOwB,EAAK/V,EAAG+V,EAAK9V,GACxBwT,EAAIe,OAAOuB,EAAK/V,EAAI6W,EAAYd,EAAK9V,GACrCwT,EAAIlH,SAEJkH,EAAIwB,UAAY,QAChBxB,EAAIyB,aAAe,SACnBzB,EAAIiB,UAAY7kB,KAAKuZ,UACrBqK,EAAI0B,SAASN,EAAKC,aAAe,IAAKiB,EAAK/V,EAAI,EAAG+V,EAAK9V,GAEvD4U,EAAKE,MAEPtB,GAAIO,UAAY,EAChB+B,EAAOlmB,KAAKoa,eAAe,GAAIhZ,GAAQklB,EAAOC,EAAOvmB,KAAKgZ,OAC1DmN,EAAKnmB,KAAKoa,eAAe,GAAIhZ,GAAQklB,EAAOC,EAAOvmB,KAAKkZ,OACxD0K,EAAIY,YAAcxkB,KAAKuZ,UACvBqK,EAAIa,YACJb,EAAIc,OAAOwB,EAAK/V,EAAG+V,EAAK9V,GACxBwT,EAAIe,OAAOwB,EAAGhW,EAAGgW,EAAG/V,GACpBwT,EAAIlH,SAGJkH,EAAIO,UAAY,EAEhByC,EAAS5mB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK0Y,KAAM1Y,KAAK6Y,KAAM7Y,KAAKgZ,OACpE6N,EAAS7mB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK4Y,KAAM5Y,KAAK6Y,KAAM7Y,KAAKgZ,OACpE4K,EAAIY,YAAcxkB,KAAKuZ,UACvBqK,EAAIa,YACJb,EAAIc,OAAOkC,EAAOzW,EAAGyW,EAAOxW,GAC5BwT,EAAIe,OAAOkC,EAAO1W,EAAG0W,EAAOzW,GAC5BwT,EAAIlH,SAEJkK,EAAS5mB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK0Y,KAAM1Y,KAAK+Y,KAAM/Y,KAAKgZ,OACpE6N,EAAS7mB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK4Y,KAAM5Y,KAAK+Y,KAAM/Y,KAAKgZ,OACpE4K,EAAIY,YAAcxkB,KAAKuZ,UACvBqK,EAAIa,YACJb,EAAIc,OAAOkC,EAAOzW,EAAGyW,EAAOxW,GAC5BwT,EAAIe,OAAOkC,EAAO1W,EAAG0W,EAAOzW,GAC5BwT,EAAIlH,SAGJkH,EAAIO,UAAY,EAEhB+B,EAAOlmB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK0Y,KAAM1Y,KAAK6Y,KAAM7Y,KAAKgZ,OAClEmN,EAAKnmB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK0Y,KAAM1Y,KAAK+Y,KAAM/Y,KAAKgZ,OAChE4K,EAAIY,YAAcxkB,KAAKuZ,UACvBqK,EAAIa,YACJb,EAAIc,OAAOwB,EAAK/V,EAAG+V,EAAK9V,GACxBwT,EAAIe,OAAOwB,EAAGhW,EAAGgW,EAAG/V,GACpBwT,EAAIlH,SAEJwJ,EAAOlmB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK4Y,KAAM5Y,KAAK6Y,KAAM7Y,KAAKgZ,OAClEmN,EAAKnmB,KAAKoa,eAAe,GAAIhZ,GAAQpB,KAAK4Y,KAAM5Y,KAAK+Y,KAAM/Y,KAAKgZ,OAChE4K,EAAIY,YAAcxkB,KAAKuZ,UACvBqK,EAAIa,YACJb,EAAIc,OAAOwB,EAAK/V,EAAG+V,EAAK9V,GACxBwT,EAAIe,OAAOwB,EAAGhW,EAAGgW,EAAG/V,GACpBwT,EAAIlH,QAGJ,IAAIxF,GAASlX,KAAKkX,MACdA,GAAO7R,OAAS,IAClBshB,EAAU,GAAM3mB,KAAK8Z,MAAM1J,EAC3BkW,GAAStmB,KAAK0Y,KAAO1Y,KAAK4Y,MAAQ,EAClC2N,EAAS3hB,KAAKwW,IAAI6L,GAAY,EAAKjnB,KAAK6Y,KAAO8N,EAAS3mB,KAAK+Y,KAAO4N,EACpEN,EAAOrmB,KAAKoa,eAAe,GAAIhZ,GAAQklB,EAAOC,EAAOvmB,KAAKgZ,OACtDpU,KAAKwW,IAAe,EAAX6L,GAAgB,GAC3BrD,EAAIwB,UAAY,SAChBxB,EAAIyB,aAAe,OAEZzgB,KAAKqW,IAAe,EAAXgM,GAAgB,GAChCrD,EAAIwB,UAAY,QAChBxB,EAAIyB,aAAe,WAGnBzB,EAAIwB,UAAY,OAChBxB,EAAIyB,aAAe,UAErBzB,EAAIiB,UAAY7kB,KAAKuZ,UACrBqK,EAAI0B,SAASpO,EAAQmP,EAAKlW,EAAGkW,EAAKjW,GAIpC,IAAI+G,GAASnX,KAAKmX,MACdA,GAAO9R,OAAS,IAClBqhB,EAAU,GAAM1mB,KAAK8Z,MAAM3J,EAC3BmW,EAAS1hB,KAAKqW,IAAIgM,GAAa,EAAKjnB,KAAK0Y,KAAOgO,EAAU1mB,KAAK4Y,KAAO8N,EACtEH,GAASvmB,KAAK6Y,KAAO7Y,KAAK+Y,MAAQ,EAClCsN,EAAOrmB,KAAKoa,eAAe,GAAIhZ,GAAQklB,EAAOC,EAAOvmB,KAAKgZ,OACtDpU,KAAKwW,IAAe,EAAX6L,GAAgB,GAC3BrD,EAAIwB,UAAY,SAChBxB,EAAIyB,aAAe,OAEZzgB,KAAKqW,IAAe,EAAXgM,GAAgB,GAChCrD,EAAIwB,UAAY,QAChBxB,EAAIyB,aAAe,WAGnBzB,EAAIwB,UAAY,OAChBxB,EAAIyB,aAAe,UAErBzB,EAAIiB,UAAY7kB,KAAKuZ,UACrBqK,EAAI0B,SAASnO,EAAQkP,EAAKlW,EAAGkW,EAAKjW,GAIpC,IAAIgH,GAASpX,KAAKoX,MACdA,GAAO/R,OAAS,IAClBohB,EAAS,GACTH,EAAS1hB,KAAKwW,IAAI6L,GAAa,EAAKjnB,KAAK0Y,KAAO1Y,KAAK4Y,KACrD2N,EAAS3hB,KAAKqW,IAAIgM,GAAa,EAAKjnB,KAAK6Y,KAAO7Y,KAAK+Y,KACrDyN,GAASxmB,KAAKgZ,KAAOhZ,KAAKkZ,MAAQ,EAClCmN,EAAOrmB,KAAKoa,eAAe,GAAIhZ,GAAQklB,EAAOC,EAAOC,IACrD5C,EAAIwB,UAAY,QAChBxB,EAAIyB,aAAe,SACnBzB,EAAIiB,UAAY7kB,KAAKuZ,UACrBqK,EAAI0B,SAASlO,EAAQiP,EAAKlW,EAAIsW,EAAQJ,EAAKjW,KAU/CrP,EAAQwQ,UAAUgT,SAAW,SAAS2C,EAAGC,EAAGC,GAC1C,GAAIC,GAAGC,EAAGC,EAAGC,EAAGC,EAAIC,CAMpB,QAJAF,EAAIJ,EAAID,EACRM,EAAK7iB,KAAKC,MAAMqiB,EAAE,IAClBQ,EAAIF,GAAK,EAAI5iB,KAAK+iB,IAAMT,EAAE,GAAM,EAAK,IAE7BO,GACN,IAAK,GAAGJ,EAAIG,EAAGF,EAAII,EAAGH,EAAI,CAAG,MAC7B,KAAK,GAAGF,EAAIK,EAAGJ,EAAIE,EAAGD,EAAI,CAAG,MAC7B,KAAK,GAAGF,EAAI,EAAGC,EAAIE,EAAGD,EAAIG,CAAG,MAC7B,KAAK,GAAGL,EAAI,EAAGC,EAAII,EAAGH,EAAIC,CAAG,MAC7B,KAAK,GAAGH,EAAIK,EAAGJ,EAAI,EAAGC,EAAIC,CAAG,MAC7B,KAAK,GAAGH,EAAIG,EAAGF,EAAI,EAAGC,EAAIG,CAAG,MAE7B,SAASL,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAG7B,MAAO,OAASK,SAAW,IAAFP,GAAS,IAAMO,SAAW,IAAFN,GAAS,IAAMM,SAAW,IAAFL,GAAS,KAQpFxmB,EAAQwQ,UAAU+R,gBAAkB,WAClC,GAEEhT,GAAO4T,EAAO7c,EAAKwgB,EACnB3iB,EACA4iB,EAAgBjD,EAAWL,EAAaL,EACxCvZ,EAAGC,EAAGC,EAAGid,EALP3L,EAASpc,KAAKmc,MAAMC,OACtBwH,EAAMxH,EAAOyH,WAAW,KAO1B,MAAwB3d,SAApBlG,KAAKoY,YAA4BpY,KAAKoY,WAAW/S,QAAU,GAA/D,CAIA,IAAKH,EAAI,EAAGA,EAAIlF,KAAKoY,WAAW/S,OAAQH,IAAK,CAC3C,GAAI+a,GAAQjgB,KAAKua,2BAA2Bva,KAAKoY,WAAWlT,GAAGoL,OAC3D4P,EAASlgB,KAAKwa,4BAA4ByF,EAE9CjgB,MAAKoY,WAAWlT,GAAG+a,MAAQA,EAC3BjgB,KAAKoY,WAAWlT,GAAGgb,OAASA,CAG5B,IAAI8H,GAAchoB,KAAKua,2BAA2Bva,KAAKoY,WAAWlT,GAAGib,OACrEngB,MAAKoY,WAAWlT,GAAG+iB,KAAOjoB,KAAKyX,gBAAkBuQ,EAAY3iB,UAAY2iB,EAAYjO,EAIvF,GAAImO,GAAY,SAAUjjB,EAAGa,GAC3B,MAAOA,GAAEmiB,KAAOhjB,EAAEgjB,KAIpB,IAFAjoB,KAAKoY,WAAW/D,KAAK6T,GAEjBloB,KAAKwQ,QAAUzP,EAAQwW,MAAMgG,SAC/B,IAAKrY,EAAI,EAAGA,EAAIlF,KAAKoY,WAAW/S,OAAQH,IAMtC,GALAoL,EAAQtQ,KAAKoY,WAAWlT,GACxBgf,EAAQlkB,KAAKoY,WAAWlT,GAAGkb,WAC3B/Y,EAAQrH,KAAKoY,WAAWlT,GAAGmb,SAC3BwH,EAAQ7nB,KAAKoY,WAAWlT,GAAGob,WAEbpa,SAAVoK,GAAiCpK,SAAVge,GAA+Bhe,SAARmB,GAA+BnB,SAAV2hB,EAAqB,CAE1F,GAAI7nB,KAAK6X,gBAAkB7X,KAAK4X,WAAY,CAK1C,GAAIuQ,GAAQ/mB,EAAQgnB,SAASP,EAAM5H,MAAO3P,EAAM2P,OAC5CoI,EAAQjnB,EAAQgnB,SAAS/gB,EAAI4Y,MAAOiE,EAAMjE,OAC1CqI,EAAelnB,EAAQmnB,aAAaJ,EAAOE,GAC3CljB,EAAMmjB,EAAajjB,QAGvByiB,GAAkBQ,EAAavO,EAAI,MAGnC+N,IAAiB,CAGfA,IAEFC,GAAQzX,EAAMA,MAAMyJ,EAAImK,EAAM5T,MAAMyJ,EAAI1S,EAAIiJ,MAAMyJ,EAAI8N,EAAMvX,MAAMyJ,GAAK,EACvEnP,EAAoE,KAA/D,GAAKmd,EAAO/nB,KAAKgZ,MAAQhZ,KAAK8Z,MAAMC,EAAK/Z,KAAK+X,eACnDlN,EAAI,EAEA7K,KAAK4X,YACP9M,EAAIlG,KAAKmG,IAAI,EAAKud,EAAanY,EAAIhL,EAAO,EAAG,GAC7C0f,EAAY7kB,KAAKukB,SAAS3Z,EAAGC,EAAGC,GAChC0Z,EAAcK,IAGd/Z,EAAI,EACJ+Z,EAAY7kB,KAAKukB,SAAS3Z,EAAGC,EAAGC,GAChC0Z,EAAcxkB,KAAKuZ,aAIrBsL,EAAY,OACZL,EAAcxkB,KAAKuZ,WAErB4K,EAAY,GAEZP,EAAIO,UAAYA,EAChBP,EAAIiB,UAAYA,EAChBjB,EAAIY,YAAcA,EAClBZ,EAAIa,YACJb,EAAIc,OAAOpU,EAAM4P,OAAO/P,EAAGG,EAAM4P,OAAO9P,GACxCwT,EAAIe,OAAOT,EAAMhE,OAAO/P,EAAG+T,EAAMhE,OAAO9P,GACxCwT,EAAIe,OAAOkD,EAAM3H,OAAO/P,EAAG0X,EAAM3H,OAAO9P,GACxCwT,EAAIe,OAAOtd,EAAI6Y,OAAO/P,EAAG9I,EAAI6Y,OAAO9P,GACpCwT,EAAIkB,YACJlB,EAAInH,OACJmH,EAAIlH,cAKR,KAAKxX,EAAI,EAAGA,EAAIlF,KAAKoY,WAAW/S,OAAQH,IACtCoL,EAAQtQ,KAAKoY,WAAWlT,GACxBgf,EAAQlkB,KAAKoY,WAAWlT,GAAGkb,WAC3B/Y,EAAQrH,KAAKoY,WAAWlT,GAAGmb,SAEbna,SAAVoK,IAEA6T,EADEnkB,KAAKyX,gBACK,GAAKnH,EAAM2P,MAAMlG,EAGjB,IAAM/Z,KAAKmY,IAAI4B,EAAI/Z,KAAKkY,OAAO+D,iBAIjC/V,SAAVoK,GAAiCpK,SAAVge,IAEzB6D,GAAQzX,EAAMA,MAAMyJ,EAAImK,EAAM5T,MAAMyJ,GAAK,EACzCnP,EAAoE,KAA/D,GAAKmd,EAAO/nB,KAAKgZ,MAAQhZ,KAAK8Z,MAAMC,EAAK/Z,KAAK+X,eAEnD6L,EAAIO,UAAYA,EAChBP,EAAIY,YAAcxkB,KAAKukB,SAAS3Z,EAAG,EAAG,GACtCgZ,EAAIa,YACJb,EAAIc,OAAOpU,EAAM4P,OAAO/P,EAAGG,EAAM4P,OAAO9P,GACxCwT,EAAIe,OAAOT,EAAMhE,OAAO/P,EAAG+T,EAAMhE,OAAO9P,GACxCwT,EAAIlH,UAGQxW,SAAVoK,GAA+BpK,SAARmB,IAEzB0gB,GAAQzX,EAAMA,MAAMyJ,EAAI1S,EAAIiJ,MAAMyJ,GAAK,EACvCnP,EAAoE,KAA/D,GAAKmd,EAAO/nB,KAAKgZ,MAAQhZ,KAAK8Z,MAAMC,EAAK/Z,KAAK+X,eAEnD6L,EAAIO,UAAYA,EAChBP,EAAIY,YAAcxkB,KAAKukB,SAAS3Z,EAAG,EAAG,GACtCgZ,EAAIa,YACJb,EAAIc,OAAOpU,EAAM4P,OAAO/P,EAAGG,EAAM4P,OAAO9P,GACxCwT,EAAIe,OAAOtd,EAAI6Y,OAAO/P,EAAG9I,EAAI6Y,OAAO9P,GACpCwT,EAAIlH,YAWZ3b,EAAQwQ,UAAUkS,eAAiB,WACjC,GAEIve,GAFAkX,EAASpc,KAAKmc,MAAMC,OACpBwH,EAAMxH,EAAOyH,WAAW,KAG5B,MAAwB3d,SAApBlG,KAAKoY,YAA4BpY,KAAKoY,WAAW/S,QAAU,GAA/D,CAIA,IAAKH,EAAI,EAAGA,EAAIlF,KAAKoY,WAAW/S,OAAQH,IAAK,CAC3C,GAAI+a,GAAQjgB,KAAKua,2BAA2Bva,KAAKoY,WAAWlT,GAAGoL,OAC3D4P,EAASlgB,KAAKwa,4BAA4ByF,EAC9CjgB,MAAKoY,WAAWlT,GAAG+a,MAAQA,EAC3BjgB,KAAKoY,WAAWlT,GAAGgb,OAASA,CAG5B,IAAI8H,GAAchoB,KAAKua,2BAA2Bva,KAAKoY,WAAWlT,GAAGib,OACrEngB,MAAKoY,WAAWlT,GAAG+iB,KAAOjoB,KAAKyX,gBAAkBuQ,EAAY3iB,UAAY2iB,EAAYjO,EAIvF,GAAImO,GAAY,SAAUjjB,EAAGa,GAC3B,MAAOA,GAAEmiB,KAAOhjB,EAAEgjB,KAEpBjoB,MAAKoY,WAAW/D,KAAK6T,EAGrB,IAAIjE,GAAmC,IAAzBjkB,KAAKmc,MAAME,WACzB,KAAKnX,EAAI,EAAGA,EAAIlF,KAAKoY,WAAW/S,OAAQH,IAAK,CAC3C,GAAIoL,GAAQtQ,KAAKoY,WAAWlT,EAE5B,IAAIlF,KAAKwQ,QAAUzP,EAAQwW,MAAM2F,QAAS,CAGxC,GAAIgJ,GAAOlmB,KAAKoa,eAAe9J,EAAM6P,OACrCyD,GAAIO,UAAY,EAChBP,EAAIY,YAAcxkB,KAAKwZ,UACvBoK,EAAIa,YACJb,EAAIc,OAAOwB,EAAK/V,EAAG+V,EAAK9V,GACxBwT,EAAIe,OAAOrU,EAAM4P,OAAO/P,EAAGG,EAAM4P,OAAO9P,GACxCwT,EAAIlH,SAIN,GAAIhM,EAEFA,GADE1Q,KAAKwQ,QAAUzP,EAAQwW,MAAM6F,QACxB6G,EAAQ,EAAI,EAAEA,GAAW3T,EAAMA,MAAMzJ,MAAQ7G,KAAKmZ,WAAanZ,KAAKoZ,SAAWpZ,KAAKmZ,UAGpF8K,CAGT,IAAIuE,EAEFA,GADExoB,KAAKyX,gBACE/G,GAAQJ,EAAM2P,MAAMlG,EAGpBrJ,IAAS1Q,KAAKmY,IAAI4B,EAAI/Z,KAAKkY,OAAO+D,gBAEhC,EAATuM,IACFA,EAAS,EAGX,IAAI9b,GAAKnC,EAAOqS,CACZ5c,MAAKwQ,QAAUzP,EAAQwW,MAAM4F,UAE/BzQ,EAAqE,KAA9D,GAAK4D,EAAMA,MAAMzJ,MAAQ7G,KAAKmZ,UAAYnZ,KAAK8Z,MAAMjT,OAC5D0D,EAAQvK,KAAKukB,SAAS7X,EAAK,EAAG,GAC9BkQ,EAAc5c,KAAKukB,SAAS7X,EAAK,EAAG,KAE7B1M,KAAKwQ,QAAUzP,EAAQwW,MAAM6F,SACpC7S,EAAQvK,KAAKyZ,SACbmD,EAAc5c,KAAK0Z,iBAInBhN,EAA+E,KAAxE,GAAK4D,EAAMA,MAAMyJ,EAAI/Z,KAAKgZ,MAAQhZ,KAAK8Z,MAAMC,EAAK/Z,KAAK+X,eAC9DxN,EAAQvK,KAAKukB,SAAS7X,EAAK,EAAG,GAC9BkQ,EAAc5c,KAAKukB,SAAS7X,EAAK,EAAG,KAItCkX,EAAIO,UAAY,EAChBP,EAAIY,YAAc5H,EAClBgH,EAAIiB,UAAYta,EAChBqZ,EAAIa,YACJb,EAAI6E,IAAInY,EAAM4P,OAAO/P,EAAGG,EAAM4P,OAAO9P,EAAGoY,EAAQ,EAAW,EAAR5jB,KAAK8jB,IAAM,GAC9D9E,EAAInH,OACJmH,EAAIlH,YAQR3b,EAAQwQ,UAAUiS,eAAiB,WACjC,GAEIte,GAAGyjB,EAAGC,EAASC,EAFfzM,EAASpc,KAAKmc,MAAMC,OACpBwH,EAAMxH,EAAOyH,WAAW,KAG5B,MAAwB3d,SAApBlG,KAAKoY,YAA4BpY,KAAKoY,WAAW/S,QAAU,GAA/D,CAIA,IAAKH,EAAI,EAAGA,EAAIlF,KAAKoY,WAAW/S,OAAQH,IAAK,CAC3C,GAAI+a,GAAQjgB,KAAKua,2BAA2Bva,KAAKoY,WAAWlT,GAAGoL,OAC3D4P,EAASlgB,KAAKwa,4BAA4ByF,EAC9CjgB,MAAKoY,WAAWlT,GAAG+a,MAAQA,EAC3BjgB,KAAKoY,WAAWlT,GAAGgb,OAASA,CAG5B,IAAI8H,GAAchoB,KAAKua,2BAA2Bva,KAAKoY,WAAWlT,GAAGib,OACrEngB,MAAKoY,WAAWlT,GAAG+iB,KAAOjoB,KAAKyX,gBAAkBuQ,EAAY3iB,UAAY2iB,EAAYjO,EAIvF,GAAImO,GAAY,SAAUjjB,EAAGa,GAC3B,MAAOA,GAAEmiB,KAAOhjB,EAAEgjB,KAEpBjoB,MAAKoY,WAAW/D,KAAK6T,EAGrB,IAAIY,GAAS9oB,KAAKqZ,UAAY,EAC1B0P,EAAS/oB,KAAKsZ,UAAY,CAC9B,KAAKpU,EAAI,EAAGA,EAAIlF,KAAKoY,WAAW/S,OAAQH,IAAK,CAC3C,GAGIwH,GAAKnC,EAAOqS,EAHZtM,EAAQtQ,KAAKoY,WAAWlT,EAIxBlF,MAAKwQ,QAAUzP,EAAQwW,MAAMyF,UAE/BtQ,EAAqE,KAA9D,GAAK4D,EAAMA,MAAMzJ,MAAQ7G,KAAKmZ,UAAYnZ,KAAK8Z,MAAMjT,OAC5D0D,EAAQvK,KAAKukB,SAAS7X,EAAK,EAAG,GAC9BkQ,EAAc5c,KAAKukB,SAAS7X,EAAK,EAAG,KAE7B1M,KAAKwQ,QAAUzP,EAAQwW,MAAM0F,SACpC1S,EAAQvK,KAAKyZ,SACbmD,EAAc5c,KAAK0Z,iBAInBhN,EAA+E,KAAxE,GAAK4D,EAAMA,MAAMyJ,EAAI/Z,KAAKgZ,MAAQhZ,KAAK8Z,MAAMC,EAAK/Z,KAAK+X,eAC9DxN,EAAQvK,KAAKukB,SAAS7X,EAAK,EAAG,GAC9BkQ,EAAc5c,KAAKukB,SAAS7X,EAAK,EAAG,KAIlC1M,KAAKwQ,QAAUzP,EAAQwW,MAAM0F,UAC/B6L,EAAU9oB,KAAKqZ,UAAY,IAAO/I,EAAMA,MAAMzJ,MAAQ7G,KAAKmZ,WAAanZ,KAAKoZ,SAAWpZ,KAAKmZ,UAAY,GAAM,IAC/G4P,EAAU/oB,KAAKsZ,UAAY,IAAOhJ,EAAMA,MAAMzJ,MAAQ7G,KAAKmZ,WAAanZ,KAAKoZ,SAAWpZ,KAAKmZ,UAAY,GAAM,IAIjH,IAAI/G,GAAKpS,KACLqa,EAAU/J,EAAMA,MAChBjJ,IACDiJ,MAAO,GAAIlP,GAAQiZ,EAAQlK,EAAI2Y,EAAQzO,EAAQjK,EAAI2Y,EAAQ1O,EAAQN,KACnEzJ,MAAO,GAAIlP,GAAQiZ,EAAQlK,EAAI2Y,EAAQzO,EAAQjK,EAAI2Y,EAAQ1O,EAAQN,KACnEzJ,MAAO,GAAIlP,GAAQiZ,EAAQlK,EAAI2Y,EAAQzO,EAAQjK,EAAI2Y,EAAQ1O,EAAQN,KACnEzJ,MAAO,GAAIlP,GAAQiZ,EAAQlK,EAAI2Y,EAAQzO,EAAQjK,EAAI2Y,EAAQ1O,EAAQN,KAElEoG,IACD7P,MAAO,GAAIlP,GAAQiZ,EAAQlK,EAAI2Y,EAAQzO,EAAQjK,EAAI2Y,EAAQ/oB,KAAKgZ,QAChE1I,MAAO,GAAIlP,GAAQiZ,EAAQlK,EAAI2Y,EAAQzO,EAAQjK,EAAI2Y,EAAQ/oB,KAAKgZ,QAChE1I,MAAO,GAAIlP,GAAQiZ,EAAQlK,EAAI2Y,EAAQzO,EAAQjK,EAAI2Y,EAAQ/oB,KAAKgZ,QAChE1I,MAAO,GAAIlP,GAAQiZ,EAAQlK,EAAI2Y,EAAQzO,EAAQjK,EAAI2Y,EAAQ/oB,KAAKgZ,OAInE3R,GAAIY,QAAQ,SAAU4X,GACpBA,EAAIK,OAAS9N,EAAGgI,eAAeyF,EAAIvP,SAErC6P,EAAOlY,QAAQ,SAAU4X,GACvBA,EAAIK,OAAS9N,EAAGgI,eAAeyF,EAAIvP,QAIrC,IAAI0Y,KACDH,QAASxhB,EAAK4hB,OAAQ7nB,EAAQ8nB,IAAI/I,EAAO,GAAG7P,MAAO6P,EAAO,GAAG7P,SAC7DuY,SAAUxhB,EAAI,GAAIA,EAAI,GAAI8Y,EAAO,GAAIA,EAAO,IAAK8I,OAAQ7nB,EAAQ8nB,IAAI/I,EAAO,GAAG7P,MAAO6P,EAAO,GAAG7P,SAChGuY,SAAUxhB,EAAI,GAAIA,EAAI,GAAI8Y,EAAO,GAAIA,EAAO,IAAK8I,OAAQ7nB,EAAQ8nB,IAAI/I,EAAO,GAAG7P,MAAO6P,EAAO,GAAG7P,SAChGuY,SAAUxhB,EAAI,GAAIA,EAAI,GAAI8Y,EAAO,GAAIA,EAAO,IAAK8I,OAAQ7nB,EAAQ8nB,IAAI/I,EAAO,GAAG7P,MAAO6P,EAAO,GAAG7P,SAChGuY,SAAUxhB,EAAI,GAAIA,EAAI,GAAI8Y,EAAO,GAAIA,EAAO,IAAK8I,OAAQ7nB,EAAQ8nB,IAAI/I,EAAO,GAAG7P,MAAO6P,EAAO,GAAG7P,QAKnG,KAHAA,EAAM0Y,SAAWA,EAGZL,EAAI,EAAGA,EAAIK,EAAS3jB,OAAQsjB,IAAK,CACpCC,EAAUI,EAASL,EACnB,IAAIQ,GAAcnpB,KAAKua,2BAA2BqO,EAAQK,OAC1DL,GAAQX,KAAOjoB,KAAKyX,gBAAkB0R,EAAY9jB,UAAY8jB,EAAYpP,EAwB5E,IAjBAiP,EAAS3U,KAAK,SAAUpP,EAAGa,GACzB,GAAIsjB,GAAOtjB,EAAEmiB,KAAOhjB,EAAEgjB,IACtB,OAAImB,GAAaA,EAGbnkB,EAAE4jB,UAAYxhB,EAAY,EAC1BvB,EAAE+iB,UAAYxhB,EAAY,GAGvB,IAITuc,EAAIO,UAAY,EAChBP,EAAIY,YAAc5H,EAClBgH,EAAIiB,UAAYta,EAEXoe,EAAI,EAAGA,EAAIK,EAAS3jB,OAAQsjB,IAC/BC,EAAUI,EAASL,GACnBE,EAAUD,EAAQC,QAClBjF,EAAIa,YACJb,EAAIc,OAAOmE,EAAQ,GAAG3I,OAAO/P,EAAG0Y,EAAQ,GAAG3I,OAAO9P,GAClDwT,EAAIe,OAAOkE,EAAQ,GAAG3I,OAAO/P,EAAG0Y,EAAQ,GAAG3I,OAAO9P,GAClDwT,EAAIe,OAAOkE,EAAQ,GAAG3I,OAAO/P,EAAG0Y,EAAQ,GAAG3I,OAAO9P,GAClDwT,EAAIe,OAAOkE,EAAQ,GAAG3I,OAAO/P,EAAG0Y,EAAQ,GAAG3I,OAAO9P,GAClDwT,EAAIe,OAAOkE,EAAQ,GAAG3I,OAAO/P,EAAG0Y,EAAQ,GAAG3I,OAAO9P,GAClDwT,EAAInH,OACJmH,EAAIlH,YAUV3b,EAAQwQ,UAAUgS,gBAAkB,WAClC,GAEEjT,GAAOpL,EAFLkX,EAASpc,KAAKmc,MAAMC,OACtBwH,EAAMxH,EAAOyH,WAAW,KAG1B,MAAwB3d,SAApBlG,KAAKoY,YAA4BpY,KAAKoY,WAAW/S,QAAU,GAA/D,CAIA,IAAKH,EAAI,EAAGA,EAAIlF,KAAKoY,WAAW/S,OAAQH,IAAK,CAC3C,GAAI+a,GAAQjgB,KAAKua,2BAA2Bva,KAAKoY,WAAWlT,GAAGoL,OAC3D4P,EAASlgB,KAAKwa,4BAA4ByF,EAE9CjgB,MAAKoY,WAAWlT,GAAG+a,MAAQA,EAC3BjgB,KAAKoY,WAAWlT,GAAGgb,OAASA,EAc9B,IAVIlgB,KAAKoY,WAAW/S,OAAS,IAC3BiL,EAAQtQ,KAAKoY,WAAW,GAExBwL,EAAIO,UAAY,EAChBP,EAAIY,YAAc,OAClBZ,EAAIa,YACJb,EAAIc,OAAOpU,EAAM4P,OAAO/P,EAAGG,EAAM4P,OAAO9P,IAIrClL,EAAI,EAAGA,EAAIlF,KAAKoY,WAAW/S,OAAQH,IACtCoL,EAAQtQ,KAAKoY,WAAWlT,GACxB0e,EAAIe,OAAOrU,EAAM4P,OAAO/P,EAAGG,EAAM4P,OAAO9P,EAItCpQ,MAAKoY,WAAW/S,OAAS,GAC3Bue,EAAIlH,WASR3b,EAAQwQ,UAAUyP,aAAe,SAAS9X,GAWxC,GAVAA,EAAQA,GAAShC,OAAOgC,MAIpBlJ,KAAKqpB,gBACPrpB,KAAKspB,WAAWpgB,GAIlBlJ,KAAKqpB,eAAiBngB,EAAMqgB,MAAyB,IAAhBrgB,EAAMqgB,MAAiC,IAAjBrgB,EAAMsgB,OAC5DxpB,KAAKqpB,gBAAmBrpB,KAAKypB,UAAlC,CAGAzpB,KAAK0pB,YAAcC,UAAUzgB,GAC7BlJ,KAAK4pB,YAAcC,UAAU3gB,GAE7BlJ,KAAK8pB,WAAa,GAAI9lB,MAAKhE,KAAK0O,OAChC1O,KAAK+pB,SAAW,GAAI/lB,MAAKhE,KAAKmlB,KAC9BnlB,KAAKgqB,iBAAmBhqB,KAAKkY,OAAOyK,iBAEpC3iB,KAAKmc,MAAM3L,MAAMyZ,OAAS,MAK1B,IAAI7X,GAAKpS,IACTA,MAAKkqB,YAAc,SAAUhhB,GAAQkJ,EAAG+X,aAAajhB,IACrDlJ,KAAKoqB,UAAc,SAAUlhB,GAAQkJ,EAAGkX,WAAWpgB,IACnDvI,EAAK4H,iBAAiBqH,SAAU,YAAawC,EAAG8X,aAChDvpB,EAAK4H,iBAAiBqH,SAAU,UAAWwC,EAAGgY,WAC9CzpB,EAAKsI,eAAeC,KAStBnI,EAAQwQ,UAAU4Y,aAAe,SAAUjhB,GACzCA,EAAQA,GAAShC,OAAOgC,KAGxB,IAAImhB,GAAQnI,WAAWyH,UAAUzgB,IAAUlJ,KAAK0pB,YAC5CY,EAAQpI,WAAW2H,UAAU3gB,IAAUlJ,KAAK4pB,YAE5CW,EAAgBvqB,KAAKgqB,iBAAiB3H,WAAagI,EAAQ,IAC3DG,EAAcxqB,KAAKgqB,iBAAiB1H,SAAWgI,EAAQ,IAEvDG,EAAY,EACZC,EAAY9lB,KAAKqW,IAAIwP,EAAY,IAAM,EAAI7lB,KAAK8jB,GAIhD9jB,MAAK+iB,IAAI/iB,KAAKqW,IAAIsP,IAAkBG,IACtCH,EAAgB3lB,KAAK+lB,MAAOJ,EAAgB3lB,KAAK8jB,IAAO9jB,KAAK8jB,GAAK,MAEhE9jB,KAAK+iB,IAAI/iB,KAAKwW,IAAImP,IAAkBG,IACtCH,GAAiB3lB,KAAK+lB,MAAOJ,EAAe3lB,KAAK8jB,GAAK,IAAQ,IAAO9jB,KAAK8jB,GAAK,MAI7E9jB,KAAK+iB,IAAI/iB,KAAKqW,IAAIuP,IAAgBE,IACpCF,EAAc5lB,KAAK+lB,MAAOH,EAAc5lB,KAAK8jB,IAAO9jB,KAAK8jB,IAEvD9jB,KAAK+iB,IAAI/iB,KAAKwW,IAAIoP,IAAgBE,IACpCF,GAAe5lB,KAAK+lB,MAAOH,EAAa5lB,KAAK8jB,GAAK,IAAQ,IAAO9jB,KAAK8jB,IAGxE1oB,KAAKkY,OAAOqK,eAAegI,EAAeC,GAC1CxqB,KAAKse,QAGL,IAAIsM,GAAa5qB,KAAK0iB,mBACtB1iB,MAAK6qB,KAAK,uBAAwBD,GAElCjqB,EAAKsI,eAAeC,IAStBnI,EAAQwQ,UAAU+X,WAAa,SAAUpgB,GACvClJ,KAAKmc,MAAM3L,MAAMyZ,OAAS,OAC1BjqB,KAAKqpB,gBAAiB,EAGtB1oB,EAAKoI,oBAAoB6G,SAAU,YAAa5P,KAAKkqB,aACrDvpB,EAAKoI,oBAAoB6G,SAAU,UAAa5P,KAAKoqB,WACrDzpB,EAAKsI,eAAeC,IAOtBnI,EAAQwQ,UAAU+P,WAAa,SAAUpY,GACvC,GAAI4hB,GAAQ,IACRC,EAASpB,UAAUzgB,GAASvI,EAAKmG,gBAAgB9G,KAAKmc,OACtD6O,EAASnB,UAAU3gB,GAASvI,EAAKyG,eAAepH,KAAKmc,MAEzD,IAAKnc,KAAK8X,YAAV,CASA,GALI9X,KAAKirB,gBACPC,aAAalrB,KAAKirB,gBAIhBjrB,KAAKqpB,eAEP,WADArpB,MAAKmrB,cAIP,IAAInrB,KAAKijB,SAAWjjB,KAAKijB,QAAQmI,UAAW,CAE1C,GAAIA,GAAYprB,KAAKqrB,iBAAiBN,EAAQC,EAC1CI,KAAcprB,KAAKijB,QAAQmI,YAEzBA,EACFprB,KAAKsrB,aAAaF,GAGlBprB,KAAKmrB,oBAIN,CAEH,GAAI/Y,GAAKpS,IACTA,MAAKirB,eAAiBM,WAAW,WAC/BnZ,EAAG6Y,eAAiB,IAGpB,IAAIG,GAAYhZ,EAAGiZ,iBAAiBN,EAAQC,EACxCI,IACFhZ,EAAGkZ,aAAaF,IAEjBN,MAOP/pB,EAAQwQ,UAAU2P,cAAgB,SAAShY,GACzClJ,KAAKypB,WAAY,CAEjB,IAAIrX,GAAKpS,IACTA,MAAKwrB,YAAc,SAAUtiB,GAAQkJ,EAAGqZ,aAAaviB,IACrDlJ,KAAK0rB,WAAc,SAAUxiB,GAAQkJ,EAAGuZ,YAAYziB,IACpDvI,EAAK4H,iBAAiBqH,SAAU,YAAawC,EAAGoZ,aAChD7qB,EAAK4H,iBAAiBqH,SAAU,WAAYwC,EAAGsZ,YAE/C1rB,KAAKghB,aAAa9X,IAMpBnI,EAAQwQ,UAAUka,aAAe,SAASviB,GACxClJ,KAAKmqB,aAAajhB,IAMpBnI,EAAQwQ,UAAUoa,YAAc,SAASziB,GACvClJ,KAAKypB,WAAY,EAEjB9oB,EAAKoI,oBAAoB6G,SAAU,YAAa5P,KAAKwrB,aACrD7qB,EAAKoI,oBAAoB6G,SAAU,WAAc5P,KAAK0rB,YAEtD1rB,KAAKspB,WAAWpgB,IASlBnI,EAAQwQ,UAAU6P,SAAW,SAASlY,GAC/BA,IACHA,EAAQhC,OAAOgC,MAGjB,IAAI0iB,GAAQ,CAYZ,IAXI1iB,EAAM2iB,WACRD,EAAQ1iB,EAAM2iB,WAAW,IAChB3iB,EAAM4iB,SAGfF,GAAS1iB,EAAM4iB,OAAO,GAMpBF,EAAO,CACT,GAAIG,GAAY/rB,KAAKkY,OAAO+D,eACxB+P,EAAYD,GAAa,EAAIH,EAAQ,GAEzC5rB,MAAKkY,OAAOuK,aAAauJ,GACzBhsB,KAAKse,SAELte,KAAKmrB,eAIP,GAAIP,GAAa5qB,KAAK0iB,mBACtB1iB,MAAK6qB,KAAK,uBAAwBD,GAKlCjqB,EAAKsI,eAAeC,IAUtBnI,EAAQwQ,UAAU0a,gBAAkB,SAAU3b,EAAO4b,GAKnD,QAASC,GAAMhc,GACb,MAAOA,GAAI,EAAI,EAAQ,EAAJA,EAAQ,GAAK,EALlC,GAAIlL,GAAIinB,EAAS,GACfpmB,EAAIomB,EAAS,GACbzrB,EAAIyrB,EAAS,GAMXE,EAAKD,GAAMrmB,EAAEqK,EAAIlL,EAAEkL,IAAMG,EAAMF,EAAInL,EAAEmL,IAAMtK,EAAEsK,EAAInL,EAAEmL,IAAME,EAAMH,EAAIlL,EAAEkL,IACrEkc,EAAKF,GAAM1rB,EAAE0P,EAAIrK,EAAEqK,IAAMG,EAAMF,EAAItK,EAAEsK,IAAM3P,EAAE2P,EAAItK,EAAEsK,IAAME,EAAMH,EAAIrK,EAAEqK,IACrEmc,EAAKH,GAAMlnB,EAAEkL,EAAI1P,EAAE0P,IAAMG,EAAMF,EAAI3P,EAAE2P,IAAMnL,EAAEmL,EAAI3P,EAAE2P,IAAME,EAAMH,EAAI1P,EAAE0P,GAGzE,SAAc,GAANic,GAAiB,GAANC,GAAWD,GAAMC,GAC3B,GAANA,GAAiB,GAANC,GAAWD,GAAMC,GACtB,GAANF,GAAiB,GAANE,GAAWF,GAAME,IAUjCvrB,EAAQwQ,UAAU8Z,iBAAmB,SAAUlb,EAAGC,GAChD,GAAIlL,GACFqnB,EAAU,IACVnB,EAAY,KACZoB,EAAmB,KACnBC,EAAc,KACdxD,EAAS,GAAI9nB,GAAQgP,EAAGC,EAE1B,IAAIpQ,KAAKwQ,QAAUzP,EAAQwW,MAAMwF,KAC/B/c,KAAKwQ,QAAUzP,EAAQwW,MAAMyF,UAC7Bhd,KAAKwQ,QAAUzP,EAAQwW,MAAM0F,QAE7B,IAAK/X,EAAIlF,KAAKoY,WAAW/S,OAAS,EAAGH,GAAK,EAAGA,IAAK,CAChDkmB,EAAYprB,KAAKoY,WAAWlT,EAC5B,IAAI8jB,GAAYoC,EAAUpC,QAC1B,IAAIA,EACF,IAAK,GAAIne,GAAIme,EAAS3jB,OAAS,EAAGwF,GAAK,EAAGA,IAAK,CAE7C,GAAI+d,GAAUI,EAASne,GACnBge,EAAUD,EAAQC,QAClB6D,GAAa7D,EAAQ,GAAG3I,OAAQ2I,EAAQ,GAAG3I,OAAQ2I,EAAQ,GAAG3I,QAC9DyM,GAAa9D,EAAQ,GAAG3I,OAAQ2I,EAAQ,GAAG3I,OAAQ2I,EAAQ,GAAG3I,OAClE,IAAIlgB,KAAKisB,gBAAgBhD,EAAQyD,IAC/B1sB,KAAKisB,gBAAgBhD,EAAQ0D,GAE7B,MAAOvB,QAQf,KAAKlmB,EAAI,EAAGA,EAAIlF,KAAKoY,WAAW/S,OAAQH,IAAK,CAC3CkmB,EAAYprB,KAAKoY,WAAWlT,EAC5B,IAAIoL,GAAQ8a,EAAUlL,MACtB,IAAI5P,EAAO,CACT,GAAIsc,GAAQhoB,KAAK+iB,IAAIxX,EAAIG,EAAMH,GAC3B0c,EAAQjoB,KAAK+iB,IAAIvX,EAAIE,EAAMF,GAC3B6X,EAAQrjB,KAAKkoB,KAAKF,EAAQA,EAAQC,EAAQA,IAEzB,OAAhBJ,GAA+BA,EAAPxE,IAA8BsE,EAAPtE,IAClDwE,EAAcxE,EACduE,EAAmBpB,IAO3B,MAAOoB,IAQTzrB,EAAQwQ,UAAU+Z,aAAe,SAAUF,GACzC,GAAI2B,GAASC,EAAMC,CAEdjtB,MAAKijB,SAiCR8J,EAAU/sB,KAAKijB,QAAQiK,IAAIH,QAC3BC,EAAQhtB,KAAKijB,QAAQiK,IAAIF,KACzBC,EAAQjtB,KAAKijB,QAAQiK,IAAID,MAlCzBF,EAAUnd,SAASK,cAAc,OACjC8c,EAAQvc,MAAMiQ,SAAW,WACzBsM,EAAQvc,MAAMqQ,QAAU,OACxBkM,EAAQvc,MAAMnF,OAAS,oBACvB0hB,EAAQvc,MAAMjG,MAAQ,UACtBwiB,EAAQvc,MAAMpF,WAAa,wBAC3B2hB,EAAQvc,MAAM2c,aAAe,MAC7BJ,EAAQvc,MAAM4c,UAAY,qCAE1BJ,EAAOpd,SAASK,cAAc,OAC9B+c,EAAKxc,MAAMiQ,SAAW,WACtBuM,EAAKxc,MAAMK,OAAS,OACpBmc,EAAKxc,MAAMI,MAAQ,IACnBoc,EAAKxc,MAAM6c,WAAa,oBAExBJ,EAAMrd,SAASK,cAAc,OAC7Bgd,EAAIzc,MAAMiQ,SAAW,WACrBwM,EAAIzc,MAAMK,OAAS,IACnBoc,EAAIzc,MAAMI,MAAQ,IAClBqc,EAAIzc,MAAMnF,OAAS,oBACnB4hB,EAAIzc,MAAM2c,aAAe,MAEzBntB,KAAKijB,SACHmI,UAAW,KACX8B,KACEH,QAASA,EACTC,KAAMA,EACNC,IAAKA,KAUXjtB,KAAKmrB,eAELnrB,KAAKijB,QAAQmI,UAAYA,EAEvB2B,EAAQjM,UADsB,kBAArB9gB,MAAK8X,YACM9X,KAAK8X,YAAYsT,EAAU9a,OAG3B,6BACM8a,EAAU9a,MAAMH,EAAI,gCACpBib,EAAU9a,MAAMF,EAAI,gCACpBgb,EAAU9a,MAAMyJ,EAAI,qBAIhDgT,EAAQvc,MAAMvJ,KAAQ,IACtB8lB,EAAQvc,MAAMnJ,IAAQ,IACtBrH,KAAKmc,MAAMrM,YAAYid,GACvB/sB,KAAKmc,MAAMrM,YAAYkd,GACvBhtB,KAAKmc,MAAMrM,YAAYmd,EAGvB,IAAIK,GAAgBP,EAAQQ,YACxBC,EAAkBT,EAAQU,aAC1BC,EAAgBV,EAAKS,aACrBE,EAAcV,EAAIM,YAClBK,EAAgBX,EAAIQ,aAEpBxmB,EAAOmkB,EAAUlL,OAAO/P,EAAImd,EAAe,CAC/CrmB,GAAOrC,KAAKmG,IAAInG,KAAK6H,IAAIxF,EAAM,IAAKjH,KAAKmc,MAAME,YAAc,GAAKiR,GAElEN,EAAKxc,MAAMvJ,KAASmkB,EAAUlL,OAAO/P,EAAI,KACzC6c,EAAKxc,MAAMnJ,IAAU+jB,EAAUlL,OAAO9P,EAAIsd,EAAc,KACxDX,EAAQvc,MAAMvJ,KAAQA,EAAO,KAC7B8lB,EAAQvc,MAAMnJ,IAAS+jB,EAAUlL,OAAO9P,EAAIsd,EAAaF,EAAiB,KAC1EP,EAAIzc,MAAMvJ,KAAWmkB,EAAUlL,OAAO/P,EAAIwd,EAAW,EAAK,KAC1DV,EAAIzc,MAAMnJ,IAAW+jB,EAAUlL,OAAO9P,EAAIwd,EAAY,EAAK,MAO7D7sB,EAAQwQ,UAAU4Z,aAAe,WAC/B,GAAInrB,KAAKijB,QAAS,CAChBjjB,KAAKijB,QAAQmI,UAAY,IAEzB,KAAK,GAAI7lB,KAAQvF,MAAKijB,QAAQiK,IAC5B,GAAIltB,KAAKijB,QAAQiK,IAAI1nB,eAAeD,GAAO,CACzC,GAAIwB,GAAO/G,KAAKijB,QAAQiK,IAAI3nB,EACxBwB,IAAQA,EAAKyC,YACfzC,EAAKyC,WAAWgG,YAAYzI,MAetC4iB,UAAY,SAASzgB,GACnB,MAAI,WAAaA,GAAcA,EAAM2kB,QAC9B3kB,EAAM4kB,cAAc,IAAM5kB,EAAM4kB,cAAc,GAAGD,SAAW,GAQrEhE,UAAY,SAAS3gB,GACnB,MAAI,WAAaA,GAAcA,EAAM6kB,QAC9B7kB,EAAM4kB,cAAc,IAAM5kB,EAAM4kB,cAAc,GAAGC,SAAW,GAGrEluB,EAAOD,QAAUmB,GAKb,SAASlB,EAAQD,EAASM,GAE9B,GAAIkB,GAAUlB,EAAoB,EAYlCe,QAAS,WACPjB,KAAKguB,YAAc,GAAI5sB,GACvBpB,KAAKiuB,eACLjuB,KAAKiuB,YAAY5L,WAAa,EAC9BriB,KAAKiuB,YAAY3L,SAAW,EAC5BtiB,KAAKkuB,UAAY,IAEjBluB,KAAKmuB,eAAiB,GAAI/sB,GAC1BpB,KAAKouB,eAAkB,GAAIhtB,GAAQ,GAAIwD,KAAK8jB,GAAI,EAAG,GAEnD1oB,KAAKquB,8BASPptB,OAAOsQ,UAAU4I,eAAiB,SAAShK,EAAGC,EAAG2J,GAC/C/Z,KAAKguB,YAAY7d,EAAIA,EACrBnQ,KAAKguB,YAAY5d,EAAIA,EACrBpQ,KAAKguB,YAAYjU,EAAIA,EAErB/Z,KAAKquB,8BAWPptB,OAAOsQ,UAAUgR,eAAiB,SAASF,EAAYC,GAClCpc,SAAfmc,IACFriB,KAAKiuB,YAAY5L,WAAaA,GAGfnc,SAAboc,IACFtiB,KAAKiuB,YAAY3L,SAAWA,EACxBtiB,KAAKiuB,YAAY3L,SAAW,IAAGtiB,KAAKiuB,YAAY3L,SAAW,GAC3DtiB,KAAKiuB,YAAY3L,SAAW,GAAI1d,KAAK8jB,KAAI1oB,KAAKiuB,YAAY3L,SAAW,GAAI1d,KAAK8jB,MAGjExiB,SAAfmc,GAAyCnc,SAAboc,IAC9BtiB,KAAKquB,8BAQTptB,OAAOsQ,UAAUoR,eAAiB,WAChC,GAAI2L,KAIJ,OAHAA,GAAIjM,WAAariB,KAAKiuB,YAAY5L,WAClCiM,EAAIhM,SAAWtiB,KAAKiuB,YAAY3L,SAEzBgM,GAOTrtB,OAAOsQ,UAAUkR,aAAe,SAASpd,GACxBa,SAAXb,IAGJrF,KAAKkuB,UAAY7oB,EAKbrF,KAAKkuB,UAAY,MAAMluB,KAAKkuB,UAAY,KACxCluB,KAAKkuB,UAAY,IAAKluB,KAAKkuB,UAAY,GAE3CluB,KAAKquB,+BAOPptB,OAAOsQ,UAAU0K,aAAe,WAC9B,MAAOjc,MAAKkuB,WAOdjtB,OAAOsQ,UAAUsJ,kBAAoB,WACnC,MAAO7a,MAAKmuB,gBAOdltB,OAAOsQ,UAAU2J,kBAAoB,WACnC,MAAOlb,MAAKouB,gBAOdntB,OAAOsQ,UAAU8c,2BAA6B,WAE5CruB,KAAKmuB,eAAehe,EAAInQ,KAAKguB,YAAY7d,EAAInQ,KAAKkuB,UAAYtpB,KAAKqW,IAAIjb,KAAKiuB,YAAY5L,YAAczd,KAAKwW,IAAIpb,KAAKiuB,YAAY3L,UAChItiB,KAAKmuB,eAAe/d,EAAIpQ,KAAKguB,YAAY5d,EAAIpQ,KAAKkuB,UAAYtpB,KAAKwW,IAAIpb,KAAKiuB,YAAY5L,YAAczd,KAAKwW,IAAIpb,KAAKiuB,YAAY3L,UAChItiB,KAAKmuB,eAAepU,EAAI/Z,KAAKguB,YAAYjU,EAAI/Z,KAAKkuB,UAAYtpB,KAAKqW,IAAIjb,KAAKiuB,YAAY3L,UAGxFtiB,KAAKouB,eAAeje,EAAIvL,KAAK8jB,GAAG,EAAI1oB,KAAKiuB,YAAY3L,SACrDtiB,KAAKouB,eAAehe,EAAI,EACxBpQ,KAAKouB,eAAerU,GAAK/Z,KAAKiuB,YAAY5L,YAG5CxiB,EAAOD,QAAUqB,QAIb,SAASpB,EAAQD,EAASM,GAW9B,QAASgB,GAAQ6P,EAAM6M,EAAQ2Q,GAC7BvuB,KAAK+Q,KAAOA,EACZ/Q,KAAK4d,OAASA,EACd5d,KAAKuuB,MAAQA,EAEbvuB,KAAK+H,MAAQ7B,OACblG,KAAK6G,MAAQX,OAGblG,KAAKkV,OAASqZ,EAAM1Q,kBAAkB9M,EAAKoC,MAAOnT,KAAK4d,QAGvD5d,KAAKkV,OAAOb,KAAK,SAAUpP,EAAGa,GAC5B,MAAOb,GAAIa,EAAI,EAAQA,EAAJb,EAAQ,GAAK,IAG9BjF,KAAKkV,OAAO7P,OAAS,GACvBrF,KAAK6lB,YAAY,GAInB7lB,KAAKoY,cAELpY,KAAKM,QAAS,EACdN,KAAKwuB,eAAiBtoB,OAElBqoB,EAAMtW,kBACRjY,KAAKM,QAAS,EACdN,KAAKyuB,oBAGLzuB,KAAKM,QAAS,EAxClB,GAAIQ,GAAWZ,EAAoB,EAiDnCgB,GAAOqQ,UAAUmd,SAAW,WAC1B,MAAO1uB,MAAKM,QAQdY,EAAOqQ,UAAUod,kBAAoB,WAInC,IAHA,GAAIxpB,GAAMnF,KAAKkV,OAAO7P,OAElBH,EAAI,EACDlF,KAAKoY,WAAWlT,IACrBA,GAGF,OAAON,MAAK+lB,MAAMzlB,EAAIC,EAAM,MAQ9BjE,EAAOqQ,UAAUyU,SAAW,WAC1B,MAAOhmB,MAAKuuB,MAAMlX,aAQpBnW,EAAOqQ,UAAUqd,UAAY,WAC3B,MAAO5uB,MAAK4d,QAOd1c,EAAOqQ,UAAU0U,iBAAmB,WAClC,MAAmB/f,UAAflG,KAAK+H,MACA7B,OAEFlG,KAAKkV,OAAOlV,KAAK+H,QAO1B7G,EAAOqQ,UAAUsd,UAAY,WAC3B,MAAO7uB,MAAKkV,QAQdhU,EAAOqQ,UAAUuB,SAAW,SAAS/K,GACnC,GAAIA,GAAS/H,KAAKkV,OAAO7P,OACvB,KAAM,2BAER,OAAOrF,MAAKkV,OAAOnN,IASrB7G,EAAOqQ,UAAUoO,eAAiB,SAAS5X,GAIzC,GAHc7B,SAAV6B,IACFA,EAAQ/H,KAAK+H,OAED7B,SAAV6B,EACF,QAEF,IAAIqQ,EACJ,IAAIpY,KAAKoY,WAAWrQ,GAClBqQ,EAAapY,KAAKoY,WAAWrQ,OAE1B,CACH,GAAIgE,KACJA,GAAE6R,OAAS5d,KAAK4d,OAChB7R,EAAElF,MAAQ7G,KAAKkV,OAAOnN,EAEtB,IAAI+mB,GAAW,GAAIhuB,GAASd,KAAK+Q,MAAMa,OAAQ,SAAUe,GAAO,MAAQA,GAAK5G,EAAE6R,SAAW7R,EAAElF,SAAWsM,KACvGiF,GAAapY,KAAKuuB,MAAM5O,eAAemP,GAEvC9uB,KAAKoY,WAAWrQ,GAASqQ,EAG3B,MAAOA,IAQTlX,EAAOqQ,UAAU8M,kBAAoB,SAASnW,GAC5ClI,KAAKwuB,eAAiBtmB,GASxBhH,EAAOqQ,UAAUsU,YAAc,SAAS9d,GACtC,GAAIA,GAAS/H,KAAKkV,OAAO7P,OACvB,KAAM,2BAERrF,MAAK+H,MAAQA,EACb/H,KAAK6G,MAAQ7G,KAAKkV,OAAOnN,IAO3B7G,EAAOqQ,UAAUkd,iBAAmB,SAAS1mB,GAC7B7B,SAAV6B,IACFA,EAAQ,EAEV,IAAIoU,GAAQnc,KAAKuuB,MAAMpS,KAEvB,IAAIpU,EAAQ/H,KAAKkV,OAAO7P,OAAQ,CAC9B,CAAqBrF,KAAK2f,eAAe5X,GAIlB7B,SAAnBiW,EAAM4S,WACR5S,EAAM4S,SAAWnf,SAASK,cAAc,OACxCkM,EAAM4S,SAASve,MAAMiQ,SAAW,WAChCtE,EAAM4S,SAASve,MAAMjG,MAAQ,OAC7B4R,EAAMrM,YAAYqM,EAAM4S,UAE1B,IAAIA,GAAW/uB,KAAK2uB,mBACpBxS,GAAM4S,SAASjO,UAAY,wBAA0BiO,EAAW,IAEhE5S,EAAM4S,SAASve,MAAM2P,OAAS,OAC9BhE,EAAM4S,SAASve,MAAMvJ,KAAO,MAE5B,IAAImL,GAAKpS,IACTurB,YAAW,WAAYnZ,EAAGqc,iBAAiB1mB,EAAM,IAAM,IACvD/H,KAAKM,QAAS,MAGdN,MAAKM,QAAS,EAGS4F,SAAnBiW,EAAM4S,WACR5S,EAAM3M,YAAY2M,EAAM4S,UACxB5S,EAAM4S,SAAW7oB,QAGflG,KAAKwuB,gBACPxuB,KAAKwuB,kBAIX3uB,EAAOD,QAAUsB,GAKb,SAASrB,GAObsB,QAAU,SAAUgP,EAAGC,GACrBpQ,KAAKmQ,EAAUjK,SAANiK,EAAkBA,EAAI,EAC/BnQ,KAAKoQ,EAAUlK,SAANkK,EAAkBA,EAAI,GAGjCvQ,EAAOD,QAAUuB,SAKb,SAAStB,GAQb,QAASuB,GAAQ+O,EAAGC,EAAG2J,GACrB/Z,KAAKmQ,EAAUjK,SAANiK,EAAkBA,EAAI,EAC/BnQ,KAAKoQ,EAAUlK,SAANkK,EAAkBA,EAAI,EAC/BpQ,KAAK+Z,EAAU7T,SAAN6T,EAAkBA,EAAI,EASjC3Y,EAAQgnB,SAAW,SAASnjB,EAAGa,GAC7B,GAAIkpB,GAAM,GAAI5tB,EAId,OAHA4tB,GAAI7e,EAAIlL,EAAEkL,EAAIrK,EAAEqK,EAChB6e,EAAI5e,EAAInL,EAAEmL,EAAItK,EAAEsK,EAChB4e,EAAIjV,EAAI9U,EAAE8U,EAAIjU,EAAEiU,EACTiV,GAST5tB,EAAQkQ,IAAM,SAASrM,EAAGa,GACxB,GAAImpB,GAAM,GAAI7tB,EAId,OAHA6tB,GAAI9e,EAAIlL,EAAEkL,EAAIrK,EAAEqK,EAChB8e,EAAI7e,EAAInL,EAAEmL,EAAItK,EAAEsK,EAChB6e,EAAIlV,EAAI9U,EAAE8U,EAAIjU,EAAEiU,EACTkV,GAST7tB,EAAQ8nB,IAAM,SAASjkB,EAAGa,GACxB,MAAO,IAAI1E,IACF6D,EAAEkL,EAAIrK,EAAEqK,GAAK,GACblL,EAAEmL,EAAItK,EAAEsK,GAAK,GACbnL,EAAE8U,EAAIjU,EAAEiU,GAAK,IAWxB3Y,EAAQmnB,aAAe,SAAStjB,EAAGa,GACjC,GAAIwiB,GAAe,GAAIlnB,EAMvB,OAJAknB,GAAanY,EAAIlL,EAAEmL,EAAItK,EAAEiU,EAAI9U,EAAE8U,EAAIjU,EAAEsK,EACrCkY,EAAalY,EAAInL,EAAE8U,EAAIjU,EAAEqK,EAAIlL,EAAEkL,EAAIrK,EAAEiU,EACrCuO,EAAavO,EAAI9U,EAAEkL,EAAIrK,EAAEsK,EAAInL,EAAEmL,EAAItK,EAAEqK,EAE9BmY,GAQTlnB,EAAQmQ,UAAUlM,OAAS,WACzB,MAAOT,MAAKkoB,KACJ9sB,KAAKmQ,EAAInQ,KAAKmQ,EACdnQ,KAAKoQ,EAAIpQ,KAAKoQ,EACdpQ,KAAK+Z,EAAI/Z,KAAK+Z,IAIxBla,EAAOD,QAAUwB,GAKb,SAASvB,EAAQD,EAASM,GAa9B,QAASmB,GAAOuV,EAAWlJ,GACzB,GAAkBxH,SAAd0Q,EACF,KAAM,qCAKR,IAHA5W,KAAK4W,UAAYA,EACjB5W,KAAKwlB,QAAW9X,GAA8BxH,QAAnBwH,EAAQ8X,QAAwB9X,EAAQ8X,SAAU,EAEzExlB,KAAKwlB,QAAS,CAChBxlB,KAAKmc,MAAQvM,SAASK,cAAc,OAEpCjQ,KAAKmc,MAAM3L,MAAMI,MAAQ,OACzB5Q,KAAKmc,MAAM3L,MAAMiQ,SAAW,WAC5BzgB,KAAK4W,UAAU9G,YAAY9P,KAAKmc,OAEhCnc,KAAKmc,MAAM+S,KAAOtf,SAASK,cAAc,SACzCjQ,KAAKmc,MAAM+S,KAAK5oB,KAAO,SACvBtG,KAAKmc,MAAM+S,KAAKroB,MAAQ,OACxB7G,KAAKmc,MAAMrM,YAAY9P,KAAKmc,MAAM+S,MAElClvB,KAAKmc,MAAM0F,KAAOjS,SAASK,cAAc,SACzCjQ,KAAKmc,MAAM0F,KAAKvb,KAAO,SACvBtG,KAAKmc,MAAM0F,KAAKhb,MAAQ,OACxB7G,KAAKmc,MAAMrM,YAAY9P,KAAKmc,MAAM0F,MAElC7hB,KAAKmc,MAAM+I,KAAOtV,SAASK,cAAc,SACzCjQ,KAAKmc,MAAM+I,KAAK5e,KAAO,SACvBtG,KAAKmc,MAAM+I,KAAKre,MAAQ,OACxB7G,KAAKmc,MAAMrM,YAAY9P,KAAKmc,MAAM+I,MAElCllB,KAAKmc,MAAMgT,IAAMvf,SAASK,cAAc,SACxCjQ,KAAKmc,MAAMgT,IAAI7oB,KAAO,SACtBtG,KAAKmc,MAAMgT,IAAI3e,MAAMiQ,SAAW,WAChCzgB,KAAKmc,MAAMgT,IAAI3e,MAAMnF,OAAS,gBAC9BrL,KAAKmc,MAAMgT,IAAI3e,MAAMI,MAAQ,QAC7B5Q,KAAKmc,MAAMgT,IAAI3e,MAAMK,OAAS,MAC9B7Q,KAAKmc,MAAMgT,IAAI3e,MAAM2c,aAAe,MACpCntB,KAAKmc,MAAMgT,IAAI3e,MAAM4e,gBAAkB,MACvCpvB,KAAKmc,MAAMgT,IAAI3e,MAAMnF,OAAS,oBAC9BrL,KAAKmc,MAAMgT,IAAI3e,MAAMgM,gBAAkB,UACvCxc,KAAKmc,MAAMrM,YAAY9P,KAAKmc,MAAMgT,KAElCnvB,KAAKmc,MAAMkT,MAAQzf,SAASK,cAAc,SAC1CjQ,KAAKmc,MAAMkT,MAAM/oB,KAAO,SACxBtG,KAAKmc,MAAMkT,MAAM7e,MAAMuG,OAAS,MAChC/W,KAAKmc,MAAMkT,MAAMxoB,MAAQ,IACzB7G,KAAKmc,MAAMkT,MAAM7e,MAAMiQ,SAAW,WAClCzgB,KAAKmc,MAAMkT,MAAM7e,MAAMvJ,KAAO,SAC9BjH,KAAKmc,MAAMrM,YAAY9P,KAAKmc,MAAMkT,MAGlC,IAAIjd,GAAKpS,IACTA,MAAKmc,MAAMkT,MAAMtO,YAAc,SAAU7X,GAAQkJ,EAAG4O,aAAa9X,IACjElJ,KAAKmc,MAAM+S,KAAKI,QAAU,SAAUpmB,GAAQkJ,EAAG8c,KAAKhmB,IACpDlJ,KAAKmc,MAAM0F,KAAKyN,QAAU,SAAUpmB,GAAQkJ,EAAGmd,WAAWrmB,IAC1DlJ,KAAKmc,MAAM+I,KAAKoK,QAAU,SAAUpmB,GAAQkJ,EAAG8S,KAAKhc,IAGtDlJ,KAAKwvB,iBAAmBtpB,OAExBlG,KAAKkV,UACLlV,KAAK+H,MAAQ7B,OAEblG,KAAKyvB,YAAcvpB,OACnBlG,KAAK0vB,aAAe,IACpB1vB,KAAK2vB,UAAW,EA3ElB,GAAIhvB,GAAOT,EAAoB,EAiF/BmB,GAAOkQ,UAAU2d,KAAO,WACtB,GAAInnB,GAAQ/H,KAAK4lB,UACb7d,GAAQ,IACVA,IACA/H,KAAK4vB,SAAS7nB,KAOlB1G,EAAOkQ,UAAU2T,KAAO,WACtB,GAAInd,GAAQ/H,KAAK4lB,UACb7d,GAAQ/H,KAAKkV,OAAO7P,OAAS,IAC/B0C,IACA/H,KAAK4vB,SAAS7nB,KAOlB1G,EAAOkQ,UAAUse,SAAW,WAC1B,GAAInhB,GAAQ,GAAI1K,MAEZ+D,EAAQ/H,KAAK4lB,UACb7d;EAAQ/H,KAAKkV,OAAO7P,OAAS,GAC/B0C,IACA/H,KAAK4vB,SAAS7nB,IAEP/H,KAAK2vB,WAEZ5nB,EAAQ,EACR/H,KAAK4vB,SAAS7nB,GAGhB,IAAIod,GAAM,GAAInhB,MACVolB,EAAQjE,EAAMzW,EAIdohB,EAAWlrB,KAAK6H,IAAIzM,KAAK0vB,aAAetG,EAAM,GAG9ChX,EAAKpS,IACTA,MAAKyvB,YAAclE,WAAW,WAAYnZ,EAAGyd,YAAcC,IAM7DzuB,EAAOkQ,UAAUge,WAAa,WACHrpB,SAArBlG,KAAKyvB,YACPzvB,KAAK6hB,OAEL7hB,KAAK+hB,QAOT1gB,EAAOkQ,UAAUsQ,KAAO,WAElB7hB,KAAKyvB,cAETzvB,KAAK6vB,WAED7vB,KAAKmc,QACPnc,KAAKmc,MAAM0F,KAAKhb,MAAQ,UAO5BxF,EAAOkQ,UAAUwQ,KAAO,WACtBgO,cAAc/vB,KAAKyvB,aACnBzvB,KAAKyvB,YAAcvpB,OAEflG,KAAKmc,QACPnc,KAAKmc,MAAM0F,KAAKhb,MAAQ,SAQ5BxF,EAAOkQ,UAAUuU,oBAAsB,SAAS5d,GAC9ClI,KAAKwvB,iBAAmBtnB,GAO1B7G,EAAOkQ,UAAUmU,gBAAkB,SAASoK,GAC1C9vB,KAAK0vB,aAAeI,GAOtBzuB,EAAOkQ,UAAUye,gBAAkB,WACjC,MAAOhwB,MAAK0vB,cASdruB,EAAOkQ,UAAU0e,YAAc,SAASC,GACtClwB,KAAK2vB,SAAWO,GAOlB7uB,EAAOkQ,UAAU4e,SAAW,WACIjqB,SAA1BlG,KAAKwvB,kBACPxvB,KAAKwvB,oBAOTnuB,EAAOkQ,UAAU+M,OAAS,WACxB,GAAIte,KAAKmc,MAAO,CAEdnc,KAAKmc,MAAMgT,IAAI3e,MAAMnJ,IAAOrH,KAAKmc,MAAMuF,aAAa,EAChD1hB,KAAKmc,MAAMgT,IAAI1B,aAAa,EAAK,KACrCztB,KAAKmc,MAAMgT,IAAI3e,MAAMI,MAAS5Q,KAAKmc,MAAME,YACrCrc,KAAKmc,MAAM+S,KAAK7S,YAChBrc,KAAKmc,MAAM0F,KAAKxF,YAChBrc,KAAKmc,MAAM+I,KAAK7I,YAAc,GAAO,IAGzC,IAAIpV,GAAOjH,KAAKowB,YAAYpwB,KAAK+H,MACjC/H,MAAKmc,MAAMkT,MAAM7e,MAAMvJ,KAAO,EAAS,OAS3C5F,EAAOkQ,UAAUkU,UAAY,SAASvQ,GACpClV,KAAKkV,OAASA,EAEVlV,KAAKkV,OAAO7P,OAAS,EACvBrF,KAAK4vB,SAAS,GAEd5vB,KAAK+H,MAAQ7B,QAOjB7E,EAAOkQ,UAAUqe,SAAW,SAAS7nB,GACnC,KAAIA,EAAQ/H,KAAKkV,OAAO7P,QAOtB,KAAM,2BANNrF,MAAK+H,MAAQA,EAEb/H,KAAKse,SACLte,KAAKmwB,YAWT9uB,EAAOkQ,UAAUqU,SAAW,WAC1B,MAAO5lB,MAAK+H,OAQd1G,EAAOkQ,UAAU4B,IAAM,WACrB,MAAOnT,MAAKkV,OAAOlV,KAAK+H,QAI1B1G,EAAOkQ,UAAUyP,aAAe,SAAS9X,GAEvC,GAAImgB,GAAiBngB,EAAMqgB,MAAyB,IAAhBrgB,EAAMqgB,MAAiC,IAAjBrgB,EAAMsgB,MAChE,IAAKH,EAAL,CAEArpB,KAAKqwB,aAAennB,EAAM2kB,QAC1B7tB,KAAKswB,YAAcpO,WAAWliB,KAAKmc,MAAMkT,MAAM7e,MAAMvJ,MAErDjH,KAAKmc,MAAM3L,MAAMyZ,OAAS,MAK1B,IAAI7X,GAAKpS,IACTA,MAAKkqB,YAAc,SAAUhhB,GAAQkJ,EAAG+X,aAAajhB,IACrDlJ,KAAKoqB,UAAc,SAAUlhB,GAAQkJ,EAAGkX,WAAWpgB,IACnDvI,EAAK4H,iBAAiBqH,SAAU,YAAa5P,KAAKkqB,aAClDvpB,EAAK4H,iBAAiBqH,SAAU,UAAa5P,KAAKoqB,WAClDzpB,EAAKsI,eAAeC,KAItB7H,EAAOkQ,UAAUgf,YAAc,SAAUtpB,GACvC,GAAI2J,GAAQsR,WAAWliB,KAAKmc,MAAMgT,IAAI3e,MAAMI,OACxC5Q,KAAKmc,MAAMkT,MAAMhT,YAAc,GAC/BlM,EAAIlJ,EAAO,EAEXc,EAAQnD,KAAK+lB,MAAMxa,EAAIS,GAAS5Q,KAAKkV,OAAO7P,OAAO,GAIvD,OAHY,GAAR0C,IAAWA,EAAQ,GACnBA,EAAQ/H,KAAKkV,OAAO7P,OAAO,IAAG0C,EAAQ/H,KAAKkV,OAAO7P,OAAO,GAEtD0C,GAGT1G,EAAOkQ,UAAU6e,YAAc,SAAUroB,GACvC,GAAI6I,GAAQsR,WAAWliB,KAAKmc,MAAMgT,IAAI3e,MAAMI,OACxC5Q,KAAKmc,MAAMkT,MAAMhT,YAAc,GAE/BlM,EAAIpI,GAAS/H,KAAKkV,OAAO7P,OAAO,GAAKuL,EACrC3J,EAAOkJ,EAAI,CAEf,OAAOlJ,IAKT5F,EAAOkQ,UAAU4Y,aAAe,SAAUjhB,GACxC,GAAIkgB,GAAOlgB,EAAM2kB,QAAU7tB,KAAKqwB,aAC5BlgB,EAAInQ,KAAKswB,YAAclH,EAEvBrhB,EAAQ/H,KAAKuwB,YAAYpgB,EAE7BnQ,MAAK4vB,SAAS7nB,GAEdpH,EAAKsI,kBAIP5H,EAAOkQ,UAAU+X,WAAa,WAC5BtpB,KAAKmc,MAAM3L,MAAMyZ,OAAS,OAG1BtpB,EAAKoI,oBAAoB6G,SAAU,YAAa5P,KAAKkqB,aACrDvpB,EAAKoI,oBAAoB6G,SAAU,UAAW5P,KAAKoqB,WAEnDzpB,EAAKsI,kBAGPpJ,EAAOD,QAAUyB,GAKb,SAASxB,GA2Bb,QAASyB,GAAWoN,EAAOyW,EAAKH,EAAMoB,GAEpCpmB,KAAKwwB,OAAS,EACdxwB,KAAKywB,KAAO,EACZzwB,KAAK0wB,MAAQ,EACb1wB,KAAKomB,YAAa,EAClBpmB,KAAK2wB,UAAY,EAEjB3wB,KAAK4wB,SAAW,EAChB5wB,KAAK6wB,SAASniB,EAAOyW,EAAKH,EAAMoB,GAYlC9kB,EAAWiQ,UAAUsf,SAAW,SAASniB,EAAOyW,EAAKH,EAAMoB,GACzDpmB,KAAKwwB,OAAS9hB,EAAQA,EAAQ,EAC9B1O,KAAKywB,KAAOtL,EAAMA,EAAM,EAExBnlB,KAAK8wB,QAAQ9L,EAAMoB,IASrB9kB,EAAWiQ,UAAUuf,QAAU,SAAS9L,EAAMoB,GAC/BlgB,SAAT8e,GAA8B,GAARA,IAGP9e,SAAfkgB,IACFpmB,KAAKomB,WAAaA,GAGlBpmB,KAAK0wB,MADH1wB,KAAKomB,cAAe,EACT9kB,EAAWyvB,oBAAoB/L,GAE/BA,IAUjB1jB,EAAWyvB,oBAAsB,SAAU/L,GACzC,GAAIgM,GAAQ,SAAU7gB,GAAI,MAAOvL,MAAKgK,IAAIuB,GAAKvL,KAAKqsB,MAGhDC,EAAQtsB,KAAKusB,IAAI,GAAIvsB,KAAK+lB,MAAMqG,EAAMhM,KACtCoM,EAAQ,EAAIxsB,KAAKusB,IAAI,GAAIvsB,KAAK+lB,MAAMqG,EAAMhM,EAAO,KACjDqM,EAAQ,EAAIzsB,KAAKusB,IAAI,GAAIvsB,KAAK+lB,MAAMqG,EAAMhM,EAAO,KAGjDoB,EAAa8K,CASjB,OARItsB,MAAK+iB,IAAIyJ,EAAQpM,IAASpgB,KAAK+iB,IAAIvB,EAAapB,KAAOoB,EAAagL,GACpExsB,KAAK+iB,IAAI0J,EAAQrM,IAASpgB,KAAK+iB,IAAIvB,EAAapB,KAAOoB,EAAaiL,GAGtD,GAAdjL,IACFA,EAAa,GAGRA,GAOT9kB,EAAWiQ,UAAU0T,WAAa,WAChC,MAAO/C,YAAWliB,KAAK4wB,SAASU,YAAYtxB,KAAK2wB,aAOnDrvB,EAAWiQ,UAAUggB,QAAU,WAC7B,MAAOvxB,MAAK0wB,OAOdpvB,EAAWiQ,UAAU7C,MAAQ,WAC3B1O,KAAK4wB,SAAW5wB,KAAKwwB,OAASxwB,KAAKwwB,OAASxwB,KAAK0wB,OAMnDpvB,EAAWiQ,UAAU2T,KAAO,WAC1BllB,KAAK4wB,UAAY5wB,KAAK0wB,OAOxBpvB,EAAWiQ,UAAU4T,IAAM,WACzB,MAAQnlB,MAAK4wB,SAAW5wB,KAAKywB,MAG/B5wB,EAAOD,QAAU0B,GAKb,SAASzB,EAAQD,EAASM,GAoB9B,QAASqB,GAAUqV,EAAW7U,EAAO2L,GACnC,KAAM1N,eAAgBuB,IACpB,KAAM,IAAIsV,aAAY,mDAGxB,IAAIzE,GAAKpS,IACTA,MAAKwxB,gBACH9iB,MAAO,KACPyW,IAAO,KAEPsM,YAAY,EAEZC,YAAa,SACb9gB,MAAO,KACPC,OAAQ,KACR8gB,UAAW,KACXC,UAAW,MAEb5xB,KAAK0N,QAAU/M,EAAKwF,cAAenG,KAAKwxB,gBAGxCxxB,KAAK6xB,QAAQjb,GAGb5W,KAAK8B,cAEL9B,KAAK8xB,MACH5E,IAAKltB,KAAKktB,IACV6E,SAAU/xB,KAAK0F,MACfssB,SACExgB,GAAIxR,KAAKwR,GAAGygB,KAAKjyB,MACjB2R,IAAK3R,KAAK2R,IAAIsgB,KAAKjyB,MACnB6qB,KAAM7qB,KAAK6qB,KAAKoH,KAAKjyB,OAEvBW,MACEuxB,KAAM,KACNC,SAAU/f,EAAGggB,UAAUH,KAAK7f,GAC5BigB,eAAgBjgB,EAAGkgB,gBAAgBL,KAAK7f,GACxCmgB,OAAQngB,EAAGogB,QAAQP,KAAK7f,GACxBqgB,aAAergB,EAAGsgB,cAAcT,KAAK7f,KAKzCpS,KAAK8N,MAAQ,GAAInM,GAAM3B,KAAK8xB,MAC5B9xB,KAAK8B,WAAW8F,KAAK5H,KAAK8N,OAC1B9N,KAAK8xB,KAAKhkB,MAAQ9N,KAAK8N,MAGvB9N,KAAK2yB,SAAW,GAAI9vB,GAAS7C,KAAK8xB,MAClC9xB,KAAK8B,WAAW8F,KAAK5H,KAAK2yB,UAC1B3yB,KAAK8xB,KAAKnxB,KAAKuxB,KAAOlyB,KAAK2yB,SAAST,KAAKD,KAAKjyB,KAAK2yB,UAGnD3yB,KAAK4yB,YAAc,GAAIvwB,GAAYrC,KAAK8xB,MACxC9xB,KAAK8B,WAAW8F,KAAK5H,KAAK4yB,aAI1B5yB,KAAK6yB,WAAa,GAAIvwB,GAAWtC,KAAK8xB,MACtC9xB,KAAK8B,WAAW8F,KAAK5H,KAAK6yB,YAG1B7yB,KAAK8yB,QAAU,GAAIpwB,GAAQ1C,KAAK8xB,MAChC9xB,KAAK8B,WAAW8F,KAAK5H,KAAK8yB,SAE1B9yB,KAAK+yB,UAAY,KACjB/yB,KAAKgzB,WAAa,KAGdtlB,GACF1N,KAAK2Z,WAAWjM,GAId3L,EACF/B,KAAKizB,SAASlxB,GAGd/B,KAAKse,SAjGT,GAAI1E,GAAU1Z,EAAoB,IAC9BgzB,EAAShzB,EAAoB,IAC7BS,EAAOT,EAAoB,GAC3BW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/ByB,EAAQzB,EAAoB,IAC5B2C,EAAW3C,EAAoB,IAC/BmC,EAAcnC,EAAoB,IAClCoC,EAAapC,EAAoB,IACjCwC,EAAUxC,EAAoB,GA6FlC0Z,GAAQrY,EAASgQ,WASjBhQ,EAASgQ,UAAUsgB,QAAU,SAAUjb,GACrC5W,KAAKktB,OAELltB,KAAKktB,IAAIxtB,KAAuBkQ,SAASK,cAAc,OACvDjQ,KAAKktB,IAAI9hB,WAAuBwE,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIiG,mBAAuBvjB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIkG,qBAAuBxjB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAImG,gBAAuBzjB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIoG,cAAuB1jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIqG,eAAuB3jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIjE,OAAuBrZ,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIjmB,KAAuB2I,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIhJ,MAAuBtU,SAASK,cAAc,OACvDjQ,KAAKktB,IAAI7lB,IAAuBuI,SAASK,cAAc,OACvDjQ,KAAKktB,IAAI/M,OAAuBvQ,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIsG,UAAuB5jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIuG,aAAuB7jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIwG,cAAuB9jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIyG,iBAAuB/jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAI0G,eAAuBhkB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAI2G,kBAAuBjkB,SAASK,cAAc,OAEvDjQ,KAAKktB,IAAI9hB,WAAW5D,UAAsB,sBAC1CxH,KAAKktB,IAAIiG,mBAAmB3rB,UAAc,+BAC1CxH,KAAKktB,IAAIkG,qBAAqB5rB,UAAY,iCAC1CxH,KAAKktB,IAAImG,gBAAgB7rB,UAAiB,kBAC1CxH,KAAKktB,IAAIoG,cAAc9rB,UAAmB,gBAC1CxH,KAAKktB,IAAIqG,eAAe/rB,UAAkB,iBAC1CxH,KAAKktB,IAAI7lB,IAAIG,UAA6B,eAC1CxH,KAAKktB,IAAI/M,OAAO3Y,UAA0B,kBAC1CxH,KAAKktB,IAAIjmB,KAAKO,UAA4B,UAC1CxH,KAAKktB,IAAIjE,OAAOzhB,UAA0B,UAC1CxH,KAAKktB,IAAIhJ,MAAM1c,UAA2B,UAC1CxH,KAAKktB,IAAIsG,UAAUhsB,UAAuB,aAC1CxH,KAAKktB,IAAIuG,aAAajsB,UAAoB,gBAC1CxH,KAAKktB,IAAIwG,cAAclsB,UAAmB,aAC1CxH,KAAKktB,IAAIyG,iBAAiBnsB,UAAgB,gBAC1CxH,KAAKktB,IAAI0G,eAAepsB,UAAkB,aAC1CxH,KAAKktB,IAAI2G,kBAAkBrsB,UAAe,gBAE1CxH,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAI9hB,YACnCpL,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAIiG,oBACnCnzB,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAIkG,sBACnCpzB,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAImG,iBACnCrzB,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAIoG,eACnCtzB,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAIqG,gBACnCvzB,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAI7lB,KACnCrH,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAI/M,QAEnCngB,KAAKktB,IAAImG,gBAAgBvjB,YAAY9P,KAAKktB,IAAIjE,QAC9CjpB,KAAKktB,IAAIoG,cAAcxjB,YAAY9P,KAAKktB,IAAIjmB,MAC5CjH,KAAKktB,IAAIqG,eAAezjB,YAAY9P,KAAKktB,IAAIhJ,OAE7ClkB,KAAKktB,IAAImG,gBAAgBvjB,YAAY9P,KAAKktB,IAAIsG,WAC9CxzB,KAAKktB,IAAImG,gBAAgBvjB,YAAY9P,KAAKktB,IAAIuG,cAC9CzzB,KAAKktB,IAAIoG,cAAcxjB,YAAY9P,KAAKktB,IAAIwG,eAC5C1zB,KAAKktB,IAAIoG,cAAcxjB,YAAY9P,KAAKktB,IAAIyG,kBAC5C3zB,KAAKktB,IAAIqG,eAAezjB,YAAY9P,KAAKktB,IAAI0G,gBAC7C5zB,KAAKktB,IAAIqG,eAAezjB,YAAY9P,KAAKktB,IAAI2G,mBAE7C7zB,KAAKwR,GAAG,cAAexR,KAAKse,OAAO2T,KAAKjyB,OACxCA,KAAKwR,GAAG,SAAUxR,KAAKse,OAAO2T,KAAKjyB,OACnCA,KAAKwR,GAAG,QAASxR,KAAK8zB,SAAS7B,KAAKjyB,OACpCA,KAAKwR,GAAG,QAASxR,KAAK+zB,SAAS9B,KAAKjyB,OACpCA,KAAKwR,GAAG,YAAaxR,KAAKg0B,aAAa/B,KAAKjyB,OAC5CA,KAAKwR,GAAG,OAAQxR,KAAKi0B,QAAQhC,KAAKjyB,OAIlCA,KAAKyD,OAASyvB,EAAOlzB,KAAKktB,IAAIxtB,MAC5Bw0B,iBAAiB,IAEnBl0B,KAAKm0B,YAEL,IAAI/hB,GAAKpS,KACLo0B,GACF,QAAS,QACT,MAAO,YAAa,OACpB,YAAa,OAAQ,UACrB,aAAc,iBA8BhB,IA5BAA,EAAOnsB,QAAQ,SAAUiB,GACvB,GAAIR,GAAW,WACb,GAAI2rB,IAAQnrB,GAAO+I,OAAOtM,MAAM4L,UAAU+iB,MAAM/zB,KAAK6E,UAAW,GAChEgN,GAAGyY,KAAK1U,MAAM/D,EAAIiiB,GAEpBjiB,GAAG3O,OAAO+N,GAAGtI,EAAOR,GACpB0J,EAAG+hB,UAAUjrB,GAASR,IAIxB1I,KAAK0F,OACHhG,QACA0L,cACAioB,mBACAC,iBACAC,kBACAtK,UACAhiB,QACAid,SACA7c,OACA8Y,UACA9U,UACAkpB,UAAW,EACXC,aAAc,GAEhBx0B,KAAKy0B,UAGA7d,EAAW,KAAM,IAAIrT,OAAM,wBAChCqT,GAAU9G,YAAY9P,KAAKktB,IAAIxtB,OAMjC6B,EAASgQ,UAAUmjB,QAAU,WAE3B10B,KAAK4U,QAGL5U,KAAK2R,MAGL3R,KAAK20B,kBAGD30B,KAAKktB,IAAIxtB,KAAK8J,YAChBxJ,KAAKktB,IAAIxtB,KAAK8J,WAAWgG,YAAYxP,KAAKktB,IAAIxtB,MAEhDM,KAAKktB,IAAM,IAGX,KAAK,GAAIhkB,KAASlJ,MAAKm0B,UACjBn0B,KAAKm0B,UAAU3uB,eAAe0D,UACzBlJ,MAAKm0B,UAAUjrB,EAG1BlJ,MAAKm0B,UAAY,KACjBn0B,KAAKyD,OAAS,KAGdzD,KAAK8B,WAAWmG,QAAQ,SAAU2sB,GAChCA,EAAUF,YAGZ10B,KAAK8xB,KAAO,MA4BdvwB,EAASgQ,UAAUoI,WAAa,SAAUjM,GACxC,GAAIA,EAAS,CAEX,GAAIP,IAAU,QAAS,SAAU,YAAa,YAAa,aAAc,QAAS,MAAO,cACzFxM,GAAK8E,gBAAgB0H,EAAQnN,KAAK0N,QAASA,GAG3C1N,KAAK60B,kBASP,GALA70B,KAAK8B,WAAWmG,QAAQ,SAAU2sB,GAChCA,EAAUjb,WAAWjM,KAInBA,GAAWA,EAAQgG,MACrB,KAAM,IAAInQ,OAAM,wEAIlBvD,MAAKse,UAOP/c,EAASgQ,UAAUujB,cAAgB,SAAUC,GAC3C,IAAK/0B,KAAK6yB,WACR,KAAM,IAAItvB,OAAM,yDAGlBvD,MAAK6yB,WAAWiC,cAAcC,IAOhCxzB,EAASgQ,UAAUyjB,cAAgB,WACjC,IAAKh1B,KAAK6yB,WACR,KAAM,IAAItvB,OAAM,yDAGlB,OAAOvD,MAAK6yB,WAAWmC,iBAOzBzzB,EAASgQ,UAAU0hB,SAAW,SAASlxB,GACrC,GAGIkzB,GAHAC,EAAiC,MAAlBl1B,KAAK+yB,SAwBxB,IAhBEkC,EAJGlzB,EAGIA,YAAiBlB,IAAWkB,YAAiBjB,GACvCiB,EAIA,GAAIlB,GAAQkB,GACvBuE,MACEoI,MAAO,OACPyW,IAAK,UAVI,KAgBfnlB,KAAK+yB,UAAYkC,EACjBj1B,KAAK8yB,SAAW9yB,KAAK8yB,QAAQG,SAASgC,GAElCC,IAAgB,SAAWl1B,MAAK0N,SAAW,OAAS1N,MAAK0N,SAAU,CACrE1N,KAAKm1B,KAEL,IAAIzmB,GAAS,SAAW1O,MAAK0N,QAAW/M,EAAK0F,QAAQrG,KAAK0N,QAAQgB,MAAO,QAAU,KAC/EyW,EAAS,OAASnlB,MAAK0N,QAAa/M,EAAK0F,QAAQrG,KAAK0N,QAAQyX,IAAK,QAAU,IAEjFnlB,MAAKo1B,UAAU1mB,EAAOyW,KAQ1B5jB,EAASgQ,UAAU8jB,gBAAkB,WACnC,MAAOr1B,MAAK8yB,SAAW9yB,KAAK8yB,QAAQuC,uBAQtC9zB,EAASgQ,UAAU+jB,UAAY,SAASC,GAEtC,GAAIN,EAKFA,GAJGM,EAGIA,YAAkB10B,IAAW00B,YAAkBz0B,GACzCy0B,EAIA,GAAI10B,GAAQ00B,GAPZ,KAUfv1B,KAAKgzB,WAAaiC,EAClBj1B,KAAK8yB,QAAQwC,UAAUL,IAazB1zB,EAASgQ,UAAUqD,MAAQ,SAAS4gB,KAE7BA,GAAQA,EAAKzzB,QAChB/B,KAAKizB,SAAS,QAIXuC,GAAQA,EAAKD,SAChBv1B,KAAKs1B,UAAU,QAIZE,GAAQA,EAAK9nB,WAChB1N,KAAK8B,WAAWmG,QAAQ,SAAU2sB,GAChCA,EAAUjb,WAAWib,EAAUpD,kBAGjCxxB,KAAK2Z,WAAW3Z,KAAKwxB,kBAOzBjwB,EAASgQ,UAAU4jB,IAAM,WAEvB,GAAIM,GAAYz1B,KAAK01B,eAGjBhnB,EAAQ+mB,EAAU1qB,IAClBoa,EAAMsQ,EAAUhpB,GACpB,IAAa,MAATiC,GAAwB,MAAPyW,EAAa,CAChC,GAAI2K,GAAY3K,EAAI3e,UAAYkI,EAAMlI,SACtB,IAAZspB,IAEFA,EAAW,OAEbphB,EAAQ,GAAI1K,MAAK0K,EAAMlI,UAAuB,IAAXspB,GACnC3K,EAAM,GAAInhB,MAAKmhB,EAAI3e,UAAuB,IAAXspB,IAInB,OAAVphB,GAA0B,OAARyW,IAItBnlB,KAAK8N,MAAM+iB,SAASniB,EAAOyW,IAS7B5jB,EAASgQ,UAAUmkB,aAAe,WAEhC,GAAIC,GAAU31B,KAAK+yB,UAAU/e,aACzBjJ,EAAM,KACN0B,EAAM,IAEV,IAAIkpB,EAAS,CAEX,GAAIC,GAAUD,EAAQ5qB,IAAI,QAC1BA,GAAM6qB,EAAUj1B,EAAK0F,QAAQuvB,EAAQlnB,MAAO,QAAQlI,UAAY,IAKhE,IAAIqvB,GAAeF,EAAQlpB,IAAI,QAC3BopB,KACFppB,EAAM9L,EAAK0F,QAAQwvB,EAAannB,MAAO,QAAQlI,UAEjD,IAAIsvB,GAAaH,EAAQlpB,IAAI,MACzBqpB,KAEArpB,EADS,MAAPA,EACI9L,EAAK0F,QAAQyvB,EAAW3Q,IAAK,QAAQ3e,UAGrC5B,KAAK6H,IAAIA,EAAK9L,EAAK0F,QAAQyvB,EAAW3Q,IAAK,QAAQ3e,YAK/D,OACEuE,IAAa,MAAPA,EAAe,GAAI/G,MAAK+G,GAAO,KACrC0B,IAAa,MAAPA,EAAe,GAAIzI,MAAKyI,GAAO,OAWzClL,EAASgQ,UAAUwkB,aAAe,SAAS3iB,GACzCpT,KAAK8yB,SAAW9yB,KAAK8yB,QAAQiD,aAAa3iB,IAO5C7R,EAASgQ,UAAUykB,aAAe,WAChC,MAAOh2B,MAAK8yB,SAAW9yB,KAAK8yB,QAAQkD,oBAgBtCz0B,EAASgQ,UAAU6jB,UAAY,SAAS1mB,EAAOyW,GAC7C,GAAwB,GAApB/f,UAAUC,OAAa,CACzB,GAAIyI,GAAQ1I,UAAU,EACtBpF,MAAK8N,MAAM+iB,SAAS/iB,EAAMY,MAAOZ,EAAMqX,SAGvCnlB,MAAK8N,MAAM+iB,SAASniB,EAAOyW,IAQ/B5jB,EAASgQ,UAAU0kB,UAAY,WAC7B,GAAInoB,GAAQ9N,KAAK8N,MAAMooB,UACvB,QACExnB,MAAO,GAAI1K,MAAK8J,EAAMY,OACtByW,IAAK,GAAInhB,MAAK8J,EAAMqX,OAQxB5jB,EAASgQ,UAAU+M,OAAS,WAC1B,GAAI6X,IAAU,EACVzoB,EAAU1N,KAAK0N,QACfhI,EAAQ1F,KAAK0F,MACbwnB,EAAMltB,KAAKktB,GAEf,IAAKA,EAAL,CAGAA,EAAIxtB,KAAK8H,UAAY,qBAAuBkG,EAAQgkB,YAGpDxE,EAAIxtB,KAAK8Q,MAAMmhB,UAAYhxB,EAAK8I,OAAOK,OAAO4D,EAAQikB,UAAW,IACjEzE,EAAIxtB,KAAK8Q,MAAMohB,UAAYjxB,EAAK8I,OAAOK,OAAO4D,EAAQkkB,UAAW,IACjE1E,EAAIxtB,KAAK8Q,MAAMI,MAAQjQ,EAAK8I,OAAOK,OAAO4D,EAAQkD,MAAO,IAGzDlL,EAAM2F,OAAOpE,MAAUimB,EAAImG,gBAAgB9F,YAAcL,EAAImG,gBAAgBhX,aAAe,EAC5F3W,EAAM2F,OAAO6Y,MAASxe,EAAM2F,OAAOpE,KACnCvB,EAAM2F,OAAOhE,KAAU6lB,EAAImG,gBAAgB5F,aAAeP,EAAImG,gBAAgB3R,cAAgB,EAC9Fhc,EAAM2F,OAAO8U,OAASza,EAAM2F,OAAOhE,GACnC,IAAI+uB,GAAkBlJ,EAAIxtB,KAAK+tB,aAAeP,EAAIxtB,KAAKgiB,aACnD2U,EAAkBnJ,EAAIxtB,KAAK6tB,YAAcL,EAAIxtB,KAAK2c,WAItD3W,GAAMujB,OAAOpY,OAASqc,EAAIjE,OAAOwE,aACjC/nB,EAAMuB,KAAK4J,OAAWqc,EAAIjmB,KAAKwmB,aAC/B/nB,EAAMwe,MAAMrT,OAAUqc,EAAIhJ,MAAMuJ,aAChC/nB,EAAM2B,IAAIwJ,OAAYqc,EAAI7lB,IAAIqa,eAAoBhc,EAAM2F,OAAOhE,IAC/D3B,EAAMya,OAAOtP,OAASqc,EAAI/M,OAAOuB,eAAiBhc,EAAM2F,OAAO8U,MAM/D,IAAIqN,GAAgB5oB,KAAK6H,IAAI/G,EAAMuB,KAAK4J,OAAQnL,EAAMujB,OAAOpY,OAAQnL,EAAMwe,MAAMrT,QAC7EylB,EAAa5wB,EAAM2B,IAAIwJ,OAAS2c,EAAgB9nB,EAAMya,OAAOtP,OAC7DulB,EAAmB1wB,EAAM2F,OAAOhE,IAAM3B,EAAM2F,OAAO8U,MACvD+M,GAAIxtB,KAAK8Q,MAAMK,OAASlQ,EAAK8I,OAAOK,OAAO4D,EAAQmD,OAAQylB,EAAa,MAGxE5wB,EAAMhG,KAAKmR,OAASqc,EAAIxtB,KAAK+tB,aAC7B/nB,EAAM0F,WAAWyF,OAASnL,EAAMhG,KAAKmR,OAASulB,CAC9C,IAAIG,GAAkB7wB,EAAMhG,KAAKmR,OAASnL,EAAM2B,IAAIwJ,OAASnL,EAAMya,OAAOtP,OACtEulB,CACJ1wB,GAAM2tB,gBAAgBxiB,OAAU0lB,EAChC7wB,EAAM4tB,cAAcziB,OAAY0lB,EAChC7wB,EAAM6tB,eAAe1iB,OAAWnL,EAAM4tB,cAAcziB,OAGpDnL,EAAMhG,KAAKkR,MAAQsc,EAAIxtB,KAAK6tB,YAC5B7nB,EAAM0F,WAAWwF,MAAQlL,EAAMhG,KAAKkR,MAAQylB,EAC5C3wB,EAAMuB,KAAK2J,MAAQsc,EAAIoG,cAAcjX,cAAkB3W,EAAM2F,OAAOpE,KACpEvB,EAAM4tB,cAAc1iB,MAAQlL,EAAMuB,KAAK2J,MACvClL,EAAMwe,MAAMtT,MAAQsc,EAAIqG,eAAelX,cAAgB3W,EAAM2F,OAAO6Y,MACpExe,EAAM6tB,eAAe3iB,MAAQlL,EAAMwe,MAAMtT,KACzC,IAAI4lB,GAAc9wB,EAAMhG,KAAKkR,MAAQlL,EAAMuB,KAAK2J,MAAQlL,EAAMwe,MAAMtT,MAAQylB,CAC5E3wB,GAAMujB,OAAOrY,MAAiB4lB,EAC9B9wB,EAAM2tB,gBAAgBziB,MAAQ4lB,EAC9B9wB,EAAM2B,IAAIuJ,MAAoB4lB,EAC9B9wB,EAAMya,OAAOvP,MAAiB4lB,EAG9BtJ,EAAI9hB,WAAWoF,MAAMK,OAAmBnL,EAAM0F,WAAWyF,OAAS,KAClEqc,EAAIiG,mBAAmB3iB,MAAMK,OAAWnL,EAAM0F,WAAWyF,OAAS,KAClEqc,EAAIkG,qBAAqB5iB,MAAMK,OAASnL,EAAM2tB,gBAAgBxiB,OAAS,KACvEqc,EAAImG,gBAAgB7iB,MAAMK,OAAcnL,EAAM2tB,gBAAgBxiB,OAAS,KACvEqc,EAAIoG,cAAc9iB,MAAMK,OAAgBnL,EAAM4tB,cAAcziB,OAAS,KACrEqc,EAAIqG,eAAe/iB,MAAMK,OAAenL,EAAM6tB,eAAe1iB,OAAS,KAEtEqc,EAAI9hB,WAAWoF,MAAMI,MAAmBlL,EAAM0F,WAAWwF,MAAQ,KACjEsc,EAAIiG,mBAAmB3iB,MAAMI,MAAWlL,EAAM2tB,gBAAgBziB,MAAQ,KACtEsc,EAAIkG,qBAAqB5iB,MAAMI,MAASlL,EAAM0F,WAAWwF,MAAQ,KACjEsc,EAAImG,gBAAgB7iB,MAAMI,MAAclL,EAAMujB,OAAOrY,MAAQ,KAC7Dsc,EAAI7lB,IAAImJ,MAAMI,MAA0BlL,EAAM2B,IAAIuJ,MAAQ,KAC1Dsc,EAAI/M,OAAO3P,MAAMI,MAAuBlL,EAAMya,OAAOvP,MAAQ,KAG7Dsc,EAAI9hB,WAAWoF,MAAMvJ,KAAiB,IACtCimB,EAAI9hB,WAAWoF,MAAMnJ,IAAiB,IACtC6lB,EAAIiG,mBAAmB3iB,MAAMvJ,KAASvB,EAAMuB,KAAK2J,MAAQ,KACzDsc,EAAIiG,mBAAmB3iB,MAAMnJ,IAAS,IACtC6lB,EAAIkG,qBAAqB5iB,MAAMvJ,KAAO,IACtCimB,EAAIkG,qBAAqB5iB,MAAMnJ,IAAO3B,EAAM2B,IAAIwJ,OAAS,KACzDqc,EAAImG,gBAAgB7iB,MAAMvJ,KAAYvB,EAAMuB,KAAK2J,MAAQ,KACzDsc,EAAImG,gBAAgB7iB,MAAMnJ,IAAY3B,EAAM2B,IAAIwJ,OAAS,KACzDqc,EAAIoG,cAAc9iB,MAAMvJ,KAAc,IACtCimB,EAAIoG,cAAc9iB,MAAMnJ,IAAc3B,EAAM2B,IAAIwJ,OAAS,KACzDqc,EAAIqG,eAAe/iB,MAAMvJ,KAAcvB,EAAMuB,KAAK2J,MAAQlL,EAAMujB,OAAOrY,MAAS,KAChFsc,EAAIqG,eAAe/iB,MAAMnJ,IAAa3B,EAAM2B,IAAIwJ,OAAS,KACzDqc,EAAI7lB,IAAImJ,MAAMvJ,KAAwBvB,EAAMuB,KAAK2J,MAAQ,KACzDsc,EAAI7lB,IAAImJ,MAAMnJ,IAAwB,IACtC6lB,EAAI/M,OAAO3P,MAAMvJ,KAAqBvB,EAAMuB,KAAK2J,MAAQ,KACzDsc,EAAI/M,OAAO3P,MAAMnJ,IAAsB3B,EAAM2B,IAAIwJ,OAASnL,EAAM2tB,gBAAgBxiB,OAAU,KAI1F7Q,KAAKy2B,kBAGL,IAAIhQ,GAASzmB,KAAK0F,MAAM6uB,SACG,WAAvB7mB,EAAQgkB,cACVjL,GAAU7hB,KAAK6H,IAAIzM,KAAK0F,MAAM2tB,gBAAgBxiB,OAAS7Q,KAAK0F,MAAMujB,OAAOpY,OACrE7Q,KAAK0F,MAAM2F,OAAOhE,IAAMrH,KAAK0F,MAAM2F,OAAO8U,OAAQ,IAExD+M,EAAIjE,OAAOzY,MAAMvJ,KAAO,IACxBimB,EAAIjE,OAAOzY,MAAMnJ,IAAOof,EAAS,KACjCyG,EAAIjmB,KAAKuJ,MAAMvJ,KAAS,IACxBimB,EAAIjmB,KAAKuJ,MAAMnJ,IAASof,EAAS,KACjCyG,EAAIhJ,MAAM1T,MAAMvJ,KAAQ,IACxBimB,EAAIhJ,MAAM1T,MAAMnJ,IAAQof,EAAS,IAGjC,IAAIiQ,GAAwC,GAAxB12B,KAAK0F,MAAM6uB,UAAiB,SAAW,GACvDoC,EAAmB32B,KAAK0F,MAAM6uB,WAAav0B,KAAK0F,MAAM8uB,aAAe,SAAW,EACpFtH,GAAIsG,UAAUhjB,MAAMomB,WAAsBF,EAC1CxJ,EAAIuG,aAAajjB,MAAMomB,WAAmBD,EAC1CzJ,EAAIwG,cAAcljB,MAAMomB,WAAkBF,EAC1CxJ,EAAIyG,iBAAiBnjB,MAAMomB,WAAeD,EAC1CzJ,EAAI0G,eAAepjB,MAAMomB,WAAiBF,EAC1CxJ,EAAI2G,kBAAkBrjB,MAAMomB,WAAcD,EAG1C32B,KAAK8B,WAAWmG,QAAQ,SAAU2sB,GAChCuB,EAAUvB,EAAUtW,UAAY6X,IAE9BA,GAEFn2B,KAAKse,WAKT/c,EAASgQ,UAAUslB,QAAU,WACzB,KAAM,IAAItzB,OAAM,wDAUpBhC,EAASgQ,UAAUihB,QAAU,SAASriB,GACpC,GAAI2mB,GAAa92B,KAAK8N,MAAMgpB,WAAW92B,KAAK0F,MAAMujB,OAAOrY,MACzD,OAAO,IAAI5M,MAAKmM,EAAI2mB,EAAWhd,MAAQgd,EAAWrQ,SAWpDllB,EAASgQ,UAAUmhB,cAAgB,SAASviB,GAC1C,GAAI2mB,GAAa92B,KAAK8N,MAAMgpB,WAAW92B,KAAK0F,MAAMhG,KAAKkR,MACvD,OAAO,IAAI5M,MAAKmM,EAAI2mB,EAAWhd,MAAQgd,EAAWrQ,SAWpDllB,EAASgQ,UAAU6gB,UAAY,SAAS2C,GACtC,GAAI+B,GAAa92B,KAAK8N,MAAMgpB,WAAW92B,KAAK0F,MAAMujB,OAAOrY,MACzD,QAAQmkB,EAAKvuB,UAAYswB,EAAWrQ,QAAUqQ,EAAWhd,OAa3DvY,EAASgQ,UAAU+gB,gBAAkB,SAASyC,GAC5C,GAAI+B,GAAa92B,KAAK8N,MAAMgpB,WAAW92B,KAAK0F,MAAMhG,KAAKkR,MACvD,QAAQmkB,EAAKvuB,UAAYswB,EAAWrQ,QAAUqQ,EAAWhd,OAQ3DvY,EAASgQ,UAAUsjB,gBAAkB,WACJ,GAA3B70B,KAAK0N,QAAQ+jB,WACfzxB,KAAK+2B,mBAGL/2B,KAAK20B,mBASTpzB,EAASgQ,UAAUwlB,iBAAmB,WACpC,GAAI3kB,GAAKpS,IAETA,MAAK20B,kBAEL30B,KAAKg3B,UAAY,WACf,MAA6B,IAAzB5kB,EAAG1E,QAAQ+jB,eAEbrf,GAAGuiB,uBAIDviB,EAAG8a,IAAIxtB,OAEJ0S,EAAG8a,IAAIxtB,KAAK2c,aAAejK,EAAG1M,MAAMuxB,WACpC7kB,EAAG8a,IAAIxtB,KAAKgiB,cAAgBtP,EAAG1M,MAAMwxB,cACxC9kB,EAAG1M,MAAMuxB,UAAY7kB,EAAG8a,IAAIxtB,KAAK2c,YACjCjK,EAAG1M,MAAMwxB,WAAa9kB,EAAG8a,IAAIxtB,KAAKgiB,aAElCtP,EAAGyY,KAAK,aAMdlqB,EAAK4H,iBAAiBrB,OAAQ,SAAUlH,KAAKg3B,WAE7Ch3B,KAAKm3B,WAAaC,YAAYp3B,KAAKg3B,UAAW,MAOhDz1B,EAASgQ,UAAUojB,gBAAkB,WAC/B30B,KAAKm3B,aACPpH,cAAc/vB,KAAKm3B,YACnBn3B,KAAKm3B,WAAajxB,QAIpBvF,EAAKoI,oBAAoB7B,OAAQ,SAAUlH,KAAKg3B,WAChDh3B,KAAKg3B,UAAY,MAQnBz1B,EAASgQ,UAAUuiB,SAAW,WAC5B9zB,KAAKy0B,MAAM4C,eAAgB,GAQ7B91B,EAASgQ,UAAUwiB,SAAW,WAC5B/zB,KAAKy0B,MAAM4C,eAAgB,GAQ7B91B,EAASgQ,UAAUyiB,aAAe,WAChCh0B,KAAKy0B,MAAM6C,iBAAmBt3B,KAAK0F,MAAM6uB,WAQ3ChzB,EAASgQ,UAAU0iB,QAAU,SAAU/qB,GAGrC,GAAKlJ,KAAKy0B,MAAM4C,cAAhB,CAEA,GAAIzL,GAAQ1iB,EAAMquB,QAAQC,OAEtBC,EAAez3B,KAAK03B,gBACpBC,EAAe33B,KAAK43B,cAAc53B,KAAKy0B,MAAM6C,iBAAmB1L,EAEhE+L,IAAgBF,GAClBz3B,KAAKse,WAUT/c,EAASgQ,UAAUqmB,cAAgB,SAAUrD,GAG3C,MAFAv0B,MAAK0F,MAAM6uB,UAAYA,EACvBv0B,KAAKy2B,mBACEz2B,KAAK0F,MAAM6uB,WAQpBhzB,EAASgQ,UAAUklB,iBAAmB,WAEpC,GAAIjC,GAAe5vB,KAAKmG,IAAI/K,KAAK0F,MAAM2tB,gBAAgBxiB,OAAS7Q,KAAK0F,MAAMujB,OAAOpY,OAAQ,EAc1F,OAbI2jB,IAAgBx0B,KAAK0F,MAAM8uB,eAGG,UAA5Bx0B,KAAK0N,QAAQgkB,cACf1xB,KAAK0F,MAAM6uB,WAAcC,EAAex0B,KAAK0F,MAAM8uB,cAErDx0B,KAAK0F,MAAM8uB,aAAeA,GAIxBx0B,KAAK0F,MAAM6uB,UAAY,IAAGv0B,KAAK0F,MAAM6uB,UAAY,GACjDv0B,KAAK0F,MAAM6uB,UAAYC,IAAcx0B,KAAK0F,MAAM6uB,UAAYC,GAEzDx0B,KAAK0F,MAAM6uB,WAQpBhzB,EAASgQ,UAAUmmB,cAAgB,WACjC,MAAO13B,MAAK0F,MAAM6uB,WAGpB10B,EAAOD,QAAU2B,GAKb,SAAS1B,EAAQD,EAASM,GAoB9B,QAASsB,GAASoV,EAAW7U,EAAO2L,EAAS6nB,GAC3C,GAAInjB,GAAKpS,IACTA,MAAKwxB,gBACH9iB,MAAO,KACPyW,IAAO,KAEPsM,YAAY,EAEZC,YAAa,SACb9gB,MAAO,KACPC,OAAQ,KACR8gB,UAAW,KACXC,UAAW,MAEb5xB,KAAK0N,QAAU/M,EAAKwF,cAAenG,KAAKwxB,gBAGxCxxB,KAAK6xB,QAAQjb,GAGb5W,KAAK8B,cAEL9B,KAAK8xB,MACH5E,IAAKltB,KAAKktB,IACV6E,SAAU/xB,KAAK0F,MACfssB,SACExgB,GAAIxR,KAAKwR,GAAGygB,KAAKjyB,MACjB2R,IAAK3R,KAAK2R,IAAIsgB,KAAKjyB,MACnB6qB,KAAM7qB,KAAK6qB,KAAKoH,KAAKjyB,OAEvBW,MACEuxB,KAAM,KACNC,SAAU/f,EAAGggB,UAAUH,KAAK7f,GAC5BigB,eAAgBjgB,EAAGkgB,gBAAgBL,KAAK7f,GACxCmgB,OAAQngB,EAAGogB,QAAQP,KAAK7f,GACxBqgB,aAAergB,EAAGsgB,cAAcT,KAAK7f,KAKzCpS,KAAK8N,MAAQ,GAAInM,GAAM3B,KAAK8xB,MAC5B9xB,KAAK8B,WAAW8F,KAAK5H,KAAK8N,OAC1B9N,KAAK8xB,KAAKhkB,MAAQ9N,KAAK8N,MAGvB9N,KAAK2yB,SAAW,GAAI9vB,GAAS7C,KAAK8xB,MAClC9xB,KAAK8B,WAAW8F,KAAK5H,KAAK2yB,UAC1B3yB,KAAK8xB,KAAKnxB,KAAKuxB,KAAOlyB,KAAK2yB,SAAST,KAAKD,KAAKjyB,KAAK2yB,UAGnD3yB,KAAK4yB,YAAc,GAAIvwB,GAAYrC,KAAK8xB,MACxC9xB,KAAK8B,WAAW8F,KAAK5H,KAAK4yB,aAI1B5yB,KAAK6yB,WAAa,GAAIvwB,GAAWtC,KAAK8xB,MACtC9xB,KAAK8B,WAAW8F,KAAK5H,KAAK6yB,YAG1B7yB,KAAK63B,UAAY,GAAIj1B,GAAU5C,KAAK8xB,MACpC9xB,KAAK8B,WAAW8F,KAAK5H,KAAK63B,WAE1B73B,KAAK+yB,UAAY,KACjB/yB,KAAKgzB,WAAa,KAGdtlB,GACF1N,KAAK2Z,WAAWjM,GAId6nB,GACFv1B,KAAKs1B,UAAUC,GAIbxzB,EACF/B,KAAKizB,SAASlxB,GAGd/B,KAAKse,SAlGT,GAAI1E,GAAU1Z,EAAoB,IAC9BgzB,EAAShzB,EAAoB,IAC7BS,EAAOT,EAAoB,GAC3BW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/ByB,EAAQzB,EAAoB,IAC5B2C,EAAW3C,EAAoB,IAC/BmC,EAAcnC,EAAoB,IAClCoC,EAAapC,EAAoB,IACjC0C,EAAY1C,EAAoB,GA8FpC0Z,GAAQpY,EAAQ+P,WAShB/P,EAAQ+P,UAAUsgB,QAAU,SAAUjb,GACpC5W,KAAKktB,OAELltB,KAAKktB,IAAIxtB,KAAuBkQ,SAASK,cAAc,OACvDjQ,KAAKktB,IAAI9hB,WAAuBwE,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIiG,mBAAuBvjB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAI4K,8BAAgCloB,SAASK,cAAc,OAChEjQ,KAAKktB,IAAImG,gBAAuBzjB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIoG,cAAuB1jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIqG,eAAuB3jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIkG,qBAAuBxjB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIjE,OAAuBrZ,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIjmB,KAAuB2I,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIhJ,MAAuBtU,SAASK,cAAc,OACvDjQ,KAAKktB,IAAI7lB,IAAuBuI,SAASK,cAAc,OACvDjQ,KAAKktB,IAAI/M,OAAuBvQ,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIsG,UAAuB5jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIuG,aAAuB7jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIwG,cAAuB9jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAIyG,iBAAuB/jB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAI0G,eAAuBhkB,SAASK,cAAc,OACvDjQ,KAAKktB,IAAI2G,kBAAuBjkB,SAASK,cAAc,OAEvDjQ,KAAKktB,IAAI9hB,WAAW5D,UAAsB,sBAC1CxH,KAAKktB,IAAIiG,mBAAmB3rB,UAAc,+BAC1CxH,KAAKktB,IAAI4K,8BAA8BtwB,UAAY,iCACnDxH,KAAKktB,IAAIkG,qBAAqB5rB,UAAY,iCAC1CxH,KAAKktB,IAAImG,gBAAgB7rB,UAAiB,kBAC1CxH,KAAKktB,IAAIoG,cAAc9rB,UAAmB,gBAC1CxH,KAAKktB,IAAIqG,eAAe/rB,UAAkB,iBAC1CxH,KAAKktB,IAAI7lB,IAAIG,UAA6B,eAC1CxH,KAAKktB,IAAI/M,OAAO3Y,UAA0B,kBAC1CxH,KAAKktB,IAAIjmB,KAAKO,UAA4B,UAC1CxH,KAAKktB,IAAIjE,OAAOzhB,UAA0B,UAC1CxH,KAAKktB,IAAIhJ,MAAM1c,UAA2B,UAC1CxH,KAAKktB,IAAIsG,UAAUhsB,UAAuB,aAC1CxH,KAAKktB,IAAIuG,aAAajsB,UAAoB,gBAC1CxH,KAAKktB,IAAIwG,cAAclsB,UAAmB,aAC1CxH,KAAKktB,IAAIyG,iBAAiBnsB,UAAgB,gBAC1CxH,KAAKktB,IAAI0G,eAAepsB,UAAkB,aAC1CxH,KAAKktB,IAAI2G,kBAAkBrsB,UAAe,gBAE1CxH,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAI9hB,YACnCpL,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAIiG,oBACnCnzB,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAI4K,+BACnC93B,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAImG,iBACnCrzB,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAIoG,eACnCtzB,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAIqG,gBACnCvzB,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAI7lB,KACnCrH,KAAKktB,IAAIxtB,KAAKoQ,YAAY9P,KAAKktB,IAAI/M,QAEnCngB,KAAKktB,IAAI4K,8BAA8BhoB,YAAY9P,KAAKktB,IAAIkG,sBAC5DpzB,KAAKktB,IAAImG,gBAAgBvjB,YAAY9P,KAAKktB,IAAIjE,QAC9CjpB,KAAKktB,IAAIoG,cAAcxjB,YAAY9P,KAAKktB,IAAIjmB,MAC5CjH,KAAKktB,IAAIqG,eAAezjB,YAAY9P,KAAKktB,IAAIhJ,OAE7ClkB,KAAKktB,IAAImG,gBAAgBvjB,YAAY9P,KAAKktB,IAAIsG,WAC9CxzB,KAAKktB,IAAImG,gBAAgBvjB,YAAY9P,KAAKktB,IAAIuG,cAC9CzzB,KAAKktB,IAAIoG,cAAcxjB,YAAY9P,KAAKktB,IAAIwG,eAC5C1zB,KAAKktB,IAAIoG,cAAcxjB,YAAY9P,KAAKktB,IAAIyG,kBAC5C3zB,KAAKktB,IAAIqG,eAAezjB,YAAY9P,KAAKktB,IAAI0G,gBAC7C5zB,KAAKktB,IAAIqG,eAAezjB,YAAY9P,KAAKktB,IAAI2G,mBAE7C7zB,KAAKwR,GAAG,cAAexR,KAAKse,OAAO2T,KAAKjyB,OACxCA,KAAKwR,GAAG,SAAUxR,KAAKse,OAAO2T,KAAKjyB,OACnCA,KAAKwR,GAAG,QAASxR,KAAK8zB,SAAS7B,KAAKjyB,OACpCA,KAAKwR,GAAG,QAASxR,KAAK+zB,SAAS9B,KAAKjyB,OACpCA,KAAKwR,GAAG,YAAaxR,KAAKg0B,aAAa/B,KAAKjyB,OAC5CA,KAAKwR,GAAG,OAAQxR,KAAKi0B,QAAQhC,KAAKjyB,OAIlCA,KAAKyD,OAASyvB,EAAOlzB,KAAKktB,IAAIxtB,MAC5Bw0B,iBAAiB,IAEnBl0B,KAAKm0B,YAEL,IAAI/hB,GAAKpS,KACLo0B,GACF,QAAS,QACT,MAAO,YAAa,OACpB,YAAa,OAAQ,UACrB,aAAc,iBA8BhB,IA5BAA,EAAOnsB,QAAQ,SAAUiB,GACvB,GAAIR,GAAW,WACb,GAAI2rB,IAAQnrB,GAAO+I,OAAOtM,MAAM4L,UAAU+iB,MAAM/zB,KAAK6E,UAAW,GAChEgN,GAAGyY,KAAK1U,MAAM/D,EAAIiiB,GAEpBjiB,GAAG3O,OAAO+N,GAAGtI,EAAOR,GACpB0J,EAAG+hB,UAAUjrB,GAASR,IAIxB1I,KAAK0F,OACHhG,QACA0L,cACAioB,mBACAC,iBACAC,kBACAtK,UACAhiB,QACAid,SACA7c,OACA8Y,UACA9U,UACAkpB,UAAW,EACXC,aAAc,GAEhBx0B,KAAKy0B,UAGA7d,EAAW,KAAM,IAAIrT,OAAM,wBAChCqT,GAAU9G,YAAY9P,KAAKktB,IAAIxtB,OAMjC8B,EAAQ+P,UAAUmjB,QAAU,WAE1B10B,KAAK4U,QAGL5U,KAAK2R,MAGL3R,KAAK20B,kBAGD30B,KAAKktB,IAAIxtB,KAAK8J,YAChBxJ,KAAKktB,IAAIxtB,KAAK8J,WAAWgG,YAAYxP,KAAKktB,IAAIxtB,MAEhDM,KAAKktB,IAAM,IAGX,KAAK,GAAIhkB,KAASlJ,MAAKm0B,UACjBn0B,KAAKm0B,UAAU3uB,eAAe0D,UACzBlJ,MAAKm0B,UAAUjrB,EAG1BlJ,MAAKm0B,UAAY,KACjBn0B,KAAKyD,OAAS,KAGdzD,KAAK8B,WAAWmG,QAAQ,SAAU2sB,GAChCA,EAAUF,YAGZ10B,KAAK8xB,KAAO,MA4BdtwB,EAAQ+P,UAAUoI,WAAa,SAAUjM,GACvC,GAAIA,EAAS,CAEX,GAAIP,IAAU,QAAS,SAAU,YAAa,YAAa,aAAc,QAAS,MAAO,cACzFxM,GAAK8E,gBAAgB0H,EAAQnN,KAAK0N,QAASA,GAG3C1N,KAAK60B,kBASP,GALA70B,KAAK8B,WAAWmG,QAAQ,SAAU2sB,GAChCA,EAAUjb,WAAWjM,KAInBA,GAAWA,EAAQgG,MACrB,KAAM,IAAInQ,OAAM,wEAIlBvD,MAAKse,UAOP9c,EAAQ+P,UAAUujB,cAAgB,SAAUC,GAC1C,IAAK/0B,KAAK6yB,WACR,KAAM,IAAItvB,OAAM,yDAGlBvD,MAAK6yB,WAAWiC,cAAcC,IAOhCvzB,EAAQ+P,UAAUyjB,cAAgB,WAChC,IAAKh1B,KAAK6yB,WACR,KAAM,IAAItvB,OAAM,yDAGlB,OAAOvD,MAAK6yB,WAAWmC,iBAOzBxzB,EAAQ+P,UAAU0hB,SAAW,SAASlxB,GACpC,GAGIkzB,GAHAC,EAAiC,MAAlBl1B,KAAK+yB,SAwBxB,IAhBEkC,EAJGlzB,EAGIA,YAAiBlB,IAAWkB,YAAiBjB,GACvCiB,EAIA,GAAIlB,GAAQkB,GACvBuE,MACEoI,MAAO,OACPyW,IAAK,UAVI,KAgBfnlB,KAAK+yB,UAAYkC,EACjBj1B,KAAK63B,WAAa73B,KAAK63B,UAAU5E,SAASgC,GAEtCC,IAAgB,SAAWl1B,MAAK0N,SAAW,OAAS1N,MAAK0N,SAAU,CACrE1N,KAAKm1B,KAEL,IAAIzmB,GAAS,SAAW1O,MAAK0N,QAAW/M,EAAK0F,QAAQrG,KAAK0N,QAAQgB,MAAO,QAAU,KAC/EyW,EAAS,OAASnlB,MAAK0N,QAAa/M,EAAK0F,QAAQrG,KAAK0N,QAAQyX,IAAK,QAAU,IAEjFnlB,MAAKo1B,UAAU1mB,EAAOyW,KAQ1B3jB,EAAQ+P,UAAU+jB,UAAY,SAASC,GAErC,GAAIN,EAKFA,GAJGM,EAGIA,YAAkB10B,IAAW00B,YAAkBz0B,GACzCy0B,EAIA,GAAI10B,GAAQ00B,GAPZ,KAUfv1B,KAAKgzB,WAAaiC,EAClBj1B,KAAK63B,UAAUvC,UAAUL,IAa3BzzB,EAAQ+P,UAAUqD,MAAQ,SAAS4gB,KAE5BA,GAAQA,EAAKzzB,QAChB/B,KAAKizB,SAAS,QAIXuC,GAAQA,EAAKD,SAChBv1B,KAAKs1B,UAAU,QAIZE,GAAQA,EAAK9nB,WAChB1N,KAAK8B,WAAWmG,QAAQ,SAAU2sB,GAChCA,EAAUjb,WAAWib,EAAUpD,kBAGjCxxB,KAAK2Z,WAAW3Z,KAAKwxB,kBAOzBhwB,EAAQ+P,UAAU4jB,IAAM,WAEtB,GAAIM,GAAYz1B,KAAK01B,eAGjBhnB,EAAQ+mB,EAAU1qB,IAClBoa,EAAMsQ,EAAUhpB,GACpB,IAAa,MAATiC,GAAwB,MAAPyW,EAAa,CAChC,GAAI2K,GAAY3K,EAAI3e,UAAYkI,EAAMlI,SACtB,IAAZspB,IAEFA,EAAW,OAEbphB,EAAQ,GAAI1K,MAAK0K,EAAMlI,UAAuB,IAAXspB,GACnC3K,EAAM,GAAInhB,MAAKmhB,EAAI3e,UAAuB,IAAXspB,IAInB,OAAVphB,GAA0B,OAARyW,IAItBnlB,KAAK8N,MAAM+iB,SAASniB,EAAOyW,IAS7B3jB,EAAQ+P,UAAUmkB,aAAe,WAE/B,GAAI3C,GAAY/yB,KAAK+yB,UACnBhoB,EAAM,KACN0B,EAAM,IAER,IAAIsmB,EAAW,CAEb,GAAI6C,GAAU7C,EAAUhoB,IAAI,QAC5BA,GAAM6qB,EAAUj1B,EAAK0F,QAAQuvB,EAAQlnB,MAAO,QAAQlI,UAAY,IAKhE,IAAIqvB,GAAe9C,EAAUtmB,IAAI,QAC7BopB,KACFppB,EAAM9L,EAAK0F,QAAQwvB,EAAannB,MAAO,QAAQlI,UAEjD,IAAIsvB,GAAa/C,EAAUtmB,IAAI,MAC3BqpB,KAEArpB,EADS,MAAPA,EACI9L,EAAK0F,QAAQyvB,EAAW3Q,IAAK,QAAQ3e,UAGrC5B,KAAK6H,IAAIA,EAAK9L,EAAK0F,QAAQyvB,EAAW3Q,IAAK,QAAQ3e,YAK/D,OACEuE,IAAa,MAAPA,EAAe,GAAI/G,MAAK+G,GAAO,KACrC0B,IAAa,MAAPA,EAAe,GAAIzI,MAAKyI,GAAO,OAiBzCjL,EAAQ+P,UAAU6jB,UAAY,SAAS1mB,EAAOyW,GAC5C,GAAwB,GAApB/f,UAAUC,OAAa,CACzB,GAAIyI,GAAQ1I,UAAU,EACtBpF,MAAK8N,MAAM+iB,SAAS/iB,EAAMY,MAAOZ,EAAMqX,SAGvCnlB,MAAK8N,MAAM+iB,SAASniB,EAAOyW,IAQ/B3jB,EAAQ+P,UAAU0kB,UAAY,WAC5B,GAAInoB,GAAQ9N,KAAK8N,MAAMooB,UACvB,QACExnB,MAAO,GAAI1K,MAAK8J,EAAMY,OACtByW,IAAK,GAAInhB,MAAK8J,EAAMqX,OAQxB3jB,EAAQ+P,UAAU+M,OAAS,WACzB,GAAI6X,IAAU,EACZzoB,EAAU1N,KAAK0N,QACfhI,EAAQ1F,KAAK0F,MACbwnB,EAAMltB,KAAKktB,GAEb,IAAKA,EAAL,CAGAA,EAAIxtB,KAAK8H,UAAY,qBAAuBkG,EAAQgkB,YAGpDxE,EAAIxtB,KAAK8Q,MAAMmhB,UAAYhxB,EAAK8I,OAAOK,OAAO4D,EAAQikB,UAAW,IACjEzE,EAAIxtB,KAAK8Q,MAAMohB,UAAYjxB,EAAK8I,OAAOK,OAAO4D,EAAQkkB,UAAW,IACjE1E,EAAIxtB,KAAK8Q,MAAMI,MAAQjQ,EAAK8I,OAAOK,OAAO4D,EAAQkD,MAAO,IAGzDlL,EAAM2F,OAAOpE,MAAUimB,EAAImG,gBAAgB9F,YAAcL,EAAImG,gBAAgBhX,aAAe,EAC5F3W,EAAM2F,OAAO6Y,MAASxe,EAAM2F,OAAOpE,KACnCvB,EAAM2F,OAAOhE,KAAU6lB,EAAImG,gBAAgB5F,aAAeP,EAAImG,gBAAgB3R,cAAgB,EAC9Fhc,EAAM2F,OAAO8U,OAASza,EAAM2F,OAAOhE,GACnC,IAAI+uB,GAAkBlJ,EAAIxtB,KAAK+tB,aAAeP,EAAIxtB,KAAKgiB,aACnD2U,EAAkBnJ,EAAIxtB,KAAK6tB,YAAcL,EAAIxtB,KAAK2c,WAItD3W,GAAMujB,OAAOpY,OAASqc,EAAIjE,OAAOwE,aACjC/nB,EAAMuB,KAAK4J,OAAWqc,EAAIjmB,KAAKwmB,aAC/B/nB,EAAMwe,MAAMrT,OAAUqc,EAAIhJ,MAAMuJ,aAChC/nB,EAAM2B,IAAIwJ,OAAYqc,EAAI7lB,IAAIqa,eAAoBhc,EAAM2F,OAAOhE,IAC/D3B,EAAMya,OAAOtP,OAASqc,EAAI/M,OAAOuB,eAAiBhc,EAAM2F,OAAO8U,MAM/D,IAAIqN,GAAgB5oB,KAAK6H,IAAI/G,EAAMuB,KAAK4J,OAAQnL,EAAMujB,OAAOpY,OAAQnL,EAAMwe,MAAMrT,QAC7EylB,EAAa5wB,EAAM2B,IAAIwJ,OAAS2c,EAAgB9nB,EAAMya,OAAOtP,OAC/DulB,EAAmB1wB,EAAM2F,OAAOhE,IAAM3B,EAAM2F,OAAO8U,MACrD+M,GAAIxtB,KAAK8Q,MAAMK,OAASlQ,EAAK8I,OAAOK,OAAO4D,EAAQmD,OAAQylB,EAAa,MAGxE5wB,EAAMhG,KAAKmR,OAASqc,EAAIxtB,KAAK+tB,aAC7B/nB,EAAM0F,WAAWyF,OAASnL,EAAMhG,KAAKmR,OAASulB,CAC9C,IAAIG,GAAkB7wB,EAAMhG,KAAKmR,OAASnL,EAAM2B,IAAIwJ,OAASnL,EAAMya,OAAOtP,OACxEulB,CACF1wB,GAAM2tB,gBAAgBxiB,OAAU0lB,EAChC7wB,EAAM4tB,cAAcziB,OAAY0lB,EAChC7wB,EAAM6tB,eAAe1iB,OAAWnL,EAAM4tB,cAAcziB,OAGpDnL,EAAMhG,KAAKkR,MAAQsc,EAAIxtB,KAAK6tB,YAC5B7nB,EAAM0F,WAAWwF,MAAQlL,EAAMhG,KAAKkR,MAAQylB,EAC5C3wB,EAAMuB,KAAK2J,MAAQsc,EAAIoG,cAAcjX,cAAkB3W,EAAM2F,OAAOpE,KACpEvB,EAAM4tB,cAAc1iB,MAAQlL,EAAMuB,KAAK2J,MACvClL,EAAMwe,MAAMtT,MAAQsc,EAAIqG,eAAelX,cAAgB3W,EAAM2F,OAAO6Y,MACpExe,EAAM6tB,eAAe3iB,MAAQlL,EAAMwe,MAAMtT,KACzC,IAAI4lB,GAAc9wB,EAAMhG,KAAKkR,MAAQlL,EAAMuB,KAAK2J,MAAQlL,EAAMwe,MAAMtT,MAAQylB,CAC5E3wB,GAAMujB,OAAOrY,MAAiB4lB,EAC9B9wB,EAAM2tB,gBAAgBziB,MAAQ4lB,EAC9B9wB,EAAM2B,IAAIuJ,MAAoB4lB,EAC9B9wB,EAAMya,OAAOvP,MAAiB4lB,EAG9BtJ,EAAI9hB,WAAWoF,MAAMK,OAAmBnL,EAAM0F,WAAWyF,OAAS,KAClEqc,EAAIiG,mBAAmB3iB,MAAMK,OAAWnL,EAAM0F,WAAWyF,OAAS,KAClEqc,EAAI4K,8BAA8BtnB,MAAMK,OAASnL,EAAM2tB,gBAAgBxiB,OAAS,KAChFqc,EAAImG,gBAAgB7iB,MAAMK,OAAcnL,EAAM2tB,gBAAgBxiB,OAAS,KACvEqc,EAAIoG,cAAc9iB,MAAMK,OAAgBnL,EAAM4tB,cAAcziB,OAAS,KACrEqc,EAAIqG,eAAe/iB,MAAMK,OAAenL,EAAM6tB,eAAe1iB,OAAS,KAEtEqc,EAAI9hB,WAAWoF,MAAMI,MAAmBlL,EAAM0F,WAAWwF,MAAQ,KACjEsc,EAAIiG,mBAAmB3iB,MAAMI,MAAWlL,EAAM2tB,gBAAgBziB,MAAQ,KACtEsc,EAAI4K,8BAA8BtnB,MAAMI,MAASlL,EAAM0F,WAAWwF,MAAQ,KAC1Esc,EAAIkG,qBAAqB5iB,MAAMI,MAASlL,EAAM0F,WAAWwF,MAAQ,KACjEsc,EAAImG,gBAAgB7iB,MAAMI,MAAclL,EAAMujB,OAAOrY,MAAQ,KAC7Dsc,EAAI7lB,IAAImJ,MAAMI,MAA0BlL,EAAM2B,IAAIuJ,MAAQ,KAC1Dsc,EAAI/M,OAAO3P,MAAMI,MAAuBlL,EAAMya,OAAOvP,MAAQ,KAG7Dsc,EAAI9hB,WAAWoF,MAAMvJ,KAAiB,IACtCimB,EAAI9hB,WAAWoF,MAAMnJ,IAAiB,IACtC6lB,EAAIiG,mBAAmB3iB,MAAMvJ,KAASvB,EAAMuB,KAAK2J,MAAQ,KACzDsc,EAAIiG,mBAAmB3iB,MAAMnJ,IAAS,IACtC6lB,EAAI4K,8BAA8BtnB,MAAMvJ,KAAO,IAC/CimB,EAAI4K,8BAA8BtnB,MAAMnJ,IAAO3B,EAAM2B,IAAIwJ,OAAS,KAClEqc,EAAImG,gBAAgB7iB,MAAMvJ,KAAYvB,EAAMuB,KAAK2J,MAAQ,KACzDsc,EAAImG,gBAAgB7iB,MAAMnJ,IAAY3B,EAAM2B,IAAIwJ,OAAS,KACzDqc,EAAIoG,cAAc9iB,MAAMvJ,KAAc,IACtCimB,EAAIoG,cAAc9iB,MAAMnJ,IAAc3B,EAAM2B,IAAIwJ,OAAS,KACzDqc,EAAIqG,eAAe/iB,MAAMvJ,KAAcvB,EAAMuB,KAAK2J,MAAQlL,EAAMujB,OAAOrY,MAAS,KAChFsc,EAAIqG,eAAe/iB,MAAMnJ,IAAa3B,EAAM2B,IAAIwJ,OAAS,KACzDqc,EAAI7lB,IAAImJ,MAAMvJ,KAAwBvB,EAAMuB,KAAK2J,MAAQ,KACzDsc,EAAI7lB,IAAImJ,MAAMnJ,IAAwB,IACtC6lB,EAAI/M,OAAO3P,MAAMvJ,KAAqBvB,EAAMuB,KAAK2J,MAAQ,KACzDsc,EAAI/M,OAAO3P,MAAMnJ,IAAsB3B,EAAM2B,IAAIwJ,OAASnL,EAAM2tB,gBAAgBxiB,OAAU,KAI1F7Q,KAAKy2B,kBAGL,IAAIhQ,GAASzmB,KAAK0F,MAAM6uB,SACG,WAAvB7mB,EAAQgkB,cACVjL,GAAU7hB,KAAK6H,IAAIzM,KAAK0F,MAAM2tB,gBAAgBxiB,OAAS7Q,KAAK0F,MAAMujB,OAAOpY,OACrE7Q,KAAK0F,MAAM2F,OAAOhE,IAAMrH,KAAK0F,MAAM2F,OAAO8U,OAAQ,IAExD+M,EAAIjE,OAAOzY,MAAMvJ,KAAO,IACxBimB,EAAIjE,OAAOzY,MAAMnJ,IAAOof,EAAS,KACjCyG,EAAIkG,qBAAqB5iB,MAAMvJ,KAAO,IACtCimB,EAAIkG,qBAAqB5iB,MAAMnJ,IAAOof,EAAS,KAC/CyG,EAAIjmB,KAAKuJ,MAAMvJ,KAAS,IACxBimB,EAAIjmB,KAAKuJ,MAAMnJ,IAASof,EAAS,KACjCyG,EAAIhJ,MAAM1T,MAAMvJ,KAAQ,IACxBimB,EAAIhJ,MAAM1T,MAAMnJ,IAAQof,EAAS,IAGjC,IAAIiQ,GAAwC,GAAxB12B,KAAK0F,MAAM6uB,UAAiB,SAAW,GACvDoC,EAAmB32B,KAAK0F,MAAM6uB,WAAav0B,KAAK0F,MAAM8uB,aAAe,SAAW,EACpFtH,GAAIsG,UAAUhjB,MAAMomB,WAAsBF,EAC1CxJ,EAAIuG,aAAajjB,MAAMomB,WAAmBD,EAC1CzJ,EAAIwG,cAAcljB,MAAMomB,WAAkBF,EAC1CxJ,EAAIyG,iBAAiBnjB,MAAMomB,WAAeD,EAC1CzJ,EAAI0G,eAAepjB,MAAMomB,WAAiBF,EAC1CxJ,EAAI2G,kBAAkBrjB,MAAMomB,WAAcD,EAG1C32B,KAAK8B,WAAWmG,QAAQ,SAAU2sB,GAChCuB,EAAUvB,EAAUtW,UAAY6X,IAE9BA,GAEFn2B,KAAKse,WAWT9c,EAAQ+P,UAAUihB,QAAU,SAASriB,GACnC,GAAI2mB,GAAa92B,KAAK8N,MAAMgpB,WAAW92B,KAAK0F,MAAMujB,OAAOrY,MACzD,OAAO,IAAI5M,MAAKmM,EAAI2mB,EAAWhd,MAAQgd,EAAWrQ,SAYpDjlB,EAAQ+P,UAAUmhB,cAAgB,SAASviB,GACzC,GAAI2mB,GAAa92B,KAAK8N,MAAMgpB,WAAW92B,KAAK0F,MAAMhG,KAAKkR,MACvD,OAAO,IAAI5M,MAAKmM,EAAI2mB,EAAWhd,MAAQgd,EAAWrQ,SAWpDjlB,EAAQ+P,UAAU6gB,UAAY,SAAS2C,GACrC,GAAI+B,GAAa92B,KAAK8N,MAAMgpB,WAAW92B,KAAK0F,MAAMujB,OAAOrY,MACzD,QAAQmkB,EAAKvuB,UAAYswB,EAAWrQ,QAAUqQ,EAAWhd,OAa3DtY,EAAQ+P,UAAU+gB,gBAAkB,SAASyC,GAC3C,GAAI+B,GAAa92B,KAAK8N,MAAMgpB,WAAW92B,KAAK0F,MAAMhG,KAAKkR,MACvD,QAAQmkB,EAAKvuB,UAAYswB,EAAWrQ,QAAUqQ,EAAWhd,OAO3DtY,EAAQ+P,UAAUsjB,gBAAkB,WACH,GAA3B70B,KAAK0N,QAAQ+jB,WACfzxB,KAAK+2B,mBAGL/2B,KAAK20B,mBASTnzB,EAAQ+P,UAAUwlB,iBAAmB,WACnC,GAAI3kB,GAAKpS,IAETA,MAAK20B,kBAEL30B,KAAKg3B,UAAY,WACf,MAA6B,IAAzB5kB,EAAG1E,QAAQ+jB,eAEbrf,GAAGuiB,uBAIDviB,EAAG8a,IAAIxtB,OAEJ0S,EAAG8a,IAAIxtB,KAAK2c,aAAejK,EAAG1M,MAAMuxB,WACtC7kB,EAAG8a,IAAIxtB,KAAKgiB,cAAgBtP,EAAG1M,MAAMwxB,cACtC9kB,EAAG1M,MAAMuxB,UAAY7kB,EAAG8a,IAAIxtB,KAAK2c,YACjCjK,EAAG1M,MAAMwxB,WAAa9kB,EAAG8a,IAAIxtB,KAAKgiB,aAElCtP,EAAGyY,KAAK,aAMdlqB,EAAK4H,iBAAiBrB,OAAQ,SAAUlH,KAAKg3B,WAE7Ch3B,KAAKm3B,WAAaC,YAAYp3B,KAAKg3B,UAAW,MAOhDx1B,EAAQ+P,UAAUojB,gBAAkB,WAC9B30B,KAAKm3B,aACPpH,cAAc/vB,KAAKm3B,YACnBn3B,KAAKm3B,WAAajxB,QAIpBvF,EAAKoI,oBAAoB7B,OAAQ,SAAUlH,KAAKg3B,WAChDh3B,KAAKg3B,UAAY,MAQnBx1B,EAAQ+P,UAAUuiB,SAAW,WAC3B9zB,KAAKy0B,MAAM4C,eAAgB,GAQ7B71B,EAAQ+P,UAAUwiB,SAAW,WAC3B/zB,KAAKy0B,MAAM4C,eAAgB,GAQ7B71B,EAAQ+P,UAAUyiB,aAAe,WAC/Bh0B,KAAKy0B,MAAM6C,iBAAmBt3B,KAAK0F,MAAM6uB,WAQ3C/yB,EAAQ+P,UAAU0iB,QAAU,SAAU/qB,GAGpC,GAAKlJ,KAAKy0B,MAAM4C,cAAhB,CAEA,GAAIzL,GAAQ1iB,EAAMquB,QAAQC,OAEtBC,EAAez3B,KAAK03B,gBACpBC,EAAe33B,KAAK43B,cAAc53B,KAAKy0B,MAAM6C,iBAAmB1L,EAEhE+L,IAAgBF,GAClBz3B,KAAKse,WAUT9c,EAAQ+P,UAAUqmB,cAAgB,SAAUrD,GAG1C,MAFAv0B,MAAK0F,MAAM6uB,UAAYA,EACvBv0B,KAAKy2B,mBACEz2B,KAAK0F,MAAM6uB,WAQpB/yB,EAAQ+P,UAAUklB,iBAAmB,WAEnC,GAAIjC,GAAe5vB,KAAKmG,IAAI/K,KAAK0F,MAAM2tB,gBAAgBxiB,OAAS7Q,KAAK0F,MAAMujB,OAAOpY,OAAQ,EAc1F,OAbI2jB,IAAgBx0B,KAAK0F,MAAM8uB,eAGG,UAA5Bx0B,KAAK0N,QAAQgkB,cACf1xB,KAAK0F,MAAM6uB,WAAcC,EAAex0B,KAAK0F,MAAM8uB,cAErDx0B,KAAK0F,MAAM8uB,aAAeA,GAIxBx0B,KAAK0F,MAAM6uB,UAAY,IAAGv0B,KAAK0F,MAAM6uB,UAAY,GACjDv0B,KAAK0F,MAAM6uB,UAAYC,IAAcx0B,KAAK0F,MAAM6uB,UAAYC,GAEzDx0B,KAAK0F,MAAM6uB,WAQpB/yB,EAAQ+P,UAAUmmB,cAAgB,WAChC,MAAO13B,MAAK0F,MAAM6uB,WAGpB10B,EAAOD,QAAU4B,GAKb,SAAS3B,GA4Bb,QAAS6B,GAASgN,EAAOyW,EAAK4S,EAAaxB,EAAiByB,GAE1Dh4B,KAAKi4B,QAAU,EAEfj4B,KAAKk4B,WAAY,EACjBl4B,KAAKm4B,UAAY,EACjBn4B,KAAKglB,KAAO,EACZhlB,KAAK8Z,MAAQ,EAEb9Z,KAAKo4B,YACLp4B,KAAKq4B,UAELr4B,KAAKs4B,YAAc,EAAO,EAAM,EAAI,IACpCt4B,KAAKu4B,YAAc,IAAO,GAAM,EAAI,GAEpCv4B,KAAK6wB,SAASniB,EAAOyW,EAAK4S,EAAaxB,EAAiByB,GAe1Dt2B,EAAS6P,UAAUsf,SAAW,SAASniB,EAAOyW,EAAK4S,EAAaxB,EAAiByB,GAC/Eh4B,KAAKwwB,OAAS9hB,EACd1O,KAAKywB,KAAOtL,EAERzW,GAASyW,IACXnlB,KAAKwwB,OAAS9hB,EAAQ,IACtB1O,KAAKywB,KAAOtL,EAAM,GAGhBnlB,KAAKk4B,WACPl4B,KAAKw4B,eAAeT,EAAaxB,EAAiByB,GAEpDh4B,KAAKy4B,YAOP/2B,EAAS6P,UAAUinB,eAAiB,SAAST,EAAaxB,GAExD,GAAI7lB,GAAO1Q,KAAKywB,KAAOzwB,KAAKwwB,OACxBkI,EAAkB,IAAPhoB,EACXioB,EAAmBZ,GAAeW,EAAWnC,GAC7CqC,EAAmBh0B,KAAK+lB,MAAM/lB,KAAKgK,IAAI8pB,GAAU9zB,KAAKqsB,MAEtD4H,EAAe,GACfC,EAAkBl0B,KAAKusB,IAAI,GAAGyH,GAE9BlqB,EAAQ,CACW,GAAnBkqB,IACFlqB,EAAQkqB,EAIV,KAAK,GADDG,IAAgB,EACX7zB,EAAIwJ,EAAO9J,KAAK+iB,IAAIziB,IAAMN,KAAK+iB,IAAIiR,GAAmB1zB,IAAK,CAClE4zB,EAAkBl0B,KAAKusB,IAAI,GAAGjsB,EAC9B,KAAK,GAAIyjB,GAAI,EAAGA,EAAI3oB,KAAKu4B,WAAWlzB,OAAQsjB,IAAK,CAC/C,GAAIqQ,GAAWF,EAAkB94B,KAAKu4B,WAAW5P,EACjD,IAAIqQ,GAAYL,EAAkB,CAChCI,GAAgB,EAChBF,EAAelQ,CACf;EAGJ,GAAqB,GAAjBoQ,EACF,MAGJ/4B,KAAKm4B,UAAYU,EACjB74B,KAAK8Z,MAAQgf,EACb94B,KAAKglB,KAAO8T,EAAkB94B,KAAKu4B,WAAWM,IAOhDn3B,EAAS6P,UAAU0nB,MAAQ,WACzBj5B,KAAKy4B,YAOP/2B,EAAS6P,UAAUknB,SAAW,WAC5B,GAAIS,GAAYl5B,KAAKwwB,OAAUxwB,KAAK8Z,MAAQ9Z,KAAKu4B,WAAWv4B,KAAKm4B,WAC7DgB,EAAUn5B,KAAKywB,KAAQzwB,KAAK8Z,MAAQ9Z,KAAKu4B,WAAWv4B,KAAKm4B,UAE7Dn4B,MAAKq4B,UAAYr4B,KAAKo5B,aAAaD,GACnCn5B,KAAKo4B,YAAcp4B,KAAKo5B,aAAaF,GACrCl5B,KAAKq5B,YAAcr5B,KAAKq4B,UAAYr4B,KAAKo4B,YAEzCp4B,KAAKi4B,QAAUj4B,KAAKq4B,WAItB32B,EAAS6P,UAAU6nB,aAAe,SAASvyB,GACzC,GAAIyyB,GAAUzyB,EAASA,GAAS7G,KAAK8Z,MAAQ9Z,KAAKu4B,WAAWv4B,KAAKm4B,WAClE,OAAItxB,IAAS7G,KAAK8Z,MAAQ9Z,KAAKu4B,WAAWv4B,KAAKm4B,YAAc,GAAOn4B,KAAK8Z,MAAQ9Z,KAAKu4B,WAAWv4B,KAAKm4B,WAC7FmB,EAAWt5B,KAAK8Z,MAAQ9Z,KAAKu4B,WAAWv4B,KAAKm4B,WAG7CmB,GASX53B,EAAS6P,UAAUgoB,QAAU,WAC3B,MAAQv5B,MAAKi4B,SAAWj4B,KAAKo4B,aAM/B12B,EAAS6P,UAAU2T,KAAO,WACxB,GAAIgK,GAAOlvB,KAAKi4B,OAChBj4B,MAAKi4B,SAAWj4B,KAAKglB,KAGjBhlB,KAAKi4B,SAAW/I,IAClBlvB,KAAKi4B,QAAUj4B,KAAKywB,OAOxB/uB,EAAS6P,UAAUioB,SAAW,WAC5Bx5B,KAAKi4B,SAAWj4B,KAAKglB,KACrBhlB,KAAKq4B,WAAar4B,KAAKglB,KACvBhlB,KAAKq5B,YAAcr5B,KAAKq4B,UAAYr4B,KAAKo4B,aAS3C12B,EAAS6P,UAAU0T,WAAa,WAE9B,IAAK,GADDqM,GAAc,GAAK1tB,OAAO5D,KAAKi4B,SAAS3G,YAAY,GAC/CpsB,EAAIosB,EAAYjsB,OAAO,EAAGH,EAAI,EAAGA,IAAK,CAC7C,GAAsB,KAAlBosB,EAAYpsB,GAGX,CAAA,GAAsB,KAAlBosB,EAAYpsB,IAA+B,KAAlBosB,EAAYpsB,GAAW,CACvDosB,EAAcA,EAAYgD,MAAM,EAAEpvB,EAClC,OAGA,MAPAosB,EAAcA,EAAYgD,MAAM,EAAEpvB,GAWtC,MAAOosB,IAWT5vB,EAAS6P,UAAU2gB,KAAO,aAS1BxwB,EAAS6P,UAAUkoB,QAAU,WAC3B,MAAQz5B,MAAKi4B,SAAWj4B,KAAK8Z,MAAQ9Z,KAAKs4B,WAAWt4B,KAAKm4B,aAAe,GAG3Et4B,EAAOD,QAAU8B,GAKb,SAAS7B,EAAQD,EAASM,GAe9B,QAASyB,GAAMmwB,EAAMpkB,GACnB,GAAIgsB,GAAMl2B,IAASm2B,MAAM,GAAGC,QAAQ,GAAGC,QAAQ,GAAGC,aAAa,EAC/D95B,MAAK0O,MAAQgrB,EAAIK,QAAQzoB,IAAI,OAAQ,IAAI9K,UACzCxG,KAAKmlB,IAAMuU,EAAIK,QAAQzoB,IAAI,OAAQ,GAAG9K,UAEtCxG,KAAK8xB,KAAOA,EAGZ9xB,KAAKwxB,gBACH9iB,MAAO,KACPyW,IAAK,KACL6U,UAAW,aACXC,UAAU,EACVC,UAAU,EACVnvB,IAAK,KACL0B,IAAK,KACL0tB,QAAS,GACTC,QAAS,UAEXp6B,KAAK0N,QAAU/M,EAAKqE,UAAWhF,KAAKwxB,gBAEpCxxB,KAAK0F,OACH+uB,UAIFz0B,KAAK8xB,KAAKE,QAAQxgB,GAAG,YAAaxR,KAAKg0B,aAAa/B,KAAKjyB,OACzDA,KAAK8xB,KAAKE,QAAQxgB,GAAG,OAAaxR,KAAKi0B,QAAQhC,KAAKjyB,OACpDA,KAAK8xB,KAAKE,QAAQxgB,GAAG,UAAaxR,KAAKq6B,WAAWpI,KAAKjyB,OAGvDA,KAAK8xB,KAAKE,QAAQxgB,GAAG,OAAQxR,KAAKs6B,QAAQrI,KAAKjyB,OAG/CA,KAAK8xB,KAAKE,QAAQxgB,GAAG,aAAmBxR,KAAKu6B,cAActI,KAAKjyB,OAChEA,KAAK8xB,KAAKE,QAAQxgB,GAAG,iBAAmBxR,KAAKu6B,cAActI,KAAKjyB,OAGhEA,KAAK8xB,KAAKE,QAAQxgB,GAAG,QAASxR,KAAK8zB,SAAS7B,KAAKjyB,OACjDA,KAAK8xB,KAAKE,QAAQxgB,GAAG,QAASxR,KAAK+zB,SAAS9B,KAAKjyB,OAEjDA,KAAK2Z,WAAWjM,GAsClB,QAAS8sB,GAAmBR,GAC1B,GAAiB,cAAbA,GAA0C,YAAbA,EAC/B,KAAM,IAAIj0B,WAAU,sBAAwBi0B,EAAY,yCAqX5D,QAASS,GAAYhG,EAAOjsB,GAC1B,OACE2H,EAAGskB,EAAMiG,MAAQ/5B,EAAKmG,gBAAgB0B,GACtC4H,EAAGqkB,EAAMkG,MAAQh6B,EAAKyG,eAAeoB,IAtdzC,GAAI7H,GAAOT,EAAoB,GAC3B06B,EAAa16B,EAAoB,IACjCsD,EAAStD,EAAoB,IAC7BkC,EAAYlC,EAAoB,GAsDpCyB,GAAM4P,UAAY,GAAInP,GAkBtBT,EAAM4P,UAAUoI,WAAa,SAAUjM,GACrC,GAAIA,EAAS,CAEX,GAAIP,IAAU,YAAa,MAAO,MAAO,UAAW,UAAW,WAAY,WAC3ExM,GAAK8E,gBAAgB0H,EAAQnN,KAAK0N,QAASA,IAEvC,SAAWA,IAAW,OAASA,KAEjC1N,KAAK6wB,SAASnjB,EAAQgB,MAAOhB,EAAQyX,OAqB3CxjB,EAAM4P,UAAUsf,SAAW,SAASniB,EAAOyW,GACzC,GAAI0V,GAAU76B,KAAK86B,YAAYpsB,EAAOyW,EACtC,IAAI0V,EAAS,CACX,GAAI9oB,IACFrD,MAAO,GAAI1K,MAAKhE,KAAK0O,OACrByW,IAAK,GAAInhB,MAAKhE,KAAKmlB,KAErBnlB,MAAK8xB,KAAKE,QAAQnH,KAAK,cAAe9Y,GACtC/R,KAAK8xB,KAAKE,QAAQnH,KAAK,eAAgB9Y,KAa3CpQ,EAAM4P,UAAUupB,YAAc,SAASpsB,EAAOyW,GAC5C,GAIIiE,GAJA2R,EAAqB,MAATrsB,EAAiB/N,EAAK0F,QAAQqI,EAAO,QAAQlI,UAAYxG,KAAK0O,MAC1EssB,EAAmB,MAAP7V,EAAiBxkB,EAAK0F,QAAQ8e,EAAK,QAAQ3e,UAAcxG,KAAKmlB,IAC1E1Y,EAA2B,MAApBzM,KAAK0N,QAAQjB,IAAe9L,EAAK0F,QAAQrG,KAAK0N,QAAQjB,IAAK,QAAQjG,UAAY,KACtFuE,EAA2B,MAApB/K,KAAK0N,QAAQ3C,IAAepK,EAAK0F,QAAQrG,KAAK0N,QAAQ3C,IAAK,QAAQvE,UAAY,IAI1F,IAAIpC,MAAM22B,IAA0B,OAAbA,EACrB,KAAM,IAAIx3B,OAAM,kBAAoBmL,EAAQ,IAE9C,IAAItK,MAAM42B,IAAsB,OAAXA,EACnB,KAAM,IAAIz3B,OAAM,gBAAkB4hB,EAAM,IAyC1C,IArCa4V,EAATC,IACFA,EAASD,GAIC,OAARhwB,GACaA,EAAXgwB,IACF3R,EAAQre,EAAMgwB,EACdA,GAAY3R,EACZ4R,GAAU5R,EAGC,MAAP3c,GACEuuB,EAASvuB,IACXuuB,EAASvuB,IAOL,OAARA,GACEuuB,EAASvuB,IACX2c,EAAQ4R,EAASvuB,EACjBsuB,GAAY3R,EACZ4R,GAAU5R,EAGC,MAAPre,GACaA,EAAXgwB,IACFA,EAAWhwB,IAOU,OAAzB/K,KAAK0N,QAAQysB,QAAkB,CACjC,GAAIA,GAAUjY,WAAWliB,KAAK0N,QAAQysB,QACxB,GAAVA,IACFA,EAAU,GAEcA,EAArBa,EAASD,IACP/6B,KAAKmlB,IAAMnlB,KAAK0O,QAAWyrB,GAE9BY,EAAW/6B,KAAK0O,MAChBssB,EAASh7B,KAAKmlB,MAIdiE,EAAQ+Q,GAAWa,EAASD,GAC5BA,GAAY3R,EAAO,EACnB4R,GAAU5R,EAAO,IAMvB,GAA6B,OAAzBppB,KAAK0N,QAAQ0sB,QAAkB,CACjC,GAAIA,GAAUlY,WAAWliB,KAAK0N,QAAQ0sB,QACxB,GAAVA,IACFA,EAAU,GAEPY,EAASD,EAAYX,IACnBp6B,KAAKmlB,IAAMnlB,KAAK0O,QAAW0rB,GAE9BW,EAAW/6B,KAAK0O,MAChBssB,EAASh7B,KAAKmlB,MAIdiE,EAAS4R,EAASD,EAAYX,EAC9BW,GAAY3R,EAAO,EACnB4R,GAAU5R,EAAO,IAKvB,GAAIyR,GAAW76B,KAAK0O,OAASqsB,GAAY/6B,KAAKmlB,KAAO6V,CAKrD,OAHAh7B,MAAK0O,MAAQqsB,EACb/6B,KAAKmlB,IAAM6V,EAEJH,GAOTl5B,EAAM4P,UAAU2kB,SAAW,WACzB,OACExnB,MAAO1O,KAAK0O,MACZyW,IAAKnlB,KAAKmlB,MAUdxjB,EAAM4P,UAAUulB,WAAa,SAAUlmB,GACrC,MAAOjP,GAAMm1B,WAAW92B,KAAK0O,MAAO1O,KAAKmlB,IAAKvU,IAWhDjP,EAAMm1B,WAAa,SAAUpoB,EAAOyW,EAAKvU,GACvC,MAAa,IAATA,GAAeuU,EAAMzW,GAAS,GAE9B+X,OAAQ/X,EACRoL,MAAOlJ,GAASuU,EAAMzW,KAKtB+X,OAAQ,EACR3M,MAAO,IAUbnY,EAAM4P,UAAUyiB,aAAe,WAExBh0B,KAAK0N,QAAQusB,UAIbj6B,KAAK0F,MAAM+uB,MAAM4C,gBAEtBr3B,KAAK0F,MAAM+uB,MAAM/lB,MAAQ1O,KAAK0O,MAC9B1O,KAAK0F,MAAM+uB,MAAMtP,IAAMnlB,KAAKmlB,IAExBnlB,KAAK8xB,KAAK5E,IAAIxtB,OAChBM,KAAK8xB,KAAK5E,IAAIxtB,KAAK8Q,MAAMyZ,OAAS,UAStCtoB,EAAM4P,UAAU0iB,QAAU,SAAU/qB,GAElC,GAAKlJ,KAAK0N,QAAQusB,SAAlB,CACA,GAAID,GAAYh6B,KAAK0N,QAAQssB,SAI7B,IAHAQ,EAAkBR,GAGbh6B,KAAK0F,MAAM+uB,MAAM4C,cAAtB,CACA,GAAIzL,GAAsB,cAAboO,EAA6B9wB,EAAMquB,QAAQ0D,OAAS/xB,EAAMquB,QAAQC,OAC3E1H,EAAY9vB,KAAK0F,MAAM+uB,MAAMtP,IAAMnlB,KAAK0F,MAAM+uB,MAAM/lB,MACpDkC,EAAsB,cAAbopB,EAA6Bh6B,KAAK8xB,KAAKC,SAAS9I,OAAOrY,MAAQ5Q,KAAK8xB,KAAKC,SAAS9I,OAAOpY,OAClGqqB,GAAatP,EAAQhb,EAAQkf,CACjC9vB,MAAK86B,YAAY96B,KAAK0F,MAAM+uB,MAAM/lB,MAAQwsB,EAAWl7B,KAAK0F,MAAM+uB,MAAMtP,IAAM+V,GAC5El7B,KAAK8xB,KAAKE,QAAQnH,KAAK,eACrBnc,MAAO,GAAI1K,MAAKhE,KAAK0O,OACrByW,IAAO,GAAInhB,MAAKhE,KAAKmlB,UASzBxjB,EAAM4P,UAAU8oB,WAAa,WAEtBr6B,KAAK0N,QAAQusB,UAIbj6B,KAAK0F,MAAM+uB,MAAM4C,gBAElBr3B,KAAK8xB,KAAK5E,IAAIxtB,OAChBM,KAAK8xB,KAAK5E,IAAIxtB,KAAK8Q,MAAMyZ,OAAS,QAIpCjqB,KAAK8xB,KAAKE,QAAQnH,KAAK,gBACrBnc,MAAO,GAAI1K,MAAKhE,KAAK0O,OACrByW,IAAO,GAAInhB,MAAKhE,KAAKmlB,SAUzBxjB,EAAM4P,UAAUgpB,cAAgB,SAASrxB,GAEvC,GAAMlJ,KAAK0N,QAAQwsB,UAAYl6B,KAAK0N,QAAQusB,SAA5C,CAGA,GAAIrO,GAAQ,CAYZ,IAXI1iB,EAAM2iB,WACRD,EAAQ1iB,EAAM2iB,WAAa,IAClB3iB,EAAM4iB,SAGfF,GAAS1iB,EAAM4iB,OAAS,GAMtBF,EAAO,CAKT,GAAI9R,EAEFA,GADU,EAAR8R,EACM,EAAKA,EAAQ,EAGb,GAAK,EAAKA,EAAQ,EAI5B,IAAI2L,GAAUqD,EAAWO,YAAYn7B,KAAMkJ,GACvCkyB,EAAUX,EAAWlD,EAAQtO,OAAQjpB,KAAK8xB,KAAK5E,IAAIjE,QACnDoS,EAAcr7B,KAAKs7B,eAAeF,EAEtCp7B,MAAKu7B,KAAKzhB,EAAOuhB,GAKnBnyB,EAAMD,mBAORtH,EAAM4P,UAAUuiB,SAAW,WACzB9zB,KAAK0F,MAAM+uB,MAAM/lB,MAAQ1O,KAAK0O,MAC9B1O,KAAK0F,MAAM+uB,MAAMtP,IAAMnlB,KAAKmlB,IAC5BnlB,KAAK0F,MAAM+uB,MAAM4C,eAAgB,EACjCr3B,KAAK0F,MAAM+uB,MAAMxL,OAAS,MAO5BtnB,EAAM4P,UAAU+oB,QAAU,WACxBt6B,KAAK0F,MAAM+uB,MAAM4C,eAAgB,GAQnC11B,EAAM4P,UAAUwiB,SAAW,SAAU7qB,GAEnC,GAAMlJ,KAAK0N,QAAQwsB,UAAYl6B,KAAK0N,QAAQusB,WAE5Cj6B,KAAK0F,MAAM+uB,MAAM4C,eAAgB,EAE7BnuB,EAAMquB,QAAQiE,QAAQn2B,OAAS,GAAG,CAC/BrF,KAAK0F,MAAM+uB,MAAMxL,SACpBjpB,KAAK0F,MAAM+uB,MAAMxL,OAASwR,EAAWvxB,EAAMquB,QAAQtO,OAAQjpB,KAAK8xB,KAAK5E,IAAIjE,QAG3E,IAAInP,GAAQ,EAAI5Q,EAAMquB,QAAQzd,MAC1B2hB,EAAWz7B,KAAKs7B,eAAet7B,KAAK0F,MAAM+uB,MAAMxL,QAGhD8R,EAAWnT,SAAS6T,GAAYz7B,KAAK0F,MAAM+uB,MAAM/lB,MAAQ+sB,GAAY3hB,GACrEkhB,EAASpT,SAAS6T,GAAYz7B,KAAK0F,MAAM+uB,MAAMtP,IAAMsW,GAAY3hB,EAGrE9Z,MAAK6wB,SAASkK,EAAUC,KAU5Br5B,EAAM4P,UAAU+pB,eAAiB,SAAUF,GACzC,GAAItE,GACAkD,EAAYh6B,KAAK0N,QAAQssB,SAI7B,IAFAQ,EAAkBR,GAED,cAAbA,EAA2B,CAC7B,GAAIppB,GAAQ5Q,KAAK8xB,KAAKC,SAAS9I,OAAOrY,KAEtC,OADAkmB,GAAa92B,KAAK82B,WAAWlmB,GACtBwqB,EAAQjrB,EAAI2mB,EAAWhd,MAAQgd,EAAWrQ,OAGjD,GAAI5V,GAAS7Q,KAAK8xB,KAAKC,SAAS9I,OAAOpY,MAEvC,OADAimB,GAAa92B,KAAK82B,WAAWjmB,GACtBuqB,EAAQhrB,EAAI0mB,EAAWhd,MAAQgd,EAAWrQ,QA4BrD9kB,EAAM4P,UAAUgqB,KAAO,SAASzhB,EAAOmP,GAEvB,MAAVA,IACFA,GAAUjpB,KAAK0O,MAAQ1O,KAAKmlB,KAAO,EAIrC,IAAI4V,GAAW9R,GAAUjpB,KAAK0O,MAAQua,GAAUnP,EAC5CkhB,EAAS/R,GAAUjpB,KAAKmlB,IAAM8D,GAAUnP,CAE5C9Z,MAAK6wB,SAASkK,EAAUC,IAS1Br5B,EAAM4P,UAAUmqB,KAAO,SAAS9P,GAE9B,GAAIxC,GAAQppB,KAAKmlB,IAAMnlB,KAAK0O,MAGxBqsB,EAAW/6B,KAAK0O,MAAQ0a,EAAOwC,EAC/BoP,EAASh7B,KAAKmlB,IAAMiE,EAAOwC,CAI/B5rB,MAAK0O,MAAQqsB,EACb/6B,KAAKmlB,IAAM6V,GAObr5B,EAAM4P,UAAUmT,OAAS,SAASA,GAChC,GAAIuE,IAAUjpB,KAAK0O,MAAQ1O,KAAKmlB,KAAO,EAEnCiE,EAAOH,EAASvE,EAGhBqW,EAAW/6B,KAAK0O,MAAQ0a,EACxB4R,EAASh7B,KAAKmlB,IAAMiE,CAExBppB,MAAK6wB,SAASkK,EAAUC,IAG1Bn7B,EAAOD,QAAU+B,GAKb,SAAS9B,EAAQD,GAGrB,GAAI+7B,GAAU,IAMd/7B,GAAQg8B,aAAe,SAAS75B,GAC9BA,EAAMsS,KAAK,SAAUpP,EAAGa,GACtB,MAAOb,GAAE8L,KAAKrC,MAAQ5I,EAAEiL,KAAKrC,SASjC9O,EAAQi8B,WAAa,SAAS95B,GAC5BA,EAAMsS,KAAK,SAAUpP,EAAGa,GACtB,GAAIg2B,GAAS,OAAS72B,GAAE8L,KAAQ9L,EAAE8L,KAAKoU,IAAMlgB,EAAE8L,KAAKrC,MAChDqtB,EAAS,OAASj2B,GAAEiL,KAAQjL,EAAEiL,KAAKoU,IAAMrf,EAAEiL,KAAKrC,KAEpD,OAAOotB,GAAQC,KAenBn8B,EAAQgC,MAAQ,SAASG,EAAOgV,EAAQilB,GACtC,GAAI92B,GAAG+2B,CAEP,IAAID,EAEF,IAAK92B,EAAI,EAAG+2B,EAAOl6B,EAAMsD,OAAY42B,EAAJ/2B,EAAUA,IACzCnD,EAAMmD,GAAGmC,IAAM,IAKnB,KAAKnC,EAAI,EAAG+2B,EAAOl6B,EAAMsD,OAAY42B,EAAJ/2B,EAAUA,IAAK,CAC9C,GAAIyN,GAAO5Q,EAAMmD,EACjB,IAAiB,OAAbyN,EAAKtL,IAAc,CAErBsL,EAAKtL,IAAM0P,EAAOmlB,IAElB,GAAG,CAID,IAAK,GADDC,GAAgB,KACXxT,EAAI,EAAGyT,EAAKr6B,EAAMsD,OAAY+2B,EAAJzT,EAAQA,IAAK,CAC9C,GAAIrjB,GAAQvD,EAAM4mB,EAClB,IAAkB,OAAdrjB,EAAM+B,KAAgB/B,IAAUqN,GAAQ/S,EAAQy8B,UAAU1pB,EAAMrN,EAAOyR,EAAOpE,MAAO,CACvFwpB,EAAgB72B,CAChB,QAIiB,MAAjB62B,IAEFxpB,EAAKtL,IAAM80B,EAAc90B,IAAM80B,EAActrB,OAASkG,EAAOpE,KAAK2P,gBAE7D6Z,MAYfv8B,EAAQ08B,QAAU,SAASv6B,EAAOgV,GAChC,GAAI7R,GAAG+2B,CAGP,KAAK/2B,EAAI,EAAG+2B,EAAOl6B,EAAMsD,OAAY42B,EAAJ/2B,EAAUA,IACzCnD,EAAMmD,GAAGmC,IAAM0P,EAAOmlB,MAc1Bt8B,EAAQy8B,UAAY,SAASp3B,EAAGa,EAAGiR,GACjC,MAAS9R,GAAEgC,KAAO8P,EAAOsL,WAAasZ,EAAkB71B,EAAEmB,KAAOnB,EAAE8K,OAC9D3L,EAAEgC,KAAOhC,EAAE2L,MAAQmG,EAAOsL,WAAasZ,EAAW71B,EAAEmB,MACpDhC,EAAEoC,IAAM0P,EAAOuL,SAAWqZ,EAAyB71B,EAAEuB,IAAMvB,EAAE+K,QAC7D5L,EAAEoC,IAAMpC,EAAE4L,OAASkG,EAAOuL,SAAWqZ,EAAa71B,EAAEuB,MAMvD,SAASxH,EAAQD,EAASM,GA8B9B,QAAS2B,GAAS6M,EAAOyW,EAAK4S,GAE5B/3B,KAAKi4B,QAAU,GAAIj0B,MACnBhE,KAAKwwB,OAAS,GAAIxsB,MAClBhE,KAAKywB,KAAO,GAAIzsB,MAEhBhE,KAAKk4B,WAAa,EAClBl4B,KAAK8Z,MAAQjY,EAAS06B,MAAMC,IAC5Bx8B,KAAKglB,KAAO,EAGZhlB,KAAK6wB,SAASniB,EAAOyW,EAAK4S,GAvC5B,GAAIv0B,GAAStD,EAAoB,GA2CjC2B,GAAS06B,OACPE,YAAa,EACbC,OAAQ,EACRC,OAAQ,EACRC,KAAM,EACNJ,IAAK,EACLK,QAAS,EACTC,MAAO,EACPC,KAAM,GAcRl7B,EAAS0P,UAAUsf,SAAW,SAASniB,EAAOyW,EAAK4S,GACjD,KAAMrpB,YAAiB1K,OAAWmhB,YAAenhB,OAC/C,KAAO,+CAGThE,MAAKwwB,OAAmBtqB,QAATwI,EAAsB,GAAI1K,MAAK0K,EAAMlI,WAAa,GAAIxC,MACrEhE,KAAKywB,KAAevqB,QAAPif,EAAoB,GAAInhB,MAAKmhB,EAAI3e,WAAa,GAAIxC,MAE3DhE,KAAKk4B,WACPl4B,KAAKw4B,eAAeT,IAOxBl2B,EAAS0P,UAAU0nB,MAAQ,WACzBj5B,KAAKi4B,QAAU,GAAIj0B,MAAKhE,KAAKwwB,OAAOhqB,WACpCxG,KAAKo5B,gBAOPv3B,EAAS0P,UAAU6nB,aAAe,WAIhC,OAAQp5B,KAAK8Z,OACX,IAAKjY,GAAS06B,MAAMQ,KAClB/8B,KAAKi4B,QAAQ+E,YAAYh9B,KAAKglB,KAAOpgB,KAAKC,MAAM7E,KAAKi4B,QAAQgF,cAAgBj9B,KAAKglB,OAClFhlB,KAAKi4B,QAAQiF,SAAS,EACxB,KAAKr7B,GAAS06B,MAAMO,MAAc98B,KAAKi4B,QAAQkF,QAAQ,EACvD,KAAKt7B,GAAS06B,MAAMC,IACpB,IAAK36B,GAAS06B,MAAMM,QAAc78B,KAAKi4B,QAAQmF,SAAS,EACxD,KAAKv7B,GAAS06B,MAAMK,KAAc58B,KAAKi4B,QAAQoF,WAAW,EAC1D,KAAKx7B,GAAS06B,MAAMI,OAAc38B,KAAKi4B,QAAQqF,WAAW,EAC1D,KAAKz7B,GAAS06B,MAAMG,OAAc18B,KAAKi4B,QAAQsF,gBAAgB,GAIjE,GAAiB,GAAbv9B,KAAKglB,KAEP,OAAQhlB,KAAK8Z,OACX,IAAKjY,GAAS06B,MAAME,YAAcz8B,KAAKi4B,QAAQsF,gBAAgBv9B,KAAKi4B,QAAQuF,kBAAoBx9B,KAAKi4B,QAAQuF,kBAAoBx9B,KAAKglB,KAAQ,MAC9I,KAAKnjB,GAAS06B,MAAMG,OAAc18B,KAAKi4B,QAAQqF,WAAWt9B,KAAKi4B,QAAQwF,aAAez9B,KAAKi4B,QAAQwF,aAAez9B,KAAKglB,KAAO,MAC9H,KAAKnjB,GAAS06B,MAAMI,OAAc38B,KAAKi4B,QAAQoF,WAAWr9B,KAAKi4B,QAAQyF,aAAe19B,KAAKi4B,QAAQyF,aAAe19B,KAAKglB,KAAO,MAC9H,KAAKnjB,GAAS06B,MAAMK,KAAc58B,KAAKi4B,QAAQmF,SAASp9B,KAAKi4B,QAAQ0F,WAAa39B,KAAKi4B,QAAQ0F,WAAa39B,KAAKglB,KAAO,MACxH,KAAKnjB,GAAS06B,MAAMM,QACpB,IAAKh7B,GAAS06B,MAAMC,IAAcx8B,KAAKi4B,QAAQkF,QAASn9B,KAAKi4B,QAAQ2F,UAAU,GAAM59B,KAAKi4B,QAAQ2F,UAAU,GAAK59B,KAAKglB,KAAO,EAAI,MACjI,KAAKnjB,GAAS06B,MAAMO,MAAc98B,KAAKi4B,QAAQiF,SAASl9B,KAAKi4B,QAAQ4F,WAAa79B,KAAKi4B,QAAQ4F,WAAa79B,KAAKglB,KAAQ,MACzH,KAAKnjB,GAAS06B,MAAMQ,KAAc/8B,KAAKi4B,QAAQ+E,YAAYh9B,KAAKi4B,QAAQgF,cAAgBj9B,KAAKi4B,QAAQgF,cAAgBj9B,KAAKglB,QAUhInjB,EAAS0P,UAAUgoB,QAAU,WAC3B,MAAQv5B,MAAKi4B,QAAQzxB,WAAaxG,KAAKywB,KAAKjqB,WAM9C3E,EAAS0P,UAAU2T,KAAO,WACxB,GAAIgK,GAAOlvB,KAAKi4B,QAAQzxB,SAIxB,IAAIxG,KAAKi4B,QAAQ4F,WAAa,EAC5B,OAAQ79B,KAAK8Z,OACX,IAAKjY,GAAS06B,MAAME,YAElBz8B,KAAKi4B,QAAU,GAAIj0B,MAAKhE,KAAKi4B,QAAQzxB,UAAYxG,KAAKglB,KAAO,MAC/D,KAAKnjB,GAAS06B,MAAMG,OAAc18B,KAAKi4B,QAAU,GAAIj0B,MAAKhE,KAAKi4B,QAAQzxB,UAAwB,IAAZxG,KAAKglB,KAAc,MACtG,KAAKnjB,GAAS06B,MAAMI,OAAc38B,KAAKi4B,QAAU,GAAIj0B,MAAKhE,KAAKi4B,QAAQzxB,UAAwB,IAAZxG,KAAKglB,KAAc,GAAK,MAC3G,KAAKnjB,GAAS06B,MAAMK,KAClB58B,KAAKi4B,QAAU,GAAIj0B,MAAKhE,KAAKi4B,QAAQzxB,UAAwB,IAAZxG,KAAKglB,KAAc,GAAK,GAEzE,IAAIpa,GAAI5K,KAAKi4B,QAAQ0F,UACrB39B,MAAKi4B,QAAQmF,SAASxyB,EAAKA,EAAI5K,KAAKglB,KACpC,MACF,KAAKnjB,GAAS06B,MAAMM,QACpB,IAAKh7B,GAAS06B,MAAMC,IAAcx8B,KAAKi4B,QAAQkF,QAAQn9B,KAAKi4B,QAAQ2F,UAAY59B,KAAKglB,KAAO,MAC5F,KAAKnjB,GAAS06B,MAAMO,MAAc98B,KAAKi4B,QAAQiF,SAASl9B,KAAKi4B,QAAQ4F,WAAa79B,KAAKglB,KAAO,MAC9F,KAAKnjB,GAAS06B,MAAMQ,KAAc/8B,KAAKi4B,QAAQ+E,YAAYh9B,KAAKi4B,QAAQgF,cAAgBj9B,KAAKglB,UAK/F,QAAQhlB,KAAK8Z,OACX,IAAKjY,GAAS06B,MAAME,YAAcz8B,KAAKi4B,QAAU,GAAIj0B,MAAKhE,KAAKi4B,QAAQzxB,UAAYxG,KAAKglB,KAAO,MAC/F,KAAKnjB,GAAS06B,MAAMG,OAAc18B,KAAKi4B,QAAQqF,WAAWt9B,KAAKi4B,QAAQwF,aAAez9B,KAAKglB,KAAO,MAClG,KAAKnjB,GAAS06B,MAAMI,OAAc38B,KAAKi4B,QAAQoF,WAAWr9B,KAAKi4B,QAAQyF,aAAe19B,KAAKglB,KAAO,MAClG,KAAKnjB,GAAS06B,MAAMK,KAAc58B,KAAKi4B,QAAQmF,SAASp9B,KAAKi4B,QAAQ0F,WAAa39B,KAAKglB,KAAO,MAC9F,KAAKnjB,GAAS06B,MAAMM,QACpB,IAAKh7B,GAAS06B,MAAMC,IAAcx8B,KAAKi4B,QAAQkF,QAAQn9B,KAAKi4B,QAAQ2F,UAAY59B,KAAKglB,KAAO,MAC5F,KAAKnjB,GAAS06B,MAAMO,MAAc98B,KAAKi4B,QAAQiF,SAASl9B,KAAKi4B,QAAQ4F,WAAa79B,KAAKglB,KAAO,MAC9F,KAAKnjB,GAAS06B,MAAMQ,KAAc/8B,KAAKi4B,QAAQ+E,YAAYh9B,KAAKi4B,QAAQgF,cAAgBj9B,KAAKglB,MAKjG,GAAiB,GAAbhlB,KAAKglB,KAEP,OAAQhlB,KAAK8Z,OACX,IAAKjY,GAAS06B,MAAME,YAAiBz8B,KAAKi4B,QAAQuF,kBAAoBx9B,KAAKglB,MAAMhlB,KAAKi4B,QAAQsF,gBAAgB,EAAK,MACnH,KAAK17B,GAAS06B,MAAMG,OAAiB18B,KAAKi4B,QAAQwF,aAAez9B,KAAKglB,MAAMhlB,KAAKi4B,QAAQqF,WAAW,EAAK,MACzG,KAAKz7B,GAAS06B,MAAMI,OAAiB38B,KAAKi4B,QAAQyF,aAAe19B,KAAKglB,MAAMhlB,KAAKi4B,QAAQoF,WAAW,EAAK,MACzG,KAAKx7B,GAAS06B,MAAMK,KAAiB58B,KAAKi4B,QAAQ0F,WAAa39B,KAAKglB,MAAMhlB,KAAKi4B,QAAQmF,SAAS,EAAK,MACrG,KAAKv7B,GAAS06B,MAAMM,QACpB,IAAKh7B,GAAS06B,MAAMC,IAAiBx8B,KAAKi4B,QAAQ2F,UAAY59B,KAAKglB,KAAK,GAAGhlB,KAAKi4B,QAAQkF,QAAQ,EAAI,MACpG,KAAKt7B,GAAS06B,MAAMO,MAAiB98B,KAAKi4B,QAAQ4F,WAAa79B,KAAKglB,MAAMhlB,KAAKi4B,QAAQiF,SAAS,EAAK,MACrG,KAAKr7B,GAAS06B,MAAMQ,MAMpB/8B,KAAKi4B,QAAQzxB,WAAa0oB,IAC5BlvB,KAAKi4B,QAAU,GAAIj0B,MAAKhE,KAAKywB,KAAKjqB,aAStC3E,EAAS0P,UAAU0T,WAAa,WAC9B,MAAOjlB,MAAKi4B,SAgBdp2B,EAAS0P,UAAUusB,SAAW,SAASC,EAAUC,GAC/Ch+B,KAAK8Z,MAAQikB,EAETC,EAAU,IACZh+B,KAAKglB,KAAOgZ,GAGdh+B,KAAKk4B,WAAY,GAOnBr2B,EAAS0P,UAAU0sB,aAAe,SAAUC,GAC1Cl+B,KAAKk4B,UAAYgG,GAQnBr8B,EAAS0P,UAAUinB,eAAiB,SAAST,GAC3C,GAAmB7xB,QAAf6xB,EAAJ,CAIA,GAAIoG,GAAiB,QACjBC,EAAiB,OACjBC,EAAiB,MACjBC,EAAiB,KACjBC,EAAiB,IACjBC,EAAiB,IACjBC,EAAiB,CAGR,KAATN,EAAgBpG,IAAqB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMQ,KAAa/8B,KAAKglB,KAAO,KACjF,IAATmZ,EAAepG,IAAsB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMQ,KAAa/8B,KAAKglB,KAAO,KACjF,IAATmZ,EAAepG,IAAsB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMQ,KAAa/8B,KAAKglB,KAAO,KACjF,GAATmZ,EAAcpG,IAAuB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMQ,KAAa/8B,KAAKglB,KAAO,IACjF,GAATmZ,EAAcpG,IAAuB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMQ,KAAa/8B,KAAKglB,KAAO,IACjF,EAATmZ,EAAapG,IAAwB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMQ,KAAa/8B,KAAKglB,KAAO,GAC1FmZ,EAAWpG,IAA0B/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMQ,KAAa/8B,KAAKglB,KAAO,GAChF,EAAVoZ,EAAcrG,IAAuB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMO,MAAa98B,KAAKglB,KAAO,GAC1FoZ,EAAYrG,IAAyB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMO,MAAa98B,KAAKglB,KAAO,GAClF,EAARqZ,EAAYtG,IAAyB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMC,IAAax8B,KAAKglB,KAAO,GAClF,EAARqZ,EAAYtG,IAAyB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMC,IAAax8B,KAAKglB,KAAO,GAC1FqZ,EAAUtG,IAA2B/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMC,IAAax8B,KAAKglB,KAAO,GAC1FqZ,EAAQ,EAAItG,IAAyB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMM,QAAa78B,KAAKglB,KAAO,GACjF,EAATsZ,EAAavG,IAAwB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMK,KAAa58B,KAAKglB,KAAO,GAC1FsZ,EAAWvG,IAA0B/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMK,KAAa58B,KAAKglB,KAAO,GAC/E,GAAXuZ,EAAgBxG,IAAqB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMI,OAAa38B,KAAKglB,KAAO,IAC/E,GAAXuZ,EAAgBxG,IAAqB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMI,OAAa38B,KAAKglB,KAAO,IAC/E,EAAXuZ,EAAexG,IAAsB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMI,OAAa38B,KAAKglB,KAAO,GAC1FuZ,EAAaxG,IAAwB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMI,OAAa38B,KAAKglB,KAAO,GAC/E,GAAXwZ,EAAgBzG,IAAqB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMG,OAAa18B,KAAKglB,KAAO,IAC/E,GAAXwZ,EAAgBzG,IAAqB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMG,OAAa18B,KAAKglB,KAAO,IAC/E,EAAXwZ,EAAezG,IAAsB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMG,OAAa18B,KAAKglB,KAAO,GAC1FwZ,EAAazG,IAAwB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAMG,OAAa18B,KAAKglB,KAAO,GAC1E,IAAhByZ,EAAsB1G,IAAe/3B,KAAK8Z,MAAQjY,EAAS06B,MAAME,YAAaz8B,KAAKglB,KAAO,KAC1E,IAAhByZ,EAAsB1G,IAAe/3B,KAAK8Z,MAAQjY,EAAS06B,MAAME,YAAaz8B,KAAKglB,KAAO,KAC1E,GAAhByZ,EAAqB1G,IAAgB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAME,YAAaz8B,KAAKglB,KAAO,IAC1E,GAAhByZ,EAAqB1G,IAAgB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAME,YAAaz8B,KAAKglB,KAAO,IAC1E,EAAhByZ,EAAoB1G,IAAiB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAME,YAAaz8B,KAAKglB,KAAO,GAC1FyZ,EAAkB1G,IAAmB/3B,KAAK8Z,MAAQjY,EAAS06B,MAAME,YAAaz8B,KAAKglB,KAAO,KAShGnjB,EAAS0P,UAAU2gB,KAAO,SAASwM,GACjC,GAAI3E,GAAQ,GAAI/1B,MAAK06B,EAAKl4B,UAE1B,IAAIxG,KAAK8Z,OAASjY,EAAS06B,MAAMQ,KAAM,CACrC,GAAI4B,GAAO5E,EAAMkD,cAAgBr4B,KAAK+lB,MAAMoP,EAAM8D,WAAa,GAC/D9D,GAAMiD,YAAYp4B,KAAK+lB,MAAMgU,EAAO3+B,KAAKglB,MAAQhlB,KAAKglB,MACtD+U,EAAMmD,SAAS,GACfnD,EAAMoD,QAAQ,GACdpD,EAAMqD,SAAS,GACfrD,EAAMsD,WAAW,GACjBtD,EAAMuD,WAAW,GACjBvD,EAAMwD,gBAAgB,OAEnB,IAAIv9B,KAAK8Z,OAASjY,EAAS06B,MAAMO,MAChC/C,EAAM6D,UAAY,IACpB7D,EAAMoD,QAAQ,GACdpD,EAAMmD,SAASnD,EAAM8D,WAAa,IAIlC9D,EAAMoD,QAAQ,GAGhBpD,EAAMqD,SAAS,GACfrD,EAAMsD,WAAW,GACjBtD,EAAMuD,WAAW,GACjBvD,EAAMwD,gBAAgB,OAEnB,IAAIv9B,KAAK8Z,OAASjY,EAAS06B,MAAMC,IAAK,CAEzC,OAAQx8B,KAAKglB,MACX,IAAK,GACL,IAAK,GACH+U,EAAMqD,SAA6C,GAApCx4B,KAAK+lB,MAAMoP,EAAM4D,WAAa,IAAW,MAC1D,SACE5D,EAAMqD,SAA6C,GAApCx4B,KAAK+lB,MAAMoP,EAAM4D,WAAa,KAEjD5D,EAAMsD,WAAW,GACjBtD,EAAMuD,WAAW,GACjBvD,EAAMwD,gBAAgB,OAEnB,IAAIv9B,KAAK8Z,OAASjY,EAAS06B,MAAMM,QAAS,CAE7C,OAAQ78B,KAAKglB,MACX,IAAK,GACL,IAAK,GACH+U,EAAMqD,SAA6C,GAApCx4B,KAAK+lB,MAAMoP,EAAM4D,WAAa,IAAW,MAC1D,SACE5D,EAAMqD,SAA4C,EAAnCx4B,KAAK+lB,MAAMoP,EAAM4D,WAAa,IAEjD5D,EAAMsD,WAAW,GACjBtD,EAAMuD,WAAW,GACjBvD,EAAMwD,gBAAgB,OAEnB,IAAIv9B,KAAK8Z,OAASjY,EAAS06B,MAAMK,KAAM,CAC1C,OAAQ58B,KAAKglB,MACX,IAAK,GACH+U,EAAMsD,WAAiD,GAAtCz4B,KAAK+lB,MAAMoP,EAAM2D,aAAe,IAAW,MAC9D,SACE3D,EAAMsD,WAAiD,GAAtCz4B,KAAK+lB,MAAMoP,EAAM2D,aAAe,KAErD3D,EAAMuD,WAAW,GACjBvD,EAAMwD,gBAAgB,OACjB,IAAIv9B,KAAK8Z,OAASjY,EAAS06B,MAAMI,OAAQ,CAE9C,OAAQ38B,KAAKglB,MACX,IAAK,IACL,IAAK,IACH+U,EAAMsD,WAAgD,EAArCz4B,KAAK+lB,MAAMoP,EAAM2D,aAAe,IACjD3D,EAAMuD,WAAW,EACjB,MACF,KAAK,GACHvD,EAAMuD,WAAiD,GAAtC14B,KAAK+lB,MAAMoP,EAAM0D,aAAe,IAAW,MAC9D,SACE1D,EAAMuD,WAAiD,GAAtC14B,KAAK+lB,MAAMoP,EAAM0D,aAAe,KAErD1D,EAAMwD,gBAAgB,OAEnB,IAAIv9B,KAAK8Z,OAASjY,EAAS06B,MAAMG,OAEpC,OAAQ18B,KAAKglB,MACX,IAAK,IACL,IAAK,IACH+U,EAAMuD,WAAgD,EAArC14B,KAAK+lB,MAAMoP,EAAM0D,aAAe,IACjD1D,EAAMwD,gBAAgB,EACtB,MACF,KAAK,GACHxD,EAAMwD,gBAA6D,IAA7C34B,KAAK+lB,MAAMoP,EAAMyD,kBAAoB,KAAe,MAC5E,SACEzD,EAAMwD,gBAA4D,IAA5C34B,KAAK+lB,MAAMoP,EAAMyD,kBAAoB,UAG5D,IAAIx9B,KAAK8Z,OAASjY,EAAS06B,MAAME,YAAa,CACjD,GAAIzX,GAAOhlB,KAAKglB,KAAO,EAAIhlB,KAAKglB,KAAO,EAAI,CAC3C+U,GAAMwD,gBAAgB34B,KAAK+lB,MAAMoP,EAAMyD,kBAAoBxY,GAAQA,GAGrE,MAAO+U,IAQTl4B,EAAS0P,UAAUkoB,QAAU,WAC3B,OAAQz5B,KAAK8Z,OACX,IAAKjY,GAAS06B,MAAME,YAClB,MAA0C,IAAlCz8B,KAAKi4B,QAAQuF,iBACvB,KAAK37B,GAAS06B,MAAMG,OAClB,MAAqC,IAA7B18B,KAAKi4B,QAAQwF,YACvB,KAAK57B,GAAS06B,MAAMI,OAClB,MAAmC,IAA3B38B,KAAKi4B,QAAQ0F,YAAkD,GAA7B39B,KAAKi4B,QAAQyF,YAEzD,KAAK77B,GAAS06B,MAAMK,KAClB,MAAmC,IAA3B58B,KAAKi4B,QAAQ0F,UACvB,KAAK97B,GAAS06B,MAAMM,QACpB,IAAKh7B,GAAS06B,MAAMC,IAClB,MAAkC,IAA1Bx8B,KAAKi4B,QAAQ2F,SACvB,KAAK/7B,GAAS06B,MAAMO,MAClB,MAAmC,IAA3B98B,KAAKi4B,QAAQ4F,UACvB,KAAKh8B,GAAS06B,MAAMQ,KAClB,OAAO,CACT,SACE,OAAO,IAWbl7B,EAAS0P,UAAUqtB,cAAgB,SAASF,GAK1C,OAJYx4B,QAARw4B,IACFA,EAAO1+B,KAAKi4B,SAGNj4B,KAAK8Z,OACX,IAAKjY,GAAS06B,MAAME,YAAc,MAAOj5B,GAAOk7B,GAAMG,OAAO,MAC7D,KAAKh9B,GAAS06B,MAAMG,OAAc,MAAOl5B,GAAOk7B,GAAMG,OAAO,IAC7D,KAAKh9B,GAAS06B,MAAMI,OAAc,MAAOn5B,GAAOk7B,GAAMG,OAAO,QAC7D,KAAKh9B,GAAS06B,MAAMK,KAAc,MAAOp5B,GAAOk7B,GAAMG,OAAO,QAC7D,KAAKh9B,GAAS06B,MAAMM,QAAc,MAAOr5B,GAAOk7B,GAAMG,OAAO,QAC7D,KAAKh9B,GAAS06B,MAAMC,IAAc,MAAOh5B,GAAOk7B,GAAMG,OAAO,IAC7D,KAAKh9B,GAAS06B,MAAMO,MAAc,MAAOt5B,GAAOk7B,GAAMG,OAAO,MAC7D,KAAKh9B,GAAS06B,MAAMQ,KAAc,MAAOv5B,GAAOk7B,GAAMG,OAAO,OAC7D,SAAkC,MAAO,KAW7Ch9B,EAAS0P,UAAUutB,cAAgB,SAASJ,GAM1C,OALYx4B,QAARw4B,IACFA,EAAO1+B,KAAKi4B,SAINj4B,KAAK8Z,OACX,IAAKjY,GAAS06B,MAAME,YAAY,MAAOj5B,GAAOk7B,GAAMG,OAAO,WAC3D,KAAKh9B,GAAS06B,MAAMG,OAAY,MAAOl5B,GAAOk7B,GAAMG,OAAO,eAC3D,KAAKh9B,GAAS06B,MAAMI,OACpB,IAAK96B,GAAS06B,MAAMK,KAAY,MAAOp5B,GAAOk7B,GAAMG,OAAO,aAC3D,KAAKh9B,GAAS06B,MAAMM,QACpB,IAAKh7B,GAAS06B,MAAMC,IAAY,MAAOh5B,GAAOk7B,GAAMG,OAAO,YAC3D,KAAKh9B,GAAS06B,MAAMO,MAAY,MAAOt5B,GAAOk7B,GAAMG,OAAO,OAC3D,KAAKh9B,GAAS06B,MAAMQ,KAAY,MAAO,EACvC,SAAgC,MAAO,KAI3Cl9B,EAAOD,QAAUiC,GAKb,SAAShC,GAOb,QAASuC,KACPpC,KAAK0N,QAAU,KACf1N,KAAK0F,MAAQ,KAQftD,EAAUmP,UAAUoI,WAAa,SAASjM,GACpCA,GACF/M,KAAKqE,OAAOhF,KAAK0N,QAASA,IAQ9BtL,EAAUmP,UAAU+M,OAAS,WAE3B,OAAO,GAMTlc,EAAUmP,UAAUmjB,QAAU,aAU9BtyB,EAAUmP,UAAUwtB,WAAa,WAC/B,GAAI5I,GAAWn2B,KAAK0F,MAAMs5B,iBAAmBh/B,KAAK0F,MAAMkL,OACpD5Q,KAAK0F,MAAMu5B,kBAAoBj/B,KAAK0F,MAAMmL,MAK9C,OAHA7Q,MAAK0F,MAAMs5B,eAAiBh/B,KAAK0F,MAAMkL,MACvC5Q,KAAK0F,MAAMu5B,gBAAkBj/B,KAAK0F,MAAMmL,OAEjCslB,GAGTt2B,EAAOD,QAAUwC,GAKb,SAASvC,EAAQD,EAASM,GAa9B,QAASmC,GAAayvB,EAAMpkB,GAC1B1N,KAAK8xB,KAAOA,EAGZ9xB,KAAKwxB,gBACH0N,iBAAiB,GAEnBl/B,KAAK0N,QAAU/M,EAAKqE,UAAWhF,KAAKwxB,gBAEpCxxB,KAAK6xB,UAEL7xB,KAAK2Z,WAAWjM,GAtBlB,GAAI/M,GAAOT,EAAoB,GAC3BkC,EAAYlC,EAAoB,GAwBpCmC,GAAYkP,UAAY,GAAInP,GAM5BC,EAAYkP,UAAUsgB,QAAU,WAC9B,GAAI1C,GAAMvf,SAASK,cAAc,MACjCkf,GAAI3nB,UAAY,cAChB2nB,EAAI3e,MAAMiQ,SAAW,WACrB0O,EAAI3e,MAAMnJ,IAAM,MAChB8nB,EAAI3e,MAAMK,OAAS,OAEnB7Q,KAAKmvB,IAAMA,GAMb9sB,EAAYkP,UAAUmjB,QAAU,WAC9B10B,KAAK0N,QAAQwxB,iBAAkB,EAC/Bl/B,KAAKse,SAELte,KAAK8xB,KAAO,MAQdzvB,EAAYkP,UAAUoI,WAAa,SAASjM,GACtCA,GAEF/M,EAAK8E,iBAAiB,mBAAoBzF,KAAK0N,QAASA,IAQ5DrL,EAAYkP,UAAU+M,OAAS,WAC7B,GAAIte,KAAK0N,QAAQwxB,gBAAiB,CAChC,GAAIC,GAASn/B,KAAK8xB,KAAK5E,IAAIiG,kBACvBnzB,MAAKmvB,IAAI3lB,YAAc21B,IAErBn/B,KAAKmvB,IAAI3lB,YACXxJ,KAAKmvB,IAAI3lB,WAAWgG,YAAYxP,KAAKmvB,KAEvCgQ,EAAOrvB,YAAY9P,KAAKmvB,KAExBnvB,KAAK0O,QAGP,IAAIgrB,GAAM,GAAI11B,MACVmM,EAAInQ,KAAK8xB,KAAKnxB,KAAKwxB,SAASuH,EAEhC15B,MAAKmvB,IAAI3e,MAAMvJ,KAAOkJ,EAAI,KAC1BnQ,KAAKmvB,IAAIiQ,MAAQ,iBAAmB1F,MAIhC15B,MAAKmvB,IAAI3lB,YACXxJ,KAAKmvB,IAAI3lB,WAAWgG,YAAYxP,KAAKmvB,KAEvCnvB,KAAK+hB,MAGP,QAAO,GAMT1f,EAAYkP,UAAU7C,MAAQ,WAG5B,QAASqE,KACPX,EAAG2P,MAGH,IAAIjI,GAAQ1H,EAAG0f,KAAKhkB,MAAMgpB,WAAW1kB,EAAG0f,KAAKC,SAAS9I,OAAOrY,OAAOkJ,MAChEgW,EAAW,EAAIhW,EAAQ,EACZ,IAAXgW,IAAiBA,EAAW,IAC5BA,EAAW,MAAMA,EAAW,KAEhC1d,EAAGkM,SAGHlM,EAAGitB,iBAAmB9T,WAAWxY,EAAQ+c,GAd3C,GAAI1d,GAAKpS,IAiBT+S,MAMF1Q,EAAYkP,UAAUwQ,KAAO,WACG7b,SAA1BlG,KAAKq/B,mBACPnU,aAAalrB,KAAKq/B,wBACXr/B,MAAKq/B,mBAIhBx/B,EAAOD,QAAUyC,GAKb,SAASxC,EAAQD,EAASM,GAe9B,QAASoC,GAAYwvB,EAAMpkB,GACzB1N,KAAK8xB,KAAOA,EAGZ9xB,KAAKwxB,gBACH8N,gBAAgB,GAElBt/B,KAAK0N,QAAU/M,EAAKqE,UAAWhF,KAAKwxB,gBAEpCxxB,KAAK6yB,WAAa,GAAI7uB,MACtBhE,KAAKu/B,eAGLv/B,KAAK6xB,UAEL7xB,KAAK2Z,WAAWjM,GA5BlB,GAAIwlB,GAAShzB,EAAoB,IAC7BS,EAAOT,EAAoB,GAC3BkC,EAAYlC,EAAoB,GA6BpCoC,GAAWiP,UAAY,GAAInP,GAO3BE,EAAWiP,UAAUoI,WAAa,SAASjM,GACrCA,GAEF/M,EAAK8E,iBAAiB,kBAAmBzF,KAAK0N,QAASA,IAQ3DpL,EAAWiP,UAAUsgB,QAAU,WAC7B,GAAI1C,GAAMvf,SAASK,cAAc,MACjCkf,GAAI3nB,UAAY,aAChB2nB,EAAI3e,MAAMiQ,SAAW,WACrB0O,EAAI3e,MAAMnJ,IAAM,MAChB8nB,EAAI3e,MAAMK,OAAS,OACnB7Q,KAAKmvB,IAAMA,CAEX,IAAIqQ,GAAO5vB,SAASK,cAAc,MAClCuvB,GAAKhvB,MAAMiQ,SAAW,WACtB+e,EAAKhvB,MAAMnJ,IAAM,MACjBm4B,EAAKhvB,MAAMvJ,KAAO,QAClBu4B,EAAKhvB,MAAMK,OAAS,OACpB2uB,EAAKhvB,MAAMI,MAAQ,OACnBue,EAAIrf,YAAY0vB,GAGhBx/B,KAAKyD,OAASyvB,EAAO/D,GACnB+E,iBAAiB,IAEnBl0B,KAAKyD,OAAO+N,GAAG,YAAaxR,KAAKg0B,aAAa/B,KAAKjyB,OACnDA,KAAKyD,OAAO+N,GAAG,OAAaxR,KAAKi0B,QAAQhC,KAAKjyB,OAC9CA,KAAKyD,OAAO+N,GAAG,UAAaxR,KAAKq6B,WAAWpI,KAAKjyB,QAMnDsC,EAAWiP,UAAUmjB,QAAU,WAC7B10B,KAAK0N,QAAQ4xB,gBAAiB,EAC9Bt/B,KAAKse,SAELte,KAAKyD,OAAOy6B,QAAO,GACnBl+B,KAAKyD,OAAS,KAEdzD,KAAK8xB,KAAO,MAOdxvB,EAAWiP,UAAU+M,OAAS,WAC5B,GAAIte,KAAK0N,QAAQ4xB,eAAgB,CAC/B,GAAIH,GAASn/B,KAAK8xB,KAAK5E,IAAIiG,kBACvBnzB,MAAKmvB,IAAI3lB,YAAc21B,IAErBn/B,KAAKmvB,IAAI3lB,YACXxJ,KAAKmvB,IAAI3lB,WAAWgG,YAAYxP,KAAKmvB,KAEvCgQ,EAAOrvB,YAAY9P,KAAKmvB,KAG1B,IAAIhf,GAAInQ,KAAK8xB,KAAKnxB,KAAKwxB,SAASnyB,KAAK6yB,WAErC7yB,MAAKmvB,IAAI3e,MAAMvJ,KAAOkJ,EAAI,KAC1BnQ,KAAKmvB,IAAIiQ,MAAQ,SAAWp/B,KAAK6yB,eAI7B7yB,MAAKmvB,IAAI3lB,YACXxJ,KAAKmvB,IAAI3lB,WAAWgG,YAAYxP,KAAKmvB,IAIzC,QAAO,GAOT7sB,EAAWiP,UAAUujB,cAAgB,SAASC,GAC5C/0B,KAAK6yB,WAAa,GAAI7uB,MAAK+wB,EAAKvuB,WAChCxG,KAAKse,UAOPhc,EAAWiP,UAAUyjB,cAAgB,WACnC,MAAO,IAAIhxB,MAAKhE,KAAK6yB,WAAWrsB,YAQlClE,EAAWiP,UAAUyiB,aAAe,SAAS9qB,GAC3ClJ,KAAKu/B,YAAYE,UAAW,EAC5Bz/B,KAAKu/B,YAAY1M,WAAa7yB,KAAK6yB,WAEnC3pB,EAAMw2B,kBACNx2B,EAAMD,kBAQR3G,EAAWiP,UAAU0iB,QAAU,SAAU/qB,GACvC,GAAKlJ,KAAKu/B,YAAYE,SAAtB,CAEA,GAAIxE,GAAS/xB,EAAMquB,QAAQ0D,OACvB9qB,EAAInQ,KAAK8xB,KAAKnxB,KAAKwxB,SAASnyB,KAAKu/B,YAAY1M,YAAcoI,EAC3DlG,EAAO/0B,KAAK8xB,KAAKnxB,KAAK4xB,OAAOpiB,EAEjCnQ,MAAK80B,cAAcC,GAGnB/0B,KAAK8xB,KAAKE,QAAQnH,KAAK,cACrBkK,KAAM,GAAI/wB,MAAKhE,KAAK6yB,WAAWrsB,aAGjC0C,EAAMw2B,kBACNx2B,EAAMD,mBAQR3G,EAAWiP,UAAU8oB,WAAa,SAAUnxB,GACrClJ,KAAKu/B,YAAYE,WAGtBz/B,KAAK8xB,KAAKE,QAAQnH,KAAK,eACrBkK,KAAM,GAAI/wB,MAAKhE,KAAK6yB,WAAWrsB,aAGjC0C,EAAMw2B,kBACNx2B,EAAMD,mBAGRpJ,EAAOD,QAAU0C,GAKb,SAASzC,EAAQD,EAASM,GAe9B,QAASqC,GAAUuvB,EAAMpkB,EAASiyB,GAChC3/B,KAAKK,GAAKM,EAAK+D,aACf1E,KAAK8xB,KAAOA,EAEZ9xB,KAAKwxB,gBACHE,YAAa,OACbkO,iBAAiB,EACjBC,iBAAiB,EACjBC,OAAO,EACPC,iBAAkB,EAClBC,iBAAkB,EAClBC,aAAc,GACdC,aAAc,EACdC,UAAW,GACXvvB,MAAO,OACP4U,SAAS,GAGXxlB,KAAKogC,aAAeT,EACpB3/B,KAAK0F,SACL1F,KAAKqgC,aACHC,SACAC,WAGFvgC,KAAKktB,OAELltB,KAAK8N,OAASY,MAAM,EAAGyW,IAAI,GAE3BnlB,KAAK0N,QAAU/M,EAAKqE,UAAWhF,KAAKwxB,gBACpCxxB,KAAKwgC,iBAAmB,EAExBxgC,KAAK2Z,WAAWjM,GAChB1N,KAAK4Q,MAAQhN,QAAQ,GAAK5D,KAAK0N,QAAQkD,OAAOlF,QAAQ,KAAK,KAC3D1L,KAAKygC,SAAWzgC,KAAK4Q,MACrB5Q,KAAK6Q,OAAS7Q,KAAKogC,aAAa3S,aAEhCztB,KAAK0gC,WAAa,GAClB1gC,KAAK2gC,iBAAmB,GACxB3gC,KAAK4gC,WAAa,EAClB5gC,KAAK6gC,QAAS,EACd7gC,KAAK8gC,eAGL9gC,KAAKu1B,UACLv1B,KAAK+gC,eAAiB,EAGtB/gC,KAAK6xB,UA7DP,GAAIlxB,GAAOT,EAAoB,GAC3BU,EAAUV,EAAoB,GAC9BkC,EAAYlC,EAAoB,IAChCwB,EAAWxB,EAAoB,GA6DnCqC,GAASgP,UAAY,GAAInP,GAIzBG,EAASgP,UAAUyvB,SAAW,SAASzb,EAAO0b,GACvCjhC,KAAKu1B,OAAO/vB,eAAe+f,KAC9BvlB,KAAKu1B,OAAOhQ,GAAS0b,GAEvBjhC,KAAK+gC,gBAAkB,GAGzBx+B,EAASgP,UAAU2vB,YAAc,SAAS3b,EAAO0b,GAC/CjhC,KAAKu1B,OAAOhQ,GAAS0b,GAGvB1+B,EAASgP,UAAU4vB,YAAc,SAAS5b,GACpCvlB,KAAKu1B,OAAO/vB,eAAe+f,WACtBvlB,MAAKu1B,OAAOhQ,GACnBvlB,KAAK+gC,gBAAkB,IAK3Bx+B,EAASgP,UAAUoI,WAAa,SAAUjM,GACxC,GAAIA,EAAS,CACX,GAAI4Q,IAAS,CACTte,MAAK0N,QAAQgkB,aAAehkB,EAAQgkB,aAAuCxrB,SAAxBwH,EAAQgkB,cAC7DpT,GAAS,EAEX,IAAInR,IACF,cACA,kBACA,kBACA,QACA,mBACA,mBACA,eACA,eACA,YACA,QACA,UACFxM,GAAK8E,gBAAgB0H,EAAQnN,KAAK0N,QAASA,GAE3C1N,KAAKygC,SAAW78B,QAAQ,GAAK5D,KAAK0N,QAAQkD,OAAOlF,QAAQ,KAAK,KAEhD,GAAV4S,GAAkBte,KAAKktB,IAAI/Q,QAC7Bnc,KAAKohC,OACLphC,KAAKqhC,UASX9+B,EAASgP,UAAUsgB,QAAU,WAC3B7xB,KAAKktB,IAAI/Q,MAAQvM,SAASK,cAAc,OACxCjQ,KAAKktB,IAAI/Q,MAAM3L,MAAMI,MAAQ5Q,KAAK0N,QAAQkD,MAC1C5Q,KAAKktB,IAAI/Q,MAAM3L,MAAMK,OAAS7Q,KAAK6Q,OAEnC7Q,KAAKktB,IAAIoU,cAAgB1xB,SAASK,cAAc,OAChDjQ,KAAKktB,IAAIoU,cAAc9wB,MAAMI,MAAQ,OACrC5Q,KAAKktB,IAAIoU,cAAc9wB,MAAMK,OAAS7Q,KAAK6Q,OAG3C7Q,KAAK2/B,IAAM/vB,SAASC,gBAAgB,6BAA6B,OACjE7P,KAAK2/B,IAAInvB,MAAMiQ,SAAW,WAC1BzgB,KAAK2/B,IAAInvB,MAAMnJ,IAAM,MACrBrH,KAAK2/B,IAAInvB,MAAMK,OAAS,OACxB7Q,KAAK2/B,IAAInvB,MAAMI,MAAQ,OACvB5Q,KAAK2/B,IAAInvB,MAAM+wB,QAAU,QACzBvhC,KAAKktB,IAAI/Q,MAAMrM,YAAY9P,KAAK2/B,MAGlCp9B,EAASgP,UAAUiwB,kBAAoB,WACrC5gC,EAAQsO,gBAAgBlP,KAAK8gC,YAE7B,IAAI3wB,GACAgwB,EAAYngC,KAAK0N,QAAQyyB,UACzBsB,EAAa,GACbC,EAAa,EACbtxB,EAAIsxB,EAAa,GAAMD,CAGzBtxB,GAD8B,QAA5BnQ,KAAK0N,QAAQgkB,YACXgQ,EAGA1hC,KAAK4Q,MAAQuvB,EAAYuB,CAG/B,KAAK,GAAIC,KAAW3hC,MAAKu1B,OACnBv1B,KAAKu1B,OAAO/vB,eAAem8B,KAC7B3hC,KAAKu1B,OAAOoM,GAASC,SAASzxB,EAAGC,EAAGpQ,KAAK8gC,YAAa9gC,KAAK2/B,IAAKQ,EAAWsB,GAC3ErxB,GAAKqxB,EAAaC,EAItB9gC,GAAQ2O,gBAAgBvP,KAAK8gC,cAM/Bv+B,EAASgP,UAAU8vB,KAAO,WACnBrhC,KAAKktB,IAAI/Q,MAAM3S,aACc,QAA5BxJ,KAAK0N,QAAQgkB,YACf1xB,KAAK8xB,KAAK5E,IAAIjmB,KAAK6I,YAAY9P,KAAKktB,IAAI/Q,OAGxCnc,KAAK8xB,KAAK5E,IAAIhJ,MAAMpU,YAAY9P,KAAKktB,IAAI/Q,QAIxCnc,KAAKktB,IAAIoU,cAAc93B,YAC1BxJ,KAAK8xB,KAAK5E,IAAIkG,qBAAqBtjB,YAAY9P,KAAKktB,IAAIoU,gBAO5D/+B,EAASgP,UAAU6vB,KAAO,WACpBphC,KAAKktB,IAAI/Q,MAAM3S,YACjBxJ,KAAKktB,IAAI/Q,MAAM3S,WAAWgG,YAAYxP,KAAKktB,IAAI/Q,OAG7Cnc,KAAKktB,IAAIoU,cAAc93B,YACzBxJ,KAAKktB,IAAIoU,cAAc93B,WAAWgG,YAAYxP,KAAKktB,IAAIoU,gBAU3D/+B,EAASgP,UAAUsf,SAAW,SAAUniB,EAAOyW,GAC7CnlB,KAAK8N,MAAMY,MAAQA,EACnB1O,KAAK8N,MAAMqX,IAAMA,GAOnB5iB,EAASgP,UAAU+M,OAAS,WAC1B,GAAIujB,IAAe,CACnB,IAA2B,GAAvB7hC,KAAK+gC,eACP/gC,KAAKohC,WAEF,CACHphC,KAAKqhC,OACLrhC,KAAK6Q,OAASjN,OAAO5D,KAAKogC,aAAa5vB,MAAMK,OAAOnF,QAAQ,KAAK,KAGjE1L,KAAKktB,IAAIoU,cAAc9wB,MAAMK,OAAS7Q,KAAK6Q,OAAS,KACpD7Q,KAAK4Q,MAAgC,GAAxB5Q,KAAK0N,QAAQ8X,QAAkB5hB,QAAQ,GAAK5D,KAAK0N,QAAQkD,OAAOlF,QAAQ,KAAK,KAAO,CAEjG,IAAIhG,GAAQ1F,KAAK0F,MACbyW,EAAQnc,KAAKktB,IAAI/Q,KAGrBA,GAAM3U,UAAY,WAGlBxH,KAAK8hC,oBAEL,IAAIpQ,GAAc1xB,KAAK0N,QAAQgkB,YAC3BkO,EAAkB5/B,KAAK0N,QAAQkyB,gBAC/BC,EAAkB7/B,KAAK0N,QAAQmyB,eAGnCn6B,GAAMq8B,iBAAmBnC,EAAkBl6B,EAAMs8B,gBAAkB,EACnEt8B,EAAMu8B,iBAAmBpC,EAAkBn6B,EAAMw8B,gBAAkB,EAEnEx8B,EAAMy8B,eAAiBniC,KAAK8xB,KAAK5E,IAAIkG,qBAAqB7F,YAAcvtB,KAAK4gC,WAAa5gC,KAAK4Q,MAAQ,EAAI5Q,KAAK0N,QAAQsyB,iBACxHt6B,EAAM08B,gBAAkB,EACxB18B,EAAM28B,eAAiBriC,KAAK8xB,KAAK5E,IAAIkG,qBAAqB7F,YAAcvtB,KAAK4gC,WAAa5gC,KAAK4Q,MAAQ,EAAI5Q,KAAK0N,QAAQqyB,iBACxHr6B,EAAM48B,gBAAkB,EAGL,QAAf5Q,GACFvV,EAAM3L,MAAMnJ,IAAM,IAClB8U,EAAM3L,MAAMvJ,KAAO,IACnBkV,EAAM3L,MAAM2P,OAAS,GACrBhE,EAAM3L,MAAMI,MAAQ5Q,KAAK4Q,MAAQ,KACjCuL,EAAM3L,MAAMK,OAAS7Q,KAAK6Q,OAAS,OAGnCsL,EAAM3L,MAAMnJ,IAAM,GAClB8U,EAAM3L,MAAM2P,OAAS,IACrBhE,EAAM3L,MAAMvJ,KAAO,IACnBkV,EAAM3L,MAAMI,MAAQ5Q,KAAK4Q,MAAQ,KACjCuL,EAAM3L,MAAMK,OAAS7Q,KAAK6Q,OAAS,MAErCgxB,EAAe7hC,KAAKuiC,gBACM,GAAtBviC,KAAK0N,QAAQoyB,OACf9/B,KAAKwhC,oBAGT,MAAOK,IAOTt/B,EAASgP,UAAUgxB,cAAgB,WACjC3hC,EAAQsO,gBAAgBlP,KAAKqgC,YAE7B,IAAI3O,GAAc1xB,KAAK0N,QAAqB,YAGxCqqB,EAAc/3B,KAAK6gC,OAAS7gC,KAAK0F,MAAMw8B,iBAAmB,GAAKliC,KAAK2gC,iBACpE3b,EAAO,GAAItjB,GAAS1B,KAAK8N,MAAMY,MAAO1O,KAAK8N,MAAMqX,IAAK4S,EAAa/3B,KAAKktB,IAAI/Q,MAAMsR,aACtFztB,MAAKglB,KAAOA,EACZA,EAAKiU,OAGL,IAAIyH,GAAa1gC,KAAKktB,IAAI/Q,MAAMsR,cAAiBzI,EAAKqU,YAAcrU,EAAKA,KAAQ,EACjFhlB,MAAK0gC,WAAaA,CAElB,IAAI8B,GAAgBxiC,KAAK6Q,OAAS6vB,EAC9B+B,EAAiB,CAErB,IAAmB,GAAfziC,KAAK6gC,OAAiB,CACxBH,EAAa1gC,KAAK2gC,iBAClB8B,EAAiB79B,KAAK+lB,MAAO3qB,KAAK6Q,OAAS6vB,EAAc8B,EACzD,KAAK,GAAIt9B,GAAI,EAAO,GAAMu9B,EAAVv9B,EAA0BA,IACxC8f,EAAKwU,UAEPgJ,GAAgBxiC,KAAK6Q,OAAS6vB,EAIhC1gC,KAAK0iC,YAAc1d,EAAKqT,SACxB,IAAIsK,GAAiB,EAGjBl2B,EAAM,CACVuY,GAAKE,OAELllB,KAAK4iC,aAAe,CAEpB,KADA,GAAIxyB,GAAI,EACD3D,EAAM7H,KAAK+lB,MAAM6X,IAAgB,CAEtCpyB,EAAIxL,KAAK+lB,MAAMle,EAAMi0B,GACrBiC,EAAiBl2B,EAAMi0B,CACvB,IAAIjH,GAAUzU,EAAKyU,WAEfz5B,KAAK0N,QAAyB,iBAAgB,GAAX+rB,GAAmC,GAAfz5B,KAAK6gC,QAAsD,GAAnC7gC,KAAK0N,QAAyB,kBAC/G1N,KAAK6iC,aAAazyB,EAAI,EAAG4U,EAAKC,aAAcyM,EAAa,cAAe1xB,KAAK0F,MAAMs8B,iBAGjFvI,GAAWz5B,KAAK0N,QAAyB,iBAAoB,GAAf1N,KAAK6gC,QAChB,GAAnC7gC,KAAK0N,QAAyB,iBAA6B,GAAf1N,KAAK6gC,QAA8B,GAAXpH,GAElErpB,GAAK,GACPpQ,KAAK6iC,aAAazyB,EAAI,EAAG4U,EAAKC,aAAcyM,EAAa,cAAe1xB,KAAK0F,MAAMw8B,iBAErFliC,KAAK8iC,YAAY1yB,EAAGshB,EAAa,wBAAyB1xB,KAAK0N,QAAQqyB,iBAAkB//B,KAAK0F,MAAM28B,iBAGpGriC,KAAK8iC,YAAY1yB,EAAGshB,EAAa,wBAAyB1xB,KAAK0N,QAAQsyB,iBAAkBhgC,KAAK0F,MAAMy8B,gBAGtGnd,EAAKE,OACLzY,IAGFzM,KAAKwgC,iBAAmBmC,IAAiBH,EAAc,GAAKxd,EAAKA,KAEjE,IAAIyB,GAA+B,GAAtBzmB,KAAK0N,QAAQoyB,MAAgB9/B,KAAK0N,QAAQyyB,UAAYngC,KAAK0N,QAAQuyB,aAAe,GAAKjgC,KAAK0N,QAAQuyB,aAAe,EAEhI,OAAIjgC,MAAK4iC,aAAgB5iC,KAAK4Q,MAAQ6V,GAAmC,GAAxBzmB,KAAK0N,QAAQ8X,SAC5DxlB,KAAK4Q,MAAQ5Q,KAAK4iC,aAAenc,EACjCzmB,KAAK0N,QAAQkD,MAAQ5Q,KAAK4Q,MAAQ,KAClChQ,EAAQ2O,gBAAgBvP,KAAKqgC,aAC7BrgC,KAAKse,UACE,GAGAte,KAAK4iC,aAAgB5iC,KAAK4Q,MAAQ6V,GAAmC,GAAxBzmB,KAAK0N,QAAQ8X,SAAmBxlB,KAAK4Q,MAAQ5Q,KAAKygC,UACtGzgC,KAAK4Q,MAAQhM,KAAK6H,IAAIzM,KAAKygC,SAASzgC,KAAK4iC,aAAenc,GACxDzmB,KAAK0N,QAAQkD,MAAQ5Q,KAAK4Q,MAAQ,KAClChQ,EAAQ2O,gBAAgBvP,KAAKqgC,aAC7BrgC,KAAKse,UACE,IAGP1d,EAAQ2O,gBAAgBvP,KAAKqgC,cACtB,IAaX99B,EAASgP,UAAUsxB,aAAe,SAAUzyB,EAAGiW,EAAMqL,EAAalqB,EAAWu7B,GAE3E,GAAIxd,GAAQ3kB,EAAQmP,cAAc,MAAM/P,KAAKqgC,YAAargC,KAAKktB,IAAI/Q,MACnEoJ,GAAM/d,UAAYA,EAClB+d,EAAMzE,UAAYuF,EAEC,QAAfqL,GACFnM,EAAM/U,MAAMvJ,KAAO,IAAMjH,KAAK0N,QAAQuyB,aAAe,KACrD1a,EAAM/U,MAAM4U,UAAY,UAGxBG,EAAM/U,MAAM0T,MAAQ,IAAMlkB,KAAK0N,QAAQuyB,aAAe,KACtD1a,EAAM/U,MAAM4U,UAAY,QAG1BG,EAAM/U,MAAMnJ,IAAM+I,EAAI,GAAM2yB,EAAkB/iC,KAAK0N,QAAQwyB,aAAe,KAE1E7Z,GAAQ,EAER,IAAI2c,GAAep+B,KAAK6H,IAAIzM,KAAK0F,MAAMu9B,eAAejjC,KAAK0F,MAAMw9B,eAC7DljC,MAAK4iC,aAAevc,EAAKhhB,OAAS29B,IACpChjC,KAAK4iC,aAAevc,EAAKhhB,OAAS29B,IAYtCzgC,EAASgP,UAAUuxB,YAAc,SAAU1yB,EAAGshB,EAAalqB,EAAWif,EAAQ7V,GAC5E,GAAmB,GAAf5Q,KAAK6gC,OAAgB,CACvB,GAAI7T,GAAOpsB,EAAQmP,cAAc,MAAM/P,KAAKqgC,YAAargC,KAAKktB,IAAIoU,cAClEtU,GAAKxlB,UAAYA,EACjBwlB,EAAKlM,UAAY,GAEE,QAAf4Q,EACF1E,EAAKxc,MAAMvJ,KAAQjH,KAAK4Q,MAAQ6V,EAAU,KAG1CuG,EAAKxc,MAAM0T,MAASlkB,KAAK4Q,MAAQ6V,EAAU,KAG7CuG,EAAKxc,MAAMI,MAAQA,EAAQ,KAC3Boc,EAAKxc,MAAMnJ,IAAM+I,EAAI,OAKzB7N,EAASgP,UAAU4xB,aAAe,SAAUt8B,GAC1C,GAAIu8B,GAAgBpjC,KAAK0iC,YAAc77B,EACnCw8B,EAAiBD,EAAgBpjC,KAAKwgC,gBAC1C,OAAO6C,IAST9gC,EAASgP,UAAUuwB,mBAAqB,WAEtC,KAAM,mBAAqB9hC,MAAK0F,OAAQ,CAEtC,GAAI49B,GAAY1zB,SAAS2zB,eAAe,KACpCC,EAAmB5zB,SAASK,cAAc,MAC9CuzB,GAAiBh8B,UAAY,sBAC7Bg8B,EAAiB1zB,YAAYwzB,GAC7BtjC,KAAKktB,IAAI/Q,MAAMrM,YAAY0zB,GAE3BxjC,KAAK0F,MAAMs8B,gBAAkBwB,EAAiB9hB,aAC9C1hB,KAAK0F,MAAMw9B,eAAiBM,EAAiBnnB,YAE7Crc,KAAKktB,IAAI/Q,MAAM3M,YAAYg0B,GAG7B,KAAM,mBAAqBxjC,MAAK0F,OAAQ,CACtC,GAAI+9B,GAAY7zB,SAAS2zB,eAAe,KACpCG,EAAmB9zB,SAASK,cAAc,MAC9CyzB,GAAiBl8B,UAAY,sBAC7Bk8B,EAAiB5zB,YAAY2zB,GAC7BzjC,KAAKktB,IAAI/Q,MAAMrM,YAAY4zB,GAE3B1jC,KAAK0F,MAAMw8B,gBAAkBwB,EAAiBhiB,aAC9C1hB,KAAK0F,MAAMu9B,eAAiBS,EAAiBrnB,YAE7Crc,KAAKktB,IAAI/Q,MAAM3M,YAAYk0B,KAU/BnhC,EAASgP,UAAU2gB,KAAO,SAASwM,GACjC,MAAO1+B,MAAKglB,KAAKkN,KAAKwM,IAGxB7+B,EAAOD,QAAU2C,GAKb,SAAS1C,EAAQD,EAASM,GAW9B,QAASsC,GAAY6N,EAAOsxB,EAASj0B,EAASi2B,GAC5C3jC,KAAKK,GAAKshC,CACV,IAAIx0B,IAAU,WAAW,QAAQ,OAAO,mBAAmB,WAAW,aAAa,SAAS,aAC5FnN,MAAK0N,QAAU/M,EAAKuM,sBAAsBC,EAAOO,GACjD1N,KAAK4jC,kBAAwC19B,SAApBmK,EAAM7I,UAC/BxH,KAAK2jC,yBAA2BA,EAChC3jC,KAAK6jC,aAAe,EACpB7jC,KAAK+S,OAAO1C,GACkB,GAA1BrQ,KAAK4jC,oBACP5jC,KAAK2jC,yBAAyB,IAAM,GAEtC3jC,KAAK+yB,aApBP,GAAIpyB,GAAOT,EAAoB,GAC3BU,EAAUV,EAAoB,EAsBlCsC,GAAW+O,UAAU0hB,SAAW,SAASlxB,GAC1B,MAATA,GACF/B,KAAK+yB,UAAYhxB,EACQ,GAArB/B,KAAK0N,QAAQ2G,MACfrU,KAAK+yB,UAAU1e,KAAK,SAAUpP,EAAEa,GAAI,MAAOb,GAAEkL,EAAIrK,EAAEqK,KAIrDnQ,KAAK+yB,cAITvwB,EAAW+O,UAAUuyB,gBAAkB,SAAS1hB,GAC9CpiB,KAAK6jC,aAAezhB,GAGtB5f,EAAW+O,UAAUoI,WAAa,SAASjM,GACzC,GAAgBxH,SAAZwH,EAAuB,CACzB,GAAIP,IAAU,WAAW,QAAQ,OAAO,mBAAmB,WAC3DxM,GAAKkF,oBAAoBsH,EAAQnN,KAAK0N,QAASA,GAE/C/M,EAAK6M,aAAaxN,KAAK0N,QAASA,EAAQ,cACxC/M,EAAK6M,aAAaxN,KAAK0N,QAASA,EAAQ,cACxC/M,EAAK6M,aAAaxN,KAAK0N,QAASA,EAAQ,UAEpCA,EAAQq2B,YACuB,gBAAtBr2B,GAAQq2B,YACbr2B,EAAQq2B,WAAWC,kBACqB,WAAtCt2B,EAAQq2B,WAAWC,gBACrBhkC,KAAK0N,QAAQq2B,WAAWE,MAAQ,EAEa,WAAtCv2B,EAAQq2B,WAAWC,gBAC1BhkC,KAAK0N,QAAQq2B,WAAWE,MAAQ,GAGhCjkC,KAAK0N,QAAQq2B,WAAWC,gBAAkB,cAC1ChkC,KAAK0N,QAAQq2B,WAAWE,MAAQ,OAQ5CzhC,EAAW+O,UAAUwB,OAAS,SAAS1C,GACrCrQ,KAAKqQ,MAAQA,EACbrQ,KAAK+sB,QAAU1c,EAAM0c,SAAW,QAChC/sB,KAAKwH,UAAY6I,EAAM7I,WAAaxH,KAAKwH,WAAa,aAAexH,KAAK2jC,yBAAyB,GAAK,GACxG3jC,KAAK2Z,WAAWtJ,EAAM3C,UAGxBlL,EAAW+O,UAAUqwB,SAAW,SAASzxB,EAAGC,EAAGjB,EAAe+0B,EAAc/D,EAAWsB,GACrF,GACI0C,GAAMC,EADNC,EAA0B,GAAb5C,EAGb6C,EAAU1jC,EAAQ6O,cAAc,OAAQN,EAAe+0B,EAO3D,IANAI,EAAQ7zB,eAAe,KAAM,IAAKN,GAClCm0B,EAAQ7zB,eAAe,KAAM,IAAKL,EAAIi0B,GACtCC,EAAQ7zB,eAAe,KAAM,QAAS0vB,GACtCmE,EAAQ7zB,eAAe,KAAM,SAAU,EAAE4zB,GACzCC,EAAQ7zB,eAAe,KAAM,QAAS,WAEZ,QAAtBzQ,KAAK0N,QAAQ8C,MACf2zB,EAAOvjC,EAAQ6O,cAAc,OAAQN,EAAe+0B,GACpDC,EAAK1zB,eAAe,KAAM,QAASzQ,KAAKwH,WACxC28B,EAAK1zB,eAAe,KAAM,IAAK,IAAMN,EAAI,IAAIC,EAAE,MAAQD,EAAIgwB,GAAa,IAAI/vB,GACzC,GAA/BpQ,KAAK0N,QAAQ62B,OAAO52B,UACtBy2B,EAAWxjC,EAAQ6O,cAAc,OAAQN,EAAe+0B,GACjB,OAAnClkC,KAAK0N,QAAQ62B,OAAO7S,YACtB0S,EAAS3zB,eAAe,KAAM,IAAK,IAAIN,EAAE,MAAQC,EAAIi0B,GACnD,IAAIl0B,EAAE,IAAIC,EAAE,MAAOD,EAAIgwB,GAAa,IAAI/vB,EAAE,MAAOD,EAAIgwB,GAAa,KAAO/vB,EAAIi0B,IAG/ED,EAAS3zB,eAAe,KAAM,IAAK,IAAIN,EAAE,IAAIC,EAAE,KACzCD,EAAE,KAAOC,EAAIi0B,GAAc,MACzBl0B,EAAIgwB,GAAa,KAAO/vB,EAAIi0B,GAClC,KAAMl0B,EAAIgwB,GAAa,IAAI/vB,GAE/Bg0B,EAAS3zB,eAAe,KAAM,QAASzQ,KAAKwH,UAAY,cAGnB,GAAnCxH,KAAK0N,QAAQ6C,WAAW5C,SAC1B/M,EAAQsP,UAAUC,EAAI,GAAMgwB,EAAU/vB,EAAGpQ,KAAMmP,EAAe+0B,OAG7D,CACH,GAAIM,GAAW5/B,KAAK+lB,MAAM,GAAMwV,GAC5BsE,EAAa7/B,KAAK+lB,MAAM,GAAM8W,GAC9BiD,EAAa9/B,KAAK+lB,MAAM,IAAO8W,GAE/Bhb,EAAS7hB,KAAK+lB,OAAOwV,EAAa,EAAIqE,GAAW,EAErD5jC,GAAQ+P,QAAQR,EAAI,GAAIq0B,EAAW/d,EAAYrW,EAAIi0B,EAAaI,EAAa,EAAGD,EAAUC,EAAYzkC,KAAKwH,UAAY,OAAQ2H,EAAe+0B,GAC9ItjC,EAAQ+P,QAAQR,EAAI,IAAIq0B,EAAW/d,EAAS,EAAGrW,EAAIi0B,EAAaK,EAAa,EAAGF,EAAUE,EAAY1kC,KAAKwH,UAAY,OAAQ2H,EAAe+0B,KAIlJrkC,EAAOD,QAAU4C,GAKb,SAAS3C,EAAQD,EAASM,GAY9B,QAASuC,GAAOk/B,EAAS5wB,EAAM+hB,GAC7B9yB,KAAK2hC,QAAUA,EAEf3hC,KAAK8yB,QAAUA,EAEf9yB,KAAKktB,OACLltB,KAAK0F,OACH6f,OACE3U,MAAO,EACPC,OAAQ,IAGZ7Q,KAAKwH,UAAY,KAEjBxH,KAAK+B,SACL/B,KAAK2kC,gBACL3kC,KAAK6N,cACH+2B,WACAC,UAGF7kC,KAAK6xB,UAEL7xB,KAAKoW,QAAQrF,GAjCf,GAAIpQ,GAAOT,EAAoB,GAC3B0B,EAAQ1B,EAAoB,IAC5BiC,EAAYjC,EAAoB,GAsCpCuC,GAAM8O,UAAUsgB,QAAU,WACxB,GAAItM,GAAQ3V,SAASK,cAAc,MACnCsV,GAAM/d,UAAY,SAClBxH,KAAKktB,IAAI3H,MAAQA,CAEjB,IAAIuf,GAAQl1B,SAASK,cAAc,MACnC60B,GAAMt9B,UAAY,QAClB+d,EAAMzV,YAAYg1B,GAClB9kC,KAAKktB,IAAI4X,MAAQA,CAEjB,IAAIC,GAAan1B,SAASK,cAAc,MACxC80B,GAAWv9B,UAAY,QACvBu9B,EAAW,kBAAoB/kC,KAC/BA,KAAKktB,IAAI6X,WAAaA,EAEtB/kC,KAAKktB,IAAI9hB,WAAawE,SAASK,cAAc,OAC7CjQ,KAAKktB,IAAI9hB,WAAW5D,UAAY,QAEhCxH,KAAKktB,IAAIgP,KAAOtsB,SAASK,cAAc,OACvCjQ,KAAKktB,IAAIgP,KAAK10B,UAAY,QAK1BxH,KAAKktB,IAAI8X,OAASp1B,SAASK,cAAc,OACzCjQ,KAAKktB,IAAI8X,OAAOx0B,MAAMomB,WAAa,SACnC52B,KAAKktB,IAAI8X,OAAOlkB,UAAY,IAC5B9gB,KAAKktB,IAAI9hB,WAAW0E,YAAY9P,KAAKktB,IAAI8X,SAO3CviC,EAAM8O,UAAU6E,QAAU,SAASrF,GAEjC,GAAIgc,GAAUhc,GAAQA,EAAKgc,OACvBA,aAAmBkY,SACrBjlC,KAAKktB,IAAI4X,MAAMh1B,YAAYid,GAG3B/sB,KAAKktB,IAAI4X,MAAMhkB,UADG5a,QAAX6mB,EACoBA,EAGA/sB,KAAK2hC,QAIlC3hC,KAAKktB,IAAI3H,MAAM6Z,MAAQruB,GAAQA,EAAKquB,OAAS,GAExCp/B,KAAKktB,IAAI4X,MAAMtkB,WAIlB7f,EAAKmH,gBAAgB9H,KAAKktB,IAAI4X,MAAO,UAHrCnkC,EAAK4G,aAAavH,KAAKktB,IAAI4X,MAAO,SAOpC,IAAIt9B,GAAYuJ,GAAQA,EAAKvJ,WAAa,IACtCA,IAAaxH,KAAKwH,YAChBxH,KAAKwH,YACP7G,EAAKmH,gBAAgB9H,KAAKktB,IAAI3H,MAAO/d,GACrC7G,EAAKmH,gBAAgB9H,KAAKktB,IAAI6X,WAAYv9B,GAC1C7G,EAAKmH,gBAAgB9H,KAAKktB,IAAI9hB,WAAY5D,GAC1C7G,EAAKmH,gBAAgB9H,KAAKktB,IAAIgP,KAAM10B,IAEtC7G,EAAK4G,aAAavH,KAAKktB,IAAI3H,MAAO/d,GAClC7G,EAAK4G,aAAavH,KAAKktB,IAAI6X,WAAYv9B,GACvC7G,EAAK4G,aAAavH,KAAKktB,IAAI9hB,WAAY5D,GACvC7G,EAAK4G,aAAavH,KAAKktB,IAAIgP,KAAM10B,KAQrC/E,EAAM8O,UAAU2zB,cAAgB,WAC9B,MAAOllC,MAAK0F,MAAM6f,MAAM3U;EAW1BnO,EAAM8O,UAAU+M,OAAS,SAASxQ,EAAOiJ,EAAQouB,GAC/C,GAAIhP,IAAU,CAEdn2B,MAAK2kC,aAAe3kC,KAAKolC,oBAAoBplC,KAAK6N,aAAc7N,KAAK2kC,aAAc72B,EAInF,IAAIu3B,GAAerlC,KAAKktB,IAAI8X,OAAOtjB,YAC/B2jB,IAAgBrlC,KAAKslC,mBACvBtlC,KAAKslC,iBAAmBD,EAExB1kC,EAAKsH,QAAQjI,KAAK+B,MAAO,SAAU4Q,GACjCA,EAAK4yB,OAAQ,EACT5yB,EAAK6yB,WAAW7yB,EAAK2L,WAG3B6mB,GAAU,GAIRnlC,KAAK8yB,QAAQplB,QAAQ9L,MACvBA,EAAMA,MAAM5B,KAAK2kC,aAAc5tB,EAAQouB,GAGvCvjC,EAAM06B,QAAQt8B,KAAK2kC,aAAc5tB,EAInC,IAAIlG,GACA8zB,EAAe3kC,KAAK2kC,YACxB,IAAIA,EAAat/B,OAAQ,CACvB,GAAI0F,GAAM45B,EAAa,GAAGt9B,IACtBoF,EAAMk4B,EAAa,GAAGt9B,IAAMs9B,EAAa,GAAG9zB,MAKhD,IAJAlQ,EAAKsH,QAAQ08B,EAAc,SAAUhyB,GACnC5H,EAAMnG,KAAKmG,IAAIA,EAAK4H,EAAKtL,KACzBoF,EAAM7H,KAAK6H,IAAIA,EAAMkG,EAAKtL,IAAMsL,EAAK9B,UAEnC9F,EAAMgM,EAAOmlB,KAAM,CAErB,GAAIzV,GAAS1b,EAAMgM,EAAOmlB,IAC1BzvB,IAAOga,EACP9lB,EAAKsH,QAAQ08B,EAAc,SAAUhyB,GACnCA,EAAKtL,KAAOof,IAGhB5V,EAASpE,EAAMsK,EAAOpE,KAAK2P,SAAW,MAGtCzR,GAASkG,EAAOmlB,KAAOnlB,EAAOpE,KAAK2P,QAErCzR,GAASjM,KAAK6H,IAAIoE,EAAQ7Q,KAAK0F,MAAM6f,MAAM1U,OAG3C,IAAIk0B,GAAa/kC,KAAKktB,IAAI6X,UAC1B/kC,MAAKqH,IAAM09B,EAAWU,UACtBzlC,KAAKiH,KAAO89B,EAAWW,WACvB1lC,KAAK4Q,MAAQm0B,EAAWxX,YACxB4I,EAAUx1B,EAAK0H,eAAerI,KAAM,SAAU6Q,IAAWslB,EAGzDA,EAAUx1B,EAAK0H,eAAerI,KAAK0F,MAAM6f,MAAO,QAASvlB,KAAKktB,IAAI4X,MAAMzoB,cAAgB8Z,EACxFA,EAAUx1B,EAAK0H,eAAerI,KAAK0F,MAAM6f,MAAO,SAAUvlB,KAAKktB,IAAI4X,MAAMpjB,eAAiByU,EAG1Fn2B,KAAKktB,IAAI9hB,WAAWoF,MAAMK,OAAUA,EAAS,KAC7C7Q,KAAKktB,IAAI6X,WAAWv0B,MAAMK,OAAUA,EAAS,KAC7C7Q,KAAKktB,IAAI3H,MAAM/U,MAAMK,OAASA,EAAS,IAGvC,KAAK,GAAI3L,GAAI,EAAGygC,EAAK3lC,KAAK2kC,aAAat/B,OAAYsgC,EAAJzgC,EAAQA,IAAK,CAC1D,GAAIyN,GAAO3S,KAAK2kC,aAAaz/B,EAC7ByN,GAAKizB,cAGP,MAAOzP,IAMT1zB,EAAM8O,UAAU8vB,KAAO,WAChBrhC,KAAKktB,IAAI3H,MAAM/b,YAClBxJ,KAAK8yB,QAAQ5F,IAAI2Y,SAAS/1B,YAAY9P,KAAKktB,IAAI3H,OAG5CvlB,KAAKktB,IAAI6X,WAAWv7B,YACvBxJ,KAAK8yB,QAAQ5F,IAAI6X,WAAWj1B,YAAY9P,KAAKktB,IAAI6X,YAG9C/kC,KAAKktB,IAAI9hB,WAAW5B,YACvBxJ,KAAK8yB,QAAQ5F,IAAI9hB,WAAW0E,YAAY9P,KAAKktB,IAAI9hB,YAG9CpL,KAAKktB,IAAIgP,KAAK1yB,YACjBxJ,KAAK8yB,QAAQ5F,IAAIgP,KAAKpsB,YAAY9P,KAAKktB,IAAIgP,OAO/Cz5B,EAAM8O,UAAU6vB,KAAO,WACrB,GAAI7b,GAAQvlB,KAAKktB,IAAI3H,KACjBA,GAAM/b,YACR+b,EAAM/b,WAAWgG,YAAY+V,EAG/B,IAAIwf,GAAa/kC,KAAKktB,IAAI6X,UACtBA,GAAWv7B,YACbu7B,EAAWv7B,WAAWgG,YAAYu1B,EAGpC,IAAI35B,GAAapL,KAAKktB,IAAI9hB,UACtBA,GAAW5B,YACb4B,EAAW5B,WAAWgG,YAAYpE,EAGpC,IAAI8wB,GAAOl8B,KAAKktB,IAAIgP,IAChBA,GAAK1yB,YACP0yB,EAAK1yB,WAAWgG,YAAY0sB,IAQhCz5B,EAAM8O,UAAUD,IAAM,SAASqB,GAI7B,GAHA3S,KAAK+B,MAAM4Q,EAAKtS,IAAMsS,EACtBA,EAAKmzB,UAAU9lC,MAEX2S,YAAgBxQ,IAAgD,IAAnCnC,KAAK2kC,aAAah9B,QAAQgL,GAAa,CACtE,GAAI7E,GAAQ9N,KAAK8yB,QAAQhB,KAAKhkB,KAC9B9N,MAAK+lC,gBAAgBpzB,EAAM3S,KAAK2kC,aAAc72B,KAQlDrL,EAAM8O,UAAUiD,OAAS,SAAS7B,SACzB3S,MAAK+B,MAAM4Q,EAAKtS,IACvBsS,EAAKmzB,UAAU9lC,KAAK8yB,QAGpB,IAAI/qB,GAAQ/H,KAAK2kC,aAAah9B,QAAQgL,EACzB,KAAT5K,GAAa/H,KAAK2kC,aAAa38B,OAAOD,EAAO,IASnDtF,EAAM8O,UAAUy0B,kBAAoB,SAASrzB,GAC3C3S,KAAK8yB,QAAQmT,WAAWtzB,EAAKtS,KAM/BoC,EAAM8O,UAAUmC,MAAQ,WACtB,GAAItL,GAAQzH,EAAKwH,QAAQnI,KAAK+B,MAC9B/B,MAAK6N,aAAa+2B,QAAUx8B,EAC5BpI,KAAK6N,aAAag3B,MAAQ7kC,KAAKkmC,qBAAqB99B,GAEpDxG,EAAMg6B,aAAa57B,KAAK6N,aAAa+2B,SACrChjC,EAAMi6B,WAAW77B,KAAK6N,aAAag3B,QASrCpiC,EAAM8O,UAAU20B,qBAAuB,SAAS99B,GAG9C,IAAK,GAFD+9B,MAEKjhC,EAAI,EAAGA,EAAIkD,EAAM/C,OAAQH,IAC5BkD,EAAMlD,YAAc/C,IACtBgkC,EAASv+B,KAAKQ,EAAMlD,GAGxB,OAAOihC,IAWT1jC,EAAM8O,UAAU6zB,oBAAsB,SAASv3B,EAAc82B,EAAc72B,GACzE,GAAIs4B,GAEAlhC,EADAmhC,IAKJ,IAAI1B,EAAat/B,OAAS,EACxB,IAAKH,EAAI,EAAGA,EAAIy/B,EAAat/B,OAAQH,IACnClF,KAAK+lC,gBAAgBpB,EAAaz/B,GAAImhC,EAAiBv4B,EAMzDs4B,GAD4B,GAA1BC,EAAgBhhC,OACE1E,EAAKiN,aAAaC,EAAa+2B,QAAS92B,EAAO,OAAO,SAGtDD,EAAa+2B,QAAQj9B,QAAQ0+B,EAAgB,GAInE,IAAIC,GAAkB3lC,EAAKiN,aAAaC,EAAag3B,MAAO/2B,EAAO,OAAO,MAG1E,IAAyB,IAArBs4B,EAAyB,CAC3B,IAAKlhC,EAAIkhC,EAAmBlhC,GAAK,IAC3BlF,KAAKumC,kBAAkB14B,EAAa+2B,QAAQ1/B,GAAImhC,EAAiBv4B,GADnC5I,KAGpC,IAAKA,EAAIkhC,EAAoB,EAAGlhC,EAAI2I,EAAa+2B,QAAQv/B,SACnDrF,KAAKumC,kBAAkB14B,EAAa+2B,QAAQ1/B,GAAImhC,EAAiBv4B,GADN5I,MAMnE,GAAuB,IAAnBohC,EAAuB,CACzB,IAAKphC,EAAIohC,EAAiBphC,GAAK,IACzBlF,KAAKumC,kBAAkB14B,EAAag3B,MAAM3/B,GAAImhC,EAAiBv4B,GADnC5I,KAGlC,IAAKA,EAAIohC,EAAkB,EAAGphC,EAAI2I,EAAag3B,MAAMx/B,SAC/CrF,KAAKumC,kBAAkB14B,EAAag3B,MAAM3/B,GAAImhC,EAAiBv4B,GADR5I,MAK/D,MAAOmhC,IAeT5jC,EAAM8O,UAAUg1B,kBAAoB,SAAS5zB,EAAMgyB,EAAc72B,GAC/D,MAAI6E,GAAKlE,UAAUX,IACZ6E,EAAK6yB,WAAW7yB,EAAK0uB,OAC1B1uB,EAAK6zB,cAC6B,IAA9B7B,EAAah9B,QAAQgL,IACvBgyB,EAAa/8B,KAAK+K,IAEb,IAGHA,EAAK6yB,WAAW7yB,EAAKyuB,QAClB,IAeX3+B,EAAM8O,UAAUw0B,gBAAkB,SAASpzB,EAAMgyB,EAAc72B,GACzD6E,EAAKlE,UAAUX,IACZ6E,EAAK6yB,WAAW7yB,EAAK0uB,OAE1B1uB,EAAK6zB,cACL7B,EAAa/8B,KAAK+K,IAGdA,EAAK6yB,WAAW7yB,EAAKyuB,QAI7BvhC,EAAOD,QAAU6C,GAKb,SAAS5C,EAAQD,EAASM,GAwB9B,QAASwC,GAAQovB,EAAMpkB,GACrB1N,KAAK8xB,KAAOA,EAEZ9xB,KAAKwxB,gBACHlrB,KAAM,KACNorB,YAAa,SACb+U,MAAO,SACP7kC,OAAO,EACP8kC,WAAY,KAEZC,YAAY,EACZC,UACEC,YAAY,EACZ3F,aAAa,EACb5vB,KAAK,EACLkD,QAAQ,GAGVsyB,MAAO,SAAUn0B,EAAMzK,GACrBA,EAASyK,IAEXo0B,SAAU,SAAUp0B,EAAMzK,GACxBA,EAASyK,IAEXq0B,OAAQ,SAAUr0B,EAAMzK,GACtBA,EAASyK,IAEXs0B,SAAU,SAAUt0B,EAAMzK,GACxBA,EAASyK,IAGXoE,QACEpE,MACE0P,WAAY,GACZC,SAAU,IAEZ4Z,KAAM,IAERrb,QAAS,GAIX7gB,KAAK0N,QAAU/M,EAAKqE,UAAWhF,KAAKwxB,gBAGpCxxB,KAAKknC,aACH5gC,MAAOoI,MAAO,OAAQyW,IAAK,SAG7BnlB,KAAK82B,YACH3E,SAAUL,EAAKnxB,KAAKwxB,SACpBI,OAAQT,EAAKnxB,KAAK4xB,QAEpBvyB,KAAKktB,OACLltB,KAAK0F,SACL1F,KAAKyD,OAAS,IAEd,IAAI2O,GAAKpS,IACTA,MAAK+yB,UAAY,KACjB/yB,KAAKgzB,WAAa,KAGlBhzB,KAAKmnC,eACH71B,IAAO,SAAUpI,EAAO6I,GACtBK,EAAGg1B,OAAOr1B,EAAOhQ,QAEnBgR,OAAU,SAAU7J,EAAO6I,GACzBK,EAAGi1B,UAAUt1B,EAAOhQ,QAEtByS,OAAU,SAAUtL,EAAO6I,GACzBK,EAAGk1B,UAAUv1B,EAAOhQ,SAKxB/B,KAAKunC,gBACHj2B,IAAO,SAAUpI,EAAO6I,GACtBK,EAAGo1B,aAAaz1B,EAAOhQ,QAEzBgR,OAAU,SAAU7J,EAAO6I,GACzBK,EAAGq1B,gBAAgB11B,EAAOhQ,QAE5ByS,OAAU,SAAUtL,EAAO6I,GACzBK,EAAGs1B,gBAAgB31B,EAAOhQ,SAI9B/B,KAAK+B,SACL/B,KAAKu1B,UACLv1B,KAAK2nC,YAEL3nC,KAAK4nC,aACL5nC,KAAK6nC,YAAa,EAElB7nC,KAAK8nC,eAGL9nC,KAAK6xB,UAEL7xB,KAAK2Z,WAAWjM,GAzHlB,GAAIwlB,GAAShzB,EAAoB,IAC7BS,EAAOT,EAAoB,GAC3BW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/BkC,EAAYlC,EAAoB,IAChCuC,EAAQvC,EAAoB,IAC5B+B,EAAU/B,EAAoB,IAC9BgC,EAAYhC,EAAoB,IAChCiC,EAAYjC,EAAoB,IAGhC6nC,EAAY,eAiHhBrlC,GAAQ6O,UAAY,GAAInP,GAGxBM,EAAQ4S,OACN0yB,IAAK/lC,EACL6L,MAAO3L,EACPmO,MAAOpO,GAMTQ,EAAQ6O,UAAUsgB,QAAU,WAC1B,GAAI1V,GAAQvM,SAASK,cAAc,MACnCkM,GAAM3U,UAAY,UAClB2U,EAAM,oBAAsBnc,KAC5BA,KAAKktB,IAAI/Q,MAAQA,CAGjB,IAAI/Q,GAAawE,SAASK,cAAc,MACxC7E,GAAW5D,UAAY,aACvB2U,EAAMrM,YAAY1E,GAClBpL,KAAKktB,IAAI9hB,WAAaA,CAGtB,IAAI25B,GAAan1B,SAASK,cAAc,MACxC80B,GAAWv9B,UAAY,aACvB2U,EAAMrM,YAAYi1B,GAClB/kC,KAAKktB,IAAI6X,WAAaA,CAGtB,IAAI7I,GAAOtsB,SAASK,cAAc,MAClCisB,GAAK10B,UAAY,OACjBxH,KAAKktB,IAAIgP,KAAOA,CAGhB,IAAI2J,GAAWj2B,SAASK,cAAc,MACtC41B,GAASr+B,UAAY,WACrBxH,KAAKktB,IAAI2Y,SAAWA,EAGpB7lC,KAAKioC,mBAMLjoC,KAAKyD,OAASyvB,EAAOlzB,KAAK8xB,KAAK5E,IAAImG,iBACjCa,iBAAiB,IAInBl0B,KAAKyD,OAAO+N,GAAG,QAAaxR,KAAK8zB,SAAS7B,KAAKjyB,OAC/CA,KAAKyD,OAAO+N,GAAG,YAAaxR,KAAKg0B,aAAa/B,KAAKjyB,OACnDA,KAAKyD,OAAO+N,GAAG,OAAaxR,KAAKi0B,QAAQhC,KAAKjyB,OAC9CA,KAAKyD,OAAO+N,GAAG,UAAaxR,KAAKq6B,WAAWpI,KAAKjyB,OAGjDA,KAAKyD,OAAO+N,GAAG,MAAQxR,KAAKkoC,cAAcjW,KAAKjyB,OAG/CA,KAAKyD,OAAO+N,GAAG,OAAQxR,KAAKmoC,mBAAmBlW,KAAKjyB,OAGpDA,KAAKyD,OAAO+N,GAAG,YAAaxR,KAAKooC,WAAWnW,KAAKjyB,OAGjDA,KAAKqhC,QAkEP3+B,EAAQ6O,UAAUoI,WAAa,SAASjM,GACtC,GAAIA,EAAS,CAEX,GAAIP,IAAU,OAAQ,QAAS,cAAe,UAAW,QAAS,aAAc,aAChFxM,GAAK8E,gBAAgB0H,EAAQnN,KAAK0N,QAASA,GAEvC,UAAYA,KACgB,gBAAnBA,GAAQqJ,QACjB/W,KAAK0N,QAAQqJ,OAAOmlB,KAAOxuB,EAAQqJ,OACnC/W,KAAK0N,QAAQqJ,OAAOpE,KAAK0P,WAAa3U,EAAQqJ,OAC9C/W,KAAK0N,QAAQqJ,OAAOpE,KAAK2P,SAAW5U,EAAQqJ,QAEX,gBAAnBrJ,GAAQqJ,SACtBpW,EAAK8E,iBAAiB,QAASzF,KAAK0N,QAAQqJ,OAAQrJ,EAAQqJ,QACxD,QAAUrJ,GAAQqJ,SACe,gBAAxBrJ,GAAQqJ,OAAOpE,MACxB3S,KAAK0N,QAAQqJ,OAAOpE,KAAK0P,WAAa3U,EAAQqJ,OAAOpE,KACrD3S,KAAK0N,QAAQqJ,OAAOpE,KAAK2P,SAAW5U,EAAQqJ,OAAOpE,MAEb,gBAAxBjF,GAAQqJ,OAAOpE,MAC7BhS,EAAK8E,iBAAiB,aAAc,YAAazF,KAAK0N,QAAQqJ,OAAOpE,KAAMjF,EAAQqJ,OAAOpE,SAM9F,YAAcjF,KACgB,iBAArBA,GAAQk5B,UACjB5mC,KAAK0N,QAAQk5B,SAASC,WAAcn5B,EAAQk5B,SAC5C5mC,KAAK0N,QAAQk5B,SAAS1F,YAAcxzB,EAAQk5B,SAC5C5mC,KAAK0N,QAAQk5B,SAASt1B,IAAc5D,EAAQk5B,SAC5C5mC,KAAK0N,QAAQk5B,SAASpyB,OAAc9G,EAAQk5B,UAET,gBAArBl5B,GAAQk5B,UACtBjmC,EAAK8E,iBAAiB,aAAc,cAAe,MAAO,UAAWzF,KAAK0N,QAAQk5B,SAAUl5B,EAAQk5B,UAKxG,IAAIyB,GAAc,SAAWj0B,GAC3B,GAAIA,IAAQ1G,GAAS,CACnB,GAAI46B,GAAK56B,EAAQ0G,EACjB,MAAMk0B,YAAcC,WAClB,KAAM,IAAIhlC,OAAM,UAAY6Q,EAAO,uBAAyBA,EAAO,mBAErEpU,MAAK0N,QAAQ0G,GAAQk0B,IAEtBrW,KAAKjyB,OACP,QAAS,WAAY,WAAY,UAAUiI,QAAQogC,GAGpDroC,KAAKwoC,cAOT9lC,EAAQ6O,UAAUi3B,UAAY,WAC5BxoC,KAAK2nC,YACL3nC,KAAK6nC,YAAa,GAMpBnlC,EAAQ6O,UAAUmjB,QAAU,WAC1B10B,KAAKohC,OACLphC,KAAKizB,SAAS,MACdjzB,KAAKs1B,UAAU,MAEft1B,KAAKyD,OAAS,KAEdzD,KAAK8xB,KAAO,KACZ9xB,KAAK82B,WAAa,MAMpBp0B,EAAQ6O,UAAU6vB,KAAO,WAEnBphC,KAAKktB,IAAI/Q,MAAM3S,YACjBxJ,KAAKktB,IAAI/Q,MAAM3S,WAAWgG,YAAYxP,KAAKktB,IAAI/Q,OAI7Cnc,KAAKktB,IAAIgP,KAAK1yB,YAChBxJ,KAAKktB,IAAIgP,KAAK1yB,WAAWgG,YAAYxP,KAAKktB,IAAIgP,MAI5Cl8B,KAAKktB,IAAI2Y,SAASr8B,YACpBxJ,KAAKktB,IAAI2Y,SAASr8B,WAAWgG,YAAYxP,KAAKktB,IAAI2Y,WAQtDnjC,EAAQ6O,UAAU8vB,KAAO,WAElBrhC,KAAKktB,IAAI/Q,MAAM3S,YAClBxJ,KAAK8xB,KAAK5E,IAAIjE,OAAOnZ,YAAY9P,KAAKktB,IAAI/Q,OAIvCnc,KAAKktB,IAAIgP,KAAK1yB,YACjBxJ,KAAK8xB,KAAK5E,IAAIiG,mBAAmBrjB,YAAY9P,KAAKktB,IAAIgP,MAInDl8B,KAAKktB,IAAI2Y,SAASr8B,YACrBxJ,KAAK8xB,KAAK5E,IAAIjmB,KAAK6I,YAAY9P,KAAKktB,IAAI2Y,WAW5CnjC,EAAQ6O,UAAUwkB,aAAe,SAAS3iB,GACxC,GAAIlO,GAAGygC,EAAItlC,EAAIsS,CAEf,IAAIS,EAAK,CACP,IAAKzN,MAAMC,QAAQwN,GACjB,KAAM,IAAIrN,WAAU,iBAItB,KAAKb,EAAI,EAAGygC,EAAK3lC,KAAK4nC,UAAUviC,OAAYsgC,EAAJzgC,EAAQA,IAC9C7E,EAAKL,KAAK4nC,UAAU1iC,GACpByN,EAAO3S,KAAK+B,MAAM1B,GACdsS,GAAMA,EAAK81B,UAKjB,KADAzoC,KAAK4nC,aACA1iC,EAAI,EAAGygC,EAAKvyB,EAAI/N,OAAYsgC,EAAJzgC,EAAQA,IACnC7E,EAAK+S,EAAIlO,GACTyN,EAAO3S,KAAK+B,MAAM1B,GACdsS,IACF3S,KAAK4nC,UAAUhgC,KAAKvH,GACpBsS,EAAK+1B,YAUbhmC,EAAQ6O,UAAUykB,aAAe,WAC/B,MAAOh2B,MAAK4nC,UAAU31B,YAOxBvP,EAAQ6O,UAAU8jB,gBAAkB,WAClC,GAAIvnB,GAAQ9N,KAAK8xB,KAAKhkB,MAAMooB,WACxBjvB,EAAQjH,KAAK8xB,KAAKnxB,KAAKwxB,SAASrkB,EAAMY,OACtCwV,EAAQlkB,KAAK8xB,KAAKnxB,KAAKwxB,SAASrkB,EAAMqX,KAEtC/R,IACJ,KAAK,GAAIuuB,KAAW3hC,MAAKu1B,OACvB,GAAIv1B,KAAKu1B,OAAO/vB,eAAem8B,GAM7B,IAAK,GALDtxB,GAAQrQ,KAAKu1B,OAAOoM,GACpBgH,EAAkBt4B,EAAMs0B,aAInBz/B,EAAI,EAAGA,EAAIyjC,EAAgBtjC,OAAQH,IAAK,CAC/C,GAAIyN,GAAOg2B,EAAgBzjC,EAEtByN,GAAK1L,KAAOid,GAAWvR,EAAK1L,KAAO0L,EAAK/B,MAAQ3J,GACnDmM,EAAIxL,KAAK+K,EAAKtS,IAMtB,MAAO+S,IAQT1Q,EAAQ6O,UAAUq3B,UAAY,SAASvoC,GAErC,IAAK,GADDunC,GAAY5nC,KAAK4nC,UACZ1iC,EAAI,EAAGygC,EAAKiC,EAAUviC,OAAYsgC,EAAJzgC,EAAQA,IAC7C,GAAI0iC,EAAU1iC,IAAM7E,EAAI,CACtBunC,EAAU5/B,OAAO9C,EAAG,EACpB,SASNxC,EAAQ6O,UAAU+M,OAAS,WACzB,GAAIvH,GAAS/W,KAAK0N,QAAQqJ,OACtBjJ,EAAQ9N,KAAK8xB,KAAKhkB,MAClBhE,EAASnJ,EAAK8I,OAAOK,OACrB4D,EAAU1N,KAAK0N,QACfgkB,EAAchkB,EAAQgkB,YACtByE,GAAU,EACVha,EAAQnc,KAAKktB,IAAI/Q,MACjByqB,EAAWl5B,EAAQk5B,SAASC,YAAcn5B,EAAQk5B,SAAS1F,WAG/D/kB,GAAM3U,UAAY,WAAao/B,EAAW,YAAc,IAGxDzQ,EAAUn2B,KAAK6oC,gBAAkB1S,CAIjC,IAAI2S,GAAkBh7B,EAAMqX,IAAMrX,EAAMY,MACpCq6B,EAAUD,GAAmB9oC,KAAKgpC,qBAAyBhpC,KAAK0F,MAAMkL,OAAS5Q,KAAK0F,MAAMuxB,SAC1F8R,KAAQ/oC,KAAK6nC,YAAa,GAC9B7nC,KAAKgpC,oBAAsBF,EAC3B9oC,KAAK0F,MAAMuxB,UAAYj3B,KAAK0F,MAAMkL,KAGlC,IAAIu0B,GAAUnlC,KAAK6nC,WACfoB,EAAajpC,KAAKkpC,cAClBC,GACEx2B,KAAMoE,EAAOpE,KACbupB,KAAMnlB,EAAOmlB,MAEfkN,GACEz2B,KAAMoE,EAAOpE,KACbupB,KAAMnlB,EAAOpE,KAAK2P,SAAW,GAE/BzR,EAAS,EACT+gB,EAAY7a,EAAOmlB,KAAOnlB,EAAOpE,KAAK2P,QA4B1C,OA3BA3hB,GAAKsH,QAAQjI,KAAKu1B,OAAQ,SAAUllB,GAClC,GAAIg5B,GAAeh5B,GAAS44B,EAAcE,EAAcC,EACpDE,EAAej5B,EAAMiO,OAAOxQ,EAAOu7B,EAAalE,EACpDhP,GAAUmT,GAAgBnT,EAC1BtlB,GAAUR,EAAMQ,SAElBA,EAASjM,KAAK6H,IAAIoE,EAAQ+gB,GAC1B5xB,KAAK6nC,YAAa,EAGlB1rB,EAAM3L,MAAMK,OAAU/G,EAAO+G,GAG7B7Q,KAAK0F,MAAM2B,IAAM8U,EAAMspB,UACvBzlC,KAAK0F,MAAMuB,KAAOkV,EAAMupB,WACxB1lC,KAAK0F,MAAMkL,MAAQuL,EAAMoR,YACzBvtB,KAAK0F,MAAMmL,OAASA,EAGpB7Q,KAAKktB,IAAIgP,KAAK1rB,MAAMnJ,IAAMyC,EAAuB,OAAf4nB,EAC7B1xB,KAAK8xB,KAAKC,SAAS1qB,IAAIwJ,OAAS7Q,KAAK8xB,KAAKC,SAAS1mB,OAAOhE,IAC1DrH,KAAK8xB,KAAKC,SAAS1qB,IAAIwJ,OAAS7Q,KAAK8xB,KAAKC,SAASsB,gBAAgBxiB,QACxE7Q,KAAKktB,IAAIgP,KAAK1rB,MAAMvJ,KAAOjH,KAAK8xB,KAAKC,SAAS1mB,OAAOpE,KAAO,KAG5DkvB,EAAUn2B,KAAK++B,cAAgB5I,GAUjCzzB,EAAQ6O,UAAU23B,YAAc,WAC9B,GAAIK,GAA+C,OAA5BvpC,KAAK0N,QAAQgkB,YAAwB,EAAK1xB,KAAK2nC,SAAStiC,OAAS,EACpFmkC,EAAexpC,KAAK2nC,SAAS4B,GAC7BN,EAAajpC,KAAKu1B,OAAOiU,IAAiBxpC,KAAKu1B,OAAOwS,EAE1D,OAAOkB,IAAc,MAQvBvmC,EAAQ6O,UAAU02B,iBAAmB,WACnC,GAAIwB,GAAYzpC,KAAKu1B,OAAOwS,EAE5B,IAAI/nC,KAAKgzB,WAEHyW,IACFA,EAAUrI,aACHphC,MAAKu1B,OAAOwS,QAKrB,KAAK0B,EAAW,CACd,GAAIppC,GAAK,KACL0Q,EAAO,IACX04B,GAAY,GAAIhnC,GAAMpC,EAAI0Q,EAAM/Q,MAChCA,KAAKu1B,OAAOwS,GAAa0B,CAEzB,KAAK,GAAIj2B,KAAUxT,MAAK+B,MAClB/B,KAAK+B,MAAMyD,eAAegO,IAC5Bi2B,EAAUn4B,IAAItR,KAAK+B,MAAMyR,GAI7Bi2B,GAAUpI,SAShB3+B,EAAQ6O,UAAUm4B,YAAc,WAC9B,MAAO1pC,MAAKktB,IAAI2Y,UAOlBnjC,EAAQ6O,UAAU0hB,SAAW,SAASlxB,GACpC,GACIqR,GADAhB,EAAKpS,KAEL2pC,EAAe3pC,KAAK+yB,SAGxB,IAAKhxB,EAGA,CAAA,KAAIA,YAAiBlB,IAAWkB,YAAiBjB,IAIpD,KAAM,IAAIiF,WAAU,kDAHpB/F,MAAK+yB,UAAYhxB,MAHjB/B,MAAK+yB,UAAY,IAoBnB,IAXI4W,IAEFhpC,EAAKsH,QAAQjI,KAAKmnC,cAAe,SAAUj/B,EAAUgB,GACnDygC,EAAah4B,IAAIzI,EAAOhB,KAI1BkL,EAAMu2B,EAAa51B,SACnB/T,KAAKsnC,UAAUl0B,IAGbpT,KAAK+yB,UAAW,CAElB,GAAI1yB,GAAKL,KAAKK,EACdM,GAAKsH,QAAQjI,KAAKmnC,cAAe,SAAUj/B,EAAUgB,GACnDkJ,EAAG2gB,UAAUvhB,GAAGtI,EAAOhB,EAAU7H,KAInC+S,EAAMpT,KAAK+yB,UAAUhf,SACrB/T,KAAKonC,OAAOh0B,GAGZpT,KAAKioC,qBAQTvlC,EAAQ6O,UAAUq4B,SAAW,WAC3B,MAAO5pC,MAAK+yB,WAOdrwB,EAAQ6O,UAAU+jB,UAAY,SAASC,GACrC,GACIniB,GADAhB,EAAKpS,IAgBT,IAZIA,KAAKgzB,aACPryB,EAAKsH,QAAQjI,KAAKunC,eAAgB,SAAUr/B,EAAUgB,GACpDkJ,EAAG4gB,WAAWnhB,YAAY3I,EAAOhB,KAInCkL,EAAMpT,KAAKgzB,WAAWjf,SACtB/T,KAAKgzB,WAAa,KAClBhzB,KAAK0nC,gBAAgBt0B,IAIlBmiB,EAGA,CAAA,KAAIA,YAAkB10B,IAAW00B,YAAkBz0B,IAItD,KAAM,IAAIiF,WAAU,kDAHpB/F,MAAKgzB,WAAauC,MAHlBv1B,MAAKgzB,WAAa,IASpB,IAAIhzB,KAAKgzB,WAAY,CAEnB,GAAI3yB,GAAKL,KAAKK,EACdM,GAAKsH,QAAQjI,KAAKunC,eAAgB,SAAUr/B,EAAUgB,GACpDkJ,EAAG4gB,WAAWxhB,GAAGtI,EAAOhB,EAAU7H,KAIpC+S,EAAMpT,KAAKgzB,WAAWjf,SACtB/T,KAAKwnC,aAAap0B,GAIpBpT,KAAKioC,mBAGLjoC,KAAK6pC,SAEL7pC,KAAK8xB,KAAKE,QAAQnH,KAAK,WAOzBnoB,EAAQ6O,UAAUu4B,UAAY,WAC5B,MAAO9pC,MAAKgzB,YAOdtwB,EAAQ6O,UAAU00B,WAAa,SAAS5lC,GACtC,GAAIsS,GAAO3S,KAAK+yB,UAAU5f,IAAI9S,GAC1Bs1B,EAAU31B,KAAK+yB,UAAU/e,YAEzBrB,IAEF3S,KAAK0N,QAAQu5B,SAASt0B,EAAM,SAAUA,GAChCA,GAGFgjB,EAAQnhB,OAAOnU,MAWvBqC,EAAQ6O,UAAU81B,UAAY,SAASj0B,GACrC,GAAIhB,GAAKpS,IAEToT,GAAInL,QAAQ,SAAU5H,GACpB,GAAI0pC,GAAW33B,EAAG2gB,UAAU5f,IAAI9S,EAAI+R,EAAG80B,aACnCv0B,EAAOP,EAAGrQ,MAAM1B,GAChBiG,EAAOyjC,EAASzjC,MAAQ8L,EAAG1E,QAAQpH,OAASyjC,EAAS5kB,IAAM,QAAU,OAErEnf,EAActD,EAAQ4S,MAAMhP,EAchC,IAZIqM,IAEG3M,GAAiB2M,YAAgB3M,GAMpCoM,EAAGc,YAAYP,EAAMo3B,IAJrB33B,EAAG43B,YAAYr3B,GACfA,EAAO,QAONA,EAAM,CAET,IAAI3M,EAKC,KAEG,IAAID,WAFK,iBAARO,EAEa,4HAIA,sBAAwBA,EAAO,IAVnDqM,GAAO,GAAI3M,GAAY+jC,EAAU33B,EAAG0kB,WAAY1kB,EAAG1E,SACnDiF,EAAKtS,GAAKA,EACV+R,EAAGC,SAASM,MAalB3S,KAAK6pC,SACL7pC,KAAK6nC,YAAa,EAClB7nC,KAAK8xB,KAAKE,QAAQnH,KAAK,WAQzBnoB,EAAQ6O,UAAU61B,OAAS1kC,EAAQ6O,UAAU81B,UAO7C3kC,EAAQ6O,UAAU+1B,UAAY,SAASl0B,GACrC,GAAIgC,GAAQ,EACRhD,EAAKpS,IACToT,GAAInL,QAAQ,SAAU5H,GACpB,GAAIsS,GAAOP,EAAGrQ,MAAM1B,EAChBsS,KACFyC,IACAhD,EAAG43B,YAAYr3B,MAIfyC,IAEFpV,KAAK6pC,SACL7pC,KAAK6nC,YAAa,EAClB7nC,KAAK8xB,KAAKE,QAAQnH,KAAK,YAQ3BnoB,EAAQ6O,UAAUs4B,OAAS,WAGzBlpC,EAAKsH,QAAQjI,KAAKu1B,OAAQ,SAAUllB,GAClCA,EAAMqD,WASVhR,EAAQ6O,UAAUk2B,gBAAkB,SAASr0B,GAC3CpT,KAAKwnC,aAAap0B,IAQpB1Q,EAAQ6O,UAAUi2B,aAAe,SAASp0B,GACxC,GAAIhB,GAAKpS,IAEToT,GAAInL,QAAQ,SAAU5H,GACpB,GAAI4pC,GAAY73B,EAAG4gB,WAAW7f,IAAI9S,GAC9BgQ,EAAQ+B,EAAGmjB,OAAOl1B,EAEtB,IAAKgQ,EA6BHA,EAAM+F,QAAQ6zB,OA7BJ,CAEV,GAAI5pC,GAAM0nC,EACR,KAAM,IAAIxkC,OAAM,qBAAuBlD,EAAK,qBAG9C,IAAI6pC,GAAejkC,OAAOqH,OAAO8E,EAAG1E,QACpC/M,GAAKqE,OAAOklC,GACVr5B,OAAQ,OAGVR,EAAQ,GAAI5N,GAAMpC,EAAI4pC,EAAW73B,GACjCA,EAAGmjB,OAAOl1B,GAAMgQ,CAGhB,KAAK,GAAImD,KAAUpB,GAAGrQ,MACpB,GAAIqQ,EAAGrQ,MAAMyD,eAAegO,GAAS,CACnC,GAAIb,GAAOP,EAAGrQ,MAAMyR,EAChBb,GAAK5B,KAAKV,OAAShQ,GACrBgQ,EAAMiB,IAAIqB,GAKhBtC,EAAMqD,QACNrD,EAAMgxB,UAQVrhC,KAAK8xB,KAAKE,QAAQnH,KAAK,WAQzBnoB,EAAQ6O,UAAUm2B,gBAAkB,SAASt0B,GAC3C,GAAImiB,GAASv1B,KAAKu1B,MAClBniB,GAAInL,QAAQ,SAAU5H,GACpB,GAAIgQ,GAAQklB,EAAOl1B,EAEfgQ,KACFA,EAAM+wB,aACC7L,GAAOl1B,MAIlBL,KAAKwoC,YAELxoC,KAAK8xB,KAAKE,QAAQnH,KAAK,WAQzBnoB,EAAQ6O,UAAUs3B,aAAe,WAC/B,GAAI7oC,KAAKgzB,WAAY,CAEnB,GAAI2U,GAAW3nC,KAAKgzB,WAAWjf,QAC7BL,MAAO1T,KAAK0N,QAAQg5B,aAGlB7L,GAAWl6B,EAAKyF,WAAWuhC,EAAU3nC,KAAK2nC,SAC9C,IAAI9M,EAAS,CAEX,GAAItF,GAASv1B,KAAKu1B,MAClBoS,GAAS1/B,QAAQ,SAAU05B,GACzBpM,EAAOoM,GAASP,SAIlBuG,EAAS1/B,QAAQ,SAAU05B,GACzBpM,EAAOoM,GAASN,SAGlBrhC,KAAK2nC,SAAWA,EAGlB,MAAO9M,GAGP,OAAO,GASXn4B,EAAQ6O,UAAUc,SAAW,SAASM,GACpC3S,KAAK+B,MAAM4Q,EAAKtS,IAAMsS,CAGtB,IAAIgvB,GAAU3hC,KAAKgzB,WAAargB,EAAK5B,KAAKV,MAAQ03B,EAC9C13B,EAAQrQ,KAAKu1B,OAAOoM,EACpBtxB,IAAOA,EAAMiB,IAAIqB,IASvBjQ,EAAQ6O,UAAU2B,YAAc,SAASP,EAAMo3B,GAC7C,GAAII,GAAax3B,EAAK5B,KAAKV,KAQ3B,IANAsC,EAAK5B,KAAOg5B,EACRp3B,EAAK6yB,WACP7yB,EAAK2L,SAIH6rB,GAAcx3B,EAAK5B,KAAKV,MAAO,CACjC,GAAI+5B,GAAWpqC,KAAKu1B,OAAO4U,EACvBC,IAAUA,EAAS51B,OAAO7B,EAE9B,IAAIgvB,GAAU3hC,KAAKgzB,WAAargB,EAAK5B,KAAKV,MAAQ03B,EAC9C13B,EAAQrQ,KAAKu1B,OAAOoM,EACpBtxB,IAAOA,EAAMiB,IAAIqB,KAUzBjQ,EAAQ6O,UAAUy4B,YAAc,SAASr3B,GAEvCA,EAAKyuB,aAGEphC,MAAK+B,MAAM4Q,EAAKtS,GAGvB,IAAI0H,GAAQ/H,KAAK4nC,UAAUjgC,QAAQgL,EAAKtS,GAC3B,KAAT0H,GAAa/H,KAAK4nC,UAAU5/B,OAAOD,EAAO,EAG9C,IAAI45B,GAAU3hC,KAAKgzB,WAAargB,EAAK5B,KAAKV,MAAQ03B,EAC9C13B,EAAQrQ,KAAKu1B,OAAOoM,EACpBtxB,IAAOA,EAAMmE,OAAO7B,IAS1BjQ,EAAQ6O,UAAU20B,qBAAuB,SAAS99B,GAGhD,IAAK,GAFD+9B,MAEKjhC,EAAI,EAAGA,EAAIkD,EAAM/C,OAAQH,IAC5BkD,EAAMlD,YAAc/C,IACtBgkC,EAASv+B,KAAKQ,EAAMlD,GAGxB,OAAOihC,IAYTzjC,EAAQ6O,UAAUuiB,SAAW,SAAU5qB,GAErClJ,KAAK8nC,YAAYn1B,KAAOjQ,EAAQ2nC,eAAenhC,IAQjDxG,EAAQ6O,UAAUyiB,aAAe,SAAU9qB,GACzC,GAAKlJ,KAAK0N,QAAQk5B,SAASC,YAAe7mC,KAAK0N,QAAQk5B,SAAS1F,YAAhE,CAIA,GAEIx7B,GAFAiN,EAAO3S,KAAK8nC,YAAYn1B,MAAQ,KAChCP,EAAKpS,IAGT,IAAI2S,GAAQA,EAAK23B,SAAU,CACzB,GAAIC,GAAerhC,EAAMG,OAAOkhC,aAC5BC,EAAgBthC,EAAMG,OAAOmhC,aAE7BD,IACF7kC,GACEiN,KAAM43B,GAGJn4B,EAAG1E,QAAQk5B,SAASC,aACtBnhC,EAAMgJ,MAAQiE,EAAK5B,KAAKrC,MAAMlI,WAE5B4L,EAAG1E,QAAQk5B,SAAS1F,aAClB,SAAWvuB,GAAK5B,OAAMrL,EAAM2K,MAAQsC,EAAK5B,KAAKV,OAGpDrQ,KAAK8nC,YAAY2C,WAAa/kC,IAEvB8kC,GACP9kC,GACEiN,KAAM63B,GAGJp4B,EAAG1E,QAAQk5B,SAASC,aACtBnhC,EAAMyf,IAAMxS,EAAK5B,KAAKoU,IAAI3e,WAExB4L,EAAG1E,QAAQk5B,SAAS1F,aAClB,SAAWvuB,GAAK5B,OAAMrL,EAAM2K,MAAQsC,EAAK5B,KAAKV,OAGpDrQ,KAAK8nC,YAAY2C,WAAa/kC,IAG9B1F,KAAK8nC,YAAY2C,UAAYzqC,KAAKg2B,eAAe/hB,IAAI,SAAU5T,GAC7D,GAAIsS,GAAOP,EAAGrQ,MAAM1B,GAChBqF,GACFiN,KAAMA,EAWR,OARIP,GAAG1E,QAAQk5B,SAASC,aAClB,SAAWl0B,GAAK5B,OAAMrL,EAAMgJ,MAAQiE,EAAK5B,KAAKrC,MAAMlI,WACpD,OAASmM,GAAK5B,OAAQrL,EAAMyf,IAAMxS,EAAK5B,KAAKoU,IAAI3e,YAElD4L,EAAG1E,QAAQk5B,SAAS1F,aAClB,SAAWvuB,GAAK5B,OAAMrL,EAAM2K,MAAQsC,EAAK5B,KAAKV,OAG7C3K,IAIXwD,EAAMw2B,qBASVh9B,EAAQ6O,UAAU0iB,QAAU,SAAU/qB,GACpC,GAAIlJ,KAAK8nC,YAAY2C,UAAW,CAC9B,GAAI38B,GAAQ9N,KAAK8xB,KAAKhkB,MAClBokB,EAAOlyB,KAAK8xB,KAAKnxB,KAAKuxB,MAAQ,KAC9B+I,EAAS/xB,EAAMquB,QAAQ0D,OACvBnhB,EAAS9Z,KAAK0F,MAAMkL,OAAS9C,EAAMqX,IAAMrX,EAAMY,OAC/C+X,EAASwU,EAASnhB,CAGtB9Z,MAAK8nC,YAAY2C,UAAUxiC,QAAQ,SAAUvC,GAC3C,GAAI,SAAWA,GAAO,CACpB,GAAIgJ,GAAQ,GAAI1K,MAAK0B,EAAMgJ,MAAQ+X,EACnC/gB,GAAMiN,KAAK5B,KAAKrC,MAAQwjB,EAAOA,EAAKxjB,GAASA,EAG/C,GAAI,OAAShJ,GAAO,CAClB,GAAIyf,GAAM,GAAInhB,MAAK0B,EAAMyf,IAAMsB,EAC/B/gB,GAAMiN,KAAK5B,KAAKoU,IAAM+M,EAAOA,EAAK/M,GAAOA,EAG3C,GAAI,SAAWzf,GAAO,CAEpB,GAAI2K,GAAQ3N,EAAQgoC,gBAAgBxhC,EACpC,IAAImH,GAASA,EAAMsxB,SAAWj8B,EAAMiN,KAAK5B,KAAKV,MAAO,CACnD,GAAI+5B,GAAW1kC,EAAMiN,KAAKwsB,MAC1BiL,GAAS51B,OAAO9O,EAAMiN,MACtBy3B,EAAS12B,QACTrD,EAAMiB,IAAI5L,EAAMiN,MAChBtC,EAAMqD,QAENhO,EAAMiN,KAAK5B,KAAKV,MAAQA,EAAMsxB,YAOpC3hC,KAAK6nC,YAAa,EAClB7nC,KAAK8xB,KAAKE,QAAQnH,KAAK,UAEvB3hB,EAAMw2B,oBASVh9B,EAAQ6O,UAAU8oB,WAAa,SAAUnxB,GACvC,GAAIlJ,KAAK8nC,YAAY2C,UAAW,CAE9B,GAAIE,MACAv4B,EAAKpS,KACL21B,EAAU31B,KAAK+yB,UAAU/e,YAE7BhU,MAAK8nC,YAAY2C,UAAUxiC,QAAQ,SAAUvC,GAC3C,GAAIrF,GAAKqF,EAAMiN,KAAKtS,GAChB0pC,EAAW33B,EAAG2gB,UAAU5f,IAAI9S,EAAI+R,EAAG80B,aAEnCrM,GAAU,CACV,UAAWn1B,GAAMiN,KAAK5B,OACxB8pB,EAAWn1B,EAAMgJ,OAAShJ,EAAMiN,KAAK5B,KAAKrC,MAAMlI,UAChDujC,EAASr7B,MAAQ/N,EAAK0F,QAAQX,EAAMiN,KAAK5B,KAAKrC,MACtCinB,EAAQ3kB,SAAS1K,MAAQqvB,EAAQ3kB,SAAS1K,KAAKoI,OAAS,SAE9D,OAAShJ,GAAMiN,KAAK5B,OACtB8pB,EAAUA,GAAan1B,EAAMyf,KAAOzf,EAAMiN,KAAK5B,KAAKoU,IAAI3e,UACxDujC,EAAS5kB,IAAMxkB,EAAK0F,QAAQX,EAAMiN,KAAK5B,KAAKoU,IACpCwQ,EAAQ3kB,SAAS1K,MAAQqvB,EAAQ3kB,SAAS1K,KAAK6e,KAAO,SAE5D,SAAWzf,GAAMiN,KAAK5B,OACxB8pB,EAAUA,GAAan1B,EAAM2K,OAAS3K,EAAMiN,KAAK5B,KAAKV,MACtD05B,EAAS15B,MAAQ3K,EAAMiN,KAAK5B,KAAKV,OAI/BwqB,GACFzoB,EAAG1E,QAAQs5B,OAAO+C,EAAU,SAAUA,GAChCA,GAEFA,EAASpU,EAAQzkB,UAAY7Q,EAC7BsqC,EAAQ/iC,KAAKmiC,KAIT,SAAWrkC,KAAOA,EAAMiN,KAAK5B,KAAKrC,MAAQhJ,EAAMgJ,OAChD,OAAShJ,KAASA,EAAMiN,KAAK5B,KAAKoU,IAAQzf,EAAMyf,KAEpD/S,EAAGy1B,YAAa,EAChBz1B,EAAG0f,KAAKE,QAAQnH,KAAK,eAK7B7qB,KAAK8nC,YAAY2C,UAAY,KAGzBE,EAAQtlC,QACVswB,EAAQ5iB,OAAO43B,GAGjBzhC,EAAMw2B,oBASVh9B,EAAQ6O,UAAU22B,cAAgB,SAAUh/B,GAC1C,GAAKlJ,KAAK0N,QAAQi5B,WAAlB,CAEA,GAAIiE,GAAW1hC,EAAMquB,QAAQsT,UAAY3hC,EAAMquB,QAAQsT,SAASD,QAC5DE,EAAW5hC,EAAMquB,QAAQsT,UAAY3hC,EAAMquB,QAAQsT,SAASC,QAChE,IAAIF,GAAWE,EAEb,WADA9qC,MAAKmoC,mBAAmBj/B,EAI1B,IAAI6hC,GAAe/qC,KAAKg2B,eAEpBrjB,EAAOjQ,EAAQ2nC,eAAenhC,GAC9B0+B,EAAYj1B,GAAQA,EAAKtS,MAC7BL,MAAK+1B,aAAa6R,EAElB,IAAIoD,GAAehrC,KAAKg2B,gBAIpBgV,EAAa3lC,OAAS,GAAK0lC,EAAa1lC,OAAS,IACnDrF,KAAK8xB,KAAKE,QAAQnH,KAAK,UACrB9oB,MAAO/B,KAAKg2B,iBAIhB9sB,EAAMw2B,oBAQRh9B,EAAQ6O,UAAU62B,WAAa,SAAUl/B,GACvC,GAAKlJ,KAAK0N,QAAQi5B,YACb3mC,KAAK0N,QAAQk5B,SAASt1B,IAA3B,CAEA,GAAIc,GAAKpS,KACLkyB,EAAOlyB,KAAK8xB,KAAKnxB,KAAKuxB,MAAQ,KAC9Bvf,EAAOjQ,EAAQ2nC,eAAenhC,EAElC,IAAIyJ,EAAM,CAIR,GAAIo3B,GAAW33B,EAAG2gB,UAAU5f,IAAIR,EAAKtS,GACrCL,MAAK0N,QAAQq5B,SAASgD,EAAU,SAAUA,GACpCA,GACF33B,EAAG2gB,UAAUhgB,OAAOg3B,SAIrB,CAEH,GAAIkB,GAAOtqC,EAAKmG,gBAAgB9G,KAAKktB,IAAI/Q,OACrChM,EAAIjH,EAAMquB,QAAQtO,OAAOyR,MAAQuQ,EACjCv8B,EAAQ1O,KAAK8xB,KAAKnxB,KAAK4xB,OAAOpiB,GAC9B+6B,GACFx8B,MAAOwjB,EAAOA,EAAKxjB,GAASA,EAC5Bqe,QAAS,WAIX,IAA0B,UAAtB/sB,KAAK0N,QAAQpH,KAAkB,CACjC,GAAI6e,GAAMnlB,KAAK8xB,KAAKnxB,KAAK4xB,OAAOpiB,EAAInQ,KAAK0F,MAAMkL,MAAQ,EACvDs6B,GAAQ/lB,IAAM+M,EAAOA,EAAK/M,GAAOA,EAGnC+lB,EAAQlrC,KAAK+yB,UAAU5hB,SAAWxQ,EAAK+D,YAEvC,IAAI2L,GAAQ3N,EAAQgoC,gBAAgBxhC,EAChCmH,KACF66B,EAAQ76B,MAAQA,EAAMsxB,SAIxB3hC,KAAK0N,QAAQo5B,MAAMoE,EAAS,SAAUv4B,GAChCA,GACFP,EAAG2gB,UAAUzhB,IAAI45B,QAYzBxoC,EAAQ6O,UAAU42B,mBAAqB,SAAUj/B,GAC/C,GAAKlJ,KAAK0N,QAAQi5B,WAAlB,CAEA,GAAIiB,GACAj1B,EAAOjQ,EAAQ2nC,eAAenhC,EAElC,IAAIyJ,EAAM,CAERi1B,EAAY5nC,KAAKg2B,cACjB,IAAIjuB,GAAQ6/B,EAAUjgC,QAAQgL,EAAKtS,GACtB,KAAT0H,EAEF6/B,EAAUhgC,KAAK+K,EAAKtS,IAIpBunC,EAAU5/B,OAAOD,EAAO,GAE1B/H,KAAK+1B,aAAa6R,GAElB5nC,KAAK8xB,KAAKE,QAAQnH,KAAK,UACrB9oB,MAAO/B,KAAKg2B,iBAGd9sB,EAAMw2B,qBAUVh9B,EAAQ2nC,eAAiB,SAASnhC,GAEhC,IADA,GAAIG,GAASH,EAAMG,OACZA,GAAQ,CACb,GAAIA,EAAO7D,eAAe,iBACxB,MAAO6D,GAAO,gBAEhBA,GAASA,EAAOG,WAGlB,MAAO,OAST9G,EAAQgoC,gBAAkB,SAASxhC,GAEjC,IADA,GAAIG,GAASH,EAAMG,OACZA,GAAQ,CACb,GAAIA,EAAO7D,eAAe,kBACxB,MAAO6D,GAAO,iBAEhBA,GAASA,EAAOG,WAGlB,MAAO,OAST9G,EAAQyoC,kBAAoB,SAASjiC,GAEnC,IADA,GAAIG,GAASH,EAAMG,OACZA,GAAQ,CACb,GAAIA,EAAO7D,eAAe,oBACxB,MAAO6D,GAAO,mBAEhBA,GAASA,EAAOG,WAGlB,MAAO,OAGT3J,EAAOD,QAAU8C,GAKb,SAAS7C,EAAQD,EAASM,GAS9B,QAASyC,GAAOmvB,EAAMpkB,EAAS09B,GAC7BprC,KAAK8xB,KAAOA,EACZ9xB,KAAKwxB,gBACH7jB,SAAS,EACTmyB,OAAO,EACPuL,SAAU,GACVC,YAAa,EACbrkC,MACEue,SAAS,EACT/E,SAAU,YAEZyD,OACEsB,SAAS,EACT/E,SAAU,aAGdzgB,KAAKorC,KAAOA,EACZprC,KAAK0N,QAAU/M,EAAKqE,UAAUhF,KAAKwxB,gBAEnCxxB,KAAK8gC,eACL9gC,KAAKktB,OACLltB,KAAKu1B,UACLv1B,KAAK+gC,eAAiB,EACtB/gC,KAAK6xB,UAEL7xB,KAAK2Z,WAAWjM,GAhClB,GAAI/M,GAAOT,EAAoB,GAC3BU,EAAUV,EAAoB,GAC9BkC,EAAYlC,EAAoB,GAiCpCyC,GAAO4O,UAAY,GAAInP,GAGvBO,EAAO4O,UAAUyvB,SAAW,SAASzb,EAAO0b,GACrCjhC,KAAKu1B,OAAO/vB,eAAe+f,KAC9BvlB,KAAKu1B,OAAOhQ,GAAS0b,GAEvBjhC,KAAK+gC,gBAAkB,GAGzBp+B,EAAO4O,UAAU2vB,YAAc,SAAS3b,EAAO0b,GAC7CjhC,KAAKu1B,OAAOhQ,GAAS0b,GAGvBt+B,EAAO4O,UAAU4vB,YAAc,SAAS5b,GAClCvlB,KAAKu1B,OAAO/vB,eAAe+f,WACtBvlB,MAAKu1B,OAAOhQ,GACnBvlB,KAAK+gC,gBAAkB,IAI3Bp+B,EAAO4O,UAAUsgB,QAAU,WACzB7xB,KAAKktB,IAAI/Q,MAAQvM,SAASK,cAAc,OACxCjQ,KAAKktB,IAAI/Q,MAAM3U,UAAY,SAC3BxH,KAAKktB,IAAI/Q,MAAM3L,MAAMiQ,SAAW,WAChCzgB,KAAKktB,IAAI/Q,MAAM3L,MAAMnJ,IAAM,OAC3BrH,KAAKktB,IAAI/Q,MAAM3L,MAAM+wB,QAAU,QAE/BvhC,KAAKktB,IAAIqe,SAAW37B,SAASK,cAAc,OAC3CjQ,KAAKktB,IAAIqe,SAAS/jC,UAAY,aAC9BxH,KAAKktB,IAAIqe,SAAS/6B,MAAMiQ,SAAW,WACnCzgB,KAAKktB,IAAIqe,SAAS/6B,MAAMnJ,IAAM,MAE9BrH,KAAK2/B,IAAM/vB,SAASC,gBAAgB,6BAA6B,OACjE7P,KAAK2/B,IAAInvB,MAAMiQ,SAAW,WAC1BzgB,KAAK2/B,IAAInvB,MAAMnJ,IAAM,MACrBrH,KAAK2/B,IAAInvB,MAAMI,MAAQ5Q,KAAK0N,QAAQ29B,SAAW,EAAI,KAEnDrrC,KAAKktB,IAAI/Q,MAAMrM,YAAY9P,KAAK2/B,KAChC3/B,KAAKktB,IAAI/Q,MAAMrM,YAAY9P,KAAKktB,IAAIqe,WAMtC5oC,EAAO4O,UAAU6vB,KAAO,WAElBphC,KAAKktB,IAAI/Q,MAAM3S,YACjBxJ,KAAKktB,IAAI/Q,MAAM3S,WAAWgG,YAAYxP,KAAKktB,IAAI/Q,QAQnDxZ,EAAO4O,UAAU8vB,KAAO,WAEjBrhC,KAAKktB,IAAI/Q,MAAM3S,YAClBxJ,KAAK8xB,KAAK5E,IAAIjE,OAAOnZ,YAAY9P,KAAKktB,IAAI/Q,QAI9CxZ,EAAO4O,UAAUoI,WAAa,SAASjM,GACrC,GAAIP,IAAU,UAAU,cAAc,QAAQ,OAAO,QACrDxM,GAAKkF,oBAAoBsH,EAAQnN,KAAK0N,QAASA,IAGjD/K,EAAO4O,UAAU+M,OAAS,WACxB,GAAuC,GAAnCte,KAAK0N,QAAQ1N,KAAKorC,MAAM5lB,SAA2C,GAAvBxlB,KAAK+gC,gBAA+C,GAAxB/gC,KAAK0N,QAAQC,QACvF3N,KAAKohC,WAEF,CACHphC,KAAKqhC,OACmC,YAApCrhC,KAAK0N,QAAQ1N,KAAKorC,MAAM3qB,UAA8D,eAApCzgB,KAAK0N,QAAQ1N,KAAKorC,MAAM3qB,UAC5EzgB,KAAKktB,IAAI/Q,MAAM3L,MAAMvJ,KAAO,MAC5BjH,KAAKktB,IAAI/Q,MAAM3L,MAAM4U,UAAY,OACjCplB,KAAKktB,IAAIqe,SAAS/6B,MAAM4U,UAAY,OACpCplB,KAAKktB,IAAIqe,SAAS/6B,MAAMvJ,KAAQjH,KAAK0N,QAAQ29B,SAAW,GAAM,KAC9DrrC,KAAKktB,IAAIqe,SAAS/6B,MAAM0T,MAAQ,GAChClkB,KAAK2/B,IAAInvB,MAAMvJ,KAAO,MACtBjH,KAAK2/B,IAAInvB,MAAM0T,MAAQ,KAGvBlkB,KAAKktB,IAAI/Q,MAAM3L,MAAM0T,MAAQ,MAC7BlkB,KAAKktB,IAAI/Q,MAAM3L,MAAM4U,UAAY,QACjCplB,KAAKktB,IAAIqe,SAAS/6B,MAAM4U,UAAY,QACpCplB,KAAKktB,IAAIqe,SAAS/6B,MAAM0T,MAASlkB,KAAK0N,QAAQ29B,SAAW,GAAM,KAC/DrrC,KAAKktB,IAAIqe,SAAS/6B,MAAMvJ,KAAO,GAC/BjH,KAAK2/B,IAAInvB,MAAM0T,MAAQ,MACvBlkB,KAAK2/B,IAAInvB,MAAMvJ,KAAO,IAGgB,YAApCjH,KAAK0N,QAAQ1N,KAAKorC,MAAM3qB,UAA8D,aAApCzgB,KAAK0N,QAAQ1N,KAAKorC,MAAM3qB,UAC5EzgB,KAAKktB,IAAI/Q,MAAM3L,MAAMnJ,IAAM,EAAIzD,OAAO5D,KAAK8xB,KAAK5E,IAAIjE,OAAOzY,MAAMnJ,IAAIqE,QAAQ,KAAK,KAAO,KACzF1L,KAAKktB,IAAI/Q,MAAM3L,MAAM2P,OAAS,KAG9BngB,KAAKktB,IAAI/Q,MAAM3L,MAAM2P,OAAS,EAAIvc,OAAO5D,KAAK8xB,KAAK5E,IAAIjE,OAAOzY,MAAMnJ,IAAIqE,QAAQ,KAAK,KAAO,KAC5F1L,KAAKktB,IAAI/Q,MAAM3L,MAAMnJ,IAAM,IAGH,GAAtBrH,KAAK0N,QAAQoyB,OACf9/B,KAAKktB,IAAI/Q,MAAM3L,MAAMI,MAAQ5Q,KAAKktB,IAAIqe,SAAShe,YAAc,GAAK,KAClEvtB,KAAKktB,IAAIqe,SAAS/6B,MAAM0T,MAAQ,GAChClkB,KAAKktB,IAAIqe,SAAS/6B,MAAMvJ,KAAO,GAC/BjH,KAAK2/B,IAAInvB,MAAMI,MAAQ,QAGvB5Q,KAAKktB,IAAI/Q,MAAM3L,MAAMI,MAAQ5Q,KAAK0N,QAAQ29B,SAAW,GAAKrrC,KAAKktB,IAAIqe,SAAShe,YAAc,GAAK,KAC/FvtB,KAAKwrC,kBAGP,IAAIze,GAAU,EACd,KAAK,GAAI4U,KAAW3hC,MAAKu1B,OACnBv1B,KAAKu1B,OAAO/vB,eAAem8B,KAC7B5U,GAAW/sB,KAAKu1B,OAAOoM,GAAS5U,QAAU,SAG9C/sB,MAAKktB,IAAIqe,SAASzqB,UAAYiM,EAC9B/sB,KAAKktB,IAAIqe,SAAS/6B,MAAMkd,WAAe,IAAO1tB,KAAK0N,QAAQ29B,SAAYrrC,KAAK0N,QAAQ49B,YAAe,OAIvG3oC,EAAO4O,UAAUi6B,gBAAkB,WACjC,GAAIxrC,KAAKktB,IAAI/Q,MAAM3S,WAAY,CAC7B5I,EAAQsO,gBAAgBlP,KAAK8gC,YAC7B,IAAIjgB,GAAU3Z,OAAOukC,iBAAiBzrC,KAAKktB,IAAI/Q,OAAOuvB,WAClDhK,EAAa99B,OAAOid,EAAQnV,QAAQ,KAAK,KACzCyE,EAAIuxB,EACJvB,EAAYngC,KAAK0N,QAAQ29B,SACzB5J,EAAa,IAAOzhC,KAAK0N,QAAQ29B,SACjCj7B,EAAIsxB,EAAa,GAAMD,EAAa,CAExCzhC,MAAK2/B,IAAInvB,MAAMI,MAAQuvB,EAAY,EAAIuB,EAAa,IAEpD,KAAK,GAAIC,KAAW3hC,MAAKu1B,OACnBv1B,KAAKu1B,OAAO/vB,eAAem8B,KAC7B3hC,KAAKu1B,OAAOoM,GAASC,SAASzxB,EAAGC,EAAGpQ,KAAK8gC,YAAa9gC,KAAK2/B,IAAKQ,EAAWsB,GAC3ErxB,GAAKqxB,EAAazhC,KAAK0N,QAAQ49B,YAInC1qC,GAAQ2O,gBAAgBvP,KAAK8gC,eAIjCjhC,EAAOD,QAAU+C,GAKb,SAAS9C,EAAQD,EAASM,GAoB9B,QAAS0C,GAAUkvB,EAAMpkB,GACvB1N,KAAKK,GAAKM,EAAK+D,aACf1E,KAAK8xB,KAAOA,EAEZ9xB,KAAKwxB,gBACHma,iBAAkB,OAClBC,aAAc,UACdv3B,MAAM,EACNw3B,UAAU,EACVC,YAAa,QACbvH,QACE52B,SAAS,EACT+jB,YAAa,UAEflhB,MAAO,OACPu7B,UACEn7B,MAAO,GACP61B,MAAO,UAET1C,YACEp2B,SAAS,EACTq2B,gBAAiB,cACjBC,MAAO,IAET1zB,YACE5C,SAAS,EACT+C,KAAM,EACNF,MAAO,UAETw7B,UACEpM,iBAAiB,EACjBC,iBAAiB,EACjBC,OAAO,EACPlvB,MAAO,OACP4U,SAAS,GAEXymB,QACEt+B,SAAS,EACTmyB,OAAO,EACP74B,MACEue,SAAS,EACT/E,SAAU,YAEZyD,OACEsB,SAAS,EACT/E,SAAU,eAMhBzgB,KAAK0N,QAAU/M,EAAKqE,UAAWhF,KAAKwxB,gBACpCxxB,KAAKktB,OACLltB,KAAK0F,SACL1F,KAAKyD,OAAS,KACdzD,KAAKu1B,SAEL,IAAInjB,GAAKpS,IACTA,MAAK+yB,UAAY,KACjB/yB,KAAKgzB,WAAa,KAGlBhzB,KAAKmnC,eACH71B,IAAO,SAAUpI,EAAO6I,GACtBK,EAAGg1B,OAAOr1B,EAAOhQ,QAEnBgR,OAAU,SAAU7J,EAAO6I,GACzBK,EAAGi1B,UAAUt1B,EAAOhQ,QAEtByS,OAAU,SAAUtL,EAAO6I,GACzBK,EAAGk1B,UAAUv1B,EAAOhQ,SAKxB/B,KAAKunC,gBACHj2B,IAAO,SAAUpI,EAAO6I,GACtBK,EAAGo1B,aAAaz1B,EAAOhQ,QAEzBgR,OAAU,SAAU7J,EAAO6I,GACzBK,EAAGq1B,gBAAgB11B,EAAOhQ,QAE5ByS,OAAU,SAAUtL,EAAO6I,GACzBK,EAAGs1B,gBAAgB31B,EAAOhQ,SAI9B/B,KAAK+B,SACL/B,KAAK4nC,aACL5nC,KAAKksC,UAAYlsC,KAAK8xB,KAAKhkB,MAAMY,MACjC1O,KAAK8nC,eAEL9nC,KAAK8gC,eACL9gC,KAAK2Z,WAAWjM,GAChB1N,KAAK2jC,0BAA4B,GAEjC3jC,KAAK8xB,KAAKE,QAAQxgB,GAAG,cAAc,WAC/B,GAAoB,GAAhBY,EAAG85B,UAAgB,CACrB,GAAIzlB,GAASrU,EAAG0f,KAAKhkB,MAAMY,MAAQ0D,EAAG85B,UAClCp+B,EAAQsE,EAAG0f,KAAKhkB,MAAMqX,IAAM/S,EAAG0f,KAAKhkB,MAAMY,KAC9C,IAAgB,GAAZ0D,EAAGxB,MAAY,CACjB,GAAIu7B,GAAmB/5B,EAAGxB,MAAM9C,EAC5B4Y,EAAUD,EAAS0lB,CACvB/5B,GAAGutB,IAAInvB,MAAMvJ,MAASmL,EAAGxB,MAAQ8V,EAAW,SAIpD1mB,KAAK8xB,KAAKE,QAAQxgB,GAAG,eAAgB,WACnCY,EAAG85B,UAAY95B,EAAG0f,KAAKhkB,MAAMY,MAC7B0D,EAAGutB,IAAInvB,MAAMvJ,KAAOtG,EAAK8I,OAAOK,QAAQsI,EAAGxB,OAC3CwB,EAAGg6B,aAAaj2B,MAAM/D,KAIxBpS,KAAK6xB,UACL7xB,KAAK8xB,KAAKE,QAAQnH,KAAK,UArIzB,GAAIlqB,GAAOT,EAAoB,GAC3BU,EAAUV,EAAoB,GAC9BW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/BkC,EAAYlC,EAAoB,IAChCqC,EAAWrC,EAAoB,IAC/BsC,EAAatC,EAAoB,IACjCyC,EAASzC,EAAoB,IAE7B6nC,EAAY,eA+HhBnlC,GAAU2O,UAAY,GAAInP,GAK1BQ,EAAU2O,UAAUsgB,QAAU,WAC5B,GAAI1V,GAAQvM,SAASK,cAAc,MACnCkM,GAAM3U,UAAY,YAClBxH,KAAKktB,IAAI/Q,MAAQA,EAGjBnc,KAAK2/B,IAAM/vB,SAASC,gBAAgB,6BAA6B,OACjE7P,KAAK2/B,IAAInvB,MAAMiQ,SAAW,WAC1BzgB,KAAK2/B,IAAInvB,MAAMK,QAAU,GAAK7Q,KAAK0N,QAAQo+B,aAAapgC,QAAQ,KAAK,IAAM,KAC3E1L,KAAK2/B,IAAInvB,MAAM+wB,QAAU,QACzBplB,EAAMrM,YAAY9P,KAAK2/B,KAGvB3/B,KAAK0N,QAAQs+B,SAASta,YAAc,OACpC1xB,KAAKqsC,UAAY,GAAI9pC,GAASvC,KAAK8xB,KAAM9xB,KAAK0N,QAAQs+B,SAAUhsC,KAAK2/B,KAErE3/B,KAAK0N,QAAQs+B,SAASta,YAAc,QACpC1xB,KAAKssC,WAAa,GAAI/pC,GAASvC,KAAK8xB,KAAM9xB,KAAK0N,QAAQs+B,SAAUhsC,KAAK2/B,WAC/D3/B,MAAK0N,QAAQs+B,SAASta,YAG7B1xB,KAAKusC,WAAa,GAAI5pC,GAAO3C,KAAK8xB,KAAM9xB,KAAK0N,QAAQu+B,OAAQ,QAC7DjsC,KAAKwsC,YAAc,GAAI7pC,GAAO3C,KAAK8xB,KAAM9xB,KAAK0N,QAAQu+B,OAAQ,SAE9DjsC,KAAKqhC,QAOPz+B,EAAU2O,UAAUoI,WAAa,SAASjM,GACxC,GAAIA,EAAS,CACX,GAAIP,IAAU,WAAW,eAAe,cAAc,mBAAmB,QAAQ,WAAW,WAAW,OACvGxM,GAAKkF,oBAAoBsH,EAAQnN,KAAK0N,QAASA,GAC/C/M,EAAK6M,aAAaxN,KAAK0N,QAASA,EAAQ,cACxC/M,EAAK6M,aAAaxN,KAAK0N,QAASA,EAAQ,cACxC/M,EAAK6M,aAAaxN,KAAK0N,QAASA,EAAQ,UACxC/M,EAAK6M,aAAaxN,KAAK0N,QAASA,EAAQ,UAEpCA,EAAQq2B,YACuB,gBAAtBr2B,GAAQq2B,YACbr2B,EAAQq2B,WAAWC,kBACqB,WAAtCt2B,EAAQq2B,WAAWC,gBACrBhkC,KAAK0N,QAAQq2B,WAAWE,MAAQ,EAEa,WAAtCv2B,EAAQq2B,WAAWC,gBAC1BhkC,KAAK0N,QAAQq2B,WAAWE,MAAQ,GAGhCjkC,KAAK0N,QAAQq2B,WAAWC,gBAAkB,cAC1ChkC,KAAK0N,QAAQq2B,WAAWE,MAAQ,KAMpCjkC,KAAKqsC,WACkBnmC,SAArBwH,EAAQs+B,WACVhsC,KAAKqsC,UAAU1yB,WAAW3Z,KAAK0N,QAAQs+B,UACvChsC,KAAKssC,WAAW3yB,WAAW3Z,KAAK0N,QAAQs+B,WAIxChsC,KAAKusC,YACgBrmC,SAAnBwH,EAAQu+B,SACVjsC,KAAKusC,WAAW5yB,WAAW3Z,KAAK0N,QAAQu+B,QACxCjsC,KAAKwsC,YAAY7yB,WAAW3Z,KAAK0N,QAAQu+B,SAIzCjsC,KAAKu1B,OAAO/vB,eAAeuiC,IAC7B/nC,KAAKu1B,OAAOwS,GAAWpuB,WAAWjM,GAGlC1N,KAAKktB,IAAI/Q,OACXnc,KAAKosC,gBAOTxpC,EAAU2O,UAAU6vB,KAAO,WAErBphC,KAAKktB,IAAI/Q,MAAM3S,YACjBxJ,KAAKktB,IAAI/Q,MAAM3S,WAAWgG,YAAYxP,KAAKktB,IAAI/Q,QAQnDvZ,EAAU2O,UAAU8vB,KAAO,WAEpBrhC,KAAKktB,IAAI/Q,MAAM3S,YAClBxJ,KAAK8xB,KAAK5E,IAAIjE,OAAOnZ,YAAY9P,KAAKktB,IAAI/Q,QAS9CvZ,EAAU2O,UAAU0hB,SAAW,SAASlxB,GACtC,GACEqR,GADEhB,EAAKpS,KAEP2pC,EAAe3pC,KAAK+yB,SAGtB,IAAKhxB,EAGA,CAAA,KAAIA,YAAiBlB,IAAWkB,YAAiBjB,IAIpD,KAAM,IAAIiF,WAAU,kDAHpB/F,MAAK+yB,UAAYhxB,MAHjB/B,MAAK+yB,UAAY,IAoBnB,IAXI4W,IAEFhpC,EAAKsH,QAAQjI,KAAKmnC,cAAe,SAAUj/B,EAAUgB,GACnDygC,EAAah4B,IAAIzI,EAAOhB,KAI1BkL,EAAMu2B,EAAa51B,SACnB/T,KAAKsnC,UAAUl0B,IAGbpT,KAAK+yB,UAAW,CAElB,GAAI1yB,GAAKL,KAAKK,EACdM,GAAKsH,QAAQjI,KAAKmnC,cAAe,SAAUj/B,EAAUgB,GACnDkJ,EAAG2gB,UAAUvhB,GAAGtI,EAAOhB,EAAU7H,KAInC+S,EAAMpT,KAAK+yB,UAAUhf,SACrB/T,KAAKonC,OAAOh0B,GAEdpT,KAAKioC,mBACLjoC,KAAKosC,eACLpsC,KAAKse,UAOP1b,EAAU2O,UAAU+jB,UAAY,SAASC,GACvC,GACEniB,GADEhB,EAAKpS,IAgBT,IAZIA,KAAKgzB,aACPryB,EAAKsH,QAAQjI,KAAKunC,eAAgB,SAAUr/B,EAAUgB,GACpDkJ,EAAG4gB,WAAWnhB,YAAY3I,EAAOhB,KAInCkL,EAAMpT,KAAKgzB,WAAWjf,SACtB/T,KAAKgzB,WAAa,KAClBhzB,KAAK0nC,gBAAgBt0B,IAIlBmiB,EAGA,CAAA,KAAIA,YAAkB10B,IAAW00B,YAAkBz0B,IAItD,KAAM,IAAIiF,WAAU,kDAHpB/F,MAAKgzB,WAAauC,MAHlBv1B,MAAKgzB,WAAa,IASpB,IAAIhzB,KAAKgzB,WAAY,CAEnB,GAAI3yB,GAAKL,KAAKK,EACdM,GAAKsH,QAAQjI,KAAKunC,eAAgB,SAAUr/B,EAAUgB,GACpDkJ,EAAG4gB,WAAWxhB,GAAGtI,EAAOhB,EAAU7H,KAIpC+S,EAAMpT,KAAKgzB,WAAWjf,SACtB/T,KAAKwnC,aAAap0B,GAEpBpT,KAAKqnC,aAKPzkC,EAAU2O,UAAU81B,UAAY,WAC9BrnC,KAAKioC,mBACLjoC,KAAKysC,sBACLzsC,KAAKosC,eACLpsC,KAAKse,UAEP1b,EAAU2O,UAAU61B,OAAkB,SAAUh0B,GAAMpT,KAAKqnC,UAAUj0B,IACrExQ,EAAU2O,UAAU+1B,UAAkB,SAAUl0B,GAAMpT,KAAKqnC,UAAUj0B,IACrExQ,EAAU2O,UAAUk2B,gBAAmB,SAAUE,GAC/C,IAAK,GAAIziC,GAAI,EAAGA,EAAIyiC,EAAStiC,OAAQH,IAAK,CACxC,GAAImL,GAAQrQ,KAAKgzB,WAAW7f,IAAIw0B,EAASziC,GACzClF,MAAK0sC,aAAar8B,EAAOs3B,EAASziC,IAGpClF,KAAKosC,eACLpsC,KAAKse,UAEP1b,EAAU2O,UAAUi2B,aAAe,SAAUG,GAAW3nC,KAAKynC,gBAAgBE,IAE7E/kC,EAAU2O,UAAUm2B,gBAAkB,SAAUC,GAC9C,IAAK,GAAIziC,GAAI,EAAGA,EAAIyiC,EAAStiC,OAAQH,IAC9BlF,KAAKu1B,OAAO/vB,eAAemiC,EAASziC,MACkB,SAArDlF,KAAKu1B,OAAOoS,EAASziC,IAAIwI,QAAQi+B,kBACnC3rC,KAAKssC,WAAWnL,YAAYwG,EAASziC,IACrClF,KAAKwsC,YAAYrL,YAAYwG,EAASziC,IACtClF,KAAKwsC,YAAYluB,WAGjBte,KAAKqsC,UAAUlL,YAAYwG,EAASziC,IACpClF,KAAKusC,WAAWpL,YAAYwG,EAASziC,IACrClF,KAAKusC,WAAWjuB,gBAEXte,MAAKu1B,OAAOoS,EAASziC,IAGhClF,MAAKioC,mBACLjoC,KAAKosC,eACLpsC,KAAKse,UAUP1b,EAAU2O,UAAUm7B,aAAe,SAAUr8B,EAAOsxB,GAC7C3hC,KAAKu1B,OAAO/vB,eAAem8B,IAY9B3hC,KAAKu1B,OAAOoM,GAAS5uB,OAAO1C,GACyB,SAAjDrQ,KAAKu1B,OAAOoM,GAASj0B,QAAQi+B,kBAC/B3rC,KAAKssC,WAAWpL,YAAYS,EAAS3hC,KAAKu1B,OAAOoM,IACjD3hC,KAAKwsC,YAAYtL,YAAYS,EAAS3hC,KAAKu1B,OAAOoM,MAGlD3hC,KAAKqsC,UAAUnL,YAAYS,EAAS3hC,KAAKu1B,OAAOoM,IAChD3hC,KAAKusC,WAAWrL,YAAYS,EAAS3hC,KAAKu1B,OAAOoM,OAlBnD3hC,KAAKu1B,OAAOoM,GAAW,GAAIn/B,GAAW6N,EAAOsxB,EAAS3hC,KAAK0N,QAAS1N,KAAK2jC,0BACpB,SAAjD3jC,KAAKu1B,OAAOoM,GAASj0B,QAAQi+B,kBAC/B3rC,KAAKssC,WAAWtL,SAASW,EAAS3hC,KAAKu1B,OAAOoM,IAC9C3hC,KAAKwsC,YAAYxL,SAASW,EAAS3hC,KAAKu1B,OAAOoM,MAG/C3hC,KAAKqsC,UAAUrL,SAASW,EAAS3hC,KAAKu1B,OAAOoM,IAC7C3hC,KAAKusC,WAAWvL,SAASW,EAAS3hC,KAAKu1B,OAAOoM,MAclD3hC,KAAKusC,WAAWjuB,SAChBte,KAAKwsC,YAAYluB,UAGnB1b,EAAU2O,UAAUk7B,oBAAsB,WACxC,GAAsB,MAAlBzsC,KAAK+yB,UAAmB,CAG1B,GAAI4Z,KACJ,KAAK,GAAIhL,KAAW3hC,MAAKu1B,OACnBv1B,KAAKu1B,OAAO/vB,eAAem8B,KAC7BgL,EAAchL,MAGlB,KAAK,GAAInuB,KAAUxT,MAAK+yB,UAAU9hB,MAChC,GAAIjR,KAAK+yB,UAAU9hB,MAAMzL,eAAegO,GAAS,CAC/C,GAAIb,GAAO3S,KAAK+yB,UAAU9hB,MAAMuC,EAChCb,GAAKxC,EAAIxP,EAAK0F,QAAQsM,EAAKxC,EAAE,QAC7Bw8B,EAAch6B,EAAKtC,OAAOzI,KAAK+K,GAGnC,IAAK,GAAIgvB,KAAW3hC,MAAKu1B,OACnBv1B,KAAKu1B,OAAO/vB,eAAem8B,IAC7B3hC,KAAKu1B,OAAOoM,GAAS1O,SAAS0Z,EAAchL,MAqBpD/+B,EAAU2O,UAAU02B,iBAAmB,WACrC,GAAsB,MAAlBjoC,KAAK+yB,UAAmB,CAE1B,GAAI1iB,IAAShQ,GAAI0nC,EAAWhb,QAAS/sB,KAAK0N,QAAQk+B,aAClD5rC,MAAK0sC,aAAar8B,EAAO03B,EACzB,IAAI6E,GAAmB,CACvB,IAAI5sC,KAAK+yB,UACP,IAAK,GAAIvf,KAAUxT,MAAK+yB,UAAU9hB,MAChC,GAAIjR,KAAK+yB,UAAU9hB,MAAMzL,eAAegO,GAAS,CAC/C,GAAIb,GAAO3S,KAAK+yB,UAAU9hB,MAAMuC,EACpBtN,SAARyM,IACEA,EAAKnN,eAAe,SACHU,SAAfyM,EAAKtC,QACPsC,EAAKtC,MAAQ03B,GAIfp1B,EAAKtC,MAAQ03B,EAEf6E,EAAmBj6B,EAAKtC,OAAS03B,EAAY6E,EAAmB,EAAIA,GAoBpD,GAApBA,UACK5sC,MAAKu1B,OAAOwS,GACnB/nC,KAAKusC,WAAWpL,YAAY4G,GAC5B/nC,KAAKwsC,YAAYrL,YAAY4G,GAC7B/nC,KAAKqsC,UAAUlL,YAAY4G,GAC3B/nC,KAAKssC,WAAWnL,YAAY4G,eAMvB/nC,MAAKu1B,OAAOwS,GACnB/nC,KAAKusC,WAAWpL,YAAY4G,GAC5B/nC,KAAKwsC,YAAYrL,YAAY4G,GAC7B/nC,KAAKqsC,UAAUlL,YAAY4G,GAC3B/nC,KAAKssC,WAAWnL,YAAY4G,EAG9B/nC,MAAKusC,WAAWjuB,SAChBte,KAAKwsC,YAAYluB,UAQnB1b,EAAU2O,UAAU+M,OAAS,WAC3B,GAAI6X,IAAU,CAEdn2B,MAAK2/B,IAAInvB,MAAMK,QAAU,GAAK7Q,KAAK0N,QAAQo+B,aAAapgC,QAAQ,KAAK,IAAM,MACpDxF,SAAnBlG,KAAKi3B,WAA2Bj3B,KAAK4Q,OAAS5Q,KAAKi3B,WAAaj3B,KAAK4Q,SACvEulB,GAAU,GAGZA,EAAUn2B,KAAK++B,cAAgB5I,CAE/B,IAAI2S,GAAkB9oC,KAAK8xB,KAAKhkB,MAAMqX,IAAMnlB,KAAK8xB,KAAKhkB,MAAMY,MACxDq6B,EAAUD,GAAmB9oC,KAAKgpC,qBAAyBhpC,KAAK4Q,OAAS5Q,KAAKi3B,SAoBlF,OAnBAj3B,MAAKgpC,oBAAsBF,EAC3B9oC,KAAKi3B,UAAYj3B,KAAK4Q,MAGtB5Q,KAAK4Q,MAAQ5Q,KAAKktB,IAAI/Q,MAAMoR,YAIb,GAAX4I,IACFn2B,KAAK2/B,IAAInvB,MAAMI,MAAQjQ,EAAK8I,OAAOK,OAAO,EAAE9J,KAAK4Q,OACjD5Q,KAAK2/B,IAAInvB,MAAMvJ,KAAOtG,EAAK8I,OAAOK,QAAQ9J,KAAK4Q,QAEnC,GAAVm4B,GACF/oC,KAAKosC,eAGPpsC,KAAKusC,WAAWjuB,SAChBte,KAAKwsC,YAAYluB,SAEV6X,GAOTvzB,EAAU2O,UAAU66B,aAAe,WAWjC,GATAxrC,EAAQsO,gBAAgBlP,KAAK8gC,aASX,GAAd9gC,KAAK4Q,OAAgC,MAAlB5Q,KAAK+yB,UAAmB,CAC7C,GAAI1iB,GAAO45B,EAAW4C,EAAmB3nC,EACrC4nC,KACAC,KACAC,KACAnL,GAAe,EAGf8F,IACJ,KAAK,GAAIhG,KAAW3hC,MAAKu1B,OACnBv1B,KAAKu1B,OAAO/vB,eAAem8B,IAC7BgG,EAAS//B,KAAK+5B,EAKlB,IAAIsL,GAAUjtC,KAAK8xB,KAAKnxB,KAAK8xB,cAAezyB,KAAK8xB,KAAKC,SAASryB,KAAKkR,OAChEs8B,EAAUltC,KAAK8xB,KAAKnxB,KAAK8xB,aAAa,EAAIzyB,KAAK8xB,KAAKC,SAASryB,KAAKkR,MAOtE,IAAI+2B,EAAStiC,OAAS,EAAG,CACvB,IAAKH,EAAI,EAAGA,EAAIyiC,EAAStiC,OAAQH,IAAK,CAIpC,GAHAmL,EAAQrQ,KAAKu1B,OAAOoS,EAASziC,IAC7B+kC,KAE0B,GAAtB55B,EAAM3C,QAAQ2G,KAGhB,IAAK,GAFD7F,GAAQ5J,KAAK6H,IAAI,EAAE9L,EAAKkO,oBAAoBwB,EAAM0iB,UAAWka,EAAS,IAAK,WAEtEtkB,EAAIna,EAAOma,EAAItY,EAAM0iB,UAAU1tB,OAAQsjB,IAAK,CACnD,GAAIhW,GAAOtC,EAAM0iB,UAAUpK,EAC3B,IAAaziB,SAATyM,EAAoB,CACtB,GAAIA,EAAKxC,EAAI+8B,EAAS,CACrBjD,EAAUriC,KAAK+K,EACf,OAGCs3B,EAAUriC,KAAK+K,QAMrB,KAAK,GAAIgW,GAAI,EAAGA,EAAItY,EAAM0iB,UAAU1tB,OAAQsjB,IAAK,CAC/C,GAAIhW,GAAOtC,EAAM0iB,UAAUpK,EACdziB,UAATyM,GACEA,EAAKxC,EAAI88B,GAAWt6B,EAAKxC,EAAI+8B,GAC/BjD,EAAUriC,KAAK+K,GAMvBk6B,EAAoB7sC,KAAKmtC,gBAAgBlD,EAAW55B,GACpD28B,EAAYplC,MAAMmD,IAAK8hC,EAAkB9hC,IAAK0B,IAAKogC,EAAkBpgC,MACrEqgC,EAAsBllC,KAAKilC,EAAkB97B,MAM/C,GADA8wB,EAAe7hC,KAAKotC,aAAazF,EAAUqF,GACvB,GAAhBnL,EAGF,MAFAjhC,GAAQ2O,gBAAgBvP,KAAK8gC,iBAC7B9gC,MAAK8xB,KAAKE,QAAQnH,KAAK,SAKzB,KAAK3lB,EAAI,EAAGA,EAAIyiC,EAAStiC,OAAQH,IAC/BmL,EAAQrQ,KAAKu1B,OAAOoS,EAASziC,IAC7B6nC,EAAmBnlC,KAAK5H,KAAKqtC,gBAAgBP,EAAsB5nC,GAAGmL,GAIxE,KAAKnL,EAAI,EAAGA,EAAIyiC,EAAStiC,OAAQH,IAC/BmL,EAAQrQ,KAAKu1B,OAAOoS,EAASziC,IACF,QAAvBmL,EAAM3C,QAAQ8C,MAChBxQ,KAAKstC,eAAeP,EAAmB7nC,GAAImL,GAG3CrQ,KAAKutC,cAAeR,EAAmB7nC,GAAImL,IAOnDzP,EAAQ2O,gBAAgBvP,KAAK8gC,cAQ/Bl+B,EAAU2O,UAAU67B,aAAe,SAAUzF,EAAUqF,GACrD,GAGoEQ,GAAQC,EAHxE5L,GAAe,EACf6L,GAAgB,EAChBC,GAAiB,EACjBC,EAAU,IAAKC,EAAW,IAAKC,EAAU,KAAMC,EAAW,KAC1Drc,EAAc,MAGlB,IAAIiW,EAAStiC,OAAS,EAAG,CACvB,IAAK,GAAIH,GAAI,EAAGA,EAAIyiC,EAAStiC,OAAQH,IAAK,CACxCwsB,EAAc,MACd,IAAIrhB,GAAQrQ,KAAKu1B,OAAOoS,EAASziC,GACK,UAAlCmL,EAAM3C,QAAQi+B,mBAChBja,EAAc,SAGhB8b,EAASR,EAAY9nC,GAAG6F,IACxB0iC,EAAST,EAAY9nC,GAAGuH,IAEL,QAAfilB,GACFgc,GAAgB,EAChBE,EAAUA,EAAUJ,EAASA,EAASI,EACtCE,EAAoBL,EAAVK,EAAmBL,EAASK,IAGtCH,GAAiB,EACjBE,EAAWA,EAAWL,EAASA,EAASK,EACxCE,EAAsBN,EAAXM,EAAoBN,EAASM,GAGvB,GAAjBL,GACF1tC,KAAKqsC,UAAUxb,SAAS+c,EAASE,GAEb,GAAlBH,GACF3tC,KAAKssC,WAAWzb,SAASgd,EAAUE,GA6BvC,MAzBAlM,GAAe7hC,KAAKguC,qBAAqBN,EAAgB1tC,KAAKqsC,YAAexK,EAC7EA,EAAe7hC,KAAKguC,qBAAqBL,EAAgB3tC,KAAKssC,aAAezK,EAEvD,GAAlB8L,GAA2C,GAAjBD,GAC5B1tC,KAAKqsC,UAAU4B,WAAY,EAC3BjuC,KAAKssC,WAAW2B,WAAY,IAG5BjuC,KAAKqsC,UAAU4B,WAAY,EAC3BjuC,KAAKssC,WAAW2B,WAAY,GAG9BjuC,KAAKssC,WAAWzL,QAAU6M,EAEI,GAA1B1tC,KAAKssC,WAAWzL,QACI,GAAlB8M,IACF3tC,KAAKqsC,UAAUzL,WAAa5gC,KAAKssC,WAAW17B,OAE9CixB,EAAe7hC,KAAKqsC,UAAU/tB,UAAYujB,EAC1C7hC,KAAKssC,WAAW3L,iBAAmB3gC,KAAKqsC,UAAU3L,WAClDmB,EAAe7hC,KAAKssC,WAAWhuB,UAAYujB,GAG3CA,EAAe7hC,KAAKssC,WAAWhuB,UAAYujB,EAEtCA,GAWTj/B,EAAU2O,UAAUy8B,qBAAuB,SAAUE,EAAUhS,GAC7D,GAAIrB,IAAU,CAad,OAZgB,IAAZqT,EACEhS,EAAKhP,IAAI/Q,MAAM3S,aACjB0yB,EAAKkF,OACLvG,GAAU,GAIPqB,EAAKhP,IAAI/Q,MAAM3S,aAClB0yB,EAAKmF,OACLxG,GAAU,GAGPA;EASTj4B,EAAU2O,UAAUg8B,cAAgB,SAAU5X,EAAStlB,GACrD,GAAe,MAAXslB,GACEA,EAAQtwB,OAAS,EAAG,CACtB,GAAI8oC,GACA1N,EAAW,GAAMpwB,EAAM3C,QAAQq+B,SAASn7B,MACxC6V,EAAS,EACT7V,EAAQP,EAAM3C,QAAQq+B,SAASn7B,KAEC,SAAhCP,EAAM3C,QAAQq+B,SAAStF,MAAwBhgB,GAAU,GAAI7V,EACxB,SAAhCP,EAAM3C,QAAQq+B,SAAStF,QAAmBhgB,GAAU,GAAI7V,EAEjE,KAAK,GAAI1L,GAAI,EAAGA,EAAIywB,EAAQtwB,OAAQH,IAE9BA,EAAE,EAAIywB,EAAQtwB,SAAS8oC,EAAevpC,KAAK+iB,IAAIgO,EAAQzwB,EAAE,GAAGiL,EAAIwlB,EAAQzwB,GAAGiL,IAC3EjL,EAAI,IAAmBipC,EAAevpC,KAAKmG,IAAIojC,EAAavpC,KAAK+iB,IAAIgO,EAAQzwB,EAAE,GAAGiL,EAAIwlB,EAAQzwB,GAAGiL,KAClFS,EAAfu9B,IAAuBv9B,EAAuB6vB,EAAf0N,EAA0B1N,EAAW0N,GAExEvtC,EAAQ+P,QAAQglB,EAAQzwB,GAAGiL,EAAIsW,EAAQkP,EAAQzwB,GAAGkL,EAAGQ,EAAOP,EAAMwzB,aAAelO,EAAQzwB,GAAGkL,EAAGC,EAAM7I,UAAY,OAAQxH,KAAK8gC,YAAa9gC,KAAK2/B,IAI1G,IAApCtvB,EAAM3C,QAAQ6C,WAAW5C,SAC3B3N,KAAKouC,YAAYzY,EAAStlB,EAAOrQ,KAAK8gC,YAAa9gC,KAAK2/B,IAAKlZ,KAarE7jB,EAAU2O,UAAU+7B,eAAiB,SAAU3X,EAAStlB,GACtD,GAAe,MAAXslB,GACEA,EAAQtwB,OAAS,EAAG,CACtB,GAAI8+B,GAAMt4B,EACNwiC,EAAYzqC,OAAO5D,KAAK2/B,IAAInvB,MAAMK,OAAOnF,QAAQ,KAAK,IAa1D,IAZAy4B,EAAOvjC,EAAQ6O,cAAc,OAAQzP,KAAK8gC,YAAa9gC,KAAK2/B,KAC5DwE,EAAK1zB,eAAe,KAAM,QAASJ,EAAM7I,WAIvCqE,EADsC,GAApCwE,EAAM3C,QAAQq2B,WAAWp2B,QACvB3N,KAAKsuC,YAAY3Y,EAAStlB,GAG1BrQ,KAAKuuC,QAAQ5Y,GAIiB,GAAhCtlB,EAAM3C,QAAQ62B,OAAO52B,QAAiB,CACxC,GACI6gC,GADApK,EAAWxjC,EAAQ6O,cAAc,OAAOzP,KAAK8gC,YAAa9gC,KAAK2/B,IAGjE6O,GADsC,OAApCn+B,EAAM3C,QAAQ62B,OAAO7S,YACf,IAAMiE,EAAQ,GAAGxlB,EAAI,MAAgBtE,EAAI,IAAM8pB,EAAQA,EAAQtwB,OAAS,GAAG8K,EAAI,KAG/E,IAAMwlB,EAAQ,GAAGxlB,EAAI,IAAMk+B,EAAY,IAAMxiC,EAAI,IAAM8pB,EAAQA,EAAQtwB,OAAS,GAAG8K,EAAI,IAAMk+B,EAEvGjK,EAAS3zB,eAAe,KAAM,QAASJ,EAAM7I,UAAY,SACzD48B,EAAS3zB,eAAe,KAAM,IAAK+9B,GAGrCrK,EAAK1zB,eAAe,KAAM,IAAK,IAAM5E,GAGG,GAApCwE,EAAM3C,QAAQ6C,WAAW5C,SAC3B3N,KAAKouC,YAAYzY,EAAStlB,EAAOrQ,KAAK8gC,YAAa9gC,KAAK2/B,OAchE/8B,EAAU2O,UAAU68B,YAAc,SAAUzY,EAAStlB,EAAOlB,EAAewwB,EAAKlZ,GAC/DvgB,SAAXugB,IAAuBA,EAAS,EACpC,KAAK,GAAIvhB,GAAI,EAAGA,EAAIywB,EAAQtwB,OAAQH,IAClCtE,EAAQsP,UAAUylB,EAAQzwB,GAAGiL,EAAIsW,EAAQkP,EAAQzwB,GAAGkL,EAAGC,EAAOlB,EAAewwB,IAejF/8B,EAAU2O,UAAU47B,gBAAkB,SAAUsB,EAAYp+B,GAC1D,GACIq+B,GAAQC,EADRC,KAEAzc,EAAWnyB,KAAK8xB,KAAKnxB,KAAKwxB,SAE1B0c,EAAY,EACZC,EAAiBL,EAAWppC,OAE5BwT,EAAO41B,EAAW,GAAGr+B,EACrB2I,EAAO01B,EAAW,GAAGr+B,CAIzB,IAA8B,GAA1BC,EAAM3C,QAAQm+B,SAAkB,CAClC,GAAIkD,GAAY/uC,KAAK8xB,KAAKnxB,KAAK0xB,eAAeoc,EAAWA,EAAWppC,OAAO,GAAG8K,GAAKnQ,KAAK8xB,KAAKnxB,KAAK0xB,eAAeoc,EAAW,GAAGt+B,GAC3H6+B,EAAiBF,EAAeC,CACpCF,GAAYjqC,KAAKmG,IAAInG,KAAKqqC,KAAK,GAAMH,GAAiBlqC,KAAK6H,IAAI,EAAE7H,KAAK+lB,MAAMqkB,KAG9E,IAAK,GAAI9pC,GAAI,EAAO4pC,EAAJ5pC,EAAoBA,GAAK2pC,EACvCH,EAASvc,EAASsc,EAAWvpC,GAAGiL,GAAKnQ,KAAK4Q,MAAQ,EAClD+9B,EAASF,EAAWvpC,GAAGkL,EACvBw+B,EAAchnC,MAAMuI,EAAGu+B,EAAQt+B,EAAGu+B,IAClC91B,EAAOA,EAAO81B,EAASA,EAAS91B,EAChCE,EAAc41B,EAAP51B,EAAgB41B,EAAS51B,CAIlC,QAAQhO,IAAK8N,EAAMpM,IAAKsM,EAAMhI,KAAM69B,IAYtChsC,EAAU2O,UAAU87B,gBAAkB,SAAUoB,EAAYp+B,GAC1D,GACIq+B,GAAQC,EADRC,KAEA1S,EAAOl8B,KAAKqsC,UACZgC,EAAYzqC,OAAO5D,KAAK2/B,IAAInvB,MAAMK,OAAOnF,QAAQ,KAAK,IAEpB,UAAlC2E,EAAM3C,QAAQi+B,mBAChBzP,EAAOl8B,KAAKssC,WAGd,KAAK,GAAIpnC,GAAI,EAAGA,EAAIupC,EAAWppC,OAAQH,IACrCwpC,EAASD,EAAWvpC,GAAGiL,EACvBw+B,EAAS/pC,KAAK+lB,MAAMuR,EAAKiH,aAAasL,EAAWvpC,GAAGkL,IACpDw+B,EAAchnC,MAAMuI,EAAGu+B,EAAQt+B,EAAGu+B,GAMpC,OAHAt+B,GAAMyzB,gBAAgBl/B,KAAKmG,IAAIsjC,EAAWnS,EAAKiH,aAAa,KAGrDyL,GAWThsC,EAAU2O,UAAU29B,mBAAqB,SAASn+B,GAMhD,IAAK,GAJDo+B,GAAIC,EAAIC,EAAIC,EAAIC,EAAKC,EACrB3jC,EAAIjH,KAAK+lB,MAAM5Z,EAAK,GAAGZ,GAAK,IAAMvL,KAAK+lB,MAAM5Z,EAAK,GAAGX,GAAK,IAC1Dq/B,EAAgB,EAAE,EAClBpqC,EAAS0L,EAAK1L,OACTH,EAAI,EAAOG,EAAS,EAAbH,EAAgBA,IAE9BiqC,EAAW,GAALjqC,EAAU6L,EAAK,GAAKA,EAAK7L,EAAE,GACjCkqC,EAAKr+B,EAAK7L,GACVmqC,EAAKt+B,EAAK7L,EAAE,GACZoqC,EAAcjqC,EAARH,EAAI,EAAc6L,EAAK7L,EAAE,GAAKmqC,EAUpCE,GAAQp/B,IAAMg/B,EAAGh/B,EAAI,EAAEi/B,EAAGj/B,EAAIk/B,EAAGl/B,GAAIs/B,EAAgBr/B,IAAM++B,EAAG/+B,EAAI,EAAEg/B,EAAGh/B,EAAIi/B,EAAGj/B,GAAIq/B,GAClFD,GAAQr/B,GAAMi/B,EAAGj/B,EAAI,EAAEk/B,EAAGl/B,EAAIm/B,EAAGn/B,GAAIs/B,EAAgBr/B,GAAMg/B,EAAGh/B,EAAI,EAAEi/B,EAAGj/B,EAAIk/B,EAAGl/B,GAAIq/B,GAGlF5jC,GAAK,IACH0jC,EAAIp/B,EAAI,IACRo/B,EAAIn/B,EAAI,IACRo/B,EAAIr/B,EAAI,IACRq/B,EAAIp/B,EAAI,IACRi/B,EAAGl/B,EAAI,IACPk/B,EAAGj/B,EAAI,GAGX,OAAOvE,IAaTjJ,EAAU2O,UAAU+8B,YAAc,SAASv9B,EAAMV,GAC/C,GAAI4zB,GAAQ5zB,EAAM3C,QAAQq2B,WAAWE,KACrC,IAAa,GAATA,GAAwB/9B,SAAV+9B,EAChB,MAAOjkC,MAAKkvC,mBAAmBn+B,EAO/B,KAAK,GAJDo+B,GAAIC,EAAIC,EAAIC,EAAIC,EAAKC,EAAKE,EAAGC,EAAGC,EAAIC,EAAGtoB,EAAGuoB,EAAGC,EAC7CC,EAAQC,EAAQC,EAASC,EAASC,EAASC,EAC3CxkC,EAAIjH,KAAK+lB,MAAM5Z,EAAK,GAAGZ,GAAK,IAAMvL,KAAK+lB,MAAM5Z,EAAK,GAAGX,GAAK,IAC1D/K,EAAS0L,EAAK1L,OACTH,EAAI,EAAOG,EAAS,EAAbH,EAAgBA,IAE9BiqC,EAAW,GAALjqC,EAAU6L,EAAK,GAAKA,EAAK7L,EAAE,GACjCkqC,EAAKr+B,EAAK7L,GACVmqC,EAAKt+B,EAAK7L,EAAE,GACZoqC,EAAcjqC,EAARH,EAAI,EAAc6L,EAAK7L,EAAE,GAAKmqC,EAEpCK,EAAK9qC,KAAKkoB,KAAKloB,KAAKusB,IAAIge,EAAGh/B,EAAIi/B,EAAGj/B,EAAE,GAAKvL,KAAKusB,IAAIge,EAAG/+B,EAAIg/B,EAAGh/B,EAAE,IAC9Du/B,EAAK/qC,KAAKkoB,KAAKloB,KAAKusB,IAAIie,EAAGj/B,EAAIk/B,EAAGl/B,EAAE,GAAKvL,KAAKusB,IAAIie,EAAGh/B,EAAIi/B,EAAGj/B,EAAE,IAC9Dw/B,EAAKhrC,KAAKkoB,KAAKloB,KAAKusB,IAAIke,EAAGl/B,EAAIm/B,EAAGn/B,EAAE,GAAKvL,KAAKusB,IAAIke,EAAGj/B,EAAIk/B,EAAGl/B,EAAE,IAiB9D4/B,EAAUprC,KAAKusB,IAAIye,EAAK3L,GACxBiM,EAAUtrC,KAAKusB,IAAIye,EAAG,EAAE3L,GACxBgM,EAAUrrC,KAAKusB,IAAIwe,EAAK1L,GACxBkM,EAAUvrC,KAAKusB,IAAIwe,EAAG,EAAE1L,GACxBoM,EAAUzrC,KAAKusB,IAAIue,EAAKzL,GACxBmM,EAAUxrC,KAAKusB,IAAIue,EAAG,EAAEzL,GAExB4L,EAAI,EAAEO,EAAU,EAAEC,EAASJ,EAASE,EACpC5oB,EAAI,EAAE2oB,EAAU,EAAEF,EAASC,EAASE,EACpCL,EAAI,EAAEO,GAAUA,EAASJ,GACrBH,EAAI,IAAIA,EAAI,EAAIA,GACpBC,EAAI,EAAEC,GAAUA,EAASC,GACrBF,EAAI,IAAIA,EAAI,EAAIA,GAEpBR,GAAQp/B,IAAMggC,EAAUhB,EAAGh/B,EAAI0/B,EAAET,EAAGj/B,EAAIigC,EAAUf,EAAGl/B,GAAK2/B,EACxD1/B,IAAM+/B,EAAUhB,EAAG/+B,EAAIy/B,EAAET,EAAGh/B,EAAIggC,EAAUf,EAAGj/B,GAAK0/B,GAEpDN,GAAQr/B,GAAM+/B,EAAUd,EAAGj/B,EAAIoX,EAAE8nB,EAAGl/B,EAAIggC,EAAUb,EAAGn/B,GAAK4/B,EACxD3/B,GAAM8/B,EAAUd,EAAGh/B,EAAImX,EAAE8nB,EAAGj/B,EAAI+/B,EAAUb,EAAGl/B,GAAK2/B,GAEvC,GAATR,EAAIp/B,GAAmB,GAATo/B,EAAIn/B,IAASm/B,EAAMH,GACxB,GAATI,EAAIr/B,GAAmB,GAATq/B,EAAIp/B,IAASo/B,EAAMH,GACrCxjC,GAAK,IACH0jC,EAAIp/B,EAAI,IACRo/B,EAAIn/B,EAAI,IACRo/B,EAAIr/B,EAAI,IACRq/B,EAAIp/B,EAAI,IACRi/B,EAAGl/B,EAAI,IACPk/B,EAAGj/B,EAAI,GAGX,OAAOvE,IAUXjJ,EAAU2O,UAAUg9B,QAAU,SAASx9B,GAGrC,IAAK,GADDlF,GAAI,GACC3G,EAAI,EAAGA,EAAI6L,EAAK1L,OAAQH,IAE7B2G,GADO,GAAL3G,EACG6L,EAAK7L,GAAGiL,EAAI,IAAMY,EAAK7L,GAAGkL,EAG1B,IAAMW,EAAK7L,GAAGiL,EAAI,IAAMY,EAAK7L,GAAGkL,CAGzC,OAAOvE,IAGThM,EAAOD,QAAUgD,GAKb,SAAS/C,EAAQD,EAASM,GAc9B,QAAS2C,GAAUivB,EAAMpkB,GACvB1N,KAAKktB,KACH6X,WAAY,KACZuL,cACAC,cACAC,cACAC,cACAphC,WACEihC,cACAC,cACAC,cACAC,gBAGJzwC,KAAK0F,OACHoI,OACEY,MAAO,EACPyW,IAAK,EACL4S,YAAa,GAEf2Y,QAAS,GAGX1wC,KAAKwxB,gBACHE,YAAa,SAEbkO,iBAAiB,EACjBC,iBAAiB,GAEnB7/B,KAAK0N,QAAU/M,EAAKqE,UAAWhF,KAAKwxB,gBAEpCxxB,KAAK8xB,KAAOA,EAGZ9xB,KAAK6xB,UAEL7xB,KAAK2Z,WAAWjM,GAhDlB,GAAI/M,GAAOT,EAAoB,GAC3BkC,EAAYlC,EAAoB,IAChC2B,EAAW3B,EAAoB,GAiDnC2C,GAAS0O,UAAY,GAAInP,GAUzBS,EAAS0O,UAAUoI,WAAa,SAASjM,GACnCA,GAEF/M,EAAK8E,iBAAiB,cAAe,kBAAmB,mBAAoBzF,KAAK0N,QAASA,IAO9F7K,EAAS0O,UAAUsgB,QAAU,WAC3B7xB,KAAKktB,IAAI6X,WAAan1B,SAASK,cAAc,OAC7CjQ,KAAKktB,IAAI9hB,WAAawE,SAASK,cAAc,OAE7CjQ,KAAKktB,IAAI6X,WAAWv9B,UAAY,sBAChCxH,KAAKktB,IAAI9hB,WAAW5D,UAAY,uBAMlC3E,EAAS0O,UAAUmjB,QAAU,WAEvB10B,KAAKktB,IAAI6X,WAAWv7B,YACtBxJ,KAAKktB,IAAI6X,WAAWv7B,WAAWgG,YAAYxP,KAAKktB,IAAI6X,YAElD/kC,KAAKktB,IAAI9hB,WAAW5B,YACtBxJ,KAAKktB,IAAI9hB,WAAW5B,WAAWgG,YAAYxP,KAAKktB,IAAI9hB,YAGtDpL,KAAK8xB,KAAO,MAOdjvB,EAAS0O,UAAU+M,OAAS,WAC1B,GAAI5Q,GAAU1N,KAAK0N,QACfhI,EAAQ1F,KAAK0F,MACbq/B,EAAa/kC,KAAKktB,IAAI6X,WACtB35B,EAAapL,KAAKktB,IAAI9hB,WAGtB+zB,EAAiC,OAAvBzxB,EAAQgkB,YAAwB1xB,KAAK8xB,KAAK5E,IAAI7lB,IAAMrH,KAAK8xB,KAAK5E,IAAI/M,OAC5EwwB,EAAiB5L,EAAWv7B,aAAe21B,CAG/Cn/B,MAAK8hC,oBAGL,IACIlC,IADc5/B,KAAK0N,QAAQgkB,YACT1xB,KAAK0N,QAAQkyB,iBAC/BC,EAAkB7/B,KAAK0N,QAAQmyB,eAGnCn6B,GAAMq8B,iBAAmBnC,EAAkBl6B,EAAMs8B,gBAAkB,EACnEt8B,EAAMu8B,iBAAmBpC,EAAkBn6B,EAAMw8B,gBAAkB,EACnEx8B,EAAMmL,OAASnL,EAAMq8B,iBAAmBr8B,EAAMu8B,iBAC9Cv8B,EAAMkL,MAAQm0B,EAAWxX,YAEzB7nB,EAAM08B,gBAAkBpiC,KAAK8xB,KAAKC,SAASryB,KAAKmR,OAASnL,EAAMu8B,kBACnC,OAAvBv0B,EAAQgkB,YAAuB1xB,KAAK8xB,KAAKC,SAAS5R,OAAOtP,OAAS7Q,KAAK8xB,KAAKC,SAAS1qB,IAAIwJ,QAC9FnL,EAAMy8B,eAAiB,EACvBz8B,EAAM48B,gBAAkB58B,EAAM08B,gBAAkB18B,EAAMu8B,iBACtDv8B,EAAM28B,eAAiB,CAGvB,IAAIuO,GAAwB7L,EAAW8L,YACnCC,EAAwB1lC,EAAWylC,WAsBvC,OArBA9L,GAAWv7B,YAAcu7B,EAAWv7B,WAAWgG,YAAYu1B,GAC3D35B,EAAW5B,YAAc4B,EAAW5B,WAAWgG,YAAYpE,GAE3D25B,EAAWv0B,MAAMK,OAAS7Q,KAAK0F,MAAMmL,OAAS,KAE9C7Q,KAAK+wC,iBAGDH,EACFzR,EAAO6R,aAAajM,EAAY6L,GAGhCzR,EAAOrvB,YAAYi1B,GAEjB+L,EACF9wC,KAAK8xB,KAAK5E,IAAIiG,mBAAmB6d,aAAa5lC,EAAY0lC,GAG1D9wC,KAAK8xB,KAAK5E,IAAIiG,mBAAmBrjB,YAAY1E,GAGxCpL,KAAK++B,cAAgB4R,GAO9B9tC,EAAS0O,UAAUw/B,eAAiB,WAClC,GAAIrf,GAAc1xB,KAAK0N,QAAQgkB,YAG3BhjB,EAAQ/N,EAAK0F,QAAQrG,KAAK8xB,KAAKhkB,MAAMY,MAAO,UAC5CyW,EAAMxkB,EAAK0F,QAAQrG,KAAK8xB,KAAKhkB,MAAMqX,IAAK,UACxC4S,EAAc/3B,KAAK8xB,KAAKnxB,KAAK4xB,OAA2C,GAAnCvyB,KAAK0F,MAAMw9B,gBAAkB,KAAS18B,UACtExG,KAAK8xB,KAAKnxB,KAAK4xB,OAAO,GAAG/rB,UAC9Bwe,EAAO,GAAInjB,GAAS,GAAImC,MAAK0K,GAAQ,GAAI1K,MAAKmhB,GAAM4S,EACxD/3B,MAAKglB,KAAOA,CAKZ,IAAIkI,GAAMltB,KAAKktB,GACfA,GAAI7d,UAAUihC,WAAapjB,EAAIojB,WAC/BpjB,EAAI7d,UAAUkhC,WAAarjB,EAAIqjB,WAC/BrjB,EAAI7d,UAAUmhC,WAAatjB,EAAIsjB,WAC/BtjB,EAAI7d,UAAUohC,WAAavjB,EAAIujB,WAC/BvjB,EAAIojB,cACJpjB,EAAIqjB,cACJrjB,EAAIsjB,cACJtjB,EAAIujB,cAEJzrB,EAAKiU,OAGL,KAFA,GAAIgY,GAAmB/qC,OACnBuG,EAAM,EACHuY,EAAKuU,WAAmB,IAAN9sB,GAAY,CACnCA,GACA,IAAIykC,GAAMlsB,EAAKC,aACX9U,EAAInQ,KAAK8xB,KAAKnxB,KAAKwxB,SAAS+e,GAC5BzX,EAAUzU,EAAKyU,SAIfz5B,MAAK0N,QAAQkyB,iBACf5/B,KAAKmxC,kBAAkBhhC,EAAG6U,EAAK4Z,gBAAiBlN,GAG9C+H,GAAWz5B,KAAK0N,QAAQmyB,iBACtB1vB,EAAI,IACkBjK,QAApB+qC,IACFA,EAAmB9gC,GAErBnQ,KAAKoxC,kBAAkBjhC,EAAG6U,EAAK8Z,gBAAiBpN,IAElD1xB,KAAKqxC,kBAAkBlhC,EAAGuhB,IAG1B1xB,KAAKsxC,kBAAkBnhC,EAAGuhB,GAG5B1M,EAAKE,OAIP,GAAIllB,KAAK0N,QAAQmyB,gBAAiB,CAChC,GAAI0R,GAAWvxC,KAAK8xB,KAAKnxB,KAAK4xB,OAAO,GACjCif,EAAWxsB,EAAK8Z,cAAcyS,GAC9BE,EAAYD,EAASnsC,QAAUrF,KAAK0F,MAAMu9B,gBAAkB,IAAM,IAE9C/8B,QAApB+qC,GAA6CA,EAAZQ,IACnCzxC,KAAKoxC,kBAAkB,EAAGI,EAAU9f,GAKxC/wB,EAAKsH,QAAQjI,KAAKktB,IAAI7d,UAAW,SAAUqiC,GACzC,KAAOA,EAAIrsC,QAAQ,CACjB,GAAI0B,GAAO2qC,EAAIC,KACX5qC,IAAQA,EAAKyC,YACfzC,EAAKyC,WAAWgG,YAAYzI,OAapClE,EAAS0O,UAAU4/B,kBAAoB,SAAUhhC,EAAGkW,EAAMqL,GAExD,GAAInM,GAAQvlB,KAAKktB,IAAI7d,UAAUohC,WAAW9gC,OAE1C,KAAK4V,EAAO,CAEV,GAAIwH,GAAUnd,SAAS2zB,eAAe,GACtChe,GAAQ3V,SAASK,cAAc,OAC/BsV,EAAMzV,YAAYid,GAClBxH,EAAM/d,UAAY,aAClBxH,KAAKktB,IAAI6X,WAAWj1B,YAAYyV,GAElCvlB,KAAKktB,IAAIujB,WAAW7oC,KAAK2d,GAEzBA,EAAMqsB,WAAW,GAAGC,UAAYxrB,EAEhCd,EAAM/U,MAAMnJ,IAAsB,OAAfqqB,EAAyB1xB,KAAK0F,MAAMu8B,iBAAmB,KAAQ,IAClF1c,EAAM/U,MAAMvJ,KAAOkJ,EAAI,MAWzBtN,EAAS0O,UAAU6/B,kBAAoB,SAAUjhC,EAAGkW,EAAMqL,GAExD,GAAInM,GAAQvlB,KAAKktB,IAAI7d,UAAUkhC,WAAW5gC,OAE1C,KAAK4V,EAAO,CAEV,GAAIwH,GAAUnd,SAAS2zB,eAAeld,EACtCd,GAAQ3V,SAASK,cAAc,OAC/BsV,EAAM/d,UAAY,aAClB+d,EAAMzV,YAAYid,GAClB/sB,KAAKktB,IAAI6X,WAAWj1B,YAAYyV,GAElCvlB,KAAKktB,IAAIqjB,WAAW3oC,KAAK2d,GAEzBA,EAAMqsB,WAAW,GAAGC,UAAYxrB,EAGhCd,EAAM/U,MAAMnJ,IAAsB,OAAfqqB,EAAwB,IAAO1xB,KAAK0F,MAAMq8B,iBAAoB,KACjFxc,EAAM/U,MAAMvJ,KAAOkJ,EAAI,MASzBtN,EAAS0O,UAAU+/B,kBAAoB,SAAUnhC,EAAGuhB,GAElD,GAAI1E,GAAOhtB,KAAKktB,IAAI7d,UAAUmhC,WAAW7gC,OAEpCqd,KAEHA,EAAOpd,SAASK,cAAc,OAC9B+c,EAAKxlB,UAAY,sBACjBxH,KAAKktB,IAAI9hB,WAAW0E,YAAYkd,IAElChtB,KAAKktB,IAAIsjB,WAAW5oC,KAAKolB,EAEzB,IAAItnB,GAAQ1F,KAAK0F,KAEfsnB,GAAKxc,MAAMnJ,IADM,OAAfqqB,EACehsB,EAAMu8B,iBAAmB,KAGzBjiC,KAAK8xB,KAAKC,SAAS1qB,IAAIwJ,OAAS,KAEnDmc,EAAKxc,MAAMK,OAASnL,EAAM08B,gBAAkB,KAC5CpV,EAAKxc,MAAMvJ,KAAQkJ,EAAIzK,EAAMy8B,eAAiB,EAAK,MASrDt/B,EAAS0O,UAAU8/B,kBAAoB,SAAUlhC,EAAGuhB,GAElD,GAAI1E,GAAOhtB,KAAKktB,IAAI7d,UAAUihC,WAAW3gC,OAEpCqd,KAEHA,EAAOpd,SAASK,cAAc,OAC9B+c,EAAKxlB,UAAY,sBACjBxH,KAAKktB,IAAI9hB,WAAW0E,YAAYkd,IAElChtB,KAAKktB,IAAIojB,WAAW1oC,KAAKolB,EAEzB,IAAItnB,GAAQ1F,KAAK0F,KAEfsnB,GAAKxc,MAAMnJ,IADM,OAAfqqB,EACe,IAGA1xB,KAAK8xB,KAAKC,SAAS1qB,IAAIwJ,OAAS,KAEnDmc,EAAKxc,MAAMvJ,KAAQkJ,EAAIzK,EAAM28B,eAAiB,EAAK,KACnDrV,EAAKxc,MAAMK,OAASnL,EAAM48B,gBAAkB,MAQ9Cz/B,EAAS0O,UAAUuwB,mBAAqB,WAKjC9hC,KAAKktB,IAAIsW,mBACZxjC,KAAKktB,IAAIsW,iBAAmB5zB,SAASK,cAAc,OACnDjQ,KAAKktB,IAAIsW,iBAAiBh8B,UAAY,qBACtCxH,KAAKktB,IAAIsW,iBAAiBhzB,MAAMiQ,SAAW,WAE3CzgB,KAAKktB,IAAIsW,iBAAiB1zB,YAAYF,SAAS2zB,eAAe,MAC9DvjC,KAAKktB,IAAI6X,WAAWj1B,YAAY9P,KAAKktB,IAAIsW,mBAE3CxjC,KAAK0F,MAAMs8B,gBAAkBhiC,KAAKktB,IAAIsW,iBAAiB9hB,aACvD1hB,KAAK0F,MAAMw9B,eAAiBljC,KAAKktB,IAAIsW,iBAAiBnnB,YAGjDrc,KAAKktB,IAAIwW,mBACZ1jC,KAAKktB,IAAIwW,iBAAmB9zB,SAASK,cAAc,OACnDjQ,KAAKktB,IAAIwW,iBAAiBl8B,UAAY,qBACtCxH,KAAKktB,IAAIwW,iBAAiBlzB,MAAMiQ,SAAW,WAE3CzgB,KAAKktB,IAAIwW,iBAAiB5zB,YAAYF,SAAS2zB,eAAe,MAC9DvjC,KAAKktB,IAAI6X,WAAWj1B,YAAY9P,KAAKktB,IAAIwW,mBAE3C1jC,KAAK0F,MAAMw8B,gBAAkBliC,KAAKktB,IAAIwW,iBAAiBhiB,aACvD1hB,KAAK0F,MAAMu9B,eAAiBjjC,KAAKktB,IAAIwW,iBAAiBrnB,aASxDxZ,EAAS0O,UAAU2gB,KAAO,SAASwM,GACjC,MAAO1+B,MAAKglB,KAAKkN,KAAKwM,IAGxB7+B,EAAOD,QAAUiD,GAKb,SAAShD,EAAQD,EAASM,GAa9B,QAAS8B,GAAM+O,EAAM+lB,EAAYppB,GAC/B1N,KAAKK,GAAK,KACVL,KAAKm/B,OAAS,KACdn/B,KAAK+Q,KAAOA,EACZ/Q,KAAKktB,IAAM,KACXltB,KAAK82B,WAAaA,MAClB92B,KAAK0N,QAAUA,MAEf1N,KAAKsqC,UAAW,EAChBtqC,KAAKwlC,WAAY,EACjBxlC,KAAKulC,OAAQ,EAEbvlC,KAAKqH,IAAM,KACXrH,KAAKiH,KAAO,KACZjH,KAAK4Q,MAAQ,KACb5Q,KAAK6Q,OAAS,KA1BhB,GAAIqiB,GAAShzB,EAAoB,GAgCjC8B,GAAKuP,UAAUm3B,OAAS,WACtB1oC,KAAKsqC,UAAW,EACZtqC,KAAKwlC,WAAWxlC,KAAKse,UAM3Btc,EAAKuP,UAAUk3B,SAAW,WACxBzoC,KAAKsqC,UAAW,EACZtqC,KAAKwlC,WAAWxlC,KAAKse,UAO3Btc,EAAKuP,UAAUu0B,UAAY,SAAS3G,GAC9Bn/B,KAAKwlC,WACPxlC,KAAKohC,OACLphC,KAAKm/B,OAASA,EACVn/B,KAAKm/B,QACPn/B,KAAKqhC,QAIPrhC,KAAKm/B,OAASA,GASlBn9B,EAAKuP,UAAU9C,UAAY,WAEzB,OAAO,GAOTzM,EAAKuP,UAAU8vB,KAAO,WACpB,OAAO,GAOTr/B,EAAKuP,UAAU6vB,KAAO,WACpB,OAAO,GAMTp/B,EAAKuP,UAAU+M,OAAS,aAOxBtc,EAAKuP,UAAUi1B,YAAc,aAO7BxkC,EAAKuP,UAAUq0B,YAAc,aAS7B5jC,EAAKuP,UAAUugC,qBAAuB,SAAUC,GAC9C,GAAI/xC,KAAKsqC,UAAYtqC,KAAK0N,QAAQk5B,SAASpyB,SAAWxU,KAAKktB,IAAI8kB,aAAc,CAE3E,GAAI5/B,GAAKpS,KAELgyC,EAAepiC,SAASK,cAAc,MAC1C+hC,GAAaxqC,UAAY,SACzBwqC,EAAa5S,MAAQ,mBAErBlM,EAAO8e,GACL/oC,gBAAgB,IACfuI,GAAG,MAAO,SAAUtI,GACrBkJ,EAAG+sB,OAAO6G,kBAAkB5zB,GAC5BlJ,EAAMw2B,oBAGRqS,EAAOjiC,YAAYkiC,GACnBhyC,KAAKktB,IAAI8kB,aAAeA,OAEhBhyC,KAAKsqC,UAAYtqC,KAAKktB,IAAI8kB,eAE9BhyC,KAAKktB,IAAI8kB,aAAaxoC,YACxBxJ,KAAKktB,IAAI8kB,aAAaxoC,WAAWgG,YAAYxP,KAAKktB,IAAI8kB,cAExDhyC,KAAKktB,IAAI8kB,aAAe,OAI5BnyC,EAAOD,QAAUoC,GAKb,SAASnC,EAAQD,EAASM,GAc9B,QAAS+B,GAAS8O,EAAM+lB,EAAYppB,GAalC,GAZA1N,KAAK0F,OACHunB,KACErc,MAAO,EACPC,OAAQ,GAEVmc,MACEpc,MAAO,EACPC,OAAQ,IAKRE,GACgB7K,QAAd6K,EAAKrC,MACP,KAAM,IAAInL,OAAM,oCAAsCwN,EAI1D/O,GAAKzB,KAAKP,KAAM+Q,EAAM+lB,EAAYppB,GA/BpC,GAAI1L,GAAO9B,EAAoB,GAkC/B+B,GAAQsP,UAAY,GAAIvP,GAAM,KAAM,KAAM,MAO1CC,EAAQsP,UAAU9C,UAAY,SAASX,GAGrC,GAAIgiB,IAAYhiB,EAAMqX,IAAMrX,EAAMY,OAAS,CAC3C,OAAQ1O,MAAK+Q,KAAKrC,MAAQZ,EAAMY,MAAQohB,GAAc9vB,KAAK+Q,KAAKrC,MAAQZ,EAAMqX,IAAM2K,GAMtF7tB,EAAQsP,UAAU+M,OAAS,WACzB,GAAI4O,GAAMltB,KAAKktB,GA2Bf,IA1BKA,IAEHltB,KAAKktB,OACLA,EAAMltB,KAAKktB,IAGXA,EAAI8a,IAAMp4B,SAASK,cAAc,OAGjCid,EAAIH,QAAUnd,SAASK,cAAc,OACrCid,EAAIH,QAAQvlB,UAAY,UACxB0lB,EAAI8a,IAAIl4B,YAAYod,EAAIH,SAGxBG,EAAIF,KAAOpd,SAASK,cAAc,OAClCid,EAAIF,KAAKxlB,UAAY,OAGrB0lB,EAAID,IAAMrd,SAASK,cAAc,OACjCid,EAAID,IAAIzlB,UAAY,MAGpB0lB,EAAI8a,IAAI,iBAAmBhoC,OAIxBA,KAAKm/B,OACR,KAAM,IAAI57B,OAAM,yCAElB,KAAK2pB,EAAI8a,IAAIx+B,WAAY,CACvB,GAAIu7B,GAAa/kC,KAAKm/B,OAAOjS,IAAI6X,UACjC,KAAKA,EAAY,KAAM,IAAIxhC,OAAM,sEACjCwhC,GAAWj1B,YAAYod,EAAI8a,KAE7B,IAAK9a,EAAIF,KAAKxjB,WAAY,CACxB,GAAI4B,GAAapL,KAAKm/B,OAAOjS,IAAI9hB,UACjC,KAAKA,EAAY,KAAM,IAAI7H,OAAM,sEACjC6H,GAAW0E,YAAYod,EAAIF,MAE7B,IAAKE,EAAID,IAAIzjB,WAAY,CACvB,GAAI0yB,GAAOl8B,KAAKm/B,OAAOjS,IAAIgP,IAC3B,KAAK9wB,EAAY,KAAM,IAAI7H,OAAM,gEACjC24B,GAAKpsB,YAAYod,EAAID,KAKvB,GAHAjtB,KAAKwlC,WAAY,EAGbxlC,KAAK+Q,KAAKgc,SAAW/sB,KAAK+sB,QAAS,CAErC,GADA/sB,KAAK+sB,QAAU/sB,KAAK+Q,KAAKgc,QACrB/sB,KAAK+sB,kBAAmBkY,SAC1B/X,EAAIH,QAAQjM,UAAY,GACxBoM,EAAIH,QAAQjd,YAAY9P,KAAK+sB,aAE1B,CAAA,GAAyB7mB,QAArBlG,KAAK+Q,KAAKgc,QAIjB,KAAM,IAAIxpB,OAAM,sCAAwCvD,KAAK+Q,KAAK1Q,GAHlE6sB,GAAIH,QAAQjM,UAAY9gB,KAAK+sB,QAM/B/sB,KAAKulC,OAAQ,EAIXvlC,KAAK+Q,KAAKquB,OAASp/B,KAAKo/B,QAC1BlS,EAAI8a,IAAI5I,MAAQp/B,KAAK+Q,KAAKquB,MAC1Bp/B,KAAKo/B,MAAQp/B,KAAK+Q,KAAKquB,MAIzB,IAAI53B,IAAaxH,KAAK+Q,KAAKvJ,UAAW,IAAMxH,KAAK+Q,KAAKvJ,UAAY,KAC7DxH,KAAKsqC,SAAW,YAAc,GAC/BtqC,MAAKwH,WAAaA,IACpBxH,KAAKwH,UAAYA,EACjB0lB,EAAI8a,IAAIxgC,UAAY,WAAaA,EACjC0lB,EAAIF,KAAKxlB,UAAY,YAAcA,EACnC0lB,EAAID,IAAIzlB,UAAa,WAAaA,EAElCxH,KAAKulC,OAAQ,GAIXvlC,KAAKulC,QACPvlC,KAAK0F,MAAMunB,IAAIpc,OAASqc,EAAID,IAAIQ,aAChCztB,KAAK0F,MAAMunB,IAAIrc,MAAQsc,EAAID,IAAIM,YAC/BvtB,KAAK0F,MAAMsnB,KAAKpc,MAAQsc,EAAIF,KAAKO,YACjCvtB,KAAK4Q,MAAQsc,EAAI8a,IAAIza,YACrBvtB,KAAK6Q,OAASqc,EAAI8a,IAAIva,aAEtBztB,KAAKulC,OAAQ,GAGfvlC,KAAK8xC,qBAAqB5kB,EAAI8a,MAOhC/lC,EAAQsP,UAAU8vB,KAAO,WAClBrhC,KAAKwlC,WACRxlC,KAAKse,UAOTrc,EAAQsP,UAAU6vB,KAAO,WACvB,GAAIphC,KAAKwlC,UAAW,CAClB,GAAItY,GAAMltB,KAAKktB,GAEXA,GAAI8a,IAAIx+B,YAAc0jB,EAAI8a,IAAIx+B,WAAWgG,YAAY0d,EAAI8a,KACzD9a,EAAIF,KAAKxjB,YAAa0jB,EAAIF,KAAKxjB,WAAWgG,YAAY0d,EAAIF,MAC1DE,EAAID,IAAIzjB,YAAc0jB,EAAID,IAAIzjB,WAAWgG,YAAY0d,EAAID,KAE7DjtB,KAAKqH,IAAM,KACXrH,KAAKiH,KAAO,KAEZjH,KAAKwlC,WAAY,IAQrBvjC,EAAQsP,UAAUi1B,YAAc,WAC9B,GAAI93B,GAAQ1O,KAAK82B,WAAW3E,SAASnyB,KAAK+Q,KAAKrC,OAC3C+3B,EAAQzmC,KAAK0N,QAAQ+4B,MAErBuB,EAAMhoC,KAAKktB,IAAI8a,IACfhb,EAAOhtB,KAAKktB,IAAIF,KAChBC,EAAMjtB,KAAKktB,IAAID,GAIjBjtB,MAAKiH,KADM,SAATw/B,EACU/3B,EAAQ1O,KAAK4Q,MAET,QAAT61B,EACK/3B,EAIAA,EAAQ1O,KAAK4Q,MAAQ,EAInCo3B,EAAIx3B,MAAMvJ,KAAOjH,KAAKiH,KAAO,KAG7B+lB,EAAKxc,MAAMvJ,KAAQyH,EAAQ1O,KAAK0F,MAAMsnB,KAAKpc,MAAQ,EAAK,KAGxDqc,EAAIzc,MAAMvJ,KAAQyH,EAAQ1O,KAAK0F,MAAMunB,IAAIrc,MAAQ,EAAK,MAOxD3O,EAAQsP,UAAUq0B,YAAc,WAC9B,GAAIlU,GAAc1xB,KAAK0N,QAAQgkB,YAC3BsW,EAAMhoC,KAAKktB,IAAI8a,IACfhb,EAAOhtB,KAAKktB,IAAIF,KAChBC,EAAMjtB,KAAKktB,IAAID,GAEnB,IAAmB,OAAfyE,EACFsW,EAAIx3B,MAAMnJ,KAAWrH,KAAKqH,KAAO,GAAK,KAEtC2lB,EAAKxc,MAAMnJ,IAAS,IACpB2lB,EAAKxc,MAAMK,OAAU7Q,KAAKm/B,OAAO93B,IAAMrH,KAAKqH,IAAM,EAAK,KACvD2lB,EAAKxc,MAAM2P,OAAS,OAEjB,CACH,GAAI8xB,GAAgBjyC,KAAKm/B,OAAOrM,QAAQptB,MAAMmL,OAC1C6c,EAAaukB,EAAgBjyC,KAAKm/B,OAAO93B,IAAMrH,KAAKm/B,OAAOtuB,OAAS7Q,KAAKqH,GAE7E2gC,GAAIx3B,MAAMnJ,KAAWrH,KAAKm/B,OAAOtuB,OAAS7Q,KAAKqH,IAAMrH,KAAK6Q,QAAU,GAAK,KACzEmc,EAAKxc,MAAMnJ,IAAU4qC,EAAgBvkB,EAAc,KACnDV,EAAKxc,MAAM2P,OAAS,IAGtB8M,EAAIzc,MAAMnJ,KAAQrH,KAAK0F,MAAMunB,IAAIpc,OAAS,EAAK,MAGjDhR,EAAOD,QAAUqC,GAKb,SAASpC,EAAQD,EAASM,GAc9B,QAASgC,GAAW6O,EAAM+lB,EAAYppB,GAcpC,GAbA1N,KAAK0F,OACHunB,KACE5lB,IAAK,EACLuJ,MAAO,EACPC,OAAQ,GAEVkc,SACElc,OAAQ,EACRqhC,WAAY,IAKZnhC,GACgB7K,QAAd6K,EAAKrC,MACP,KAAM,IAAInL,OAAM,oCAAsCwN,EAI1D/O,GAAKzB,KAAKP,KAAM+Q,EAAM+lB,EAAYppB,GAhCpC,GAAI1L,GAAO9B,EAAoB,GAmC/BgC,GAAUqP,UAAY,GAAIvP,GAAM,KAAM,KAAM,MAO5CE,EAAUqP,UAAU9C,UAAY,SAASX,GAGvC,GAAIgiB,IAAYhiB,EAAMqX,IAAMrX,EAAMY,OAAS,CAC3C,OAAQ1O,MAAK+Q,KAAKrC,MAAQZ,EAAMY,MAAQohB,GAAc9vB,KAAK+Q,KAAKrC,MAAQZ,EAAMqX,IAAM2K,GAMtF5tB,EAAUqP,UAAU+M,OAAS,WAC3B,GAAI4O,GAAMltB,KAAKktB,GAwBf,IAvBKA,IAEHltB,KAAKktB,OACLA,EAAMltB,KAAKktB,IAGXA,EAAI5c,MAAQV,SAASK,cAAc,OAInCid,EAAIH,QAAUnd,SAASK,cAAc,OACrCid,EAAIH,QAAQvlB,UAAY,UACxB0lB,EAAI5c,MAAMR,YAAYod,EAAIH,SAG1BG,EAAID,IAAMrd,SAASK,cAAc,OACjCid,EAAI5c,MAAMR,YAAYod,EAAID,KAG1BC,EAAI5c,MAAM,iBAAmBtQ,OAI1BA,KAAKm/B,OACR,KAAM,IAAI57B,OAAM,yCAElB,KAAK2pB,EAAI5c,MAAM9G,WAAY,CACzB,GAAIu7B,GAAa/kC,KAAKm/B,OAAOjS,IAAI6X,UACjC,KAAKA,EACH,KAAM,IAAIxhC,OAAM,sEAElBwhC,GAAWj1B,YAAYod,EAAI5c,OAK7B,GAHAtQ,KAAKwlC,WAAY,EAGbxlC,KAAK+Q,KAAKgc,SAAW/sB,KAAK+sB,QAAS,CAErC,GADA/sB,KAAK+sB,QAAU/sB,KAAK+Q,KAAKgc,QACrB/sB,KAAK+sB,kBAAmBkY,SAC1B/X,EAAIH,QAAQjM,UAAY,GACxBoM,EAAIH,QAAQjd,YAAY9P,KAAK+sB,aAE1B,CAAA,GAAyB7mB,QAArBlG,KAAK+Q,KAAKgc,QAIjB,KAAM,IAAIxpB,OAAM,sCAAwCvD,KAAK+Q,KAAK1Q,GAHlE6sB,GAAIH,QAAQjM,UAAY9gB,KAAK+sB,QAM/B/sB,KAAKulC,OAAQ,EAIXvlC,KAAK+Q,KAAKquB,OAASp/B,KAAKo/B,QAC1BlS,EAAI5c,MAAM8uB,MAAQp/B,KAAK+Q,KAAKquB,MAC5Bp/B,KAAKo/B,MAAQp/B,KAAK+Q,KAAKquB,MAIzB,IAAI53B,IAAaxH,KAAK+Q,KAAKvJ,UAAW,IAAMxH,KAAK+Q,KAAKvJ,UAAY,KAC7DxH,KAAKsqC,SAAW,YAAc,GAC/BtqC,MAAKwH,WAAaA,IACpBxH,KAAKwH,UAAYA,EACjB0lB,EAAI5c,MAAM9I,UAAa,aAAeA,EACtC0lB,EAAID,IAAIzlB,UAAa,WAAaA,EAElCxH,KAAKulC,OAAQ,GAIXvlC,KAAKulC,QACPvlC,KAAK4Q,MAAQsc,EAAI5c,MAAMid,YACvBvtB,KAAK6Q,OAASqc,EAAI5c,MAAMmd,aACxBztB,KAAK0F,MAAMunB,IAAIrc,MAAQsc,EAAID,IAAIM,YAC/BvtB,KAAK0F,MAAMunB,IAAIpc,OAASqc,EAAID,IAAIQ,aAChCztB,KAAK0F,MAAMqnB,QAAQlc,OAASqc,EAAIH,QAAQU,aAGxCP,EAAIH,QAAQvc,MAAM0hC,WAAa,EAAIlyC,KAAK0F,MAAMunB,IAAIrc,MAAQ,KAG1Dsc,EAAID,IAAIzc,MAAMnJ,KAAQrH,KAAK6Q,OAAS7Q,KAAK0F,MAAMunB,IAAIpc,QAAU,EAAK,KAClEqc,EAAID,IAAIzc,MAAMvJ,KAAQjH,KAAK0F,MAAMunB,IAAIrc,MAAQ,EAAK,KAElD5Q,KAAKulC,OAAQ,GAGfvlC,KAAK8xC,qBAAqB5kB,EAAI5c,QAOhCpO,EAAUqP,UAAU8vB,KAAO,WACpBrhC,KAAKwlC,WACRxlC,KAAKse,UAOTpc,EAAUqP,UAAU6vB,KAAO,WACrBphC,KAAKwlC,YACHxlC,KAAKktB,IAAI5c,MAAM9G,YACjBxJ,KAAKktB,IAAI5c,MAAM9G,WAAWgG,YAAYxP,KAAKktB,IAAI5c,OAGjDtQ,KAAKqH,IAAM,KACXrH,KAAKiH,KAAO,KAEZjH,KAAKwlC,WAAY,IAQrBtjC,EAAUqP,UAAUi1B,YAAc,WAChC,GAAI93B,GAAQ1O,KAAK82B,WAAW3E,SAASnyB,KAAK+Q,KAAKrC,MAE/C1O,MAAKiH,KAAOyH,EAAQ1O,KAAK0F,MAAMunB,IAAIrc,MAGnC5Q,KAAKktB,IAAI5c,MAAME,MAAMvJ,KAAOjH,KAAKiH,KAAO,MAO1C/E,EAAUqP,UAAUq0B,YAAc,WAChC,GAAIlU,GAAc1xB,KAAK0N,QAAQgkB,YAC3BphB,EAAQtQ,KAAKktB,IAAI5c,KAGnBA,GAAME,MAAMnJ,IADK,OAAfqqB,EACgB1xB,KAAKqH,IAAM,KAGVrH,KAAKm/B,OAAOtuB,OAAS7Q,KAAKqH,IAAMrH,KAAK6Q,OAAU,MAItEhR,EAAOD,QAAUsC,GAKb,SAASrC,EAAQD,EAASM,GAe9B,QAASiC,GAAW4O,EAAM+lB,EAAYppB,GASpC,GARA1N,KAAK0F,OACHqnB,SACEnc,MAAO,IAGX5Q,KAAK0gB,UAAW,EAGZ3P,EAAM,CACR,GAAkB7K,QAAd6K,EAAKrC,MACP,KAAM,IAAInL,OAAM,oCAAsCwN,EAAK1Q,GAE7D,IAAgB6F,QAAZ6K,EAAKoU,IACP,KAAM,IAAI5hB,OAAM,kCAAoCwN,EAAK1Q,IAI7D2B,EAAKzB,KAAKP,KAAM+Q,EAAM+lB,EAAYppB,GA/BpC,GAAIwlB,GAAShzB,EAAoB,IAC7B8B,EAAO9B,EAAoB,GAiC/BiC,GAAUoP,UAAY,GAAIvP,GAAM,KAAM,KAAM,MAE5CG,EAAUoP,UAAU4gC,cAAgB,aAOpChwC,EAAUoP,UAAU9C,UAAY,SAASX,GAEvC,MAAQ9N,MAAK+Q,KAAKrC,MAAQZ,EAAMqX,KAASnlB,KAAK+Q,KAAKoU,IAAMrX,EAAMY,OAMjEvM,EAAUoP,UAAU+M,OAAS,WAC3B,GAAI4O,GAAMltB,KAAKktB,GAoBf,IAnBKA,IAEHltB,KAAKktB,OACLA,EAAMltB,KAAKktB,IAGXA,EAAI8a,IAAMp4B,SAASK,cAAc,OAIjCid,EAAIH,QAAUnd,SAASK,cAAc,OACrCid,EAAIH,QAAQvlB,UAAY,UACxB0lB,EAAI8a,IAAIl4B,YAAYod,EAAIH,SAGxBG,EAAI8a,IAAI,iBAAmBhoC,OAIxBA,KAAKm/B,OACR,KAAM,IAAI57B,OAAM,yCAElB,KAAK2pB,EAAI8a,IAAIx+B,WAAY,CACvB,GAAIu7B,GAAa/kC,KAAKm/B,OAAOjS,IAAI6X,UACjC,KAAKA,EACH,KAAM,IAAIxhC,OAAM,sEAElBwhC,GAAWj1B,YAAYod,EAAI8a,KAK7B,GAHAhoC,KAAKwlC,WAAY,EAGbxlC,KAAK+Q,KAAKgc,SAAW/sB,KAAK+sB,QAAS,CAErC,GADA/sB,KAAK+sB,QAAU/sB,KAAK+Q,KAAKgc,QACrB/sB,KAAK+sB,kBAAmBkY,SAC1B/X,EAAIH,QAAQjM,UAAY,GACxBoM,EAAIH,QAAQjd,YAAY9P,KAAK+sB,aAE1B,CAAA,GAAyB7mB,QAArBlG,KAAK+Q,KAAKgc,QAIjB,KAAM,IAAIxpB,OAAM,sCAAwCvD,KAAK+Q,KAAK1Q,GAHlE6sB,GAAIH,QAAQjM,UAAY9gB,KAAK+sB,QAM/B/sB,KAAKulC,OAAQ,EAIXvlC,KAAK+Q,KAAKquB,OAASp/B,KAAKo/B,QAC1BlS,EAAI8a,IAAI5I,MAAQp/B,KAAK+Q,KAAKquB,MAC1Bp/B,KAAKo/B,MAAQp/B,KAAK+Q,KAAKquB,MAIzB,IAAI53B,IAAaxH,KAAK+Q,KAAKvJ,UAAa,IAAMxH,KAAK+Q,KAAKvJ,UAAa,KAChExH,KAAKsqC,SAAW,YAAc,GAC/BtqC,MAAKwH,WAAaA,IACpBxH,KAAKwH,UAAYA,EACjB0lB,EAAI8a,IAAIxgC,UAAYxH,KAAKmyC,cAAgB3qC,EAEzCxH,KAAKulC,OAAQ,GAIXvlC,KAAKulC,QAEPvlC,KAAK0gB,SAA6D,WAAlDxZ,OAAOukC,iBAAiBve,EAAIH,SAASrM,SAErD1gB,KAAK0F,MAAMqnB,QAAQnc,MAAQ5Q,KAAKktB,IAAIH,QAAQQ,YAC5CvtB,KAAK6Q,OAAS7Q,KAAKktB,IAAI8a,IAAIva,aAE3BztB,KAAKulC,OAAQ,GAGfvlC,KAAK8xC,qBAAqB5kB,EAAI8a,KAC9BhoC,KAAKoyC,mBACLpyC,KAAKqyC,qBAOPlwC,EAAUoP,UAAU8vB,KAAO,WACpBrhC,KAAKwlC,WACRxlC,KAAKse,UAQTnc,EAAUoP,UAAU6vB,KAAO,WACzB,GAAIphC,KAAKwlC,UAAW,CAClB,GAAIwC,GAAMhoC,KAAKktB,IAAI8a,GAEfA,GAAIx+B,YACNw+B,EAAIx+B,WAAWgG,YAAYw4B,GAG7BhoC,KAAKqH,IAAM,KACXrH,KAAKiH,KAAO,KAEZjH,KAAKwlC,WAAY,IASrBrjC,EAAUoP,UAAUi1B,YAAc,WAChC,GAKI8L,GALA5sC,EAAQ1F,KAAK0F,MACb6sC,EAAcvyC,KAAKm/B,OAAOvuB,MAC1BlC,EAAQ1O,KAAK82B,WAAW3E,SAASnyB,KAAK+Q,KAAKrC,OAC3CyW,EAAMnlB,KAAK82B,WAAW3E,SAASnyB,KAAK+Q,KAAKoU,KACzCtE,EAAU7gB,KAAK0N,QAAQmT,SAId0xB,EAAT7jC,IACFA,GAAS6jC,GAEPptB,EAAM,EAAIotB,IACZptB,EAAM,EAAIotB,EAEZ,IAAIC,GAAW5tC,KAAK6H,IAAI0Y,EAAMzW,EAAO,EAEjC1O,MAAK0gB,UAEP4xB,EAAc1tC,KAAK6H,KAAKiC,EAAO,GAE/B1O,KAAKiH,KAAOyH,EACZ1O,KAAK4Q,MAAQ4hC,EAAWxyC,KAAK0F,MAAMqnB,QAAQnc,QAQzC0hC,EADU,EAAR5jC,EACY9J,KAAKmG,KAAK2D,EACnByW,EAAMzW,EAAQhJ,EAAMqnB,QAAQnc,MAAQ,EAAIiQ,GAI/B,EAGhB7gB,KAAKiH,KAAOyH,EACZ1O,KAAK4Q,MAAQ4hC,GAGfxyC,KAAKktB,IAAI8a,IAAIx3B,MAAMvJ,KAAOjH,KAAKiH,KAAO,KACtCjH,KAAKktB,IAAI8a,IAAIx3B,MAAMI,MAAQ4hC,EAAW,KACtCxyC,KAAKktB,IAAIH,QAAQvc,MAAMvJ,KAAOqrC,EAAc,MAO9CnwC,EAAUoP,UAAUq0B,YAAc,WAChC,GAAIlU,GAAc1xB,KAAK0N,QAAQgkB,YAC3BsW,EAAMhoC,KAAKktB,IAAI8a,GAGjBA,GAAIx3B,MAAMnJ,IADO,OAAfqqB,EACc1xB,KAAKqH,IAAM,KAGVrH,KAAKm/B,OAAOtuB,OAAS7Q,KAAKqH,IAAMrH,KAAK6Q,OAAU,MAQpE1O,EAAUoP,UAAU6gC,iBAAmB,WACrC,GAAIpyC,KAAKsqC,UAAYtqC,KAAK0N,QAAQk5B,SAASC,aAAe7mC,KAAKktB,IAAIulB,SAAU,CAE3E,GAAIA,GAAW7iC,SAASK,cAAc,MACtCwiC,GAASjrC,UAAY,YACrBirC,EAASlI,aAAevqC,KAGxBkzB,EAAOuf,GACLxpC,gBAAgB,IACfuI,GAAG,OAAQ,cAIdxR,KAAKktB,IAAI8a,IAAIl4B,YAAY2iC,GACzBzyC,KAAKktB,IAAIulB,SAAWA,OAEZzyC,KAAKsqC,UAAYtqC,KAAKktB,IAAIulB,WAE9BzyC,KAAKktB,IAAIulB,SAASjpC,YACpBxJ,KAAKktB,IAAIulB,SAASjpC,WAAWgG,YAAYxP,KAAKktB,IAAIulB,UAEpDzyC,KAAKktB,IAAIulB,SAAW,OAQxBtwC,EAAUoP,UAAU8gC,kBAAoB,WACtC,GAAIryC,KAAKsqC,UAAYtqC,KAAK0N,QAAQk5B,SAASC,aAAe7mC,KAAKktB,IAAIwlB,UAAW,CAE5E,GAAIA,GAAY9iC,SAASK,cAAc,MACvCyiC,GAAUlrC,UAAY,aACtBkrC,EAAUlI,cAAgBxqC,KAG1BkzB,EAAOwf,GACLzpC,gBAAgB,IACfuI,GAAG,OAAQ,cAIdxR,KAAKktB,IAAI8a,IAAIl4B,YAAY4iC,GACzB1yC,KAAKktB,IAAIwlB,UAAYA,OAEb1yC,KAAKsqC,UAAYtqC,KAAKktB,IAAIwlB,YAE9B1yC,KAAKktB,IAAIwlB,UAAUlpC,YACrBxJ,KAAKktB,IAAIwlB,UAAUlpC,WAAWgG,YAAYxP,KAAKktB,IAAIwlB,WAErD1yC,KAAKktB,IAAIwlB,UAAY,OAIzB7yC,EAAOD,QAAUuC,GAKb,SAAStC,EAAQD,EAASM,GA+B9B,QAAS4C,GAAS8T,EAAW7F,EAAMrD,GACjC,KAAM1N,eAAgB8C,IACpB,KAAM,IAAI+T,aAAY,mDAGxB7W,MAAK2yC,0BAGL3yC,KAAK8W,iBAAmBF,EACxB5W,KAAK4Q,MAAQ,OACb5Q,KAAK6Q,OAAS,OAGd7Q,KAAK4yC,kBAAoB,GACzB5yC,KAAK6yC,eAAiB,IAAO7yC,KAAK4yC,kBAClC5yC,KAAK8yC,WAAa,GAAM9yC,KAAK6yC,eAC7B7yC,KAAK+yC,yBAA2B,EAChC/yC,KAAKgzC,wBAA0B,GAE/BhzC,KAAKizC,WAAY,EACjBjzC,KAAK2mC,YAAa,EAClB3mC,KAAKkzC,cAAe,EAGpBlzC,KAAKmzC,kBAAoB7hC,IAAI,KAAK8hC,KAAK,KAAKC,SAAS,KAAKC,QAAQ,KAAKC,IAAI,MAI3EvzC,KAAKwzC,WACHC,OACEC,UAAW,GACXC,UAAW,GACXnrB,OAAQ,GACRorB,MAAO,UACPC,MAAO3tC,OACP6d,SAAU,GACVC,SAAU,GACV8vB,OAAO,EACPC,UAAW,QACXC,SAAU,GACVC,SAAU,UACVC,MAAO,GACP3pC,OACIc,OAAQ,UACRD,WAAY,UACdE,WACED,OAAQ,UACRD,WAAY,WAEdG,OACEF,OAAQ,UACRD,WAAY,YAGhBwR,YAAa,UACbJ,gBAAiB,UACjB23B,eAAgB,UAChB9jC,MAAOnK,OACP2W,YAAa,GAEfu3B,OACErwB,SAAU,EACVC,SAAU,GACVpT,MAAO,EACPyjC,yBAA0B,EAC1BC,WAAY,IACZ9jC,MAAO,OACPjG,OACEA,MAAM,UACNe,UAAU,UACVC,MAAO,WAETwoC,UAAW,UACXC,SAAU,GACVC,SAAU,QACVM,SAAU,QACVC,iBAAkB,EAClBC,MACEpvC,OAAQ,GACRqvC,IAAK,EACLC,UAAWzuC,QAEb0uC,aAAc,QAEhBC,kBAAiB,EACjBC,SACEC,WACEpnC,SAAS,EACTqnC,MAAO,EAAI,GACXC,sBAAuB,KACvBC,eAAgB,GAChBC,aAAc,GACdC,eAAgB,IAChBC,QAAS,KAEXC,WACEJ,eAAgB,EAChBC,aAAc,IACdC,eAAgB,IAChBG,aAAc,IACdF,QAAS,KAEXG,uBACE7nC,SAAS,EACTunC,eAAgB,EAChBC,aAAc,IACdC,eAAgB,IAChBG,aAAc,IACdF,QAAS,KAEXA,QAAS,KACTH,eAAgB,KAChBC,aAAc,KACdC,eAAgB,MAElBK,YACE9nC,SAAS,EACT+nC,gBAAiB,IACjBC,iBAAiB,IACjBC,cAAc,IACdC,eAAgB,GAChBC,qBAAsB,GACtBC,gBAAiB,IACjBC,oBAAqB,GACrBC,mBAAoB,EACpBC,YAAa,IACbC,mBAAoB,GACpBC,sBAAuB,GACvBC,WAAY,GACZC,aAAc1lC,MAAQ,EACRC,OAAQ,EACR2X,OAAQ,GACtB+tB,sBAAuB,IACvBC,kBAAmB,GACnBC,uBAAwB,GAE1BC,YACE/oC,SAAS,GAEXgpC,UACEhpC,SAAS,EACTipC,OAAQzmC,EAAG,GAAIC,EAAG,GAAImrB,KAAM,MAE9Bsb,kBACElpC,SAAS,EACTmpC,kBAAkB,GAEpBC,oBACEppC,SAAQ,EACRqpC,gBAAiB,IACjBC,YAAa,IACbjd,UAAW,MAEbkd,wBAAwB,EACxBC,cACExpC,SAAS,EACTypC,SAAS,EACT9wC,KAAM,aACN+wC,UAAW,IAEbC,qBAAqB,EACrBC,YAAc,GACdC,YAAc,GACdC,wBAAyB,IACzBlX,QACEjvB,IAAI,WACJ8hC,KAAK,OACLsE,KAAK,WACLnE,IAAI,kBACJoE,SAAS,YACTtE,SAAS,YACTuE,KAAK,OACLC,eAAe,+CACfC,gBAAgB,qEAChBC,oBAAoB,wEACpBC,SAAS,uEACTC,UAAU,2EACVC,UAAU,yEACVC,eAAe,kDACfC,YAAY,2EACZC,mBAAmB,+BAErBp1B,SACE6H,MAAO,IACPipB,UAAW,QACXC,SAAU,GACVC,SAAU,UACV1pC,OACEc,OAAQ,OACRD,WAAY,YAGhBktC,aAAa,EACbC,WAAW,EACXre,UAAU,EACV3uB,OAAO,EACPitC,iBAAiB,EACjBC,iBAAiB,GAEnBz4C,KAAK04C,UAAYjF,SAASW,UAC1Bp0C,KAAK24C,oBAAqB,CAG1B,IAAI51C,GAAU/C,IACdA,MAAKu1B,OAAS,GAAItyB,GAClBjD,KAAK44C,OAAS,GAAI11C,GAClBlD,KAAK44C,OAAOC,kBAAkB,WAC5B91C,EAAQ+1C,YAIV94C,KAAK+4C,WAAa,EAClB/4C,KAAKg5C,WAAa,EAClBh5C,KAAKi5C,cAAgB,EAIrBj5C,KAAKk5C,qBAELl5C,KAAK6xB,UAEL7xB,KAAKm5C,oBAELn5C,KAAKo5C,qBAELp5C,KAAKq5C,uBAELr5C,KAAKs5C,uBAGLt5C,KAAKu5C,gBAAgBv5C,KAAKmc,MAAME,YAAc,EAAGrc,KAAKmc,MAAMuF,aAAe,GAC3E1hB,KAAK6Z,UAAU,GACf7Z,KAAK2Z,WAAWjM,GAGhB1N,KAAKw5C,kBAAmB,EACxBx5C,KAAKy5C,mBAGLz5C,KAAK05C,oBACL15C,KAAK25C,0BACL35C,KAAK45C,eACL55C,KAAKyzC,SACLzzC,KAAKo0C,SAGLp0C,KAAK65C,eAAqB1pC,EAAK,EAAEC,EAAK,GACtCpQ,KAAK85C,mBAAqB3pC,EAAK,EAAEC,EAAK,GACtCpQ,KAAK+5C,iBAAmB5pC,EAAK,EAAEC,EAAK,GACpCpQ,KAAKg6C,cACLh6C,KAAK8Z,MAAQ,EACb9Z,KAAKi6C,cAAgBj6C,KAAK8Z,MAG1B9Z,KAAKk6C,UAAY,KACjBl6C,KAAKm6C,UAAY,KAGjBn6C,KAAKo6C,gBACH9oC,IAAO,SAAUpI,EAAO6I,GACtBhP,EAAQs3C,UAAUtoC,EAAOhQ,OACzBgB,EAAQ2L,SAEVqE,OAAU,SAAU7J,EAAO6I,GACzBhP,EAAQu3C,aAAavoC,EAAOhQ,OAC5BgB,EAAQ2L,SAEV8F,OAAU,SAAUtL,EAAO6I,GACzBhP,EAAQw3C,aAAaxoC,EAAOhQ,OAC5BgB,EAAQ2L,UAGZ1O,KAAKw6C,gBACHlpC,IAAO,SAAUpI,EAAO6I,GACtBhP,EAAQ03C,UAAU1oC,EAAOhQ,OACzBgB,EAAQ2L,SAEVqE,OAAU,SAAU7J,EAAO6I,GACzBhP,EAAQ23C,aAAa3oC,EAAOhQ,OAC5BgB,EAAQ2L,SAEV8F,OAAU,SAAUtL,EAAO6I,GACzBhP,EAAQ43C,aAAa5oC,EAAOhQ,OAC5BgB,EAAQ2L,UAKZ1O,KAAK46C,QAAS,EACd56C,KAAK66C,MAAQ30C,OAGblG,KAAKoW,QAAQrF,EAAK/Q,KAAKwzC,UAAUiC,WAAW9nC,SAAW3N,KAAKwzC,UAAUuD,mBAAmBppC,SAGzF3N,KAAKkzC,cAAe,EAC6B,GAA7ClzC,KAAKwzC,UAAUuD,mBAAmBppC,QACpC3N,KAAK86C,2BAIiB,GAAlB96C,KAAKizC,WACPjzC,KAAK+6C,YAAW,EAAK/6C,KAAKwzC,UAAUiC,WAAW9nC,SAK/C3N,KAAKwzC,UAAUiC,WAAW9nC,SAC5B3N,KAAKg7C,sBAjVT,GAAIphC,GAAU1Z,EAAoB,IAC9BgzB,EAAShzB,EAAoB,IAC7B+6C,EAAY/6C,EAAoB,IAChCS,EAAOT,EAAoB,GAC3B06B,EAAa16B,EAAoB,IACjCW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/BmD,EAAYnD,EAAoB,IAChC+C,EAAS/C,EAAoB,IAC7BgD,EAAShD,EAAoB,IAC7BiD,EAAOjD,EAAoB,IAC3B8C,EAAO9C,EAAoB,IAC3BkD,EAAQlD,EAAoB,IAC5Bg7C,EAAch7C,EAAoB,GAGtCA,GAAoB,IAsUpB0Z,EAAQ9W,EAAQyO,WAShBzO,EAAQyO,UAAU4pC,eAAiB,WAIjC,IAAK,GAHDC,GAAUxrC,SAASyrC,qBAAsB,UAGpCn2C,EAAI,EAAGA,EAAIk2C,EAAQ/1C,OAAQH,IAAK,CACvC,GAAIo2C,GAAMF,EAAQl2C,GAAGo2C,IACjBr3C,EAAQq3C,GAAO,qBAAqBn3C,KAAKm3C,EAC7C,IAAIr3C,EAEF,MAAOq3C,GAAI1vC,UAAU,EAAG0vC,EAAIj2C,OAASpB,EAAM,GAAGoB,QAIlD,MAAO,OAQTvC,EAAQyO,UAAUgqC,UAAY,WAC5B,GAAsDC,GAAlDC,EAAO,IAAKC,EAAO,KAAMC,EAAO,IAAKC,EAAO,IAChD,KAAK,GAAIC,KAAU77C,MAAKyzC,MAClBzzC,KAAKyzC,MAAMjuC,eAAeq2C,KAC5BL,EAAOx7C,KAAKyzC,MAAMoI,GACdF,EAAQH,EAAM,IAAIG,EAAOH,EAAKrrC,GAC9ByrC,EAAQJ,EAAM,IAAII,EAAOJ,EAAKrrC,GAC9BsrC,EAAQD,EAAM,IAAIC,EAAOD,EAAKprC,GAC9BsrC,EAAQF,EAAM,IAAIE,EAAOF,EAAKprC,GAMtC,OAHY,MAARurC,GAAuB,MAARC,GAAwB,KAARH,GAAuB,MAARC,IAChDD,EAAO,EAAGC,EAAO,EAAGC,EAAO,EAAGC,EAAO,IAE/BD,KAAMA,EAAMC,KAAMA,EAAMH,KAAMA,EAAMC,KAAMA,IASpD54C,EAAQyO,UAAUuqC,YAAc,SAAShuC,GACvC,OAAQqC,EAAI,IAAOrC,EAAM8tC,KAAO9tC,EAAM6tC,MAC9BvrC,EAAI,IAAOtC,EAAM4tC,KAAO5tC,EAAM2tC,QASxC34C,EAAQyO,UAAUwqC,eAAiB,SAASjuC,GAC1C,GAAImb,GAASjpB,KAAK87C,YAAYhuC,EAE9Bmb,GAAO9Y,GAAKnQ,KAAK8Z,MACjBmP,EAAO7Y,GAAKpQ,KAAK8Z,MACjBmP,EAAO9Y,GAAK,GAAMnQ,KAAKmc,MAAMC,OAAOC,YACpC4M,EAAO7Y,GAAK,GAAMpQ,KAAKmc,MAAMC,OAAOsF,aAEpC1hB,KAAKu5C,iBAAiBtwB,EAAO9Y,GAAG8Y,EAAO7Y,IAUzCtN,EAAQyO,UAAUwpC,WAAa,SAASiB,EAAaC,GAC/B/1C,SAAhB81C,IACFA,GAAc,GAEK91C,SAAjB+1C,IACFA,GAAe,EAGjB,IACIC,GADApuC,EAAQ9N,KAAKu7C,WAGjB,IAAmB,GAAfS,EAAqB,CACvB,GAAIG,GAAgBn8C,KAAK45C,YAAYv0C,MAIjC62C,GAH+B,GAA/Bl8C,KAAKwzC,UAAU2D,aACwB,GAArCn3C,KAAKwzC,UAAUiC,WAAW9nC,SAC5BwuC,GAAiBn8C,KAAKwzC,UAAUiC,WAAWC,gBAC/B,UAAYyG,EAAgB,WAAa,SAGzC,QAAUA,EAAgB,QAAU,SAIT,GAArCn8C,KAAKwzC,UAAUiC,WAAW9nC,SAC1BwuC,GAAiBn8C,KAAKwzC,UAAUiC,WAAWC,gBACjC,YAAcyG,EAAgB,YAAc,cAG5C,YAAcA,EAAgB,aAAe,SAK7D,IAAIC,GAASx3C,KAAKmG,IAAI/K,KAAKmc,MAAMC,OAAOC,YAAc,IAAKrc,KAAKmc,MAAMC,OAAOsF,aAAe,IAC5Fw6B,IAAaE,MAEV,CACH,GAAIrN,GAA4D,KAA/CnqC,KAAK+iB,IAAI7Z,EAAM6tC,MAAQ/2C,KAAK+iB,IAAI7Z,EAAM8tC,OACnDS,EAA4D,KAA/Cz3C,KAAK+iB,IAAI7Z,EAAM2tC,MAAQ72C,KAAK+iB,IAAI7Z,EAAM4tC,OAEnDY,EAAat8C,KAAKmc,MAAMC,OAAOC,YAAc0yB,EAC7CwN,EAAav8C,KAAKmc,MAAMC,OAAOsF,aAAe26B,CAElDH,GAA2BK,GAAdD,EAA4BA,EAAaC,EAGpDL,EAAY,IACdA,EAAY,GAIdl8C,KAAK6Z,UAAUqiC,GACfl8C,KAAK+7C,eAAejuC,GACA,GAAhBmuC,IACFj8C,KAAK46C,QAAS,EACd56C,KAAK0O,UAST5L,EAAQyO,UAAUirC,qBAAuB,WACvCx8C,KAAKy8C,qBACL,KAAK,GAAIC,KAAO18C,MAAKyzC,MACfzzC,KAAKyzC,MAAMjuC,eAAek3C,IAC5B18C,KAAK45C,YAAYhyC,KAAK80C,IAgB5B55C,EAAQyO,UAAU6E,QAAU,SAASrF,EAAMkrC,GAKzC,GAJqB/1C,SAAjB+1C,IACFA,GAAe,GAGblrC,GAAQA,EAAKkc,MAAQlc,EAAK0iC,OAAS1iC,EAAKqjC,OAC1C,KAAM,IAAIv9B,aAAY,iGAQxB,IAHA7W,KAAK2Z,WAAW5I,GAAQA,EAAKrD,SAGzBqD,GAAQA,EAAKkc,KAEf,GAAGlc,GAAQA,EAAKkc,IAAK,CACnB,GAAI0vB,GAAUt5C,EAAUu5C,WAAW7rC,EAAKkc,IAExC,YADAjtB,MAAKoW,QAAQumC,QAKf38C,MAAK68C,UAAU9rC,GAAQA,EAAK0iC,OAC5BzzC,KAAK88C,UAAU/rC,GAAQA,EAAKqjC,MAI9B,IADAp0C,KAAK+8C,oBACAd,EAEH,GAAIj8C,KAAKizC,UAAW,CAClB,GAAI7gC,GAAKpS,IACTurB,YAAW,WAAYnZ,EAAG4qC,aAAc5qC,EAAG1D,SAAU,OAGrD1O,MAAK0O,SAUX5L,EAAQyO,UAAUoI,WAAa,SAAUjM,GACvC,GAAIA,EAAS,CACX,GAAInI,EAiBJ,IAfsBW,SAAlBwH,EAAQkD,QAAgC5Q,KAAK4Q,MAAQlD,EAAQkD,OAC1C1K,SAAnBwH,EAAQmD,SAAgC7Q,KAAK6Q,OAASnD,EAAQmD,QACxC3K,SAAtBwH,EAAQulC,YAAgCjzC,KAAKizC,UAAYvlC,EAAQulC,WAC1C/sC,SAAvBwH,EAAQi5B,aAAgC3mC,KAAK2mC,WAAaj5B,EAAQi5B,YAC/BzgC,SAAnCwH,EAAQwpC,yBAA0Cl3C,KAAKwzC,UAAU0D,uBAAyBxpC,EAAQwpC,wBACrEhxC,SAA7BwH,EAAQmnC,mBAAgC70C,KAAKwzC,UAAUqB,iBAAmBnnC,EAAQmnC,kBAC9C3uC,SAApCwH,EAAQ+pC,0BAA0Cz3C,KAAKwzC,UAAUiE,wBAA0B/pC,EAAQ+pC,yBAC3EvxC,SAAxBwH,EAAQ4qC,cAAgCt4C,KAAKwzC,UAAU8E,YAAc5qC,EAAQ4qC,aACvDpyC,SAAtBwH,EAAQ6qC,YAAgCv4C,KAAKwzC,UAAU+E,UAAY7qC,EAAQ6qC,WACtDryC,SAArBwH,EAAQwsB,WAAgCl6B,KAAKwzC,UAAUtZ,SAAWxsB,EAAQwsB,UACxDh0B,SAAlBwH,EAAQnC,QAAgCvL,KAAKwzC,UAAUjoC,MAAQmC,EAAQnC,OAC3CrF,SAA5BwH,EAAQ8qC,kBAAgCx4C,KAAKwzC,UAAUgF,gBAAkB9qC,EAAQ8qC,iBACrDtyC,SAA5BwH,EAAQ+qC,kBAAgCz4C,KAAKwzC,UAAUiF,gBAAkB/qC,EAAQ+qC,iBAG3DvyC,SAAtBwH,EAAQuvC,UACV,KAAM,IAAI15C,OAAM,6CAGlB,IAAuB2C,SAAnBwH,EAAQ6yB,OACV,IAAKh7B,IAAQmI,GAAQ6yB,OACf7yB,EAAQ6yB,OAAO/6B,eAAeD,KAChCvF,KAAKwzC,UAAUjT,OAAOh7B,GAAQmI,EAAQ6yB,OAAOh7B,GAyBnD,IApBImI,EAAQo5B,QACR9mC,KAAKmzC,iBAAiB7hC,IAAM5D,EAAQo5B,OAGpCp5B,EAAQwvC,SACVl9C,KAAKmzC,iBAAiBC,KAAO1lC,EAAQwvC,QAGnCxvC,EAAQyvC,aACVn9C,KAAKmzC,iBAAiBE,SAAW3lC,EAAQyvC,YAGvCzvC,EAAQ0vC,YACVp9C,KAAKmzC,iBAAiBG,QAAU5lC,EAAQ0vC,WAGtC1vC,EAAQ2vC,WACVr9C,KAAKmzC,iBAAiBI,IAAM7lC,EAAQ2vC,UAGlC3vC,EAAQonC,QAAS,CACnB,GAAIpnC,EAAQonC,QAAQC,UAAW,CAC7B/0C,KAAKwzC,UAAUsB,QAAQC,UAAUpnC,SAAU,CAC3C,KAAKpI,IAAQmI,GAAQonC,QAAQC,UACvBrnC,EAAQonC,QAAQC,UAAUvvC,eAAeD,KAC3CvF,KAAKwzC,UAAUsB,QAAQC,UAAUxvC,GAAQmI,EAAQonC,QAAQC,UAAUxvC,IAKzE,GAAImI,EAAQonC,QAAQQ,UAAW,CAC7Bt1C,KAAKwzC,UAAUsB,QAAQC,UAAUpnC,SAAU,CAC3C,KAAKpI,IAAQmI,GAAQonC,QAAQQ,UACvB5nC,EAAQonC,QAAQQ,UAAU9vC,eAAeD,KAC3CvF,KAAKwzC,UAAUsB,QAAQQ,UAAU/vC,GAAQmI,EAAQonC,QAAQQ,UAAU/vC,IAKzE,GAAImI,EAAQonC,QAAQU,sBAAuB,CACzCx1C,KAAKwzC,UAAUuD,mBAAmBppC,SAAU,EAC5C3N,KAAKwzC,UAAUsB,QAAQU,sBAAsB7nC,SAAU,EACvD3N,KAAKwzC,UAAUsB,QAAQC,UAAUpnC,SAAU,CAC3C,KAAKpI,IAAQmI,GAAQonC,QAAQU,sBACvB9nC,EAAQonC,QAAQU,sBAAsBhwC,eAAeD,KACvDvF,KAAKwzC,UAAUsB,QAAQU,sBAAsBjwC,GAAQmI,EAAQonC,QAAQU,sBAAsBjwC,KAMnG,GAA6BW,SAAzBwH,EAAQypC,aACV,GAAmC,iBAAxBzpC,GAAQypC,aACjBn3C,KAAKwzC,UAAU2D,aAAaxpC,QAAUD,EAAQypC,iBAE3C,CACHn3C,KAAKwzC,UAAU2D,aAAaxpC,SAAU,CACtC,KAAKpI,IAAQmI,GAAQypC,aACfzpC,EAAQypC,aAAa3xC,eAAeD,KACtCvF,KAAKwzC,UAAU2D,aAAa5xC,GAAQmI,EAAQypC,aAAa5xC,IAMjE,GAAImI,EAAQqpC,mBAAoB,CAC9B/2C,KAAKwzC,UAAUuD,mBAAmBppC,SAAU,CAC5C,KAAKpI,IAAQmI,GAAQqpC,mBACfrpC,EAAQqpC,mBAAmBvxC,eAAeD,KAC5CvF,KAAKwzC,UAAUuD,mBAAmBxxC,GAAQmI,EAAQqpC,mBAAmBxxC,QAInCW,UAA/BwH,EAAQqpC,qBACf/2C,KAAKwzC,UAAUuD,mBAAmBppC,SAAU,EAG9C,IAAID,EAAQ+nC,WAAY,CACtBz1C,KAAKwzC,UAAUiC,WAAW9nC,SAAU,CACpC,KAAKpI,IAAQmI,GAAQ+nC,WACf/nC,EAAQ+nC,WAAWjwC,eAAeD,KACpCvF,KAAKwzC,UAAUiC,WAAWlwC,GAAQmI,EAAQ+nC,WAAWlwC,QAI3BW,UAAvBwH,EAAQ+nC,aACfz1C,KAAKwzC,UAAUiC,WAAW9nC,SAAU,EAGtC,IAAID,EAAQgpC,WAAY,CACtB12C,KAAKwzC,UAAUkD,WAAW/oC,SAAU,CACpC,KAAKpI,IAAQmI,GAAQgpC,WACfhpC,EAAQgpC,WAAWlxC,eAAeD,KACpCvF,KAAKwzC,UAAUkD,WAAWnxC,GAAQmI,EAAQgpC,WAAWnxC,QAI3BW,UAAvBwH,EAAQgpC,aACf12C,KAAKwzC,UAAUkD,WAAW/oC,SAAU,EAGtC,IAAID,EAAQipC,SAAU,CACpB32C,KAAKwzC,UAAUmD,SAAShpC,SAAU,CAClC,KAAKpI,IAAQmI,GAAQipC,SACfjpC,EAAQipC,SAASnxC,eAAeD,KAClCvF,KAAKwzC,UAAUmD,SAASpxC,GAAQmI,EAAQipC,SAASpxC,QAIzBW,UAArBwH,EAAQipC,WACf32C,KAAKwzC,UAAUmD,SAAShpC,SAAU,EAGpC,IAAID,EAAQmpC,iBAAkB,CAC5B72C,KAAKwzC,UAAUqD,iBAAiBlpC,SAAU,CAC1C,KAAKpI,IAAQmI,GAAQmpC,iBACfnpC,EAAQmpC,iBAAiBrxC,eAAeD,KAC1CvF,KAAKwzC,UAAUqD,iBAAiBtxC,GAAQmI,EAAQmpC,iBAAiBtxC,GAGrEvF,MAAKs9C,SAAWt9C,KAAKwzC,UAAUqD,iBAAiBC,qBAEZ5wC,UAA7BwH,EAAQmpC,mBACf72C,KAAKwzC,UAAUqD,iBAAiBlpC,SAAU,EAI5C,IAAID,EAAQ0mC,MAAO,CACjB,IAAK7uC,IAAQmI,GAAQ0mC,MACf1mC,EAAQ0mC,MAAM5uC,eAAeD,IACG,gBAAvBmI,GAAQ0mC,MAAM7uC,KACvBvF,KAAKwzC,UAAUY,MAAM7uC,GAAQmI,EAAQ0mC,MAAM7uC,GAKrBW,UAAxBwH,EAAQ0mC,MAAM7pC,QACZ5J,EAAKkD,SAAS6J,EAAQ0mC,MAAM7pC,QAC9BvK,KAAKwzC,UAAUY,MAAM7pC,SACrBvK,KAAKwzC,UAAUY,MAAM7pC,MAAMA,MAAQmD,EAAQ0mC,MAAM7pC,MACjDvK,KAAKwzC,UAAUY,MAAM7pC,MAAMe,UAAYoC,EAAQ0mC,MAAM7pC,MACrDvK,KAAKwzC,UAAUY,MAAM7pC,MAAMgB,MAAQmC,EAAQ0mC,MAAM7pC,QAGfrE,SAA9BwH,EAAQ0mC,MAAM7pC,MAAMA,QAA0BvK,KAAKwzC,UAAUY,MAAM7pC,MAAMA,MAAQmD,EAAQ0mC,MAAM7pC,MAAMA,OACnErE,SAAlCwH,EAAQ0mC,MAAM7pC,MAAMe,YAA0BtL,KAAKwzC,UAAUY,MAAM7pC,MAAMe,UAAYoC,EAAQ0mC,MAAM7pC,MAAMe,WAC3EpF,SAA9BwH,EAAQ0mC,MAAM7pC,MAAMgB,QAA0BvL,KAAKwzC,UAAUY,MAAM7pC,MAAMgB,MAAQmC,EAAQ0mC,MAAM7pC,MAAMgB,SAIxGmC,EAAQ0mC,MAAML,WACW7tC,SAAxBwH,EAAQ0mC,MAAM7pC,QACZ5J,EAAKkD,SAAS6J,EAAQ0mC,MAAM7pC,OAAmBvK,KAAKwzC,UAAUY,MAAML,UAAYrmC,EAAQ0mC,MAAM7pC,MAC3DrE,SAA9BwH,EAAQ0mC,MAAM7pC,MAAMA,QAAsBvK,KAAKwzC,UAAUY,MAAML,UAAYrmC,EAAQ0mC,MAAM7pC,MAAMA,QAOxGmD,EAAQ0mC,MAAMK,OACkBvuC,SAA9BwH,EAAQ0mC,MAAMK,KAAKpvC,SACrBrF,KAAKwzC,UAAUY,MAAMK,KAAKpvC,OAASqI,EAAQ0mC,MAAMK,KAAKpvC,QAEzBa,SAA3BwH,EAAQ0mC,MAAMK,KAAKC,MACrB10C,KAAKwzC,UAAUY,MAAMK,KAAKC,IAAMhnC,EAAQ0mC,MAAMK,KAAKC,KAEhBxuC,SAAjCwH,EAAQ0mC,MAAMK,KAAKE,YACrB30C,KAAKwzC,UAAUY,MAAMK,KAAKE,UAAYjnC,EAAQ0mC,MAAMK,KAAKE;CAK/D,GAAIjnC,EAAQ+lC,MAAO,CACjB,IAAKluC,IAAQmI,GAAQ+lC,MACf/lC,EAAQ+lC,MAAMjuC,eAAeD,KAC/BvF,KAAKwzC,UAAUC,MAAMluC,GAAQmI,EAAQ+lC,MAAMluC,GAI3CmI,GAAQ+lC,MAAMlpC,QAChBvK,KAAKwzC,UAAUC,MAAMlpC,MAAQ5J,EAAK2J,WAAWoD,EAAQ+lC,MAAMlpC,QAQ/D,GAAImD,EAAQ6nB,OACV,IAAK,GAAIgoB,KAAa7vC,GAAQ6nB,OAC5B,GAAI7nB,EAAQ6nB,OAAO/vB,eAAe+3C,GAAY,CAC5C,GAAIltC,GAAQ3C,EAAQ6nB,OAAOgoB,EAC3Bv9C,MAAKu1B,OAAOjkB,IAAIisC,EAAWltC,GAKjC,GAAI3C,EAAQuV,QAAS,CACnB,IAAK1d,IAAQmI,GAAQuV,QACfvV,EAAQuV,QAAQzd,eAAeD,KACjCvF,KAAKwzC,UAAUvwB,QAAQ1d,GAAQmI,EAAQuV,QAAQ1d,GAG/CmI,GAAQuV,QAAQ1Y,QAClBvK,KAAKwzC,UAAUvwB,QAAQ1Y,MAAQ5J,EAAK2J,WAAWoD,EAAQuV,QAAQ1Y,SAQrEvK,KAAKk5C,qBAELl5C,KAAKw9C,0BAELx9C,KAAKy9C,0BAELz9C,KAAK09C,yBAIL19C,KAAK29C,kBACL39C,KAAKwhB,QAAQxhB,KAAK4Q,MAAO5Q,KAAK6Q,QAC9B7Q,KAAK46C,QAAS,EACd56C,KAAK0O,SAWP5L,EAAQyO,UAAUsgB,QAAU,WAE1B,KAAO7xB,KAAK8W,iBAAiByJ,iBAC3BvgB,KAAK8W,iBAAiBtH,YAAYxP,KAAK8W,iBAAiB0J,WAY1D,IATAxgB,KAAKmc,MAAQvM,SAASK,cAAc,OACpCjQ,KAAKmc,MAAM3U,UAAY,gBACvBxH,KAAKmc,MAAM3L,MAAMiQ,SAAW,WAC5BzgB,KAAKmc,MAAM3L,MAAMkQ,SAAW,SAG5B1gB,KAAKmc,MAAMC,OAASxM,SAASK,cAAe,UAC5CjQ,KAAKmc,MAAMC,OAAO5L,MAAMiQ,SAAW,WACnCzgB,KAAKmc,MAAMrM,YAAY9P,KAAKmc,MAAMC,SAC7Bpc,KAAKmc,MAAMC,OAAOyH,WAAY,CACjC,GAAIlD,GAAW/Q,SAASK,cAAe,MACvC0Q,GAASnQ,MAAMjG,MAAQ,MACvBoW,EAASnQ,MAAMoQ,WAAc,OAC7BD,EAASnQ,MAAMqQ,QAAW,OAC1BF,EAASG,UAAa,mDACtB9gB,KAAKmc,MAAMC,OAAOtM,YAAY6Q,GAGhC,GAAIvO,GAAKpS,IACTA,MAAKw/B,QACLx/B,KAAK49C,SACL59C,KAAKyD,OAASyvB,EAAOlzB,KAAKmc,MAAMC,QAC9B8X,iBAAiB,IAEnBl0B,KAAKyD,OAAO+N,GAAG,MAAaY,EAAGyrC,OAAO5rB,KAAK7f,IAC3CpS,KAAKyD,OAAO+N,GAAG,YAAaY,EAAG0rC,aAAa7rB,KAAK7f,IACjDpS,KAAKyD,OAAO+N,GAAG,OAAaY,EAAGkoB,QAAQrI,KAAK7f,IAC5CpS,KAAKyD,OAAO+N,GAAG,QAAaY,EAAG2hB,SAAS9B,KAAK7f,IAC7CpS,KAAKyD,OAAO+N,GAAG,QAAaY,EAAG0hB,SAAS7B,KAAK7f,IAC7CpS,KAAKyD,OAAO+N,GAAG,YAAaY,EAAG4hB,aAAa/B,KAAK7f,IACjDpS,KAAKyD,OAAO+N,GAAG,OAAaY,EAAG6hB,QAAQhC,KAAK7f,IAC5CpS,KAAKyD,OAAO+N,GAAG,UAAaY,EAAGioB,WAAWpI,KAAK7f,IAC/CpS,KAAKyD,OAAO+N,GAAG,UAAaY,EAAG2rC,WAAW9rB,KAAK7f,IAC/CpS,KAAKyD,OAAO+N,GAAG,aAAaY,EAAGmoB,cAActI,KAAK7f,IAClDpS,KAAKyD,OAAO+N,GAAG,iBAAiBY,EAAGmoB,cAActI,KAAK7f,IACtDpS,KAAKyD,OAAO+N,GAAG,YAAaY,EAAG4rC,kBAAkB/rB,KAAK7f,IAGtDpS,KAAK8W,iBAAiBhH,YAAY9P,KAAKmc,QASzCrZ,EAAQyO,UAAUosC,gBAAkB,WAClC,GAAIvrC,GAAKpS,IACTA,MAAKi7C,UAAYA,EAEjBj7C,KAAKi7C,UAAUgD,QAEwB,GAAnCj+C,KAAKwzC,UAAUmD,SAAShpC,UAC1B3N,KAAKi7C,UAAUhpB,KAAK,KAAQjyB,KAAKk+C,QAAQjsB,KAAK7f,GAAQ,WACtDpS,KAAKi7C,UAAUhpB,KAAK,KAAQjyB,KAAKm+C,aAAalsB,KAAK7f,GAAK,SACxDpS,KAAKi7C,UAAUhpB,KAAK,OAAQjyB,KAAKo+C,UAAUnsB,KAAK7f,GAAM,WACtDpS,KAAKi7C,UAAUhpB,KAAK,OAAQjyB,KAAKm+C,aAAalsB,KAAK7f,GAAK,SACxDpS,KAAKi7C,UAAUhpB,KAAK,OAAQjyB,KAAKq+C,UAAUpsB,KAAK7f,GAAM,WACtDpS,KAAKi7C,UAAUhpB,KAAK,OAAQjyB,KAAKs+C,aAAarsB,KAAK7f,GAAK,SACxDpS,KAAKi7C,UAAUhpB,KAAK,QAAQjyB,KAAKu+C,WAAWtsB,KAAK7f,GAAK,WACtDpS,KAAKi7C,UAAUhpB,KAAK,QAAQjyB,KAAKs+C,aAAarsB,KAAK7f,GAAK,SACxDpS,KAAKi7C,UAAUhpB,KAAK,IAAQjyB,KAAKw+C,QAAQvsB,KAAK7f,GAAQ,WACtDpS,KAAKi7C,UAAUhpB,KAAK,IAAQjyB,KAAKy+C,UAAUxsB,KAAK7f,GAAQ,SACxDpS,KAAKi7C,UAAUhpB,KAAK,IAAQjyB,KAAK0+C,SAASzsB,KAAK7f,GAAO,WACtDpS,KAAKi7C,UAAUhpB,KAAK,IAAQjyB,KAAKy+C,UAAUxsB,KAAK7f,GAAQ,SACxDpS,KAAKi7C,UAAUhpB,KAAK,IAAQjyB,KAAKw+C,QAAQvsB,KAAK7f,GAAQ,WACtDpS,KAAKi7C,UAAUhpB,KAAK,IAAQjyB,KAAKy+C,UAAUxsB,KAAK7f,GAAQ,SACxDpS,KAAKi7C,UAAUhpB,KAAK,IAAQjyB,KAAK0+C,SAASzsB,KAAK7f,GAAO,WACtDpS,KAAKi7C,UAAUhpB,KAAK,IAAQjyB,KAAKy+C,UAAUxsB,KAAK7f,GAAQ,SACxDpS,KAAKi7C,UAAUhpB,KAAK,SAASjyB,KAAKw+C,QAAQvsB,KAAK7f,GAAO,WACtDpS,KAAKi7C,UAAUhpB,KAAK,SAASjyB,KAAKy+C,UAAUxsB,KAAK7f,GAAO,SACxDpS,KAAKi7C,UAAUhpB,KAAK,WAAWjyB,KAAK0+C,SAASzsB,KAAK7f,GAAI,WACtDpS,KAAKi7C,UAAUhpB,KAAK,WAAWjyB,KAAKy+C,UAAUxsB,KAAK7f,GAAK,UAGX,GAA3CpS,KAAKwzC,UAAUqD,iBAAiBlpC,UAClC3N,KAAKi7C,UAAUhpB,KAAK,SAASjyB,KAAK2+C,sBAAsB1sB,KAAK7f,IAC7DpS,KAAKi7C,UAAUhpB,KAAK,MAAMjyB,KAAK4+C,gBAAgB3sB,KAAK7f,MAUxDtP,EAAQyO,UAAUstC,YAAc,SAAUpqB,GACxC,OACEtkB,EAAGskB,EAAMiG,MAAQ/5B,EAAKmG,gBAAgB9G,KAAKmc,MAAMC,QACjDhM,EAAGqkB,EAAMkG,MAAQh6B,EAAKyG,eAAepH,KAAKmc,MAAMC,UASpDtZ,EAAQyO,UAAUuiB,SAAW,SAAU5qB,GACrClJ,KAAKw/B,KAAKpE,QAAUp7B,KAAK6+C,YAAY31C,EAAMquB,QAAQtO,QACnDjpB,KAAKw/B,KAAKsf,SAAU,EACpB9+C,KAAK49C,MAAM9jC,MAAQ9Z,KAAK++C,YAExB/+C,KAAKg/C,aAAah/C,KAAKw/B,KAAKpE,UAO9Bt4B,EAAQyO,UAAUyiB,aAAe,WAC/Bh0B,KAAKi/C,oBAUPn8C,EAAQyO,UAAU0tC,iBAAmB,WACnC,GAAIzf,GAAOx/B,KAAKw/B,KACZgc,EAAOx7C,KAAKk/C,WAAW1f,EAAKpE,QAQhC,IALAoE,EAAKC,UAAW,EAChBD,EAAKoI,aACLpI,EAAKllB,YAActa,KAAKm/C,kBACxB3f,EAAKqc,OAAS,KAEF,MAARL,EAAc,CAChBhc,EAAKqc,OAASL,EAAKn7C,GAEdm7C,EAAK4D,cACRp/C,KAAKq/C,cAAc7D,GAAK,EAI1B,KAAK,GAAI8D,KAAYt/C,MAAKu/C,aAAa9L,MACrC,GAAIzzC,KAAKu/C,aAAa9L,MAAMjuC,eAAe85C,GAAW,CACpD,GAAI37C,GAAS3D,KAAKu/C,aAAa9L,MAAM6L,GACjCz0C,GACFxK,GAAIsD,EAAOtD,GACXm7C,KAAM73C,EAGNwM,EAAGxM,EAAOwM,EACVC,EAAGzM,EAAOyM,EACVovC,OAAQ77C,EAAO67C,OACfC,OAAQ97C,EAAO87C,OAGjB97C,GAAO67C,QAAS,EAChB77C,EAAO87C,QAAS,EAEhBjgB,EAAKoI,UAAUhgC,KAAKiD,MAW5B/H,EAAQyO,UAAU0iB,QAAU,SAAU/qB,GACpClJ,KAAK0/C,cAAcx2C,IAUrBpG,EAAQyO,UAAUmuC,cAAgB,SAASx2C,GACzC,IAAIlJ,KAAKw/B,KAAKsf,QAAd,CAIA,GAAI1jB,GAAUp7B,KAAK6+C,YAAY31C,EAAMquB,QAAQtO,QAEzC7W,EAAKpS,KACLw/B,EAAOx/B,KAAKw/B,KACZoI,EAAYpI,EAAKoI,SACrB,IAAIA,GAAaA,EAAUviC,QAAsC,GAA5BrF,KAAKwzC,UAAU+E,UAAmB,CAErE,GAAItd,GAASG,EAAQjrB,EAAIqvB,EAAKpE,QAAQjrB,EAClCqnB,EAAS4D,EAAQhrB,EAAIovB,EAAKpE,QAAQhrB,CAGtCw3B,GAAU3/B,QAAQ,SAAU4C,GAC1B,GAAI2wC,GAAO3wC,EAAE2wC,IAER3wC,GAAE20C,SACLhE,EAAKrrC,EAAIiC,EAAGutC,qBAAqBvtC,EAAGwtC,qBAAqB/0C,EAAEsF,GAAK8qB,IAG7DpwB,EAAE40C,SACLjE,EAAKprC,EAAIgC,EAAGytC,qBAAqBztC,EAAG0tC,qBAAqBj1C,EAAEuF,GAAKonB,MAM/Dx3B,KAAK46C,SACR56C,KAAK46C,QAAS,EACd56C,KAAK0O,aAIP,IAAkC,GAA9B1O,KAAKwzC,UAAU8E,YAAqB,CAEtC,GAAIjuB,GAAQ+Q,EAAQjrB,EAAInQ,KAAKw/B,KAAKpE,QAAQjrB,EACtCma,EAAQ8Q,EAAQhrB,EAAIpQ,KAAKw/B,KAAKpE,QAAQhrB,CAE1CpQ,MAAKu5C,gBACHv5C,KAAKw/B,KAAKllB,YAAYnK,EAAIka,EAC1BrqB,KAAKw/B,KAAKllB,YAAYlK,EAAIka,GAE5BtqB,KAAK84C,aAWXh2C,EAAQyO,UAAU8oB,WAAa,WAC7Br6B,KAAKw/B,KAAKC,UAAW,CACrB,IAAImI,GAAY5nC,KAAKw/B,KAAKoI,SACtBA,KACFA,EAAU3/B,QAAQ,SAAU4C,GAE1BA,EAAE2wC,KAAKgE,OAAS30C,EAAE20C,OAClB30C,EAAE2wC,KAAKiE,OAAS50C,EAAE40C,SAEpBz/C,KAAK46C,QAAS,EACd56C,KAAK0O,SAEP1O,KAAK84C,WAOPh2C,EAAQyO,UAAUssC,OAAS,SAAU30C,GACnC,GAAIkyB,GAAUp7B,KAAK6+C,YAAY31C,EAAMquB,QAAQtO,OAC7CjpB,MAAK+5C,gBAAkB3e,EACvBp7B,KAAK+/C,WAAW3kB,IASlBt4B,EAAQyO,UAAUusC,aAAe,SAAU50C,GACzC,GAAIkyB,GAAUp7B,KAAK6+C,YAAY31C,EAAMquB,QAAQtO,OAC7CjpB,MAAKggD,iBAAiB5kB,IAQxBt4B,EAAQyO,UAAU+oB,QAAU,SAAUpxB,GACpC,GAAIkyB,GAAUp7B,KAAK6+C,YAAY31C,EAAMquB,QAAQtO,OAC7CjpB,MAAK+5C,gBAAkB3e,EACvBp7B,KAAKigD,cAAc7kB,IAQrBt4B,EAAQyO,UAAUwsC,WAAa,SAAU70C,GACvC,GAAIkyB,GAAUp7B,KAAK6+C,YAAY31C,EAAMquB,QAAQtO,OAC7CjpB,MAAKkgD,iBAAiB9kB,IAQxBt4B,EAAQyO,UAAUwiB,SAAW,SAAU7qB,GACrC,GAAIkyB,GAAUp7B,KAAK6+C,YAAY31C,EAAMquB,QAAQtO,OAE7CjpB,MAAKw/B,KAAKsf,SAAU,EACd,SAAW9+C,MAAK49C,QACpB59C,KAAK49C,MAAM9jC,MAAQ,EAIrB,IAAIA,GAAQ9Z,KAAK49C,MAAM9jC,MAAQ5Q,EAAMquB,QAAQzd,KAC7C9Z,MAAKmgD,MAAMrmC,EAAOshB,IAUpBt4B,EAAQyO,UAAU4uC,MAAQ,SAASrmC,EAAOshB,GACxC,GAA+B,GAA3Bp7B,KAAKwzC,UAAUtZ,SAAkB,CACnC,GAAIkmB,GAAWpgD,KAAK++C,WACR,MAARjlC,IACFA,EAAQ,MAENA,EAAQ,KACVA,EAAQ,GAGV,IAAIumC,GAAsB,IACRn6C,UAAdlG,KAAKw/B,MACmB,GAAtBx/B,KAAKw/B,KAAKC,WACZ4gB,EAAsBrgD,KAAKsgD,YAAYtgD,KAAKw/B,KAAKpE,SAIrD,IAAI9gB,GAActa,KAAKm/C,kBAEnBoB,EAAYzmC,EAAQsmC,EACpBI,GAAM,EAAID,GAAanlB,EAAQjrB,EAAImK,EAAYnK,EAAIowC,EACnDE,GAAM,EAAIF,GAAanlB,EAAQhrB,EAAIkK,EAAYlK,EAAImwC,CASvD,IAPAvgD,KAAKg6C,YAAc7pC,EAAMnQ,KAAK2/C,qBAAqBvkB,EAAQjrB,GACxCC,EAAMpQ,KAAK6/C,qBAAqBzkB,EAAQhrB,IAE3DpQ,KAAK6Z,UAAUC,GACf9Z,KAAKu5C,gBAAgBiH,EAAIC,GACzBzgD,KAAK0gD,wBAEsB,MAAvBL,EAA6B,CAC/B,GAAIM,GAAuB3gD,KAAK4gD,YAAYP,EAC5CrgD,MAAKw/B,KAAKpE,QAAQjrB,EAAIwwC,EAAqBxwC,EAC3CnQ,KAAKw/B,KAAKpE,QAAQhrB,EAAIuwC,EAAqBvwC,EAY7C,MATApQ,MAAK84C,UAEUh/B,EAAXsmC,EACFpgD,KAAK6qB,KAAK,QAASmP,UAAU,MAG7Bh6B,KAAK6qB,KAAK,QAASmP,UAAU,MAGxBlgB,IAYXhX,EAAQyO,UAAUgpB,cAAgB,SAASrxB,GAEzC,GAAI0iB,GAAQ,CAYZ,IAXI1iB,EAAM2iB,WACRD,EAAQ1iB,EAAM2iB,WAAW,IAChB3iB,EAAM4iB,SAGfF,GAAS1iB,EAAM4iB,OAAO,GAMpBF,EAAO,CAGT,GAAI9R,GAAQ9Z,KAAK++C,YACbxjB,EAAO3P,EAAQ,EACP,GAARA,IACF2P,GAAe,EAAIA,GAErBzhB,GAAU,EAAIyhB,CAGd,IAAIhE,GAAUqD,EAAWO,YAAYn7B,KAAMkJ,GACvCkyB,EAAUp7B,KAAK6+C,YAAYtnB,EAAQtO,OAGvCjpB,MAAKmgD,MAAMrmC,EAAOshB,GAIpBlyB,EAAMD,kBASRnG,EAAQyO,UAAUysC,kBAAoB,SAAU90C,GAC9C,GAAIquB,GAAUqD,EAAWO,YAAYn7B,KAAMkJ,GACvCkyB,EAAUp7B,KAAK6+C,YAAYtnB,EAAQtO,OAGnCjpB,MAAK6gD,UACP7gD,KAAK8gD,gBAAgB1lB,EAKvB,IAAIhpB,GAAKpS,KACL+gD,EAAY,WACd3uC,EAAG4uC,gBAAgB5lB,GAarB,IAXIp7B,KAAKihD,YACPlxB,cAAc/vB,KAAKihD,YAEhBjhD,KAAKw/B,KAAKC,WACbz/B,KAAKihD,WAAa11B,WAAWw1B,EAAW/gD,KAAKwzC,UAAUvwB,QAAQ6H,QAOrC,GAAxB9qB,KAAKwzC,UAAUjoC,MAAe,CAEhC,IAAK,GAAI21C,KAAUlhD,MAAK04C,SAAStE,MAC3Bp0C,KAAK04C,SAAStE,MAAM5uC,eAAe07C,KACrClhD,KAAK04C,SAAStE,MAAM8M,GAAQ31C,OAAQ,QAC7BvL,MAAK04C,SAAStE,MAAM8M,GAK/B,IAAIrhC,GAAM7f,KAAKk/C,WAAW9jB,EACf,OAAPvb,IACFA,EAAM7f,KAAKmhD,WAAW/lB,IAEb,MAAPvb,GACF7f,KAAKohD,aAAavhC,EAIpB,KAAK,GAAIg8B,KAAU77C,MAAK04C,SAASjF,MAC3BzzC,KAAK04C,SAASjF,MAAMjuC,eAAeq2C,KACjCh8B,YAAe1c,IAAQ0c,EAAIxf,IAAMw7C,GAAUh8B,YAAe7c,IAAe,MAAP6c,KACpE7f,KAAKqhD,YAAYrhD,KAAK04C,SAASjF,MAAMoI,UAC9B77C,MAAK04C,SAASjF,MAAMoI,GAIjC77C,MAAKse,WAYTxb,EAAQyO,UAAUyvC,gBAAkB,SAAU5lB,GAC5C,GAOI/6B,GAPAwf,GACF5Y,KAAQjH,KAAK2/C,qBAAqBvkB,EAAQjrB,GAC1C9I,IAAQrH,KAAK6/C,qBAAqBzkB,EAAQhrB,GAC1C8T,MAAQlkB,KAAK2/C,qBAAqBvkB,EAAQjrB,GAC1CgQ,OAAQngB,KAAK6/C,qBAAqBzkB,EAAQhrB,IAIxCkxC,EAAgBthD,KAAK6gD,QAEzB,IAAqB36C,QAAjBlG,KAAK6gD,SAAuB,CAE9B,GAAIpN,GAAQzzC,KAAKyzC,KACjB,KAAKpzC,IAAMozC,GACT,GAAIA,EAAMjuC,eAAenF,GAAK,CAC5B,GAAIm7C,GAAO/H,EAAMpzC,EACjB,IAAwB6F,SAApBs1C,EAAK+F,YAA4B/F,EAAKgG,kBAAkB3hC,GAAM,CAChE7f,KAAK6gD,SAAWrF,CAChB,SAMR,GAAsBt1C,SAAlBlG,KAAK6gD,SAAwB,CAE/B,GAAIzM,GAAQp0C,KAAKo0C,KACjB,KAAK/zC,IAAM+zC,GACT,GAAIA,EAAM5uC,eAAenF,GAAK,CAC5B,GAAIohD,GAAOrN,EAAM/zC,EACjB,IAAIohD,EAAKC,WAAkCx7C,SAApBu7C,EAAKF,YACxBE,EAAKD,kBAAkB3hC,GAAM,CAC/B7f,KAAK6gD,SAAWY,CAChB,SAMR,GAAIzhD,KAAK6gD,UAEP,GAAI7gD,KAAK6gD,UAAYS,EAAe,CAClC,GAAIlvC,GAAKpS,IACJoS,GAAGuvC,QACNvvC,EAAGuvC,MAAQ,GAAIv+C,GAAMgP,EAAG+J,MAAO/J,EAAGohC,UAAUvwB,UAM9C7Q,EAAGuvC,MAAMC,YAAYxmB,EAAQjrB,EAAI,EAAGirB,EAAQhrB,EAAI,GAChDgC,EAAGuvC,MAAME,QAAQzvC,EAAGyuC,SAASU,YAC7BnvC,EAAGuvC,MAAMtgB,YAIPrhC,MAAK2hD,OACP3hD,KAAK2hD,MAAMvgB,QAYjBt+B,EAAQyO,UAAUuvC,gBAAkB,SAAU1lB,GACvCp7B,KAAK6gD,UAAa7gD,KAAKk/C,WAAW9jB,KACrCp7B,KAAK6gD,SAAW36C,OACZlG,KAAK2hD,OACP3hD,KAAK2hD,MAAMvgB,SAajBt+B,EAAQyO,UAAUiQ,QAAU,SAAS5Q,EAAOC,GAC1C7Q,KAAKmc,MAAM3L,MAAMI,MAAQA,EACzB5Q,KAAKmc,MAAM3L,MAAMK,OAASA,EAE1B7Q,KAAKmc,MAAMC,OAAO5L,MAAMI,MAAQ,OAChC5Q,KAAKmc,MAAMC,OAAO5L,MAAMK,OAAS,OAEjC7Q,KAAKmc,MAAMC,OAAOxL,MAAQ5Q,KAAKmc,MAAMC,OAAOC,YAC5Crc,KAAKmc,MAAMC,OAAOvL,OAAS7Q,KAAKmc,MAAMC,OAAOsF,aAEhBxb,SAAzBlG,KAAK8hD,kBACP9hD,KAAK8hD,gBAAgBtxC,MAAMI,MAAQ5Q,KAAKmc,MAAMC,OAAOC,YAAc,MAEzCnW,SAAxBlG,KAAK+hD,gBACgC77C,SAAnClG,KAAK+hD,eAAwB,UAC/B/hD,KAAK+hD,eAAwB,QAAEvxC,MAAMI,MAAQ5Q,KAAKmc,MAAMC,OAAOC,YAAc,KAC7Erc,KAAK+hD,eAAwB,QAAEvxC,MAAMK,OAAS7Q,KAAKmc,MAAMC,OAAOsF,aAAe,MAInF1hB,KAAK6qB,KAAK,UAAWja,MAAM5Q,KAAKmc,MAAMC,OAAOxL,MAAMC,OAAO7Q,KAAKmc,MAAMC,OAAOvL,UAQ9E/N,EAAQyO,UAAUsrC,UAAY,SAASpJ,GACrC,GAAIuO,GAAehiD,KAAKk6C,SAExB,IAAIzG,YAAiB5yC,IAAW4yC,YAAiB3yC,GAC/Cd,KAAKk6C,UAAYzG,MAEd,IAAIA,YAAiB9tC,OACxB3F,KAAKk6C,UAAY,GAAIr5C,GACrBb,KAAKk6C,UAAU5oC,IAAImiC,OAEhB,CAAA,GAAKA,EAIR,KAAM,IAAI1tC,WAAU,4BAHpB/F,MAAKk6C,UAAY,GAAIr5C,GAgBvB,GAVImhD,GAEFrhD,EAAKsH,QAAQjI,KAAKo6C,eAAgB,SAAUlyC,EAAUgB,GACpD84C,EAAarwC,IAAIzI,EAAOhB,KAK5BlI,KAAKyzC,SAEDzzC,KAAKk6C,UAAW,CAElB,GAAI9nC,GAAKpS,IACTW,GAAKsH,QAAQjI,KAAKo6C,eAAgB,SAAUlyC,EAAUgB,GACpDkJ,EAAG8nC,UAAU1oC,GAAGtI,EAAOhB,IAIzB,IAAIkL,GAAMpT,KAAKk6C,UAAUnmC,QACzB/T,MAAKq6C,UAAUjnC,GAEjBpT,KAAKiiD,oBAQPn/C,EAAQyO,UAAU8oC,UAAY,SAASjnC,GAErC,IAAK,GADD/S,GACK6E,EAAI,EAAGC,EAAMiO,EAAI/N,OAAYF,EAAJD,EAASA,IAAK,CAC9C7E,EAAK+S,EAAIlO,EACT,IAAI6L,GAAO/Q,KAAKk6C,UAAU/mC,IAAI9S,GAC1Bm7C,EAAO,GAAIr4C,GAAK4N,EAAM/Q,KAAK44C,OAAQ54C,KAAKu1B,OAAQv1B,KAAKwzC,UAGzD,IAFAxzC,KAAKyzC,MAAMpzC,GAAMm7C,IAEG,GAAfA,EAAKgE,QAAkC,GAAfhE,EAAKiE,QAAgC,OAAXjE,EAAKrrC,GAAyB,OAAXqrC,EAAKprC,GAAa,CAC1F,GAAIoY,GAAS,EAASpV,EAAI/N,OACtB68C,EAAQ,EAAIt9C,KAAK8jB,GAAK9jB,KAAKE,QACZ,IAAf02C,EAAKgE,SAAkBhE,EAAKrrC,EAAIqY,EAAS5jB,KAAKwW,IAAI8mC,IACnC,GAAf1G,EAAKiE,SAAkBjE,EAAKprC,EAAIoY,EAAS5jB,KAAKqW,IAAIinC,IAExDliD,KAAK46C,QAAS,EAEhB56C,KAAKw8C,uBAC4C,GAA7Cx8C,KAAKwzC,UAAUuD,mBAAmBppC,SAAwC,GAArB3N,KAAKkzC,eAC5DlzC,KAAKmiD,eACLniD,KAAK86C,4BAEP96C,KAAKoiD,0BACLpiD,KAAKqiD,kBACLriD,KAAKsiD,kBAAkBtiD,KAAKyzC,OAC5BzzC,KAAKuiD,gBAQPz/C,EAAQyO,UAAU+oC,aAAe,SAASlnC,GAGxC,IAAK,GAFDqgC,GAAQzzC,KAAKyzC,MACbyG,EAAYl6C,KAAKk6C,UACZh1C,EAAI,EAAGC,EAAMiO,EAAI/N,OAAYF,EAAJD,EAASA,IAAK,CAC9C,GAAI7E,GAAK+S,EAAIlO,GACTs2C,EAAO/H,EAAMpzC,GACb0Q,EAAOmpC,EAAU/mC,IAAI9S,EACrBm7C,GAEFA,EAAKgH,cAAczxC,EAAM/Q,KAAKwzC,YAI9BgI,EAAO,GAAIr4C,GAAKs/C,WAAYziD,KAAK44C,OAAQ54C,KAAKu1B,OAAQv1B,KAAKwzC,WAC3DC,EAAMpzC,GAAMm7C,GAGhBx7C,KAAK46C,QAAS,EACmC,GAA7C56C,KAAKwzC,UAAUuD,mBAAmBppC,SAAwC,GAArB3N,KAAKkzC,eAC5DlzC,KAAKmiD,eACLniD,KAAK86C,4BAEP96C,KAAKw8C,uBACLx8C,KAAKqiD,kBACLriD,KAAKsiD,kBAAkB7O,IAQzB3wC,EAAQyO,UAAUgpC,aAAe,SAASnnC,GAExC,IAAK,GADDqgC,GAAQzzC,KAAKyzC,MACRvuC,EAAI,EAAGC,EAAMiO,EAAI/N,OAAYF,EAAJD,EAASA,IAAK,CAC9C,GAAI7E,GAAK+S,EAAIlO,SACNuuC,GAAMpzC,GAEfL,KAAKw8C,uBAC4C,GAA7Cx8C,KAAKwzC,UAAUuD,mBAAmBppC,SAAwC,GAArB3N,KAAKkzC,eAC5DlzC,KAAKmiD,eACLniD,KAAK86C,4BAEP96C,KAAKoiD,0BACLpiD,KAAKqiD,kBACLriD,KAAKiiD,mBACLjiD,KAAKsiD,kBAAkB7O,IASzB3wC,EAAQyO,UAAUurC,UAAY,SAAS1I,GACrC,GAAIsO,GAAe1iD,KAAKm6C,SAExB,IAAI/F,YAAiBvzC,IAAWuzC,YAAiBtzC,GAC/Cd,KAAKm6C,UAAY/F,MAEd,IAAIA,YAAiBzuC,OACxB3F,KAAKm6C,UAAY,GAAIt5C,GACrBb,KAAKm6C,UAAU7oC,IAAI8iC,OAEhB,CAAA,GAAKA,EAIR,KAAM,IAAIruC,WAAU,4BAHpB/F,MAAKm6C,UAAY,GAAIt5C,GAgBvB,GAVI6hD,GAEF/hD,EAAKsH,QAAQjI,KAAKw6C,eAAgB,SAAUtyC,EAAUgB,GACpDw5C,EAAa/wC,IAAIzI,EAAOhB,KAK5BlI,KAAKo0C,SAEDp0C,KAAKm6C,UAAW,CAElB,GAAI/nC,GAAKpS,IACTW,GAAKsH,QAAQjI,KAAKw6C,eAAgB,SAAUtyC,EAAUgB,GACpDkJ,EAAG+nC,UAAU3oC,GAAGtI,EAAOhB,IAIzB,IAAIkL,GAAMpT,KAAKm6C,UAAUpmC,QACzB/T,MAAKy6C,UAAUrnC,GAGjBpT,KAAKqiD,mBAQPv/C,EAAQyO,UAAUkpC,UAAY,SAAUrnC,GAItC,IAAK,GAHDghC,GAAQp0C,KAAKo0C,MACb+F,EAAYn6C,KAAKm6C,UAEZj1C,EAAI,EAAGC,EAAMiO,EAAI/N,OAAYF,EAAJD,EAASA,IAAK,CAC9C,GAAI7E,GAAK+S,EAAIlO,GAETy9C,EAAUvO,EAAM/zC,EAChBsiD,IACFA,EAAQC,YAGV,IAAI7xC,GAAOopC,EAAUhnC,IAAI9S,GAAKwiD,iBAAoB,GAClDzO,GAAM/zC,GAAM,GAAI2C,GAAK+N,EAAM/Q,KAAMA,KAAKwzC,WAGxCxzC,KAAK46C,QAAS,EACd56C,KAAKsiD,kBAAkBlO,GACvBp0C,KAAK8iD,qBAC4C,GAA7C9iD,KAAKwzC,UAAUuD,mBAAmBppC,SAAwC,GAArB3N,KAAKkzC,eAC5DlzC,KAAKmiD,eACLniD,KAAK86C,4BAEP96C,KAAKoiD,2BAQPt/C,EAAQyO,UAAUmpC,aAAe,SAAUtnC,GAGzC,IAAK,GAFDghC,GAAQp0C,KAAKo0C,MACb+F,EAAYn6C,KAAKm6C,UACZj1C,EAAI,EAAGC,EAAMiO,EAAI/N,OAAYF,EAAJD,EAASA,IAAK,CAC9C,GAAI7E,GAAK+S,EAAIlO,GAET6L,EAAOopC,EAAUhnC,IAAI9S,GACrBohD,EAAOrN,EAAM/zC,EACbohD,IAEFA,EAAKmB,aACLnB,EAAKe,cAAczxC,EAAM/Q,KAAKwzC,WAC9BiO,EAAKnO,YAILmO,EAAO,GAAIz+C,GAAK+N,EAAM/Q,KAAMA,KAAKwzC,WACjCxzC,KAAKo0C,MAAM/zC,GAAMohD,GAIrBzhD,KAAK8iD,qBAC4C,GAA7C9iD,KAAKwzC,UAAUuD,mBAAmBppC,SAAwC,GAArB3N,KAAKkzC,eAC5DlzC,KAAKmiD,eACLniD,KAAK86C,4BAEP96C,KAAK46C,QAAS,EACd56C,KAAKsiD,kBAAkBlO,IAQzBtxC,EAAQyO,UAAUopC,aAAe,SAAUvnC,GAEzC,IAAK,GADDghC,GAAQp0C,KAAKo0C,MACRlvC,EAAI,EAAGC,EAAMiO,EAAI/N,OAAYF,EAAJD,EAASA,IAAK,CAC9C,GAAI7E,GAAK+S,EAAIlO,GACTu8C,EAAOrN,EAAM/zC,EACbohD,KACc,MAAZA,EAAKsB,WACA/iD,MAAKgjD,QAAiB,QAAS,MAAEvB,EAAKsB,IAAI1iD,IAEnDohD,EAAKmB,mBACExO,GAAM/zC,IAIjBL,KAAK46C,QAAS,EACd56C,KAAKsiD,kBAAkBlO,GAC0B,GAA7Cp0C,KAAKwzC,UAAUuD,mBAAmBppC,SAAwC,GAArB3N,KAAKkzC,eAC5DlzC,KAAKmiD,eACLniD,KAAK86C,4BAEP96C,KAAKoiD,2BAOPt/C,EAAQyO,UAAU8wC,gBAAkB,WAClC,GAAIhiD,GACAozC,EAAQzzC,KAAKyzC,MACbW,EAAQp0C,KAAKo0C,KACjB,KAAK/zC,IAAMozC,GACLA,EAAMjuC,eAAenF,KACvBozC,EAAMpzC,GAAI+zC,SAId,KAAK/zC,IAAM+zC,GACT,GAAIA,EAAM5uC,eAAenF,GAAK,CAC5B,GAAIohD,GAAOrN,EAAM/zC,EACjBohD,GAAKv7B,KAAO,KACZu7B,EAAKt7B,GAAK,KACVs7B,EAAKnO,YAaXxwC,EAAQyO,UAAU+wC,kBAAoB,SAASziC,GAC7C,GAAIxf,GAGA8Y,EAAWjT,OACXkT,EAAWlT,MACf,KAAK7F,IAAMwf,GACT,GAAIA,EAAIra,eAAenF,GAAK,CAC1B,GAAIwG,GAAQgZ,EAAIxf,GAAIyS,UACN5M,UAAVW,IACFsS,EAAyBjT,SAAbiT,EAA0BtS,EAAQjC,KAAKmG,IAAIlE,EAAOsS,GAC9DC,EAAyBlT,SAAbkT,EAA0BvS,EAAQjC,KAAK6H,IAAI5F,EAAOuS,IAMpE,GAAiBlT,SAAbiT,GAAuCjT,SAAbkT,EAC5B,IAAK/Y,IAAMwf,GACLA,EAAIra,eAAenF,IACrBwf,EAAIxf,GAAI4iD,cAAc9pC,EAAUC,IAUxCtW,EAAQyO,UAAU+M,OAAS,WACzBte,KAAKwhB,QAAQxhB,KAAK4Q,MAAO5Q,KAAK6Q,QAC9B7Q,KAAK84C,WAOPh2C,EAAQyO,UAAUunC,QAAU,WAC1B,GAAIl1B,GAAM5jB,KAAKmc,MAAMC,OAAOyH,WAAW,MAEnCq/B,EAAIljD,KAAKmc,MAAMC,OAAOxL,MACtBhG,EAAI5K,KAAKmc,MAAMC,OAAOvL,MAC1B+S,GAAIE,UAAU,EAAG,EAAGo/B,EAAGt4C,GAGvBgZ,EAAIu/B,OACJv/B,EAAIw/B,UAAUpjD,KAAKsa,YAAYnK,EAAGnQ,KAAKsa,YAAYlK,GACnDwT,EAAI9J,MAAM9Z,KAAK8Z,MAAO9Z,KAAK8Z,OAE3B9Z,KAAK65C,eACH1pC,EAAKnQ,KAAK2/C,qBAAqB,GAC/BvvC,EAAKpQ,KAAK6/C,qBAAqB,IAEjC7/C,KAAK85C,mBACH3pC,EAAKnQ,KAAK2/C,qBAAqB3/C,KAAKmc,MAAMC,OAAOC,aACjDjM,EAAKpQ,KAAK6/C,qBAAqB7/C,KAAKmc,MAAMC,OAAOsF,eAInD1hB,KAAKqjD,gBAAgB,sBAAsBz/B,IACjB,GAAtB5jB,KAAKw/B,KAAKC,UAA4Cv5B,SAAvBlG,KAAKw/B,KAAKC,UAA4D,GAAlCz/B,KAAKwzC,UAAUgF,kBACpFx4C,KAAKqjD,gBAAgB,aAAaz/B,IAGV,GAAtB5jB,KAAKw/B,KAAKC,UAA4Cv5B,SAAvBlG,KAAKw/B,KAAKC,UAA4D,GAAlCz/B,KAAKwzC,UAAUiF,kBACpFz4C,KAAKqjD,gBAAgB,aAAaz/B,GAAI,GAGT,GAA3B5jB,KAAK24C,oBACP34C,KAAKqjD,gBAAgB,oBAAoBz/B,GAO3CA,EAAI0/B,WASNxgD,EAAQyO,UAAUgoC,gBAAkB,SAASgK,EAASC,GAC3Bt9C,SAArBlG,KAAKsa,cACPta,KAAKsa,aACHnK,EAAG,EACHC,EAAG,IAISlK,SAAZq9C,IACFvjD,KAAKsa,YAAYnK,EAAIozC,GAEPr9C,SAAZs9C,IACFxjD,KAAKsa,YAAYlK,EAAIozC,GAGvBxjD,KAAK6qB,KAAK,gBAQZ/nB,EAAQyO,UAAU4tC,gBAAkB,WAClC,OACEhvC,EAAGnQ,KAAKsa,YAAYnK,EACpBC,EAAGpQ,KAAKsa,YAAYlK,IASxBtN,EAAQyO,UAAUsI,UAAY,SAASC,GACrC9Z,KAAK8Z,MAAQA,GAQfhX,EAAQyO,UAAUwtC,UAAY,WAC5B,MAAO/+C,MAAK8Z,OAUdhX,EAAQyO,UAAUouC,qBAAuB,SAASxvC,GAChD,OAAQA,EAAInQ,KAAKsa,YAAYnK,GAAKnQ,KAAK8Z,OAUzChX,EAAQyO,UAAUquC,qBAAuB,SAASzvC,GAChD,MAAOA,GAAInQ,KAAK8Z,MAAQ9Z,KAAKsa,YAAYnK,GAU3CrN,EAAQyO,UAAUsuC,qBAAuB,SAASzvC,GAChD,OAAQA,EAAIpQ,KAAKsa,YAAYlK,GAAKpQ,KAAK8Z,OAUzChX,EAAQyO,UAAUuuC,qBAAuB,SAAS1vC,GAChD,MAAOA,GAAIpQ,KAAK8Z,MAAQ9Z,KAAKsa,YAAYlK,GAU3CtN,EAAQyO,UAAUqvC,YAAc,SAASx+B,GACvC,OAAQjS,EAAEnQ,KAAK4/C,qBAAqBx9B,EAAIjS,GAAGC,EAAEpQ,KAAK8/C,qBAAqB19B,EAAIhS,KAS7EtN,EAAQyO,UAAU+uC,YAAc,SAASl+B,GACvC,OAAQjS,EAAEnQ,KAAK2/C,qBAAqBv9B,EAAIjS,GAAGC,EAAEpQ,KAAK6/C,qBAAqBz9B,EAAIhS,KAU7EtN,EAAQyO,UAAUkyC,WAAa,SAAS7/B,EAAI8/B,GACvBx9C,SAAfw9C,IACFA,GAAa,EAIf,IAAIjQ,GAAQzzC,KAAKyzC,MACbnJ,IAEJ,KAAK,GAAIjqC,KAAMozC,GACTA,EAAMjuC,eAAenF,KACvBozC,EAAMpzC,GAAIsjD,eAAe3jD,KAAK8Z,MAAM9Z,KAAK65C,cAAc75C,KAAK85C,mBACxDrG,EAAMpzC,GAAI++C,aACZ9U,EAAS1iC,KAAKvH,IAGVozC,EAAMpzC,GAAIujD,UAAYF,IACxBjQ,EAAMpzC,GAAIwjD,KAAKjgC,GAOvB,KAAK,GAAI/Y,GAAI,EAAGi5C,EAAOxZ,EAASjlC,OAAYy+C,EAAJj5C,EAAUA,KAC5C4oC,EAAMnJ,EAASz/B,IAAI+4C,UAAYF,IACjCjQ,EAAMnJ,EAASz/B,IAAIg5C,KAAKjgC,IAW9B9gB,EAAQyO,UAAUwyC,WAAa,SAASngC,GACtC,GAAIwwB,GAAQp0C,KAAKo0C,KACjB,KAAK,GAAI/zC,KAAM+zC,GACb,GAAIA,EAAM5uC,eAAenF,GAAK,CAC5B,GAAIohD,GAAOrN,EAAM/zC,EACjBohD,GAAK3jB,SAAS99B,KAAK8Z,OACf2nC,EAAKC,WACPtN,EAAM/zC,GAAIwjD,KAAKjgC,KAYvB9gB,EAAQyO,UAAUyyC,kBAAoB,SAASpgC,GAC7C,GAAIwwB,GAAQp0C,KAAKo0C,KACjB,KAAK,GAAI/zC,KAAM+zC,GACTA,EAAM5uC,eAAenF,IACvB+zC,EAAM/zC,GAAI2jD,kBAAkBpgC,IASlC9gB,EAAQyO,UAAUyrC,WAAa,WACgB,GAAzCh9C,KAAKwzC,UAAU0D,wBACjBl3C,KAAKikD,qBAKP,KADA,GAAI7uC,GAAQ,EACLpV,KAAK46C,QAAUxlC,EAAQpV,KAAKwzC,UAAUiE,yBAC3Cz3C,KAAKkkD,eACL9uC,GAEFpV,MAAK+6C,YAAW,GAAM,GACuB,GAAzC/6C,KAAKwzC,UAAU0D,wBACjBl3C,KAAKmkD,sBAEPnkD,KAAK6qB,KAAK,cAAcu5B,WAAWhvC,KASrCtS,EAAQyO,UAAU0yC,oBAAsB,WACtC,GAAIxQ,GAAQzzC,KAAKyzC,KACjB,KAAK,GAAIpzC,KAAMozC,GACTA,EAAMjuC,eAAenF,IACJ,MAAfozC,EAAMpzC,GAAI8P,GAA4B,MAAfsjC,EAAMpzC,GAAI+P,IACnCqjC,EAAMpzC,GAAIgkD,UAAUl0C,EAAIsjC,EAAMpzC,GAAIm/C,OAClC/L,EAAMpzC,GAAIgkD,UAAUj0C,EAAIqjC,EAAMpzC,GAAIo/C,OAClChM,EAAMpzC,GAAIm/C,QAAS,EACnB/L,EAAMpzC,GAAIo/C,QAAS,IAW3B38C,EAAQyO,UAAU4yC,oBAAsB,WACtC,GAAI1Q,GAAQzzC,KAAKyzC,KACjB,KAAK,GAAIpzC,KAAMozC,GACTA,EAAMjuC,eAAenF,IACM,MAAzBozC,EAAMpzC,GAAIgkD,UAAUl0C,IACtBsjC,EAAMpzC,GAAIm/C,OAAS/L,EAAMpzC,GAAIgkD,UAAUl0C,EACvCsjC,EAAMpzC,GAAIo/C,OAAShM,EAAMpzC,GAAIgkD,UAAUj0C,IAa/CtN,EAAQyO,UAAU+yC,UAAY,SAASC,GACrC,GAAI9Q,GAAQzzC,KAAKyzC,KACjB,KAAK,GAAIpzC,KAAMozC,GACb,GAAIA,EAAMjuC,eAAenF,IAAOozC,EAAMpzC,GAAImkD,SAASD,GACjD,OAAO,CAGX,QAAO,GAUTzhD,EAAQyO,UAAUkzC,mBAAqB,WACrC,GAEI5I,GAFA/rB,EAAW9vB,KAAKgzC,wBAChBS,EAAQzzC,KAAKyzC,MAEbiR,GAAe,CAEnB,IAAI1kD,KAAKwzC,UAAU+D,YAAc,EAC/B,IAAKsE,IAAUpI,GACTA,EAAMjuC,eAAeq2C,KACvBpI,EAAMoI,GAAQ8I,oBAAoB70B,EAAU9vB,KAAKwzC,UAAU+D,aAC3DmN,GAAe,OAKnB,KAAK7I,IAAUpI,GACTA,EAAMjuC,eAAeq2C,KACvBpI,EAAMoI,GAAQ+I,aAAa90B,GAC3B40B,GAAe,EAKrB,IAAoB,GAAhBA,EAAsB,CACxB,GAAIG,GAAgB7kD,KAAKwzC,UAAUgE,YAAc5yC,KAAK6H,IAAIzM,KAAK8Z,MAAM,IACjE+qC,GAAgB,GAAI7kD,KAAKwzC,UAAU+D,YACrCv3C,KAAK46C,QAAS,GAGd56C,KAAK46C,OAAS56C,KAAKskD,UAAUO,GACV,GAAf7kD,KAAK46C,QACP56C,KAAK6qB,KAAK,cAAcu5B,WAAW,OAErCpkD,KAAK46C,OAAS56C,KAAK46C,QAAU56C,KAAK60C,oBAWxC/xC,EAAQyO,UAAU2yC,aAAe,WAC1BlkD,KAAKw5C,kBACJx5C,KAAK46C,SACP56C,KAAK8kD,sBAAsB,+BAC3B9kD,KAAK8kD,sBAAsB,sBACvB9kD,KAAKwzC,UAAU2D,cACjBn3C,KAAK+kD,mBAAmB,sBAE1B/kD,KAAK87C,YAAY97C,KAAKu7C,eAY5Bz4C,EAAQyO,UAAUyzC,eAAiB,WAEjChlD,KAAK66C,MAAQ30C,OAEblG,KAAKilD,oBAGLjlD,KAAK0O,OAGL,IAAIw2C,GAAkBlhD,KAAK01B,MACvByrB,EAAW,CACfnlD,MAAKkkD,cAEL,KADA,GAAIkB,GAAephD,KAAK01B,MAAQwrB,EACzBE,EAAe,IAAKplD,KAAK6yC,eAAiB7yC,KAAK8yC,aAAeqS,EAAWnlD,KAAK+yC,0BACnF/yC,KAAKkkD,eACLkB,EAAephD,KAAK01B,MAAQwrB,EAC5BC,GAIF,IAAIrS,GAAa9uC,KAAK01B,KACtB15B,MAAK84C,UACL94C,KAAK8yC,WAAa9uC,KAAK01B,MAAQoZ,GAIX,mBAAX5rC,UACTA,OAAOm+C,sBAAwBn+C,OAAOm+C,uBAAyBn+C,OAAOo+C,0BACvCp+C,OAAOq+C,6BAA+Br+C,OAAOs+C,yBAM9E1iD,EAAQyO,UAAU7C,MAAQ,WACxB,GAAI1O,KAAK46C,QAA6B,GAAnB56C,KAAK+4C,YAAsC,GAAnB/4C,KAAKg5C,YAAyC,GAAtBh5C,KAAKi5C,eACtE,IAAKj5C,KAAK66C,MAAO,CACf,GAAI4K,GAAK78C,UAAUC,UAAU68C,cAEzBC,GAAkB,CACQ,KAA1BF,EAAG99C,QAAQ,YACbg+C,GAAkB,EAEa,IAAxBF,EAAG99C,QAAQ,WACd89C,EAAG99C,QAAQ,WAAa,KAC1Bg+C,GAAkB,GAKpB3lD,KAAK66C,MADgB,GAAnB8K,EACWz+C,OAAOqkB,WAAWvrB,KAAKglD,eAAe/yB,KAAKjyB,MAAOA,KAAK6yC,gBAGvD3rC,OAAOm+C,sBAAsBrlD,KAAKglD,eAAe/yB,KAAKjyB,MAAOA,KAAK6yC,qBAKnF7yC,MAAK84C,WAUTh2C,EAAQyO,UAAU0zC,kBAAoB,WACpC,GAAuB,GAAnBjlD,KAAK+4C,YAAsC,GAAnB/4C,KAAKg5C,WAAiB,CAChD,GAAI1+B,GAActa,KAAKm/C,iBACvBn/C,MAAKu5C,gBAAgBj/B,EAAYnK,EAAEnQ,KAAK+4C,WAAYz+B,EAAYlK,EAAEpQ,KAAKg5C,YAEzE,GAA0B,GAAtBh5C,KAAKi5C,cAAoB,CAC3B,GAAIhwB,IACF9Y,EAAGnQ,KAAKmc,MAAMC,OAAOC,YAAc,EACnCjM,EAAGpQ,KAAKmc,MAAMC,OAAOsF,aAAe,EAEtC1hB,MAAKmgD,MAAMngD,KAAK8Z,OAAO,EAAI9Z,KAAKi5C,eAAgBhwB,KAQpDnmB,EAAQyO,UAAUq0C,aAAe,WACF,GAAzB5lD,KAAKw5C,iBACPx5C,KAAKw5C,kBAAmB,GAGxBx5C,KAAKw5C,kBAAmB,EACxBx5C,KAAK0O,UAWT5L,EAAQyO,UAAUmsC,uBAAyB,SAASzB,GAIlD,GAHqB/1C,SAAjB+1C,IACFA,GAAe,GAE0B,GAAvCj8C,KAAKwzC,UAAU2D,aAAaxpC,SAA0D,GAAvC3N,KAAKwzC,UAAU2D,aAAaC,QAAiB,CAC9Fp3C,KAAK8iD,oBAEL,KAAK,GAAIjH,KAAU77C,MAAKgjD,QAAiB,QAAS,MAC5ChjD,KAAKgjD,QAAiB,QAAS,MAAEx9C,eAAeq2C,IACW31C,SAAzDlG,KAAKo0C,MAAMp0C,KAAKgjD,QAAiB,QAAS,MAAEnH,WACvC77C,MAAKgjD,QAAiB,QAAS,MAAEnH,OAK3C,CAEH77C,KAAKgjD,QAAiB,QAAS,QAC/B,KAAK,GAAI9B,KAAUlhD,MAAKo0C,MAClBp0C,KAAKo0C,MAAM5uC,eAAe07C,KAC5BlhD,KAAKo0C,MAAM8M,GAAQ2E,QAAS,EAC5B7lD,KAAKo0C,MAAM8M,GAAQ6B,IAAM,MAM/B/iD,KAAKoiD,0BACAnG,IACHj8C,KAAK46C,QAAS,EACd56C,KAAK0O,UAWT5L,EAAQyO,UAAUuxC,mBAAqB,WACrC,GAA2C,GAAvC9iD,KAAKwzC,UAAU2D,aAAaxpC,SAA0D,GAAvC3N,KAAKwzC,UAAU2D,aAAaC,QAC7E,IAAK,GAAI8J,KAAUlhD,MAAKo0C,MACtB,GAAIp0C,KAAKo0C,MAAM5uC,eAAe07C,GAAS,CACrC,GAAIO,GAAOzhD,KAAKo0C,MAAM8M,EACtB,IAAgB,MAAZO,EAAKsB,IAAa,CACpBtB,EAAKoE,QAAS,CACd,IAAIhK,GAAS,UAAU5pC,OAAOwvC,EAAKphD,GACnCL,MAAKgjD,QAAiB,QAAS,MAAEnH,GAAU,GAAI14C,IACtC9C,GAAGw7C,EACFiK,KAAK,EACLlS,MAAM,SACNC,MAAM,GACNkS,mBAAmB,SACb/lD,KAAKwzC,WACrBiO,EAAKsB,IAAM/iD,KAAKgjD,QAAiB,QAAS,MAAEnH,GAC5C4F,EAAKsB,IAAIiD,aAAevE,EAAKphD,GAC7BohD,EAAKwE,wBAYfnjD,EAAQyO,UAAUohC,wBAA0B,WAC1C,IAAK,GAAIuT,KAAShL,GACZA,EAAY11C,eAAe0gD,KAC7BpjD,EAAQyO,UAAU20C,GAAShL,EAAYgL,KAQ7CpjD,EAAQyO,UAAU40C,cAAgB,WAChC,GAAIC,KACJ,KAAK,GAAIvK,KAAU77C,MAAKyzC,MACtB,GAAIzzC,KAAKyzC,MAAMjuC,eAAeq2C,GAAS,CACrC,GAAIL,GAAOx7C,KAAKyzC,MAAMoI,GAClBwK,GAAkBrmD,KAAKyzC,MAAM+L,OAC7B8G,GAAkBtmD,KAAKyzC,MAAMgM,QAC7Bz/C,KAAKk6C,UAAUjpC,MAAM4qC,GAAQ1rC,GAAKvL,KAAK+lB,MAAM6wB,EAAKrrC,IAAMnQ,KAAKk6C,UAAUjpC,MAAM4qC,GAAQzrC,GAAKxL,KAAK+lB,MAAM6wB,EAAKprC,KAC5Gg2C,EAAUx+C,MAAMvH,GAAGw7C,EAAO1rC,EAAEvL,KAAK+lB,MAAM6wB,EAAKrrC,GAAGC,EAAExL,KAAK+lB,MAAM6wB,EAAKprC,GAAGi2C,eAAeA,EAAeC,eAAeA,IAIvHtmD,KAAKk6C,UAAUnnC,OAAOqzC,IAUxBtjD,EAAQyO,UAAUg1C,YAAc,SAAU1K,EAAQK,GAChD,GAAIl8C,KAAKyzC,MAAMjuC,eAAeq2C,GAAS,CACnB31C,SAAdg2C,IACFA,EAAYl8C,KAAK++C,YAEnB,IAAIyH,IAAer2C,EAAGnQ,KAAKyzC,MAAMoI,GAAQ1rC,EAAGC,EAAGpQ,KAAKyzC,MAAMoI,GAAQzrC,GAE9Dq2C,EAAgBvK,CACpBl8C,MAAK6Z,UAAU4sC,EAEf,IAAIC,GAAe1mD,KAAKsgD,aAAanwC,EAAE,GAAMnQ,KAAKmc,MAAMC,OAAOxL,MAAMR,EAAE,GAAMpQ,KAAKmc,MAAMC,OAAOvL,SAC3FyJ,EAActa,KAAKm/C,kBAEnBwH,GAAsBx2C,EAAEu2C,EAAav2C,EAAIq2C,EAAar2C,EAChCC,EAAEs2C,EAAat2C,EAAIo2C,EAAap2C,EAE1DpQ,MAAKu5C,gBAAgBj/B,EAAYnK,EAAIs2C,EAAgBE,EAAmBx2C,EACnDmK,EAAYlK,EAAIq2C,EAAgBE,EAAmBv2C,GACxEpQ,KAAKse,aAGL3P,SAAQC,IAAI,iCAIhB/O,EAAOD,QAAUkD,GAKb,SAASjD,EAAQD,EAASM,GAoB9B,QAAS8C,GAAMy/C,EAAY1/C,EAASywC,GAClC,IAAKzwC,EACH,KAAM,qBAER/C,MAAK+C,QAAUA,EAGf/C,KAAK+jB,SAAWyvB,EAAUY,MAAMrwB,SAChC/jB,KAAKgkB,SAAWwvB,EAAUY,MAAMpwB,SAGhChkB,KAAKK,GAAS6F,OACdlG,KAAK4mD,OAAS1gD,OACdlG,KAAK6mD,KAAS3gD,OACdlG,KAAKwQ,MAASgjC,EAAUY,MAAM5jC,MAC9BxQ,KAAKo/B,MAASl5B,OACdlG,KAAK4Q,MAAS4iC,EAAUY,MAAMxjC,MAC9B5Q,KAAKq0C,yBAA2Bb,EAAUY,MAAMC,yBAChDr0C,KAAK8mD,cAAgB9mD,KAAK4Q,MAAQ5Q,KAAKq0C,yBACvCr0C,KAAKs0C,WAAad,EAAUY,MAAME,WAClCt0C,KAAK6G,MAASX,OACdlG,KAAKqF,OAASmuC,EAAUsB,QAAQK,aAChCn1C,KAAK+mD,cAAe,EACpB/mD,KAAKsqC,UAAW,EAChBtqC,KAAKuL,OAAQ,EACbvL,KAAKm3C,aAAe3D,EAAU2D,aAC9Bn3C,KAAKs3C,oBAAsB9D,EAAU8D,oBACrCt3C,KAAKw0C,iBAAmBhB,EAAUY,MAAMI,iBACxCx0C,KAAK40C,aAAepB,EAAUY,MAAMQ,aAEpC50C,KAAKkmB,KAAO,KACZlmB,KAAKmmB,GAAK,KACVnmB,KAAK+iD,IAAM,KAIX/iD,KAAKgnD,kBACLhnD,KAAKinD,gBAELjnD,KAAK0hD,WAAY,EAKjB1hD,KAAKy0C,KAAO9zC,EAAKqE,UAAWwuC,EAAUY,MAAMK,MAE5Cz0C,KAAKuK,OAAeA,MAAMipC,EAAUY,MAAM7pC,MAAMA,MAC5Be,UAAUkoC,EAAUY,MAAM7pC,MAAMe,UAChCC,MAAMioC,EAAUY,MAAM7pC,MAAMgB,OAChDvL,KAAKknD,YAAc,EACnBlnD,KAAKmnD,aAAc,EAEnBnnD,KAAKwiD,cAAcC,EAAYjP,GAE/BxzC,KAAKonD,qBAAsB,EAC3BpnD,KAAKqnD,cAAgBnhC,KAAK,KAAMC,GAAG,KAAMmhC,cACzCtnD,KAAKunD,cAAgB,KA1EvB,GAAI5mD,GAAOT,EAAoB,GAC3BiD,EAAOjD,EAAoB,GAiF/B8C,GAAKuO,UAAUixC,cAAgB,SAASC,EAAYjP,GAClD,GAAKiP,EAmEL,OA/DwBv8C,SAApBu8C,EAAWv8B,OAA+BlmB,KAAK4mD,OAASnE,EAAWv8B,MACjDhgB,SAAlBu8C,EAAWt8B,KAA+BnmB,KAAK6mD,KAAOpE,EAAWt8B,IAE/CjgB,SAAlBu8C,EAAWpiD,KAA+BL,KAAKK,GAAKoiD,EAAWpiD,IAC1C6F,SAArBu8C,EAAWjyC,QAA+BxQ,KAAKwQ,MAAQiyC,EAAWjyC,OAC7CtK,SAArBu8C,EAAWl9B,QAA+BvlB,KAAKulB,MAAQk9B,EAAWl9B,OAElEvlB,KAAKulB,QACPvlB,KAAKg0C,SAAWR,EAAUY,MAAMJ,SAChCh0C,KAAKi0C,SAAWT,EAAUY,MAAMH,SAChCj0C,KAAK+zC,UAAYP,EAAUY,MAAML,UACjC/zC,KAAKu0C,SAAWf,EAAUY,MAAMG,SAEHruC,SAAzBu8C,EAAW1O,YAA2B/zC,KAAK+zC,UAAY0O,EAAW1O,WAC1C7tC,SAAxBu8C,EAAWzO,WAA2Bh0C,KAAKg0C,SAAWyO,EAAWzO,UACzC9tC,SAAxBu8C,EAAWxO,WAA2Bj0C,KAAKi0C,SAAWwO,EAAWxO,UACzC/tC,SAAxBu8C,EAAWlO,WAA2Bv0C,KAAKu0C,SAAWkO,EAAWlO,WAG9CruC,SAArBu8C,EAAWrjB,QAA6Bp/B,KAAKo/B,MAAQqjB,EAAWrjB,OAC3Cl5B,SAArBu8C,EAAW7xC,QAA6B5Q,KAAK4Q,MAAQ6xC,EAAW7xC,OACxB1K,SAAxCu8C,EAAWpO,2BAC6Br0C,KAAKq0C,yBAA2BoO,EAAWpO,0BACzDnuC,SAA1Bu8C,EAAWnO,aAA6Bt0C,KAAKs0C,WAAamO,EAAWnO,YAChDpuC,SAArBu8C,EAAW57C,QAA6B7G,KAAK6G,MAAQ47C,EAAW57C,OAC1CX,SAAtBu8C,EAAWp9C,SAA6BrF,KAAKqF,OAASo9C,EAAWp9C,OACzBrF,KAAK+mD,cAAe,GAG5B7gD,SAAhCu8C,EAAWjO,mBAAuCx0C,KAAKw0C,iBAAmBiO,EAAWjO,kBAEzDtuC,SAA5Bu8C,EAAW7N,eAAmC50C,KAAK40C,aAAe6N,EAAW7N,cAK7E6N,EAAWhO,OACkBvuC,SAA3Bu8C,EAAWhO,KAAKpvC,SAA0BrF,KAAKy0C,KAAKpvC,OAASo9C,EAAWhO,KAAKpvC,QACrDa,SAAxBu8C,EAAWhO,KAAKC,MAA0B10C,KAAKy0C,KAAKC,IAAM+N,EAAWhO,KAAKC,KAC5CxuC,SAA9Bu8C,EAAWhO,KAAKE,YAA0B30C,KAAKy0C,KAAKE,UAAY8N,EAAWhO,KAAKE,YAG7DzuC,SAArBu8C,EAAWl4C,QACT5J,EAAKkD,SAAS4+C,EAAWl4C,QAC3BvK,KAAKuK,MAAMA,MAAQk4C,EAAWl4C,MAC9BvK,KAAKuK,MAAMe,UAAYm3C,EAAWl4C,QAGHrE,SAA3Bu8C,EAAWl4C,MAAMA,QAA0BvK,KAAKuK,MAAMA,MAAQk4C,EAAWl4C,MAAMA,OAChDrE,SAA/Bu8C,EAAWl4C,MAAMe,YAA0BtL,KAAKuK,MAAMe,UAAYm3C,EAAWl4C,MAAMe,WACxDpF,SAA3Bu8C,EAAWl4C,MAAMgB,QAA0BvL,KAAKuK,MAAMgB,MAAQk3C,EAAWl4C,MAAMgB,SAKvFvL,KAAKszC,UAELtzC,KAAKknD,WAAalnD,KAAKknD,YAAoChhD,SAArBu8C,EAAW7xC,MACjD5Q,KAAKmnD,YAAcnnD,KAAKmnD,aAAsCjhD,SAAtBu8C,EAAWp9C,OAEnDrF,KAAK8mD,cAAgB9mD,KAAK4Q,MAAQ5Q,KAAKq0C,yBAG/Br0C,KAAKwQ,OACX,IAAK,OAAiBxQ,KAAK6jD,KAAO7jD,KAAKwnD,SAAW,MAClD,KAAK,QAAiBxnD,KAAK6jD,KAAO7jD,KAAKynD,UAAY,MACnD,KAAK,eAAiBznD,KAAK6jD,KAAO7jD,KAAK0nD,gBAAkB,MACzD,KAAK,YAAiB1nD,KAAK6jD,KAAO7jD,KAAK2nD,aAAe,MACtD,SAAsB3nD,KAAK6jD,KAAO7jD,KAAKwnD,YAO3CxkD,EAAKuO,UAAU+hC,QAAU,WACvBtzC,KAAK4iD,aAEL5iD,KAAKkmB,KAAOlmB,KAAK+C,QAAQ0wC,MAAMzzC,KAAK4mD,SAAW,KAC/C5mD,KAAKmmB,GAAKnmB,KAAK+C,QAAQ0wC,MAAMzzC,KAAK6mD,OAAS,KAC3C7mD,KAAK0hD,UAAa1hD,KAAKkmB,MAAQlmB,KAAKmmB,GAEhCnmB,KAAK0hD,WACP1hD,KAAKkmB,KAAK0hC,WAAW5nD,MACrBA,KAAKmmB,GAAGyhC,WAAW5nD,QAGfA,KAAKkmB,MACPlmB,KAAKkmB,KAAK2hC,WAAW7nD,MAEnBA,KAAKmmB,IACPnmB,KAAKmmB,GAAG0hC,WAAW7nD,QAQzBgD,EAAKuO,UAAUqxC,WAAa,WACtB5iD,KAAKkmB,OACPlmB,KAAKkmB,KAAK2hC,WAAW7nD,MACrBA,KAAKkmB,KAAO,MAEVlmB,KAAKmmB,KACPnmB,KAAKmmB,GAAG0hC,WAAW7nD,MACnBA,KAAKmmB,GAAK,MAGZnmB,KAAK0hD,WAAY,GAQnB1+C,EAAKuO,UAAUgwC,SAAW,WACxB,MAA6B,kBAAfvhD,MAAKo/B,MAAuBp/B,KAAKo/B,QAAUp/B,KAAKo/B,OAQhEp8B,EAAKuO,UAAUuB,SAAW,WACxB,MAAO9S,MAAK6G,OASd7D,EAAKuO,UAAU0xC,cAAgB,SAASl4C,EAAK0B,GAC3C,IAAKzM,KAAKknD,YAA6BhhD,SAAflG,KAAK6G,MAAqB,CAChD,GAAIiT,IAAS9Z,KAAKgkB,SAAWhkB,KAAK+jB,WAAatX,EAAM1B,EACrD/K,MAAK4Q,OAAS5Q,KAAK6G,MAAQkE,GAAO+O,EAAQ9Z,KAAK+jB,WAUnD/gB,EAAKuO,UAAUsyC,KAAO,WACpB,KAAM,uCAQR7gD,EAAKuO,UAAUiwC,kBAAoB,SAAS3hC,GAC1C,GAAI7f,KAAK0hD,UAAW,CAClB,GAAIn1B,GAAU,GACVu7B,EAAQ9nD,KAAKkmB,KAAK/V,EAClB43C,EAAQ/nD,KAAKkmB,KAAK9V,EAClB43C,EAAMhoD,KAAKmmB,GAAGhW,EACd83C,EAAMjoD,KAAKmmB,GAAG/V,EACd83C,EAAOroC,EAAI5Y,KACXkhD,EAAOtoC,EAAIxY,IAEX4gB,EAAOjoB,KAAKooD,mBAAmBN,EAAOC,EAAOC,EAAKC,EAAKC,EAAMC,EAEjE,OAAe57B,GAAPtE,EAGR,OAAO,GAIXjlB,EAAKuO,UAAU82C,UAAY,WACzB,GAAIC,GAAWtoD,KAAKuK,KAgBpB,OAfyB,MAArBvK,KAAK40C,aACP0T,GACEh9C,UAAWtL,KAAKmmB,GAAG5b,MAAMe,UAAUD,OACnCE,MAAOvL,KAAKmmB,GAAG5b,MAAMgB,MAAMF,OAC3Bd,MAAOvK,KAAKmmB,GAAG5b,MAAMc,SAGK,QAArBrL,KAAK40C,cAA+C,GAArB50C,KAAK40C,gBAC3C0T,GACEh9C,UAAWtL,KAAKkmB,KAAK3b,MAAMe,UAAUD,OACrCE,MAAOvL,KAAKkmB,KAAK3b,MAAMgB,MAAMF,OAC7Bd,MAAOvK,KAAKkmB,KAAK3b,MAAMc,SAIN,GAAjBrL,KAAKsqC,SAA4Bge,EAASh9C,UACvB,GAAdtL,KAAKuL,MAAuB+8C,EAAS/8C,MACT+8C,EAAS/9C,OAWhDvH,EAAKuO,UAAUi2C,UAAY,SAAS5jC,GAKlC,GAHAA,EAAIY,YAAcxkB,KAAKqoD,YACvBzkC,EAAIO,UAAcnkB,KAAKuoD,gBAEnBvoD,KAAKkmB,MAAQlmB,KAAKmmB,GAAI,CAExB,GAGI7V,GAHAyyC,EAAM/iD,KAAKwoD,MAAM5kC,EAIrB,IAAI5jB,KAAKulB,MAAO,CACd,GAAiC,GAA7BvlB,KAAKm3C,aAAaxpC,SAA0B,MAAPo1C,EAAa,CACpD,GAAI0F,GAAY,IAAK,IAAKzoD,KAAKkmB,KAAK/V,EAAI4yC,EAAI5yC,GAAK,IAAKnQ,KAAKmmB,GAAGhW,EAAI4yC,EAAI5yC,IAClEu4C,EAAY,IAAK,IAAK1oD,KAAKkmB,KAAK9V,EAAI2yC,EAAI3yC,GAAK,IAAKpQ,KAAKmmB,GAAG/V,EAAI2yC,EAAI3yC,GACtEE,IAASH,EAAEs4C,EAAWr4C,EAAEs4C,OAGxBp4C,GAAQtQ,KAAK2oD,aAAa,GAE5B3oD,MAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOjV,EAAMH,EAAGG,EAAMF,QAG3C,CACH,GAAID,GAAGC,EACHoY,EAASxoB,KAAKqF,OAAS,EACvBm2C,EAAOx7C,KAAKkmB,IACXs1B,GAAK5qC,OACR4qC,EAAKqN,OAAOjlC,GAEV43B,EAAK5qC,MAAQ4qC,EAAK3qC,QACpBV,EAAIqrC,EAAKrrC,EAAIqrC,EAAK5qC,MAAQ,EAC1BR,EAAIorC,EAAKprC,EAAIoY,IAGbrY,EAAIqrC,EAAKrrC,EAAIqY,EACbpY,EAAIorC,EAAKprC,EAAIorC,EAAK3qC,OAAS,GAE7B7Q,KAAK8oD,QAAQllC,EAAKzT,EAAGC,EAAGoY,GACxBlY,EAAQtQ,KAAK+oD,eAAe54C,EAAGC,EAAGoY,EAAQ,IAC1CxoB,KAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOjV,EAAMH,EAAGG,EAAMF,KAUhDpN,EAAKuO,UAAUg3C,cAAgB,WAC7B,MAAqB,IAAjBvoD,KAAKsqC,SACA1lC,KAAKmG,IAAI/K,KAAK8mD,cAAe9mD,KAAKgkB,UAAUhkB,KAAKgpD,gBAGtC,GAAdhpD,KAAKuL,MACA3G,KAAKmG,IAAI/K,KAAKs0C,WAAYt0C,KAAKgkB,UAAUhkB,KAAKgpD,gBAG9ChpD,KAAK4Q,MAAM5Q,KAAKgpD,iBAK7BhmD,EAAKuO,UAAU03C,mBAAqB,WAClC,GAAIC,GAAO,KACPC,EAAO,KACP/M,EAASp8C,KAAKm3C,aAAaE,UAC3B/wC,EAAOtG,KAAKm3C,aAAa7wC,KAEzBmV,EAAK7W,KAAK+iB,IAAI3nB,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GACpCuL,EAAK9W,KAAK+iB,IAAI3nB,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,EA2JxC,OA1JY,YAAR9J,GAA8B,iBAARA,EACpB1B,KAAK+iB,IAAI3nB,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GAAKvL,KAAK+iB,IAAI3nB,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,IACjEpQ,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,EACpBpQ,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GACxB+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS1gC,EAC9BytC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS1gC,GAEvB1b,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,IAC7B+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS1gC,EAC9BytC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS1gC,GAGzB1b,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,IACzBpQ,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GACxB+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS1gC,EAC9BytC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS1gC,GAEvB1b,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,IAC7B+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS1gC,EAC9BytC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS1gC,IAGtB,YAARpV,IACF4iD,EAAY9M,EAAS1gC,EAAdD,EAAmBzb,KAAKkmB,KAAK/V,EAAI+4C,IAGnCtkD,KAAK+iB,IAAI3nB,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GAAKvL,KAAK+iB,IAAI3nB,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,KACtEpQ,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,EACpBpQ,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GACxB+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS3gC,GAEvBzb,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,IAC7B+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS3gC,GAGzBzb,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,IACzBpQ,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GACxB+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS3gC,GAEvBzb,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,IAC7B+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS3gC,IAGtB,YAARnV,IACF6iD,EAAY/M,EAAS3gC,EAAdC,EAAmB1b,KAAKkmB,KAAK9V,EAAI+4C,IAI7B,iBAAR7iD,EACH1B,KAAK+iB,IAAI3nB,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GAAKvL,KAAK+iB,IAAI3nB,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,IACrE84C,EAAOlpD,KAAKkmB,KAAK/V,EAEfg5C,EADEnpD,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,EACjBpQ,KAAKmmB,GAAG/V,GAAK,EAAEgsC,GAAU1gC,EAGzB1b,KAAKmmB,GAAG/V,GAAK,EAAEgsC,GAAU1gC,GAG3B9W,KAAK+iB,IAAI3nB,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GAAKvL,KAAK+iB,IAAI3nB,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,KAExE84C,EADElpD,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,EACjBnQ,KAAKmmB,GAAGhW,GAAK,EAAEisC,GAAU3gC,EAGzBzb,KAAKmmB,GAAGhW,GAAK,EAAEisC,GAAU3gC,EAElC0tC,EAAOnpD,KAAKkmB,KAAK9V,GAGJ,cAAR9J,GAEL4iD,EADElpD,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,EACjBnQ,KAAKmmB,GAAGhW,GAAK,EAAEisC,GAAU3gC,EAGzBzb,KAAKmmB,GAAGhW,GAAK,EAAEisC,GAAU3gC,EAElC0tC,EAAOnpD,KAAKkmB,KAAK9V,GAEF,YAAR9J,GACP4iD,EAAOlpD,KAAKkmB,KAAK/V,EAEfg5C,EADEnpD,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,EACjBpQ,KAAKmmB,GAAG/V,GAAK,EAAEgsC,GAAU1gC,EAGzB1b,KAAKmmB,GAAG/V,GAAK,EAAEgsC,GAAU1gC,GAI9B9W,KAAK+iB,IAAI3nB,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GAAKvL,KAAK+iB,IAAI3nB,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,GACjEpQ,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,EACpBpQ,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GAExB+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS1gC,EAC9BytC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS1gC,EAC9BwtC,EAAOlpD,KAAKmmB,GAAGhW,EAAI+4C,EAAOlpD,KAAKmmB,GAAGhW,EAAI+4C,GAE/BlpD,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,IAE7B+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS1gC,EAC9BytC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS1gC,EAC9BwtC,EAAOlpD,KAAKmmB,GAAGhW,EAAI+4C,EAAOlpD,KAAKmmB,GAAGhW,EAAG+4C,GAGhClpD,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,IACzBpQ,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GAExB+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS1gC,EAC9BytC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS1gC,EAC9BwtC,EAAOlpD,KAAKmmB,GAAGhW,EAAI+4C,EAAOlpD,KAAKmmB,GAAGhW,EAAI+4C,GAE/BlpD,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,IAE7B+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS1gC,EAC9BytC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS1gC,EAC9BwtC,EAAOlpD,KAAKmmB,GAAGhW,EAAI+4C,EAAOlpD,KAAKmmB,GAAGhW,EAAI+4C,IAInCtkD,KAAK+iB,IAAI3nB,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GAAKvL,KAAK+iB,IAAI3nB,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,KACtEpQ,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,EACpBpQ,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GAExB+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKmmB,GAAG/V,EAAI+4C,EAAOnpD,KAAKmmB,GAAG/V,EAAI+4C,GAE/BnpD,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,IAE7B+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKmmB,GAAG/V,EAAI+4C,EAAOnpD,KAAKmmB,GAAG/V,EAAI+4C,GAGjCnpD,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,IACzBpQ,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GAExB+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKmmB,GAAG/V,EAAI+4C,EAAOnpD,KAAKmmB,GAAG/V,EAAI+4C,GAE/BnpD,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,IAE7B+4C,EAAOlpD,KAAKkmB,KAAK/V,EAAIisC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKkmB,KAAK9V,EAAIgsC,EAAS3gC,EAC9B0tC,EAAOnpD,KAAKmmB,GAAG/V,EAAI+4C,EAAOnpD,KAAKmmB,GAAG/V,EAAI+4C,MAOtCh5C,EAAE+4C,EAAM94C,EAAE+4C,IAQpBnmD,EAAKuO,UAAUi3C,MAAQ,SAAU5kC,GAI/B,GAFAA,EAAIa,YACJb,EAAIc,OAAO1kB,KAAKkmB,KAAK/V,EAAGnQ,KAAKkmB,KAAK9V,GACD,GAA7BpQ,KAAKm3C,aAAaxpC,QAAiB,CACrC,GAAiC,GAA7B3N,KAAKm3C,aAAaC,QAAkB,CACtC,GAAI2L,GAAM/iD,KAAKipD,oBACf,OAAa,OAATlG,EAAI5yC,GACNyT,EAAIe,OAAO3kB,KAAKmmB,GAAGhW,EAAGnQ,KAAKmmB,GAAG/V,GAC9BwT,EAAIlH,SACG,OAKPkH,EAAIwlC,iBAAiBrG,EAAI5yC,EAAE4yC,EAAI3yC,EAAEpQ,KAAKmmB,GAAGhW,EAAGnQ,KAAKmmB,GAAG/V,GACpDwT,EAAIlH,SACGqmC,GAMT,MAFAn/B,GAAIwlC,iBAAiBppD,KAAK+iD,IAAI5yC,EAAEnQ,KAAK+iD,IAAI3yC,EAAEpQ,KAAKmmB,GAAGhW,EAAGnQ,KAAKmmB,GAAG/V,GAC9DwT,EAAIlH,SACG1c,KAAK+iD,IAMd,MAFAn/B,GAAIe,OAAO3kB,KAAKmmB,GAAGhW,EAAGnQ,KAAKmmB,GAAG/V,GAC9BwT,EAAIlH,SACG,MAYX1Z,EAAKuO,UAAUu3C,QAAU,SAAUllC,EAAKzT,EAAGC,EAAGoY,GAE5C5E,EAAIa,YACJb,EAAI6E,IAAItY,EAAGC,EAAGoY,EAAQ,EAAG,EAAI5jB,KAAK8jB,IAAI,GACtC9E,EAAIlH,UAWN1Z,EAAKuO,UAAUq3C,OAAS,SAAUhlC,EAAKyC,EAAMlW,EAAGC,GAC9C,GAAIiW,EAAM,CAERzC,EAAIQ,MAASpkB,KAAKkmB,KAAKokB,UAAYtqC,KAAKmmB,GAAGmkB,SAAY,QAAU,IAC7DtqC,KAAKg0C,SAAW,MAAQh0C,KAAKi0C,SACjCrwB,EAAIiB,UAAY7kB,KAAKu0C,QACrB,IAAI3jC,GAAQgT,EAAIylC,YAAYhjC,GAAMzV,MAC9BC,EAAS7Q,KAAKg0C,SACd/sC,EAAOkJ,EAAIS,EAAQ,EACnBvJ,EAAM+I,EAAIS,EAAS,CAEvB+S,GAAI0lC,SAASriD,EAAMI,EAAKuJ,EAAOC,GAG/B+S,EAAIiB,UAAY7kB,KAAK+zC,WAAa,QAClCnwB,EAAIwB,UAAY,OAChBxB,EAAIyB,aAAe,MACnBzB,EAAI0B,SAASe,EAAMpf,EAAMI,KAa7BrE,EAAKuO,UAAUo2C,cAAgB,SAAS/jC,GAERA,EAAIY,YAAb,GAAjBxkB,KAAKsqC,SAAuCtqC,KAAKuK,MAAMe,UACpC,GAAdtL,KAAKuL,MAAkCvL,KAAKuK,MAAMgB,MACXvL,KAAKuK,MAAMA,MAE3DqZ,EAAIO,UAAYnkB,KAAKuoD,eAErB,IAAIxF,GAAM,IAEV,IAAoB78C,SAAhB0d,EAAI2lC,SAA6CrjD,SAApB0d,EAAI4lC,YAA2B,CAE9D,GAAIC,IAAW,EAEbA,GADuBvjD,SAArBlG,KAAKy0C,KAAKpvC,QAA0Ca,SAAlBlG,KAAKy0C,KAAKC,KACnC10C,KAAKy0C,KAAKpvC,OAAOrF,KAAKy0C,KAAKC,MAG3B,EAAE,GAIgB,mBAApB9wB,GAAI4lC,aACb5lC,EAAI4lC,YAAYC,GAChB7lC,EAAI8lC,eAAiB,IAGrB9lC,EAAI2lC,QAAUE,EACd7lC,EAAI+lC,cAAgB,GAItB5G,EAAM/iD,KAAKwoD,MAAM5kC,GAGc,mBAApBA,GAAI4lC,aACb5lC,EAAI4lC,aAAa,IACjB5lC,EAAI8lC,eAAiB,IAGrB9lC,EAAI2lC,SAAW,GACf3lC,EAAI+lC,cAAgB,OAKtB/lC,GAAIa,YACJb,EAAIgmC,QAAU,QACc1jD,SAAxBlG,KAAKy0C,KAAKE,UAEZ/wB,EAAIimC,WAAW7pD,KAAKkmB,KAAK/V,EAAEnQ,KAAKkmB,KAAK9V,EAAEpQ,KAAKmmB,GAAGhW,EAAEnQ,KAAKmmB,GAAG/V,GACpDpQ,KAAKy0C,KAAKpvC,OAAOrF,KAAKy0C,KAAKC,IAAI10C,KAAKy0C,KAAKE,UAAU30C,KAAKy0C,KAAKC,MAEtCxuC,SAArBlG,KAAKy0C,KAAKpvC,QAA0Ca,SAAlBlG,KAAKy0C,KAAKC,IAEnD9wB,EAAIimC,WAAW7pD,KAAKkmB,KAAK/V,EAAEnQ,KAAKkmB,KAAK9V,EAAEpQ,KAAKmmB,GAAGhW,EAAEnQ,KAAKmmB,GAAG/V,GACpDpQ,KAAKy0C,KAAKpvC,OAAOrF,KAAKy0C,KAAKC,OAIhC9wB,EAAIc,OAAO1kB,KAAKkmB,KAAK/V,EAAGnQ,KAAKkmB,KAAK9V,GAClCwT,EAAIe,OAAO3kB,KAAKmmB,GAAGhW,EAAGnQ,KAAKmmB,GAAG/V,IAEhCwT,EAAIlH,QAIN,IAAI1c,KAAKulB,MAAO,CACd,GAAIjV,EACJ,IAAiC,GAA7BtQ,KAAKm3C,aAAaxpC,SAA0B,MAAPo1C,EAAa,CACpD,GAAI0F,GAAY,IAAK,IAAKzoD,KAAKkmB,KAAK/V,EAAI4yC,EAAI5yC,GAAK,IAAKnQ,KAAKmmB,GAAGhW,EAAI4yC,EAAI5yC,IAClEu4C,EAAY,IAAK,IAAK1oD,KAAKkmB,KAAK9V,EAAI2yC,EAAI3yC,GAAK,IAAKpQ,KAAKmmB,GAAG/V,EAAI2yC,EAAI3yC,GACtEE,IAASH,EAAEs4C,EAAWr4C,EAAEs4C,OAGxBp4C,GAAQtQ,KAAK2oD,aAAa,GAE5B3oD,MAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOjV,EAAMH,EAAGG,EAAMF,KAUhDpN,EAAKuO,UAAUo3C,aAAe,SAAUmB,GACtC,OACE35C,GAAI,EAAI25C,GAAc9pD,KAAKkmB,KAAK/V,EAAI25C,EAAa9pD,KAAKmmB,GAAGhW,EACzDC,GAAI,EAAI05C,GAAc9pD,KAAKkmB,KAAK9V,EAAI05C,EAAa9pD,KAAKmmB,GAAG/V,IAa7DpN,EAAKuO,UAAUw3C,eAAiB,SAAU54C,EAAGC,EAAGoY,EAAQshC,GACtD,GAAI5H,GAA6B,GAApB4H,EAAa,EAAE,GAASllD,KAAK8jB,EAC1C,QACEvY,EAAGA,EAAIqY,EAAS5jB,KAAKwW,IAAI8mC,GACzB9xC,EAAGA,EAAIoY,EAAS5jB,KAAKqW,IAAIinC,KAW7Bl/C,EAAKuO,UAAUm2C,iBAAmB,SAAS9jC,GACzC,GAAItT,EAOJ,IALqB,GAAjBtQ,KAAKsqC,UAAqB1mB,EAAIY,YAAcxkB,KAAKuK,MAAMe,UAAWsY,EAAIiB,UAAY7kB,KAAKuK,MAAMe,WAC1E,GAAdtL,KAAKuL,OAAgBqY,EAAIY,YAAcxkB,KAAKuK,MAAMgB,MAAWqY,EAAIiB,UAAY7kB,KAAKuK,MAAMgB,QACnEqY,EAAIY,YAAcxkB,KAAKuK,MAAMA,MAAWqZ,EAAIiB,UAAY7kB,KAAKuK,MAAMA,OACjGqZ,EAAIO,UAAYnkB,KAAKuoD,gBAEjBvoD,KAAKkmB,MAAQlmB,KAAKmmB,GAAI,CAExB,GAAI48B,GAAM/iD,KAAKwoD,MAAM5kC,GAEjBs+B,EAAQt9C,KAAKmlD,MAAO/pD,KAAKmmB,GAAG/V,EAAIpQ,KAAKkmB,KAAK9V,EAAKpQ,KAAKmmB,GAAGhW,EAAInQ,KAAKkmB,KAAK/V,GACrE9K,GAAU,GAAK,EAAIrF,KAAK4Q,OAAS5Q,KAAKw0C,gBAE1C,IAAiC,GAA7Bx0C,KAAKm3C,aAAaxpC,SAA0B,MAAPo1C,EAAa,CACpD,GAAI0F,GAAY,IAAK,IAAKzoD,KAAKkmB,KAAK/V,EAAI4yC,EAAI5yC,GAAK,IAAKnQ,KAAKmmB,GAAGhW,EAAI4yC,EAAI5yC,IAClEu4C,EAAY,IAAK,IAAK1oD,KAAKkmB,KAAK9V,EAAI2yC,EAAI3yC,GAAK,IAAKpQ,KAAKmmB,GAAG/V,EAAI2yC,EAAI3yC,GACtEE,IAASH,EAAEs4C,EAAWr4C,EAAEs4C,OAGxBp4C,GAAQtQ,KAAK2oD,aAAa,GAG5B/kC,GAAIomC,MAAM15C,EAAMH,EAAGG,EAAMF,EAAG8xC,EAAO78C,GACnCue,EAAInH,OACJmH,EAAIlH,SAGA1c,KAAKulB,OACPvlB,KAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOjV,EAAMH,EAAGG,EAAMF,OAG3C,CAEH,GAAID,GAAGC,EACHoY,EAAS,IAAO5jB,KAAK6H,IAAI,IAAIzM,KAAKqF,QAClCm2C,EAAOx7C,KAAKkmB,IACXs1B,GAAK5qC,OACR4qC,EAAKqN,OAAOjlC,GAEV43B,EAAK5qC,MAAQ4qC,EAAK3qC,QACpBV,EAAIqrC,EAAKrrC,EAAiB,GAAbqrC,EAAK5qC,MAClBR,EAAIorC,EAAKprC,EAAIoY,IAGbrY,EAAIqrC,EAAKrrC,EAAIqY,EACbpY,EAAIorC,EAAKprC,EAAkB,GAAdorC,EAAK3qC,QAEpB7Q,KAAK8oD,QAAQllC,EAAKzT,EAAGC,EAAGoY,EAGxB,IAAI05B,GAAQ,GAAMt9C,KAAK8jB,GACnBrjB,GAAU,GAAK,EAAIrF,KAAK4Q,OAAS5Q,KAAKw0C,gBAC1ClkC,GAAQtQ,KAAK+oD,eAAe54C,EAAGC,EAAGoY,EAAQ,IAC1C5E,EAAIomC,MAAM15C,EAAMH,EAAGG,EAAMF,EAAG8xC,EAAO78C,GACnCue,EAAInH,OACJmH,EAAIlH,SAGA1c,KAAKulB,QACPjV,EAAQtQ,KAAK+oD,eAAe54C,EAAGC,EAAGoY,EAAQ,IAC1CxoB,KAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOjV,EAAMH,EAAGG,EAAMF,MAclDpN,EAAKuO,UAAUk2C,WAAa,SAAS7jC,GAEd,GAAjB5jB,KAAKsqC,UAAqB1mB,EAAIY,YAAcxkB,KAAKuK,MAAMe,UAAWsY,EAAIiB,UAAY7kB,KAAKuK,MAAMe,WAC1E,GAAdtL,KAAKuL,OAAgBqY,EAAIY,YAAcxkB,KAAKuK,MAAMgB,MAAWqY,EAAIiB,UAAY7kB,KAAKuK,MAAMgB,QACnEqY,EAAIY,YAAcxkB,KAAKuK,MAAMA,MAAWqZ,EAAIiB,UAAY7kB,KAAKuK,MAAMA,OAEjGqZ,EAAIO,UAAYnkB,KAAKuoD,eAErB;GAAIrG,GAAO78C,CAEX,IAAIrF,KAAKkmB,MAAQlmB,KAAKmmB,GAAI,CACxB+7B,EAAQt9C,KAAKmlD,MAAO/pD,KAAKmmB,GAAG/V,EAAIpQ,KAAKkmB,KAAK9V,EAAKpQ,KAAKmmB,GAAGhW,EAAInQ,KAAKkmB,KAAK/V,EACrE,IASI4yC,GATAtnC,EAAMzb,KAAKmmB,GAAGhW,EAAInQ,KAAKkmB,KAAK/V,EAC5BuL,EAAM1b,KAAKmmB,GAAG/V,EAAIpQ,KAAKkmB,KAAK9V,EAC5B65C,EAAoBrlD,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAE7CwuC,EAAiBlqD,KAAKkmB,KAAKikC,iBAAiBvmC,EAAKs+B,EAAQt9C,KAAK8jB,IAC9D0hC,GAAmBH,EAAoBC,GAAkBD,EACzDnC,EAAQ,EAAoB9nD,KAAKkmB,KAAK/V,GAAK,EAAIi6C,GAAmBpqD,KAAKmmB,GAAGhW,EAC1E43C,EAAQ,EAAoB/nD,KAAKkmB,KAAK9V,GAAK,EAAIg6C,GAAmBpqD,KAAKmmB,GAAG/V,CAG7C,IAA7BpQ,KAAKm3C,aAAaC,SAAgD,GAA7Bp3C,KAAKm3C,aAAaxpC,QACzDo1C,EAAM/iD,KAAK+iD,IAEyB,GAA7B/iD,KAAKm3C,aAAaxpC,UACzBo1C,EAAM/iD,KAAKipD,sBAGoB,GAA7BjpD,KAAKm3C,aAAaxpC,SAA4B,MAATo1C,EAAI5yC,IAC3C+xC,EAAQt9C,KAAKmlD,MAAO/pD,KAAKmmB,GAAG/V,EAAI2yC,EAAI3yC,EAAKpQ,KAAKmmB,GAAGhW,EAAI4yC,EAAI5yC,GACzDsL,EAAMzb,KAAKmmB,GAAGhW,EAAI4yC,EAAI5yC,EACtBuL,EAAM1b,KAAKmmB,GAAG/V,EAAI2yC,EAAI3yC,EACtB65C,EAAoBrlD,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAE/C,IAGIssC,GAAIC,EAHJoC,EAAerqD,KAAKmmB,GAAGgkC,iBAAiBvmC,EAAKs+B,GAC7CoI,GAAiBL,EAAoBI,GAAgBJ,CA6BzD,IA1BiC,GAA7BjqD,KAAKm3C,aAAaxpC,SAA4B,MAATo1C,EAAI5yC,GAC5C63C,GAAO,EAAIsC,GAAiBvH,EAAI5yC,EAAIm6C,EAAgBtqD,KAAKmmB,GAAGhW,EAC5D83C,GAAO,EAAIqC,GAAiBvH,EAAI3yC,EAAIk6C,EAAgBtqD,KAAKmmB,GAAG/V,IAG3D43C,GAAO,EAAIsC,GAAiBtqD,KAAKkmB,KAAK/V,EAAIm6C,EAAgBtqD,KAAKmmB,GAAGhW,EAClE83C,GAAO,EAAIqC,GAAiBtqD,KAAKkmB,KAAK9V,EAAIk6C,EAAgBtqD,KAAKmmB,GAAG/V,GAGpEwT,EAAIa,YACJb,EAAIc,OAAOojC,EAAMC,GACgB,GAA7B/nD,KAAKm3C,aAAaxpC,SAA4B,MAATo1C,EAAI5yC,EAC3CyT,EAAIwlC,iBAAiBrG,EAAI5yC,EAAE4yC,EAAI3yC,EAAE43C,EAAKC,GAGtCrkC,EAAIe,OAAOqjC,EAAKC,GAElBrkC,EAAIlH,SAGJrX,GAAU,GAAK,EAAIrF,KAAK4Q,OAAS5Q,KAAKw0C,iBACtC5wB,EAAIomC,MAAMhC,EAAKC,EAAK/F,EAAO78C,GAC3Bue,EAAInH,OACJmH,EAAIlH,SAGA1c,KAAKulB,MAAO,CACd,GAAIjV,EACJ,IAAiC,GAA7BtQ,KAAKm3C,aAAaxpC,SAA0B,MAAPo1C,EAAa,CACpD,GAAI0F,GAAY,IAAK,IAAKzoD,KAAKkmB,KAAK/V,EAAI4yC,EAAI5yC,GAAK,IAAKnQ,KAAKmmB,GAAGhW,EAAI4yC,EAAI5yC,IAClEu4C,EAAY,IAAK,IAAK1oD,KAAKkmB,KAAK9V,EAAI2yC,EAAI3yC,GAAK,IAAKpQ,KAAKmmB,GAAG/V,EAAI2yC,EAAI3yC,GACtEE,IAASH,EAAEs4C,EAAWr4C,EAAEs4C,OAGxBp4C,GAAQtQ,KAAK2oD,aAAa,GAE5B3oD,MAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOjV,EAAMH,EAAGG,EAAMF,QAG3C,CAEH,GACID,GAAGC,EAAG45C,EADNxO,EAAOx7C,KAAKkmB,KAEZsC,EAAS,IAAO5jB,KAAK6H,IAAI,IAAIzM,KAAKqF,OACjCm2C,GAAK5qC,OACR4qC,EAAKqN,OAAOjlC,GAEV43B,EAAK5qC,MAAQ4qC,EAAK3qC,QACpBV,EAAIqrC,EAAKrrC,EAAiB,GAAbqrC,EAAK5qC,MAClBR,EAAIorC,EAAKprC,EAAIoY,EACbwhC,GACE75C,EAAGA,EACHC,EAAGorC,EAAKprC,EACR8xC,MAAO,GAAMt9C,KAAK8jB,MAIpBvY,EAAIqrC,EAAKrrC,EAAIqY,EACbpY,EAAIorC,EAAKprC,EAAkB,GAAdorC,EAAK3qC,OAClBm5C,GACE75C,EAAGqrC,EAAKrrC,EACRC,EAAGA,EACH8xC,MAAO,GAAMt9C,KAAK8jB,KAGtB9E,EAAIa,YAEJb,EAAI6E,IAAItY,EAAGC,EAAGoY,EAAQ,EAAG,EAAI5jB,KAAK8jB,IAAI,GACtC9E,EAAIlH,QAGJ,IAAIrX,IAAU,GAAK,EAAIrF,KAAK4Q,OAAS5Q,KAAKw0C,gBAC1C5wB,GAAIomC,MAAMA,EAAM75C,EAAG65C,EAAM55C,EAAG45C,EAAM9H,MAAO78C,GACzCue,EAAInH,OACJmH,EAAIlH,SAGA1c,KAAKulB,QACPjV,EAAQtQ,KAAK+oD,eAAe54C,EAAGC,EAAGoY,EAAQ,IAC1CxoB,KAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOjV,EAAMH,EAAGG,EAAMF,MAmBlDpN,EAAKuO,UAAU62C,mBAAqB,SAAUmC,EAAGC,EAAIC,EAAGC,EAAIC,EAAGC,GAC7D,GAAI5qD,KAAKkmB,MAAQlmB,KAAKmmB,GAAI,CACxB,GAAiC,GAA7BnmB,KAAKm3C,aAAaxpC,QAAiB,CACrC,GAAIu7C,GAAMC,CACV,IAAiC,GAA7BnpD,KAAKm3C,aAAaxpC,SAAgD,GAA7B3N,KAAKm3C,aAAaC,QACzD8R,EAAOlpD,KAAK+iD,IAAI5yC,EAChBg5C,EAAOnpD,KAAK+iD,IAAI3yC,MAEb,CACH,GAAI2yC,GAAM/iD,KAAKipD,oBACfC,GAAOnG,EAAI5yC,EACXg5C,EAAOpG,EAAI3yC,EAEb,GACIoS,GACAtd,EAAE4H,EAAEqD,EAAEC,EAAGy6C,EAAOC,EAFhBC,EAAc,GAGlB,KAAK7lD,EAAI,EAAO,GAAJA,EAAQA,IAClB4H,EAAI,GAAI5H,EACRiL,EAAIvL,KAAKusB,IAAI,EAAErkB,EAAE,GAAGy9C,EAAM,EAAEz9C,GAAG,EAAIA,GAAIo8C,EAAOtkD,KAAKusB,IAAIrkB,EAAE,GAAG29C,EAC5Dr6C,EAAIxL,KAAKusB,IAAI,EAAErkB,EAAE,GAAG09C,EAAM,EAAE19C,GAAG,EAAIA,GAAIq8C,EAAOvkD,KAAKusB,IAAIrkB,EAAE,GAAG49C,EACxDxlD,EAAI,IACNsd,EAAWxiB,KAAKgrD,mBAAmBH,EAAMC,EAAM36C,EAAEC,EAAGu6C,EAAGC,GACvDG,EAAyBA,EAAXvoC,EAAyBA,EAAWuoC,GAEpDF,EAAQ16C,EAAG26C,EAAQ16C,CAErB,OAAO26C,GAGP,MAAO/qD,MAAKgrD,mBAAmBT,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GAIhD,GAAIz6C,GAAGC,EAAGqL,EAAIC,EACV8M,EAASxoB,KAAKqF,OAAS,EACvBm2C,EAAOx7C,KAAKkmB,IAchB,OAbKs1B,GAAK5qC,OACR4qC,EAAKqN,OAAOjlC,KAEV43B,EAAK5qC,MAAQ4qC,EAAK3qC,QACpBV,EAAIqrC,EAAKrrC,EAAIqrC,EAAK5qC,MAAQ,EAC1BR,EAAIorC,EAAKprC,EAAIoY,IAGbrY,EAAIqrC,EAAKrrC,EAAIqY,EACbpY,EAAIorC,EAAKprC,EAAIorC,EAAK3qC,OAAS,GAE7B4K,EAAKtL,EAAIw6C,EACTjvC,EAAKtL,EAAIw6C,EACFhmD,KAAK+iB,IAAI/iB,KAAKkoB,KAAKrR,EAAGA,EAAKC,EAAGA,GAAM8M,IAI/CxlB,EAAKuO,UAAUy5C,mBAAqB,SAAST,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GAC1D,GAAIK,GAAKR,EAAGF,EACVW,EAAKR,EAAGF,EACRW,EAAYF,EAAGA,EAAKC,EAAGA,EACvBE,IAAOT,EAAKJ,GAAMU,GAAML,EAAKJ,GAAMU,GAAMC,CAEvCC,GAAI,EACNA,EAAI,EAEO,EAAJA,IACPA,EAAI,EAGN,IAAIj7C,GAAIo6C,EAAKa,EAAIH,EACf76C,EAAIo6C,EAAKY,EAAIF,EACbzvC,EAAKtL,EAAIw6C,EACTjvC,EAAKtL,EAAIw6C,CAQX,OAAOhmD,MAAKkoB,KAAKrR,EAAGA,EAAKC,EAAGA,IAQ9B1Y,EAAKuO,UAAUusB,SAAW,SAAShkB,GACjC9Z,KAAKgpD,gBAAkB,EAAIlvC,GAI7B9W,EAAKuO,UAAUm3B,OAAS,WACtB1oC,KAAKsqC,UAAW,GAGlBtnC,EAAKuO,UAAUk3B,SAAW,WACxBzoC,KAAKsqC,UAAW,GAGlBtnC,EAAKuO,UAAU00C,mBAAqB,WACjB,OAAbjmD,KAAK+iD,MACP/iD,KAAK+iD,IAAI5yC,EAAI,IAAOnQ,KAAKkmB,KAAK/V,EAAInQ,KAAKmmB,GAAGhW,GAC1CnQ,KAAK+iD,IAAI3yC,EAAI,IAAOpQ,KAAKkmB,KAAK9V,EAAIpQ,KAAKmmB,GAAG/V,KAQ9CpN,EAAKuO,UAAUyyC,kBAAoB,SAASpgC,GAC1C,GAAgC,GAA5B5jB,KAAKonD,oBAA6B,CACpC,GAA+B,OAA3BpnD,KAAKqnD,aAAanhC,MAA0C,OAAzBlmB,KAAKqnD,aAAalhC,GAAa,CACpE,GAAIklC,GAAa,cAAcp5C,OAAOjS,KAAKK,IACvCirD,EAAW,YAAYr5C,OAAOjS,KAAKK,IACnCmzC,GACYC,OAAOpjC,MAAM,GAAImY,OAAO,GACxBssB,SAASO,QAAQ,GACjBI,YAAac,sBAAuB,EAAGD,aAAc1lC,MAAM,EAAGC,OAAQ,EAAG2X,OAAO,IAEhGxoB,MAAKqnD,aAAanhC,KAAO,GAAI/iB,IAC1B9C,GAAGgrD,EACFzX,MAAM,MACJrpC,OAAOa,WAAW,UAAWC,OAAO,UAAWC,WAAYF,WAAW,mBAClEooC,GACVxzC,KAAKqnD,aAAalhC,GAAK,GAAIhjB,IACxB9C,GAAGirD,EACF1X,MAAM,MACNrpC,OAAOa,WAAW,UAAWC,OAAO,UAAWC,WAAYF,WAAW,mBAChEooC,GAG2B,GAAnCxzC,KAAKqnD,aAAanhC,KAAKokB,UAAsD,GAAjCtqC,KAAKqnD,aAAalhC,GAAGmkB,WACnEtqC,KAAKqnD,aAAaC,UAAYtnD,KAAKurD,wBAAwB3nC,GAC3D5jB,KAAKqnD,aAAanhC,KAAK/V,EAAInQ,KAAKqnD,aAAaC,UAAUphC,KAAK/V,EAC5DnQ,KAAKqnD,aAAanhC,KAAK9V,EAAIpQ,KAAKqnD,aAAaC,UAAUphC,KAAK9V,EAC5DpQ,KAAKqnD,aAAalhC,GAAGhW,EAAInQ,KAAKqnD,aAAaC,UAAUnhC,GAAGhW,EACxDnQ,KAAKqnD,aAAalhC,GAAG/V,EAAIpQ,KAAKqnD,aAAaC,UAAUnhC,GAAG/V,GAG1DpQ,KAAKqnD,aAAanhC,KAAK29B,KAAKjgC,GAC5B5jB,KAAKqnD,aAAalhC,GAAG09B,KAAKjgC,OAG1B5jB,MAAKqnD,cAAgBnhC,KAAK,KAAMC,GAAG,KAAMmhC,eAQ7CtkD,EAAKuO,UAAUi6C,oBAAsB,WACnCxrD,KAAKonD,qBAAsB,GAO7BpkD,EAAKuO,UAAUk6C,qBAAuB,WACpCzrD,KAAKonD,qBAAsB,GAU7BpkD,EAAKuO,UAAUm6C,wBAA0B,SAASv7C,EAAEC,GAClD,GAAIk3C,GAAYtnD,KAAKqnD,aAAaC,UAC9BqE,EAAe/mD,KAAKkoB,KAAKloB,KAAKusB,IAAIhhB,EAAIm3C,EAAUphC,KAAK/V,EAAE,GAAKvL,KAAKusB,IAAI/gB,EAAIk3C,EAAUphC,KAAK9V,EAAE,IAC1Fw7C,EAAehnD,KAAKkoB,KAAKloB,KAAKusB,IAAIhhB,EAAIm3C,EAAUnhC,GAAGhW,EAAI,GAAKvL,KAAKusB,IAAI/gB,EAAIk3C,EAAUnhC,GAAG/V,EAAI,GAE9F,OAAmB,IAAfu7C,GACF3rD,KAAKunD,cAAgBvnD,KAAKkmB,KAC1BlmB,KAAKkmB,KAAOlmB,KAAKqnD,aAAanhC,KACvBlmB,KAAKqnD,aAAanhC,MAEL,GAAb0lC,GACP5rD,KAAKunD,cAAgBvnD,KAAKmmB,GAC1BnmB,KAAKmmB,GAAKnmB,KAAKqnD,aAAalhC,GACrBnmB,KAAKqnD,aAAalhC,IAGlB,MASXnjB,EAAKuO,UAAUs6C,qBAAuB,WACG,GAAnC7rD,KAAKqnD,aAAanhC,KAAKokB,WACzBtqC,KAAKkmB,KAAOlmB,KAAKunD,cACjBvnD,KAAKunD,cAAgB,KACrBvnD,KAAKqnD,aAAanhC,KAAKuiB,YAEY,GAAjCzoC,KAAKqnD,aAAalhC,GAAGmkB,WACvBtqC,KAAKmmB,GAAKnmB,KAAKunD,cACfvnD,KAAKunD,cAAgB,KACrBvnD,KAAKqnD,aAAalhC,GAAGsiB,aAUzBzlC,EAAKuO,UAAUg6C,wBAA0B,SAAS3nC,GAChD,GASIm/B,GATAb,EAAQt9C,KAAKmlD,MAAO/pD,KAAKmmB,GAAG/V,EAAIpQ,KAAKkmB,KAAK9V,EAAKpQ,KAAKmmB,GAAGhW,EAAInQ,KAAKkmB,KAAK/V,GACrEsL,EAAMzb,KAAKmmB,GAAGhW,EAAInQ,KAAKkmB,KAAK/V,EAC5BuL,EAAM1b,KAAKmmB,GAAG/V,EAAIpQ,KAAKkmB,KAAK9V,EAC5B65C,EAAoBrlD,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAC7CwuC,EAAiBlqD,KAAKkmB,KAAKikC,iBAAiBvmC,EAAKs+B,EAAQt9C,KAAK8jB,IAC9D0hC,GAAmBH,EAAoBC,GAAkBD,EACzDnC,EAAQ,EAAoB9nD,KAAKkmB,KAAK/V,GAAK,EAAIi6C,GAAmBpqD,KAAKmmB,GAAGhW,EAC1E43C,EAAQ,EAAoB/nD,KAAKkmB,KAAK9V,GAAK,EAAIg6C,GAAmBpqD,KAAKmmB,GAAG/V,CAG7C,IAA7BpQ,KAAKm3C,aAAaC,SAAgD,GAA7Bp3C,KAAKm3C,aAAaxpC,QACzDo1C,EAAM/iD,KAAK+iD,IAEyB,GAA7B/iD,KAAKm3C,aAAaxpC,UACzBo1C,EAAM/iD,KAAKipD,sBAGoB,GAA7BjpD,KAAKm3C,aAAaxpC,SAA4B,MAATo1C,EAAI5yC,IAC3C+xC,EAAQt9C,KAAKmlD,MAAO/pD,KAAKmmB,GAAG/V,EAAI2yC,EAAI3yC,EAAKpQ,KAAKmmB,GAAGhW,EAAI4yC,EAAI5yC,GACzDsL,EAAMzb,KAAKmmB,GAAGhW,EAAI4yC,EAAI5yC,EACtBuL,EAAM1b,KAAKmmB,GAAG/V,EAAI2yC,EAAI3yC,EACtB65C,EAAoBrlD,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAE/C,IAGIssC,GAAIC,EAHJoC,EAAerqD,KAAKmmB,GAAGgkC,iBAAiBvmC,EAAKs+B,GAC7CoI,GAAiBL,EAAoBI,GAAgBJ,CAYzD,OATiC,IAA7BjqD,KAAKm3C,aAAaxpC,SAA4B,MAATo1C,EAAI5yC,GAC3C63C,GAAO,EAAIsC,GAAiBvH,EAAI5yC,EAAIm6C,EAAgBtqD,KAAKmmB,GAAGhW,EAC5D83C,GAAO,EAAIqC,GAAiBvH,EAAI3yC,EAAIk6C,EAAgBtqD,KAAKmmB,GAAG/V,IAG5D43C,GAAO,EAAIsC,GAAiBtqD,KAAKkmB,KAAK/V,EAAIm6C,EAAgBtqD,KAAKmmB,GAAGhW,EAClE83C,GAAO,EAAIqC,GAAiBtqD,KAAKkmB,KAAK9V,EAAIk6C,EAAgBtqD,KAAKmmB,GAAG/V,IAG5D8V,MAAM/V,EAAE23C,EAAM13C,EAAE23C,GAAO5hC,IAAIhW,EAAE63C,EAAI53C,EAAE63C,KAG7CpoD,EAAOD,QAAUoD,GAIb,SAASnD,EAAQD,EAASM,GAQ9B,QAAS+C,KACPjD,KAAK4U,QACL5U,KAAK8rD,aAAe,EARtB,GAAInrD,GAAOT,EAAoB,EAe/B+C,GAAO8oD,UACJ1gD,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aAO3InI,EAAOsO,UAAUqD,MAAQ,WACvB5U,KAAKu1B,UACLv1B,KAAKu1B,OAAOlwB,OAAS,WAEnB,GAAIH,GAAI,CACR,KAAM,GAAIxE,KAAKV,MACTA,KAAKwF,eAAe9E,IACtBwE,GAGJ,OAAOA,KAWXjC,EAAOsO,UAAU4B,IAAM,SAAUoqC,GAC/B,GAAIltC,GAAQrQ,KAAKu1B,OAAOgoB,EACxB,IAAar3C,QAATmK,EAAoB,CAEtB,GAAItI,GAAQ/H,KAAK8rD,aAAe7oD,EAAO8oD,QAAQ1mD,MAC/CrF,MAAK8rD,eACLz7C,KACAA,EAAM9F,MAAQtH,EAAO8oD,QAAQhkD,GAC7B/H,KAAKu1B,OAAOgoB,GAAaltC,EAG3B,MAAOA,IAUTpN,EAAOsO,UAAUD,IAAM,SAAUisC,EAAW/sC,GAK1C,MAJAxQ,MAAKu1B,OAAOgoB,GAAa/sC,EACrBA,EAAMjG,QACRiG,EAAMjG,MAAQ5J,EAAK2J,WAAWkG,EAAMjG,QAE/BiG,GAGT3Q,EAAOD,QAAUqD,GAKb,SAASpD,GAMb,QAASqD,KACPlD,KAAK44C,UAEL54C,KAAKkI,SAAWhC,OAQlBhD,EAAOqO,UAAUsnC,kBAAoB,SAAS3wC,GAC5ClI,KAAKkI,SAAWA,GAQlBhF,EAAOqO,UAAUy6C,KAAO,SAASC,GAC/B,GAAIC,GAAMlsD,KAAK44C,OAAOqT,EACtB,IAAW/lD,QAAPgmD,EAAkB,CAEpB,GAAItT,GAAS54C,IACbksD,GAAM,GAAIC,OACVnsD,KAAK44C,OAAOqT,GAAOC,EACnBA,EAAIE,OAAS,WACPxT,EAAO1wC,UACT0wC,EAAO1wC,SAASlI,OAGpBksD,EAAI5Q,IAAM2Q,EAGZ,MAAOC,IAGTrsD,EAAOD,QAAUsD,GAKb,SAASrD,EAAQD,EAASM,GA6B9B,QAASiD,GAAKs/C,EAAY4J,EAAWC,EAAW9Y,GAC9CxzC,KAAKsqC,UAAW,EAChBtqC,KAAKuL,OAAQ,EAEbvL,KAAKo0C,SACLp0C,KAAKusD,gBACLvsD,KAAKwsD,iBAELxsD,KAAKqQ,MAAQmjC,EAAUC,MAAMpjC,MAC7BrQ,KAAKg0C,SAAWpwC,OAAO4vC,EAAUC,MAAMO,UACvCh0C,KAAKi0C,SAAWT,EAAUC,MAAMQ,SAChCj0C,KAAK+zC,UAAYP,EAAUC,MAAMM,UACjC/zC,KAAKysD,kBAAoB,EAEzBzsD,KAAKuK,MAAQipC,EAAUC,MAAMlpC,MAG7BvK,KAAKK,GAAK6F,OACVlG,KAAK4zC,MAAQJ,EAAUC,MAAMG,MAC7B5zC,KAAK6zC,MAAQL,EAAUC,MAAMI,MAC7B7zC,KAAKmQ,EAAI,KACTnQ,KAAKoQ,EAAI,KACTpQ,KAAKw/C,QAAS,EACdx/C,KAAKy/C,QAAS,EACdz/C,KAAK0sD,qBAAsB,EAC3B1sD,KAAK2sD,kBAAsB,EAC3B3sD,KAAKwoB,OAASgrB,EAAUC,MAAMjrB,OAC9BxoB,KAAK4sD,gBAAkBpZ,EAAUC,MAAMjrB,OACvCxoB,KAAK6sD,aAAc,EACnB7sD,KAAK0zC,UAAYF,EAAUC,MAAMC,UACjC1zC,KAAK2zC,UAAYH,EAAUC,MAAME,UACjC3zC,KAAKk0C,MAAQ,GACbl0C,KAAK8sD,kBAAmB,EACxB9sD,KAAK6c,YAAc22B,EAAUC,MAAM52B,YACnC7c,KAAK+sD,oBAAsBvZ,EAAUC,MAAMsZ,oBAG3C/sD,KAAKqsD,UAAYA,EACjBrsD,KAAKssD,UAAYA,EAGjBtsD,KAAKgtD,GAAK,EACVhtD,KAAKitD,GAAK,EACVjtD,KAAKktD,GAAK,EACVltD,KAAKmtD,GAAK,EACVntD,KAAKotD,SAAW5Z,EAAU4Z,SAC1BptD,KAAKq1C,QAAU7B,EAAUsB,QAAQO,QACjCr1C,KAAK8lD,KAAO,EACZ9lD,KAAKqkD,WAAal0C,EAAE,KAAKC,EAAE,MAG3BpQ,KAAKwiD,cAAcC,EAAYjP,GAG/BxzC,KAAKqtD,eACLrtD,KAAKstD,mBAAqB,EAC1BttD,KAAKutD,eAAiB,EACtBvtD,KAAKwtD,uBAA0Bha,EAAUiC,WAAWa,YAAY1lC,MAChE5Q,KAAKytD,wBAA0Bja,EAAUiC,WAAWa,YAAYzlC,OAChE7Q,KAAK0tD,wBAA0Bla,EAAUiC,WAAWa,YAAY9tB,OAChExoB,KAAKu2C,sBAAwB/C,EAAUiC,WAAWc,sBAClDv2C,KAAK2tD,gBAAkB,EAGvB3tD,KAAKgpD,gBAAkB,EACvBhpD,KAAK4tD,aAAe,EACpB5tD,KAAK65C,eAAiB1pC,EAAK,KAAMC,EAAK,MACtCpQ,KAAK85C,mBAAqB3pC,EAAM,IAAKC,EAAM,KAC3CpQ,KAAKgmD,aAAe,KA/FtB,GAAIrlD,GAAOT,EAAoB,EAqG/BiD,GAAKoO,UAAU87C,aAAe,WAE5BrtD,KAAK6tD,eAAiB3nD,OACtBlG,KAAK8tD,YAAc,EACnB9tD,KAAK+tD,kBACL/tD,KAAKguD,kBACLhuD,KAAKiuD,oBAOP9qD,EAAKoO,UAAUq2C,WAAa,SAASnG,GACH,IAA5BzhD,KAAKo0C,MAAMzsC,QAAQ85C,IACrBzhD,KAAKo0C,MAAMxsC,KAAK65C,GAEqB,IAAnCzhD,KAAKusD,aAAa5kD,QAAQ85C,IAC5BzhD,KAAKusD,aAAa3kD,KAAK65C,GAEzBzhD,KAAKstD,mBAAqBttD,KAAKusD,aAAalnD,QAO9ClC,EAAKoO,UAAUs2C,WAAa,SAASpG,GACnC,GAAI15C,GAAQ/H,KAAKo0C,MAAMzsC,QAAQ85C,EAClB,KAAT15C,IACF/H,KAAKo0C,MAAMpsC,OAAOD,EAAO,GACzB/H,KAAKusD,aAAavkD,OAAOD,EAAO,IAElC/H,KAAKstD,mBAAqBttD,KAAKusD,aAAalnD,QAS9ClC,EAAKoO,UAAUixC,cAAgB,SAASC,EAAYjP,GAClD,GAAKiP,EAAL,CAwBA,GArBAziD,KAAKkuD,cAAgBhoD,OAECA,SAAlBu8C,EAAWpiD,KAA0BL,KAAKK,GAAKoiD,EAAWpiD,IACrC6F,SAArBu8C,EAAWl9B,QAA0BvlB,KAAKulB,MAAQk9B,EAAWl9B,MAAOvlB,KAAKkuD,cAAgBzL,EAAWl9B,OAC/Erf,SAArBu8C,EAAWrjB,QAA0Bp/B,KAAKo/B,MAAQqjB,EAAWrjB,OACxCl5B,SAArBu8C,EAAWpyC,QAA0BrQ,KAAKqQ,MAAQoyC,EAAWpyC,OAC5CnK,SAAjBu8C,EAAWtyC,IAA0BnQ,KAAKmQ,EAAIsyC,EAAWtyC,GACxCjK,SAAjBu8C,EAAWryC,IAA0BpQ,KAAKoQ,EAAIqyC,EAAWryC,GACpClK,SAArBu8C,EAAW57C,QAA0B7G,KAAK6G,MAAQ47C,EAAW57C,OACxCX,SAArBu8C,EAAWvO,QAA0Bl0C,KAAKk0C,MAAQuO,EAAWvO,MAAOl0C,KAAK8sD,kBAAmB,GACjE5mD,SAA3Bu8C,EAAW5lC,cAA4C7c,KAAK6c,YAAc4lC,EAAW5lC,aAClD3W,SAAnCu8C,EAAWsK,sBAA4C/sD,KAAK+sD,oBAAsBtK,EAAWsK,qBAGzE7mD,SAApBu8C,EAAWqD,OAAoC9lD,KAAK8lD,KAAOrD,EAAWqD,MAGnC5/C,SAAnCu8C,EAAWiK,sBAAoC1sD,KAAK0sD,oBAAsBjK,EAAWiK,qBAClDxmD,SAAnCu8C,EAAWkK,mBAAoC3sD,KAAK2sD,iBAAsBlK,EAAWkK,kBAClDzmD,SAAnCu8C,EAAW0L,kBAAoCnuD,KAAKmuD,gBAAsB1L,EAAW0L,iBAEzEjoD,SAAZlG,KAAKK,GACP,KAAM,sBAIR,IAAmB6F,SAAflG,KAAKqQ,MAAqB,CAC5B,GAAI+9C,GAAWpuD,KAAKssD,UAAUn5C,IAAInT,KAAKqQ,MACvC,KAAK,GAAI9K,KAAQ6oD,GACXA,EAAS5oD,eAAeD,KAC1BvF,KAAKuF,GAAQ6oD,EAAS7oD,IAgB5B,GATyBW,SAArBu8C,EAAW7O,QAA+B5zC,KAAK4zC,MAAQ6O,EAAW7O,OAC7C1tC,SAArBu8C,EAAW5O,QAA+B7zC,KAAK6zC,MAAQ4O,EAAW5O,OAC5C3tC,SAAtBu8C,EAAWj6B,SAA+BxoB,KAAKwoB,OAASi6B,EAAWj6B,OAAQxoB,KAAK4sD,gBAAkB5sD,KAAKwoB,QAClFtiB,SAArBu8C,EAAWl4C,QAA+BvK,KAAKuK,MAAQ5J,EAAK2J,WAAWm4C,EAAWl4C,QAEzDrE,SAAzBu8C,EAAW1O,YAA+B/zC,KAAK+zC,UAAY0O,EAAW1O,WAC9C7tC,SAAxBu8C,EAAWzO,WAA+Bh0C,KAAKg0C,SAAWyO,EAAWzO,UAC7C9tC,SAAxBu8C,EAAWxO,WAA+Bj0C,KAAKi0C,SAAWwO,EAAWxO,UAEtD/tC,SAAflG,KAAK6zC,OAAqC,IAAd7zC,KAAK6zC,MAAa,CAChD,IAAI7zC,KAAKqsD,UAIP,KAAM,uBAHNrsD,MAAKquD,SAAWruD,KAAKqsD,UAAUL,KAAKhsD,KAAK6zC,OAiB7C,OAVA7zC,KAAKw/C,OAASx/C,KAAKw/C,QAA4Bt5C,SAAjBu8C,EAAWtyC,IAAoBsyC,EAAW4D,eACxErmD,KAAKy/C,OAASz/C,KAAKy/C,QAA4Bv5C,SAAjBu8C,EAAWryC,IAAoBqyC,EAAW6D,eACxEtmD,KAAK6sD,YAAc7sD,KAAK6sD,aAAsC3mD,SAAtBu8C,EAAWj6B,OAEjC,SAAdxoB,KAAK4zC,QACP5zC,KAAK0zC,UAAYF,EAAUC,MAAM1vB,SACjC/jB,KAAK2zC,UAAYH,EAAUC,MAAMzvB,UAI3BhkB,KAAK4zC,OACX,IAAK,WAAiB5zC,KAAK6jD,KAAO7jD,KAAKsuD,cAAetuD,KAAK6oD,OAAS7oD,KAAKuuD,eAAiB,MAC1F,KAAK,MAAiBvuD,KAAK6jD,KAAO7jD,KAAKwuD,SAAUxuD,KAAK6oD,OAAS7oD,KAAKyuD,UAAY,MAChF,KAAK,SAAiBzuD,KAAK6jD,KAAO7jD,KAAK0uD,YAAa1uD,KAAK6oD,OAAS7oD,KAAK2uD,aAAe,MACtF,KAAK,UAAiB3uD,KAAK6jD,KAAO7jD,KAAK4uD,aAAc5uD,KAAK6oD,OAAS7oD,KAAK6uD,cAAgB,MAExF,KAAK,QAAiB7uD,KAAK6jD,KAAO7jD,KAAK8uD,WAAY9uD,KAAK6oD,OAAS7oD,KAAK+uD,YAAc,MACpF,KAAK,OAAiB/uD,KAAK6jD,KAAO7jD,KAAKgvD,UAAWhvD,KAAK6oD,OAAS7oD,KAAKivD,WAAa,MAClF,KAAK,MAAiBjvD,KAAK6jD,KAAO7jD,KAAKkvD,SAAUlvD,KAAK6oD,OAAS7oD,KAAKmvD,YAAc,MAClF,KAAK,SAAiBnvD,KAAK6jD,KAAO7jD,KAAKovD,YAAapvD,KAAK6oD,OAAS7oD,KAAKmvD,YAAc,MACrF,KAAK,WAAiBnvD,KAAK6jD,KAAO7jD,KAAKqvD,cAAervD,KAAK6oD,OAAS7oD,KAAKmvD,YAAc,MACvF,KAAK,eAAiBnvD,KAAK6jD,KAAO7jD,KAAKsvD,kBAAmBtvD,KAAK6oD,OAAS7oD,KAAKmvD,YAAc,MAC3F,KAAK,OAAiBnvD,KAAK6jD,KAAO7jD,KAAKuvD,UAAWvvD,KAAK6oD,OAAS7oD,KAAKmvD,YAAc,MACnF,SAAsBnvD,KAAK6jD,KAAO7jD,KAAK4uD,aAAc5uD,KAAK6oD,OAAS7oD,KAAK6uD,eAG1E7uD,KAAKwvD,WAMPrsD,EAAKoO,UAAUm3B,OAAS,WACtB1oC,KAAKsqC,UAAW,EAChBtqC,KAAKwvD,UAMPrsD,EAAKoO,UAAUk3B,SAAW,WACxBzoC,KAAKsqC,UAAW,EAChBtqC,KAAKwvD,UAOPrsD,EAAKoO,UAAUk+C,eAAiB,WAC9BzvD,KAAKwvD,UAOPrsD,EAAKoO,UAAUi+C,OAAS,WACtBxvD,KAAK4Q,MAAQ1K,OACblG,KAAK6Q,OAAS3K,QAQhB/C,EAAKoO,UAAUgwC,SAAW,WACxB,MAA6B,kBAAfvhD,MAAKo/B,MAAuBp/B,KAAKo/B,QAAUp/B,KAAKo/B,OAShEj8B,EAAKoO,UAAU44C,iBAAmB,SAAUvmC,EAAKs+B,GAC/C,GAAIrlC,GAAc,CAMlB,QAJK7c,KAAK4Q,OACR5Q,KAAK6oD,OAAOjlC,GAGN5jB,KAAK4zC,OACX,IAAK,SACL,IAAK,MACH,MAAO5zC,MAAKwoB,OAAS3L,CAEvB,KAAK,UACH,GAAI5X,GAAIjF,KAAK4Q,MAAQ,EACjB9K,EAAI9F,KAAK6Q,OAAS,EAClBqyC,EAAKt+C,KAAKqW,IAAIinC,GAASj9C,EACvB2F,EAAKhG,KAAKwW,IAAI8mC,GAASp8C,CAC3B,OAAOb,GAAIa,EAAIlB,KAAKkoB,KAAKo2B,EAAIA,EAAIt4C,EAAIA,EAMvC,KAAK,MACL,IAAK,QACL,IAAK,OACL,QACE,MAAI5K,MAAK4Q,MACAhM,KAAKmG,IACRnG,KAAK+iB,IAAI3nB,KAAK4Q,MAAQ,EAAIhM,KAAKwW,IAAI8mC,IACnCt9C,KAAK+iB,IAAI3nB,KAAK6Q,OAAS,EAAIjM,KAAKqW,IAAIinC,KAAWrlC,EAI5C,IAYf1Z,EAAKoO,UAAUm+C,UAAY,SAAS1C,EAAIC,GACtCjtD,KAAKgtD,GAAKA,EACVhtD,KAAKitD,GAAKA,GASZ9pD,EAAKoO,UAAUo+C,UAAY,SAAS3C,EAAIC,GACtCjtD,KAAKgtD,IAAMA,EACXhtD,KAAKitD,IAAMA,GAOb9pD,EAAKoO,UAAUqzC,aAAe,SAAS90B,GACrC,IAAK9vB,KAAKw/C,OAAQ,CAChB,GAAI/jC,GAAOzb,KAAKq1C,QAAUr1C,KAAKktD,GAC3BzyC,GAAQza,KAAKgtD,GAAKvxC,GAAMzb,KAAK8lD,IACjC9lD,MAAKktD,IAAMzyC,EAAKqV,EAChB9vB,KAAKmQ,GAAMnQ,KAAKktD,GAAKp9B,EAGvB,IAAK9vB,KAAKy/C,OAAQ,CAChB,GAAI/jC,GAAO1b,KAAKq1C,QAAUr1C,KAAKmtD,GAC3BzyC,GAAQ1a,KAAKitD,GAAKvxC,GAAM1b,KAAK8lD,IACjC9lD,MAAKmtD,IAAMzyC,EAAKoV,EAChB9vB,KAAKoQ,GAAMpQ,KAAKmtD,GAAKr9B,IAWzB3sB,EAAKoO,UAAUozC,oBAAsB,SAAS70B,EAAUynB,GACtD,GAAKv3C,KAAKw/C,OAQRx/C,KAAKgtD,GAAK,MARM,CAChB,GAAIvxC,GAAOzb,KAAKq1C,QAAUr1C,KAAKktD,GAC3BzyC,GAAQza,KAAKgtD,GAAKvxC,GAAMzb,KAAK8lD,IACjC9lD,MAAKktD,IAAMzyC,EAAKqV,EAChB9vB,KAAKktD,GAAMtoD,KAAK+iB,IAAI3nB,KAAKktD,IAAM3V,EAAiBv3C,KAAKktD,GAAK,EAAK3V,GAAeA,EAAev3C,KAAKktD,GAClGltD,KAAKmQ,GAAMnQ,KAAKktD,GAAKp9B,EAMvB,GAAK9vB,KAAKy/C,OAQRz/C,KAAKitD,GAAK,MARM,CAChB,GAAIvxC,GAAO1b,KAAKq1C,QAAUr1C,KAAKmtD,GAC3BzyC,GAAQ1a,KAAKitD,GAAKvxC,GAAM1b,KAAK8lD,IACjC9lD,MAAKmtD,IAAMzyC,EAAKoV,EAChB9vB,KAAKmtD,GAAMvoD,KAAK+iB,IAAI3nB,KAAKmtD,IAAM5V,EAAiBv3C,KAAKmtD,GAAK,EAAK5V,GAAeA,EAAev3C,KAAKmtD,GAClGntD,KAAKoQ,GAAMpQ,KAAKmtD,GAAKr9B,IAWzB3sB,EAAKoO,UAAUq+C,QAAU,WACvB,MAAQ5vD,MAAKw/C,QAAUx/C,KAAKy/C,QAS9Bt8C,EAAKoO,UAAUizC,SAAW,SAASD,GACjC,MAAQ3/C,MAAK+iB,IAAI3nB,KAAKktD,IAAM3I,GAAQ3/C,KAAK+iB,IAAI3nB,KAAKmtD,IAAM5I,GAO1DphD,EAAKoO,UAAU6tC,WAAa,WAC1B,MAAOp/C,MAAKsqC,UAOdnnC,EAAKoO,UAAUuB,SAAW,WACxB,MAAO9S,MAAK6G,OASd1D,EAAKoO,UAAUs+C,YAAc,SAAS1/C,EAAGC,GACvC,GAAIqL,GAAKzb,KAAKmQ,EAAIA,EACduL,EAAK1b,KAAKoQ,EAAIA,CAClB,OAAOxL,MAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,IAUlCvY,EAAKoO,UAAU0xC,cAAgB,SAASl4C,EAAK0B,GAC3C,IAAKzM,KAAK6sD,aAA8B3mD,SAAflG,KAAK6G,MAC5B,GAAI4F,GAAO1B,EACT/K,KAAKwoB,QAAUxoB,KAAK0zC,UAAY1zC,KAAK2zC,WAAa,MAE/C,CACH,GAAI75B,IAAS9Z,KAAK2zC,UAAY3zC,KAAK0zC,YAAcjnC,EAAM1B,EACvD/K,MAAKwoB,QAAUxoB,KAAK6G,MAAQkE,GAAO+O,EAAQ9Z,KAAK0zC,UAGpD1zC,KAAK4sD,gBAAkB5sD,KAAKwoB,QAQ9BrlB,EAAKoO,UAAUsyC,KAAO,WACpB,KAAM,wCAQR1gD,EAAKoO,UAAUs3C,OAAS,WACtB,KAAM,0CAQR1lD,EAAKoO,UAAUiwC,kBAAoB,SAAS3hC,GAC1C,MAAQ7f,MAAKiH,KAAoB4Y,EAAIqE,OAC7BlkB,KAAKiH,KAAOjH,KAAK4Q,MAAQiP,EAAI5Y,MAC7BjH,KAAKqH,IAAoBwY,EAAIM,QAC7BngB,KAAKqH,IAAMrH,KAAK6Q,OAASgP,EAAIxY,KAGvClE,EAAKoO,UAAUw9C,aAAe,WAG5B,IAAK/uD,KAAK4Q,QAAU5Q,KAAK6Q,OAAQ,CAC/B,GAAID,GAAOC,CACX,IAAI7Q,KAAK6G,MAAO,CACd7G,KAAKwoB,OAASxoB,KAAK4sD,eACnB,IAAI9yC,GAAQ9Z,KAAKquD,SAASx9C,OAAS7Q,KAAKquD,SAASz9C,KACnC1K,UAAV4T,GACFlJ,EAAQ5Q,KAAKwoB,QAAUxoB,KAAKquD,SAASz9C,MACrCC,EAAS7Q,KAAKwoB,OAAS1O,GAAS9Z,KAAKquD,SAASx9C,SAG9CD,EAAQ,EACRC,EAAS,OAIXD,GAAQ5Q,KAAKquD,SAASz9C,MACtBC,EAAS7Q,KAAKquD,SAASx9C,MAEzB7Q,MAAK4Q,MAASA,EACd5Q,KAAK6Q,OAASA,EAEd7Q,KAAK2tD,gBAAkB,EACnB3tD,KAAK4Q,MAAQ,GAAK5Q,KAAK6Q,OAAS,IAClC7Q,KAAK4Q,OAAUhM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAA0Bv2C,KAAKwtD,uBAClFxtD,KAAK6Q,QAAUjM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAKytD,wBACjFztD,KAAKwoB,QAAU5jB,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAK0tD,wBACjF1tD,KAAK2tD,gBAAkB3tD,KAAK4Q,MAAQA,KAM1CzN,EAAKoO,UAAUu9C,WAAa,SAAUlrC,GACpC5jB,KAAK+uD,aAAanrC,GAElB5jB,KAAKiH,KAASjH,KAAKmQ,EAAInQ,KAAK4Q,MAAQ,EACpC5Q,KAAKqH,IAASrH,KAAKoQ,EAAIpQ,KAAK6Q,OAAS,CAErC,IAAIsG,EACJ,IAA2B,GAAvBnX,KAAKquD,SAASz9C,MAAa,CAE7B,GAAI5Q,KAAK8tD,YAAc,EAAG,CACxB,GAAI3pC,GAAcnkB,KAAK8tD,YAAc,EAAK,GAAK,CAC/C3pC,IAAankB,KAAKgpD,gBAClB7kC,EAAYvf,KAAKmG,IAAI,GAAM/K,KAAK4Q,MAAMuT,GAEtCP,EAAIksC,YAAc,GAClBlsC,EAAImsC,UAAU/vD,KAAKquD,SAAUruD,KAAKiH,KAAOkd,EAAWnkB,KAAKqH,IAAM8c,EAAWnkB,KAAK4Q,MAAQ,EAAEuT,EAAWnkB,KAAK6Q,OAAS,EAAEsT,GAItHP,EAAIksC,YAAc,EAClBlsC,EAAImsC,UAAU/vD,KAAKquD,SAAUruD,KAAKiH,KAAMjH,KAAKqH,IAAKrH,KAAK4Q,MAAO5Q,KAAK6Q,QACnEsG,EAASnX,KAAKoQ,EAAIpQ,KAAK6Q,OAAS,MAIhCsG,GAASnX,KAAKoQ,CAGhBpQ,MAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOvlB,KAAKmQ,EAAGgH,EAAQjR,OAAW,QAI1D/C,EAAKoO,UAAUk9C,WAAa,SAAU7qC,GACpC,IAAK5jB,KAAK4Q,MAAO,CACf,GAAImG,GAAS,EACTi5C,EAAWhwD,KAAKiwD,YAAYrsC,EAChC5jB,MAAK4Q,MAAQo/C,EAASp/C,MAAQ,EAAImG,EAClC/W,KAAK6Q,OAASm/C,EAASn/C,OAAS,EAAIkG,EAEpC/W,KAAK4Q,OAAuE,GAA7DhM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAA+Bv2C,KAAKwtD,uBACvFxtD,KAAK6Q,QAAuE,GAA7DjM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAA+Bv2C,KAAKytD,wBACvFztD,KAAK2tD,gBAAkB3tD,KAAK4Q,OAASo/C,EAASp/C,MAAQ,EAAImG,KAM9D5T,EAAKoO,UAAUi9C,SAAW,SAAU5qC,GAClC5jB,KAAKyuD,WAAW7qC,GAEhB5jB,KAAKiH,KAAOjH,KAAKmQ,EAAInQ,KAAK4Q,MAAQ,EAClC5Q,KAAKqH,IAAMrH,KAAKoQ,EAAIpQ,KAAK6Q,OAAS,CAElC,IAAIq/C,GAAmB,IACnBrzC,EAAc7c,KAAK6c,YACnBszC,EAAqBnwD,KAAK+sD,qBAAuB,EAAI/sD,KAAK6c,WAE9D+G,GAAIY,YAAcxkB,KAAKsqC,SAAWtqC,KAAKuK,MAAMe,UAAUD,OAASrL,KAAKuL,MAAQvL,KAAKuK,MAAMgB,MAAMF,OAASrL,KAAKuK,MAAMc,OAG9GrL,KAAK8tD,YAAc,IACrBlqC,EAAIO,WAAankB,KAAKsqC,SAAW6lB,EAAqBtzC,IAAiB7c,KAAK8tD,YAAc,EAAKoC,EAAmB,GAClHtsC,EAAIO,WAAankB,KAAKgpD,gBACtBplC,EAAIO,UAAYvf,KAAKmG,IAAI/K,KAAK4Q,MAAMgT,EAAIO,WAExCP,EAAIwsC,UAAUpwD,KAAKiH,KAAK,EAAE2c,EAAIO,UAAWnkB,KAAKqH,IAAI,EAAEuc,EAAIO,UAAWnkB,KAAK4Q,MAAM,EAAEgT,EAAIO,UAAWnkB,KAAK6Q,OAAO,EAAE+S,EAAIO,UAAWnkB,KAAKwoB,QACjI5E,EAAIlH,UAENkH,EAAIO,WAAankB,KAAKsqC,SAAW6lB,EAAqBtzC,IAAiB7c,KAAK8tD,YAAc,EAAKoC,EAAmB,GAClHtsC,EAAIO,WAAankB,KAAKgpD,gBACtBplC,EAAIO,UAAYvf,KAAKmG,IAAI/K,KAAK4Q,MAAMgT,EAAIO,WAExCP,EAAIiB,UAAY7kB,KAAKsqC,SAAWtqC,KAAKuK,MAAMe,UAAUF,WAAapL,KAAKuK,MAAMa,WAE7EwY,EAAIwsC,UAAUpwD,KAAKiH,KAAMjH,KAAKqH,IAAKrH,KAAK4Q,MAAO5Q,KAAK6Q,OAAQ7Q,KAAKwoB,QACjE5E,EAAInH,OACJmH,EAAIlH,SAEJ1c,KAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOvlB,KAAKmQ,EAAGnQ,KAAKoQ,IAI5CjN,EAAKoO,UAAUg9C,gBAAkB,SAAU3qC,GACzC,IAAK5jB,KAAK4Q,MAAO,CACf,GAAImG,GAAS,EACTi5C,EAAWhwD,KAAKiwD,YAAYrsC,GAC5BlT,EAAOs/C,EAASp/C,MAAQ,EAAImG,CAChC/W,MAAK4Q,MAAQF,EACb1Q,KAAK6Q,OAASH,EAGd1Q,KAAK4Q,OAAUhM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAKwtD,uBACjFxtD,KAAK6Q,QAAUjM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAKytD,wBACjFztD,KAAKwoB,QAAU5jB,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAK0tD,wBACjF1tD,KAAK2tD,gBAAkB3tD,KAAK4Q,MAAQF,IAIxCvN,EAAKoO,UAAU+8C,cAAgB,SAAU1qC,GACvC5jB,KAAKuuD,gBAAgB3qC,GACrB5jB,KAAKiH,KAAOjH,KAAKmQ,EAAInQ,KAAK4Q,MAAQ,EAClC5Q,KAAKqH,IAAMrH,KAAKoQ,EAAIpQ,KAAK6Q,OAAS,CAElC,IAAIq/C,GAAmB,IACnBrzC,EAAc7c,KAAK6c,YACnBszC,EAAqBnwD,KAAK+sD,qBAAuB,EAAI/sD,KAAK6c,WAE9D+G,GAAIY,YAAcxkB,KAAKsqC,SAAWtqC,KAAKuK,MAAMe,UAAUD,OAASrL,KAAKuL,MAAQvL,KAAKuK,MAAMgB,MAAMF,OAASrL,KAAKuK,MAAMc,OAG9GrL,KAAK8tD,YAAc,IACrBlqC,EAAIO,WAAankB,KAAKsqC,SAAW6lB,EAAqBtzC,IAAiB7c,KAAK8tD,YAAc,EAAKoC,EAAmB,GAClHtsC,EAAIO,WAAankB,KAAKgpD,gBACtBplC,EAAIO,UAAYvf,KAAKmG,IAAI/K,KAAK4Q,MAAMgT,EAAIO,WAExCP,EAAIysC,SAASrwD,KAAKmQ,EAAInQ,KAAK4Q,MAAM,EAAI,EAAEgT,EAAIO,UAAWnkB,KAAKoQ,EAAgB,GAAZpQ,KAAK6Q,OAAa,EAAE+S,EAAIO,UAAWnkB,KAAK4Q,MAAQ,EAAEgT,EAAIO,UAAWnkB,KAAK6Q,OAAS,EAAE+S,EAAIO,WACpJP,EAAIlH,UAENkH,EAAIO,WAAankB,KAAKsqC,SAAW6lB,EAAqBtzC,IAAiB7c,KAAK8tD,YAAc,EAAKoC,EAAmB,GAClHtsC,EAAIO,WAAankB,KAAKgpD,gBACtBplC,EAAIO,UAAYvf,KAAKmG,IAAI/K,KAAK4Q,MAAMgT,EAAIO,WAExCP,EAAIiB,UAAY7kB,KAAKsqC,SAAWtqC,KAAKuK,MAAMe,UAAUF,WAAapL,KAAKuL,MAAQvL,KAAKuK,MAAMgB,MAAMH,WAAapL,KAAKuK,MAAMa,WACxHwY,EAAIysC,SAASrwD,KAAKmQ,EAAInQ,KAAK4Q,MAAM,EAAG5Q,KAAKoQ,EAAgB,GAAZpQ,KAAK6Q,OAAY7Q,KAAK4Q,MAAO5Q,KAAK6Q,QAC/E+S,EAAInH,OACJmH,EAAIlH,SAEJ1c,KAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOvlB,KAAKmQ,EAAGnQ,KAAKoQ,IAI5CjN,EAAKoO,UAAUo9C,cAAgB,SAAU/qC,GACvC,IAAK5jB,KAAK4Q,MAAO,CACf,GAAImG,GAAS,EACTi5C,EAAWhwD,KAAKiwD,YAAYrsC,GAC5B0sC,EAAW1rD,KAAK6H,IAAIujD,EAASp/C,MAAOo/C,EAASn/C,QAAU,EAAIkG,CAC/D/W,MAAKwoB,OAAS8nC,EAAW,EAEzBtwD,KAAK4Q,MAAQ0/C,EACbtwD,KAAK6Q,OAASy/C,EAKdtwD,KAAKwoB,QAAuE,GAA7D5jB,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAA+Bv2C,KAAK0tD,wBACvF1tD,KAAK2tD,gBAAkB3tD,KAAKwoB,OAAS,GAAI8nC,IAI7CntD,EAAKoO,UAAUm9C,YAAc,SAAU9qC,GACrC5jB,KAAK2uD,cAAc/qC,GACnB5jB,KAAKiH,KAAOjH,KAAKmQ,EAAInQ,KAAK4Q,MAAQ,EAClC5Q,KAAKqH,IAAMrH,KAAKoQ,EAAIpQ,KAAK6Q,OAAS,CAElC,IAAIq/C,GAAmB,IACnBrzC,EAAc7c,KAAK6c,YACnBszC,EAAqBnwD,KAAK+sD,qBAAuB,EAAI/sD,KAAK6c,WAE9D+G,GAAIY,YAAcxkB,KAAKsqC,SAAWtqC,KAAKuK,MAAMe,UAAUD,OAASrL,KAAKuL,MAAQvL,KAAKuK,MAAMgB,MAAMF,OAASrL,KAAKuK,MAAMc,OAG9GrL,KAAK8tD,YAAc,IACrBlqC,EAAIO,WAAankB,KAAKsqC,SAAW6lB,EAAqBtzC,IAAiB7c,KAAK8tD,YAAc,EAAKoC,EAAmB,GAClHtsC,EAAIO,WAAankB,KAAKgpD,gBACtBplC,EAAIO,UAAYvf,KAAKmG,IAAI/K,KAAK4Q,MAAMgT,EAAIO,WAExCP,EAAI2sC,OAAOvwD,KAAKmQ,EAAGnQ,KAAKoQ,EAAGpQ,KAAKwoB,OAAO,EAAE5E,EAAIO,WAC7CP,EAAIlH,UAENkH,EAAIO,WAAankB,KAAKsqC,SAAW6lB,EAAqBtzC,IAAiB7c,KAAK8tD,YAAc,EAAKoC,EAAmB,GAClHtsC,EAAIO,WAAankB,KAAKgpD,gBACtBplC,EAAIO,UAAYvf,KAAKmG,IAAI/K,KAAK4Q,MAAMgT,EAAIO,WAExCP,EAAIiB,UAAY7kB,KAAKsqC,SAAWtqC,KAAKuK,MAAMe,UAAUF,WAAapL,KAAKuL,MAAQvL,KAAKuK,MAAMgB,MAAMH,WAAapL,KAAKuK,MAAMa,WACxHwY,EAAI2sC,OAAOvwD,KAAKmQ,EAAGnQ,KAAKoQ,EAAGpQ,KAAKwoB,QAChC5E,EAAInH,OACJmH,EAAIlH,SAEJ1c,KAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOvlB,KAAKmQ,EAAGnQ,KAAKoQ,IAG5CjN,EAAKoO,UAAUs9C,eAAiB,SAAUjrC,GACxC,IAAK5jB,KAAK4Q,MAAO,CACf,GAAIo/C,GAAWhwD,KAAKiwD,YAAYrsC,EAEhC5jB,MAAK4Q,MAAyB,IAAjBo/C,EAASp/C,MACtB5Q,KAAK6Q,OAA2B,EAAlBm/C,EAASn/C,OACnB7Q,KAAK4Q,MAAQ5Q,KAAK6Q,SACpB7Q,KAAK4Q,MAAQ5Q,KAAK6Q,OAEpB,IAAI2/C,GAAcxwD,KAAK4Q,KAGvB5Q,MAAK4Q,OAAUhM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAKwtD,uBACjFxtD,KAAK6Q,QAAUjM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAKytD,wBACjFztD,KAAKwoB,QAAU5jB,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAK0tD,wBACjF1tD,KAAK2tD,gBAAkB3tD,KAAK4Q,MAAQ4/C,IAIxCrtD,EAAKoO,UAAUq9C,aAAe,SAAUhrC,GACtC5jB,KAAK6uD,eAAejrC,GACpB5jB,KAAKiH,KAAOjH,KAAKmQ,EAAInQ,KAAK4Q,MAAQ,EAClC5Q,KAAKqH,IAAMrH,KAAKoQ,EAAIpQ,KAAK6Q,OAAS,CAElC,IAAIq/C,GAAmB,IACnBrzC,EAAc7c,KAAK6c,YACnBszC,EAAqBnwD,KAAK+sD,qBAAuB,EAAI/sD,KAAK6c,WAE9D+G,GAAIY,YAAcxkB,KAAKsqC,SAAWtqC,KAAKuK,MAAMe,UAAUD,OAASrL,KAAKuL,MAAQvL,KAAKuK,MAAMgB,MAAMF,OAASrL,KAAKuK,MAAMc,OAG9GrL,KAAK8tD,YAAc,IACrBlqC,EAAIO,WAAankB,KAAKsqC,SAAW6lB,EAAqBtzC,IAAiB7c,KAAK8tD,YAAc,EAAKoC,EAAmB,GAClHtsC,EAAIO,WAAankB,KAAKgpD,gBACtBplC,EAAIO,UAAYvf,KAAKmG,IAAI/K,KAAK4Q,MAAMgT,EAAIO,WAExCP,EAAI6sC,QAAQzwD,KAAKiH,KAAK,EAAE2c,EAAIO,UAAWnkB,KAAKqH,IAAI,EAAEuc,EAAIO,UAAWnkB,KAAK4Q,MAAM,EAAEgT,EAAIO,UAAWnkB,KAAK6Q,OAAO,EAAE+S,EAAIO,WAC/GP,EAAIlH,UAENkH,EAAIO,WAAankB,KAAKsqC,SAAW6lB,EAAqBtzC,IAAiB7c,KAAK8tD,YAAc,EAAKoC,EAAmB,GAClHtsC,EAAIO,WAAankB,KAAKgpD,gBACtBplC,EAAIO,UAAYvf,KAAKmG,IAAI/K,KAAK4Q,MAAMgT,EAAIO,WAExCP,EAAIiB,UAAY7kB,KAAKsqC,SAAWtqC,KAAKuK,MAAMe,UAAUF,WAAapL,KAAKuL,MAAQvL,KAAKuK,MAAMgB,MAAMH,WAAapL,KAAKuK,MAAMa,WAExHwY,EAAI6sC,QAAQzwD,KAAKiH,KAAMjH,KAAKqH,IAAKrH,KAAK4Q,MAAO5Q,KAAK6Q,QAClD+S,EAAInH,OACJmH,EAAIlH,SACJ1c,KAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOvlB,KAAKmQ,EAAGnQ,KAAKoQ,IAG5CjN,EAAKoO,UAAU29C,SAAW,SAAUtrC,GAClC5jB,KAAK0wD,WAAW9sC,EAAK,WAGvBzgB,EAAKoO,UAAU89C,cAAgB,SAAUzrC,GACvC5jB,KAAK0wD,WAAW9sC,EAAK,aAGvBzgB,EAAKoO,UAAU+9C,kBAAoB,SAAU1rC,GAC3C5jB,KAAK0wD,WAAW9sC,EAAK,iBAGvBzgB,EAAKoO,UAAU69C,YAAc,SAAUxrC,GACrC5jB,KAAK0wD,WAAW9sC,EAAK,WAGvBzgB,EAAKoO,UAAUg+C,UAAY,SAAU3rC,GACnC5jB,KAAK0wD,WAAW9sC,EAAK,SAGvBzgB,EAAKoO,UAAU49C,aAAe,WAC5B,IAAKnvD,KAAK4Q,MAAO,CACf5Q,KAAKwoB,OAASxoB,KAAK4sD,eACnB,IAAIl8C,GAAO,EAAI1Q,KAAKwoB,MACpBxoB,MAAK4Q,MAAQF,EACb1Q,KAAK6Q,OAASH,EAGd1Q,KAAK4Q,OAAUhM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAKwtD,uBACjFxtD,KAAK6Q,QAAUjM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAKytD,wBACjFztD,KAAKwoB,QAAuE,GAA7D5jB,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAA+Bv2C,KAAK0tD,wBACvF1tD,KAAK2tD,gBAAkB3tD,KAAK4Q,MAAQF,IAIxCvN,EAAKoO,UAAUm/C,WAAa,SAAU9sC,EAAKgwB,GACzC5zC,KAAKmvD,aAAavrC,GAElB5jB,KAAKiH,KAAOjH,KAAKmQ,EAAInQ,KAAK4Q,MAAQ,EAClC5Q,KAAKqH,IAAMrH,KAAKoQ,EAAIpQ,KAAK6Q,OAAS,CAElC,IAAIq/C,GAAmB,IACnBrzC,EAAc7c,KAAK6c,YACnBszC,EAAqBnwD,KAAK+sD,qBAAuB,EAAI/sD,KAAK6c,YAC1D8zC,EAAmB,CAGvB,QAAQ/c,GACN,IAAK,MAAiB+c,EAAmB,CAAG,MAC5C,KAAK,SAAiBA,EAAmB,CAAG,MAC5C,KAAK,WAAiBA,EAAmB,CAAG,MAC5C,KAAK,eAAiBA,EAAmB,CAAG,MAC5C,KAAK,OAAiBA,EAAmB,EAG3C/sC,EAAIY,YAAcxkB,KAAKsqC,SAAWtqC,KAAKuK,MAAMe,UAAUD,OAASrL,KAAKuL,MAAQvL,KAAKuK,MAAMgB,MAAMF,OAASrL,KAAKuK,MAAMc,OAG9GrL,KAAK8tD,YAAc,IACrBlqC,EAAIO,WAAankB,KAAKsqC,SAAW6lB,EAAqBtzC,IAAiB7c,KAAK8tD,YAAc,EAAKoC,EAAmB,GAClHtsC,EAAIO,WAAankB,KAAKgpD,gBACtBplC,EAAIO,UAAYvf,KAAKmG,IAAI/K,KAAK4Q,MAAMgT,EAAIO,WAExCP,EAAIgwB,GAAO5zC,KAAKmQ,EAAGnQ,KAAKoQ,EAAGpQ,KAAKwoB,OAASmoC,EAAmB/sC,EAAIO,WAChEP,EAAIlH,UAENkH,EAAIO,WAAankB,KAAKsqC,SAAW6lB,EAAqBtzC,IAAiB7c,KAAK8tD,YAAc,EAAKoC,EAAmB,GAClHtsC,EAAIO,WAAankB,KAAKgpD,gBACtBplC,EAAIO,UAAYvf,KAAKmG,IAAI/K,KAAK4Q,MAAMgT,EAAIO,WAExCP,EAAIiB,UAAY7kB,KAAKsqC,SAAWtqC,KAAKuK,MAAMe,UAAUF,WAAapL,KAAKuL,MAAQvL,KAAKuK,MAAMgB,MAAMH,WAAapL,KAAKuK,MAAMa,WACxHwY,EAAIgwB,GAAO5zC,KAAKmQ,EAAGnQ,KAAKoQ,EAAGpQ,KAAKwoB,QAChC5E,EAAInH,OACJmH,EAAIlH,SAEA1c,KAAKulB,OACPvlB,KAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOvlB,KAAKmQ,EAAGnQ,KAAKoQ,EAAIpQ,KAAK6Q,OAAS,EAAG3K,OAAW,OAAM,IAIpF/C,EAAKoO,UAAU09C,YAAc,SAAUrrC,GACrC,IAAK5jB,KAAK4Q,MAAO,CACf,GAAImG,GAAS,EACTi5C,EAAWhwD,KAAKiwD,YAAYrsC,EAChC5jB,MAAK4Q,MAAQo/C,EAASp/C,MAAQ,EAAImG,EAClC/W,KAAK6Q,OAASm/C,EAASn/C,OAAS,EAAIkG,EAGpC/W,KAAK4Q,OAAUhM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAKwtD,uBACjFxtD,KAAK6Q,QAAUjM,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAKytD,wBACjFztD,KAAKwoB,QAAU5jB,KAAKmG,IAAI/K,KAAK8tD,YAAc,EAAG9tD,KAAKu2C,uBAAyBv2C,KAAK0tD,wBACjF1tD,KAAK2tD,gBAAkB3tD,KAAK4Q,OAASo/C,EAASp/C,MAAQ,EAAImG,KAI9D5T,EAAKoO,UAAUy9C,UAAY,SAAUprC,GACnC5jB,KAAKivD,YAAYrrC,GACjB5jB,KAAKiH,KAAOjH,KAAKmQ,EAAInQ,KAAK4Q,MAAQ,EAClC5Q,KAAKqH,IAAMrH,KAAKoQ,EAAIpQ,KAAK6Q,OAAS,EAElC7Q,KAAK4oD,OAAOhlC,EAAK5jB,KAAKulB,MAAOvlB,KAAKmQ,EAAGnQ,KAAKoQ,IAI5CjN,EAAKoO,UAAUq3C,OAAS,SAAUhlC,EAAKyC,EAAMlW,EAAGC,EAAGq2B,EAAOmqB,EAAUC,GAClE,GAAIxqC,GAAQrmB,KAAKg0C,SAAWh0C,KAAK4tD,aAAe5tD,KAAKysD,kBAAmB,CACtE7oC,EAAIQ,MAAQpkB,KAAKsqC,SAAW,QAAU,IAAMtqC,KAAKg0C,SAAW,MAAQh0C,KAAKi0C,SACzErwB,EAAIiB,UAAY7kB,KAAK+zC,WAAa,QAClCnwB,EAAIwB,UAAYqhB,GAAS,SACzB7iB,EAAIyB,aAAeurC,GAAY,QAE/B,IAAItwB,GAAQja,EAAK3e,MAAM,MACnBopD,EAAYxwB,EAAMj7B,OAClB2uC,EAAYh0C,KAAKg0C,SAAW,EAC5B+c,EAAQ3gD,GAAK,EAAI0gD,GAAa,EAAI9c,CAChB,IAAlB6c,IACFE,EAAQ3gD,GAAK,EAAI0gD,IAAc,EAAI9c,GAGrC,KAAK,GAAI9uC,GAAI,EAAO4rD,EAAJ5rD,EAAeA,IAC7B0e,EAAI0B,SAASgb,EAAMp7B,GAAIiL,EAAG4gD,GAC1BA,GAAS/c,IAMf7wC,EAAKoO,UAAU0+C,YAAc,SAASrsC,GACpC,GAAmB1d,SAAflG,KAAKulB,MAAqB,CAC5B3B,EAAIQ,MAAQpkB,KAAKsqC,SAAW,QAAU,IAAMtqC,KAAKg0C,SAAW,MAAQh0C,KAAKi0C,QAMzE,KAAK,GAJD3T,GAAQtgC,KAAKulB,MAAM7d,MAAM,MACzBmJ,GAAU7Q,KAAKg0C,SAAW,GAAK1T,EAAMj7B,OACrCuL,EAAQ,EAEH1L,EAAI,EAAG+2B,EAAOqE,EAAMj7B,OAAY42B,EAAJ/2B,EAAUA,IAC7C0L,EAAQhM,KAAK6H,IAAImE,EAAOgT,EAAIylC,YAAY/oB,EAAMp7B,IAAI0L,MAGpD,QAAQA,MAASA,EAAOC,OAAUA,GAGlC,OAAQD,MAAS,EAAGC,OAAU,IAUlC1N,EAAKoO,UAAUqyC,OAAS,WACtB,MAAmB19C,UAAflG,KAAK4Q,MACD5Q,KAAKmQ,EAAInQ,KAAK4Q,MAAO5Q,KAAKgpD,iBAAoBhpD,KAAK65C,cAAc1pC,GACjEnQ,KAAKmQ,EAAInQ,KAAK4Q,MAAO5Q,KAAKgpD,gBAAoBhpD,KAAK85C,kBAAkB3pC,GACrEnQ,KAAKoQ,EAAIpQ,KAAK6Q,OAAO7Q,KAAKgpD,iBAAoBhpD,KAAK65C,cAAczpC,GACjEpQ,KAAKoQ,EAAIpQ,KAAK6Q,OAAO7Q,KAAKgpD,gBAAoBhpD,KAAK85C,kBAAkB1pC,GAGpE,GAQXjN,EAAKoO,UAAUy/C,OAAS,WACtB,MAAQhxD,MAAKmQ,GAAKnQ,KAAK65C,cAAc1pC,GAC7BnQ,KAAKmQ,EAAInQ,KAAK85C,kBAAkB3pC,GAChCnQ,KAAKoQ,GAAKpQ,KAAK65C,cAAczpC,GAC7BpQ,KAAKoQ,EAAIpQ,KAAK85C,kBAAkB1pC,GAW1CjN,EAAKoO,UAAUoyC,eAAiB,SAAS7pC,EAAM+/B,EAAcC,GAC3D95C,KAAKgpD,gBAAkB,EAAIlvC,EAC3B9Z,KAAK4tD,aAAe9zC,EACpB9Z,KAAK65C,cAAgBA,EACrB75C,KAAK85C,kBAAoBA,GAS3B32C,EAAKoO,UAAUusB,SAAW,SAAShkB,GACjC9Z,KAAKgpD,gBAAkB,EAAIlvC,EAC3B9Z,KAAK4tD,aAAe9zC,GAQtB3W,EAAKoO,UAAU0/C,cAAgB,WAC7BjxD,KAAKktD,GAAK,EACVltD,KAAKmtD,GAAK,GASZhqD,EAAKoO,UAAU2/C,eAAiB,SAASC,GACvC,GAAIC,GAAepxD,KAAKktD,GAAKltD,KAAKktD,GAAKiE,CAEvCnxD,MAAKktD,GAAKtoD,KAAKkoB,KAAKskC,EAAapxD,KAAK8lD,MACtCsL,EAAepxD,KAAKmtD,GAAKntD,KAAKmtD,GAAKgE,EAEnCnxD,KAAKmtD,GAAKvoD,KAAKkoB,KAAKskC,EAAapxD,KAAK8lD,OAGxCjmD,EAAOD,QAAUuD,GAKb,SAAStD,GAWb,QAASuD,GAAMwT,EAAWzG,EAAGC,EAAGiW,EAAM7V,GAElCxQ,KAAK4W,UADHA,EACeA,EAGAhH,SAASkiB,KAId5rB,SAAVsK,IACe,gBAANL,IACTK,EAAQL,EACRA,EAAIjK,QACqB,gBAATmgB,IAChB7V,EAAQ6V,EACRA,EAAOngB,QAGPsK,GACEujC,UAAW,QACXC,SAAU,GACVC,SAAU,UACV1pC,OACEc,OAAQ,OACRD,WAAY,aAMpBpL,KAAKmQ,EAAI,EACTnQ,KAAKoQ,EAAI,EACTpQ,KAAK6gB,QAAU,EAEL3a,SAANiK,GAAyBjK,SAANkK,GACrBpQ,KAAK4hD,YAAYzxC,EAAGC,GAETlK,SAATmgB,GACFrmB,KAAK6hD,QAAQx7B,GAIfrmB,KAAKmc,MAAQvM,SAASK,cAAc,MACpC,IAAIohD,GAAYrxD,KAAKmc,MAAM3L,KAC3B6gD,GAAU5wC,SAAW,WACrB4wC,EAAUz6B,WAAa,SACvBy6B,EAAUhmD,OAAS,aAAemF,EAAMjG,MAAMc,OAC9CgmD,EAAU9mD,MAAQiG,EAAMujC,UACxBsd,EAAUrd,SAAWxjC,EAAMwjC,SAAW,KACtCqd,EAAUC,WAAa9gD,EAAMyjC,SAC7Bod,EAAUxwC,QAAU7gB,KAAK6gB,QAAU,KACnCwwC,EAAU70C,gBAAkBhM,EAAMjG,MAAMa,WACxCimD,EAAUlkC,aAAe,MACzBkkC,EAAUjiC,gBAAkB,MAC5BiiC,EAAUE,mBAAqB,MAC/BF,EAAUjkC,UAAY,wCACtBikC,EAAUG,WAAa,SACvBxxD,KAAK4W,UAAU9G,YAAY9P,KAAKmc,OAOlC/Y,EAAMmO,UAAUqwC,YAAc,SAASzxC,EAAGC,GACxCpQ,KAAKmQ,EAAIyX,SAASzX,GAClBnQ,KAAKoQ,EAAIwX,SAASxX,IAOpBhN,EAAMmO,UAAUswC,QAAU,SAASx7B,GACjCrmB,KAAKmc,MAAM2E,UAAYuF,GAOzBjjB,EAAMmO,UAAU8vB,KAAO,SAAUA,GAK/B,GAJan7B,SAATm7B,IACFA,GAAO,GAGLA,EAAM,CACR,GAAIxwB,GAAS7Q,KAAKmc,MAAMuF,aACpB9Q,EAAS5Q,KAAKmc,MAAME,YACpBsV,EAAY3xB,KAAKmc,MAAM3S,WAAWkY,aAClC+vC,EAAWzxD,KAAKmc,MAAM3S,WAAW6S,YAEjChV,EAAOrH,KAAKoQ,EAAIS,CAChBxJ,GAAMwJ,EAAS7Q,KAAK6gB,QAAU8Q,IAChCtqB,EAAMsqB,EAAY9gB,EAAS7Q,KAAK6gB,SAE9BxZ,EAAMrH,KAAK6gB,UACbxZ,EAAMrH,KAAK6gB,QAGb,IAAI5Z,GAAOjH,KAAKmQ,CACZlJ,GAAO2J,EAAQ5Q,KAAK6gB,QAAU4wC,IAChCxqD,EAAOwqD,EAAW7gD,EAAQ5Q,KAAK6gB,SAE7B5Z,EAAOjH,KAAK6gB,UACd5Z,EAAOjH,KAAK6gB,SAGd7gB,KAAKmc,MAAM3L,MAAMvJ,KAAOA,EAAO,KAC/BjH,KAAKmc,MAAM3L,MAAMnJ,IAAMA,EAAM,KAC7BrH,KAAKmc,MAAM3L,MAAMomB,WAAa,cAG9B52B,MAAKohC,QAOTh+B,EAAMmO,UAAU6vB,KAAO,WACrBphC,KAAKmc,MAAM3L,MAAMomB,WAAa,UAGhC/2B,EAAOD,QAAUwD,GAKb,SAASvD,EAAQD,GAarB,QAAS8xD,GAAU3gD,GAEjB,MADAkc,GAAMlc,EACC4gD,IAoCT,QAAS14B,KACPlxB,EAAQ,EACRtH,EAAIwsB,EAAIhL,OAAO,GAQjB,QAASiD,KACPnd,IACAtH,EAAIwsB,EAAIhL,OAAOla,GAOjB,QAAS6pD,KACP,MAAO3kC,GAAIhL,OAAOla,EAAQ,GAS5B,QAAS8pD,GAAepxD,GACtB,MAAOqxD,GAAkB7kD,KAAKxM,GAShC,QAASsxD,GAAO9sD,EAAGa,GAKjB,GAJKb,IACHA,MAGEa,EACF,IAAK,GAAIsO,KAAQtO,GACXA,EAAEN,eAAe4O,KACnBnP,EAAEmP,GAAQtO,EAAEsO,GAIlB,OAAOnP,GAeT,QAAS+Q,GAAS6J,EAAKskB,EAAMt9B,GAG3B,IAFA,GAAIgO,GAAOsvB,EAAKz8B,MAAM,KAClBsqD,EAAInyC,EACDhL,EAAKxP,QAAQ,CAClB,GAAIiD,GAAMuM,EAAKlF,OACXkF,GAAKxP,QAEF2sD,EAAE1pD,KACL0pD,EAAE1pD,OAEJ0pD,EAAIA,EAAE1pD,IAIN0pD,EAAE1pD,GAAOzB,GAWf,QAASorD,GAAQ1jC,EAAOitB,GAOtB,IANA,GAAIt2C,GAAGC,EACH8yB,EAAU,KAGVi6B,GAAU3jC,GACV7uB,EAAO6uB,EACJ7uB,EAAKy/B,QACV+yB,EAAOtqD,KAAKlI,EAAKy/B,QACjBz/B,EAAOA,EAAKy/B,MAId,IAAIz/B,EAAK+zC,MACP,IAAKvuC,EAAI,EAAGC,EAAMzF,EAAK+zC,MAAMpuC,OAAYF,EAAJD,EAASA,IAC5C,GAAIs2C,EAAKn7C,KAAOX,EAAK+zC,MAAMvuC,GAAG7E,GAAI,CAChC43B,EAAUv4B,EAAK+zC,MAAMvuC,EACrB,OAiBN,IAZK+yB,IAEHA,GACE53B,GAAIm7C,EAAKn7C,IAEPkuB,EAAMitB,OAERvjB,EAAQk6B,KAAOJ,EAAM95B,EAAQk6B,KAAM5jC,EAAMitB,QAKxCt2C,EAAIgtD,EAAO7sD,OAAS,EAAGH,GAAK,EAAGA,IAAK,CACvC,GAAI+G,GAAIimD,EAAOhtD,EAEV+G,GAAEwnC,QACLxnC,EAAEwnC,UAE4B,IAA5BxnC,EAAEwnC,MAAM9rC,QAAQswB,IAClBhsB,EAAEwnC,MAAM7rC,KAAKqwB,GAKbujB,EAAK2W,OACPl6B,EAAQk6B,KAAOJ,EAAM95B,EAAQk6B,KAAM3W,EAAK2W,OAS5C,QAASC,GAAQ7jC,EAAOkzB,GAKtB,GAJKlzB,EAAM6lB,QACT7lB,EAAM6lB,UAER7lB,EAAM6lB,MAAMxsC,KAAK65C,GACblzB,EAAMkzB,KAAM,CACd,GAAI0Q,GAAOJ,KAAUxjC,EAAMkzB,KAC3BA,GAAK0Q,KAAOJ,EAAMI,EAAM1Q,EAAK0Q,OAajC,QAASE,GAAW9jC,EAAOrI,EAAMC,EAAI7f,EAAM6rD,GACzC,GAAI1Q,IACFv7B,KAAMA,EACNC,GAAIA,EACJ7f,KAAMA,EAQR,OALIioB,GAAMkzB,OACRA,EAAK0Q,KAAOJ,KAAUxjC,EAAMkzB,OAE9BA,EAAK0Q,KAAOJ,EAAMtQ,EAAK0Q,SAAYA,GAE5B1Q,EAOT,QAAS6Q,KAKP,IAJAC,EAAYC,EAAUC,KACtBC,EAAQ,GAGI,KAALjyD,GAAiB,KAALA,GAAkB,MAALA,GAAkB,MAALA,GAC3CykB,GAGF,GAAG,CACD,GAAIytC,IAAY,CAGhB,IAAS,KAALlyD,EAAU,CAGZ,IADA,GAAIyE,GAAI6C,EAAQ,EACQ,KAAjBklB,EAAIhL,OAAO/c,IAA8B,KAAjB+nB,EAAIhL,OAAO/c,IACxCA,GAEF,IAAqB,MAAjB+nB,EAAIhL,OAAO/c,IAA+B,IAAjB+nB,EAAIhL,OAAO/c,GAAU,CAEhD,KAAY,IAALzE,GAAgB,MAALA,GAChBykB,GAEFytC,IAAY,GAGhB,GAAS,KAALlyD,GAA6B,KAAjBmxD,IAAsB,CAEpC,KAAY,IAALnxD,GAAgB,MAALA,GAChBykB,GAEFytC,IAAY,EAEd,GAAS,KAALlyD,GAA6B,KAAjBmxD,IAAsB,CAEpC,KAAY,IAALnxD,GAAS,CACd,GAAS,KAALA,GAA6B,KAAjBmxD,IAAsB,CAEpC1sC,IACAA,GACA,OAGAA,IAGJytC,GAAY,EAId,KAAY,KAALlyD,GAAiB,KAALA,GAAkB,MAALA,GAAkB,MAALA,GAC3CykB,UAGGytC,EAGP,IAAS,IAALlyD,EAGF,YADA8xD,EAAYC,EAAUI,UAKxB,IAAIC,GAAKpyD,EAAImxD,GACb,IAAIkB,EAAWD,GAKb,MAJAN,GAAYC,EAAUI,UACtBF,EAAQG,EACR3tC,QACAA,IAKF,IAAI4tC,EAAWryD,GAIb,MAHA8xD,GAAYC,EAAUI,UACtBF,EAAQjyD,MACRykB,IAMF,IAAI2sC,EAAepxD,IAAW,KAALA,EAAU,CAIjC,IAHAiyD,GAASjyD,EACTykB,IAEO2sC,EAAepxD,IACpBiyD,GAASjyD,EACTykB,GAYF,OAVa,SAATwtC,EACFA,GAAQ,EAEQ,QAATA,EACPA,GAAQ,EAEAtuD,MAAMR,OAAO8uD,MACrBA,EAAQ9uD,OAAO8uD,SAEjBH,EAAYC,EAAUO,YAKxB,GAAS,KAALtyD,EAAU,CAEZ,IADAykB,IACY,IAALzkB,IAAiB,KAALA,GAAkB,KAALA,GAA6B,KAAjBmxD,MAC1Cc,GAASjyD,EACA,KAALA,GACFykB,IAEFA,GAEF,IAAS,KAALzkB,EACF,KAAMuyD,GAAe,2BAIvB,OAFA9tC,UACAqtC,EAAYC,EAAUO,YAMxB,IADAR,EAAYC,EAAUS,QACV,IAALxyD,GACLiyD,GAASjyD,EACTykB,GAEF,MAAM,IAAIrO,aAAY,yBAA2Bq8C,EAAKR,EAAO,IAAM,KAOrE,QAASf,KACP,GAAIpjC,KAwBJ,IAtBA0K,IACAq5B,IAGa,UAATI,IACFnkC,EAAM4kC,QAAS,EACfb,MAIW,SAATI,GAA6B,WAATA,KACtBnkC,EAAMjoB,KAAOosD,EACbJ,KAIEC,GAAaC,EAAUO,aACzBxkC,EAAMluB,GAAKqyD,EACXJ,KAIW,KAATI,EACF,KAAMM,GAAe,2BAQvB,IANAV,IAGAc,EAAgB7kC,GAGH,KAATmkC,EACF,KAAMM,GAAe,2BAKvB,IAHAV,IAGc,KAAVI,EACF,KAAMM,GAAe,uBASvB,OAPAV,WAGO/jC,GAAMitB,WACNjtB,GAAMkzB,WACNlzB,GAAMA,MAENA,EAOT,QAAS6kC,GAAiB7kC,GACxB,KAAiB,KAAVmkC,GAAyB,KAATA,GACrBW,EAAe9kC,GACF,KAATmkC,GACFJ,IAWN,QAASe,GAAe9kC,GAEtB,GAAI+kC,GAAWC,EAAchlC,EAC7B,IAAI+kC,EAIF,WAFAE,GAAUjlC,EAAO+kC,EAMnB,IAAInB,GAAOsB,EAAwBllC,EACnC,KAAI4jC,EAAJ,CAKA,GAAII,GAAaC,EAAUO,WACzB,KAAMC,GAAe,sBAEvB,IAAI3yD,GAAKqyD,CAGT,IAFAJ,IAEa,KAATI,EAAc,CAGhB,GADAJ,IACIC,GAAaC,EAAUO,WACzB,KAAMC,GAAe,sBAEvBzkC,GAAMluB,GAAMqyD,EACZJ,QAIAoB,GAAmBnlC,EAAOluB,IAS9B,QAASkzD,GAAehlC,GACtB,GAAI+kC,GAAW,IAgBf,IAba,YAATZ,IACFY,KACAA,EAAShtD,KAAO,WAChBgsD,IAGIC,GAAaC,EAAUO,aACzBO,EAASjzD,GAAKqyD,EACdJ,MAKS,KAATI,EAAc,CAehB,GAdAJ,IAEKgB,IACHA,MAEFA,EAASn0B,OAAS5Q,EAClB+kC,EAAS9X,KAAOjtB,EAAMitB,KACtB8X,EAAS7R,KAAOlzB,EAAMkzB,KACtB6R,EAAS/kC,MAAQA,EAAMA,MAGvB6kC,EAAgBE,GAGH,KAATZ,EACF,KAAMM,GAAe,2BAEvBV,WAGOgB,GAAS9X,WACT8X,GAAS7R,WACT6R,GAAS/kC,YACT+kC,GAASn0B,OAGX5Q,EAAMolC,YACTplC,EAAMolC,cAERplC,EAAMolC,UAAU/rD,KAAK0rD,GAGvB,MAAOA,GAYT,QAASG,GAAyBllC,GAEhC,MAAa,QAATmkC,GACFJ,IAGA/jC,EAAMitB,KAAOoY,IACN,QAES,QAATlB,GACPJ,IAGA/jC,EAAMkzB,KAAOmS,IACN,QAES,SAATlB,GACPJ,IAGA/jC,EAAMA,MAAQqlC,IACP,SAGF,KAQT,QAASF,GAAmBnlC,EAAOluB,GAEjC,GAAIm7C,IACFn7C,GAAIA,GAEF8xD,EAAOyB,GACPzB,KACF3W,EAAK2W,KAAOA,GAEdF,EAAQ1jC,EAAOitB,GAGfgY,EAAUjlC,EAAOluB,GAQnB,QAASmzD,GAAUjlC,EAAOrI,GACxB,KAAgB,MAATwsC,GAA0B,MAATA,GAAe,CACrC,GAAIvsC,GACA7f,EAAOosD,CACXJ,IAEA,IAAIgB,GAAWC,EAAchlC,EAC7B,IAAI+kC,EACFntC,EAAKmtC,MAEF,CACH,GAAIf,GAAaC,EAAUO,WACzB,KAAMC,GAAe,kCAEvB7sC,GAAKusC,EACLT,EAAQ1jC,GACNluB,GAAI8lB,IAENmsC,IAIF,GAAIH,GAAOyB,IAGPnS,EAAO4Q,EAAW9jC,EAAOrI,EAAMC,EAAI7f,EAAM6rD,EAC7CC,GAAQ7jC,EAAOkzB,GAEfv7B,EAAOC,GASX,QAASytC,KAGP,IAFA,GAAIzB,GAAO,KAEK,KAATO,GAAc,CAGnB,IAFAJ,IACAH,KACiB,KAAVO,GAAyB,KAATA,GAAc,CACnC,GAAIH,GAAaC,EAAUO,WACzB,KAAMC,GAAe,0BAEvB,IAAI5+C,GAAOs+C,CAGX,IADAJ,IACa,KAATI,EACF,KAAMM,GAAe,wBAIvB,IAFAV,IAEIC,GAAaC,EAAUO,WACzB,KAAMC,GAAe,2BAEvB,IAAInsD,GAAQ6rD,CACZ18C,GAASm8C,EAAM/9C,EAAMvN,GAErByrD,IACY,KAARI,GACFJ,IAIJ,GAAa,KAATI,EACF,KAAMM,GAAe,qBAEvBV,KAGF,MAAOH,GAQT,QAASa,GAAea,GACtB,MAAO,IAAIh9C,aAAYg9C,EAAU,UAAYX,EAAKR,EAAO,IAAM,WAAa3qD,EAAQ,KAStF,QAASmrD,GAAM7sC,EAAMytC,GACnB,MAAQztC,GAAKhhB,QAAUyuD,EAAaztC,EAAQA,EAAK0tC,OAAO,EAAG,IAAM,MASnE,QAASC,GAASC,EAAQC,EAAQ5rB,GAC5B2rB,YAAkBtuD,OACpBsuD,EAAOhsD,QAAQ,SAAUksD,GACnBD,YAAkBvuD,OACpBuuD,EAAOjsD,QAAQ,SAAUmsD,GACvB9rB,EAAG6rB,EAAOC,KAIZ9rB,EAAG6rB,EAAOD,KAKVA,YAAkBvuD,OACpBuuD,EAAOjsD,QAAQ,SAAUmsD,GACvB9rB,EAAG2rB,EAAQG,KAIb9rB,EAAG2rB,EAAQC,GAWjB,QAAStX,GAAY7rC,GA+BjB,QAASsjD,GAAYC,GACnB,GAAIC,IACFruC,KAAMouC,EAAQpuC,KACdC,GAAImuC,EAAQnuC,GAId,OAFA4rC,GAAMwC,EAAWD,EAAQnC,MACzBoC,EAAU/jD,MAAyB,MAAhB8jD,EAAQhuD,KAAgB,QAAU,OAC9CiuD,EApCX,GAAI5X,GAAU+U,EAAS3gD,GACnByjD,GACF/gB,SACAW,SACA1mC,WAkFF,OA9EIivC,GAAQlJ,OACVkJ,EAAQlJ,MAAMxrC,QAAQ,SAAUwsD,GAC9B,GAAIC,IACFr0D,GAAIo0D,EAAQp0D,GACZklB,MAAOzhB,OAAO2wD,EAAQlvC,OAASkvC,EAAQp0D,IAEzC0xD,GAAM2C,EAAWD,EAAQtC,MACrBuC,EAAU7gB,QACZ6gB,EAAU9gB,MAAQ,SAEpB4gB,EAAU/gB,MAAM7rC,KAAK8sD,KAKrB/X,EAAQvI,OAgBVuI,EAAQvI,MAAMnsC,QAAQ,SAAUqsD,GAC9B,GAAIpuC,GAAMC,CAERD,GADEouC,EAAQpuC,eAAgBjgB,QACnBquD,EAAQpuC,KAAKutB,OAIlBpzC,GAAIi0D,EAAQpuC,MAKdC,EADEmuC,EAAQnuC,aAAclgB,QACnBquD,EAAQnuC,GAAGstB,OAIdpzC,GAAIi0D,EAAQnuC,IAIZmuC,EAAQpuC,eAAgBjgB,SAAUquD,EAAQpuC,KAAKkuB,OACjDkgB,EAAQpuC,KAAKkuB,MAAMnsC,QAAQ,SAAU0sD,GACnC,GAAIJ,GAAYF,EAAYM,EAC5BH,GAAUpgB,MAAMxsC,KAAK2sD,KAIzBP,EAAS9tC,EAAMC,EAAI,SAAUD,EAAMC,GACjC,GAAIwuC,GAAUtC,EAAWmC,EAAWtuC,EAAK7lB,GAAI8lB,EAAG9lB,GAAIi0D,EAAQhuD,KAAMguD,EAAQnC,MACtEoC,EAAYF,EAAYM,EAC5BH,GAAUpgB,MAAMxsC,KAAK2sD,KAGnBD,EAAQnuC,aAAclgB,SAAUquD,EAAQnuC,GAAGiuB,OAC7CkgB,EAAQnuC,GAAGiuB,MAAMnsC,QAAQ,SAAU0sD,GACjC,GAAIJ,GAAYF,EAAYM,EAC5BH,GAAUpgB,MAAMxsC,KAAK2sD,OAOzB5X,EAAQwV,OACVqC,EAAU9mD,QAAUivC,EAAQwV,MAGvBqC,EAnyBT,GAAIhC,IACFC,KAAO,EACPG,UAAY,EACZG,WAAY,EACZE,QAAU,GAIRH,GACF8B,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EAELC,MAAM,EACNC,MAAM,GAGJnoC,EAAM,GACNllB,EAAQ,EACRtH,EAAI,GACJiyD,EAAQ,GACRH,EAAYC,EAAUC,KAmCtBX,EAAoB,iBA2uBxBlyD,GAAQ8xD,SAAWA,EACnB9xD,EAAQg9C,WAAaA,GAKjB,SAAS/8C,EAAQD,EAASM,GAI9BL,EAAOD,QAA6B,mBAAXsH,SAA2BA,OAAe,QAAKhH,EAAoB,KAKxF,SAASL,EAAQD,EAASM,GAK5BL,EAAOD,QADa,mBAAXsH,QACQA,OAAe,QAAKhH,EAAoB,IAGxC,WACf,KAAMqD,OAAM,+DAOZ,SAAS1D,EAAQD,EAASM,GAE9B,GAAIgzB,GAAShzB,EAAoB,GAOjCN,GAAQu7B,YAAc,SAAS3yB,EAASU,GACtC,GAAImsD,GAAY,KAMZ75B,EAAUtI,EAAOhqB,MAAMosD,aAAapsD,EAAOmsD,GAC3C99B,EAAUrE,EAAOhqB,MAAMqsD,iBAAiBv1D,KAAMq1D,EAAW75B,EAAStyB,EAWtE;MAPI9E,OAAMmzB,EAAQtO,OAAOyR,SACvBnD,EAAQtO,OAAOyR,MAAQxxB,EAAMwxB,OAE3Bt2B,MAAMmzB,EAAQtO,OAAO0R,SACvBpD,EAAQtO,OAAO0R,MAAQzxB,EAAMyxB,OAGxBpD,IAML,WAKoC,mBAA7Bi+B,4BAKTA,yBAAyBjkD,UAAUg/C,OAAS,SAASpgD,EAAGC,EAAGpE,GACzDhM,KAAKykB,YACLzkB,KAAKyoB,IAAItY,EAAGC,EAAGpE,EAAG,EAAG,EAAEpH,KAAK8jB,IAAI,IASlC8sC,yBAAyBjkD,UAAUkkD,OAAS,SAAStlD,EAAGC,EAAGpE,GACzDhM,KAAKykB,YACLzkB,KAAK8Q,KAAKX,EAAInE,EAAGoE,EAAIpE,EAAO,EAAJA,EAAW,EAAJA,IASjCwpD,yBAAyBjkD,UAAU2a,SAAW,SAAS/b,EAAGC,EAAGpE,GAE3DhM,KAAKykB,WAEL,IAAI5Z,GAAQ,EAAJmB,EACJ0pD,EAAK7qD,EAAI,EACT8qD,EAAK/wD,KAAKkoB,KAAK,GAAK,EAAIjiB,EACxBD,EAAIhG,KAAKkoB,KAAKjiB,EAAIA,EAAI6qD,EAAKA,EAE/B11D,MAAK0kB,OAAOvU,EAAGC,GAAKxF,EAAI+qD,IACxB31D,KAAK2kB,OAAOxU,EAAIulD,EAAItlD,EAAIulD,GACxB31D,KAAK2kB,OAAOxU,EAAIulD,EAAItlD,EAAIulD,GACxB31D,KAAK2kB,OAAOxU,EAAGC,GAAKxF,EAAI+qD,IACxB31D,KAAK8kB,aASP0wC,yBAAyBjkD,UAAUqkD,aAAe,SAASzlD,EAAGC,EAAGpE,GAE/DhM,KAAKykB,WAEL,IAAI5Z,GAAQ,EAAJmB,EACJ0pD,EAAK7qD,EAAI,EACT8qD,EAAK/wD,KAAKkoB,KAAK,GAAK,EAAIjiB,EACxBD,EAAIhG,KAAKkoB,KAAKjiB,EAAIA,EAAI6qD,EAAKA,EAE/B11D,MAAK0kB,OAAOvU,EAAGC,GAAKxF,EAAI+qD,IACxB31D,KAAK2kB,OAAOxU,EAAIulD,EAAItlD,EAAIulD,GACxB31D,KAAK2kB,OAAOxU,EAAIulD,EAAItlD,EAAIulD,GACxB31D,KAAK2kB,OAAOxU,EAAGC,GAAKxF,EAAI+qD,IACxB31D,KAAK8kB,aASP0wC,yBAAyBjkD,UAAUskD,KAAO,SAAS1lD,EAAGC,EAAGpE,GAEvDhM,KAAKykB,WAEL,KAAK,GAAIqxC,GAAI,EAAO,GAAJA,EAAQA,IAAK,CAC3B,GAAIttC,GAAUstC,EAAI,IAAM,EAAS,IAAJ9pD,EAAc,GAAJA,CACvChM,MAAK2kB,OACDxU,EAAIqY,EAAS5jB,KAAKqW,IAAQ,EAAJ66C,EAAQlxD,KAAK8jB,GAAK,IACxCtY,EAAIoY,EAAS5jB,KAAKwW,IAAQ,EAAJ06C,EAAQlxD,KAAK8jB,GAAK,KAI9C1oB,KAAK8kB,aAMP0wC,yBAAyBjkD,UAAU6+C,UAAY,SAASjgD,EAAGC,EAAG8yC,EAAGt4C,EAAGoB,GAClE,GAAI+pD,GAAMnxD,KAAK8jB,GAAG,GACE,GAAhBw6B,EAAM,EAAIl3C,IAAYA,EAAMk3C,EAAI,GAChB,EAAhBt4C,EAAM,EAAIoB,IAAYA,EAAMpB,EAAI,GACpC5K,KAAKykB,YACLzkB,KAAK0kB,OAAOvU,EAAEnE,EAAEoE,GAChBpQ,KAAK2kB,OAAOxU,EAAE+yC,EAAEl3C,EAAEoE,GAClBpQ,KAAKyoB,IAAItY,EAAE+yC,EAAEl3C,EAAEoE,EAAEpE,EAAEA,EAAM,IAAJ+pD,EAAY,IAAJA,GAAQ,GACrC/1D,KAAK2kB,OAAOxU,EAAE+yC,EAAE9yC,EAAExF,EAAEoB,GACpBhM,KAAKyoB,IAAItY,EAAE+yC,EAAEl3C,EAAEoE,EAAExF,EAAEoB,EAAEA,EAAE,EAAM,GAAJ+pD,GAAO,GAChC/1D,KAAK2kB,OAAOxU,EAAEnE,EAAEoE,EAAExF,GAClB5K,KAAKyoB,IAAItY,EAAEnE,EAAEoE,EAAExF,EAAEoB,EAAEA,EAAM,GAAJ+pD,EAAW,IAAJA,GAAQ,GACpC/1D,KAAK2kB,OAAOxU,EAAEC,EAAEpE,GAChBhM,KAAKyoB,IAAItY,EAAEnE,EAAEoE,EAAEpE,EAAEA,EAAM,IAAJ+pD,EAAY,IAAJA,GAAQ,IAMrCP,yBAAyBjkD,UAAUk/C,QAAU,SAAStgD,EAAGC,EAAG8yC,EAAGt4C,GAC7D,GAAIorD,GAAQ,SACRC,EAAM/S,EAAI,EAAK8S,EACfE,EAAMtrD,EAAI,EAAKorD,EACfG,EAAKhmD,EAAI+yC,EACTkT,EAAKhmD,EAAIxF,EACTyrD,EAAKlmD,EAAI+yC,EAAI,EACboT,EAAKlmD,EAAIxF,EAAI,CAEjB5K,MAAKykB,YACLzkB,KAAK0kB,OAAOvU,EAAGmmD,GACft2D,KAAKu2D,cAAcpmD,EAAGmmD,EAAKJ,EAAIG,EAAKJ,EAAI7lD,EAAGimD,EAAIjmD,GAC/CpQ,KAAKu2D,cAAcF,EAAKJ,EAAI7lD,EAAG+lD,EAAIG,EAAKJ,EAAIC,EAAIG,GAChDt2D,KAAKu2D,cAAcJ,EAAIG,EAAKJ,EAAIG,EAAKJ,EAAIG,EAAIC,EAAID,GACjDp2D,KAAKu2D,cAAcF,EAAKJ,EAAIG,EAAIjmD,EAAGmmD,EAAKJ,EAAI/lD,EAAGmmD,IAQjDd,yBAAyBjkD,UAAU8+C,SAAW,SAASlgD,EAAGC,EAAG8yC,EAAGt4C,GAC9D,GAAImB,GAAI,EAAE,EACNyqD,EAAWtT,EACXuT,EAAW7rD,EAAImB,EAEfiqD,EAAQ,SACRC,EAAMO,EAAW,EAAKR,EACtBE,EAAMO,EAAW,EAAKT,EACtBG,EAAKhmD,EAAIqmD,EACTJ,EAAKhmD,EAAIqmD,EACTJ,EAAKlmD,EAAIqmD,EAAW,EACpBF,EAAKlmD,EAAIqmD,EAAW,EACpBC,EAAMtmD,GAAKxF,EAAI6rD,EAAS,GACxBE,EAAMvmD,EAAIxF,CAEd5K,MAAKykB,YACLzkB,KAAK0kB,OAAOyxC,EAAIG,GAEhBt2D,KAAKu2D,cAAcJ,EAAIG,EAAKJ,EAAIG,EAAKJ,EAAIG,EAAIC,EAAID,GACjDp2D,KAAKu2D,cAAcF,EAAKJ,EAAIG,EAAIjmD,EAAGmmD,EAAKJ,EAAI/lD,EAAGmmD,GAE/Ct2D,KAAKu2D,cAAcpmD,EAAGmmD,EAAKJ,EAAIG,EAAKJ,EAAI7lD,EAAGimD,EAAIjmD,GAC/CpQ,KAAKu2D,cAAcF,EAAKJ,EAAI7lD,EAAG+lD,EAAIG,EAAKJ,EAAIC,EAAIG,GAEhDt2D,KAAK2kB,OAAOwxC,EAAIO,GAEhB12D,KAAKu2D,cAAcJ,EAAIO,EAAMR,EAAIG,EAAKJ,EAAIU,EAAKN,EAAIM,GACnD32D,KAAKu2D,cAAcF,EAAKJ,EAAIU,EAAKxmD,EAAGumD,EAAMR,EAAI/lD,EAAGumD,GAEjD12D,KAAK2kB,OAAOxU,EAAGmmD,IAOjBd,yBAAyBjkD,UAAUy4C,MAAQ,SAAS75C,EAAGC,EAAG8xC,EAAO78C,GAE/D,GAAIuxD,GAAKzmD,EAAI9K,EAAST,KAAKwW,IAAI8mC,GAC3B2U,EAAKzmD,EAAI/K,EAAST,KAAKqW,IAAIinC,GAI3B4U,EAAK3mD,EAAa,GAAT9K,EAAeT,KAAKwW,IAAI8mC,GACjC6U,EAAK3mD,EAAa,GAAT/K,EAAeT,KAAKqW,IAAIinC,GAGjC8U,EAAKJ,EAAKvxD,EAAS,EAAIT,KAAKwW,IAAI8mC,EAAQ,GAAMt9C,KAAK8jB,IACnDuuC,EAAKJ,EAAKxxD,EAAS,EAAIT,KAAKqW,IAAIinC,EAAQ,GAAMt9C,KAAK8jB,IAGnDwuC,EAAKN,EAAKvxD,EAAS,EAAIT,KAAKwW,IAAI8mC,EAAQ,GAAMt9C,KAAK8jB,IACnDyuC,EAAKN,EAAKxxD,EAAS,EAAIT,KAAKqW,IAAIinC,EAAQ,GAAMt9C,KAAK8jB,GAEvD1oB,MAAKykB,YACLzkB,KAAK0kB,OAAOvU,EAAGC,GACfpQ,KAAK2kB,OAAOqyC,EAAIC,GAChBj3D,KAAK2kB,OAAOmyC,EAAIC,GAChB/2D,KAAK2kB,OAAOuyC,EAAIC,GAChBn3D,KAAK8kB,aASP0wC,yBAAyBjkD,UAAUs4C,WAAa,SAAS15C,EAAEC,EAAEq6C,EAAGC,EAAG0M,GAC5DA,IAAWA,GAAW,GAAG,IACd,GAAZC,IAAeA,EAAa,KAChC,IAAIC,GAAYF,EAAU/xD,MAC1BrF,MAAK0kB,OAAOvU,EAAGC,EAKf,KAJA,GAAIqL,GAAMgvC,EAAGt6C,EAAIuL,EAAMgvC,EAAGt6C,EACtBmnD,EAAQ77C,EAAGD,EACX+7C,EAAgB5yD,KAAKkoB,KAAMrR,EAAGA,EAAKC,EAAGA,GACtC+7C,EAAU,EAAG5T,GAAK,EACf2T,GAAe,IAAI,CACxB,GAAIH,GAAaD,EAAUK,IAAYH,EACnCD,GAAaG,IAAeH,EAAaG,EAC7C,IAAI7+C,GAAQ/T,KAAKkoB,KAAMuqC,EAAWA,GAAc,EAAIE,EAAMA,GACnD,GAAH97C,IAAM9C,GAASA,GACnBxI,GAAKwI,EACLvI,GAAKmnD,EAAM5+C,EACX3Y,KAAK6jD,EAAO,SAAW,UAAU1zC,EAAEC,GACnConD,GAAiBH,EACjBxT,GAAQA,MAUV,SAAShkD,EAAQD,EAASM,GAE9B,GAAIw3D,GAAex3D,EAAoB,IACnCy3D,EAAez3D,EAAoB,IACnC03D,EAAe13D,EAAoB,IACnC23D,EAAiB33D,EAAoB,IACrC43D,EAAoB53D,EAAoB,IACxC63D,EAAkB73D,EAAoB,IACtC83D,EAA0B93D,EAAoB,GAQlDN,GAAQq4D,WAAa,SAAUC,GAC7B,IAAK,GAAIC,KAAiBD,GACpBA,EAAe1yD,eAAe2yD,KAChCn4D,KAAKm4D,GAAiBD,EAAeC,KAY3Cv4D,EAAQw4D,YAAc,SAAUF,GAC9B,IAAK,GAAIC,KAAiBD,GACpBA,EAAe1yD,eAAe2yD,KAChCn4D,KAAKm4D,GAAiBjyD,SAW5BtG,EAAQs5C,mBAAqB,WAC3Bl5C,KAAKi4D,WAAWP,GAChB13D,KAAKq4D,2BACkC,GAAnCr4D,KAAKwzC,UAAUqB,kBACjB70C,KAAKs4D,6BAUT14D,EAAQw5C,mBAAqB,WAC3Bp5C,KAAKutD,eAAiB,EACtBvtD,KAAKu4D,aAAe,EACpBv4D,KAAKi4D,WAAWN,IASlB/3D,EAAQu5C,kBAAoB,WAC1Bn5C,KAAKgjD,WACLhjD,KAAKw4D,cAAgB,WACrBx4D,KAAKgjD,QAAgB,UACrBhjD,KAAKgjD,QAAgB,OAAE,YAAcvP,SACnCW,SACAwF,eACAiU,eAAkB,EAClB4K,YAAevyD,QACjBlG,KAAKgjD,QAAgB,UACrBhjD,KAAKgjD,QAAiB,SAAKvP,SACzBW,SACAwF,eACAiU,eAAkB,EAClB4K,YAAevyD,QAEjBlG,KAAK45C,YAAc55C,KAAKgjD,QAAgB,OAAE,WAAwB,YAElEhjD,KAAKi4D,WAAWL,IASlBh4D,EAAQy5C,qBAAuB,WAC7Br5C,KAAKu/C,cAAgB9L,SAAWW,UAEhCp0C,KAAKi4D,WAAWJ,IASlBj4D,EAAQ69C,wBAA0B,WAEhCz9C,KAAK04D,8BAA+B,EACpC14D,KAAK24D,sBAAuB,EAEmB,GAA3C34D,KAAKwzC,UAAUqD,iBAAiBlpC,SAELzH,SAAzBlG,KAAK8hD,kBACP9hD,KAAK8hD,gBAAkBlyC,SAASK,cAAc,OAC9CjQ,KAAK8hD,gBAAgBt6C,UAAY,0BACjCxH,KAAK8hD,gBAAgBzhD,GAAK,0BAExBL,KAAK8hD,gBAAgBtxC,MAAM+wB,QADR,GAAjBvhC,KAAKs9C,SAC8B,QAGA,OAEvCt9C,KAAK8W,iBAAiBk6B,aAAahxC,KAAK8hD,gBAAiB9hD,KAAKmc,QAGvCjW,SAArBlG,KAAK44D,cACP54D,KAAK44D,YAAchpD,SAASK,cAAc,OAC1CjQ,KAAK44D,YAAYpxD,UAAY,gCAC7BxH,KAAK44D,YAAYv4D,GAAK,gCAEpBL,KAAK44D,YAAYpoD,MAAM+wB,QADJ,GAAjBvhC,KAAKs9C,SAC0B,OAGA,QAEnCt9C,KAAK8W,iBAAiBk6B,aAAahxC,KAAK44D,YAAa54D,KAAKmc,QAGtCjW,SAAlBlG,KAAK64D,WACP74D,KAAK64D,SAAWjpD,SAASK,cAAc,OACvCjQ,KAAK64D,SAASrxD,UAAY,gCAC1BxH,KAAK64D,SAASx4D,GAAK,gCACnBL,KAAK64D,SAASroD,MAAM+wB,QAAUvhC,KAAK8hD,gBAAgBtxC,MAAM+wB,QACzDvhC,KAAK8W,iBAAiBk6B,aAAahxC,KAAK64D,SAAU74D,KAAKmc,QAIzDnc,KAAKi4D,WAAWH,GAGhB93D,KAAK2+C,yBAGwBz4C,SAAzBlG,KAAK8hD,kBAEP9hD,KAAK2+C,wBAEL3+C,KAAK8W,iBAAiBtH,YAAYxP,KAAK8hD,iBACvC9hD,KAAK8W,iBAAiBtH,YAAYxP,KAAK44D,aACvC54D,KAAK8W,iBAAiBtH,YAAYxP,KAAK64D,UAEvC74D,KAAK8hD,gBAAkB57C,OACvBlG,KAAK44D,YAAc1yD,OACnBlG,KAAK64D,SAAW3yD,OAEhBlG,KAAKo4D,YAAYN,KAWvBl4D,EAAQ49C,wBAA0B,WAChCx9C,KAAKi4D,WAAWF,GAGhB/3D,KAAK84D,mBACoC,GAArC94D,KAAKwzC,UAAUkD,WAAW/oC,SAC5B3N,KAAK+4D,2BAUTn5D,EAAQ05C,qBAAuB,WAC7Bt5C,KAAKi4D,WAAWD,KAMd,SAASn4D,GAeb,QAAS+Z,GAAQiG,GACf,MAAIA,GAAYqmC,EAAMrmC,GAAtB,OAWF,QAASqmC,GAAMrmC,GACb,IAAK,GAAIvX,KAAOsR,GAAQrI,UACtBsO,EAAIvX,GAAOsR,EAAQrI,UAAUjJ,EAE/B,OAAOuX,GAxBThgB,EAAOD,QAAUga,EAoCjBA,EAAQrI,UAAUC,GAClBoI,EAAQrI,UAAUhJ,iBAAmB,SAASW,EAAOo/B,GAInD,MAHAtoC,MAAKg5D,WAAah5D,KAAKg5D,gBACtBh5D,KAAKg5D,WAAW9vD,GAASlJ,KAAKg5D,WAAW9vD,QACvCtB,KAAK0gC,GACDtoC,MAaT4Z,EAAQrI,UAAU0nD,KAAO,SAAS/vD,EAAOo/B,GAIvC,QAAS92B,KACP0nD,EAAKvnD,IAAIzI,EAAOsI,GAChB82B,EAAGnyB,MAAMnW,KAAMoF,WALjB,GAAI8zD,GAAOl5D,IAUX,OATAA,MAAKg5D,WAAah5D,KAAKg5D,eAOvBxnD,EAAG82B,GAAKA,EACRtoC,KAAKwR,GAAGtI,EAAOsI,GACRxR,MAaT4Z,EAAQrI,UAAUI,IAClBiI,EAAQrI,UAAU4nD,eAClBv/C,EAAQrI,UAAU6nD,mBAClBx/C,EAAQrI,UAAUxI,oBAAsB,SAASG,EAAOo/B,GAItD,GAHAtoC,KAAKg5D,WAAah5D,KAAKg5D,eAGnB,GAAK5zD,UAAUC,OAEjB,MADArF,MAAKg5D,cACEh5D,IAIT,IAAIq5D,GAAYr5D,KAAKg5D,WAAW9vD,EAChC,KAAKmwD,EAAW,MAAOr5D,KAGvB,IAAI,GAAKoF,UAAUC,OAEjB,aADOrF,MAAKg5D,WAAW9vD,GAChBlJ,IAKT,KAAK,GADDs5D,GACKp0D,EAAI,EAAGA,EAAIm0D,EAAUh0D,OAAQH,IAEpC,GADAo0D,EAAKD,EAAUn0D,GACXo0D,IAAOhxB,GAAMgxB,EAAGhxB,KAAOA,EAAI,CAC7B+wB,EAAUrxD,OAAO9C,EAAG,EACpB,OAGJ,MAAOlF,OAWT4Z,EAAQrI,UAAUsZ,KAAO,SAAS3hB,GAChClJ,KAAKg5D,WAAah5D,KAAKg5D,cACvB,IAAI3kC,MAAUC,MAAM/zB,KAAK6E,UAAW,GAChCi0D,EAAYr5D,KAAKg5D,WAAW9vD,EAEhC,IAAImwD,EAAW,CACbA,EAAYA,EAAU/kC,MAAM,EAC5B,KAAK,GAAIpvB,GAAI,EAAGC,EAAMk0D,EAAUh0D,OAAYF,EAAJD,IAAWA,EACjDm0D,EAAUn0D,GAAGiR,MAAMnW,KAAMq0B,GAI7B,MAAOr0B,OAWT4Z,EAAQrI,UAAU4iB,UAAY,SAASjrB,GAErC,MADAlJ,MAAKg5D,WAAah5D,KAAKg5D,eAChBh5D,KAAKg5D,WAAW9vD,QAWzB0Q,EAAQrI,UAAUgoD,aAAe,SAASrwD,GACxC,QAAUlJ,KAAKm0B,UAAUjrB,GAAO7D,SAM9B,SAASxF,GA8MX,QAAS25D,GAAU71D,EAAQ2C,EAAM4B,GAC7B,MAAIvE,GAAO4E,iBACA5E,EAAO4E,iBAAiBjC,EAAM4B,GAAU,OAGnDvE,GAAOmF,YAAY,KAAOxC,EAAM4B,GASpC,QAASuxD,GAAoB3tD,GAGzB,MAAc,YAAVA,EAAExF,KACKxC,OAAO41D,aAAa5tD,EAAEyd,OAI7BowC,EAAK7tD,EAAEyd,OACAowC,EAAK7tD,EAAEyd,OAGdqwC,EAAa9tD,EAAEyd,OACRqwC,EAAa9tD,EAAEyd,OAInBzlB,OAAO41D,aAAa5tD,EAAEyd,OAAOm8B,cASxC,QAASmU,GAAM/tD,GACX,GAAItD,GAAUsD,EAAEzC,QAAUyC,EAAExC,WACxBwwD,EAAWtxD,EAAQuxD,OAGvB,QAAK,IAAMvxD,EAAQhB,UAAY,KAAKG,QAAQ,eAAiB,IAClD,EAIQ,SAAZmyD,GAAmC,UAAZA,GAAoC,YAAZA,GAA2BtxD,EAAQwxD,iBAA8C,QAA3BxxD,EAAQwxD,gBAUxH,QAASC,GAAgBC,EAAYC,GACjC,MAAOD,GAAW7lD,OAAOxM,KAAK,OAASsyD,EAAW9lD,OAAOxM,KAAK,KASlE,QAASuyD,GAAgBC,GACrBA,EAAeA,KAEf,IACI/xD,GADAgyD,GAAmB,CAGvB,KAAKhyD,IAAOiyD,GACJF,EAAa/xD,GACbgyD,GAAmB,EAGvBC,EAAiBjyD,GAAO,CAGvBgyD,KACDE,GAAmB,GAe3B,QAASC,GAAYC,EAAWC,EAAWlyD,EAAQ+L,EAAQomD,GACvD,GAAI11D,GACAgD,EACA2yD,IAGJ,KAAK7B,EAAW0B,GACZ,QAUJ,KANc,SAAVjyD,GAAqBqyD,EAAYJ,KACjCC,GAAaD,IAKZx1D,EAAI,EAAGA,EAAI8zD,EAAW0B,GAAWr1D,SAAUH,EAC5CgD,EAAW8wD,EAAW0B,GAAWx1D,GAI7BgD,EAAS6yD,KAAOR,EAAiBryD,EAAS6yD,MAAQ7yD,EAASgsC,OAM3DzrC,GAAUP,EAASO,SAOT,YAAVA,GAAwBwxD,EAAgBU,EAAWzyD,EAASyyD,cAIxDnmD,GAAUtM,EAAS8yD,OAASJ,GAC5B5B,EAAW0B,GAAW1yD,OAAO9C,EAAG,GAGpC21D,EAAQjzD,KAAKM,GAIrB,OAAO2yD,GASX,QAASI,GAAgBnvD,GACrB,GAAI6uD,KAkBJ,OAhBI7uD,GAAEg/B,UACF6vB,EAAU/yD,KAAK,SAGfkE,EAAEovD,QACFP,EAAU/yD,KAAK,OAGfkE,EAAE8+B,SACF+vB,EAAU/yD,KAAK,QAGfkE,EAAEqvD,SACFR,EAAU/yD,KAAK,QAGZ+yD,EAaX,QAASS,GAAclzD,EAAU4D,GACzB5D,EAAS4D,MAAO,IACZA,EAAE7C,gBACF6C,EAAE7C,iBAGF6C,EAAE4zB,iBACF5zB,EAAE4zB,kBAGN5zB,EAAE3C,aAAc,EAChB2C,EAAEuvD,cAAe,GAWzB,QAASC,GAAiBZ,EAAW5uD,GAGjC,IAAI+tD,EAAM/tD,GAAV,CAIA,GACI5G,GADAm0D,EAAYoB,EAAYC,EAAWO,EAAgBnvD,GAAIA,EAAExF,MAEzD+zD,KACAkB,GAA8B,CAGlC,KAAKr2D,EAAI,EAAGA,EAAIm0D,EAAUh0D,SAAUH,EAO5Bm0D,EAAUn0D,GAAG61D,KACbQ,GAA8B,EAG9BlB,EAAahB,EAAUn0D,GAAG61D,KAAO,EACjCK,EAAc/B,EAAUn0D,GAAGgD,SAAU4D,IAMpCyvD,GAAgCf,GACjCY,EAAc/B,EAAUn0D,GAAGgD,SAAU4D,EAOzCA,GAAExF,MAAQk0D,GAAqBM,EAAYJ,IAC3CN,EAAgBC,IAUxB,QAASmB,GAAW1vD,GAIhBA,EAAEyd,MAA0B,gBAAXzd,GAAEyd,MAAoBzd,EAAEyd,MAAQzd,EAAE2vD,OAEnD,IAAIf,GAAYjB,EAAoB3tD,EAGpC,IAAK4uD,EAIL,MAAc,SAAV5uD,EAAExF,MAAmBo1D,GAAsBhB,OAC3CgB,GAAqB,OAIzBJ,GAAiBZ,EAAW5uD,GAShC,QAASgvD,GAAYxyD,GACjB,MAAc,SAAPA,GAAyB,QAAPA,GAAwB,OAAPA,GAAuB,QAAPA,EAW9D,QAASqzD,KACLzwC,aAAa0wC,GACbA,EAAerwC,WAAW6uC,EAAiB,KAS/C,QAASyB,KACL,IAAKC,EAAc,CACfA,IACA,KAAK,GAAIxzD,KAAOqxD,GAIRrxD,EAAM,IAAY,IAANA,GAIZqxD,EAAKn0D,eAAe8C,KACpBwzD,EAAanC,EAAKrxD,IAAQA,GAItC,MAAOwzD,GAUX,QAASC,GAAgBzzD,EAAKqyD,EAAWlyD,GAcrC,MAVKA,KACDA,EAASozD,IAAiBvzD,GAAO,UAAY,YAKnC,YAAVG,GAAwBkyD,EAAUt1D,SAClCoD,EAAS,WAGNA,EAYX,QAASuzD,GAAchB,EAAOnmD,EAAM3M,EAAUO,GAI1C8xD,EAAiBS,GAAS,EAIrBvyD,IACDA,EAASszD,EAAgBlnD,EAAK,OAUlC,IA2BI3P,GA3BA+2D,EAAoB,WAChBzB,EAAmB/xD,IACjB8xD,EAAiBS,GACnBW,KAUJO,EAAoB,SAASpwD,GACzBsvD,EAAclzD,EAAU4D,GAKT,UAAXrD,IACAizD,EAAqBjC,EAAoB3tD,IAK7Cyf,WAAW6uC,EAAiB,IAOpC,KAAKl1D,EAAI,EAAGA,EAAI2P,EAAKxP,SAAUH,EAC3Bi3D,EAAYtnD,EAAK3P,GAAIA,EAAI2P,EAAKxP,OAAS,EAAI42D,EAAoBC,EAAmBzzD,EAAQuyD,EAAO91D,GAczG,QAASi3D,GAAYvB,EAAa1yD,EAAUO,EAAQ2zD,EAAeloB,GAG/D0mB,EAAcA,EAAYlvD,QAAQ,OAAQ,IAE1C,IACIxG,GACAoD,EACAuM,EAHAwnD,EAAWzB,EAAYlzD,MAAM,KAI7BizD,IAIJ,IAAI0B,EAASh3D,OAAS,EAClB,MAAO22D,GAAcpB,EAAayB,EAAUn0D,EAAUO,EAO1D,KAFAoM,EAAuB,MAAhB+lD,GAAuB,KAAOA,EAAYlzD,MAAM,KAElDxC,EAAI,EAAGA,EAAI2P,EAAKxP,SAAUH,EAC3BoD,EAAMuM,EAAK3P,GAGPo3D,EAAiBh0D,KACjBA,EAAMg0D,EAAiBh0D,IAMvBG,GAAoB,YAAVA,GAAwB8zD,EAAWj0D,KAC7CA,EAAMi0D,EAAWj0D,GACjBqyD,EAAU/yD,KAAK,UAIfkzD,EAAYxyD,IACZqyD,EAAU/yD,KAAKU,EAMvBG,GAASszD,EAAgBzzD,EAAKqyD,EAAWlyD,GAIpCuwD,EAAW1wD,KACZ0wD,EAAW1wD,OAIfmyD,EAAYnyD,EAAKqyD,EAAWlyD,GAAS2zD,EAAexB,GAQpD5B,EAAW1wD,GAAK8zD,EAAgB,UAAY,SACxCl0D,SAAUA,EACVyyD,UAAWA,EACXlyD,OAAQA,EACRsyD,IAAKqB,EACLloB,MAAOA,EACP8mB,MAAOJ,IAYf,QAAS4B,GAAcC,EAAcv0D,EAAUO,GAC3C,IAAK,GAAIvD,GAAI,EAAGA,EAAIu3D,EAAap3D,SAAUH,EACvCi3D,EAAYM,EAAav3D,GAAIgD,EAAUO,GAjhB/C,IAAK,GAlDDqzD,GA6BAF,EArIAjC,GACI+C,EAAG,YACHC,EAAG,MACHC,GAAI,QACJC,GAAI,QACJC,GAAI,OACJC,GAAI,MACJC,GAAI,WACJC,GAAI,MACJC,GAAI,QACJC,GAAI,SACJC,GAAI,WACJC,GAAI,MACJC,GAAI,OACJC,GAAI,OACJC,GAAI,KACJC,GAAI,QACJC,GAAI,OACJC,GAAI,MACJC,GAAI,MACJC,GAAI,OACJC,GAAI,OACJC,IAAK,QAWTnE,GACIoE,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAM,IACNC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,KAaTxC,GACIyC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,EAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,EAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAM,IACNC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,MAST5D,GACI7yD,OAAU,MACV02D,QAAW,OACXC,SAAU,QACVC,OAAU,OAiBdrH,KAOAsH,KAQA/F,KAcAmB,GAAqB,EAQrBlB,GAAmB,EAMdt1D,EAAI,EAAO,GAAJA,IAAUA,EACtBy0D,EAAK,IAAMz0D,GAAK,IAAMA,CAM1B,KAAKA,EAAI,EAAQ,GAALA,IAAUA,EAClBy0D,EAAKz0D,EAAI,IAAMA,CA8gBnBs0D,GAAU5pD,SAAU,WAAY4rD,GAChChC,EAAU5pD,SAAU,UAAW4rD,GAC/BhC,EAAU5pD,SAAU,QAAS4rD,EAE7B,IAAIvgB,IAiBAhpB,KAAM,SAASpd,EAAM3M,EAAUO,GAG3B,MAFA+zD,GAAc3nD,YAAgBlP,OAAQkP,GAAQA,GAAO3M,EAAUO,GAC/D63D,EAAYzrD,EAAO,IAAMpM,GAAUP,EAC5BlI,MAoBXugE,OAAQ,SAAS1rD,EAAMpM,GAKnB,MAJI63D,GAAYzrD,EAAO,IAAMpM,WAClB63D,GAAYzrD,EAAO,IAAMpM,GAChCzI,KAAKiyB,KAAKpd,EAAM,aAAepM,IAE5BzI,MAUXwgE,QAAS,SAAS3rD,EAAMpM,GAEpB,MADA63D,GAAYzrD,EAAO,IAAMpM,KAClBzI,MAUXi+C,MAAO,WAGH,MAFA+a,MACAsH,KACOtgE,MAIjBH,GAAOD,QAAUq7C,GAMb,SAASp7C,EAAQD,EAASM,GAE9B,GAAIugE,IAA0D,SAASC,EAAQ7gE,IAM/E,SAAWqG,GAoSP,QAASy6D,GAAI17D,EAAGa,EAAGrF,GACf,OAAQ2E,UAAUC,QACd,IAAK,GAAG,MAAY,OAALJ,EAAYA,EAAIa,CAC/B,KAAK,GAAG,MAAY,OAALb,EAAYA,EAAS,MAALa,EAAYA,EAAIrF,CAC/C,SAAS,KAAM,IAAI8C,OAAM,iBAIjC,QAASq9D,KAGL,OACIC,OAAQ,EACRC,gBACAC,eACArgD,SAAW,GACXsgD,cAAgB,EAChBC,WAAY,EACZC,aAAe,KACfC,eAAgB,EAChBC,iBAAkB,EAClBC,KAAK,GAIb,QAASC,GAAUC,EAAKj5B,GAEpB,QAASk5B,KACDh+D,GAAOi+D,+BAAgC,GAChB,mBAAZ9yD,UAA2BA,QAAQ+yD,MAC9C/yD,QAAQ+yD,KAAK,wBAA0BH,GAJ/C,GAAII,IAAY,CAOhB,OAAO38D,GAAO,WAKV,MAJI28D,KACAH,IACAG,GAAY,GAETr5B,EAAGnyB,MAAMnW,KAAMoF,YACvBkjC,GAGP,QAASs5B,GAASC,EAAMzsD,GACpB,MAAO,UAAUnQ,GACb,MAAO68D,GAAaD,EAAKthE,KAAKP,KAAMiF,GAAImQ,IAGhD,QAAS2sD,GAAgBF,EAAMG,GAC3B,MAAO,UAAU/8D,GACb,MAAOjF,MAAKiiE,OAAOC,QAAQL,EAAKthE,KAAKP,KAAMiF,GAAI+8D,IAmBvD,QAASG,MAKT,QAASC,GAAOC,GACZC,EAAcD,GACdr9D,EAAOhF,KAAMqiE,GAIjB,QAASE,GAASC,GACd,GAAIC,GAAkBC,EAAqBF,GACvCG,EAAQF,EAAgB9jC,MAAQ,EAChCikC,EAAWH,EAAgBI,SAAW,EACtCC,EAASL,EAAgBM,OAAS,EAClCC,EAAQP,EAAgBQ,MAAQ,EAChCC,EAAOT,EAAgBU,KAAO,EAC9BxpC,EAAQ8oC,EAAgBW,MAAQ,EAChCxpC,EAAU6oC,EAAgBY,QAAU,EACpCxpC,EAAU4oC,EAAgBa,QAAU,EACpCxpC,EAAe2oC,EAAgBc,aAAe,CAGlDvjE,MAAKwjE,eAAiB1pC,EACR,IAAVD,EACU,IAAVD,EACQ,KAARD,EAGJ35B,KAAKyjE,OAASP,EACF,EAARF,EAIJhjE,KAAK0jE,SAAWZ,EACD,EAAXF,EACQ,GAARD,EAEJ3iE,KAAKiR,SAELjR,KAAK2jE,UAQT,QAAS3+D,GAAOC,EAAGa,GACf,IAAK,GAAIZ,KAAKY,GACNA,EAAEN,eAAeN,KACjBD,EAAEC,GAAKY,EAAEZ,GAYjB,OARIY,GAAEN,eAAe,cACjBP,EAAEF,SAAWe,EAAEf,UAGfe,EAAEN,eAAe,aACjBP,EAAEuB,QAAUV,EAAEU,SAGXvB,EAGX,QAAS2+D,GAAYpjE,GACjB,GAAiB0E,GAAb4O,IACJ,KAAK5O,IAAK1E,GACFA,EAAEgF,eAAeN,IAAM2+D,GAAiBr+D,eAAeN,KACvD4O,EAAO5O,GAAK1E,EAAE0E,GAItB,OAAO4O,GAGX,QAASgwD,GAASC,GACd,MAAa,GAATA,EACOn/D,KAAKqqC,KAAK80B,GAEVn/D,KAAKC,MAAMk/D,GAM1B,QAASjC,GAAaiC,EAAQC,EAAcC,GAIxC,IAHA,GAAIC,GAAS,GAAKt/D,KAAK+iB,IAAIo8C,GACvB53C,EAAO43C,GAAU,EAEdG,EAAO7+D,OAAS2+D,GACnBE,EAAS,IAAMA,CAEnB,QAAQ/3C,EAAQ83C,EAAY,IAAM,GAAM,KAAOC,EAInD,QAASC,GAAgCC,EAAK5B,EAAU6B,EAAUC,GAC9D,GAAIxqC,GAAe0oC,EAASgB,cACxBN,EAAOV,EAASiB,MAChBX,EAASN,EAASkB,OACtBY,GAA+B,MAAhBA,GAAuB,EAAOA,EAEzCxqC,GACAsqC,EAAIG,GAAGC,SAASJ,EAAIG,GAAKzqC,EAAeuqC,GAExCnB,GACAuB,GAAUL,EAAK,OAAQM,GAAUN,EAAK,QAAUlB,EAAOmB,GAEvDvB,GACA6B,GAAeP,EAAKM,GAAUN,EAAK,SAAWtB,EAASuB,GAEvDC,GACA9gE,GAAO8gE,aAAaF,EAAKlB,GAAQJ,GAKzC,QAASl9D,GAAQg/D,GACb,MAAiD,mBAA1C3+D,OAAOsL,UAAUxM,SAASxE,KAAKqkE,GAG1C,QAAS7gE,GAAO6gE,GACZ,MAAkD,kBAA1C3+D,OAAOsL,UAAUxM,SAASxE,KAAKqkE,IAC/BA,YAAiB5gE,MAI7B,QAAS6gE,GAAc5Q,EAAQC,EAAQ4Q,GACnC,GAGI5/D,GAHAC,EAAMP,KAAKmG,IAAIkpD,EAAO5uD,OAAQ6uD,EAAO7uD,QACrC0/D,EAAangE,KAAK+iB,IAAIssC,EAAO5uD,OAAS6uD,EAAO7uD,QAC7C2/D,EAAQ,CAEZ,KAAK9/D,EAAI,EAAOC,EAAJD,EAASA,KACZ4/D,GAAe7Q,EAAO/uD,KAAOgvD,EAAOhvD,KACnC4/D,GAAeG,EAAMhR,EAAO/uD,MAAQ+/D,EAAM/Q,EAAOhvD,MACnD8/D,GAGR,OAAOA,GAAQD,EAGnB,QAASG,GAAeC,GACpB,GAAIA,EAAO,CACP,GAAIC,GAAUD,EAAMzf,cAAch6C,QAAQ,QAAS,KACnDy5D,GAAQE,GAAYF,IAAUG,GAAeF,IAAYA,EAE7D,MAAOD,GAGX,QAASzC,GAAqB6C,GAC1B,GACIC,GACAjgE,EAFAk9D,IAIJ,KAAKl9D,IAAQggE,GACLA,EAAY//D,eAAeD,KAC3BigE,EAAiBN,EAAe3/D,GAC5BigE,IACA/C,EAAgB+C,GAAkBD,EAAYhgE,IAK1D,OAAOk9D,GAGX,QAASgD,GAAS13D,GACd,GAAIqH,GAAOswD,CAEX,IAA8B,IAA1B33D,EAAMpG,QAAQ,QACdyN,EAAQ,EACRswD,EAAS,UAER,CAAA,GAA+B,IAA3B33D,EAAMpG,QAAQ,SAKnB,MAJAyN,GAAQ,GACRswD,EAAS,QAMbliE,GAAOuK,GAAS,SAAU8wB,EAAQ92B,GAC9B,GAAI7C,GAAGygE,EACHC,EAASpiE,GAAO8kC,GAAGu9B,MAAM93D,GACzB+3D,IAYJ,IAVsB,gBAAXjnC,KACP92B,EAAQ82B,EACRA,EAAS34B,GAGby/D,EAAS,SAAUzgE,GACf,GAAI1E,GAAIgD,KAASuiE,MAAMC,IAAIN,EAAQxgE,EACnC,OAAO0gE,GAAOrlE,KAAKiD,GAAO8kC,GAAGu9B,MAAOrlE,EAAGq+B,GAAU,KAGxC,MAAT92B,EACA,MAAO49D,GAAO59D,EAGd,KAAK7C,EAAI,EAAOkQ,EAAJlQ,EAAWA,IACnB4gE,EAAQl+D,KAAK+9D,EAAOzgE,GAExB,OAAO4gE,IAKnB,QAASb,GAAMgB,GACX,GAAIC,IAAiBD,EACjBp/D,EAAQ,CAUZ,OARsB,KAAlBq/D,GAAuBC,SAASD,KAE5Br/D,EADAq/D,GAAiB,EACTthE,KAAKC,MAAMqhE,GAEXthE,KAAKqqC,KAAKi3B,IAInBr/D,EAGX,QAASu/D,GAAYznC,EAAMokC,GACvB,MAAO,IAAI/+D,MAAKA,KAAKqiE,IAAI1nC,EAAMokC,EAAQ,EAAG,IAAIuD,aAGlD,QAASC,GAAY5nC,EAAM6nC,EAAKC,GAC5B,MAAOC,IAAWljE,IAAQm7B,EAAM,GAAI,GAAK6nC,EAAMC,IAAOD,EAAKC,GAAKxD,KAGpE,QAAS0D,GAAWhoC,GAChB,MAAOioC,GAAWjoC,GAAQ,IAAM,IAGpC,QAASioC,GAAWjoC,GAChB,MAAQA,GAAO,IAAM,GAAKA,EAAO,MAAQ,GAAMA,EAAO,MAAQ,EAGlE,QAAS2jC,GAAc9hE,GACnB,GAAIkgB,EACAlgB,GAAEqmE,IAAyB,KAAnBrmE,EAAEsmE,IAAIpmD,WACdA,EACIlgB,EAAEqmE,GAAG/pC,IAAS,GAAKt8B,EAAEqmE,GAAG/pC,IAAS,GAAKA,GACtCt8B,EAAEqmE,GAAGE,IAAQ,GAAKvmE,EAAEqmE,GAAGE,IAAQX,EAAY5lE,EAAEqmE,GAAG9pC,IAAOv8B,EAAEqmE,GAAG/pC,KAAUiqC,GACtEvmE,EAAEqmE,GAAGjqC,IAAQ,GAAKp8B,EAAEqmE,GAAGjqC,IAAQ,GAAKA,GACpCp8B,EAAEqmE,GAAGlqC,IAAU,GAAKn8B,EAAEqmE,GAAGlqC,IAAU,GAAKA,GACxCn8B,EAAEqmE,GAAGnqC,IAAU,GAAKl8B,EAAEqmE,GAAGnqC,IAAU,GAAKA,GACxCl8B,EAAEqmE,GAAGpqC,IAAe,GAAKj8B,EAAEqmE,GAAGpqC,IAAe,IAAMA,GACnD,GAEAj8B,EAAEsmE,IAAIE,qBAAkCjqC,GAAXrc,GAAmBA,EAAWqmD,MAC3DrmD,EAAWqmD,IAGfvmE,EAAEsmE,IAAIpmD,SAAWA,GAIzB,QAASumD,GAAQzmE,GAgBb,MAfkB,OAAdA,EAAE0mE,WACF1mE,EAAE0mE,UAAY9iE,MAAM5D,EAAE+jE,GAAG4C,YACrB3mE,EAAEsmE,IAAIpmD,SAAW,IAChBlgB,EAAEsmE,IAAIjG,QACNrgE,EAAEsmE,IAAI5F,eACN1gE,EAAEsmE,IAAI7F,YACNzgE,EAAEsmE,IAAI3F,gBACN3gE,EAAEsmE,IAAI1F,gBAEP5gE,EAAE4mE,UACF5mE,EAAE0mE,SAAW1mE,EAAE0mE,UACa,IAAxB1mE,EAAEsmE,IAAI9F,eACwB,IAA9BxgE,EAAEsmE,IAAIhG,aAAaz7D,SAGxB7E,EAAE0mE,SAGb,QAASG,GAAkB/+D,GACvB,MAAOA,GAAMA,EAAIo9C,cAAch6C,QAAQ,IAAK,KAAOpD,EAIvD,QAASg/D,GAAO1C,EAAO2C,GACnB,MAAOA,GAAMC,OAAShkE,GAAOohE,GAAO6C,KAAKF,EAAMG,SAAW,GACtDlkE,GAAOohE,GAAO+C,QAiMtB,QAASC,GAASt/D,EAAK4M,GAMnB,MALAA,GAAO2yD,KAAOv/D,EACTw/D,GAAUx/D,KACXw/D,GAAUx/D,GAAO,GAAI65D,IAEzB2F,GAAUx/D,GAAK09D,IAAI9wD,GACZ4yD,GAAUx/D,GAIrB,QAASy/D,GAAWz/D,SACTw/D,IAAUx/D,GASrB,QAAS0/D,GAAkB1/D,GACvB,GAAWqgB,GAAGs5C,EAAM/8C,EAAMxd,EAAtBxC,EAAI,EACJiO,EAAM,SAAU80D,GACZ,IAAKH,GAAUG,IAAMC,GACjB,IACIhoE,EAAoB,IAAI,KAAO+nE,GACjC,MAAOn8D,IAEb,MAAOg8D,IAAUG,GAGzB,KAAK3/D,EACD,MAAO9E,IAAO8kC,GAAGu9B,KAGrB,KAAKjgE,EAAQ0C,GAAM,CAGf,GADA25D,EAAO9uD,EAAI7K,GAEP,MAAO25D,EAEX35D,IAAOA,GAMX,KAAOpD,EAAIoD,EAAIjD,QAAQ,CAKnB,IAJAqC,EAAQ2/D,EAAkB/+D,EAAIpD,IAAIwC,MAAM,KACxCihB,EAAIjhB,EAAMrC,OACV6f,EAAOmiD,EAAkB/+D,EAAIpD,EAAI,IACjCggB,EAAOA,EAAOA,EAAKxd,MAAM,KAAO,KACzBihB,EAAI,GAAG,CAEV,GADAs5C,EAAO9uD,EAAIzL,EAAM4sB,MAAM,EAAG3L,GAAG9gB,KAAK,MAE9B,MAAOo6D,EAEX,IAAI/8C,GAAQA,EAAK7f,QAAUsjB,GAAKk8C,EAAcn9D,EAAOwd,GAAM,IAASyD,EAAI,EAEpE,KAEJA,KAEJzjB,IAEJ,MAAO1B,IAAO8kC,GAAGu9B,MAQrB,QAASsC,GAAuBvD,GAC5B,MAAIA,GAAM3gE,MAAM,YACL2gE,EAAMl5D,QAAQ,WAAY,IAE9Bk5D,EAAMl5D,QAAQ,MAAO,IAGhC,QAAS08D,GAAmBvpC,GACxB,GAA4C35B,GAAGG,EAA3C+C,EAAQy2B,EAAO56B,MAAMokE,GAEzB,KAAKnjE,EAAI,EAAGG,EAAS+C,EAAM/C,OAAYA,EAAJH,EAAYA,IAEvCkD,EAAMlD,GADNojE,GAAqBlgE,EAAMlD,IAChBojE,GAAqBlgE,EAAMlD,IAE3BijE,EAAuB//D,EAAMlD,GAIhD,OAAO,UAAUk/D,GACb,GAAIF,GAAS,EACb,KAAKh/D,EAAI,EAAOG,EAAJH,EAAYA,IACpBg/D,GAAU97D,EAAMlD,YAAcqjC,UAAWngC,EAAMlD,GAAG3E,KAAK6jE,EAAKvlC,GAAUz2B,EAAMlD,EAEhF,OAAOg/D,IAKf,QAASqE,GAAa/nE,EAAGq+B,GAErB,MAAKr+B,GAAEymE,WAIPpoC,EAAS2pC,EAAa3pC,EAAQr+B,EAAEyhE,QAE3BwG,GAAgB5pC,KACjB4pC,GAAgB5pC,GAAUupC,EAAmBvpC,IAG1C4pC,GAAgB5pC,GAAQr+B,IATpBA,EAAEyhE,OAAOyG,cAYxB,QAASF,GAAa3pC,EAAQojC,GAG1B,QAAS0G,GAA4B/D,GACjC,MAAO3C,GAAK2G,eAAehE,IAAUA,EAHzC,GAAI1/D,GAAI,CAOR,KADA2jE,GAAsBC,UAAY,EAC3B5jE,GAAK,GAAK2jE,GAAsB57D,KAAK4xB,IACxCA,EAASA,EAAOnzB,QAAQm9D,GAAuBF,GAC/CE,GAAsBC,UAAY,EAClC5jE,GAAK,CAGT,OAAO25B,GAUX,QAASkqC,GAAsBrW,EAAO2P,GAClC,GAAIp9D,GAAGkuD,EAASkP,EAAO+E,OACvB,QAAQ1U,GACR,IAAK,IACD,MAAOsW,GACX,KAAK,OACD,MAAOC,GACX,KAAK,OACL,IAAK,OACL,IAAK,OACD,MAAO9V,GAAS+V,GAAuBC,EAC3C,KAAK,IACL,IAAK,IACL,IAAK,IACD,MAAOC,GACX,KAAK,SACL,IAAK,QACL,IAAK,QACL,IAAK,QACD,MAAOjW,GAASkW,GAAsBC,EAC1C,KAAK,IACD,GAAInW,EAAU,MAAO6V,GAEzB,KAAK,KACD,GAAI7V,EAAU,MAAOoW,GAEzB,KAAK,MACD,GAAIpW,EAAU,MAAO8V,GAEzB,KAAK,MACD,MAAOO,GACX,KAAK,MACL,IAAK,OACL,IAAK,KACL,IAAK,MACL,IAAK,OACD,MAAOC,GACX,KAAK,IACL,IAAK,IACD,MAAOzB,GAAkB3F,EAAOqH,IAAIC,cACxC,KAAK,IACD,MAAOC,GACX,KAAK,IACL,IAAK,KACD,MAAOC,GACX,KAAK,IACD,MAAOC,GACX,KAAK,OACD,MAAOC,GACX,KAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACD,MAAO5W,GAASoW,GAAsBS,EAC1C,KAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,MAAOA,GACX,KAAK,KACD,MAAOC,GACX,SAEI,MADAhlE,GAAI,GAAIilE,QAAOC,EAAaC,EAAe1X,EAAMhnD,QAAQ,KAAM,KAAM,OAK7E,QAAS2+D,GAA0BC,GAC/BA,EAASA,GAAU,EACnB,IAAIC,GAAqBD,EAAOrmE,MAAM4lE,QAClCW,EAAUD,EAAkBA,EAAkBllE,OAAS,OACvDolE,GAASD,EAAU,IAAIvmE,MAAMymE,MAA0B,IAAK,EAAG,GAC/D9wC,IAAuB,GAAX6wC,EAAM,IAAWxF,EAAMwF,EAAM,GAE7C,OAAoB,MAAbA,EAAM,IAAc7wC,EAAUA,EAIzC,QAAS+wC,GAAwBjY,EAAOkS,EAAOvC,GAC3C,GAAIp9D,GAAG2lE,EAAgBvI,EAAOwE,EAE9B,QAAQnU,GAER,IAAK,IACY,MAATkS,IACAgG,EAAc9tC,IAA8B,GAApBmoC,EAAML,GAAS,GAE3C,MAEJ,KAAK,IACL,IAAK,KACY,MAATA,IACAgG,EAAc9tC,IAASmoC,EAAML,GAAS,EAE1C,MACJ,KAAK,MACL,IAAK,OACD3/D,EAAI+iE,EAAkB3F,EAAOqH,IAAImB,YAAYjG,GAEpC,MAAL3/D,EACA2lE,EAAc9tC,IAAS73B,EAEvBo9D,EAAOyE,IAAI5F,aAAe0D,CAE9B,MAEJ,KAAK,IACL,IAAK,KACY,MAATA,IACAgG,EAAc7D,IAAQ9B,EAAML,GAEhC,MACJ,KAAK,KACY,MAATA,IACAgG,EAAc7D,IAAQ9B,EAAMr9C,SAASg9C,EAAO,KAEhD,MAEJ,KAAK,MACL,IAAK,OACY,MAATA,IACAvC,EAAOyI,WAAa7F,EAAML,GAG9B,MAEJ,KAAK,KACDgG,EAAc7tC,IAAQv5B,GAAOunE,kBAAkBnG,EAC/C,MACJ,KAAK,OACL,IAAK,QACL,IAAK,SACDgG,EAAc7tC,IAAQkoC,EAAML,EAC5B,MAEJ,KAAK,IACL,IAAK,IACDvC,EAAO2I,MAAQhD,EAAkB3F,EAAOqH,IAAIuB,KAAKrG,EACjD,MAEJ,KAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,KACDgG,EAAchuC,IAAQqoC,EAAML,EAC5B,MAEJ,KAAK,IACL,IAAK,KACDgG,EAAcjuC,IAAUsoC,EAAML,EAC9B,MAEJ,KAAK,IACL,IAAK,KACDgG,EAAcluC,IAAUuoC,EAAML,EAC9B,MAEJ,KAAK,IACL,IAAK,KACL,IAAK,MACL,IAAK,OACDgG,EAAcnuC,IAAewoC,EAAuB,KAAhB,KAAOL,GAC3C,MAEJ,KAAK,IACDvC,EAAOkC,GAAK,GAAIvgE,MAAyB,IAApBke,WAAW0iD,GAChC,MAEJ,KAAK,IACL,IAAK,KACDvC,EAAO6I,SAAU,EACjB7I,EAAO8I,KAAOd,EAA0BzF,EACxC,MAEJ,KAAK,KACL,IAAK,MACL,IAAK,OACD3/D,EAAI+iE,EAAkB3F,EAAOqH,IAAI0B,cAAcxG,GAEtC,MAAL3/D,GACAo9D,EAAOgJ,GAAKhJ,EAAOgJ,OACnBhJ,EAAOgJ,GAAM,EAAIpmE,GAEjBo9D,EAAOyE,IAAIwE,eAAiB1G,CAEhC,MAEJ,KAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACDlS,EAAQA,EAAMqB,OAAO,EAAG,EAE5B,KAAK,OACL,IAAK,OACL,IAAK,QACDrB,EAAQA,EAAMqB,OAAO,EAAG,GACpB6Q,IACAvC,EAAOgJ,GAAKhJ,EAAOgJ,OACnBhJ,EAAOgJ,GAAG3Y,GAASuS,EAAML,GAE7B,MACJ,KAAK,KACL,IAAK,KACDvC,EAAOgJ,GAAKhJ,EAAOgJ,OACnBhJ,EAAOgJ,GAAG3Y,GAASlvD,GAAOunE,kBAAkBnG,IAIpD,QAAS2G,GAAsBlJ,GAC3B,GAAInf,GAAGsoB,EAAUvI,EAAMwI,EAASjF,EAAKC,EAAKiF,EAAMzJ,CAEhD/e,GAAImf,EAAOgJ,GACC,MAARnoB,EAAEyoB,IAAqB,MAAPzoB,EAAE0oB,GAAoB,MAAP1oB,EAAE2oB,GACjCrF,EAAM,EACNC,EAAM,EAMN+E,EAAW7K,EAAIzd,EAAEyoB,GAAItJ,EAAOwE,GAAG9pC,IAAO2pC,GAAWljE,KAAU,EAAG,GAAGm7B,MACjEskC,EAAOtC,EAAIzd,EAAE0oB,EAAG,GAChBH,EAAU9K,EAAIzd,EAAE2oB,EAAG,KAEnB5J,EAAO+F,EAAkB3F,EAAOqH,IAChClD,EAAMvE,EAAK6J,MAAMtF,IACjBC,EAAMxE,EAAK6J,MAAMrF,IAEjB+E,EAAW7K,EAAIzd,EAAE6oB,GAAI1J,EAAOwE,GAAG9pC,IAAO2pC,GAAWljE,KAAUgjE,EAAKC,GAAK9nC,MACrEskC,EAAOtC,EAAIzd,EAAEA,EAAG,GAEL,MAAPA,EAAEr3C,GAEF4/D,EAAUvoB,EAAEr3C,EACE26D,EAAViF,KACExI,GAINwI,EAFc,MAAPvoB,EAAEp3C,EAECo3C,EAAEp3C,EAAI06D,EAGNA,GAGlBkF,EAAOM,GAAmBR,EAAUvI,EAAMwI,EAAShF,EAAKD,GAExDnE,EAAOwE,GAAG9pC,IAAQ2uC,EAAK/sC,KACvB0jC,EAAOyI,WAAaY,EAAKO,UAO7B,QAASC,GAAe7J,GACpB,GAAIn9D,GAAGw5B,EAAkBytC,EAAaC,EAAzBxH,IAEb,KAAIvC,EAAOkC,GAAX,CA6BA,IAzBA4H,EAAcE,EAAiBhK,GAG3BA,EAAOgJ,IAAyB,MAAnBhJ,EAAOwE,GAAGE,KAAqC,MAApB1E,EAAOwE,GAAG/pC,KAClDyuC,EAAsBlJ,GAItBA,EAAOyI,aACPsB,EAAYzL,EAAI0B,EAAOwE,GAAG9pC,IAAOovC,EAAYpvC,KAEzCslC,EAAOyI,WAAanE,EAAWyF,KAC/B/J,EAAOyE,IAAIE,oBAAqB,GAGpCtoC,EAAO4tC,GAAYF,EAAW,EAAG/J,EAAOyI,YACxCzI,EAAOwE,GAAG/pC,IAAS4B,EAAK6tC,cACxBlK,EAAOwE,GAAGE,IAAQroC,EAAK4nC,cAQtBphE,EAAI,EAAO,EAAJA,GAAyB,MAAhBm9D,EAAOwE,GAAG3hE,KAAcA,EACzCm9D,EAAOwE,GAAG3hE,GAAK0/D,EAAM1/D,GAAKinE,EAAYjnE,EAI1C,MAAW,EAAJA,EAAOA,IACVm9D,EAAOwE,GAAG3hE,GAAK0/D,EAAM1/D,GAAsB,MAAhBm9D,EAAOwE,GAAG3hE,GAAqB,IAANA,EAAU,EAAI,EAAKm9D,EAAOwE,GAAG3hE,EAGrFm9D,GAAOkC,IAAMlC,EAAO6I,QAAUoB,GAAcE,IAAUr2D,MAAM,KAAMyuD,GAG/C,MAAfvC,EAAO8I,MACP9I,EAAOkC,GAAGkI,cAAcpK,EAAOkC,GAAGmI,gBAAkBrK,EAAO8I,OAInE,QAASwB,GAAetK,GACpB,GAAII,EAEAJ,GAAOkC,KAIX9B,EAAkBC,EAAqBL,EAAOuK,IAC9CvK,EAAOwE,IACHpE,EAAgB9jC,KAChB8jC,EAAgBM,MAChBN,EAAgBU,IAChBV,EAAgBW,KAChBX,EAAgBY,OAChBZ,EAAgBa,OAChBb,EAAgBc,aAGpB2I,EAAe7J,IAGnB,QAASgK,GAAiBhK,GACtB,GAAI3oC,GAAM,GAAI11B,KACd,OAAIq+D,GAAO6I,SAEHxxC,EAAImzC,iBACJnzC,EAAI6yC,cACJ7yC,EAAI4sC,eAGA5sC,EAAIuD,cAAevD,EAAImE,WAAYnE,EAAIkE,WAKvD,QAASkvC,GAA4BzK,GAEjC,GAAIA,EAAO0K,KAAOvpE,GAAOwpE,SAErB,WADAC,GAAS5K,EAIbA,GAAOwE,MACPxE,EAAOyE,IAAIjG,OAAQ,CAGnB,IAEI37D,GAAGgoE,EAAaC,EAAQza,EAAO0a,EAF/BnL,EAAO+F,EAAkB3F,EAAOqH,IAChCY,EAAS,GAAKjI,EAAOuK,GAErBS,EAAe/C,EAAOjlE,OACtBioE,EAAyB,CAI7B,KAFAH,EAAS3E,EAAanG,EAAO0K,GAAI9K,GAAMh+D,MAAMokE,QAExCnjE,EAAI,EAAGA,EAAIioE,EAAO9nE,OAAQH,IAC3BwtD,EAAQya,EAAOjoE,GACfgoE,GAAe5C,EAAOrmE,MAAM8kE,EAAsBrW,EAAO2P,SAAgB,GACrE6K,IACAE,EAAU9C,EAAOvW,OAAO,EAAGuW,EAAO3iE,QAAQulE,IACtCE,EAAQ/nE,OAAS,GACjBg9D,EAAOyE,IAAI/F,YAAYn5D,KAAKwlE,GAEhC9C,EAASA,EAAOh2C,MAAMg2C,EAAO3iE,QAAQulE,GAAeA,EAAY7nE,QAChEioE,GAA0BJ,EAAY7nE,QAGtCijE,GAAqB5V,IACjBwa,EACA7K,EAAOyE,IAAIjG,OAAQ,EAGnBwB,EAAOyE,IAAIhG,aAAal5D,KAAK8qD,GAEjCiY,EAAwBjY,EAAOwa,EAAa7K,IAEvCA,EAAO+E,UAAY8F,GACxB7K,EAAOyE,IAAIhG,aAAal5D,KAAK8qD,EAKrC2P,GAAOyE,IAAI9F,cAAgBqM,EAAeC,EACtChD,EAAOjlE,OAAS,GAChBg9D,EAAOyE,IAAI/F,YAAYn5D,KAAK0iE,GAI5BjI,EAAO2I,OAAS3I,EAAOwE,GAAGjqC,IAAQ,KAClCylC,EAAOwE,GAAGjqC,KAAS,IAGnBylC,EAAO2I,SAAU,GAA6B,KAApB3I,EAAOwE,GAAGjqC,MACpCylC,EAAOwE,GAAGjqC,IAAQ,GAGtBsvC,EAAe7J,GACfC,EAAcD,GAGlB,QAAS+H,GAAev/D,GACpB,MAAOA,GAAEa,QAAQ,sCAAuC,SAAU6hE,EAASn+B,EAAIC,EAAIC,EAAIk+B,GACnF,MAAOp+B,IAAMC,GAAMC,GAAMk+B,IAKjC,QAASrD,GAAat/D,GAClB,MAAOA,GAAEa,QAAQ,yBAA0B,QAI/C,QAAS+hE,GAA2BpL,GAChC,GAAIqL,GACAC,EAEAC,EACA1oE,EACA2oE,CAEJ,IAAyB,IAArBxL,EAAO0K,GAAG1nE,OAGV,MAFAg9D,GAAOyE,IAAI3F,eAAgB,OAC3BkB,EAAOkC,GAAK,GAAIvgE,MAAK8pE,KAIzB,KAAK5oE,EAAI,EAAGA,EAAIm9D,EAAO0K,GAAG1nE,OAAQH,IAC9B2oE,EAAe,EACfH,EAAa1oE,KAAWq9D,GACxBqL,EAAW5G,IAAMlG,IACjB8M,EAAWX,GAAK1K,EAAO0K,GAAG7nE,GAC1B4nE,EAA4BY,GAEvBzG,EAAQyG,KAKbG,GAAgBH,EAAW5G,IAAI9F,cAG/B6M,GAAqD,GAArCH,EAAW5G,IAAIhG,aAAaz7D,OAE5CqoE,EAAW5G,IAAIiH,MAAQF,GAEJ,MAAfD,GAAsCA,EAAfC,KACvBD,EAAcC,EACdF,EAAaD,GAIrB1oE,GAAOq9D,EAAQsL,GAAcD,GAIjC,QAAST,GAAS5K,GACd,GAAIn9D,GAAG8oE,EACH1D,EAASjI,EAAOuK,GAChB3oE,EAAQgqE,GAAS9pE,KAAKmmE,EAE1B,IAAIrmE,EAAO,CAEP,IADAo+D,EAAOyE,IAAIzF,KAAM,EACZn8D,EAAI,EAAG8oE,EAAIE,GAAS7oE,OAAY2oE,EAAJ9oE,EAAOA,IACpC,GAAIgpE,GAAShpE,GAAG,GAAGf,KAAKmmE,GAAS,CAE7BjI,EAAO0K,GAAKmB,GAAShpE,GAAG,IAAMjB,EAAM,IAAM,IAC1C,OAGR,IAAKiB,EAAI,EAAG8oE,EAAIG,GAAS9oE,OAAY2oE,EAAJ9oE,EAAOA,IACpC,GAAIipE,GAASjpE,GAAG,GAAGf,KAAKmmE,GAAS,CAC7BjI,EAAO0K,IAAMoB,GAASjpE,GAAG,EACzB,OAGJolE,EAAOrmE,MAAM4lE,MACbxH,EAAO0K,IAAM,KAEjBD,EAA4BzK,OAE5BA,GAAO6E,UAAW,EAK1B,QAASkH,GAAmB/L,GACxB4K,EAAS5K,GACLA,EAAO6E,YAAa,UACb7E,GAAO6E,SACd1jE,GAAO6qE,wBAAwBhM,IAIvC,QAASiM,IAAkBjM,GACvB,GAAIuC,GAAQvC,EAAOuK,GACfW,EAAUgB,GAAgBpqE,KAAKygE,EAE/BA,KAAU1+D,EACVm8D,EAAOkC,GAAK,GAAIvgE,MACTupE,EACPlL,EAAOkC,GAAK,GAAIvgE,OAAMupE,EAAQ,IACN,gBAAV3I,GACdwJ,EAAmB/L,GACZz8D,EAAQg/D,IACfvC,EAAOwE,GAAKjC,EAAMtwC,MAAM,GACxB43C,EAAe7J,IACRt+D,EAAO6gE,GACdvC,EAAOkC,GAAK,GAAIvgE,OAAM4gE,GACG,gBAAZ,GACb+H,EAAetK,GACU,gBAAZ,GAEbA,EAAOkC,GAAK,GAAIvgE,MAAK4gE,GAErBphE,GAAO6qE,wBAAwBhM,GAIvC,QAASmK,IAASp8D,EAAG5P,EAAGqL,EAAGjB,EAAGmlC,EAAGllC,EAAG2jE,GAGhC,GAAI9vC,GAAO,GAAI16B,MAAKoM,EAAG5P,EAAGqL,EAAGjB,EAAGmlC,EAAGllC,EAAG2jE,EAMtC,OAHQ,MAAJp+D,GACAsuB,EAAK1B,YAAY5sB,GAEdsuB,EAGX,QAAS4tC,IAAYl8D,GACjB,GAAIsuB,GAAO,GAAI16B,MAAKA,KAAKqiE,IAAIlwD,MAAM,KAAM/Q,WAIzC,OAHQ,MAAJgL,GACAsuB,EAAK+vC,eAAer+D,GAEjBsuB,EAGX,QAASgwC,IAAa9J,EAAO+J,GACzB,GAAqB,gBAAV/J,GACP,GAAKxgE,MAAMwgE,IAKP,GADAA,EAAQ+J,EAASvD,cAAcxG,GACV,gBAAVA,GACP,MAAO,UALXA,GAAQh9C,SAASg9C,EAAO,GAShC,OAAOA,GASX,QAASgK,IAAkBtE,EAAQvG,EAAQ8K,EAAeC,EAAU7M,GAChE,MAAOA,GAAK8M,aAAahL,GAAU,IAAK8K,EAAevE,EAAQwE,GAGnE,QAASC,IAAaj1C,EAAc+0C,EAAe5M,GAC/C,GAAIpoC,GAAUlP,GAAM/lB,KAAK+iB,IAAImS,GAAgB,KACzCF,EAAUjP,GAAMkP,EAAU,IAC1BF,EAAQhP,GAAMiP,EAAU,IACxBspC,EAAOv4C,GAAMgP,EAAQ,IACrBgpC,EAAQh4C,GAAMu4C,EAAO,KACrB7uC,EAAOwF,EAAUm1C,GAAuBnkE,IAAO,IAAKgvB,IACpC,IAAZD,IAAkB,MAClBA,EAAUo1C,GAAuBxuE,IAAM,KAAMo5B,IACnC,IAAVD,IAAgB,MAChBA,EAAQq1C,GAAuBpkE,IAAM,KAAM+uB,IAClC,IAATupC,IAAe,MACfA,GAAQ8L,GAAuBC,KAAO,KAAM/L,IAC5CA,GAAQ8L,GAAuBE,KAAO,MACtChM,EAAO8L,GAAuBtzD,KAAO,KAAMiP,GAAMu4C,EAAO,MAC9C,IAAVP,IAAgB,OAAS,KAAMA,EAIvC,OAHAtuC,GAAK,GAAKw6C,EACVx6C,EAAK,GAAKyF,EAAe,EACzBzF,EAAK,GAAK4tC,EACH2M,GAAkBz4D,SAAUke,GAgBvC,QAASqyC,IAAWtC,EAAK+K,EAAgBC,GACrC,GAEIC,GAFAlqD,EAAMiqD,EAAuBD,EAC7BG,EAAkBF,EAAuBhL,EAAIjB,KAajD,OATImM,GAAkBnqD,IAClBmqD,GAAmB,GAGDnqD,EAAM,EAAxBmqD,IACAA,GAAmB,GAGvBD,EAAiB7rE,GAAO4gE,GAAK9yD,IAAI,IAAKg+D,IAElCrM,KAAMr+D,KAAKqqC,KAAKogC,EAAepD,YAAc,GAC7CttC,KAAM0wC,EAAe1wC,QAK7B,QAASqtC,IAAmBrtC,EAAMskC,EAAMwI,EAAS2D,EAAsBD,GACnE,GAA6CI,GAAWtD,EAApDpgE,EAAIygE,GAAY3tC,EAAM,EAAG,GAAG6wC,WAOhC,OALA3jE,GAAU,IAANA,EAAU,EAAIA,EAClB4/D,EAAqB,MAAXA,EAAkBA,EAAU0D,EACtCI,EAAYJ,EAAiBtjE,GAAKA,EAAIujE,EAAuB,EAAI,IAAUD,EAAJtjE,EAAqB,EAAI,GAChGogE,EAAY,GAAKhJ,EAAO,IAAMwI,EAAU0D,GAAkBI,EAAY,GAGlE5wC,KAAMstC,EAAY,EAAIttC,EAAOA,EAAO,EACpCstC,UAAWA,EAAY,EAAKA,EAAYtF,EAAWhoC,EAAO,GAAKstC,GAQvE,QAASwD,IAAWpN,GAChB,GAAIuC,GAAQvC,EAAOuK,GACf/tC,EAASwjC,EAAO0K,EAEpB,OAAc,QAAVnI,GAAmB/lC,IAAW34B,GAAuB,KAAV0+D,EACpCphE,GAAOksE,SAASzO,WAAW,KAGjB,gBAAV2D,KACPvC,EAAOuK,GAAKhI,EAAQoD,IAAoB2H,SAAS/K,IAGjDphE,GAAOiD,SAASm+D,IAChBvC,EAASuB,EAAYgB,GAErBvC,EAAOkC,GAAK,GAAIvgE,OAAM4gE,EAAML,KACrB1lC,EACHj5B,EAAQi5B,GACR4uC,EAA2BpL,GAE3ByK,EAA4BzK,GAGhCiM,GAAkBjM,GAGf,GAAID,GAAOC,IAwCtB,QAASuN,IAAOtnC,EAAIunC,GAChB,GAAIC,GAAK5qE,CAIT,IAHuB,IAAnB2qE,EAAQxqE,QAAgBO,EAAQiqE,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQxqE,OACT,MAAO7B,KAGX,KADAssE,EAAMD,EAAQ,GACT3qE,EAAI,EAAGA,EAAI2qE,EAAQxqE,SAAUH,EAC1B2qE,EAAQ3qE,GAAGojC,GAAIwnC,KACfA,EAAMD,EAAQ3qE,GAGtB,OAAO4qE,GAqmBX,QAASnL,IAAeP,EAAKv9D,GACzB,GAAIkpE,EAGJ,OAAqB,gBAAVlpE,KACPA,EAAQu9D,EAAInC,OAAO4I,YAAYhkE,GAEV,gBAAVA,IACAu9D,GAIf2L,EAAanrE,KAAKmG,IAAIq5D,EAAI1lC,OAClB0nC,EAAYhC,EAAIzlC,OAAQ93B,IAChCu9D,EAAIG,GAAG,OAASH,EAAIoD,OAAS,MAAQ,IAAM,SAAS3gE,EAAOkpE,GACpD3L,GAGX,QAASM,IAAUN,EAAK4L,GACpB,MAAO5L,GAAIG,GAAG,OAASH,EAAIoD,OAAS,MAAQ,IAAMwI,KAGtD,QAASvL,IAAUL,EAAK4L,EAAMnpE,GAC1B,MAAa,UAATmpE,EACOrL,GAAeP,EAAKv9D,GAEpBu9D,EAAIG,GAAG,OAASH,EAAIoD,OAAS,MAAQ,IAAMwI,GAAMnpE,GAIhE,QAASopE,IAAaD,EAAME,GACxB,MAAO,UAAUrpE,GACb,MAAa,OAATA,GACA49D,GAAUzkE,KAAMgwE,EAAMnpE,GACtBrD,GAAO8gE,aAAatkE,KAAMkwE,GACnBlwE,MAEA0kE,GAAU1kE,KAAMgwE,IAwJnC,QAASG,IAAmB/7D,GACxB5Q,GAAOg/D,SAASl6B,GAAGl0B,GAAQ,WACvB,MAAOpU,MAAKiR,MAAMmD,IAI1B,QAASg8D,IAAqBh8D,EAAMgoC,GAChC54C,GAAOg/D,SAASl6B,GAAG,KAAOl0B,GAAQ,WAC9B,OAAQpU,KAAOo8C,GAwCvB,QAASi0B,IAAWC,GAEK,mBAAVC,SAGXC,GAAkBC,GAAYjtE,OAE1BitE,GAAYjtE,OADZ8sE,EACqBhP,EACb,uGAGA99D,IAEaA,IA9rE7B,IAnVA,GAAIA,IAIAgtE,GAEAtrE,GALAwrE,GAAU,QAEVD,GAAgC,mBAAX/P,GAAyBA,EAAS1gE,KAEvD2qB,GAAQ/lB,KAAK+lB,MAGboS,GAAO,EACPD,GAAQ,EACRiqC,GAAO,EACPnqC,GAAO,EACPD,GAAS,EACTD,GAAS,EACTD,GAAc,EAGdqrC,MAGAjE,IACI8M,iBAAkB,KAClB/D,GAAK,KACLG,GAAK,KACLrD,GAAK,KACLtC,QAAU,KACV+D,KAAO,KACP3D,OAAS,KACTE,QAAU,KACVZ,IAAM,KACNjB,MAAQ,MAIZqC,GAA+B,mBAAXroE,IAA0BA,EAAOD,QAGrD2uE,GAAkB,sBAClBqC,GAA0B,uDAI1BC,GAAmB,gIAGnBxI,GAAmB,mKACnBQ,GAAwB,yCAGxBmB,GAA2B,QAC3BR,GAA6B,UAC7BL,GAA4B,UAC5BG,GAA2B,gBAC3BS,GAAmB,MACnBN,GAAiB,mHACjBI,GAAqB,uBACrBC,GAAc,KACdF,GAAwB,yBACxBK,GAAoB,UAGpBjB,GAAqB,KACrBO,GAAsB,OACtBN,GAAwB,QACxBC,GAAuB,QACvBG,GAAsB,aACtBD,GAAyB,WAIzB6E,GAAW,4IAEX6C,GAAY,uBAEZ5C,KACK,eAAgB,0BAChB,aAAc,sBACd,eAAgB,oBAChB,aAAc,iBACd,WAAY,gBAIjBC,KACK,gBAAiB,6BACjB,WAAY,wBACZ,QAAS,mBACT,KAAM,cAIXzD,GAAuB,kBAIvBqG,IADyB,0CAA0CrpE,MAAM,MAErEspE,aAAiB,EACjBC,QAAY,IACZC,QAAY,IACZC,MAAU,KACVC,KAAS,MACTC,OAAW,OACXC,MAAU,UAGdjM,IACImJ,GAAK,cACL3jE,EAAI,SACJrK,EAAI,SACJoK,EAAI,OACJiB,EAAI,MACJ0lE,EAAI,OACJruB,EAAI,OACJ0oB,EAAI,UACJ77B,EAAI,QACJyhC,EAAI,UACJphE,EAAI,OACJqhE,IAAM,YACN3lE,EAAI,UACJ+/D,EAAI,aACJE,GAAI,WACJJ,GAAI,eAGRrG,IACIoM,UAAY,YACZC,WAAa,aACbC,QAAU,UACVC,SAAW,WACXC,YAAc,eAIlBrJ,MAGAuG,IACEnkE,EAAG,GACHrK,EAAG,GACHoK,EAAG,GACHqkE,GAAI,GACJC,GAAI,GACJxzD,GAAI,KAINq2D,GAAmB,gBAAgBrqE,MAAM,KACzCsqE,GAAe,kBAAkBtqE,MAAM,KAEvC4gE,IACIv4B,EAAO,WACH,MAAO/vC,MAAK+iE,QAAU,GAE1BkP,IAAO,SAAUpzC,GACb,MAAO7+B,MAAKiiE,OAAOiQ,YAAYlyE,KAAM6+B,IAEzCszC,KAAO,SAAUtzC,GACb,MAAO7+B,MAAKiiE,OAAOa,OAAO9iE,KAAM6+B,IAEpC0yC,EAAO,WACH,MAAOvxE,MAAK0+B,QAEhB+yC,IAAO,WACH,MAAOzxE,MAAKisE,aAEhBpgE,EAAO,WACH,MAAO7L,MAAKmjE,OAEhB8L,GAAO,SAAUpwC,GACb,MAAO7+B,MAAKiiE,OAAOmQ,YAAYpyE,KAAM6+B,IAEzCwzC,IAAO,SAAUxzC,GACb,MAAO7+B,MAAKiiE,OAAOqQ,cAActyE,KAAM6+B,IAE3C0zC,KAAO,SAAU1zC,GACb,MAAO7+B,MAAKiiE,OAAOuQ,SAASxyE,KAAM6+B,IAEtCqkB,EAAO,WACH,MAAOljD,MAAKijE,QAEhB2I,EAAO,WACH,MAAO5rE,MAAKyyE,WAEhBC,GAAO,WACH,MAAO5Q,GAAa9hE,KAAK2+B,OAAS,IAAK,IAE3Cg0C,KAAO,WACH,MAAO7Q,GAAa9hE,KAAK2+B,OAAQ,IAErCi0C,MAAQ,WACJ,MAAO9Q,GAAa9hE,KAAK2+B,OAAQ,IAErCk0C,OAAS,WACL,GAAIziE,GAAIpQ,KAAK2+B,OAAQxS,EAAO/b,GAAK,EAAI,IAAM,GAC3C,OAAO+b,GAAO21C,EAAal9D,KAAK+iB,IAAIvX,GAAI,IAE5C27D,GAAO,WACH,MAAOjK,GAAa9hE,KAAKwrE,WAAa,IAAK,IAE/CsH,KAAO,WACH,MAAOhR,GAAa9hE,KAAKwrE,WAAY,IAEzCuH,MAAQ,WACJ,MAAOjR,GAAa9hE,KAAKwrE,WAAY,IAEzCG,GAAO,WACH,MAAO7J,GAAa9hE,KAAKgzE,cAAgB,IAAK,IAElDC,KAAO,WACH,MAAOnR,GAAa9hE,KAAKgzE,cAAe,IAE5CE,MAAQ,WACJ,MAAOpR,GAAa9hE,KAAKgzE,cAAe,IAE5ClnE,EAAI,WACA,MAAO9L,MAAKyrE,WAEhBI,EAAI,WACA,MAAO7rE,MAAKmzE,cAEhBluE,EAAO,WACH,MAAOjF,MAAKiiE,OAAOmR,SAASpzE,KAAK25B,QAAS35B,KAAK45B,WAAW,IAE9DiW,EAAO,WACH,MAAO7vC,MAAKiiE,OAAOmR,SAASpzE,KAAK25B,QAAS35B,KAAK45B,WAAW,IAE9D1S,EAAO,WACH,MAAOlnB,MAAK25B,SAEhB/uB,EAAO,WACH,MAAO5K,MAAK25B,QAAU,IAAM,IAEhCn5B,EAAO,WACH,MAAOR,MAAK45B,WAEhB/uB,EAAO,WACH,MAAO7K,MAAK65B,WAEhB1S,EAAO,WACH,MAAO89C,GAAMjlE,KAAK85B,eAAiB,MAEvCu5C,GAAO,WACH,MAAOvR,GAAamD,EAAMjlE,KAAK85B,eAAiB,IAAK,IAEzDw5C,IAAO,WACH,MAAOxR,GAAa9hE,KAAK85B,eAAgB,IAE7Cy5C,KAAO,WACH,MAAOzR,GAAa9hE,KAAK85B,eAAgB,IAE7C05C,EAAO,WACH,GAAIvuE,IAAKjF,KAAKynE,OACV3hE,EAAI,GAKR,OAJQ,GAAJb,IACAA,GAAKA,EACLa,EAAI,KAEDA,EAAIg8D,EAAamD,EAAMhgE,EAAI,IAAK,GAAK,IAAM68D,EAAamD,EAAMhgE,GAAK,GAAI,IAElFwuE,GAAO,WACH,GAAIxuE,IAAKjF,KAAKynE,OACV3hE,EAAI,GAKR,OAJQ,GAAJb,IACAA,GAAKA,EACLa,EAAI,KAEDA,EAAIg8D,EAAamD,EAAMhgE,EAAI,IAAK,GAAK68D,EAAamD,EAAMhgE,GAAK,GAAI,IAE5E8U,EAAI,WACA,MAAO/Z,MAAK0zE,YAEhBC,GAAK,WACD,MAAO3zE,MAAK4zE,YAEhBlsD,EAAO,WACH,MAAO1nB,MAAK6zE,QAEhBrC,EAAI,WACA,MAAOxxE,MAAK6iE,YAIpBiR,IAAS,SAAU,cAAe,WAAY,gBAAiB,eAyD5D/B,GAAiB1sE,QACpBH,GAAI6sE,GAAiBpgC,MACrB22B,GAAqBpjE,GAAI,KAAO68D,EAAgBuG,GAAqBpjE,IAAIA,GAE7E,MAAO8sE,GAAa3sE,QAChBH,GAAI8sE,GAAargC,MACjB22B,GAAqBpjE,GAAIA,IAAK08D,EAAS0G,GAAqBpjE,IAAI,EAmgDpE,KAjgDAojE,GAAqByL,KAAOnS,EAAS0G,GAAqBmJ,IAAK,GA+S/DzsE,EAAOm9D,EAAS5wD,WAEZy0D,IAAM,SAAU3D,GACZ,GAAI98D,GAAML,CACV,KAAKA,IAAKm9D,GACN98D,EAAO88D,EAAOn9D,GACM,kBAATK,GACPvF,KAAKkF,GAAKK,EAEVvF,KAAK,IAAMkF,GAAKK,GAK5Bm+D,QAAU,wFAAwFh8D,MAAM,KACxGo7D,OAAS,SAAUtiE,GACf,MAAOR,MAAK0jE,QAAQljE,EAAEuiE,UAG1BiR,aAAe,kDAAkDtsE,MAAM,KACvEwqE,YAAc,SAAU1xE,GACpB,MAAOR,MAAKg0E,aAAaxzE,EAAEuiE,UAG/B8H,YAAc,SAAUoJ,GACpB,GAAI/uE,GAAGk/D,EAAK8P,CAMZ,KAJKl0E,KAAKm0E,eACNn0E,KAAKm0E,iBAGJjvE,EAAI,EAAO,GAAJA,EAAQA,IAQhB,GANKlF,KAAKm0E,aAAajvE,KACnBk/D,EAAM5gE,GAAOuiE,KAAK,IAAM7gE,IACxBgvE,EAAQ,IAAMl0E,KAAK8iE,OAAOsB,EAAK,IAAM,KAAOpkE,KAAKkyE,YAAY9N,EAAK,IAClEpkE,KAAKm0E,aAAajvE,GAAK,GAAIglE,QAAOgK,EAAMxoE,QAAQ,IAAK,IAAK,MAG1D1L,KAAKm0E,aAAajvE,GAAG+H,KAAKgnE,GAC1B,MAAO/uE,IAKnBkvE,UAAY,2DAA2D1sE,MAAM,KAC7E8qE,SAAW,SAAUhyE,GACjB,MAAOR,MAAKo0E,UAAU5zE,EAAE2iE,QAG5BkR,eAAiB,8BAA8B3sE,MAAM,KACrD4qE,cAAgB,SAAU9xE,GACtB,MAAOR,MAAKq0E,eAAe7zE,EAAE2iE,QAGjCmR,aAAe,uBAAuB5sE,MAAM,KAC5C0qE,YAAc,SAAU5xE,GACpB,MAAOR,MAAKs0E,aAAa9zE,EAAE2iE,QAG/BiI,cAAgB,SAAUmJ,GACtB,GAAIrvE,GAAGk/D,EAAK8P,CAMZ,KAJKl0E,KAAKw0E,iBACNx0E,KAAKw0E,mBAGJtvE,EAAI,EAAO,EAAJA,EAAOA,IAQf,GANKlF,KAAKw0E,eAAetvE,KACrBk/D,EAAM5gE,IAAQ,IAAM,IAAI2/D,IAAIj+D,GAC5BgvE,EAAQ,IAAMl0E,KAAKwyE,SAASpO,EAAK,IAAM,KAAOpkE,KAAKsyE,cAAclO,EAAK,IAAM,KAAOpkE,KAAKoyE,YAAYhO,EAAK,IACzGpkE,KAAKw0E,eAAetvE,GAAK,GAAIglE,QAAOgK,EAAMxoE,QAAQ,IAAK,IAAK,MAG5D1L,KAAKw0E,eAAetvE,GAAG+H,KAAKsnE,GAC5B,MAAOrvE,IAKnBuvE,iBACIC,GAAK,SACLC,EAAI,aACJC,GAAK,cACLC,IAAM,iBACNC,KAAO,wBAEXlM,eAAiB,SAAUtgE,GACvB,GAAI47D,GAASlkE,KAAKy0E,gBAAgBnsE,EAOlC,QANK47D,GAAUlkE,KAAKy0E,gBAAgBnsE,EAAIqD,iBACpCu4D,EAASlkE,KAAKy0E,gBAAgBnsE,EAAIqD,eAAeD,QAAQ,mBAAoB,SAAUqpE,GACnF,MAAOA,GAAIzgD,MAAM,KAErBt0B,KAAKy0E,gBAAgBnsE,GAAO47D,GAEzBA,GAGX+G,KAAO,SAAUrG,GAGb,MAAiD,OAAxCA,EAAQ,IAAIlf,cAAczjC,OAAO,IAG9C0nD,eAAiB,gBACjByJ,SAAW,SAAUz5C,EAAOC,EAASo7C,GACjC,MAAIr7C,GAAQ,GACDq7C,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAIhCC,WACIC,QAAU,gBACVC,QAAU,mBACVC,SAAW,eACXC,QAAU,oBACVC,SAAW,sBACXC,SAAW,KAEfC,SAAW,SAAUltE,EAAK87D,GACtB,GAAIF,GAASlkE,KAAKi1E,UAAU3sE,EAC5B,OAAyB,kBAAX47D,GAAwBA,EAAO/tD,MAAMiuD,GAAOF,GAG9DuR,eACIC,OAAS,QACTC,KAAO,SACP9qE,EAAI,gBACJrK,EAAI,WACJo1E,GAAK,aACLhrE,EAAI,UACJirE,GAAK,WACLhqE,EAAI,QACJojE,GAAK,UACLl/B,EAAI,UACJ+lC,GAAK,YACL1lE,EAAI,SACJ2lE,GAAK,YAEThH,aAAe,SAAUhL,EAAQ8K,EAAevE,EAAQwE,GACpD,GAAI5K,GAASlkE,KAAKy1E,cAAcnL,EAChC,OAA0B,kBAAXpG,GACXA,EAAOH,EAAQ8K,EAAevE,EAAQwE,GACtC5K,EAAOx4D,QAAQ,MAAOq4D,IAE9BiS,WAAa,SAAU5sD,EAAM86C,GACzB,GAAIrlC,GAAS7+B,KAAKy1E,cAAcrsD,EAAO,EAAI,SAAW,OACtD,OAAyB,kBAAXyV,GAAwBA,EAAOqlC,GAAUrlC,EAAOnzB,QAAQ,MAAOw4D,IAGjFhC,QAAU,SAAU6B,GAChB,MAAO/jE,MAAKi2E,SAASvqE,QAAQ,KAAMq4D,IAEvCkS,SAAW,KAEXtG,SAAW,SAAUrF,GACjB,MAAOA,IAGX4L,WAAa,SAAU5L,GACnB,MAAOA,IAGXrH,KAAO,SAAUmB,GACb,MAAOsC,IAAWtC,EAAKpkE,KAAK8rE,MAAMtF,IAAKxmE,KAAK8rE,MAAMrF,KAAKxD,MAG3D6I,OACItF,IAAM,EACNC,IAAM,GAGV0P,aAAc,eACdzN,YAAa,WACT,MAAO1oE,MAAKm2E,gBAo0BpB3yE,GAAS,SAAUohE,EAAO/lC,EAAQojC,EAAM9O,GACpC,GAAI1yD,EAiBJ,OAfqB,iBAAX,KACN0yD,EAAS8O,EACTA,EAAO/7D,GAIXzF,KACAA,EAAEkwE,kBAAmB,EACrBlwE,EAAEmsE,GAAKhI,EACPnkE,EAAEssE,GAAKluC,EACPp+B,EAAEipE,GAAKzH,EACPxhE,EAAE2mE,QAAUjU,EACZ1yD,EAAE+mE,QAAS,EACX/mE,EAAEqmE,IAAMlG,IAED6O,GAAWhvE,IAGtB+C,GAAOi+D,6BAA8B,EAErCj+D,GAAO6qE,wBAA0B/M,EACzB,4LAIA,SAAUe,GACdA,EAAOkC,GAAK,GAAIvgE,MAAKq+D,EAAOuK,MAyBhCppE,GAAOuH,IAAM,WACT,GAAIspB,MAAUC,MAAM/zB,KAAK6E,UAAW,EAEpC,OAAOwqE,IAAO,WAAYv7C,IAG9B7wB,GAAOiJ,IAAM,WACT,GAAI4nB,MAAUC,MAAM/zB,KAAK6E,UAAW,EAEpC,OAAOwqE,IAAO,UAAWv7C,IAI7B7wB,GAAOuiE,IAAM,SAAUnB,EAAO/lC,EAAQojC,EAAM9O,GACxC,GAAI1yD,EAkBJ,OAhBqB,iBAAX,KACN0yD,EAAS8O,EACTA,EAAO/7D,GAIXzF,KACAA,EAAEkwE,kBAAmB,EACrBlwE,EAAEyqE,SAAU,EACZzqE,EAAE+mE,QAAS,EACX/mE,EAAEipE,GAAKzH,EACPxhE,EAAEmsE,GAAKhI,EACPnkE,EAAEssE,GAAKluC,EACPp+B,EAAE2mE,QAAUjU,EACZ1yD,EAAEqmE,IAAMlG,IAED6O,GAAWhvE,GAAGslE,OAIzBviE,GAAOqwE,KAAO,SAAUjP,GACpB,MAAOphE,IAAe,IAARohE,IAIlBphE,GAAOg/D,SAAW,SAAUoC,EAAOt8D,GAC/B,GAGI6jB,GACAiqD,EACAC,EALA7T,EAAWoC,EAEX3gE,EAAQ,IAuDZ,OAlDIT,IAAO8yE,WAAW1R,GAClBpC,GACIgM,GAAI5J,EAAMpB,cACV33D,EAAG+4D,EAAMnB,MACT1zB,EAAG60B,EAAMlB,SAEW,gBAAVkB,IACdpC,KACIl6D,EACAk6D,EAASl6D,GAAOs8D,EAEhBpC,EAAS1oC,aAAe8qC,IAElB3gE,EAAQ2sE,GAAwBzsE,KAAKygE,KAC/Cz4C,EAAqB,MAAbloB,EAAM,GAAc,GAAK,EACjCu+D,GACIpyD,EAAG,EACHvE,EAAGo5D,EAAMhhE,EAAM8iE,KAAS56C,EACxBvhB,EAAGq6D,EAAMhhE,EAAM24B,KAASzQ,EACxB3rB,EAAGykE,EAAMhhE,EAAM04B,KAAWxQ,EAC1BthB,EAAGo6D,EAAMhhE,EAAMy4B,KAAWvQ,EAC1BqiD,GAAIvJ,EAAMhhE,EAAMw4B,KAAgBtQ,KAE1BloB,EAAQ4sE,GAAiB1sE,KAAKygE,MACxCz4C,EAAqB,MAAbloB,EAAM,GAAc,GAAK,EACjCoyE,EAAW,SAAUE,GAIjB,GAAIzG,GAAMyG,GAAOr0D,WAAWq0D,EAAI7qE,QAAQ,IAAK,KAE7C,QAAQtH,MAAM0rE,GAAO,EAAIA,GAAO3jD,GAEpCq2C,GACIpyD,EAAGimE,EAASpyE,EAAM,IAClB8rC,EAAGsmC,EAASpyE,EAAM,IAClB4H,EAAGwqE,EAASpyE,EAAM,IAClB2G,EAAGyrE,EAASpyE,EAAM,IAClBzD,EAAG61E,EAASpyE,EAAM,IAClB4G,EAAGwrE,EAASpyE,EAAM,IAClBi/C,EAAGmzB,EAASpyE,EAAM,MAI1BmyE,EAAM,GAAI7T,GAASC,GAEfh/D,GAAO8yE,WAAW1R,IAAUA,EAAMp/D,eAAe,WACjD4wE,EAAIvQ,MAAQjB,EAAMiB,OAGfuQ,GAIX5yE,GAAOgzE,QAAU9F,GAGjBltE,GAAOizE,cAAgB3F,GAGvBttE,GAAOwpE,SAAW,aAIlBxpE,GAAOqgE,iBAAmBA,GAI1BrgE,GAAO8gE,aAAe,aAGtB9gE,GAAOkzE,sBAAwB,SAASC,EAAWC,GACjD,MAAI5H,IAAuB2H,KAAezwE,GACjC,GAET8oE,GAAuB2H,GAAaC,GAC7B,IAMTpzE,GAAOy+D,KAAO,SAAU35D,EAAK4M,GACzB,GAAIlJ,EACJ,OAAK1D,IAGD4M,EACA0yD,EAASP,EAAkB/+D,GAAM4M,GACf,OAAXA,GACP6yD,EAAWz/D,GACXA,EAAM,MACEw/D,GAAUx/D,IAClB0/D,EAAkB1/D,GAEtB0D,EAAIxI,GAAOg/D,SAASl6B,GAAGu9B,MAAQriE,GAAO8kC,GAAGu9B,MAAQmC,EAAkB1/D,GAC5D0D,EAAE6qE,OAXErzE,GAAO8kC,GAAGu9B,MAAMgR,OAe/BrzE,GAAOszE,SAAW,SAAUxuE,GAIxB,MAHIA,IAAOA,EAAIu9D,OAASv9D,EAAIu9D,MAAMgR,QAC9BvuE,EAAMA,EAAIu9D,MAAMgR,OAEb7O,EAAkB1/D,IAI7B9E,GAAOiD,SAAW,SAAUoZ,GACxB,MAAOA,aAAeuiD,IACV,MAAPviD,GAAgBA,EAAIra,eAAe,qBAI5ChC,GAAO8yE,WAAa,SAAUz2D,GAC1B,MAAOA,aAAe0iD,IAGrBr9D,GAAI4uE,GAAMzuE,OAAS,EAAGH,IAAK,IAAKA,GACjCugE,EAASqO,GAAM5uE,IAGnB1B,IAAO0hE,eAAiB,SAAUC,GAC9B,MAAOD,GAAeC,IAG1B3hE,GAAOksE,QAAU,SAAUqH,GACvB,GAAIv2E,GAAIgD,GAAOuiE,IAAI+H,IAQnB,OAPa,OAATiJ,EACA/xE,EAAOxE,EAAEsmE,IAAKiQ,GAGdv2E,EAAEsmE,IAAI1F,iBAAkB,EAGrB5gE,GAGXgD,GAAOwzE,UAAY,WACf,MAAOxzE,IAAO2S,MAAM,KAAM/Q,WAAW4xE,aAGzCxzE,GAAOunE,kBAAoB,SAAUnG,GACjC,MAAOK,GAAML,IAAUK,EAAML,GAAS,GAAK,KAAO,MAQtD5/D,EAAOxB,GAAO8kC,GAAK85B,EAAO7wD,WAEtBwoB,MAAQ,WACJ,MAAOv2B,IAAOxD,OAGlBwG,QAAU,WACN,OAAQxG,KAAKukE,GAA4B,KAArBvkE,KAAK0nE,SAAW,IAGxCmM,KAAO,WACH,MAAOjvE,MAAKC,OAAO7E,KAAO,MAG9B+E,SAAW,WACP,MAAO/E,MAAK+5B,QAAQkoC,KAAK,MAAMpjC,OAAO,qCAG1Cn4B,OAAS,WACL,MAAO1G,MAAK0nE,QAAU,GAAI1jE,OAAMhE,MAAQA,KAAKukE,IAGjD39D,YAAc,WACV,GAAIpG,GAAIgD,GAAOxD,MAAM+lE,KACrB,OAAI,GAAIvlE,EAAEm+B,QAAUn+B,EAAEm+B,QAAU,KACrB4pC,EAAa/nE,EAAG,gCAEhB+nE,EAAa/nE,EAAG,mCAI/B2H,QAAU,WACN,GAAI3H,GAAIR,IACR,QACIQ,EAAEm+B,OACFn+B,EAAEuiE,QACFviE,EAAEk+B,OACFl+B,EAAEm5B,QACFn5B,EAAEo5B,UACFp5B,EAAEq5B,UACFr5B,EAAEs5B,iBAIVmtC,QAAU,WACN,MAAOA,GAAQjnE,OAGnBi3E,aAAe,WAEX,MAAIj3E,MAAK6mE,GACE7mE,KAAKinE,WAAapC,EAAc7kE,KAAK6mE,IAAK7mE,KAAKwnE,OAAShkE,GAAOuiE,IAAI/lE,KAAK6mE,IAAMrjE,GAAOxD,KAAK6mE,KAAK1+D,WAAa,GAGhH,GAGX+uE,aAAe,WACX,MAAOlyE,MAAWhF,KAAK8mE,MAG3BqQ,UAAW,WACP,MAAOn3E,MAAK8mE,IAAIpmD,UAGpBqlD,IAAM,WACF,MAAO/lE,MAAKynE,KAAK,IAGrBE,MAAQ,WAGJ,MAFA3nE,MAAKynE,KAAK,GACVznE,KAAKwnE,QAAS,EACPxnE,MAGX6+B,OAAS,SAAUu4C,GACf,GAAIlT,GAASqE,EAAavoE,KAAMo3E,GAAe5zE,GAAOizE,cACtD,OAAOz2E,MAAKiiE,OAAOiU,WAAWhS,IAGlC5yD,IAAM,SAAUszD,EAAOmQ,GACnB,GAAIsC,EAUJ,OAPIA,GADiB,gBAAVzS,IAAqC,gBAARmQ,GAC9BvxE,GAAOg/D,SAASp+D,OAAO2wE,IAAQnQ,GAASmQ,EAAK3wE,OAAO2wE,GAAOA,EAAMnQ,GAC/C,gBAAVA,GACRphE,GAAOg/D,UAAUuS,EAAKnQ,GAEtBphE,GAAOg/D,SAASoC,EAAOmQ,GAEjC5Q,EAAgCnkE,KAAMq3E,EAAK,GACpCr3E,MAGXooB,SAAW,SAAUw8C,EAAOmQ,GACxB,GAAIsC,EAUJ,OAPIA,GADiB,gBAAVzS,IAAqC,gBAARmQ,GAC9BvxE,GAAOg/D,SAASp+D,OAAO2wE,IAAQnQ,GAASmQ,EAAK3wE,OAAO2wE,GAAOA,EAAMnQ,GAC/C,gBAAVA,GACRphE,GAAOg/D,UAAUuS,EAAKnQ,GAEtBphE,GAAOg/D,SAASoC,EAAOmQ,GAEjC5Q,EAAgCnkE,KAAMq3E,EAAK,IACpCr3E;EAGXopB,KAAO,SAAUw7C,EAAOO,EAAOmS,GAC3B,GAEIluD,GAAM86C,EAFNqT,EAAOjQ,EAAO1C,EAAO5kE,MACrBw3E,EAAyC,KAA7Bx3E,KAAKynE,OAAS8P,EAAK9P,OA6BnC,OA1BAtC,GAAQD,EAAeC,GAET,SAAVA,GAA8B,UAAVA,GAEpB/7C,EAAmD,OAA3CppB,KAAKomE,cAAgBmR,EAAKnR,eAElClC,EAAwC,IAA7BlkE,KAAK2+B,OAAS44C,EAAK54C,SAAiB3+B,KAAK+iE,QAAUwU,EAAKxU,SAGnEmB,IAAYlkE,KAAOwD,GAAOxD,MAAMy3E,QAAQ,UAC/BF,EAAO/zE,GAAO+zE,GAAME,QAAQ,WAAaruD,EAElD86C,GACgE,KADpDlkE,KAAKynE,OAASjkE,GAAOxD,MAAMy3E,QAAQ,SAAShQ,QAC/C8P,EAAK9P,OAASjkE,GAAO+zE,GAAME,QAAQ,SAAShQ,SAAiBr+C,EACxD,SAAV+7C,IACAjB,GAAkB,MAGtB96C,EAAQppB,KAAOu3E,EACfrT,EAAmB,WAAViB,EAAqB/7C,EAAO,IACvB,WAAV+7C,EAAqB/7C,EAAO,IAClB,SAAV+7C,EAAmB/7C,EAAO,KAChB,QAAV+7C,GAAmB/7C,EAAOouD,GAAY,MAC5B,SAAVrS,GAAoB/7C,EAAOouD,GAAY,OACvCpuD,GAEDkuD,EAAUpT,EAASJ,EAASI,IAGvCh+C,KAAO,SAAU6O,EAAM85C,GACnB,MAAOrrE,IAAOg/D,SAASxiE,KAAKopB,KAAK2L,IAAOktC,KAAKjiE,KAAKiiE,OAAO4U,OAAOa,UAAU7I,IAG9E8I,QAAU,SAAU9I,GAChB,MAAO7uE,MAAKkmB,KAAK1iB,KAAUqrE,IAG/B2G,SAAW,SAAUzgD,GAGjB,GAAI2E,GAAM3E,GAAQvxB,KACdo0E,EAAMtQ,EAAO5tC,EAAK15B,MAAMy3E,QAAQ,OAChCruD,EAAOppB,KAAKopB,KAAKwuD,EAAK,QAAQ,GAC9B/4C,EAAgB,GAAPzV,EAAY,WACV,GAAPA,EAAY,WACL,EAAPA,EAAW,UACJ,EAAPA,EAAW,UACJ,EAAPA,EAAW,UACJ,EAAPA,EAAW,WAAa,UAChC,OAAOppB,MAAK6+B,OAAO7+B,KAAKiiE,OAAOuT,SAAS32C,EAAQ7+B,QAGpD4mE,WAAa,WACT,MAAOA,GAAW5mE,KAAK2+B,SAG3Bk5C,MAAQ,WACJ,MAAQ73E,MAAKynE,OAASznE,KAAK+5B,QAAQgpC,MAAM,GAAG0E,QACxCznE,KAAKynE,OAASznE,KAAK+5B,QAAQgpC,MAAM,GAAG0E,QAG5CtE,IAAM,SAAUyB,GACZ,GAAIzB,GAAMnjE,KAAKwnE,OAASxnE,KAAKukE,GAAGiL,YAAcxvE,KAAKukE,GAAGuT,QACtD,OAAa,OAATlT,GACAA,EAAQ8J,GAAa9J,EAAO5kE,KAAKiiE,QAC1BjiE,KAAKsR,KAAMzF,EAAI+4D,EAAQzB,KAEvBA,GAIfJ,MAAQkN,GAAa,SAAS,GAE9BwH,QAAS,SAAUtS,GAIf,OAHAA,EAAQD,EAAeC,IAIvB,IAAK,OACDnlE,KAAK+iE,MAAM,EAEf,KAAK,UACL,IAAK,QACD/iE,KAAK0+B,KAAK,EAEd,KAAK,OACL,IAAK,UACL,IAAK,MACD1+B,KAAK25B,MAAM,EAEf,KAAK,OACD35B,KAAK45B,QAAQ,EAEjB,KAAK,SACD55B,KAAK65B,QAAQ,EAEjB,KAAK,SACD75B,KAAK85B,aAAa,GAgBtB,MAXc,SAAVqrC,EACAnlE,KAAKyrE,QAAQ,GACI,YAAVtG,GACPnlE,KAAKmzE,WAAW,GAIN,YAAVhO,GACAnlE,KAAK+iE,MAAqC,EAA/Bn+D,KAAKC,MAAM7E,KAAK+iE,QAAU,IAGlC/iE,MAGX+3E,MAAO,SAAU5S,GAEb,MADAA,GAAQD,EAAeC,GAChBnlE,KAAKy3E,QAAQtS,GAAO7zD,IAAe,YAAV6zD,EAAsB,OAASA,EAAQ,GAAG/8C,SAAS,KAAM,IAG7F4vD,QAAS,SAAUpT,EAAOO,GAEtB,MADAA,GAAyB,mBAAVA,GAAwBA,EAAQ,eACvCnlE,KAAK+5B,QAAQ09C,QAAQtS,IAAU3hE,GAAOohE,GAAO6S,QAAQtS,IAGjE8S,SAAU,SAAUrT,EAAOO,GAEvB,MADAA,GAAyB,mBAAVA,GAAwBA,EAAQ,eACvCnlE,KAAK+5B,QAAQ09C,QAAQtS,IAAU3hE,GAAOohE,GAAO6S,QAAQtS,IAGjE+S,OAAQ,SAAUtT,EAAOO,GAErB,MADAA,GAAQA,GAAS,MACTnlE,KAAK+5B,QAAQ09C,QAAQtS,MAAYmC,EAAO1C,EAAO5kE,MAAMy3E,QAAQtS,IAGzEp6D,IAAKu2D,EACI,mGACA,SAAUh8D,GAEN,MADAA,GAAQ9B,GAAO2S,MAAM,KAAM/Q,WACZpF,KAARsF,EAAetF,KAAOsF,IAI1CmH,IAAK60D,EACG,mGACA,SAAUh8D,GAEN,MADAA,GAAQ9B,GAAO2S,MAAM,KAAM/Q,WACpBE,EAAQtF,KAAOA,KAAOsF,IAczCmiE,KAAO,SAAU7C,EAAOsL,GACpB,GAAIzpD,GAASzmB,KAAK0nE,SAAW,CAC7B,OAAa,OAAT9C,EAoBO5kE,KAAKwnE,OAAS/gD,EAASzmB,KAAKukE,GAAG4T,qBAnBjB,gBAAVvT,KACPA,EAAQyF,EAA0BzF,IAElChgE,KAAK+iB,IAAIi9C,GAAS,KAClBA,EAAgB,GAARA,GAEZ5kE,KAAK0nE,QAAU9C,EACf5kE,KAAKwnE,QAAS,EACV/gD,IAAWm+C,KACNsL,GAAYlwE,KAAKo4E,kBAClBjU,EAAgCnkE,KACxBwD,GAAOg/D,SAAS/7C,EAASm+C,EAAO,KAAM,GAAG,GACzC5kE,KAAKo4E,oBACbp4E,KAAKo4E,mBAAoB,EACzB50E,GAAO8gE,aAAatkE,MAAM,GAC1BA,KAAKo4E,kBAAoB,OAM9Bp4E,OAGX0zE,SAAW,WACP,MAAO1zE,MAAKwnE,OAAS,MAAQ,IAGjCoM,SAAW,WACP,MAAO5zE,MAAKwnE,OAAS,6BAA+B,IAGxDwP,UAAY,WAMR,MALIh3E,MAAKmrE,KACLnrE,KAAKynE,KAAKznE,KAAKmrE,MACW,gBAAZnrE,MAAK4sE,IACnB5sE,KAAKynE,KAAKznE,KAAK4sE,IAEZ5sE,MAGXq4E,qBAAuB,SAAUzT,GAQ7B,MAHIA,GAJCA,EAIOphE,GAAOohE,GAAO6C,OAHd,GAMJznE,KAAKynE,OAAS7C,GAAS,KAAO,GAG1CwB,YAAc,WACV,MAAOA,GAAYpmE,KAAK2+B,OAAQ3+B,KAAK+iE,UAGzCkJ,UAAY,SAAUrH,GAClB,GAAIqH,GAAYthD,IAAOnnB,GAAOxD,MAAMy3E,QAAQ,OAASj0E,GAAOxD,MAAMy3E,QAAQ,SAAW,OAAS,CAC9F,OAAgB,OAAT7S,EAAgBqH,EAAYjsE,KAAKsR,IAAI,IAAMszD,EAAQqH,IAG9DpJ,QAAU,SAAU+B,GAChB,MAAgB,OAATA,EAAgBhgE,KAAKqqC,MAAMjvC,KAAK+iE,QAAU,GAAK,GAAK/iE,KAAK+iE,MAAoB,GAAb6B,EAAQ,GAAS5kE,KAAK+iE,QAAU,IAG3GyI,SAAW,SAAU5G,GACjB,GAAIjmC,GAAO+nC,GAAW1mE,KAAMA,KAAKiiE,OAAO6J,MAAMtF,IAAKxmE,KAAKiiE,OAAO6J,MAAMrF,KAAK9nC,IAC1E,OAAgB,OAATimC,EAAgBjmC,EAAO3+B,KAAKsR,IAAI,IAAMszD,EAAQjmC,IAGzDq0C,YAAc,SAAUpO,GACpB,GAAIjmC,GAAO+nC,GAAW1mE,KAAM,EAAG,GAAG2+B,IAClC,OAAgB,OAATimC,EAAgBjmC,EAAO3+B,KAAKsR,IAAI,IAAMszD,EAAQjmC,IAGzDskC,KAAO,SAAU2B,GACb,GAAI3B,GAAOjjE,KAAKiiE,OAAOgB,KAAKjjE,KAC5B,OAAgB,OAAT4kE,EAAgB3B,EAAOjjE,KAAKsR,IAAI,IAAsB,GAAhBszD,EAAQ3B,KAGzDwP,QAAU,SAAU7N,GAChB,GAAI3B,GAAOyD,GAAW1mE,KAAM,EAAG,GAAGijE,IAClC,OAAgB,OAAT2B,EAAgB3B,EAAOjjE,KAAKsR,IAAI,IAAsB,GAAhBszD,EAAQ3B,KAGzDwI,QAAU,SAAU7G,GAChB,GAAI6G,IAAWzrE,KAAKmjE,MAAQ,EAAInjE,KAAKiiE,OAAO6J,MAAMtF,KAAO,CACzD,OAAgB,OAAT5B,EAAgB6G,EAAUzrE,KAAKsR,IAAI,IAAKszD,EAAQ6G,IAG3D0H,WAAa,SAAUvO,GAInB,MAAgB,OAATA,EAAgB5kE,KAAKmjE,OAAS,EAAInjE,KAAKmjE,IAAInjE,KAAKmjE,MAAQ,EAAIyB,EAAQA,EAAQ,IAGvF0T,eAAiB,WACb,MAAO/R,GAAYvmE,KAAK2+B,OAAQ,EAAG,IAGvC4nC,YAAc,WACV,GAAIgS,GAAWv4E,KAAK6lE,MAAMiG,KAC1B,OAAOvF,GAAYvmE,KAAK2+B,OAAQ45C,EAAS/R,IAAK+R,EAAS9R,MAG3DtzD,IAAM,SAAUgyD,GAEZ,MADAA,GAAQD,EAAeC,GAChBnlE,KAAKmlE,MAGhBa,IAAM,SAAUb,EAAOt+D,GAKnB,MAJAs+D,GAAQD,EAAeC,GACI,kBAAhBnlE,MAAKmlE,IACZnlE,KAAKmlE,GAAOt+D,GAET7G,MAMXiiE,KAAO,SAAU35D,GACb,MAAIA,KAAQpC,EACDlG,KAAK6lE,OAEZ7lE,KAAK6lE,MAAQmC,EAAkB1/D,GACxBtI,SA+CnBwD,GAAO8kC,GAAGi7B,YAAc//D,GAAO8kC,GAAGxO,aAAem2C,GAAa,gBAAgB,GAC9EzsE,GAAO8kC,GAAGg7B,OAAS9/D,GAAO8kC,GAAGzO,QAAUo2C,GAAa,WAAW,GAC/DzsE,GAAO8kC,GAAG+6B,OAAS7/D,GAAO8kC,GAAG1O,QAAUq2C,GAAa,WAAW,GAK/DzsE,GAAO8kC,GAAG86B,KAAO5/D,GAAO8kC,GAAG3O,MAAQs2C,GAAa,SAAS,GAEzDzsE,GAAO8kC,GAAG5J,KAAOuxC,GAAa,QAAQ,GACtCzsE,GAAO8kC,GAAGkwC,MAAQlX,EAAU,kDAAmD2O,GAAa,QAAQ,IACpGzsE,GAAO8kC,GAAG3J,KAAOsxC,GAAa,YAAY,GAC1CzsE,GAAO8kC,GAAGq6B,MAAQrB,EAAU,kDAAmD2O,GAAa,YAAY,IAGxGzsE,GAAO8kC,GAAG46B,KAAO1/D,GAAO8kC,GAAG66B,IAC3B3/D,GAAO8kC,GAAGw6B,OAASt/D,GAAO8kC,GAAGy6B,MAC7Bv/D,GAAO8kC,GAAG06B,MAAQx/D,GAAO8kC,GAAG26B,KAC5Bz/D,GAAO8kC,GAAGmwC,SAAWj1E,GAAO8kC,GAAGmqC,QAC/BjvE,GAAO8kC,GAAGs6B,SAAWp/D,GAAO8kC,GAAGu6B,QAG/Br/D,GAAO8kC,GAAGowC,OAASl1E,GAAO8kC,GAAG1hC,YAO7B5B,EAAOxB,GAAOg/D,SAASl6B,GAAKi6B,EAAShxD,WAEjCoyD,QAAU,WACN,GAII9pC,GAASD,EAASD,EAAOgpC,EAJzB7oC,EAAe95B,KAAKwjE,cACpBN,EAAOljE,KAAKyjE,MACZX,EAAS9iE,KAAK0jE,QACd3yD,EAAO/Q,KAAKiR,KAKhBF,GAAK+oB,aAAeA,EAAe,IAEnCD,EAAUiqC,EAAShqC,EAAe,KAClC/oB,EAAK8oB,QAAUA,EAAU,GAEzBD,EAAUkqC,EAASjqC,EAAU,IAC7B9oB,EAAK6oB,QAAUA,EAAU,GAEzBD,EAAQmqC,EAASlqC,EAAU,IAC3B7oB,EAAK4oB,MAAQA,EAAQ,GAErBupC,GAAQY,EAASnqC,EAAQ,IACzB5oB,EAAKmyD,KAAOA,EAAO,GAEnBJ,GAAUgB,EAASZ,EAAO,IAC1BnyD,EAAK+xD,OAASA,EAAS,GAEvBH,EAAQmB,EAAShB,EAAS,IAC1B/xD,EAAK4xD,MAAQA,GAGjBK,MAAQ,WACJ,MAAOc,GAAS9jE,KAAKkjE,OAAS,IAGlC18D,QAAU,WACN,MAAOxG,MAAKwjE,cACG,MAAbxjE,KAAKyjE,MACJzjE,KAAK0jE,QAAU,GAAM,OACK,QAA3BuB,EAAMjlE,KAAK0jE,QAAU,KAG3BgU,SAAW,SAAUiB,GACjB,GAAIC,IAAc54E,KACdkkE,EAAS6K,GAAa6J,GAAaD,EAAY34E,KAAKiiE,OAMxD,OAJI0W,KACAzU,EAASlkE,KAAKiiE,OAAO+T,WAAW4C,EAAY1U,IAGzClkE,KAAKiiE,OAAOiU,WAAWhS,IAGlC5yD,IAAM,SAAUszD,EAAOmQ,GAEnB,GAAIsC,GAAM7zE,GAAOg/D,SAASoC,EAAOmQ,EAQjC,OANA/0E,MAAKwjE,eAAiB6T,EAAI7T,cAC1BxjE,KAAKyjE,OAAS4T,EAAI5T,MAClBzjE,KAAK0jE,SAAW2T,EAAI3T,QAEpB1jE,KAAK2jE,UAEE3jE,MAGXooB,SAAW,SAAUw8C,EAAOmQ,GACxB,GAAIsC,GAAM7zE,GAAOg/D,SAASoC,EAAOmQ,EAQjC,OANA/0E,MAAKwjE,eAAiB6T,EAAI7T,cAC1BxjE,KAAKyjE,OAAS4T,EAAI5T,MAClBzjE,KAAK0jE,SAAW2T,EAAI3T,QAEpB1jE,KAAK2jE,UAEE3jE,MAGXmT,IAAM,SAAUgyD,GAEZ,MADAA,GAAQD,EAAeC,GAChBnlE,KAAKmlE,EAAMzf,cAAgB,QAGtCt5B,GAAK,SAAU+4C,GAEX,MADAA,GAAQD,EAAeC,GAChBnlE,KAAK,KAAOmlE,EAAMljD,OAAO,GAAGtW,cAAgBw5D,EAAM7wC,MAAM,GAAK,QAGxE2tC,KAAOz+D,GAAO8kC,GAAG25B,KAEjB4W,YAAc,WAEV,GAAIlW,GAAQ/9D,KAAK+iB,IAAI3nB,KAAK2iE,SACtBG,EAASl+D,KAAK+iB,IAAI3nB,KAAK8iE,UACvBI,EAAOt+D,KAAK+iB,IAAI3nB,KAAKkjE,QACrBvpC,EAAQ/0B,KAAK+iB,IAAI3nB,KAAK25B,SACtBC,EAAUh1B,KAAK+iB,IAAI3nB,KAAK45B,WACxBC,EAAUj1B,KAAK+iB,IAAI3nB,KAAK65B,UAAY75B,KAAK85B,eAAiB,IAE9D,OAAK95B,MAAK84E,aAMF94E,KAAK84E,YAAc,EAAI,IAAM,IACjC,KACCnW,EAAQA,EAAQ,IAAM,KACtBG,EAASA,EAAS,IAAM,KACxBI,EAAOA,EAAO,IAAM,KACnBvpC,GAASC,GAAWC,EAAW,IAAM,KACtCF,EAAQA,EAAQ,IAAM,KACtBC,EAAUA,EAAU,IAAM,KAC1BC,EAAUA,EAAU,IAAM,IAXpB,QA2BnB,KAAK30B,KAAK6rE,IACFA,GAAuBvrE,eAAeN,MACtCkrE,GAAqBlrE,GAAG6rE,GAAuB7rE,KAC/CirE,GAAmBjrE,GAAEwgD,eAI7B0qB,IAAqB,QAAS,QAC9B5sE,GAAOg/D,SAASl6B,GAAGywC,SAAW,WAC1B,QAAS/4E,KAAsB,QAAfA,KAAK2iE,SAAqB,OAAwB,GAAf3iE,KAAK2iE,SAU5Dn/D,GAAOy+D,KAAK,MACRC,QAAU,SAAU6B,GAChB,GAAIj+D,GAAIi+D,EAAS,GACbG,EAAuC,IAA7Be,EAAMlB,EAAS,IAAM,IAAa,KACrC,IAANj+D,EAAW,KACL,IAANA,EAAW,KACL,IAANA,EAAW,KAAO,IACvB,OAAOi+D,GAASG,KA4BpBgE,GACAroE,EAAOD,QAAU4D,IAEfi9D,EAAiC,SAAUuY,EAASp5E,EAASC,GAM3D,MALIA,GAAOwiE,QAAUxiE,EAAOwiE,UAAYxiE,EAAOwiE,SAAS4W,YAAa,IAEjExI,GAAYjtE,OAASgtE,IAGlBhtE,IACTjD,KAAKX,EAASM,EAAqBN,EAASC,KAAU4gE,IAAkCv6D,IAAcrG,EAAOD,QAAU6gE,IACzH4P,IAAW,MAIhB9vE,KAAKP,QAEqBO,KAAKX,EAAU,WAAa,MAAOI,SAAYE,EAAoB,IAAIL,KAIhG,SAASA,EAAQD,EAASM,GAE9B,GAAIugE,IAMJ,SAAUv5D,EAAQhB,GAChB,YA2OF,SAASgzE,KACFhmD,EAAOimD,QAKVC,EAAMC,sBAGNC,EAAMC,KAAKrmD,EAAOsmD,SAAU,SAASjiD,GACjCkiD,EAAUC,SAASniD,KAIvB6hD,EAAMO,QAAQzmD,EAAO0mD,SAAUC,EAAYJ,EAAUK,QACrDV,EAAMO,QAAQzmD,EAAO0mD,SAAUG,EAAWN,EAAUK,QAGpD5mD,EAAOimD,OAAQ,GAxOnB,GAAIjmD,GAAS,QAASA,GAAO1qB,EAASkF,GAClC,MAAO,IAAIwlB,GAAO8mD,SAASxxE,EAASkF,OAUxCwlB,GAAOw9C,QAAU,QAgBjBx9C,EAAO+mD,UAOHC,UAQIC,WAAY,OASZC,YAAa,QAUbC,aAAc,OAQdC,eAAgB,OAShBC,SAAU,OAaVC,kBAAmB,kBAU3BtnD,EAAO0mD,SAAWhqE,SAOlBsjB,EAAOunD,kBAAoB7xE,UAAU8xE,gBAAkB9xE,UAAU+xE,iBAOjEznD,EAAO0nD,gBAAmB,gBAAkB1zE,GAO5CgsB,EAAO2nD,UAAY,6CAA6C5tE,KAAKrE,UAAUC,WAO/EqqB,EAAO4nD,eAAkB5nD,EAAO0nD,iBAAmB1nD,EAAO2nD,WAAc3nD,EAAOunD,kBAQ/EvnD,EAAO6nD,mBAAqB,EAU5B,IAAIC,MASAC,EAAiB/nD,EAAO+nD,eAAiB,OACzCC,EAAiBhoD,EAAOgoD,eAAiB,OACzCC,EAAejoD,EAAOioD,aAAe,KACrCC,EAAkBloD,EAAOkoD,gBAAkB,QAS3CC,EAAgBnoD,EAAOmoD,cAAgB,QACvCC,EAAgBpoD,EAAOooD,cAAgB,QACvCC,EAAcroD,EAAOqoD,YAAc,MASnCC,EAActoD,EAAOsoD,YAAc,QACnC3B,EAAa3mD,EAAO2mD,WAAa,OACjCE,EAAY7mD,EAAO6mD,UAAY,MAC/B0B,EAAgBvoD,EAAOuoD,cAAgB,UACvCC,EAAcxoD,EAAOwoD,YAAc,OASvCxoD,GAAOimD,OAAQ,EAOfjmD,EAAOyoD,QAAUzoD,EAAOyoD,YAQxBzoD,EAAOsmD,SAAWtmD,EAAOsmD,YAkCzB,IAAIF,GAAQpmD,EAAO0oD,OAUf52E,OAAQ,SAAgB62E,EAAMvgC,EAAKyW,GAC/B,IAAI,GAAIzpD,KAAOgzC,IACPA,EAAI91C,eAAe8C,IAASuzE,EAAKvzE,KAASpC,GAAa6rD,IAG3D8pB,EAAKvzE,GAAOgzC,EAAIhzC,GAEpB,OAAOuzE,IAUXrqE,GAAI,SAAYhJ,EAASlC,EAAMw1E,GAC3BtzE,EAAQD,iBAAiBjC,EAAMw1E,GAAS,IAU5CnqE,IAAK,SAAanJ,EAASlC,EAAMw1E,GAC7BtzE,EAAQO,oBAAoBzC,EAAMw1E,GAAS,IAa/CvC,KAAM,SAAc15D,EAAKk8D,EAAUC,GAC/B,GAAI92E,GAAGC,CAGP,IAAG,WAAa0a,GACZA,EAAI5X,QAAQ8zE,EAAUC,OAEnB,IAAGn8D,EAAIxa,SAAWa,GACrB,IAAIhB,EAAI,EAAGC,EAAM0a,EAAIxa,OAAYF,EAAJD,EAASA,IAClC,GAAG62E,EAASx7E,KAAKy7E,EAASn8D,EAAI3a,GAAIA,EAAG2a,MAAS,EAC1C,WAKR,KAAI3a,IAAK2a,GACL,GAAGA,EAAIra,eAAeN,IAClB62E,EAASx7E,KAAKy7E,EAASn8D,EAAI3a,GAAIA,EAAG2a,MAAS,EAC3C,QAahBo8D,MAAO,SAAe3gC,EAAK4gC,GACvB,MAAO5gC,GAAI3zC,QAAQu0E,GAAQ,IAU/BC,QAAS,SAAiB7gC,EAAK4gC,GAC3B,GAAG5gC,EAAI3zC,QAAS,CACZ,GAAII,GAAQuzC,EAAI3zC,QAAQu0E,EACxB,OAAkB,KAAVn0E,GAAgB,EAAQA,EAEhC,IAAI,GAAI7C,GAAI,EAAGC,EAAMm2C,EAAIj2C,OAAYF,EAAJD,EAASA,IACtC,GAAGo2C,EAAIp2C,KAAOg3E,EACV,MAAOh3E,EAGf,QAAO,GAUfiD,QAAS,SAAiB0X,GACtB,MAAOla,OAAM4L,UAAU+iB,MAAM/zB,KAAKsf,EAAK,IAU3Cu8D,UAAW,SAAmB5gC,EAAMrc,GAChC,KAAMqc,GAAM,CACR,GAAGA,GAAQrc,EACP,OAAO,CAEXqc,GAAOA,EAAKhyC,WAEhB,OAAO,GASX6yE,UAAW,SAAmB7gD,GAC1B,GAAId,MACAC,KACA9M,KACAE,KACAhjB,EAAMnG,KAAKmG,IACX0B,EAAM7H,KAAK6H,GAGf,OAAsB,KAAnB+uB,EAAQn2B,QAEHq1B,MAAOc,EAAQ,GAAGd,MAClBC,MAAOa,EAAQ,GAAGb,MAClB9M,QAAS2N,EAAQ,GAAG3N,QACpBE,QAASyN,EAAQ,GAAGzN,UAI5BurD,EAAMC,KAAK/9C,EAAS,SAAS/G,GACzBiG,EAAM9yB,KAAK6sB,EAAMiG,OACjBC,EAAM/yB,KAAK6sB,EAAMkG,OACjB9M,EAAQjmB,KAAK6sB,EAAM5G,SACnBE,EAAQnmB,KAAK6sB,EAAM1G,YAInB2M,OAAQ3vB,EAAIoL,MAAMvR,KAAM81B,GAASjuB,EAAI0J,MAAMvR,KAAM81B,IAAU,EAC3DC,OAAQ5vB,EAAIoL,MAAMvR,KAAM+1B,GAASluB,EAAI0J,MAAMvR,KAAM+1B,IAAU,EAC3D9M,SAAU9iB,EAAIoL,MAAMvR,KAAMipB,GAAWphB,EAAI0J,MAAMvR,KAAMipB,IAAY,EACjEE,SAAUhjB,EAAIoL,MAAMvR,KAAMmpB,GAAWthB,EAAI0J,MAAMvR,KAAMmpB,IAAY,KAYzEuuD,YAAa,SAAqBC,EAAWthD,EAAQzD,GACjD,OACIrnB,EAAGvL,KAAK+iB,IAAIsT,EAASshD,IAAc,EACnCnsE,EAAGxL,KAAK+iB,IAAI6P,EAAS+kD,IAAc,IAW3CC,SAAU,SAAkBC,EAAQC,GAChC,GAAIvsE,GAAIusE,EAAO7uD,QAAU4uD,EAAO5uD,QAC5Bzd,EAAIssE,EAAO3uD,QAAU0uD,EAAO1uD,OAEhC,OAA0B,KAAnBnpB,KAAKmlD,MAAM35C,EAAGD,GAAWvL,KAAK8jB,IAUzCi0D,aAAc,SAAsBF,EAAQC,GACxC,GAAIvsE,GAAIvL,KAAK+iB,IAAI80D,EAAO5uD,QAAU6uD,EAAO7uD,SACrCzd,EAAIxL,KAAK+iB,IAAI80D,EAAO1uD,QAAU2uD,EAAO3uD,QAEzC,OAAG5d,IAAKC,EACGqsE,EAAO5uD,QAAU6uD,EAAO7uD,QAAU,EAAIqtD,EAAiBE,EAE3DqB,EAAO1uD,QAAU2uD,EAAO3uD,QAAU,EAAIotD,EAAeF,GAUhEprB,YAAa,SAAqB4sB,EAAQC,GACtC,GAAIvsE,GAAIusE,EAAO7uD,QAAU4uD,EAAO5uD,QAC5Bzd,EAAIssE,EAAO3uD,QAAU0uD,EAAO1uD,OAEhC,OAAOnpB,MAAKkoB,KAAM3c,EAAIA,EAAMC,EAAIA,IAWpCwsE,SAAU,SAAkBluE,EAAOyW,GAE/B,MAAGzW,GAAMrJ,QAAU,GAAK8f,EAAI9f,QAAU,EAC3BrF,KAAK6vD,YAAY1qC,EAAI,GAAIA,EAAI,IAAMnlB,KAAK6vD,YAAYnhD,EAAM,GAAIA,EAAM,IAExE,GAUXmuE,YAAa,SAAqBnuE,EAAOyW,GAErC,MAAGzW,GAAMrJ,QAAU,GAAK8f,EAAI9f,QAAU,EAC3BrF,KAAKw8E,SAASr3D,EAAI,GAAIA,EAAI,IAAMnlB,KAAKw8E,SAAS9tE,EAAM,GAAIA,EAAM,IAElE,GASXouE,WAAY,SAAoB9iD,GAC5B,MAAOA,IAAamhD,GAAgBnhD,GAAaihD,GAWrD8B,eAAgB,SAAwBv0E,EAASjD,EAAMsB,EAAOm2E,GAC1D,GAAIC,IAAY,GAAI,SAAU,MAAO,IAAK,KAC1C13E,GAAO+zE,EAAM4D,YAAY33E,EAEzB,KAAI,GAAIL,GAAI,EAAGA,EAAI+3E,EAAS53E,OAAQH,IAAK,CACrC,GAAIxE,GAAI6E,CAOR,IALG03E,EAAS/3E,KACRxE,EAAIu8E,EAAS/3E,GAAKxE,EAAE4zB,MAAM,EAAG,GAAG3oB,cAAgBjL,EAAE4zB,MAAM,IAIzD5zB,IAAK8H,GAAQgI,MAAO,CACnBhI,EAAQgI,MAAM9P,IAAgB,MAAVs8E,GAAkBA,IAAWn2E,GAAS,EAC1D,UAeZs2E,eAAgB,SAAwB30E,EAAS9C,EAAOs3E,GACpD,GAAIt3E,GAAU8C,GAAYA,EAAQgI,MAAlC,CAKA8oE,EAAMC,KAAK7zE,EAAO,SAASmB,EAAOtB,GAC9B+zE,EAAMyD,eAAev0E,EAASjD,EAAMsB,EAAOm2E,IAG/C,IAAII,GAAUJ,GAAU,WACpB,OAAO,EAIY,SAApBt3E,EAAMy0E,aACL3xE,EAAQ60E,cAAgBD,GAGP,QAAlB13E,EAAM60E,WACL/xE,EAAQ80E,YAAcF,KAU9BF,YAAa,SAAqBK,GAC9B,MAAOA,GAAI7xE,QAAQ,eAAgB,SAASb,GACxC,MAAOA,GAAE,GAAGc,kBAapBytE,EAAQlmD,EAAOhqB,OAQfs0E,oBAAoB,EAQpBC,SAAS,EAQTC,cAAc,EAWdlsE,GAAI,SAAYhJ,EAASlC,EAAMw1E,EAAS6B,GACpC,GAAIroE,GAAQhP,EAAKoB,MAAM,IACvB4xE,GAAMC,KAAKjkE,EAAO,SAAShP,GACvBgzE,EAAM9nE,GAAGhJ,EAASlC,EAAMw1E,GACxB6B,GAAQA,EAAKr3E,MAarBqL,IAAK,SAAanJ,EAASlC,EAAMw1E,EAAS6B,GACtC,GAAIroE,GAAQhP,EAAKoB,MAAM,IACvB4xE,GAAMC,KAAKjkE,EAAO,SAAShP,GACvBgzE,EAAM3nE,IAAInJ,EAASlC,EAAMw1E,GACzB6B,GAAQA,EAAKr3E,MAarBqzE,QAAS,SAAiBnxE,EAAS6sD,EAAWymB,GAC1C,GAAI5iB,GAAOl5D,KAEP49E,EAAiB,SAAwBC,GACzC,GAGIC,GAHAC,EAAUF,EAAGv3E,KAAKo/C,cAClBs4B,EAAY9qD,EAAOunD,kBACnBwD,EAAU3E,EAAM2C,MAAM8B,EAAS,QAKhCE,IAAW/kB,EAAKskB,qBAITS,GAAW5oB,GAAammB,GAA6B,IAAdqC,EAAGr0D,QAChD0vC,EAAKskB,oBAAqB,EAC1BtkB,EAAKwkB,cAAe,GACdM,GAAa3oB,GAAammB,EAChCtiB,EAAKwkB,aAA+B,IAAfG,EAAGK,SAAiBC,EAAaC,UAAU9C,EAAeuC,GAExEI,GAAW5oB,GAAammB,IAC/BtiB,EAAKskB,oBAAqB,EAC1BtkB,EAAKwkB,cAAe,GAIrBM,GAAa3oB,GAAa0kB,GACzBoE,EAAaE,cAAchpB,EAAWwoB,GAIvC3kB,EAAKwkB,eACJI,EAAc5kB,EAAKolB,SAAS/9E,KAAK24D,EAAM2kB,EAAIxoB,EAAW7sD,EAASszE,IAKhEgC,GAAe/D,IACd7gB,EAAKskB,oBAAqB,EAC1BtkB,EAAKwkB,cAAe,EACpBS,EAAalgC,SAId+/B,GAAa3oB,GAAa0kB,GACzBoE,EAAaE,cAAchpB,EAAWwoB,IAK9C,OADA79E,MAAKwR,GAAGhJ,EAASwyE,EAAY3lB,GAAYuoB,GAClCA,GAaXU,SAAU,SAAkBT,EAAIxoB,EAAW7sD,EAASszE,GAChD,GAAIyC,GAAYv+E,KAAKs1D,aAAauoB,EAAIxoB,GAClCmpB,EAAkBD,EAAUl5E,OAC5By4E,EAAczoB,EACdopB,EAAgBF,EAAU/d,QAC1Bke,EAAgBF,CAGjBnpB,IAAammB,EACZiD,EAAgB/C,EAEVrmB,GAAa0kB,IACnB0E,EAAgBhD,EAGhBiD,EAAgBH,EAAUl5E,QAAWw4E,EAAiB,eAAIA,EAAGc,eAAet5E,OAAS,IAMtFq5E,EAAgB,GAAK1+E,KAAKy9E,UACzBK,EAAcjE,GAIlB75E,KAAKy9E,SAAU,CAGf,IAAImB,GAAS5+E,KAAKu1D,iBAAiB/sD,EAASs1E,EAAaS,EAAWV,EA4BpE,OAxBGxoB,IAAa0kB,GACZ+B,EAAQv7E,KAAKk5E,EAAWmF,GAIzBH,IACCG,EAAOF,cAAgBA,EACvBE,EAAOvpB,UAAYopB,EAEnB3C,EAAQv7E,KAAKk5E,EAAWmF,GAExBA,EAAOvpB,UAAYyoB,QACZc,GAAOF,eAIfZ,GAAe/D,IACd+B,EAAQv7E,KAAKk5E,EAAWmF,GAIxB5+E,KAAKy9E,SAAU,GAGZK,GAUXzE,oBAAqB,WACjB,GAAI/jE,EAgCJ,OA7BQA,GAFL4d,EAAOunD,kBACHvzE,EAAOi3E,cAEF,cACA,cACA,+CAIA,gBACA,gBACA,oDAGFjrD,EAAO4nD,gBAET,aACA,YACA,yBAIA,uBACA,sBACA,gCAIRE,EAAYQ,GAAelmE,EAAM,GACjC0lE,EAAYnB,GAAcvkE,EAAM,GAChC0lE,EAAYjB,GAAazkE,EAAM,GACxB0lE,GAUX1lB,aAAc,SAAsBuoB,EAAIxoB,GAEpC,GAAGniC,EAAOunD,kBACN,MAAO0D,GAAa7oB,cAIxB,IAAGuoB,EAAGriD,QAAS,CACX,GAAG65B,GAAawkB,EACZ,MAAOgE,GAAGriD,OAGd,IAAIqjD,MACA5sE,KAAYA,OAAOqnE,EAAMnxE,QAAQ01E,EAAGriD,SAAU89C,EAAMnxE,QAAQ01E,EAAGc,iBAC/DJ,IASJ,OAPAjF,GAAMC,KAAKtnE,EAAQ,SAASwiB,GACrB6kD,EAAM6C,QAAQ0C,EAAapqD,EAAMqqD,eAAgB,GAChDP,EAAU32E,KAAK6sB,GAEnBoqD,EAAYj3E,KAAK6sB,EAAMqqD,cAGpBP,EAKX,MADAV,GAAGiB,WAAa,GACRjB,IAYZtoB,iBAAkB,SAA0B/sD,EAAS6sD,EAAW75B,EAASqiD,GAErE,GAAIkB,GAAczD,CAOlB,OANGhC,GAAM2C,MAAM4B,EAAGv3E,KAAM,UAAY63E,EAAaC,UAAU/C,EAAewC,GACtEkB,EAAc1D,EACR8C,EAAaC,UAAU7C,EAAasC,KAC1CkB,EAAcxD,IAIdtyD,OAAQqwD,EAAM+C,UAAU7gD,GACxBwjD,UAAWh7E,KAAK01B,MAChBrwB,OAAQw0E,EAAGx0E,OACXmyB,QAASA,EACT65B,UAAWA,EACX0pB,YAAaA,EACbl0C,SAAUgzC,EAMV50E,eAAgB,WACZ,GAAI4hC,GAAW7qC,KAAK6qC,QACpBA,GAASo0C,qBAAuBp0C,EAASo0C,sBACzCp0C,EAAS5hC,gBAAkB4hC,EAAS5hC,kBAMxCy2B,gBAAiB,WACb1/B,KAAK6qC,SAASnL,mBAQlBw/C,WAAY,WACR,MAAOzF,GAAUyF,iBAa7Bf,EAAejrD,EAAOirD,cAMtBgB,YAOA7pB,aAAc,WACV,GAAI8pB,KAKJ,OAHA9F,GAAMC,KAAKv5E,KAAKm/E,SAAU,SAAS/jD,GAC/BgkD,EAAUx3E,KAAKwzB,KAEZgkD,GASXf,cAAe,SAAuBhpB,EAAWgqB,GAC1ChqB,GAAa0kB,GAAc1kB,GAAa0kB,GAAsC,IAAzBsF,EAAanB,cAC1Dl+E,MAAKm/E,SAASE,EAAaC,YAElCD,EAAaP,WAAaO,EAAaC,UACvCt/E,KAAKm/E,SAASE,EAAaC,WAAaD,IAUhDjB,UAAW,SAAmBW,EAAalB,GACvC,IAAIA,EAAGkB,YACH,OAAO,CAGX,IAAIQ,GAAK1B,EAAGkB,YACRzpE,IAKJ,OAHAA,GAAM+lE,GAAkBkE,KAAQ1B,EAAG2B,sBAAwBnE,GAC3D/lE,EAAMgmE,GAAkBiE,KAAQ1B,EAAG4B,sBAAwBnE,GAC3DhmE,EAAMimE,GAAgBgE,KAAQ1B,EAAG6B,oBAAsBnE,GAChDjmE,EAAMypE,IAOjB9gC,MAAO,WACHj+C,KAAKm/E,cAWT1F,EAAYvmD,EAAOysD,WAEnBnG,YAGAvhD,QAAS,KAITuB,SAAU,KAGVomD,SAAS,EAQTC,YAAa,SAAqBC,EAAMC,GAEjC//E,KAAKi4B,UAIRj4B,KAAK4/E,SAAU,EAGf5/E,KAAKi4B,SACD6nD,KAAMA,EACNE,WAAY1G,EAAMt0E,UAAW+6E,GAC7BE,WAAW,EACXC,eAAe,EACfC,iBAAiB,EACjBC,gBACAhsE,KAAM,IAGVpU,KAAK85E,OAAOiG,KAShBjG,OAAQ,SAAgBiG,GACpB,GAAI//E,KAAKi4B,UAAWj4B,KAAK4/E,QAAzB,CAKAG,EAAY//E,KAAKqgF,gBAAgBN,EAGjC,IAAID,GAAO9/E,KAAKi4B,QAAQ6nD,KACpBQ,EAAcR,EAAKpyE,OAmBvB,OAhBA4rE,GAAMC,KAAKv5E,KAAKw5E,SAAU,SAAwBjiD,IAE1Cv3B,KAAK4/E,SAAWE,EAAKnyE,SAAW2yE,EAAY/oD,EAAQnjB,OACpDmjB,EAAQukD,QAAQv7E,KAAKg3B,EAASwoD,EAAWD,IAE9C9/E,MAGAA,KAAKi4B,UACJj4B,KAAKi4B,QAAQgoD,UAAYF,GAG1BA,EAAU1qB,WAAa0kB,GACtB/5E,KAAKk/E,aAGFa,IASXb,WAAY,WAGRl/E,KAAKw5B,SAAW8/C,EAAMt0E,UAAWhF,KAAKi4B,SAGtCj4B,KAAKi4B,QAAU,KACfj4B,KAAK4/E,SAAU,GAYnBW,kBAAmB,SAA2B1C,EAAI50D,EAAQszD,EAAWthD,EAAQzD,GACzE,GAAI0Z,GAAMlxC,KAAKi4B,QACXuoD,GAAS,EACTC,EAASvvC,EAAIgvC,cACbQ,EAAWxvC,EAAIkvC,YAEhBK,IAAU5C,EAAGmB,UAAYyB,EAAOzB,UAAY9rD,EAAO6nD,qBAClD9xD,EAASw3D,EAAOx3D,OAChBszD,EAAYsB,EAAGmB,UAAYyB,EAAOzB,UAClC/jD,EAAS4iD,EAAG50D,OAAO4E,QAAU4yD,EAAOx3D,OAAO4E,QAC3C2J,EAASqmD,EAAG50D,OAAO8E,QAAU0yD,EAAOx3D,OAAO8E,QAC3CyyD,GAAS,IAGV3C,EAAGxoB,WAAaqmB,GAAemC,EAAGxoB,WAAaomB,KAC9CvqC,EAAIivC,gBAAkBtC,KAGtB3sC,EAAIgvC,eAAiBM,KACrBE,EAASC,SAAWrH,EAAMgD,YAAYC,EAAWthD,EAAQzD,GACzDkpD,EAASx+B,MAAQo3B,EAAMkD,SAASvzD,EAAQ40D,EAAG50D,QAC3Cy3D,EAAS1mD,UAAYs/C,EAAMqD,aAAa1zD,EAAQ40D,EAAG50D,QAEnDioB,EAAIgvC,cAAgBhvC,EAAIivC,iBAAmBtC,EAC3C3sC,EAAIivC,gBAAkBtC,GAG1BA,EAAG+C,UAAYF,EAASC,SAASxwE,EACjC0tE,EAAGgD,UAAYH,EAASC,SAASvwE,EACjCytE,EAAGiD,aAAeJ,EAASx+B,MAC3B27B,EAAGkD,iBAAmBL,EAAS1mD,WASnCqmD,gBAAiB,SAAyBxC,GACtC,GAAI3sC,GAAMlxC,KAAKi4B,QACX+oD,EAAU9vC,EAAI8uC,WACdiB,EAAS/vC,EAAI+uC,WAAae,GAG3BnD,EAAGxoB,WAAaqmB,GAAemC,EAAGxoB,WAAaomB,KAC9CuF,EAAQxlD,WACR89C,EAAMC,KAAKsE,EAAGriD,QAAS,SAAS/G,GAC5BusD,EAAQxlD,QAAQ5zB,MACZimB,QAAS4G,EAAM5G,QACfE,QAAS0G,EAAM1G,YAK3B,IAAIwuD,GAAYsB,EAAGmB,UAAYgC,EAAQhC,UACnC/jD,EAAS4iD,EAAG50D,OAAO4E,QAAUmzD,EAAQ/3D,OAAO4E,QAC5C2J,EAASqmD,EAAG50D,OAAO8E,QAAUizD,EAAQ/3D,OAAO8E,OAkBhD,OAhBA/tB,MAAKugF,kBAAkB1C,EAAIoD,EAAOh4D,OAAQszD,EAAWthD,EAAQzD,GAE7D8hD,EAAMt0E,OAAO64E,GACTmC,WAAYgB,EAEZzE,UAAWA,EACXthD,OAAQA,EACRzD,OAAQA,EAERhV,SAAU82D,EAAMzpB,YAAYmxB,EAAQ/3D,OAAQ40D,EAAG50D,QAC/Ci5B,MAAOo3B,EAAMkD,SAASwE,EAAQ/3D,OAAQ40D,EAAG50D,QACzC+Q,UAAWs/C,EAAMqD,aAAaqE,EAAQ/3D,OAAQ40D,EAAG50D,QACjDnP,MAAOw/D,EAAMsD,SAASoE,EAAQxlD,QAASqiD,EAAGriD,SAC1C0lD,SAAU5H,EAAMuD,YAAYmE,EAAQxlD,QAASqiD,EAAGriD,WAG7CqiD,GASXnE,SAAU,SAAkBniD,GAExB,GAAI7pB,GAAU6pB,EAAQ0iD,YAyBtB,OAxBGvsE,GAAQ6pB,EAAQnjB,QAAUlO,IACzBwH,EAAQ6pB,EAAQnjB,OAAQ,GAI5BklE,EAAMt0E,OAAOkuB,EAAO+mD,SAAUvsE,GAAS,GAGvC6pB,EAAQxvB,MAAQwvB,EAAQxvB,OAAS,IAGjC/H,KAAKw5E,SAAS5xE,KAAK2vB,GAGnBv3B,KAAKw5E,SAASnlE,KAAK,SAASpP,EAAGa,GAC3B,MAAGb,GAAE8C,MAAQjC,EAAEiC,MACJ,GAER9C,EAAE8C,MAAQjC,EAAEiC,MACJ,EAEJ,IAGJ/H,KAAKw5E,UAmBpBtmD,GAAO8mD,SAAW,SAASxxE,EAASkF,GAChC,GAAIwrD,GAAOl5D,IAIXk5E,KAMAl5E,KAAKwI,QAAUA,EAOfxI,KAAK2N,SAAU,EAQf2rE,EAAMC,KAAK7rE,EAAS,SAAS7G,EAAOuN,SACzB1G,GAAQ0G,GACf1G,EAAQ4rE,EAAM4D,YAAY9oE,IAASvN,IAGvC7G,KAAK0N,QAAU4rE,EAAMt0E,OAAOs0E,EAAMt0E,UAAWkuB,EAAO+mD,UAAWvsE,OAG5D1N,KAAK0N,QAAQwsE,UACZZ,EAAM6D,eAAen9E,KAAKwI,QAASxI,KAAK0N,QAAQwsE,UAAU,GAQ9Dl6E,KAAKmhF,kBAAoB/H,EAAMO,QAAQnxE,EAASgzE,EAAa,SAASqC,GAC/D3kB,EAAKvrD,SAAWkwE,EAAGxoB,WAAammB,EAC/B/B,EAAUoG,YAAY3mB,EAAM2kB,GACtBA,EAAGxoB,WAAaqmB,GACtBjC,EAAUK,OAAO+D,KASzB79E,KAAKohF,kBAGTluD,EAAO8mD,SAASzoE,WASZC,GAAI,SAAiBgoE,EAAUsC,GAC3B,GAAI5iB,GAAOl5D,IAIX,OAHAo5E,GAAM5nE,GAAG0nD,EAAK1wD,QAASgxE,EAAUsC,EAAS,SAASx1E,GAC/C4yD,EAAKkoB,cAAcx5E,MAAO2vB,QAASjxB,EAAMw1E,QAASA,MAE/C5iB,GAUXvnD,IAAK,SAAkB6nE,EAAUsC,GAC7B,GAAI5iB,GAAOl5D,IAQX,OANAo5E,GAAMznE,IAAIunD,EAAK1wD,QAASgxE,EAAUsC,EAAS,SAASx1E,GAChD,GAAIyB,GAAQuxE,EAAM6C,SAAU5kD,QAASjxB,EAAMw1E,QAASA,GACjD/zE,MAAU,GACTmxD,EAAKkoB,cAAcp5E,OAAOD,EAAO,KAGlCmxD,GAUXsH,QAAS,SAAsBjpC,EAASwoD,GAEhCA,IACAA,KAIJ,IAAI72E,GAAQgqB,EAAO0mD,SAASyH,YAAY,QACxCn4E,GAAMo4E,UAAU/pD,GAAS,GAAM,GAC/BruB,EAAMquB,QAAUwoD,CAIhB,IAAIv3E,GAAUxI,KAAKwI,OAMnB,OALG8wE,GAAM8C,UAAU2D,EAAU12E,OAAQb,KACjCA,EAAUu3E,EAAU12E,QAGxBb,EAAQ+4E,cAAcr4E,GACflJ,MASXk+B,OAAQ,SAAgBsjD,GAEpB,MADAxhF,MAAK2N,QAAU6zE,EACRxhF,MAQXyhF,QAAS,WACL,GAAIv8E,GAAGw8E,CAMP,KAHApI,EAAM6D,eAAen9E,KAAKwI,QAASxI,KAAK0N,QAAQwsE,UAAU,GAGtDh1E,EAAI,GAAKw8E,EAAK1hF,KAAKohF,gBAAgBl8E,IACnCo0E,EAAM3nE,IAAI3R,KAAKwI,QAASk5E,EAAGnqD,QAASmqD,EAAG5F,QAQ3C,OALA97E,MAAKohF,iBAGLhI,EAAMznE,IAAI3R,KAAKwI,QAASwyE,EAAYQ,GAAcx7E,KAAKmhF,mBAEhD,OAqDf,SAAU/sE,GAGN,QAASutE,GAAY9D,EAAIiC,GACrB,GAAI5uC,GAAMuoC,EAAUxhD,OAGpB,MAAG6nD,EAAKpyE,QAAQk0E,eAAiB,GAC7B/D,EAAGriD,QAAQn2B,OAASy6E,EAAKpyE,QAAQk0E,gBAIrC,OAAO/D,EAAGxoB,WACN,IAAKmmB,GACDqG,GAAY,CACZ,MAEJ,KAAKhI,GAGD,GAAGgE,EAAGr7D,SAAWs9D,EAAKpyE,QAAQo0E,iBAC1B5wC,EAAI98B,MAAQA,EACZ,MAGJ,IAAI2tE,GAAc7wC,EAAI8uC,WAAW/2D,MAGjC,IAAGioB,EAAI98B,MAAQA,IACX88B,EAAI98B,KAAOA,EACR0rE,EAAKpyE,QAAQs0E,wBAA0BnE,EAAGr7D,SAAW,GAAG,CAIvD,GAAI45B,GAASx3C,KAAK+iB,IAAIm4D,EAAKpyE,QAAQo0E,gBAAkBjE,EAAGr7D,SACxDu/D,GAAYrnD,OAASmjD,EAAG5iD,OAASmhB,EACjC2lC,EAAYpnD,OAASkjD,EAAGrmD,OAAS4kB,EACjC2lC,EAAYl0D,SAAWgwD,EAAG5iD,OAASmhB,EACnC2lC,EAAYh0D,SAAW8vD,EAAGrmD,OAAS4kB,EAGnCyhC,EAAKpE,EAAU4G,gBAAgBxC,IAKpC3sC,EAAI+uC,UAAUgC,gBACXnC,EAAKpyE,QAAQu0E,gBACXnC,EAAKpyE,QAAQw0E,qBAAuBrE,EAAGr7D,YAE3Cq7D,EAAGoE,gBAAiB,EAIxB,IAAIE,GAAgBjxC,EAAI+uC,UAAUjmD,SAC/B6jD,GAAGoE,gBAAkBE,IAAkBtE,EAAG7jD,YAErC6jD,EAAG7jD,UADJs/C,EAAMwD,WAAWqF,GACAtE,EAAGrmD,OAAS,EAAK2jD,EAAeF,EAEhC4C,EAAG5iD,OAAS,EAAKigD,EAAiBE,GAKtDyG,IACA/B,EAAKtf,QAAQpsD,EAAO,QAASypE,GAC7BgE,GAAY,GAIhB/B,EAAKtf,QAAQpsD,EAAMypE,GACnBiC,EAAKtf,QAAQpsD,EAAOypE,EAAG7jD,UAAW6jD,EAElC,IAAIf,GAAaxD,EAAMwD,WAAWe,EAAG7jD,YAGjC8lD,EAAKpyE,QAAQ00E,mBAAqBtF,GACjCgD,EAAKpyE,QAAQ20E,sBAAwBvF,IACtCe,EAAG50E,gBAEP,MAEJ,KAAKwyE,GACEoG,GAAahE,EAAGa,eAAiBoB,EAAKpyE,QAAQk0E,iBAC7C9B,EAAKtf,QAAQpsD,EAAO,MAAOypE,GAC3BgE,GAAY,EAEhB,MAEJ,KAAK9H,GACD8H,GAAY,GAzFxB,GAAIA,IAAY,CA8FhB3uD,GAAOsmD,SAAS8I,MACZluE,KAAMA,EACNrM,MAAO,GACP+zE,QAAS6F,EACT1H,UAOI6H,gBAAiB,GAWjBE,wBAAwB,EAQxBJ,eAAgB,EAUhBS,qBAAqB,EAQrBD,mBAAmB,EASnBH,gBAAgB,EAShBC,oBAAqB,MAG9B,QAgBHhvD,EAAOsmD,SAAS+I,SACZnuE,KAAM,UACNrM,MAAO,KACP+zE,QAAS,SAAwB+B,EAAIiC,GACjCA,EAAKtf,QAAQxgE,KAAKoU,KAAMypE,KAqBhC,SAAUzpE,GAGN,QAASouE,GAAY3E,EAAIiC,GACrB,GAAIpyE,GAAUoyE,EAAKpyE,QACfuqB,EAAUwhD,EAAUxhD,OAExB,QAAO4lD,EAAGxoB,WACN,IAAKmmB,GACDtwD,aAAa2vB,GAGb5iB,EAAQ7jB,KAAOA,EAIfymC,EAAQtvB,WAAW,WACZ0M,GAAWA,EAAQ7jB,MAAQA,GAC1B0rE,EAAKtf,QAAQpsD,EAAMypE,IAExBnwE,EAAQ+0E,YACX,MAEJ,KAAK5I,GACEgE,EAAGr7D,SAAW9U,EAAQg1E,eACrBx3D,aAAa2vB,EAEjB,MAEJ,KAAK4gC,GACDvwD,aAAa2vB,IA7BzB,GAAIA,EAkCJ3nB,GAAOsmD,SAASmJ,MACZvuE,KAAMA,EACNrM,MAAO,GACPkyE,UAMIwI,YAAa,IAQbC,cAAe,GAEnB5G,QAAS0G,IAEd,QAeHtvD,EAAOsmD,SAASoJ,SACZxuE,KAAM,UACNrM,MAAO86E,IACP/G,QAAS,SAAwB+B,EAAIiC,GAC9BjC,EAAGxoB,WAAaomB,GACfqE,EAAKtf,QAAQxgE,KAAKoU,KAAMypE,KAyCpC3qD,EAAOsmD,SAASsJ,OACZ1uE,KAAM,QACNrM,MAAO,GACPkyE,UAMI8I,gBAAiB,EAOjBC,gBAAiB,EAQjBC,eAAgB,GAQhBC,eAAgB,IAGpBpH,QAAS,SAAsB+B,EAAIiC,GAC/B,GAAGjC,EAAGxoB,WAAaomB,EAAe,CAC9B,GAAIjgD,GAAUqiD,EAAGriD,QAAQn2B,OACrBqI,EAAUoyE,EAAKpyE,OAGnB,IAAG8tB,EAAU9tB,EAAQq1E,iBACjBvnD,EAAU9tB,EAAQs1E,gBAClB,QAKDnF,EAAG+C,UAAYlzE,EAAQu1E,gBACtBpF,EAAGgD,UAAYnzE,EAAQw1E,kBAEvBpD,EAAKtf,QAAQxgE,KAAKoU,KAAMypE,GACxBiC,EAAKtf,QAAQxgE,KAAKoU,KAAOypE,EAAG7jD,UAAW6jD,OA2BvD,SAAUzpE,GAGN,QAAS+uE,GAAWtF,EAAIiC,GACpB,GAGIsD,GACAC,EAJA31E,EAAUoyE,EAAKpyE,QACfuqB,EAAUwhD,EAAUxhD,QACpB/I,EAAOuqD,EAAUjgD,QAIrB,QAAOqkD,EAAGxoB,WACN,IAAKmmB,GACD8H,GAAW,CACX,MAEJ,KAAKzJ,GACDyJ,EAAWA,GAAazF,EAAGr7D,SAAW9U,EAAQ61E,cAC9C,MAEJ,KAAKxJ,IACGT,EAAM2C,MAAM4B,EAAGhzC,SAASvkC,KAAM,WAAau3E,EAAGtB,UAAY7uE,EAAQ81E,aAAeF,IAEjFF,EAAYl0D,GAAQA,EAAK+wD,WAAapC,EAAGmB,UAAY9vD,EAAK+wD,UAAUjB,UACpEqE,GAAe,EAGZn0D,GAAQA,EAAK9a,MAAQA,GACnBgvE,GAAaA,EAAY11E,EAAQ+1E,mBAClC5F,EAAGr7D,SAAW9U,EAAQg2E,oBACtB5D,EAAKtf,QAAQ,YAAaqd,GAC1BwF,GAAe,KAIfA,GAAgB31E,EAAQi2E,aACxB1rD,EAAQ7jB,KAAOA,EACf0rE,EAAKtf,QAAQvoC,EAAQ7jB,KAAMypE,MAnC/C,GAAIyF,IAAW,CA0CfpwD,GAAOsmD,SAASoK,KACZxvE,KAAMA,EACNrM,MAAO,IACP+zE,QAASqH,EACTlJ,UAOIuJ,WAAY,IAQZD,eAAgB,GAQhBI,WAAW,EAQXD,kBAAmB,GAQnBD,kBAAmB,OAG5B,OAeHvwD,EAAOsmD,SAASqK,OACZzvE,KAAM,QACNrM,OAAQ86E,IACR5I,UASIhxE,gBAAgB,EAQhB66E,cAAc,GAElBhI,QAAS,SAAsB+B,EAAIiC,GAC/B,MAAGA,GAAKpyE,QAAQo2E,cAAgBjG,EAAGkB,aAAe1D,MAC9CwC,GAAGqB,cAIJY,EAAKpyE,QAAQzE,gBACZ40E,EAAG50E,sBAGJ40E,EAAGxoB,WAAaqmB,GACfoE,EAAKtf,QAAQ,QAASqd,OA4ClC,SAAUzpE,GAGN,QAAS2vE,GAAiBlG,EAAIiC,GAC1B,OAAOjC,EAAGxoB,WACN,IAAKmmB,GACDqG,GAAY,CACZ,MAEJ,KAAKhI,GAED,GAAGgE,EAAGriD,QAAQn2B,OAAS,EACnB,MAGJ,IAAI2+E,GAAiBp/E,KAAK+iB,IAAI,EAAIk2D,EAAG/jE,OACjCmqE,EAAoBr/E,KAAK+iB,IAAIk2D,EAAGqD,SAIpC,IAAG8C,EAAiBlE,EAAKpyE,QAAQw2E,mBAC7BD,EAAoBnE,EAAKpyE,QAAQy2E,qBACjC,MAIJ1K,GAAUxhD,QAAQ7jB,KAAOA,EAGrBytE,IACA/B,EAAKtf,QAAQpsD,EAAO,QAASypE,GAC7BgE,GAAY,GAGhB/B,EAAKtf,QAAQpsD,EAAMypE,GAGhBoG,EAAoBnE,EAAKpyE,QAAQy2E,sBAChCrE,EAAKtf,QAAQ,SAAUqd,GAIxBmG,EAAiBlE,EAAKpyE,QAAQw2E,oBAC7BpE,EAAKtf,QAAQ,QAASqd,GACtBiC,EAAKtf,QAAQ,SAAWqd,EAAG/jE,MAAQ,EAAI,KAAO,OAAQ+jE,GAE1D,MAEJ,KAAKpC,GACEoG,GAAahE,EAAGa,cAAgB,IAC/BoB,EAAKtf,QAAQpsD,EAAO,MAAOypE,GAC3BgE,GAAY,IAlD5B,GAAIA,IAAY,CAwDhB3uD,GAAOsmD,SAAS4K,WACZhwE,KAAMA,EACNrM,MAAO,GACPkyE,UAOIiK,kBAAmB,IAQnBC,qBAAsB,GAG1BrI,QAASiI,IAEd,aAQGtjB,EAAiC,WAC/B,MAAOvtC,IACT3yB,KAAKX,EAASM,EAAqBN,EAASC,KAAU4gE,IAAkCv6D,IAAcrG,EAAOD,QAAU6gE,KAS1Hv5D,SAIC,SAASrH,EAAQD,GAYrBA,EAAQo7C,oBAAsB,WAE7Bh7C,KAAKqkF,aAAarkF,KAAKwzC,UAAUiC,WAAWC,iBAAiB,GAG7D11C,KAAKuiD,eAIDviD,KAAKizC,WACPjzC,KAAKg9C,aAEPh9C,KAAK0O,SASN9O,EAAQykF,aAAe,SAASC,EAAkBC,GAOhD,IANA,GAAIpoC,GAAgBn8C,KAAK45C,YAAYv0C,OAEjCm/E,EAAY,GACZtwC,EAAQ,EAGLiI,EAAgBmoC,GAA4BE,EAARtwC,GACrCA,EAAQ,GAAK,GACfl0C,KAAKykF,oBAAmB,GACxBzkF,KAAK0kF,0BAGL1kF,KAAK2kF,uBAGPxoC,EAAgBn8C,KAAK45C,YAAYv0C,OACjC6uC,GAAS,CAIPA,GAAQ,GAAmB,GAAdqwC,GACfvkF,KAAK4kF,kBAEP5kF,KAAKoiD,2BASPxiD,EAAQilF,YAAc,SAASrpC,GAC7B,GAAIspC,GAA2B9kF,KAAK46C,MACpC,IAAIY,EAAKsS,YAAc9tD,KAAKwzC,UAAUiC,WAAWM,iBAAmB/1C,KAAK+kF,kBAAkBvpC,KACrE,WAAlBx7C,KAAKglF,WAAqD,GAA3BhlF,KAAK45C,YAAYv0C,QAAc,CAEhErF,KAAKilF,WAAWzpC,EAIhB,KAHA,GAAItH,GAAQ,EAGJl0C,KAAK45C,YAAYv0C,OAASrF,KAAKwzC,UAAUiC,WAAWC,iBAA6B,GAARxB,GAC/El0C,KAAKklF,uBACLhxC,GAAS,MAKXl0C,MAAKmlF,mBAAmB3pC,GAAK,GAAM,GAGnCx7C,KAAKw8C,uBACLx8C,KAAKolF,sBACLplF,KAAKoiD,0BACLpiD,KAAKuiD,cAIHviD,MAAK46C,QAAUkqC,GACjB9kF,KAAK0O,SAQT9O,EAAQ8gD,sBAAwB,WACW,GAArC1gD,KAAKwzC,UAAUiC,WAAW9nC,SAC5B3N,KAAKqlF,eAAe,GAAE,GAAM,IAUhCzlF,EAAQ+kF,qBAAuB,WAC7B3kF,KAAKqlF,eAAe,IAAG,GAAM,IAS/BzlF,EAAQslF,qBAAuB,WAC7BllF,KAAKqlF,eAAe,GAAE,GAAM,IAgB9BzlF,EAAQylF,eAAiB,SAASC,EAAcC,EAAUvpD,EAAMwpD,GAC9D,GAAIV,GAA2B9kF,KAAK46C,OAChC6qC,EAAgBzlF,KAAK45C,YAAYv0C,MAGjCrF,MAAKi6C,cAAgBj6C,KAAK8Z,OAA0B,GAAjBwrE,GACrCtlF,KAAK0lF,kBAIH1lF,KAAKi6C,cAAgBj6C,KAAK8Z,OAA0B,IAAjBwrE,EAGrCtlF,KAAK2lF,cAAc3pD,IAEZh8B,KAAKi6C,cAAgBj6C,KAAK8Z,OAA0B,GAAjBwrE,KAC7B,GAATtpD,EAGFh8B,KAAK4lF,cAAcL,EAAUvpD,GAI7Bh8B,KAAK6lF,uBAGT7lF,KAAKw8C,uBAGDx8C,KAAK45C,YAAYv0C,QAAUogF,IAAkBzlF,KAAKi6C,cAAgBj6C,KAAK8Z,OAA0B,IAAjBwrE,KAClFtlF,KAAK8lF,eAAe9pD,GACpBh8B,KAAKw8C,yBAIHx8C,KAAKi6C,cAAgBj6C,KAAK8Z,OAA0B,IAAjBwrE,KACrCtlF,KAAK+lF,eACL/lF,KAAKw8C,wBAGPx8C,KAAKi6C,cAAgBj6C,KAAK8Z,MAG1B9Z,KAAKolF,sBACLplF,KAAKuiD,eAGDviD,KAAK45C,YAAYv0C,OAASogF,IAC5BzlF,KAAKutD,gBAAkB,EAEvBvtD,KAAK0kF,2BAGW,GAAdc,GAAsCt/E,SAAfs/E,IAErBxlF,KAAK46C,QAAUkqC,GACjB9kF,KAAK0O,QAIT1O,KAAKoiD,2BAMPxiD,EAAQmmF,aAAe,WAErB,GAAIC,GAAkBhmF,KAAKimF,mBACvBD,GAAkBhmF,KAAKwzC,UAAUiC,WAAWI,gBAC9C71C,KAAKkmF,sBAAsB,EAAIlmF,KAAKwzC,UAAUiC,WAAWI,eAAiBmwC,IAW9EpmF,EAAQkmF,eAAiB,SAAS9pD,GAChCh8B,KAAKmmF,cACLnmF,KAAKomF,mBAAmBpqD,GAAM,IAQhCp8B,EAAQ6kF,mBAAqB,SAASe,GACpC,GAAIV,GAA2B9kF,KAAK46C,OAChC6qC,EAAgBzlF,KAAK45C,YAAYv0C,MAErCrF,MAAK8lF,gBAAe,GAGpB9lF,KAAKw8C,uBACLx8C,KAAKolF,sBACLplF,KAAKuiD,eAGDviD,KAAK45C,YAAYv0C,QAAUogF,IAC7BzlF,KAAKutD,gBAAkB,IAGP,GAAdi4B,GAAsCt/E,SAAfs/E,IAErBxlF,KAAK46C,QAAUkqC,GACjB9kF,KAAK0O,SAUX9O,EAAQimF,oBAAsB,WAC5B,IAAK,GAAIhqC,KAAU77C,MAAKyzC,MACtB,GAAIzzC,KAAKyzC,MAAMjuC,eAAeq2C,GAAS,CACrC,GAAIL,GAAOx7C,KAAKyzC,MAAMoI,EACD,IAAjBL,EAAKwV,WACFxV,EAAK5qC,MAAM5Q,KAAK8Z,MAAQ9Z,KAAKwzC,UAAUiC,WAAWO,oBAAsBh2C,KAAKmc,MAAMC,OAAOC,aAC1Fm/B,EAAK3qC,OAAO7Q,KAAK8Z,MAAQ9Z,KAAKwzC,UAAUiC,WAAWO,oBAAsBh2C,KAAKmc,MAAMC,OAAOsF,eAC9F1hB,KAAK6kF,YAAYrpC,KAc3B57C,EAAQgmF,cAAgB,SAASL,EAAUvpD,GACzC,IAAK,GAAI92B,GAAI,EAAGA,EAAIlF,KAAK45C,YAAYv0C,OAAQH,IAAK,CAChD,GAAIs2C,GAAOx7C,KAAKyzC,MAAMzzC,KAAK45C,YAAY10C,GACvClF,MAAKmlF,mBAAmB3pC,EAAK+pC,EAAUvpD,GACvCh8B,KAAKoiD,4BAeTxiD,EAAQulF,mBAAqB,SAAS37E,EAAY+7E,EAAWvpD,EAAOqqD,GAElE,GAAI78E,EAAWskD,YAAc,IAEvBtkD,EAAWskD,YAAc9tD,KAAKwzC,UAAUiC,WAAWM,kBACrDswC,GAAU,GAEZd,EAAYc,GAAU,EAAOd,EAGzB/7E,EAAWqkD,eAAiB7tD,KAAK8Z,OAAkB,GAATkiB,GAE5C,IAAK,GAAIsqD,KAAmB98E,GAAWukD,eACrC,GAAIvkD,EAAWukD,eAAevoD,eAAe8gF,GAAkB,CAC7D,GAAIC,GAAY/8E,EAAWukD,eAAeu4B,EAI7B,IAATtqD,GACEuqD,EAAUh5B,gBAAkB/jD,EAAWykD,gBAAgBzkD,EAAWykD,gBAAgB5oD,OAAO,IACtFghF,IACLrmF,KAAKwmF,sBAAsBh9E,EAAW88E,EAAgBf,EAAUvpD,EAAMqqD,GAIpErmF,KAAK+kF,kBAAkBv7E,IACzBxJ,KAAKwmF,sBAAsBh9E,EAAW88E,EAAgBf,EAAUvpD,EAAMqqD,KAwBpFzmF,EAAQ4mF,sBAAwB,SAASh9E,EAAY88E,EAAiBf,EAAWvpD,EAAOqqD,GACtF,GAAIE,GAAY/8E,EAAWukD,eAAeu4B,EAG1C,IAAIC,EAAU14B,eAAiB7tD,KAAK8Z,OAAkB,GAATkiB,EAAe,CAE1Dh8B,KAAKymF,eAGLzmF,KAAKyzC,MAAM6yC,GAAmBC,EAG9BvmF,KAAK0mF,uBAAuBl9E,EAAW+8E,GAGvCvmF,KAAK2mF,wBAAwBn9E,EAAW+8E,GAGxCvmF,KAAK4mF,eAAep9E,GAGpBA,EAAWs8C,MAAQygC,EAAUzgC,KAC7Bt8C,EAAWskD,aAAey4B,EAAUz4B,YACpCtkD,EAAWwqC,SAAWpvC,KAAKmG,IAAI/K,KAAKwzC,UAAUiC,WAAWS,YAAal2C,KAAKwzC,UAAUC,MAAMO,SAAWh0C,KAAKwzC,UAAUiC,WAAWQ,mBAAmBzsC,EAAWskD,aAC9JtkD,EAAW8jD,mBAAqB9jD,EAAW+iD,aAAalnD,OAGxDkhF,EAAUp2E,EAAI3G,EAAW2G,EAAI3G,EAAWmkD,iBAAmB,GAAM/oD,KAAKE,UACtEyhF,EAAUn2E,EAAI5G,EAAW4G,EAAI5G,EAAWmkD,iBAAmB,GAAM/oD,KAAKE,gBAG/D0E,GAAWukD,eAAeu4B,EAGjC,IAAIO,IAAgB,CACpB,KAAK,GAAIC,KAAet9E,GAAWukD,eACjC,GAAIvkD,EAAWukD,eAAevoD,eAAeshF,IACvCt9E,EAAWukD,eAAe+4B,GAAav5B,gBAAkBg5B,EAAUh5B,eAAgB,CACrFs5B,GAAgB,CAChB,OAKe,GAAjBA,GACFr9E,EAAWykD,gBAAgBtc,MAG7B3xC,KAAK+mF,uBAAuBR,GAI5BA,EAAUh5B,eAAiB,EAG3B/jD,EAAWimD,iBAGXzvD,KAAK46C,QAAS,EAIC,GAAb2qC,GACFvlF,KAAKmlF,mBAAmBoB,EAAUhB,EAAUvpD,EAAMqqD,IAWtDzmF,EAAQmnF,uBAAyB,SAASvrC,GACxC,IAAK,GAAIt2C,GAAI,EAAGA,EAAIs2C,EAAK+Q,aAAalnD,OAAQH,IAC5Cs2C,EAAK+Q,aAAarnD,GAAG+gD,sBAczBrmD,EAAQ+lF,cAAgB,SAAS3pD,GAClB,GAATA,EACFh8B,KAAKgnF,sBAGLhnF,KAAKinF,wBAUTrnF,EAAQonF,oBAAsB,WAC5B,GAAIvrE,GAAGC,EAAGrW,EACN6hF,EAAYlnF,KAAKwzC,UAAUiC,WAAWK,qBAAqB91C,KAAK8Z,KAIpE,KAAK,GAAIonC,KAAUlhD,MAAKo0C,MACtB,GAAIp0C,KAAKo0C,MAAM5uC,eAAe07C,GAAS,CACrC,GAAIO,GAAOzhD,KAAKo0C,MAAM8M,EACtB,IAAIO,EAAKC,WACHD,EAAKoF,MAAQpF,EAAKmF,SACpBnrC,EAAMgmC,EAAKt7B,GAAGhW,EAAIsxC,EAAKv7B,KAAK/V,EAC5BuL,EAAM+lC,EAAKt7B,GAAG/V,EAAIqxC,EAAKv7B,KAAK9V,EAC5B/K,EAAST,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAGrBwrE,EAAT7hF,GAAoB,CAEtB,GAAImE,GAAai4C,EAAKv7B,KAClBqgE,EAAY9kC,EAAKt7B,EACjBs7B,GAAKt7B,GAAG2/B,KAAOrE,EAAKv7B,KAAK4/B,OAC3Bt8C,EAAai4C,EAAKt7B,GAClBogE,EAAY9kC,EAAKv7B,MAGiB,GAAhCqgE,EAAUj5B,mBACZttD,KAAKmnF,cAAc39E,EAAW+8E,GAAU,GAEA,GAAjC/8E,EAAW8jD,oBAClBttD,KAAKmnF,cAAcZ,EAAU/8E,GAAW,MAetD5J,EAAQqnF,qBAAuB,WAC7B,IAAK,GAAIprC,KAAU77C,MAAKyzC,MAEtB,GAAIzzC,KAAKyzC,MAAMjuC,eAAeq2C,GAAS,CACrC,GAAI0qC,GAAYvmF,KAAKyzC,MAAMoI,EAG3B,IAAoC,GAAhC0qC,EAAUj5B,oBAA4D,GAAjCi5B,EAAUh6B,aAAalnD,OAAa,CAC3E,GAAIo8C,GAAO8kC,EAAUh6B,aAAa,GAC9B/iD,EAAci4C,EAAKoF,MAAQ0/B,EAAUlmF,GAAML,KAAKyzC,MAAMgO,EAAKmF,QAAU5mD,KAAKyzC,MAAMgO,EAAKoF,KAGrF0/B,GAAUlmF,IAAMmJ,EAAWnJ,KACzBmJ,EAAWs8C,KAAOygC,EAAUzgC,KAC9B9lD,KAAKmnF,cAAc39E,EAAW+8E,GAAU,GAGxCvmF,KAAKmnF,cAAcZ,EAAU/8E,GAAW,OAgBpD5J,EAAQwnF,4BAA8B,SAAS5rC,GAG7C,IAAK,GAFD6rC,GAAoB,GACpBC,EAAwB,KACnBpiF,EAAI,EAAGA,EAAIs2C,EAAK+Q,aAAalnD,OAAQH,IAC5C,GAA6BgB,SAAzBs1C,EAAK+Q,aAAarnD,GAAkB,CACtC,GAAIqiF,GAAY,IACZ/rC,GAAK+Q,aAAarnD,GAAG0hD,QAAUpL,EAAKn7C,GACtCknF,EAAY/rC,EAAK+Q,aAAarnD,GAAGghB,KAE1Bs1B,EAAK+Q,aAAarnD,GAAG2hD,MAAQrL,EAAKn7C,KACzCknF,EAAY/rC,EAAK+Q,aAAarnD,GAAGihB,IAIlB,MAAbohE,GAAqBF,EAAoBE,EAAUt5B,gBAAgB5oD,SACrEgiF,EAAoBE,EAAUt5B,gBAAgB5oD,OAC9CiiF,EAAwBC,GAKb,MAAbA,GAAkDrhF,SAA7BlG,KAAKyzC,MAAM8zC,EAAUlnF,KAC5CL,KAAKmnF,cAAcI,EAAW/rC,GAAM,IAYxC57C,EAAQwmF,mBAAqB,SAASpqD,EAAOwrD,GAE3C,IAAK,GAAI3rC,KAAU77C,MAAKyzC,MAElBzzC,KAAKyzC,MAAMjuC,eAAeq2C,IAC5B77C,KAAKynF,oBAAoBznF,KAAKyzC,MAAMoI,GAAQ7f,EAAMwrD,IAcxD5nF,EAAQ6nF,oBAAsB,SAASC,EAAS1rD,EAAOwrD,EAAWG,GAKhE,GAJ6BzhF,SAAzByhF,IACFA,EAAuB,GAGpBD,EAAQp6B,oBAAsBttD,KAAKu4D,cAA6B,GAAbivB,GACrDE,EAAQp6B,oBAAsBttD,KAAKu4D,cAA6B,GAAbivB,EAAoB,CASxE,IAAK,GAPD/rE,GAAGC,EAAGrW,EACN6hF,EAAYlnF,KAAKwzC,UAAUiC,WAAWK,qBAAqB91C,KAAK8Z,MAChE8tE,GAAe,EAGfC,KACAC,EAAuBJ,EAAQn7B,aAAalnD,OACvCsjB,EAAI,EAAOm/D,EAAJn/D,EAA0BA,IACxCk/D,EAAajgF,KAAK8/E,EAAQn7B,aAAa5jC,GAAGtoB,GAK5C,IAAa,GAAT27B,EAEF,IADA4rD,GAAe,EACVj/D,EAAI,EAAOm/D,EAAJn/D,EAA0BA,IAAK,CACzC,GAAI84B,GAAOzhD,KAAKo0C,MAAMyzC,EAAal/D,GACnC,IAAaziB,SAATu7C,GACEA,EAAKC,WACHD,EAAKoF,MAAQpF,EAAKmF,SACpBnrC,EAAMgmC,EAAKt7B,GAAGhW,EAAIsxC,EAAKv7B,KAAK/V,EAC5BuL,EAAM+lC,EAAKt7B,GAAG/V,EAAIqxC,EAAKv7B,KAAK9V,EAC5B/K,EAAST,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAErBwrE,EAAT7hF,GAAoB,CACtBuiF,GAAe,CACf,QASZ,IAAM5rD,GAAS4rD,GAAiB5rD,EAE9B,IAAKrT,EAAI,EAAOm/D,EAAJn/D,EAA0BA,IAGpC,GAFA84B,EAAOzhD,KAAKo0C,MAAMyzC,EAAal/D,IAElBziB,SAATu7C,EAAoB,CACtB,GAAI8kC,GAAYvmF,KAAKyzC,MAAOgO,EAAKmF,QAAU8gC,EAAQrnF,GAAMohD,EAAKoF,KAAOpF,EAAKmF,OAErE2/B,GAAUh6B,aAAalnD,QAAWrF,KAAKu4D,aAAeovB,GACtDpB,EAAUlmF,IAAMqnF,EAAQrnF,IAC3BL,KAAKmnF,cAAcO,EAAQnB,EAAUvqD,MAkBjDp8B,EAAQunF,cAAgB,SAAS39E,EAAY+8E,EAAWvqD,GAEtDxyB,EAAWukD,eAAew4B,EAAUlmF,IAAMkmF,CAG1C,KAAK,GAAIrhF,GAAI,EAAGA,EAAIqhF,EAAUh6B,aAAalnD,OAAQH,IAAK,CACtD,GAAIu8C,GAAO8kC,EAAUh6B,aAAarnD,EAC9Bu8C,GAAKoF,MAAQr9C,EAAWnJ,IAAMohD,EAAKmF,QAAUp9C,EAAWnJ,GAC1DL,KAAK+nF,qBAAqBv+E,EAAW+8E,EAAU9kC,GAG/CzhD,KAAKgoF,sBAAsBx+E,EAAW+8E,EAAU9kC,GAIpD8kC,EAAUh6B,gBAGVvsD,KAAKioF,8BAA8Bz+E,EAAW+8E,SAIvCvmF,MAAKyzC,MAAM8yC,EAAUlmF,GAG5B,IAAI6nF,GAAa1+E,EAAWs8C,IAC5BygC,GAAUh5B,eAAiBvtD,KAAKutD,eAChC/jD,EAAWs8C,MAAQygC,EAAUzgC,KAC7Bt8C,EAAWskD,aAAey4B,EAAUz4B,YACpCtkD,EAAWwqC,SAAWpvC,KAAKmG,IAAI/K,KAAKwzC,UAAUiC,WAAWS,YAAal2C,KAAKwzC,UAAUC,MAAMO,SAAWh0C,KAAKwzC,UAAUiC,WAAWQ,mBAAmBzsC,EAAWskD,aAG1JtkD,EAAWykD,gBAAgBzkD,EAAWykD,gBAAgB5oD,OAAS,IAAMrF,KAAKutD,gBAC5E/jD,EAAWykD,gBAAgBrmD,KAAK5H,KAAKutD,gBAMrC/jD,EAAWqkD,eAFA,GAAT7xB,EAE0B,EAGAh8B,KAAK8Z,MAInCtQ,EAAWimD,iBAGXjmD,EAAWukD,eAAew4B,EAAUlmF,IAAIwtD,eAAiBrkD,EAAWqkD,eAGpE04B,EAAUt1B,gBAGVznD,EAAW0nD,eAAeg3B,GAG1BloF,KAAK46C,QAAS,GAUhBh7C,EAAQwlF,oBAAsB,WAC5B,IAAK,GAAIlgF,GAAI,EAAGA,EAAIlF,KAAK45C,YAAYv0C,OAAQH,IAAK,CAChD,GAAIs2C,GAAOx7C,KAAKyzC,MAAMzzC,KAAK45C,YAAY10C,GACvCs2C,GAAK8R,mBAAqB9R,EAAK+Q,aAAalnD,MAG5C,IAAI8iF,GAAa,CACjB,IAAI3sC,EAAK8R,mBAAqB,EAC5B,IAAK,GAAI3kC,GAAI,EAAGA,EAAI6yB,EAAK8R,mBAAqB,EAAG3kC,IAG/C,IAAK,GAFDy/D,GAAW5sC,EAAK+Q,aAAa5jC,GAAGk+B,KAChCwhC,EAAa7sC,EAAK+Q,aAAa5jC,GAAGi+B,OAC7BqhB,EAAIt/C,EAAE,EAAGs/C,EAAIzsB,EAAK8R,mBAAoB2a,KACxCzsB,EAAK+Q,aAAa0b,GAAGphB,MAAQuhC,GAAY5sC,EAAK+Q,aAAa0b,GAAGrhB,QAAUyhC,GACxE7sC,EAAK+Q,aAAa0b,GAAGrhB,QAAUwhC,GAAY5sC,EAAK+Q,aAAa0b,GAAGphB,MAAQwhC,KAC3EF,GAAc,EAKtB3sC,GAAK8R,oBAAsB66B,IAa/BvoF,EAAQmoF,qBAAuB,SAASv+E,EAAY+8E,EAAW9kC,GAEvDj4C,EAAWwkD,eAAexoD,eAAe+gF,EAAUlmF,MACvDmJ,EAAWwkD,eAAeu4B,EAAUlmF,QAGtCmJ,EAAWwkD,eAAeu4B,EAAUlmF,IAAIuH,KAAK65C,SAGtCzhD,MAAKo0C,MAAMqN,EAAKphD,GAGvB,KAAK,GAAI6E,GAAI,EAAGA,EAAIsE,EAAW+iD,aAAalnD,OAAQH,IAClD,GAAIsE,EAAW+iD,aAAarnD,GAAG7E,IAAMohD,EAAKphD,GAAI,CAC5CmJ,EAAW+iD,aAAavkD,OAAO9C,EAAE,EACjC,SAcNtF,EAAQooF,sBAAwB,SAASx+E,EAAY+8E,EAAW9kC,GAE1DA,EAAKoF,MAAQpF,EAAKmF,OACpB5mD,KAAK+nF,qBAAqBv+E,EAAY+8E,EAAW9kC,IAG7CA,EAAKoF,MAAQ0/B,EAAUlmF,IACzBohD,EAAKwF,aAAar/C,KAAK2+E,EAAUlmF,IACjCohD,EAAKt7B,GAAK3c,EACVi4C,EAAKoF,KAAOr9C,EAAWnJ,KAIvBohD,EAAKuF,eAAep/C,KAAK2+E,EAAUlmF,IACnCohD,EAAKv7B,KAAO1c,EACZi4C,EAAKmF,OAASp9C,EAAWnJ,IAG3BL,KAAKsoF,oBAAoB9+E,EAAW+8E,EAAU9kC,KAalD7hD,EAAQqoF,8BAAgC,SAASz+E,EAAY+8E,GAE3D,IAAK,GAAIrhF,GAAI,EAAGA,EAAIsE,EAAW+iD,aAAalnD,OAAQH,IAAK,CACvD,GAAIu8C,GAAOj4C,EAAW+iD,aAAarnD,EAE/Bu8C,GAAKoF,MAAQpF,EAAKmF,QACpB5mD,KAAK+nF,qBAAqBv+E,EAAY+8E,EAAW9kC,KAcvD7hD,EAAQ0oF,oBAAsB,SAAS9+E,EAAY+8E,EAAW9kC,GAGtDj4C,EAAWgjD,cAAchnD,eAAe+gF,EAAUlmF,MACtDmJ,EAAWgjD,cAAc+5B,EAAUlmF,QAErCmJ,EAAWgjD,cAAc+5B,EAAUlmF,IAAIuH,KAAK65C,GAG5Cj4C,EAAW+iD,aAAa3kD,KAAK65C,IAY/B7hD,EAAQ+mF,wBAA0B,SAASn9E,EAAY+8E,GACrD,GAAI/8E,EAAWgjD,cAAchnD,eAAe+gF,EAAUlmF,IAAK,CACzD,IAAK,GAAI6E,GAAI,EAAGA,EAAIsE,EAAWgjD,cAAc+5B,EAAUlmF,IAAIgF,OAAQH,IAAK,CACtE,GAAIu8C,GAAOj4C,EAAWgjD,cAAc+5B,EAAUlmF,IAAI6E,EAC9Cu8C,GAAKuF,eAAevF,EAAKuF,eAAe3hD,OAAO,IAAMkhF,EAAUlmF,IACjEohD,EAAKuF,eAAerV,MACpB8P,EAAKmF,OAAS2/B,EAAUlmF,GACxBohD,EAAKv7B,KAAOqgE,IAGZ9kC,EAAKwF,aAAatV,MAClB8P,EAAKoF,KAAO0/B,EAAUlmF,GACtBohD,EAAKt7B,GAAKogE,GAIZA,EAAUh6B,aAAa3kD,KAAK65C,EAG5B,KAAK,GAAI94B,GAAI,EAAGA,EAAInf,EAAW+iD,aAAalnD,OAAQsjB,IAClD,GAAInf,EAAW+iD,aAAa5jC,GAAGtoB,IAAMohD,EAAKphD,GAAI,CAC5CmJ,EAAW+iD,aAAavkD,OAAO2gB,EAAE,EACjC,cAKCnf,GAAWgjD,cAAc+5B,EAAUlmF,MAa9CT,EAAQgnF,eAAiB,SAASp9E,GAChC,IAAK,GAAItE,GAAI,EAAGA,EAAIsE,EAAW+iD,aAAalnD,OAAQH,IAAK,CACvD,GAAIu8C,GAAOj4C,EAAW+iD,aAAarnD,EAC/BsE,GAAWnJ,IAAMohD,EAAKoF,MAAQr9C,EAAWnJ,IAAMohD,EAAKmF,QACtDp9C,EAAW+iD,aAAavkD,OAAO9C,EAAE,KAcvCtF,EAAQ8mF,uBAAyB,SAASl9E,EAAY+8E,GACpD,IAAK,GAAIrhF,GAAI,EAAGA,EAAIsE,EAAWwkD,eAAeu4B,EAAUlmF,IAAIgF,OAAQH,IAAK,CACvE,GAAIu8C,GAAOj4C,EAAWwkD,eAAeu4B,EAAUlmF,IAAI6E,EAGnDlF,MAAKo0C,MAAMqN,EAAKphD,IAAMohD,EAGtB8kC,EAAUh6B,aAAa3kD,KAAK65C,GAC5Bj4C,EAAW+iD,aAAa3kD,KAAK65C,SAGxBj4C,GAAWwkD,eAAeu4B,EAAUlmF,KAa7CT,EAAQ2iD,aAAe,WACrB,GAAI1G,EAEJ,KAAKA,IAAU77C,MAAKyzC,MAClB,GAAIzzC,KAAKyzC,MAAMjuC,eAAeq2C,GAAS,CACrC,GAAIL,GAAOx7C,KAAKyzC,MAAMoI,EAClBL,GAAKsS,YAAc,IACrBtS,EAAKj2B,MAAQ,IAAItT,OAAOnO,OAAO03C,EAAKsS,aAAa,MAMvD,IAAKjS,IAAU77C,MAAKyzC,MACdzzC,KAAKyzC,MAAMjuC,eAAeq2C,KAC5BL,EAAOx7C,KAAKyzC,MAAMoI,GACM,GAApBL,EAAKsS,cAELtS,EAAKj2B,MADoBrf,SAAvBs1C,EAAK0S,cACM1S,EAAK0S,cAGLpqD,OAAO03C,EAAKn7C,OAuBnCT,EAAQ8kF,uBAAyB,WAC/B,GAGI7oC,GAHA0sC,EAAW,EACXC,EAAW,IACXC,EAAe,CAInB,KAAK5sC,IAAU77C,MAAKyzC,MACdzzC,KAAKyzC,MAAMjuC,eAAeq2C,KAC5B4sC,EAAezoF,KAAKyzC,MAAMoI,GAAQoS,gBAAgB5oD,OACnCojF,EAAXF,IAA0BA,EAAWE,GACrCD,EAAWC,IAAeD,EAAWC,GAI7C,IAAIF,EAAWC,EAAWxoF,KAAKwzC,UAAUiC,WAAWgB,uBAAwB,CAC1E,GAAIgvC,GAAgBzlF,KAAK45C,YAAYv0C,OACjCqjF,EAAcH,EAAWvoF,KAAKwzC,UAAUiC,WAAWgB,sBAEvD,KAAKoF,IAAU77C,MAAKyzC,MACdzzC,KAAKyzC,MAAMjuC,eAAeq2C,IACxB77C,KAAKyzC,MAAMoI,GAAQoS,gBAAgB5oD,OAASqjF,GAC9C1oF,KAAKonF,4BAA4BpnF,KAAKyzC,MAAMoI,GAIlD77C,MAAKw8C,uBACLx8C,KAAKolF,sBAEDplF,KAAK45C,YAAYv0C,QAAUogF,IAC7BzlF,KAAKutD,gBAAkB,KAe7B3tD,EAAQmlF,kBAAoB,SAASvpC,GACnC,MACE52C,MAAK+iB,IAAI6zB,EAAKrrC,EAAInQ,KAAKg6C,WAAW7pC,IAAMnQ,KAAKwzC,UAAUiC,WAAWe,kBAAkBx2C,KAAK8Z,OAEzFlV,KAAK+iB,IAAI6zB,EAAKprC,EAAIpQ,KAAKg6C,WAAW5pC,IAAMpQ,KAAKwzC,UAAUiC,WAAWe,kBAAkBx2C,KAAK8Z,OAU7Fla,EAAQglF,gBAAkB,WACxB,IAAK,GAAI1/E,GAAI,EAAGA,EAAIlF,KAAK45C,YAAYv0C,OAAQH,IAAK,CAChD,GAAIs2C,GAAOx7C,KAAKyzC,MAAMzzC,KAAK45C,YAAY10C,GACvC,IAAoB,GAAfs2C,EAAKgE,QAAkC,GAAfhE,EAAKiE,OAAkB,CAClD,GAAIj3B,GAAS,EAASxoB,KAAK45C,YAAYv0C,OAAST,KAAKmG,IAAI,IAAIywC,EAAKsK,MAC9D5D,EAAQ,EAAIt9C,KAAK8jB,GAAK9jB,KAAKE,QACZ,IAAf02C,EAAKgE,SAAkBhE,EAAKrrC,EAAIqY,EAAS5jB,KAAKwW,IAAI8mC,IACnC,GAAf1G,EAAKiE,SAAkBjE,EAAKprC,EAAIoY,EAAS5jB,KAAKqW,IAAIinC,IACtDliD,KAAK+mF,uBAAuBvrC,MAYlC57C,EAAQumF,YAAc,WAMpB,IAAK,GALDwC,GAAU,EACVC,EAAiB,EACjBC,EAAa,EACbC,EAAa,EAER5jF,EAAI,EAAGA,EAAIlF,KAAK45C,YAAYv0C,OAAQH,IAAK,CAEhD,GAAIs2C,GAAOx7C,KAAKyzC,MAAMzzC,KAAK45C,YAAY10C,GACnCs2C,GAAK8R,mBAAqBw7B,IAC5BA,EAAattC,EAAK8R,oBAEpBq7B,GAAWntC,EAAK8R,mBAChBs7B,GAAkBhkF,KAAKusB,IAAIqqB,EAAK8R,mBAAmB,GACnDu7B,GAAc,EAEhBF,GAAoBE,EACpBD,GAAkCC,CAElC,IAAIE,GAAWH,EAAiBhkF,KAAKusB,IAAIw3D,EAAQ,GAE7CK,EAAoBpkF,KAAKkoB,KAAKi8D,EAElC/oF,MAAKu4D,aAAe3zD,KAAKC,MAAM8jF,EAAU,EAAEK,GAGvChpF,KAAKu4D,aAAeuwB,IACtB9oF,KAAKu4D,aAAeuwB,IAexBlpF,EAAQsmF,sBAAwB,SAAS+C,GACvCjpF,KAAKu4D,aAAe,CACpB,IAAI2wB,GAAetkF,KAAKC,MAAM7E,KAAK45C,YAAYv0C,OAAS4jF,EACxD,KAAK,GAAIptC,KAAU77C,MAAKyzC,MAClBzzC,KAAKyzC,MAAMjuC,eAAeq2C,IACiB,GAAzC77C,KAAKyzC,MAAMoI,GAAQyR,oBAA2BttD,KAAKyzC,MAAMoI,GAAQ0Q,aAAalnD,QAAU,GACtF6jF,EAAe,IACjBlpF,KAAKynF,oBAAoBznF,KAAKyzC,MAAMoI,IAAQ,GAAK,EAAK,GACtDqtC,GAAgB,IAa1BtpF,EAAQqmF,kBAAoB,WAC1B,GAAIkD,GAAS,EACTC,EAAQ,CACZ,KAAK,GAAIvtC,KAAU77C,MAAKyzC,MAClBzzC,KAAKyzC,MAAMjuC,eAAeq2C,KACiB,GAAzC77C,KAAKyzC,MAAMoI,GAAQyR,oBAA2BttD,KAAKyzC,MAAMoI,GAAQ0Q,aAAalnD,QAAU,IAC1F8jF,GAAU,GAEZC,GAAS,EAGb,OAAOD,GAAOC,IAMZ,SAASvpF,EAAQD,EAASM,GAE9B,GAAIS,GAAOT,EAAoB,EAgB/BN,GAAQm9C,iBAAmB,WACzB/8C,KAAKgjD,QAAgB,OAAEhjD,KAAKglF,WAAWvxC,MAAQzzC,KAAKyzC,MACpDzzC,KAAKgjD,QAAgB,OAAEhjD,KAAKglF,WAAW5wC,MAAQp0C,KAAKo0C,MACpDp0C,KAAKgjD,QAAgB,OAAEhjD,KAAKglF,WAAWprC,YAAc55C,KAAK45C;EAa5Dh6C,EAAQypF,gBAAkB,SAASC,EAAUC,GACxBrjF,SAAfqjF,GAA0C,UAAdA,EAC9BvpF,KAAKwpF,sBAAsBF,GAG3BtpF,KAAKypF,sBAAsBH,IAY/B1pF,EAAQ4pF,sBAAwB,SAASF,GACvCtpF,KAAK45C,YAAc55C,KAAKgjD,QAAgB,OAAEsmC,GAAuB,YACjEtpF,KAAKyzC,MAAczzC,KAAKgjD,QAAgB,OAAEsmC,GAAiB,MAC3DtpF,KAAKo0C,MAAcp0C,KAAKgjD,QAAgB,OAAEsmC,GAAiB,OAU7D1pF,EAAQ8pF,uBAAyB,WAC/B1pF,KAAK45C,YAAc55C,KAAKgjD,QAAiB,QAAe,YACxDhjD,KAAKyzC,MAAczzC,KAAKgjD,QAAiB,QAAS,MAClDhjD,KAAKo0C,MAAcp0C,KAAKgjD,QAAiB,QAAS,OAWpDpjD,EAAQ6pF,sBAAwB,SAASH,GACvCtpF,KAAK45C,YAAc55C,KAAKgjD,QAAgB,OAAEsmC,GAAuB,YACjEtpF,KAAKyzC,MAAczzC,KAAKgjD,QAAgB,OAAEsmC,GAAiB,MAC3DtpF,KAAKo0C,MAAcp0C,KAAKgjD,QAAgB,OAAEsmC,GAAiB,OAU7D1pF,EAAQ+pF,kBAAoB,WAC1B3pF,KAAKqpF,gBAAgBrpF,KAAKglF,YAU5BplF,EAAQolF,QAAU,WAChB,MAAOhlF,MAAKw4D,aAAax4D,KAAKw4D,aAAanzD,OAAO,IAUpDzF,EAAQgqF,gBAAkB,WACxB,GAAI5pF,KAAKw4D,aAAanzD,OAAS,EAC7B,MAAOrF,MAAKw4D,aAAax4D,KAAKw4D,aAAanzD,OAAO,EAGlD,MAAM,IAAIU,WAAU,iEAaxBnG,EAAQiqF,iBAAmB,SAASC,GAClC9pF,KAAKw4D,aAAa5wD,KAAKkiF,IAUzBlqF,EAAQmqF,kBAAoB,WAC1B/pF,KAAKw4D,aAAa7mB,OAWpB/xC,EAAQoqF,iBAAmB,SAASF,GAElC9pF,KAAKgjD,QAAgB,OAAE8mC,IAAUr2C,SACAW,SACAwF,eACAiU,eAAkB7tD,KAAK8Z,MACvB2+C,YAAevyD,QAGhDlG,KAAKgjD,QAAgB,OAAE8mC,GAAoB,YAAI,GAAI3mF,OAC9C9C,GAAGypF,EACFv/E,OACEa,WAAY,UACZC,OAAQ,iBAEJrL,KAAKwzC,WACjBxzC,KAAKgjD,QAAgB,OAAE8mC,GAAoB,YAAEh8B,YAAc,GAW7DluD,EAAQqqF,oBAAsB,SAASX,SAC9BtpF,MAAKgjD,QAAgB,OAAEsmC,IAWhC1pF,EAAQsqF,oBAAsB,SAASZ,SAC9BtpF,MAAKgjD,QAAgB,OAAEsmC,IAWhC1pF,EAAQuqF,cAAgB,SAASb,GAE/BtpF,KAAKgjD,QAAgB,OAAEsmC,GAAYtpF,KAAKgjD,QAAgB,OAAEsmC,GAG1DtpF,KAAKiqF,oBAAoBX,IAW3B1pF,EAAQwqF,gBAAkB,SAASd,GAEjCtpF,KAAKgjD,QAAgB,OAAEsmC,GAAYtpF,KAAKgjD,QAAgB,OAAEsmC,GAG1DtpF,KAAKkqF,oBAAoBZ,IAa3B1pF,EAAQyqF,qBAAuB,SAASf,GAEtC,IAAK,GAAIztC,KAAU77C,MAAKyzC,MAClBzzC,KAAKyzC,MAAMjuC,eAAeq2C,KAC5B77C,KAAKgjD,QAAgB,OAAEsmC,GAAiB,MAAEztC,GAAU77C,KAAKyzC,MAAMoI,GAKnE,KAAK,GAAIqF,KAAUlhD,MAAKo0C,MAClBp0C,KAAKo0C,MAAM5uC,eAAe07C,KAC5BlhD,KAAKgjD,QAAgB,OAAEsmC,GAAiB,MAAEpoC,GAAUlhD,KAAKo0C,MAAM8M,GAKnE,KAAK,GAAIh8C,GAAI,EAAGA,EAAIlF,KAAK45C,YAAYv0C,OAAQH,IAC3ClF,KAAKgjD,QAAgB,OAAEsmC,GAAuB,YAAE1hF,KAAK5H,KAAK45C,YAAY10C,KAW1EtF,EAAQ0qF,6BAA+B,WACrCtqF,KAAKqkF,aAAa,GAAE,IAUtBzkF,EAAQqlF,WAAa,SAASzpC,GAE5B,GAAI+uC,GAASvqF,KAAKglF,gBAWXhlF,MAAKyzC,MAAM+H,EAAKn7C,GAEvB,IAAImqF,GAAmB7pF,EAAK+D,YAG5B1E,MAAKmqF,cAAcI,GAGnBvqF,KAAKgqF,iBAAiBQ,GAGtBxqF,KAAK6pF,iBAAiBW,GAGtBxqF,KAAKqpF,gBAAgBrpF,KAAKglF,WAG1BhlF,KAAKyzC,MAAM+H,EAAKn7C,IAAMm7C,GAUxB57C,EAAQ8lF,gBAAkB,WAExB,GAAI6E,GAASvqF,KAAKglF,SAGlB,IAAc,WAAVuF,IAC8B,GAA3BvqF,KAAK45C,YAAYv0C,QACpBrF,KAAKgjD,QAAgB,OAAEunC,GAAqB,YAAE35E,MAAM5Q,KAAK8Z,MAAQ9Z,KAAKwzC,UAAUiC,WAAWO,oBAAsBh2C,KAAKmc,MAAMC,OAAOC,aACnIrc,KAAKgjD,QAAgB,OAAEunC,GAAqB,YAAE15E,OAAO7Q,KAAK8Z,MAAQ9Z,KAAKwzC,UAAUiC,WAAWO,oBAAsBh2C,KAAKmc,MAAMC,OAAOsF,cAAe,CACnJ,GAAI+oE,GAAiBzqF,KAAK4pF,iBAG1B5pF,MAAKsqF,+BAILtqF,KAAKqqF,qBAAqBI,GAI1BzqF,KAAKiqF,oBAAoBM,GAGzBvqF,KAAKoqF,gBAAgBK,GAGrBzqF,KAAKqpF,gBAAgBoB,GAGrBzqF,KAAK+pF,oBAGL/pF,KAAKw8C,uBAGLx8C,KAAKoiD,4BAeXxiD,EAAQklD,sBAAwB,SAAS4lC,EAAYC,GACnD,GAAiBzkF,SAAbykF,EACF,IAAK,GAAIJ,KAAUvqF,MAAKgjD,QAAgB,OAClChjD,KAAKgjD,QAAgB,OAAEx9C,eAAe+kF,KAExCvqF,KAAKwpF,sBAAsBe,GAC3BvqF,KAAK0qF,UAKT,KAAK,GAAIH,KAAUvqF,MAAKgjD,QAAgB,OACtC,GAAIhjD,KAAKgjD,QAAgB,OAAEx9C,eAAe+kF,GAAS,CAEjDvqF,KAAKwpF,sBAAsBe,EAC3B,IAAIl2D,GAAO1uB,MAAM4L,UAAUvJ,OAAOzH,KAAK6E,UAAW,EAC9CivB,GAAKhvB,OAAS,EAChBrF,KAAK0qF,GAAar2D,EAAK,GAAGA,EAAK,IAG/Br0B,KAAK0qF,GAAaC,GAM1B3qF,KAAK2pF,qBAaP/pF,EAAQmlD,mBAAqB,SAAS2lC,EAAYC,GAChD,GAAiBzkF,SAAbykF,EACF3qF,KAAK0pF,yBACL1pF,KAAK0qF,SAEF,CACH1qF,KAAK0pF,wBACL,IAAIr1D,GAAO1uB,MAAM4L,UAAUvJ,OAAOzH,KAAK6E,UAAW,EAC9CivB,GAAKhvB,OAAS,EAChBrF,KAAK0qF,GAAar2D,EAAK,GAAGA,EAAK,IAG/Br0B,KAAK0qF,GAAaC,GAItB3qF,KAAK2pF,qBAaP/pF,EAAQgrF,sBAAwB,SAASF,EAAYC,GACnD,GAAiBzkF,SAAbykF,EACF,IAAK,GAAIJ,KAAUvqF,MAAKgjD,QAAgB,OAClChjD,KAAKgjD,QAAgB,OAAEx9C,eAAe+kF,KAExCvqF,KAAKypF,sBAAsBc,GAC3BvqF,KAAK0qF,UAKT,KAAK,GAAIH,KAAUvqF,MAAKgjD,QAAgB,OACtC,GAAIhjD,KAAKgjD,QAAgB,OAAEx9C,eAAe+kF,GAAS,CAEjDvqF,KAAKypF,sBAAsBc,EAC3B,IAAIl2D,GAAO1uB,MAAM4L,UAAUvJ,OAAOzH,KAAK6E,UAAW,EAC9CivB,GAAKhvB,OAAS,EAChBrF,KAAK0qF,GAAar2D,EAAK,GAAGA,EAAK,IAG/Br0B,KAAK0qF,GAAaC,GAK1B3qF,KAAK2pF,qBAaP/pF,EAAQyjD,gBAAkB,SAASqnC,EAAYC,GAC7C,GAAIt2D,GAAO1uB,MAAM4L,UAAUvJ,OAAOzH,KAAK6E,UAAW,EACjCc,UAAbykF,GACF3qF,KAAK8kD,sBAAsB4lC,GAC3B1qF,KAAK4qF,sBAAsBF,IAGvBr2D,EAAKhvB,OAAS,GAChBrF,KAAK8kD,sBAAsB4lC,EAAYr2D,EAAK,GAAGA,EAAK,IACpDr0B,KAAK4qF,sBAAsBF,EAAYr2D,EAAK,GAAGA,EAAK,MAGpDr0B,KAAK8kD,sBAAsB4lC,EAAYC,GACvC3qF,KAAK4qF,sBAAsBF,EAAYC,KAY7C/qF,EAAQ68C,oBAAsB,WAC5B,GAAI8tC,GAASvqF,KAAKglF,SAClBhlF,MAAKgjD,QAAgB,OAAEunC,GAAqB,eAC5CvqF,KAAK45C,YAAc55C,KAAKgjD,QAAgB,OAAEunC,GAAqB,aAWjE3qF,EAAQirF,iBAAmB,SAASjnE,EAAI2lE,GACtC,GAAsD/tC,GAAlDC,EAAO,IAAKC,EAAO,KAAMC,EAAO,IAAKC,EAAO,IAChD,KAAK,GAAI2uC,KAAUvqF,MAAKgjD,QAAQumC,GAC9B,GAAIvpF,KAAKgjD,QAAQumC,GAAY/jF,eAAe+kF,IACcrkF,SAApDlG,KAAKgjD,QAAQumC,GAAYgB,GAAqB,YAAiB,CAEjEvqF,KAAKqpF,gBAAgBkB,EAAOhB,GAE5B9tC,EAAO,IAAKC,EAAO,KAAMC,EAAO,IAAKC,EAAO,IAC5C,KAAK,GAAIC,KAAU77C,MAAKyzC,MAClBzzC,KAAKyzC,MAAMjuC,eAAeq2C,KAC5BL,EAAOx7C,KAAKyzC,MAAMoI,GAClBL,EAAKqN,OAAOjlC,GACR+3B,EAAOH,EAAKrrC,EAAI,GAAMqrC,EAAK5qC,QAAQ+qC,EAAOH,EAAKrrC,EAAI,GAAMqrC,EAAK5qC,OAC9DgrC,EAAOJ,EAAKrrC,EAAI,GAAMqrC,EAAK5qC,QAAQgrC,EAAOJ,EAAKrrC,EAAI,GAAMqrC,EAAK5qC,OAC9D6qC,EAAOD,EAAKprC,EAAI,GAAMorC,EAAK3qC,SAAS4qC,EAAOD,EAAKprC,EAAI,GAAMorC,EAAK3qC,QAC/D6qC,EAAOF,EAAKprC,EAAI,GAAMorC,EAAK3qC,SAAS6qC,EAAOF,EAAKprC,EAAI,GAAMorC,EAAK3qC,QAGvE2qC,GAAOx7C,KAAKgjD,QAAQumC,GAAYgB,GAAqB,YACrD/uC,EAAKrrC,EAAI,IAAOyrC,EAAOD,GACvBH,EAAKprC,EAAI,IAAOsrC,EAAOD,GACvBD,EAAK5qC,MAAQ,GAAK4qC,EAAKrrC,EAAIwrC,GAC3BH,EAAK3qC,OAAS,GAAK2qC,EAAKprC,EAAIqrC,GAC5BD,EAAKhzB,OAAS5jB,KAAKkoB,KAAKloB,KAAKusB,IAAI,GAAIqqB,EAAK5qC,MAAM,GAAKhM,KAAKusB,IAAI,GAAIqqB,EAAK3qC,OAAO,IAC9E2qC,EAAK1d,SAAS99B,KAAK8Z,OACnB0hC,EAAKkT,YAAY9qC,KAMzBhkB,EAAQkrF,oBAAsB,SAASlnE,GACrC5jB,KAAK6qF,iBAAiBjnE,EAAI,UAC1B5jB,KAAK6qF,iBAAiBjnE,EAAI,UAC1B5jB,KAAK2pF,sBAMH,SAAS9pF,EAAQD,EAASM,GAE9B,GAAIiD,GAAOjD,EAAoB,GAS/BN,GAAQmrF,yBAA2B,SAASpnF,EAAQqnF,GAClD,GAAIv3C,GAAQzzC,KAAKyzC,KACjB,KAAK,GAAIoI,KAAUpI,GACbA,EAAMjuC,eAAeq2C,IACnBpI,EAAMoI,GAAQ2F,kBAAkB79C,IAClCqnF,EAAiBpjF,KAAKi0C,IAY9Bj8C,EAAQqrF,4BAA8B,SAAUtnF,GAC9C,GAAIqnF,KAEJ,OADAhrF,MAAK8kD,sBAAsB,2BAA2BnhD,EAAOqnF,GACtDA,GAWTprF,EAAQsrF,yBAA2B,SAAS9vD,GAC1C,GAAIjrB,GAAInQ,KAAK2/C,qBAAqBvkB,EAAQjrB,GACtCC,EAAIpQ,KAAK6/C,qBAAqBzkB,EAAQhrB,EAE1C,QACEnJ,KAAQkJ,EACR9I,IAAQ+I,EACR8T,MAAQ/T,EACRgQ,OAAQ/P,IAYZxQ,EAAQs/C,WAAa,SAAU9jB,GAE7B,GAAI+vD,GAAiBnrF,KAAKkrF,yBAAyB9vD,GAC/C4vD,EAAmBhrF,KAAKirF,4BAA4BE,EAIxD,OAAIH,GAAiB3lF,OAAS,EACpBrF,KAAKyzC,MAAMu3C,EAAiBA,EAAiB3lF,OAAS,IAGvD,MAWXzF,EAAQwrF,yBAA2B,SAAUznF,EAAQ0nF,GACnD,GAAIj3C,GAAQp0C,KAAKo0C,KACjB,KAAK,GAAI8M,KAAU9M,GACbA,EAAM5uC,eAAe07C,IACnB9M,EAAM8M,GAAQM,kBAAkB79C,IAClC0nF,EAAiBzjF,KAAKs5C,IAa9BthD,EAAQ0rF,4BAA8B,SAAU3nF,GAC9C,GAAI0nF,KAEJ,OADArrF,MAAK8kD,sBAAsB,2BAA2BnhD,EAAO0nF,GACtDA,GAWTzrF,EAAQuhD,WAAa,SAAS/lB,GAC5B,GAAI+vD,GAAiBnrF,KAAKkrF,yBAAyB9vD,GAC/CiwD,EAAmBrrF,KAAKsrF,4BAA4BH,EAExD,OAAIE,GAAiBhmF,OAAS,EACrBrF,KAAKo0C,MAAMi3C,EAAiBA,EAAiBhmF,OAAS,IAGtD,MAWXzF,EAAQ2rF,gBAAkB,SAAS1rE,GAC7BA,YAAe1c,GACjBnD,KAAKu/C,aAAa9L,MAAM5zB,EAAIxf,IAAMwf,EAGlC7f,KAAKu/C,aAAanL,MAAMv0B,EAAIxf,IAAMwf,GAUtCjgB,EAAQ4rF,YAAc,SAAS3rE,GACzBA,YAAe1c,GACjBnD,KAAK04C,SAASjF,MAAM5zB,EAAIxf,IAAMwf,EAG9B7f,KAAK04C,SAAStE,MAAMv0B,EAAIxf,IAAMwf,GAWlCjgB,EAAQ6rF,qBAAuB,SAAS5rE,GAClCA,YAAe1c,SACVnD,MAAKu/C,aAAa9L,MAAM5zB,EAAIxf,UAG5BL,MAAKu/C,aAAanL,MAAMv0B,EAAIxf,KAUvCT,EAAQ6mF,aAAe,SAASiF,GACTxlF,SAAjBwlF,IACFA,GAAe,EAEjB,KAAI,GAAI7vC,KAAU77C,MAAKu/C,aAAa9L,MAC/BzzC,KAAKu/C,aAAa9L,MAAMjuC,eAAeq2C,IACxC77C,KAAKu/C,aAAa9L,MAAMoI,GAAQpT,UAGpC,KAAI,GAAIyY,KAAUlhD,MAAKu/C,aAAanL,MAC/Bp0C,KAAKu/C,aAAanL,MAAM5uC,eAAe07C,IACxClhD,KAAKu/C,aAAanL,MAAM8M,GAAQzY,UAIpCzoC,MAAKu/C,cAAgB9L,SAASW,UAEV,GAAhBs3C,GACF1rF,KAAK6qB,KAAK,SAAU7qB,KAAKg2B,iBAU7Bp2B,EAAQ+rF,kBAAoB,SAASD,GACdxlF,SAAjBwlF,IACFA,GAAe,EAGjB,KAAK,GAAI7vC,KAAU77C,MAAKu/C,aAAa9L,MAC/BzzC,KAAKu/C,aAAa9L,MAAMjuC,eAAeq2C,IACrC77C,KAAKu/C,aAAa9L,MAAMoI,GAAQiS,YAAc,IAChD9tD,KAAKu/C,aAAa9L,MAAMoI,GAAQpT,WAChCzoC,KAAKyrF,qBAAqBzrF,KAAKu/C,aAAa9L,MAAMoI,IAKpC,IAAhB6vC,GACF1rF,KAAK6qB,KAAK,SAAU7qB,KAAKg2B,iBAW7Bp2B,EAAQgsF,sBAAwB,WAC9B,GAAIx2E,GAAQ,CACZ,KAAK,GAAIymC,KAAU77C,MAAKu/C,aAAa9L,MAC/BzzC,KAAKu/C,aAAa9L,MAAMjuC,eAAeq2C,KACzCzmC,GAAS,EAGb,OAAOA,IASTxV,EAAQisF,iBAAmB,WACzB,IAAK,GAAIhwC,KAAU77C,MAAKu/C,aAAa9L,MACnC,GAAIzzC,KAAKu/C,aAAa9L,MAAMjuC,eAAeq2C,GACzC,MAAO77C,MAAKu/C,aAAa9L,MAAMoI,EAGnC,OAAO,OASTj8C,EAAQksF,iBAAmB,WACzB,IAAK,GAAI5qC,KAAUlhD,MAAKu/C,aAAanL,MACnC,GAAIp0C,KAAKu/C,aAAanL,MAAM5uC,eAAe07C,GACzC,MAAOlhD,MAAKu/C,aAAanL,MAAM8M,EAGnC,OAAO,OAUTthD,EAAQmsF,sBAAwB,WAC9B,GAAI32E,GAAQ,CACZ,KAAK,GAAI8rC,KAAUlhD,MAAKu/C,aAAanL,MAC/Bp0C,KAAKu/C,aAAanL,MAAM5uC,eAAe07C,KACzC9rC,GAAS,EAGb,OAAOA,IAUTxV,EAAQosF,wBAA0B,WAChC,GAAI52E,GAAQ,CACZ,KAAI,GAAIymC,KAAU77C,MAAKu/C,aAAa9L,MAC/BzzC,KAAKu/C,aAAa9L,MAAMjuC,eAAeq2C,KACxCzmC,GAAS,EAGb,KAAI,GAAI8rC,KAAUlhD,MAAKu/C,aAAanL,MAC/Bp0C,KAAKu/C,aAAanL,MAAM5uC,eAAe07C,KACxC9rC,GAAS,EAGb,OAAOA,IASTxV,EAAQqsF,kBAAoB,WAC1B,IAAI,GAAIpwC,KAAU77C,MAAKu/C,aAAa9L,MAClC,GAAGzzC,KAAKu/C,aAAa9L,MAAMjuC,eAAeq2C,GACxC,OAAO,CAGX,KAAI,GAAIqF,KAAUlhD,MAAKu/C,aAAanL,MAClC,GAAGp0C,KAAKu/C,aAAanL,MAAM5uC,eAAe07C,GACxC,OAAO,CAGX,QAAO,GAUTthD,EAAQssF,oBAAsB,WAC5B,IAAI,GAAIrwC,KAAU77C,MAAKu/C,aAAa9L,MAClC,GAAGzzC,KAAKu/C,aAAa9L,MAAMjuC,eAAeq2C,IACpC77C,KAAKu/C,aAAa9L,MAAMoI,GAAQiS,YAAc,EAChD,OAAO,CAIb,QAAO,GASTluD,EAAQusF,sBAAwB,SAAS3wC,GACvC,IAAK,GAAIt2C,GAAI,EAAGA,EAAIs2C,EAAK+Q,aAAalnD,OAAQH,IAAK,CACjD,GAAIu8C,GAAOjG,EAAK+Q,aAAarnD,EAC7Bu8C,GAAK/Y,SACL1oC,KAAKurF,gBAAgB9pC,KAUzB7hD,EAAQwsF,qBAAuB,SAAS5wC,GACtC,IAAK,GAAIt2C,GAAI,EAAGA,EAAIs2C,EAAK+Q,aAAalnD,OAAQH,IAAK,CACjD,GAAIu8C,GAAOjG,EAAK+Q,aAAarnD,EAC7Bu8C,GAAKl2C,OAAQ,EACbvL,KAAKwrF,YAAY/pC,KAWrB7hD,EAAQysF,wBAA0B,SAAS7wC,GACzC,IAAK,GAAIt2C,GAAI,EAAGA,EAAIs2C,EAAK+Q,aAAalnD,OAAQH,IAAK,CACjD,GAAIu8C,GAAOjG,EAAK+Q,aAAarnD,EAC7Bu8C,GAAKhZ,WACLzoC,KAAKyrF,qBAAqBhqC,KAgB9B7hD,EAAQy/C,cAAgB,SAAS17C,EAAQ2oF,EAAQZ,EAAca,GACxCrmF,SAAjBwlF,IACFA,GAAe,GAEMxlF,SAAnBqmF,IACFA,GAAiB,GAGa,GAA5BvsF,KAAKisF,qBAA0C,GAAVK,GAAgD,GAA7BtsF,KAAK24D,sBAC/D34D,KAAKymF,cAAa,GAGG,GAAnB9iF,EAAO2mC,UACT3mC,EAAO+kC,SACP1oC,KAAKurF,gBAAgB5nF,GACjBA,YAAkBR,IAA6C,GAArCnD,KAAK04D,8BAA2D,GAAlB6zB,GAC1EvsF,KAAKmsF,sBAAsBxoF,KAI7BA,EAAO8kC,WACPzoC,KAAKyrF,qBAAqB9nF,IAGR,GAAhB+nF,GACF1rF,KAAK6qB,KAAK,SAAU7qB,KAAKg2B,iBAY7Bp2B,EAAQyhD,YAAc,SAAS19C,GACT,GAAhBA,EAAO4H,QACT5H,EAAO4H,OAAQ,EACfvL,KAAK6qB,KAAK,YAAY2wB,KAAK73C,EAAOtD,OAWtCT,EAAQwhD,aAAe,SAASz9C,GACV,GAAhBA,EAAO4H,QACT5H,EAAO4H,OAAQ,EACfvL,KAAKwrF,YAAY7nF,GACbA,YAAkBR,IACpBnD,KAAK6qB,KAAK,aAAa2wB,KAAK73C,EAAOtD,MAGnCsD,YAAkBR,IACpBnD,KAAKosF,qBAAqBzoF,IAa9B/D,EAAQo/C,aAAe,aAUvBp/C,EAAQmgD,WAAa,SAAS3kB,GAC5B,GAAIogB,GAAOx7C,KAAKk/C,WAAW9jB,EAC3B,IAAY,MAARogB,EACFx7C,KAAKq/C,cAAc7D,GAAK,OAErB,CACH,GAAIiG,GAAOzhD,KAAKmhD,WAAW/lB,EACf,OAARqmB,EACFzhD,KAAKq/C,cAAcoC,GAAK,GAGxBzhD,KAAKymF,eAGTzmF,KAAK6qB,KAAK,QAAS7qB,KAAKg2B,gBACxBh2B,KAAK84C,WAUPl5C,EAAQogD,iBAAmB,SAAS5kB,GAClC,GAAIogB,GAAOx7C,KAAKk/C,WAAW9jB,EACf,OAARogB,GAAyBt1C,SAATs1C,IAElBx7C,KAAKg6C,YAAe7pC,EAAMnQ,KAAK2/C,qBAAqBvkB,EAAQjrB,GACxCC,EAAMpQ,KAAK6/C,qBAAqBzkB,EAAQhrB,IAC5DpQ,KAAK6kF,YAAYrpC,IAEnBx7C,KAAK6qB,KAAK,cAAe7qB,KAAKg2B,iBAUhCp2B,EAAQqgD,cAAgB,SAAS7kB,GAC/B,GAAIogB,GAAOx7C,KAAKk/C,WAAW9jB,EAC3B,IAAY,MAARogB,EACFx7C,KAAKq/C,cAAc7D,GAAK,OAErB,CACH,GAAIiG,GAAOzhD,KAAKmhD,WAAW/lB,EACf,OAARqmB,GACFzhD,KAAKq/C,cAAcoC,GAAK,GAG5BzhD,KAAK84C,WASPl5C,EAAQsgD,iBAAmB,aAW3BtgD,EAAQo2B,aAAe,WACrB,GAAIw2D,GAAUxsF,KAAKysF,mBACfC,EAAU1sF,KAAK2sF,kBACnB,QAAQl5C,MAAM+4C,EAASp4C,MAAMs4C,IAS/B9sF,EAAQ6sF,iBAAmB,WACzB,GAAIG,KACJ,KAAI,GAAI/wC,KAAU77C,MAAKu/C,aAAa9L,MAC/BzzC,KAAKu/C,aAAa9L,MAAMjuC,eAAeq2C,IACxC+wC,EAAQhlF,KAAKi0C,EAGjB,OAAO+wC,IASThtF,EAAQ+sF,iBAAmB,WACzB,GAAIC,KACJ,KAAI,GAAI1rC,KAAUlhD,MAAKu/C,aAAanL,MAC/Bp0C,KAAKu/C,aAAanL,MAAM5uC,eAAe07C,IACxC0rC,EAAQhlF,KAAKs5C,EAGjB,OAAO0rC,IASThtF,EAAQm2B,aAAe,SAAS6R,GAC9B,GAAI1iC,GAAG+2B,EAAM57B,CAEb,KAAKunC,GAAkC1hC,QAApB0hC,EAAUviC,OAC3B,KAAM,qCAKR,KAFArF,KAAKymF,cAAa,GAEbvhF,EAAI,EAAG+2B,EAAO2L,EAAUviC,OAAY42B,EAAJ/2B,EAAUA,IAAK,CAClD7E,EAAKunC,EAAU1iC,EAEf,IAAIs2C,GAAOx7C,KAAKyzC,MAAMpzC,EACtB,KAAKm7C,EACH,KAAM,IAAIqxC,YAAW,iBAAmBxsF,EAAK,cAE/CL,MAAKq/C,cAAc7D,GAAK,GAAK,GAG/B7sC,QAAQC,IAAI,+DAEZ5O,KAAKse,UAUP1e,EAAQktF,YAAc,SAASllD,EAAW2kD,GACxC,GAAIrnF,GAAG+2B,EAAM57B,CAEb,KAAKunC,GAAkC1hC,QAApB0hC,EAAUviC,OAC3B,KAAM,qCAKR,KAFArF,KAAKymF,cAAa,GAEbvhF,EAAI,EAAG+2B,EAAO2L,EAAUviC,OAAY42B,EAAJ/2B,EAAUA,IAAK,CAClD7E,EAAKunC,EAAU1iC,EAEf,IAAIs2C,GAAOx7C,KAAKyzC,MAAMpzC,EACtB,KAAKm7C,EACH,KAAM,IAAIqxC,YAAW,iBAAmBxsF,EAAK,cAE/CL,MAAKq/C,cAAc7D,GAAK,GAAK,EAAK+wC,GAEpCvsF,KAAKse,UASP1e,EAAQmtF,YAAc,SAASnlD,GAC7B,GAAI1iC,GAAG+2B,EAAM57B,CAEb,KAAKunC,GAAkC1hC,QAApB0hC,EAAUviC,OAC3B,KAAM,qCAKR,KAFArF,KAAKymF,cAAa,GAEbvhF,EAAI,EAAG+2B,EAAO2L,EAAUviC,OAAY42B,EAAJ/2B,EAAUA,IAAK,CAClD7E,EAAKunC,EAAU1iC,EAEf,IAAIu8C,GAAOzhD,KAAKo0C,MAAM/zC,EACtB,KAAKohD,EACH,KAAM,IAAIorC,YAAW,iBAAmBxsF,EAAK,cAE/CL,MAAKq/C,cAAcoC,GAAK,GAAK,EAAK8qC,gBAEpCvsF,KAAKse,UAOP1e,EAAQqiD,iBAAmB,WACzB,IAAI,GAAIpG,KAAU77C,MAAKu/C,aAAa9L,MAC/BzzC,KAAKu/C,aAAa9L,MAAMjuC,eAAeq2C,KACnC77C,KAAKyzC,MAAMjuC,eAAeq2C,UACtB77C,MAAKu/C,aAAa9L,MAAMoI,GAIrC,KAAI,GAAIqF,KAAUlhD,MAAKu/C,aAAanL,MAC/Bp0C,KAAKu/C,aAAanL,MAAM5uC,eAAe07C,KACnClhD,KAAKo0C,MAAM5uC,eAAe07C,UACtBlhD,MAAKu/C,aAAanL,MAAM8M,MASnC,SAASrhD,EAAQD,EAASM,GAE9B,GAAIS,GAAOT,EAAoB,GAC3BiD,EAAOjD,EAAoB,IAC3B8C,EAAO9C,EAAoB,GAO/BN,GAAQotF,qBAAuB,WAC7B,KAAOhtF,KAAK8hD,gBAAgBvhC,iBAC1BvgB,KAAK8hD,gBAAgBtyC,YAAYxP,KAAK8hD,gBAAgBthC,aAW1D5gB,EAAQqtF,4BAA8B,WACpC,IAAK,GAAIC,KAAgBltF,MAAKy5C,gBACxBz5C,KAAKy5C,gBAAgBj0C,eAAe0nF,KACtCltF,KAAKktF,GAAgBltF,KAAKy5C,gBAAgByzC,KAUhDttF,EAAQutF,gBAAkB,WACxBntF,KAAKs9C,UAAYt9C,KAAKs9C,QACtB,IAAI8vC,GAAUx9E,SAASy9E,eAAe,2BAClCx0B,EAAWjpD,SAASy9E,eAAe,iCACnCz0B,EAAchpD,SAASy9E,eAAe,gCACrB,IAAjBrtF,KAAKs9C,UACP8vC,EAAQ58E,MAAM+wB,QAAQ,QACtBs3B,EAASroD,MAAM+wB,QAAQ,QACvBq3B,EAAYpoD,MAAM+wB,QAAQ,OAC1Bs3B,EAASvpC,QAAUtvB,KAAKmtF,gBAAgBl7D,KAAKjyB,QAG7CotF,EAAQ58E,MAAM+wB,QAAQ,OACtBs3B,EAASroD,MAAM+wB,QAAQ,OACvBq3B,EAAYpoD,MAAM+wB,QAAQ,QAC1Bs3B,EAASvpC,QAAU,MAErBtvB,KAAK2+C,yBAQP/+C,EAAQ++C,sBAAwB,WAuB9B,GArBI3+C,KAAKstF,eACPttF,KAAK2R,IAAI,SAAU3R,KAAKstF,eAGGpnF,SAAzBlG,KAAKutF,kBACPvtF,KAAKutF,gBAAgB9hC,uBACrBzrD,KAAKutF,gBAAkBrnF,OACvBlG,KAAKwtF,oBAAsB,KAC3BxtF,KAAK24C,oBAAqB,GAI5B34C,KAAKitF,8BAGLjtF,KAAKw5C,kBAAmB,EAGxBx5C,KAAK04D,8BAA+B,EACpC14D,KAAK24D,sBAAuB,EAEP,GAAjB34D,KAAKs9C,SAAkB,CACzB,KAAOt9C,KAAK8hD,gBAAgBvhC,iBAC1BvgB,KAAK8hD,gBAAgBtyC,YAAYxP,KAAK8hD,gBAAgBthC,WAGxDxgB,MAAK8hD,gBAAgBhhC,UAAY,oHAEc9gB,KAAKwzC,UAAUjT,OAAY,IAAG,mLAG9BvgC,KAAKwzC,UAAUjT,OAAa,KAAG,iBAC1C,GAAhCvgC,KAAK4rF,yBAAgC5rF,KAAKmzC,iBAAiBC,KAC7DpzC,KAAK8hD,gBAAgBhhC,WAAa,+JAGa9gB,KAAKwzC,UAAUjT,OAAiB,SAAG,iBAE3C,GAAhCvgC,KAAK+rF,yBAAgE,GAAhC/rF,KAAK4rF,0BACjD5rF,KAAK8hD,gBAAgBhhC,WAAa,+JAGW9gB,KAAKwzC,UAAUjT,OAAiB,SAAG,kBAElD,GAA5BvgC,KAAKisF,sBACPjsF,KAAK8hD,gBAAgBhhC,WAAa,+JAGa9gB,KAAKwzC,UAAUjT,OAAY,IAAG,iBAK/E,IAAIktD,GAAgB79E,SAASy9E,eAAe,6BAC5CI,GAAcn+D,QAAUtvB,KAAK0tF,sBAAsBz7D,KAAKjyB,KACxD,IAAI2tF,GAAgB/9E,SAASy9E,eAAe,iCAE5C,IADAM,EAAcr+D,QAAUtvB,KAAK4tF,sBAAsB37D,KAAKjyB,MACpB,GAAhCA,KAAK4rF,yBAAgC5rF,KAAKmzC,iBAAiBC,KAAM,CACnE,GAAIy6C,GAAaj+E,SAASy9E,eAAe,8BACzCQ,GAAWv+D,QAAUtvB,KAAK8tF,UAAU77D,KAAKjyB,UAEtC,IAAoC,GAAhCA,KAAK+rF,yBAAgE,GAAhC/rF,KAAK4rF,wBAA8B,CAC/E,GAAIiC,GAAaj+E,SAASy9E,eAAe,8BACzCQ,GAAWv+D,QAAUtvB,KAAK+tF,uBAAuB97D,KAAKjyB,MAExD,GAAgC,GAA5BA,KAAKisF,oBAA8B,CACrC,GAAIj6C,GAAepiC,SAASy9E,eAAe,4BAC3Cr7C,GAAa1iB,QAAUtvB,KAAK4+C,gBAAgB3sB,KAAKjyB,MAEnD,GAAI64D,GAAWjpD,SAASy9E,eAAe,gCACvCx0B,GAASvpC,QAAUtvB,KAAKmtF,gBAAgBl7D,KAAKjyB,MAE7CA,KAAKstF,cAAgBttF,KAAK2+C,sBAAsB1sB,KAAKjyB,MACrDA,KAAKwR,GAAG,SAAUxR,KAAKstF,mBAEpB,CACHttF,KAAK44D,YAAY93C,UAAY,qIAEkB9gB,KAAKwzC,UAAUjT,OAAa,KAAI,gBAC/E,IAAIytD,GAAiBp+E,SAASy9E,eAAe,oCAC7CW,GAAe1+D,QAAUtvB,KAAKmtF,gBAAgBl7D,KAAKjyB,QAWvDJ,EAAQ8tF,sBAAwB,WAE9B1tF,KAAKgtF,uBACDhtF,KAAKstF,eACPttF,KAAK2R,IAAI,SAAU3R,KAAKstF,eAI1BttF,KAAK8hD,gBAAgBhhC,UAAY,kHAEc9gB,KAAKwzC,UAAUjT,OAAa,KAAI,wMAGFvgC,KAAKwzC,UAAUjT,OAAuB,eAAI,gBAGvH,IAAI0tD,GAAar+E,SAASy9E,eAAe,0BACzCY,GAAW3+D,QAAUtvB,KAAK2+C,sBAAsB1sB,KAAKjyB,MAGrDA,KAAKstF,cAAgBttF,KAAKkuF,SAASj8D,KAAKjyB,MACxCA,KAAKwR,GAAG,SAAUxR,KAAKstF,gBASzB1tF,EAAQguF,sBAAwB,WAE9B5tF,KAAKgtF,uBACLhtF,KAAKymF,cAAa,GAClBzmF,KAAKw5C,kBAAmB,EAEpBx5C,KAAKstF,eACPttF,KAAK2R,IAAI,SAAU3R,KAAKstF,eAG1BttF,KAAKymF,eACLzmF,KAAK24D,sBAAuB,EAC5B34D,KAAK04D,8BAA+B,EAEpC14D,KAAK8hD,gBAAgBhhC,UAAY,kHAEgB9gB,KAAKwzC,UAAUjT,OAAa,KAAI,wMAGFvgC,KAAKwzC,UAAUjT,OAAwB,gBAAI,gBAG1H,IAAI0tD,GAAar+E,SAASy9E,eAAe,0BACzCY,GAAW3+D,QAAUtvB,KAAK2+C,sBAAsB1sB,KAAKjyB,MAGrDA,KAAKstF,cAAgBttF,KAAKmuF,eAAel8D,KAAKjyB,MAC9CA,KAAKwR,GAAG,SAAUxR,KAAKstF,eAGvBttF,KAAKy5C,gBAA8B,aAAIz5C,KAAKg/C,aAC5Ch/C,KAAKy5C,gBAAkC,iBAAIz5C,KAAKkgD,iBAChDlgD,KAAKg/C,aAAeh/C,KAAKmuF,eACzBnuF,KAAKkgD,iBAAmBlgD,KAAKouF,eAG7BpuF,KAAK84C,WAQPl5C,EAAQmuF,uBAAyB,WAE/B/tF,KAAKgtF,uBACLhtF,KAAK24C,oBAAqB,EAEtB34C,KAAKstF,eACPttF,KAAK2R,IAAI,SAAU3R,KAAKstF,eAG1BttF,KAAKutF,gBAAkBvtF,KAAK8rF,mBAC5B9rF,KAAKutF,gBAAgB/hC,sBAErBxrD,KAAK8hD,gBAAgBhhC,UAAY,kHAEc9gB,KAAKwzC,UAAUjT,OAAa,KAAI,wMAGFvgC,KAAKwzC,UAAUjT,OAA4B,oBAAI,gBAG5H,IAAI0tD,GAAar+E,SAASy9E,eAAe,0BACzCY,GAAW3+D,QAAUtvB,KAAK2+C,sBAAsB1sB,KAAKjyB,MAGrDA,KAAKy5C,gBAA8B,aAASz5C,KAAKg/C,aACjDh/C,KAAKy5C,gBAAkC,iBAAKz5C,KAAKkgD,iBACjDlgD,KAAKy5C,gBAA4B,WAAWz5C,KAAK+/C,WACjD//C,KAAKy5C,gBAAkC,iBAAKz5C,KAAKi/C,iBACjDj/C,KAAKy5C,gBAA+B,cAAQz5C,KAAK0/C,cACjD1/C,KAAKg/C,aAAmBh/C,KAAKquF,mBAC7BruF,KAAK+/C,WAAmB,aACxB//C,KAAK0/C,cAAmB1/C,KAAKsuF,iBAC7BtuF,KAAKi/C,iBAAmB,aACxBj/C,KAAKkgD,iBAAmBlgD,KAAKuuF,oBAG7BvuF,KAAK84C,WAaPl5C,EAAQyuF,mBAAqB,SAASjzD,GACpCp7B,KAAKutF,gBAAgBlmC,aAAanhC,KAAKuiB,WACvCzoC,KAAKutF,gBAAgBlmC,aAAalhC,GAAGsiB,WACrCzoC,KAAKwtF,oBAAsBxtF,KAAKutF,gBAAgB7hC,wBAAwB1rD,KAAK2/C,qBAAqBvkB,EAAQjrB,GAAGnQ,KAAK6/C,qBAAqBzkB,EAAQhrB,IAC9G,OAA7BpQ,KAAKwtF,sBACPxtF,KAAKwtF,oBAAoB9kD,SACzB1oC,KAAKw5C,kBAAmB,GAE1Bx5C,KAAK84C,WASPl5C,EAAQ0uF,iBAAmB,SAASplF,GAClC,GAAIkyB,GAAUp7B,KAAK6+C,YAAY31C,EAAMquB,QAAQtO,OACZ,QAA7BjpB,KAAKwtF,qBAA6DtnF,SAA7BlG,KAAKwtF,sBAC5CxtF,KAAKwtF,oBAAoBr9E,EAAInQ,KAAK2/C,qBAAqBvkB,EAAQjrB,GAC/DnQ,KAAKwtF,oBAAoBp9E,EAAIpQ,KAAK6/C,qBAAqBzkB,EAAQhrB,IAEjEpQ,KAAK84C,WAGPl5C,EAAQ2uF,oBAAsB,SAASnzD,GACrC,GAAIozD,GAAUxuF,KAAKk/C,WAAW9jB,EACf,OAAXozD,GACqD,GAAnDxuF,KAAKutF,gBAAgBlmC,aAAanhC,KAAKokB,WACzCtqC,KAAKyuF,UAAUD,EAAQnuF,GAAIL,KAAKutF,gBAAgBpnE,GAAG9lB,IACnDL,KAAKutF,gBAAgBlmC,aAAanhC,KAAKuiB,YAEY,GAAjDzoC,KAAKutF,gBAAgBlmC,aAAalhC,GAAGmkB,WACvCtqC,KAAKyuF,UAAUzuF,KAAKutF,gBAAgBrnE,KAAK7lB,GAAImuF,EAAQnuF,IACrDL,KAAKutF,gBAAgBlmC,aAAalhC,GAAGsiB,aAIvCzoC,KAAKutF,gBAAgB1hC,uBAEvB7rD,KAAKw5C,kBAAmB,EACxBx5C,KAAK84C,WASPl5C,EAAQuuF,eAAiB,SAAS/yD,GAChC,GAAoC,GAAhCp7B,KAAK4rF,wBAA8B,CACrC,GAAIpwC,GAAOx7C,KAAKk/C,WAAW9jB,EACf,OAARogB,IACEA,EAAKsS,YAAc,EACrB4gC,MAAM,sCAGN1uF,KAAKq/C,cAAc7D,GAAK,GAExBx7C,KAAKgjD,QAAiB,QAAS,MAAc,WAAI,GAAI7/C,IAAM9C,GAAG,oBAAoBL,KAAKwzC,WACvFxzC,KAAKgjD,QAAiB,QAAS,MAAc,WAAE7yC,EAAIqrC,EAAKrrC,EACxDnQ,KAAKgjD,QAAiB,QAAS,MAAc,WAAE5yC,EAAIorC,EAAKprC,EACxDpQ,KAAKgjD,QAAiB,QAAS,MAAiB,cAAI,GAAI7/C,IAAM9C,GAAG,uBAAuBL,KAAKwzC,WAC7FxzC,KAAKgjD,QAAiB,QAAS,MAAiB,cAAE7yC,EAAIqrC,EAAKrrC,EAC3DnQ,KAAKgjD,QAAiB,QAAS,MAAiB,cAAE5yC,EAAIorC,EAAKprC,EAC3DpQ,KAAKgjD,QAAiB,QAAS,MAAiB,cAAEgD,aAAe,iBAGjEhmD,KAAKo0C,MAAsB,eAAI,GAAIpxC,IAAM3C,GAAG,iBAAiB6lB,KAAKs1B,EAAKn7C,GAAG8lB,GAAGnmB,KAAKgjD,QAAiB,QAAS,MAAc,WAAE3iD,IAAKL,KAAMA,KAAKwzC,WAC5IxzC,KAAKo0C,MAAsB,eAAEluB,KAAOs1B,EACpCx7C,KAAKo0C,MAAsB,eAAEsN,WAAY,EACzC1hD,KAAKo0C,MAAsB,eAAEyR,QAAS,EACtC7lD,KAAKo0C,MAAsB,eAAE9J,UAAW,EACxCtqC,KAAKo0C,MAAsB,eAAEjuB,GAAKnmB,KAAKgjD,QAAiB,QAAS,MAAc,WAC/EhjD,KAAKo0C,MAAsB,eAAE2O,IAAM/iD,KAAKgjD,QAAiB,QAAS,MAAiB,cAEnFhjD,KAAKy5C,gBAA+B,cAAIz5C,KAAK0/C,cAC7C1/C,KAAK0/C,cAAgB,SAASx2C,GAC5B,GAAIkyB,GAAUp7B,KAAK6+C,YAAY31C,EAAMquB,QAAQtO,OAC7CjpB,MAAKgjD,QAAiB,QAAS,MAAc,WAAE7yC,EAAInQ,KAAK2/C,qBAAqBvkB,EAAQjrB,GACrFnQ,KAAKgjD,QAAiB,QAAS,MAAc,WAAE5yC,EAAIpQ,KAAK6/C,qBAAqBzkB,EAAQhrB,GACrFpQ,KAAKgjD,QAAiB,QAAS,MAAiB,cAAE7yC,EAAI,IAAOnQ,KAAK2/C,qBAAqBvkB,EAAQjrB,GAAKnQ,KAAKo0C,MAAsB,eAAEluB,KAAK/V,GACtInQ,KAAKgjD,QAAiB,QAAS,MAAiB,cAAE5yC,EAAIpQ,KAAK6/C,qBAAqBzkB,EAAQhrB,IAG1FpQ,KAAK46C,QAAS,EACd56C,KAAK0O,YAMb9O,EAAQwuF,eAAiB,SAAShzD,GAChC,GAAoC,GAAhCp7B,KAAK4rF,wBAA8B,CAGrC5rF,KAAK0/C,cAAgB1/C,KAAKy5C,gBAA+B,oBAClDz5C,MAAKy5C,gBAA+B,aAG3C,IAAIk1C,GAAgB3uF,KAAKo0C,MAAsB,eAAEwS,aAG1C5mD,MAAKo0C,MAAsB,qBAC3Bp0C,MAAKgjD,QAAiB,QAAS,MAAc,iBAC7ChjD,MAAKgjD,QAAiB,QAAS,MAAiB,aAEvD,IAAIxH,GAAOx7C,KAAKk/C,WAAW9jB,EACf,OAARogB,IACEA,EAAKsS,YAAc,EACrB4gC,MAAM,sCAGN1uF,KAAK4uF,YAAYD,EAAcnzC,EAAKn7C,IACpCL,KAAK2+C,0BAGT3+C,KAAKymF,iBAQT7mF,EAAQsuF,SAAW,WACjB,GAAIluF,KAAKisF,qBAAwC,GAAjBjsF,KAAKs9C,SAAkB,CACrD,GAAI6tC,GAAiBnrF,KAAKkrF,yBAAyBlrF,KAAK+5C,iBACpD80C,GAAexuF,GAAGM,EAAK+D,aAAayL,EAAEg7E,EAAelkF,KAAKmJ,EAAE+6E,EAAe9jF,IAAIke,MAAM,MAAM8gC,gBAAe,EAAKC,gBAAe,EAClI,IAAItmD,KAAKmzC,iBAAiB7hC,IACxB,GAAwC,GAApCtR,KAAKmzC,iBAAiB7hC,IAAIjM,OAAa,CACzC,GAAI+M,GAAKpS,IACTA,MAAKmzC,iBAAiB7hC,IAAIu9E,EAAa,SAASC,GAC9C18E,EAAG8nC,UAAU5oC,IAAIw9E,GACjB18E,EAAGusC,wBACHvsC,EAAGwoC,QAAS,EACZxoC,EAAG1D,cAILggF,OAAM1uF,KAAKwzC,UAAUjT,OAAiB,UACtCvgC,KAAK2+C,wBACL3+C,KAAK46C,QAAS,EACd56C,KAAK0O,YAIP1O,MAAKk6C,UAAU5oC,IAAIu9E,GACnB7uF,KAAK2+C,wBACL3+C,KAAK46C,QAAS,EACd56C,KAAK0O,UAWX9O,EAAQgvF,YAAc,SAASG,EAAaC,GAC1C,GAAqB,GAAjBhvF,KAAKs9C,SAAkB,CACzB,GAAIuxC,IAAe3oE,KAAK6oE,EAAc5oE,GAAG6oE,EACzC,IAAIhvF,KAAKmzC,iBAAiBG,QACxB,GAA4C,GAAxCtzC,KAAKmzC,iBAAiBG,QAAQjuC,OAAa,CAC7C,GAAI+M,GAAKpS,IACTA,MAAKmzC,iBAAiBG,QAAQu7C,EAAa,SAASC,GAClD18E,EAAG+nC,UAAU7oC,IAAIw9E,GACjB18E,EAAGwoC,QAAS,EACZxoC,EAAG1D,cAILggF,OAAM1uF,KAAKwzC,UAAUjT,OAAkB,WACvCvgC,KAAK46C,QAAS,EACd56C,KAAK0O,YAIP1O,MAAKm6C,UAAU7oC,IAAIu9E,GACnB7uF,KAAK46C,QAAS,EACd56C,KAAK0O,UAUX9O,EAAQ6uF,UAAY,SAASM,EAAaC,GACxC,GAAqB,GAAjBhvF,KAAKs9C,SAAkB,CACzB,GAAIuxC,IAAexuF,GAAIL,KAAKutF,gBAAgBltF,GAAI6lB,KAAK6oE,EAAc5oE,GAAG6oE,EACtE,IAAIhvF,KAAKmzC,iBAAiBE,SACxB,GAA6C,GAAzCrzC,KAAKmzC,iBAAiBE,SAAShuC,OAAa,CAC9C,GAAI+M,GAAKpS,IACTA,MAAKmzC,iBAAiBE,SAASw7C,EAAa,SAASC,GACnD18E,EAAG+nC,UAAUpnC,OAAO+7E,GACpB18E,EAAGwoC,QAAS,EACZxoC,EAAG1D,cAILggF,OAAM1uF,KAAKwzC,UAAUjT,OAAkB,WACvCvgC,KAAK46C,QAAS,EACd56C,KAAK0O,YAIP1O,MAAKm6C,UAAUpnC,OAAO87E,GACtB7uF,KAAK46C,QAAS,EACd56C,KAAK0O,UAUX9O,EAAQkuF,UAAY,WAClB,GAAI9tF,KAAKmzC,iBAAiBC,MAAyB,GAAjBpzC,KAAKs9C,SAAkB,CACvD,GAAI9B,GAAOx7C,KAAK6rF,mBACZ96E,GAAQ1Q,GAAGm7C,EAAKn7C,GAClBklB,MAAOi2B,EAAKj2B,MACZlV,MAAOmrC,EAAKnrC,MACZujC,MAAO4H,EAAK5H,MACZrpC,OACEa,WAAWowC,EAAKjxC,MAAMa,WACtBC,OAAOmwC,EAAKjxC,MAAMc,OAClBC,WACEF,WAAWowC,EAAKjxC,MAAMe,UAAUF,WAChCC,OAAOmwC,EAAKjxC,MAAMe,UAAUD,SAGlC,IAAyC,GAArCrL,KAAKmzC,iBAAiBC,KAAK/tC,OAAa,CAC1C,GAAI+M,GAAKpS,IACTA,MAAKmzC,iBAAiBC,KAAKriC,EAAM,SAAU+9E,GACzC18E,EAAG8nC,UAAUnnC,OAAO+7E,GACpB18E,EAAGusC,wBACHvsC,EAAGwoC,QAAS,EACZxoC,EAAG1D,cAILggF,OAAM1uF,KAAKwzC,UAAUjT,OAAkB,eAIzCmuD,OAAM1uF,KAAKwzC,UAAUjT,OAAuB,iBAYhD3gC,EAAQg/C,gBAAkB,WACxB,IAAK5+C,KAAKisF,qBAAwC,GAAjBjsF,KAAKs9C,SACpC,GAAKt9C,KAAKksF,sBA4BRwC,MAAM1uF,KAAKwzC,UAAUjT,OAA2B,wBA5BjB,CAC/B,GAAI0uD,GAAgBjvF,KAAKysF,mBACrByC,EAAgBlvF,KAAK2sF,kBACzB,IAAI3sF,KAAKmzC,iBAAiBI,IAAK,CAC7B,GAAInhC,GAAKpS,KACL+Q,GAAQ0iC,MAAOw7C,EAAe76C,MAAO86C,IACrClvF,KAAKmzC,iBAAiBI,IAAIluC,OAAS,GACrCrF,KAAKmzC,iBAAiBI,IAAIxiC,EAAM,SAAU+9E,GACxC18E,EAAG+nC,UAAU3lC,OAAOs6E,EAAc16C,OAClChiC,EAAG8nC,UAAU1lC,OAAOs6E,EAAcr7C,OAClCrhC,EAAGq0E,eACHr0E,EAAGwoC,QAAS,EACZxoC,EAAG1D,UAILggF,MAAM1uF,KAAKwzC,UAAUjT,OAAoB,iBAI3CvgC,MAAKm6C,UAAU3lC,OAAO06E,GACtBlvF,KAAKk6C,UAAU1lC,OAAOy6E,GACtBjvF,KAAKymF,eACLzmF,KAAK46C,QAAS,EACd56C,KAAK0O,WAYT,SAAS7O,EAAQD,EAASM,GAE9B,GAAIS,GAAOT,EAAoB,EAE/BN,GAAQk5D,iBAAmB,WAEzB,GAAIq2B,GAAUv/E,SAASy9E,eAAe,6BACvB,OAAX8B,GACFnvF,KAAK8W,iBAAiBtH,YAAY2/E,GAEpCv/E,SAASwa,UAAY,MAWvBxqB,EAAQm5D,wBAA0B,WAChC/4D,KAAK84D,mBAEL94D,KAAK+hD,iBACL,IAAIA,IAAkB,KAAK,OAAO,OAAO,QAAQ,SAAS,UAAU,eAChEqtC,GAAwB,UAAU,YAAY,YAAY,aAAa,UAAU,WAAW,aAEhGpvF,MAAK+hD,eAAwB,QAAInyC,SAASK,cAAc,OACxDjQ,KAAK+hD,eAAwB,QAAE1hD,GAAK,6BACpCL,KAAK+hD,eAAwB,QAAEvxC,MAAMiQ,SAAW,WAChDzgB,KAAK+hD,eAAwB,QAAEvxC,MAAMI,MAAQ5Q,KAAKmc,MAAMC,OAAOC,YAAc,KAC7Erc,KAAK+hD,eAAwB,QAAEvxC,MAAMK,OAAS7Q,KAAKmc,MAAMC,OAAOsF,aAAe,KAC/E1hB,KAAK8W,iBAAiBk6B,aAAahxC,KAAK+hD,eAAwB,QAAE/hD,KAAKmc,MAEvE,KAAK,GAAIjX,GAAI,EAAGA,EAAI68C,EAAe18C,OAAQH,IACzClF,KAAK+hD,eAAeA,EAAe78C,IAAM0K,SAASK,cAAc,OAChEjQ,KAAK+hD,eAAeA,EAAe78C,IAAI7E,GAAK,sBAAwB0hD,EAAe78C,GACnFlF,KAAK+hD,eAAeA,EAAe78C,IAAIsC,UAAY,sBAAwBu6C,EAAe78C,GAC1FlF,KAAK+hD,eAAwB,QAAEjyC,YAAY9P,KAAK+hD,eAAeA,EAAe78C,KAC9ElF,KAAK+hD,eAAeA,EAAe78C,IAAI6b,YAAc/gB,KAAKovF,EAAqBlqF,IAAI+sB,KAAKjyB,KAG1F4P,UAASwa,UAAYpqB,KAAKqvF,cAAcp9D,KAAKjyB,OAQ/CJ,EAAQyvF,cAAgB,WACtBrvF,KAAKs+C,eACLt+C,KAAKm+C,eACLn+C,KAAKy+C,aAYP7+C,EAAQs+C,QAAU,SAASh1C,GACzBlJ,KAAKg5C,WAAah5C,KAAKwzC,UAAUmD,SAASC,MAAMxmC,EAChDpQ,KAAK0O,QACL/N,EAAKsI,eAAeC,GAChBlJ,KAAK+hD,iBACP/hD,KAAK+hD,eAAmB,GAAEv6C,WAAa,YAS3C5H,EAAQw+C,UAAY,SAASl1C,GAC3BlJ,KAAKg5C,YAAch5C,KAAKwzC,UAAUmD,SAASC,MAAMxmC,EACjDpQ,KAAK0O,QACL/N,EAAKsI,eAAeC,GAChBlJ,KAAK+hD,iBACP/hD,KAAK+hD,eAAqB,KAAEv6C,WAAa,YAS7C5H,EAAQy+C,UAAY,SAASn1C,GAC3BlJ,KAAK+4C,WAAa/4C,KAAKwzC,UAAUmD,SAASC,MAAMzmC,EAChDnQ,KAAK0O,QACL/N,EAAKsI,eAAeC,GAChBlJ,KAAK+hD,iBACP/hD,KAAK+hD,eAAqB,KAAEv6C,WAAa,YAS7C5H,EAAQ2+C,WAAa,SAASr1C,GAC5BlJ,KAAK+4C,YAAc/4C,KAAKwzC,UAAUmD,SAASC,MAAMxmC,EACjDpQ,KAAK0O,QACL/N,EAAKsI,eAAeC,GAChBlJ,KAAK+hD,iBACP/hD,KAAK+hD,eAAsB,MAAEv6C,WAAa,YAS9C5H,EAAQ4+C,QAAU,SAASt1C,GACzBlJ,KAAKi5C,cAAgBj5C,KAAKwzC,UAAUmD,SAASC,MAAMrb,KACnDv7B,KAAK0O,QACL/N,EAAKsI,eAAeC,GAChBlJ,KAAK+hD,iBACP/hD,KAAK+hD,eAAuB,OAAEv6C,WAAa,YAS/C5H,EAAQ8+C,SAAW,WACjB1+C,KAAKi5C,eAAiBj5C,KAAKwzC,UAAUmD,SAASC,MAAMrb,KACpDv7B,KAAK0O,QACL/N,EAAKsI,eAAeC,OAChBlJ,KAAK+hD,iBACP/hD,KAAK+hD,eAAwB,QAAEv6C,WAAa,YAShD5H,EAAQ6+C,UAAY,WAClBz+C,KAAKi5C,cAAgB,EACjBj5C,KAAK+hD,iBACP/hD,KAAK+hD,eAAuB,OAAEv6C,UAAYxH,KAAK+hD,eAAuB,OAAEv6C,UAAUkE,QAAQ,UAAU,IACpG1L,KAAK+hD,eAAwB,QAAEv6C,UAAYxH,KAAK+hD,eAAwB,QAAEv6C,UAAUkE,QAAQ,UAAU,MAS1G9L,EAAQu+C,aAAe,WACrBn+C,KAAKg5C,WAAa,EACdh5C,KAAK+hD,iBACP/hD,KAAK+hD,eAAmB,GAAEv6C,UAAYxH,KAAK+hD,eAAmB,GAAEv6C,UAAUkE,QAAQ,UAAU,IAC5F1L,KAAK+hD,eAAqB,KAAEv6C,UAAYxH,KAAK+hD,eAAqB,KAAEv6C,UAAUkE,QAAQ,UAAU,MASpG9L,EAAQ0+C,aAAe,WACrBt+C,KAAK+4C,WAAa,EACd/4C,KAAK+hD,iBACP/hD,KAAK+hD,eAAqB,KAAEv6C,UAAYxH,KAAK+hD,eAAqB,KAAEv6C,UAAUkE,QAAQ,UAAU,IAChG1L,KAAK+hD,eAAsB,MAAEv6C,UAAYxH,KAAK+hD,eAAsB,MAAEv6C,UAAUkE,QAAQ,UAAU,OAOlG,SAAS7L,EAAQD,GAErBA,EAAQuiD,aAAe,WACrB,IAAK,GAAItG,KAAU77C,MAAKyzC,MACtB,GAAIzzC,KAAKyzC,MAAMjuC,eAAeq2C,GAAS,CACrC,GAAIL,GAAOx7C,KAAKyzC,MAAMoI,EACO,IAAzBL,EAAKsR,mBACPtR,EAAKtH,MAAQ,MAYrBt0C,EAAQk7C,yBAA2B,WACjC,GAAiD,GAA7C96C,KAAKwzC,UAAUuD,mBAAmBppC,SAAmB3N,KAAK45C,YAAYv0C,OAAS,EAAG,CACjC,MAA/CrF,KAAKwzC,UAAUuD,mBAAmB/c,WAAoE,MAA/Ch6B,KAAKwzC,UAAUuD,mBAAmB/c,UAC3Fh6B,KAAKwzC,UAAUuD,mBAAmBC,iBAAmB,GAGrDh3C,KAAKwzC,UAAUuD,mBAAmBC,gBAAkBpyC,KAAK+iB,IAAI3nB,KAAKwzC,UAAUuD,mBAAmBC,iBAG9C,MAA/Ch3C,KAAKwzC,UAAUuD,mBAAmB/c,WAAoE,MAA/Ch6B,KAAKwzC,UAAUuD,mBAAmB/c,UAChD,GAAvCh6B,KAAKwzC,UAAU2D,aAAaxpC,UAC9B3N,KAAKwzC,UAAU2D,aAAa7wC,KAAO,YAIM,GAAvCtG,KAAKwzC,UAAU2D,aAAaxpC,UAC9B3N,KAAKwzC,UAAU2D,aAAa7wC,KAAO,aAIvC,IACIk1C,GAAMK,EADNyzC,EAAU,EAEVC,GAAe,EACfC,GAAiB,CAErB,KAAK3zC,IAAU77C,MAAKyzC,MACdzzC,KAAKyzC,MAAMjuC,eAAeq2C,KAC5BL,EAAOx7C,KAAKyzC,MAAMoI,GACA,IAAdL,EAAKtH,MACPq7C,GAAe,EAGfC,GAAiB,EAEfF,EAAU9zC,EAAKpH,MAAM/uC,SACvBiqF,EAAU9zC,EAAKpH,MAAM/uC,QAM3B,IAAsB,GAAlBmqF,GAA0C,GAAhBD,EAC5Bb,MAAM,yHACN1uF,KAAK+6C,YAAW,EAAK/6C,KAAKwzC,UAAUiC,WAAW9nC,SAC1C3N,KAAKwzC,UAAUiC,WAAW9nC,SAC7B3N,KAAK0O,YAGJ,CAEH1O,KAAKyvF,mBAGiB,GAAlBD,GACFxvF,KAAK0vF,iBAAiBJ,EAGxB,IAAIK,GAAe3vF,KAAK4vF,kBAGxB5vF,MAAK6vF,uBAAuBF,GAG5B3vF,KAAK0O,WAYX9O,EAAQiwF,uBAAyB,SAASF,GACxC,GAAI9zC,GAAQL,CAGZ,KAAK,GAAItH,KAASy7C,GAChB,GAAIA,EAAanqF,eAAe0uC,GAE9B,IAAK2H,IAAU8zC,GAAaz7C,GAAOT,MAC7Bk8C,EAAaz7C,GAAOT,MAAMjuC,eAAeq2C,KAC3CL,EAAOm0C,EAAaz7C,GAAOT,MAAMoI,GACkB,MAA/C77C,KAAKwzC,UAAUuD,mBAAmB/c,WAAoE,MAA/Ch6B,KAAKwzC,UAAUuD,mBAAmB/c,UACvFwhB,EAAKgE,SACPhE,EAAKrrC,EAAIw/E,EAAaz7C,GAAO47C,OAC7Bt0C,EAAKgE,QAAS,EAEdmwC,EAAaz7C,GAAO47C,QAAUH,EAAaz7C,GAAO+C,aAIhDuE,EAAKiE,SACPjE,EAAKprC,EAAIu/E,EAAaz7C,GAAO47C,OAC7Bt0C,EAAKiE,QAAS,EAEdkwC,EAAaz7C,GAAO47C,QAAUH,EAAaz7C,GAAO+C,aAGtDj3C,KAAK+vF,kBAAkBv0C,EAAKpH,MAAMoH,EAAKn7C,GAAGsvF,EAAan0C,EAAKtH,OAOpEl0C,MAAKg9C,cAUPp9C,EAAQgwF,iBAAmB,WACzB,GACI/zC,GAAQL,EAAMtH,EADdy7C,IAKJ,KAAK9zC,IAAU77C,MAAKyzC,MACdzzC,KAAKyzC,MAAMjuC,eAAeq2C,KAC5BL,EAAOx7C,KAAKyzC,MAAMoI,GAClBL,EAAKgE,QAAS,EACdhE,EAAKiE,QAAS,EACqC,MAA/Cz/C,KAAKwzC,UAAUuD,mBAAmB/c,WAAoE,MAA/Ch6B,KAAKwzC,UAAUuD,mBAAmB/c,UAC3FwhB,EAAKprC,EAAIpQ,KAAKwzC,UAAUuD,mBAAmBC,gBAAgBwE,EAAKtH,MAGhEsH,EAAKrrC,EAAInQ,KAAKwzC,UAAUuD,mBAAmBC,gBAAgBwE,EAAKtH,MAEjChuC,SAA7BypF,EAAan0C,EAAKtH,SACpBy7C,EAAan0C,EAAKtH,QAAU87C,OAAQ,EAAGv8C,SAAWq8C,OAAO,EAAG74C,YAAY,IAE1E04C,EAAan0C,EAAKtH,OAAO87C,QAAU,EACnCL,EAAan0C,EAAKtH,OAAOT,MAAMoI,GAAUL,EAK7C,IAAIy0C,GAAW,CACf,KAAK/7C,IAASy7C,GACRA,EAAanqF,eAAe0uC,IAC1B+7C,EAAWN,EAAaz7C,GAAO87C,SACjCC,EAAWN,EAAaz7C,GAAO87C,OAMrC,KAAK97C,IAASy7C,GACRA,EAAanqF,eAAe0uC,KAC9By7C,EAAaz7C,GAAO+C,aAAeg5C,EAAW,GAAKjwF,KAAKwzC,UAAUuD,mBAAmBE,YACrF04C,EAAaz7C,GAAO+C,aAAgB04C,EAAaz7C,GAAO87C,OAAS,EACjEL,EAAaz7C,GAAO47C,OAASH,EAAaz7C,GAAO+C,YAAe,IAAO04C,EAAaz7C,GAAO87C,OAAS,GAAKL,EAAaz7C,GAAO+C,YAIjI,OAAO04C,IAUT/vF,EAAQ8vF,iBAAmB,SAASJ,GAClC,GAAIzzC,GAAQL,CAGZ,KAAKK,IAAU77C,MAAKyzC,MACdzzC,KAAKyzC,MAAMjuC,eAAeq2C,KAC5BL,EAAOx7C,KAAKyzC,MAAMoI,GACdL,EAAKpH,MAAM/uC,QAAUiqF,IACvB9zC,EAAKtH,MAAQ,GAMnB,KAAK2H,IAAU77C,MAAKyzC,MACdzzC,KAAKyzC,MAAMjuC,eAAeq2C,KAC5BL,EAAOx7C,KAAKyzC,MAAMoI,GACA,GAAdL,EAAKtH,OACPl0C,KAAKkwF,UAAU,EAAE10C,EAAKpH,MAAMoH,EAAKn7C,MAgBzCT,EAAQ6vF,iBAAmB,WACzBzvF,KAAKwzC,UAAUiC,WAAW9nC,SAAU,EACpC3N,KAAKwzC,UAAUsB,QAAQC,UAAUpnC,SAAU,EAC3C3N,KAAKwzC,UAAUsB,QAAQU,sBAAsB7nC,SAAU,EACvD3N,KAAKq4D,2BACsC,GAAvCr4D,KAAKwzC,UAAU2D,aAAaxpC,UAC9B3N,KAAKwzC,UAAU2D,aAAaC,SAAU,GAExCp3C,KAAK09C,0BAcP99C,EAAQmwF,kBAAoB,SAAS37C,EAAO+7C,EAAUR,EAAcS,GAClE,IAAK,GAAIlrF,GAAI,EAAGA,EAAIkvC,EAAM/uC,OAAQH,IAAK,CACrC,GAAIqhF,GAAY,IAEdA,GADEnyC,EAAMlvC,GAAG2hD,MAAQspC,EACP/7C,EAAMlvC,GAAGghB,KAGTkuB,EAAMlvC,GAAGihB,EAIvB,IAAIkqE,IAAY,CACmC,OAA/CrwF,KAAKwzC,UAAUuD,mBAAmB/c,WAAoE,MAA/Ch6B,KAAKwzC,UAAUuD,mBAAmB/c,UACvFusD,EAAU/mC,QAAU+mC,EAAUryC,MAAQk8C,IACxC7J,EAAU/mC,QAAS,EACnB+mC,EAAUp2E,EAAIw/E,EAAapJ,EAAUryC,OAAO47C,OAC5CO,GAAY,GAIV9J,EAAU9mC,QAAU8mC,EAAUryC,MAAQk8C,IACxC7J,EAAU9mC,QAAS,EACnB8mC,EAAUn2E,EAAIu/E,EAAapJ,EAAUryC,OAAO47C,OAC5CO,GAAY,GAIC,GAAbA,IACFV,EAAapJ,EAAUryC,OAAO47C,QAAUH,EAAapJ,EAAUryC,OAAO+C,YAClEsvC,EAAUnyC,MAAM/uC,OAAS,GAC3BrF,KAAK+vF,kBAAkBxJ,EAAUnyC,MAAMmyC,EAAUlmF,GAAGsvF,EAAapJ,EAAUryC,UAenFt0C,EAAQswF,UAAY,SAASh8C,EAAOE,EAAO+7C,GACzC,IAAK,GAAIjrF,GAAI,EAAGA,EAAIkvC,EAAM/uC,OAAQH,IAAK,CACrC,GAAIqhF,GAAY,IAEdA,GADEnyC,EAAMlvC,GAAG2hD,MAAQspC,EACP/7C,EAAMlvC,GAAGghB,KAGTkuB,EAAMlvC,GAAGihB,IAEA,IAAnBogE,EAAUryC,OAAeqyC,EAAUryC,MAAQA,KAC7CqyC,EAAUryC,MAAQA,EACdE,EAAM/uC,OAAS,GACjBrF,KAAKkwF,UAAUh8C,EAAM,EAAGqyC,EAAUnyC,MAAOmyC,EAAUlmF,OAY3DT,EAAQ0wF,cAAgB,WACtB,IAAK,GAAIz0C,KAAU77C,MAAKyzC,MAClBzzC,KAAKyzC,MAAMjuC,eAAeq2C,KAC5B77C,KAAKyzC,MAAMoI,GAAQ2D,QAAS,EAC5Bx/C,KAAKyzC,MAAMoI,GAAQ4D,QAAS,KAQ9B,SAAS5/C,EAAQD,EAASM,GAuf9B,QAASqwF,KACPvwF,KAAKwzC,UAAU2D,aAAaxpC,SAAW3N,KAAKwzC,UAAU2D,aAAaxpC,OACnE,IAAI6iF,GAAqB5gF,SAASy9E,eAAe,qBACCmD,GAAmBhgF,MAAMpF,WAAhC,GAAvCpL,KAAKwzC,UAAU2D,aAAaxpC,QAAwD,UACR,UAEhF3N,KAAK09C,wBAAuB,GAO9B,QAAS+yC,KACP,IAAK,GAAI50C,KAAU77C,MAAK05C,iBAClB15C,KAAK05C,iBAAiBl0C,eAAeq2C,KACvC77C,KAAK05C,iBAAiBmC,GAAQqR,GAAK,EAAIltD,KAAK05C,iBAAiBmC,GAAQsR,GAAK,EAC1EntD,KAAK05C,iBAAiBmC,GAAQmR,GAAK,EAAIhtD,KAAK05C,iBAAiBmC,GAAQoR,GAAK,EAG7B,IAA7CjtD,KAAKwzC,UAAUuD,mBAAmBppC,SACpC3N,KAAK86C,2BACL41C,EAAiBnwF,KAAKP,KAAM,aAAc,EAAG,8CAC7C0wF,EAAiBnwF,KAAKP,KAAM,aAAc,EAAG,0BAC7C0wF,EAAiBnwF,KAAKP,KAAM,aAAc,EAAG,0BAC7C0wF,EAAiBnwF,KAAKP,KAAM,aAAc,EAAG,wBAC7C0wF,EAAiBnwF,KAAKP,KAAM,eAAgB,EAAG,oBAG/CA,KAAK4kF,kBAEP5kF,KAAK46C,QAAS,EACd56C,KAAK0O;CAMP,QAASiiF,KACP,GAAIjjF,GAAU,gDACVkjF,KACAC,EAAejhF,SAASy9E,eAAe,wBACvCyD,EAAelhF,SAASy9E,eAAe,uBAC3C,IAA4B,GAAxBwD,EAAaE,QAAiB,CAMhC,GALI/wF,KAAKwzC,UAAUsB,QAAQC,UAAUE,uBAAyBj1C,KAAKgxF,gBAAgBl8C,QAAQC,UAAUE,uBAAwB27C,EAAgBhpF,KAAK,0BAA4B5H,KAAKwzC,UAAUsB,QAAQC,UAAUE,uBAC3Mj1C,KAAKwzC,UAAUsB,QAAQI,gBAAkBl1C,KAAKgxF,gBAAgBl8C,QAAQC,UAAUG,gBAAyC07C,EAAgBhpF,KAAK,mBAAqB5H,KAAKwzC,UAAUsB,QAAQI,gBAC1Ll1C,KAAKwzC,UAAUsB,QAAQK,cAAgBn1C,KAAKgxF,gBAAgBl8C,QAAQC,UAAUI,cAA2Cy7C,EAAgBhpF,KAAK,iBAAmB5H,KAAKwzC,UAAUsB,QAAQK,cACxLn1C,KAAKwzC,UAAUsB,QAAQM,gBAAkBp1C,KAAKgxF,gBAAgBl8C,QAAQC,UAAUK,gBAAyCw7C,EAAgBhpF,KAAK,mBAAqB5H,KAAKwzC,UAAUsB,QAAQM,gBAC1Lp1C,KAAKwzC,UAAUsB,QAAQO,SAAWr1C,KAAKgxF,gBAAgBl8C,QAAQC,UAAUM,SAAgDu7C,EAAgBhpF,KAAK,YAAc5H,KAAKwzC,UAAUsB,QAAQO,SACzJ,GAA1Bu7C,EAAgBvrF,OAAa,CAC/BqI,EAAU,kBACVA,GAAW,wBACX,KAAK,GAAIxI,GAAI,EAAGA,EAAI0rF,EAAgBvrF,OAAQH,IAC1CwI,GAAWkjF,EAAgB1rF,GACvBA,EAAI0rF,EAAgBvrF,OAAS,IAC/BqI,GAAW,KAGfA,IAAW,KAET1N,KAAKwzC,UAAU2D,aAAaxpC,SAAW3N,KAAKgxF,gBAAgB75C,aAAaxpC,UAC7C,GAA1BijF,EAAgBvrF,OAAcqI,EAAU,kBACtCA,GAAW,KACjBA,GAAW,iBAAmB1N,KAAKwzC,UAAU2D,aAAaxpC,SAE7C,iDAAXD,IACFA,GAAW,UAGV,IAA4B,GAAxBojF,EAAaC,QAAiB,CAQrC,GAPArjF,EAAU,kBACVA,GAAW,wCACP1N,KAAKwzC,UAAUsB,QAAQQ,UAAUC,cAAgBv1C,KAAKgxF,gBAAgBl8C,QAAQQ,UAAUC,cAAgBq7C,EAAgBhpF,KAAK,iBAAmB5H,KAAKwzC,UAAUsB,QAAQQ,UAAUC,cACjLv1C,KAAKwzC,UAAUsB,QAAQI,gBAAkBl1C,KAAKgxF,gBAAgBl8C,QAAQQ,UAAUJ,gBAAwB07C,EAAgBhpF,KAAK,mBAAqB5H,KAAKwzC,UAAUsB,QAAQI,gBACzKl1C,KAAKwzC,UAAUsB,QAAQK,cAAgBn1C,KAAKgxF,gBAAgBl8C,QAAQQ,UAAUH,cAA0By7C,EAAgBhpF,KAAK,iBAAmB5H,KAAKwzC,UAAUsB,QAAQK,cACvKn1C,KAAKwzC,UAAUsB,QAAQM,gBAAkBp1C,KAAKgxF,gBAAgBl8C,QAAQQ,UAAUF,gBAAwBw7C,EAAgBhpF,KAAK,mBAAqB5H,KAAKwzC,UAAUsB,QAAQM,gBACzKp1C,KAAKwzC,UAAUsB,QAAQO,SAAWr1C,KAAKgxF,gBAAgBl8C,QAAQQ,UAAUD,SAA+Bu7C,EAAgBhpF,KAAK,YAAc5H,KAAKwzC,UAAUsB,QAAQO,SACxI,GAA1Bu7C,EAAgBvrF,OAAa,CAC/BqI,GAAW,gBACX,KAAK,GAAIxI,GAAI,EAAGA,EAAI0rF,EAAgBvrF,OAAQH,IAC1CwI,GAAWkjF,EAAgB1rF,GACvBA,EAAI0rF,EAAgBvrF,OAAS,IAC/BqI,GAAW,KAGfA,IAAW,KAEiB,GAA1BkjF,EAAgBvrF,SAAcqI,GAAW,KACzC1N,KAAKwzC,UAAU2D,cAAgBn3C,KAAKgxF,gBAAgB75C,eACtDzpC,GAAW,mBAAqB1N,KAAKwzC,UAAU2D,cAEjDzpC,GAAW,SAER,CAOH,GANAA,EAAU,kBACN1N,KAAKwzC,UAAUsB,QAAQU,sBAAsBD,cAAgBv1C,KAAKgxF,gBAAgBl8C,QAAQU,sBAAsBD,cAAgBq7C,EAAgBhpF,KAAK,iBAAmB5H,KAAKwzC,UAAUsB,QAAQU,sBAAsBD,cACrNv1C,KAAKwzC,UAAUsB,QAAQI,gBAAkBl1C,KAAKgxF,gBAAgBl8C,QAAQU,sBAAsBN,gBAAwB07C,EAAgBhpF,KAAK,mBAAqB5H,KAAKwzC,UAAUsB,QAAQI,gBACrLl1C,KAAKwzC,UAAUsB,QAAQK,cAAgBn1C,KAAKgxF,gBAAgBl8C,QAAQU,sBAAsBL,cAA0By7C,EAAgBhpF,KAAK,iBAAmB5H,KAAKwzC,UAAUsB,QAAQK,cACnLn1C,KAAKwzC,UAAUsB,QAAQM,gBAAkBp1C,KAAKgxF,gBAAgBl8C,QAAQU,sBAAsBJ,gBAAwBw7C,EAAgBhpF,KAAK,mBAAqB5H,KAAKwzC,UAAUsB,QAAQM,gBACrLp1C,KAAKwzC,UAAUsB,QAAQO,SAAWr1C,KAAKgxF,gBAAgBl8C,QAAQU,sBAAsBH,SAA+Bu7C,EAAgBhpF,KAAK,YAAc5H,KAAKwzC,UAAUsB,QAAQO,SACpJ,GAA1Bu7C,EAAgBvrF,OAAa,CAC/BqI,GAAW,oCACX,KAAK,GAAIxI,GAAI,EAAGA,EAAI0rF,EAAgBvrF,OAAQH,IAC1CwI,GAAWkjF,EAAgB1rF,GACvBA,EAAI0rF,EAAgBvrF,OAAS,IAC/BqI,GAAW,KAGfA,IAAW,MAOb,GALAA,GAAW,wBACXkjF,KACI5wF,KAAKwzC,UAAUuD,mBAAmB/c,WAAah6B,KAAKgxF,gBAAgBj6C,mBAAmB/c,WAAkC42D,EAAgBhpF,KAAK,cAAgB5H,KAAKwzC,UAAUuD,mBAAmB/c,WAChMp1B,KAAK+iB,IAAI3nB,KAAKwzC,UAAUuD,mBAAmBC,kBAAoBh3C,KAAKgxF,gBAAgBj6C,mBAAmBC,iBAAkB45C,EAAgBhpF,KAAK,oBAAsB5H,KAAKwzC,UAAUuD,mBAAmBC,iBACtMh3C,KAAKwzC,UAAUuD,mBAAmBE,aAAej3C,KAAKgxF,gBAAgBj6C,mBAAmBE,aAAgC25C,EAAgBhpF,KAAK,gBAAkB5H,KAAKwzC,UAAUuD,mBAAmBE,aACxK,GAA1B25C,EAAgBvrF,OAAa,CAC/B,IAAK,GAAIH,GAAI,EAAGA,EAAI0rF,EAAgBvrF,OAAQH,IAC1CwI,GAAWkjF,EAAgB1rF,GACvBA,EAAI0rF,EAAgBvrF,OAAS,IAC/BqI,GAAW,KAGfA,IAAW,QAGXA,IAAW,eAEbA,IAAW,KAIb1N,KAAKixF,WAAWnwE,UAAYpT,EAO9B,QAASwjF,KACP,GAAI99E,IAAO,iBAAkB,gBAAiB,iBAC1C+9E,EAAcvhF,SAASwhF,cAAc,6CAA6CvqF,MAClFwqF,EAAU,SAAWF,EAAc,SACnCG,EAAQ1hF,SAASy9E,eAAegE,EACpCC,GAAM9gF,MAAM+wB,QAAU,OACtB,KAAK,GAAIr8B,GAAI,EAAGA,EAAIkO,EAAI/N,OAAQH,IAC1BkO,EAAIlO,IAAMmsF,IACZC,EAAQ1hF,SAASy9E,eAAej6E,EAAIlO,IACpCosF,EAAM9gF,MAAM+wB,QAAU,OAG1BvhC,MAAKswF,gBACc,KAAfa,GACFnxF,KAAKwzC,UAAUuD,mBAAmBppC,SAAU,EAC5C3N,KAAKwzC,UAAUsB,QAAQU,sBAAsB7nC,SAAU,EACvD3N,KAAKwzC,UAAUsB,QAAQC,UAAUpnC,SAAU,GAErB,KAAfwjF,EAC0C,GAA7CnxF,KAAKwzC,UAAUuD,mBAAmBppC,UACpC3N,KAAKwzC,UAAUuD,mBAAmBppC,SAAU,EAC5C3N,KAAKwzC,UAAUsB,QAAQU,sBAAsB7nC,SAAU,EACvD3N,KAAKwzC,UAAUsB,QAAQC,UAAUpnC,SAAU,EAC3C3N,KAAKwzC,UAAU2D,aAAaxpC,SAAU,EACtC3N,KAAK86C,6BAIP96C,KAAKwzC,UAAUuD,mBAAmBppC,SAAU,EAC5C3N,KAAKwzC,UAAUsB,QAAQU,sBAAsB7nC,SAAU,EACvD3N,KAAKwzC,UAAUsB,QAAQC,UAAUpnC,SAAU,GAE7C3N,KAAKq4D,0BACL,IAAIm4B,GAAqB5gF,SAASy9E,eAAe,qBACCmD,GAAmBhgF,MAAMpF,WAAhC,GAAvCpL,KAAKwzC,UAAU2D,aAAaxpC,QAAwD,UACR,UAChF3N,KAAK46C,QAAS,EACd56C,KAAK0O,QAWP,QAASgiF,GAAkBrwF,EAAG4T,EAAIs9E,GAChC,GAAIC,GAAUnxF,EAAK,SACfoxF,EAAa7hF,SAASy9E,eAAehtF,GAAIwG,KAEzCoN,aAAetO,QACjBiK,SAASy9E,eAAemE,GAAS3qF,MAAQoN,EAAI2T,SAAS6pE,IACtDzxF,KAAK0xF,yBAAyBH,EAAsBt9E,EAAI2T,SAAS6pE,OAGjE7hF,SAASy9E,eAAemE,GAAS3qF,MAAQ+gB,SAAS3T,GAAOiO,WAAWuvE,GACpEzxF,KAAK0xF,yBAAyBH,EAAuB3pE,SAAS3T,GAAOiO,WAAWuvE,MAGrD,gCAAzBF,GACuB,sCAAzBA,GACyB,kCAAzBA,IACAvxF,KAAK86C,2BAEP96C,KAAK46C,QAAS,EACd56C,KAAK0O,QAlsBP,GAAI/N,GAAOT,EAAoB,GAC3ByxF,EAAiBzxF,EAAoB,IACrC0xF,EAA4B1xF,EAAoB,IAChD2xF,EAAiB3xF,EAAoB,GAOzCN,GAAQkyF,iBAAmB,WACzB9xF,KAAKwzC,UAAUsB,QAAQC,UAAUpnC,SAAW3N,KAAKwzC,UAAUsB,QAAQC,UAAUpnC,QAC7E3N,KAAKq4D,2BACLr4D,KAAK46C,QAAS,EACd56C,KAAK0O,SASP9O,EAAQy4D,yBAA2B,WAEe,GAA5Cr4D,KAAKwzC,UAAUsB,QAAQC,UAAUpnC,SACnC3N,KAAKo4D,YAAYu5B,GACjB3xF,KAAKo4D,YAAYw5B,GAEjB5xF,KAAKwzC,UAAUsB,QAAQI,eAAiBl1C,KAAKwzC,UAAUsB,QAAQC,UAAUG,eACzEl1C,KAAKwzC,UAAUsB,QAAQK,aAAen1C,KAAKwzC,UAAUsB,QAAQC,UAAUI,aACvEn1C,KAAKwzC,UAAUsB,QAAQM,eAAiBp1C,KAAKwzC,UAAUsB,QAAQC,UAAUK,eACzEp1C,KAAKwzC,UAAUsB,QAAQO,QAAUr1C,KAAKwzC,UAAUsB,QAAQC,UAAUM,QAElEr1C,KAAKi4D,WAAW45B,IAE+C,GAAxD7xF,KAAKwzC,UAAUsB,QAAQU,sBAAsB7nC,SACpD3N,KAAKo4D,YAAYy5B,GACjB7xF,KAAKo4D,YAAYu5B,GAEjB3xF,KAAKwzC,UAAUsB,QAAQI,eAAiBl1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBN,eACrFl1C,KAAKwzC,UAAUsB,QAAQK,aAAen1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBL,aACnFn1C,KAAKwzC,UAAUsB,QAAQM,eAAiBp1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBJ,eACrFp1C,KAAKwzC,UAAUsB,QAAQO,QAAUr1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBH,QAE9Er1C,KAAKi4D,WAAW25B,KAGhB5xF,KAAKo4D,YAAYy5B,GACjB7xF,KAAKo4D,YAAYw5B,GACjB5xF,KAAK+xF,cAAgB7rF,OAErBlG,KAAKwzC,UAAUsB,QAAQI,eAAiBl1C,KAAKwzC,UAAUsB,QAAQQ,UAAUJ,eACzEl1C,KAAKwzC,UAAUsB,QAAQK,aAAen1C,KAAKwzC,UAAUsB,QAAQQ,UAAUH,aACvEn1C,KAAKwzC,UAAUsB,QAAQM,eAAiBp1C,KAAKwzC,UAAUsB,QAAQQ,UAAUF,eACzEp1C,KAAKwzC,UAAUsB,QAAQO,QAAUr1C,KAAKwzC,UAAUsB,QAAQQ,UAAUD,QAElEr1C,KAAKi4D,WAAW05B,KAUpB/xF,EAAQoyF,4BAA8B,WAEL,GAA3BhyF,KAAK45C,YAAYv0C,OACnBrF,KAAKyzC,MAAMzzC,KAAK45C,YAAY,IAAI8V,UAAU,EAAG,IAIzC1vD,KAAK45C,YAAYv0C,OAASrF,KAAKwzC,UAAUiC,WAAWE,kBAAyD,GAArC31C,KAAKwzC,UAAUiC,WAAW9nC,SACpG3N,KAAKqkF,aAAarkF,KAAKwzC,UAAUiC,WAAWG,eAAe,GAI7D51C,KAAKiyF,qBAUTryF,EAAQqyF,iBAAmB,WAKzBjyF,KAAKkyF,gCACLlyF,KAAKmyF,uBAEDnyF,KAAKwzC,UAAUsB,QAAQM,eAAiB,IACC,GAAvCp1C,KAAKwzC,UAAU2D,aAAaxpC,SAA0D,GAAvC3N,KAAKwzC,UAAU2D,aAAaC,QAC7Ep3C,KAAKoyF,oCAGuD,GAAxDpyF,KAAKwzC,UAAUsB,QAAQU,sBAAsB7nC,QAC/C3N,KAAKqyF,qCAGLryF,KAAKsyF,2BAeb1yF,EAAQwiD,wBAA0B,WAChC,GAA2C,GAAvCpiD,KAAKwzC,UAAU2D,aAAaxpC,SAA0D,GAAvC3N,KAAKwzC,UAAU2D,aAAaC,QAAiB,CAC9Fp3C,KAAK05C,oBACL15C,KAAK25C,yBAEL,KAAK,GAAIkC,KAAU77C,MAAKyzC,MAClBzzC,KAAKyzC,MAAMjuC,eAAeq2C,KAC5B77C,KAAK05C,iBAAiBmC,GAAU77C,KAAKyzC,MAAMoI,GAG/C,IAAI02C,GAAevyF,KAAKgjD,QAAiB,QAAS,KAClD,KAAK,GAAIwvC,KAAiBD,GACpBA,EAAa/sF,eAAegtF,KAC1BxyF,KAAKo0C,MAAM5uC,eAAe+sF,EAAaC,GAAexsC,cACxDhmD,KAAK05C,iBAAiB84C,GAAiBD,EAAaC,GAGpDD,EAAaC,GAAe9iC,UAAU,EAAG,GAK/C,KAAK,GAAIhT,KAAO18C,MAAK05C,iBACf15C,KAAK05C,iBAAiBl0C,eAAek3C,IACvC18C,KAAK25C,uBAAuB/xC,KAAK80C,OAKrC18C,MAAK05C,iBAAmB15C,KAAKyzC,MAC7BzzC,KAAK25C,uBAAyB35C,KAAK45C,aAUvCh6C,EAAQsyF,8BAAgC,WACtC,GAAIz2E,GAAIC,EAAI8G,EAAUg5B,EAAMt2C,EACxBuuC,EAAQzzC,KAAK05C,iBACb+4C,EAAUzyF,KAAKwzC,UAAUsB,QAAQI,eACjCw9C,EAAe,CAEnB,KAAKxtF,EAAI,EAAGA,EAAIlF,KAAK25C,uBAAuBt0C,OAAQH,IAClDs2C,EAAO/H,EAAMzzC,KAAK25C,uBAAuBz0C,IACzCs2C,EAAKnG,QAAUr1C,KAAKwzC,UAAUsB,QAAQO,QAEhB,WAAlBr1C,KAAKglF,WAAqC,GAAXyN,GACjCh3E,GAAM+/B,EAAKrrC,EACXuL,GAAM8/B,EAAKprC,EACXoS,EAAW5d,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAEpCg3E,EAA4B,GAAZlwE,EAAiB,EAAKiwE,EAAUjwE,EAChDg5B,EAAKwR,GAAKvxC,EAAKi3E,EACfl3C,EAAKyR,GAAKvxC,EAAKg3E,IAGfl3C,EAAKwR,GAAK,EACVxR,EAAKyR,GAAK,IAahBrtD,EAAQ0yF,uBAAyB,WAC/B,GAAIK,GAAYlxC,EAAMP,EAClBzlC,EAAIC,EAAIsxC,EAAIC,EAAI2lC,EAAapwE,EAC7B4xB,EAAQp0C,KAAKo0C,KAGjB,KAAK8M,IAAU9M,GACTA,EAAM5uC,eAAe07C,KACvBO,EAAOrN,EAAM8M,GACTO,EAAKC,WAEH1hD,KAAKyzC,MAAMjuC,eAAei8C,EAAKoF,OAAS7mD,KAAKyzC,MAAMjuC,eAAei8C,EAAKmF,UACzE+rC,EAAalxC,EAAKsF,aAAetF,EAAKp8C,OAASrF,KAAKwzC,UAAUsB,QAAQK,aAEtEw9C,IAAelxC,EAAKt7B,GAAG2nC,YAAcrM,EAAKv7B,KAAK4nC,YAAc,GAAK9tD,KAAKwzC,UAAUiC,WAAWY,WAE5F56B,EAAMgmC,EAAKv7B,KAAK/V,EAAIsxC,EAAKt7B,GAAGhW,EAC5BuL,EAAM+lC,EAAKv7B,KAAK9V,EAAIqxC,EAAKt7B,GAAG/V,EAC5BoS,EAAW5d,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAEpB,GAAZ8G,IACFA,EAAW,KAIbowE,EAAc5yF,KAAKwzC,UAAUsB,QAAQM,gBAAkBu9C,EAAanwE,GAAYA,EAEhFwqC,EAAKvxC,EAAKm3E,EACV3lC,EAAKvxC,EAAKk3E,EAEVnxC,EAAKv7B,KAAK8mC,IAAMA,EAChBvL,EAAKv7B,KAAK+mC,IAAMA,EAChBxL,EAAKt7B,GAAG6mC,IAAMA,EACdvL,EAAKt7B,GAAG8mC,IAAMA,KAexBrtD,EAAQwyF,kCAAoC,WAC1C,GAAIO,GAAYlxC,EAAMP,EAAQ2xC,EAC1Bz+C,EAAQp0C,KAAKo0C,KAGjB,KAAK8M,IAAU9M,GACb,GAAIA,EAAM5uC,eAAe07C,KACvBO,EAAOrN,EAAM8M,GACTO,EAAKC,WAEH1hD,KAAKyzC,MAAMjuC,eAAei8C,EAAKoF,OAAS7mD,KAAKyzC,MAAMjuC,eAAei8C,EAAKmF,SACzD,MAAZnF,EAAKsB,KAAa,CACpB,GAAI+vC,GAAQrxC,EAAKt7B,GACb4sE,EAAQtxC,EAAKsB,IACbiwC,EAAQvxC,EAAKv7B,IAEjBysE,GAAalxC,EAAKsF,aAAetF,EAAKp8C,OAASrF,KAAKwzC,UAAUsB,QAAQK,aAEtE09C,EAAsBC,EAAMhlC,YAAcklC,EAAMllC,YAAc,EAG9D6kC,GAAcE,EAAsB7yF,KAAKwzC,UAAUiC,WAAWY,WAC9Dr2C,KAAKizF,sBAAsBH,EAAOC,EAAO,GAAMJ,GAC/C3yF,KAAKizF,sBAAsBF,EAAOC,EAAO,GAAML,KAiB3D/yF,EAAQqzF,sBAAwB,SAAUH,EAAOC,EAAOJ,GACtD,GAAIl3E,GAAIC,EAAIsxC,EAAIC,EAAI2lC,EAAapwE,CAEjC/G,GAAMq3E,EAAM3iF,EAAI4iF,EAAM5iF,EACtBuL,EAAMo3E,EAAM1iF,EAAI2iF,EAAM3iF,EACtBoS,EAAW5d,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAEpB,GAAZ8G,IACFA,EAAW,KAIbowE,EAAc5yF,KAAKwzC,UAAUsB,QAAQM,gBAAkBu9C,EAAanwE,GAAYA,EAEhFwqC,EAAKvxC,EAAKm3E,EACV3lC,EAAKvxC,EAAKk3E,EAEVE,EAAM9lC,IAAMA,EACZ8lC,EAAM7lC,IAAMA,EACZ8lC,EAAM/lC,IAAMA,EACZ+lC,EAAM9lC,IAAMA,GAQdrtD,EAAQ04D,0BAA4B,WAClC,GAAkCpyD,SAA9BlG,KAAKkzF,qBAAoC,CAC3ClzF,KAAKgxF,mBACLrwF,EAAKwF,WAAWnG,KAAKgxF,gBAAgBhxF,KAAKwzC,UAE1C,IAAI2/C,IAAgC,KAAM,KAAM,KAAM,KACtDnzF,MAAKkzF,qBAAuBtjF,SAASK,cAAc,OACnDjQ,KAAKkzF,qBAAqB1rF,UAAY,uBACtCxH,KAAKkzF,qBAAqBpyE,UAAY,onBAW2E,GAAK9gB,KAAKwzC,UAAUsB,QAAQC,UAAUE,sBAAyB,wGAA2G,GAAKj1C,KAAKwzC,UAAUsB,QAAQC,UAAUE,sBAAyB,4JAGpPj1C,KAAKwzC,UAAUsB,QAAQC,UAAUG,eAAiB,wFAA0Fl1C,KAAKwzC,UAAUsB,QAAQC,UAAUG,eAAiB,2JAG/Ll1C,KAAKwzC,UAAUsB,QAAQC,UAAUI,aAAe,sFAAwFn1C,KAAKwzC,UAAUsB,QAAQC,UAAUI,aAAe,6JAGtLn1C,KAAKwzC,UAAUsB,QAAQC,UAAUK,eAAiB,0FAA4Fp1C,KAAKwzC,UAAUsB,QAAQC,UAAUK,eAAiB,sJAGvMp1C,KAAKwzC,UAAUsB,QAAQC,UAAUM,QAAU,4FAA8Fr1C,KAAKwzC,UAAUsB,QAAQC,UAAUM,QAAU,sPAM/Kr1C,KAAKwzC,UAAUsB,QAAQQ,UAAUC,aAAe,kGAAoGv1C,KAAKwzC,UAAUsB,QAAQQ,UAAUC,aAAe,2JAGnMv1C,KAAKwzC,UAAUsB,QAAQQ,UAAUJ,eAAiB,uFAAyFl1C,KAAKwzC,UAAUsB,QAAQQ,UAAUJ,eAAiB,0JAG9Ll1C,KAAKwzC,UAAUsB,QAAQQ,UAAUH,aAAe,qFAAuFn1C,KAAKwzC,UAAUsB,QAAQQ,UAAUH,aAAe,4JAGrLn1C,KAAKwzC,UAAUsB,QAAQQ,UAAUF,eAAiB,yFAA2Fp1C,KAAKwzC,UAAUsB,QAAQQ,UAAUF,eAAiB,qJAGtMp1C,KAAKwzC,UAAUsB,QAAQQ,UAAUD,QAAU,2FAA6Fr1C,KAAKwzC,UAAUsB,QAAQQ,UAAUD,QAAU,oQAM9Kr1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBD,aAAe,kGAAoGv1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBD,aAAe,2JAG3Nv1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBN,eAAiB,uFAAyFl1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBN,eAAiB,0JAGtNl1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBL,aAAe,qFAAuFn1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBL,aAAe,4JAG7Mn1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBJ,eAAiB,yFAA2Fp1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBJ,eAAiB,qJAG9Np1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBH,QAAU,2FAA6Fr1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBH,QAAU,uJAG3M89C,EAA6BxrF,QAAQ3H,KAAKwzC,UAAUuD,mBAAmB/c,WAAa,0FAA4Fh6B,KAAKwzC,UAAUuD,mBAAmB/c,UAAY,oKAGtNh6B,KAAKwzC,UAAUuD,mBAAmBC,gBAAkB,yFAA2Fh3C,KAAKwzC,UAAUuD,mBAAmBC,gBAAkB,6JAGvMh3C,KAAKwzC,UAAUuD,mBAAmBE,YAAc,wFAA0Fj3C,KAAKwzC,UAAUuD,mBAAmBE,YAAc,odAU9Rj3C,KAAK8W,iBAAiBs8E,cAAcpiD,aAAahxC,KAAKkzF,qBAAsBlzF,KAAK8W,kBACjF9W,KAAKixF,WAAarhF,SAASK,cAAc,OACzCjQ,KAAKixF,WAAWzgF,MAAMwjC,SAAW,OACjCh0C,KAAKixF,WAAWzgF,MAAM8gD,WAAa,UACnCtxD,KAAK8W,iBAAiBs8E,cAAcpiD,aAAahxC,KAAKixF,WAAYjxF,KAAK8W,iBAEvE,IAAIu8E,EACJA,GAAezjF,SAASy9E,eAAe,eACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,cAAe,GAAI,2CACvEqzF,EAAezjF,SAASy9E,eAAe,eACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,cAAe,EAAG,0BACtEqzF,EAAezjF,SAASy9E,eAAe,eACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,cAAe,EAAG,0BACtEqzF,EAAezjF,SAASy9E,eAAe,eACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,cAAe,EAAG,wBACtEqzF,EAAezjF,SAASy9E,eAAe,iBACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,gBAAiB,EAAG,mBAExEqzF,EAAezjF,SAASy9E,eAAe,cACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,aAAc,EAAG,kCACrEqzF,EAAezjF,SAASy9E,eAAe,cACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,aAAc,EAAG,0BACrEqzF,EAAezjF,SAASy9E,eAAe,cACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,aAAc,EAAG,0BACrEqzF,EAAezjF,SAASy9E,eAAe,cACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,aAAc,EAAG,wBACrEqzF,EAAezjF,SAASy9E,eAAe,gBACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,eAAgB,EAAG,mBAEvEqzF,EAAezjF,SAASy9E,eAAe,cACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,aAAc,EAAG,8CACrEqzF,EAAezjF,SAASy9E,eAAe,cACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,aAAc,EAAG,0BACrEqzF,EAAezjF,SAASy9E,eAAe,cACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,aAAc,EAAG,0BACrEqzF,EAAezjF,SAASy9E,eAAe,cACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,aAAc,EAAG,wBACrEqzF,EAAezjF,SAASy9E,eAAe,gBACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,eAAgB,EAAG,mBACvEqzF,EAAezjF,SAASy9E,eAAe,qBACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,oBAAqBmzF,EAA8B,gCACvGE,EAAezjF,SAASy9E,eAAe,kBACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,iBAAkB,EAAG,sCACzEqzF,EAAezjF,SAASy9E,eAAe,iBACvCgG,EAAa1tE,SAAW+qE,EAAiBz+D,KAAKjyB,KAAM,gBAAiB,EAAG,iCAExE,IAAI6wF,GAAejhF,SAASy9E,eAAe,wBACvCyD,EAAelhF,SAASy9E,eAAe,wBACvCiG,EAAe1jF,SAASy9E,eAAe,uBAC3CyD,GAAaC,SAAU,EACnB/wF,KAAKwzC,UAAUsB,QAAQC,UAAUpnC,UACnCkjF,EAAaE,SAAU,GAErB/wF,KAAKwzC,UAAUuD,mBAAmBppC,UACpC2lF,EAAavC,SAAU,EAGzB,IAAIP,GAAqB5gF,SAASy9E,eAAe,sBAC7CkG,EAAwB3jF,SAASy9E,eAAe,yBAChDmG,EAAwB5jF,SAASy9E,eAAe,wBAEpDmD,GAAmBlhE,QAAUihE,EAAwBt+D,KAAKjyB,MAC1DuzF,EAAsBjkE,QAAUmhE,EAAqBx+D,KAAKjyB,MAC1DwzF,EAAsBlkE,QAAUqhE,EAAqB1+D,KAAKjyB,MAExDwwF,EAAmBhgF,MAAMpF,WADQ,GAA/BpL,KAAKwzC,UAAU2D,cAA8D,GAAtCn3C,KAAKwzC,UAAU8D,oBAClB,UAGA,UAIxC45C,EAAqB/6E,MAAMnW,MAE3B6wF,EAAalrE,SAAWurE,EAAqBj/D,KAAKjyB,MAClD8wF,EAAanrE,SAAWurE,EAAqBj/D,KAAKjyB,MAClDszF,EAAa3tE,SAAWurE,EAAqBj/D,KAAKjyB,QAWtDJ,EAAQ8xF,yBAA2B,SAAUH,EAAuB1qF,GAClE,GAAI4sF,GAAYlC,EAAsB7pF,MAAM,IACpB,IAApB+rF,EAAUpuF,OACZrF,KAAKwzC,UAAUigD,EAAU,IAAM5sF,EAEJ,GAApB4sF,EAAUpuF,OACjBrF,KAAKwzC,UAAUigD,EAAU,IAAIA,EAAU,IAAM5sF,EAElB,GAApB4sF,EAAUpuF,SACjBrF,KAAKwzC,UAAUigD,EAAU,IAAIA,EAAU,IAAIA,EAAU,IAAM5sF,KA2N3D,SAAShH,EAAQD,EAASM,GAG9B,QAASwzF,GAAeC,GACvB,MAAOzzF,GAAoB0zF,EAAsBD,IAElD,QAASC,GAAsBD,GAC9B,MAAO1/E,GAAI0/E,IAAS,WAAa,KAAM,IAAIpwF,OAAM,uBAAyBowF,EAAM,SALjF,GAAI1/E,KAOJy/E,GAAe7+E,KAAO,WACrB,MAAO5O,QAAO4O,KAAKZ,IAEpBy/E,EAAeG,QAAUD,EACzB/zF,EAAOD,QAAU8zF,GAKb,SAAS7zF,EAAQD,GAQrBA,EAAQuyF,qBAAuB,WAC7B,GAAI12E,GAAIC,EAAW8G,EAAUwqC,EAAIC,EAAI4lC,EACnCiB,EAAgBhB,EAAOC,EAAO7tF,EAAGyjB,EAE/B8qB,EAAQzzC,KAAK05C,iBACbE,EAAc55C,KAAK25C,uBAGnBo6C,EAAS,GAAK,EACdjuF,EAAI,EAAI,EAGRyvC,EAAev1C,KAAKwzC,UAAUsB,QAAQQ,UAAUC,aAChDy+C,EAAkBz+C,CAItB,KAAKrwC,EAAI,EAAGA,EAAI00C,EAAYv0C,OAAS,EAAGH,IAEtC,IADA4tF,EAAQr/C,EAAMmG,EAAY10C,IACrByjB,EAAIzjB,EAAI,EAAGyjB,EAAIixB,EAAYv0C,OAAQsjB,IAAK,CAC3CoqE,EAAQt/C,EAAMmG,EAAYjxB,IAC1BkqE,EAAsBC,EAAMhlC,YAAcilC,EAAMjlC,YAAc,EAE9DryC,EAAKs3E,EAAM5iF,EAAI2iF,EAAM3iF,EACrBuL,EAAKq3E,EAAM3iF,EAAI0iF,EAAM1iF,EACrBoS,EAAW5d,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAEpCs4E,EAA0C,GAAvBnB,EAA4Bt9C,EAAgBA,GAAgB,EAAIs9C,EAAsB7yF,KAAKwzC,UAAUiC,WAAWW,sBACnI,IAAInxC,GAAI8uF,EAASC,CACF,GAAIA,EAAfxxE,IAEAsxE,EADa,GAAME,EAAjBxxE,EACe,EAGAvd,EAAIud,EAAW1c,EAIlCguF,GAA0C,GAAvBjB,EAA4B,EAAI,EAAIA,EAAsB7yF,KAAKwzC,UAAUiC,WAAWU,mBACvG29C,GAAkCtxE,EAElCwqC,EAAKvxC,EAAKq4E,EACV7mC,EAAKvxC,EAAKo4E,EAEVhB,EAAM9lC,IAAMA,EACZ8lC,EAAM7lC,IAAMA,EACZ8lC,EAAM/lC,IAAMA,EACZ+lC,EAAM9lC,IAAMA,MAShB,SAASptD,EAAQD,GAQrBA,EAAQuyF,qBAAuB,WAC7B,GAAI12E,GAAIC,EAAI8G,EAAUwqC,EAAIC,EACxB6mC,EAAgBhB,EAAOC,EAAO7tF,EAAGyjB,EAE/B8qB,EAAQzzC,KAAK05C,iBACbE,EAAc55C,KAAK25C,uBAGnBpE,EAAev1C,KAAKwzC,UAAUsB,QAAQU,sBAAsBD,YAIhE,KAAKrwC,EAAI,EAAGA,EAAI00C,EAAYv0C,OAAS,EAAGH,IAEtC,IADA4tF,EAAQr/C,EAAMmG,EAAY10C,IACrByjB,EAAIzjB,EAAI,EAAGyjB,EAAIixB,EAAYv0C,OAAQsjB,IAItC,GAHAoqE,EAAQt/C,EAAMmG,EAAYjxB,IAGtBmqE,EAAM5+C,OAAS6+C,EAAM7+C,MAAO,CAE9Bz4B,EAAKs3E,EAAM5iF,EAAI2iF,EAAM3iF,EACrBuL,EAAKq3E,EAAM3iF,EAAI0iF,EAAM1iF,EACrBoS,EAAW5d,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,EAGpC,IAAIu4E,GAAY,GAEdH,GADav+C,EAAX/yB,GACgB5d,KAAKusB,IAAI8iE,EAAUzxE,EAAS,GAAK5d,KAAKusB,IAAI8iE,EAAU1+C,EAAa,GAGlE,EAGD,GAAZ/yB,EACFA,EAAW,IAGXsxE,GAAkCtxE,EAEpCwqC,EAAKvxC,EAAKq4E,EACV7mC,EAAKvxC,EAAKo4E,EAEVhB,EAAM9lC,IAAMA,EACZ8lC,EAAM7lC,IAAMA,EACZ8lC,EAAM/lC,IAAMA,EACZ+lC,EAAM9lC,IAAMA,IAYtBrtD,EAAQyyF,mCAAqC,WAS3C,IAAK,GARDM,GAAYlxC,EAAMP,EAClBzlC,EAAIC,EAAIsxC,EAAIC,EAAI2lC,EAAapwE,EAC7B4xB,EAAQp0C,KAAKo0C,MAEbX,EAAQzzC,KAAK05C,iBACbE,EAAc55C,KAAK25C,uBAGdz0C,EAAI,EAAGA,EAAI00C,EAAYv0C,OAAQH,IAAK,CAC3C,GAAI4tF,GAAQr/C,EAAMmG,EAAY10C,GAC9B4tF,GAAMoB,SAAW,EACjBpB,EAAMqB,SAAW,EAKnB,IAAKjzC,IAAU9M,GACb,GAAIA,EAAM5uC,eAAe07C,KACvBO,EAAOrN,EAAM8M,GACTO,EAAKC,WAEH1hD,KAAKyzC,MAAMjuC,eAAei8C,EAAKoF,OAAS7mD,KAAKyzC,MAAMjuC,eAAei8C,EAAKmF,SAqBzE,GApBA+rC,EAAalxC,EAAKsF,aAAetF,EAAKp8C,OAASrF,KAAKwzC,UAAUsB,QAAQK,aAEtEw9C,IAAelxC,EAAKt7B,GAAG2nC,YAAcrM,EAAKv7B,KAAK4nC,YAAc,GAAK9tD,KAAKwzC,UAAUiC,WAAWY,WAE5F56B,EAAMgmC,EAAKv7B,KAAK/V,EAAIsxC,EAAKt7B,GAAGhW,EAC5BuL,EAAM+lC,EAAKv7B,KAAK9V,EAAIqxC,EAAKt7B,GAAG/V,EAC5BoS,EAAW5d,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAEpB,GAAZ8G,IACFA,EAAW,KAIbowE,EAAc5yF,KAAKwzC,UAAUsB,QAAQM,gBAAkBu9C,EAAanwE,GAAYA,EAEhFwqC,EAAKvxC,EAAKm3E,EACV3lC,EAAKvxC,EAAKk3E,EAINnxC,EAAKt7B,GAAG+tB,OAASuN,EAAKv7B,KAAKguB,MAC7BuN,EAAKt7B,GAAG+tE,UAAYlnC,EACpBvL,EAAKt7B,GAAGguE,UAAYlnC,EACpBxL,EAAKv7B,KAAKguE,UAAYlnC,EACtBvL,EAAKv7B,KAAKiuE,UAAYlnC,MAEnB,CACH,GAAI7Q,GAAS,EACbqF,GAAKt7B,GAAG6mC,IAAM5Q,EAAO4Q,EACrBvL,EAAKt7B,GAAG8mC,IAAM7Q,EAAO6Q,EACrBxL,EAAKv7B,KAAK8mC,IAAM5Q,EAAO4Q,EACvBvL,EAAKv7B,KAAK+mC,IAAM7Q,EAAO6Q,EAQjC,GACIinC,GAAUC,EADVvB,EAAc,CAElB,KAAK1tF,EAAI,EAAGA,EAAI00C,EAAYv0C,OAAQH,IAAK,CACvC,GAAIs2C,GAAO/H,EAAMmG,EAAY10C,GAC7BgvF,GAAWtvF,KAAKmG,IAAI6nF,EAAYhuF,KAAK6H,KAAKmmF,EAAYp3C,EAAK04C,WAC3DC,EAAWvvF,KAAKmG,IAAI6nF,EAAYhuF,KAAK6H,KAAKmmF,EAAYp3C,EAAK24C,WAE3D34C,EAAKwR,IAAMknC,EACX14C,EAAKyR,IAAMknC,EAIb,GAAIC,GAAU,EACVC,EAAU,CACd,KAAKnvF,EAAI,EAAGA,EAAI00C,EAAYv0C,OAAQH,IAAK,CACvC,GAAIs2C,GAAO/H,EAAMmG,EAAY10C,GAC7BkvF,IAAW54C,EAAKwR,GAChBqnC,GAAW74C,EAAKyR,GAElB,GAAIqnC,GAAeF,EAAUx6C,EAAYv0C,OACrCkvF,EAAeF,EAAUz6C,EAAYv0C,MAEzC,KAAKH,EAAI,EAAGA,EAAI00C,EAAYv0C,OAAQH,IAAK,CACvC,GAAIs2C,GAAO/H,EAAMmG,EAAY10C,GAC7Bs2C,GAAKwR,IAAMsnC,EACX94C,EAAKyR,IAAMsnC,KAOX,SAAS10F,EAAQD,GAQrBA,EAAQuyF,qBAAuB,WAC7B,GAA8D,GAA1DnyF,KAAKwzC,UAAUsB,QAAQC,UAAUE,sBAA4B,CAC/D,GAAIuG,GACA/H,EAAQzzC,KAAK05C,iBACbE,EAAc55C,KAAK25C,uBACnB66C,EAAY56C,EAAYv0C,MAE5BrF,MAAKy0F,mBAAmBhhD,EAAMmG,EAK9B,KAAK,GAHDm4C,GAAgB/xF,KAAK+xF,cAGhB7sF,EAAI,EAAOsvF,EAAJtvF,EAAeA,IAC7Bs2C,EAAO/H,EAAMmG,EAAY10C,IAEzBlF,KAAK00F,sBAAsB3C,EAAcryF,KAAKi1F,SAASC,GAAGp5C,GAC1Dx7C,KAAK00F,sBAAsB3C,EAAcryF,KAAKi1F,SAASE,GAAGr5C,GAC1Dx7C,KAAK00F,sBAAsB3C,EAAcryF,KAAKi1F,SAASG,GAAGt5C,GAC1Dx7C,KAAK00F,sBAAsB3C,EAAcryF,KAAKi1F,SAASI,GAAGv5C,KAchE57C,EAAQ80F,sBAAwB,SAASM,EAAax5C,GAEpD,GAAIw5C,EAAaC,cAAgB,EAAG,CAClC,GAAIx5E,GAAGC,EAAG8G,CAUV,IAPA/G,EAAKu5E,EAAaE,aAAa/kF,EAAIqrC,EAAKrrC,EACxCuL,EAAKs5E,EAAaE,aAAa9kF,EAAIorC,EAAKprC,EACxCoS,EAAW5d,KAAKkoB,KAAKrR,EAAKA,EAAKC,EAAKA,GAKhC8G,EAAWwyE,EAAaG,SAAWn1F,KAAKwzC,UAAUsB,QAAQC,UAAUC,MAAO,CAE7D,GAAZxyB,IACFA,EAAW,GAAI5d,KAAKE,SACpB2W,EAAK+G,EAEP,IAAIkwE,GAAe1yF,KAAKwzC,UAAUsB,QAAQC,UAAUE,sBAAwB+/C,EAAalvC,KAAOtK,EAAKsK,MAAQtjC,EAAWA,EAAWA,GAC/HwqC,EAAKvxC,EAAKi3E,EACVzlC,EAAKvxC,EAAKg3E,CACdl3C,GAAKwR,IAAMA,EACXxR,EAAKyR,IAAMA,MAIX,IAAkC,GAA9B+nC,EAAaC,cACfj1F,KAAK00F,sBAAsBM,EAAaL,SAASC,GAAGp5C,GACpDx7C,KAAK00F,sBAAsBM,EAAaL,SAASE,GAAGr5C,GACpDx7C,KAAK00F,sBAAsBM,EAAaL,SAASG,GAAGt5C,GACpDx7C,KAAK00F,sBAAsBM,EAAaL,SAASI,GAAGv5C,OAGpD,IAAIw5C,EAAaL,SAAS5jF,KAAK1Q,IAAMm7C,EAAKn7C,GAAI,CAE5B,GAAZmiB,IACFA,EAAW,GAAI5d,KAAKE,SACpB2W,EAAK+G,EAEP,IAAIkwE,GAAe1yF,KAAKwzC,UAAUsB,QAAQC,UAAUE,sBAAwB+/C,EAAalvC,KAAOtK,EAAKsK,MAAQtjC,EAAWA,EAAWA,GAC/HwqC,EAAKvxC,EAAKi3E,EACVzlC,EAAKvxC,EAAKg3E,CACdl3C,GAAKwR,IAAMA,EACXxR,EAAKyR,IAAMA,KAcrBrtD,EAAQ60F,mBAAqB,SAAShhD,EAAMmG,GAU1C,IAAK,GATD4B,GACAg5C,EAAY56C,EAAYv0C,OAExBs2C,EAAO/3C,OAAOwxF,UAChB35C,EAAO73C,OAAOwxF,UACdx5C,GAAOh4C,OAAOwxF,UACd15C,GAAO93C,OAAOwxF,UAGPlwF,EAAI,EAAOsvF,EAAJtvF,EAAeA,IAAK,CAClC,GAAIiL,GAAIsjC,EAAMmG,EAAY10C,IAAIiL,EAC1BC,EAAIqjC,EAAMmG,EAAY10C,IAAIkL,CACtBurC,GAAJxrC,IAAYwrC,EAAOxrC,GACnBA,EAAIyrC,IAAQA,EAAOzrC,GACfsrC,EAAJrrC,IAAYqrC,EAAOrrC,GACnBA,EAAIsrC,IAAQA,EAAOtrC,GAGzB,GAAIilF,GAAWzwF,KAAK+iB,IAAIi0B,EAAOD,GAAQ/2C,KAAK+iB,IAAI+zB,EAAOD,EACnD45C,GAAW,GAAI55C,GAAQ,GAAM45C,EAAU35C,GAAQ,GAAM25C,IACtC15C,GAAQ,GAAM05C,EAAUz5C,GAAQ,GAAMy5C,EAGzD,IAAIC,GAAkB,KAClBC,EAAW3wF,KAAK6H,IAAI6oF,EAAgB1wF,KAAK+iB,IAAIi0B,EAAOD,IACpD65C,EAAe,GAAMD,EACrBE,EAAU,IAAO95C,EAAOC,GAAO85C,EAAU,IAAOj6C,EAAOC,GAGvDq2C,GACFryF,MACEw1F,cAAe/kF,EAAE,EAAGC,EAAE,GACtB01C,KAAK,EACLh4C,OACE6tC,KAAM85C,EAAQD,EAAa55C,KAAK65C,EAAQD,EACxC/5C,KAAMi6C,EAAQF,EAAa95C,KAAKg6C,EAAQF,GAE1C9kF,KAAM6kF,EACNJ,SAAU,EAAII,EACdZ,UAAY5jF,KAAK,MACjB0gD,SAAU,EACVvd,MAAO,EACP+gD,cAAe,GAMnB,KAHAj1F,KAAK21F,aAAa5D,EAAcryF,MAG3BwF,EAAI,EAAOsvF,EAAJtvF,EAAeA,IACzBs2C,EAAO/H,EAAMmG,EAAY10C,IACzBlF,KAAK41F,aAAa7D,EAAcryF,KAAK87C,EAIvCx7C,MAAK+xF,cAAgBA,GAWvBnyF,EAAQi2F,kBAAoB,SAASb,EAAcx5C,GACjD,GAAIs6C,GAAYd,EAAalvC,KAAOtK,EAAKsK,KACrCiwC,EAAe,EAAED,CAErBd,GAAaE,aAAa/kF,EAAI6kF,EAAaE,aAAa/kF,EAAI6kF,EAAalvC,KAAOtK,EAAKrrC,EAAIqrC,EAAKsK,KAC9FkvC,EAAaE,aAAa/kF,GAAK4lF,EAE/Bf,EAAaE,aAAa9kF,EAAI4kF,EAAaE,aAAa9kF,EAAI4kF,EAAalvC,KAAOtK,EAAKprC,EAAIorC,EAAKsK,KAC9FkvC,EAAaE,aAAa9kF,GAAK2lF,EAE/Bf,EAAalvC,KAAOgwC,CACpB,IAAIE,GAAcpxF,KAAK6H,IAAI7H,KAAK6H,IAAI+uC,EAAK3qC,OAAO2qC,EAAKhzB,QAAQgzB,EAAK5qC,MAClEokF,GAAavjC,SAAYujC,EAAavjC,SAAWukC,EAAeA,EAAchB,EAAavjC,UAa7F7xD,EAAQg2F,aAAe,SAASZ,EAAax5C,EAAKy6C,IAC1B,GAAlBA,GAA6C/vF,SAAnB+vF,IAE5Bj2F,KAAK61F,kBAAkBb,EAAax5C,GAGlCw5C,EAAaL,SAASC,GAAG9mF,MAAM8tC,KAAOJ,EAAKrrC,EACzC6kF,EAAaL,SAASC,GAAG9mF,MAAM4tC,KAAOF,EAAKprC,EAC7CpQ,KAAKk2F,eAAelB,EAAax5C,EAAK,MAGtCx7C,KAAKk2F,eAAelB,EAAax5C,EAAK,MAIpCw5C,EAAaL,SAASC,GAAG9mF,MAAM4tC,KAAOF,EAAKprC,EAC7CpQ,KAAKk2F,eAAelB,EAAax5C,EAAK,MAGtCx7C,KAAKk2F,eAAelB,EAAax5C,EAAK,OAc5C57C,EAAQs2F,eAAiB,SAASlB,EAAax5C,EAAK26C,GAClD,OAAQnB,EAAaL,SAASwB,GAAQlB,eACpC,IAAK,GACHD,EAAaL,SAASwB,GAAQxB,SAAS5jF,KAAOyqC,EAC9Cw5C,EAAaL,SAASwB,GAAQlB,cAAgB,EAC9Cj1F,KAAK61F,kBAAkBb,EAAaL,SAASwB,GAAQ36C,EACrD,MACF,KAAK,GAGCw5C,EAAaL,SAASwB,GAAQxB,SAAS5jF,KAAKZ,GAAKqrC,EAAKrrC,GACtD6kF,EAAaL,SAASwB,GAAQxB,SAAS5jF,KAAKX,GAAKorC,EAAKprC,GACxDorC,EAAKrrC,GAAKvL,KAAKE,SACf02C,EAAKprC,GAAKxL,KAAKE,WAGf9E,KAAK21F,aAAaX,EAAaL,SAASwB,IACxCn2F,KAAK41F,aAAaZ,EAAaL,SAASwB,GAAQ36C,GAElD,MACF,KAAK,GACHx7C,KAAK41F,aAAaZ,EAAaL,SAASwB,GAAQ36C,KAatD57C,EAAQ+1F,aAAe,SAASX,GAE9B,GAAIoB,GAAgB,IACc,IAA9BpB,EAAaC,gBACfmB,EAAgBpB,EAAaL,SAAS5jF,KACtCikF,EAAalvC,KAAO,EAAGkvC,EAAaE,aAAa/kF,EAAI,EAAG6kF,EAAaE,aAAa9kF,EAAI,GAExF4kF,EAAaC,cAAgB,EAC7BD,EAAaL,SAAS5jF,KAAO,KAC7B/Q,KAAKq2F,cAAcrB,EAAa,MAChCh1F,KAAKq2F,cAAcrB,EAAa,MAChCh1F,KAAKq2F,cAAcrB,EAAa,MAChCh1F,KAAKq2F,cAAcrB,EAAa,MAEX,MAAjBoB,GACFp2F,KAAK41F,aAAaZ,EAAaoB,IAenCx2F,EAAQy2F,cAAgB,SAASrB,EAAcmB,GAC7C,GAAIx6C,GAAKC,EAAKH,EAAKC,EACf46C,EAAY,GAAMtB,EAAatkF,IACnC,QAAQylF,GACN,IAAK,KACHx6C,EAAOq5C,EAAalnF,MAAM6tC,KAC1BC,EAAOo5C,EAAalnF,MAAM6tC,KAAO26C,EACjC76C,EAAOu5C,EAAalnF,MAAM2tC,KAC1BC,EAAOs5C,EAAalnF,MAAM2tC,KAAO66C,CACjC,MACF,KAAK,KACH36C,EAAOq5C,EAAalnF,MAAM6tC,KAAO26C,EACjC16C,EAAOo5C,EAAalnF,MAAM8tC,KAC1BH,EAAOu5C,EAAalnF,MAAM2tC,KAC1BC,EAAOs5C,EAAalnF,MAAM2tC,KAAO66C,CACjC,MACF,KAAK,KACH36C,EAAOq5C,EAAalnF,MAAM6tC,KAC1BC,EAAOo5C,EAAalnF,MAAM6tC,KAAO26C,EACjC76C,EAAOu5C,EAAalnF,MAAM2tC,KAAO66C,EACjC56C,EAAOs5C,EAAalnF,MAAM4tC,IAC1B,MACF,KAAK,KACHC,EAAOq5C,EAAalnF,MAAM6tC,KAAO26C,EACjC16C,EAAOo5C,EAAalnF,MAAM8tC,KAC1BH,EAAOu5C,EAAalnF,MAAM2tC,KAAO66C,EACjC56C,EAAOs5C,EAAalnF,MAAM4tC,KAK9Bs5C,EAAaL,SAASwB,IACpBjB,cAAc/kF,EAAE,EAAEC,EAAE,GACpB01C,KAAK,EACLh4C,OAAO6tC,KAAKA,EAAKC,KAAKA,EAAKH,KAAKA,EAAKC,KAAKA,GAC1ChrC,KAAM,GAAMskF,EAAatkF,KACzBykF,SAAU,EAAIH,EAAaG,SAC3BR,UAAW5jF,KAAK,MAChB0gD,SAAU,EACVvd,MAAO8gD,EAAa9gD,MAAM,EAC1B+gD,cAAe,IAYnBr1F,EAAQ22F,UAAY,SAAS3yE,EAAIrZ,GACJrE,SAAvBlG,KAAK+xF,gBAEPnuE,EAAIO,UAAY,EAEhBnkB,KAAKw2F,YAAYx2F,KAAK+xF,cAAcryF,KAAKkkB,EAAIrZ,KAajD3K,EAAQ42F,YAAc,SAASC,EAAO7yE,EAAIrZ,GAC1BrE,SAAVqE,IACFA,EAAQ,WAGkB,GAAxBksF,EAAOxB,gBACTj1F,KAAKw2F,YAAYC,EAAO9B,SAASC,GAAGhxE,GACpC5jB,KAAKw2F,YAAYC,EAAO9B,SAASE,GAAGjxE,GACpC5jB,KAAKw2F,YAAYC,EAAO9B,SAASI,GAAGnxE,GACpC5jB,KAAKw2F,YAAYC,EAAO9B,SAASG,GAAGlxE,IAEtCA,EAAIY,YAAcja,EAClBqZ,EAAIa,YACJb,EAAIc,OAAO+xE,EAAO3oF,MAAM6tC,KAAK86C,EAAO3oF,MAAM2tC,MAC1C73B,EAAIe,OAAO8xE,EAAO3oF,MAAM8tC,KAAK66C,EAAO3oF,MAAM2tC,MAC1C73B,EAAIlH,SAEJkH,EAAIa,YACJb,EAAIc,OAAO+xE,EAAO3oF,MAAM8tC,KAAK66C,EAAO3oF,MAAM2tC,MAC1C73B,EAAIe,OAAO8xE,EAAO3oF,MAAM8tC,KAAK66C,EAAO3oF,MAAM4tC,MAC1C93B,EAAIlH,SAEJkH,EAAIa,YACJb,EAAIc,OAAO+xE,EAAO3oF,MAAM8tC,KAAK66C,EAAO3oF,MAAM4tC,MAC1C93B,EAAIe,OAAO8xE,EAAO3oF,MAAM6tC,KAAK86C,EAAO3oF,MAAM4tC,MAC1C93B,EAAIlH,SAEJkH,EAAIa,YACJb,EAAIc,OAAO+xE,EAAO3oF,MAAM6tC,KAAK86C,EAAO3oF,MAAM4tC,MAC1C93B,EAAIe,OAAO8xE,EAAO3oF,MAAM6tC,KAAK86C,EAAO3oF,MAAM2tC,MAC1C73B,EAAIlH,WAaF,SAAS7c,GAEbA,EAAOD,QAAU,SAASC,GAQzB,MAPIA,GAAO62F,kBACV72F,EAAOyhE,UAAY,aACnBzhE,EAAO82F,SAEP92F,EAAO80F,YACP90F,EAAO62F,gBAAkB,GAEnB72F"}
\ No newline at end of file
+{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DataStep","Range","stack","TimeStep","components","items","Item","ItemBox","ItemPoint","ItemRange","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Edge","Groups","Images","Node","Popup","dotparser","gephiParser","Graph","Error","moment","hammer","isNumber","object","Number","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","isDataTable","google","visualization","DataTable","randomUUID","S4","Math","floor","random","toString","extend","a","i","len","arguments","length","other","prop","hasOwnProperty","selectiveExtend","props","Array","isArray","selectiveDeepExtend","b","TypeError","constructor","Object","undefined","deepExtend","equalArray","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","value","getAbsoluteLeft","elem","getBoundingClientRect","left","window","pageXOffset","getAbsoluteTop","top","pageYOffset","addClassName","className","classes","split","indexOf","push","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","returnValue","getTarget","target","srcElement","nodeType","parentNode","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","GiveDec","Hex","Value","eval","GiveHex","Dec","parseColor","color","isValidRGB","rgb","substr","RGBToHex","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","hexToRGB","hex","replace","toUpperCase","substring","d","e","f","r","g","red","green","blue","RGBToHSV","minRGB","maxRGB","max","hue","saturation","HSVToRGB","q","t","isOk","test","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","mergeOptions","mergeTarget","options","enabled","binarySearch","orderedItems","range","field","field2","maxIterations","iteration","found","low","high","newLow","newHigh","guess","isVisible","start","console","log","binarySearchGeneric","sidePreference","newGuess","prevValue","nextValue","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","createElement","drawPoint","x","y","group","point","drawPoints","style","setAttributeNS","size","drawBar","width","height","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","prototype","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","columns","_getColumnNames","row","rows","getNumberOfRows","item","col","cols","getValue","update","updatedIds","addOrUpdate","_updateItem","get","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","_appendRow","result","getIds","getDataSet","map","mappedItems","filteredItem","name","sort","av","bv","remove","removedId","removedIds","_remove","clear","keys","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","JSON","stringify","dataTable","getNumberOfColumns","getColumnId","getColumnLabel","addRow","setValue","_ids","_onEvent","apply","setData","viewOptions","getArguments","defaultFilter","dataSet","added","updated","removed","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","eye","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","colorAxis","colorGrid","colorDot","colorDotBorder","setOptions","Emitter","_setScale","scale","z","xCenter","yCenter","zCenter","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","az","cx","getCameraLocation","cy","cz","sinTx","sin","getCameraRotation","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","bx","by","ex","ey","ez","getArmLength","xcenter","frame","canvas","clientWidth","ycenter","_setBackgroundColor","backgroundColor","fill","stroke","strokeWidth","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","counter","column","getDistinctValues","distinctValues","getColumnRange","minMax","_dataInitialize","rawData","_onChange","dataFilter","setOnLoadCallback","redraw","withBars","defaultXBarWidth","dataX","defaultYBarWidth","dataY","xRange","defaultXMin","defaultXMax","defaultXStep","yRange","defaultYMin","defaultYMax","defaultYStep","zRange","defaultZMin","defaultZMax","defaultZStep","valueRange","defaultValueMin","defaultValueMax","_getDataPoints","sortNumber","obj","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","hasChildNodes","firstChild","position","overflow","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","setCameraPosition","pos","horizontal","vertical","setArmRotation","distance","setArmLength","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","next","end","textAlign","textBaseline","fillText","label","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","from","to","prettyStep","text","xText","yText","zText","offset","xOffset","yOffset","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","abs","parseInt","cross","topSideVisible","zAvg","transBottom","dist","sortDepth","aDiff","subtract","bDiff","crossproduct","crossProduct","radius","arc","PI","j","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","diff","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","getMouseX","startMouseY","getMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","round","parameters","emit","delay","mouseX","mouseY","tooltipTimeout","clearTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","setTimeout","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","content","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","clientX","targetTouches","clientY","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","dataView","progress","sub","sum","prev","bar","MozBorderRadius","slide","onclick","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","setStep","calculatePrettyStep","log10","LN10","step1","pow","step2","step5","toPrecision","getStep","defaultOptions","autoResize","orientation","maxHeight","minHeight","_create","body","domProps","emitter","bind","snap","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","timeAxis","currentTime","customTime","itemSet","itemsData","groupsData","setItems","Hammer","backgroundVertical","backgroundHorizontal","centerContainer","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","_onTouch","_onPinch","_onDragStart","_onDrag","prevent_default","listeners","events","args","slice","scrollTop","scrollTopMin","touch","destroy","_stopAutoResize","component","_initAutoResize","setCustomTime","time","getCustomTime","newDataSet","initialLoad","fit","setWindow","getVisibleItems","setGroups","groups","what","dataRange","getItemRange","dataset","minItem","maxStartItem","maxEndItem","setSelection","getSelection","getWindow","getRange","resized","borderRootHeight","borderRootWidth","autoHeight","containerHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","visibility","repaint","conversion","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","allowDragging","initialScrollTop","gesture","deltaY","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","linegraph","backgroundHorizontalContainer","minimumStep","forcedStepSize","current","autoScale","stepIndex","marginStart","marginEnd","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","first","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","isMajor","now","hours","minutes","seconds","milliseconds","clone","direction","moveable","zoomable","zoomMin","zoomMax","_onDragEnd","_onHold","_onMouseWheel","validateDirection","getPointer","pageX","pageY","hammerUtil","changed","_applyRange","newStart","newEnd","deltaX","diffRange","fakeGesture","pointer","pointerDate","_pointerToDate","zoom","touches","initDate","move","EPSILON","orderByStart","orderByEnd","aTime","bTime","force","iMax","axis","collidingItem","jj","collision","nostack","SCALE","DAY","MILLISECOND","SECOND","MINUTE","HOUR","WEEKDAY","MONTH","YEAR","setFullYear","getFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth","setScale","newScale","newStep","setAutoScale","enable","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","date","year","getLabelMinor","format","getLabelMajor","_isResized","_previousWidth","_previousHeight","showCurrentTime","parent","title","currentTimeTimer","showCustomTime","eventParams","drag","dragging","stopPropagation","svg","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","lines","labels","conversionFactor","minWidth","stepPixels","stepPixelsForced","lineOffset","master","svgElements","amountOfGroups","addGroup","graphOptions","updateGroup","removeGroup","hide","show","lineContainer","display","_redrawGroupIcons","iconHeight","iconOffset","groupId","drawIcon","changeCalled","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineWidth","minorLineHeight","majorLineWidth","majorLineHeight","_redrawLabels","amountOfSteps","stepDifference","valueAtZero","marginStartPos","maxLabelSize","_redrawLabel","_redrawLine","characterHeight","largestWidth","majorCharWidth","minorCharWidth","convertValue","invertedValue","convertedValue","textMinor","createTextNode","measureCharMinor","textMajor","measureCharMajor","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","setZeroPosition","catmullRom","parametrization","alpha","SVGcontainer","path","fillPath","fillHeight","outline","shaded","barWidth","bar1Height","bar2Height","visibleItems","byStart","byEnd","inner","foreground","marker","Element","getLabelWidth","restack","_updateVisibleItems","markerHeight","lastMarkerHeight","dirty","displayed","offsetTop","offsetLeft","ii","repositionY","labelSet","setParent","_checkIfVisible","removeFromDataSet","removeItem","_constructByEndArray","endArray","initialPosByStart","newVisibleItems","initialPosByEnd","_checkIfInvisible","repositionX","align","groupOrder","selectable","editable","updateTime","onAdd","onUpdate","onMove","onRemove","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","selection","stackDirty","touchParams","UNGROUPED","box","_updateUngrouped","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","fn","Function","markDirty","unselect","select","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","getLabelSet","oldItemsData","getItems","_order","getGroups","itemData","_removeItem","groupData","groupOptions","oldGroupId","oldGroup","itemFromTarget","selected","dragLeftItem","dragRightItem","itemProps","groupFromTarget","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","itemSetFromTarget","side","iconSize","iconSpacing","textArea","drawLegendIcons","getComputedStyle","paddingTop","yAxisOrientation","defaultGroup","sampling","graphHeight","barChart","dataAxis","legend","lastStart","rangePerPixelInv","_updateGraph","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","preprocessedGroup","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_preprocessData","_updateYAxis","_convertYvalues","_drawLineGraph","_drawBarGraph","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","_toggleAxisVisiblity","drawIcons","axisUsed","coreDistance","_drawPoints","svgHeight","_catmullRom","_linear","dFill","datapoints","xValue","yValue","extractedData","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","majorLines","majorTexts","minorLines","minorTexts","lineTop","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","insertBefore","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","anchor","deleteButton","itemSetHeight","marginLeft","baseClassName","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","dragLeft","dragRight","_initializeMixinLoaders","renderRefreshRate","renderTimestep","renderTime","maxPhysicsTicksPerRender","physicsDiscreteStepsize","stabilize","initializing","triggerFunctions","edit","editEdge","connect","del","constants","nodes","radiusMin","radiusMax","shape","image","fixed","fontColor","fontSize","fontFace","level","highlightColor","edges","widthSelectionMultiplier","hoverWidth","fontFill","arrowScaleFactor","dash","gap","altLength","inheritColor","configurePhysics","physics","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","repulsion","nodeDistance","hierarchicalRepulsion","clustering","initialMaxNodes","clusterThreshold","reduceToNodes","chainThreshold","clusterEdgeThreshold","sectorThreshold","screenSizeThreshold","fontSizeMultiplier","maxFontSize","forceAmplification","distanceAmplification","edgeGrowth","nodeScaling","maxNodeSizeIncrements","activeAreaBoxSize","clusterLevelDifference","navigation","keyboard","speed","dataManipulation","initiallyVisible","hierarchicalLayout","levelSeparation","nodeSpacing","freezeForStabilization","smoothCurves","dynamic","roundness","dynamicSmoothCurves","maxVelocity","minVelocity","stabilizationIterations","link","editNode","back","addDescription","linkDescription","editEdgeDescription","addError","linkError","editError","editBoundError","deleteError","deleteClusterError","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","hoverObj","controlNodesActive","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","calculationNodes","calculationNodeIndices","nodeIndices","canvasTopLeft","canvasBottomRight","pointerPosition","areaCenter","previousScale","nodesData","edgesData","nodesListeners","_addNodes","_updateNodes","_removeNodes","edgesListeners","_addEdges","_updateEdges","_removeEdges","moving","timer","_setupHierarchicalLayout","zoomExtent","startWithClustering","mousetrap","MixinLoader","_getScriptPath","scripts","getElementsByTagName","src","_getRange","node","minY","maxY","minX","maxX","nodeId","_findCenter","_centerNetwork","initialZoom","disableStart","zoomLevel","numberOfNodes","factor","yDistance","xZoomLevel","yZoomLevel","_updateNodeIndexList","_clearNodeIndexList","idx","dotData","DOTToGraph","gephi","gephiData","parseGephi","_setNodes","_setEdges","_putDataInSector","_stabilize","dragGraph","onEdit","onEditEdge","onConnect","onDelete","editMode","groupname","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","_createKeyBinds","pinch","_onTap","_onDoubleTap","_onRelease","_onMouseMoveTitle","reset","_moveUp","_yStopMoving","_moveDown","_moveLeft","_xStopMoving","_moveRight","_zoomIn","_stopZoom","_zoomOut","_createManipulatorBar","_deleteSelected","_getPointer","pinched","_getScale","_handleTouch","_handleDragStart","_getNodeAt","_getTranslation","isSelected","_selectObject","objectId","selectionObj","xFixed","yFixed","_handleOnDrag","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","_handleTap","_handleDoubleTap","_handleOnHold","_handleOnRelease","_zoom","scaleOld","preScaleDragPointer","DOMtoCanvas","scaleFrac","tx","ty","updateClustersDefault","postScaleDragPointer","canvasToDOM","popupObj","_checkHidePopup","checkShow","_checkShowPopup","popupTimer","edgeId","_getEdgeAt","_hoverObject","_blurObject","lastPopupNode","getTitle","isOverlappingWith","edge","connected","popup","setPosition","setText","manipulationDiv","navigationDivs","oldNodesData","_updateSelection","angle","_resetLevels","_updateCalculationNodes","_reconnectEdges","_updateValueRange","updateLabels","setProperties","properties","oldEdgesData","oldEdge","disconnect","showInternalIds","_createBezierNodes","via","sectors","setValueRange","w","save","translate","_doInAllSectors","restore","offsetX","offsetY","_drawNodes","alwaysShow","setScaleAndPos","inArea","draw","sMax","_drawEdges","_drawControlNodes","_freezeDefinedNodes","_physicsTick","_restoreFrozenNodes","iterations","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","_doInAllActiveSectors","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","toggleFreeze","smooth","mass","internalMultiplier","parentEdgeId","positionBezierNode","mixin","storePosition","dataArray","allowedToMoveX","allowedToMoveY","focusOnNode","nodePosition","requiredScale","canvasCenter","distanceFromCenter","fromId","toId","widthSelected","customLength","originalFromId","originalToId","widthFixed","lengthFixed","controlNodesEnabled","controlNodes","positions","connectedNode","_drawLine","_drawArrow","_drawArrowCenter","_drawDashLine","attachEdge","detachEdge","xFrom","yFrom","xTo","yTo","xObj","yObj","_getDistanceToEdge","_getColor","colorObj","_getLineWidth","_line","midpointX","midpointY","_pointOnLine","_label","resize","_circle","_pointOnCircle","networkScaleInv","_getViaCoordinates","xVia","yVia","quadraticCurveTo","measureText","fillRect","mozDash","setLineDash","pattern","lineDashOffset","mozDashOffset","lineCap","dashedLine","percentage","atan2","arrow","edgeSegmentLength","fromBorderDist","distanceToBorder","fromBorderPoint","toBorderDist","toBorderPoint","x1","y1","x2","y2","x3","y3","lastX","lastY","minDistance","_getDistanceToLine","px","py","something","u","nodeIdFrom","nodeIdTo","getControlNodePositions","_enableControlNodes","_disableControlNodes","_getSelectedControlNode","fromDistance","toDistance","_restoreControlNodes","defaultIndex","DEFAULT","load","url","img","Image","onload","imagelist","grouplist","dynamicEdges","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","borderWidthSelected","fx","fy","vx","vy","minForce","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","getDistance","globalAlpha","drawImage","textSize","getTextSize","clusterLineWidth","selectionLineWidth","roundRect","database","diameter","circle","defaultSize","ellipse","_drawShape","radiusMultiplier","baseline","labelUnderNode","lineCount","yLine","inView","clearVelocity","updateVelocity","massBeforeClustering","energyBefore","styleAttr","fontFamily","WebkitBorderRadius","whiteSpace","maxWidth","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","o","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","convertEdge","dotEdge","graphEdge","graphData","dotNode","graphNode","subEdge","{","}","[","]",";","=",",","->","--","gephiJSON","allowedToMove","gEdges","gNodes","gEdge","source","attributes","gNode","eventType","getTouchList","collectEventData","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","n","r2d","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","dashArray","dashLength","dashCount","slope","distRemaining","dashIndex","PhysicsMixin","ClusterMixin","SectorsMixin","SelectionMixin","ManipulationMixin","NavigationMixin","HierarchicalLayoutMixin","_loadMixin","sourceVariable","mixinFunction","_clearMixin","_loadSelectedForceSolver","_loadPhysicsConfiguration","hubThreshold","activeSector","drawingNode","blockConnectingEdgeSelection","forceAppendSelection","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","_addEvent","_characterFromEvent","fromCharCode","_MAP","_KEYCODE_MAP","_stop","tag_name","tagName","contentEditable","_modifiersMatch","modifiers1","modifiers2","_resetSequences","do_not_reset","active_sequences","_sequence_levels","_inside_sequence","_getMatches","character","modifiers","combination","matches","_isModifier","seq","combo","_eventModifiers","altKey","metaKey","_fireCallback","cancelBubble","_handleCharacter","processed_sequence_callback","_handleKey","keyCode","_ignore_next_keyup","_resetSequenceTimer","_reset_timer","_getReverseMap","_REVERSE_MAP","_pickBestAction","_bindSequence","_increaseSequence","_callbackAndReset","_bindSingle","sequence_name","sequence","_SPECIAL_ALIASES","_SHIFT_MAP","_bindMultiple","combinations",8,9,13,16,17,18,20,27,32,33,34,35,36,37,38,39,40,45,46,91,93,224,106,107,109,110,111,186,187,188,189,190,191,192,219,220,221,222,"~","!","@","#","$","%","^","&","*","(",")","_","+",":","\"","<",">","?","|","command","return","escape","_direct_map","unbind","trigger","__WEBPACK_AMD_DEFINE_RESULT__","global","dfl","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","deprecate","msg","printMsg","suppressDeprecationWarnings","warn","firstTime","padToken","func","leftZeroFill","ordinalizeToken","period","lang","ordinal","Language","Moment","config","checkOverflow","Duration","duration","normalizedInput","normalizeObjectUnits","years","quarters","quarter","months","month","weeks","week","days","day","hour","minute","second","millisecond","_milliseconds","_days","_months","_bubble","cloneMoment","momentProperties","absRound","number","targetLength","forceSign","output","addOrSubtractDurationFromMoment","mom","isAdding","updateOffset","_d","setTime","rawSetter","rawGetter","rawMonthSetter","input","compareArrays","dontConvert","lengthDiff","diffs","toInt","normalizeUnits","units","lowered","unitAliases","camelFunctions","inputObject","normalizedProp","makeList","setter","getter","method","_lang","results","utc","set","argumentForCoercion","coercedNumber","isFinite","daysInMonth","UTC","getUTCDate","weeksInYear","dow","doy","weekOfYear","daysInYear","isLeapYear","_a","_pf","DATE","_overflowDayOfYear","isValid","_isValid","getTime","_strict","normalizeLanguage","makeAs","model","_isUTC","zone","_offset","local","loadLang","abbr","languages","unloadLang","getLangDefinition","k","hasModule","removeFormattingTokens","makeFormatFunction","formattingTokens","formatTokenFunctions","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","getParseRegexForToken","parseTokenOneDigit","parseTokenThreeDigits","parseTokenFourDigits","parseTokenOneToFourDigits","parseTokenSignedNumber","parseTokenSixDigits","parseTokenOneToSixDigits","parseTokenTwoDigits","parseTokenOneToThreeDigits","parseTokenWord","_l","_meridiemParse","parseTokenTimestampMs","parseTokenTimezone","parseTokenT","parseTokenDigits","parseTokenOneOrTwoDigits","parseTokenOrdinal","RegExp","regexpEscape","unescapeFormat","timezoneMinutesFromString","string","possibleTzMatches","tzChunk","parts","parseTimezoneChunker","addTimeToArrayFromToken","datePartArray","monthsParse","_dayOfYear","parseTwoDigitYear","_isPm","isPM","_useUTC","_tzm","weekdaysParse","_w","invalidWeekday","dayOfYearFromWeekInfo","weekYear","weekday","temp","GG","W","E","_week","gg","dayOfYearFromWeeks","dayOfYear","dateFromConfig","currentDate","yearToUse","currentDateArray","makeUTCDate","getUTCMonth","makeDate","setUTCMinutes","getUTCMinutes","dateFromObject","_i","getUTCFullYear","makeDateFromStringAndFormat","_f","ISO_8601","parseISO","parsedInput","tokens","skipped","stringLength","totalParsedInputLength","matched","p4","makeDateFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","NaN","score","l","isoRegex","isoDates","isoTimes","makeDateFromString","createFromInputFallback","makeDateFromInput","aspNetJsonRegex","ms","setUTCFullYear","parseWeekday","language","substituteTimeAgo","withoutSuffix","isFuture","relativeTime","relativeTimeThresholds","dd","dm","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","daysToAdd","getUTCDay","makeMoment","invalid","preparse","pickBy","moments","res","dayOfMonth","unit","makeAccessor","keepTime","makeDurationGetter","makeDurationAsGetter","makeGlobal","shouldDeprecate","ender","oldGlobalMoment","globalScope","VERSION","_isAMomentObject","aspNetTimeSpanJsonRegex","isoDurationRegex","isoFormat","unitMillisecondFactors","Milliseconds","Seconds","Minutes","Hours","Days","Months","Years","D","Q","DDD","dayofyear","isoweekday","isoweek","weekyear","isoweekyear","ordinalizeTokens","paddedTokens","MMM","monthsShort","MMMM","weekdaysMin","ddd","weekdaysShort","dddd","weekdays","isoWeek","YY","YYYY","YYYYY","YYYYYY","gggg","ggggg","isoWeekYear","GGGG","GGGGG","isoWeekday","meridiem","SS","SSS","SSSS","Z","ZZ","zoneAbbr","zz","zoneName","unix","lists","DDDD","_monthsShort","monthName","regex","_monthsParse","_weekdays","_weekdaysShort","_weekdaysMin","weekdayName","_weekdaysParse","_longDateFormat","LT","L","LL","LLL","LLLL","val","isLower","_calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","_relativeTime","future","past","mm","hh","MM","yy","pastFuture","_ordinal","postformat","_invalidDate","ret","parseIso","isDuration","inp","version","defaultFormat","relativeTimeThreshold","threshold","limit","_abbr","langData","flags","parseZone","isDSTShifted","parsingFlags","invalidAt","inputString","dur","asFloat","that","zoneDiff","startOf","humanize","fromNow","sod","isDST","getDay","endOf","isAfter","isBefore","isSame","getTimezoneOffset","_changeInProgress","hasAlignedHourOffset","isoWeeksInYear","weekInfo","dates","isoWeeks","toJSON","withSuffix","difference","toIsoString","asSeconds","asMonths","require","noGlobal","setup","READY","Event","determineEventTypes","Utils","each","gestures","Detection","register","onTouch","DOCUMENT","EVENT_MOVE","detect","EVENT_END","Instance","defaults","behavior","userSelect","touchAction","touchCallout","contentZooming","userDrag","tapHighlightColor","HAS_POINTEREVENTS","pointerEnabled","msPointerEnabled","HAS_TOUCHEVENTS","IS_MOBILE","NO_MOUSEEVENTS","CALCULATE_INTERVAL","EVENT_TYPES","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_UP","DIRECTION_RIGHT","POINTER_MOUSE","POINTER_TOUCH","POINTER_PEN","EVENT_START","EVENT_RELEASE","EVENT_TOUCH","plugins","utils","dest","handler","iterator","context","inStr","find","inArray","hasParent","getCenter","getVelocity","deltaTime","getAngle","touch1","touch2","getDirection","getScale","getRotation","isVertical","setPrefixedCss","toggle","prefixes","toCamelCase","toggleBehavior","falseFn","onselectstart","ondragstart","str","preventMouseEvents","started","shouldDetect","hook","onTouchHandler","ev","triggerType","srcType","isPointer","isMouse","buttons","PointerEvent","matchType","updatePointer","doDetect","touchList","touchListLength","triggerChange","changedLength","changedTouches","evData","identifiers","identifier","pointerType","timeStamp","preventManipulation","stopDetect","pointers","touchlist","pointerEvent","pointerId","pt","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","MSPOINTER_TYPE_PEN","detection","stopped","startDetect","inst","eventData","startEvent","lastEvent","lastCalcEvent","futureCalcEvent","lastCalcData","extendEventData","instOptions","getCalculatedData","recalc","calcEv","calcData","velocity","velocityX","velocityY","interimAngle","interimDirection","startEv","lastEv","rotation","eventStartHandler","eventHandlers","createEvent","initEvent","dispatchEvent","state","dispose","eh","dragGesture","dragMaxTouches","triggered","dragMinDistance","startCenter","dragDistanceCorrection","dragLockToAxis","dragLockMinDistance","lastDirection","dragBlockVertical","dragBlockHorizontal","Drag","Gesture","holdGesture","holdTimeout","holdThreshold","Hold","Release","Infinity","Swipe","swipeMinTouches","swipeMaxTouches","swipeVelocityX","swipeVelocityY","tapGesture","sincePrev","didDoubleTap","hasMoved","tapMaxDistance","tapMaxTime","doubleTapInterval","doubleTapDistance","tapAlways","Tap","Touch","preventMouse","transformGesture","scaleThreshold","rotationThreshold","transformMinScale","transformMinRotation","Transform","clusterToFit","maxNumberOfNodes","reposition","maxLevels","forceAggregateHubs","normalizeClusterLevels","increaseClusterLevel","repositionNodes","openCluster","isMovingBeforeClustering","_nodeInActiveArea","_sector","_addSector","decreaseClusterLevel","_expandClusterNode","_updateDynamicEdges","updateClusters","zoomDirection","recursive","doNotStart","amountOfNodes","_collapseSector","_formClusters","_openClusters","_openClustersBySize","_aggregateHubs","handleChains","chainPercentage","_getChainFraction","_reduceAmountOfChains","_getHubSize","_formClustersByHub","openAll","containedNodeId","childNode","_expelChildFromParent","_unselectAll","_releaseContainedEdges","_connectEdgeBackToChild","_validateEdges","othersPresent","childNodeId","_repositionBezierNodes","_formClustersByZoom","_forceClustersByZoom","minLength","_addToCluster","_clusterToSmallestNeighbour","smallestNeighbour","smallestNeighbourNode","neighbour","onlyEqual","_formClusterFromHub","hubNode","absorptionSizeOffset","allowCluster","edgesIdarray","amountOfInitialEdges","_addToContainedEdges","_connectEdgeToCluster","_containCircularEdgesFromNode","massBefore","correction","edgeToId","edgeFromId","_addToReroutedEdges","maxLevel","minLevel","clusterLevel","targetLevel","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","fraction","reduceAmount","chains","total","_switchToSector","sectorId","sectorType","_switchToActiveSector","_switchToFrozenSector","_switchToSupportSector","_loadLatestSector","_previousSector","_setActiveSector","newId","_forgetLastSector","_createNewSector","_deleteActiveSector","_deleteFrozenSector","_freezeSector","_activateSector","_mergeThisWithFrozen","_collapseThisToSingleCluster","sector","unqiueIdentifier","previousSector","runFunction","argument","_doInAllFrozenSectors","_drawSectorNodes","_drawAllSectorNodes","_getNodesOverlappingWith","overlappingNodes","_getAllNodesOverlappingWith","_pointerToPositionObject","positionObject","_getEdgesOverlappingWith","overlappingEdges","_getAllEdgesOverlappingWith","_addToSelection","_addToHover","_removeFromSelection","doNotTrigger","_unselectClusters","_getSelectedNodeCount","_getSelectedNode","_getSelectedEdge","_getSelectedEdgeCount","_getSelectedObjectCount","_selectionIsEmpty","_clusterInSelection","_selectConnectedEdges","_hoverConnectedEdges","_unselectConnectedEdges","append","highlightEdges","nodeIds","getSelectedNodes","edgeIds","getSelectedEdges","idArray","RangeError","selectNodes","selectEdges","_clearManipulatorBar","_restoreOverloadedFunctions","functionName","_toggleEditMode","toolbar","getElementById","boundFunction","edgeBeingEdited","selectedControlNode","addNodeButton","_createAddNodeToolbar","addEdgeButton","_createAddEdgeToolbar","editButton","_editNode","_createEditEdgeToolbar","editModeButton","backButton","_addNode","_handleConnect","_finishConnect","_selectControlNode","_controlNodeDrag","_releaseControlNode","newNode","_editEdge","alert","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","wrapper","navigationDivActions","_stopMovement","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","amount","maxCount","_setLevel","parentId","parentLevel","nodeMoved","_restoreNodes","graphToggleSmoothCurves","graph_toggleSmooth","graphRepositionNodes","showValueOfRange","graphGenerateOptions","optionsSpecific","radioButton1","radioButton2","checked","backupConstants","optionsDiv","switchConfigurations","radioButton","querySelector","tableId","table","constantsVariableName","valueId","rangeValue","_overWriteGraphConstants","RepulsionMixin","HierarchialRepulsionMixin","BarnesHutMixin","_toggleBarnesHut","barnesHutTree","_initializeForceCalculation","_calculateForces","_calculateGravitationalForces","_calculateNodeForces","_calculateSpringForcesWithSupport","_calculateHierarchicalSpringForces","_calculateSpringForces","supportNodes","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","nameArray","webpackContext","req","webpackContextResolve","resolve","repulsingForce","a_base","minimumDistance","steepness","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","MAX_VALUE","sizeDiff","minimumTreeSize","rootSize","halfRootSize","centerX","centerY","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","_placeInRegion","region","containedNode","_insertRegion","childSize","_drawTree","_drawBranch","branch","webpackPolyfill","paths"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/vis.min.js b/dist/vis.min.js
index 8a3cd1fa..592c0fe7 100644
--- a/dist/vis.min.js
+++ b/dist/vis.min.js
@@ -4,7 +4,7 @@
*
* A dynamic, browser-based visualization library.
*
- * @version 3.0.1-SNAPSHOT
+ * @version 3.1.0
* @date 2014-07-22
*
* @license
@@ -22,16 +22,16 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(s){if(i[s])return i[s].exports;var o=i[s]={exports:{},id:s,loaded:!1};return t[s].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){e.util=i(1),e.DOMutil=i(2),e.DataSet=i(3),e.DataView=i(4),e.Graph3d=i(5),e.graph3d={Camera:i(6),Filter:i(7),Point2d:i(8),Point3d:i(9),Slider:i(10),StepNumber:i(11)},e.Timeline=i(12),e.Graph2d=i(13),e.timeline={DataStep:i(14),Range:i(15),stack:i(16),TimeStep:i(17),components:{items:{Item:i(28),ItemBox:i(29),ItemPoint:i(30),ItemRange:i(31)},Component:i(18),CurrentTime:i(19),CustomTime:i(20),DataAxis:i(21),GraphGroup:i(22),Group:i(23),ItemSet:i(24),Legend:i(25),LineGraph:i(26),TimeAxis:i(27)}},e.Network=i(32),e.network={Edge:i(33),Groups:i(34),Images:i(35),Node:i(36),Popup:i(37),dotparser:i(38)},e.Graph=function(){throw new Error("Graph is renamed to Network. Please create a graph as new vis.Network(...)")},e.moment=i(39),e.hammer=i(40)},function(module,exports,__webpack_require__){var moment=__webpack_require__(39);exports.isNumber=function(t){return t instanceof Number||"number"==typeof t},exports.isString=function(t){return t instanceof String||"string"==typeof t},exports.isDate=function(t){if(t instanceof Date)return!0;if(exports.isString(t)){var e=ASPDateRegex.exec(t);if(e)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},exports.isDataTable=function(t){return"undefined"!=typeof google&&google.visualization&&google.visualization.DataTable&&t instanceof google.visualization.DataTable},exports.randomUUID=function(){var t=function(){return Math.floor(65536*Math.random()).toString(16)};return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()},exports.extend=function(t){for(var e=1,i=arguments.length;i>e;e++){var s=arguments[e];for(var o in s)s.hasOwnProperty(o)&&(t[o]=s[o])}return t},exports.selectiveExtend=function(t,e){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(var i=2;ii;i++)if(t[i]!=e[i])return!1;return!0},exports.convert=function(t,e){var i;if(void 0===t)return void 0;if(null===t)return null;if(!e)return t;if("string"!=typeof e&&!(e instanceof String))throw new Error("Type must be a string");switch(e){case"boolean":case"Boolean":return Boolean(t);case"number":case"Number":return Number(t.valueOf());case"string":case"String":return String(t);case"Date":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(moment.isMoment(t))return new Date(t.valueOf());if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])):moment(t).toDate();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"Moment":if(exports.isNumber(t))return moment(t);if(t instanceof Date)return moment(t.valueOf());if(moment.isMoment(t))return moment(t);if(exports.isString(t))return i=ASPDateRegex.exec(t),moment(i?Number(i[1]):t);throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"ISODate":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(moment.isMoment(t))return t.toDate().toISOString();if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])).toISOString():new Date(t).toISOString();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ISODate");case"ASPDate":if(exports.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(exports.isString(t)){i=ASPDateRegex.exec(t);var s;return s=i?new Date(Number(i[1])).valueOf():new Date(t).valueOf(),"/Date("+s+")/"}throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+e+'"')}};var ASPDateRegex=/^\/?Date\((\-?\d+)/i;exports.getType=function(t){var e=typeof t;return"object"==e?null==t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":t instanceof Array?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":e},exports.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left+window.pageXOffset},exports.getAbsoluteTop=function(t){return t.getBoundingClientRect().top+window.pageYOffset},exports.addClassName=function(t,e){var i=t.className.split(" ");-1==i.indexOf(e)&&(i.push(e),t.className=i.join(" "))},exports.removeClassName=function(t,e){var i=t.className.split(" "),s=i.indexOf(e);-1!=s&&(i.splice(s,1),t.className=i.join(" "))},exports.forEach=function(t,e){var i,s;if(t instanceof Array)for(i=0,s=t.length;s>i;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},exports.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},exports.updateProperty=function(t,e,i){return t[e]!==i?(t[e]=i,!0):!1},exports.addEventListener=function(t,e,i,s){t.addEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,s)):t.attachEvent("on"+e,i)},exports.removeEventListener=function(t,e,i,s){t.removeEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,s)):t.detachEvent("on"+e,i)},exports.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},exports.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},exports.option={},exports.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},exports.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},exports.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},exports.option.asSize=function(t,e){return"function"==typeof t&&(t=t()),exports.isString(t)?t:exports.isNumber(t)?t+"px":e||null},exports.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},exports.GiveDec=function(Hex){var Value;return Value="A"==Hex?10:"B"==Hex?11:"C"==Hex?12:"D"==Hex?13:"E"==Hex?14:"F"==Hex?15:eval(Hex)},exports.GiveHex=function(t){var e;return e=10==t?"A":11==t?"B":12==t?"C":13==t?"D":14==t?"E":15==t?"F":""+t},exports.parseColor=function(t){var e;if(exports.isString(t))if(exports.isValidHex(t)){var i=exports.hexToHSV(t),s={h:i.h,s:.45*i.s,v:Math.min(1,1.05*i.v)},o={h:i.h,s:Math.min(1,1.25*i.v),v:.6*i.v},n=exports.HSVToHex(o.h,o.h,o.v),r=exports.HSVToHex(s.h,s.s,s.v);e={background:t,border:n,highlight:{background:r,border:n},hover:{background:r,border:n}}}else e={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}};else e={},e.background=t.background||"white",e.border=t.border||e.background,exports.isString(t.highlight)?e.highlight={border:t.highlight,background:t.highlight}:(e.highlight={},e.highlight.background=t.highlight&&t.highlight.background||e.background,e.highlight.border=t.highlight&&t.highlight.border||e.border),exports.isString(t.hover)?e.hover={border:t.hover,background:t.hover}:(e.hover={},e.hover.background=t.hover&&t.hover.background||e.background,e.hover.border=t.hover&&t.hover.border||e.border);return e},exports.hexToRGB=function(t){t=t.replace("#","").toUpperCase();var e=exports.GiveDec(t.substring(0,1)),i=exports.GiveDec(t.substring(1,2)),s=exports.GiveDec(t.substring(2,3)),o=exports.GiveDec(t.substring(3,4)),n=exports.GiveDec(t.substring(4,5)),r=exports.GiveDec(t.substring(5,6)),a=16*e+i,h=16*s+o,i=16*n+r;return{r:a,g:h,b:i}},exports.RGBToHex=function(t,e,i){var s=exports.GiveHex(Math.floor(t/16)),o=exports.GiveHex(t%16),n=exports.GiveHex(Math.floor(e/16)),r=exports.GiveHex(e%16),a=exports.GiveHex(Math.floor(i/16)),h=exports.GiveHex(i%16),d=s+o+n+r+a+h;return"#"+d},exports.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var s=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));if(s==o)return{h:0,s:0,v:s};var n=t==s?e-i:i==s?t-e:i-t,r=t==s?3:i==s?1:5,a=60*(r-n/(o-s))/360,h=(o-s)/o,d=o;return{h:a,s:h,v:d}},exports.HSVToRGB=function(t,e,i){var s,o,n,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:s=i,o=l,n=h;break;case 1:s=d,o=i,n=h;break;case 2:s=h,o=i,n=l;break;case 3:s=h,o=d,n=i;break;case 4:s=l,o=h,n=i;break;case 5:s=i,o=h,n=d}return{r:Math.floor(255*s),g:Math.floor(255*o),b:Math.floor(255*n)}},exports.HSVToHex=function(t,e,i){var s=exports.HSVToRGB(t,e,i);return exports.RGBToHex(s.r,s.g,s.b)},exports.hexToHSV=function(t){var e=exports.hexToRGB(t);return exports.RGBToHSV(e.r,e.g,e.b)},exports.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},exports.selectiveBridgeObject=function(t,e){if("object"==typeof e){for(var i=Object.create(e),s=0;sa;)o=void 0===s?n[u][i]:n[u][i][s],n[u].isVisible(e)?h=!0:(o=r&&console.log("BinarySearch too many iterations. Aborting.")}return u},exports.binarySearchGeneric=function(t,e,i,s){var o,n,r,a,h=1e4,d=0,l=t,c=!1,p=0,u=l.length,m=p,f=u,g=Math.floor(.5*(u+p));if(0==u)g=-1;else if(1==u)r=l[g][i],g=r==e?0:-1;else{for(u-=1;0==c&&h>d;)n=l[Math.max(0,g-1)][i],r=l[g][i],a=l[Math.min(l.length-1,g+1)][i],r==e||e>n&&r>e||e>r&&a>e?(c=!0,r!=e&&("before"==s?e>n&&r>e&&(g=Math.max(0,g-1)):e>r&&a>e&&(g=Math.min(l.length-1,g+1)))):(e>r?m=Math.floor(.5*(u+p)):f=Math.floor(.5*(u+p)),o=Math.floor(.5*(u+p)),p==m&&u==f?(g=-1,c=!0):(u=f,p=m,g=Math.floor(.5*(u+p)))),d++;d>=h&&console.log("BinarySearch too many iterations. Aborting.")}return g}},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(s)):(s=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(s)),e[t].used.push(s),s},e.getDOMElement=function(t,e,i){var s;return e.hasOwnProperty(t)?e[t].redundant.length>0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElement(t),i.appendChild(s)):(s=document.createElement(t),e[t]={used:[],redundant:[]},i.appendChild(s)),e[t].used.push(s),s},e.drawPoint=function(t,i,s,o,n){var r;return"circle"==s.options.drawPoints.style?(r=e.getSVGElement("circle",o,n),r.setAttributeNS(null,"cx",t),r.setAttributeNS(null,"cy",i),r.setAttributeNS(null,"r",.5*s.options.drawPoints.size),r.setAttributeNS(null,"class",s.className+" point")):(r=e.getSVGElement("rect",o,n),r.setAttributeNS(null,"x",t-.5*s.options.drawPoints.size),r.setAttributeNS(null,"y",i-.5*s.options.drawPoints.size),r.setAttributeNS(null,"width",s.options.drawPoints.size),r.setAttributeNS(null,"height",s.options.drawPoints.size),r.setAttributeNS(null,"class",s.className+" point")),r},e.drawBar=function(t,i,s,o,n,r,a){var h=e.getSVGElement("rect",r,a);h.setAttributeNS(null,"x",t-.5*s),h.setAttributeNS(null,"y",i),h.setAttributeNS(null,"width",s),h.setAttributeNS(null,"height",o),h.setAttributeNS(null,"class",n)}},function(t,e,i){function s(t,e){if(!t||Array.isArray(t)||o.isDataTable(t)||(e=t,t=null),this._options=e||{},this._data={},this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i in this._options.type)if(this._options.type.hasOwnProperty(i)){var s=this._options.type[i];this._type[i]="Date"==s||"ISODate"==s||"ASPDate"==s?"Date":s}if(this._options.convert)throw new Error('Option "convert" is deprecated. Use "type" instead.');this._subscribers={},t&&this.add(t)}var o=i(1);s.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},s.prototype.subscribe=s.prototype.on,s.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},s.prototype.unsubscribe=s.prototype.off,s.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var s=[];t in this._subscribers&&(s=s.concat(this._subscribers[t])),"*"in this._subscribers&&(s=s.concat(this._subscribers["*"]));for(var o=0;or;r++)i=n._addItem(t[r]),s.push(i);else if(o.isDataTable(t))for(var h=this._getColumnNames(t),d=0,l=t.getNumberOfRows();l>d;d++){for(var c={},p=0,u=h.length;u>p;p++){var m=h[p];c[m]=t.getValue(d,p)}i=n._addItem(c),s.push(i)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");i=n._addItem(t),s.push(i)}return s.length&&this._trigger("add",{items:s},e),s},s.prototype.update=function(t,e){var i=[],s=[],n=this,r=n._fieldId,a=function(t){var e=t[r];n._data[e]?(e=n._updateItem(t),s.push(e)):(e=n._addItem(t),i.push(e))};if(Array.isArray(t))for(var h=0,d=t.length;d>h;h++)a(t[h]);else if(o.isDataTable(t))for(var l=this._getColumnNames(t),c=0,p=t.getNumberOfRows();p>c;c++){for(var u={},m=0,f=l.length;f>m;m++){var g=l[m];u[g]=t.getValue(c,m)}a(u)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");a(t)}return i.length&&this._trigger("add",{items:i},e),s.length&&this._trigger("update",{items:s},e),i.concat(s)},s.prototype.get=function(){var t,e,i,s,n=this,r=o.getType(arguments[0]);"String"==r||"Number"==r?(t=arguments[0],i=arguments[1],s=arguments[2]):"Array"==r?(e=arguments[0],i=arguments[1],s=arguments[2]):(i=arguments[0],s=arguments[1]);var a;if(i&&i.returnType){var h=["DataTable","Array","Object"];if(a=-1==h.indexOf(i.returnType)?"Array":i.returnType,s&&a!=o.getType(s))throw new Error('Type of parameter "data" ('+o.getType(s)+") does not correspond with specified options.type ("+i.type+")");if("DataTable"==a&&!o.isDataTable(s))throw new Error('Parameter "data" must be a DataTable when options.type is "DataTable"')}else a=s&&"DataTable"==o.getType(s)?"DataTable":"Array";var d,l,c,p,u=i&&i.type||this._options.type,m=i&&i.filter,f=[];if(void 0!=t)d=n._getItem(t,u),m&&!m(d)&&(d=null);else if(void 0!=e)for(c=0,p=e.length;p>c;c++)d=n._getItem(e[c],u),(!m||m(d))&&f.push(d);else for(l in this._data)this._data.hasOwnProperty(l)&&(d=n._getItem(l,u),(!m||m(d))&&f.push(d));if(i&&i.order&&void 0==t&&this._sort(f,i.order),i&&i.fields){var g=i.fields;if(void 0!=t)d=this._filterFields(d,g);else for(c=0,p=f.length;p>c;c++)f[c]=this._filterFields(f[c],g)}if("DataTable"==a){var v=this._getColumnNames(s);if(void 0!=t)n._appendRow(s,v,d);else for(c=0;cc;c++)s.push(f[c]);return s}return f},s.prototype.getIds=function(t){var e,i,s,o,n,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,l=[];if(a)if(h){n=[];for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&n.push(o));for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&l.push(o[this._fieldId]));else if(h){n=[];for(s in r)r.hasOwnProperty(s)&&n.push(r[s]);for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=r[s],l.push(o[this._fieldId]));return l},s.prototype.getDataSet=function(){return this},s.prototype.forEach=function(t,e){var i,s,o=e&&e.filter,n=e&&e.type||this._options.type,r=this._data;if(e&&e.order)for(var a=this.get(e),h=0,d=a.length;d>h;h++)i=a[h],s=i[this._fieldId],t(i,s);else for(s in r)r.hasOwnProperty(s)&&(i=this._getItem(s,n),(!o||o(i))&&t(i,s))},s.prototype.map=function(t,e){var i,s=e&&e.filter,o=e&&e.type||this._options.type,n=[],r=this._data;for(var a in r)r.hasOwnProperty(a)&&(i=this._getItem(a,o),(!s||s(i))&&n.push(t(i,a)));return e&&e.order&&this._sort(n,e.order),n},s.prototype._filterFields=function(t,e){var i={};for(var s in t)t.hasOwnProperty(s)&&-1!=e.indexOf(s)&&(i[s]=t[s]);return i},s.prototype._sort=function(t,e){if(o.isString(e)){var i=e;t.sort(function(t,e){var s=t[i],o=e[i];return s>o?1:o>s?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},s.prototype.remove=function(t,e){var i,s,o,n=[];if(Array.isArray(t))for(i=0,s=t.length;s>i;i++)o=this._remove(t[i]),null!=o&&n.push(o);else o=this._remove(t),null!=o&&n.push(o);return n.length&&this._trigger("remove",{items:n},e),n},s.prototype._remove=function(t){if(o.isNumber(t)||o.isString(t)){if(this._data[t])return delete this._data[t],t}else if(t instanceof Object){var e=t[this._fieldId];if(e&&this._data[e])return delete this._data[e],e}return null},s.prototype.clear=function(t){var e=Object.keys(this._data);return this._data={},this._trigger("remove",{items:e},t),e},s.prototype.max=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||r>s)&&(i=n,s=r)}return i},s.prototype.min=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||s>r)&&(i=n,s=r)}return i},s.prototype.distinct=function(t){var e,i=this._data,s=[],n=this._options.type&&this._options.type[t]||null,r=0;for(var a in i)if(i.hasOwnProperty(a)){var h=i[a],d=h[t],l=!1;for(e=0;r>e;e++)if(s[e]==d){l=!0;break}l||void 0===d||(s[r]=d,r++)}if(n)for(e=0;ei;i++)e[i]=t.getColumnId(i)||t.getColumnLabel(i);return e},s.prototype._appendRow=function(t,e,i){for(var s=t.addRow(),o=0,n=e.length;n>o;o++){var r=e[o];t.setValue(s,o,i[r])}},t.exports=s},function(t,e,i){function s(t,e){this._data=null,this._ids={},this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var o=i(1),n=i(3);s.prototype.setData=function(t){var e,i,s;if(this._data){this._data.unsubscribe&&this._data.unsubscribe("*",this.listener),e=[];for(var o in this._ids)this._ids.hasOwnProperty(o)&&e.push(o);this._ids={},this._trigger("remove",{items:e})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),i=0,s=e.length;s>i;i++)o=e[i],this._ids[o]=!0;this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},s.prototype.get=function(){var t,e,i,s=this,n=o.getType(arguments[0]);"String"==n||"Number"==n||"Array"==n?(t=arguments[0],e=arguments[1],i=arguments[2]):(e=arguments[0],i=arguments[1]);var r=o.extend({},this._options,e);this._options.filter&&e&&e.filter&&(r.filter=function(t){return s._options.filter(t)&&e.filter(t)});var a=[];return void 0!=t&&a.push(t),a.push(r),a.push(i),this._data&&this._data.get.apply(this._data,a)},s.prototype.getIds=function(t){var e;if(this._data){var i,s=this._options.filter;i=t&&t.filter?s?function(e){return s(e)&&t.filter(e)}:t.filter:s,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},s.prototype.getDataSet=function(){for(var t=this;t instanceof s;)t=t._data;return t||null},s.prototype._onEvent=function(t,e,i){var s,o,n,r,a=e&&e.items,h=this._data,d=[],l=[],c=[];if(a&&h){switch(t){case"add":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r&&(this._ids[n]=!0,d.push(n));break;case"update":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r?this._ids[n]?l.push(n):(this._ids[n]=!0,d.push(n)):this._ids[n]&&(delete this._ids[n],c.push(n));break;case"remove":for(s=0,o=a.length;o>s;s++)n=a[s],this._ids[n]&&(delete this._ids[n],c.push(n))}d.length&&this._trigger("add",{items:d},i),l.length&&this._trigger("update",{items:l},i),c.length&&this._trigger("remove",{items:c},i)}},s.prototype.on=n.prototype.on,s.prototype.off=n.prototype.off,s.prototype._trigger=n.prototype._trigger,s.prototype.subscribe=s.prototype.on,s.prototype.unsubscribe=s.prototype.off,t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this.containerElement=t,this.width="400px",this.height="400px",this.margin=10,this.defaultXCenter="55%",this.defaultYCenter="50%",this.xLabel="x",this.yLabel="y",this.zLabel="z",this.filterLabel="time",this.legendLabel="value",this.style=s.STYLE.DOT,this.showPerspective=!0,this.showGrid=!0,this.keepAspectRatio=!0,this.showShadow=!1,this.showGrayBottom=!1,this.showTooltip=!1,this.verticalRatio=.5,this.animationInterval=1e3,this.animationPreload=!1,this.camera=new l,this.eye=new h(0,0,-1),this.dataTable=null,this.dataPoints=null,this.colX=void 0,this.colY=void 0,this.colZ=void 0,this.colValue=void 0,this.colFilter=void 0,this.xMin=0,this.xStep=void 0,this.xMax=1,this.yMin=0,this.yStep=void 0,this.yMax=1,this.zMin=0,this.zStep=void 0,this.zMax=1,this.valueMin=0,this.valueMax=1,this.xBarWidth=1,this.yBarWidth=1,this.colorAxis="#4D4D4D",this.colorGrid="#D3D3D3",this.colorDot="#7DC1FF",this.colorDotBorder="#3267D2",this.create(),this.setOptions(i),e&&this.setData(e)}var o=i(44),n=i(3),r=i(4),a=i(1),h=i(9),d=i(8),l=i(6),c=i(7),p=i(10),u=i(11);o(s.prototype),s.prototype._setScale=function(){this.scale=new h(1/(this.xMax-this.xMin),1/(this.yMax-this.yMin),1/(this.zMax-this.zMin)),this.keepAspectRatio&&(this.scale.x3&&(this.colFilter=3);else{if(this.style!==s.STYLE.DOTCOLOR&&this.style!==s.STYLE.DOTSIZE&&this.style!==s.STYLE.BARCOLOR&&this.style!==s.STYLE.BARSIZE)throw'Unknown style "'+this.style+'"';this.colX=0,this.colY=1,this.colZ=2,this.colValue=3,t.getNumberOfColumns()>4&&(this.colFilter=4)}},s.prototype.getNumberOfRows=function(t){return t.length},s.prototype.getNumberOfColumns=function(t){var e=0;for(var i in t[0])t[0].hasOwnProperty(i)&&e++;return e},s.prototype.getDistinctValues=function(t,e){for(var i=[],s=0;st[s][e]&&(i.min=t[s][e]),i.maxt;t++){var f=(t-p)/(m-p),g=240*f,v=this._hsv2rgb(g,1,1);c.strokeStyle=v,c.beginPath(),c.moveTo(h,r+t),c.lineTo(a,r+t),c.stroke()}c.strokeStyle=this.colorAxis,c.strokeRect(h,r,i,n)}if(this.style===s.STYLE.DOTSIZE&&(c.strokeStyle=this.colorAxis,c.fillStyle=this.colorDot,c.beginPath(),c.moveTo(h,r),c.lineTo(a,r),c.lineTo(a-i+e,d),c.lineTo(h,d),c.closePath(),c.fill(),c.stroke()),this.style===s.STYLE.DOTCOLOR||this.style===s.STYLE.DOTSIZE){var y=5,b=new u(this.valueMin,this.valueMax,(this.valueMax-this.valueMin)/5,!0);for(b.start(),b.getCurrent()0?this.yMin:this.yMax,o=this._convert3Dto2D(new h(x,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+i.getCurrent()+" ",o.x,o.y),i.next()}for(g.lineWidth=1,s=void 0===this.defaultYStep,i=new u(this.yMin,this.yMax,this.yStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,o=this._convert3Dto2D(new h(n,i.getCurrent(),this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+i.getCurrent()+" ",o.x,o.y),i.next();for(g.lineWidth=1,s=void 0===this.defaultZStep,i=new u(this.zMin,this.zMax,this.zStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new h(n,r,i.getCurrent())),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(t.x-b,t.y),g.stroke(),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(i.getCurrent()+" ",t.x-5,t.y),i.next();g.lineWidth=1,t=this._convert3Dto2D(new h(n,r,this.zMin)),e=this._convert3Dto2D(new h(n,r,this.zMax)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),g.lineWidth=1,p=this._convert3Dto2D(new h(this.xMin,this.yMin,this.zMin)),m=this._convert3Dto2D(new h(this.xMax,this.yMin,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(m.x,m.y),g.stroke(),p=this._convert3Dto2D(new h(this.xMin,this.yMax,this.zMin)),m=this._convert3Dto2D(new h(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(m.x,m.y),g.stroke(),g.lineWidth=1,t=this._convert3Dto2D(new h(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new h(this.xMin,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),t=this._convert3Dto2D(new h(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new h(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke();var w=this.xLabel;w.length>0&&(c=.1/this.scale.y,n=(this.xMin+this.xMax)/2,r=Math.cos(_)>0?this.yMin-c:this.yMax+c,o=this._convert3Dto2D(new h(n,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(w,o.x,o.y));var S=this.yLabel;S.length>0&&(l=.1/this.scale.x,n=Math.sin(_)>0?this.xMin-l:this.xMax+l,r=(this.yMin+this.yMax)/2,o=this._convert3Dto2D(new h(n,r,this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(S,o.x,o.y));var M=this.zLabel;M.length>0&&(d=30,n=Math.cos(_)>0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,o=this._convert3Dto2D(new h(n,r,a)),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(M,o.x-d,o.y))},s.prototype._hsv2rgb=function(t,e,i){var s,o,n,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:s=r,o=h,n=0;break;case 1:s=h,o=r,n=0;break;case 2:s=0,o=r,n=h;break;case 3:s=0,o=h,n=r;break;case 4:s=h,o=0,n=r;break;case 5:s=r,o=0,n=h;break;default:s=0,o=0,n=0}return"RGB("+parseInt(255*s)+","+parseInt(255*o)+","+parseInt(255*n)+")"},s.prototype._redrawDataGrid=function(){var t,e,i,o,n,r,a,d,l,c,p,u,m,f=this.frame.canvas,g=f.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(n=0;n0}else r=!0;r?(m=(t.point.z+e.point.z+i.point.z+o.point.z)/4,c=240*(1-(m-this.zMin)*this.scale.z/this.verticalRatio),p=1,this.showShadow?(u=Math.min(1+S.x/M/2,1),a=this._hsv2rgb(c,p,u),d=a):(u=1,a=this._hsv2rgb(c,p,u),d=this.colorAxis)):(a="gray",d=this.colorAxis),l=.5,g.lineWidth=l,g.fillStyle=a,g.strokeStyle=d,g.beginPath(),g.moveTo(t.screen.x,t.screen.y),g.lineTo(e.screen.x,e.screen.y),g.lineTo(o.screen.x,o.screen.y),g.lineTo(i.screen.x,i.screen.y),g.closePath(),g.fill(),g.stroke()}}else for(n=0;np&&(p=0);var u,m,f;this.style===s.STYLE.DOTCOLOR?(u=240*(1-(d.point.value-this.valueMin)*this.scale.value),m=this._hsv2rgb(u,1,1),f=this._hsv2rgb(u,1,.8)):this.style===s.STYLE.DOTSIZE?(m=this.colorDot,f=this.colorDotBorder):(u=240*(1-(d.point.z-this.zMin)*this.scale.z/this.verticalRatio),m=this._hsv2rgb(u,1,1),f=this._hsv2rgb(u,1,.8)),i.lineWidth=1,i.strokeStyle=f,i.fillStyle=m,i.beginPath(),i.arc(d.screen.x,d.screen.y,p,0,2*Math.PI,!0),i.fill(),i.stroke()}}},s.prototype._redrawDataBar=function(){var t,e,i,o,n=this.frame.canvas,r=n.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(t=0;t0&&(t=this.dataPoints[0],s.lineWidth=1,s.strokeStyle="blue",s.beginPath(),s.moveTo(t.screen.x,t.screen.y)),e=1;e0&&s.stroke()}},s.prototype._onMouseDown=function(t){if(t=t||window.event,this.leftButtonDown&&this._onMouseUp(t),this.leftButtonDown=t.which?1===t.which:1===t.button,this.leftButtonDown||this.touchDown){this.startMouseX=getMouseX(t),this.startMouseY=getMouseY(t),this.startStart=new Date(this.start),this.startEnd=new Date(this.end),this.startArmRotation=this.camera.getArmRotation(),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},a.addEventListener(document,"mousemove",e.onmousemove),a.addEventListener(document,"mouseup",e.onmouseup),a.preventDefault(t)}},s.prototype._onMouseMove=function(t){t=t||window.event;var e=parseFloat(getMouseX(t))-this.startMouseX,i=parseFloat(getMouseY(t))-this.startMouseY,s=this.startArmRotation.horizontal+e/200,o=this.startArmRotation.vertical+i/200,n=4,r=Math.sin(n/360*2*Math.PI);Math.abs(Math.sin(s))0?1:0>t?-1:0}var s=e[0],o=e[1],n=e[2],r=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x)),a=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),h=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},s.prototype._dataPointFromXY=function(t,e){var i,o=100,n=null,r=null,a=null,h=new d(t,e);if(this.style===s.STYLE.BAR||this.style===s.STYLE.BARCOLOR||this.style===s.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){n=this.dataPoints[i];var l=n.surfaces;if(l)for(var c=l.length-1;c>=0;c--){var p=l[c],u=p.corners,m=[u[0].screen,u[1].screen,u[2].screen],f=[u[2].screen,u[3].screen,u[0].screen];if(this._insideTriangle(h,m)||this._insideTriangle(h,f))return n}}else for(i=0;ib)&&o>b&&(a=b,r=n)}}return r},s.prototype._showTooltip=function(t){var e,i,s;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,s=this.tooltip.dom.dot):(e=document.createElement("div"),e.style.position="absolute",e.style.padding="10px",e.style.border="1px solid #4d4d4d",e.style.color="#1a1a1a",e.style.background="rgba(255,255,255,0.7)",e.style.borderRadius="2px",e.style.boxShadow="5px 5px 10px rgba(128,128,128,0.5)",i=document.createElement("div"),i.style.position="absolute",i.style.height="40px",i.style.width="0",i.style.borderLeft="1px solid #4d4d4d",s=document.createElement("div"),s.style.position="absolute",s.style.height="0",s.style.width="0",s.style.border="5px solid #4d4d4d",s.style.borderRadius="5px",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:s}}),this._hideTooltip(),this.tooltip.dataPoint=t,e.innerHTML="function"==typeof this.showTooltip?this.showTooltip(t.point):"
x:
"+t.point.x+"
y:
"+t.point.y+"
z:
"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(s);var o=e.offsetWidth,n=e.offsetHeight,r=i.offsetHeight,a=s.offsetWidth,h=s.offsetHeight,d=t.screen.x-o/2;d=Math.min(Math.max(d,10),this.frame.clientWidth-10-o),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=d+"px",e.style.top=t.screen.y-r-n+"px",s.style.left=t.screen.x-a/2+"px",s.style.top=t.screen.y-h/2+"px"},s.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},getMouseX=function(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0},getMouseY=function(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0},t.exports=s},function(t,e,i){var s=i(9);Camera=function(){this.armLocation=new s,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraLocation=new s,this.cameraRotation=new s(.5*Math.PI,0,0),this.calculateCameraOrientation()},Camera.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},Camera.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),(void 0!==t||void 0!==e)&&this.calculateCameraOrientation()},Camera.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},Camera.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.calculateCameraOrientation())},Camera.prototype.getArmLength=function(){return this.armLength},Camera.prototype.getCameraLocation=function(){return this.cameraLocation},Camera.prototype.getCameraRotation=function(){return this.cameraRotation},Camera.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal},t.exports=Camera},function(t,e,i){function s(t,e,i){this.data=t,this.column=e,this.graph=i,this.index=void 0,this.value=void 0,this.values=i.getDistinctValues(t.get(),this.column),this.values.sort(function(t,e){return t>e?1:e>t?-1:0}),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,i.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var o=i(4);s.prototype.isLoaded=function(){return this.loaded},s.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},s.prototype.getLabel=function(){return this.graph.filterLabel},s.prototype.getColumn=function(){return this.column},s.prototype.getSelectedValue=function(){return void 0===this.index?void 0:this.values[this.index]},s.prototype.getValues=function(){return this.values},s.prototype.getValue=function(t){if(t>=this.values.length)throw"Error: index out of range";return this.values[t]},s.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var s=new o(this.data,{filter:function(t){return t[i.column]==i.value}}).get();e=this.graph._getDataPoints(s),this.dataPoints[t]=e}return e},s.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},s.prototype.selectValue=function(t){if(t>=this.values.length)throw"Error: index out of range";this.index=t,this.value=this.values[t]},s.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},s.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},s.prototype.setIndex=function(t){if(!(ts&&(s=0),s>this.values.length-1&&(s=this.values.length-1),s},s.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t/(this.values.length-1)*e,s=i+3;return s},s.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,s=this.leftToIndex(i);this.setIndex(s),o.preventDefault()},s.prototype._onMouseUp=function(){this.frame.style.cursor="auto",o.removeEventListener(document,"mousemove",this.onmousemove),o.removeEventListener(document,"mouseup",this.onmouseup),o.preventDefault()},t.exports=s},function(t){function e(t,e,i,s){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,s)}e.prototype.setRange=function(t,e,i,s){this._start=t?t:0,this._end=e?e:0,this.setStep(i,s)},e.prototype.setStep=function(t,i){void 0===t||0>=t||(void 0!==i&&(this.prettyStep=i),this._step=this.prettyStep===!0?e.calculatePrettyStep(t):t)},e.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),s=2*Math.pow(10,Math.round(e(t/2))),o=5*Math.pow(10,Math.round(e(t/5))),n=i;return Math.abs(s-t)<=Math.abs(n-t)&&(n=s),Math.abs(o-t)<=Math.abs(n-t)&&(n=o),0>=n&&(n=1),n},e.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},e.prototype.getStep=function(){return this._step},e.prototype.start=function(){this._current=this._start-this._start%this._step},e.prototype.next=function(){this._current+=this._step},e.prototype.end=function(){return this._current>this._end},t.exports=e},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");var o=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=r.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},util:{snap:null,toScreen:o._toScreen.bind(o),toGlobalScreen:o._toGlobalScreen.bind(o),toTime:o._toTime.bind(o),toGlobalTime:o._toGlobalTime.bind(o)}},this.range=new d(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new l(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new c(this.body),this.components.push(this.currentTime),this.customTime=new p(this.body),this.components.push(this.customTime),this.itemSet=new u(this.body),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,i&&this.setOptions(i),e?this.setItems(e):this.redraw()}var o=i(44),n=i(40),r=i(1),a=i(3),h=i(4),d=i(15),l=i(27),c=i(19),p=i(20),u=i(24);o(s.prototype),s.prototype._create=function(t){this.dom={},this.dom.root=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.backgroundVertical=document.createElement("div"),this.dom.backgroundHorizontal=document.createElement("div"),this.dom.centerContainer=document.createElement("div"),this.dom.leftContainer=document.createElement("div"),this.dom.rightContainer=document.createElement("div"),this.dom.center=document.createElement("div"),this.dom.left=document.createElement("div"),this.dom.right=document.createElement("div"),this.dom.top=document.createElement("div"),this.dom.bottom=document.createElement("div"),this.dom.shadowTop=document.createElement("div"),this.dom.shadowBottom=document.createElement("div"),this.dom.shadowTopLeft=document.createElement("div"),this.dom.shadowBottomLeft=document.createElement("div"),this.dom.shadowTopRight=document.createElement("div"),this.dom.shadowBottomRight=document.createElement("div"),this.dom.background.className="vispanel background",this.dom.backgroundVertical.className="vispanel background vertical",this.dom.backgroundHorizontal.className="vispanel background horizontal",this.dom.centerContainer.className="vispanel center",this.dom.leftContainer.className="vispanel left",this.dom.rightContainer.className="vispanel right",this.dom.top.className="vispanel top",this.dom.bottom.className="vispanel bottom",this.dom.left.className="content",this.dom.center.className="content",this.dom.right.className="content",this.dom.shadowTop.className="shadow top",this.dom.shadowBottom.className="shadow bottom",this.dom.shadowTopLeft.className="shadow top",this.dom.shadowBottomLeft.className="shadow bottom",this.dom.shadowTopRight.className="shadow top",this.dom.shadowBottomRight.className="shadow bottom",this.dom.root.appendChild(this.dom.background),this.dom.root.appendChild(this.dom.backgroundVertical),this.dom.root.appendChild(this.dom.backgroundHorizontal),this.dom.root.appendChild(this.dom.centerContainer),this.dom.root.appendChild(this.dom.leftContainer),this.dom.root.appendChild(this.dom.rightContainer),this.dom.root.appendChild(this.dom.top),this.dom.root.appendChild(this.dom.bottom),this.dom.centerContainer.appendChild(this.dom.center),this.dom.leftContainer.appendChild(this.dom.left),this.dom.rightContainer.appendChild(this.dom.right),this.dom.centerContainer.appendChild(this.dom.shadowTop),this.dom.centerContainer.appendChild(this.dom.shadowBottom),this.dom.leftContainer.appendChild(this.dom.shadowTopLeft),this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft),this.dom.rightContainer.appendChild(this.dom.shadowTopRight),this.dom.rightContainer.appendChild(this.dom.shadowBottomRight),this.on("rangechange",this.redraw.bind(this)),this.on("change",this.redraw.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("pinch",this._onPinch.bind(this)),this.on("dragstart",this._onDragStart.bind(this)),this.on("drag",this._onDrag.bind(this)),this.hammer=n(this.dom.root,{prevent_default:!0}),this.listeners={};var e=this,i=["touch","pinch","tap","doubletap","hold","dragstart","drag","dragend","mousewheel","DOMMouseScroll"];if(i.forEach(function(t){var i=function(){var i=[t].concat(Array.prototype.slice.call(arguments,0));e.emit.apply(e,i)};e.hammer.on(t,i),e.listeners[t]=i}),this.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.touch={},!t)throw new Error("No container provided");t.appendChild(this.dom.root)},s.prototype.destroy=function(){this.clear(),this.off(),this._stopAutoResize(),this.dom.root.parentNode&&this.dom.root.parentNode.removeChild(this.dom.root),this.dom=null;for(var t in this.listeners)this.listeners.hasOwnProperty(t)&&delete this.listeners[t];this.listeners=null,this.hammer=null,this.components.forEach(function(t){t.destroy()}),this.body=null},s.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","orientation"];r.selectiveExtend(e,this.options,t),this._initAutoResize()}if(this.components.forEach(function(e){e.setOptions(t)}),t&&t.order)throw new Error("Option order is deprecated. There is no replacement for this feature.");this.redraw()},s.prototype.setCustomTime=function(t){if(!this.customTime)throw new Error("Cannot get custom time: Custom time bar is not enabled");this.customTime.setCustomTime(t)},s.prototype.getCustomTime=function(){if(!this.customTime)throw new Error("Cannot get custom time: Custom time bar is not enabled");return this.customTime.getCustomTime()},s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof a||t instanceof h?t:new a(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e),i&&("start"in this.options||"end"in this.options)){this.fit();var s="start"in this.options?r.convert(this.options.start,"Date"):null,o="end"in this.options?r.convert(this.options.end,"Date"):null;this.setWindow(s,o)}},s.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},s.prototype.setGroups=function(t){var e;e=t?t instanceof a||t instanceof h?t:new a(t):null,this.groupsData=e,this.itemSet.setGroups(e)},s.prototype.clear=function(t){(!t||t.items)&&this.setItems(null),(!t||t.groups)&&this.setGroups(null),(!t||t.options)&&(this.components.forEach(function(t){t.setOptions(t.defaultOptions)}),this.setOptions(this.defaultOptions))},s.prototype.fit=function(){var t=this.getItemRange(),e=t.min,i=t.max;if(null!=e&&null!=i){var s=i.valueOf()-e.valueOf();0>=s&&(s=864e5),e=new Date(e.valueOf()-.05*s),i=new Date(i.valueOf()+.05*s)}(null!==e||null!==i)&&this.range.setRange(e,i)},s.prototype.getItemRange=function(){var t=this.itemsData.getDataSet(),e=null,i=null;if(t){var s=t.min("start");e=s?r.convert(s.start,"Date").valueOf():null;var o=t.max("start");o&&(i=r.convert(o.start,"Date").valueOf());var n=t.max("end");n&&(i=null==i?r.convert(n.end,"Date").valueOf():Math.max(i,r.convert(n.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},s.prototype.setSelection=function(t){this.itemSet&&this.itemSet.setSelection(t)},s.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},s.prototype.setWindow=function(t,e){if(1==arguments.length){var i=arguments[0];this.range.setRange(i.start,i.end)}else this.range.setRange(t,e)},s.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},s.prototype.redraw=function(){var t=!1,e=this.options,i=this.props,s=this.dom;if(s){s.root.className="vis timeline root "+e.orientation,s.root.style.maxHeight=r.option.asSize(e.maxHeight,""),s.root.style.minHeight=r.option.asSize(e.minHeight,""),s.root.style.width=r.option.asSize(e.width,""),i.border.left=(s.centerContainer.offsetWidth-s.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(s.centerContainer.offsetHeight-s.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var o=s.root.offsetHeight-s.root.clientHeight,n=s.root.offsetWidth-s.root.clientWidth;i.center.height=s.center.offsetHeight,i.left.height=s.left.offsetHeight,i.right.height=s.right.offsetHeight,i.top.height=s.top.clientHeight||-i.border.top,i.bottom.height=s.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),h=i.top.height+a+i.bottom.height+o+i.border.top+i.border.bottom;s.root.style.height=r.option.asSize(e.height,h+"px"),i.root.height=s.root.offsetHeight,i.background.height=i.root.height-o;var d=i.root.height-i.top.height-i.bottom.height-o;i.centerContainer.height=d,i.leftContainer.height=d,i.rightContainer.height=i.leftContainer.height,i.root.width=s.root.offsetWidth,i.background.width=i.root.width-n,i.left.width=s.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=s.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var l=i.root.width-i.left.width-i.right.width-n;i.center.width=l,i.centerContainer.width=l,i.top.width=l,i.bottom.width=l,s.background.style.height=i.background.height+"px",s.backgroundVertical.style.height=i.background.height+"px",s.backgroundHorizontal.style.height=i.centerContainer.height+"px",s.centerContainer.style.height=i.centerContainer.height+"px",s.leftContainer.style.height=i.leftContainer.height+"px",s.rightContainer.style.height=i.rightContainer.height+"px",s.background.style.width=i.background.width+"px",s.backgroundVertical.style.width=i.centerContainer.width+"px",s.backgroundHorizontal.style.width=i.background.width+"px",s.centerContainer.style.width=i.center.width+"px",s.top.style.width=i.top.width+"px",s.bottom.style.width=i.bottom.width+"px",s.background.style.left="0",s.background.style.top="0",s.backgroundVertical.style.left=i.left.width+"px",s.backgroundVertical.style.top="0",s.backgroundHorizontal.style.left="0",s.backgroundHorizontal.style.top=i.top.height+"px",s.centerContainer.style.left=i.left.width+"px",s.centerContainer.style.top=i.top.height+"px",s.leftContainer.style.left="0",s.leftContainer.style.top=i.top.height+"px",s.rightContainer.style.left=i.left.width+i.center.width+"px",s.rightContainer.style.top=i.top.height+"px",s.top.style.left=i.left.width+"px",s.top.style.top="0",s.bottom.style.left=i.left.width+"px",s.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var c=this.props.scrollTop;"bottom"==e.orientation&&(c+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),s.center.style.left="0",s.center.style.top=c+"px",s.left.style.left="0",s.left.style.top=c+"px",s.right.style.left="0",s.right.style.top=c+"px";var p=0==this.props.scrollTop?"hidden":"",u=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";s.shadowTop.style.visibility=p,s.shadowBottom.style.visibility=u,s.shadowTopLeft.style.visibility=p,s.shadowBottomLeft.style.visibility=u,s.shadowTopRight.style.visibility=p,s.shadowBottomRight.style.visibility=u,this.components.forEach(function(e){t=e.redraw()||t}),t&&this.redraw()}},s.prototype.repaint=function(){throw new Error("Function repaint is deprecated. Use redraw instead.")},s.prototype._toTime=function(t){var e=this.range.conversion(this.props.center.width);return new Date(t/e.scale+e.offset)},s.prototype._toGlobalTime=function(t){var e=this.range.conversion(this.props.root.width);return new Date(t/e.scale+e.offset)},s.prototype._toScreen=function(t){var e=this.range.conversion(this.props.center.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._toGlobalScreen=function(t){var e=this.range.conversion(this.props.root.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},s.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){return 1!=t.options.autoResize?void t._stopAutoResize():void(t.dom.root&&(t.dom.root.clientWidth!=t.props.lastWidth||t.dom.root.clientHeight!=t.props.lastHeight)&&(t.props.lastWidth=t.dom.root.clientWidth,t.props.lastHeight=t.dom.root.clientHeight,t.emit("change")))},r.addEventListener(window,"resize",this._onResize),this.watchTimer=setInterval(this._onResize,1e3)},s.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),r.removeEventListener(window,"resize",this._onResize),this._onResize=null},s.prototype._onTouch=function(){this.touch.allowDragging=!0},s.prototype._onPinch=function(){this.touch.allowDragging=!1},s.prototype._onDragStart=function(){this.touch.initialScrollTop=this.props.scrollTop},s.prototype._onDrag=function(t){if(this.touch.allowDragging){var e=t.gesture.deltaY,i=this._getScrollTop(),s=this._setScrollTop(this.touch.initialScrollTop+e);s!=i&&this.redraw()}},s.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},s.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("bottom"==this.options.orientation&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTop=s&&(s=864e5),e=new Date(e.valueOf()-.05*s),i=new Date(i.valueOf()+.05*s)}(null!==e||null!==i)&&this.range.setRange(e,i)},s.prototype.getItemRange=function(){var t=this.itemsData,e=null,i=null;if(t){var s=t.min("start");e=s?r.convert(s.start,"Date").valueOf():null;var o=t.max("start");o&&(i=r.convert(o.start,"Date").valueOf());var n=t.max("end");n&&(i=null==i?r.convert(n.end,"Date").valueOf():Math.max(i,r.convert(n.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},s.prototype.setWindow=function(t,e){if(1==arguments.length){var i=arguments[0];this.range.setRange(i.start,i.end)}else this.range.setRange(t,e)},s.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},s.prototype.redraw=function(){var t=!1,e=this.options,i=this.props,s=this.dom;if(s){s.root.className="vis timeline root "+e.orientation,s.root.style.maxHeight=r.option.asSize(e.maxHeight,""),s.root.style.minHeight=r.option.asSize(e.minHeight,""),s.root.style.width=r.option.asSize(e.width,""),i.border.left=(s.centerContainer.offsetWidth-s.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(s.centerContainer.offsetHeight-s.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var o=s.root.offsetHeight-s.root.clientHeight,n=s.root.offsetWidth-s.root.clientWidth;i.center.height=s.center.offsetHeight,i.left.height=s.left.offsetHeight,i.right.height=s.right.offsetHeight,i.top.height=s.top.clientHeight||-i.border.top,i.bottom.height=s.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),h=i.top.height+a+i.bottom.height+o+i.border.top+i.border.bottom;s.root.style.height=r.option.asSize(e.height,h+"px"),i.root.height=s.root.offsetHeight,i.background.height=i.root.height-o;var d=i.root.height-i.top.height-i.bottom.height-o;i.centerContainer.height=d,i.leftContainer.height=d,i.rightContainer.height=i.leftContainer.height,i.root.width=s.root.offsetWidth,i.background.width=i.root.width-n,i.left.width=s.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=s.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var l=i.root.width-i.left.width-i.right.width-n;i.center.width=l,i.centerContainer.width=l,i.top.width=l,i.bottom.width=l,s.background.style.height=i.background.height+"px",s.backgroundVertical.style.height=i.background.height+"px",s.backgroundHorizontalContainer.style.height=i.centerContainer.height+"px",s.centerContainer.style.height=i.centerContainer.height+"px",s.leftContainer.style.height=i.leftContainer.height+"px",s.rightContainer.style.height=i.rightContainer.height+"px",s.background.style.width=i.background.width+"px",s.backgroundVertical.style.width=i.centerContainer.width+"px",s.backgroundHorizontalContainer.style.width=i.background.width+"px",s.backgroundHorizontal.style.width=i.background.width+"px",s.centerContainer.style.width=i.center.width+"px",s.top.style.width=i.top.width+"px",s.bottom.style.width=i.bottom.width+"px",s.background.style.left="0",s.background.style.top="0",s.backgroundVertical.style.left=i.left.width+"px",s.backgroundVertical.style.top="0",s.backgroundHorizontalContainer.style.left="0",s.backgroundHorizontalContainer.style.top=i.top.height+"px",s.centerContainer.style.left=i.left.width+"px",s.centerContainer.style.top=i.top.height+"px",s.leftContainer.style.left="0",s.leftContainer.style.top=i.top.height+"px",s.rightContainer.style.left=i.left.width+i.center.width+"px",s.rightContainer.style.top=i.top.height+"px",s.top.style.left=i.left.width+"px",s.top.style.top="0",s.bottom.style.left=i.left.width+"px",s.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var c=this.props.scrollTop;"bottom"==e.orientation&&(c+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),s.center.style.left="0",s.center.style.top=c+"px",s.backgroundHorizontal.style.left="0",s.backgroundHorizontal.style.top=c+"px",s.left.style.left="0",s.left.style.top=c+"px",s.right.style.left="0",s.right.style.top=c+"px";var p=0==this.props.scrollTop?"hidden":"",u=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";s.shadowTop.style.visibility=p,s.shadowBottom.style.visibility=u,s.shadowTopLeft.style.visibility=p,s.shadowBottomLeft.style.visibility=u,s.shadowTopRight.style.visibility=p,s.shadowBottomRight.style.visibility=u,this.components.forEach(function(e){t=e.redraw()||t}),t&&this.redraw()}},s.prototype._toTime=function(t){var e=this.range.conversion(this.props.center.width);return new Date(t/e.scale+e.offset)},s.prototype._toGlobalTime=function(t){var e=this.range.conversion(this.props.root.width);return new Date(t/e.scale+e.offset)},s.prototype._toScreen=function(t){var e=this.range.conversion(this.props.center.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._toGlobalScreen=function(t){var e=this.range.conversion(this.props.root.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},s.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){return 1!=t.options.autoResize?void t._stopAutoResize():void(t.dom.root&&(t.dom.root.clientWidth!=t.props.lastWidth||t.dom.root.clientHeight!=t.props.lastHeight)&&(t.props.lastWidth=t.dom.root.clientWidth,t.props.lastHeight=t.dom.root.clientHeight,t.emit("change")))},r.addEventListener(window,"resize",this._onResize),this.watchTimer=setInterval(this._onResize,1e3)},s.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),r.removeEventListener(window,"resize",this._onResize),this._onResize=null},s.prototype._onTouch=function(){this.touch.allowDragging=!0},s.prototype._onPinch=function(){this.touch.allowDragging=!1},s.prototype._onDragStart=function(){this.touch.initialScrollTop=this.props.scrollTop},s.prototype._onDrag=function(t){if(this.touch.allowDragging){var e=t.gesture.deltaY,i=this._getScrollTop(),s=this._setScrollTop(this.touch.initialScrollTop+e);s!=i&&this.redraw()}},s.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},s.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("bottom"==this.options.orientation&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTopn&&(h=n);for(var d=!1,l=h;Math.abs(l)<=Math.abs(n);l++){a=Math.pow(10,l);for(var c=0;c=o){d=!0,r=c;break
-}}if(1==d)break}this.stepIndex=r,this.scale=a,this.step=a*this.minorSteps[r]},e.prototype.first=function(){this.setFirst()},e.prototype.setFirst=function(){var t=this._start-this.scale*this.minorSteps[this.stepIndex],e=this._end+this.scale*this.minorSteps[this.stepIndex];this.marginEnd=this.roundToMinor(e),this.marginStart=this.roundToMinor(t),this.marginRange=this.marginEnd-this.marginStart,this.current=this.marginEnd},e.prototype.roundToMinor=function(t){var e=t-t%(this.scale*this.minorSteps[this.stepIndex]);return t%(this.scale*this.minorSteps[this.stepIndex])>.5*this.scale*this.minorSteps[this.stepIndex]?e+this.scale*this.minorSteps[this.stepIndex]:e},e.prototype.hasNext=function(){return this.current>=this.marginStart},e.prototype.next=function(){var t=this.current;this.current-=this.step,this.current==t&&(this.current=this._end)},e.prototype.previous=function(){this.current+=this.step,this.marginEnd+=this.step,this.marginRange=this.marginEnd-this.marginStart},e.prototype.getCurrent=function(){for(var t=""+Number(this.current).toPrecision(5),e=t.length-1;e>0;e--){if("0"!=t[e]){if("."==t[e]||","==t[e]){t=t.slice(0,e);break}break}t=t.slice(0,e)}return t},e.prototype.snap=function(){},e.prototype.isMajor=function(){return this.current%(this.scale*this.majorSteps[this.stepIndex])==0},t.exports=e},function(t,e,i){function s(t,e){var i=h().hours(0).minutes(0).seconds(0).milliseconds(0);this.start=i.clone().add("days",-3).valueOf(),this.end=i.clone().add("days",4).valueOf(),this.body=t,this.defaultOptions={start:null,end:null,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10},this.options=r.extend({},this.defaultOptions),this.props={touch:{}},this.body.emitter.on("dragstart",this._onDragStart.bind(this)),this.body.emitter.on("drag",this._onDrag.bind(this)),this.body.emitter.on("dragend",this._onDragEnd.bind(this)),this.body.emitter.on("hold",this._onHold.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("DOMMouseScroll",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.setOptions(e)}function o(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}function n(t,e){return{x:t.pageX-r.getAbsoluteLeft(e),y:t.pageY-r.getAbsoluteTop(e)}}var r=i(1),a=i(41),h=i(39),d=i(18);s.prototype=new d,s.prototype.setOptions=function(t){if(t){var e=["direction","min","max","zoomMin","zoomMax","moveable","zoomable"];r.selectiveExtend(e,this.options,t),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},s.prototype.setRange=function(t,e){var i=this._applyRange(t,e);if(i){var s={start:new Date(this.start),end:new Date(this.end)};this.body.emitter.emit("rangechange",s),this.body.emitter.emit("rangechanged",s)}},s.prototype._applyRange=function(t,e){var i,s=null!=t?r.convert(t,"Date").valueOf():this.start,o=null!=e?r.convert(e,"Date").valueOf():this.end,n=null!=this.options.max?r.convert(this.options.max,"Date").valueOf():null,a=null!=this.options.min?r.convert(this.options.min,"Date").valueOf():null;if(isNaN(s)||null===s)throw new Error('Invalid start "'+t+'"');if(isNaN(o)||null===o)throw new Error('Invalid end "'+e+'"');if(s>o&&(o=s),null!==a&&a>s&&(i=a-s,s+=i,o+=i,null!=n&&o>n&&(o=n)),null!==n&&o>n&&(i=o-n,s-=i,o-=i,null!=a&&a>s&&(s=a)),null!==this.options.zoomMin){var h=parseFloat(this.options.zoomMin);0>h&&(h=0),h>o-s&&(this.end-this.start===h?(s=this.start,o=this.end):(i=h-(o-s),s-=i/2,o+=i/2))}if(null!==this.options.zoomMax){var d=parseFloat(this.options.zoomMax);0>d&&(d=0),o-s>d&&(this.end-this.start===d?(s=this.start,o=this.end):(i=o-s-d,s+=i/2,o-=i/2))}var l=this.start!=s||this.end!=o;return this.start=s,this.end=o,l},s.prototype.getRange=function(){return{start:this.start,end:this.end}},s.prototype.conversion=function(t){return s.conversion(this.start,this.end,t)},s.conversion=function(t,e,i){return 0!=i&&e-t!=0?{offset:t,scale:i/(e-t)}:{offset:0,scale:1}},s.prototype._onDragStart=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.start=this.start,this.props.touch.end=this.end,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},s.prototype._onDrag=function(t){if(this.options.moveable){var e=this.options.direction;if(o(e),this.props.touch.allowDragging){var i="horizontal"==e?t.gesture.deltaX:t.gesture.deltaY,s=this.props.touch.end-this.props.touch.start,n="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height,r=-i/n*s;this._applyRange(this.props.touch.start+r,this.props.touch.end+r),this.body.emitter.emit("rangechange",{start:new Date(this.start),end:new Date(this.end)})}}},s.prototype._onDragEnd=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end)}))},s.prototype._onMouseWheel=function(t){if(this.options.zoomable&&this.options.moveable){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i;i=0>e?1-e/5:1/(1+e/5);var s=a.fakeGesture(this,t),o=n(s.center,this.body.dom.center),r=this._pointerToDate(o);this.zoom(i,r)}t.preventDefault()}},s.prototype._onTouch=function(){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null},s.prototype._onHold=function(){this.props.touch.allowDragging=!1},s.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable&&(this.props.touch.allowDragging=!1,t.gesture.touches.length>1)){this.props.touch.center||(this.props.touch.center=n(t.gesture.center,this.body.dom.center));var e=1/t.gesture.scale,i=this._pointerToDate(this.props.touch.center),s=parseInt(i+(this.props.touch.start-i)*e),o=parseInt(i+(this.props.touch.end-i)*e);this.setRange(s,o)}},s.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(o(i),"horizontal"==i){var s=this.body.domProps.center.width;return e=this.conversion(s),t.x/e.scale+e.offset}var n=this.body.domProps.center.height;return e=this.conversion(n),t.y/e.scale+e.offset},s.prototype.zoom=function(t,e){null==e&&(e=(this.start+this.end)/2);var i=e+(this.start-e)*t,s=e+(this.end-e)*t;this.setRange(i,s)},s.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,s=this.end+e*t;this.start=i,this.end=s},s.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,s=this.start-i,o=this.end-i;this.setRange(s,o)},t.exports=s},function(t,e){var i=.001;e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){var i="end"in t.data?t.data.end:t.data.start,s="end"in e.data?e.data.end:e.data.start;return i-s})},e.stack=function(t,i,s){var o,n;if(s)for(o=0,n=t.length;n>o;o++)t[o].top=null;for(o=0,n=t.length;n>o;o++){var r=t[o];if(null===r.top){r.top=i.axis;do{for(var a=null,h=0,d=t.length;d>h;h++){var l=t[h];if(null!==l.top&&l!==r&&e.collision(r,l,i.item)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical)}while(a)}}},e.nostack=function(t,e){var i,s;for(i=0,s=t.length;s>i;i++)t[i].top=e.axis},e.collision=function(t,e,s){return t.left-s.horizontal+ie.left&&t.top-s.vertical+ie.top}},function(t,e,i){function s(t,e,i){this.current=new Date,this._start=new Date,this._end=new Date,this.autoScale=!0,this.scale=s.SCALE.DAY,this.step=1,this.setRange(t,e,i)}var o=i(39);s.SCALE={MILLISECOND:1,SECOND:2,MINUTE:3,HOUR:4,DAY:5,WEEKDAY:6,MONTH:7,YEAR:8},s.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?new Date(t.valueOf()):new Date,this._end=void 0!=e?new Date(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},s.prototype.first=function(){this.current=new Date(this._start.valueOf()),this.roundToMinor()},s.prototype.roundToMinor=function(){switch(this.scale){case s.SCALE.YEAR:this.current.setFullYear(this.step*Math.floor(this.current.getFullYear()/this.step)),this.current.setMonth(0);case s.SCALE.MONTH:this.current.setDate(1);case s.SCALE.DAY:case s.SCALE.WEEKDAY:this.current.setHours(0);case s.SCALE.HOUR:this.current.setMinutes(0);case s.SCALE.MINUTE:this.current.setSeconds(0);case s.SCALE.SECOND:this.current.setMilliseconds(0)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.setMilliseconds(this.current.getMilliseconds()-this.current.getMilliseconds()%this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()-this.current.getSeconds()%this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()-this.current.getMinutes()%this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()-this.current.getHours()%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()-1-(this.current.getDate()-1)%this.step+1);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()-this.current.getMonth()%this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()-this.current.getFullYear()%this.step)}},s.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},s.prototype.next=function(){var t=this.current.valueOf();if(this.current.getMonth()<6)switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current=new Date(this.current.valueOf()+1e3*this.step);break;case s.SCALE.MINUTE:this.current=new Date(this.current.valueOf()+1e3*this.step*60);break;case s.SCALE.HOUR:this.current=new Date(this.current.valueOf()+1e3*this.step*60*60);var e=this.current.getHours();this.current.setHours(e-e%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}else switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()+this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()+this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()+this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.getMilliseconds()0&&(this.step=e),this.autoScale=!1},s.prototype.setAutoScale=function(t){this.autoScale=t},s.prototype.setMinimumStep=function(t){if(void 0!=t){var e=31104e6,i=2592e6,o=864e5,n=36e5,r=6e4,a=1e3,h=1;1e3*e>t&&(this.scale=s.SCALE.YEAR,this.step=1e3),500*e>t&&(this.scale=s.SCALE.YEAR,this.step=500),100*e>t&&(this.scale=s.SCALE.YEAR,this.step=100),50*e>t&&(this.scale=s.SCALE.YEAR,this.step=50),10*e>t&&(this.scale=s.SCALE.YEAR,this.step=10),5*e>t&&(this.scale=s.SCALE.YEAR,this.step=5),e>t&&(this.scale=s.SCALE.YEAR,this.step=1),3*i>t&&(this.scale=s.SCALE.MONTH,this.step=3),i>t&&(this.scale=s.SCALE.MONTH,this.step=1),5*o>t&&(this.scale=s.SCALE.DAY,this.step=5),2*o>t&&(this.scale=s.SCALE.DAY,this.step=2),o>t&&(this.scale=s.SCALE.DAY,this.step=1),o/2>t&&(this.scale=s.SCALE.WEEKDAY,this.step=1),4*n>t&&(this.scale=s.SCALE.HOUR,this.step=4),n>t&&(this.scale=s.SCALE.HOUR,this.step=1),15*r>t&&(this.scale=s.SCALE.MINUTE,this.step=15),10*r>t&&(this.scale=s.SCALE.MINUTE,this.step=10),5*r>t&&(this.scale=s.SCALE.MINUTE,this.step=5),r>t&&(this.scale=s.SCALE.MINUTE,this.step=1),15*a>t&&(this.scale=s.SCALE.SECOND,this.step=15),10*a>t&&(this.scale=s.SCALE.SECOND,this.step=10),5*a>t&&(this.scale=s.SCALE.SECOND,this.step=5),a>t&&(this.scale=s.SCALE.SECOND,this.step=1),200*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=200),100*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=100),50*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=50),10*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=10),5*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=5),h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=1)}},s.prototype.snap=function(t){var e=new Date(t.valueOf());if(this.scale==s.SCALE.YEAR){var i=e.getFullYear()+Math.round(e.getMonth()/12);e.setFullYear(Math.round(i/this.step)*this.step),e.setMonth(0),e.setDate(0),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MONTH)e.getDate()>15?(e.setDate(1),e.setMonth(e.getMonth()+1)):e.setDate(1),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0);else if(this.scale==s.SCALE.DAY){switch(this.step){case 5:case 2:e.setHours(24*Math.round(e.getHours()/24));break;default:e.setHours(12*Math.round(e.getHours()/12))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.WEEKDAY){switch(this.step){case 5:case 2:e.setHours(12*Math.round(e.getHours()/12));break;default:e.setHours(6*Math.round(e.getHours()/6))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.HOUR){switch(this.step){case 4:e.setMinutes(60*Math.round(e.getMinutes()/60));break;default:e.setMinutes(30*Math.round(e.getMinutes()/30))}e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MINUTE){switch(this.step){case 15:case 10:e.setMinutes(5*Math.round(e.getMinutes()/5)),e.setSeconds(0);break;case 5:e.setSeconds(60*Math.round(e.getSeconds()/60));break;default:e.setSeconds(30*Math.round(e.getSeconds()/30))}e.setMilliseconds(0)}else if(this.scale==s.SCALE.SECOND)switch(this.step){case 15:case 10:e.setSeconds(5*Math.round(e.getSeconds()/5)),e.setMilliseconds(0);break;case 5:e.setMilliseconds(1e3*Math.round(e.getMilliseconds()/1e3));break;default:e.setMilliseconds(500*Math.round(e.getMilliseconds()/500))}else if(this.scale==s.SCALE.MILLISECOND){var o=this.step>5?this.step/2:1;e.setMilliseconds(Math.round(e.getMilliseconds()/o)*o)}return e},s.prototype.isMajor=function(){switch(this.scale){case s.SCALE.MILLISECOND:return 0==this.current.getMilliseconds();case s.SCALE.SECOND:return 0==this.current.getSeconds();case s.SCALE.MINUTE:return 0==this.current.getHours()&&0==this.current.getMinutes();case s.SCALE.HOUR:return 0==this.current.getHours();case s.SCALE.WEEKDAY:case s.SCALE.DAY:return 1==this.current.getDate();case s.SCALE.MONTH:return 0==this.current.getMonth();case s.SCALE.YEAR:return!1;default:return!1}},s.prototype.getLabelMinor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("SSS");case s.SCALE.SECOND:return o(t).format("s");case s.SCALE.MINUTE:return o(t).format("HH:mm");case s.SCALE.HOUR:return o(t).format("HH:mm");case s.SCALE.WEEKDAY:return o(t).format("ddd D");case s.SCALE.DAY:return o(t).format("D");case s.SCALE.MONTH:return o(t).format("MMM");case s.SCALE.YEAR:return o(t).format("YYYY");default:return""}},s.prototype.getLabelMajor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("HH:mm:ss");case s.SCALE.SECOND:return o(t).format("D MMMM HH:mm");case s.SCALE.MINUTE:case s.SCALE.HOUR:return o(t).format("ddd D MMMM");case s.SCALE.WEEKDAY:case s.SCALE.DAY:return o(t).format("MMMM YYYY");case s.SCALE.MONTH:return o(t).format("YYYY");case s.SCALE.YEAR:return"";default:return""}},t.exports=s},function(t){function e(){this.options=null,this.props=null}e.prototype.setOptions=function(t){t&&util.extend(this.options,t)},e.prototype.redraw=function(){return!1},e.prototype.destroy=function(){},e.prototype._isResized=function(){var t=this.props._previousWidth!==this.props.width||this.props._previousHeight!==this.props.height;return this.props._previousWidth=this.props.width,this.props._previousHeight=this.props.height,t},t.exports=e},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCurrentTime:!0},this.options=o.extend({},this.defaultOptions),this._create(),this.setOptions(e)}var o=i(1),n=i(18);s.prototype=new n,s.prototype._create=function(){var t=document.createElement("div");t.className="currenttime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},s.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},s.prototype.setOptions=function(t){t&&o.selectiveExtend(["showCurrentTime"],this.options,t)},s.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=new Date,i=this.body.util.toScreen(e);this.bar.style.left=i+"px",this.bar.title="Current time: "+e}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},s.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,s=1/i/10;30>s&&(s=30),s>1e3&&(s=1e3),e.redraw(),e.currentTimeTimer=setTimeout(t,s)}var e=this;t()},s.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCustomTime:!1},this.options=n.extend({},this.defaultOptions),this.customTime=new Date,this.eventParams={},this._create(),this.setOptions(e)}var o=i(40),n=i(1),r=i(18);s.prototype=new r,s.prototype.setOptions=function(t){t&&n.selectiveExtend(["showCustomTime"],this.options,t)},s.prototype._create=function(){var t=document.createElement("div");t.className="customtime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t;var e=document.createElement("div");e.style.position="relative",e.style.top="0px",e.style.left="-10px",e.style.height="100%",e.style.width="20px",t.appendChild(e),this.hammer=o(t,{prevent_default:!0}),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this))},s.prototype.destroy=function(){this.options.showCustomTime=!1,this.redraw(),this.hammer.enable(!1),this.hammer=null,this.body=null},s.prototype.redraw=function(){if(this.options.showCustomTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime);this.bar.style.left=e+"px",this.bar.title="Time: "+this.customTime}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar);return!1},s.prototype.setCustomTime=function(t){this.customTime=new Date(t.valueOf()),this.redraw()},s.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},s.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation(),t.preventDefault()},s.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=t.gesture.deltaX,i=this.body.util.toScreen(this.eventParams.customTime)+e,s=this.body.util.toTime(i);this.setCustomTime(s),this.body.emitter.emit("timechange",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault()}},s.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault())},t.exports=s},function(t,e,i){function s(t,e,i){this.id=o.randomUUID(),this.body=t,this.defaultOptions={orientation:"left",showMinorLabels:!0,showMajorLabels:!0,icons:!0,majorLinesOffset:7,minorLinesOffset:4,labelOffsetX:10,labelOffsetY:2,iconWidth:20,width:"40px",visible:!0},this.linegraphSVG=i,this.props={},this.DOMelements={lines:{},labels:{}},this.dom={},this.range={start:0,end:0},this.options=o.extend({},this.defaultOptions),this.conversionFactor=1,this.setOptions(e),this.width=Number((""+this.options.width).replace("px","")),this.minWidth=this.width,this.height=this.linegraphSVG.offsetHeight,this.stepPixels=25,this.stepPixelsForced=25,this.lineOffset=0,this.master=!0,this.svgElements={},this.groups={},this.amountOfGroups=0,this._create()}var o=i(1),n=i(2),r=i(18),a=i(14);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype.setOptions=function(t){if(t){var e=!1;this.options.orientation!=t.orientation&&void 0!==t.orientation&&(e=!0);var i=["orientation","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","width","visible"];o.selectiveExtend(i,this.options,t),this.minWidth=Number((""+this.options.width).replace("px","")),1==e&&this.dom.frame&&(this.hide(),this.show())}},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.style.width=this.options.width,this.dom.frame.style.height=this.height,this.dom.lineContainer=document.createElement("div"),this.dom.lineContainer.style.width="100%",this.dom.lineContainer.style.height=this.height,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.height="100%",this.svg.style.width="100%",this.svg.style.display="block",this.dom.frame.appendChild(this.svg)},s.prototype._redrawGroupIcons=function(){n.prepareElements(this.svgElements);var t,e=this.options.iconWidth,i=15,s=4,o=s+.5*i;t="left"==this.options.orientation?s:this.width-e-s;for(var r in this.groups)this.groups.hasOwnProperty(r)&&(this.groups[r].drawIcon(t,o,this.svgElements,this.svg,e,i),o+=i+s);n.cleanupElements(this.svgElements)},s.prototype.show=function(){this.dom.frame.parentNode||("left"==this.options.orientation?this.body.dom.left.appendChild(this.dom.frame):this.body.dom.right.appendChild(this.dom.frame)),this.dom.lineContainer.parentNode||this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.lineContainer.parentNode&&this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer)},s.prototype.setRange=function(t,e){this.range.start=t,this.range.end=e},s.prototype.redraw=function(){var t=!1;if(0==this.amountOfGroups)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=1==this.options.visible?Number((""+this.options.width).replace("px","")):0;var e=this.props,i=this.dom.frame;i.className="dataaxis",this._calculateCharSize();var s=this.options.orientation,o=this.options.showMinorLabels,n=this.options.showMajorLabels;e.minorLabelHeight=o?e.minorCharHeight:0,e.majorLabelHeight=n?e.majorCharHeight:0,e.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,e.minorLineHeight=1,e.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,e.majorLineHeight=1,"left"==s?(i.style.top="0",i.style.left="0",i.style.bottom="",i.style.width=this.width+"px",i.style.height=this.height+"px"):(i.style.top="",i.style.bottom="0",i.style.left="0",i.style.width=this.width+"px",i.style.height=this.height+"px"),t=this._redrawLabels(),1==this.options.icons&&this._redrawGroupIcons()}return t},s.prototype._redrawLabels=function(){n.prepareElements(this.DOMelements);var t=this.options.orientation,e=this.master?this.props.majorCharHeight||10:this.stepPixelsForced,i=new a(this.range.start,this.range.end,e,this.dom.frame.offsetHeight);this.step=i,i.first();var s=this.dom.frame.offsetHeight/(i.marginRange/i.step+1);this.stepPixels=s;var o=this.height/s,r=0;if(0==this.master){s=this.stepPixelsForced,r=Math.round(this.height/s-o);for(var h=0;.5*r>h;h++)i.previous();o=this.height/s}this.valueAtZero=i.marginEnd;var d=0,l=1;i.next(),this.maxLabelSize=0;for(var c=0;l=0&&this._redrawLabel(c-2,i.getCurrent(),t,"yAxis major",this.props.majorCharHeight),this._redrawLine(c,t,"grid horizontal major",this.options.majorLinesOffset,this.props.majorLineWidth)):this._redrawLine(c,t,"grid horizontal minor",this.options.minorLinesOffset,this.props.minorLineWidth),i.next(),l++}this.conversionFactor=d/((o-1)*i.step);var u=1==this.options.icons?this.options.iconWidth+this.options.labelOffsetX+15:this.options.labelOffsetX+15;return this.maxLabelSize>this.width-u&&1==this.options.visible?(this.width=this.maxLabelSize+u,this.options.width=this.width+"px",n.cleanupElements(this.DOMelements),this.redraw(),!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+u),this.options.width=this.width+"px",n.cleanupElements(this.DOMelements),this.redraw(),!0):(n.cleanupElements(this.DOMelements),!1)},s.prototype._redrawLabel=function(t,e,i,s,o){var r=n.getDOMElement("div",this.DOMelements,this.dom.frame);r.className=s,r.innerHTML=e,"left"==i?(r.style.left="-"+this.options.labelOffsetX+"px",r.style.textAlign="right"):(r.style.right="-"+this.options.labelOffsetX+"px",r.style.textAlign="left"),r.style.top=t-.5*o+this.options.labelOffsetY+"px",e+="";var a=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSizee.axis){var c=d-e.axis;l-=c,o.forEach(h,function(t){t.top-=c})}a=l+e.item.vertical/2}else a=e.axis+e.item.vertical;a=Math.max(a,this.props.label.height);var p=this.dom.foreground;this.top=p.offsetTop,this.left=p.offsetLeft,this.width=p.offsetWidth,s=o.updateProperty(this,"height",a)||s,s=o.updateProperty(this.props.label,"width",this.dom.inner.clientWidth)||s,s=o.updateProperty(this.props.label,"height",this.dom.inner.clientHeight)||s,this.dom.background.style.height=a+"px",this.dom.foreground.style.height=a+"px",this.dom.label.style.height=a+"px";for(var u=0,m=this.visibleItems.length;m>u;u++){var f=this.visibleItems[u];f.repositionY()}return s},s.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},s.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var s=this.dom.axis;s.parentNode&&s.parentNode.removeChild(s)},s.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),t instanceof r&&-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},s.prototype.remove=function(t){delete this.items[t.id],t.setParent(this.itemSet);var e=this.visibleItems.indexOf(t);-1!=e&&this.visibleItems.splice(e,1)},s.prototype.removeFromDataSet=function(t){this.itemSet.removeItem(t.id)},s.prototype.order=function(){var t=o.toArray(this.items);this.orderedItems.byStart=t,this.orderedItems.byEnd=this._constructByEndArray(t),n.orderByStart(this.orderedItems.byStart),n.orderByEnd(this.orderedItems.byEnd)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0)for(n=0;n=0&&!this._checkIfInvisible(t.byStart[n],r,i);n--);for(n=s+1;n=0&&!this._checkIfInvisible(t.byEnd[n],r,i);n--);for(n=a+1;ne;e++)s=this.selection[e],o=this.items[s],o&&o.unselect();for(this.selection=[],e=0,i=t.length;i>e;e++)s=t[e],o=this.items[s],o&&(this.selection.push(s),o.select())}},s.prototype.getSelection=function(){return this.selection.concat([])},s.prototype.getVisibleItems=function(){var t=this.body.range.getRange(),e=this.body.util.toScreen(t.start),i=this.body.util.toScreen(t.end),s=[];for(var o in this.groups)if(this.groups.hasOwnProperty(o))for(var n=this.groups[o],r=n.visibleItems,a=0;ae&&s.push(h.id)}return s},s.prototype._deselect=function(t){for(var e=this.selection,i=0,s=e.length;s>i;i++)if(e[i]==t){e.splice(i,1);break}},s.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=n.option.asSize,s=this.options,o=s.orientation,r=!1,a=this.dom.frame,h=s.editable.updateTime||s.editable.updateGroup;a.className="itemset"+(h?" editable":""),r=this._orderGroups()||r;var d=e.end-e.start,l=d!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth;l&&(this.stackDirty=!0),this.lastVisibleInterval=d,this.props.lastWidth=this.props.width;var c=this.stackDirty,p=this._firstGroup(),u={item:t.item,axis:t.axis},m={item:t.item,axis:t.item.vertical/2},f=0,g=t.axis+t.item.vertical;return n.forEach(this.groups,function(t){var i=t==p?u:m,s=t.redraw(e,i,c);r=s||r,f+=t.height}),f=Math.max(f,g),this.stackDirty=!1,a.style.height=i(f),this.props.top=a.offsetTop,this.props.left=a.offsetLeft,this.props.width=a.offsetWidth,this.props.height=f,this.dom.axis.style.top=i("top"==o?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.dom.axis.style.left=this.body.domProps.border.left+"px",r=this._isResized()||r},s.prototype._firstGroup=function(){var t="top"==this.options.orientation?0:this.groupIds.length-1,e=this.groupIds[t],i=this.groups[e]||this.groups[u];return i||null},s.prototype._updateUngrouped=function(){var t=this.groups[u];if(this.groupsData)t&&(t.hide(),delete this.groups[u]);else if(!t){var e=null,i=null;t=new d(e,i,this),this.groups[u]=t;for(var s in this.items)this.items.hasOwnProperty(s)&&t.add(this.items[s]);t.show()}},s.prototype.getLabelSet=function(){return this.dom.labelSet},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(n.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var o=this.id;n.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,o)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}},s.prototype.getItems=function(){return this.itemsData},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(n.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;n.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("change")},s.prototype.getGroups=function(){return this.groupsData},s.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},s.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i=e.itemsData.get(t,e.itemOptions),o=e.items[t],n=i.type||e.options.type||(i.end?"range":"box"),r=s.types[n];if(o&&(r&&o instanceof r?e._updateItem(o,i):(e._removeItem(o),o=null)),!o){if(!r)throw new TypeError("rangeoverflow"==n?'Item type "rangeoverflow" is deprecated. Use css styling instead: .vis.timeline .item.range .content {overflow: visible;}':'Unknown item type "'+n+'"');o=new r(i,e.conversion,e.options),o.id=t,e._addItem(o)}}),this._order(),this.stackDirty=!0,this.body.emitter.emit("change")},s.prototype._onAdd=s.prototype._onUpdate,s.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var s=i.items[t];s&&(e++,i._removeItem(s))}),e&&(this._order(),this.stackDirty=!0,this.body.emitter.emit("change"))},s.prototype._order=function(){n.forEach(this.groups,function(t){t.order()})},s.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},s.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),s=e.groups[t];if(s)s.setData(i);else{if(t==u)throw new Error("Illegal group id. "+t+" is a reserved id.");var o=Object.create(e.options);n.extend(o,{height:null}),s=new d(t,i,e),e.groups[t]=s;for(var r in e.items)if(e.items.hasOwnProperty(r)){var a=e.items[r];a.data.group==t&&s.add(a)}s.order(),s.show()}}),this.body.emitter.emit("change")},s.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("change")},s.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder}),e=!n.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},s.prototype._addItem=function(t){this.items[t.id]=t;var e=this.groupsData?t.data.group:u,i=this.groups[e];i&&i.add(t)},s.prototype._updateItem=function(t,e){var i=t.data.group;if(t.data=e,t.displayed&&t.redraw(),i!=t.data.group){var s=this.groups[i];s&&s.remove(t);var o=this.groupsData?t.data.group:u,n=this.groups[o];n&&n.add(t)}},s.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1);var i=this.groupsData?t.data.group:u,s=this.groups[i];s&&s.remove(t)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0||o.length>0)&&this.body.emitter.emit("select",{items:this.getSelection()}),t.stopPropagation()}},s.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.body.util.snap||null,o=s.itemFromTarget(t);if(o){var r=e.itemsData.get(o.id);this.options.onUpdate(r,function(t){t&&e.itemsData.update(t)})}else{var a=n.getAbsoluteLeft(this.dom.frame),h=t.gesture.center.pageX-a,d=this.body.util.toTime(h),l={start:i?i(d):d,content:"new item"};if("range"===this.options.type){var c=this.body.util.toTime(h+this.props.width/5);l.end=i?i(c):c}l[this.itemsData.fieldId]=n.randomUUID();var p=s.groupFromTarget(t);p&&(l.group=p.groupId),this.options.onAdd(l,function(t){t&&e.itemsData.add(l)})}}},s.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e,i=s.itemFromTarget(t);if(i){e=this.getSelection();var o=e.indexOf(i.id);-1==o?e.push(i.id):e.splice(o,1),this.setSelection(e),this.body.emitter.emit("select",{items:this.getSelection()}),t.stopPropagation()}}},s.itemFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},s.groupFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-group"))return e["timeline-group"];e=e.parentNode}return null},s.itemSetFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-itemset"))return e["timeline-itemset"];e=e.parentNode}return null},t.exports=s},function(t,e,i){function s(t,e,i){this.body=t,this.defaultOptions={enabled:!0,icons:!0,iconSize:20,iconSpacing:6,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-left"}},this.side=i,this.options=o.extend({},this.defaultOptions),this.svgElements={},this.dom={},this.groups={},this.amountOfGroups=0,this._create(),this.setOptions(e)}var o=i(1),n=i(2),r=i(18);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.className="legend",this.dom.frame.style.position="absolute",this.dom.frame.style.top="10px",this.dom.frame.style.display="block",this.dom.textArea=document.createElement("div"),this.dom.textArea.className="legendText",this.dom.textArea.style.position="relative",this.dom.textArea.style.top="0px",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.width=this.options.iconSize+5+"px",this.dom.frame.appendChild(this.svg),this.dom.frame.appendChild(this.dom.textArea)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setOptions=function(t){var e=["enabled","orientation","icons","left","right"];o.selectiveDeepExtend(e,this.options,t)},s.prototype.redraw=function(){if(0==this.options[this.side].visible||0==this.amountOfGroups||0==this.options.enabled)this.hide();else{this.show(),"top-left"==this.options[this.side].position||"bottom-left"==this.options[this.side].position?(this.dom.frame.style.left="4px",this.dom.frame.style.textAlign="left",this.dom.textArea.style.textAlign="left",this.dom.textArea.style.left=this.options.iconSize+15+"px",this.dom.textArea.style.right="",this.svg.style.left="0px",this.svg.style.right=""):(this.dom.frame.style.right="4px",this.dom.frame.style.textAlign="right",this.dom.textArea.style.textAlign="right",this.dom.textArea.style.right=this.options.iconSize+15+"px",this.dom.textArea.style.left="",this.svg.style.right="0px",this.svg.style.left=""),"top-left"==this.options[this.side].position||"top-right"==this.options[this.side].position?(this.dom.frame.style.top=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.bottom=""):(this.dom.frame.style.bottom=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.top=""),0==this.options.icons?(this.dom.frame.style.width=this.dom.textArea.offsetWidth+10+"px",this.dom.textArea.style.right="",this.dom.textArea.style.left="",this.svg.style.width="0px"):(this.dom.frame.style.width=this.options.iconSize+15+this.dom.textArea.offsetWidth+10+"px",this.drawLegendIcons());var t="";for(var e in this.groups)this.groups.hasOwnProperty(e)&&(t+=this.groups[e].content+" ");this.dom.textArea.innerHTML=t,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},s.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){n.prepareElements(this.svgElements);var t=window.getComputedStyle(this.dom.frame).paddingTop,e=Number(t.replace("px","")),i=e,s=this.options.iconSize,o=.75*this.options.iconSize,r=e+.5*o+3;this.svg.style.width=s+5+e+"px";for(var a in this.groups)this.groups.hasOwnProperty(a)&&(this.groups[a].drawIcon(i,r,this.svgElements,this.svg,s,o),r+=o+this.options.iconSpacing);n.cleanupElements(this.svgElements)}},t.exports=s},function(t,e,i){function s(t,e){this.id=o.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,align:"center"},catmullRom:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:"40px",visible:!0},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}}},this.options=o.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={};var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.body.emitter.on("rangechange",function(){if(0!=i.lastStart){var t=i.body.range.start-i.lastStart,e=i.body.range.end-i.body.range.start;if(0!=i.width){var s=i.width/e,o=t*s;i.svg.style.left=-i.width-o+"px"}}}),this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=o.option.asSize(-i.width),i._updateGraph.apply(i)}),this._create(),this.body.emitter.emit("change")}var o=i(1),n=i(2),r=i(3),a=i(4),h=i(18),d=i(21),l=i(22),c=i(25),p="__ungrouped__";s.prototype=new h,s.prototype._create=function(){var t=document.createElement("div");t.className="LineGraph",this.dom.frame=t,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="relative",this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",this.svg.style.display="block",t.appendChild(this.svg),this.options.dataAxis.orientation="left",this.yAxisLeft=new d(this.body,this.options.dataAxis,this.svg),this.options.dataAxis.orientation="right",this.yAxisRight=new d(this.body,this.options.dataAxis,this.svg),delete this.options.dataAxis.orientation,this.legendLeft=new c(this.body,this.options.legend,"left"),this.legendRight=new c(this.body,this.options.legend,"right"),this.show()},s.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort"];o.selectiveDeepExtend(e,this.options,t),o.mergeOptions(this.options,t,"catmullRom"),o.mergeOptions(this.options,t,"drawPoints"),o.mergeOptions(this.options,t,"shaded"),o.mergeOptions(this.options,t,"legend"),t.catmullRom&&"object"==typeof t.catmullRom&&t.catmullRom.parametrization&&("uniform"==t.catmullRom.parametrization?this.options.catmullRom.alpha=0:"chordal"==t.catmullRom.parametrization?this.options.catmullRom.alpha=1:(this.options.catmullRom.parametrization="centripetal",this.options.catmullRom.alpha=.5)),this.yAxisLeft&&void 0!==t.dataAxis&&(this.yAxisLeft.setOptions(this.options.dataAxis),this.yAxisRight.setOptions(this.options.dataAxis)),this.legendLeft&&void 0!==t.legend&&(this.legendLeft.setOptions(this.options.legend),this.legendRight.setOptions(this.options.legend)),this.groups.hasOwnProperty(p)&&this.groups[p].setOptions(t)}this.dom.frame&&this._updateGraph()},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(o.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;o.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e)}this._updateUngrouped(),this._updateGraph(),this.redraw()},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(o.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;o.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._onUpdate()},s.prototype._onUpdate=function(){this._updateUngrouped(),this._updateAllGroupData(),this._updateGraph(),this.redraw()},s.prototype._onAdd=function(t){this._onUpdate(t)},s.prototype._onRemove=function(t){this._onUpdate(t)},s.prototype._onUpdateGroups=function(t){for(var e=0;e0){for(s=0;su){e.push(g);break}e.push(g)}}else for(var f=0;fp&&g.x0){for(var p=0;pi?i:a,d=s>d?s:d):(r=!0,h=h>i?i:h,l=s>l?s:l)}1==n&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}return o=this._toggleAxisVisiblity(n,this.yAxisLeft)||o,o=this._toggleAxisVisiblity(r,this.yAxisRight)||o,1==r&&1==n?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!n,0==this.yAxisRight.master?(1==r&&(this.yAxisLeft.lineOffset=this.yAxisRight.width),o=this.yAxisLeft.redraw()||o,this.yAxisRight.stepPixelsForced=this.yAxisLeft.stepPixels,o=this.yAxisRight.redraw()||o):o=this.yAxisRight.redraw()||o,o},s.prototype._toggleAxisVisiblity=function(t,e){var i=!1;return 0==t?e.dom.frame.parentNode&&(e.hide(),i=!0):e.dom.frame.parentNode||(e.show(),i=!0),i
-},s.prototype._drawBarGraph=function(t,e){if(null!=t&&t.length>0){var i,s=.1*e.options.barChart.width,o=0,r=e.options.barChart.width;"left"==e.options.barChart.align?o-=.5*r:"right"==e.options.barChart.align&&(o+=.5*r);for(var a=0;a0&&(i=Math.min(i,Math.abs(t[a-1].x-t[a].x))),r>i&&(r=s>i?s:i),n.drawBar(t[a].x+o,t[a].y,r,e.zeroPosition-t[a].y,e.className+" bar",this.svgElements,this.svg);1==e.options.drawPoints.enabled&&this._drawPoints(t,e,this.svgElements,this.svg,o)}},s.prototype._drawLineGraph=function(t,e){if(null!=t&&t.length>0){var i,s,o=Number(this.svg.style.height.replace("px",""));if(i=n.getSVGElement("path",this.svgElements,this.svg),i.setAttributeNS(null,"class",e.className),s=1==e.options.catmullRom.enabled?this._catmullRom(t,e):this._linear(t),1==e.options.shaded.enabled){var r,a=n.getSVGElement("path",this.svgElements,this.svg);r="top"==e.options.shaded.orientation?"M"+t[0].x+",0 "+s+"L"+t[t.length-1].x+",0":"M"+t[0].x+","+o+" "+s+"L"+t[t.length-1].x+","+o,a.setAttributeNS(null,"class",e.className+" fill"),a.setAttributeNS(null,"d",r)}i.setAttributeNS(null,"d","M"+s),1==e.options.drawPoints.enabled&&this._drawPoints(t,e,this.svgElements,this.svg)}},s.prototype._drawPoints=function(t,e,i,s,o){void 0===o&&(o=0);for(var r=0;rp;p+=r)i=n(t[p].x)+this.width-1,s=t[p].y,o.push({x:i,y:s}),h=h>s?s:h,d=s>d?s:d;return{min:h,max:d,data:o}},s.prototype._convertYvalues=function(t,e){var i,s,o=[],n=this.yAxisLeft,r=Number(this.svg.style.height.replace("px",""));"right"==e.options.yAxisOrientation&&(n=this.yAxisRight);for(var a=0;al;l++)e=0==l?t[0]:t[l-1],i=t[l],s=t[l+1],o=d>l+2?t[l+2]:s,n={x:(-e.x+6*i.x+s.x)*h,y:(-e.y+6*i.y+s.y)*h},r={x:(i.x+6*s.x-o.x)*h,y:(i.y+6*s.y-o.y)*h},a+="C"+n.x+","+n.y+" "+r.x+","+r.y+" "+s.x+","+s.y+" ";return a},s.prototype._catmullRom=function(t,e){var i=e.options.catmullRom.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);for(var s,o,n,r,a,h,d,l,c,p,u,m,f,g,v,y,b,_,x,w=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",S=t.length,M=0;S-1>M;M++)s=0==M?t[0]:t[M-1],o=t[M],n=t[M+1],r=S>M+2?t[M+2]:n,d=Math.sqrt(Math.pow(s.x-o.x,2)+Math.pow(s.y-o.y,2)),l=Math.sqrt(Math.pow(o.x-n.x,2)+Math.pow(o.y-n.y,2)),c=Math.sqrt(Math.pow(n.x-r.x,2)+Math.pow(n.y-r.y,2)),g=Math.pow(c,i),y=Math.pow(c,2*i),v=Math.pow(l,i),b=Math.pow(l,2*i),x=Math.pow(d,i),_=Math.pow(d,2*i),p=2*_+3*x*v+b,u=2*y+3*g*v+b,m=3*x*(x+v),m>0&&(m=1/m),f=3*g*(g+v),f>0&&(f=1/f),a={x:(-b*s.x+p*o.x+_*n.x)*m,y:(-b*s.y+p*o.y+_*n.y)*m},h={x:(y*o.x+u*n.x-b*r.x)*f,y:(y*o.y+u*n.y-b*r.y)*f},0==a.x&&0==a.y&&(a=o),0==h.x&&0==h.y&&(h=n),w+="C"+a.x+","+a.y+" "+h.x+","+h.y+" "+n.x+","+n.y+" ";return w},s.prototype._linear=function(t){for(var e="",i=0;id;){d++;var l=n.getCurrent(),c=this.body.util.toScreen(l),p=n.isMajor();this.options.showMinorLabels&&this._repaintMinorText(c,n.getLabelMinor(),t),p&&this.options.showMajorLabels?(c>0&&(void 0==h&&(h=c),this._repaintMajorText(c,n.getLabelMajor(),t)),this._repaintMajorLine(c,t)):this._repaintMinorLine(c,t),n.next()}if(this.options.showMajorLabels){var u=this.body.util.toTime(0),m=n.getLabelMajor(u),f=m.length*(this.props.majorCharWidth||10)+10;(void 0==h||h>f)&&this._repaintMajorText(0,m,t)}o.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},s.prototype._repaintMinorText=function(t,e,i){var s=this.dom.redundant.minorTexts.shift();if(!s){var o=document.createTextNode("");s=document.createElement("div"),s.appendChild(o),s.className="text minor",this.dom.foreground.appendChild(s)}this.dom.minorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?this.props.majorLabelHeight+"px":"0",s.style.left=t+"px"},s.prototype._repaintMajorText=function(t,e,i){var s=this.dom.redundant.majorTexts.shift();if(!s){var o=document.createTextNode(e);s=document.createElement("div"),s.className="text major",s.appendChild(o),this.dom.foreground.appendChild(s)}this.dom.majorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?"0":this.props.minorLabelHeight+"px",s.style.left=t+"px"},s.prototype._repaintMinorLine=function(t,e){var i=this.dom.redundant.minorLines.shift();i||(i=document.createElement("div"),i.className="grid vertical minor",this.dom.background.appendChild(i)),this.dom.minorLines.push(i);var s=this.props;i.style.top="top"==e?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",i.style.height=s.minorLineHeight+"px",i.style.left=t-s.minorLineWidth/2+"px"},s.prototype._repaintMajorLine=function(t,e){var i=this.dom.redundant.majorLines.shift();i||(i=document.createElement("DIV"),i.className="grid vertical major",this.dom.background.appendChild(i)),this.dom.majorLines.push(i);var s=this.props;i.style.top="top"==e?"0":this.body.domProps.top.height+"px",i.style.left=t-s.majorLineWidth/2+"px",i.style.height=s.majorLineHeight+"px"},s.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="text minor measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="text minor measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth},s.prototype.snap=function(t){return this.step.snap(t)},t.exports=s},function(t,e,i){function s(t,e,i){this.id=null,this.parent=null,this.data=t,this.dom=null,this.conversion=e||{},this.options=i||{},this.selected=!1,this.displayed=!1,this.dirty=!0,this.top=null,this.left=null,this.width=null,this.height=null}var o=i(40);s.prototype.select=function(){this.selected=!0,this.displayed&&this.redraw()},s.prototype.unselect=function(){this.selected=!1,this.displayed&&this.redraw()},s.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},s.prototype.isVisible=function(){return!1},s.prototype.show=function(){return!1},s.prototype.hide=function(){return!1},s.prototype.redraw=function(){},s.prototype.repositionX=function(){},s.prototype.repositionY=function(){},s.prototype._repaintDeleteButton=function(t){if(this.selected&&this.options.editable.remove&&!this.dom.deleteButton){var e=this,i=document.createElement("div");i.className="delete",i.title="Delete this item",o(i,{preventDefault:!0}).on("tap",function(t){e.parent.removeFromDataSet(e),t.stopPropagation()}),t.appendChild(i),this.dom.deleteButton=i}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},t.exports=s},function(t,e,i){function s(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);o.call(this,t,e,i)}var o=i(28);s.prototype=new o(null,null,null),s.prototype.isVisible=function(t){var e=(t.end-t.start)/4;return this.data.start>t.start-e&&this.data.startt.start-e&&this.data.startt.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),t.box["timeline-item"]=this),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.foreground;if(!e)throw new Error("Cannot redraw time axis: parent has no foreground container element");e.appendChild(t.box)}if(this.displayed=!0,this.data.content!=this.content){if(this.content=this.data.content,this.content instanceof Element)t.content.innerHTML="",t.content.appendChild(this.content);else{if(void 0==this.data.content)throw new Error('Property "content" missing in item '+this.data.id);t.content.innerHTML=this.content}this.dirty=!0}this.data.title!=this.title&&(t.box.title=this.data.title,this.title=this.data.title);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");this.className!=i&&(this.className=i,t.box.className=this.baseClassName+i,this.dirty=!0),this.dirty&&(this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.props.content.width=this.dom.content.offsetWidth,this.height=this.dom.box.offsetHeight,this.dirty=!1),this._repaintDeleteButton(t.box),this._repaintDragLeft(),this._repaintDragRight()},s.prototype.show=function(){this.displayed||this.redraw()},s.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.top=null,this.left=null,this.displayed=!1}},s.prototype.repositionX=function(){var t,e=this.props,i=this.parent.width,s=this.conversion.toScreen(this.data.start),o=this.conversion.toScreen(this.data.end),n=this.options.padding;-i>s&&(s=-i),o>2*i&&(o=2*i);var r=Math.max(o-s,1);this.overflow?(t=Math.max(-s,0),this.left=s,this.width=r+this.props.content.width):(t=0>s?Math.min(-s,o-s-e.content.width-2*n):0,this.left=s,this.width=r),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=r+"px",this.dom.content.style.left=t+"px"},s.prototype.repositionY=function(){var t=this.options.orientation,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},s.prototype._repaintDragLeft=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="drag-left",t.dragLeftItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragLeft=t}else!this.selected&&this.dom.dragLeft&&(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},s.prototype._repaintDragRight=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="drag-right",t.dragRightItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragRight=t}else!this.selected&&this.dom.dragRight&&(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this._initializeMixinLoaders(),this.containerElement=t,this.width="100%",this.height="100%",this.renderRefreshRate=60,this.renderTimestep=1e3/this.renderRefreshRate,this.renderTime=.5*this.renderTimestep,this.maxPhysicsTicksPerRender=3,this.physicsDiscreteStepsize=.5,this.stabilize=!0,this.selectable=!0,this.initializing=!0,this.triggerFunctions={add:null,edit:null,editEdge:null,connect:null,del:null},this.constants={nodes:{radiusMin:10,radiusMax:30,radius:10,shape:"ellipse",image:void 0,widthMin:16,widthMax:64,fixed:!1,fontColor:"black",fontSize:14,fontFace:"verdana",level:-1,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},borderColor:"#2B7CE9",backgroundColor:"#97C2FC",highlightColor:"#D2E5FF",group:void 0,borderWidth:1},edges:{widthMin:1,widthMax:15,width:1,widthSelectionMultiplier:2,hoverWidth:1.5,style:"line",color:{color:"#848484",highlight:"#848484",hover:"#848484"},fontColor:"#343434",fontSize:14,fontFace:"arial",fontFill:"white",arrowScaleFactor:1,dash:{length:10,gap:5,altLength:void 0},inheritColor:"from"},configurePhysics:!1,physics:{barnesHut:{enabled:!0,theta:1/.6,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09},repulsion:{centralGravity:0,springLength:200,springConstant:.05,nodeDistance:100,damping:.09},hierarchicalRepulsion:{enabled:!1,centralGravity:0,springLength:100,springConstant:.01,nodeDistance:150,damping:.09},damping:null,centralGravity:null,springLength:null,springConstant:null},clustering:{enabled:!1,initialMaxNodes:100,clusterThreshold:500,reduceToNodes:300,chainThreshold:.4,clusterEdgeThreshold:20,sectorThreshold:100,screenSizeThreshold:.2,fontSizeMultiplier:4,maxFontSize:1e3,forceAmplification:.1,distanceAmplification:.1,edgeGrowth:20,nodeScaling:{width:1,height:1,radius:1},maxNodeSizeIncrements:600,activeAreaBoxSize:80,clusterLevelDifference:2},navigation:{enabled:!1},keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02}},dataManipulation:{enabled:!1,initiallyVisible:!1},hierarchicalLayout:{enabled:!1,levelSeparation:150,nodeSpacing:100,direction:"UD"},freezeForStabilization:!1,smoothCurves:{enabled:!0,dynamic:!0,type:"continuous",roundness:.5},dynamicSmoothCurves:!0,maxVelocity:30,minVelocity:.1,stabilizationIterations:1e3,labels:{add:"Add Node",edit:"Edit",link:"Add Link",del:"Delete selected",editNode:"Edit Node",editEdge:"Edit Edge",back:"Back",addDescription:"Click in an empty space to place a new node.",linkDescription:"Click on a node and drag the edge to another node to connect them.",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",addError:"The function for add does not support two arguments (data,callback).",linkError:"The function for connect does not support two arguments (data,callback).",editError:"The function for edit does not support two arguments (data, callback).",editBoundError:"No edit function has been bound to this button.",deleteError:"The function for delete does not support two arguments (data, callback).",deleteClusterError:"Clusters cannot be deleted."},tooltip:{delay:300,fontColor:"black",fontSize:14,fontFace:"verdana",color:{border:"#666",background:"#FFFFC6"}},dragNetwork:!0,dragNodes:!0,zoomable:!0,hover:!1,hideEdgesOnDrag:!1,hideNodesOnDrag:!1},this.hoverObj={nodes:{},edges:{}},this.controlNodesActive=!1;var o=this;this.groups=new p,this.images=new u,this.images.setOnloadCallback(function(){o._redraw()}),this.xIncrement=0,this.yIncrement=0,this.zoomIncrement=0,this._loadPhysicsSystem(),this._create(),this._loadSectorSystem(),this._loadClusterSystem(),this._loadSelectionSystem(),this._loadHierarchySystem(),this._setTranslation(this.frame.clientWidth/2,this.frame.clientHeight/2),this._setScale(1),this.setOptions(i),this.freezeSimulation=!1,this.cachedFunctions={},this.calculationNodes={},this.calculationNodeIndices=[],this.nodeIndices=[],this.nodes={},this.edges={},this.canvasTopLeft={x:0,y:0},this.canvasBottomRight={x:0,y:0},this.pointerPosition={x:0,y:0},this.areaCenter={},this.scale=1,this.previousScale=this.scale,this.nodesData=null,this.edgesData=null,this.nodesListeners={add:function(t,e){o._addNodes(e.items),o.start()},update:function(t,e){o._updateNodes(e.items),o.start()},remove:function(t,e){o._removeNodes(e.items),o.start()}},this.edgesListeners={add:function(t,e){o._addEdges(e.items),o.start()},update:function(t,e){o._updateEdges(e.items),o.start()},remove:function(t,e){o._removeEdges(e.items),o.start()}},this.moving=!0,this.timer=void 0,this.setData(e,this.constants.clustering.enabled||this.constants.hierarchicalLayout.enabled),this.initializing=!1,1==this.constants.hierarchicalLayout.enabled?this._setupHierarchicalLayout():0==this.stabilize&&this.zoomExtent(!0,this.constants.clustering.enabled),this.constants.clustering.enabled&&this.startWithClustering()}var o=i(44),n=i(40),r=i(45),a=i(1),h=i(41),d=i(3),l=i(4),c=i(38),p=i(34),u=i(35),m=i(36),f=i(33),g=i(37),v=i(43);i(42),o(s.prototype),s.prototype._getScriptPath=function(){for(var t=document.getElementsByTagName("script"),e=0;et.x&&(s=t.x),ot.y&&(e=t.y),i=this.constants.clustering.initialMaxNodes?49.07548/(o+142.05338)+91444e-8:12.662/(o+7.4147)+.0964822:1==this.constants.clustering.enabled&&o>=this.constants.clustering.initialMaxNodes?77.5271985/(o+187.266146)+476710517e-13:30.5062972/(o+19.93597763)+.08413486;var n=Math.min(this.frame.canvas.clientWidth/600,this.frame.canvas.clientHeight/600);i*=n}else{var r=1.1*(Math.abs(s.minX)+Math.abs(s.maxX)),a=1.1*(Math.abs(s.minY)+Math.abs(s.maxY)),h=this.frame.canvas.clientWidth/r,d=this.frame.canvas.clientHeight/a;i=d>=h?h:d}i>1&&(i=1),this._setScale(i),this._centerNetwork(s),0==e&&(this.moving=!0,this.start())},s.prototype._updateNodeIndexList=function(){this._clearNodeIndexList();for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodeIndices.push(t)},s.prototype.setData=function(t,e){if(void 0===e&&(e=!1),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){if(t&&t.dot){var i=c.DOTToGraph(t.dot);return void this.setData(i)}}else this._setNodes(t&&t.nodes),this._setEdges(t&&t.edges);if(this._putDataInSector(),!e)if(this.stabilize){var s=this;setTimeout(function(){s._stabilize(),s.start()},0)}else this.start()},s.prototype.setOptions=function(t){if(t){var e;if(void 0!==t.width&&(this.width=t.width),void 0!==t.height&&(this.height=t.height),void 0!==t.stabilize&&(this.stabilize=t.stabilize),void 0!==t.selectable&&(this.selectable=t.selectable),void 0!==t.freezeForStabilization&&(this.constants.freezeForStabilization=t.freezeForStabilization),void 0!==t.configurePhysics&&(this.constants.configurePhysics=t.configurePhysics),void 0!==t.stabilizationIterations&&(this.constants.stabilizationIterations=t.stabilizationIterations),void 0!==t.dragNetwork&&(this.constants.dragNetwork=t.dragNetwork),void 0!==t.dragNodes&&(this.constants.dragNodes=t.dragNodes),void 0!==t.zoomable&&(this.constants.zoomable=t.zoomable),void 0!==t.hover&&(this.constants.hover=t.hover),void 0!==t.hideEdgesOnDrag&&(this.constants.hideEdgesOnDrag=t.hideEdgesOnDrag),void 0!==t.hideNodesOnDrag&&(this.constants.hideNodesOnDrag=t.hideNodesOnDrag),void 0!==t.dragGraph)throw new Error("Option dragGraph is renamed to dragNetwork");if(void 0!==t.labels)for(e in t.labels)t.labels.hasOwnProperty(e)&&(this.constants.labels[e]=t.labels[e]);if(t.onAdd&&(this.triggerFunctions.add=t.onAdd),t.onEdit&&(this.triggerFunctions.edit=t.onEdit),t.onEditEdge&&(this.triggerFunctions.editEdge=t.onEditEdge),t.onConnect&&(this.triggerFunctions.connect=t.onConnect),t.onDelete&&(this.triggerFunctions.del=t.onDelete),t.physics){if(t.physics.barnesHut){this.constants.physics.barnesHut.enabled=!0;for(e in t.physics.barnesHut)t.physics.barnesHut.hasOwnProperty(e)&&(this.constants.physics.barnesHut[e]=t.physics.barnesHut[e])}if(t.physics.repulsion){this.constants.physics.barnesHut.enabled=!1;for(e in t.physics.repulsion)t.physics.repulsion.hasOwnProperty(e)&&(this.constants.physics.repulsion[e]=t.physics.repulsion[e])}if(t.physics.hierarchicalRepulsion){this.constants.hierarchicalLayout.enabled=!0,this.constants.physics.hierarchicalRepulsion.enabled=!0,this.constants.physics.barnesHut.enabled=!1;for(e in t.physics.hierarchicalRepulsion)t.physics.hierarchicalRepulsion.hasOwnProperty(e)&&(this.constants.physics.hierarchicalRepulsion[e]=t.physics.hierarchicalRepulsion[e])}}if(void 0!==t.smoothCurves)if("boolean"==typeof t.smoothCurves)this.constants.smoothCurves.enabled=t.smoothCurves;else{this.constants.smoothCurves.enabled=!0;for(e in t.smoothCurves)t.smoothCurves.hasOwnProperty(e)&&(this.constants.smoothCurves[e]=t.smoothCurves[e])}if(t.hierarchicalLayout){this.constants.hierarchicalLayout.enabled=!0;for(e in t.hierarchicalLayout)t.hierarchicalLayout.hasOwnProperty(e)&&(this.constants.hierarchicalLayout[e]=t.hierarchicalLayout[e])}else void 0!==t.hierarchicalLayout&&(this.constants.hierarchicalLayout.enabled=!1);if(t.clustering){this.constants.clustering.enabled=!0;for(e in t.clustering)t.clustering.hasOwnProperty(e)&&(this.constants.clustering[e]=t.clustering[e])}else void 0!==t.clustering&&(this.constants.clustering.enabled=!1);if(t.navigation){this.constants.navigation.enabled=!0;for(e in t.navigation)t.navigation.hasOwnProperty(e)&&(this.constants.navigation[e]=t.navigation[e])}else void 0!==t.navigation&&(this.constants.navigation.enabled=!1);if(t.keyboard){this.constants.keyboard.enabled=!0;for(e in t.keyboard)t.keyboard.hasOwnProperty(e)&&(this.constants.keyboard[e]=t.keyboard[e])}else void 0!==t.keyboard&&(this.constants.keyboard.enabled=!1);if(t.dataManipulation){this.constants.dataManipulation.enabled=!0;for(e in t.dataManipulation)t.dataManipulation.hasOwnProperty(e)&&(this.constants.dataManipulation[e]=t.dataManipulation[e]);this.editMode=this.constants.dataManipulation.initiallyVisible}else void 0!==t.dataManipulation&&(this.constants.dataManipulation.enabled=!1);if(t.edges){for(e in t.edges)t.edges.hasOwnProperty(e)&&"object"!=typeof t.edges[e]&&(this.constants.edges[e]=t.edges[e]);void 0!==t.edges.color&&(a.isString(t.edges.color)?(this.constants.edges.color={},this.constants.edges.color.color=t.edges.color,this.constants.edges.color.highlight=t.edges.color,this.constants.edges.color.hover=t.edges.color):(void 0!==t.edges.color.color&&(this.constants.edges.color.color=t.edges.color.color),void 0!==t.edges.color.highlight&&(this.constants.edges.color.highlight=t.edges.color.highlight),void 0!==t.edges.color.hover&&(this.constants.edges.color.hover=t.edges.color.hover))),t.edges.fontColor||void 0!==t.edges.color&&(a.isString(t.edges.color)?this.constants.edges.fontColor=t.edges.color:void 0!==t.edges.color.color&&(this.constants.edges.fontColor=t.edges.color.color)),t.edges.dash&&(void 0!==t.edges.dash.length&&(this.constants.edges.dash.length=t.edges.dash.length),void 0!==t.edges.dash.gap&&(this.constants.edges.dash.gap=t.edges.dash.gap),void 0!==t.edges.dash.altLength&&(this.constants.edges.dash.altLength=t.edges.dash.altLength))
-}if(t.nodes){for(e in t.nodes)t.nodes.hasOwnProperty(e)&&(this.constants.nodes[e]=t.nodes[e]);t.nodes.color&&(this.constants.nodes.color=a.parseColor(t.nodes.color))}if(t.groups)for(var i in t.groups)if(t.groups.hasOwnProperty(i)){var s=t.groups[i];this.groups.add(i,s)}if(t.tooltip){for(e in t.tooltip)t.tooltip.hasOwnProperty(e)&&(this.constants.tooltip[e]=t.tooltip[e]);t.tooltip.color&&(this.constants.tooltip.color=a.parseColor(t.tooltip.color))}}this._loadPhysicsSystem(),this._loadNavigationControls(),this._loadManipulationSystem(),this._configureSmoothCurves(),this._createKeyBinds(),this.setSize(this.width,this.height),this.moving=!0,this.start()},s.prototype._create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);if(this.frame=document.createElement("div"),this.frame.className="network-frame",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),!this.frame.canvas.getContext){var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t)}var e=this;this.drag={},this.pinch={},this.hammer=n(this.frame.canvas,{prevent_default:!0}),this.hammer.on("tap",e._onTap.bind(e)),this.hammer.on("doubletap",e._onDoubleTap.bind(e)),this.hammer.on("hold",e._onHold.bind(e)),this.hammer.on("pinch",e._onPinch.bind(e)),this.hammer.on("touch",e._onTouch.bind(e)),this.hammer.on("dragstart",e._onDragStart.bind(e)),this.hammer.on("drag",e._onDrag.bind(e)),this.hammer.on("dragend",e._onDragEnd.bind(e)),this.hammer.on("release",e._onRelease.bind(e)),this.hammer.on("mousewheel",e._onMouseWheel.bind(e)),this.hammer.on("DOMMouseScroll",e._onMouseWheel.bind(e)),this.hammer.on("mousemove",e._onMouseMoveTitle.bind(e)),this.containerElement.appendChild(this.frame)},s.prototype._createKeyBinds=function(){var t=this;this.mousetrap=r,this.mousetrap.reset(),1==this.constants.keyboard.enabled&&(this.mousetrap.bind("up",this._moveUp.bind(t),"keydown"),this.mousetrap.bind("up",this._yStopMoving.bind(t),"keyup"),this.mousetrap.bind("down",this._moveDown.bind(t),"keydown"),this.mousetrap.bind("down",this._yStopMoving.bind(t),"keyup"),this.mousetrap.bind("left",this._moveLeft.bind(t),"keydown"),this.mousetrap.bind("left",this._xStopMoving.bind(t),"keyup"),this.mousetrap.bind("right",this._moveRight.bind(t),"keydown"),this.mousetrap.bind("right",this._xStopMoving.bind(t),"keyup"),this.mousetrap.bind("=",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("=",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("-",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("-",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("[",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("[",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("]",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("]",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("pageup",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("pageup",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("pagedown",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("pagedown",this._stopZoom.bind(t),"keyup")),1==this.constants.dataManipulation.enabled&&(this.mousetrap.bind("escape",this._createManipulatorBar.bind(t)),this.mousetrap.bind("del",this._deleteSelected.bind(t)))},s.prototype._getPointer=function(t){return{x:t.pageX-a.getAbsoluteLeft(this.frame.canvas),y:t.pageY-a.getAbsoluteTop(this.frame.canvas)}},s.prototype._onTouch=function(t){this.drag.pointer=this._getPointer(t.gesture.center),this.drag.pinched=!1,this.pinch.scale=this._getScale(),this._handleTouch(this.drag.pointer)},s.prototype._onDragStart=function(){this._handleDragStart()},s.prototype._handleDragStart=function(){var t=this.drag,e=this._getNodeAt(t.pointer);if(t.dragging=!0,t.selection=[],t.translation=this._getTranslation(),t.nodeId=null,null!=e){t.nodeId=e.id,e.isSelected()||this._selectObject(e,!1);for(var i in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(i)){var s=this.selectionObj.nodes[i],o={id:s.id,node:s,x:s.x,y:s.y,xFixed:s.xFixed,yFixed:s.yFixed};s.xFixed=!0,s.yFixed=!0,t.selection.push(o)}}},s.prototype._onDrag=function(t){this._handleOnDrag(t)},s.prototype._handleOnDrag=function(t){if(!this.drag.pinched){var e=this._getPointer(t.gesture.center),i=this,s=this.drag,o=s.selection;if(o&&o.length&&1==this.constants.dragNodes){var n=e.x-s.pointer.x,r=e.y-s.pointer.y;o.forEach(function(t){var e=t.node;t.xFixed||(e.x=i._XconvertDOMtoCanvas(i._XconvertCanvasToDOM(t.x)+n)),t.yFixed||(e.y=i._YconvertDOMtoCanvas(i._YconvertCanvasToDOM(t.y)+r))}),this.moving||(this.moving=!0,this.start())}else if(1==this.constants.dragNetwork){var a=e.x-this.drag.pointer.x,h=e.y-this.drag.pointer.y;this._setTranslation(this.drag.translation.x+a,this.drag.translation.y+h),this._redraw()}}},s.prototype._onDragEnd=function(){this.drag.dragging=!1;var t=this.drag.selection;t&&(t.forEach(function(t){t.node.xFixed=t.xFixed,t.node.yFixed=t.yFixed}),this.moving=!0,this.start()),this._redraw()},s.prototype._onTap=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleTap(e)},s.prototype._onDoubleTap=function(t){var e=this._getPointer(t.gesture.center);this._handleDoubleTap(e)},s.prototype._onHold=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleOnHold(e)},s.prototype._onRelease=function(t){var e=this._getPointer(t.gesture.center);this._handleOnRelease(e)},s.prototype._onPinch=function(t){var e=this._getPointer(t.gesture.center);this.drag.pinched=!0,"scale"in this.pinch||(this.pinch.scale=1);var i=this.pinch.scale*t.gesture.scale;this._zoom(i,e)},s.prototype._zoom=function(t,e){if(1==this.constants.zoomable){var i=this._getScale();1e-5>t&&(t=1e-5),t>10&&(t=10);var s=null;void 0!==this.drag&&1==this.drag.dragging&&(s=this.DOMtoCanvas(this.drag.pointer));var o=this._getTranslation(),n=t/i,r=(1-n)*e.x+o.x*n,a=(1-n)*e.y+o.y*n;if(this.areaCenter={x:this._XconvertDOMtoCanvas(e.x),y:this._YconvertDOMtoCanvas(e.y)},this._setScale(t),this._setTranslation(r,a),this.updateClustersDefault(),null!=s){var h=this.canvasToDOM(s);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}return this._redraw(),t>i?this.emit("zoom",{direction:"+"}):this.emit("zoom",{direction:"-"}),t}},s.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i=this._getScale(),s=e/10;0>e&&(s/=1-s),i*=1+s;var o=h.fakeGesture(this,t),n=this._getPointer(o.center);this._zoom(i,n)}t.preventDefault()},s.prototype._onMouseMoveTitle=function(t){var e=h.fakeGesture(this,t),i=this._getPointer(e.center);this.popupObj&&this._checkHidePopup(i);var s=this,o=function(){s._checkShowPopup(i)};if(this.popupTimer&&clearInterval(this.popupTimer),this.drag.dragging||(this.popupTimer=setTimeout(o,this.constants.tooltip.delay)),1==this.constants.hover){for(var n in this.hoverObj.edges)this.hoverObj.edges.hasOwnProperty(n)&&(this.hoverObj.edges[n].hover=!1,delete this.hoverObj.edges[n]);var r=this._getNodeAt(i);null==r&&(r=this._getEdgeAt(i)),null!=r&&this._hoverObject(r);for(var a in this.hoverObj.nodes)this.hoverObj.nodes.hasOwnProperty(a)&&(r instanceof m&&r.id!=a||r instanceof f||null==r)&&(this._blurObject(this.hoverObj.nodes[a]),delete this.hoverObj.nodes[a]);this.redraw()}},s.prototype._checkShowPopup=function(t){var e,i={left:this._XconvertDOMtoCanvas(t.x),top:this._YconvertDOMtoCanvas(t.y),right:this._XconvertDOMtoCanvas(t.x),bottom:this._YconvertDOMtoCanvas(t.y)},s=this.popupObj;if(void 0==this.popupObj){var o=this.nodes;for(e in o)if(o.hasOwnProperty(e)){var n=o[e];if(void 0!==n.getTitle()&&n.isOverlappingWith(i)){this.popupObj=n;break}}}if(void 0===this.popupObj){var r=this.edges;for(e in r)if(r.hasOwnProperty(e)){var a=r[e];if(a.connected&&void 0!==a.getTitle()&&a.isOverlappingWith(i)){this.popupObj=a;break}}}if(this.popupObj){if(this.popupObj!=s){var h=this;h.popup||(h.popup=new g(h.frame,h.constants.tooltip)),h.popup.setPosition(t.x-3,t.y-3),h.popup.setText(h.popupObj.getTitle()),h.popup.show()}}else this.popup&&this.popup.hide()},s.prototype._checkHidePopup=function(t){this.popupObj&&this._getNodeAt(t)||(this.popupObj=void 0,this.popup&&this.popup.hide())},s.prototype.setSize=function(t,e){this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth,this.frame.canvas.height=this.frame.canvas.clientHeight,void 0!==this.manipulationDiv&&(this.manipulationDiv.style.width=this.frame.canvas.clientWidth+"px"),void 0!==this.navigationDivs&&void 0!==this.navigationDivs.wrapper&&(this.navigationDivs.wrapper.style.width=this.frame.canvas.clientWidth+"px",this.navigationDivs.wrapper.style.height=this.frame.canvas.clientHeight+"px"),this.emit("resize",{width:this.frame.canvas.width,height:this.frame.canvas.height})},s.prototype._setNodes=function(t){var e=this.nodesData;if(t instanceof d||t instanceof l)this.nodesData=t;else if(t instanceof Array)this.nodesData=new d,this.nodesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.nodesData=new d}if(e&&a.forEach(this.nodesListeners,function(t,i){e.off(i,t)}),this.nodes={},this.nodesData){var i=this;a.forEach(this.nodesListeners,function(t,e){i.nodesData.on(e,t)});var s=this.nodesData.getIds();this._addNodes(s)}this._updateSelection()},s.prototype._addNodes=function(t){for(var e,i=0,s=t.length;s>i;i++){e=t[i];var o=this.nodesData.get(e),n=new m(o,this.images,this.groups,this.constants);if(this.nodes[e]=n,!(0!=n.xFixed&&0!=n.yFixed||null!==n.x&&null!==n.y)){var r=1*t.length,a=2*Math.PI*Math.random();0==n.xFixed&&(n.x=r*Math.cos(a)),0==n.yFixed&&(n.y=r*Math.sin(a))}this.moving=!0}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateValueRange(this.nodes),this.updateLabels()},s.prototype._updateNodes=function(t){for(var e=this.nodes,i=this.nodesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n],a=i.get(n);r?r.setProperties(a,this.constants):(r=new m(properties,this.images,this.groups,this.constants),e[n]=r)}this.moving=!0,1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateNodeIndexList(),this._reconnectEdges(),this._updateValueRange(e)},s.prototype._removeNodes=function(t){for(var e=this.nodes,i=0,s=t.length;s>i;i++){var o=t[i];delete e[o]}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateSelection(),this._updateValueRange(e)},s.prototype._setEdges=function(t){var e=this.edgesData;if(t instanceof d||t instanceof l)this.edgesData=t;else if(t instanceof Array)this.edgesData=new d,this.edgesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.edgesData=new d}if(e&&a.forEach(this.edgesListeners,function(t,i){e.off(i,t)}),this.edges={},this.edgesData){var i=this;a.forEach(this.edgesListeners,function(t,e){i.edgesData.on(e,t)});var s=this.edgesData.getIds();this._addEdges(s)}this._reconnectEdges()},s.prototype._addEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n];r&&r.disconnect();var a=i.get(n,{showInternalIds:!0});e[n]=new f(a,this,this.constants)}this.moving=!0,this._updateValueRange(e),this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._updateEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=i.get(n),a=e[n];a?(a.disconnect(),a.setProperties(r,this.constants),a.connect()):(a=new f(r,this,this.constants),this.edges[n]=a)}this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this.moving=!0,this._updateValueRange(e)},s.prototype._removeEdges=function(t){for(var e=this.edges,i=0,s=t.length;s>i;i++){var o=t[i],n=e[o];n&&(null!=n.via&&delete this.sectors.support.nodes[n.via.id],n.disconnect(),delete e[o])}this.moving=!0,this._updateValueRange(e),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._reconnectEdges=function(){var t,e=this.nodes,i=this.edges;for(t in e)e.hasOwnProperty(t)&&(e[t].edges=[]);for(t in i)if(i.hasOwnProperty(t)){var s=i[t];s.from=null,s.to=null,s.connect()}},s.prototype._updateValueRange=function(t){var e,i=void 0,s=void 0;for(e in t)if(t.hasOwnProperty(e)){var o=t[e].getValue();void 0!==o&&(i=void 0===i?o:Math.min(o,i),s=void 0===s?o:Math.max(o,s))}if(void 0!==i&&void 0!==s)for(e in t)t.hasOwnProperty(e)&&t[e].setValueRange(i,s)},s.prototype.redraw=function(){this.setSize(this.width,this.height),this._redraw()},s.prototype._redraw=function(){var t=this.frame.canvas.getContext("2d"),e=this.frame.canvas.width,i=this.frame.canvas.height;t.clearRect(0,0,e,i),t.save(),t.translate(this.translation.x,this.translation.y),t.scale(this.scale,this.scale),this.canvasTopLeft={x:this._XconvertDOMtoCanvas(0),y:this._YconvertDOMtoCanvas(0)},this.canvasBottomRight={x:this._XconvertDOMtoCanvas(this.frame.canvas.clientWidth),y:this._YconvertDOMtoCanvas(this.frame.canvas.clientHeight)},this._doInAllSectors("_drawAllSectorNodes",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideEdgesOnDrag)&&this._doInAllSectors("_drawEdges",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideNodesOnDrag)&&this._doInAllSectors("_drawNodes",t,!1),1==this.controlNodesActive&&this._doInAllSectors("_drawControlNodes",t),t.restore()},s.prototype._setTranslation=function(t,e){void 0===this.translation&&(this.translation={x:0,y:0}),void 0!==t&&(this.translation.x=t),void 0!==e&&(this.translation.y=e),this.emit("viewChanged")},s.prototype._getTranslation=function(){return{x:this.translation.x,y:this.translation.y}},s.prototype._setScale=function(t){this.scale=t},s.prototype._getScale=function(){return this.scale},s.prototype._XconvertDOMtoCanvas=function(t){return(t-this.translation.x)/this.scale},s.prototype._XconvertCanvasToDOM=function(t){return t*this.scale+this.translation.x},s.prototype._YconvertDOMtoCanvas=function(t){return(t-this.translation.y)/this.scale},s.prototype._YconvertCanvasToDOM=function(t){return t*this.scale+this.translation.y},s.prototype.canvasToDOM=function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}},s.prototype.DOMtoCanvas=function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}},s.prototype._drawNodes=function(t,e){void 0===e&&(e=!1);var i=this.nodes,s=[];for(var o in i)i.hasOwnProperty(o)&&(i[o].setScaleAndPos(this.scale,this.canvasTopLeft,this.canvasBottomRight),i[o].isSelected()?s.push(o):(i[o].inArea()||e)&&i[o].draw(t));for(var n=0,r=s.length;r>n;n++)(i[s[n]].inArea()||e)&&i[s[n]].draw(t)},s.prototype._drawEdges=function(t){var e=this.edges;for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];s.setScale(this.scale),s.connected&&e[i].draw(t)}},s.prototype._drawControlNodes=function(t){var e=this.edges;for(var i in e)e.hasOwnProperty(i)&&e[i]._drawControlNodes(t)},s.prototype._stabilize=function(){1==this.constants.freezeForStabilization&&this._freezeDefinedNodes();for(var t=0;this.moving&&t0)for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStepLimited(e,this.constants.maxVelocity),s=!0);else for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStep(e),s=!0);if(1==s){var o=this.constants.minVelocity/Math.max(this.scale,.05);o>.5*this.constants.maxVelocity?this.moving=!0:(this.moving=this._isMoving(o),0==this.moving&&this.emit("stabilized",{iterations:null}),this.moving=this.moving||this.configurePhysics)}},s.prototype._physicsTick=function(){this.freezeSimulation||this.moving&&(this._doInAllActiveSectors("_initializeForceCalculation"),this._doInAllActiveSectors("_discreteStepNodes"),this.constants.smoothCurves&&this._doInSupportSector("_discreteStepNodes"),this._findCenter(this._getRange()))},s.prototype._animationStep=function(){this.timer=void 0,this._handleNavigation(),this.start();var t=Date.now(),e=1;this._physicsTick();for(var i=Date.now()-t;i<.9*(this.renderTimestep-this.renderTime)&&eh}return!1},s.prototype._getColor=function(){var t=this.color;return"to"==this.inheritColor?t={highlight:this.to.color.highlight.border,hover:this.to.color.hover.border,color:this.to.color.border}:("from"==this.inheritColor||1==this.inheritColor)&&(t={highlight:this.from.color.highlight.border,hover:this.from.color.hover.border,color:this.from.color.border}),1==this.selected?t.highlight:1==this.hover?t.hover:t.color},s.prototype._drawLine=function(t){if(t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth(),this.from!=this.to){var e,i=this._line(t);if(this.label){if(1==this.smoothCurves.enabled&&null!=i){var s=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),o=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:s,y:o}}else e=this._pointOnLine(.5);this._label(t,this.label,e.x,e.y)}}else{var n,r,a=this.length/4,h=this.from;h.width||h.resize(t),h.width>h.height?(n=h.x+h.width/2,r=h.y-a):(n=h.x+a,r=h.y-h.height/2),this._circle(t,n,r,a),e=this._pointOnCircle(n,r,a,.5),this._label(t,this.label,e.x,e.y)}},s.prototype._getLineWidth=function(){return 1==this.selected?Math.min(this.widthSelected,this.widthMax)*this.networkScaleInv:1==this.hover?Math.min(this.hoverWidth,this.widthMax)*this.networkScaleInv:this.width*this.networkScaleInv},s.prototype._getViaCoordinates=function(){var t=null,e=null,i=this.smoothCurves.roundness,s=this.smoothCurves.type,o=Math.abs(this.from.x-this.to.x),n=Math.abs(this.from.y-this.to.y);return"discrete"==s||"diagonalCross"==s?Math.abs(this.from.x-this.to.x)this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n)),"discrete"==s&&(t=i*n>o?this.from.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o)),"discrete"==s&&(e=i*o>n?this.from.y:e)):"straightCross"==s?Math.abs(this.from.x-this.to.x)Math.abs(this.from.y-this.to.y)&&(t=this.from.xthis.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n,t=this.to.x>t?this.to.x:t):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n,t=this.to.x>t?this.to.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xe?this.to.y:e):this.from.x>this.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o,e=this.to.y>e?this.to.y:e):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o,e=this.to.yl.height?(a=l.x+.5*l.width,h=l.y-d):(a=l.x+d,h=l.y-.5*l.height),this._circle(t,a,h,d);var s=.2*Math.PI,o=(10+5*this.width)*this.arrowScaleFactor;e=this._pointOnCircle(a,h,d,.5),t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&(e=this._pointOnCircle(a,h,d,.5),this._label(t,this.label,e.x,e.y))}},s.prototype._drawArrow=function(t){1==this.selected?(t.strokeStyle=this.color.highlight,t.fillStyle=this.color.highlight):1==this.hover?(t.strokeStyle=this.color.hover,t.fillStyle=this.color.hover):(t.strokeStyle=this.color.color,t.fillStyle=this.color.color),t.lineWidth=this._getLineWidth();
-var e,i;if(this.from!=this.to){e=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x);var s,o=this.to.x-this.from.x,n=this.to.y-this.from.y,r=Math.sqrt(o*o+n*n),a=this.from.distanceToBorder(t,e+Math.PI),h=(r-a)/r,d=h*this.from.x+(1-h)*this.to.x,l=h*this.from.y+(1-h)*this.to.y;1==this.smoothCurves.dynamic&&1==this.smoothCurves.enabled?s=this.via:1==this.smoothCurves.enabled&&(s=this._getViaCoordinates()),1==this.smoothCurves.enabled&&null!=s.x&&(e=Math.atan2(this.to.y-s.y,this.to.x-s.x),o=this.to.x-s.x,n=this.to.y-s.y,r=Math.sqrt(o*o+n*n));var c,p,u=this.to.distanceToBorder(t,e),m=(r-u)/r;if(1==this.smoothCurves.enabled&&null!=s.x?(c=(1-m)*s.x+m*this.to.x,p=(1-m)*s.y+m*this.to.y):(c=(1-m)*this.from.x+m*this.to.x,p=(1-m)*this.from.y+m*this.to.y),t.beginPath(),t.moveTo(d,l),1==this.smoothCurves.enabled&&null!=s.x?t.quadraticCurveTo(s.x,s.y,c,p):t.lineTo(c,p),t.stroke(),i=(10+5*this.width)*this.arrowScaleFactor,t.arrow(c,p,e,i),t.fill(),t.stroke(),this.label){var f;if(1==this.smoothCurves.enabled&&null!=s){var g=.5*(.5*(this.from.x+s.x)+.5*(this.to.x+s.x)),v=.5*(.5*(this.from.y+s.y)+.5*(this.to.y+s.y));f={x:g,y:v}}else f=this._pointOnLine(.5);this._label(t,this.label,f.x,f.y)}}else{var y,b,_,x=this.from,w=.25*Math.max(100,this.length);x.width||x.resize(t),x.width>x.height?(y=x.x+.5*x.width,b=x.y-w,_={x:y,y:x.y,angle:.9*Math.PI}):(y=x.x+w,b=x.y-.5*x.height,_={x:x.x,y:b,angle:.6*Math.PI}),t.beginPath(),t.arc(y,b,w,0,2*Math.PI,!1),t.stroke();var i=(10+5*this.width)*this.arrowScaleFactor;t.arrow(_.x,_.y,_.angle,i),t.fill(),t.stroke(),this.label&&(f=this._pointOnCircle(y,b,w,.5),this._label(t,this.label,f.x,f.y))}},s.prototype._getDistanceToEdge=function(t,e,i,s,o,n){if(this.from!=this.to){if(1==this.smoothCurves.enabled){var r,a;if(1==this.smoothCurves.enabled&&1==this.smoothCurves.dynamic)r=this.via.x,a=this.via.y;else{var h=this._getViaCoordinates();r=h.x,a=h.y}var d,l,c,p,u,m,f,g=1e9;for(l=0;10>l;l++)c=.1*l,p=Math.pow(1-c,2)*t+2*c*(1-c)*r+Math.pow(c,2)*i,u=Math.pow(1-c,2)*e+2*c*(1-c)*a+Math.pow(c,2)*s,l>0&&(d=this._getDistanceToLine(m,f,p,u,o,n),g=g>d?d:g),m=p,f=u;return g}return this._getDistanceToLine(t,e,i,s,o,n)}var p,u,v,y,b=this.length/4,_=this.from;return _.width||_.resize(ctx),_.width>_.height?(p=_.x+_.width/2,u=_.y-b):(p=_.x+b,u=_.y-_.height/2),v=p-o,y=u-n,Math.abs(Math.sqrt(v*v+y*y)-b)},s.prototype._getDistanceToLine=function(t,e,i,s,o,n){var r=i-t,a=s-e,h=r*r+a*a,d=((o-t)*r+(n-e)*a)/h;d>1?d=1:0>d&&(d=0);var l=t+d*r,c=e+d*a,p=l-o,u=c-n;return Math.sqrt(p*p+u*u)},s.prototype.setScale=function(t){this.networkScaleInv=1/t},s.prototype.select=function(){this.selected=!0},s.prototype.unselect=function(){this.selected=!1},s.prototype.positionBezierNode=function(){null!==this.via&&(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y))},s.prototype._drawControlNodes=function(t){if(1==this.controlNodesEnabled){if(null===this.controlNodes.from&&null===this.controlNodes.to){var e="edgeIdFrom:".concat(this.id),i="edgeIdTo:".concat(this.id),s={nodes:{group:"",radius:8},physics:{damping:0},clustering:{maxNodeSizeIncrements:0,nodeScaling:{width:0,height:0,radius:0}}};this.controlNodes.from=new n({id:e,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s),this.controlNodes.to=new n({id:i,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s)}0==this.controlNodes.from.selected&&0==this.controlNodes.to.selected&&(this.controlNodes.positions=this.getControlNodePositions(t),this.controlNodes.from.x=this.controlNodes.positions.from.x,this.controlNodes.from.y=this.controlNodes.positions.from.y,this.controlNodes.to.x=this.controlNodes.positions.to.x,this.controlNodes.to.y=this.controlNodes.positions.to.y),this.controlNodes.from.draw(t),this.controlNodes.to.draw(t)}else this.controlNodes={from:null,to:null,positions:{}}},s.prototype._enableControlNodes=function(){this.controlNodesEnabled=!0},s.prototype._disableControlNodes=function(){this.controlNodesEnabled=!1},s.prototype._getSelectedControlNode=function(t,e){var i=this.controlNodes.positions,s=Math.sqrt(Math.pow(t-i.from.x,2)+Math.pow(e-i.from.y,2)),o=Math.sqrt(Math.pow(t-i.to.x,2)+Math.pow(e-i.to.y,2));return 15>s?(this.connectedNode=this.from,this.from=this.controlNodes.from,this.controlNodes.from):15>o?(this.connectedNode=this.to,this.to=this.controlNodes.to,this.controlNodes.to):null},s.prototype._restoreControlNodes=function(){1==this.controlNodes.from.selected&&(this.from=this.connectedNode,this.connectedNode=null,this.controlNodes.from.unselect()),1==this.controlNodes.to.selected&&(this.to=this.connectedNode,this.connectedNode=null,this.controlNodes.to.unselect())},s.prototype.getControlNodePositions=function(t){var e,i=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),s=this.to.x-this.from.x,o=this.to.y-this.from.y,n=Math.sqrt(s*s+o*o),r=this.from.distanceToBorder(t,i+Math.PI),a=(n-r)/n,h=a*this.from.x+(1-a)*this.to.x,d=a*this.from.y+(1-a)*this.to.y;1==this.smoothCurves.dynamic&&1==this.smoothCurves.enabled?e=this.via:1==this.smoothCurves.enabled&&(e=this._getViaCoordinates()),1==this.smoothCurves.enabled&&null!=e.x&&(i=Math.atan2(this.to.y-e.y,this.to.x-e.x),s=this.to.x-e.x,o=this.to.y-e.y,n=Math.sqrt(s*s+o*o));var l,c,p=this.to.distanceToBorder(t,i),u=(n-p)/n;return 1==this.smoothCurves.enabled&&null!=e.x?(l=(1-u)*e.x+u*this.to.x,c=(1-u)*e.y+u*this.to.y):(l=(1-u)*this.from.x+u*this.to.x,c=(1-u)*this.from.y+u*this.to.y),{from:{x:h,y:d},to:{x:l,y:c}}},t.exports=s},function(t,e,i){function s(){this.clear(),this.defaultIndex=0}var o=i(1);s.DEFAULT=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}}],s.prototype.clear=function(){this.groups={},this.groups.length=function(){var t=0;for(var e in this)this.hasOwnProperty(e)&&t++;return t}},s.prototype.get=function(t){var e=this.groups[t];if(void 0==e){var i=this.defaultIndex%s.DEFAULT.length;this.defaultIndex++,e={},e.color=s.DEFAULT[i],this.groups[t]=e}return e},s.prototype.add=function(t,e){return this.groups[t]=e,e.color&&(e.color=o.parseColor(e.color)),e},t.exports=s},function(t){function e(){this.images={},this.callback=void 0}e.prototype.setOnloadCallback=function(t){this.callback=t},e.prototype.load=function(t){var e=this.images[t];if(void 0==e){var i=this;e=new Image,this.images[t]=e,e.onload=function(){i.callback&&i.callback(this)},e.src=t}return e},t.exports=e},function(t,e,i){function s(t,e,i,s){this.selected=!1,this.hover=!1,this.edges=[],this.dynamicEdges=[],this.reroutedEdges={},this.group=s.nodes.group,this.fontSize=Number(s.nodes.fontSize),this.fontFace=s.nodes.fontFace,this.fontColor=s.nodes.fontColor,this.fontDrawThreshold=3,this.color=s.nodes.color,this.id=void 0,this.shape=s.nodes.shape,this.image=s.nodes.image,this.x=null,this.y=null,this.xFixed=!1,this.yFixed=!1,this.horizontalAlignLeft=!0,this.verticalAlignTop=!0,this.radius=s.nodes.radius,this.baseRadiusValue=s.nodes.radius,this.radiusFixed=!1,this.radiusMin=s.nodes.radiusMin,this.radiusMax=s.nodes.radiusMax,this.level=-1,this.preassignedLevel=!1,this.borderWidth=s.nodes.borderWidth,this.borderWidthSelected=s.nodes.borderWidthSelected,this.imagelist=e,this.grouplist=i,this.fx=0,this.fy=0,this.vx=0,this.vy=0,this.minForce=s.minForce,this.damping=s.physics.damping,this.mass=1,this.fixedData={x:null,y:null},this.setProperties(t,s),this.resetCluster(),this.dynamicEdgesLength=0,this.clusterSession=0,this.clusterSizeWidthFactor=s.clustering.nodeScaling.width,this.clusterSizeHeightFactor=s.clustering.nodeScaling.height,this.clusterSizeRadiusFactor=s.clustering.nodeScaling.radius,this.maxNodeSizeIncrements=s.clustering.maxNodeSizeIncrements,this.growthIndicator=0,this.networkScaleInv=1,this.networkScale=1,this.canvasTopLeft={x:-300,y:-300},this.canvasBottomRight={x:300,y:300},this.parentEdgeId=null}var o=i(1);s.prototype.resetCluster=function(){this.formationScale=void 0,this.clusterSize=1,this.containedNodes={},this.containedEdges={},this.clusterSessions=[]},s.prototype.attachEdge=function(t){-1==this.edges.indexOf(t)&&this.edges.push(t),-1==this.dynamicEdges.indexOf(t)&&this.dynamicEdges.push(t),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.detachEdge=function(t){var e=this.edges.indexOf(t);-1!=e&&(this.edges.splice(e,1),this.dynamicEdges.splice(e,1)),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.setProperties=function(t,e){if(t){if(this.originalLabel=void 0,void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.originalLabel=t.label),void 0!==t.title&&(this.title=t.title),void 0!==t.group&&(this.group=t.group),void 0!==t.x&&(this.x=t.x),void 0!==t.y&&(this.y=t.y),void 0!==t.value&&(this.value=t.value),void 0!==t.level&&(this.level=t.level,this.preassignedLevel=!0),void 0!==t.borderWidth&&(this.borderWidth=t.borderWidth),void 0!==t.borderWidthSelected&&(this.borderWidthSelected=t.borderWidthSelected),void 0!==t.mass&&(this.mass=t.mass),void 0!==t.horizontalAlignLeft&&(this.horizontalAlignLeft=t.horizontalAlignLeft),void 0!==t.verticalAlignTop&&(this.verticalAlignTop=t.verticalAlignTop),void 0!==t.triggerFunction&&(this.triggerFunction=t.triggerFunction),void 0===this.id)throw"Node must have an id";if(void 0!==this.group){var i=this.grouplist.get(this.group);for(var s in i)i.hasOwnProperty(s)&&(this[s]=i[s])}if(void 0!==t.shape&&(this.shape=t.shape),void 0!==t.image&&(this.image=t.image),void 0!==t.radius&&(this.radius=t.radius,this.baseRadiusValue=this.radius),void 0!==t.color&&(this.color=o.parseColor(t.color)),void 0!==t.fontColor&&(this.fontColor=t.fontColor),void 0!==t.fontSize&&(this.fontSize=t.fontSize),void 0!==t.fontFace&&(this.fontFace=t.fontFace),void 0!==this.image&&""!=this.image){if(!this.imagelist)throw"No imagelist provided";this.imageObj=this.imagelist.load(this.image)}switch(this.xFixed=this.xFixed||void 0!==t.x&&!t.allowedToMoveX,this.yFixed=this.yFixed||void 0!==t.y&&!t.allowedToMoveY,this.radiusFixed=this.radiusFixed||void 0!==t.radius,"image"==this.shape&&(this.radiusMin=e.nodes.widthMin,this.radiusMax=e.nodes.widthMax),this.shape){case"database":this.draw=this._drawDatabase,this.resize=this._resizeDatabase;break;case"box":this.draw=this._drawBox,this.resize=this._resizeBox;break;case"circle":this.draw=this._drawCircle,this.resize=this._resizeCircle;break;case"ellipse":this.draw=this._drawEllipse,this.resize=this._resizeEllipse;break;case"image":this.draw=this._drawImage,this.resize=this._resizeImage;break;case"text":this.draw=this._drawText,this.resize=this._resizeText;break;case"dot":this.draw=this._drawDot,this.resize=this._resizeShape;break;case"square":this.draw=this._drawSquare,this.resize=this._resizeShape;break;case"triangle":this.draw=this._drawTriangle,this.resize=this._resizeShape;break;case"triangleDown":this.draw=this._drawTriangleDown,this.resize=this._resizeShape;break;case"star":this.draw=this._drawStar,this.resize=this._resizeShape;break;default:this.draw=this._drawEllipse,this.resize=this._resizeEllipse}this._reset()}},s.prototype.select=function(){this.selected=!0,this._reset()},s.prototype.unselect=function(){this.selected=!1,this._reset()},s.prototype.clearSizeCache=function(){this._reset()},s.prototype._reset=function(){this.width=void 0,this.height=void 0},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.distanceToBorder=function(t,e){var i=1;switch(this.width||this.resize(t),this.shape){case"circle":case"dot":return this.radius+i;case"ellipse":var s=this.width/2,o=this.height/2,n=Math.sin(e)*s,r=Math.cos(e)*o;return s*o/Math.sqrt(n*n+r*r);case"box":case"image":case"text":default:return this.width?Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i:0}},s.prototype._setForce=function(t,e){this.fx=t,this.fy=e},s.prototype._addForce=function(t,e){this.fx+=t,this.fy+=e},s.prototype.discreteStep=function(t){if(!this.xFixed){var e=this.damping*this.vx,i=(this.fx-e)/this.mass;this.vx+=i*t,this.x+=this.vx*t}if(!this.yFixed){var s=this.damping*this.vy,o=(this.fy-s)/this.mass;this.vy+=o*t,this.y+=this.vy*t}},s.prototype.discreteStepLimited=function(t,e){if(this.xFixed)this.fx=0;else{var i=this.damping*this.vx,s=(this.fx-i)/this.mass;this.vx+=s*t,this.vx=Math.abs(this.vx)>e?this.vx>0?e:-e:this.vx,this.x+=this.vx*t}if(this.yFixed)this.fy=0;else{var o=this.damping*this.vy,n=(this.fy-o)/this.mass;this.vy+=n*t,this.vy=Math.abs(this.vy)>e?this.vy>0?e:-e:this.vy,this.y+=this.vy*t}},s.prototype.isFixed=function(){return this.xFixed&&this.yFixed},s.prototype.isMoving=function(t){return Math.abs(this.vx)>t||Math.abs(this.vy)>t},s.prototype.isSelected=function(){return this.selected},s.prototype.getValue=function(){return this.value},s.prototype.getDistance=function(t,e){var i=this.x-t,s=this.y-e;return Math.sqrt(i*i+s*s)},s.prototype.setValueRange=function(t,e){if(!this.radiusFixed&&void 0!==this.value)if(e==t)this.radius=(this.radiusMin+this.radiusMax)/2;else{var i=(this.radiusMax-this.radiusMin)/(e-t);this.radius=(this.value-t)*i+this.radiusMin}this.baseRadiusValue=this.radius},s.prototype.draw=function(){throw"Draw method not initialized for node"},s.prototype.resize=function(){throw"Resize method not initialized for node"},s.prototype.isOverlappingWith=function(t){return this.leftt.left&&this.topt.top},s.prototype._resizeImage=function(){if(!this.width||!this.height){var t,e;if(this.value){this.radius=this.baseRadiusValue;var i=this.imageObj.height/this.imageObj.width;void 0!==i?(t=this.radius||this.imageObj.width,e=this.radius*i||this.imageObj.height):(t=0,e=0)}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.growthIndicator=0,this.width>0&&this.height>0&&(this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t)}},s.prototype._drawImage=function(t){this._resizeImage(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e;if(0!=this.imageObj.width){if(this.clusterSize>1){var i=this.clusterSize>1?10:0;i*=this.networkScaleInv,i=Math.min(.2*this.width,i),t.globalAlpha=.5,t.drawImage(this.imageObj,this.left-i,this.top-i,this.width+2*i,this.height+2*i)}t.globalAlpha=1,t.drawImage(this.imageObj,this.left,this.top,this.width,this.height),e=this.y+this.height/2}else e=this.y;this._label(t,this.label,this.x,e,void 0,"top")},s.prototype._resizeBox=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawBox=function(t){this._resizeBox(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.borderWidth,s=this.borderWidthSelected||2*this.borderWidth;t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.roundRect(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth,this.radius),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.color.background,t.roundRect(this.left,this.top,this.width,this.height,this.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeDatabase=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=i.width+2*e;this.width=s,this.height=s,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-s}},s.prototype._drawDatabase=function(t){this._resizeDatabase(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.borderWidth,s=this.borderWidthSelected||2*this.borderWidth;t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.database(this.x-this.width/2-2*t.lineWidth,this.y-.5*this.height-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t.database(this.x-this.width/2,this.y-.5*this.height,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeCircle=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=Math.max(i.width,i.height)+2*e;this.radius=s/2,this.width=s,this.height=s,this.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.radius-.5*s}},s.prototype._drawCircle=function(t){this._resizeCircle(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.borderWidth,s=this.borderWidthSelected||2*this.borderWidth;t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.circle(this.x,this.y,this.radius+2*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t.circle(this.x,this.y,this.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeEllipse=function(t){if(!this.width){var e=this.getTextSize(t);this.width=1.5*e.width,this.height=2*e.height,this.width1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.ellipse(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t.ellipse(this.left,this.top,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._drawDot=function(t){this._drawShape(t,"circle")},s.prototype._drawTriangle=function(t){this._drawShape(t,"triangle")},s.prototype._drawTriangleDown=function(t){this._drawShape(t,"triangleDown")},s.prototype._drawSquare=function(t){this._drawShape(t,"square")},s.prototype._drawStar=function(t){this._drawShape(t,"star")},s.prototype._resizeShape=function(){if(!this.width){this.radius=this.baseRadiusValue;var t=2*this.radius;this.width=t,this.height=t,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t}},s.prototype._drawShape=function(t,e){this._resizeShape(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var i=2.5,s=this.borderWidth,o=this.borderWidthSelected||2*this.borderWidth,n=2;switch(e){case"dot":n=2;break;case"square":n=2;break;case"triangle":n=3;break;case"triangleDown":n=3;break;case"star":n=4}t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t[e](this.x,this.y,this.radius+n*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t[e](this.x,this.y,this.radius),t.fill(),t.stroke(),this.label&&this._label(t,this.label,this.x,this.y+this.height/2,void 0,"top",!0)},s.prototype._resizeText=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawText=function(t){this._resizeText(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2,this._label(t,this.label,this.x,this.y)},s.prototype._label=function(t,e,i,s,o,n,r){if(e&&this.fontSize*this.networkScale>this.fontDrawThreshold){t.font=(this.selected?"bold ":"")+this.fontSize+"px "+this.fontFace,t.fillStyle=this.fontColor||"black",t.textAlign=o||"center",t.textBaseline=n||"middle";var a=e.split("\n"),h=a.length,d=this.fontSize+4,l=s+(1-h)/2*d;1==r&&(l=s+(1-h)/(2*d));for(var c=0;h>c;c++)t.fillText(a[c],i,l),l+=d}},s.prototype.getTextSize=function(t){if(void 0!==this.label){t.font=(this.selected?"bold ":"")+this.fontSize+"px "+this.fontFace;for(var e=this.label.split("\n"),i=(this.fontSize+4)*e.length,s=0,o=0,n=e.length;n>o;o++)s=Math.max(s,t.measureText(e[o]).width);return{width:s,height:i}}return{width:0,height:0}},s.prototype.inArea=function(){return void 0!==this.width?this.x+this.width*this.networkScaleInv>=this.canvasTopLeft.x&&this.x-this.width*this.networkScaleInv=this.canvasTopLeft.y&&this.y-this.height*this.networkScaleInv=this.canvasTopLeft.x&&this.x=this.canvasTopLeft.y&&this.ys&&(n=s-e-this.padding),no&&(r=o-i-this.padding),ri;i++)if(e.id===r.nodes[i].id){o=r.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=a(o.attr,t.node))),i=n.length-1;i>=0;i--){var h=n[i];h.nodes||(h.nodes=[]),-1==h.nodes.indexOf(o)&&h.nodes.push(o)}e.attr&&(o.attr=a(o.attr,e.attr))}function l(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=a({},t.edge);e.attr=a(i,e.attr)}}function c(t,e,i,s,o){var n={from:e,to:i,type:s};return t.edge&&(n.attr=a({},t.edge)),n.attr=a(n.attr||{},o),n}function p(){for(k=C.NULL,O="";" "==L||" "==L||"\n"==L||"\r"==L;)o();do{var t=!1;if("#"==L){for(var e=T-1;" "==D.charAt(e)||" "==D.charAt(e);)e--;if("\n"==D.charAt(e)||""==D.charAt(e)){for(;""!=L&&"\n"!=L;)o();t=!0}}if("/"==L&&"/"==n()){for(;""!=L&&"\n"!=L;)o();t=!0}if("/"==L&&"*"==n()){for(;""!=L;){if("*"==L&&"/"==n()){o(),o();break}o()}t=!0}for(;" "==L||" "==L||"\n"==L||"\r"==L;)o()}while(t);if(""==L)return void(k=C.DELIMITER);var i=L+n();if(E[i])return k=C.DELIMITER,O=i,o(),void o();if(E[L])return k=C.DELIMITER,O=L,void o();if(r(L)||"-"==L){for(O+=L,o();r(L);)O+=L,o();return"false"==O?O=!1:"true"==O?O=!0:isNaN(Number(O))||(O=Number(O)),void(k=C.IDENTIFIER)}if('"'==L){for(o();""!=L&&('"'!=L||'"'==L&&'"'==n());)O+=L,'"'==L&&o(),o();if('"'!=L)throw x('End of string " expected');return o(),void(k=C.IDENTIFIER)}for(k=C.UNKNOWN;""!=L;)O+=L,o();throw new SyntaxError('Syntax error in part "'+w(O,30)+'"')}function u(){var t={};if(s(),p(),"strict"==O&&(t.strict=!0,p()),("graph"==O||"digraph"==O)&&(t.type=O,p()),k==C.IDENTIFIER&&(t.id=O,p()),"{"!=O)throw x("Angle bracket { expected");if(p(),m(t),"}"!=O)throw x("Angle bracket } expected");if(p(),""!==O)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function m(t){for(;""!==O&&"}"!=O;)f(t),";"==O&&p()}function f(t){var e=g(t);if(e)return void b(t,e);var i=v(t);if(!i){if(k!=C.IDENTIFIER)throw x("Identifier expected");var s=O;if(p(),"="==O){if(p(),k!=C.IDENTIFIER)throw x("Identifier expected");t[s]=O,p()}else y(t,s)}}function g(t){var e=null;if("subgraph"==O&&(e={},e.type="subgraph",p(),k==C.IDENTIFIER&&(e.id=O,p())),"{"==O){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,m(e),"}"!=O)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function v(t){return"node"==O?(p(),t.node=_(),"node"):"edge"==O?(p(),t.edge=_(),"edge"):"graph"==O?(p(),t.graph=_(),"graph"):null}function y(t,e){var i={id:e},s=_();s&&(i.attr=s),d(t,i),b(t,e)}function b(t,e){for(;"->"==O||"--"==O;){var i,s=O;p();var o=g(t);if(o)i=o;else{if(k!=C.IDENTIFIER)throw x("Identifier or subgraph expected");i=O,d(t,{id:i}),p()}var n=_(),r=c(t,e,i,s,n);l(t,r),e=i}}function _(){for(var t=null;"["==O;){for(p(),t={};""!==O&&"]"!=O;){if(k!=C.IDENTIFIER)throw x("Attribute name expected");var e=O;if(p(),"="!=O)throw x("Equal sign = expected");if(p(),k!=C.IDENTIFIER)throw x("Attribute value expected");var i=O;h(t,e,i),p(),","==O&&p()}if("]"!=O)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+w(O,30)+'" (char '+T+")")}function w(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function S(t,e,i){t instanceof Array?t.forEach(function(t){e instanceof Array?e.forEach(function(e){i(t,e)}):i(t,e)}):e instanceof Array?e.forEach(function(e){i(t,e)}):i(t,e)}function M(t){function e(t){var e={from:t.from,to:t.to};return a(e,t.attr),e.style="->"==t.type?"arrow":"line",e}var s=i(t),o={nodes:[],edges:[],options:{}};return s.nodes&&s.nodes.forEach(function(t){var e={id:t.id,label:String(t.label||t.id)};a(e,t.attr),e.image&&(e.shape="image"),o.nodes.push(e)}),s.edges&&s.edges.forEach(function(t){var i,s;i=t.from instanceof Object?t.from.nodes:{id:t.from},s=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges&&t.from.edges.forEach(function(t){var i=e(t);o.edges.push(i)}),S(i,s,function(i,s){var n=c(o,i.id,s.id,t.type,t.attr),r=e(n);o.edges.push(r)}),t.to instanceof Object&&t.to.edges&&t.to.edges.forEach(function(t){var i=e(t);o.edges.push(i)})}),s.attr&&(o.options=s.attr),o}var C={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},E={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},D="",T=0,L="",O="",k=C.NULL,N=/[a-zA-Z_0-9.:#]/;e.parseDOT=i,e.DOTToGraph=M},function(t,e,i){t.exports="undefined"!=typeof window&&window.moment||i(46)},function(t,e,i){t.exports="undefined"!=typeof window?window.Hammer||i(47):function(){throw Error("hammer.js is only available in a browser, not in node.js.")}},function(t,e,i){var s=i(40);e.fakeGesture=function(t,e){var i=null,o=s.event.getTouchList(e,i),n=s.event.collectEventData(this,i,o,e);
-return isNaN(n.center.pageX)&&(n.center.pageX=e.pageX),isNaN(n.center.pageY)&&(n.center.pageY=e.pageY),n}},function(){"undefined"!=typeof CanvasRenderingContext2D&&(CanvasRenderingContext2D.prototype.circle=function(t,e,i){this.beginPath(),this.arc(t,e,i,0,2*Math.PI,!1)},CanvasRenderingContext2D.prototype.square=function(t,e,i){this.beginPath(),this.rect(t-i,e-i,2*i,2*i)},CanvasRenderingContext2D.prototype.triangle=function(t,e,i){this.beginPath();var s=2*i,o=s/2,n=Math.sqrt(3)/6*s,r=Math.sqrt(s*s-o*o);this.moveTo(t,e-(r-n)),this.lineTo(t+o,e+n),this.lineTo(t-o,e+n),this.lineTo(t,e-(r-n)),this.closePath()},CanvasRenderingContext2D.prototype.triangleDown=function(t,e,i){this.beginPath();var s=2*i,o=s/2,n=Math.sqrt(3)/6*s,r=Math.sqrt(s*s-o*o);this.moveTo(t,e+(r-n)),this.lineTo(t+o,e-n),this.lineTo(t-o,e-n),this.lineTo(t,e+(r-n)),this.closePath()},CanvasRenderingContext2D.prototype.star=function(t,e,i){this.beginPath();for(var s=0;10>s;s++){var o=s%2===0?1.3*i:.5*i;this.lineTo(t+o*Math.sin(2*s*Math.PI/10),e-o*Math.cos(2*s*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,s,o){var n=Math.PI/180;0>i-2*o&&(o=i/2),0>s-2*o&&(o=s/2),this.beginPath(),this.moveTo(t+o,e),this.lineTo(t+i-o,e),this.arc(t+i-o,e+o,o,270*n,360*n,!1),this.lineTo(t+i,e+s-o),this.arc(t+i-o,e+s-o,o,0,90*n,!1),this.lineTo(t+o,e+s),this.arc(t+o,e+s-o,o,90*n,180*n,!1),this.lineTo(t,e+o),this.arc(t+o,e+o,o,180*n,270*n,!1)},CanvasRenderingContext2D.prototype.ellipse=function(t,e,i,s){var o=.5522848,n=i/2*o,r=s/2*o,a=t+i,h=e+s,d=t+i/2,l=e+s/2;this.beginPath(),this.moveTo(t,l),this.bezierCurveTo(t,l-r,d-n,e,d,e),this.bezierCurveTo(d+n,e,a,l-r,a,l),this.bezierCurveTo(a,l+r,d+n,h,d,h),this.bezierCurveTo(d-n,h,t,l+r,t,l)},CanvasRenderingContext2D.prototype.database=function(t,e,i,s){var o=1/3,n=i,r=s*o,a=.5522848,h=n/2*a,d=r/2*a,l=t+n,c=e+r,p=t+n/2,u=e+r/2,m=e+(s-r/2),f=e+s;this.beginPath(),this.moveTo(l,u),this.bezierCurveTo(l,u+d,p+h,c,p,c),this.bezierCurveTo(p-h,c,t,u+d,t,u),this.bezierCurveTo(t,u-d,p-h,e,p,e),this.bezierCurveTo(p+h,e,l,u-d,l,u),this.lineTo(l,m),this.bezierCurveTo(l,m+d,p+h,f,p,f),this.bezierCurveTo(p-h,f,t,m+d,t,m),this.lineTo(t,u)},CanvasRenderingContext2D.prototype.arrow=function(t,e,i,s){var o=t-s*Math.cos(i),n=e-s*Math.sin(i),r=t-.9*s*Math.cos(i),a=e-.9*s*Math.sin(i),h=o+s/3*Math.cos(i+.5*Math.PI),d=n+s/3*Math.sin(i+.5*Math.PI),l=o+s/3*Math.cos(i-.5*Math.PI),c=n+s/3*Math.sin(i-.5*Math.PI);this.beginPath(),this.moveTo(t,e),this.lineTo(h,d),this.lineTo(r,a),this.lineTo(l,c),this.closePath()},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,s,o){o||(o=[10,5]),0==p&&(p=.001);var n=o.length;this.moveTo(t,e);for(var r=i-t,a=s-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,c=!0;d>=.1;){var p=o[l++%n];p>d&&(p=d);var u=Math.sqrt(p*p/(1+h*h));0>r&&(u=-u),t+=u,e+=h*u,this[c?"lineTo":"moveTo"](t,e),d-=p,c=!c}})},function(t,e,i){var s=i(54),o=i(48),n=i(49),r=i(50),a=i(51),h=i(52),d=i(53);e._loadMixin=function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e])},e._clearMixin=function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=void 0)},e._loadPhysicsSystem=function(){this._loadMixin(s),this._loadSelectedForceSolver(),1==this.constants.configurePhysics&&this._loadPhysicsConfiguration()},e._loadClusterSystem=function(){this.clusterSession=0,this.hubThreshold=5,this._loadMixin(o)},e._loadSectorSystem=function(){this.sectors={},this.activeSector=["default"],this.sectors.active={},this.sectors.active["default"]={nodes:{},edges:{},nodeIndices:[],formationScale:1,drawingNode:void 0},this.sectors.frozen={},this.sectors.support={nodes:{},edges:{},nodeIndices:[],formationScale:1,drawingNode:void 0},this.nodeIndices=this.sectors.active["default"].nodeIndices,this._loadMixin(n)},e._loadSelectionSystem=function(){this.selectionObj={nodes:{},edges:{}},this._loadMixin(r)},e._loadManipulationSystem=function(){this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,1==this.constants.dataManipulation.enabled?(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="network-manipulationDiv",this.manipulationDiv.id="network-manipulationDiv",this.manipulationDiv.style.display=1==this.editMode?"block":"none",this.containerElement.insertBefore(this.manipulationDiv,this.frame)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="network-manipulation-editMode",this.editModeDiv.id="network-manipulation-editMode",this.editModeDiv.style.display=1==this.editMode?"none":"block",this.containerElement.insertBefore(this.editModeDiv,this.frame)),void 0===this.closeDiv&&(this.closeDiv=document.createElement("div"),this.closeDiv.className="network-manipulation-closeDiv",this.closeDiv.id="network-manipulation-closeDiv",this.closeDiv.style.display=this.manipulationDiv.style.display,this.containerElement.insertBefore(this.closeDiv,this.frame)),this._loadMixin(a),this._createManipulatorBar()):void 0!==this.manipulationDiv&&(this._createManipulatorBar(),this.containerElement.removeChild(this.manipulationDiv),this.containerElement.removeChild(this.editModeDiv),this.containerElement.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._clearMixin(a))},e._loadNavigationControls=function(){this._loadMixin(h),this._cleanNavigation(),1==this.constants.navigation.enabled&&this._loadNavigationElements()},e._loadHierarchySystem=function(){this._loadMixin(d)}},function(t){function e(t){return t?i(t):void 0}function i(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){s.off(t,i),e.apply(this,arguments)}var s=this;return this._callbacks=this._callbacks||{},i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i=this._callbacks[t];if(!i)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var s,o=0;os;++s)i[s].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t){function e(t,e,i){return t.addEventListener?t.addEventListener(e,i,!1):void t.attachEvent("on"+e,i)}function i(t){return"keypress"==t.type?String.fromCharCode(t.which):_[t.which]?_[t.which]:x[t.which]?x[t.which]:String.fromCharCode(t.which).toLowerCase()}function s(t){var e=t.target||t.srcElement,i=e.tagName;return(" "+e.className+" ").indexOf(" mousetrap ")>-1?!1:"INPUT"==i||"SELECT"==i||"TEXTAREA"==i||e.contentEditable&&"true"==e.contentEditable}function o(t,e){return t.sort().join(",")===e.sort().join(",")}function n(t){t=t||{};var e,i=!1;for(e in E)t[e]?i=!0:E[e]=0;i||(T=!1)}function r(t,e,i,s,n){var r,a,h=[];if(!M[t])return[];for("keyup"==i&&c(t)&&(e=[t]),r=0;r95&&112>t||_.hasOwnProperty(t)&&(y[_[t]]=t)}return y}function m(t,e,i){return i||(i=u()[t]?"keydown":"keypress"),"keypress"==i&&e.length&&(i="keydown"),i}function f(t,e,s,o){E[t]=0,o||(o=m(e[0],[]));var r,a=function(){T=o,++E[t],p()},d=function(t){h(s,t),"keyup"!==o&&(D=i(t)),setTimeout(n,10)};for(r=0;r1)return f(t,d,e,i);for(h="+"===t?["+"]:t.split("+"),n=0;n":".","?":"/","|":"\\"},S={option:"alt",command:"meta","return":"enter",escape:"esc"},M={},C={},E={},D=!1,T=!1,L=1;20>L;++L)_[111+L]="f"+L;for(L=0;9>=L;++L)_[L+96]=L;e(document,"keypress",l),e(document,"keydown",l),e(document,"keyup",l);var O={bind:function(t,e,i){return v(t instanceof Array?t:[t],e,i),C[t+":"+i]=e,this},unbind:function(t,e){return C[t+":"+e]&&(delete C[t+":"+e],this.bind(t,function(){},e)),this},trigger:function(t,e){return C[t+":"+e](),this},reset:function(){return M={},C={},this}};t.exports=O},function(t,e,i){var s;(function(t,o){(function(n){function r(t,e,i){switch(arguments.length){case 2:return null!=t?t:e;case 3:return null!=t?t:null!=e?e:i;default:throw new Error("Implement me")}}function a(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function h(t,e){function i(){ve.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}var s=!0;return m(function(){return s&&(i(),s=!1),e.apply(this,arguments)},e)}function d(t,e){return function(i){return v(t.call(this,i),e)}}function l(t,e){return function(i){return this.lang().ordinal(t.call(this,i),e)}}function c(){}function p(t){O(t),m(this,t)}function u(t){var e=S(t),i=e.year||0,s=e.quarter||0,o=e.month||0,n=e.week||0,r=e.day||0,a=e.hour||0,h=e.minute||0,d=e.second||0,l=e.millisecond||0;this._milliseconds=+l+1e3*d+6e4*h+36e5*a,this._days=+r+7*n,this._months=+o+3*s+12*i,this._data={},this._bubble()}function m(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return e.hasOwnProperty("toString")&&(t.toString=e.toString),e.hasOwnProperty("valueOf")&&(t.valueOf=e.valueOf),t}function f(t){var e,i={};for(e in t)t.hasOwnProperty(e)&&ke.hasOwnProperty(e)&&(i[e]=t[e]);return i}function g(t){return 0>t?Math.ceil(t):Math.floor(t)}function v(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&C(t[s])!==C(e[s]))&&r++;return r+n}function w(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=ri[t]||ai[e]||e}return t}function S(t){var e,i,s={};for(i in t)t.hasOwnProperty(i)&&(e=w(i),e&&(s[e]=t[i]));return s}function M(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}ve[t]=function(s,o){var r,a,h=ve.fn._lang[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=ve().utc().set(i,t);return h.call(ve.fn._lang,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function C(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function E(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function D(t,e,i){return re(ve([t,11,31+e-i]),e,i).week}function T(t){return L(t)?366:365}function L(t){return t%4===0&&t%100!==0||t%400===0}function O(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[Me]<0||t._a[Me]>11?Me:t._a[Ce]<1||t._a[Ce]>E(t._a[Se],t._a[Me])?Ce:t._a[Ee]<0||t._a[Ee]>23?Ee:t._a[De]<0||t._a[De]>59?De:t._a[Te]<0||t._a[Te]>59?Te:t._a[Le]<0||t._a[Le]>999?Le:-1,t._pf._overflowDayOfYear&&(Se>e||e>Ce)&&(e=Ce),t._pf.overflow=e)}function k(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length)),t._isValid}function N(t){return t?t.toLowerCase().replace("_","-"):t}function I(t,e){return e._isUTC?ve(t).zone(e._offset||0):ve(t).local()}function A(t,e){return e.abbr=t,Oe[t]||(Oe[t]=new c),Oe[t].set(e),Oe[t]}function z(t){delete Oe[t]}function P(t){var e,s,o,n,r=0,a=function(t){if(!Oe[t]&&Ne)try{i(55)("./"+t)}catch(e){}return Oe[t]};if(!t)return ve.fn._lang;if(!b(t)){if(s=a(t))return s;t=[t]}for(;r0;){if(s=a(n.slice(0,e).join("-")))return s;if(o&&o.length>=e&&x(n,o,!0)>=e-1)break;e--}r++}return ve.fn._lang}function R(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function F(t){var e,i,s=t.match(Pe);for(e=0,i=s.length;i>e;e++)s[e]=pi[s[e]]?pi[s[e]]:R(s[e]);return function(o){var n="";for(e=0;i>e;e++)n+=s[e]instanceof Function?s[e].call(o,t):s[e];return n}}function H(t,e){return t.isValid()?(e=Y(e,t.lang()),hi[e]||(hi[e]=F(e)),hi[e](t)):t.lang().invalidDate()}function Y(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(Re.lastIndex=0;s>=0&&Re.test(t);)t=t.replace(Re,i),Re.lastIndex=0,s-=1;return t}function B(t,e){var i,s=e._strict;switch(t){case"Q":return Ze;case"DDDD":return Ke;case"YYYY":case"GGGG":case"gggg":return s?$e:Ye;case"Y":case"G":case"g":return Qe;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?Je:Be;case"S":if(s)return Ze;case"SS":if(s)return qe;case"SSS":if(s)return Ke;case"DDD":return He;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Ge;case"a":case"A":return P(e._l)._meridiemParse;case"X":return Ue;case"Z":case"ZZ":return je;case"T":return Ve;case"SSSS":return We;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?qe:Fe;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Fe;case"Do":return Xe;default:return i=new RegExp(K(q(t.replace("\\","")),"i"))}}function W(t){t=t||"";var e=t.match(je)||[],i=e[e.length-1]||[],s=(i+"").match(oi)||["-",0,0],o=+(60*s[1])+C(s[2]);return"+"===s[0]?-o:o}function G(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[Me]=3*(C(e)-1));break;case"M":case"MM":null!=e&&(o[Me]=C(e)-1);break;case"MMM":case"MMMM":s=P(i._l).monthsParse(e),null!=s?o[Me]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Ce]=C(e));break;case"Do":null!=e&&(o[Ce]=C(parseInt(e,10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=C(e));break;case"YY":o[Se]=ve.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[Se]=C(e);break;case"a":case"A":i._isPm=P(i._l).isPM(e);break;case"H":case"HH":case"h":case"hh":o[Ee]=C(e);break;case"m":case"mm":o[De]=C(e);break;case"s":case"ss":o[Te]=C(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Le]=C(1e3*("0."+e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=W(e);break;case"dd":case"ddd":case"dddd":s=P(i._l).weekdaysParse(e),null!=s?(i._w=i._w||{},i._w.d=s):i._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(i._w=i._w||{},i._w[t]=C(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=ve.parseTwoDigitYear(e)}}function j(t){var e,i,s,o,n,a,h,d;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(n=1,a=4,i=r(e.GG,t._a[Se],re(ve(),1,4).year),s=r(e.W,1),o=r(e.E,1)):(d=P(t._l),n=d._week.dow,a=d._week.doy,i=r(e.gg,t._a[Se],re(ve(),n,a).year),s=r(e.w,1),null!=e.d?(o=e.d,n>o&&++s):o=null!=e.e?e.e+n:n),h=ae(i,s,o,a,n),t._a[Se]=h.year,t._dayOfYear=h.dayOfYear}function V(t){var e,i,s,o,n=[];if(!t._d){for(s=X(t),t._w&&null==t._a[Ce]&&null==t._a[Me]&&j(t),t._dayOfYear&&(o=r(t._a[Se],s[Se]),t._dayOfYear>T(o)&&(t._pf._overflowDayOfYear=!0),i=ie(o,0,t._dayOfYear),t._a[Me]=i.getUTCMonth(),t._a[Ce]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=n[e]=s[e];for(;7>e;e++)t._a[e]=n[e]=null==t._a[e]?2===e?1:0:t._a[e];t._d=(t._useUTC?ie:ee).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm)}}function U(t){var e;t._d||(e=S(t._i),t._a=[e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond],V(t))}function X(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function Z(t){if(t._f===ve.ISO_8601)return void J(t);t._a=[],t._pf.empty=!0;var e,i,s,o,n,r=P(t._l),a=""+t._i,h=a.length,d=0;for(s=Y(t._f,r).match(Pe)||[],e=0;e0&&t._pf.unusedInput.push(n),a=a.slice(a.indexOf(i)+i.length),d+=i.length),pi[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),G(o,i,t)):t._strict&&!i&&t._pf.unusedTokens.push(o);t._pf.charsLeftOver=h-d,a.length>0&&t._pf.unusedInput.push(a),t._isPm&&t._a[Ee]<12&&(t._a[Ee]+=12),t._isPm===!1&&12===t._a[Ee]&&(t._a[Ee]=0),V(t),O(t)}function q(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function K(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function $(t){var e,i,s,o,n;if(0===t._f.length)return t._pf.invalidFormat=!0,void(t._d=new Date(0/0));for(o=0;on)&&(s=n,i=e));m(t,i||e)}function J(t){var e,i,s=t._i,o=ti.exec(s);if(o){for(t._pf.iso=!0,e=0,i=ii.length;i>e;e++)if(ii[e][1].exec(s)){t._f=ii[e][0]+(o[6]||" ");break}for(e=0,i=si.length;i>e;e++)if(si[e][1].exec(s)){t._f+=si[e][0];break}s.match(je)&&(t._f+="Z"),Z(t)}else t._isValid=!1}function Q(t){J(t),t._isValid===!1&&(delete t._isValid,ve.createFromInputFallback(t))}function te(t){var e=t._i,i=Ie.exec(e);e===n?t._d=new Date:i?t._d=new Date(+i[1]):"string"==typeof e?Q(t):b(e)?(t._a=e.slice(0),V(t)):_(e)?t._d=new Date(+e):"object"==typeof e?U(t):"number"==typeof e?t._d=new Date(e):ve.createFromInputFallback(t)}function ee(t,e,i,s,o,n,r){var a=new Date(t,e,i,s,o,n,r);return 1970>t&&a.setFullYear(t),a}function ie(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function se(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function oe(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function ne(t,e,i){var s=we(Math.abs(t)/1e3),o=we(s/60),n=we(o/60),r=we(n/24),a=we(r/365),h=s0,h[4]=i,oe.apply({},h)}function re(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=ve(t).add("d",n),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function ae(t,e,i,s,o){var n,r,a=ie(t,0,1).getUTCDay();return a=0===a?7:a,i=null!=i?i:o,n=o-a+(a>s?7:0)-(o>a?7:0),r=7*(e-1)+(i-o)+n+1,{year:r>0?t:t-1,dayOfYear:r>0?r:T(t-1)+r}}function he(t){var e=t._i,i=t._f;return null===e||i===n&&""===e?ve.invalid({nullInput:!0}):("string"==typeof e&&(t._i=e=P().preparse(e)),ve.isMoment(e)?(t=f(e),t._d=new Date(+e._d)):i?b(i)?$(t):Z(t):te(t),new p(t))}function de(t,e){var i,s;if(1===e.length&&b(e[0])&&(e=e[0]),!e.length)return ve();for(i=e[0],s=1;s=0?"+":"-";return e+v(Math.abs(t),6)},gg:function(){return v(this.weekYear()%100,2)},gggg:function(){return v(this.weekYear(),4)},ggggg:function(){return v(this.weekYear(),5)},GG:function(){return v(this.isoWeekYear()%100,2)},GGGG:function(){return v(this.isoWeekYear(),4)},GGGGG:function(){return v(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return C(this.milliseconds()/100)},SS:function(){return v(C(this.milliseconds()/10),2)},SSS:function(){return v(this.milliseconds(),3)},SSSS:function(){return v(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+v(C(t/60),2)+":"+v(C(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+v(C(t/60),2)+v(C(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},ui=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];li.length;)be=li.pop(),pi[be+"o"]=l(pi[be],be);for(;ci.length;)be=ci.pop(),pi[be+be]=d(pi[be],2);for(pi.DDDD=d(pi.DDD,3),m(c.prototype,{set:function(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t){var e,i,s;for(this._monthsParse||(this._monthsParse=[]),e=0;12>e;e++)if(this._monthsParse[e]||(i=ve.utc([2e3,e]),s="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[e]=new RegExp(s.replace(".",""),"i")),this._monthsParse[e].test(t))return e},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,i,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(i=ve([2e3,1]).day(e),s="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e){var i=this._calendar[t];return"function"==typeof i?i.apply(e):i},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,i,s){var o=this._relativeTime[i];return"function"==typeof o?o(t,e,i,s):o.replace(/%d/i,t)},pastFuture:function(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",preparse:function(t){return t},postformat:function(t){return t},week:function(t){return re(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),ve=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._i=t,o._f=e,o._l=i,o._strict=s,o._isUTC=!1,o._pf=a(),he(o)},ve.suppressDeprecationWarnings=!1,ve.createFromInputFallback=h("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i)}),ve.min=function(){var t=[].slice.call(arguments,0);return de("isBefore",t)},ve.max=function(){var t=[].slice.call(arguments,0);return de("isAfter",t)},ve.utc=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._useUTC=!0,o._isUTC=!0,o._l=i,o._i=t,o._f=e,o._strict=s,o._pf=a(),he(o).utc()},ve.unix=function(t){return ve(1e3*t)},ve.duration=function(t,e){var i,s,o,n=t,r=null;return ve.isDuration(t)?n={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(n={},e?n[e]=t:n.milliseconds=t):(r=Ae.exec(t))?(i="-"===r[1]?-1:1,n={y:0,d:C(r[Ce])*i,h:C(r[Ee])*i,m:C(r[De])*i,s:C(r[Te])*i,ms:C(r[Le])*i}):(r=ze.exec(t))&&(i="-"===r[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},n={y:o(r[2]),M:o(r[3]),d:o(r[4]),h:o(r[5]),m:o(r[6]),s:o(r[7]),w:o(r[8])}),s=new u(n),ve.isDuration(t)&&t.hasOwnProperty("_lang")&&(s._lang=t._lang),s},ve.version=_e,ve.defaultFormat=ei,ve.ISO_8601=function(){},ve.momentProperties=ke,ve.updateOffset=function(){},ve.relativeTimeThreshold=function(t,e){return di[t]===n?!1:(di[t]=e,!0)},ve.lang=function(t,e){var i;return t?(e?A(N(t),e):null===e?(z(t),t="en"):Oe[t]||P(t),i=ve.duration.fn._lang=ve.fn._lang=P(t),i._abbr):ve.fn._lang._abbr},ve.langData=function(t){return t&&t._lang&&t._lang._abbr&&(t=t._lang._abbr),P(t)},ve.isMoment=function(t){return t instanceof p||null!=t&&t.hasOwnProperty("_isAMomentObject")},ve.isDuration=function(t){return t instanceof u},be=ui.length-1;be>=0;--be)M(ui[be]);ve.normalizeUnits=function(t){return w(t)},ve.invalid=function(t){var e=ve.utc(0/0);return null!=t?m(e._pf,t):e._pf.userInvalidated=!0,e},ve.parseZone=function(){return ve.apply(null,arguments).parseZone()},ve.parseTwoDigitYear=function(t){return C(t)+(C(t)>68?1900:2e3)},m(ve.fn=p.prototype,{clone:function(){return ve(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().lang("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=ve(this).utc();return 00:!1},parsingFlags:function(){return m({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(t){var e=H(this,t||ve.defaultFormat);return this.lang().postformat(e)},add:function(t,e){var i;return i="string"==typeof t&&"string"==typeof e?ve.duration(isNaN(+e)?+t:+e,isNaN(+e)?e:t):"string"==typeof t?ve.duration(+e,t):ve.duration(t,e),y(this,i,1),this},subtract:function(t,e){var i;return i="string"==typeof t&&"string"==typeof e?ve.duration(isNaN(+e)?+t:+e,isNaN(+e)?e:t):"string"==typeof t?ve.duration(+e,t):ve.duration(t,e),y(this,i,-1),this
-},diff:function(t,e,i){var s,o,n=I(t,this),r=6e4*(this.zone()-n.zone());return e=w(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+n.daysInMonth()),o=12*(this.year()-n.year())+(this.month()-n.month()),o+=(this-ve(this).startOf("month")-(n-ve(n).startOf("month")))/s,o-=6e4*(this.zone()-ve(this).startOf("month").zone()-(n.zone()-ve(n).startOf("month").zone()))/s,"year"===e&&(o/=12)):(s=this-n,o="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-r)/864e5:"week"===e?(s-r)/6048e5:s),i?o:g(o)},from:function(t,e){return ve.duration(this.diff(t)).lang(this.lang()._abbr).humanize(!e)},fromNow:function(t){return this.from(ve(),t)},calendar:function(t){var e=t||ve(),i=I(e,this).startOf("day"),s=this.diff(i,"days",!0),o=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse";return this.format(this.lang().calendar(o,this))},isLeapYear:function(){return L(this.year())},isDST:function(){return this.zone()+ve(t).startOf(e)},isBefore:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)<+ve(t).startOf(e)},isSame:function(t,e){return e=e||"ms",+this.clone().startOf(e)===+I(t,this).startOf(e)},min:h("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(t){return t=ve.apply(null,arguments),this>t?this:t}),max:h("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=ve.apply(null,arguments),t>this?this:t}),zone:function(t,e){var i=this._offset||0;return null==t?this._isUTC?i:this._d.getTimezoneOffset():("string"==typeof t&&(t=W(t)),Math.abs(t)<16&&(t=60*t),this._offset=t,this._isUTC=!0,i!==t&&(!e||this._changeInProgress?y(this,ve.duration(i-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,ve.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(t){return t=t?ve(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return E(this.year(),this.month())},dayOfYear:function(t){var e=we((ve(this).startOf("day")-ve(this).startOf("year"))/864e5)+1;return null==t?e:this.add("d",t-e)},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=re(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==t?e:this.add("y",t-e)},isoWeekYear:function(t){var e=re(this,1,4).year;return null==t?e:this.add("y",t-e)},week:function(t){var e=this.lang().week(this);return null==t?e:this.add("d",7*(t-e))},isoWeek:function(t){var e=re(this,1,4).week;return null==t?e:this.add("d",7*(t-e))},weekday:function(t){var e=(this.day()+7-this.lang()._week.dow)%7;return null==t?e:this.add("d",t-e)},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return D(this.year(),1,4)},weeksInYear:function(){var t=this._lang._week;return D(this.year(),t.dow,t.doy)},get:function(t){return t=w(t),this[t]()},set:function(t,e){return t=w(t),"function"==typeof this[t]&&this[t](e),this},lang:function(t){return t===n?this._lang:(this._lang=P(t),this)}}),ve.fn.millisecond=ve.fn.milliseconds=ue("Milliseconds",!1),ve.fn.second=ve.fn.seconds=ue("Seconds",!1),ve.fn.minute=ve.fn.minutes=ue("Minutes",!1),ve.fn.hour=ve.fn.hours=ue("Hours",!0),ve.fn.date=ue("Date",!0),ve.fn.dates=h("dates accessor is deprecated. Use date instead.",ue("Date",!0)),ve.fn.year=ue("FullYear",!0),ve.fn.years=h("years accessor is deprecated. Use year instead.",ue("FullYear",!0)),ve.fn.days=ve.fn.day,ve.fn.months=ve.fn.month,ve.fn.weeks=ve.fn.week,ve.fn.isoWeeks=ve.fn.isoWeek,ve.fn.quarters=ve.fn.quarter,ve.fn.toJSON=ve.fn.toISOString,m(ve.duration.fn=u.prototype,{_bubble:function(){var t,e,i,s,o=this._milliseconds,n=this._days,r=this._months,a=this._data;a.milliseconds=o%1e3,t=g(o/1e3),a.seconds=t%60,e=g(t/60),a.minutes=e%60,i=g(e/60),a.hours=i%24,n+=g(i/24),a.days=n%30,r+=g(n/30),a.months=r%12,s=g(r/12),a.years=s},weeks:function(){return g(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*C(this._months/12)},humanize:function(t){var e=+this,i=ne(e,!t,this.lang());return t&&(i=this.lang().pastFuture(e,i)),this.lang().postformat(i)},add:function(t,e){var i=ve.duration(t,e);return this._milliseconds+=i._milliseconds,this._days+=i._days,this._months+=i._months,this._bubble(),this},subtract:function(t,e){var i=ve.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=w(t),this[t.toLowerCase()+"s"]()},as:function(t){return t=w(t),this["as"+t.charAt(0).toUpperCase()+t.slice(1)+"s"]()},lang:ve.fn.lang,toIsoString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),i=Math.abs(this.days()),s=Math.abs(this.hours()),o=Math.abs(this.minutes()),n=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(i?i+"D":"")+(s||o||n?"T":"")+(s?s+"H":"")+(o?o+"M":"")+(n?n+"S":""):"P0D"}});for(be in ni)ni.hasOwnProperty(be)&&(fe(be,ni[be]),me(be.toLowerCase()));fe("Weeks",6048e5),ve.duration.fn.asMonths=function(){return(+this-31536e6*this.years())/2592e6+12*this.years()},ve.lang("en",{ordinal:function(t){var e=t%10,i=1===C(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),Ne?o.exports=ve:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(xe.moment=ye),ve}.call(e,i,e,o),!(s!==n&&(o.exports=s)),ge(!0))}).call(this)}).call(e,function(){return this}(),i(59)(t))},function(t,e,i){var s;!function(o,n){"use strict";function r(){a.READY||(w.determineEventTypes(),x.each(a.gestures,function(t){M.register(t)}),w.onTouch(a.DOCUMENT,v,M.detect),w.onTouch(a.DOCUMENT,y,M.detect),a.READY=!0)}var a=function C(t,e){return new C.Instance(t,e||{})};a.VERSION="1.1.3",a.defaults={behavior:{userSelect:"none",touchAction:"pan-y",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},a.DOCUMENT=document,a.HAS_POINTEREVENTS=navigator.pointerEnabled||navigator.msPointerEnabled,a.HAS_TOUCHEVENTS="ontouchstart"in o,a.IS_MOBILE=/mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent),a.NO_MOUSEEVENTS=a.HAS_TOUCHEVENTS&&a.IS_MOBILE||a.HAS_POINTEREVENTS,a.CALCULATE_INTERVAL=25;var h={},d=a.DIRECTION_DOWN="down",l=a.DIRECTION_LEFT="left",c=a.DIRECTION_UP="up",p=a.DIRECTION_RIGHT="right",u=a.POINTER_MOUSE="mouse",m=a.POINTER_TOUCH="touch",f=a.POINTER_PEN="pen",g=a.EVENT_START="start",v=a.EVENT_MOVE="move",y=a.EVENT_END="end",b=a.EVENT_RELEASE="release",_=a.EVENT_TOUCH="touch";a.READY=!1,a.plugins=a.plugins||{},a.gestures=a.gestures||{};var x=a.utils={extend:function(t,e,i){for(var s in e)!e.hasOwnProperty(s)||t[s]!==n&&i||(t[s]=e[s]);return t},on:function(t,e,i){t.addEventListener(e,i,!1)},off:function(t,e,i){t.removeEventListener(e,i,!1)},each:function(t,e,i){var s,o;if("forEach"in t)t.forEach(e,i);else if(t.length!==n){for(s=0,o=t.length;o>s;s++)if(e.call(i,t[s],s,t)===!1)return}else for(s in t)if(t.hasOwnProperty(s)&&e.call(i,t[s],s,t)===!1)return},inStr:function(t,e){return t.indexOf(e)>-1},inArray:function(t,e){if(t.indexOf){var i=t.indexOf(e);return-1===i?!1:i}for(var s=0,o=t.length;o>s;s++)if(t[s]===e)return s;return!1},toArray:function(t){return Array.prototype.slice.call(t,0)},hasParent:function(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1},getCenter:function(t){var e=[],i=[],s=[],o=[],n=Math.min,r=Math.max;return 1===t.length?{pageX:t[0].pageX,pageY:t[0].pageY,clientX:t[0].clientX,clientY:t[0].clientY}:(x.each(t,function(t){e.push(t.pageX),i.push(t.pageY),s.push(t.clientX),o.push(t.clientY)}),{pageX:(n.apply(Math,e)+r.apply(Math,e))/2,pageY:(n.apply(Math,i)+r.apply(Math,i))/2,clientX:(n.apply(Math,s)+r.apply(Math,s))/2,clientY:(n.apply(Math,o)+r.apply(Math,o))/2})},getVelocity:function(t,e,i){return{x:Math.abs(e/t)||0,y:Math.abs(i/t)||0}},getAngle:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return 180*Math.atan2(s,i)/Math.PI},getDirection:function(t,e){var i=Math.abs(t.clientX-e.clientX),s=Math.abs(t.clientY-e.clientY);return i>=s?t.clientX-e.clientX>0?l:p:t.clientY-e.clientY>0?c:d},getDistance:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return Math.sqrt(i*i+s*s)},getScale:function(t,e){return t.length>=2&&e.length>=2?this.getDistance(e[0],e[1])/this.getDistance(t[0],t[1]):1},getRotation:function(t,e){return t.length>=2&&e.length>=2?this.getAngle(e[1],e[0])-this.getAngle(t[1],t[0]):0},isVertical:function(t){return t==c||t==d},setPrefixedCss:function(t,e,i,s){var o=["","Webkit","Moz","O","ms"];e=x.toCamelCase(e);for(var n=0;n0&&this.started&&(r=v),this.started=!0;var d=this.collectEventData(i,r,o,t);return e!=y&&s.call(M,d),a&&(d.changedLength=h,d.eventType=a,s.call(M,d),d.eventType=r,delete d.changedLength),r==y&&(s.call(M,d),this.started=!1),r},determineEventTypes:function(){var t;return t=a.HAS_POINTEREVENTS?o.PointerEvent?["pointerdown","pointermove","pointerup pointercancel lostpointercapture"]:["MSPointerDown","MSPointerMove","MSPointerUp MSPointerCancel MSLostPointerCapture"]:a.NO_MOUSEEVENTS?["touchstart","touchmove","touchend touchcancel"]:["touchstart mousedown","touchmove mousemove","touchend touchcancel mouseup"],h[g]=t[0],h[v]=t[1],h[y]=t[2],h},getTouchList:function(t,e){if(a.HAS_POINTEREVENTS)return S.getTouchList();if(t.touches){if(e==v)return t.touches;var i=[],s=[].concat(x.toArray(t.touches),x.toArray(t.changedTouches)),o=[];return x.each(s,function(t){x.inArray(i,t.identifier)===!1&&o.push(t),i.push(t.identifier)}),o}return t.identifier=1,[t]},collectEventData:function(t,e,i,s){var o=m;return x.inStr(s.type,"mouse")||S.matchType(u,s)?o=u:S.matchType(f,s)&&(o=f),{center:x.getCenter(i),timeStamp:Date.now(),target:s.target,touches:i,eventType:e,pointerType:o,srcEvent:s,preventDefault:function(){var t=this.srcEvent;t.preventManipulation&&t.preventManipulation(),t.preventDefault&&t.preventDefault()},stopPropagation:function(){this.srcEvent.stopPropagation()},stopDetect:function(){return M.stopDetect()}}}},S=a.PointerEvent={pointers:{},getTouchList:function(){var t=[];return x.each(this.pointers,function(e){t.push(e)}),t},updatePointer:function(t,e){t==y||t!=y&&1!==e.buttons?delete this.pointers[e.pointerId]:(e.identifier=e.pointerId,this.pointers[e.pointerId]=e)},matchType:function(t,e){if(!e.pointerType)return!1;var i=e.pointerType,s={};return s[u]=i===(e.MSPOINTER_TYPE_MOUSE||u),s[m]=i===(e.MSPOINTER_TYPE_TOUCH||m),s[f]=i===(e.MSPOINTER_TYPE_PEN||f),s[t]},reset:function(){this.pointers={}}},M=a.detection={gestures:[],current:null,previous:null,stopped:!1,startDetect:function(t,e){this.current||(this.stopped=!1,this.current={inst:t,startEvent:x.extend({},e),lastEvent:!1,lastCalcEvent:!1,futureCalcEvent:!1,lastCalcData:{},name:""},this.detect(e))},detect:function(t){if(this.current&&!this.stopped){t=this.extendEventData(t);var e=this.current.inst,i=e.options;return x.each(this.gestures,function(s){!this.stopped&&e.enabled&&i[s.name]&&s.handler.call(s,t,e)},this),this.current&&(this.current.lastEvent=t),t.eventType==y&&this.stopDetect(),t}},stopDetect:function(){this.previous=x.extend({},this.current),this.current=null,this.stopped=!0},getCalculatedData:function(t,e,i,s,o){var n=this.current,r=!1,h=n.lastCalcEvent,d=n.lastCalcData;h&&t.timeStamp-h.timeStamp>a.CALCULATE_INTERVAL&&(e=h.center,i=t.timeStamp-h.timeStamp,s=t.center.clientX-h.center.clientX,o=t.center.clientY-h.center.clientY,r=!0),(t.eventType==_||t.eventType==b)&&(n.futureCalcEvent=t),(!n.lastCalcEvent||r)&&(d.velocity=x.getVelocity(i,s,o),d.angle=x.getAngle(e,t.center),d.direction=x.getDirection(e,t.center),n.lastCalcEvent=n.futureCalcEvent||t,n.futureCalcEvent=t),t.velocityX=d.velocity.x,t.velocityY=d.velocity.y,t.interimAngle=d.angle,t.interimDirection=d.direction},extendEventData:function(t){var e=this.current,i=e.startEvent,s=e.lastEvent||i;(t.eventType==_||t.eventType==b)&&(i.touches=[],x.each(t.touches,function(t){i.touches.push({clientX:t.clientX,clientY:t.clientY})}));var o=t.timeStamp-i.timeStamp,n=t.center.clientX-i.center.clientX,r=t.center.clientY-i.center.clientY;return this.getCalculatedData(t,s.center,o,n,r),x.extend(t,{startEvent:i,deltaTime:o,deltaX:n,deltaY:r,distance:x.getDistance(i.center,t.center),angle:x.getAngle(i.center,t.center),direction:x.getDirection(i.center,t.center),scale:x.getScale(i.touches,t.touches),rotation:x.getRotation(i.touches,t.touches)}),t},register:function(t){var e=t.defaults||{};return e[t.name]===n&&(e[t.name]=!0),x.extend(a.defaults,e,!0),t.index=t.index||1e3,this.gestures.push(t),this.gestures.sort(function(t,e){return t.indexe.index?1:0}),this.gestures}};a.Instance=function(t,e){var i=this;r(),this.element=t,this.enabled=!0,x.each(e,function(t,i){delete e[i],e[x.toCamelCase(i)]=t}),this.options=x.extend(x.extend({},a.defaults),e||{}),this.options.behavior&&x.toggleBehavior(this.element,this.options.behavior,!0),this.eventStartHandler=w.onTouch(t,g,function(t){i.enabled&&t.eventType==g?M.startDetect(i,t):t.eventType==_&&M.detect(t)}),this.eventHandlers=[]},a.Instance.prototype={on:function(t,e){var i=this;return w.on(i.element,t,e,function(t){i.eventHandlers.push({gesture:t,handler:e})}),i},off:function(t,e){var i=this;return w.off(i.element,t,e,function(t){var s=x.inArray({gesture:t,handler:e});s!==!1&&i.eventHandlers.splice(s,1)}),i},trigger:function(t,e){e||(e={});var i=a.DOCUMENT.createEvent("Event");i.initEvent(t,!0,!0),i.gesture=e;var s=this.element;return x.hasParent(e.target,s)&&(s=e.target),s.dispatchEvent(i),this},enable:function(t){return this.enabled=t,this},dispose:function(){var t,e;for(x.toggleBehavior(this.element,this.options.behavior,!1),t=-1;e=this.eventHandlers[++t];)x.off(this.element,e.gesture,e.handler);return this.eventHandlers=[],w.off(this.element,h[g],this.eventStartHandler),null}},function(t){function e(e,s){var o=M.current;if(!(s.options.dragMaxTouches>0&&e.touches.length>s.options.dragMaxTouches))switch(e.eventType){case g:i=!1;break;case v:if(e.distance0)){var r=Math.abs(s.options.dragMinDistance/e.distance);n.pageX+=e.deltaX*r,n.pageY+=e.deltaY*r,n.clientX+=e.deltaX*r,n.clientY+=e.deltaY*r,e=M.extendEventData(e)}(o.lastEvent.dragLockToAxis||s.options.dragLockToAxis&&s.options.dragLockMinDistance<=e.distance)&&(e.dragLockToAxis=!0);var a=o.lastEvent.direction;e.dragLockToAxis&&a!==e.direction&&(e.direction=x.isVertical(a)?e.deltaY<0?c:d:e.deltaX<0?l:p),i||(s.trigger(t+"start",e),i=!0),s.trigger(t,e),s.trigger(t+e.direction,e);var h=x.isVertical(e.direction);(s.options.dragBlockVertical&&h||s.options.dragBlockHorizontal&&!h)&&e.preventDefault();break;case b:i&&e.changedLength<=s.options.dragMaxTouches&&(s.trigger(t+"end",e),i=!1);break;case y:i=!1}}var i=!1;a.gestures.Drag={name:t,index:50,handler:e,defaults:{dragMinDistance:10,dragDistanceCorrection:!0,dragMaxTouches:1,dragBlockHorizontal:!1,dragBlockVertical:!1,dragLockToAxis:!1,dragLockMinDistance:25}}}("drag"),a.gestures.Gesture={name:"gesture",index:1337,handler:function(t,e){e.trigger(this.name,t)}},function(t){function e(e,s){var o=s.options,n=M.current;switch(e.eventType){case g:clearTimeout(i),n.name=t,i=setTimeout(function(){n&&n.name==t&&s.trigger(t,e)},o.holdTimeout);break;case v:e.distance>o.holdThreshold&&clearTimeout(i);break;case b:clearTimeout(i)}}var i;a.gestures.Hold={name:t,index:10,defaults:{holdTimeout:500,holdThreshold:2},handler:e}}("hold"),a.gestures.Release={name:"release",index:1/0,handler:function(t,e){t.eventType==b&&e.trigger(this.name,t)}},a.gestures.Swipe={name:"swipe",index:40,defaults:{swipeMinTouches:1,swipeMaxTouches:1,swipeVelocityX:.6,swipeVelocityY:.6},handler:function(t,e){if(t.eventType==b){var i=t.touches.length,s=e.options;if(is.swipeMaxTouches)return;(t.velocityX>s.swipeVelocityX||t.velocityY>s.swipeVelocityY)&&(e.trigger(this.name,t),e.trigger(this.name+t.direction,t))}}},function(t){function e(e,s){var o,n,r=s.options,a=M.current,h=M.previous;switch(e.eventType){case g:i=!1;break;case v:i=i||e.distance>r.tapMaxDistance;break;case y:!x.inStr(e.srcEvent.type,"cancel")&&e.deltaTimes.options.transformMinRotation&&s.trigger("rotate",e),o>s.options.transformMinScale&&(s.trigger("pinch",e),s.trigger("pinch"+(e.scale<1?"in":"out"),e));break;case b:i&&e.changedLength<2&&(s.trigger(t+"end",e),i=!1)}}var i=!1;a.gestures.Transform={name:t,index:45,defaults:{transformMinScale:.01,transformMinRotation:1},handler:e}}("transform"),s=function(){return a}.call(e,i,e,t),!(s!==n&&(t.exports=s))}(window)},function(t,e){e.startWithClustering=function(){this.clusterToFit(this.constants.clustering.initialMaxNodes,!0),this.updateLabels(),this.stabilize&&this._stabilize(),this.start()},e.clusterToFit=function(t,e){for(var i=this.nodeIndices.length,s=50,o=0;i>t&&s>o;)o%3==0?(this.forceAggregateHubs(!0),this.normalizeClusterLevels()):this.increaseClusterLevel(),i=this.nodeIndices.length,o+=1;o>0&&1==e&&this.repositionNodes(),this._updateCalculationNodes()},e.openCluster=function(t){var e=this.moving;if(t.clusterSize>this.constants.clustering.sectorThreshold&&this._nodeInActiveArea(t)&&("default"!=this._sector()||1!=this.nodeIndices.length)){this._addSector(t);for(var i=0;this.nodeIndices.lengthi;)this.decreaseClusterLevel(),i+=1}else this._expandClusterNode(t,!1,!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this._updateCalculationNodes(),this.updateLabels();this.moving!=e&&this.start()},e.updateClustersDefault=function(){1==this.constants.clustering.enabled&&this.updateClusters(0,!1,!1)},e.increaseClusterLevel=function(){this.updateClusters(-1,!1,!0)},e.decreaseClusterLevel=function(){this.updateClusters(1,!1,!0)},e.updateClusters=function(t,e,i,s){var o=this.moving,n=this.nodeIndices.length;this.previousScale>this.scale&&0==t&&this._collapseSector(),this.previousScale>this.scale||-1==t?this._formClusters(i):(this.previousScalethis.scale||-1==t)&&(this._aggregateHubs(i),this._updateNodeIndexList()),(this.previousScale>this.scale||-1==t)&&(this.handleChains(),this._updateNodeIndexList()),this.previousScale=this.scale,this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.lengththis.constants.clustering.chainThreshold&&this._reduceAmountOfChains(1-this.constants.clustering.chainThreshold/t)},e._aggregateHubs=function(t){this._getHubSize(),this._formClustersByHub(t,!1)},e.forceAggregateHubs=function(t){var e=this.moving,i=this.nodeIndices.length;this._aggregateHubs(!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.length!=i&&(this.clusterSession+=1),(0==t||void 0===t)&&this.moving!=e&&this.start()},e._openClustersBySize=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];1==e.inView()&&(e.width*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientWidth||e.height*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientHeight)&&this.openCluster(e)}},e._openClusters=function(t,e){for(var i=0;i1&&(t.clusterSizei)){var r=n.from,a=n.to;n.to.mass>n.from.mass&&(r=n.to,a=n.from),1==a.dynamicEdgesLength?this._addToCluster(r,a,!1):1==r.dynamicEdgesLength&&this._addToCluster(a,r,!1)}}},e._forceClustersByZoom=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];if(1==e.dynamicEdgesLength&&0!=e.dynamicEdges.length){var i=e.dynamicEdges[0],s=i.toId==e.id?this.nodes[i.fromId]:this.nodes[i.toId];e.id!=s.id&&(s.mass>e.mass?this._addToCluster(s,e,!0):this._addToCluster(e,s,!0))}}},e._clusterToSmallestNeighbour=function(t){for(var e=-1,i=null,s=0;so.clusterSessions.length&&(e=o.clusterSessions.length,i=o)}null!=o&&void 0!==this.nodes[o.id]&&this._addToCluster(o,t,!0)},e._formClustersByHub=function(t,e){for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&this._formClusterFromHub(this.nodes[i],t,e)},e._formClusterFromHub=function(t,e,i,s){if(void 0===s&&(s=0),t.dynamicEdgesLength>=this.hubThreshold&&0==i||t.dynamicEdgesLength==this.hubThreshold&&1==i){for(var o,n,r,a=this.constants.clustering.clusterEdgeThreshold/this.scale,h=!1,d=[],l=t.dynamicEdges.length,c=0;l>c;c++)d.push(t.dynamicEdges[c].id);if(0==e)for(h=!1,c=0;l>c;c++){var p=this.edges[d[c]];if(void 0!==p&&p.connected&&p.toId!=p.fromId&&(o=p.to.x-p.from.x,n=p.to.y-p.from.y,r=Math.sqrt(o*o+n*n),a>r)){h=!0;break}}if(!e&&h||e)for(c=0;l>c;c++)if(p=this.edges[d[c]],void 0!==p){var u=this.nodes[p.fromId==t.id?p.toId:p.fromId];u.dynamicEdges.length<=this.hubThreshold+s&&u.id!=t.id&&this._addToCluster(t,u,e)}}},e._addToCluster=function(t,e,i){t.containedNodes[e.id]=e;for(var s=0;s1)for(var s=0;s1&&(e.label="[".concat(String(e.clusterSize),"]"))}for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(e=this.nodes[t],1==e.clusterSize&&(e.label=void 0!==e.originalLabel?e.originalLabel:String(e.id)))},e.normalizeClusterLevels=function(){var t,e=0,i=1e9,s=0;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(s=this.nodes[t].clusterSessions.length,s>e&&(e=s),i>s&&(i=s));if(e-i>this.constants.clustering.clusterLevelDifference){var o=this.nodeIndices.length,n=e-this.constants.clustering.clusterLevelDifference;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodes[t].clusterSessions.lengths&&(s=n.dynamicEdgesLength),t+=n.dynamicEdgesLength,e+=Math.pow(n.dynamicEdgesLength,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r);this.hubThreshold=Math.floor(t+2*a),this.hubThreshold>s&&(this.hubThreshold=s)},e._reduceAmountOfChains=function(t){this.hubThreshold=2;var e=Math.floor(this.nodeIndices.length*t);for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&e>0&&(this._formClusterFromHub(this.nodes[i],!0,!0,1),e-=1)},e._getChainFraction=function(){var t=0,e=0;for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&(2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&(t+=1),e+=1);return t/e}},function(t,e,i){var s=i(1);e._putDataInSector=function(){this.sectors.active[this._sector()].nodes=this.nodes,this.sectors.active[this._sector()].edges=this.edges,this.sectors.active[this._sector()].nodeIndices=this.nodeIndices
-},e._switchToSector=function(t,e){void 0===e||"active"==e?this._switchToActiveSector(t):this._switchToFrozenSector(t)},e._switchToActiveSector=function(t){this.nodeIndices=this.sectors.active[t].nodeIndices,this.nodes=this.sectors.active[t].nodes,this.edges=this.sectors.active[t].edges},e._switchToSupportSector=function(){this.nodeIndices=this.sectors.support.nodeIndices,this.nodes=this.sectors.support.nodes,this.edges=this.sectors.support.edges},e._switchToFrozenSector=function(t){this.nodeIndices=this.sectors.frozen[t].nodeIndices,this.nodes=this.sectors.frozen[t].nodes,this.edges=this.sectors.frozen[t].edges},e._loadLatestSector=function(){this._switchToSector(this._sector())},e._sector=function(){return this.activeSector[this.activeSector.length-1]},e._previousSector=function(){if(this.activeSector.length>1)return this.activeSector[this.activeSector.length-2];throw new TypeError("there are not enough sectors in the this.activeSector array.")},e._setActiveSector=function(t){this.activeSector.push(t)},e._forgetLastSector=function(){this.activeSector.pop()},e._createNewSector=function(t){this.sectors.active[t]={nodes:{},edges:{},nodeIndices:[],formationScale:this.scale,drawingNode:void 0},this.sectors.active[t].drawingNode=new Node({id:t,color:{background:"#eaefef",border:"495c5e"}},{},{},this.constants),this.sectors.active[t].drawingNode.clusterSize=2},e._deleteActiveSector=function(t){delete this.sectors.active[t]},e._deleteFrozenSector=function(t){delete this.sectors.frozen[t]},e._freezeSector=function(t){this.sectors.frozen[t]=this.sectors.active[t],this._deleteActiveSector(t)},e._activateSector=function(t){this.sectors.active[t]=this.sectors.frozen[t],this._deleteFrozenSector(t)},e._mergeThisWithFrozen=function(t){for(var e in this.nodes)this.nodes.hasOwnProperty(e)&&(this.sectors.frozen[t].nodes[e]=this.nodes[e]);for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.sectors.frozen[t].edges[i]=this.edges[i]);for(var s=0;s1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInSupportSector=function(t,e){if(void 0===e)this._switchToSupportSector(),this[t]();else{this._switchToSupportSector();var i=Array.prototype.splice.call(arguments,1);i.length>1?this[t](i[0],i[1]):this[t](e)}this._loadLatestSector()},e._doInAllFrozenSectors=function(t,e){if(void 0===e)for(var i in this.sectors.frozen)this.sectors.frozen.hasOwnProperty(i)&&(this._switchToFrozenSector(i),this[t]());else for(var i in this.sectors.frozen)if(this.sectors.frozen.hasOwnProperty(i)){this._switchToFrozenSector(i);var s=Array.prototype.splice.call(arguments,1);s.length>1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInAllSectors=function(t,e){var i=Array.prototype.splice.call(arguments,1);void 0===e?(this._doInAllActiveSectors(t),this._doInAllFrozenSectors(t)):i.length>1?(this._doInAllActiveSectors(t,i[0],i[1]),this._doInAllFrozenSectors(t,i[0],i[1])):(this._doInAllActiveSectors(t,e),this._doInAllFrozenSectors(t,e))},e._clearNodeIndexList=function(){var t=this._sector();this.sectors.active[t].nodeIndices=[],this.nodeIndices=this.sectors.active[t].nodeIndices},e._drawSectorNodes=function(t,e){var i,s=1e9,o=-1e9,n=1e9,r=-1e9;for(var a in this.sectors[e])if(this.sectors[e].hasOwnProperty(a)&&void 0!==this.sectors[e][a].drawingNode){this._switchToSector(a,e),s=1e9,o=-1e9,n=1e9,r=-1e9;for(var h in this.nodes)this.nodes.hasOwnProperty(h)&&(i=this.nodes[h],i.resize(t),n>i.x-.5*i.width&&(n=i.x-.5*i.width),ri.y-.5*i.height&&(s=i.y-.5*i.height),o0?this.nodes[i[i.length-1]]:null},e._getEdgesOverlappingWith=function(t,e){var i=this.edges;for(var s in i)i.hasOwnProperty(s)&&i[s].isOverlappingWith(t)&&e.push(s)},e._getAllEdgesOverlappingWith=function(t){var e=[];return this._doInAllActiveSectors("_getEdgesOverlappingWith",t,e),e},e._getEdgeAt=function(t){var e=this._pointerToPositionObject(t),i=this._getAllEdgesOverlappingWith(e);return i.length>0?this.edges[i[i.length-1]]:null},e._addToSelection=function(t){t instanceof s?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t},e._addToHover=function(t){t instanceof s?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t},e._removeFromSelection=function(t){t instanceof s?delete this.selectionObj.nodes[t.id]:delete this.selectionObj.edges[t.id]},e._unselectAll=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].unselect();for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&this.selectionObj.edges[i].unselect();this.selectionObj={nodes:{},edges:{}},0==t&&this.emit("select",this.getSelection())},e._unselectClusters=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].clusterSize>1&&(this.selectionObj.nodes[e].unselect(),this._removeFromSelection(this.selectionObj.nodes[e]));0==t&&this.emit("select",this.getSelection())},e._getSelectedNodeCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedNode=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t];return null},e._getSelectedEdge=function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return null},e._getSelectedEdgeCount=function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedObjectCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t},e._selectionIsEmpty=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0},e._clusterInSelection=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1},e._selectConnectedEdges=function(t){for(var e=0;ee;e++){s=t[e];var o=this.nodes[s];if(!o)throw new RangeError('Node with id "'+s+'" not found');this._selectObject(o,!0,!0)}console.log("setSelection is deprecated. Please use selectNodes instead."),this.redraw()},e.selectNodes=function(t,e){var i,s,o;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),i=0,s=t.length;s>i;i++){o=t[i];var n=this.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this._selectObject(n,!0,!0,e)}this.redraw()},e.selectEdges=function(t){var e,i,s;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),e=0,i=t.length;i>e;e++){s=t[e];var o=this.edges[s];if(!o)throw new RangeError('Edge with id "'+s+'" not found');this._selectObject(o,!0,!0,highlightEdges)}this.redraw()},e._updateSelection=function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},function(t,e,i){var s=i(1),o=i(36),n=i(33);e._clearManipulatorBar=function(){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild)},e._restoreOverloadedFunctions=function(){for(var t in this.cachedFunctions)this.cachedFunctions.hasOwnProperty(t)&&(this[t]=this.cachedFunctions[t])},e._toggleEditMode=function(){this.editMode=!this.editMode;var t=document.getElementById("network-manipulationDiv"),e=document.getElementById("network-manipulation-closeDiv"),i=document.getElementById("network-manipulation-editMode");1==this.editMode?(t.style.display="block",e.style.display="block",i.style.display="none",e.onclick=this._toggleEditMode.bind(this)):(t.style.display="none",e.style.display="none",i.style.display="block",e.onclick=null),this._createManipulatorBar()},e._createManipulatorBar=function(){if(this.boundFunction&&this.off("select",this.boundFunction),void 0!==this.edgeBeingEdited&&(this.edgeBeingEdited._disableControlNodes(),this.edgeBeingEdited=void 0,this.selectedControlNode=null,this.controlNodesActive=!1),this._restoreOverloadedFunctions(),this.freezeSimulation=!1,this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,1==this.editMode){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDiv.innerHTML=""+this.constants.labels.add+""+this.constants.labels.link+"",1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDiv.innerHTML+=""+this.constants.labels.editNode+"":1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDiv.innerHTML+=""+this.constants.labels.editEdge+""),0==this._selectionIsEmpty()&&(this.manipulationDiv.innerHTML+=""+this.constants.labels.del+"");var t=document.getElementById("network-manipulate-addNode");t.onclick=this._createAddNodeToolbar.bind(this);var e=document.getElementById("network-manipulate-connectNode");if(e.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit){var i=document.getElementById("network-manipulate-editNode");i.onclick=this._editNode.bind(this)}else if(1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()){var i=document.getElementById("network-manipulate-editEdge");i.onclick=this._createEditEdgeToolbar.bind(this)}if(0==this._selectionIsEmpty()){var s=document.getElementById("network-manipulate-delete");s.onclick=this._deleteSelected.bind(this)}var o=document.getElementById("network-manipulation-closeDiv");o.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{this.editModeDiv.innerHTML=""+this.constants.labels.edit+"";var n=document.getElementById("network-manipulate-editModeButton");n.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction),this.manipulationDiv.innerHTML=""+this.constants.labels.back+" "+this.constants.labels.addDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._addNode.bind(this),this.on("select",this.boundFunction)},e._createAddEdgeToolbar=function(){this._clearManipulatorBar(),this._unselectAll(!0),this.freezeSimulation=!0,this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDiv.innerHTML=""+this.constants.labels.back+" "+this.constants.labels.linkDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._handleConnect.bind(this),this.on("select",this.boundFunction),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._handleOnRelease=this._handleOnRelease,this._handleTouch=this._handleConnect,this._handleOnRelease=this._finishConnect,this._redraw()},e._createEditEdgeToolbar=function(){this._clearManipulatorBar(),this.controlNodesActive=!0,this.boundFunction&&this.off("select",this.boundFunction),this.edgeBeingEdited=this._getSelectedEdge(),this.edgeBeingEdited._enableControlNodes(),this.manipulationDiv.innerHTML=""+this.constants.labels.back+" "+this.constants.labels.editEdgeDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._handleOnRelease=this._handleOnRelease,this.cachedFunctions._handleTap=this._handleTap,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleTouch=this._selectControlNode,this._handleTap=function(){},this._handleOnDrag=this._controlNodeDrag,this._handleDragStart=function(){},this._handleOnRelease=this._releaseControlNode,this._redraw()},e._selectControlNode=function(t){this.edgeBeingEdited.controlNodes.from.unselect(),this.edgeBeingEdited.controlNodes.to.unselect(),this.selectedControlNode=this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(t.x),this._YconvertDOMtoCanvas(t.y)),null!==this.selectedControlNode&&(this.selectedControlNode.select(),this.freezeSimulation=!0),this._redraw()},e._controlNodeDrag=function(t){var e=this._getPointer(t.gesture.center);null!==this.selectedControlNode&&void 0!==this.selectedControlNode&&(this.selectedControlNode.x=this._XconvertDOMtoCanvas(e.x),this.selectedControlNode.y=this._YconvertDOMtoCanvas(e.y)),this._redraw()},e._releaseControlNode=function(t){var e=this._getNodeAt(t);null!=e?(1==this.edgeBeingEdited.controlNodes.from.selected&&(this._editEdge(e.id,this.edgeBeingEdited.to.id),this.edgeBeingEdited.controlNodes.from.unselect()),1==this.edgeBeingEdited.controlNodes.to.selected&&(this._editEdge(this.edgeBeingEdited.from.id,e.id),this.edgeBeingEdited.controlNodes.to.unselect())):this.edgeBeingEdited._restoreControlNodes(),this.freezeSimulation=!1,this._redraw()},e._handleConnect=function(t){if(0==this._getSelectedNodeCount()){var e=this._getNodeAt(t);null!=e&&(e.clusterSize>1?alert("Cannot create edges to a cluster."):(this._selectObject(e,!1),this.sectors.support.nodes.targetNode=new o({id:"targetNode"},{},{},this.constants),this.sectors.support.nodes.targetNode.x=e.x,this.sectors.support.nodes.targetNode.y=e.y,this.sectors.support.nodes.targetViaNode=new o({id:"targetViaNode"},{},{},this.constants),this.sectors.support.nodes.targetViaNode.x=e.x,this.sectors.support.nodes.targetViaNode.y=e.y,this.sectors.support.nodes.targetViaNode.parentEdgeId="connectionEdge",this.edges.connectionEdge=new n({id:"connectionEdge",from:e.id,to:this.sectors.support.nodes.targetNode.id},this,this.constants),this.edges.connectionEdge.from=e,this.edges.connectionEdge.connected=!0,this.edges.connectionEdge.smooth=!0,this.edges.connectionEdge.selected=!0,this.edges.connectionEdge.to=this.sectors.support.nodes.targetNode,this.edges.connectionEdge.via=this.sectors.support.nodes.targetViaNode,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center);this.sectors.support.nodes.targetNode.x=this._XconvertDOMtoCanvas(e.x),this.sectors.support.nodes.targetNode.y=this._YconvertDOMtoCanvas(e.y),this.sectors.support.nodes.targetViaNode.x=.5*(this._XconvertDOMtoCanvas(e.x)+this.edges.connectionEdge.from.x),this.sectors.support.nodes.targetViaNode.y=this._YconvertDOMtoCanvas(e.y)},this.moving=!0,this.start()))}},e._finishConnect=function(t){if(1==this._getSelectedNodeCount()){this._handleOnDrag=this.cachedFunctions._handleOnDrag,delete this.cachedFunctions._handleOnDrag;var e=this.edges.connectionEdge.fromId;delete this.edges.connectionEdge,delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode;var i=this._getNodeAt(t);null!=i&&(i.clusterSize>1?alert("Cannot create edges to a cluster."):(this._createEdge(e,i.id),this._createManipulatorBar())),this._unselectAll()}},e._addNode=function(){if(this._selectionIsEmpty()&&1==this.editMode){var t=this._pointerToPositionObject(this.pointerPosition),e={id:s.randomUUID(),x:t.left,y:t.top,label:"new",allowedToMoveX:!0,allowedToMoveY:!0};if(this.triggerFunctions.add)if(2==this.triggerFunctions.add.length){var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else alert(this.constants.labels.addError),this._createManipulatorBar(),this.moving=!0,this.start();else this.nodesData.add(e),this._createManipulatorBar(),this.moving=!0,this.start()}},e._createEdge=function(t,e){if(1==this.editMode){var i={from:t,to:e};if(this.triggerFunctions.connect)if(2==this.triggerFunctions.connect.length){var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.start()})}else alert(this.constants.labels.linkError),this.moving=!0,this.start();else this.edgesData.add(i),this.moving=!0,this.start()}},e._editEdge=function(t,e){if(1==this.editMode){var i={id:this.edgeBeingEdited.id,from:t,to:e};if(this.triggerFunctions.editEdge)if(2==this.triggerFunctions.editEdge.length){var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else alert(this.constants.labels.linkError),this.moving=!0,this.start();else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(this.triggerFunctions.edit&&1==this.editMode){var t=this._getSelectedNode(),e={id:t.id,label:t.label,group:t.group,shape:t.shape,color:{background:t.color.background,border:t.color.border,highlight:{background:t.color.highlight.background,border:t.color.highlight.border}}};if(2==this.triggerFunctions.edit.length){var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else alert(this.constants.labels.editError)}else alert(this.constants.labels.editBoundError)},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.labels.deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};(this.triggerFunctions.del.length=2)?this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()}):alert(this.constants.labels.deleteError)}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=i(1);e._cleanNavigation=function(){var t=document.getElementById("network-navigation_wrapper");null!=t&&this.containerElement.removeChild(t),document.onmouseup=null},e._loadNavigationElements=function(){this._cleanNavigation(),this.navigationDivs={};var t=["up","down","left","right","zoomIn","zoomOut","zoomExtends"],e=["_moveUp","_moveDown","_moveLeft","_moveRight","_zoomIn","_zoomOut","zoomExtent"];this.navigationDivs.wrapper=document.createElement("div"),this.navigationDivs.wrapper.id="network-navigation_wrapper",this.navigationDivs.wrapper.style.position="absolute",this.navigationDivs.wrapper.style.width=this.frame.canvas.clientWidth+"px",this.navigationDivs.wrapper.style.height=this.frame.canvas.clientHeight+"px",this.containerElement.insertBefore(this.navigationDivs.wrapper,this.frame);for(var i=0;i0){"RL"==this.constants.hierarchicalLayout.direction||"DU"==this.constants.hierarchicalLayout.direction?this.constants.hierarchicalLayout.levelSeparation*=-1:this.constants.hierarchicalLayout.levelSeparation=Math.abs(this.constants.hierarchicalLayout.levelSeparation),"RL"==this.constants.hierarchicalLayout.direction||"LR"==this.constants.hierarchicalLayout.direction?1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="vertical"):1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="horizontal");var t,e,i=0,s=!1,o=!1;for(e in this.nodes)this.nodes.hasOwnProperty(e)&&(t=this.nodes[e],-1!=t.level?s=!0:o=!0,is&&(n.xFixed=!1,n.x=i[n.level].minPos,r=!0):n.yFixed&&n.level>s&&(n.yFixed=!1,n.y=i[n.level].minPos,r=!0),1==r&&(i[n.level].minPos+=i[n.level].nodeSpacing,n.edges.length>1&&this._placeBranchNodes(n.edges,n.id,i,n.level))}},e._setLevel=function(t,e,i){for(var s=0;st)&&(o.level=t,e.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._restoreNodes=function(){for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.nodes[t].xFixed=!1,this.nodes[t].yFixed=!1)}},function(t,e,i){function s(){this.constants.smoothCurves.enabled=!this.constants.smoothCurves.enabled;var t=document.getElementById("graph_toggleSmooth");t.style.background=1==this.constants.smoothCurves.enabled?"#A4FF56":"#FF8532",this._configureSmoothCurves(!1)}function o(){for(var t in this.calculationNodes)this.calculationNodes.hasOwnProperty(t)&&(this.calculationNodes[t].vx=0,this.calculationNodes[t].vy=0,this.calculationNodes[t].fx=0,this.calculationNodes[t].fy=0);1==this.constants.hierarchicalLayout.enabled?(this._setupHierarchicalLayout(),a.call(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),a.call(this,"graph_H_cg",1,"physics_centralGravity"),a.call(this,"graph_H_sc",1,"physics_springConstant"),a.call(this,"graph_H_sl",1,"physics_springLength"),a.call(this,"graph_H_damp",1,"physics_damping")):this.repositionNodes(),this.moving=!0,this.start()
-}function n(){var t="No options are required, default values used.",e=[],i=document.getElementById("graph_physicsMethod1"),s=document.getElementById("graph_physicsMethod2");if(1==i.checked){if(this.constants.physics.barnesHut.gravitationalConstant!=this.backupConstants.physics.barnesHut.gravitationalConstant&&e.push("gravitationalConstant: "+this.constants.physics.barnesHut.gravitationalConstant),this.constants.physics.centralGravity!=this.backupConstants.physics.barnesHut.centralGravity&&e.push("centralGravity: "+this.constants.physics.centralGravity),this.constants.physics.springLength!=this.backupConstants.physics.barnesHut.springLength&&e.push("springLength: "+this.constants.physics.springLength),this.constants.physics.springConstant!=this.backupConstants.physics.barnesHut.springConstant&&e.push("springConstant: "+this.constants.physics.springConstant),this.constants.physics.damping!=this.backupConstants.physics.barnesHut.damping&&e.push("damping: "+this.constants.physics.damping),0!=e.length){t="var options = {",t+="physics: {barnesHut: {";for(var o=0;othis.constants.clustering.clusterThreshold&&1==this.constants.clustering.enabled&&this.clusterToFit(this.constants.clustering.reduceToNodes,!1),this._calculateForces())},e._calculateForces=function(){this._calculateGravitationalForces(),this._calculateNodeForces(),this.constants.physics.springConstant>0&&(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic?this._calculateSpringForcesWithSupport():1==this.constants.physics.hierarchicalRepulsion.enabled?this._calculateHierarchicalSpringForces():this._calculateSpringForces())},e._updateCalculationNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this.calculationNodes={},this.calculationNodeIndices=[];for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.calculationNodes[t]=this.nodes[t]);var e=this.sectors.support.nodes;for(var i in e)e.hasOwnProperty(i)&&(this.edges.hasOwnProperty(e[i].parentEdgeId)?this.calculationNodes[i]=e[i]:e[i]._setForce(0,0));for(var s in this.calculationNodes)this.calculationNodes.hasOwnProperty(s)&&this.calculationNodeIndices.push(s)}else this.calculationNodes=this.nodes,this.calculationNodeIndices=this.nodeIndices},e._calculateGravitationalForces=function(){var t,e,i,s,o,n=this.calculationNodes,r=this.constants.physics.centralGravity,a=0;for(o=0;o
Simulation Mode:
Barnes Hut
Repulsion
Hierarchical
Barnes Hut
gravitationalConstant
0
-20000
centralGravity
0
3
springLength
0
500
springConstant
0
0.5
damping
0
0.3
Repulsion
nodeDistance
0
300
centralGravity
0
3
springLength
0
500
springConstant
0
0.5
damping
0
0.3
Hierarchical
nodeDistance
0
300
centralGravity
0
3
springLength
0
500
springConstant
0
0.5
damping
0
0.3
direction
1
4
levelSeparation
1
500
nodeSpacing
1
500
Options:
',this.containerElement.parentElement.insertBefore(this.physicsConfiguration,this.containerElement),this.optionsDiv=document.createElement("div"),this.optionsDiv.style.fontSize="14px",this.optionsDiv.style.fontFamily="verdana",this.containerElement.parentElement.insertBefore(this.optionsDiv,this.containerElement);var e;e=document.getElementById("graph_BH_gc"),e.onchange=a.bind(this,"graph_BH_gc",-1,"physics_barnesHut_gravitationalConstant"),e=document.getElementById("graph_BH_cg"),e.onchange=a.bind(this,"graph_BH_cg",1,"physics_centralGravity"),e=document.getElementById("graph_BH_sc"),e.onchange=a.bind(this,"graph_BH_sc",1,"physics_springConstant"),e=document.getElementById("graph_BH_sl"),e.onchange=a.bind(this,"graph_BH_sl",1,"physics_springLength"),e=document.getElementById("graph_BH_damp"),e.onchange=a.bind(this,"graph_BH_damp",1,"physics_damping"),e=document.getElementById("graph_R_nd"),e.onchange=a.bind(this,"graph_R_nd",1,"physics_repulsion_nodeDistance"),e=document.getElementById("graph_R_cg"),e.onchange=a.bind(this,"graph_R_cg",1,"physics_centralGravity"),e=document.getElementById("graph_R_sc"),e.onchange=a.bind(this,"graph_R_sc",1,"physics_springConstant"),e=document.getElementById("graph_R_sl"),e.onchange=a.bind(this,"graph_R_sl",1,"physics_springLength"),e=document.getElementById("graph_R_damp"),e.onchange=a.bind(this,"graph_R_damp",1,"physics_damping"),e=document.getElementById("graph_H_nd"),e.onchange=a.bind(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),e=document.getElementById("graph_H_cg"),e.onchange=a.bind(this,"graph_H_cg",1,"physics_centralGravity"),e=document.getElementById("graph_H_sc"),e.onchange=a.bind(this,"graph_H_sc",1,"physics_springConstant"),e=document.getElementById("graph_H_sl"),e.onchange=a.bind(this,"graph_H_sl",1,"physics_springLength"),e=document.getElementById("graph_H_damp"),e.onchange=a.bind(this,"graph_H_damp",1,"physics_damping"),e=document.getElementById("graph_H_direction"),e.onchange=a.bind(this,"graph_H_direction",t,"hierarchicalLayout_direction"),e=document.getElementById("graph_H_levsep"),e.onchange=a.bind(this,"graph_H_levsep",1,"hierarchicalLayout_levelSeparation"),e=document.getElementById("graph_H_nspac"),e.onchange=a.bind(this,"graph_H_nspac",1,"hierarchicalLayout_nodeSpacing");var i=document.getElementById("graph_physicsMethod1"),d=document.getElementById("graph_physicsMethod2"),l=document.getElementById("graph_physicsMethod3");d.checked=!0,this.constants.physics.barnesHut.enabled&&(i.checked=!0),this.constants.hierarchicalLayout.enabled&&(l.checked=!0);var c=document.getElementById("graph_toggleSmooth"),p=document.getElementById("graph_repositionNodes"),u=document.getElementById("graph_generateOptions");c.onclick=s.bind(this),p.onclick=o.bind(this),u.onclick=n.bind(this),c.style.background=1==this.constants.smoothCurves&&0==this.constants.dynamicSmoothCurves?"#A4FF56":"#FF8532",r.apply(this),i.onchange=r.bind(this),d.onchange=r.bind(this),l.onchange=r.bind(this)}},e._overWriteGraphConstants=function(t,e){var i=t.split("_");1==i.length?this.constants[i[0]]=e:2==i.length?this.constants[i[0]][i[1]]=e:3==i.length&&(this.constants[i[0]][i[1]][i[2]]=e)}},function(t,e,i){function s(t){return i(o(t))}function o(t){return n[t]||function(){throw new Error("Cannot find module '"+t+"'.")}()}var n={};s.keys=function(){return Object.keys(n)},s.resolve=o,t.exports=s},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l,c=this.calculationNodes,p=this.calculationNodeIndices,u=-2/3,m=4/3,f=this.constants.physics.repulsion.nodeDistance,g=f;for(d=0;di&&(r=.5*g>i?1:v*i+m,r*=0==n?1:1+n*this.constants.clustering.forceAmplification,r/=i,s=t*r,o=e*r,a.fx-=s,a.fy-=o,h.fx+=s,h.fy+=o)}}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l=this.calculationNodes,c=this.calculationNodeIndices,p=this.constants.physics.hierarchicalRepulsion.nodeDistance;for(h=0;hi?-Math.pow(u*i,2)+Math.pow(u*p,2):0,0==i?i=.01:n/=i,s=t*n,o=e*n,r.fx-=s,r.fy-=o,a.fx+=s,a.fy+=o}},e._calculateHierarchicalSpringForces=function(){for(var t,e,i,s,o,n,r,a,h,d=this.edges,l=this.calculationNodes,c=this.calculationNodeIndices,p=0;pn;n++)t=e[i[n]],this._getForceContribution(o.root.children.NW,t),this._getForceContribution(o.root.children.NE,t),this._getForceContribution(o.root.children.SW,t),this._getForceContribution(o.root.children.SE,t)}},e._getForceContribution=function(t,e){if(t.childrenCount>0){var i,s,o;if(i=t.centerOfMass.x-e.x,s=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+s*s),o*t.calcSize>this.constants.physics.barnesHut.theta){0==o&&(o=.1*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}else if(4==t.childrenCount)this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e);else if(t.children.data.id!=e.id){0==o&&(o=.5*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}}},e._formBarnesHutTree=function(t,e){for(var i,s=e.length,o=Number.MAX_VALUE,n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=-Number.MAX_VALUE,h=0;s>h;h++){var d=t[e[h]].x,l=t[e[h]].y;o>d&&(o=d),d>r&&(r=d),n>l&&(n=l),l>a&&(a=l)}var c=Math.abs(r-o)-Math.abs(a-n);c>0?(n-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var p=1e-5,u=Math.max(p,Math.abs(r-o)),m=.5*u,f=.5*(o+r),g=.5*(n+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:f-m,maxX:f+m,minY:g-m,maxY:g+m},size:u,calcSize:1/u,children:{data:null},maxWidth:0,level:0,childrenCount:4}};for(this._splitBranch(v.root),h=0;s>h;h++)i=t[e[h]],this._placeInTree(v.root,i);this.barnesHutTree=v},e._updateBranchMass=function(t,e){var i=t.mass+e.mass,s=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.mass,t.centerOfMass.x*=s,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.mass,t.centerOfMass.y*=s,t.mass=i;var o=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NW"):this._placeInRegion(t,e,"SW"):t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NE"):this._placeInRegion(t,e,"SE")},e._placeInRegion=function(t,e,i){switch(t.children[i].childrenCount){case 0:t.children[i].children.data=e,t.children[i].childrenCount=1,this._updateBranchMass(t.children[i],e);break;case 1:t.children[i].children.data.x==e.x&&t.children[i].children.data.y==e.y?(e.x+=Math.random(),e.y+=Math.random()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}},e._splitBranch=function(t){var e=null;1==t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)},e._insertRegion=function(t,e){var i,s,o,n,r=.5*t.size;switch(e){case"NW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:s,minY:o,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}},e._drawTree=function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))},e._drawBranch=function(t,e,i){void 0===i&&(i="#FF0000"),4==t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}}])});
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(s){if(i[s])return i[s].exports;var o=i[s]={exports:{},id:s,loaded:!1};return t[s].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){e.util=i(1),e.DOMutil=i(2),e.DataSet=i(3),e.DataView=i(4),e.Graph3d=i(5),e.graph3d={Camera:i(6),Filter:i(7),Point2d:i(8),Point3d:i(9),Slider:i(10),StepNumber:i(11)},e.Timeline=i(12),e.Graph2d=i(13),e.timeline={DataStep:i(14),Range:i(15),stack:i(16),TimeStep:i(17),components:{items:{Item:i(28),ItemBox:i(29),ItemPoint:i(30),ItemRange:i(31)},Component:i(18),CurrentTime:i(19),CustomTime:i(20),DataAxis:i(21),GraphGroup:i(22),Group:i(23),ItemSet:i(24),Legend:i(25),LineGraph:i(26),TimeAxis:i(27)}},e.Network=i(32),e.network={Edge:i(33),Groups:i(34),Images:i(35),Node:i(36),Popup:i(37),dotparser:i(38),gephiParser:i(39)},e.Graph=function(){throw new Error("Graph is renamed to Network. Please create a graph as new vis.Network(...)")},e.moment=i(40),e.hammer=i(41)},function(module,exports,__webpack_require__){var moment=__webpack_require__(40);exports.isNumber=function(t){return t instanceof Number||"number"==typeof t},exports.isString=function(t){return t instanceof String||"string"==typeof t},exports.isDate=function(t){if(t instanceof Date)return!0;if(exports.isString(t)){var e=ASPDateRegex.exec(t);if(e)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},exports.isDataTable=function(t){return"undefined"!=typeof google&&google.visualization&&google.visualization.DataTable&&t instanceof google.visualization.DataTable},exports.randomUUID=function(){var t=function(){return Math.floor(65536*Math.random()).toString(16)};return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()},exports.extend=function(t){for(var e=1,i=arguments.length;i>e;e++){var s=arguments[e];for(var o in s)s.hasOwnProperty(o)&&(t[o]=s[o])}return t},exports.selectiveExtend=function(t,e){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(var i=2;ii;i++)if(t[i]!=e[i])return!1;return!0},exports.convert=function(t,e){var i;if(void 0===t)return void 0;if(null===t)return null;if(!e)return t;if("string"!=typeof e&&!(e instanceof String))throw new Error("Type must be a string");switch(e){case"boolean":case"Boolean":return Boolean(t);case"number":case"Number":return Number(t.valueOf());case"string":case"String":return String(t);case"Date":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(moment.isMoment(t))return new Date(t.valueOf());if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])):moment(t).toDate();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"Moment":if(exports.isNumber(t))return moment(t);if(t instanceof Date)return moment(t.valueOf());if(moment.isMoment(t))return moment(t);if(exports.isString(t))return i=ASPDateRegex.exec(t),moment(i?Number(i[1]):t);throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"ISODate":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(moment.isMoment(t))return t.toDate().toISOString();if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])).toISOString():new Date(t).toISOString();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ISODate");case"ASPDate":if(exports.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(exports.isString(t)){i=ASPDateRegex.exec(t);var s;return s=i?new Date(Number(i[1])).valueOf():new Date(t).valueOf(),"/Date("+s+")/"}throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+e+'"')}};var ASPDateRegex=/^\/?Date\((\-?\d+)/i;exports.getType=function(t){var e=typeof t;return"object"==e?null==t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":t instanceof Array?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":e},exports.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left+window.pageXOffset},exports.getAbsoluteTop=function(t){return t.getBoundingClientRect().top+window.pageYOffset},exports.addClassName=function(t,e){var i=t.className.split(" ");-1==i.indexOf(e)&&(i.push(e),t.className=i.join(" "))},exports.removeClassName=function(t,e){var i=t.className.split(" "),s=i.indexOf(e);-1!=s&&(i.splice(s,1),t.className=i.join(" "))},exports.forEach=function(t,e){var i,s;if(t instanceof Array)for(i=0,s=t.length;s>i;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},exports.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},exports.updateProperty=function(t,e,i){return t[e]!==i?(t[e]=i,!0):!1},exports.addEventListener=function(t,e,i,s){t.addEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,s)):t.attachEvent("on"+e,i)},exports.removeEventListener=function(t,e,i,s){t.removeEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,s)):t.detachEvent("on"+e,i)},exports.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},exports.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},exports.option={},exports.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},exports.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},exports.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},exports.option.asSize=function(t,e){return"function"==typeof t&&(t=t()),exports.isString(t)?t:exports.isNumber(t)?t+"px":e||null},exports.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},exports.GiveDec=function(Hex){var Value;return Value="A"==Hex?10:"B"==Hex?11:"C"==Hex?12:"D"==Hex?13:"E"==Hex?14:"F"==Hex?15:eval(Hex)},exports.GiveHex=function(t){var e;return e=10==t?"A":11==t?"B":12==t?"C":13==t?"D":14==t?"E":15==t?"F":""+t},exports.parseColor=function(t){var e;if(exports.isString(t)){if(exports.isValidRGB(t)){var i=t.substr(4).substr(0,t.length-5).split(",");t=exports.RGBToHex(i[0],i[1],i[2])}if(exports.isValidHex(t)){var s=exports.hexToHSV(t),o={h:s.h,s:.45*s.s,v:Math.min(1,1.05*s.v)},n={h:s.h,s:Math.min(1,1.25*s.v),v:.6*s.v},r=exports.HSVToHex(n.h,n.h,n.v),a=exports.HSVToHex(o.h,o.s,o.v);e={background:t,border:r,highlight:{background:a,border:r},hover:{background:a,border:r}}}else e={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else e={},e.background=t.background||"white",e.border=t.border||e.background,exports.isString(t.highlight)?e.highlight={border:t.highlight,background:t.highlight}:(e.highlight={},e.highlight.background=t.highlight&&t.highlight.background||e.background,e.highlight.border=t.highlight&&t.highlight.border||e.border),exports.isString(t.hover)?e.hover={border:t.hover,background:t.hover}:(e.hover={},e.hover.background=t.hover&&t.hover.background||e.background,e.hover.border=t.hover&&t.hover.border||e.border);return e},exports.hexToRGB=function(t){t=t.replace("#","").toUpperCase();var e=exports.GiveDec(t.substring(0,1)),i=exports.GiveDec(t.substring(1,2)),s=exports.GiveDec(t.substring(2,3)),o=exports.GiveDec(t.substring(3,4)),n=exports.GiveDec(t.substring(4,5)),r=exports.GiveDec(t.substring(5,6)),a=16*e+i,h=16*s+o,i=16*n+r;return{r:a,g:h,b:i}},exports.RGBToHex=function(t,e,i){var s=exports.GiveHex(Math.floor(t/16)),o=exports.GiveHex(t%16),n=exports.GiveHex(Math.floor(e/16)),r=exports.GiveHex(e%16),a=exports.GiveHex(Math.floor(i/16)),h=exports.GiveHex(i%16),d=s+o+n+r+a+h;return"#"+d},exports.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var s=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));if(s==o)return{h:0,s:0,v:s};var n=t==s?e-i:i==s?t-e:i-t,r=t==s?3:i==s?1:5,a=60*(r-n/(o-s))/360,h=(o-s)/o,d=o;return{h:a,s:h,v:d}},exports.HSVToRGB=function(t,e,i){var s,o,n,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:s=i,o=l,n=h;break;case 1:s=d,o=i,n=h;break;case 2:s=h,o=i,n=l;break;case 3:s=h,o=d,n=i;break;case 4:s=l,o=h,n=i;break;case 5:s=i,o=h,n=d}return{r:Math.floor(255*s),g:Math.floor(255*o),b:Math.floor(255*n)}},exports.HSVToHex=function(t,e,i){var s=exports.HSVToRGB(t,e,i);return exports.RGBToHex(s.r,s.g,s.b)},exports.hexToHSV=function(t){var e=exports.hexToRGB(t);return exports.RGBToHSV(e.r,e.g,e.b)},exports.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},exports.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},exports.selectiveBridgeObject=function(t,e){if("object"==typeof e){for(var i=Object.create(e),s=0;sa;)o=void 0===s?n[u][i]:n[u][i][s],n[u].isVisible(e)?h=!0:(o=r&&console.log("BinarySearch too many iterations. Aborting.")}return u},exports.binarySearchGeneric=function(t,e,i,s){var o,n,r,a,h=1e4,d=0,l=t,c=!1,p=0,u=l.length,m=p,g=u,f=Math.floor(.5*(u+p));if(0==u)f=-1;else if(1==u)r=l[f][i],f=r==e?0:-1;else{for(u-=1;0==c&&h>d;)n=l[Math.max(0,f-1)][i],r=l[f][i],a=l[Math.min(l.length-1,f+1)][i],r==e||e>n&&r>e||e>r&&a>e?(c=!0,r!=e&&("before"==s?e>n&&r>e&&(f=Math.max(0,f-1)):e>r&&a>e&&(f=Math.min(l.length-1,f+1)))):(e>r?m=Math.floor(.5*(u+p)):g=Math.floor(.5*(u+p)),o=Math.floor(.5*(u+p)),p==m&&u==g?(f=-1,c=!0):(u=g,p=m,f=Math.floor(.5*(u+p)))),d++;d>=h&&console.log("BinarySearch too many iterations. Aborting.")}return f}},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(s)):(s=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(s)),e[t].used.push(s),s},e.getDOMElement=function(t,e,i){var s;return e.hasOwnProperty(t)?e[t].redundant.length>0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElement(t),i.appendChild(s)):(s=document.createElement(t),e[t]={used:[],redundant:[]},i.appendChild(s)),e[t].used.push(s),s},e.drawPoint=function(t,i,s,o,n){var r;return"circle"==s.options.drawPoints.style?(r=e.getSVGElement("circle",o,n),r.setAttributeNS(null,"cx",t),r.setAttributeNS(null,"cy",i),r.setAttributeNS(null,"r",.5*s.options.drawPoints.size),r.setAttributeNS(null,"class",s.className+" point")):(r=e.getSVGElement("rect",o,n),r.setAttributeNS(null,"x",t-.5*s.options.drawPoints.size),r.setAttributeNS(null,"y",i-.5*s.options.drawPoints.size),r.setAttributeNS(null,"width",s.options.drawPoints.size),r.setAttributeNS(null,"height",s.options.drawPoints.size),r.setAttributeNS(null,"class",s.className+" point")),r},e.drawBar=function(t,i,s,o,n,r,a){var h=e.getSVGElement("rect",r,a);h.setAttributeNS(null,"x",t-.5*s),h.setAttributeNS(null,"y",i),h.setAttributeNS(null,"width",s),h.setAttributeNS(null,"height",o),h.setAttributeNS(null,"class",n)}},function(t,e,i){function s(t,e){if(!t||Array.isArray(t)||o.isDataTable(t)||(e=t,t=null),this._options=e||{},this._data={},this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i in this._options.type)if(this._options.type.hasOwnProperty(i)){var s=this._options.type[i];this._type[i]="Date"==s||"ISODate"==s||"ASPDate"==s?"Date":s}if(this._options.convert)throw new Error('Option "convert" is deprecated. Use "type" instead.');this._subscribers={},t&&this.add(t)}var o=i(1);s.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},s.prototype.subscribe=s.prototype.on,s.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},s.prototype.unsubscribe=s.prototype.off,s.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var s=[];t in this._subscribers&&(s=s.concat(this._subscribers[t])),"*"in this._subscribers&&(s=s.concat(this._subscribers["*"]));for(var o=0;or;r++)i=n._addItem(t[r]),s.push(i);else if(o.isDataTable(t))for(var h=this._getColumnNames(t),d=0,l=t.getNumberOfRows();l>d;d++){for(var c={},p=0,u=h.length;u>p;p++){var m=h[p];c[m]=t.getValue(d,p)}i=n._addItem(c),s.push(i)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");i=n._addItem(t),s.push(i)}return s.length&&this._trigger("add",{items:s},e),s},s.prototype.update=function(t,e){var i=[],s=[],n=this,r=n._fieldId,a=function(t){var e=t[r];n._data[e]?(e=n._updateItem(t),s.push(e)):(e=n._addItem(t),i.push(e))};if(Array.isArray(t))for(var h=0,d=t.length;d>h;h++)a(t[h]);else if(o.isDataTable(t))for(var l=this._getColumnNames(t),c=0,p=t.getNumberOfRows();p>c;c++){for(var u={},m=0,g=l.length;g>m;m++){var f=l[m];u[f]=t.getValue(c,m)}a(u)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");a(t)}return i.length&&this._trigger("add",{items:i},e),s.length&&this._trigger("update",{items:s},e),i.concat(s)},s.prototype.get=function(){var t,e,i,s,n=this,r=o.getType(arguments[0]);"String"==r||"Number"==r?(t=arguments[0],i=arguments[1],s=arguments[2]):"Array"==r?(e=arguments[0],i=arguments[1],s=arguments[2]):(i=arguments[0],s=arguments[1]);var a;if(i&&i.returnType){var h=["DataTable","Array","Object"];if(a=-1==h.indexOf(i.returnType)?"Array":i.returnType,s&&a!=o.getType(s))throw new Error('Type of parameter "data" ('+o.getType(s)+") does not correspond with specified options.type ("+i.type+")");if("DataTable"==a&&!o.isDataTable(s))throw new Error('Parameter "data" must be a DataTable when options.type is "DataTable"')}else a=s&&"DataTable"==o.getType(s)?"DataTable":"Array";var d,l,c,p,u=i&&i.type||this._options.type,m=i&&i.filter,g=[];if(void 0!=t)d=n._getItem(t,u),m&&!m(d)&&(d=null);else if(void 0!=e)for(c=0,p=e.length;p>c;c++)d=n._getItem(e[c],u),(!m||m(d))&&g.push(d);else for(l in this._data)this._data.hasOwnProperty(l)&&(d=n._getItem(l,u),(!m||m(d))&&g.push(d));if(i&&i.order&&void 0==t&&this._sort(g,i.order),i&&i.fields){var f=i.fields;if(void 0!=t)d=this._filterFields(d,f);else for(c=0,p=g.length;p>c;c++)g[c]=this._filterFields(g[c],f)}if("DataTable"==a){var v=this._getColumnNames(s);if(void 0!=t)n._appendRow(s,v,d);else for(c=0;cc;c++)s.push(g[c]);return s}return g},s.prototype.getIds=function(t){var e,i,s,o,n,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,l=[];if(a)if(h){n=[];for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&n.push(o));for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&l.push(o[this._fieldId]));else if(h){n=[];for(s in r)r.hasOwnProperty(s)&&n.push(r[s]);for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=r[s],l.push(o[this._fieldId]));return l},s.prototype.getDataSet=function(){return this},s.prototype.forEach=function(t,e){var i,s,o=e&&e.filter,n=e&&e.type||this._options.type,r=this._data;if(e&&e.order)for(var a=this.get(e),h=0,d=a.length;d>h;h++)i=a[h],s=i[this._fieldId],t(i,s);else for(s in r)r.hasOwnProperty(s)&&(i=this._getItem(s,n),(!o||o(i))&&t(i,s))},s.prototype.map=function(t,e){var i,s=e&&e.filter,o=e&&e.type||this._options.type,n=[],r=this._data;for(var a in r)r.hasOwnProperty(a)&&(i=this._getItem(a,o),(!s||s(i))&&n.push(t(i,a)));return e&&e.order&&this._sort(n,e.order),n},s.prototype._filterFields=function(t,e){var i={};for(var s in t)t.hasOwnProperty(s)&&-1!=e.indexOf(s)&&(i[s]=t[s]);return i},s.prototype._sort=function(t,e){if(o.isString(e)){var i=e;t.sort(function(t,e){var s=t[i],o=e[i];return s>o?1:o>s?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},s.prototype.remove=function(t,e){var i,s,o,n=[];if(Array.isArray(t))for(i=0,s=t.length;s>i;i++)o=this._remove(t[i]),null!=o&&n.push(o);else o=this._remove(t),null!=o&&n.push(o);return n.length&&this._trigger("remove",{items:n},e),n},s.prototype._remove=function(t){if(o.isNumber(t)||o.isString(t)){if(this._data[t])return delete this._data[t],t}else if(t instanceof Object){var e=t[this._fieldId];if(e&&this._data[e])return delete this._data[e],e}return null},s.prototype.clear=function(t){var e=Object.keys(this._data);return this._data={},this._trigger("remove",{items:e},t),e},s.prototype.max=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||r>s)&&(i=n,s=r)}return i},s.prototype.min=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||s>r)&&(i=n,s=r)}return i},s.prototype.distinct=function(t){var e,i=this._data,s=[],n=this._options.type&&this._options.type[t]||null,r=0;for(var a in i)if(i.hasOwnProperty(a)){var h=i[a],d=h[t],l=!1;for(e=0;r>e;e++)if(s[e]==d){l=!0;break}l||void 0===d||(s[r]=d,r++)}if(n)for(e=0;ei;i++)e[i]=t.getColumnId(i)||t.getColumnLabel(i);return e},s.prototype._appendRow=function(t,e,i){for(var s=t.addRow(),o=0,n=e.length;n>o;o++){var r=e[o];t.setValue(s,o,i[r])}},t.exports=s},function(t,e,i){function s(t,e){this._data=null,this._ids={},this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var o=i(1),n=i(3);s.prototype.setData=function(t){var e,i,s;if(this._data){this._data.unsubscribe&&this._data.unsubscribe("*",this.listener),e=[];for(var o in this._ids)this._ids.hasOwnProperty(o)&&e.push(o);this._ids={},this._trigger("remove",{items:e})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),i=0,s=e.length;s>i;i++)o=e[i],this._ids[o]=!0;this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},s.prototype.get=function(){var t,e,i,s=this,n=o.getType(arguments[0]);"String"==n||"Number"==n||"Array"==n?(t=arguments[0],e=arguments[1],i=arguments[2]):(e=arguments[0],i=arguments[1]);var r=o.extend({},this._options,e);this._options.filter&&e&&e.filter&&(r.filter=function(t){return s._options.filter(t)&&e.filter(t)});var a=[];return void 0!=t&&a.push(t),a.push(r),a.push(i),this._data&&this._data.get.apply(this._data,a)},s.prototype.getIds=function(t){var e;if(this._data){var i,s=this._options.filter;i=t&&t.filter?s?function(e){return s(e)&&t.filter(e)}:t.filter:s,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},s.prototype.getDataSet=function(){for(var t=this;t instanceof s;)t=t._data;return t||null},s.prototype._onEvent=function(t,e,i){var s,o,n,r,a=e&&e.items,h=this._data,d=[],l=[],c=[];if(a&&h){switch(t){case"add":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r&&(this._ids[n]=!0,d.push(n));break;case"update":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r?this._ids[n]?l.push(n):(this._ids[n]=!0,d.push(n)):this._ids[n]&&(delete this._ids[n],c.push(n));break;case"remove":for(s=0,o=a.length;o>s;s++)n=a[s],this._ids[n]&&(delete this._ids[n],c.push(n))}d.length&&this._trigger("add",{items:d},i),l.length&&this._trigger("update",{items:l},i),c.length&&this._trigger("remove",{items:c},i)}},s.prototype.on=n.prototype.on,s.prototype.off=n.prototype.off,s.prototype._trigger=n.prototype._trigger,s.prototype.subscribe=s.prototype.on,s.prototype.unsubscribe=s.prototype.off,t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this.containerElement=t,this.width="400px",this.height="400px",this.margin=10,this.defaultXCenter="55%",this.defaultYCenter="50%",this.xLabel="x",this.yLabel="y",this.zLabel="z",this.filterLabel="time",this.legendLabel="value",this.style=s.STYLE.DOT,this.showPerspective=!0,this.showGrid=!0,this.keepAspectRatio=!0,this.showShadow=!1,this.showGrayBottom=!1,this.showTooltip=!1,this.verticalRatio=.5,this.animationInterval=1e3,this.animationPreload=!1,this.camera=new l,this.eye=new h(0,0,-1),this.dataTable=null,this.dataPoints=null,this.colX=void 0,this.colY=void 0,this.colZ=void 0,this.colValue=void 0,this.colFilter=void 0,this.xMin=0,this.xStep=void 0,this.xMax=1,this.yMin=0,this.yStep=void 0,this.yMax=1,this.zMin=0,this.zStep=void 0,this.zMax=1,this.valueMin=0,this.valueMax=1,this.xBarWidth=1,this.yBarWidth=1,this.colorAxis="#4D4D4D",this.colorGrid="#D3D3D3",this.colorDot="#7DC1FF",this.colorDotBorder="#3267D2",this.create(),this.setOptions(i),e&&this.setData(e)}var o=i(45),n=i(3),r=i(4),a=i(1),h=i(9),d=i(8),l=i(6),c=i(7),p=i(10),u=i(11);o(s.prototype),s.prototype._setScale=function(){this.scale=new h(1/(this.xMax-this.xMin),1/(this.yMax-this.yMin),1/(this.zMax-this.zMin)),this.keepAspectRatio&&(this.scale.x3&&(this.colFilter=3);else{if(this.style!==s.STYLE.DOTCOLOR&&this.style!==s.STYLE.DOTSIZE&&this.style!==s.STYLE.BARCOLOR&&this.style!==s.STYLE.BARSIZE)throw'Unknown style "'+this.style+'"';this.colX=0,this.colY=1,this.colZ=2,this.colValue=3,t.getNumberOfColumns()>4&&(this.colFilter=4)}},s.prototype.getNumberOfRows=function(t){return t.length},s.prototype.getNumberOfColumns=function(t){var e=0;for(var i in t[0])t[0].hasOwnProperty(i)&&e++;return e},s.prototype.getDistinctValues=function(t,e){for(var i=[],s=0;st[s][e]&&(i.min=t[s][e]),i.maxt;t++){var g=(t-p)/(m-p),f=240*g,v=this._hsv2rgb(f,1,1);c.strokeStyle=v,c.beginPath(),c.moveTo(h,r+t),c.lineTo(a,r+t),c.stroke()}c.strokeStyle=this.colorAxis,c.strokeRect(h,r,i,n)}if(this.style===s.STYLE.DOTSIZE&&(c.strokeStyle=this.colorAxis,c.fillStyle=this.colorDot,c.beginPath(),c.moveTo(h,r),c.lineTo(a,r),c.lineTo(a-i+e,d),c.lineTo(h,d),c.closePath(),c.fill(),c.stroke()),this.style===s.STYLE.DOTCOLOR||this.style===s.STYLE.DOTSIZE){var y=5,b=new u(this.valueMin,this.valueMax,(this.valueMax-this.valueMin)/5,!0);for(b.start(),b.getCurrent()0?this.yMin:this.yMax,o=this._convert3Dto2D(new h(x,r,this.zMin)),Math.cos(2*_)>0?(f.textAlign="center",f.textBaseline="top",o.y+=b):Math.sin(2*_)<0?(f.textAlign="right",f.textBaseline="middle"):(f.textAlign="left",f.textBaseline="middle"),f.fillStyle=this.colorAxis,f.fillText(" "+i.getCurrent()+" ",o.x,o.y),i.next()}for(f.lineWidth=1,s=void 0===this.defaultYStep,i=new u(this.yMin,this.yMax,this.yStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,o=this._convert3Dto2D(new h(n,i.getCurrent(),this.zMin)),Math.cos(2*_)<0?(f.textAlign="center",f.textBaseline="top",o.y+=b):Math.sin(2*_)>0?(f.textAlign="right",f.textBaseline="middle"):(f.textAlign="left",f.textBaseline="middle"),f.fillStyle=this.colorAxis,f.fillText(" "+i.getCurrent()+" ",o.x,o.y),i.next();for(f.lineWidth=1,s=void 0===this.defaultZStep,i=new u(this.zMin,this.zMax,this.zStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new h(n,r,i.getCurrent())),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(t.x,t.y),f.lineTo(t.x-b,t.y),f.stroke(),f.textAlign="right",f.textBaseline="middle",f.fillStyle=this.colorAxis,f.fillText(i.getCurrent()+" ",t.x-5,t.y),i.next();f.lineWidth=1,t=this._convert3Dto2D(new h(n,r,this.zMin)),e=this._convert3Dto2D(new h(n,r,this.zMax)),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(t.x,t.y),f.lineTo(e.x,e.y),f.stroke(),f.lineWidth=1,p=this._convert3Dto2D(new h(this.xMin,this.yMin,this.zMin)),m=this._convert3Dto2D(new h(this.xMax,this.yMin,this.zMin)),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(p.x,p.y),f.lineTo(m.x,m.y),f.stroke(),p=this._convert3Dto2D(new h(this.xMin,this.yMax,this.zMin)),m=this._convert3Dto2D(new h(this.xMax,this.yMax,this.zMin)),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(p.x,p.y),f.lineTo(m.x,m.y),f.stroke(),f.lineWidth=1,t=this._convert3Dto2D(new h(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new h(this.xMin,this.yMax,this.zMin)),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(t.x,t.y),f.lineTo(e.x,e.y),f.stroke(),t=this._convert3Dto2D(new h(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new h(this.xMax,this.yMax,this.zMin)),f.strokeStyle=this.colorAxis,f.beginPath(),f.moveTo(t.x,t.y),f.lineTo(e.x,e.y),f.stroke();var w=this.xLabel;w.length>0&&(c=.1/this.scale.y,n=(this.xMin+this.xMax)/2,r=Math.cos(_)>0?this.yMin-c:this.yMax+c,o=this._convert3Dto2D(new h(n,r,this.zMin)),Math.cos(2*_)>0?(f.textAlign="center",f.textBaseline="top"):Math.sin(2*_)<0?(f.textAlign="right",f.textBaseline="middle"):(f.textAlign="left",f.textBaseline="middle"),f.fillStyle=this.colorAxis,f.fillText(w,o.x,o.y));var S=this.yLabel;S.length>0&&(l=.1/this.scale.x,n=Math.sin(_)>0?this.xMin-l:this.xMax+l,r=(this.yMin+this.yMax)/2,o=this._convert3Dto2D(new h(n,r,this.zMin)),Math.cos(2*_)<0?(f.textAlign="center",f.textBaseline="top"):Math.sin(2*_)>0?(f.textAlign="right",f.textBaseline="middle"):(f.textAlign="left",f.textBaseline="middle"),f.fillStyle=this.colorAxis,f.fillText(S,o.x,o.y));var M=this.zLabel;M.length>0&&(d=30,n=Math.cos(_)>0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,o=this._convert3Dto2D(new h(n,r,a)),f.textAlign="right",f.textBaseline="middle",f.fillStyle=this.colorAxis,f.fillText(M,o.x-d,o.y))},s.prototype._hsv2rgb=function(t,e,i){var s,o,n,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:s=r,o=h,n=0;break;case 1:s=h,o=r,n=0;break;case 2:s=0,o=r,n=h;break;case 3:s=0,o=h,n=r;break;case 4:s=h,o=0,n=r;break;case 5:s=r,o=0,n=h;break;default:s=0,o=0,n=0}return"RGB("+parseInt(255*s)+","+parseInt(255*o)+","+parseInt(255*n)+")"},s.prototype._redrawDataGrid=function(){var t,e,i,o,n,r,a,d,l,c,p,u,m,g=this.frame.canvas,f=g.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(n=0;n0}else r=!0;r?(m=(t.point.z+e.point.z+i.point.z+o.point.z)/4,c=240*(1-(m-this.zMin)*this.scale.z/this.verticalRatio),p=1,this.showShadow?(u=Math.min(1+S.x/M/2,1),a=this._hsv2rgb(c,p,u),d=a):(u=1,a=this._hsv2rgb(c,p,u),d=this.colorAxis)):(a="gray",d=this.colorAxis),l=.5,f.lineWidth=l,f.fillStyle=a,f.strokeStyle=d,f.beginPath(),f.moveTo(t.screen.x,t.screen.y),f.lineTo(e.screen.x,e.screen.y),f.lineTo(o.screen.x,o.screen.y),f.lineTo(i.screen.x,i.screen.y),f.closePath(),f.fill(),f.stroke()}}else for(n=0;np&&(p=0);var u,m,g;this.style===s.STYLE.DOTCOLOR?(u=240*(1-(d.point.value-this.valueMin)*this.scale.value),m=this._hsv2rgb(u,1,1),g=this._hsv2rgb(u,1,.8)):this.style===s.STYLE.DOTSIZE?(m=this.colorDot,g=this.colorDotBorder):(u=240*(1-(d.point.z-this.zMin)*this.scale.z/this.verticalRatio),m=this._hsv2rgb(u,1,1),g=this._hsv2rgb(u,1,.8)),i.lineWidth=1,i.strokeStyle=g,i.fillStyle=m,i.beginPath(),i.arc(d.screen.x,d.screen.y,p,0,2*Math.PI,!0),i.fill(),i.stroke()}}},s.prototype._redrawDataBar=function(){var t,e,i,o,n=this.frame.canvas,r=n.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(t=0;t0&&(t=this.dataPoints[0],s.lineWidth=1,s.strokeStyle="blue",s.beginPath(),s.moveTo(t.screen.x,t.screen.y)),e=1;e0&&s.stroke()}},s.prototype._onMouseDown=function(t){if(t=t||window.event,this.leftButtonDown&&this._onMouseUp(t),this.leftButtonDown=t.which?1===t.which:1===t.button,this.leftButtonDown||this.touchDown){this.startMouseX=getMouseX(t),this.startMouseY=getMouseY(t),this.startStart=new Date(this.start),this.startEnd=new Date(this.end),this.startArmRotation=this.camera.getArmRotation(),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},a.addEventListener(document,"mousemove",e.onmousemove),a.addEventListener(document,"mouseup",e.onmouseup),a.preventDefault(t)}},s.prototype._onMouseMove=function(t){t=t||window.event;var e=parseFloat(getMouseX(t))-this.startMouseX,i=parseFloat(getMouseY(t))-this.startMouseY,s=this.startArmRotation.horizontal+e/200,o=this.startArmRotation.vertical+i/200,n=4,r=Math.sin(n/360*2*Math.PI);Math.abs(Math.sin(s))0?1:0>t?-1:0}var s=e[0],o=e[1],n=e[2],r=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x)),a=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),h=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},s.prototype._dataPointFromXY=function(t,e){var i,o=100,n=null,r=null,a=null,h=new d(t,e);if(this.style===s.STYLE.BAR||this.style===s.STYLE.BARCOLOR||this.style===s.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){n=this.dataPoints[i];var l=n.surfaces;if(l)for(var c=l.length-1;c>=0;c--){var p=l[c],u=p.corners,m=[u[0].screen,u[1].screen,u[2].screen],g=[u[2].screen,u[3].screen,u[0].screen];if(this._insideTriangle(h,m)||this._insideTriangle(h,g))return n}}else for(i=0;ib)&&o>b&&(a=b,r=n)}}return r},s.prototype._showTooltip=function(t){var e,i,s;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,s=this.tooltip.dom.dot):(e=document.createElement("div"),e.style.position="absolute",e.style.padding="10px",e.style.border="1px solid #4d4d4d",e.style.color="#1a1a1a",e.style.background="rgba(255,255,255,0.7)",e.style.borderRadius="2px",e.style.boxShadow="5px 5px 10px rgba(128,128,128,0.5)",i=document.createElement("div"),i.style.position="absolute",i.style.height="40px",i.style.width="0",i.style.borderLeft="1px solid #4d4d4d",s=document.createElement("div"),s.style.position="absolute",s.style.height="0",s.style.width="0",s.style.border="5px solid #4d4d4d",s.style.borderRadius="5px",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:s}}),this._hideTooltip(),this.tooltip.dataPoint=t,e.innerHTML="function"==typeof this.showTooltip?this.showTooltip(t.point):"
x:
"+t.point.x+"
y:
"+t.point.y+"
z:
"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(s);var o=e.offsetWidth,n=e.offsetHeight,r=i.offsetHeight,a=s.offsetWidth,h=s.offsetHeight,d=t.screen.x-o/2;d=Math.min(Math.max(d,10),this.frame.clientWidth-10-o),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=d+"px",e.style.top=t.screen.y-r-n+"px",s.style.left=t.screen.x-a/2+"px",s.style.top=t.screen.y-h/2+"px"},s.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},getMouseX=function(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0},getMouseY=function(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0},t.exports=s},function(t,e,i){var s=i(9);Camera=function(){this.armLocation=new s,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraLocation=new s,this.cameraRotation=new s(.5*Math.PI,0,0),this.calculateCameraOrientation()},Camera.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},Camera.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),(void 0!==t||void 0!==e)&&this.calculateCameraOrientation()},Camera.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},Camera.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.calculateCameraOrientation())},Camera.prototype.getArmLength=function(){return this.armLength},Camera.prototype.getCameraLocation=function(){return this.cameraLocation},Camera.prototype.getCameraRotation=function(){return this.cameraRotation},Camera.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal},t.exports=Camera},function(t,e,i){function s(t,e,i){this.data=t,this.column=e,this.graph=i,this.index=void 0,this.value=void 0,this.values=i.getDistinctValues(t.get(),this.column),this.values.sort(function(t,e){return t>e?1:e>t?-1:0}),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,i.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var o=i(4);s.prototype.isLoaded=function(){return this.loaded},s.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},s.prototype.getLabel=function(){return this.graph.filterLabel},s.prototype.getColumn=function(){return this.column},s.prototype.getSelectedValue=function(){return void 0===this.index?void 0:this.values[this.index]},s.prototype.getValues=function(){return this.values},s.prototype.getValue=function(t){if(t>=this.values.length)throw"Error: index out of range";return this.values[t]},s.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var s=new o(this.data,{filter:function(t){return t[i.column]==i.value}}).get();e=this.graph._getDataPoints(s),this.dataPoints[t]=e}return e},s.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},s.prototype.selectValue=function(t){if(t>=this.values.length)throw"Error: index out of range";this.index=t,this.value=this.values[t]},s.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},s.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},s.prototype.setIndex=function(t){if(!(ts&&(s=0),s>this.values.length-1&&(s=this.values.length-1),s},s.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t/(this.values.length-1)*e,s=i+3;return s},s.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,s=this.leftToIndex(i);this.setIndex(s),o.preventDefault()},s.prototype._onMouseUp=function(){this.frame.style.cursor="auto",o.removeEventListener(document,"mousemove",this.onmousemove),o.removeEventListener(document,"mouseup",this.onmouseup),o.preventDefault()},t.exports=s},function(t){function e(t,e,i,s){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,s)}e.prototype.setRange=function(t,e,i,s){this._start=t?t:0,this._end=e?e:0,this.setStep(i,s)},e.prototype.setStep=function(t,i){void 0===t||0>=t||(void 0!==i&&(this.prettyStep=i),this._step=this.prettyStep===!0?e.calculatePrettyStep(t):t)},e.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),s=2*Math.pow(10,Math.round(e(t/2))),o=5*Math.pow(10,Math.round(e(t/5))),n=i;return Math.abs(s-t)<=Math.abs(n-t)&&(n=s),Math.abs(o-t)<=Math.abs(n-t)&&(n=o),0>=n&&(n=1),n},e.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},e.prototype.getStep=function(){return this._step},e.prototype.start=function(){this._current=this._start-this._start%this._step},e.prototype.next=function(){this._current+=this._step},e.prototype.end=function(){return this._current>this._end},t.exports=e},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");var o=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=r.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},util:{snap:null,toScreen:o._toScreen.bind(o),toGlobalScreen:o._toGlobalScreen.bind(o),toTime:o._toTime.bind(o),toGlobalTime:o._toGlobalTime.bind(o)}},this.range=new d(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new l(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new c(this.body),this.components.push(this.currentTime),this.customTime=new p(this.body),this.components.push(this.customTime),this.itemSet=new u(this.body),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,i&&this.setOptions(i),e?this.setItems(e):this.redraw()}var o=i(45),n=i(41),r=i(1),a=i(3),h=i(4),d=i(15),l=i(27),c=i(19),p=i(20),u=i(24);o(s.prototype),s.prototype._create=function(t){this.dom={},this.dom.root=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.backgroundVertical=document.createElement("div"),this.dom.backgroundHorizontal=document.createElement("div"),this.dom.centerContainer=document.createElement("div"),this.dom.leftContainer=document.createElement("div"),this.dom.rightContainer=document.createElement("div"),this.dom.center=document.createElement("div"),this.dom.left=document.createElement("div"),this.dom.right=document.createElement("div"),this.dom.top=document.createElement("div"),this.dom.bottom=document.createElement("div"),this.dom.shadowTop=document.createElement("div"),this.dom.shadowBottom=document.createElement("div"),this.dom.shadowTopLeft=document.createElement("div"),this.dom.shadowBottomLeft=document.createElement("div"),this.dom.shadowTopRight=document.createElement("div"),this.dom.shadowBottomRight=document.createElement("div"),this.dom.background.className="vispanel background",this.dom.backgroundVertical.className="vispanel background vertical",this.dom.backgroundHorizontal.className="vispanel background horizontal",this.dom.centerContainer.className="vispanel center",this.dom.leftContainer.className="vispanel left",this.dom.rightContainer.className="vispanel right",this.dom.top.className="vispanel top",this.dom.bottom.className="vispanel bottom",this.dom.left.className="content",this.dom.center.className="content",this.dom.right.className="content",this.dom.shadowTop.className="shadow top",this.dom.shadowBottom.className="shadow bottom",this.dom.shadowTopLeft.className="shadow top",this.dom.shadowBottomLeft.className="shadow bottom",this.dom.shadowTopRight.className="shadow top",this.dom.shadowBottomRight.className="shadow bottom",this.dom.root.appendChild(this.dom.background),this.dom.root.appendChild(this.dom.backgroundVertical),this.dom.root.appendChild(this.dom.backgroundHorizontal),this.dom.root.appendChild(this.dom.centerContainer),this.dom.root.appendChild(this.dom.leftContainer),this.dom.root.appendChild(this.dom.rightContainer),this.dom.root.appendChild(this.dom.top),this.dom.root.appendChild(this.dom.bottom),this.dom.centerContainer.appendChild(this.dom.center),this.dom.leftContainer.appendChild(this.dom.left),this.dom.rightContainer.appendChild(this.dom.right),this.dom.centerContainer.appendChild(this.dom.shadowTop),this.dom.centerContainer.appendChild(this.dom.shadowBottom),this.dom.leftContainer.appendChild(this.dom.shadowTopLeft),this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft),this.dom.rightContainer.appendChild(this.dom.shadowTopRight),this.dom.rightContainer.appendChild(this.dom.shadowBottomRight),this.on("rangechange",this.redraw.bind(this)),this.on("change",this.redraw.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("pinch",this._onPinch.bind(this)),this.on("dragstart",this._onDragStart.bind(this)),this.on("drag",this._onDrag.bind(this)),this.hammer=n(this.dom.root,{prevent_default:!0}),this.listeners={};var e=this,i=["touch","pinch","tap","doubletap","hold","dragstart","drag","dragend","mousewheel","DOMMouseScroll"];if(i.forEach(function(t){var i=function(){var i=[t].concat(Array.prototype.slice.call(arguments,0));e.emit.apply(e,i)};e.hammer.on(t,i),e.listeners[t]=i}),this.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.touch={},!t)throw new Error("No container provided");t.appendChild(this.dom.root)},s.prototype.destroy=function(){this.clear(),this.off(),this._stopAutoResize(),this.dom.root.parentNode&&this.dom.root.parentNode.removeChild(this.dom.root),this.dom=null;for(var t in this.listeners)this.listeners.hasOwnProperty(t)&&delete this.listeners[t];this.listeners=null,this.hammer=null,this.components.forEach(function(t){t.destroy()}),this.body=null},s.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","orientation"];r.selectiveExtend(e,this.options,t),this._initAutoResize()}if(this.components.forEach(function(e){e.setOptions(t)}),t&&t.order)throw new Error("Option order is deprecated. There is no replacement for this feature.");this.redraw()},s.prototype.setCustomTime=function(t){if(!this.customTime)throw new Error("Cannot get custom time: Custom time bar is not enabled");this.customTime.setCustomTime(t)},s.prototype.getCustomTime=function(){if(!this.customTime)throw new Error("Cannot get custom time: Custom time bar is not enabled");return this.customTime.getCustomTime()},s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof a||t instanceof h?t:new a(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e),i&&("start"in this.options||"end"in this.options)){this.fit();var s="start"in this.options?r.convert(this.options.start,"Date"):null,o="end"in this.options?r.convert(this.options.end,"Date"):null;this.setWindow(s,o)}},s.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},s.prototype.setGroups=function(t){var e;e=t?t instanceof a||t instanceof h?t:new a(t):null,this.groupsData=e,this.itemSet.setGroups(e)},s.prototype.clear=function(t){(!t||t.items)&&this.setItems(null),(!t||t.groups)&&this.setGroups(null),(!t||t.options)&&(this.components.forEach(function(t){t.setOptions(t.defaultOptions)}),this.setOptions(this.defaultOptions))},s.prototype.fit=function(){var t=this.getItemRange(),e=t.min,i=t.max;if(null!=e&&null!=i){var s=i.valueOf()-e.valueOf();0>=s&&(s=864e5),e=new Date(e.valueOf()-.05*s),i=new Date(i.valueOf()+.05*s)}(null!==e||null!==i)&&this.range.setRange(e,i)},s.prototype.getItemRange=function(){var t=this.itemsData.getDataSet(),e=null,i=null;if(t){var s=t.min("start");e=s?r.convert(s.start,"Date").valueOf():null;var o=t.max("start");o&&(i=r.convert(o.start,"Date").valueOf());var n=t.max("end");n&&(i=null==i?r.convert(n.end,"Date").valueOf():Math.max(i,r.convert(n.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},s.prototype.setSelection=function(t){this.itemSet&&this.itemSet.setSelection(t)},s.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},s.prototype.setWindow=function(t,e){if(1==arguments.length){var i=arguments[0];this.range.setRange(i.start,i.end)}else this.range.setRange(t,e)},s.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},s.prototype.redraw=function(){var t=!1,e=this.options,i=this.props,s=this.dom;if(s){s.root.className="vis timeline root "+e.orientation,s.root.style.maxHeight=r.option.asSize(e.maxHeight,""),s.root.style.minHeight=r.option.asSize(e.minHeight,""),s.root.style.width=r.option.asSize(e.width,""),i.border.left=(s.centerContainer.offsetWidth-s.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(s.centerContainer.offsetHeight-s.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var o=s.root.offsetHeight-s.root.clientHeight,n=s.root.offsetWidth-s.root.clientWidth;i.center.height=s.center.offsetHeight,i.left.height=s.left.offsetHeight,i.right.height=s.right.offsetHeight,i.top.height=s.top.clientHeight||-i.border.top,i.bottom.height=s.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),h=i.top.height+a+i.bottom.height+o+i.border.top+i.border.bottom;s.root.style.height=r.option.asSize(e.height,h+"px"),i.root.height=s.root.offsetHeight,i.background.height=i.root.height-o;var d=i.root.height-i.top.height-i.bottom.height-o;i.centerContainer.height=d,i.leftContainer.height=d,i.rightContainer.height=i.leftContainer.height,i.root.width=s.root.offsetWidth,i.background.width=i.root.width-n,i.left.width=s.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=s.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var l=i.root.width-i.left.width-i.right.width-n;i.center.width=l,i.centerContainer.width=l,i.top.width=l,i.bottom.width=l,s.background.style.height=i.background.height+"px",s.backgroundVertical.style.height=i.background.height+"px",s.backgroundHorizontal.style.height=i.centerContainer.height+"px",s.centerContainer.style.height=i.centerContainer.height+"px",s.leftContainer.style.height=i.leftContainer.height+"px",s.rightContainer.style.height=i.rightContainer.height+"px",s.background.style.width=i.background.width+"px",s.backgroundVertical.style.width=i.centerContainer.width+"px",s.backgroundHorizontal.style.width=i.background.width+"px",s.centerContainer.style.width=i.center.width+"px",s.top.style.width=i.top.width+"px",s.bottom.style.width=i.bottom.width+"px",s.background.style.left="0",s.background.style.top="0",s.backgroundVertical.style.left=i.left.width+"px",s.backgroundVertical.style.top="0",s.backgroundHorizontal.style.left="0",s.backgroundHorizontal.style.top=i.top.height+"px",s.centerContainer.style.left=i.left.width+"px",s.centerContainer.style.top=i.top.height+"px",s.leftContainer.style.left="0",s.leftContainer.style.top=i.top.height+"px",s.rightContainer.style.left=i.left.width+i.center.width+"px",s.rightContainer.style.top=i.top.height+"px",s.top.style.left=i.left.width+"px",s.top.style.top="0",s.bottom.style.left=i.left.width+"px",s.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var c=this.props.scrollTop;"bottom"==e.orientation&&(c+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),s.center.style.left="0",s.center.style.top=c+"px",s.left.style.left="0",s.left.style.top=c+"px",s.right.style.left="0",s.right.style.top=c+"px";var p=0==this.props.scrollTop?"hidden":"",u=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";s.shadowTop.style.visibility=p,s.shadowBottom.style.visibility=u,s.shadowTopLeft.style.visibility=p,s.shadowBottomLeft.style.visibility=u,s.shadowTopRight.style.visibility=p,s.shadowBottomRight.style.visibility=u,this.components.forEach(function(e){t=e.redraw()||t}),t&&this.redraw()}},s.prototype.repaint=function(){throw new Error("Function repaint is deprecated. Use redraw instead.")},s.prototype._toTime=function(t){var e=this.range.conversion(this.props.center.width);return new Date(t/e.scale+e.offset)},s.prototype._toGlobalTime=function(t){var e=this.range.conversion(this.props.root.width);return new Date(t/e.scale+e.offset)},s.prototype._toScreen=function(t){var e=this.range.conversion(this.props.center.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._toGlobalScreen=function(t){var e=this.range.conversion(this.props.root.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},s.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){return 1!=t.options.autoResize?void t._stopAutoResize():void(t.dom.root&&(t.dom.root.clientWidth!=t.props.lastWidth||t.dom.root.clientHeight!=t.props.lastHeight)&&(t.props.lastWidth=t.dom.root.clientWidth,t.props.lastHeight=t.dom.root.clientHeight,t.emit("change")))},r.addEventListener(window,"resize",this._onResize),this.watchTimer=setInterval(this._onResize,1e3)},s.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),r.removeEventListener(window,"resize",this._onResize),this._onResize=null},s.prototype._onTouch=function(){this.touch.allowDragging=!0},s.prototype._onPinch=function(){this.touch.allowDragging=!1},s.prototype._onDragStart=function(){this.touch.initialScrollTop=this.props.scrollTop},s.prototype._onDrag=function(t){if(this.touch.allowDragging){var e=t.gesture.deltaY,i=this._getScrollTop(),s=this._setScrollTop(this.touch.initialScrollTop+e);s!=i&&this.redraw()}},s.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},s.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("bottom"==this.options.orientation&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTop=s&&(s=864e5),e=new Date(e.valueOf()-.05*s),i=new Date(i.valueOf()+.05*s)}(null!==e||null!==i)&&this.range.setRange(e,i)},s.prototype.getItemRange=function(){var t=this.itemsData,e=null,i=null;if(t){var s=t.min("start");e=s?r.convert(s.start,"Date").valueOf():null;var o=t.max("start");o&&(i=r.convert(o.start,"Date").valueOf());var n=t.max("end");n&&(i=null==i?r.convert(n.end,"Date").valueOf():Math.max(i,r.convert(n.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},s.prototype.setWindow=function(t,e){if(1==arguments.length){var i=arguments[0];this.range.setRange(i.start,i.end)}else this.range.setRange(t,e)},s.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},s.prototype.redraw=function(){var t=!1,e=this.options,i=this.props,s=this.dom;if(s){s.root.className="vis timeline root "+e.orientation,s.root.style.maxHeight=r.option.asSize(e.maxHeight,""),s.root.style.minHeight=r.option.asSize(e.minHeight,""),s.root.style.width=r.option.asSize(e.width,""),i.border.left=(s.centerContainer.offsetWidth-s.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(s.centerContainer.offsetHeight-s.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var o=s.root.offsetHeight-s.root.clientHeight,n=s.root.offsetWidth-s.root.clientWidth;i.center.height=s.center.offsetHeight,i.left.height=s.left.offsetHeight,i.right.height=s.right.offsetHeight,i.top.height=s.top.clientHeight||-i.border.top,i.bottom.height=s.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),h=i.top.height+a+i.bottom.height+o+i.border.top+i.border.bottom;s.root.style.height=r.option.asSize(e.height,h+"px"),i.root.height=s.root.offsetHeight,i.background.height=i.root.height-o;var d=i.root.height-i.top.height-i.bottom.height-o;i.centerContainer.height=d,i.leftContainer.height=d,i.rightContainer.height=i.leftContainer.height,i.root.width=s.root.offsetWidth,i.background.width=i.root.width-n,i.left.width=s.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=s.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var l=i.root.width-i.left.width-i.right.width-n;i.center.width=l,i.centerContainer.width=l,i.top.width=l,i.bottom.width=l,s.background.style.height=i.background.height+"px",s.backgroundVertical.style.height=i.background.height+"px",s.backgroundHorizontalContainer.style.height=i.centerContainer.height+"px",s.centerContainer.style.height=i.centerContainer.height+"px",s.leftContainer.style.height=i.leftContainer.height+"px",s.rightContainer.style.height=i.rightContainer.height+"px",s.background.style.width=i.background.width+"px",s.backgroundVertical.style.width=i.centerContainer.width+"px",s.backgroundHorizontalContainer.style.width=i.background.width+"px",s.backgroundHorizontal.style.width=i.background.width+"px",s.centerContainer.style.width=i.center.width+"px",s.top.style.width=i.top.width+"px",s.bottom.style.width=i.bottom.width+"px",s.background.style.left="0",s.background.style.top="0",s.backgroundVertical.style.left=i.left.width+"px",s.backgroundVertical.style.top="0",s.backgroundHorizontalContainer.style.left="0",s.backgroundHorizontalContainer.style.top=i.top.height+"px",s.centerContainer.style.left=i.left.width+"px",s.centerContainer.style.top=i.top.height+"px",s.leftContainer.style.left="0",s.leftContainer.style.top=i.top.height+"px",s.rightContainer.style.left=i.left.width+i.center.width+"px",s.rightContainer.style.top=i.top.height+"px",s.top.style.left=i.left.width+"px",s.top.style.top="0",s.bottom.style.left=i.left.width+"px",s.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var c=this.props.scrollTop;"bottom"==e.orientation&&(c+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),s.center.style.left="0",s.center.style.top=c+"px",s.backgroundHorizontal.style.left="0",s.backgroundHorizontal.style.top=c+"px",s.left.style.left="0",s.left.style.top=c+"px",s.right.style.left="0",s.right.style.top=c+"px";var p=0==this.props.scrollTop?"hidden":"",u=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";s.shadowTop.style.visibility=p,s.shadowBottom.style.visibility=u,s.shadowTopLeft.style.visibility=p,s.shadowBottomLeft.style.visibility=u,s.shadowTopRight.style.visibility=p,s.shadowBottomRight.style.visibility=u,this.components.forEach(function(e){t=e.redraw()||t}),t&&this.redraw()}},s.prototype._toTime=function(t){var e=this.range.conversion(this.props.center.width);return new Date(t/e.scale+e.offset)},s.prototype._toGlobalTime=function(t){var e=this.range.conversion(this.props.root.width);return new Date(t/e.scale+e.offset)},s.prototype._toScreen=function(t){var e=this.range.conversion(this.props.center.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._toGlobalScreen=function(t){var e=this.range.conversion(this.props.root.width);return(t.valueOf()-e.offset)*e.scale},s.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},s.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){return 1!=t.options.autoResize?void t._stopAutoResize():void(t.dom.root&&(t.dom.root.clientWidth!=t.props.lastWidth||t.dom.root.clientHeight!=t.props.lastHeight)&&(t.props.lastWidth=t.dom.root.clientWidth,t.props.lastHeight=t.dom.root.clientHeight,t.emit("change")))},r.addEventListener(window,"resize",this._onResize),this.watchTimer=setInterval(this._onResize,1e3)},s.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),r.removeEventListener(window,"resize",this._onResize),this._onResize=null},s.prototype._onTouch=function(){this.touch.allowDragging=!0},s.prototype._onPinch=function(){this.touch.allowDragging=!1},s.prototype._onDragStart=function(){this.touch.initialScrollTop=this.props.scrollTop},s.prototype._onDrag=function(t){if(this.touch.allowDragging){var e=t.gesture.deltaY,i=this._getScrollTop(),s=this._setScrollTop(this.touch.initialScrollTop+e);s!=i&&this.redraw()}},s.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},s.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("bottom"==this.options.orientation&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTopn&&(h=n);for(var d=!1,l=h;Math.abs(l)<=Math.abs(n);l++){a=Math.pow(10,l);for(var c=0;c=o){d=!0,r=c;break}}if(1==d)break}this.stepIndex=r,this.scale=a,this.step=a*this.minorSteps[r]},e.prototype.first=function(){this.setFirst()},e.prototype.setFirst=function(){var t=this._start-this.scale*this.minorSteps[this.stepIndex],e=this._end+this.scale*this.minorSteps[this.stepIndex];this.marginEnd=this.roundToMinor(e),this.marginStart=this.roundToMinor(t),this.marginRange=this.marginEnd-this.marginStart,this.current=this.marginEnd},e.prototype.roundToMinor=function(t){var e=t-t%(this.scale*this.minorSteps[this.stepIndex]);return t%(this.scale*this.minorSteps[this.stepIndex])>.5*this.scale*this.minorSteps[this.stepIndex]?e+this.scale*this.minorSteps[this.stepIndex]:e},e.prototype.hasNext=function(){return this.current>=this.marginStart},e.prototype.next=function(){var t=this.current;this.current-=this.step,this.current==t&&(this.current=this._end)},e.prototype.previous=function(){this.current+=this.step,this.marginEnd+=this.step,this.marginRange=this.marginEnd-this.marginStart},e.prototype.getCurrent=function(){for(var t=""+Number(this.current).toPrecision(5),e=t.length-1;e>0;e--){if("0"!=t[e]){if("."==t[e]||","==t[e]){t=t.slice(0,e);break}break}t=t.slice(0,e)}return t},e.prototype.snap=function(){},e.prototype.isMajor=function(){return this.current%(this.scale*this.majorSteps[this.stepIndex])==0},t.exports=e},function(t,e,i){function s(t,e){var i=h().hours(0).minutes(0).seconds(0).milliseconds(0);this.start=i.clone().add("days",-3).valueOf(),this.end=i.clone().add("days",4).valueOf(),this.body=t,this.defaultOptions={start:null,end:null,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10},this.options=r.extend({},this.defaultOptions),this.props={touch:{}},this.body.emitter.on("dragstart",this._onDragStart.bind(this)),this.body.emitter.on("drag",this._onDrag.bind(this)),this.body.emitter.on("dragend",this._onDragEnd.bind(this)),this.body.emitter.on("hold",this._onHold.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("DOMMouseScroll",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.setOptions(e)}function o(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}function n(t,e){return{x:t.pageX-r.getAbsoluteLeft(e),y:t.pageY-r.getAbsoluteTop(e)}}var r=i(1),a=i(42),h=i(40),d=i(18);s.prototype=new d,s.prototype.setOptions=function(t){if(t){var e=["direction","min","max","zoomMin","zoomMax","moveable","zoomable"];r.selectiveExtend(e,this.options,t),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},s.prototype.setRange=function(t,e){var i=this._applyRange(t,e);if(i){var s={start:new Date(this.start),end:new Date(this.end)};this.body.emitter.emit("rangechange",s),this.body.emitter.emit("rangechanged",s)}},s.prototype._applyRange=function(t,e){var i,s=null!=t?r.convert(t,"Date").valueOf():this.start,o=null!=e?r.convert(e,"Date").valueOf():this.end,n=null!=this.options.max?r.convert(this.options.max,"Date").valueOf():null,a=null!=this.options.min?r.convert(this.options.min,"Date").valueOf():null;if(isNaN(s)||null===s)throw new Error('Invalid start "'+t+'"');if(isNaN(o)||null===o)throw new Error('Invalid end "'+e+'"');if(s>o&&(o=s),null!==a&&a>s&&(i=a-s,s+=i,o+=i,null!=n&&o>n&&(o=n)),null!==n&&o>n&&(i=o-n,s-=i,o-=i,null!=a&&a>s&&(s=a)),null!==this.options.zoomMin){var h=parseFloat(this.options.zoomMin);0>h&&(h=0),h>o-s&&(this.end-this.start===h?(s=this.start,o=this.end):(i=h-(o-s),s-=i/2,o+=i/2))}if(null!==this.options.zoomMax){var d=parseFloat(this.options.zoomMax);0>d&&(d=0),o-s>d&&(this.end-this.start===d?(s=this.start,o=this.end):(i=o-s-d,s+=i/2,o-=i/2))}var l=this.start!=s||this.end!=o;return this.start=s,this.end=o,l},s.prototype.getRange=function(){return{start:this.start,end:this.end}},s.prototype.conversion=function(t){return s.conversion(this.start,this.end,t)},s.conversion=function(t,e,i){return 0!=i&&e-t!=0?{offset:t,scale:i/(e-t)}:{offset:0,scale:1}},s.prototype._onDragStart=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.start=this.start,this.props.touch.end=this.end,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},s.prototype._onDrag=function(t){if(this.options.moveable){var e=this.options.direction;if(o(e),this.props.touch.allowDragging){var i="horizontal"==e?t.gesture.deltaX:t.gesture.deltaY,s=this.props.touch.end-this.props.touch.start,n="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height,r=-i/n*s;this._applyRange(this.props.touch.start+r,this.props.touch.end+r),this.body.emitter.emit("rangechange",{start:new Date(this.start),end:new Date(this.end)})}}},s.prototype._onDragEnd=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end)}))},s.prototype._onMouseWheel=function(t){if(this.options.zoomable&&this.options.moveable){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i;i=0>e?1-e/5:1/(1+e/5);var s=a.fakeGesture(this,t),o=n(s.center,this.body.dom.center),r=this._pointerToDate(o);this.zoom(i,r)}t.preventDefault()}},s.prototype._onTouch=function(){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null},s.prototype._onHold=function(){this.props.touch.allowDragging=!1},s.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable&&(this.props.touch.allowDragging=!1,t.gesture.touches.length>1)){this.props.touch.center||(this.props.touch.center=n(t.gesture.center,this.body.dom.center));var e=1/t.gesture.scale,i=this._pointerToDate(this.props.touch.center),s=parseInt(i+(this.props.touch.start-i)*e),o=parseInt(i+(this.props.touch.end-i)*e);this.setRange(s,o)}},s.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(o(i),"horizontal"==i){var s=this.body.domProps.center.width;return e=this.conversion(s),t.x/e.scale+e.offset}var n=this.body.domProps.center.height;return e=this.conversion(n),t.y/e.scale+e.offset},s.prototype.zoom=function(t,e){null==e&&(e=(this.start+this.end)/2);var i=e+(this.start-e)*t,s=e+(this.end-e)*t;this.setRange(i,s)},s.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,s=this.end+e*t;this.start=i,this.end=s},s.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,s=this.start-i,o=this.end-i;this.setRange(s,o)},t.exports=s},function(t,e){var i=.001;e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){var i="end"in t.data?t.data.end:t.data.start,s="end"in e.data?e.data.end:e.data.start;return i-s})},e.stack=function(t,i,s){var o,n;if(s)for(o=0,n=t.length;n>o;o++)t[o].top=null;for(o=0,n=t.length;n>o;o++){var r=t[o];if(null===r.top){r.top=i.axis;do{for(var a=null,h=0,d=t.length;d>h;h++){var l=t[h];if(null!==l.top&&l!==r&&e.collision(r,l,i.item)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical)}while(a)}}},e.nostack=function(t,e){var i,s;for(i=0,s=t.length;s>i;i++)t[i].top=e.axis},e.collision=function(t,e,s){return t.left-s.horizontal+ie.left&&t.top-s.vertical+ie.top}},function(t,e,i){function s(t,e,i){this.current=new Date,this._start=new Date,this._end=new Date,this.autoScale=!0,this.scale=s.SCALE.DAY,this.step=1,this.setRange(t,e,i)}var o=i(40);s.SCALE={MILLISECOND:1,SECOND:2,MINUTE:3,HOUR:4,DAY:5,WEEKDAY:6,MONTH:7,YEAR:8},s.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?new Date(t.valueOf()):new Date,this._end=void 0!=e?new Date(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},s.prototype.first=function(){this.current=new Date(this._start.valueOf()),this.roundToMinor()},s.prototype.roundToMinor=function(){switch(this.scale){case s.SCALE.YEAR:this.current.setFullYear(this.step*Math.floor(this.current.getFullYear()/this.step)),this.current.setMonth(0);case s.SCALE.MONTH:this.current.setDate(1);case s.SCALE.DAY:case s.SCALE.WEEKDAY:this.current.setHours(0);case s.SCALE.HOUR:this.current.setMinutes(0);case s.SCALE.MINUTE:this.current.setSeconds(0);case s.SCALE.SECOND:this.current.setMilliseconds(0)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.setMilliseconds(this.current.getMilliseconds()-this.current.getMilliseconds()%this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()-this.current.getSeconds()%this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()-this.current.getMinutes()%this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()-this.current.getHours()%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()-1-(this.current.getDate()-1)%this.step+1);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()-this.current.getMonth()%this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()-this.current.getFullYear()%this.step)}},s.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},s.prototype.next=function(){var t=this.current.valueOf();if(this.current.getMonth()<6)switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current=new Date(this.current.valueOf()+1e3*this.step);break;case s.SCALE.MINUTE:this.current=new Date(this.current.valueOf()+1e3*this.step*60);break;case s.SCALE.HOUR:this.current=new Date(this.current.valueOf()+1e3*this.step*60*60);var e=this.current.getHours();this.current.setHours(e-e%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}else switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()+this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()+this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()+this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.getMilliseconds()0&&(this.step=e),this.autoScale=!1},s.prototype.setAutoScale=function(t){this.autoScale=t},s.prototype.setMinimumStep=function(t){if(void 0!=t){var e=31104e6,i=2592e6,o=864e5,n=36e5,r=6e4,a=1e3,h=1;1e3*e>t&&(this.scale=s.SCALE.YEAR,this.step=1e3),500*e>t&&(this.scale=s.SCALE.YEAR,this.step=500),100*e>t&&(this.scale=s.SCALE.YEAR,this.step=100),50*e>t&&(this.scale=s.SCALE.YEAR,this.step=50),10*e>t&&(this.scale=s.SCALE.YEAR,this.step=10),5*e>t&&(this.scale=s.SCALE.YEAR,this.step=5),e>t&&(this.scale=s.SCALE.YEAR,this.step=1),3*i>t&&(this.scale=s.SCALE.MONTH,this.step=3),i>t&&(this.scale=s.SCALE.MONTH,this.step=1),5*o>t&&(this.scale=s.SCALE.DAY,this.step=5),2*o>t&&(this.scale=s.SCALE.DAY,this.step=2),o>t&&(this.scale=s.SCALE.DAY,this.step=1),o/2>t&&(this.scale=s.SCALE.WEEKDAY,this.step=1),4*n>t&&(this.scale=s.SCALE.HOUR,this.step=4),n>t&&(this.scale=s.SCALE.HOUR,this.step=1),15*r>t&&(this.scale=s.SCALE.MINUTE,this.step=15),10*r>t&&(this.scale=s.SCALE.MINUTE,this.step=10),5*r>t&&(this.scale=s.SCALE.MINUTE,this.step=5),r>t&&(this.scale=s.SCALE.MINUTE,this.step=1),15*a>t&&(this.scale=s.SCALE.SECOND,this.step=15),10*a>t&&(this.scale=s.SCALE.SECOND,this.step=10),5*a>t&&(this.scale=s.SCALE.SECOND,this.step=5),a>t&&(this.scale=s.SCALE.SECOND,this.step=1),200*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=200),100*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=100),50*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=50),10*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=10),5*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=5),h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=1)}},s.prototype.snap=function(t){var e=new Date(t.valueOf());if(this.scale==s.SCALE.YEAR){var i=e.getFullYear()+Math.round(e.getMonth()/12);e.setFullYear(Math.round(i/this.step)*this.step),e.setMonth(0),e.setDate(0),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MONTH)e.getDate()>15?(e.setDate(1),e.setMonth(e.getMonth()+1)):e.setDate(1),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0);else if(this.scale==s.SCALE.DAY){switch(this.step){case 5:case 2:e.setHours(24*Math.round(e.getHours()/24));break;default:e.setHours(12*Math.round(e.getHours()/12))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.WEEKDAY){switch(this.step){case 5:case 2:e.setHours(12*Math.round(e.getHours()/12));break;default:e.setHours(6*Math.round(e.getHours()/6))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.HOUR){switch(this.step){case 4:e.setMinutes(60*Math.round(e.getMinutes()/60));break;default:e.setMinutes(30*Math.round(e.getMinutes()/30))}e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MINUTE){switch(this.step){case 15:case 10:e.setMinutes(5*Math.round(e.getMinutes()/5)),e.setSeconds(0);break;case 5:e.setSeconds(60*Math.round(e.getSeconds()/60));break;default:e.setSeconds(30*Math.round(e.getSeconds()/30))}e.setMilliseconds(0)}else if(this.scale==s.SCALE.SECOND)switch(this.step){case 15:case 10:e.setSeconds(5*Math.round(e.getSeconds()/5)),e.setMilliseconds(0);break;case 5:e.setMilliseconds(1e3*Math.round(e.getMilliseconds()/1e3));break;default:e.setMilliseconds(500*Math.round(e.getMilliseconds()/500))}else if(this.scale==s.SCALE.MILLISECOND){var o=this.step>5?this.step/2:1;e.setMilliseconds(Math.round(e.getMilliseconds()/o)*o)}return e},s.prototype.isMajor=function(){switch(this.scale){case s.SCALE.MILLISECOND:return 0==this.current.getMilliseconds();case s.SCALE.SECOND:return 0==this.current.getSeconds();case s.SCALE.MINUTE:return 0==this.current.getHours()&&0==this.current.getMinutes();case s.SCALE.HOUR:return 0==this.current.getHours();case s.SCALE.WEEKDAY:case s.SCALE.DAY:return 1==this.current.getDate();case s.SCALE.MONTH:return 0==this.current.getMonth();case s.SCALE.YEAR:return!1;default:return!1}},s.prototype.getLabelMinor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("SSS");case s.SCALE.SECOND:return o(t).format("s");case s.SCALE.MINUTE:return o(t).format("HH:mm");case s.SCALE.HOUR:return o(t).format("HH:mm");case s.SCALE.WEEKDAY:return o(t).format("ddd D");case s.SCALE.DAY:return o(t).format("D");case s.SCALE.MONTH:return o(t).format("MMM");case s.SCALE.YEAR:return o(t).format("YYYY");default:return""}},s.prototype.getLabelMajor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("HH:mm:ss");case s.SCALE.SECOND:return o(t).format("D MMMM HH:mm");case s.SCALE.MINUTE:case s.SCALE.HOUR:return o(t).format("ddd D MMMM");case s.SCALE.WEEKDAY:case s.SCALE.DAY:return o(t).format("MMMM YYYY");case s.SCALE.MONTH:return o(t).format("YYYY");case s.SCALE.YEAR:return"";default:return""}},t.exports=s},function(t){function e(){this.options=null,this.props=null}e.prototype.setOptions=function(t){t&&util.extend(this.options,t)},e.prototype.redraw=function(){return!1},e.prototype.destroy=function(){},e.prototype._isResized=function(){var t=this.props._previousWidth!==this.props.width||this.props._previousHeight!==this.props.height;return this.props._previousWidth=this.props.width,this.props._previousHeight=this.props.height,t},t.exports=e},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCurrentTime:!0},this.options=o.extend({},this.defaultOptions),this._create(),this.setOptions(e)}var o=i(1),n=i(18);s.prototype=new n,s.prototype._create=function(){var t=document.createElement("div");t.className="currenttime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},s.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},s.prototype.setOptions=function(t){t&&o.selectiveExtend(["showCurrentTime"],this.options,t)},s.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=new Date,i=this.body.util.toScreen(e);this.bar.style.left=i+"px",this.bar.title="Current time: "+e}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},s.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,s=1/i/10;30>s&&(s=30),s>1e3&&(s=1e3),e.redraw(),e.currentTimeTimer=setTimeout(t,s)}var e=this;t()},s.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCustomTime:!1},this.options=n.extend({},this.defaultOptions),this.customTime=new Date,this.eventParams={},this._create(),this.setOptions(e)}var o=i(41),n=i(1),r=i(18);s.prototype=new r,s.prototype.setOptions=function(t){t&&n.selectiveExtend(["showCustomTime"],this.options,t)},s.prototype._create=function(){var t=document.createElement("div");t.className="customtime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t;var e=document.createElement("div");e.style.position="relative",e.style.top="0px",e.style.left="-10px",e.style.height="100%",e.style.width="20px",t.appendChild(e),this.hammer=o(t,{prevent_default:!0}),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this))},s.prototype.destroy=function(){this.options.showCustomTime=!1,this.redraw(),this.hammer.enable(!1),this.hammer=null,this.body=null},s.prototype.redraw=function(){if(this.options.showCustomTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime);this.bar.style.left=e+"px",this.bar.title="Time: "+this.customTime}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar);return!1},s.prototype.setCustomTime=function(t){this.customTime=new Date(t.valueOf()),this.redraw()},s.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},s.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation(),t.preventDefault()},s.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=t.gesture.deltaX,i=this.body.util.toScreen(this.eventParams.customTime)+e,s=this.body.util.toTime(i);this.setCustomTime(s),this.body.emitter.emit("timechange",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault()}},s.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault())},t.exports=s},function(t,e,i){function s(t,e,i){this.id=o.randomUUID(),this.body=t,this.defaultOptions={orientation:"left",showMinorLabels:!0,showMajorLabels:!0,icons:!0,majorLinesOffset:7,minorLinesOffset:4,labelOffsetX:10,labelOffsetY:2,iconWidth:20,width:"40px",visible:!0},this.linegraphSVG=i,this.props={},this.DOMelements={lines:{},labels:{}},this.dom={},this.range={start:0,end:0},this.options=o.extend({},this.defaultOptions),this.conversionFactor=1,this.setOptions(e),this.width=Number((""+this.options.width).replace("px","")),this.minWidth=this.width,this.height=this.linegraphSVG.offsetHeight,this.stepPixels=25,this.stepPixelsForced=25,this.lineOffset=0,this.master=!0,this.svgElements={},this.groups={},this.amountOfGroups=0,this._create()}var o=i(1),n=i(2),r=i(18),a=i(14);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype.setOptions=function(t){if(t){var e=!1;this.options.orientation!=t.orientation&&void 0!==t.orientation&&(e=!0);var i=["orientation","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","width","visible"];o.selectiveExtend(i,this.options,t),this.minWidth=Number((""+this.options.width).replace("px","")),1==e&&this.dom.frame&&(this.hide(),this.show())}},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.style.width=this.options.width,this.dom.frame.style.height=this.height,this.dom.lineContainer=document.createElement("div"),this.dom.lineContainer.style.width="100%",this.dom.lineContainer.style.height=this.height,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.height="100%",this.svg.style.width="100%",this.svg.style.display="block",this.dom.frame.appendChild(this.svg)},s.prototype._redrawGroupIcons=function(){n.prepareElements(this.svgElements);var t,e=this.options.iconWidth,i=15,s=4,o=s+.5*i;t="left"==this.options.orientation?s:this.width-e-s;for(var r in this.groups)this.groups.hasOwnProperty(r)&&(this.groups[r].drawIcon(t,o,this.svgElements,this.svg,e,i),o+=i+s);n.cleanupElements(this.svgElements)},s.prototype.show=function(){this.dom.frame.parentNode||("left"==this.options.orientation?this.body.dom.left.appendChild(this.dom.frame):this.body.dom.right.appendChild(this.dom.frame)),this.dom.lineContainer.parentNode||this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.lineContainer.parentNode&&this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer)},s.prototype.setRange=function(t,e){this.range.start=t,this.range.end=e},s.prototype.redraw=function(){var t=!1;if(0==this.amountOfGroups)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=1==this.options.visible?Number((""+this.options.width).replace("px","")):0;var e=this.props,i=this.dom.frame;i.className="dataaxis",this._calculateCharSize();var s=this.options.orientation,o=this.options.showMinorLabels,n=this.options.showMajorLabels;e.minorLabelHeight=o?e.minorCharHeight:0,e.majorLabelHeight=n?e.majorCharHeight:0,e.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,e.minorLineHeight=1,e.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,e.majorLineHeight=1,"left"==s?(i.style.top="0",i.style.left="0",i.style.bottom="",i.style.width=this.width+"px",i.style.height=this.height+"px"):(i.style.top="",i.style.bottom="0",i.style.left="0",i.style.width=this.width+"px",i.style.height=this.height+"px"),t=this._redrawLabels(),1==this.options.icons&&this._redrawGroupIcons()}return t},s.prototype._redrawLabels=function(){n.prepareElements(this.DOMelements);var t=this.options.orientation,e=this.master?this.props.majorCharHeight||10:this.stepPixelsForced,i=new a(this.range.start,this.range.end,e,this.dom.frame.offsetHeight);this.step=i,i.first();var s=this.dom.frame.offsetHeight/(i.marginRange/i.step+1);this.stepPixels=s;var o=this.height/s,r=0;if(0==this.master){s=this.stepPixelsForced,r=Math.round(this.height/s-o);for(var h=0;.5*r>h;h++)i.previous();o=this.height/s}this.valueAtZero=i.marginEnd;var d=0,l=1;i.next(),this.maxLabelSize=0;for(var c=0;l=0&&this._redrawLabel(c-2,i.getCurrent(),t,"yAxis major",this.props.majorCharHeight),this._redrawLine(c,t,"grid horizontal major",this.options.majorLinesOffset,this.props.majorLineWidth)):this._redrawLine(c,t,"grid horizontal minor",this.options.minorLinesOffset,this.props.minorLineWidth),i.next(),l++}this.conversionFactor=d/((o-1)*i.step);var u=1==this.options.icons?this.options.iconWidth+this.options.labelOffsetX+15:this.options.labelOffsetX+15;return this.maxLabelSize>this.width-u&&1==this.options.visible?(this.width=this.maxLabelSize+u,this.options.width=this.width+"px",n.cleanupElements(this.DOMelements),this.redraw(),!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+u),this.options.width=this.width+"px",n.cleanupElements(this.DOMelements),this.redraw(),!0):(n.cleanupElements(this.DOMelements),!1)},s.prototype._redrawLabel=function(t,e,i,s,o){var r=n.getDOMElement("div",this.DOMelements,this.dom.frame);r.className=s,r.innerHTML=e,"left"==i?(r.style.left="-"+this.options.labelOffsetX+"px",r.style.textAlign="right"):(r.style.right="-"+this.options.labelOffsetX+"px",r.style.textAlign="left"),r.style.top=t-.5*o+this.options.labelOffsetY+"px",e+="";var a=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSizee.axis){var c=d-e.axis;l-=c,o.forEach(h,function(t){t.top-=c})}a=l+e.item.vertical/2}else a=e.axis+e.item.vertical;a=Math.max(a,this.props.label.height);var p=this.dom.foreground;this.top=p.offsetTop,this.left=p.offsetLeft,this.width=p.offsetWidth,s=o.updateProperty(this,"height",a)||s,s=o.updateProperty(this.props.label,"width",this.dom.inner.clientWidth)||s,s=o.updateProperty(this.props.label,"height",this.dom.inner.clientHeight)||s,this.dom.background.style.height=a+"px",this.dom.foreground.style.height=a+"px",this.dom.label.style.height=a+"px";for(var u=0,m=this.visibleItems.length;m>u;u++){var g=this.visibleItems[u];g.repositionY()}return s},s.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},s.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var s=this.dom.axis;s.parentNode&&s.parentNode.removeChild(s)},s.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),t instanceof r&&-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},s.prototype.remove=function(t){delete this.items[t.id],t.setParent(this.itemSet);var e=this.visibleItems.indexOf(t);-1!=e&&this.visibleItems.splice(e,1)},s.prototype.removeFromDataSet=function(t){this.itemSet.removeItem(t.id)},s.prototype.order=function(){var t=o.toArray(this.items);this.orderedItems.byStart=t,this.orderedItems.byEnd=this._constructByEndArray(t),n.orderByStart(this.orderedItems.byStart),n.orderByEnd(this.orderedItems.byEnd)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0)for(n=0;n=0&&!this._checkIfInvisible(t.byStart[n],r,i);n--);for(n=s+1;n=0&&!this._checkIfInvisible(t.byEnd[n],r,i);n--);for(n=a+1;ne;e++)s=this.selection[e],o=this.items[s],o&&o.unselect();for(this.selection=[],e=0,i=t.length;i>e;e++)s=t[e],o=this.items[s],o&&(this.selection.push(s),o.select())}},s.prototype.getSelection=function(){return this.selection.concat([])},s.prototype.getVisibleItems=function(){var t=this.body.range.getRange(),e=this.body.util.toScreen(t.start),i=this.body.util.toScreen(t.end),s=[];for(var o in this.groups)if(this.groups.hasOwnProperty(o))for(var n=this.groups[o],r=n.visibleItems,a=0;ae&&s.push(h.id)}return s},s.prototype._deselect=function(t){for(var e=this.selection,i=0,s=e.length;s>i;i++)if(e[i]==t){e.splice(i,1);break}},s.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=n.option.asSize,s=this.options,o=s.orientation,r=!1,a=this.dom.frame,h=s.editable.updateTime||s.editable.updateGroup;a.className="itemset"+(h?" editable":""),r=this._orderGroups()||r;var d=e.end-e.start,l=d!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth;l&&(this.stackDirty=!0),this.lastVisibleInterval=d,this.props.lastWidth=this.props.width;var c=this.stackDirty,p=this._firstGroup(),u={item:t.item,axis:t.axis},m={item:t.item,axis:t.item.vertical/2},g=0,f=t.axis+t.item.vertical;return n.forEach(this.groups,function(t){var i=t==p?u:m,s=t.redraw(e,i,c);r=s||r,g+=t.height}),g=Math.max(g,f),this.stackDirty=!1,a.style.height=i(g),this.props.top=a.offsetTop,this.props.left=a.offsetLeft,this.props.width=a.offsetWidth,this.props.height=g,this.dom.axis.style.top=i("top"==o?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.dom.axis.style.left=this.body.domProps.border.left+"px",r=this._isResized()||r},s.prototype._firstGroup=function(){var t="top"==this.options.orientation?0:this.groupIds.length-1,e=this.groupIds[t],i=this.groups[e]||this.groups[u];return i||null},s.prototype._updateUngrouped=function(){var t=this.groups[u];if(this.groupsData)t&&(t.hide(),delete this.groups[u]);else if(!t){var e=null,i=null;t=new d(e,i,this),this.groups[u]=t;for(var s in this.items)this.items.hasOwnProperty(s)&&t.add(this.items[s]);t.show()}},s.prototype.getLabelSet=function(){return this.dom.labelSet},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(n.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var o=this.id;n.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,o)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}},s.prototype.getItems=function(){return this.itemsData},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(n.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;n.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("change")},s.prototype.getGroups=function(){return this.groupsData},s.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},s.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i=e.itemsData.get(t,e.itemOptions),o=e.items[t],n=i.type||e.options.type||(i.end?"range":"box"),r=s.types[n];if(o&&(r&&o instanceof r?e._updateItem(o,i):(e._removeItem(o),o=null)),!o){if(!r)throw new TypeError("rangeoverflow"==n?'Item type "rangeoverflow" is deprecated. Use css styling instead: .vis.timeline .item.range .content {overflow: visible;}':'Unknown item type "'+n+'"');o=new r(i,e.conversion,e.options),o.id=t,e._addItem(o)}}),this._order(),this.stackDirty=!0,this.body.emitter.emit("change")},s.prototype._onAdd=s.prototype._onUpdate,s.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var s=i.items[t];s&&(e++,i._removeItem(s))}),e&&(this._order(),this.stackDirty=!0,this.body.emitter.emit("change"))},s.prototype._order=function(){n.forEach(this.groups,function(t){t.order()})},s.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},s.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),s=e.groups[t];if(s)s.setData(i);else{if(t==u)throw new Error("Illegal group id. "+t+" is a reserved id.");var o=Object.create(e.options);n.extend(o,{height:null}),s=new d(t,i,e),e.groups[t]=s;for(var r in e.items)if(e.items.hasOwnProperty(r)){var a=e.items[r];a.data.group==t&&s.add(a)}s.order(),s.show()}}),this.body.emitter.emit("change")},s.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("change")},s.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder}),e=!n.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},s.prototype._addItem=function(t){this.items[t.id]=t;var e=this.groupsData?t.data.group:u,i=this.groups[e];i&&i.add(t)},s.prototype._updateItem=function(t,e){var i=t.data.group;if(t.data=e,t.displayed&&t.redraw(),i!=t.data.group){var s=this.groups[i];s&&s.remove(t);var o=this.groupsData?t.data.group:u,n=this.groups[o];n&&n.add(t)}},s.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1);var i=this.groupsData?t.data.group:u,s=this.groups[i];s&&s.remove(t)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0||o.length>0)&&this.body.emitter.emit("select",{items:this.getSelection()}),t.stopPropagation()}},s.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.body.util.snap||null,o=s.itemFromTarget(t);if(o){var r=e.itemsData.get(o.id);this.options.onUpdate(r,function(t){t&&e.itemsData.update(t)})}else{var a=n.getAbsoluteLeft(this.dom.frame),h=t.gesture.center.pageX-a,d=this.body.util.toTime(h),l={start:i?i(d):d,content:"new item"};if("range"===this.options.type){var c=this.body.util.toTime(h+this.props.width/5);l.end=i?i(c):c}l[this.itemsData.fieldId]=n.randomUUID();var p=s.groupFromTarget(t);p&&(l.group=p.groupId),this.options.onAdd(l,function(t){t&&e.itemsData.add(l)})}}},s.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e,i=s.itemFromTarget(t);if(i){e=this.getSelection();var o=e.indexOf(i.id);-1==o?e.push(i.id):e.splice(o,1),this.setSelection(e),this.body.emitter.emit("select",{items:this.getSelection()}),t.stopPropagation()}}},s.itemFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},s.groupFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-group"))return e["timeline-group"];e=e.parentNode}return null},s.itemSetFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-itemset"))return e["timeline-itemset"];e=e.parentNode}return null},t.exports=s},function(t,e,i){function s(t,e,i){this.body=t,this.defaultOptions={enabled:!0,icons:!0,iconSize:20,iconSpacing:6,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-left"}},this.side=i,this.options=o.extend({},this.defaultOptions),this.svgElements={},this.dom={},this.groups={},this.amountOfGroups=0,this._create(),this.setOptions(e)}var o=i(1),n=i(2),r=i(18);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.className="legend",this.dom.frame.style.position="absolute",this.dom.frame.style.top="10px",this.dom.frame.style.display="block",this.dom.textArea=document.createElement("div"),this.dom.textArea.className="legendText",this.dom.textArea.style.position="relative",this.dom.textArea.style.top="0px",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.width=this.options.iconSize+5+"px",this.dom.frame.appendChild(this.svg),this.dom.frame.appendChild(this.dom.textArea)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setOptions=function(t){var e=["enabled","orientation","icons","left","right"];o.selectiveDeepExtend(e,this.options,t)},s.prototype.redraw=function(){if(0==this.options[this.side].visible||0==this.amountOfGroups||0==this.options.enabled)this.hide();else{this.show(),"top-left"==this.options[this.side].position||"bottom-left"==this.options[this.side].position?(this.dom.frame.style.left="4px",this.dom.frame.style.textAlign="left",this.dom.textArea.style.textAlign="left",this.dom.textArea.style.left=this.options.iconSize+15+"px",this.dom.textArea.style.right="",this.svg.style.left="0px",this.svg.style.right=""):(this.dom.frame.style.right="4px",this.dom.frame.style.textAlign="right",this.dom.textArea.style.textAlign="right",this.dom.textArea.style.right=this.options.iconSize+15+"px",this.dom.textArea.style.left="",this.svg.style.right="0px",this.svg.style.left=""),"top-left"==this.options[this.side].position||"top-right"==this.options[this.side].position?(this.dom.frame.style.top=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.bottom=""):(this.dom.frame.style.bottom=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.top=""),0==this.options.icons?(this.dom.frame.style.width=this.dom.textArea.offsetWidth+10+"px",this.dom.textArea.style.right="",this.dom.textArea.style.left="",this.svg.style.width="0px"):(this.dom.frame.style.width=this.options.iconSize+15+this.dom.textArea.offsetWidth+10+"px",this.drawLegendIcons());var t="";for(var e in this.groups)this.groups.hasOwnProperty(e)&&(t+=this.groups[e].content+" ");this.dom.textArea.innerHTML=t,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},s.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){n.prepareElements(this.svgElements);var t=window.getComputedStyle(this.dom.frame).paddingTop,e=Number(t.replace("px","")),i=e,s=this.options.iconSize,o=.75*this.options.iconSize,r=e+.5*o+3;this.svg.style.width=s+5+e+"px";for(var a in this.groups)this.groups.hasOwnProperty(a)&&(this.groups[a].drawIcon(i,r,this.svgElements,this.svg,s,o),r+=o+this.options.iconSpacing);n.cleanupElements(this.svgElements)}},t.exports=s},function(t,e,i){function s(t,e){this.id=o.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,align:"center"},catmullRom:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:"40px",visible:!0},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}}},this.options=o.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={};var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.body.emitter.on("rangechange",function(){if(0!=i.lastStart){var t=i.body.range.start-i.lastStart,e=i.body.range.end-i.body.range.start;if(0!=i.width){var s=i.width/e,o=t*s;i.svg.style.left=-i.width-o+"px"}}}),this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=o.option.asSize(-i.width),i._updateGraph.apply(i)}),this._create(),this.body.emitter.emit("change")}var o=i(1),n=i(2),r=i(3),a=i(4),h=i(18),d=i(21),l=i(22),c=i(25),p="__ungrouped__";s.prototype=new h,s.prototype._create=function(){var t=document.createElement("div");t.className="LineGraph",this.dom.frame=t,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="relative",this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",this.svg.style.display="block",t.appendChild(this.svg),this.options.dataAxis.orientation="left",this.yAxisLeft=new d(this.body,this.options.dataAxis,this.svg),this.options.dataAxis.orientation="right",this.yAxisRight=new d(this.body,this.options.dataAxis,this.svg),delete this.options.dataAxis.orientation,this.legendLeft=new c(this.body,this.options.legend,"left"),this.legendRight=new c(this.body,this.options.legend,"right"),this.show()},s.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort"];o.selectiveDeepExtend(e,this.options,t),o.mergeOptions(this.options,t,"catmullRom"),o.mergeOptions(this.options,t,"drawPoints"),o.mergeOptions(this.options,t,"shaded"),o.mergeOptions(this.options,t,"legend"),t.catmullRom&&"object"==typeof t.catmullRom&&t.catmullRom.parametrization&&("uniform"==t.catmullRom.parametrization?this.options.catmullRom.alpha=0:"chordal"==t.catmullRom.parametrization?this.options.catmullRom.alpha=1:(this.options.catmullRom.parametrization="centripetal",this.options.catmullRom.alpha=.5)),this.yAxisLeft&&void 0!==t.dataAxis&&(this.yAxisLeft.setOptions(this.options.dataAxis),this.yAxisRight.setOptions(this.options.dataAxis)),this.legendLeft&&void 0!==t.legend&&(this.legendLeft.setOptions(this.options.legend),this.legendRight.setOptions(this.options.legend)),this.groups.hasOwnProperty(p)&&this.groups[p].setOptions(t)}this.dom.frame&&this._updateGraph()},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(o.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;o.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e)}this._updateUngrouped(),this._updateGraph(),this.redraw()},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(o.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;o.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._onUpdate()},s.prototype._onUpdate=function(){this._updateUngrouped(),this._updateAllGroupData(),this._updateGraph(),this.redraw()},s.prototype._onAdd=function(t){this._onUpdate(t)},s.prototype._onRemove=function(t){this._onUpdate(t)},s.prototype._onUpdateGroups=function(t){for(var e=0;e0){for(s=0;su){e.push(f);break}e.push(f)}}else for(var g=0;gp&&f.x0){for(var p=0;pi?i:a,d=s>d?s:d):(r=!0,h=h>i?i:h,l=s>l?s:l)}1==n&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}return o=this._toggleAxisVisiblity(n,this.yAxisLeft)||o,o=this._toggleAxisVisiblity(r,this.yAxisRight)||o,1==r&&1==n?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!n,0==this.yAxisRight.master?(1==r&&(this.yAxisLeft.lineOffset=this.yAxisRight.width),o=this.yAxisLeft.redraw()||o,this.yAxisRight.stepPixelsForced=this.yAxisLeft.stepPixels,o=this.yAxisRight.redraw()||o):o=this.yAxisRight.redraw()||o,o},s.prototype._toggleAxisVisiblity=function(t,e){var i=!1;
+return 0==t?e.dom.frame.parentNode&&(e.hide(),i=!0):e.dom.frame.parentNode||(e.show(),i=!0),i},s.prototype._drawBarGraph=function(t,e){if(null!=t&&t.length>0){var i,s=.1*e.options.barChart.width,o=0,r=e.options.barChart.width;"left"==e.options.barChart.align?o-=.5*r:"right"==e.options.barChart.align&&(o+=.5*r);for(var a=0;a0&&(i=Math.min(i,Math.abs(t[a-1].x-t[a].x))),r>i&&(r=s>i?s:i),n.drawBar(t[a].x+o,t[a].y,r,e.zeroPosition-t[a].y,e.className+" bar",this.svgElements,this.svg);1==e.options.drawPoints.enabled&&this._drawPoints(t,e,this.svgElements,this.svg,o)}},s.prototype._drawLineGraph=function(t,e){if(null!=t&&t.length>0){var i,s,o=Number(this.svg.style.height.replace("px",""));if(i=n.getSVGElement("path",this.svgElements,this.svg),i.setAttributeNS(null,"class",e.className),s=1==e.options.catmullRom.enabled?this._catmullRom(t,e):this._linear(t),1==e.options.shaded.enabled){var r,a=n.getSVGElement("path",this.svgElements,this.svg);r="top"==e.options.shaded.orientation?"M"+t[0].x+",0 "+s+"L"+t[t.length-1].x+",0":"M"+t[0].x+","+o+" "+s+"L"+t[t.length-1].x+","+o,a.setAttributeNS(null,"class",e.className+" fill"),a.setAttributeNS(null,"d",r)}i.setAttributeNS(null,"d","M"+s),1==e.options.drawPoints.enabled&&this._drawPoints(t,e,this.svgElements,this.svg)}},s.prototype._drawPoints=function(t,e,i,s,o){void 0===o&&(o=0);for(var r=0;rp;p+=r)i=n(t[p].x)+this.width-1,s=t[p].y,o.push({x:i,y:s}),h=h>s?s:h,d=s>d?s:d;return{min:h,max:d,data:o}},s.prototype._convertYvalues=function(t,e){var i,s,o=[],n=this.yAxisLeft,r=Number(this.svg.style.height.replace("px",""));"right"==e.options.yAxisOrientation&&(n=this.yAxisRight);for(var a=0;al;l++)e=0==l?t[0]:t[l-1],i=t[l],s=t[l+1],o=d>l+2?t[l+2]:s,n={x:(-e.x+6*i.x+s.x)*h,y:(-e.y+6*i.y+s.y)*h},r={x:(i.x+6*s.x-o.x)*h,y:(i.y+6*s.y-o.y)*h},a+="C"+n.x+","+n.y+" "+r.x+","+r.y+" "+s.x+","+s.y+" ";return a},s.prototype._catmullRom=function(t,e){var i=e.options.catmullRom.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);for(var s,o,n,r,a,h,d,l,c,p,u,m,g,f,v,y,b,_,x,w=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",S=t.length,M=0;S-1>M;M++)s=0==M?t[0]:t[M-1],o=t[M],n=t[M+1],r=S>M+2?t[M+2]:n,d=Math.sqrt(Math.pow(s.x-o.x,2)+Math.pow(s.y-o.y,2)),l=Math.sqrt(Math.pow(o.x-n.x,2)+Math.pow(o.y-n.y,2)),c=Math.sqrt(Math.pow(n.x-r.x,2)+Math.pow(n.y-r.y,2)),f=Math.pow(c,i),y=Math.pow(c,2*i),v=Math.pow(l,i),b=Math.pow(l,2*i),x=Math.pow(d,i),_=Math.pow(d,2*i),p=2*_+3*x*v+b,u=2*y+3*f*v+b,m=3*x*(x+v),m>0&&(m=1/m),g=3*f*(f+v),g>0&&(g=1/g),a={x:(-b*s.x+p*o.x+_*n.x)*m,y:(-b*s.y+p*o.y+_*n.y)*m},h={x:(y*o.x+u*n.x-b*r.x)*g,y:(y*o.y+u*n.y-b*r.y)*g},0==a.x&&0==a.y&&(a=o),0==h.x&&0==h.y&&(h=n),w+="C"+a.x+","+a.y+" "+h.x+","+h.y+" "+n.x+","+n.y+" ";return w},s.prototype._linear=function(t){for(var e="",i=0;id;){d++;var l=n.getCurrent(),c=this.body.util.toScreen(l),p=n.isMajor();this.options.showMinorLabels&&this._repaintMinorText(c,n.getLabelMinor(),t),p&&this.options.showMajorLabels?(c>0&&(void 0==h&&(h=c),this._repaintMajorText(c,n.getLabelMajor(),t)),this._repaintMajorLine(c,t)):this._repaintMinorLine(c,t),n.next()}if(this.options.showMajorLabels){var u=this.body.util.toTime(0),m=n.getLabelMajor(u),g=m.length*(this.props.majorCharWidth||10)+10;(void 0==h||h>g)&&this._repaintMajorText(0,m,t)}o.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},s.prototype._repaintMinorText=function(t,e,i){var s=this.dom.redundant.minorTexts.shift();if(!s){var o=document.createTextNode("");s=document.createElement("div"),s.appendChild(o),s.className="text minor",this.dom.foreground.appendChild(s)}this.dom.minorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?this.props.majorLabelHeight+"px":"0",s.style.left=t+"px"},s.prototype._repaintMajorText=function(t,e,i){var s=this.dom.redundant.majorTexts.shift();if(!s){var o=document.createTextNode(e);s=document.createElement("div"),s.className="text major",s.appendChild(o),this.dom.foreground.appendChild(s)}this.dom.majorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?"0":this.props.minorLabelHeight+"px",s.style.left=t+"px"},s.prototype._repaintMinorLine=function(t,e){var i=this.dom.redundant.minorLines.shift();i||(i=document.createElement("div"),i.className="grid vertical minor",this.dom.background.appendChild(i)),this.dom.minorLines.push(i);var s=this.props;i.style.top="top"==e?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",i.style.height=s.minorLineHeight+"px",i.style.left=t-s.minorLineWidth/2+"px"},s.prototype._repaintMajorLine=function(t,e){var i=this.dom.redundant.majorLines.shift();i||(i=document.createElement("DIV"),i.className="grid vertical major",this.dom.background.appendChild(i)),this.dom.majorLines.push(i);var s=this.props;i.style.top="top"==e?"0":this.body.domProps.top.height+"px",i.style.left=t-s.majorLineWidth/2+"px",i.style.height=s.majorLineHeight+"px"},s.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="text minor measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="text minor measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth},s.prototype.snap=function(t){return this.step.snap(t)},t.exports=s},function(t,e,i){function s(t,e,i){this.id=null,this.parent=null,this.data=t,this.dom=null,this.conversion=e||{},this.options=i||{},this.selected=!1,this.displayed=!1,this.dirty=!0,this.top=null,this.left=null,this.width=null,this.height=null}var o=i(41);s.prototype.select=function(){this.selected=!0,this.displayed&&this.redraw()},s.prototype.unselect=function(){this.selected=!1,this.displayed&&this.redraw()},s.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},s.prototype.isVisible=function(){return!1},s.prototype.show=function(){return!1},s.prototype.hide=function(){return!1},s.prototype.redraw=function(){},s.prototype.repositionX=function(){},s.prototype.repositionY=function(){},s.prototype._repaintDeleteButton=function(t){if(this.selected&&this.options.editable.remove&&!this.dom.deleteButton){var e=this,i=document.createElement("div");i.className="delete",i.title="Delete this item",o(i,{preventDefault:!0}).on("tap",function(t){e.parent.removeFromDataSet(e),t.stopPropagation()}),t.appendChild(i),this.dom.deleteButton=i}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},t.exports=s},function(t,e,i){function s(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);o.call(this,t,e,i)}var o=i(28);s.prototype=new o(null,null,null),s.prototype.isVisible=function(t){var e=(t.end-t.start)/4;return this.data.start>t.start-e&&this.data.startt.start-e&&this.data.startt.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),t.box["timeline-item"]=this),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.foreground;if(!e)throw new Error("Cannot redraw time axis: parent has no foreground container element");e.appendChild(t.box)}if(this.displayed=!0,this.data.content!=this.content){if(this.content=this.data.content,this.content instanceof Element)t.content.innerHTML="",t.content.appendChild(this.content);else{if(void 0==this.data.content)throw new Error('Property "content" missing in item '+this.data.id);t.content.innerHTML=this.content}this.dirty=!0}this.data.title!=this.title&&(t.box.title=this.data.title,this.title=this.data.title);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");this.className!=i&&(this.className=i,t.box.className=this.baseClassName+i,this.dirty=!0),this.dirty&&(this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.props.content.width=this.dom.content.offsetWidth,this.height=this.dom.box.offsetHeight,this.dirty=!1),this._repaintDeleteButton(t.box),this._repaintDragLeft(),this._repaintDragRight()},s.prototype.show=function(){this.displayed||this.redraw()},s.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.top=null,this.left=null,this.displayed=!1}},s.prototype.repositionX=function(){var t,e=this.props,i=this.parent.width,s=this.conversion.toScreen(this.data.start),o=this.conversion.toScreen(this.data.end),n=this.options.padding;-i>s&&(s=-i),o>2*i&&(o=2*i);var r=Math.max(o-s,1);this.overflow?(t=Math.max(-s,0),this.left=s,this.width=r+this.props.content.width):(t=0>s?Math.min(-s,o-s-e.content.width-2*n):0,this.left=s,this.width=r),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=r+"px",this.dom.content.style.left=t+"px"},s.prototype.repositionY=function(){var t=this.options.orientation,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},s.prototype._repaintDragLeft=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="drag-left",t.dragLeftItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragLeft=t}else!this.selected&&this.dom.dragLeft&&(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},s.prototype._repaintDragRight=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="drag-right",t.dragRightItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragRight=t}else!this.selected&&this.dom.dragRight&&(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this._initializeMixinLoaders(),this.containerElement=t,this.width="100%",this.height="100%",this.renderRefreshRate=60,this.renderTimestep=1e3/this.renderRefreshRate,this.renderTime=.5*this.renderTimestep,this.maxPhysicsTicksPerRender=3,this.physicsDiscreteStepsize=.5,this.stabilize=!0,this.selectable=!0,this.initializing=!0,this.triggerFunctions={add:null,edit:null,editEdge:null,connect:null,del:null},this.constants={nodes:{radiusMin:10,radiusMax:30,radius:10,shape:"ellipse",image:void 0,widthMin:16,widthMax:64,fixed:!1,fontColor:"black",fontSize:14,fontFace:"verdana",level:-1,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},borderColor:"#2B7CE9",backgroundColor:"#97C2FC",highlightColor:"#D2E5FF",group:void 0,borderWidth:1},edges:{widthMin:1,widthMax:15,width:1,widthSelectionMultiplier:2,hoverWidth:1.5,style:"line",color:{color:"#848484",highlight:"#848484",hover:"#848484"},fontColor:"#343434",fontSize:14,fontFace:"arial",fontFill:"white",arrowScaleFactor:1,dash:{length:10,gap:5,altLength:void 0},inheritColor:"from"},configurePhysics:!1,physics:{barnesHut:{enabled:!0,theta:1/.6,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09},repulsion:{centralGravity:0,springLength:200,springConstant:.05,nodeDistance:100,damping:.09},hierarchicalRepulsion:{enabled:!1,centralGravity:0,springLength:100,springConstant:.01,nodeDistance:150,damping:.09},damping:null,centralGravity:null,springLength:null,springConstant:null},clustering:{enabled:!1,initialMaxNodes:100,clusterThreshold:500,reduceToNodes:300,chainThreshold:.4,clusterEdgeThreshold:20,sectorThreshold:100,screenSizeThreshold:.2,fontSizeMultiplier:4,maxFontSize:1e3,forceAmplification:.1,distanceAmplification:.1,edgeGrowth:20,nodeScaling:{width:1,height:1,radius:1},maxNodeSizeIncrements:600,activeAreaBoxSize:80,clusterLevelDifference:2},navigation:{enabled:!1},keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02}},dataManipulation:{enabled:!1,initiallyVisible:!1},hierarchicalLayout:{enabled:!1,levelSeparation:150,nodeSpacing:100,direction:"UD"},freezeForStabilization:!1,smoothCurves:{enabled:!0,dynamic:!0,type:"continuous",roundness:.5},dynamicSmoothCurves:!0,maxVelocity:30,minVelocity:.1,stabilizationIterations:1e3,labels:{add:"Add Node",edit:"Edit",link:"Add Link",del:"Delete selected",editNode:"Edit Node",editEdge:"Edit Edge",back:"Back",addDescription:"Click in an empty space to place a new node.",linkDescription:"Click on a node and drag the edge to another node to connect them.",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",addError:"The function for add does not support two arguments (data,callback).",linkError:"The function for connect does not support two arguments (data,callback).",editError:"The function for edit does not support two arguments (data, callback).",editBoundError:"No edit function has been bound to this button.",deleteError:"The function for delete does not support two arguments (data, callback).",deleteClusterError:"Clusters cannot be deleted."},tooltip:{delay:300,fontColor:"black",fontSize:14,fontFace:"verdana",color:{border:"#666",background:"#FFFFC6"}},dragNetwork:!0,dragNodes:!0,zoomable:!0,hover:!1,hideEdgesOnDrag:!1,hideNodesOnDrag:!1},this.hoverObj={nodes:{},edges:{}},this.controlNodesActive=!1;var o=this;this.groups=new u,this.images=new m,this.images.setOnloadCallback(function(){o._redraw()}),this.xIncrement=0,this.yIncrement=0,this.zoomIncrement=0,this._loadPhysicsSystem(),this._create(),this._loadSectorSystem(),this._loadClusterSystem(),this._loadSelectionSystem(),this._loadHierarchySystem(),this._setTranslation(this.frame.clientWidth/2,this.frame.clientHeight/2),this._setScale(1),this.setOptions(i),this.freezeSimulation=!1,this.cachedFunctions={},this.calculationNodes={},this.calculationNodeIndices=[],this.nodeIndices=[],this.nodes={},this.edges={},this.canvasTopLeft={x:0,y:0},this.canvasBottomRight={x:0,y:0},this.pointerPosition={x:0,y:0},this.areaCenter={},this.scale=1,this.previousScale=this.scale,this.nodesData=null,this.edgesData=null,this.nodesListeners={add:function(t,e){o._addNodes(e.items),o.start()},update:function(t,e){o._updateNodes(e.items),o.start()},remove:function(t,e){o._removeNodes(e.items),o.start()}},this.edgesListeners={add:function(t,e){o._addEdges(e.items),o.start()},update:function(t,e){o._updateEdges(e.items),o.start()},remove:function(t,e){o._removeEdges(e.items),o.start()}},this.moving=!0,this.timer=void 0,this.setData(e,this.constants.clustering.enabled||this.constants.hierarchicalLayout.enabled),this.initializing=!1,1==this.constants.hierarchicalLayout.enabled?this._setupHierarchicalLayout():0==this.stabilize&&this.zoomExtent(!0,this.constants.clustering.enabled),this.constants.clustering.enabled&&this.startWithClustering()}var o=i(45),n=i(41),r=i(46),a=i(1),h=i(42),d=i(3),l=i(4),c=i(38),p=i(39),u=i(34),m=i(35),g=i(36),f=i(33),v=i(37),y=i(44);i(43),o(s.prototype),s.prototype._getScriptPath=function(){for(var t=document.getElementsByTagName("script"),e=0;et.x&&(s=t.x),ot.y&&(e=t.y),i=this.constants.clustering.initialMaxNodes?49.07548/(o+142.05338)+91444e-8:12.662/(o+7.4147)+.0964822:1==this.constants.clustering.enabled&&o>=this.constants.clustering.initialMaxNodes?77.5271985/(o+187.266146)+476710517e-13:30.5062972/(o+19.93597763)+.08413486;var n=Math.min(this.frame.canvas.clientWidth/600,this.frame.canvas.clientHeight/600);i*=n}else{var r=1.1*(Math.abs(s.minX)+Math.abs(s.maxX)),a=1.1*(Math.abs(s.minY)+Math.abs(s.maxY)),h=this.frame.canvas.clientWidth/r,d=this.frame.canvas.clientHeight/a;i=d>=h?h:d}i>1&&(i=1),this._setScale(i),this._centerNetwork(s),0==e&&(this.moving=!0,this.start())},s.prototype._updateNodeIndexList=function(){this._clearNodeIndexList();for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodeIndices.push(t)},s.prototype.setData=function(t,e){if(void 0===e&&(e=!1),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){if(t&&t.dot){var i=c.DOTToGraph(t.dot);return void this.setData(i)}}else if(t&&t.gephi){if(t&&t.gephi){var s=p.parseGephi(t.gephi);return void this.setData(s)}}else this._setNodes(t&&t.nodes),this._setEdges(t&&t.edges);if(this._putDataInSector(),!e)if(this.stabilize){var o=this;setTimeout(function(){o._stabilize(),o.start()},0)}else this.start()},s.prototype.setOptions=function(t){if(t){var e;if(void 0!==t.width&&(this.width=t.width),void 0!==t.height&&(this.height=t.height),void 0!==t.stabilize&&(this.stabilize=t.stabilize),void 0!==t.selectable&&(this.selectable=t.selectable),void 0!==t.freezeForStabilization&&(this.constants.freezeForStabilization=t.freezeForStabilization),void 0!==t.configurePhysics&&(this.constants.configurePhysics=t.configurePhysics),void 0!==t.stabilizationIterations&&(this.constants.stabilizationIterations=t.stabilizationIterations),void 0!==t.dragNetwork&&(this.constants.dragNetwork=t.dragNetwork),void 0!==t.dragNodes&&(this.constants.dragNodes=t.dragNodes),void 0!==t.zoomable&&(this.constants.zoomable=t.zoomable),void 0!==t.hover&&(this.constants.hover=t.hover),void 0!==t.hideEdgesOnDrag&&(this.constants.hideEdgesOnDrag=t.hideEdgesOnDrag),void 0!==t.hideNodesOnDrag&&(this.constants.hideNodesOnDrag=t.hideNodesOnDrag),void 0!==t.dragGraph)throw new Error("Option dragGraph is renamed to dragNetwork");if(void 0!==t.labels)for(e in t.labels)t.labels.hasOwnProperty(e)&&(this.constants.labels[e]=t.labels[e]);if(t.onAdd&&(this.triggerFunctions.add=t.onAdd),t.onEdit&&(this.triggerFunctions.edit=t.onEdit),t.onEditEdge&&(this.triggerFunctions.editEdge=t.onEditEdge),t.onConnect&&(this.triggerFunctions.connect=t.onConnect),t.onDelete&&(this.triggerFunctions.del=t.onDelete),t.physics){if(t.physics.barnesHut){this.constants.physics.barnesHut.enabled=!0;for(e in t.physics.barnesHut)t.physics.barnesHut.hasOwnProperty(e)&&(this.constants.physics.barnesHut[e]=t.physics.barnesHut[e])}if(t.physics.repulsion){this.constants.physics.barnesHut.enabled=!1;for(e in t.physics.repulsion)t.physics.repulsion.hasOwnProperty(e)&&(this.constants.physics.repulsion[e]=t.physics.repulsion[e])}if(t.physics.hierarchicalRepulsion){this.constants.hierarchicalLayout.enabled=!0,this.constants.physics.hierarchicalRepulsion.enabled=!0,this.constants.physics.barnesHut.enabled=!1;for(e in t.physics.hierarchicalRepulsion)t.physics.hierarchicalRepulsion.hasOwnProperty(e)&&(this.constants.physics.hierarchicalRepulsion[e]=t.physics.hierarchicalRepulsion[e])}}if(void 0!==t.smoothCurves)if("boolean"==typeof t.smoothCurves)this.constants.smoothCurves.enabled=t.smoothCurves;else{this.constants.smoothCurves.enabled=!0;for(e in t.smoothCurves)t.smoothCurves.hasOwnProperty(e)&&(this.constants.smoothCurves[e]=t.smoothCurves[e])}if(t.hierarchicalLayout){this.constants.hierarchicalLayout.enabled=!0;for(e in t.hierarchicalLayout)t.hierarchicalLayout.hasOwnProperty(e)&&(this.constants.hierarchicalLayout[e]=t.hierarchicalLayout[e])}else void 0!==t.hierarchicalLayout&&(this.constants.hierarchicalLayout.enabled=!1);if(t.clustering){this.constants.clustering.enabled=!0;for(e in t.clustering)t.clustering.hasOwnProperty(e)&&(this.constants.clustering[e]=t.clustering[e])}else void 0!==t.clustering&&(this.constants.clustering.enabled=!1);if(t.navigation){this.constants.navigation.enabled=!0;for(e in t.navigation)t.navigation.hasOwnProperty(e)&&(this.constants.navigation[e]=t.navigation[e])}else void 0!==t.navigation&&(this.constants.navigation.enabled=!1);if(t.keyboard){this.constants.keyboard.enabled=!0;for(e in t.keyboard)t.keyboard.hasOwnProperty(e)&&(this.constants.keyboard[e]=t.keyboard[e])}else void 0!==t.keyboard&&(this.constants.keyboard.enabled=!1);if(t.dataManipulation){this.constants.dataManipulation.enabled=!0;for(e in t.dataManipulation)t.dataManipulation.hasOwnProperty(e)&&(this.constants.dataManipulation[e]=t.dataManipulation[e]);this.editMode=this.constants.dataManipulation.initiallyVisible}else void 0!==t.dataManipulation&&(this.constants.dataManipulation.enabled=!1);if(t.edges){for(e in t.edges)t.edges.hasOwnProperty(e)&&"object"!=typeof t.edges[e]&&(this.constants.edges[e]=t.edges[e]);void 0!==t.edges.color&&(a.isString(t.edges.color)?(this.constants.edges.color={},this.constants.edges.color.color=t.edges.color,this.constants.edges.color.highlight=t.edges.color,this.constants.edges.color.hover=t.edges.color):(void 0!==t.edges.color.color&&(this.constants.edges.color.color=t.edges.color.color),void 0!==t.edges.color.highlight&&(this.constants.edges.color.highlight=t.edges.color.highlight),void 0!==t.edges.color.hover&&(this.constants.edges.color.hover=t.edges.color.hover))),t.edges.fontColor||void 0!==t.edges.color&&(a.isString(t.edges.color)?this.constants.edges.fontColor=t.edges.color:void 0!==t.edges.color.color&&(this.constants.edges.fontColor=t.edges.color.color)),t.edges.dash&&(void 0!==t.edges.dash.length&&(this.constants.edges.dash.length=t.edges.dash.length),void 0!==t.edges.dash.gap&&(this.constants.edges.dash.gap=t.edges.dash.gap),void 0!==t.edges.dash.altLength&&(this.constants.edges.dash.altLength=t.edges.dash.altLength))
+}if(t.nodes){for(e in t.nodes)t.nodes.hasOwnProperty(e)&&(this.constants.nodes[e]=t.nodes[e]);t.nodes.color&&(this.constants.nodes.color=a.parseColor(t.nodes.color))}if(t.groups)for(var i in t.groups)if(t.groups.hasOwnProperty(i)){var s=t.groups[i];this.groups.add(i,s)}if(t.tooltip){for(e in t.tooltip)t.tooltip.hasOwnProperty(e)&&(this.constants.tooltip[e]=t.tooltip[e]);t.tooltip.color&&(this.constants.tooltip.color=a.parseColor(t.tooltip.color))}}this._loadPhysicsSystem(),this._loadNavigationControls(),this._loadManipulationSystem(),this._configureSmoothCurves(),this._createKeyBinds(),this.setSize(this.width,this.height),this.moving=!0,this.start()},s.prototype._create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);if(this.frame=document.createElement("div"),this.frame.className="network-frame",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),!this.frame.canvas.getContext){var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t)}var e=this;this.drag={},this.pinch={},this.hammer=n(this.frame.canvas,{prevent_default:!0}),this.hammer.on("tap",e._onTap.bind(e)),this.hammer.on("doubletap",e._onDoubleTap.bind(e)),this.hammer.on("hold",e._onHold.bind(e)),this.hammer.on("pinch",e._onPinch.bind(e)),this.hammer.on("touch",e._onTouch.bind(e)),this.hammer.on("dragstart",e._onDragStart.bind(e)),this.hammer.on("drag",e._onDrag.bind(e)),this.hammer.on("dragend",e._onDragEnd.bind(e)),this.hammer.on("release",e._onRelease.bind(e)),this.hammer.on("mousewheel",e._onMouseWheel.bind(e)),this.hammer.on("DOMMouseScroll",e._onMouseWheel.bind(e)),this.hammer.on("mousemove",e._onMouseMoveTitle.bind(e)),this.containerElement.appendChild(this.frame)},s.prototype._createKeyBinds=function(){var t=this;this.mousetrap=r,this.mousetrap.reset(),1==this.constants.keyboard.enabled&&(this.mousetrap.bind("up",this._moveUp.bind(t),"keydown"),this.mousetrap.bind("up",this._yStopMoving.bind(t),"keyup"),this.mousetrap.bind("down",this._moveDown.bind(t),"keydown"),this.mousetrap.bind("down",this._yStopMoving.bind(t),"keyup"),this.mousetrap.bind("left",this._moveLeft.bind(t),"keydown"),this.mousetrap.bind("left",this._xStopMoving.bind(t),"keyup"),this.mousetrap.bind("right",this._moveRight.bind(t),"keydown"),this.mousetrap.bind("right",this._xStopMoving.bind(t),"keyup"),this.mousetrap.bind("=",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("=",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("-",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("-",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("[",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("[",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("]",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("]",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("pageup",this._zoomIn.bind(t),"keydown"),this.mousetrap.bind("pageup",this._stopZoom.bind(t),"keyup"),this.mousetrap.bind("pagedown",this._zoomOut.bind(t),"keydown"),this.mousetrap.bind("pagedown",this._stopZoom.bind(t),"keyup")),1==this.constants.dataManipulation.enabled&&(this.mousetrap.bind("escape",this._createManipulatorBar.bind(t)),this.mousetrap.bind("del",this._deleteSelected.bind(t)))},s.prototype._getPointer=function(t){return{x:t.pageX-a.getAbsoluteLeft(this.frame.canvas),y:t.pageY-a.getAbsoluteTop(this.frame.canvas)}},s.prototype._onTouch=function(t){this.drag.pointer=this._getPointer(t.gesture.center),this.drag.pinched=!1,this.pinch.scale=this._getScale(),this._handleTouch(this.drag.pointer)},s.prototype._onDragStart=function(){this._handleDragStart()},s.prototype._handleDragStart=function(){var t=this.drag,e=this._getNodeAt(t.pointer);if(t.dragging=!0,t.selection=[],t.translation=this._getTranslation(),t.nodeId=null,null!=e){t.nodeId=e.id,e.isSelected()||this._selectObject(e,!1);for(var i in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(i)){var s=this.selectionObj.nodes[i],o={id:s.id,node:s,x:s.x,y:s.y,xFixed:s.xFixed,yFixed:s.yFixed};s.xFixed=!0,s.yFixed=!0,t.selection.push(o)}}},s.prototype._onDrag=function(t){this._handleOnDrag(t)},s.prototype._handleOnDrag=function(t){if(!this.drag.pinched){var e=this._getPointer(t.gesture.center),i=this,s=this.drag,o=s.selection;if(o&&o.length&&1==this.constants.dragNodes){var n=e.x-s.pointer.x,r=e.y-s.pointer.y;o.forEach(function(t){var e=t.node;t.xFixed||(e.x=i._XconvertDOMtoCanvas(i._XconvertCanvasToDOM(t.x)+n)),t.yFixed||(e.y=i._YconvertDOMtoCanvas(i._YconvertCanvasToDOM(t.y)+r))}),this.moving||(this.moving=!0,this.start())}else if(1==this.constants.dragNetwork){var a=e.x-this.drag.pointer.x,h=e.y-this.drag.pointer.y;this._setTranslation(this.drag.translation.x+a,this.drag.translation.y+h),this._redraw()}}},s.prototype._onDragEnd=function(){this.drag.dragging=!1;var t=this.drag.selection;t&&t.length?(t.forEach(function(t){t.node.xFixed=t.xFixed,t.node.yFixed=t.yFixed}),this.moving=!0,this.start()):this._redraw()},s.prototype._onTap=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleTap(e)},s.prototype._onDoubleTap=function(t){var e=this._getPointer(t.gesture.center);this._handleDoubleTap(e)},s.prototype._onHold=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleOnHold(e)},s.prototype._onRelease=function(t){var e=this._getPointer(t.gesture.center);this._handleOnRelease(e)},s.prototype._onPinch=function(t){var e=this._getPointer(t.gesture.center);this.drag.pinched=!0,"scale"in this.pinch||(this.pinch.scale=1);var i=this.pinch.scale*t.gesture.scale;this._zoom(i,e)},s.prototype._zoom=function(t,e){if(1==this.constants.zoomable){var i=this._getScale();1e-5>t&&(t=1e-5),t>10&&(t=10);var s=null;void 0!==this.drag&&1==this.drag.dragging&&(s=this.DOMtoCanvas(this.drag.pointer));var o=this._getTranslation(),n=t/i,r=(1-n)*e.x+o.x*n,a=(1-n)*e.y+o.y*n;if(this.areaCenter={x:this._XconvertDOMtoCanvas(e.x),y:this._YconvertDOMtoCanvas(e.y)},this._setScale(t),this._setTranslation(r,a),this.updateClustersDefault(),null!=s){var h=this.canvasToDOM(s);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}return this._redraw(),t>i?this.emit("zoom",{direction:"+"}):this.emit("zoom",{direction:"-"}),t}},s.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i=this._getScale(),s=e/10;0>e&&(s/=1-s),i*=1+s;var o=h.fakeGesture(this,t),n=this._getPointer(o.center);this._zoom(i,n)}t.preventDefault()},s.prototype._onMouseMoveTitle=function(t){var e=h.fakeGesture(this,t),i=this._getPointer(e.center);this.popupObj&&this._checkHidePopup(i);var s=this,o=function(){s._checkShowPopup(i)};if(this.popupTimer&&clearInterval(this.popupTimer),this.drag.dragging||(this.popupTimer=setTimeout(o,this.constants.tooltip.delay)),1==this.constants.hover){for(var n in this.hoverObj.edges)this.hoverObj.edges.hasOwnProperty(n)&&(this.hoverObj.edges[n].hover=!1,delete this.hoverObj.edges[n]);var r=this._getNodeAt(i);null==r&&(r=this._getEdgeAt(i)),null!=r&&this._hoverObject(r);for(var a in this.hoverObj.nodes)this.hoverObj.nodes.hasOwnProperty(a)&&(r instanceof g&&r.id!=a||r instanceof f||null==r)&&(this._blurObject(this.hoverObj.nodes[a]),delete this.hoverObj.nodes[a]);this.redraw()}},s.prototype._checkShowPopup=function(t){var e,i={left:this._XconvertDOMtoCanvas(t.x),top:this._YconvertDOMtoCanvas(t.y),right:this._XconvertDOMtoCanvas(t.x),bottom:this._YconvertDOMtoCanvas(t.y)},s=this.popupObj;if(void 0==this.popupObj){var o=this.nodes;for(e in o)if(o.hasOwnProperty(e)){var n=o[e];if(void 0!==n.getTitle()&&n.isOverlappingWith(i)){this.popupObj=n;break}}}if(void 0===this.popupObj){var r=this.edges;for(e in r)if(r.hasOwnProperty(e)){var a=r[e];if(a.connected&&void 0!==a.getTitle()&&a.isOverlappingWith(i)){this.popupObj=a;break}}}if(this.popupObj){if(this.popupObj!=s){var h=this;h.popup||(h.popup=new v(h.frame,h.constants.tooltip)),h.popup.setPosition(t.x-3,t.y-3),h.popup.setText(h.popupObj.getTitle()),h.popup.show()}}else this.popup&&this.popup.hide()},s.prototype._checkHidePopup=function(t){this.popupObj&&this._getNodeAt(t)||(this.popupObj=void 0,this.popup&&this.popup.hide())},s.prototype.setSize=function(t,e){this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth,this.frame.canvas.height=this.frame.canvas.clientHeight,void 0!==this.manipulationDiv&&(this.manipulationDiv.style.width=this.frame.canvas.clientWidth+"px"),void 0!==this.navigationDivs&&void 0!==this.navigationDivs.wrapper&&(this.navigationDivs.wrapper.style.width=this.frame.canvas.clientWidth+"px",this.navigationDivs.wrapper.style.height=this.frame.canvas.clientHeight+"px"),this.emit("resize",{width:this.frame.canvas.width,height:this.frame.canvas.height})},s.prototype._setNodes=function(t){var e=this.nodesData;if(t instanceof d||t instanceof l)this.nodesData=t;else if(t instanceof Array)this.nodesData=new d,this.nodesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.nodesData=new d}if(e&&a.forEach(this.nodesListeners,function(t,i){e.off(i,t)}),this.nodes={},this.nodesData){var i=this;a.forEach(this.nodesListeners,function(t,e){i.nodesData.on(e,t)});var s=this.nodesData.getIds();this._addNodes(s)}this._updateSelection()},s.prototype._addNodes=function(t){for(var e,i=0,s=t.length;s>i;i++){e=t[i];var o=this.nodesData.get(e),n=new g(o,this.images,this.groups,this.constants);if(this.nodes[e]=n,!(0!=n.xFixed&&0!=n.yFixed||null!==n.x&&null!==n.y)){var r=1*t.length,a=2*Math.PI*Math.random();0==n.xFixed&&(n.x=r*Math.cos(a)),0==n.yFixed&&(n.y=r*Math.sin(a))}this.moving=!0}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateValueRange(this.nodes),this.updateLabels()},s.prototype._updateNodes=function(t){for(var e=this.nodes,i=this.nodesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n],a=i.get(n);r?r.setProperties(a,this.constants):(r=new g(properties,this.images,this.groups,this.constants),e[n]=r)}this.moving=!0,1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateNodeIndexList(),this._reconnectEdges(),this._updateValueRange(e)},s.prototype._removeNodes=function(t){for(var e=this.nodes,i=0,s=t.length;s>i;i++){var o=t[i];delete e[o]}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateSelection(),this._updateValueRange(e)},s.prototype._setEdges=function(t){var e=this.edgesData;if(t instanceof d||t instanceof l)this.edgesData=t;else if(t instanceof Array)this.edgesData=new d,this.edgesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.edgesData=new d}if(e&&a.forEach(this.edgesListeners,function(t,i){e.off(i,t)}),this.edges={},this.edgesData){var i=this;a.forEach(this.edgesListeners,function(t,e){i.edgesData.on(e,t)});var s=this.edgesData.getIds();this._addEdges(s)}this._reconnectEdges()},s.prototype._addEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n];r&&r.disconnect();var a=i.get(n,{showInternalIds:!0});e[n]=new f(a,this,this.constants)}this.moving=!0,this._updateValueRange(e),this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._updateEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=i.get(n),a=e[n];a?(a.disconnect(),a.setProperties(r,this.constants),a.connect()):(a=new f(r,this,this.constants),this.edges[n]=a)}this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this.moving=!0,this._updateValueRange(e)},s.prototype._removeEdges=function(t){for(var e=this.edges,i=0,s=t.length;s>i;i++){var o=t[i],n=e[o];n&&(null!=n.via&&delete this.sectors.support.nodes[n.via.id],n.disconnect(),delete e[o])}this.moving=!0,this._updateValueRange(e),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._reconnectEdges=function(){var t,e=this.nodes,i=this.edges;for(t in e)e.hasOwnProperty(t)&&(e[t].edges=[]);for(t in i)if(i.hasOwnProperty(t)){var s=i[t];s.from=null,s.to=null,s.connect()}},s.prototype._updateValueRange=function(t){var e,i=void 0,s=void 0;for(e in t)if(t.hasOwnProperty(e)){var o=t[e].getValue();void 0!==o&&(i=void 0===i?o:Math.min(o,i),s=void 0===s?o:Math.max(o,s))}if(void 0!==i&&void 0!==s)for(e in t)t.hasOwnProperty(e)&&t[e].setValueRange(i,s)},s.prototype.redraw=function(){this.setSize(this.width,this.height),this._redraw()},s.prototype._redraw=function(){var t=this.frame.canvas.getContext("2d"),e=this.frame.canvas.width,i=this.frame.canvas.height;t.clearRect(0,0,e,i),t.save(),t.translate(this.translation.x,this.translation.y),t.scale(this.scale,this.scale),this.canvasTopLeft={x:this._XconvertDOMtoCanvas(0),y:this._YconvertDOMtoCanvas(0)},this.canvasBottomRight={x:this._XconvertDOMtoCanvas(this.frame.canvas.clientWidth),y:this._YconvertDOMtoCanvas(this.frame.canvas.clientHeight)},this._doInAllSectors("_drawAllSectorNodes",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideEdgesOnDrag)&&this._doInAllSectors("_drawEdges",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideNodesOnDrag)&&this._doInAllSectors("_drawNodes",t,!1),1==this.controlNodesActive&&this._doInAllSectors("_drawControlNodes",t),t.restore()},s.prototype._setTranslation=function(t,e){void 0===this.translation&&(this.translation={x:0,y:0}),void 0!==t&&(this.translation.x=t),void 0!==e&&(this.translation.y=e),this.emit("viewChanged")},s.prototype._getTranslation=function(){return{x:this.translation.x,y:this.translation.y}},s.prototype._setScale=function(t){this.scale=t},s.prototype._getScale=function(){return this.scale},s.prototype._XconvertDOMtoCanvas=function(t){return(t-this.translation.x)/this.scale},s.prototype._XconvertCanvasToDOM=function(t){return t*this.scale+this.translation.x},s.prototype._YconvertDOMtoCanvas=function(t){return(t-this.translation.y)/this.scale},s.prototype._YconvertCanvasToDOM=function(t){return t*this.scale+this.translation.y},s.prototype.canvasToDOM=function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}},s.prototype.DOMtoCanvas=function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}},s.prototype._drawNodes=function(t,e){void 0===e&&(e=!1);var i=this.nodes,s=[];for(var o in i)i.hasOwnProperty(o)&&(i[o].setScaleAndPos(this.scale,this.canvasTopLeft,this.canvasBottomRight),i[o].isSelected()?s.push(o):(i[o].inArea()||e)&&i[o].draw(t));for(var n=0,r=s.length;r>n;n++)(i[s[n]].inArea()||e)&&i[s[n]].draw(t)},s.prototype._drawEdges=function(t){var e=this.edges;for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];s.setScale(this.scale),s.connected&&e[i].draw(t)}},s.prototype._drawControlNodes=function(t){var e=this.edges;for(var i in e)e.hasOwnProperty(i)&&e[i]._drawControlNodes(t)},s.prototype._stabilize=function(){1==this.constants.freezeForStabilization&&this._freezeDefinedNodes();for(var t=0;this.moving&&t0)for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStepLimited(e,this.constants.maxVelocity),s=!0);else for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStep(e),s=!0);if(1==s){var o=this.constants.minVelocity/Math.max(this.scale,.05);o>.5*this.constants.maxVelocity?this.moving=!0:(this.moving=this._isMoving(o),0==this.moving&&this.emit("stabilized",{iterations:null}),this.moving=this.moving||this.configurePhysics)}},s.prototype._physicsTick=function(){this.freezeSimulation||1==this.moving&&(this._doInAllActiveSectors("_initializeForceCalculation"),this._doInAllActiveSectors("_discreteStepNodes"),1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic&&this._doInSupportSector("_discreteStepNodes"),this._findCenter(this._getRange()))},s.prototype._animationStep=function(){this.timer=void 0,this._handleNavigation(),this.start();var t=Date.now(),e=1;this._physicsTick();for(var i=Date.now()-t;i<.9*(this.renderTimestep-this.renderTime)&&eh}return!1},s.prototype._getColor=function(){var t=this.color;return"to"==this.inheritColor?t={highlight:this.to.color.highlight.border,hover:this.to.color.hover.border,color:this.to.color.border}:("from"==this.inheritColor||1==this.inheritColor)&&(t={highlight:this.from.color.highlight.border,hover:this.from.color.hover.border,color:this.from.color.border}),1==this.selected?t.highlight:1==this.hover?t.hover:t.color},s.prototype._drawLine=function(t){if(t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth(),this.from!=this.to){var e,i=this._line(t);if(this.label){if(1==this.smoothCurves.enabled&&null!=i){var s=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),o=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:s,y:o}}else e=this._pointOnLine(.5);this._label(t,this.label,e.x,e.y)}}else{var n,r,a=this.length/4,h=this.from;h.width||h.resize(t),h.width>h.height?(n=h.x+h.width/2,r=h.y-a):(n=h.x+a,r=h.y-h.height/2),this._circle(t,n,r,a),e=this._pointOnCircle(n,r,a,.5),this._label(t,this.label,e.x,e.y)}},s.prototype._getLineWidth=function(){return 1==this.selected?Math.min(this.widthSelected,this.widthMax)*this.networkScaleInv:1==this.hover?Math.min(this.hoverWidth,this.widthMax)*this.networkScaleInv:this.width*this.networkScaleInv},s.prototype._getViaCoordinates=function(){var t=null,e=null,i=this.smoothCurves.roundness,s=this.smoothCurves.type,o=Math.abs(this.from.x-this.to.x),n=Math.abs(this.from.y-this.to.y);return"discrete"==s||"diagonalCross"==s?Math.abs(this.from.x-this.to.x)this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n)),"discrete"==s&&(t=i*n>o?this.from.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o)),"discrete"==s&&(e=i*o>n?this.from.y:e)):"straightCross"==s?Math.abs(this.from.x-this.to.x)Math.abs(this.from.y-this.to.y)&&(t=this.from.xthis.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n,t=this.to.x>t?this.to.x:t):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n,t=this.to.x>t?this.to.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xe?this.to.y:e):this.from.x>this.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o,e=this.to.y>e?this.to.y:e):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o,e=this.to.yl.height?(a=l.x+.5*l.width,h=l.y-d):(a=l.x+d,h=l.y-.5*l.height),this._circle(t,a,h,d);var s=.2*Math.PI,o=(10+5*this.width)*this.arrowScaleFactor;e=this._pointOnCircle(a,h,d,.5),t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&(e=this._pointOnCircle(a,h,d,.5),this._label(t,this.label,e.x,e.y))
+}},s.prototype._drawArrow=function(t){1==this.selected?(t.strokeStyle=this.color.highlight,t.fillStyle=this.color.highlight):1==this.hover?(t.strokeStyle=this.color.hover,t.fillStyle=this.color.hover):(t.strokeStyle=this.color.color,t.fillStyle=this.color.color),t.lineWidth=this._getLineWidth();var e,i;if(this.from!=this.to){e=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x);var s,o=this.to.x-this.from.x,n=this.to.y-this.from.y,r=Math.sqrt(o*o+n*n),a=this.from.distanceToBorder(t,e+Math.PI),h=(r-a)/r,d=h*this.from.x+(1-h)*this.to.x,l=h*this.from.y+(1-h)*this.to.y;1==this.smoothCurves.dynamic&&1==this.smoothCurves.enabled?s=this.via:1==this.smoothCurves.enabled&&(s=this._getViaCoordinates()),1==this.smoothCurves.enabled&&null!=s.x&&(e=Math.atan2(this.to.y-s.y,this.to.x-s.x),o=this.to.x-s.x,n=this.to.y-s.y,r=Math.sqrt(o*o+n*n));var c,p,u=this.to.distanceToBorder(t,e),m=(r-u)/r;if(1==this.smoothCurves.enabled&&null!=s.x?(c=(1-m)*s.x+m*this.to.x,p=(1-m)*s.y+m*this.to.y):(c=(1-m)*this.from.x+m*this.to.x,p=(1-m)*this.from.y+m*this.to.y),t.beginPath(),t.moveTo(d,l),1==this.smoothCurves.enabled&&null!=s.x?t.quadraticCurveTo(s.x,s.y,c,p):t.lineTo(c,p),t.stroke(),i=(10+5*this.width)*this.arrowScaleFactor,t.arrow(c,p,e,i),t.fill(),t.stroke(),this.label){var g;if(1==this.smoothCurves.enabled&&null!=s){var f=.5*(.5*(this.from.x+s.x)+.5*(this.to.x+s.x)),v=.5*(.5*(this.from.y+s.y)+.5*(this.to.y+s.y));g={x:f,y:v}}else g=this._pointOnLine(.5);this._label(t,this.label,g.x,g.y)}}else{var y,b,_,x=this.from,w=.25*Math.max(100,this.length);x.width||x.resize(t),x.width>x.height?(y=x.x+.5*x.width,b=x.y-w,_={x:y,y:x.y,angle:.9*Math.PI}):(y=x.x+w,b=x.y-.5*x.height,_={x:x.x,y:b,angle:.6*Math.PI}),t.beginPath(),t.arc(y,b,w,0,2*Math.PI,!1),t.stroke();var i=(10+5*this.width)*this.arrowScaleFactor;t.arrow(_.x,_.y,_.angle,i),t.fill(),t.stroke(),this.label&&(g=this._pointOnCircle(y,b,w,.5),this._label(t,this.label,g.x,g.y))}},s.prototype._getDistanceToEdge=function(t,e,i,s,o,n){if(this.from!=this.to){if(1==this.smoothCurves.enabled){var r,a;if(1==this.smoothCurves.enabled&&1==this.smoothCurves.dynamic)r=this.via.x,a=this.via.y;else{var h=this._getViaCoordinates();r=h.x,a=h.y}var d,l,c,p,u,m,g,f=1e9;for(l=0;10>l;l++)c=.1*l,p=Math.pow(1-c,2)*t+2*c*(1-c)*r+Math.pow(c,2)*i,u=Math.pow(1-c,2)*e+2*c*(1-c)*a+Math.pow(c,2)*s,l>0&&(d=this._getDistanceToLine(m,g,p,u,o,n),f=f>d?d:f),m=p,g=u;return f}return this._getDistanceToLine(t,e,i,s,o,n)}var p,u,v,y,b=this.length/4,_=this.from;return _.width||_.resize(ctx),_.width>_.height?(p=_.x+_.width/2,u=_.y-b):(p=_.x+b,u=_.y-_.height/2),v=p-o,y=u-n,Math.abs(Math.sqrt(v*v+y*y)-b)},s.prototype._getDistanceToLine=function(t,e,i,s,o,n){var r=i-t,a=s-e,h=r*r+a*a,d=((o-t)*r+(n-e)*a)/h;d>1?d=1:0>d&&(d=0);var l=t+d*r,c=e+d*a,p=l-o,u=c-n;return Math.sqrt(p*p+u*u)},s.prototype.setScale=function(t){this.networkScaleInv=1/t},s.prototype.select=function(){this.selected=!0},s.prototype.unselect=function(){this.selected=!1},s.prototype.positionBezierNode=function(){null!==this.via&&(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y))},s.prototype._drawControlNodes=function(t){if(1==this.controlNodesEnabled){if(null===this.controlNodes.from&&null===this.controlNodes.to){var e="edgeIdFrom:".concat(this.id),i="edgeIdTo:".concat(this.id),s={nodes:{group:"",radius:8},physics:{damping:0},clustering:{maxNodeSizeIncrements:0,nodeScaling:{width:0,height:0,radius:0}}};this.controlNodes.from=new n({id:e,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s),this.controlNodes.to=new n({id:i,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s)}0==this.controlNodes.from.selected&&0==this.controlNodes.to.selected&&(this.controlNodes.positions=this.getControlNodePositions(t),this.controlNodes.from.x=this.controlNodes.positions.from.x,this.controlNodes.from.y=this.controlNodes.positions.from.y,this.controlNodes.to.x=this.controlNodes.positions.to.x,this.controlNodes.to.y=this.controlNodes.positions.to.y),this.controlNodes.from.draw(t),this.controlNodes.to.draw(t)}else this.controlNodes={from:null,to:null,positions:{}}},s.prototype._enableControlNodes=function(){this.controlNodesEnabled=!0},s.prototype._disableControlNodes=function(){this.controlNodesEnabled=!1},s.prototype._getSelectedControlNode=function(t,e){var i=this.controlNodes.positions,s=Math.sqrt(Math.pow(t-i.from.x,2)+Math.pow(e-i.from.y,2)),o=Math.sqrt(Math.pow(t-i.to.x,2)+Math.pow(e-i.to.y,2));return 15>s?(this.connectedNode=this.from,this.from=this.controlNodes.from,this.controlNodes.from):15>o?(this.connectedNode=this.to,this.to=this.controlNodes.to,this.controlNodes.to):null},s.prototype._restoreControlNodes=function(){1==this.controlNodes.from.selected&&(this.from=this.connectedNode,this.connectedNode=null,this.controlNodes.from.unselect()),1==this.controlNodes.to.selected&&(this.to=this.connectedNode,this.connectedNode=null,this.controlNodes.to.unselect())},s.prototype.getControlNodePositions=function(t){var e,i=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),s=this.to.x-this.from.x,o=this.to.y-this.from.y,n=Math.sqrt(s*s+o*o),r=this.from.distanceToBorder(t,i+Math.PI),a=(n-r)/n,h=a*this.from.x+(1-a)*this.to.x,d=a*this.from.y+(1-a)*this.to.y;1==this.smoothCurves.dynamic&&1==this.smoothCurves.enabled?e=this.via:1==this.smoothCurves.enabled&&(e=this._getViaCoordinates()),1==this.smoothCurves.enabled&&null!=e.x&&(i=Math.atan2(this.to.y-e.y,this.to.x-e.x),s=this.to.x-e.x,o=this.to.y-e.y,n=Math.sqrt(s*s+o*o));var l,c,p=this.to.distanceToBorder(t,i),u=(n-p)/n;return 1==this.smoothCurves.enabled&&null!=e.x?(l=(1-u)*e.x+u*this.to.x,c=(1-u)*e.y+u*this.to.y):(l=(1-u)*this.from.x+u*this.to.x,c=(1-u)*this.from.y+u*this.to.y),{from:{x:h,y:d},to:{x:l,y:c}}},t.exports=s},function(t,e,i){function s(){this.clear(),this.defaultIndex=0}var o=i(1);s.DEFAULT=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}}],s.prototype.clear=function(){this.groups={},this.groups.length=function(){var t=0;for(var e in this)this.hasOwnProperty(e)&&t++;return t}},s.prototype.get=function(t){var e=this.groups[t];if(void 0==e){var i=this.defaultIndex%s.DEFAULT.length;this.defaultIndex++,e={},e.color=s.DEFAULT[i],this.groups[t]=e}return e},s.prototype.add=function(t,e){return this.groups[t]=e,e.color&&(e.color=o.parseColor(e.color)),e},t.exports=s},function(t){function e(){this.images={},this.callback=void 0}e.prototype.setOnloadCallback=function(t){this.callback=t},e.prototype.load=function(t){var e=this.images[t];if(void 0==e){var i=this;e=new Image,this.images[t]=e,e.onload=function(){i.callback&&i.callback(this)},e.src=t}return e},t.exports=e},function(t,e,i){function s(t,e,i,s){this.selected=!1,this.hover=!1,this.edges=[],this.dynamicEdges=[],this.reroutedEdges={},this.group=s.nodes.group,this.fontSize=Number(s.nodes.fontSize),this.fontFace=s.nodes.fontFace,this.fontColor=s.nodes.fontColor,this.fontDrawThreshold=3,this.color=s.nodes.color,this.id=void 0,this.shape=s.nodes.shape,this.image=s.nodes.image,this.x=null,this.y=null,this.xFixed=!1,this.yFixed=!1,this.horizontalAlignLeft=!0,this.verticalAlignTop=!0,this.radius=s.nodes.radius,this.baseRadiusValue=s.nodes.radius,this.radiusFixed=!1,this.radiusMin=s.nodes.radiusMin,this.radiusMax=s.nodes.radiusMax,this.level=-1,this.preassignedLevel=!1,this.borderWidth=s.nodes.borderWidth,this.borderWidthSelected=s.nodes.borderWidthSelected,this.imagelist=e,this.grouplist=i,this.fx=0,this.fy=0,this.vx=0,this.vy=0,this.minForce=s.minForce,this.damping=s.physics.damping,this.mass=1,this.fixedData={x:null,y:null},this.setProperties(t,s),this.resetCluster(),this.dynamicEdgesLength=0,this.clusterSession=0,this.clusterSizeWidthFactor=s.clustering.nodeScaling.width,this.clusterSizeHeightFactor=s.clustering.nodeScaling.height,this.clusterSizeRadiusFactor=s.clustering.nodeScaling.radius,this.maxNodeSizeIncrements=s.clustering.maxNodeSizeIncrements,this.growthIndicator=0,this.networkScaleInv=1,this.networkScale=1,this.canvasTopLeft={x:-300,y:-300},this.canvasBottomRight={x:300,y:300},this.parentEdgeId=null}var o=i(1);s.prototype.resetCluster=function(){this.formationScale=void 0,this.clusterSize=1,this.containedNodes={},this.containedEdges={},this.clusterSessions=[]},s.prototype.attachEdge=function(t){-1==this.edges.indexOf(t)&&this.edges.push(t),-1==this.dynamicEdges.indexOf(t)&&this.dynamicEdges.push(t),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.detachEdge=function(t){var e=this.edges.indexOf(t);-1!=e&&(this.edges.splice(e,1),this.dynamicEdges.splice(e,1)),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.setProperties=function(t,e){if(t){if(this.originalLabel=void 0,void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.originalLabel=t.label),void 0!==t.title&&(this.title=t.title),void 0!==t.group&&(this.group=t.group),void 0!==t.x&&(this.x=t.x),void 0!==t.y&&(this.y=t.y),void 0!==t.value&&(this.value=t.value),void 0!==t.level&&(this.level=t.level,this.preassignedLevel=!0),void 0!==t.borderWidth&&(this.borderWidth=t.borderWidth),void 0!==t.borderWidthSelected&&(this.borderWidthSelected=t.borderWidthSelected),void 0!==t.mass&&(this.mass=t.mass),void 0!==t.horizontalAlignLeft&&(this.horizontalAlignLeft=t.horizontalAlignLeft),void 0!==t.verticalAlignTop&&(this.verticalAlignTop=t.verticalAlignTop),void 0!==t.triggerFunction&&(this.triggerFunction=t.triggerFunction),void 0===this.id)throw"Node must have an id";if(void 0!==this.group&&""!=this.group){var i=this.grouplist.get(this.group);for(var s in i)i.hasOwnProperty(s)&&(this[s]=i[s])}if(void 0!==t.shape&&(this.shape=t.shape),void 0!==t.image&&(this.image=t.image),void 0!==t.radius&&(this.radius=t.radius,this.baseRadiusValue=this.radius),void 0!==t.color&&(this.color=o.parseColor(t.color)),void 0!==t.fontColor&&(this.fontColor=t.fontColor),void 0!==t.fontSize&&(this.fontSize=t.fontSize),void 0!==t.fontFace&&(this.fontFace=t.fontFace),void 0!==this.image&&""!=this.image){if(!this.imagelist)throw"No imagelist provided";this.imageObj=this.imagelist.load(this.image)}switch(this.xFixed=this.xFixed||void 0!==t.x&&!t.allowedToMoveX,this.yFixed=this.yFixed||void 0!==t.y&&!t.allowedToMoveY,this.radiusFixed=this.radiusFixed||void 0!==t.radius,"image"==this.shape&&(this.radiusMin=e.nodes.widthMin,this.radiusMax=e.nodes.widthMax),this.shape){case"database":this.draw=this._drawDatabase,this.resize=this._resizeDatabase;break;case"box":this.draw=this._drawBox,this.resize=this._resizeBox;break;case"circle":this.draw=this._drawCircle,this.resize=this._resizeCircle;break;case"ellipse":this.draw=this._drawEllipse,this.resize=this._resizeEllipse;break;case"image":this.draw=this._drawImage,this.resize=this._resizeImage;break;case"text":this.draw=this._drawText,this.resize=this._resizeText;break;case"dot":this.draw=this._drawDot,this.resize=this._resizeShape;break;case"square":this.draw=this._drawSquare,this.resize=this._resizeShape;break;case"triangle":this.draw=this._drawTriangle,this.resize=this._resizeShape;break;case"triangleDown":this.draw=this._drawTriangleDown,this.resize=this._resizeShape;break;case"star":this.draw=this._drawStar,this.resize=this._resizeShape;break;default:this.draw=this._drawEllipse,this.resize=this._resizeEllipse}this._reset()}},s.prototype.select=function(){this.selected=!0,this._reset()},s.prototype.unselect=function(){this.selected=!1,this._reset()},s.prototype.clearSizeCache=function(){this._reset()},s.prototype._reset=function(){this.width=void 0,this.height=void 0},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.distanceToBorder=function(t,e){var i=1;switch(this.width||this.resize(t),this.shape){case"circle":case"dot":return this.radius+i;case"ellipse":var s=this.width/2,o=this.height/2,n=Math.sin(e)*s,r=Math.cos(e)*o;return s*o/Math.sqrt(n*n+r*r);case"box":case"image":case"text":default:return this.width?Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i:0}},s.prototype._setForce=function(t,e){this.fx=t,this.fy=e},s.prototype._addForce=function(t,e){this.fx+=t,this.fy+=e},s.prototype.discreteStep=function(t){if(!this.xFixed){var e=this.damping*this.vx,i=(this.fx-e)/this.mass;this.vx+=i*t,this.x+=this.vx*t}if(!this.yFixed){var s=this.damping*this.vy,o=(this.fy-s)/this.mass;this.vy+=o*t,this.y+=this.vy*t}},s.prototype.discreteStepLimited=function(t,e){if(this.xFixed)this.fx=0;else{var i=this.damping*this.vx,s=(this.fx-i)/this.mass;this.vx+=s*t,this.vx=Math.abs(this.vx)>e?this.vx>0?e:-e:this.vx,this.x+=this.vx*t}if(this.yFixed)this.fy=0;else{var o=this.damping*this.vy,n=(this.fy-o)/this.mass;this.vy+=n*t,this.vy=Math.abs(this.vy)>e?this.vy>0?e:-e:this.vy,this.y+=this.vy*t}},s.prototype.isFixed=function(){return this.xFixed&&this.yFixed},s.prototype.isMoving=function(t){return Math.abs(this.vx)>t||Math.abs(this.vy)>t},s.prototype.isSelected=function(){return this.selected},s.prototype.getValue=function(){return this.value},s.prototype.getDistance=function(t,e){var i=this.x-t,s=this.y-e;return Math.sqrt(i*i+s*s)},s.prototype.setValueRange=function(t,e){if(!this.radiusFixed&&void 0!==this.value)if(e==t)this.radius=(this.radiusMin+this.radiusMax)/2;else{var i=(this.radiusMax-this.radiusMin)/(e-t);this.radius=(this.value-t)*i+this.radiusMin}this.baseRadiusValue=this.radius},s.prototype.draw=function(){throw"Draw method not initialized for node"},s.prototype.resize=function(){throw"Resize method not initialized for node"},s.prototype.isOverlappingWith=function(t){return this.leftt.left&&this.topt.top},s.prototype._resizeImage=function(){if(!this.width||!this.height){var t,e;if(this.value){this.radius=this.baseRadiusValue;var i=this.imageObj.height/this.imageObj.width;void 0!==i?(t=this.radius||this.imageObj.width,e=this.radius*i||this.imageObj.height):(t=0,e=0)}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.growthIndicator=0,this.width>0&&this.height>0&&(this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t)}},s.prototype._drawImage=function(t){this._resizeImage(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e;if(0!=this.imageObj.width){if(this.clusterSize>1){var i=this.clusterSize>1?10:0;i*=this.networkScaleInv,i=Math.min(.2*this.width,i),t.globalAlpha=.5,t.drawImage(this.imageObj,this.left-i,this.top-i,this.width+2*i,this.height+2*i)}t.globalAlpha=1,t.drawImage(this.imageObj,this.left,this.top,this.width,this.height),e=this.y+this.height/2}else e=this.y;this._label(t,this.label,this.x,e,void 0,"top")},s.prototype._resizeBox=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawBox=function(t){this._resizeBox(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.borderWidth,s=this.borderWidthSelected||2*this.borderWidth;t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.roundRect(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth,this.radius),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.color.background,t.roundRect(this.left,this.top,this.width,this.height,this.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeDatabase=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=i.width+2*e;this.width=s,this.height=s,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-s}},s.prototype._drawDatabase=function(t){this._resizeDatabase(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.borderWidth,s=this.borderWidthSelected||2*this.borderWidth;t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.database(this.x-this.width/2-2*t.lineWidth,this.y-.5*this.height-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t.database(this.x-this.width/2,this.y-.5*this.height,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeCircle=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=Math.max(i.width,i.height)+2*e;this.radius=s/2,this.width=s,this.height=s,this.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.radius-.5*s}},s.prototype._drawCircle=function(t){this._resizeCircle(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.borderWidth,s=this.borderWidthSelected||2*this.borderWidth;t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.circle(this.x,this.y,this.radius+2*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t.circle(this.x,this.y,this.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeEllipse=function(t){if(!this.width){var e=this.getTextSize(t);this.width=1.5*e.width,this.height=2*e.height,this.width1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.ellipse(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t.ellipse(this.left,this.top,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._drawDot=function(t){this._drawShape(t,"circle")},s.prototype._drawTriangle=function(t){this._drawShape(t,"triangle")},s.prototype._drawTriangleDown=function(t){this._drawShape(t,"triangleDown")},s.prototype._drawSquare=function(t){this._drawShape(t,"square")},s.prototype._drawStar=function(t){this._drawShape(t,"star")},s.prototype._resizeShape=function(){if(!this.width){this.radius=this.baseRadiusValue;var t=2*this.radius;this.width=t,this.height=t,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t}},s.prototype._drawShape=function(t,e){this._resizeShape(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var i=2.5,s=this.borderWidth,o=this.borderWidthSelected||2*this.borderWidth,n=2;switch(e){case"dot":n=2;break;case"square":n=2;break;case"triangle":n=3;break;case"triangleDown":n=3;break;case"star":n=4}t.strokeStyle=this.selected?this.color.highlight.border:this.hover?this.color.hover.border:this.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t[e](this.x,this.y,this.radius+n*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.color.highlight.background:this.hover?this.color.hover.background:this.color.background,t[e](this.x,this.y,this.radius),t.fill(),t.stroke(),this.label&&this._label(t,this.label,this.x,this.y+this.height/2,void 0,"top",!0)},s.prototype._resizeText=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawText=function(t){this._resizeText(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2,this._label(t,this.label,this.x,this.y)},s.prototype._label=function(t,e,i,s,o,n,r){if(e&&this.fontSize*this.networkScale>this.fontDrawThreshold){t.font=(this.selected?"bold ":"")+this.fontSize+"px "+this.fontFace,t.fillStyle=this.fontColor||"black",t.textAlign=o||"center",t.textBaseline=n||"middle";var a=e.split("\n"),h=a.length,d=this.fontSize+4,l=s+(1-h)/2*d;1==r&&(l=s+(1-h)/(2*d));for(var c=0;h>c;c++)t.fillText(a[c],i,l),l+=d}},s.prototype.getTextSize=function(t){if(void 0!==this.label){t.font=(this.selected?"bold ":"")+this.fontSize+"px "+this.fontFace;for(var e=this.label.split("\n"),i=(this.fontSize+4)*e.length,s=0,o=0,n=e.length;n>o;o++)s=Math.max(s,t.measureText(e[o]).width);return{width:s,height:i}}return{width:0,height:0}},s.prototype.inArea=function(){return void 0!==this.width?this.x+this.width*this.networkScaleInv>=this.canvasTopLeft.x&&this.x-this.width*this.networkScaleInv=this.canvasTopLeft.y&&this.y-this.height*this.networkScaleInv=this.canvasTopLeft.x&&this.x=this.canvasTopLeft.y&&this.ys&&(n=s-e-this.padding),no&&(r=o-i-this.padding),ri;i++)if(e.id===r.nodes[i].id){o=r.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=a(o.attr,t.node))),i=n.length-1;i>=0;i--){var h=n[i];h.nodes||(h.nodes=[]),-1==h.nodes.indexOf(o)&&h.nodes.push(o)}e.attr&&(o.attr=a(o.attr,e.attr))}function l(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=a({},t.edge);e.attr=a(i,e.attr)}}function c(t,e,i,s,o){var n={from:e,to:i,type:s};return t.edge&&(n.attr=a({},t.edge)),n.attr=a(n.attr||{},o),n}function p(){for(k=C.NULL,O="";" "==L||" "==L||"\n"==L||"\r"==L;)o();do{var t=!1;if("#"==L){for(var e=T-1;" "==D.charAt(e)||" "==D.charAt(e);)e--;if("\n"==D.charAt(e)||""==D.charAt(e)){for(;""!=L&&"\n"!=L;)o();t=!0}}if("/"==L&&"/"==n()){for(;""!=L&&"\n"!=L;)o();t=!0}if("/"==L&&"*"==n()){for(;""!=L;){if("*"==L&&"/"==n()){o(),o();break}o()}t=!0}for(;" "==L||" "==L||"\n"==L||"\r"==L;)o()}while(t);if(""==L)return void(k=C.DELIMITER);var i=L+n();if(E[i])return k=C.DELIMITER,O=i,o(),void o();if(E[L])return k=C.DELIMITER,O=L,void o();if(r(L)||"-"==L){for(O+=L,o();r(L);)O+=L,o();return"false"==O?O=!1:"true"==O?O=!0:isNaN(Number(O))||(O=Number(O)),void(k=C.IDENTIFIER)}if('"'==L){for(o();""!=L&&('"'!=L||'"'==L&&'"'==n());)O+=L,'"'==L&&o(),o();if('"'!=L)throw x('End of string " expected');return o(),void(k=C.IDENTIFIER)}for(k=C.UNKNOWN;""!=L;)O+=L,o();throw new SyntaxError('Syntax error in part "'+w(O,30)+'"')}function u(){var t={};if(s(),p(),"strict"==O&&(t.strict=!0,p()),("graph"==O||"digraph"==O)&&(t.type=O,p()),k==C.IDENTIFIER&&(t.id=O,p()),"{"!=O)throw x("Angle bracket { expected");if(p(),m(t),"}"!=O)throw x("Angle bracket } expected");if(p(),""!==O)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function m(t){for(;""!==O&&"}"!=O;)g(t),";"==O&&p()}function g(t){var e=f(t);if(e)return void b(t,e);var i=v(t);if(!i){if(k!=C.IDENTIFIER)throw x("Identifier expected");var s=O;if(p(),"="==O){if(p(),k!=C.IDENTIFIER)throw x("Identifier expected");t[s]=O,p()}else y(t,s)}}function f(t){var e=null;if("subgraph"==O&&(e={},e.type="subgraph",p(),k==C.IDENTIFIER&&(e.id=O,p())),"{"==O){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,m(e),"}"!=O)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function v(t){return"node"==O?(p(),t.node=_(),"node"):"edge"==O?(p(),t.edge=_(),"edge"):"graph"==O?(p(),t.graph=_(),"graph"):null}function y(t,e){var i={id:e},s=_();s&&(i.attr=s),d(t,i),b(t,e)}function b(t,e){for(;"->"==O||"--"==O;){var i,s=O;p();var o=f(t);if(o)i=o;else{if(k!=C.IDENTIFIER)throw x("Identifier or subgraph expected");i=O,d(t,{id:i}),p()}var n=_(),r=c(t,e,i,s,n);l(t,r),e=i}}function _(){for(var t=null;"["==O;){for(p(),t={};""!==O&&"]"!=O;){if(k!=C.IDENTIFIER)throw x("Attribute name expected");var e=O;if(p(),"="!=O)throw x("Equal sign = expected");if(p(),k!=C.IDENTIFIER)throw x("Attribute value expected");var i=O;h(t,e,i),p(),","==O&&p()}if("]"!=O)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+w(O,30)+'" (char '+T+")")}function w(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function S(t,e,i){t instanceof Array?t.forEach(function(t){e instanceof Array?e.forEach(function(e){i(t,e)}):i(t,e)}):e instanceof Array?e.forEach(function(e){i(t,e)}):i(t,e)}function M(t){function e(t){var e={from:t.from,to:t.to};return a(e,t.attr),e.style="->"==t.type?"arrow":"line",e}var s=i(t),o={nodes:[],edges:[],options:{}};return s.nodes&&s.nodes.forEach(function(t){var e={id:t.id,label:String(t.label||t.id)};a(e,t.attr),e.image&&(e.shape="image"),o.nodes.push(e)}),s.edges&&s.edges.forEach(function(t){var i,s;i=t.from instanceof Object?t.from.nodes:{id:t.from},s=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges&&t.from.edges.forEach(function(t){var i=e(t);o.edges.push(i)}),S(i,s,function(i,s){var n=c(o,i.id,s.id,t.type,t.attr),r=e(n);o.edges.push(r)}),t.to instanceof Object&&t.to.edges&&t.to.edges.forEach(function(t){var i=e(t);o.edges.push(i)})}),s.attr&&(o.options=s.attr),o}var C={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},E={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},D="",T=0,L="",O="",k=C.NULL,N=/[a-zA-Z_0-9.:#]/;e.parseDOT=i,e.DOTToGraph=M},function(t,e){function i(t,e){var i=[],s=[];
+this.options={edges:{inheritColor:!0},nodes:{allowedToMove:!1,parseColor:!1}},void 0!==e&&(this.options.nodes.allowedToMove=e.allowedToMove|!1,this.options.nodes.parseColor=e.parseColor|!1,this.options.edges.inheritColor=e.inheritColor|!0);for(var o=t.edges,n=t.nodes,r=0;rs;s++){var o=s%2===0?1.3*i:.5*i;this.lineTo(t+o*Math.sin(2*s*Math.PI/10),e-o*Math.cos(2*s*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,s,o){var n=Math.PI/180;0>i-2*o&&(o=i/2),0>s-2*o&&(o=s/2),this.beginPath(),this.moveTo(t+o,e),this.lineTo(t+i-o,e),this.arc(t+i-o,e+o,o,270*n,360*n,!1),this.lineTo(t+i,e+s-o),this.arc(t+i-o,e+s-o,o,0,90*n,!1),this.lineTo(t+o,e+s),this.arc(t+o,e+s-o,o,90*n,180*n,!1),this.lineTo(t,e+o),this.arc(t+o,e+o,o,180*n,270*n,!1)},CanvasRenderingContext2D.prototype.ellipse=function(t,e,i,s){var o=.5522848,n=i/2*o,r=s/2*o,a=t+i,h=e+s,d=t+i/2,l=e+s/2;this.beginPath(),this.moveTo(t,l),this.bezierCurveTo(t,l-r,d-n,e,d,e),this.bezierCurveTo(d+n,e,a,l-r,a,l),this.bezierCurveTo(a,l+r,d+n,h,d,h),this.bezierCurveTo(d-n,h,t,l+r,t,l)},CanvasRenderingContext2D.prototype.database=function(t,e,i,s){var o=1/3,n=i,r=s*o,a=.5522848,h=n/2*a,d=r/2*a,l=t+n,c=e+r,p=t+n/2,u=e+r/2,m=e+(s-r/2),g=e+s;this.beginPath(),this.moveTo(l,u),this.bezierCurveTo(l,u+d,p+h,c,p,c),this.bezierCurveTo(p-h,c,t,u+d,t,u),this.bezierCurveTo(t,u-d,p-h,e,p,e),this.bezierCurveTo(p+h,e,l,u-d,l,u),this.lineTo(l,m),this.bezierCurveTo(l,m+d,p+h,g,p,g),this.bezierCurveTo(p-h,g,t,m+d,t,m),this.lineTo(t,u)},CanvasRenderingContext2D.prototype.arrow=function(t,e,i,s){var o=t-s*Math.cos(i),n=e-s*Math.sin(i),r=t-.9*s*Math.cos(i),a=e-.9*s*Math.sin(i),h=o+s/3*Math.cos(i+.5*Math.PI),d=n+s/3*Math.sin(i+.5*Math.PI),l=o+s/3*Math.cos(i-.5*Math.PI),c=n+s/3*Math.sin(i-.5*Math.PI);this.beginPath(),this.moveTo(t,e),this.lineTo(h,d),this.lineTo(r,a),this.lineTo(l,c),this.closePath()},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,s,o){o||(o=[10,5]),0==p&&(p=.001);var n=o.length;this.moveTo(t,e);for(var r=i-t,a=s-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,c=!0;d>=.1;){var p=o[l++%n];p>d&&(p=d);var u=Math.sqrt(p*p/(1+h*h));0>r&&(u=-u),t+=u,e+=h*u,this[c?"lineTo":"moveTo"](t,e),d-=p,c=!c}})},function(t,e,i){var s=i(55),o=i(49),n=i(50),r=i(51),a=i(52),h=i(53),d=i(54);e._loadMixin=function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e])},e._clearMixin=function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=void 0)},e._loadPhysicsSystem=function(){this._loadMixin(s),this._loadSelectedForceSolver(),1==this.constants.configurePhysics&&this._loadPhysicsConfiguration()},e._loadClusterSystem=function(){this.clusterSession=0,this.hubThreshold=5,this._loadMixin(o)},e._loadSectorSystem=function(){this.sectors={},this.activeSector=["default"],this.sectors.active={},this.sectors.active["default"]={nodes:{},edges:{},nodeIndices:[],formationScale:1,drawingNode:void 0},this.sectors.frozen={},this.sectors.support={nodes:{},edges:{},nodeIndices:[],formationScale:1,drawingNode:void 0},this.nodeIndices=this.sectors.active["default"].nodeIndices,this._loadMixin(n)},e._loadSelectionSystem=function(){this.selectionObj={nodes:{},edges:{}},this._loadMixin(r)},e._loadManipulationSystem=function(){this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,1==this.constants.dataManipulation.enabled?(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="network-manipulationDiv",this.manipulationDiv.id="network-manipulationDiv",this.manipulationDiv.style.display=1==this.editMode?"block":"none",this.containerElement.insertBefore(this.manipulationDiv,this.frame)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="network-manipulation-editMode",this.editModeDiv.id="network-manipulation-editMode",this.editModeDiv.style.display=1==this.editMode?"none":"block",this.containerElement.insertBefore(this.editModeDiv,this.frame)),void 0===this.closeDiv&&(this.closeDiv=document.createElement("div"),this.closeDiv.className="network-manipulation-closeDiv",this.closeDiv.id="network-manipulation-closeDiv",this.closeDiv.style.display=this.manipulationDiv.style.display,this.containerElement.insertBefore(this.closeDiv,this.frame)),this._loadMixin(a),this._createManipulatorBar()):void 0!==this.manipulationDiv&&(this._createManipulatorBar(),this.containerElement.removeChild(this.manipulationDiv),this.containerElement.removeChild(this.editModeDiv),this.containerElement.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._clearMixin(a))},e._loadNavigationControls=function(){this._loadMixin(h),this._cleanNavigation(),1==this.constants.navigation.enabled&&this._loadNavigationElements()},e._loadHierarchySystem=function(){this._loadMixin(d)}},function(t){function e(t){return t?i(t):void 0}function i(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){s.off(t,i),e.apply(this,arguments)}var s=this;return this._callbacks=this._callbacks||{},i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i=this._callbacks[t];if(!i)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var s,o=0;os;++s)i[s].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t){function e(t,e,i){return t.addEventListener?t.addEventListener(e,i,!1):void t.attachEvent("on"+e,i)}function i(t){return"keypress"==t.type?String.fromCharCode(t.which):_[t.which]?_[t.which]:x[t.which]?x[t.which]:String.fromCharCode(t.which).toLowerCase()}function s(t){var e=t.target||t.srcElement,i=e.tagName;return(" "+e.className+" ").indexOf(" mousetrap ")>-1?!1:"INPUT"==i||"SELECT"==i||"TEXTAREA"==i||e.contentEditable&&"true"==e.contentEditable}function o(t,e){return t.sort().join(",")===e.sort().join(",")}function n(t){t=t||{};var e,i=!1;for(e in E)t[e]?i=!0:E[e]=0;i||(T=!1)}function r(t,e,i,s,n){var r,a,h=[];if(!M[t])return[];for("keyup"==i&&c(t)&&(e=[t]),r=0;r95&&112>t||_.hasOwnProperty(t)&&(y[_[t]]=t)}return y}function m(t,e,i){return i||(i=u()[t]?"keydown":"keypress"),"keypress"==i&&e.length&&(i="keydown"),i}function g(t,e,s,o){E[t]=0,o||(o=m(e[0],[]));var r,a=function(){T=o,++E[t],p()},d=function(t){h(s,t),"keyup"!==o&&(D=i(t)),setTimeout(n,10)};for(r=0;r1)return g(t,d,e,i);for(h="+"===t?["+"]:t.split("+"),n=0;n":".","?":"/","|":"\\"},S={option:"alt",command:"meta","return":"enter",escape:"esc"},M={},C={},E={},D=!1,T=!1,L=1;20>L;++L)_[111+L]="f"+L;for(L=0;9>=L;++L)_[L+96]=L;e(document,"keypress",l),e(document,"keydown",l),e(document,"keyup",l);var O={bind:function(t,e,i){return v(t instanceof Array?t:[t],e,i),C[t+":"+i]=e,this},unbind:function(t,e){return C[t+":"+e]&&(delete C[t+":"+e],this.bind(t,function(){},e)),this},trigger:function(t,e){return C[t+":"+e](),this},reset:function(){return M={},C={},this}};t.exports=O},function(t,e,i){var s;(function(t,o){(function(n){function r(t,e,i){switch(arguments.length){case 2:return null!=t?t:e;case 3:return null!=t?t:null!=e?e:i;default:throw new Error("Implement me")}}function a(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function h(t,e){function i(){ve.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}var s=!0;return m(function(){return s&&(i(),s=!1),e.apply(this,arguments)},e)}function d(t,e){return function(i){return v(t.call(this,i),e)}}function l(t,e){return function(i){return this.lang().ordinal(t.call(this,i),e)}}function c(){}function p(t){O(t),m(this,t)}function u(t){var e=S(t),i=e.year||0,s=e.quarter||0,o=e.month||0,n=e.week||0,r=e.day||0,a=e.hour||0,h=e.minute||0,d=e.second||0,l=e.millisecond||0;this._milliseconds=+l+1e3*d+6e4*h+36e5*a,this._days=+r+7*n,this._months=+o+3*s+12*i,this._data={},this._bubble()}function m(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return e.hasOwnProperty("toString")&&(t.toString=e.toString),e.hasOwnProperty("valueOf")&&(t.valueOf=e.valueOf),t}function g(t){var e,i={};for(e in t)t.hasOwnProperty(e)&&ke.hasOwnProperty(e)&&(i[e]=t[e]);return i}function f(t){return 0>t?Math.ceil(t):Math.floor(t)}function v(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&C(t[s])!==C(e[s]))&&r++;return r+n}function w(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=ri[t]||ai[e]||e}return t}function S(t){var e,i,s={};for(i in t)t.hasOwnProperty(i)&&(e=w(i),e&&(s[e]=t[i]));return s}function M(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}ve[t]=function(s,o){var r,a,h=ve.fn._lang[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=ve().utc().set(i,t);return h.call(ve.fn._lang,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function C(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function E(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function D(t,e,i){return re(ve([t,11,31+e-i]),e,i).week}function T(t){return L(t)?366:365}function L(t){return t%4===0&&t%100!==0||t%400===0}function O(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[Me]<0||t._a[Me]>11?Me:t._a[Ce]<1||t._a[Ce]>E(t._a[Se],t._a[Me])?Ce:t._a[Ee]<0||t._a[Ee]>23?Ee:t._a[De]<0||t._a[De]>59?De:t._a[Te]<0||t._a[Te]>59?Te:t._a[Le]<0||t._a[Le]>999?Le:-1,t._pf._overflowDayOfYear&&(Se>e||e>Ce)&&(e=Ce),t._pf.overflow=e)}function k(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length)),t._isValid}function N(t){return t?t.toLowerCase().replace("_","-"):t}function I(t,e){return e._isUTC?ve(t).zone(e._offset||0):ve(t).local()}function A(t,e){return e.abbr=t,Oe[t]||(Oe[t]=new c),Oe[t].set(e),Oe[t]}function z(t){delete Oe[t]}function P(t){var e,s,o,n,r=0,a=function(t){if(!Oe[t]&&Ne)try{i(56)("./"+t)}catch(e){}return Oe[t]};if(!t)return ve.fn._lang;if(!b(t)){if(s=a(t))return s;t=[t]}for(;r0;){if(s=a(n.slice(0,e).join("-")))return s;if(o&&o.length>=e&&x(n,o,!0)>=e-1)break;e--}r++}return ve.fn._lang}function R(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function F(t){var e,i,s=t.match(Pe);for(e=0,i=s.length;i>e;e++)s[e]=pi[s[e]]?pi[s[e]]:R(s[e]);return function(o){var n="";for(e=0;i>e;e++)n+=s[e]instanceof Function?s[e].call(o,t):s[e];return n}}function H(t,e){return t.isValid()?(e=Y(e,t.lang()),hi[e]||(hi[e]=F(e)),hi[e](t)):t.lang().invalidDate()}function Y(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(Re.lastIndex=0;s>=0&&Re.test(t);)t=t.replace(Re,i),Re.lastIndex=0,s-=1;return t}function B(t,e){var i,s=e._strict;switch(t){case"Q":return Ze;case"DDDD":return Ke;case"YYYY":case"GGGG":case"gggg":return s?$e:Ye;case"Y":case"G":case"g":return Qe;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?Je:Be;case"S":if(s)return Ze;case"SS":if(s)return qe;case"SSS":if(s)return Ke;case"DDD":return He;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Ge;case"a":case"A":return P(e._l)._meridiemParse;case"X":return Ue;case"Z":case"ZZ":return je;case"T":return Ve;case"SSSS":return We;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?qe:Fe;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Fe;case"Do":return Xe;default:return i=new RegExp(K(q(t.replace("\\","")),"i"))}}function W(t){t=t||"";var e=t.match(je)||[],i=e[e.length-1]||[],s=(i+"").match(oi)||["-",0,0],o=+(60*s[1])+C(s[2]);return"+"===s[0]?-o:o}function G(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[Me]=3*(C(e)-1));break;case"M":case"MM":null!=e&&(o[Me]=C(e)-1);break;case"MMM":case"MMMM":s=P(i._l).monthsParse(e),null!=s?o[Me]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Ce]=C(e));break;case"Do":null!=e&&(o[Ce]=C(parseInt(e,10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=C(e));break;case"YY":o[Se]=ve.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[Se]=C(e);break;case"a":case"A":i._isPm=P(i._l).isPM(e);break;case"H":case"HH":case"h":case"hh":o[Ee]=C(e);break;case"m":case"mm":o[De]=C(e);break;case"s":case"ss":o[Te]=C(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Le]=C(1e3*("0."+e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=W(e);break;case"dd":case"ddd":case"dddd":s=P(i._l).weekdaysParse(e),null!=s?(i._w=i._w||{},i._w.d=s):i._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(i._w=i._w||{},i._w[t]=C(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=ve.parseTwoDigitYear(e)}}function j(t){var e,i,s,o,n,a,h,d;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(n=1,a=4,i=r(e.GG,t._a[Se],re(ve(),1,4).year),s=r(e.W,1),o=r(e.E,1)):(d=P(t._l),n=d._week.dow,a=d._week.doy,i=r(e.gg,t._a[Se],re(ve(),n,a).year),s=r(e.w,1),null!=e.d?(o=e.d,n>o&&++s):o=null!=e.e?e.e+n:n),h=ae(i,s,o,a,n),t._a[Se]=h.year,t._dayOfYear=h.dayOfYear}function V(t){var e,i,s,o,n=[];if(!t._d){for(s=X(t),t._w&&null==t._a[Ce]&&null==t._a[Me]&&j(t),t._dayOfYear&&(o=r(t._a[Se],s[Se]),t._dayOfYear>T(o)&&(t._pf._overflowDayOfYear=!0),i=ie(o,0,t._dayOfYear),t._a[Me]=i.getUTCMonth(),t._a[Ce]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=n[e]=s[e];for(;7>e;e++)t._a[e]=n[e]=null==t._a[e]?2===e?1:0:t._a[e];t._d=(t._useUTC?ie:ee).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm)}}function U(t){var e;t._d||(e=S(t._i),t._a=[e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond],V(t))}function X(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function Z(t){if(t._f===ve.ISO_8601)return void J(t);t._a=[],t._pf.empty=!0;var e,i,s,o,n,r=P(t._l),a=""+t._i,h=a.length,d=0;for(s=Y(t._f,r).match(Pe)||[],e=0;e0&&t._pf.unusedInput.push(n),a=a.slice(a.indexOf(i)+i.length),d+=i.length),pi[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),G(o,i,t)):t._strict&&!i&&t._pf.unusedTokens.push(o);t._pf.charsLeftOver=h-d,a.length>0&&t._pf.unusedInput.push(a),t._isPm&&t._a[Ee]<12&&(t._a[Ee]+=12),t._isPm===!1&&12===t._a[Ee]&&(t._a[Ee]=0),V(t),O(t)}function q(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function K(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function $(t){var e,i,s,o,n;if(0===t._f.length)return t._pf.invalidFormat=!0,void(t._d=new Date(0/0));for(o=0;on)&&(s=n,i=e));m(t,i||e)}function J(t){var e,i,s=t._i,o=ti.exec(s);if(o){for(t._pf.iso=!0,e=0,i=ii.length;i>e;e++)if(ii[e][1].exec(s)){t._f=ii[e][0]+(o[6]||" ");break}for(e=0,i=si.length;i>e;e++)if(si[e][1].exec(s)){t._f+=si[e][0];break}s.match(je)&&(t._f+="Z"),Z(t)}else t._isValid=!1}function Q(t){J(t),t._isValid===!1&&(delete t._isValid,ve.createFromInputFallback(t))}function te(t){var e=t._i,i=Ie.exec(e);e===n?t._d=new Date:i?t._d=new Date(+i[1]):"string"==typeof e?Q(t):b(e)?(t._a=e.slice(0),V(t)):_(e)?t._d=new Date(+e):"object"==typeof e?U(t):"number"==typeof e?t._d=new Date(e):ve.createFromInputFallback(t)}function ee(t,e,i,s,o,n,r){var a=new Date(t,e,i,s,o,n,r);return 1970>t&&a.setFullYear(t),a}function ie(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function se(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function oe(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function ne(t,e,i){var s=we(Math.abs(t)/1e3),o=we(s/60),n=we(o/60),r=we(n/24),a=we(r/365),h=s0,h[4]=i,oe.apply({},h)}function re(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=ve(t).add("d",n),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function ae(t,e,i,s,o){var n,r,a=ie(t,0,1).getUTCDay();return a=0===a?7:a,i=null!=i?i:o,n=o-a+(a>s?7:0)-(o>a?7:0),r=7*(e-1)+(i-o)+n+1,{year:r>0?t:t-1,dayOfYear:r>0?r:T(t-1)+r}}function he(t){var e=t._i,i=t._f;return null===e||i===n&&""===e?ve.invalid({nullInput:!0}):("string"==typeof e&&(t._i=e=P().preparse(e)),ve.isMoment(e)?(t=g(e),t._d=new Date(+e._d)):i?b(i)?$(t):Z(t):te(t),new p(t))}function de(t,e){var i,s;if(1===e.length&&b(e[0])&&(e=e[0]),!e.length)return ve();for(i=e[0],s=1;s=0?"+":"-";return e+v(Math.abs(t),6)},gg:function(){return v(this.weekYear()%100,2)},gggg:function(){return v(this.weekYear(),4)},ggggg:function(){return v(this.weekYear(),5)},GG:function(){return v(this.isoWeekYear()%100,2)},GGGG:function(){return v(this.isoWeekYear(),4)},GGGGG:function(){return v(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return C(this.milliseconds()/100)},SS:function(){return v(C(this.milliseconds()/10),2)},SSS:function(){return v(this.milliseconds(),3)},SSSS:function(){return v(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+v(C(t/60),2)+":"+v(C(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+v(C(t/60),2)+v(C(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},ui=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];li.length;)be=li.pop(),pi[be+"o"]=l(pi[be],be);for(;ci.length;)be=ci.pop(),pi[be+be]=d(pi[be],2);for(pi.DDDD=d(pi.DDD,3),m(c.prototype,{set:function(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t){var e,i,s;for(this._monthsParse||(this._monthsParse=[]),e=0;12>e;e++)if(this._monthsParse[e]||(i=ve.utc([2e3,e]),s="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[e]=new RegExp(s.replace(".",""),"i")),this._monthsParse[e].test(t))return e},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,i,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(i=ve([2e3,1]).day(e),s="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e){var i=this._calendar[t];return"function"==typeof i?i.apply(e):i},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,i,s){var o=this._relativeTime[i];return"function"==typeof o?o(t,e,i,s):o.replace(/%d/i,t)},pastFuture:function(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",preparse:function(t){return t},postformat:function(t){return t},week:function(t){return re(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),ve=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._i=t,o._f=e,o._l=i,o._strict=s,o._isUTC=!1,o._pf=a(),he(o)},ve.suppressDeprecationWarnings=!1,ve.createFromInputFallback=h("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i)}),ve.min=function(){var t=[].slice.call(arguments,0);return de("isBefore",t)},ve.max=function(){var t=[].slice.call(arguments,0);return de("isAfter",t)},ve.utc=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._useUTC=!0,o._isUTC=!0,o._l=i,o._i=t,o._f=e,o._strict=s,o._pf=a(),he(o).utc()},ve.unix=function(t){return ve(1e3*t)},ve.duration=function(t,e){var i,s,o,n=t,r=null;return ve.isDuration(t)?n={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(n={},e?n[e]=t:n.milliseconds=t):(r=Ae.exec(t))?(i="-"===r[1]?-1:1,n={y:0,d:C(r[Ce])*i,h:C(r[Ee])*i,m:C(r[De])*i,s:C(r[Te])*i,ms:C(r[Le])*i}):(r=ze.exec(t))&&(i="-"===r[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},n={y:o(r[2]),M:o(r[3]),d:o(r[4]),h:o(r[5]),m:o(r[6]),s:o(r[7]),w:o(r[8])}),s=new u(n),ve.isDuration(t)&&t.hasOwnProperty("_lang")&&(s._lang=t._lang),s},ve.version=_e,ve.defaultFormat=ei,ve.ISO_8601=function(){},ve.momentProperties=ke,ve.updateOffset=function(){},ve.relativeTimeThreshold=function(t,e){return di[t]===n?!1:(di[t]=e,!0)},ve.lang=function(t,e){var i;return t?(e?A(N(t),e):null===e?(z(t),t="en"):Oe[t]||P(t),i=ve.duration.fn._lang=ve.fn._lang=P(t),i._abbr):ve.fn._lang._abbr},ve.langData=function(t){return t&&t._lang&&t._lang._abbr&&(t=t._lang._abbr),P(t)},ve.isMoment=function(t){return t instanceof p||null!=t&&t.hasOwnProperty("_isAMomentObject")},ve.isDuration=function(t){return t instanceof u},be=ui.length-1;be>=0;--be)M(ui[be]);ve.normalizeUnits=function(t){return w(t)},ve.invalid=function(t){var e=ve.utc(0/0);return null!=t?m(e._pf,t):e._pf.userInvalidated=!0,e},ve.parseZone=function(){return ve.apply(null,arguments).parseZone()},ve.parseTwoDigitYear=function(t){return C(t)+(C(t)>68?1900:2e3)},m(ve.fn=p.prototype,{clone:function(){return ve(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)
+},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().lang("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=ve(this).utc();return 00:!1},parsingFlags:function(){return m({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(t){var e=H(this,t||ve.defaultFormat);return this.lang().postformat(e)},add:function(t,e){var i;return i="string"==typeof t&&"string"==typeof e?ve.duration(isNaN(+e)?+t:+e,isNaN(+e)?e:t):"string"==typeof t?ve.duration(+e,t):ve.duration(t,e),y(this,i,1),this},subtract:function(t,e){var i;return i="string"==typeof t&&"string"==typeof e?ve.duration(isNaN(+e)?+t:+e,isNaN(+e)?e:t):"string"==typeof t?ve.duration(+e,t):ve.duration(t,e),y(this,i,-1),this},diff:function(t,e,i){var s,o,n=I(t,this),r=6e4*(this.zone()-n.zone());return e=w(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+n.daysInMonth()),o=12*(this.year()-n.year())+(this.month()-n.month()),o+=(this-ve(this).startOf("month")-(n-ve(n).startOf("month")))/s,o-=6e4*(this.zone()-ve(this).startOf("month").zone()-(n.zone()-ve(n).startOf("month").zone()))/s,"year"===e&&(o/=12)):(s=this-n,o="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-r)/864e5:"week"===e?(s-r)/6048e5:s),i?o:f(o)},from:function(t,e){return ve.duration(this.diff(t)).lang(this.lang()._abbr).humanize(!e)},fromNow:function(t){return this.from(ve(),t)},calendar:function(t){var e=t||ve(),i=I(e,this).startOf("day"),s=this.diff(i,"days",!0),o=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse";return this.format(this.lang().calendar(o,this))},isLeapYear:function(){return L(this.year())},isDST:function(){return this.zone()+ve(t).startOf(e)},isBefore:function(t,e){return e="undefined"!=typeof e?e:"millisecond",+this.clone().startOf(e)<+ve(t).startOf(e)},isSame:function(t,e){return e=e||"ms",+this.clone().startOf(e)===+I(t,this).startOf(e)},min:h("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(t){return t=ve.apply(null,arguments),this>t?this:t}),max:h("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=ve.apply(null,arguments),t>this?this:t}),zone:function(t,e){var i=this._offset||0;return null==t?this._isUTC?i:this._d.getTimezoneOffset():("string"==typeof t&&(t=W(t)),Math.abs(t)<16&&(t=60*t),this._offset=t,this._isUTC=!0,i!==t&&(!e||this._changeInProgress?y(this,ve.duration(i-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,ve.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(t){return t=t?ve(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return E(this.year(),this.month())},dayOfYear:function(t){var e=we((ve(this).startOf("day")-ve(this).startOf("year"))/864e5)+1;return null==t?e:this.add("d",t-e)},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=re(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==t?e:this.add("y",t-e)},isoWeekYear:function(t){var e=re(this,1,4).year;return null==t?e:this.add("y",t-e)},week:function(t){var e=this.lang().week(this);return null==t?e:this.add("d",7*(t-e))},isoWeek:function(t){var e=re(this,1,4).week;return null==t?e:this.add("d",7*(t-e))},weekday:function(t){var e=(this.day()+7-this.lang()._week.dow)%7;return null==t?e:this.add("d",t-e)},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return D(this.year(),1,4)},weeksInYear:function(){var t=this._lang._week;return D(this.year(),t.dow,t.doy)},get:function(t){return t=w(t),this[t]()},set:function(t,e){return t=w(t),"function"==typeof this[t]&&this[t](e),this},lang:function(t){return t===n?this._lang:(this._lang=P(t),this)}}),ve.fn.millisecond=ve.fn.milliseconds=ue("Milliseconds",!1),ve.fn.second=ve.fn.seconds=ue("Seconds",!1),ve.fn.minute=ve.fn.minutes=ue("Minutes",!1),ve.fn.hour=ve.fn.hours=ue("Hours",!0),ve.fn.date=ue("Date",!0),ve.fn.dates=h("dates accessor is deprecated. Use date instead.",ue("Date",!0)),ve.fn.year=ue("FullYear",!0),ve.fn.years=h("years accessor is deprecated. Use year instead.",ue("FullYear",!0)),ve.fn.days=ve.fn.day,ve.fn.months=ve.fn.month,ve.fn.weeks=ve.fn.week,ve.fn.isoWeeks=ve.fn.isoWeek,ve.fn.quarters=ve.fn.quarter,ve.fn.toJSON=ve.fn.toISOString,m(ve.duration.fn=u.prototype,{_bubble:function(){var t,e,i,s,o=this._milliseconds,n=this._days,r=this._months,a=this._data;a.milliseconds=o%1e3,t=f(o/1e3),a.seconds=t%60,e=f(t/60),a.minutes=e%60,i=f(e/60),a.hours=i%24,n+=f(i/24),a.days=n%30,r+=f(n/30),a.months=r%12,s=f(r/12),a.years=s},weeks:function(){return f(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*C(this._months/12)},humanize:function(t){var e=+this,i=ne(e,!t,this.lang());return t&&(i=this.lang().pastFuture(e,i)),this.lang().postformat(i)},add:function(t,e){var i=ve.duration(t,e);return this._milliseconds+=i._milliseconds,this._days+=i._days,this._months+=i._months,this._bubble(),this},subtract:function(t,e){var i=ve.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=w(t),this[t.toLowerCase()+"s"]()},as:function(t){return t=w(t),this["as"+t.charAt(0).toUpperCase()+t.slice(1)+"s"]()},lang:ve.fn.lang,toIsoString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),i=Math.abs(this.days()),s=Math.abs(this.hours()),o=Math.abs(this.minutes()),n=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(i?i+"D":"")+(s||o||n?"T":"")+(s?s+"H":"")+(o?o+"M":"")+(n?n+"S":""):"P0D"}});for(be in ni)ni.hasOwnProperty(be)&&(ge(be,ni[be]),me(be.toLowerCase()));ge("Weeks",6048e5),ve.duration.fn.asMonths=function(){return(+this-31536e6*this.years())/2592e6+12*this.years()},ve.lang("en",{ordinal:function(t){var e=t%10,i=1===C(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),Ne?o.exports=ve:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(xe.moment=ye),ve}.call(e,i,e,o),!(s!==n&&(o.exports=s)),fe(!0))}).call(this)}).call(e,function(){return this}(),i(60)(t))},function(t,e,i){var s;!function(o,n){"use strict";function r(){a.READY||(w.determineEventTypes(),x.each(a.gestures,function(t){M.register(t)}),w.onTouch(a.DOCUMENT,v,M.detect),w.onTouch(a.DOCUMENT,y,M.detect),a.READY=!0)}var a=function C(t,e){return new C.Instance(t,e||{})};a.VERSION="1.1.3",a.defaults={behavior:{userSelect:"none",touchAction:"pan-y",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},a.DOCUMENT=document,a.HAS_POINTEREVENTS=navigator.pointerEnabled||navigator.msPointerEnabled,a.HAS_TOUCHEVENTS="ontouchstart"in o,a.IS_MOBILE=/mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent),a.NO_MOUSEEVENTS=a.HAS_TOUCHEVENTS&&a.IS_MOBILE||a.HAS_POINTEREVENTS,a.CALCULATE_INTERVAL=25;var h={},d=a.DIRECTION_DOWN="down",l=a.DIRECTION_LEFT="left",c=a.DIRECTION_UP="up",p=a.DIRECTION_RIGHT="right",u=a.POINTER_MOUSE="mouse",m=a.POINTER_TOUCH="touch",g=a.POINTER_PEN="pen",f=a.EVENT_START="start",v=a.EVENT_MOVE="move",y=a.EVENT_END="end",b=a.EVENT_RELEASE="release",_=a.EVENT_TOUCH="touch";a.READY=!1,a.plugins=a.plugins||{},a.gestures=a.gestures||{};var x=a.utils={extend:function(t,e,i){for(var s in e)!e.hasOwnProperty(s)||t[s]!==n&&i||(t[s]=e[s]);return t},on:function(t,e,i){t.addEventListener(e,i,!1)},off:function(t,e,i){t.removeEventListener(e,i,!1)},each:function(t,e,i){var s,o;if("forEach"in t)t.forEach(e,i);else if(t.length!==n){for(s=0,o=t.length;o>s;s++)if(e.call(i,t[s],s,t)===!1)return}else for(s in t)if(t.hasOwnProperty(s)&&e.call(i,t[s],s,t)===!1)return},inStr:function(t,e){return t.indexOf(e)>-1},inArray:function(t,e){if(t.indexOf){var i=t.indexOf(e);return-1===i?!1:i}for(var s=0,o=t.length;o>s;s++)if(t[s]===e)return s;return!1},toArray:function(t){return Array.prototype.slice.call(t,0)},hasParent:function(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1},getCenter:function(t){var e=[],i=[],s=[],o=[],n=Math.min,r=Math.max;return 1===t.length?{pageX:t[0].pageX,pageY:t[0].pageY,clientX:t[0].clientX,clientY:t[0].clientY}:(x.each(t,function(t){e.push(t.pageX),i.push(t.pageY),s.push(t.clientX),o.push(t.clientY)}),{pageX:(n.apply(Math,e)+r.apply(Math,e))/2,pageY:(n.apply(Math,i)+r.apply(Math,i))/2,clientX:(n.apply(Math,s)+r.apply(Math,s))/2,clientY:(n.apply(Math,o)+r.apply(Math,o))/2})},getVelocity:function(t,e,i){return{x:Math.abs(e/t)||0,y:Math.abs(i/t)||0}},getAngle:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return 180*Math.atan2(s,i)/Math.PI},getDirection:function(t,e){var i=Math.abs(t.clientX-e.clientX),s=Math.abs(t.clientY-e.clientY);return i>=s?t.clientX-e.clientX>0?l:p:t.clientY-e.clientY>0?c:d},getDistance:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return Math.sqrt(i*i+s*s)},getScale:function(t,e){return t.length>=2&&e.length>=2?this.getDistance(e[0],e[1])/this.getDistance(t[0],t[1]):1},getRotation:function(t,e){return t.length>=2&&e.length>=2?this.getAngle(e[1],e[0])-this.getAngle(t[1],t[0]):0},isVertical:function(t){return t==c||t==d},setPrefixedCss:function(t,e,i,s){var o=["","Webkit","Moz","O","ms"];e=x.toCamelCase(e);for(var n=0;n0&&this.started&&(r=v),this.started=!0;var d=this.collectEventData(i,r,o,t);return e!=y&&s.call(M,d),a&&(d.changedLength=h,d.eventType=a,s.call(M,d),d.eventType=r,delete d.changedLength),r==y&&(s.call(M,d),this.started=!1),r},determineEventTypes:function(){var t;return t=a.HAS_POINTEREVENTS?o.PointerEvent?["pointerdown","pointermove","pointerup pointercancel lostpointercapture"]:["MSPointerDown","MSPointerMove","MSPointerUp MSPointerCancel MSLostPointerCapture"]:a.NO_MOUSEEVENTS?["touchstart","touchmove","touchend touchcancel"]:["touchstart mousedown","touchmove mousemove","touchend touchcancel mouseup"],h[f]=t[0],h[v]=t[1],h[y]=t[2],h},getTouchList:function(t,e){if(a.HAS_POINTEREVENTS)return S.getTouchList();if(t.touches){if(e==v)return t.touches;var i=[],s=[].concat(x.toArray(t.touches),x.toArray(t.changedTouches)),o=[];return x.each(s,function(t){x.inArray(i,t.identifier)===!1&&o.push(t),i.push(t.identifier)}),o}return t.identifier=1,[t]},collectEventData:function(t,e,i,s){var o=m;return x.inStr(s.type,"mouse")||S.matchType(u,s)?o=u:S.matchType(g,s)&&(o=g),{center:x.getCenter(i),timeStamp:Date.now(),target:s.target,touches:i,eventType:e,pointerType:o,srcEvent:s,preventDefault:function(){var t=this.srcEvent;t.preventManipulation&&t.preventManipulation(),t.preventDefault&&t.preventDefault()},stopPropagation:function(){this.srcEvent.stopPropagation()},stopDetect:function(){return M.stopDetect()}}}},S=a.PointerEvent={pointers:{},getTouchList:function(){var t=[];return x.each(this.pointers,function(e){t.push(e)}),t},updatePointer:function(t,e){t==y||t!=y&&1!==e.buttons?delete this.pointers[e.pointerId]:(e.identifier=e.pointerId,this.pointers[e.pointerId]=e)},matchType:function(t,e){if(!e.pointerType)return!1;var i=e.pointerType,s={};return s[u]=i===(e.MSPOINTER_TYPE_MOUSE||u),s[m]=i===(e.MSPOINTER_TYPE_TOUCH||m),s[g]=i===(e.MSPOINTER_TYPE_PEN||g),s[t]},reset:function(){this.pointers={}}},M=a.detection={gestures:[],current:null,previous:null,stopped:!1,startDetect:function(t,e){this.current||(this.stopped=!1,this.current={inst:t,startEvent:x.extend({},e),lastEvent:!1,lastCalcEvent:!1,futureCalcEvent:!1,lastCalcData:{},name:""},this.detect(e))},detect:function(t){if(this.current&&!this.stopped){t=this.extendEventData(t);var e=this.current.inst,i=e.options;return x.each(this.gestures,function(s){!this.stopped&&e.enabled&&i[s.name]&&s.handler.call(s,t,e)},this),this.current&&(this.current.lastEvent=t),t.eventType==y&&this.stopDetect(),t}},stopDetect:function(){this.previous=x.extend({},this.current),this.current=null,this.stopped=!0},getCalculatedData:function(t,e,i,s,o){var n=this.current,r=!1,h=n.lastCalcEvent,d=n.lastCalcData;h&&t.timeStamp-h.timeStamp>a.CALCULATE_INTERVAL&&(e=h.center,i=t.timeStamp-h.timeStamp,s=t.center.clientX-h.center.clientX,o=t.center.clientY-h.center.clientY,r=!0),(t.eventType==_||t.eventType==b)&&(n.futureCalcEvent=t),(!n.lastCalcEvent||r)&&(d.velocity=x.getVelocity(i,s,o),d.angle=x.getAngle(e,t.center),d.direction=x.getDirection(e,t.center),n.lastCalcEvent=n.futureCalcEvent||t,n.futureCalcEvent=t),t.velocityX=d.velocity.x,t.velocityY=d.velocity.y,t.interimAngle=d.angle,t.interimDirection=d.direction},extendEventData:function(t){var e=this.current,i=e.startEvent,s=e.lastEvent||i;(t.eventType==_||t.eventType==b)&&(i.touches=[],x.each(t.touches,function(t){i.touches.push({clientX:t.clientX,clientY:t.clientY})}));var o=t.timeStamp-i.timeStamp,n=t.center.clientX-i.center.clientX,r=t.center.clientY-i.center.clientY;return this.getCalculatedData(t,s.center,o,n,r),x.extend(t,{startEvent:i,deltaTime:o,deltaX:n,deltaY:r,distance:x.getDistance(i.center,t.center),angle:x.getAngle(i.center,t.center),direction:x.getDirection(i.center,t.center),scale:x.getScale(i.touches,t.touches),rotation:x.getRotation(i.touches,t.touches)}),t},register:function(t){var e=t.defaults||{};return e[t.name]===n&&(e[t.name]=!0),x.extend(a.defaults,e,!0),t.index=t.index||1e3,this.gestures.push(t),this.gestures.sort(function(t,e){return t.indexe.index?1:0}),this.gestures}};a.Instance=function(t,e){var i=this;r(),this.element=t,this.enabled=!0,x.each(e,function(t,i){delete e[i],e[x.toCamelCase(i)]=t}),this.options=x.extend(x.extend({},a.defaults),e||{}),this.options.behavior&&x.toggleBehavior(this.element,this.options.behavior,!0),this.eventStartHandler=w.onTouch(t,f,function(t){i.enabled&&t.eventType==f?M.startDetect(i,t):t.eventType==_&&M.detect(t)}),this.eventHandlers=[]},a.Instance.prototype={on:function(t,e){var i=this;return w.on(i.element,t,e,function(t){i.eventHandlers.push({gesture:t,handler:e})}),i},off:function(t,e){var i=this;return w.off(i.element,t,e,function(t){var s=x.inArray({gesture:t,handler:e});s!==!1&&i.eventHandlers.splice(s,1)}),i},trigger:function(t,e){e||(e={});var i=a.DOCUMENT.createEvent("Event");i.initEvent(t,!0,!0),i.gesture=e;var s=this.element;return x.hasParent(e.target,s)&&(s=e.target),s.dispatchEvent(i),this},enable:function(t){return this.enabled=t,this},dispose:function(){var t,e;for(x.toggleBehavior(this.element,this.options.behavior,!1),t=-1;e=this.eventHandlers[++t];)x.off(this.element,e.gesture,e.handler);return this.eventHandlers=[],w.off(this.element,h[f],this.eventStartHandler),null}},function(t){function e(e,s){var o=M.current;if(!(s.options.dragMaxTouches>0&&e.touches.length>s.options.dragMaxTouches))switch(e.eventType){case f:i=!1;break;case v:if(e.distance0)){var r=Math.abs(s.options.dragMinDistance/e.distance);n.pageX+=e.deltaX*r,n.pageY+=e.deltaY*r,n.clientX+=e.deltaX*r,n.clientY+=e.deltaY*r,e=M.extendEventData(e)}(o.lastEvent.dragLockToAxis||s.options.dragLockToAxis&&s.options.dragLockMinDistance<=e.distance)&&(e.dragLockToAxis=!0);var a=o.lastEvent.direction;e.dragLockToAxis&&a!==e.direction&&(e.direction=x.isVertical(a)?e.deltaY<0?c:d:e.deltaX<0?l:p),i||(s.trigger(t+"start",e),i=!0),s.trigger(t,e),s.trigger(t+e.direction,e);var h=x.isVertical(e.direction);(s.options.dragBlockVertical&&h||s.options.dragBlockHorizontal&&!h)&&e.preventDefault();break;case b:i&&e.changedLength<=s.options.dragMaxTouches&&(s.trigger(t+"end",e),i=!1);break;case y:i=!1}}var i=!1;a.gestures.Drag={name:t,index:50,handler:e,defaults:{dragMinDistance:10,dragDistanceCorrection:!0,dragMaxTouches:1,dragBlockHorizontal:!1,dragBlockVertical:!1,dragLockToAxis:!1,dragLockMinDistance:25}}}("drag"),a.gestures.Gesture={name:"gesture",index:1337,handler:function(t,e){e.trigger(this.name,t)}},function(t){function e(e,s){var o=s.options,n=M.current;switch(e.eventType){case f:clearTimeout(i),n.name=t,i=setTimeout(function(){n&&n.name==t&&s.trigger(t,e)},o.holdTimeout);break;case v:e.distance>o.holdThreshold&&clearTimeout(i);break;case b:clearTimeout(i)}}var i;a.gestures.Hold={name:t,index:10,defaults:{holdTimeout:500,holdThreshold:2},handler:e}}("hold"),a.gestures.Release={name:"release",index:1/0,handler:function(t,e){t.eventType==b&&e.trigger(this.name,t)}},a.gestures.Swipe={name:"swipe",index:40,defaults:{swipeMinTouches:1,swipeMaxTouches:1,swipeVelocityX:.6,swipeVelocityY:.6},handler:function(t,e){if(t.eventType==b){var i=t.touches.length,s=e.options;if(is.swipeMaxTouches)return;(t.velocityX>s.swipeVelocityX||t.velocityY>s.swipeVelocityY)&&(e.trigger(this.name,t),e.trigger(this.name+t.direction,t))}}},function(t){function e(e,s){var o,n,r=s.options,a=M.current,h=M.previous;switch(e.eventType){case f:i=!1;break;case v:i=i||e.distance>r.tapMaxDistance;break;case y:!x.inStr(e.srcEvent.type,"cancel")&&e.deltaTimes.options.transformMinRotation&&s.trigger("rotate",e),o>s.options.transformMinScale&&(s.trigger("pinch",e),s.trigger("pinch"+(e.scale<1?"in":"out"),e));break;case b:i&&e.changedLength<2&&(s.trigger(t+"end",e),i=!1)}}var i=!1;a.gestures.Transform={name:t,index:45,defaults:{transformMinScale:.01,transformMinRotation:1},handler:e}}("transform"),s=function(){return a}.call(e,i,e,t),!(s!==n&&(t.exports=s))}(window)},function(t,e){e.startWithClustering=function(){this.clusterToFit(this.constants.clustering.initialMaxNodes,!0),this.updateLabels(),this.stabilize&&this._stabilize(),this.start()},e.clusterToFit=function(t,e){for(var i=this.nodeIndices.length,s=50,o=0;i>t&&s>o;)o%3==0?(this.forceAggregateHubs(!0),this.normalizeClusterLevels()):this.increaseClusterLevel(),i=this.nodeIndices.length,o+=1;o>0&&1==e&&this.repositionNodes(),this._updateCalculationNodes()},e.openCluster=function(t){var e=this.moving;if(t.clusterSize>this.constants.clustering.sectorThreshold&&this._nodeInActiveArea(t)&&("default"!=this._sector()||1!=this.nodeIndices.length)){this._addSector(t);for(var i=0;this.nodeIndices.lengthi;)this.decreaseClusterLevel(),i+=1}else this._expandClusterNode(t,!1,!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this._updateCalculationNodes(),this.updateLabels();this.moving!=e&&this.start()},e.updateClustersDefault=function(){1==this.constants.clustering.enabled&&this.updateClusters(0,!1,!1)},e.increaseClusterLevel=function(){this.updateClusters(-1,!1,!0)},e.decreaseClusterLevel=function(){this.updateClusters(1,!1,!0)},e.updateClusters=function(t,e,i,s){var o=this.moving,n=this.nodeIndices.length;this.previousScale>this.scale&&0==t&&this._collapseSector(),this.previousScale>this.scale||-1==t?this._formClusters(i):(this.previousScalethis.scale||-1==t)&&(this._aggregateHubs(i),this._updateNodeIndexList()),(this.previousScale>this.scale||-1==t)&&(this.handleChains(),this._updateNodeIndexList()),this.previousScale=this.scale,this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.lengththis.constants.clustering.chainThreshold&&this._reduceAmountOfChains(1-this.constants.clustering.chainThreshold/t)},e._aggregateHubs=function(t){this._getHubSize(),this._formClustersByHub(t,!1)},e.forceAggregateHubs=function(t){var e=this.moving,i=this.nodeIndices.length;this._aggregateHubs(!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.length!=i&&(this.clusterSession+=1),(0==t||void 0===t)&&this.moving!=e&&this.start()},e._openClustersBySize=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];1==e.inView()&&(e.width*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientWidth||e.height*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientHeight)&&this.openCluster(e)}},e._openClusters=function(t,e){for(var i=0;i1&&(t.clusterSizei)){var r=n.from,a=n.to;n.to.mass>n.from.mass&&(r=n.to,a=n.from),1==a.dynamicEdgesLength?this._addToCluster(r,a,!1):1==r.dynamicEdgesLength&&this._addToCluster(a,r,!1)}}},e._forceClustersByZoom=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];if(1==e.dynamicEdgesLength&&0!=e.dynamicEdges.length){var i=e.dynamicEdges[0],s=i.toId==e.id?this.nodes[i.fromId]:this.nodes[i.toId];e.id!=s.id&&(s.mass>e.mass?this._addToCluster(s,e,!0):this._addToCluster(e,s,!0))}}},e._clusterToSmallestNeighbour=function(t){for(var e=-1,i=null,s=0;so.clusterSessions.length&&(e=o.clusterSessions.length,i=o)}null!=o&&void 0!==this.nodes[o.id]&&this._addToCluster(o,t,!0)},e._formClustersByHub=function(t,e){for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&this._formClusterFromHub(this.nodes[i],t,e)},e._formClusterFromHub=function(t,e,i,s){if(void 0===s&&(s=0),t.dynamicEdgesLength>=this.hubThreshold&&0==i||t.dynamicEdgesLength==this.hubThreshold&&1==i){for(var o,n,r,a=this.constants.clustering.clusterEdgeThreshold/this.scale,h=!1,d=[],l=t.dynamicEdges.length,c=0;l>c;c++)d.push(t.dynamicEdges[c].id);if(0==e)for(h=!1,c=0;l>c;c++){var p=this.edges[d[c]];if(void 0!==p&&p.connected&&p.toId!=p.fromId&&(o=p.to.x-p.from.x,n=p.to.y-p.from.y,r=Math.sqrt(o*o+n*n),a>r)){h=!0;break}}if(!e&&h||e)for(c=0;l>c;c++)if(p=this.edges[d[c]],void 0!==p){var u=this.nodes[p.fromId==t.id?p.toId:p.fromId];u.dynamicEdges.length<=this.hubThreshold+s&&u.id!=t.id&&this._addToCluster(t,u,e)}}},e._addToCluster=function(t,e,i){t.containedNodes[e.id]=e;for(var s=0;s1)for(var s=0;s1&&(e.label="[".concat(String(e.clusterSize),"]"))}for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(e=this.nodes[t],1==e.clusterSize&&(e.label=void 0!==e.originalLabel?e.originalLabel:String(e.id)))},e.normalizeClusterLevels=function(){var t,e=0,i=1e9,s=0;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(s=this.nodes[t].clusterSessions.length,s>e&&(e=s),i>s&&(i=s));if(e-i>this.constants.clustering.clusterLevelDifference){var o=this.nodeIndices.length,n=e-this.constants.clustering.clusterLevelDifference;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodes[t].clusterSessions.lengths&&(s=n.dynamicEdgesLength),t+=n.dynamicEdgesLength,e+=Math.pow(n.dynamicEdgesLength,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r);this.hubThreshold=Math.floor(t+2*a),this.hubThreshold>s&&(this.hubThreshold=s)},e._reduceAmountOfChains=function(t){this.hubThreshold=2;var e=Math.floor(this.nodeIndices.length*t);for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&e>0&&(this._formClusterFromHub(this.nodes[i],!0,!0,1),e-=1)},e._getChainFraction=function(){var t=0,e=0;for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&(2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&(t+=1),e+=1);return t/e}},function(t,e,i){var s=i(1);e._putDataInSector=function(){this.sectors.active[this._sector()].nodes=this.nodes,this.sectors.active[this._sector()].edges=this.edges,this.sectors.active[this._sector()].nodeIndices=this.nodeIndices},e._switchToSector=function(t,e){void 0===e||"active"==e?this._switchToActiveSector(t):this._switchToFrozenSector(t)},e._switchToActiveSector=function(t){this.nodeIndices=this.sectors.active[t].nodeIndices,this.nodes=this.sectors.active[t].nodes,this.edges=this.sectors.active[t].edges},e._switchToSupportSector=function(){this.nodeIndices=this.sectors.support.nodeIndices,this.nodes=this.sectors.support.nodes,this.edges=this.sectors.support.edges},e._switchToFrozenSector=function(t){this.nodeIndices=this.sectors.frozen[t].nodeIndices,this.nodes=this.sectors.frozen[t].nodes,this.edges=this.sectors.frozen[t].edges},e._loadLatestSector=function(){this._switchToSector(this._sector())},e._sector=function(){return this.activeSector[this.activeSector.length-1]},e._previousSector=function(){if(this.activeSector.length>1)return this.activeSector[this.activeSector.length-2];throw new TypeError("there are not enough sectors in the this.activeSector array.")},e._setActiveSector=function(t){this.activeSector.push(t)},e._forgetLastSector=function(){this.activeSector.pop()},e._createNewSector=function(t){this.sectors.active[t]={nodes:{},edges:{},nodeIndices:[],formationScale:this.scale,drawingNode:void 0},this.sectors.active[t].drawingNode=new Node({id:t,color:{background:"#eaefef",border:"495c5e"}},{},{},this.constants),this.sectors.active[t].drawingNode.clusterSize=2},e._deleteActiveSector=function(t){delete this.sectors.active[t]},e._deleteFrozenSector=function(t){delete this.sectors.frozen[t]},e._freezeSector=function(t){this.sectors.frozen[t]=this.sectors.active[t],this._deleteActiveSector(t)},e._activateSector=function(t){this.sectors.active[t]=this.sectors.frozen[t],this._deleteFrozenSector(t)},e._mergeThisWithFrozen=function(t){for(var e in this.nodes)this.nodes.hasOwnProperty(e)&&(this.sectors.frozen[t].nodes[e]=this.nodes[e]);for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.sectors.frozen[t].edges[i]=this.edges[i]);for(var s=0;s1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInSupportSector=function(t,e){if(void 0===e)this._switchToSupportSector(),this[t]();else{this._switchToSupportSector();var i=Array.prototype.splice.call(arguments,1);i.length>1?this[t](i[0],i[1]):this[t](e)}this._loadLatestSector()},e._doInAllFrozenSectors=function(t,e){if(void 0===e)for(var i in this.sectors.frozen)this.sectors.frozen.hasOwnProperty(i)&&(this._switchToFrozenSector(i),this[t]());else for(var i in this.sectors.frozen)if(this.sectors.frozen.hasOwnProperty(i)){this._switchToFrozenSector(i);var s=Array.prototype.splice.call(arguments,1);s.length>1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInAllSectors=function(t,e){var i=Array.prototype.splice.call(arguments,1);void 0===e?(this._doInAllActiveSectors(t),this._doInAllFrozenSectors(t)):i.length>1?(this._doInAllActiveSectors(t,i[0],i[1]),this._doInAllFrozenSectors(t,i[0],i[1])):(this._doInAllActiveSectors(t,e),this._doInAllFrozenSectors(t,e))},e._clearNodeIndexList=function(){var t=this._sector();this.sectors.active[t].nodeIndices=[],this.nodeIndices=this.sectors.active[t].nodeIndices},e._drawSectorNodes=function(t,e){var i,s=1e9,o=-1e9,n=1e9,r=-1e9;for(var a in this.sectors[e])if(this.sectors[e].hasOwnProperty(a)&&void 0!==this.sectors[e][a].drawingNode){this._switchToSector(a,e),s=1e9,o=-1e9,n=1e9,r=-1e9;for(var h in this.nodes)this.nodes.hasOwnProperty(h)&&(i=this.nodes[h],i.resize(t),n>i.x-.5*i.width&&(n=i.x-.5*i.width),ri.y-.5*i.height&&(s=i.y-.5*i.height),o0?this.nodes[i[i.length-1]]:null},e._getEdgesOverlappingWith=function(t,e){var i=this.edges;for(var s in i)i.hasOwnProperty(s)&&i[s].isOverlappingWith(t)&&e.push(s)},e._getAllEdgesOverlappingWith=function(t){var e=[];return this._doInAllActiveSectors("_getEdgesOverlappingWith",t,e),e},e._getEdgeAt=function(t){var e=this._pointerToPositionObject(t),i=this._getAllEdgesOverlappingWith(e);return i.length>0?this.edges[i[i.length-1]]:null},e._addToSelection=function(t){t instanceof s?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t},e._addToHover=function(t){t instanceof s?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t},e._removeFromSelection=function(t){t instanceof s?delete this.selectionObj.nodes[t.id]:delete this.selectionObj.edges[t.id]},e._unselectAll=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].unselect();for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&this.selectionObj.edges[i].unselect();this.selectionObj={nodes:{},edges:{}},0==t&&this.emit("select",this.getSelection())},e._unselectClusters=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].clusterSize>1&&(this.selectionObj.nodes[e].unselect(),this._removeFromSelection(this.selectionObj.nodes[e]));0==t&&this.emit("select",this.getSelection())},e._getSelectedNodeCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedNode=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t];return null},e._getSelectedEdge=function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return null},e._getSelectedEdgeCount=function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedObjectCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t},e._selectionIsEmpty=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0},e._clusterInSelection=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1},e._selectConnectedEdges=function(t){for(var e=0;ee;e++){s=t[e];var o=this.nodes[s];if(!o)throw new RangeError('Node with id "'+s+'" not found');this._selectObject(o,!0,!0)}console.log("setSelection is deprecated. Please use selectNodes instead."),this.redraw()},e.selectNodes=function(t,e){var i,s,o;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),i=0,s=t.length;s>i;i++){o=t[i];var n=this.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this._selectObject(n,!0,!0,e)}this.redraw()},e.selectEdges=function(t){var e,i,s;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),e=0,i=t.length;i>e;e++){s=t[e];var o=this.edges[s];if(!o)throw new RangeError('Edge with id "'+s+'" not found');this._selectObject(o,!0,!0,highlightEdges)}this.redraw()},e._updateSelection=function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},function(t,e,i){var s=i(1),o=i(36),n=i(33);e._clearManipulatorBar=function(){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild)},e._restoreOverloadedFunctions=function(){for(var t in this.cachedFunctions)this.cachedFunctions.hasOwnProperty(t)&&(this[t]=this.cachedFunctions[t])},e._toggleEditMode=function(){this.editMode=!this.editMode;var t=document.getElementById("network-manipulationDiv"),e=document.getElementById("network-manipulation-closeDiv"),i=document.getElementById("network-manipulation-editMode");1==this.editMode?(t.style.display="block",e.style.display="block",i.style.display="none",e.onclick=this._toggleEditMode.bind(this)):(t.style.display="none",e.style.display="none",i.style.display="block",e.onclick=null),this._createManipulatorBar()},e._createManipulatorBar=function(){if(this.boundFunction&&this.off("select",this.boundFunction),void 0!==this.edgeBeingEdited&&(this.edgeBeingEdited._disableControlNodes(),this.edgeBeingEdited=void 0,this.selectedControlNode=null,this.controlNodesActive=!1),this._restoreOverloadedFunctions(),this.freezeSimulation=!1,this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,1==this.editMode){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDiv.innerHTML=""+this.constants.labels.add+""+this.constants.labels.link+"",1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDiv.innerHTML+=""+this.constants.labels.editNode+"":1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDiv.innerHTML+=""+this.constants.labels.editEdge+""),0==this._selectionIsEmpty()&&(this.manipulationDiv.innerHTML+=""+this.constants.labels.del+"");var t=document.getElementById("network-manipulate-addNode");t.onclick=this._createAddNodeToolbar.bind(this);var e=document.getElementById("network-manipulate-connectNode");if(e.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit){var i=document.getElementById("network-manipulate-editNode");i.onclick=this._editNode.bind(this)}else if(1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()){var i=document.getElementById("network-manipulate-editEdge");i.onclick=this._createEditEdgeToolbar.bind(this)}if(0==this._selectionIsEmpty()){var s=document.getElementById("network-manipulate-delete");s.onclick=this._deleteSelected.bind(this)}var o=document.getElementById("network-manipulation-closeDiv");o.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{this.editModeDiv.innerHTML=""+this.constants.labels.edit+"";var n=document.getElementById("network-manipulate-editModeButton");n.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction),this.manipulationDiv.innerHTML=""+this.constants.labels.back+" "+this.constants.labels.addDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._addNode.bind(this),this.on("select",this.boundFunction)},e._createAddEdgeToolbar=function(){this._clearManipulatorBar(),this._unselectAll(!0),this.freezeSimulation=!0,this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDiv.innerHTML=""+this.constants.labels.back+" "+this.constants.labels.linkDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._handleConnect.bind(this),this.on("select",this.boundFunction),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._handleOnRelease=this._handleOnRelease,this._handleTouch=this._handleConnect,this._handleOnRelease=this._finishConnect,this._redraw()},e._createEditEdgeToolbar=function(){this._clearManipulatorBar(),this.controlNodesActive=!0,this.boundFunction&&this.off("select",this.boundFunction),this.edgeBeingEdited=this._getSelectedEdge(),this.edgeBeingEdited._enableControlNodes(),this.manipulationDiv.innerHTML=""+this.constants.labels.back+" "+this.constants.labels.editEdgeDescription+"";var t=document.getElementById("network-manipulate-back");t.onclick=this._createManipulatorBar.bind(this),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._handleOnRelease=this._handleOnRelease,this.cachedFunctions._handleTap=this._handleTap,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleTouch=this._selectControlNode,this._handleTap=function(){},this._handleOnDrag=this._controlNodeDrag,this._handleDragStart=function(){},this._handleOnRelease=this._releaseControlNode,this._redraw()},e._selectControlNode=function(t){this.edgeBeingEdited.controlNodes.from.unselect(),this.edgeBeingEdited.controlNodes.to.unselect(),this.selectedControlNode=this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(t.x),this._YconvertDOMtoCanvas(t.y)),null!==this.selectedControlNode&&(this.selectedControlNode.select(),this.freezeSimulation=!0),this._redraw()},e._controlNodeDrag=function(t){var e=this._getPointer(t.gesture.center);null!==this.selectedControlNode&&void 0!==this.selectedControlNode&&(this.selectedControlNode.x=this._XconvertDOMtoCanvas(e.x),this.selectedControlNode.y=this._YconvertDOMtoCanvas(e.y)),this._redraw()},e._releaseControlNode=function(t){var e=this._getNodeAt(t);null!=e?(1==this.edgeBeingEdited.controlNodes.from.selected&&(this._editEdge(e.id,this.edgeBeingEdited.to.id),this.edgeBeingEdited.controlNodes.from.unselect()),1==this.edgeBeingEdited.controlNodes.to.selected&&(this._editEdge(this.edgeBeingEdited.from.id,e.id),this.edgeBeingEdited.controlNodes.to.unselect())):this.edgeBeingEdited._restoreControlNodes(),this.freezeSimulation=!1,this._redraw()},e._handleConnect=function(t){if(0==this._getSelectedNodeCount()){var e=this._getNodeAt(t);null!=e&&(e.clusterSize>1?alert("Cannot create edges to a cluster."):(this._selectObject(e,!1),this.sectors.support.nodes.targetNode=new o({id:"targetNode"},{},{},this.constants),this.sectors.support.nodes.targetNode.x=e.x,this.sectors.support.nodes.targetNode.y=e.y,this.sectors.support.nodes.targetViaNode=new o({id:"targetViaNode"},{},{},this.constants),this.sectors.support.nodes.targetViaNode.x=e.x,this.sectors.support.nodes.targetViaNode.y=e.y,this.sectors.support.nodes.targetViaNode.parentEdgeId="connectionEdge",this.edges.connectionEdge=new n({id:"connectionEdge",from:e.id,to:this.sectors.support.nodes.targetNode.id},this,this.constants),this.edges.connectionEdge.from=e,this.edges.connectionEdge.connected=!0,this.edges.connectionEdge.smooth=!0,this.edges.connectionEdge.selected=!0,this.edges.connectionEdge.to=this.sectors.support.nodes.targetNode,this.edges.connectionEdge.via=this.sectors.support.nodes.targetViaNode,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center);this.sectors.support.nodes.targetNode.x=this._XconvertDOMtoCanvas(e.x),this.sectors.support.nodes.targetNode.y=this._YconvertDOMtoCanvas(e.y),this.sectors.support.nodes.targetViaNode.x=.5*(this._XconvertDOMtoCanvas(e.x)+this.edges.connectionEdge.from.x),this.sectors.support.nodes.targetViaNode.y=this._YconvertDOMtoCanvas(e.y)},this.moving=!0,this.start()))}},e._finishConnect=function(t){if(1==this._getSelectedNodeCount()){this._handleOnDrag=this.cachedFunctions._handleOnDrag,delete this.cachedFunctions._handleOnDrag;var e=this.edges.connectionEdge.fromId;delete this.edges.connectionEdge,delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode;var i=this._getNodeAt(t);null!=i&&(i.clusterSize>1?alert("Cannot create edges to a cluster."):(this._createEdge(e,i.id),this._createManipulatorBar())),this._unselectAll()}},e._addNode=function(){if(this._selectionIsEmpty()&&1==this.editMode){var t=this._pointerToPositionObject(this.pointerPosition),e={id:s.randomUUID(),x:t.left,y:t.top,label:"new",allowedToMoveX:!0,allowedToMoveY:!0};if(this.triggerFunctions.add)if(2==this.triggerFunctions.add.length){var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else alert(this.constants.labels.addError),this._createManipulatorBar(),this.moving=!0,this.start();else this.nodesData.add(e),this._createManipulatorBar(),this.moving=!0,this.start()}},e._createEdge=function(t,e){if(1==this.editMode){var i={from:t,to:e};if(this.triggerFunctions.connect)if(2==this.triggerFunctions.connect.length){var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.start()})}else alert(this.constants.labels.linkError),this.moving=!0,this.start();else this.edgesData.add(i),this.moving=!0,this.start()}},e._editEdge=function(t,e){if(1==this.editMode){var i={id:this.edgeBeingEdited.id,from:t,to:e};if(this.triggerFunctions.editEdge)if(2==this.triggerFunctions.editEdge.length){var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else alert(this.constants.labels.linkError),this.moving=!0,this.start();else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(this.triggerFunctions.edit&&1==this.editMode){var t=this._getSelectedNode(),e={id:t.id,label:t.label,group:t.group,shape:t.shape,color:{background:t.color.background,border:t.color.border,highlight:{background:t.color.highlight.background,border:t.color.highlight.border}}};if(2==this.triggerFunctions.edit.length){var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else alert(this.constants.labels.editError)}else alert(this.constants.labels.editBoundError)},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.labels.deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};(this.triggerFunctions.del.length=2)?this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()}):alert(this.constants.labels.deleteError)}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=i(1);e._cleanNavigation=function(){var t=document.getElementById("network-navigation_wrapper");null!=t&&this.containerElement.removeChild(t),document.onmouseup=null},e._loadNavigationElements=function(){this._cleanNavigation(),this.navigationDivs={};var t=["up","down","left","right","zoomIn","zoomOut","zoomExtends"],e=["_moveUp","_moveDown","_moveLeft","_moveRight","_zoomIn","_zoomOut","zoomExtent"];this.navigationDivs.wrapper=document.createElement("div"),this.navigationDivs.wrapper.id="network-navigation_wrapper",this.navigationDivs.wrapper.style.position="absolute",this.navigationDivs.wrapper.style.width=this.frame.canvas.clientWidth+"px",this.navigationDivs.wrapper.style.height=this.frame.canvas.clientHeight+"px",this.containerElement.insertBefore(this.navigationDivs.wrapper,this.frame);for(var i=0;i0){"RL"==this.constants.hierarchicalLayout.direction||"DU"==this.constants.hierarchicalLayout.direction?this.constants.hierarchicalLayout.levelSeparation*=-1:this.constants.hierarchicalLayout.levelSeparation=Math.abs(this.constants.hierarchicalLayout.levelSeparation),"RL"==this.constants.hierarchicalLayout.direction||"LR"==this.constants.hierarchicalLayout.direction?1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="vertical"):1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="horizontal");var t,e,i=0,s=!1,o=!1;for(e in this.nodes)this.nodes.hasOwnProperty(e)&&(t=this.nodes[e],-1!=t.level?s=!0:o=!0,is&&(n.xFixed=!1,n.x=i[n.level].minPos,r=!0):n.yFixed&&n.level>s&&(n.yFixed=!1,n.y=i[n.level].minPos,r=!0),1==r&&(i[n.level].minPos+=i[n.level].nodeSpacing,n.edges.length>1&&this._placeBranchNodes(n.edges,n.id,i,n.level))}},e._setLevel=function(t,e,i){for(var s=0;st)&&(o.level=t,e.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._restoreNodes=function(){for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.nodes[t].xFixed=!1,this.nodes[t].yFixed=!1)}},function(t,e,i){function s(){this.constants.smoothCurves.enabled=!this.constants.smoothCurves.enabled;var t=document.getElementById("graph_toggleSmooth");t.style.background=1==this.constants.smoothCurves.enabled?"#A4FF56":"#FF8532",this._configureSmoothCurves(!1)}function o(){for(var t in this.calculationNodes)this.calculationNodes.hasOwnProperty(t)&&(this.calculationNodes[t].vx=0,this.calculationNodes[t].vy=0,this.calculationNodes[t].fx=0,this.calculationNodes[t].fy=0);1==this.constants.hierarchicalLayout.enabled?(this._setupHierarchicalLayout(),a.call(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),a.call(this,"graph_H_cg",1,"physics_centralGravity"),a.call(this,"graph_H_sc",1,"physics_springConstant"),a.call(this,"graph_H_sl",1,"physics_springLength"),a.call(this,"graph_H_damp",1,"physics_damping")):this.repositionNodes(),this.moving=!0,this.start()}function n(){var t="No options are required, default values used.",e=[],i=document.getElementById("graph_physicsMethod1"),s=document.getElementById("graph_physicsMethod2");if(1==i.checked){if(this.constants.physics.barnesHut.gravitationalConstant!=this.backupConstants.physics.barnesHut.gravitationalConstant&&e.push("gravitationalConstant: "+this.constants.physics.barnesHut.gravitationalConstant),this.constants.physics.centralGravity!=this.backupConstants.physics.barnesHut.centralGravity&&e.push("centralGravity: "+this.constants.physics.centralGravity),this.constants.physics.springLength!=this.backupConstants.physics.barnesHut.springLength&&e.push("springLength: "+this.constants.physics.springLength),this.constants.physics.springConstant!=this.backupConstants.physics.barnesHut.springConstant&&e.push("springConstant: "+this.constants.physics.springConstant),this.constants.physics.damping!=this.backupConstants.physics.barnesHut.damping&&e.push("damping: "+this.constants.physics.damping),0!=e.length){t="var options = {",t+="physics: {barnesHut: {";for(var o=0;othis.constants.clustering.clusterThreshold&&1==this.constants.clustering.enabled&&this.clusterToFit(this.constants.clustering.reduceToNodes,!1),this._calculateForces())},e._calculateForces=function(){this._calculateGravitationalForces(),this._calculateNodeForces(),this.constants.physics.springConstant>0&&(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic?this._calculateSpringForcesWithSupport():1==this.constants.physics.hierarchicalRepulsion.enabled?this._calculateHierarchicalSpringForces():this._calculateSpringForces())},e._updateCalculationNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this.calculationNodes={},this.calculationNodeIndices=[];for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.calculationNodes[t]=this.nodes[t]);var e=this.sectors.support.nodes;for(var i in e)e.hasOwnProperty(i)&&(this.edges.hasOwnProperty(e[i].parentEdgeId)?this.calculationNodes[i]=e[i]:e[i]._setForce(0,0));for(var s in this.calculationNodes)this.calculationNodes.hasOwnProperty(s)&&this.calculationNodeIndices.push(s)}else this.calculationNodes=this.nodes,this.calculationNodeIndices=this.nodeIndices},e._calculateGravitationalForces=function(){var t,e,i,s,o,n=this.calculationNodes,r=this.constants.physics.centralGravity,a=0;for(o=0;o
Simulation Mode:
Barnes Hut
Repulsion
Hierarchical
Barnes Hut
gravitationalConstant
0
-20000
centralGravity
0
3
springLength
0
500
springConstant
0
0.5
damping
0
0.3
Repulsion
nodeDistance
0
300
centralGravity
0
3
springLength
0
500
springConstant
0
0.5
damping
0
0.3
Hierarchical
nodeDistance
0
300
centralGravity
0
3
springLength
0
500
springConstant
0
0.5
damping
0
0.3
direction
1
4
levelSeparation
1
500
nodeSpacing
1
500
Options:
',this.containerElement.parentElement.insertBefore(this.physicsConfiguration,this.containerElement),this.optionsDiv=document.createElement("div"),this.optionsDiv.style.fontSize="14px",this.optionsDiv.style.fontFamily="verdana",this.containerElement.parentElement.insertBefore(this.optionsDiv,this.containerElement);var e;e=document.getElementById("graph_BH_gc"),e.onchange=a.bind(this,"graph_BH_gc",-1,"physics_barnesHut_gravitationalConstant"),e=document.getElementById("graph_BH_cg"),e.onchange=a.bind(this,"graph_BH_cg",1,"physics_centralGravity"),e=document.getElementById("graph_BH_sc"),e.onchange=a.bind(this,"graph_BH_sc",1,"physics_springConstant"),e=document.getElementById("graph_BH_sl"),e.onchange=a.bind(this,"graph_BH_sl",1,"physics_springLength"),e=document.getElementById("graph_BH_damp"),e.onchange=a.bind(this,"graph_BH_damp",1,"physics_damping"),e=document.getElementById("graph_R_nd"),e.onchange=a.bind(this,"graph_R_nd",1,"physics_repulsion_nodeDistance"),e=document.getElementById("graph_R_cg"),e.onchange=a.bind(this,"graph_R_cg",1,"physics_centralGravity"),e=document.getElementById("graph_R_sc"),e.onchange=a.bind(this,"graph_R_sc",1,"physics_springConstant"),e=document.getElementById("graph_R_sl"),e.onchange=a.bind(this,"graph_R_sl",1,"physics_springLength"),e=document.getElementById("graph_R_damp"),e.onchange=a.bind(this,"graph_R_damp",1,"physics_damping"),e=document.getElementById("graph_H_nd"),e.onchange=a.bind(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),e=document.getElementById("graph_H_cg"),e.onchange=a.bind(this,"graph_H_cg",1,"physics_centralGravity"),e=document.getElementById("graph_H_sc"),e.onchange=a.bind(this,"graph_H_sc",1,"physics_springConstant"),e=document.getElementById("graph_H_sl"),e.onchange=a.bind(this,"graph_H_sl",1,"physics_springLength"),e=document.getElementById("graph_H_damp"),e.onchange=a.bind(this,"graph_H_damp",1,"physics_damping"),e=document.getElementById("graph_H_direction"),e.onchange=a.bind(this,"graph_H_direction",t,"hierarchicalLayout_direction"),e=document.getElementById("graph_H_levsep"),e.onchange=a.bind(this,"graph_H_levsep",1,"hierarchicalLayout_levelSeparation"),e=document.getElementById("graph_H_nspac"),e.onchange=a.bind(this,"graph_H_nspac",1,"hierarchicalLayout_nodeSpacing");var i=document.getElementById("graph_physicsMethod1"),d=document.getElementById("graph_physicsMethod2"),l=document.getElementById("graph_physicsMethod3");d.checked=!0,this.constants.physics.barnesHut.enabled&&(i.checked=!0),this.constants.hierarchicalLayout.enabled&&(l.checked=!0);var c=document.getElementById("graph_toggleSmooth"),p=document.getElementById("graph_repositionNodes"),u=document.getElementById("graph_generateOptions");c.onclick=s.bind(this),p.onclick=o.bind(this),u.onclick=n.bind(this),c.style.background=1==this.constants.smoothCurves&&0==this.constants.dynamicSmoothCurves?"#A4FF56":"#FF8532",r.apply(this),i.onchange=r.bind(this),d.onchange=r.bind(this),l.onchange=r.bind(this)}},e._overWriteGraphConstants=function(t,e){var i=t.split("_");1==i.length?this.constants[i[0]]=e:2==i.length?this.constants[i[0]][i[1]]=e:3==i.length&&(this.constants[i[0]][i[1]][i[2]]=e)}},function(t,e,i){function s(t){return i(o(t))}function o(t){return n[t]||function(){throw new Error("Cannot find module '"+t+"'.")}()}var n={};s.keys=function(){return Object.keys(n)},s.resolve=o,t.exports=s},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l,c=this.calculationNodes,p=this.calculationNodeIndices,u=-2/3,m=4/3,g=this.constants.physics.repulsion.nodeDistance,f=g;for(d=0;di&&(r=.5*f>i?1:v*i+m,r*=0==n?1:1+n*this.constants.clustering.forceAmplification,r/=i,s=t*r,o=e*r,a.fx-=s,a.fy-=o,h.fx+=s,h.fy+=o)}}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l=this.calculationNodes,c=this.calculationNodeIndices,p=this.constants.physics.hierarchicalRepulsion.nodeDistance;for(h=0;hi?-Math.pow(u*i,2)+Math.pow(u*p,2):0,0==i?i=.01:n/=i,s=t*n,o=e*n,r.fx-=s,r.fy-=o,a.fx+=s,a.fy+=o}},e._calculateHierarchicalSpringForces=function(){for(var t,e,i,s,o,n,r,a,h,d=this.edges,l=this.calculationNodes,c=this.calculationNodeIndices,p=0;pn;n++)t=e[i[n]],this._getForceContribution(o.root.children.NW,t),this._getForceContribution(o.root.children.NE,t),this._getForceContribution(o.root.children.SW,t),this._getForceContribution(o.root.children.SE,t)}},e._getForceContribution=function(t,e){if(t.childrenCount>0){var i,s,o;if(i=t.centerOfMass.x-e.x,s=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+s*s),o*t.calcSize>this.constants.physics.barnesHut.theta){0==o&&(o=.1*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}else if(4==t.childrenCount)this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e);else if(t.children.data.id!=e.id){0==o&&(o=.5*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}}},e._formBarnesHutTree=function(t,e){for(var i,s=e.length,o=Number.MAX_VALUE,n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=-Number.MAX_VALUE,h=0;s>h;h++){var d=t[e[h]].x,l=t[e[h]].y;o>d&&(o=d),d>r&&(r=d),n>l&&(n=l),l>a&&(a=l)}var c=Math.abs(r-o)-Math.abs(a-n);c>0?(n-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var p=1e-5,u=Math.max(p,Math.abs(r-o)),m=.5*u,g=.5*(o+r),f=.5*(n+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:g-m,maxX:g+m,minY:f-m,maxY:f+m},size:u,calcSize:1/u,children:{data:null},maxWidth:0,level:0,childrenCount:4}};for(this._splitBranch(v.root),h=0;s>h;h++)i=t[e[h]],this._placeInTree(v.root,i);this.barnesHutTree=v},e._updateBranchMass=function(t,e){var i=t.mass+e.mass,s=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.mass,t.centerOfMass.x*=s,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.mass,t.centerOfMass.y*=s,t.mass=i;var o=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NW"):this._placeInRegion(t,e,"SW"):t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NE"):this._placeInRegion(t,e,"SE")},e._placeInRegion=function(t,e,i){switch(t.children[i].childrenCount){case 0:t.children[i].children.data=e,t.children[i].childrenCount=1,this._updateBranchMass(t.children[i],e);break;case 1:t.children[i].children.data.x==e.x&&t.children[i].children.data.y==e.y?(e.x+=Math.random(),e.y+=Math.random()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}},e._splitBranch=function(t){var e=null;1==t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)},e._insertRegion=function(t,e){var i,s,o,n,r=.5*t.size;switch(e){case"NW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:s,minY:o,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}},e._drawTree=function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))},e._drawBranch=function(t,e,i){void 0===i&&(i="#FF0000"),4==t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}}])});
//# sourceMappingURL=vis.map
\ No newline at end of file