@blare/angular2gridster
Version:
[](https://badge.fury.io/js/angular2gridster)
683 lines • 46.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
var GridListItem = /** @class */ (function () {
function GridListItem() {
}
Object.defineProperty(GridListItem.prototype, "$element", {
get: /**
* @return {?}
*/
function () {
return this.getItem().$element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(GridListItem.prototype, "x", {
get: /**
* @return {?}
*/
function () {
/** @type {?} */
var item = this.getItem();
/** @type {?} */
var breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
return this.getValueX(breakpoint);
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
/** @type {?} */
var item = this.getItem();
/** @type {?} */
var breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
this.setValueX(value, breakpoint);
},
enumerable: true,
configurable: true
});
Object.defineProperty(GridListItem.prototype, "y", {
get: /**
* @return {?}
*/
function () {
/** @type {?} */
var item = this.getItem();
/** @type {?} */
var breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
return this.getValueY(breakpoint);
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
/** @type {?} */
var item = this.getItem();
/** @type {?} */
var breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
this.setValueY(value, breakpoint);
},
enumerable: true,
configurable: true
});
Object.defineProperty(GridListItem.prototype, "w", {
get: /**
* @return {?}
*/
function () {
/** @type {?} */
var item = this.getItem();
/** @type {?} */
var breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
return this.getValueW(breakpoint);
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
/** @type {?} */
var item = this.getItem();
/** @type {?} */
var breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
this.setValueW(value, breakpoint);
},
enumerable: true,
configurable: true
});
Object.defineProperty(GridListItem.prototype, "h", {
get: /**
* @return {?}
*/
function () {
/** @type {?} */
var item = this.getItem();
/** @type {?} */
var breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
return this.getValueH(breakpoint);
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
/** @type {?} */
var item = this.getItem();
/** @type {?} */
var breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
this.setValueH(value, breakpoint);
},
enumerable: true,
configurable: true
});
Object.defineProperty(GridListItem.prototype, "autoSize", {
get: /**
* @return {?}
*/
function () {
return this.getItem().autoSize;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.getItem().autoSize = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(GridListItem.prototype, "dragAndDrop", {
get: /**
* @return {?}
*/
function () {
return !!this.getItem().dragAndDrop;
},
enumerable: true,
configurable: true
});
Object.defineProperty(GridListItem.prototype, "resizable", {
get: /**
* @return {?}
*/
function () {
return !!this.getItem().resizable;
},
enumerable: true,
configurable: true
});
Object.defineProperty(GridListItem.prototype, "positionX", {
get: /**
* @return {?}
*/
function () {
/** @type {?} */
var item = this.itemComponent || this.itemPrototype;
if (!item) {
return null;
}
return item.positionX;
},
enumerable: true,
configurable: true
});
Object.defineProperty(GridListItem.prototype, "positionY", {
get: /**
* @return {?}
*/
function () {
/** @type {?} */
var item = this.itemComponent || this.itemPrototype;
if (!item) {
return null;
}
return item.positionY;
},
enumerable: true,
configurable: true
});
/**
* @param {?} item
* @return {?}
*/
GridListItem.prototype.setFromGridsterItem = /**
* @param {?} item
* @return {?}
*/
function (item) {
if (this.isItemSet()) {
throw new Error('GridListItem is already set.');
}
this.itemComponent = item;
return this;
};
/**
* @param {?} item
* @return {?}
*/
GridListItem.prototype.setFromGridsterItemPrototype = /**
* @param {?} item
* @return {?}
*/
function (item) {
if (this.isItemSet()) {
throw new Error('GridListItem is already set.');
}
this.itemPrototype = item;
return this;
};
/**
* @param {?} item
* @return {?}
*/
GridListItem.prototype.setFromObjectLiteral = /**
* @param {?} item
* @return {?}
*/
function (item) {
if (this.isItemSet()) {
throw new Error('GridListItem is already set.');
}
this.itemObject = item;
return this;
};
/**
* @return {?}
*/
GridListItem.prototype.copy = /**
* @return {?}
*/
function () {
/** @type {?} */
var itemCopy = new GridListItem();
return itemCopy.setFromObjectLiteral({
$element: this.$element,
x: this.x,
y: this.y,
w: this.w,
h: this.h,
autoSize: this.autoSize,
dragAndDrop: this.dragAndDrop,
resizable: this.resizable
});
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.copyForBreakpoint = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
/** @type {?} */
var itemCopy = new GridListItem();
return itemCopy.setFromObjectLiteral({
$element: this.$element,
x: this.getValueX(breakpoint),
y: this.getValueY(breakpoint),
w: this.getValueW(breakpoint),
h: this.getValueH(breakpoint),
autoSize: this.autoSize,
dragAndDrop: this.dragAndDrop,
resizable: this.resizable
});
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.getValueX = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
/** @type {?} */
var item = this.getItem();
return item[this.getXProperty(breakpoint)];
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.getValueY = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
/** @type {?} */
var item = this.getItem();
return item[this.getYProperty(breakpoint)];
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.getValueW = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
/** @type {?} */
var item = this.getItem();
return item[this.getWProperty(breakpoint)] || 1;
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.getValueH = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
/** @type {?} */
var item = this.getItem();
return item[this.getHProperty(breakpoint)] || 1;
};
/**
* @param {?} value
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.setValueX = /**
* @param {?} value
* @param {?=} breakpoint
* @return {?}
*/
function (value, breakpoint) {
/** @type {?} */
var item = this.getItem();
item[this.getXProperty(breakpoint)] = value;
};
/**
* @param {?} value
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.setValueY = /**
* @param {?} value
* @param {?=} breakpoint
* @return {?}
*/
function (value, breakpoint) {
/** @type {?} */
var item = this.getItem();
item[this.getYProperty(breakpoint)] = value;
};
/**
* @param {?} value
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.setValueW = /**
* @param {?} value
* @param {?=} breakpoint
* @return {?}
*/
function (value, breakpoint) {
/** @type {?} */
var item = this.getItem();
item[this.getWProperty(breakpoint)] = value;
};
/**
* @param {?} value
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.setValueH = /**
* @param {?} value
* @param {?=} breakpoint
* @return {?}
*/
function (value, breakpoint) {
/** @type {?} */
var item = this.getItem();
item[this.getHProperty(breakpoint)] = value;
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.triggerChangeX = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
/** @type {?} */
var item = this.itemComponent;
if (item) {
item[this.getXProperty(breakpoint) + 'Change'].emit(this.getValueX(breakpoint));
}
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.triggerChangeY = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
/** @type {?} */
var item = this.itemComponent;
if (item) {
item[this.getYProperty(breakpoint) + 'Change'].emit(this.getValueY(breakpoint));
}
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.triggerChangeW = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
/** @type {?} */
var item = this.itemComponent;
if (item) {
item[this.getWProperty(breakpoint) + 'Change'].emit(this.getValueW(breakpoint));
}
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.triggerChangeH = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
/** @type {?} */
var item = this.itemComponent;
if (item) {
item[this.getHProperty(breakpoint) + 'Change'].emit(this.getValueH(breakpoint));
}
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.hasPositions = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
/** @type {?} */
var x = this.getValueX(breakpoint);
/** @type {?} */
var y = this.getValueY(breakpoint);
return (x || x === 0) && (y || y === 0);
};
/**
* @param {?=} gridster
* @return {?}
*/
GridListItem.prototype.applyPosition = /**
* @param {?=} gridster
* @return {?}
*/
function (gridster) {
/** @type {?} */
var position = this.calculatePosition(gridster);
this.itemComponent.positionX = position.left;
this.itemComponent.positionY = position.top;
this.itemComponent.updateElemenetPosition();
};
/**
* @param {?=} gridster
* @return {?}
*/
GridListItem.prototype.calculatePosition = /**
* @param {?=} gridster
* @return {?}
*/
function (gridster) {
if (!gridster && !this.itemComponent) {
return { left: 0, top: 0 };
}
gridster = gridster || this.itemComponent.gridster;
return {
left: this.x * gridster.cellWidth,
top: this.y * gridster.cellHeight
};
};
/**
* @param {?=} gridster
* @return {?}
*/
GridListItem.prototype.applySize = /**
* @param {?=} gridster
* @return {?}
*/
function (gridster) {
/** @type {?} */
var size = this.calculateSize(gridster);
this.$element.style.width = size.width + 'px';
this.$element.style.height = size.height + 'px';
};
/**
* @param {?=} gridster
* @return {?}
*/
GridListItem.prototype.calculateSize = /**
* @param {?=} gridster
* @return {?}
*/
function (gridster) {
if (!gridster && !this.itemComponent) {
return { width: 0, height: 0 };
}
gridster = gridster || this.itemComponent.gridster;
/** @type {?} */
var width = this.getValueW(gridster.options.breakpoint);
/** @type {?} */
var height = this.getValueH(gridster.options.breakpoint);
if (gridster.options.direction === 'vertical') {
width = Math.min(width, gridster.options.lanes);
}
if (gridster.options.direction === 'horizontal') {
height = Math.min(height, gridster.options.lanes);
}
return {
width: width * gridster.cellWidth,
height: height * gridster.cellHeight
};
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.getXProperty = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
if (breakpoint && this.itemComponent) {
return GridListItem.X_PROPERTY_MAP[breakpoint];
}
else {
return 'x';
}
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.getYProperty = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
if (breakpoint && this.itemComponent) {
return GridListItem.Y_PROPERTY_MAP[breakpoint];
}
else {
return 'y';
}
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.getWProperty = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
if (this.itemPrototype) {
return this.itemPrototype[GridListItem.W_PROPERTY_MAP[breakpoint]] ?
GridListItem.W_PROPERTY_MAP[breakpoint] : 'w';
}
/** @type {?} */
var item = this.getItem();
/** @type {?} */
var responsiveSizes = item.gridster && item.gridster.options.responsiveSizes;
if (breakpoint && responsiveSizes) {
return GridListItem.W_PROPERTY_MAP[breakpoint];
}
else {
return 'w';
}
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridListItem.prototype.getHProperty = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
if (this.itemPrototype) {
return this.itemPrototype[GridListItem.H_PROPERTY_MAP[breakpoint]] ?
GridListItem.H_PROPERTY_MAP[breakpoint] : 'h';
}
/** @type {?} */
var item = this.getItem();
/** @type {?} */
var responsiveSizes = item.gridster && item.gridster.options.responsiveSizes;
if (breakpoint && responsiveSizes) {
return GridListItem.H_PROPERTY_MAP[breakpoint];
}
else {
return 'h';
}
};
/**
* @return {?}
*/
GridListItem.prototype.getItem = /**
* @return {?}
*/
function () {
/** @type {?} */
var item = this.itemComponent || this.itemPrototype || this.itemObject;
if (!item) {
throw new Error('GridListItem is not set.');
}
return item;
};
/**
* @return {?}
*/
GridListItem.prototype.isItemSet = /**
* @return {?}
*/
function () {
return this.itemComponent || this.itemPrototype || this.itemObject;
};
GridListItem.BREAKPOINTS = ['sm', 'md', 'lg', 'xl'];
GridListItem.X_PROPERTY_MAP = {
sm: 'xSm',
md: 'xMd',
lg: 'xLg',
xl: 'xXl'
};
GridListItem.Y_PROPERTY_MAP = {
sm: 'ySm',
md: 'yMd',
lg: 'yLg',
xl: 'yXl'
};
GridListItem.W_PROPERTY_MAP = {
sm: 'wSm',
md: 'wMd',
lg: 'wLg',
xl: 'wXl'
};
GridListItem.H_PROPERTY_MAP = {
sm: 'hSm',
md: 'hMd',
lg: 'hLg',
xl: 'hXl'
};
return GridListItem;
}());
export { GridListItem };
if (false) {
/** @type {?} */
GridListItem.BREAKPOINTS;
/** @type {?} */
GridListItem.X_PROPERTY_MAP;
/** @type {?} */
GridListItem.Y_PROPERTY_MAP;
/** @type {?} */
GridListItem.W_PROPERTY_MAP;
/** @type {?} */
GridListItem.H_PROPERTY_MAP;
/** @type {?} */
GridListItem.prototype.itemComponent;
/** @type {?} */
GridListItem.prototype.itemPrototype;
/** @type {?} */
GridListItem.prototype.itemObject;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JpZExpc3RJdGVtLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGJsYXJlL2FuZ3VsYXIyZ3JpZHN0ZXIvIiwic291cmNlcyI6WyJsaWIvZ3JpZExpc3QvR3JpZExpc3RJdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFJQTtJQUFBO0lBcVhBLENBQUM7SUFuVkcsc0JBQUksa0NBQVE7Ozs7UUFBWjtZQUNJLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxDQUFDOzs7T0FBQTtJQUVELHNCQUFJLDJCQUFDOzs7O1FBQUw7O2dCQUNVLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQzs7Ozs7UUFDRCxVQUFPLEtBQWE7O2dCQUNWLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDOzs7T0FOQTtJQVFELHNCQUFJLDJCQUFDOzs7O1FBQUw7O2dCQUNVLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQzs7Ozs7UUFDRCxVQUFPLEtBQWE7O2dCQUNWLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDOzs7T0FOQTtJQVFELHNCQUFJLDJCQUFDOzs7O1FBQUw7O2dCQUNVLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQzs7Ozs7UUFDRCxVQUFPLEtBQWE7O2dCQUNWLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDOzs7T0FOQTtJQVFELHNCQUFJLDJCQUFDOzs7O1FBQUw7O2dCQUNVLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxPQUFPLElBQUksQ0FBQyxT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QixVQUFzQixVQUFXOztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWE7UUFDL0IsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQzs7Ozs7SUFFTSxxQ0FBYzs7OztJQUFyQixVQUFzQixVQUFXOztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWE7UUFDL0IsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQzs7Ozs7SUFFTSxxQ0FBYzs7OztJQUFyQixVQUFzQixVQUFXOztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWE7UUFDL0IsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQzs7Ozs7SUFFTSxxQ0FBYzs7OztJQUFyQixVQUFzQixVQUFXOztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWE7UUFDL0IsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQzs7Ozs7SUFFTSxtQ0FBWTs7OztJQUFuQixVQUFvQixVQUFXOztZQUNyQixDQUFD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VCxFQUFFLEVBQUUsS0FBSztRQUNULEVBQUUsRUFBRSxLQUFLO1FBQ1QsRUFBRSxFQUFFLEtBQUs7S0FDWixDQUFDO0lBRUssMkJBQWMsR0FBUTtRQUN6QixFQUFFLEVBQUUsS0FBSztRQUNULEVBQUUsRUFBRSxLQUFLO1FBQ1QsRUFBRSxFQUFFLEtBQUs7UUFDVCxFQUFFLEVBQUUsS0FBSztLQUNaLENBQUM7SUF5Vk4sbUJBQUM7Q0FBQSxBQXJYRCxJQXFYQztTQXJYWSxZQUFZOzs7SUFDckIseUJBQTZEOztJQUM3RCw0QkFLRTs7SUFFRiw0QkFLRTs7SUFFRiw0QkFLRTs7SUFFRiw0QkFLRTs7SUFFRixxQ0FBcUM7O0lBQ3JDLHFDQUE4Qzs7SUFDOUMsa0NBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JpZHN0ZXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZHN0ZXItaXRlbS9ncmlkc3Rlci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkc3Rlckl0ZW1Qcm90b3R5cGVEaXJlY3RpdmUgfSBmcm9tICcuLi9ncmlkc3Rlci1wcm90b3R5cGUvZ3JpZHN0ZXItaXRlbS1wcm90b3R5cGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRzdGVyU2VydmljZSB9IGZyb20gJy4uL2dyaWRzdGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgR3JpZExpc3RJdGVtIHtcbiAgICBzdGF0aWMgQlJFQUtQT0lOVFM6IEFycmF5PHN0cmluZz4gPSBbJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ107XG4gICAgc3RhdGljIFhfUFJPUEVSVFlfTUFQOiBhbnkgPSB7XG4gICAgICAgIHNtOiAneFNtJyxcbiAgICAgICAgbWQ6ICd4TWQnLFxuICAgICAgICBsZzogJ3hMZycsXG4gICAgICAgIHhsOiAneFhsJ1xuICAgIH07XG5cbiAgICBzdGF0aWMgWV9QUk9QRVJUWV9NQVA6IGFueSA9IHtcbiAgICAgICAgc206ICd5U20nLFxuICAgICAgICBtZDogJ3lNZCcsXG4gICAgICAgIGxnOiAneUxnJyxcbiAgICAgICAgeGw6ICd5WGwnXG4gICAgfTtcblxuICAgIHN0YXRpYyBXX1BST1BFUlRZX01BUDogYW55ID0ge1xuICAgICAgICBzbTogJ3dTbScsXG4gICAgICAgIG1kOiAnd01kJyxcbiAgICAgICAgbGc6ICd3TGcnLFxuICAgICAgICB4bDogJ3dYbCdcbiAgICB9O1xuXG4gICAgc3RhdGljIEhfUFJPUEVSVFlfTUFQOiBhbnkgPSB7XG4gICAgICAgIHNtOiAnaFNtJyxcbiAgICAgICAgbWQ6ICdoTWQnLFxuICAgICAgICBsZzogJ2hMZycsXG4gICAgICAgIHhsOiAnaFhsJ1xuICAgIH07XG5cbiAgICBpdGVtQ29tcG9uZW50OiBHcmlkc3Rlckl0ZW1Db21wb25lbnQ7XG4gICAgaXRlbVByb3RvdHlwZTogR3JpZHN0ZXJJdGVtUHJvdG90eXBlRGlyZWN0aXZlO1xuICAgIGl0ZW1PYmplY3Q6IGFueTtcblxuICAgIGdldCAkZWxlbWVudCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEl0ZW0oKS4kZWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXQgeCAoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IGl0ZW0uZ3JpZHN0ZXIgPyBpdGVtLmdyaWRzdGVyLm9wdGlvbnMuYnJlYWtwb2ludCA6IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVYKGJyZWFrcG9pbnQpO1xuICAgIH1cbiAgICBzZXQgeCAodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSBpdGVtLmdyaWRzdGVyID8gaXRlbS5ncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0VmFsdWVYKHZhbHVlLCBicmVha3BvaW50KTtcbiAgICB9XG5cbiAgICBnZXQgeSAoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IGl0ZW0uZ3JpZHN0ZXIgPyBpdGVtLmdyaWRzdGVyLm9wdGlvbnMuYnJlYWtwb2ludCA6IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVZKGJyZWFrcG9pbnQpO1xuICAgIH1cbiAgICBzZXQgeSAodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSBpdGVtLmdyaWRzdGVyID8gaXRlbS5ncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0VmFsdWVZKHZhbHVlLCBicmVha3BvaW50KTtcbiAgICB9XG5cbiAgICBnZXQgdyAoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IGl0ZW0uZ3JpZHN0ZXIgPyBpdGVtLmdyaWRzdGVyLm9wdGlvbnMuYnJlYWtwb2ludCA6IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVXKGJyZWFrcG9pbnQpO1xuICAgIH1cbiAgICBzZXQgdyAodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSBpdGVtLmdyaWRzdGVyID8gaXRlbS5ncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0VmFsdWVXKHZhbHVlLCBicmVha3BvaW50KTtcbiAgICB9XG5cbiAgICBnZXQgaCAoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IGl0ZW0uZ3JpZHN0ZXIgPyBpdGVtLmdyaWRzdGVyLm9wdGlvbnMuYnJlYWtwb2ludCA6IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVIKGJyZWFrcG9pbnQpO1xuICAgIH1cbiAgICBzZXQgaCAodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSBpdGVtLmdyaWRzdGVyID8gaXRlbS5ncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0VmFsdWVIKHZhbHVlLCBicmVha3BvaW50KTtcbiAgICB9XG5cbiAgICBnZXQgYXV0b1NpemUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtKCkuYXV0b1NpemU7XG4gICAgfVxuICAgIHNldCBhdXRvU2l6ZSAodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5nZXRJdGVtKCkuYXV0b1NpemUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZHJhZ0FuZERyb3AoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0SXRlbSgpLmRyYWdBbmREcm9wO1xuICAgIH1cblxuICAgIGdldCByZXNpemFibGUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0SXRlbSgpLnJlc2l6YWJsZTtcbiAgICB9XG5cbiAgICBnZXQgcG9zaXRpb25YKCkge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtQ29tcG9uZW50IHx8IHRoaXMuaXRlbVByb3RvdHlwZTtcblxuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW0ucG9zaXRpb25YO1xuICAgIH1cblxuICAgIGdldCBwb3NpdGlvblkoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQgfHwgdGhpcy5pdGVtUHJvdG90eXBlO1xuXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbS5wb3NpdGlvblk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZyb21Hcmlkc3Rlckl0ZW0gKGl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudCk6IEdyaWRMaXN0SXRlbSB7XG4gICAgICAgIGlmICh0aGlzLmlzSXRlbVNldCgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyaWRMaXN0SXRlbSBpcyBhbHJlYWR5IHNldC4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1Db21wb25lbnQgPSBpdGVtO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RnJvbUdyaWRzdGVySXRlbVByb3RvdHlwZSAoaXRlbTogR3JpZHN0ZXJJdGVtUHJvdG90eXBlRGlyZWN0aXZlKTogR3JpZExpc3RJdGVtIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJdGVtU2V0KCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR3JpZExpc3RJdGVtIGlzIGFscmVhZHkgc2V0LicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbVByb3RvdHlwZSA9IGl0ZW07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGcm9tT2JqZWN0TGl0ZXJhbCAoaXRlbTogT2JqZWN0KTogR3JpZExpc3RJdGVtIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJdGVtU2V0KCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR3JpZExpc3RJdGVtIGlzIGFscmVhZHkgc2V0LicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbU9iamVjdCA9IGl0ZW07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCkge1xuICAgICAgICBjb25zdCBpdGVtQ29weSA9IG5ldyBHcmlkTGlzdEl0ZW0oKTtcblxuICAgICAgICByZXR1cm4gaXRlbUNvcHkuc2V0RnJvbU9iamVjdExpdGVyYWwoe1xuICAgICAgICAgICAgJGVsZW1lbnQ6IHRoaXMuJGVsZW1lbnQsXG4gICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICB3OiB0aGlzLncsXG4gICAgICAgICAgICBoOiB0aGlzLmgsXG4gICAgICAgICAgICBhdXRvU2l6ZTogdGhpcy5hdXRvU2l6ZSxcbiAgICAgICAgICAgIGRyYWdBbmREcm9wOiB0aGlzLmRyYWdBbmREcm9wLFxuICAgICAgICAgICAgcmVzaXphYmxlOiB0aGlzLnJlc2l6YWJsZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weUZvckJyZWFrcG9pbnQoYnJlYWtwb2ludD8pIHtcbiAgICAgICAgY29uc3QgaXRlbUNvcHkgPSBuZXcgR3JpZExpc3RJdGVtKCk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1Db3B5LnNldEZyb21PYmplY3RMaXRlcmFsKHtcbiAgICAgICAgICAgICRlbGVtZW50OiB0aGlzLiRlbGVtZW50LFxuICAgICAgICAgICAgeDogdGhpcy5nZXRWYWx1ZVgoYnJlYWtwb2ludCksXG4gICAgICAgICAgICB5OiB0aGlzLmdldFZhbHVlWShicmVha3BvaW50KSxcbiAgICAgICAgICAgIHc6IHRoaXMuZ2V0VmFsdWVXKGJyZWFrcG9pbnQpLFxuICAgICAgICAgICAgaDogdGhpcy5nZXRWYWx1ZUgoYnJlYWtwb2ludCksXG4gICAgICAgICAgICBhdXRvU2l6ZTogdGhpcy5hdXRvU2l6ZSxcbiAgICAgICAgICAgIGRyYWdBbmREcm9wOiB0aGlzLmRyYWdBbmREcm9wLFxuICAgICAgICAgICAgcmVzaXphYmxlOiB0aGlzLnJlc2l6YWJsZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWVYKGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcblxuICAgICAgICByZXR1cm4gaXRlbVt0aGlzLmdldFhQcm9wZXJ0eShicmVha3BvaW50KV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlWShicmVha3BvaW50Pykge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy5nZXRZUHJvcGVydHkoYnJlYWtwb2ludCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZVcoYnJlYWtwb2ludD8pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xuXG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMuZ2V0V1Byb3BlcnR5KGJyZWFrcG9pbnQpXSB8fCAxO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZUgoYnJlYWtwb2ludD8pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xuXG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMuZ2V0SFByb3BlcnR5KGJyZWFrcG9pbnQpXSB8fCAxO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWYWx1ZVgodmFsdWU6IG51bWJlciwgYnJlYWtwb2ludD8pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xuXG4gICAgICAgIGl0ZW1bdGhpcy5nZXRYUHJvcGVydHkoYnJlYWtwb2ludCldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZhbHVlWSh2YWx1ZTogbnVtYmVyLCBicmVha3BvaW50Pykge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG5cbiAgICAgICAgaXRlbVt0aGlzLmdldFlQcm9wZXJ0eShicmVha3BvaW50KV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmFsdWVXKHZhbHVlOiBudW1iZXIsIGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcblxuICAgICAgICBpdGVtW3RoaXMuZ2V0V1Byb3BlcnR5KGJyZWFrcG9pbnQpXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWYWx1ZUgodmFsdWU6IG51bWJlciwgYnJlYWtwb2ludD8pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xuXG4gICAgICAgIGl0ZW1bdGhpcy5nZXRIUHJvcGVydHkoYnJlYWtwb2ludCldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJDaGFuZ2VYKGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQ7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtW3RoaXMuZ2V0WFByb3BlcnR5KGJyZWFrcG9pbnQpICsgJ0NoYW5nZSddLmVtaXQodGhpcy5nZXRWYWx1ZVgoYnJlYWtwb2ludCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJDaGFuZ2VZKGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQ7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtW3RoaXMuZ2V0WVByb3BlcnR5KGJyZWFrcG9pbnQpICsgJ0NoYW5nZSddLmVtaXQodGhpcy5nZXRWYWx1ZVkoYnJlYWtwb2ludCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJDaGFuZ2VXKGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQ7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtW3RoaXMuZ2V0V1Byb3BlcnR5KGJyZWFrcG9pbnQpICsgJ0NoYW5nZSddLmVtaXQodGhpcy5nZXRWYWx1ZVcoYnJlYWtwb2ludCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJDaGFuZ2VIKGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQ7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtW3RoaXMuZ2V0SFByb3BlcnR5KGJyZWFrcG9pbnQpICsgJ0NoYW5nZSddLmVtaXQodGhpcy5nZXRWYWx1ZUgoYnJlYWtwb2ludCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhc1Bvc2l0aW9ucyhicmVha3BvaW50Pykge1xuICAgICAgICBjb25zdCB4ID0gdGhpcy5nZXRWYWx1ZVgoYnJlYWtwb2ludCk7XG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLmdldFZhbHVlWShicmVha3BvaW50KTtcblxuICAgICAgICByZXR1cm4gKHggfHwgeCA9PT0gMCkgJiYgKHkgfHwgeSA9PT0gMCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5UG9zaXRpb24oZ3JpZHN0ZXI/OiBHcmlkc3RlclNlcnZpY2UpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uKGdyaWRzdGVyKTtcblxuICAgICAgICB0aGlzLml0ZW1Db21wb25lbnQucG9zaXRpb25YID0gcG9zaXRpb24ubGVmdDtcbiAgICAgICAgdGhpcy5pdGVtQ29tcG9uZW50LnBvc2l0aW9uWSA9IHBvc2l0aW9uLnRvcDtcbiAgICAgICAgdGhpcy5pdGVtQ29tcG9uZW50LnVwZGF0ZUVsZW1lbmV0UG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsY3VsYXRlUG9zaXRpb24oZ3JpZHN0ZXI/OiBHcmlkc3RlclNlcnZpY2UpOiB7bGVmdDogbnVtYmVyLCB0b3A6IG51bWJlcn0ge1xuICAgICAgICBpZiAoIWdyaWRzdGVyICYmICF0aGlzLml0ZW1Db21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7bGVmdDogMCwgdG9wOiAwfTtcbiAgICAgICAgfVxuICAgICAgICBncmlkc3RlciA9IGdyaWRzdGVyIHx8IHRoaXMuaXRlbUNvbXBvbmVudC5ncmlkc3RlcjtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVmdDogdGhpcy54ICogZ3JpZHN0ZXIuY2VsbFdpZHRoLFxuICAgICAgICAgICAgdG9wOiB0aGlzLnkgKiBncmlkc3Rlci5jZWxsSGVpZ2h0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5U2l6ZShncmlkc3Rlcj86IEdyaWRzdGVyU2VydmljZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5jYWxjdWxhdGVTaXplKGdyaWRzdGVyKTtcblxuICAgICAgICB0aGlzLiRlbGVtZW50LnN0eWxlLndpZHRoID0gc2l6ZS53aWR0aCArICdweCc7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQgKyAncHgnO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxjdWxhdGVTaXplKGdyaWRzdGVyPzogR3JpZHN0ZXJTZXJ2aWNlKToge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfSB7XG4gICAgICAgIGlmICghZ3JpZHN0ZXIgJiYgIXRoaXMuaXRlbUNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHt3aWR0aDogMCwgaGVpZ2h0OiAwfTtcbiAgICAgICAgfVxuICAgICAgICBncmlkc3RlciA9IGdyaWRzdGVyIHx8IHRoaXMuaXRlbUNvbXBvbmVudC5ncmlkc3RlcjtcblxuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLmdldFZhbHVlVyhncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQpO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZUgoZ3JpZHN0ZXIub3B0aW9ucy5icmVha3BvaW50KTtcblxuICAgICAgICBpZiAoZ3JpZHN0ZXIub3B0aW9ucy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5taW4od2lkdGgsIGdyaWRzdGVyLm9wdGlvbnMubGFuZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncmlkc3Rlci5vcHRpb25zLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1pbihoZWlnaHQsIGdyaWRzdGVyLm9wdGlvbnMubGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCAqIGdyaWRzdGVyLmNlbGxXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICogZ3JpZHN0ZXIuY2VsbEhlaWdodFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0WFByb3BlcnR5KGJyZWFrcG9pbnQ/OiBzdHJpbmcpIHtcblxuICAgICAgICBpZiAoYnJlYWtwb2ludCAmJiB0aGlzLml0ZW1Db21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBHcmlkTGlzdEl0ZW0uWF9QUk9QRVJUWV9NQVBbYnJlYWtwb2ludF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ3gnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRZUHJvcGVydHkoYnJlYWtwb2ludD86IHN0cmluZykge1xuXG4gICAgICAgIGlmIChicmVha3BvaW50ICYmIHRoaXMuaXRlbUNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIEdyaWRMaXN0SXRlbS5ZX1BST1BFUlRZX01BUFticmVha3BvaW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAneSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFdQcm9wZXJ0eShicmVha3BvaW50Pzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1Qcm90b3R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1Qcm90b3R5cGVbR3JpZExpc3RJdGVtLldfUFJPUEVSVFlfTUFQW2JyZWFrcG9pbnRdXSA/XG4gICAgICAgICAgICAgICAgR3JpZExpc3RJdGVtLldfUFJPUEVSVFlfTUFQW2JyZWFrcG9pbnRdIDogJ3cnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xuICAgICAgICBjb25zdCByZXNwb25zaXZlU2l6ZXMgPSBpdGVtLmdyaWRzdGVyICYmIGl0ZW0uZ3JpZHN0ZXIub3B0aW9ucy5yZXNwb25zaXZlU2l6ZXM7XG5cbiAgICAgICAgaWYgKGJyZWFrcG9pbnQgJiYgcmVzcG9uc2l2ZVNpemVzKSB7XG4gICAgICAgICAgICByZXR1cm4gR3JpZExpc3RJdGVtLldfUFJPUEVSVFlfTUFQW2JyZWFrcG9pbnRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICd3JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SFByb3BlcnR5KGJyZWFrcG9pbnQ/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbVByb3RvdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbVByb3RvdHlwZVtHcmlkTGlzdEl0ZW0uSF9QUk9QRVJUWV9NQVBbYnJlYWtwb2ludF1dID9cbiAgICAgICAgICAgICAgICBHcmlkTGlzdEl0ZW0uSF9QUk9QRVJUWV9NQVBbYnJlYWtwb2ludF0gOiAnaCc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNpdmVTaXplcyA9IGl0ZW0uZ3JpZHN0ZXIgJiYgaXRlbS5ncmlkc3Rlci5vcHRpb25zLnJlc3BvbnNpdmVTaXplcztcblxuICAgICAgICBpZiAoYnJlYWtwb2ludCAmJiByZXNwb25zaXZlU2l6ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBHcmlkTGlzdEl0ZW0uSF9QUk9QRVJUWV9NQVBbYnJlYWtwb2ludF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ2gnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJdGVtKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQgfHwgdGhpcy5pdGVtUHJvdG90eXBlIHx8IHRoaXMuaXRlbU9iamVjdDtcblxuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR3JpZExpc3RJdGVtIGlzIG5vdCBzZXQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0l0ZW1TZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1Db21wb25lbnQgfHwgdGhpcy5pdGVtUHJvdG90eXBlIHx8IHRoaXMuaXRlbU9iamVjdDtcbiAgICB9XG59XG4iXX0=