tushar-ng-drag-drop
Version:
Simple drag and drop for angular
142 lines • 16.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, Output, EventEmitter } from '@angular/core';
var DragDropComponent = /** @class */ (function () {
function DragDropComponent() {
this.documentList = [];
this.documentTypeList = [];
this.onDraggable = new EventEmitter();
this.onLeftDraggableDrop = new EventEmitter();
this.onRightDraggableDrop = new EventEmitter();
}
/**
* @return {?}
*/
DragDropComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
// for(let i=1; i<=5; i++){
// this.documentList.push({ "id": i, "content": 'file_name_'+i+'.pdf', effectAllowed: "copyMove", disable: false, handle: false, show: true });
// this.documentTypeListBK.push({ "id": "doctype_" + i, "content": "", "type": "Label "+i, max: 1, effectAllowed: "move", disable: false, handle: false, empty: true });
// this.documentTypeList.push({ "id": "doctype_" + i, "content": "", "type": "Label "+i, max: 1, effectAllowed: "move", disable: false, handle: false, empty: true });
// }
};
/**
* @param {?} item
* @return {?}
*/
DragDropComponent.prototype.onDraggableStart = /**
* @param {?} item
* @return {?}
*/
function (item) {
this.currentDraggableEvent = item;
this.onDraggable.emit(item);
};
/**
* @param {?} item
* @return {?}
*/
DragDropComponent.prototype.onLeftDraggableCopied = /**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var index = this.documentList.indexOf(item);
this.documentList.splice(index, 1);
};
/**
* @param {?} item
* @return {?}
*/
DragDropComponent.prototype.onRightDraggableCopied = /**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var index = this.documentTypeList.indexOf(item);
this.documentTypeList[index].content = "";
//this.documentAssociationObj[this.employee] = JSON.parse(JSON.stringify(this.documentTypeList));
};
/**
* @param {?} event
* @return {?}
*/
DragDropComponent.prototype.onLeftDrop = /**
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var index = JSON.parse(JSON.stringify(event)).index;
if (typeof index === "undefined") {
index = this.documentList.length;
}
/** @type {?} */
var tempObj = JSON.parse(JSON.stringify(this.currentDraggableEvent));
tempObj["content"] = tempObj.content;
tempObj["effectAllowed"] = "move";
tempObj["disable"] = false;
tempObj["handle"] = true;
tempObj["show"] = true;
this.documentList.splice(index, 0, tempObj);
this.onLeftDraggableDrop.emit(this.documentList);
};
/**
* @param {?} event
* @param {?} item
* @return {?}
*/
DragDropComponent.prototype.onRightDrop = /**
* @param {?} event
* @param {?} item
* @return {?}
*/
function (event, item) {
/** @type {?} */
var tempObj = JSON.parse(JSON.stringify(this.currentDraggableEvent));
/** @type {?} */
var index = this.documentTypeList.indexOf(item);
this.documentTypeList[index].content = tempObj.content;
this.onRightDraggableDrop.emit(this.documentTypeList);
//this.documentAssociationObj[this.employee] = JSON.parse(JSON.stringify(this.documentTypeList));
};
DragDropComponent.decorators = [
{ type: Component, args: [{
selector: 'tushar-ng-drag-drop',
template: "\r\n\r\n\r\n<div class=\"row\">\r\n <div class=\"col col-sm-5 ol-xs-12 documentList \">\r\n <ol class=\"list-group scrolling \"\r\n dndDropzone dndEffectAllowed=\"copyMove\"\r\n (dndDrop)=\"onLeftDrop($event)\">\r\n <span *ngFor=\"let draggable of documentList\">\r\n <li [dndEffectAllowed]=\"draggable.effectAllowed\"\r\n [dndDraggable]=\"draggable.data\"\r\n (dndStart)=\"onDraggableStart(draggable)\"\r\n (dndMoved)=\"onLeftDraggableCopied(draggable)\"\r\n class=\"list-group-item\" *ngIf=\"draggable.show\">\r\n <div >{{draggable.content}}</div>\r\n </li>\r\n </span>\r\n <li class=\"dd-placeholder\" style=\"height: 36px;\"\r\n dndPlaceholderRef>\r\n </li>\r\n </ol>\r\n </div>\r\n \r\n <div class=\"col-sm-1 scrolling-without-border text-allign-middle hidden-xs\" >\r\n <i class='fa fa-arrows-h' style='font-size:48px;color:gray; vertical-align: middle;'></i>\r\n </div>\r\n <div class=\"col-sm-1r text-allign-middle visible-xs\" >\r\n <i class='fa fa-arrows-v' style='font-size:48px;color:gray; vertical-align: middle;'></i>\r\n </div>\r\n\r\n <div class=\"col-sm-6\">\r\n <section class=\" col col-sm-12 scrolling documentTypeList\">\r\n <div class=\"form-horizontal\" *ngFor=\"let draggable of documentTypeList\">\r\n <div class=\"form-group\" *ngIf=\"draggable.show\" >\r\n <label *ngIf=\"draggable.type != undefined\" class=\"control-label col-sm-3\" style=\"text-align: left; margin-top: 10px;;\">\r\n {{draggable.type}} : \r\n </label>\r\n <div class=\"col col-sm-{{draggable.type == undefined?12:9}} \">\r\n <ol class=\"\"\r\n dndDropzone class=\"dd-empty dndDragover\"\r\n dndEffectAllowed=\"copyMove\"\r\n [dndDisableIf]=\"draggable.content != ''\"\r\n (dndDrop)=\"onRightDrop($event,draggable)\">\r\n <li [dndEffectAllowed]=\"draggable.effectAllowed\"\r\n [dndDraggable]=\"draggable.data\"\r\n (dndStart)=\"onDraggableStart(draggable)\"\r\n (dndMoved)=\"onRightDraggableCopied(draggable)\"\r\n class=\"dd-item {{draggable.class}}\" *ngIf=\"draggable.content != ''\">\r\n <div class=\"dd-handle\">{{draggable.content}}</div>\r\n </li>\r\n <li class=\"dd-placeholder\"\r\n dndPlaceholderRef></li>\r\n </ol>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n</div>\r\n\r\n\r\n",
styles: [".dd-handle{display:block;font-size:15px;padding:9px 15px;color:#333;text-decoration:none;border:1px solid #cfcfcf;background:#fbfbfb;border-radius:4px}.dd-empty,.dd-placeholder{margin:5px 0;padding:0;min-height:30px;background:#f2fbff;border:1px dashed #b6bcbf;box-sizing:border-box;-moz-box-sizing:border-box}.dd-empty{min-height:41px!important;background-image:none!important;background-color:#fff!important;border:1px solid #d1d1d1!important;border-radius:4px}.scrolling{height:300px!important;overflow-y:scroll;border:1px solid #d1d1d1!important;margin-top:5px}.scrolling-without-border{height:300px!important;overflow-y:scroll;margin-top:5px}ol li{list-style-type:none}.documentList li{margin:5px}.dd-placeholder{margin:0;padding:0;border-radius:4px;min-height:40px;background:#f2fbff;border:1px dashed #b6bcbf;box-sizing:border-box;-moz-box-sizing:border-box}.documentTypeList .form-group{margin-bottom:0}::-webkit-scrollbar{width:5px}.text-allign-middle{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;text-align:center}"]
}] }
];
/** @nocollapse */
DragDropComponent.ctorParameters = function () { return []; };
DragDropComponent.propDecorators = {
documentList: [{ type: Input }],
documentTypeList: [{ type: Input }],
onDraggable: [{ type: Output }],
onLeftDraggableDrop: [{ type: Output }],
onRightDraggableDrop: [{ type: Output }]
};
return DragDropComponent;
}());
export { DragDropComponent };
if (false) {
/** @type {?} */
DragDropComponent.prototype.documentList;
/** @type {?} */
DragDropComponent.prototype.documentTypeList;
/** @type {?} */
DragDropComponent.prototype.currentDraggableEvent;
/** @type {?} */
DragDropComponent.prototype.onDraggable;
/** @type {?} */
DragDropComponent.prototype.onLeftDraggableDrop;
/** @type {?} */
DragDropComponent.prototype.onRightDraggableDrop;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3R1c2hhci1uZy1kcmFnLWRyb3AvIiwic291cmNlcyI6WyJsaWIvZHJhZy1kcm9wLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBSSxNQUFNLGVBQWUsQ0FBQztBQUVqRjtJQWdCSTtRQVBnQixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUN2QixxQkFBZ0IsR0FBUSxFQUFFLENBQUM7UUFFakMsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCx3QkFBbUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqRSx5QkFBb0IsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUc1RSxDQUFDOzs7O0lBRUQsb0NBQVE7OztJQUFSO1FBQ0ksMkJBQTJCO1FBQzNCLG1KQUFtSjtRQUNuSiw2S0FBNks7UUFDN0ssMktBQTJLO1FBQzNLLElBQUk7SUFDUixDQUFDOzs7OztJQUVELDRDQUFnQjs7OztJQUFoQixVQUFpQixJQUFTO1FBQ3RCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7Ozs7SUFFRCxpREFBcUI7Ozs7SUFBckIsVUFBc0IsSUFBUzs7WUFDckIsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7Ozs7SUFFRCxrREFBc0I7Ozs7SUFBdEIsVUFBdUIsSUFBUzs7WUFDdEIsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQzFDLGlHQUFpRztJQUNyRyxDQUFDOzs7OztJQUVELHNDQUFVOzs7O0lBQVYsVUFBVyxLQUFVOztZQUNiLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLO1FBQ25ELElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQzlCLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztTQUNwQzs7WUFDRyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDbEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUMzQixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyRCxDQUFDOzs7Ozs7SUFFRCx1Q0FBVzs7Ozs7SUFBWCxVQUFZLEtBQVUsRUFBRSxJQUFTOztZQUN6QixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDOztZQUNoRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdEQsaUdBQWlHO0lBQ3JHLENBQUM7O2dCQWhFSixTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsMi9GQUF5Qzs7aUJBSTVDOzs7OzsrQkFHSSxLQUFLO21DQUNMLEtBQUs7OEJBRUwsTUFBTTtzQ0FDTixNQUFNO3VDQUNOLE1BQU07O0lBb0RYLHdCQUFDO0NBQUEsQUFsRUQsSUFrRUM7U0EzRFksaUJBQWlCOzs7SUFFMUIseUNBQXVDOztJQUN2Qyw2Q0FBMkM7O0lBQzNDLGtEQUF3Qzs7SUFDeEMsd0NBQW1FOztJQUNuRSxnREFBMkU7O0lBQzNFLGlEQUE0RSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0ICxFdmVudEVtaXR0ZXIgICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3R1c2hhci1uZy1kcmFnLWRyb3AnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RyYWctZHJvcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFtcclxuICAgICAgICAnLi9kcmFnLWRyb3AuY29tcG9uZW50LnNjc3MnXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcmFnRHJvcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkb2N1bWVudExpc3Q6IGFueSA9IFtdO1xyXG4gICAgQElucHV0KCkgcHVibGljIGRvY3VtZW50VHlwZUxpc3Q6IGFueSA9IFtdO1xyXG4gICAgcHVibGljIGN1cnJlbnREcmFnZ2FibGVFdmVudDogRHJhZ0V2ZW50O1xyXG4gICAgQE91dHB1dCgpIG9uRHJhZ2dhYmxlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uTGVmdERyYWdnYWJsZURyb3A6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25SaWdodERyYWdnYWJsZURyb3A6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgLy8gZm9yKGxldCBpPTE7IGk8PTU7IGkrKyl7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuZG9jdW1lbnRMaXN0LnB1c2goeyBcImlkXCI6IGksIFwiY29udGVudFwiOiAnZmlsZV9uYW1lXycraSsnLnBkZicsIGVmZmVjdEFsbG93ZWQ6IFwiY29weU1vdmVcIiwgZGlzYWJsZTogZmFsc2UsIGhhbmRsZTogZmFsc2UsIHNob3c6IHRydWUgfSk7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuZG9jdW1lbnRUeXBlTGlzdEJLLnB1c2goeyBcImlkXCI6IFwiZG9jdHlwZV9cIiArIGksIFwiY29udGVudFwiOiBcIlwiLCBcInR5cGVcIjogXCJMYWJlbCBcIitpLCAgbWF4OiAxLCBlZmZlY3RBbGxvd2VkOiBcIm1vdmVcIiwgZGlzYWJsZTogZmFsc2UsIGhhbmRsZTogZmFsc2UsIGVtcHR5OiB0cnVlIH0pO1xyXG4gICAgICAgIC8vICAgICB0aGlzLmRvY3VtZW50VHlwZUxpc3QucHVzaCh7IFwiaWRcIjogXCJkb2N0eXBlX1wiICsgaSwgXCJjb250ZW50XCI6IFwiXCIsIFwidHlwZVwiOiBcIkxhYmVsIFwiK2ksICBtYXg6IDEsIGVmZmVjdEFsbG93ZWQ6IFwibW92ZVwiLCBkaXNhYmxlOiBmYWxzZSwgaGFuZGxlOiBmYWxzZSwgZW1wdHk6IHRydWUgfSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRHJhZ2dhYmxlU3RhcnQoaXRlbTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RHJhZ2dhYmxlRXZlbnQgPSBpdGVtO1xyXG4gICAgICAgIHRoaXMub25EcmFnZ2FibGUuZW1pdChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkxlZnREcmFnZ2FibGVDb3BpZWQoaXRlbTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRvY3VtZW50TGlzdC5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SaWdodERyYWdnYWJsZUNvcGllZChpdGVtOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZG9jdW1lbnRUeXBlTGlzdC5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRUeXBlTGlzdFtpbmRleF0uY29udGVudCA9IFwiXCI7XHJcbiAgICAgICAgLy90aGlzLmRvY3VtZW50QXNzb2NpYXRpb25PYmpbdGhpcy5lbXBsb3llZV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZG9jdW1lbnRUeXBlTGlzdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTGVmdERyb3AoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGxldCBpbmRleCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQpKS5pbmRleDtcclxuICAgICAgICBpZiAodHlwZW9mIGluZGV4ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5kb2N1bWVudExpc3QubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdGVtcE9iaiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyZW50RHJhZ2dhYmxlRXZlbnQpKTtcclxuICAgICAgICB0ZW1wT2JqW1wiY29udGVudFwiXSA9IHRlbXBPYmouY29udGVudDtcclxuICAgICAgICB0ZW1wT2JqW1wiZWZmZWN0QWxsb3dlZFwiXSA9IFwibW92ZVwiO1xyXG4gICAgICAgIHRlbXBPYmpbXCJkaXNhYmxlXCJdID0gZmFsc2U7XHJcbiAgICAgICAgdGVtcE9ialtcImhhbmRsZVwiXSA9IHRydWU7XHJcbiAgICAgICAgdGVtcE9ialtcInNob3dcIl0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0LnNwbGljZShpbmRleCwgMCwgdGVtcE9iaik7XHJcbiAgICAgICAgdGhpcy5vbkxlZnREcmFnZ2FibGVEcm9wLmVtaXQodGhpcy5kb2N1bWVudExpc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmlnaHREcm9wKGV2ZW50OiBhbnksIGl0ZW06IGFueSkge1xyXG4gICAgICAgIGxldCB0ZW1wT2JqID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnREcmFnZ2FibGVFdmVudCkpO1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuZG9jdW1lbnRUeXBlTGlzdC5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRUeXBlTGlzdFtpbmRleF0uY29udGVudCA9IHRlbXBPYmouY29udGVudDtcclxuICAgICAgICB0aGlzLm9uUmlnaHREcmFnZ2FibGVEcm9wLmVtaXQodGhpcy5kb2N1bWVudFR5cGVMaXN0KTtcclxuICAgICAgICAvL3RoaXMuZG9jdW1lbnRBc3NvY2lhdGlvbk9ialt0aGlzLmVtcGxveWVlXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kb2N1bWVudFR5cGVMaXN0KSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==