wsuite-notification
Version:
Toast notification for angular 2,4,5,6,7,8+ version.
104 lines • 25.6 kB
JavaScript
import { __decorate } from "tslib";
import { Component } from '@angular/core';
import { NotificationService } from '../../services/notification.service';
import { NotificationType } from '../../model/notification';
import { DomSanitizer } from '@angular/platform-browser';
import { trigger, transition, style, animate } from '@angular/animations';
var NotificationComponent = /** @class */ (function () {
function NotificationComponent(notificationSvc, domSanitizer) {
this.notificationSvc = notificationSvc;
this.domSanitizer = domSanitizer;
this.notifications = [];
}
NotificationComponent.prototype._addNotification = function (notification) {
var _this = this;
this.notifications.push(notification);
if (notification.timeout !== 0) {
setTimeout(function () { return _this.close(notification); }, notification.timeout);
}
};
NotificationComponent.prototype.ngOnInit = function () {
var _this = this;
this.subscription = this.notificationSvc.getObservable().subscribe(function (notification) { return _this._addNotification(notification); });
};
NotificationComponent.prototype.ngOnDestroy = function () {
this.subscription.unsubscribe();
};
NotificationComponent.prototype.close = function (notification) {
this.notifications = this.notifications.filter(function (notif) { return notif.id !== notification.id; });
};
NotificationComponent.prototype.className = function (notification) {
var style;
switch (notification.type) {
case NotificationType.success:
style = 'wsuite-alert-success';
break;
case NotificationType.warning:
style = 'wsuite-alert-warning';
break;
case NotificationType.error:
style = 'wsuite-alert-error';
break;
case NotificationType.darkgray:
style = 'wsuite-alert-darkgray';
break;
case NotificationType.blue:
style = 'wsuite-alert-blue';
break;
default:
style = 'info';
break;
}
return style;
};
NotificationComponent.prototype.setIcon = function (notification) {
var icon;
switch (notification.type) {
case NotificationType.success:
icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMC43NjkiIHZpZXdCb3g9IjAgMCAxNCAxMC43NjkiPjxkZWZzPjxzdHlsZT4uYXtmaWxsOiNmZmY7fTwvc3R5bGU+PC9kZWZzPjxwYXRoIGNsYXNzPSJhIiBkPSJNLjE2Miw4LjkyM2EuNTIxLjUyMSwwLDAsMSwwLS43NTRsLjc1NC0uNzU0YS41MjEuNTIxLDAsMCwxLC43NTQsMGwuMDU0LjA1NCwyLjk2MiwzLjE3N2EuMjYuMjYsMCwwLDAsLjM3NywwbDcuMjE1LTcuNDg1aC4wNTRhLjUyMS41MjEsMCwwLDEsLjc1NCwwbC43NTQuNzU0YS41MjEuNTIxLDAsMCwxLDAsLjc1NGgwTDUuMjIzLDEzLjYwOGEuNTIxLjUyMSwwLDAsMS0uNzU0LDBMLjI2OSw5LjA4NS4xNjIsOC45MjNaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0zKSIvPjwvc3ZnPg==';
break;
case NotificationType.warning:
icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNS40NzkiIHZpZXdCb3g9IjAgMCAxOCAxNS40NzkiPjxkZWZzPjxzdHlsZT4uYXtmaWxsOiNmZmY7fTwvc3R5bGU+PC9kZWZzPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTM1Ljg1NykiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMzUuODU3KSI+PHBhdGggY2xhc3M9ImEiIGQ9Ik0xNy43NjgsNDguODg0LDEwLjM4NCwzNi42MzlhMS42MTcsMS42MTcsMCwwLDAtMi43NywwTC4yMzEsNDguODg0YTEuNjE3LDEuNjE3LDAsMCwwLDEuMzg1LDIuNDUySDE2LjM4M2ExLjYxNywxLjYxNywwLDAsMCwxLjM4NS0yLjQ1MlptLTEsMS4wNTRhLjQ0Ni40NDYsMCwwLDEtLjM4OC4yMjZIMS42MTZhLjQ0NS40NDUsMCwwLDEtLjM4MS0uNjc1TDguNjE4LDM3LjI0NGEuNDQ1LjQ0NSwwLDAsMSwuNzYyLDBsNy4zODMsMTIuMjQ1QS40NDYuNDQ2LDAsMCwxLDE2Ljc3LDQ5LjkzOFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTM1Ljg1NykiLz48L2c+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOC4yNzIgNDAuODg5KSI+PHBhdGggY2xhc3M9ImEiIGQ9Ik0yMzQuMzEsMTczLjAwNWMtLjQxMSwwLS43MzIuMjIxLS43MzIuNjEyLDAsMS4xOTQuMTQsMi45MS4xNCw0LjEsMCwuMzExLjI3MS40NDEuNTkyLjQ0MS4yNDEsMCwuNTgyLS4xMy41ODItLjQ0MSwwLTEuMTk0LjE0LTIuOTEuMTQtNC4xQS42NDUuNjQ1LDAsMCwwLDIzNC4zMSwxNzMuMDA1WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzMy41NzggLTE3My4wMDUpIi8+PC9nPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguMjQzIDQ3LjEyMikiPjxwYXRoIGNsYXNzPSJhIiBkPSJNMjMzLjQyNCwzNTMuMzA2YS43NzMuNzczLDAsMCwwLDAsMS41NDUuNzczLjc3MywwLDAsMCwwLTEuNTQ1WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzMi42NTEgLTM1My4zMDYpIi8+PC9nPjwvZz48L3N2Zz4=';
break;
case NotificationType.error:
icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNC44MjgiIGhlaWdodD0iMTQuODI4IiB2aWV3Qm94PSIwIDAgMTQuODI4IDE0LjgyOCI+PGRlZnM+PHN0eWxlPi5he2ZpbGw6bm9uZTtzdHJva2U6I2ZmZjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2Utd2lkdGg6MnB4O308L3N0eWxlPjwvZGVmcz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTMyNS4yMDUgLTExLjIwNSkiPjxsaW5lIGNsYXNzPSJhIiB4Mj0iMTIiIHkyPSIxMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyNi42MTkgMTIuNjE5KSIvPjxsaW5lIGNsYXNzPSJhIiB4MT0iMTIiIHkyPSIxMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyNi42MTkgMTIuNjE5KSIvPjwvZz48L3N2Zz4=';
break;
case NotificationType.darkgray:
icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2LjQzOSIgaGVpZ2h0PSIxNCIgdmlld0JveD0iMCAwIDYuNDM5IDE0Ij48ZGVmcz48c3R5bGU+LmF7ZmlsbDojZmZmO308L3N0eWxlPjwvZGVmcz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjcpIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNykiPjxwYXRoIGNsYXNzPSJhIiBkPSJNMzEuOTIzLDBhMS4zMDksMS4zMDksMCwwLDEsMS40MDYsMS4zNywxLjg0MSwxLjg0MSwwLDAsMS0xLjg3NSwxLjc1OCwxLjI1NSwxLjI1NSwwLDAsMS0xLjM4Mi0xLjM5M0ExLjgsMS44LDAsMCwxLDMxLjkyMywwWk0yOS4wMzYsMTRjLS43NCwwLTEuMjgzLS40NTctLjc2NS0yLjQ2NmwuODUtMy41NjRjLjE0OC0uNTcxLjE3Mi0uOCwwLS44YTUuNTkyLDUuNTkyLDAsMCwwLTEuNzUxLjc4M0wyNyw3LjMzN0E5Ljc4Miw5Ljc4MiwwLDAsMSwzMS43NjEsNC45MWMuNzQsMCwuODY0Ljg5MS40OTMsMi4yNjFsLS45NzMsMy43NDZjLS4xNzMuNjYyLS4xLjg5LjA3NC44OWEzLjgxMywzLjgxMywwLDAsMCwxLjY2NS0uODQ2bC40Mi41NzFBNy43LDcuNywwLDAsMSwyOS4wMzYsMTRaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjcpIi8+PC9nPjwvZz48L3N2Zz4=';
break;
case NotificationType.blue:
icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2LjQzOSIgaGVpZ2h0PSIxNCIgdmlld0JveD0iMCAwIDYuNDM5IDE0Ij48ZGVmcz48c3R5bGU+LmF7ZmlsbDojZmZmO308L3N0eWxlPjwvZGVmcz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjcpIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNykiPjxwYXRoIGNsYXNzPSJhIiBkPSJNMzEuOTIzLDBhMS4zMDksMS4zMDksMCwwLDEsMS40MDYsMS4zNywxLjg0MSwxLjg0MSwwLDAsMS0xLjg3NSwxLjc1OCwxLjI1NSwxLjI1NSwwLDAsMS0xLjM4Mi0xLjM5M0ExLjgsMS44LDAsMCwxLDMxLjkyMywwWk0yOS4wMzYsMTRjLS43NCwwLTEuMjgzLS40NTctLjc2NS0yLjQ2NmwuODUtMy41NjRjLjE0OC0uNTcxLjE3Mi0uOCwwLS44YTUuNTkyLDUuNTkyLDAsMCwwLTEuNzUxLjc4M0wyNyw3LjMzN0E5Ljc4Miw5Ljc4MiwwLDAsMSwzMS43NjEsNC45MWMuNzQsMCwuODY0Ljg5MS40OTMsMi4yNjFsLS45NzMsMy43NDZjLS4xNzMuNjYyLS4xLjg5LjA3NC44OWEzLjgxMywzLjgxMywwLDAsMCwxLjY2NS0uODQ2bC40Mi41NzFBNy43LDcuNywwLDAsMSwyOS4wMzYsMTRaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjcpIi8+PC9nPjwvZz48L3N2Zz4=';
break;
default:
icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2LjQzOSIgaGVpZ2h0PSIxNCIgdmlld0JveD0iMCAwIDYuNDM5IDE0Ij48ZGVmcz48c3R5bGU+LmF7ZmlsbDojZmZmO308L3N0eWxlPjwvZGVmcz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjcpIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNykiPjxwYXRoIGNsYXNzPSJhIiBkPSJNMzEuOTIzLDBhMS4zMDksMS4zMDksMCwwLDEsMS40MDYsMS4zNywxLjg0MSwxLjg0MSwwLDAsMS0xLjg3NSwxLjc1OCwxLjI1NSwxLjI1NSwwLDAsMS0xLjM4Mi0xLjM5M0ExLjgsMS44LDAsMCwxLDMxLjkyMywwWk0yOS4wMzYsMTRjLS43NCwwLTEuMjgzLS40NTctLjc2NS0yLjQ2NmwuODUtMy41NjRjLjE0OC0uNTcxLjE3Mi0uOCwwLS44YTUuNTkyLDUuNTkyLDAsMCwwLTEuNzUxLjc4M0wyNyw3LjMzN0E5Ljc4Miw5Ljc4MiwwLDAsMSwzMS43NjEsNC45MWMuNzQsMCwuODY0Ljg5MS40OTMsMi4yNjFsLS45NzMsMy43NDZjLS4xNzMuNjYyLS4xLjg5LjA3NC44OWEzLjgxMywzLjgxMywwLDAsMCwxLjY2NS0uODQ2bC40Mi41NzFBNy43LDcuNywwLDAsMSwyOS4wMzYsMTRaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjcpIi8+PC9nPjwvZz48L3N2Zz4=';
break;
}
return this.domSanitizer.bypassSecurityTrustResourceUrl(icon);
};
NotificationComponent.ctorParameters = function () { return [
{ type: NotificationService },
{ type: DomSanitizer }
]; };
NotificationComponent = __decorate([
Component({
selector: 'wsuite-notification',
template: "<div class=\"wsuite-notifications\">\n <div class=\"wsuite-alert wsuite-alert-dismissible w-350\" [ngClass]=\"className(notification)\"\n *ngFor=\"let notification of notifications\" role=\"wsuite-alert\" @fade>\n <span class=\"info\"> <img [src]=\"setIcon(notification)\" alt=\"\"> </span>\n <div class=\"wsuite-alert-body\">\n <p class=\"n1\">{{notification.title}}</p>\n <small [innerHtml]=\"notification.message | wsuiteSafeHtml\"></small>\n </div>\n <button type=\"button\" class=\"close\" (click)=\"close(notification)\" aria-label=\"Close\"> <span\n aria-hidden=\"true\">×</span>\n </button>\n </div>\n</div>",
animations: [
trigger('fade', [
transition('void => *', [
style({ opacity: 0 }),
animate(500, style({ opacity: 1 }))
]),
transition('* => void', [
style({ opacity: 1 }),
animate(500, style({ opacity: 0 }))
])
])
],
styles: [".wsuite-notifications{position:fixed;top:60px;right:0;z-index:99999999;left:50%;margin-left:-175px}.wsuite-alert .info{width:39px;display:flex;align-items:center;justify-content:center}.wsuite-alert-body{padding:4px 34px 4px 13px;flex:1;display:flex;flex-direction:column;justify-content:center}.wsuite-alert-body p{line-height:17px}.wsuite-alert-body small{font-size:10px;color:#868686;line-height:14px;display:block}.wsuite-alert{display:flex;align-items:stretch;box-shadow:0 3px 6px rgba(0,0,0,.16);margin:5px;left:50%;background-color:#fff;border-radius:.25rem;min-height:40px}.wsuite-alert .close{align-self:flex-start;margin-right:5px}.wsuite-alert-darkgray{border:1px solid #404040;padding:0}.wsuite-alert-darkgray .info{background-color:#404040}.wsuite-alert-blue{border:1px solid #41a3f3;padding:0}.wsuite-alert-blue .info{background-color:#41a3f3}.wsuite-alert-warning{border:1px solid #f5b829;padding:0}.wsuite-alert-warning .info{background-color:#f5b829}.wsuite-alert-error{border:1px solid #ff5c5c;padding:0}.wsuite-alert-error .info{background-color:#ff5c5c}.wsuite-alert-success{border:1px solid #5abe2b;padding:0}.wsuite-alert-success .info{background-color:#5abe2b}.w-250{max-width:250px}.w-350{max-width:350px}.wsuite-alert-example .wsuite-alert{margin-bottom:38px}"]
})
], NotificationComponent);
return NotificationComponent;
}());
export { NotificationComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3dzdWl0ZS1ub3RpZmljYXRpb24vIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQWdCLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQW1CMUU7SUFLRSwrQkFDVSxlQUFvQyxFQUNwQyxZQUEwQjtRQUQxQixvQkFBZSxHQUFmLGVBQWUsQ0FBcUI7UUFDcEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFMcEMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0lBTS9CLENBQUM7SUFFRyxnREFBZ0IsR0FBeEIsVUFBeUIsWUFBMEI7UUFBbkQsaUJBT0M7UUFOQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV0QyxJQUFJLFlBQVksQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQzlCLFVBQVUsQ0FBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBeEIsQ0FBd0IsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7U0FFbEU7SUFDSCxDQUFDO0lBRUQsd0NBQVEsR0FBUjtRQUFBLGlCQUVDO1FBREMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FB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LEVBQUUsQ0FBQyxDQUFDO3FCQUNwQyxDQUFDO2lCQUNILENBQUM7YUFDSDs7U0FDRixDQUFDO09BQ1cscUJBQXFCLENBK0ZqQztJQUFELDRCQUFDO0NBQUEsQUEvRkQsSUErRkM7U0EvRlkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWwvbm90aWZpY2F0aW9uJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgdHJpZ2dlciwgdHJhbnNpdGlvbiwgc3R5bGUsIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd3N1aXRlLW5vdGlmaWNhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub3RpZmljYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub3RpZmljYXRpb24uY29tcG9uZW50LmNzcyddLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZmFkZScsIFtcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIFtcbiAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwIH0pLFxuICAgICAgICBhbmltYXRlKDUwMCwgc3R5bGUoeyBvcGFjaXR5OiAxIH0pKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBbXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSB9KSxcbiAgICAgICAgYW5pbWF0ZSg1MDAsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSlcbiAgICAgIF0pXG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblN2YzogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyXG4gICkgeyB9XG5cbiAgcHJpdmF0ZSBfYWRkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25zLnB1c2gobm90aWZpY2F0aW9uKTtcblxuICAgIGlmIChub3RpZmljYXRpb24udGltZW91dCAhPT0gMCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNsb3NlKG5vdGlmaWNhdGlvbiksIG5vdGlmaWNhdGlvbi50aW1lb3V0KTtcblxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5ub3RpZmljYXRpb25TdmMuZ2V0T2JzZXJ2YWJsZSgpLnN1YnNjcmliZShub3RpZmljYXRpb24gPT4gdGhpcy5fYWRkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbikpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGNsb3NlKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25zID0gdGhpcy5ub3RpZmljYXRpb25zLmZpbHRlcihub3RpZiA9PiBub3RpZi5pZCAhPT0gbm90aWZpY2F0aW9uLmlkKTtcbiAgfVxuXG5cbiAgY2xhc3NOYW1lKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogc3RyaW5nIHtcblxuICAgIGxldCBzdHlsZTogc3RyaW5nO1xuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLnR5cGUpIHtcblxuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLnN1Y2Nlc3M6XG4gICAgICAgIHN0eWxlID0gJ3dzdWl0ZS1hbGVydC1zdWNjZXNzJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS53YXJuaW5nOlxuICAgICAgICBzdHlsZSA9ICd3c3VpdGUtYWxlcnQtd2FybmluZyc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuZXJyb3I6XG4gICAgICAgIHN0eWxlID0gJ3dzdWl0ZS1hbGVydC1lcnJvcic7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuZGFya2dyYXk6XG4gICAgICAgIHN0eWxlID0gJ3dzdWl0ZS1hbGVydC1kYXJrZ3JheSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuYmx1ZTpcbiAgICAgICAgc3R5bGUgPSAnd3N1aXRlLWFsZXJ0LWJsdWUnO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc3R5bGUgPSAnaW5mbyc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxuICBzZXRJY29uKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogYW55IHtcbiAgICBsZXQgaWNvbjogYW55O1xuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLnR5cGUpIHtcblxuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLnN1Y2Nlc3M6XG4gICAgICAgIGljb24gPSAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0l4TkNJZ2FHVnBaMmgwUFNJeE1DNDNOamtpSUhacFpYZENiM2c5SWpBZ01DQXhOQ0F4TUM0M05qa2lQanhrWldaelBqeHpkSGxzWlQ0dVlYdG1hV3hzT2lObVptWTdmVHd2YzNSNWJHVStQQzlrWldaelBqeHdZWFJvSUdOc1lYTnpQU0poSWlCa1BTSk5MakUyTWl3NExqa3lNMkV1TlRJeExqVXlNU3d3TERBc01Td3dMUzQzTlRSc0xqYzFOQzB1TnpVMFlTNDFNakV1TlRJeExEQXNNQ3d4TEM0M05UUXNNR3d1TURVMExqQTFOQ3d5TGprMk1pd3pMakUzTjJFdU1qWXVNallzTUN3d0xEQXNMak0zTnl3d2JEY3VNakUxTFRjdU5EZzFhQzR3TlRSaExqVXlNUzQxTWpFc01Dd3dMREVzTGpjMU5Dd3diQzQzTlRRdU56VTBZUzQxTWpFdU5USXhMREFzTUN3eExEQXNMamMxTkdnd1REVXVNakl6TERFekxqWXdPR0V1TlRJeExqVXlNU3d3TERBc01TMHVOelUwTERCTUxqSTJPU3c1TGpBNE5TNHhOaklzT0M0NU1qTmFJaUIwY21GdWMyWnZjbTA5SW5SeVlXNXpiR0YwWlNnd0lDMHpLU0l2UGp3dmMzWm5QZz09JztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS53YXJuaW5nOlxuICAgICAgICBpY29uID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJeE9DSWdhR1ZwWjJoMFBTSXhOUzQwTnpraUlIWnBaWGRDYjNnOUlqQWdNQ0F4T0NBeE5TNDBOemtpUGp4a1pXWnpQanh6ZEhsc1pUNHVZWHRtYVd4c09pTm1abVk3ZlR3dmMzUjViR1UrUEM5a1pXWnpQanhuSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEQWdMVE0xTGpnMU55a2lQanhuSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEQWdNelV1T0RVM0tTSStQSEJoZEdnZ1kyeGhjM005SW1FaUlHUTlJazB4Tnk0M05qZ3NORGd1T0RnMExERXdMak00TkN3ek5pNDJNemxoTVM0Mk1UY3NNUzQyTVRjc01Dd3dMREF0TWk0M055d3dUQzR5TXpFc05EZ3VPRGcwWVRFdU5qRTNMREV1TmpFM0xEQXNNQ3d3TERFdU16ZzFMREl1TkRVeVNERTJMak00TTJFeExqWXhOeXd4TGpZeE55d3dMREFzTUN3eExqTTROUzB5TGpRMU1scHRMVEVzTVM0d05UUmhMalEwTmk0ME5EWXNNQ3d3TERFdExqTTRPQzR5TWpaSU1TNDJNVFpoTGpRME5TNDBORFVzTUN3d0xERXRMak00TVMwdU5qYzFURGd1TmpFNExETTNMakkwTkdFdU5EUTFMalEwTlN3d0xEQXNNU3d1TnpZeUxEQnNOeTR6T0RNc01USXVNalExUVM0ME5EWXVORFEyTERBc01Dd3hMREUyTGpjM0xEUTVMamt6T0ZvaUlIUnlZVzV6Wm05eWJUMGlkSEpoYm5Oc1lYUmxLREFnTFRNMUxqZzFOeWtpTHo0OEwyYytQR2NnZEhKaGJuTm1iM0p0UFNKMGNtRnVjMnhoZEdVb09DNHlOeklnTkRBdU9EZzVLU0krUEhCaGRHZ2dZMnhoYzNNOUltRWlJR1E5SWsweU16UXVNekVzTVRjekxqQXdOV010TGpReE1Td3dMUzQzTXpJdU1qSXhMUzQzTXpJdU5qRXlMREFzTVM0eE9UUXVNVFFzTWk0NU1TNHhOQ3cwTGpFc01Dd3VNekV4TGpJM01TNDBOREV1TlRreUxqUTBNUzR5TkRFc01Dd3VOVGd5TFM0eE15NDFPREl0TGpRME1Td3dMVEV1TVRrMExqRTBMVEl1T1RFdU1UUXROQzR4UVM0Mk5EVXVOalExTERBc01Dd3dMREl6TkM0ek1Td3hOek11TURBMVdpSWdkSEpoYm5ObWIzSnRQU0owY21GdWMyeGhkR1VvTFRJek15NDFOemdnTFRFM015NHdNRFVwSWk4K1BDOW5QanhuSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEZ3VNalF6SURRM0xqRXlNaWtpUGp4d1lYUm9JR05zWVhOelBTSmhJaUJrUFNKTk1qTXpMalF5TkN3ek5UTXVNekEyWVM0M056TXVOemN6TERBc01Dd3dMREFzTVM0MU5EVXVOemN6TGpjM015d3dMREFzTUN3d0xURXVOVFExV2lJZ2RISmhibk5tYjNKdFBTSjBjbUZ1YzJ4aGRHVW9MVEl6TWk0Mk5URWdMVE0xTXk0ek1EWXBJaTgrUEM5blBqd3ZaejQ4TDNOMlp6ND0nO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLmVycm9yOlxuICAgICAgICBpY29uID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJeE5DNDRNamdpSUdobGFXZG9kRDBpTVRRdU9ESTRJaUIyYVdWM1FtOTRQU0l3SURBZ01UUXVPREk0SURFMExqZ3lPQ0krUEdSbFpuTStQSE4wZVd4bFBpNWhlMlpwYkd3NmJtOXVaVHR6ZEhKdmEyVTZJMlptWmp0emRISnZhMlV0YkdsdVpXTmhjRHB5YjNWdVpEdHpkSEp2YTJVdGQybGtkR2c2TW5CNE8zMDhMM04wZVd4bFBqd3ZaR1ZtY3o0OFp5QjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2d0TVRNeU5TNHlNRFVnTFRFeExqSXdOU2tpUGp4c2FXNWxJR05zWVhOelBTSmhJaUI0TWowaU1USWlJSGt5UFNJeE1pSWdkSEpoYm5ObWIzSnRQU0owY21GdWMyeGhkR1VvTVRNeU5pNDJNVGtnTVRJdU5qRTVLU0l2UGp4c2FXNWxJR05zWVhOelBTSmhJaUI0TVQwaU1USWlJSGt5UFNJeE1pSWdkSEpoYm5ObWIzSnRQU0owY21GdWMyeGhkR1VvTVRNeU5pNDJNVGtnTVRJdU5qRTVLU0l2UGp3dlp6NDhMM04yWno0PSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuZGFya2dyYXk6XG4gICAgICAgIGljb24gPSAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0kyTGpRek9TSWdhR1ZwWjJoMFBTSXhOQ0lnZG1sbGQwSnZlRDBpTUNBd0lEWXVORE01SURFMElqNDhaR1ZtY3o0OGMzUjViR1UrTG1GN1ptbHNiRG9qWm1abU8zMDhMM04wZVd4bFBqd3ZaR1ZtY3o0OFp5QjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2d0TWpjcElqNDhaeUIwY21GdWMyWnZjbTA5SW5SeVlXNXpiR0YwWlNneU55a2lQanh3WVhSb0lHTnNZWE56UFNKaElpQmtQU0pOTXpFdU9USXpMREJoTVM0ek1Ea3NNUzR6TURrc01Dd3dMREVzTVM0ME1EWXNNUzR6Tnl3eExqZzBNU3d4TGpnME1Td3dMREFzTVMweExqZzNOU3d4TGpjMU9Dd3hMakkxTlN3eExqSTFOU3d3TERBc01TMHhMak00TWkweExqTTVNMEV4TGpnc01TNDRMREFzTUN3eExETXhMamt5TXl3d1drMHlPUzR3TXpZc01UUmpMUzQzTkN3d0xURXVNamd6TFM0ME5UY3RMamMyTlMweUxqUTJObXd1T0RVdE15NDFOalJqTGpFME9DMHVOVGN4TGpFM01pMHVPQ3d3TFM0NFlUVXVOVGt5TERVdU5Ua3lMREFzTUN3d0xURXVOelV4TGpjNE0wd3lOeXczTGpNek4wRTVMamM0TWl3NUxqYzRNaXd3TERBc01Td3pNUzQzTmpFc05DNDVNV011TnpRc01Dd3VPRFkwTGpnNU1TNDBPVE1zTWk0eU5qRnNMUzQ1TnpNc015NDNORFpqTFM0eE56TXVOall5TFM0eExqZzVMakEzTkM0NE9XRXpMamd4TXl3ekxqZ3hNeXd3TERBc01Dd3hMalkyTlMwdU9EUTJiQzQwTWk0MU56RkJOeTQzTERjdU55d3dMREFzTVN3eU9TNHdNellzTVRSYUlpQjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2d0TWpjcElpOCtQQzluUGp3dlp6NDhMM04yWno0PSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuYmx1ZTpcbiAgICAgICAgaWNvbiA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSGRwWkhSb1BTSTJMalF6T1NJZ2FHVnBaMmgwUFNJeE5DSWdkbWxsZDBKdmVEMGlNQ0F3SURZdU5ETTVJREUwSWo0OFpHVm1jejQ4YzNSNWJHVStMbUY3Wm1sc2JEb2pabVptTzMwOEwzTjBlV3hsUGp3dlpHVm1jejQ4WnlCMGNtRnVjMlp2Y20wOUluUnlZVzV6YkdGMFpTZ3RNamNwSWo0OFp5QjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2d5TnlraVBqeHdZWFJvSUdOc1lYTnpQU0poSWlCa1BTSk5NekV1T1RJekxEQmhNUzR6TURrc01TNHpNRGtzTUN3d0xERXNNUzQwTURZc01TNHpOeXd4TGpnME1Td3hMamcwTVN3d0xEQXNNUzB4TGpnM05Td3hMamMxT0N3eExqSTFOU3d4TGpJMU5Td3dMREFzTVMweExqTTRNaTB4TGpNNU0wRXhMamdzTVM0NExEQXNNQ3d4TERNeExqa3lNeXd3V2sweU9TNHdNellzTVRSakxTNDNOQ3d3TFRFdU1qZ3pMUzQwTlRjdExqYzJOUzB5TGpRMk5td3VPRFV0TXk0MU5qUmpMakUwT0MwdU5UY3hMakUzTWkwdU9Dd3dMUzQ0WVRVdU5Ua3lMRFV1TlRreUxEQXNNQ3d3TFRFdU56VXhMamM0TTB3eU55dzNMak16TjBFNUxqYzRNaXc1TGpjNE1pd3dMREFzTVN3ek1TNDNOakVzTkM0NU1XTXVOelFzTUN3dU9EWTBMamc1TVM0ME9UTXNNaTR5TmpGc0xTNDVOek1zTXk0M05EWmpMUzR4TnpNdU5qWXlMUzR4TGpnNUxqQTNOQzQ0T1dFekxqZ3hNeXd6TGpneE15d3dMREFzTUN3eExqWTJOUzB1T0RRMmJDNDBNaTQxTnpGQk55NDNMRGN1Tnl3d0xEQXNNU3d5T1M0d016WXNNVFJhSWlCMGNtRnVjMlp2Y20wOUluUnlZVzV6YkdGMFpTZ3RNamNwSWk4K1BDOW5Qand2Wno0OEwzTjJaejQ9JztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGljb24gPSAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0kyTGpRek9TSWdhR1ZwWjJoMFBTSXhOQ0lnZG1sbGQwSnZlRDBpTUNBd0lEWXVORE01SURFMElqNDhaR1ZtY3o0OGMzUjViR1UrTG1GN1ptbHNiRG9qWm1abU8zMDhMM04wZVd4bFBqd3ZaR1ZtY3o0OFp5QjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2d0TWpjcElqNDhaeUIwY21GdWMyWnZjbTA5SW5SeVlXNXpiR0YwWlNneU55a2lQanh3WVhSb0lHTnNZWE56UFNKaElpQmtQU0pOTXpFdU9USXpMREJoTVM0ek1Ea3NNUzR6TURrc01Dd3dMREVzTVM0ME1EWXNNUzR6Tnl3eExqZzBNU3d4TGpnME1Td3dMREFzTVMweExqZzNOU3d4TGpjMU9Dd3hMakkxTlN3eExqSTFOU3d3TERBc01TMHhMak00TWkweExqTTVNMEV4TGpnc01TNDRMREFzTUN3eExETXhMamt5TXl3d1drMHlPUzR3TXpZc01UUmpMUzQzTkN3d0xURXVNamd6TFM0ME5UY3RMamMyTlMweUxqUTJObXd1T0RVdE15NDFOalJqTGpFME9DMHVOVGN4TGpFM01pMHVPQ3d3TFM0NFlUVXVOVGt5TERVdU5Ua3lMREFzTUN3d0xURXVOelV4TGpjNE0wd3lOeXczTGpNek4wRTVMamM0TWl3NUxqYzRNaXd3TERBc01Td3pNUzQzTmpFc05DNDVNV011TnpRc01Dd3VPRFkwTGpnNU1TNDBPVE1zTWk0eU5qRnNMUzQ1TnpNc015NDNORFpqTFM0eE56TXVOall5TFM0eExqZzVMakEzTkM0NE9XRXpMamd4TXl3ekxqZ3hNeXd3TERBc01Dd3hMalkyTlMwdU9EUTJiQzQwTWk0MU56RkJOeTQzTERjdU55d3dMREFzTVN3eU9TNHdNellzTVRSYUlpQjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2d0TWpjcElpOCtQQzluUGp3dlp6NDhMM04yWno0PSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGljb24pO1xuICB9XG5cbn1cbiJdfQ==