UNPKG

@blare/angular2gridster

Version:

[![npm version](https://badge.fury.io/js/angular2gridster.svg)](https://badge.fury.io/js/angular2gridster)

825 lines 76.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; import { GridList } from './gridList/gridList'; var GridsterService = /** @class */ (function () { function GridsterService() { var _this = this; this.items = []; this._items = []; this._itemsMap = {}; this.disabledItems = []; this.debounceRenderSubject = new Subject(); this.itemRemoveSubject = new Subject(); this.isInit = false; this.itemRemoveSubject.pipe(debounceTime(0)).subscribe(function () { _this.gridList.pullItemsToLeft(); _this.render(); _this.updateCachedItems(); }); this.debounceRenderSubject.pipe(debounceTime(0)).subscribe(function () { return _this.render(); }); } /** * @return {?} */ GridsterService.prototype.isInitialized = /** * @return {?} */ function () { return this.isInit; }; /** * Must be called before init * @param item */ /** * Must be called before init * @param {?} item * @return {?} */ GridsterService.prototype.registerItem = /** * Must be called before init * @param {?} item * @return {?} */ function (item) { this.items.push(item); return item; }; /** * @param {?} gridsterComponent * @return {?} */ GridsterService.prototype.init = /** * @param {?} gridsterComponent * @return {?} */ function (gridsterComponent) { this.gridsterComponent = gridsterComponent; this.draggableOptions = gridsterComponent.draggableOptions; this.gridsterOptions = gridsterComponent.gridsterOptions; }; /** * @return {?} */ GridsterService.prototype.start = /** * @return {?} */ function () { var _this = this; this.updateMaxItemSize(); // Used to highlight a position an element will land on upon drop if (this.$positionHighlight) { this.removePositionHighlight(); } this.initGridList(); this.isInit = true; setTimeout(function () { _this.copyItems(); _this.fixItemsPositions(); _this.gridsterComponent.reflowGridster(true); _this.gridsterComponent.setReady(); }); }; /** * @return {?} */ GridsterService.prototype.initGridList = /** * @return {?} */ function () { // Create instance of GridList (decoupled lib for handling the grid // positioning and sorting post-drag and dropping) this.gridList = new GridList(this.items, this.options); }; /** * @return {?} */ GridsterService.prototype.render = /** * @return {?} */ function () { this.updateMaxItemSize(); this.gridList.generateGrid(); this.applySizeToItems(); this.applyPositionToItems(); this.refreshLines(); }; /** * @return {?} */ GridsterService.prototype.reflow = /** * @return {?} */ function () { this.calculateCellSize(); this.render(); }; /** * @return {?} */ GridsterService.prototype.fixItemsPositions = /** * @return {?} */ function () { var _this = this; if (this.options.responsiveSizes) { this.gridList.fixItemsPositions(this.options); } else { this.gridList.fixItemsPositions(this.gridsterOptions.basicOptions); this.gridsterOptions.responsiveOptions.forEach(function (options) { _this.gridList.fixItemsPositions(options); }); } this.updateCachedItems(); }; /** * @param {?} item * @return {?} */ GridsterService.prototype.removeItem = /** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var idx = this.items.indexOf(item); if (idx >= 0) { this.items.splice(this.items.indexOf(item), 1); } this.gridList.deleteItemPositionFromGrid(item); this.removeItemFromCache(item); }; /** * @param {?} item * @return {?} */ GridsterService.prototype.onResizeStart = /** * @param {?} item * @return {?} */ function (item) { this.currentElement = item.$element; this.copyItems(); this._maxGridCols = this.gridList.grid.length; this.highlightPositionForItem(item); this.gridsterComponent.isResizing = true; this.refreshLines(); }; /** * @param {?} item * @return {?} */ GridsterService.prototype.onResizeDrag = /** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var newSize = this.snapItemSizeToGrid(item); /** @type {?} */ var sizeChanged = this.dragSizeChanged(newSize); /** @type {?} */ var newPosition = this.snapItemPositionToGrid(item); /** @type {?} */ var positionChanged = this.dragPositionChanged(newPosition); if (sizeChanged || positionChanged) { // Regenerate the grid with the positions from when the drag started this.restoreCachedItems(); this.gridList.generateGrid(); this.previousDragPosition = newPosition; this.previousDragSize = newSize; this.gridList.moveAndResize(item, newPosition, { w: newSize[0], h: newSize[1] }); // Visually update item positions and highlight shape this.applyPositionToItems(true); this.highlightPositionForItem(item); } }; /** * @param {?} item * @return {?} */ GridsterService.prototype.onResizeStop = /** * @param {?} item * @return {?} */ function (item) { this.currentElement = undefined; this.updateCachedItems(); this.previousDragSize = null; this.removePositionHighlight(); this.gridsterComponent.isResizing = false; this.gridList.pullItemsToLeft(item); this.debounceRenderSubject.next(); this.fixItemsPositions(); }; /** * @param {?} item * @return {?} */ GridsterService.prototype.onStart = /** * @param {?} item * @return {?} */ function (item) { this.currentElement = item.$element; // itemCtrl.isDragging = true; // Create a deep copy of the items; we use them to revert the item // positions after each drag change, making an entire drag operation less // distructable this.copyItems(); // Since dragging actually alters the grid, we need to establish the number // of cols (+1 extra) before the drag starts this._maxGridCols = this.gridList.grid.length; this.gridsterComponent.isDragging = true; this.gridsterComponent.updateGridsterElementData(); this.refreshLines(); }; /** * @param {?} item * @return {?} */ GridsterService.prototype.onDrag = /** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var newPosition = this.snapItemPositionToGrid(item); if (this.dragPositionChanged(newPosition)) { // Regenerate the grid with the positions from when the drag started this.restoreCachedItems(); this.gridList.generateGrid(); this.previousDragPosition = newPosition; if (this.options.direction === 'none' && !this.gridList.checkItemAboveEmptyArea(item, { x: newPosition[0], y: newPosition[1] })) { return; } // Since the items list is a deep copy, we need to fetch the item // corresponding to this drag action again this.gridList.moveItemToPosition(item, newPosition); // Visually update item positions and highlight shape this.applyPositionToItems(true); this.highlightPositionForItem(item); } }; /** * @return {?} */ GridsterService.prototype.cancel = /** * @return {?} */ function () { this.restoreCachedItems(); this.previousDragPosition = null; this.updateMaxItemSize(); this.applyPositionToItems(); this.removePositionHighlight(); this.currentElement = undefined; this.gridsterComponent.isDragging = false; }; /** * @param {?} item * @return {?} */ GridsterService.prototype.onDragOut = /** * @param {?} item * @return {?} */ function (item) { this.cancel(); /** @type {?} */ var idx = this.items.indexOf(item); if (idx >= 0) { this.items.splice(idx, 1); } this.gridList.pullItemsToLeft(); this.render(); }; /** * @param {?} item * @return {?} */ GridsterService.prototype.onStop = /** * @param {?} item * @return {?} */ function (item) { this.currentElement = undefined; this.updateCachedItems(); this.previousDragPosition = null; this.removePositionHighlight(); this.gridList.pullItemsToLeft(item); this.gridsterComponent.isDragging = false; this.refreshLines(); }; /** * @return {?} */ GridsterService.prototype.calculateCellSize = /** * @return {?} */ function () { if (this.options.direction === 'horizontal') { this.cellHeight = this.calculateCellHeight(); this.cellWidth = this.options.cellWidth || this.cellHeight * this.options.widthHeightRatio; } else { this.cellWidth = this.calculateCellWidth(); this.cellHeight = this.options.cellHeight || this.cellWidth / this.options.widthHeightRatio; } if (this.options.heightToFontSizeRatio) { this._fontSize = this.cellHeight * this.options.heightToFontSizeRatio; } }; /** * @param {?=} increaseGridsterSize * @return {?} */ GridsterService.prototype.applyPositionToItems = /** * @param {?=} increaseGridsterSize * @return {?} */ function (increaseGridsterSize) { if (!this.options.shrink) { increaseGridsterSize = true; } // TODO: Implement group separators for (var i = 0; i < this.items.length; i++) { // Don't interfere with the positions of the dragged items if (this.isCurrentElement(this.items[i].$element)) { continue; } this.items[i].applyPosition(this); } /** @type {?} */ var child = (/** @type {?} */ (this.gridsterComponent.$element.firstChild)); // Update the width of the entire grid container with enough room on the // right to allow dragging items to the end of the grid. if (this.options.direction === 'horizontal') { /** @type {?} */ var increaseWidthWith = (increaseGridsterSize) ? this.maxItemWidth : 0; child.style.height = ''; child.style.width = ((this.gridList.grid.length + increaseWidthWith) * this.cellWidth) + 'px'; } else if (this.gridList.grid.length) { /** @type {?} */ var increaseHeightWith = (increaseGridsterSize) ? this.maxItemHeight : 0; child.style.height = ((this.gridList.grid.length + increaseHeightWith) * this.cellHeight) + 'px'; child.style.width = ''; } }; /** * @return {?} */ GridsterService.prototype.refreshLines = /** * @return {?} */ function () { /** @type {?} */ var gridsterContainer = (/** @type {?} */ (this.gridsterComponent.$element.firstChild)); if (this.options.lines && this.options.lines.visible && (this.gridsterComponent.isDragging || this.gridsterComponent.isResizing || this.options.lines.always)) { /** @type {?} */ var linesColor = this.options.lines.color || '#d8d8d8'; /** @type {?} */ var linesBgColor = this.options.lines.backgroundColor || 'transparent'; /** @type {?} */ var linesWidth = this.options.lines.width || 1; /** @type {?} */ var bgPosition = linesWidth / 2; gridsterContainer.style.backgroundSize = this.cellWidth + "px " + this.cellHeight + "px"; gridsterContainer.style.backgroundPosition = "-" + bgPosition + "px -" + bgPosition + "px"; gridsterContainer.style.backgroundImage = "\n linear-gradient(to right, " + linesColor + " " + linesWidth + "px, " + linesBgColor + " " + linesWidth + "px),\n linear-gradient(to bottom, " + linesColor + " " + linesWidth + "px, " + linesBgColor + " " + linesWidth + "px)\n "; } else { gridsterContainer.style.backgroundSize = ''; gridsterContainer.style.backgroundPosition = ''; gridsterContainer.style.backgroundImage = ''; } }; /** * @param {?} item * @return {?} */ GridsterService.prototype.removeItemFromCache = /** * @param {?} item * @return {?} */ function (item) { var _this = this; this._items = this._items .filter(function (cachedItem) { return cachedItem.$element !== item.$element; }); Object.keys(this._itemsMap) .forEach(function (breakpoint) { _this._itemsMap[breakpoint] = _this._itemsMap[breakpoint] .filter(function (cachedItem) { return cachedItem.$element !== item.$element; }); }); }; /** * @return {?} */ GridsterService.prototype.copyItems = /** * @return {?} */ function () { var _this = this; this._items = this.items .filter(function (item) { return _this.isValidGridItem(item); }) .map(function (item) { return item.copyForBreakpoint(null); }); this.gridsterOptions.responsiveOptions.forEach(function (options) { _this._itemsMap[options.breakpoint] = _this.items .filter(function (item) { return _this.isValidGridItem(item); }) .map(function (item) { return item.copyForBreakpoint(options.breakpoint); }); }); }; /** * Update maxItemWidth and maxItemHeight vales according to current state of items */ /** * Update maxItemWidth and maxItemHeight vales according to current state of items * @return {?} */ GridsterService.prototype.updateMaxItemSize = /** * Update maxItemWidth and maxItemHeight vales according to current state of items * @return {?} */ function () { this.maxItemWidth = Math.max.apply(null, this.items.map(function (item) { return item.w; })); this.maxItemHeight = Math.max.apply(null, this.items.map(function (item) { return item.h; })); }; /** * Update items properties of previously cached items */ /** * Update items properties of previously cached items * @return {?} */ GridsterService.prototype.restoreCachedItems = /** * Update items properties of previously cached items * @return {?} */ function () { var _this = this; /** @type {?} */ var items = this.options.breakpoint ? this._itemsMap[this.options.breakpoint] : this._items; this.items .filter(function (item) { return _this.isValidGridItem(item); }) .forEach(function (item) { /** @type {?} */ var cachedItem = items.filter(function (cachedItm) { return cachedItm.$element === item.$element; })[0]; item.x = cachedItem.x; item.y = cachedItem.y; item.w = cachedItem.w; item.h = cachedItem.h; item.autoSize = cachedItem.autoSize; }); }; /** * If item should react on grid * @param GridListItem item * @returns boolean */ /** * If item should react on grid * @param {?} item * @return {?} boolean */ GridsterService.prototype.isValidGridItem = /** * If item should react on grid * @param {?} item * @return {?} boolean */ function (item) { if (this.options.direction === 'none') { return !!item.itemComponent; } return true; }; /** * @return {?} */ GridsterService.prototype.calculateCellWidth = /** * @return {?} */ function () { /** @type {?} */ var gridsterWidth = parseFloat(window.getComputedStyle(this.gridsterComponent.$element).width); return Math.floor(gridsterWidth / this.options.lanes); }; /** * @return {?} */ GridsterService.prototype.calculateCellHeight = /** * @return {?} */ function () { /** @type {?} */ var gridsterHeight = parseFloat(window.getComputedStyle(this.gridsterComponent.$element).height); return Math.floor(gridsterHeight / this.options.lanes); }; /** * @return {?} */ GridsterService.prototype.applySizeToItems = /** * @return {?} */ function () { for (var i = 0; i < this.items.length; i++) { this.items[i].applySize(); if (this.options.heightToFontSizeRatio) { this.items[i].$element.style['font-size'] = this._fontSize; } } }; /** * @param {?} element * @return {?} */ GridsterService.prototype.isCurrentElement = /** * @param {?} element * @return {?} */ function (element) { if (!this.currentElement) { return false; } return element === this.currentElement; }; /** * @param {?} item * @return {?} */ GridsterService.prototype.snapItemSizeToGrid = /** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var itemSize = { width: parseInt(item.$element.style.width, 10) - 1, height: parseInt(item.$element.style.height, 10) - 1 }; /** @type {?} */ var colSize = Math.round(itemSize.width / this.cellWidth); /** @type {?} */ var rowSize = Math.round(itemSize.height / this.cellHeight); // Keep item minimum 1 colSize = Math.max(colSize, 1); rowSize = Math.max(rowSize, 1); // check if element is pinned if (this.gridList.isOverFixedArea(item.x, item.y, colSize, rowSize, item)) { return [item.w, item.h]; } return [colSize, rowSize]; }; /** * @param {?} item * @return {?} */ GridsterService.prototype.generateItemPosition = /** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var position; if (item.itemPrototype) { /** @type {?} */ var coords = item.itemPrototype.getPositionToGridster(this); position = { x: Math.round(coords.x / this.cellWidth), y: Math.round(coords.y / this.cellHeight) }; } else { position = { x: Math.round(item.positionX / this.cellWidth), y: Math.round(item.positionY / this.cellHeight) }; } return position; }; /** * @param {?} item * @return {?} */ GridsterService.prototype.snapItemPositionToGrid = /** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var position = this.generateItemPosition(item); /** @type {?} */ var col = position.x; /** @type {?} */ var row = position.y; // Keep item position within the grid and don't let the item create more // than one extra column col = Math.max(col, 0); row = Math.max(row, 0); if (this.options.direction === 'horizontal') { col = Math.min(col, this._maxGridCols); } else { col = Math.min(col, Math.max(0, this.options.lanes - item.w)); } // check if element is pinned if (this.gridList.isOverFixedArea(col, row, item.w, item.h)) { return [item.x, item.y]; } return [col, row]; }; /** * @param {?} newSize * @return {?} */ GridsterService.prototype.dragSizeChanged = /** * @param {?} newSize * @return {?} */ function (newSize) { if (!this.previousDragSize) { return true; } return (newSize[0] !== this.previousDragSize[0] || newSize[1] !== this.previousDragSize[1]); }; /** * @param {?} newPosition * @return {?} */ GridsterService.prototype.dragPositionChanged = /** * @param {?} newPosition * @return {?} */ function (newPosition) { if (!this.previousDragPosition) { return true; } return (newPosition[0] !== this.previousDragPosition[0] || newPosition[1] !== this.previousDragPosition[1]); }; /** * @param {?} item * @return {?} */ GridsterService.prototype.highlightPositionForItem = /** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var size = item.calculateSize(this); /** @type {?} */ var position = item.calculatePosition(this); this.$positionHighlight.style.width = size.width + 'px'; this.$positionHighlight.style.height = size.height + 'px'; this.$positionHighlight.style.left = position.left + 'px'; this.$positionHighlight.style.top = position.top + 'px'; this.$positionHighlight.style.display = ''; if (this.options.heightToFontSizeRatio) { this.$positionHighlight.style['font-size'] = this._fontSize; } }; /** * @return {?} */ GridsterService.prototype.updateCachedItems = /** * @return {?} */ function () { var _this = this; // Notify the user with the items that changed since the previous snapshot this.triggerOnChange(null); this.gridsterOptions.responsiveOptions.forEach(function (options) { _this.triggerOnChange(options.breakpoint); }); this.copyItems(); }; /** * @param {?=} breakpoint * @return {?} */ GridsterService.prototype.triggerOnChange = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var items = breakpoint ? this._itemsMap[breakpoint] : this._items; /** @type {?} */ var changeItems = this.gridList.getChangedItems(items || [], breakpoint); changeItems .filter(function (itemChange) { return itemChange.item.itemComponent; }) .forEach(function (itemChange) { if (itemChange.changes.indexOf('x') >= 0) { itemChange.item.triggerChangeX(breakpoint); } if (itemChange.changes.indexOf('y') >= 0) { itemChange.item.triggerChangeY(breakpoint); } if (itemChange.changes.indexOf('w') >= 0) { itemChange.item.triggerChangeW(breakpoint); } if (itemChange.changes.indexOf('h') >= 0) { itemChange.item.triggerChangeH(breakpoint); } // should be called only once (not for each breakpoint) itemChange.item.itemComponent.change.emit({ item: itemChange.item, oldValues: itemChange.oldValues || {}, isNew: itemChange.isNew, changes: itemChange.changes, breakpoint: breakpoint }); }); }; /** * @return {?} */ GridsterService.prototype.removePositionHighlight = /** * @return {?} */ function () { this.$positionHighlight.style.display = 'none'; }; GridsterService.decorators = [ { type: Injectable } ]; /** @nocollapse */ GridsterService.ctorParameters = function () { return []; }; return GridsterService; }()); export { GridsterService }; if (false) { /** @type {?} */ GridsterService.prototype.$element; /** @type {?} */ GridsterService.prototype.gridList; /** @type {?} */ GridsterService.prototype.items; /** @type {?} */ GridsterService.prototype._items; /** @type {?} */ GridsterService.prototype._itemsMap; /** @type {?} */ GridsterService.prototype.disabledItems; /** @type {?} */ GridsterService.prototype.options; /** @type {?} */ GridsterService.prototype.draggableOptions; /** @type {?} */ GridsterService.prototype.gridsterRect; /** @type {?} */ GridsterService.prototype.gridsterScrollData; /** @type {?} */ GridsterService.prototype.gridsterOptions; /** @type {?} */ GridsterService.prototype.gridsterComponent; /** @type {?} */ GridsterService.prototype.debounceRenderSubject; /** @type {?} */ GridsterService.prototype.$positionHighlight; /** @type {?} */ GridsterService.prototype.maxItemWidth; /** @type {?} */ GridsterService.prototype.maxItemHeight; /** @type {?} */ GridsterService.prototype.cellWidth; /** @type {?} */ GridsterService.prototype.cellHeight; /** @type {?} */ GridsterService.prototype.itemRemoveSubject; /** @type {?} */ GridsterService.prototype._fontSize; /** @type {?} */ GridsterService.prototype.previousDragPosition; /** @type {?} */ GridsterService.prototype.previousDragSize; /** @type {?} */ GridsterService.prototype.currentElement; /** @type {?} */ GridsterService.prototype._maxGridCols; /** @type {?} */ GridsterService.prototype.isInit; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BibGFyZS9hbmd1bGFyMmdyaWRzdGVyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBTy9DO0lBNENJO1FBQUEsaUJBUUM7UUE5Q0QsVUFBSyxHQUF3QixFQUFFLENBQUM7UUFDaEMsV0FBTSxHQUF3QixFQUFFLENBQUM7UUFDakMsY0FBUyxHQUFrRCxFQUFFLENBQUM7UUFDOUQsa0JBQWEsR0FBd0IsRUFBRSxDQUFDO1FBWXhDLDBCQUFxQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFVL0Isc0JBQWlCLEdBQTBCLElBQUksT0FBTyxFQUFFLENBQUM7UUFXeEQsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUduQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNuRCxLQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2hDLEtBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLEtBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxNQUFNLEVBQUUsRUFBYixDQUFhLENBQUMsQ0FBQztJQUNwRixDQUFDOzs7O0lB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Q0FBd0M7O0lBRXhDLHlDQUFvQzs7SUFFcEMsdUNBQTZCOztJQUU3QixpQ0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEdyaWRMaXN0IH0gZnJvbSAnLi9ncmlkTGlzdC9ncmlkTGlzdCc7XG5pbXBvcnQgeyBJR3JpZHN0ZXJPcHRpb25zIH0gZnJvbSAnLi9JR3JpZHN0ZXJPcHRpb25zJztcbmltcG9ydCB7IElHcmlkc3RlckRyYWdnYWJsZU9wdGlvbnMgfSBmcm9tICcuL0lHcmlkc3RlckRyYWdnYWJsZU9wdGlvbnMnO1xuaW1wb3J0IHsgR3JpZExpc3RJdGVtIH0gZnJvbSAnLi9ncmlkTGlzdC9HcmlkTGlzdEl0ZW0nO1xuaW1wb3J0IHsgR3JpZHN0ZXJDb21wb25lbnQgfSBmcm9tICcuL2dyaWRzdGVyLmNvbXBvbmV