io.parrots
Version:
Parrots.io App
208 lines (207 loc) • 23.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, HostListener } from '@angular/core';
import { PhloxAppService } from 'com.phloxui';
import { NeedFocusService } from 'com.phloxui';
import { ObservableManager } from 'com.phloxui';
import { NotificationManager } from 'com.phloxui';
import { PhloxAppInfoService } from 'com.phloxui';
import { PhloxAppInfo } from 'com.phloxui';
import { AbstractSideSlidePanel } from 'com.phloxui';
var /** @type {?} */ TYPE_NAME = "parrots-notifier";
var /** @type {?} */ SUB_TOPIC_NAME = 'parrots-notifier';
var ParrotsNotifier = /** @class */ (function (_super) {
tslib_1.__extends(ParrotsNotifier, _super);
function ParrotsNotifier(phloxAppService, observableMgr, needFocusService, notificationManager, phloxAppInfoService) {
var _this = _super.call(this, phloxAppService, observableMgr, needFocusService, ParrotsNotifier.SUB_TOPIC_NAME) || this;
_this.notificationManager = notificationManager;
if (phloxAppInfoService != null) {
phloxAppInfoService.getAppInfo().then(function (result) {
_this.phloxAppInfo = result;
});
}
return _this;
}
/**
* @return {?}
*/
ParrotsNotifier.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
};
/**
* @return {?}
*/
ParrotsNotifier.prototype.isRinging = /**
* @return {?}
*/
function () {
if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') {
var /** @type {?} */ unReadArray = this.getUnreadNotifications();
if (unReadArray !== null && typeof unReadArray !== 'undefined') {
return unReadArray.length > 0;
}
}
return false;
};
/**
* @return {?}
*/
ParrotsNotifier.prototype.getUnreadNotifications = /**
* @return {?}
*/
function () {
if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') {
var /** @type {?} */ unReadArray = this.notificationManager.getUnreadNotifications();
if (unReadArray !== null && typeof unReadArray !== 'undefined') {
return unReadArray;
}
}
return [];
};
/**
* @return {?}
*/
ParrotsNotifier.prototype.getNotifications = /**
* @return {?}
*/
function () {
var /** @type {?} */ result = [];
if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') {
var /** @type {?} */ allNotifyArray = this.notificationManager.getNotifications();
var /** @type {?} */ maxNotification = PhloxAppInfo.DEFAULT_MAX_NOTIFICATIONS;
if (this.phloxAppInfo !== null && typeof this.phloxAppInfo !== 'undefined') {
if (this.phloxAppInfo.settings !== null && typeof this.phloxAppInfo.settings !== 'undefined') {
maxNotification = this.phloxAppInfo.settings.MAX_NOTIFICATIONS;
}
}
if (allNotifyArray !== null && typeof allNotifyArray !== 'undefined') {
var /** @type {?} */ overLength = 0;
if (allNotifyArray.length > maxNotification) {
overLength = allNotifyArray.length - maxNotification;
var /** @type {?} */ removeArray = allNotifyArray.slice(0, overLength);
try {
for (var removeArray_1 = tslib_1.__values(removeArray), removeArray_1_1 = removeArray_1.next(); !removeArray_1_1.done; removeArray_1_1 = removeArray_1.next()) {
var r = removeArray_1_1.value;
this.notificationManager.clear(r);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (removeArray_1_1 && !removeArray_1_1.done && (_a = removeArray_1.return)) _a.call(removeArray_1);
}
finally { if (e_1) throw e_1.error; }
}
allNotifyArray = this.notificationManager.getNotifications();
}
try {
for (var allNotifyArray_1 = tslib_1.__values(allNotifyArray), allNotifyArray_1_1 = allNotifyArray_1.next(); !allNotifyArray_1_1.done; allNotifyArray_1_1 = allNotifyArray_1.next()) {
var n = allNotifyArray_1_1.value;
result.push(n);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (allNotifyArray_1_1 && !allNotifyArray_1_1.done && (_b = allNotifyArray_1.return)) _b.call(allNotifyArray_1);
}
finally { if (e_2) throw e_2.error; }
}
}
}
return result;
var e_1, _a, e_2, _b;
};
/**
* @param {?} $event
* @param {?} notification
* @return {?}
*/
ParrotsNotifier.prototype.onNotificationClicked = /**
* @param {?} $event
* @param {?} notification
* @return {?}
*/
function ($event, notification) {
if (notification === null || typeof notification === 'undefined') {
return;
}
if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') {
this.notificationManager.clear(notification);
}
};
/**
* @param {?} event
* @return {?}
*/
ParrotsNotifier.prototype.onToggle = /**
* @param {?} event
* @return {?}
*/
function (event) {
_super.prototype.onToggle.call(this, event);
// mark as read
if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') {
this.notificationManager.markAsReadAll();
}
};
/**
* @param {?} event
* @return {?}
*/
ParrotsNotifier.prototype.onClick = /**
* @param {?} event
* @return {?}
*/
function (event) {
event.stopPropagation();
};
ParrotsNotifier.TYPE_NAME = TYPE_NAME;
ParrotsNotifier.SUB_TOPIC_NAME = SUB_TOPIC_NAME;
ParrotsNotifier.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"parrots-notifier\" [class.active]=\"isActive()\" (click)=\"onToggle($event)\">\n\t<div class=\"wrapper\">\n\t\t<div>\n\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t<div class=\"table-row-wrapper\">\n\t\t\t\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t\t\t\t<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" class=\"bell\" [class.ringing]=\"isRinging()\"\n\t\t\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t\t\t\t\t\t\tviewBox=\"0 0 30 30\" style=\"enable-background: new 0 0 30 30;\"\n\t\t\t\t\t\t\txml:space=\"preserve\">\n\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td=\"M21.951,19.175l-1-1.221v-3.271c0-3.123-2-5.723-5-6.294V7.575c0-0.673-0.827-1.221-1.5-1.221\n\t\t\t\t\t\t\t\t\t\t\tc-0.673,0-1.5,0.548-1.5,1.221v0.814c-3,0.57-5,3.171-5,6.294v3.271l-1,1.221v0.71h-1v2h17v-2h-1V19.175z M22.779,19.175\" />\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div>\n\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t<div class=\"table-row-wrapper\">\n\t\t\t\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t\t\t\t<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" class=\"bell\" [class.ringing]=\"isRinging()\"\n\t\t\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t\t\t\t\t\t\tviewBox=\"0 0 30 30\" style=\"enable-background: new 0 0 30 30;\"\n\t\t\t\t\t\t\txml:space=\"preserve\">\n\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t<g>\n\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td=\"M15.147,24.513c1.136,0,2.117-0.628,2.574-1.628h-5.149C13.03,23.885,14.011,24.513,15.147,24.513\n\t\t\t\t\t\t\t\t\t\tL15.147,24.513z M15.147,24.873\" />\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n<div class=\"parrots-notifier-side-panel right\" [class.active]=\"isActive()\">\n\t<div class=\"row\" *ngFor=\"let notify of getNotifications(); let i = index;\" (click)=\"onNotificationClicked($event, notify)\">\n\t\t{{notify.title}} --> click to clear\n\t</div>\n</div>\n"
},] },
];
/** @nocollapse */
ParrotsNotifier.ctorParameters = function () { return [
{ type: PhloxAppService, },
{ type: ObservableManager, },
{ type: NeedFocusService, },
{ type: NotificationManager, },
{ type: PhloxAppInfoService, },
]; };
ParrotsNotifier.propDecorators = {
"onClick": [{ type: HostListener, args: ['click', ['$event'],] },],
};
return ParrotsNotifier;
}(AbstractSideSlidePanel));
export { ParrotsNotifier };
function ParrotsNotifier_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ParrotsNotifier.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
ParrotsNotifier.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
ParrotsNotifier.propDecorators;
/** @type {?} */
ParrotsNotifier.TYPE_NAME;
/** @type {?} */
ParrotsNotifier.SUB_TOPIC_NAME;
/** @type {?} */
ParrotsNotifier.prototype.notificationManager;
/** @type {?} */
ParrotsNotifier.prototype.phloxAppInfo;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFycm90c05vdGlmaWVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lvLnBhcnJvdHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L3BhZ2UvbWFpbi9tZW51LmludGVybmFsL1BhcnJvdHNOb3RpZmllci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUtyRCxxQkFBTSxTQUFTLEdBQVcsa0JBQWtCLENBQUM7QUFDN0MscUJBQU0sY0FBYyxHQUFXLGtCQUFrQixDQUFDOztJQXlEYiwyQ0FBc0I7SUFTekQseUJBQVksZUFBZ0MsRUFBRSxhQUFnQyxFQUFFLGdCQUFrQyxFQUFFLG1CQUF3QyxFQUFFLG1CQUF3QztRQUF0TSxZQUNFLGtCQUFNLGVBQWUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQVN4RjtRQVBDLEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztRQUUvQyxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFD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Z0JBQWdCO2dCQUVoQixtQkFBbUI7Z0JBQ25CLG1CQUFtQjs7OzRCQXFLekIsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7MEJBM0tuQztFQXdFcUMsc0JBQXNCO1NBQTlDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFBobG94QXBwU2VydmljZSB9IGZyb20gJ2NvbS5waGxveHVpJztcbmltcG9ydCB7IE5lZWRGb2N1c1NlcnZpY2UgfSBmcm9tICdjb20ucGhsb3h1aSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlTWFuYWdlciB9IGZyb20gJ2NvbS5waGxveHVpJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1hbmFnZXIgfSBmcm9tICdjb20ucGhsb3h1aSc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm9TZXJ2aWNlIH0gZnJvbSAnY29tLnBobG94dWknO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uIH0gZnJvbSAnY29tLnBobG94dWknO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvIH0gZnJvbSAnY29tLnBobG94dWknO1xuaW1wb3J0IHsgQWJzdHJhY3RTaWRlU2xpZGVQYW5lbCB9IGZyb20gJ2NvbS5waGxveHVpJztcbmltcG9ydCB7IElOb3RpZmljYXRpb25NYW5hZ2VyIH0gZnJvbSAnY29tLnBobG94dWknO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwYXJyb3RzLW5vdGlmaWVyXCI7XG5jb25zdCBTVUJfVE9QSUNfTkFNRTogc3RyaW5nID0gJ3BhcnJvdHMtbm90aWZpZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGFycm90cy1ub3RpZmllclwiIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3RpdmUoKVwiIChjbGljayk9XCJvblRvZ2dsZSgkZXZlbnQpXCI+XG5cdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG5cdFx0PGRpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyIGZsdWlkXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3ctd3JhcHBlclwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1jZWxsLXdyYXBwZXIgbWlkZGxlXCI+XG5cdFx0XHRcdFx0XHQ8c3ZnIHZlcnNpb249XCIxLjFcIiBpZD1cIkxheWVyXzFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJiZWxsXCIgW2NsYXNzLnJpbmdpbmddPVwiaXNSaW5naW5nKClcIlxuXHRcdFx0XHRcdFx0XHR4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB4PVwiMHB4XCIgeT1cIjBweFwiXG5cdFx0XHRcdFx0XHRcdHZpZXdCb3g9XCIwIDAgMzAgMzBcIiBzdHlsZT1cImVuYWJsZS1iYWNrZ3JvdW5kOiBuZXcgMCAwIDMwIDMwO1wiXG5cdFx0XHRcdFx0XHRcdHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGc+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Zz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHBhdGhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkPVwiTTIxLjk1MSwxOS4xNzVsLTEtMS4yMjF2LTMuMjcxYzAtMy4xMjMtMi01LjcyMy01LTYuMjk0VjcuNTc1YzAtMC42NzMtMC44MjctMS4yMjEtMS41LTEuMjIxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Yy0wLjY3MywwLTEuNSwwLjU0OC0xLjUsMS4yMjF2MC44MTRjLTMsMC41Ny01LDMuMTcxLTUsNi4yOTR2My4yNzFsLTEsMS4yMjF2MC43MWgtMXYyaDE3di0yaC0xVjE5LjE3NXogTTIyLjc3OSwxOS4xNzVcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9nPlxuXHRcdFx0XHRcdFx0XHRcdDwvZz5cblx0XHRcdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyIGZsdWlkXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3ctd3JhcHBlclwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1jZWxsLXdyYXBwZXIgbWlkZGxlXCI+XG5cdFx0XHRcdFx0XHQ8c3ZnIHZlcnNpb249XCIxLjFcIiBpZD1cIkxheWVyXzFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJiZWxsXCIgW2NsYXNzLnJpbmdpbmddPVwiaXNSaW5naW5nKClcIlxuXHRcdFx0XHRcdFx0XHR4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB4PVwiMHB4XCIgeT1cIjBweFwiXG5cdFx0XHRcdFx0XHRcdHZpZXdCb3g9XCIwIDAgMzAgMzBcIiBzdHlsZT1cImVuYWJsZS1iYWNrZ3JvdW5kOiBuZXcgMCAwIDMwIDMwO1wiXG5cdFx0XHRcdFx0XHRcdHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGc+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Zz5cblxuXHRcdFx0XHRcdFx0XHRcdFx0PC9nPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHBhdGhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkPVwiTTE1LjE0NywyNC41MTNjMS4xMzYsMCwyLjExNy0wLjYyOCwyLjU3NC0xLjYyOGgtNS4xNDlDMTMuMDMsMjMuODg1LDE0LjAxMSwyNC41MTMsMTUuMTQ3LDI0LjUxM1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRMMTUuMTQ3LDI0LjUxM3ogTTE1LjE0NywyNC44NzNcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZz5cblx0XHRcdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicGFycm90cy1ub3RpZmllci1zaWRlLXBhbmVsIHJpZ2h0XCIgW2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZSgpXCI+XG5cdDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdGb3I9XCJsZXQgbm90aWZ5IG9mIGdldE5vdGlmaWNhdGlvbnMoKTsgbGV0IGkgPSBpbmRleDtcIiAoY2xpY2spPVwib25Ob3RpZmljYXRpb25DbGlja2VkKCRldmVudCwgbm90aWZ5KVwiPlxuXHRcdHt7bm90aWZ5LnRpdGxlfX0gLS0+IGNsaWNrIHRvIGNsZWFyXG5cdDwvZGl2PlxuPC9kaXY+XG5gXG59KVxuZXhwb3J0IGNsYXNzIFBhcnJvdHNOb3RpZmllciBleHRlbmRzIEFic3RyYWN0U2lkZVNsaWRlUGFuZWwgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVUJfVE9QSUNfTkFNRTogc3RyaW5nID0gU1VCX1RPUElDX05BTUU7XG5cbiAgcHJpdmF0ZSBub3RpZmljYXRpb25NYW5hZ2VyOiBJTm90aWZpY2F0aW9uTWFuYWdlcjtcbiAgcHJpdmF0ZSBwaGxveEFwcEluZm86IFBobG94QXBwSW5mbztcblxuICBjb25zdHJ1Y3RvcihwaGxveEFwcFNlcnZpY2U6IFBobG94QXBwU2VydmljZSwgb2JzZXJ2YWJsZU1ncjogT2JzZXJ2YWJsZU1hbmFnZXIsIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UsIG5vdGlmaWNhdGlvbk1hbmFnZXI6IE5vdGlmaWNhdGlvbk1hbmFnZXIsIHBobG94QXBwSW5mb1NlcnZpY2U6IFBobG94QXBwSW5mb1NlcnZpY2UpIHtcbiAgICBzdXBlcihwaGxveEFwcFNlcnZpY2UsIG9ic2VydmFibGVNZ3IsIG5lZWRGb2N1c1NlcnZpY2UsIFBhcnJvdHNOb3RpZmllci5TVUJfVE9QSUNfTkFNRSk7XG5cbiAgICB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgPSBub3RpZmljYXRpb25NYW5hZ2VyO1xuXG4gICAgaWYgKHBobG94QXBwSW5mb1NlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgcGhsb3hBcHBJbmZvU2VydmljZS5nZXRBcHBJbmZvKCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMucGhsb3hBcHBJbmZvID0gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICBwdWJsaWMgaXNSaW5naW5nKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCB1blJlYWRBcnJheSA9IHRoaXMuZ2V0VW5yZWFkTm90aWZpY2F0aW9ucygpO1xuXG4gICAgICBpZiAodW5SZWFkQXJyYXkgIT09IG51bGwgJiYgdHlwZW9mIHVuUmVhZEFycmF5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdW5SZWFkQXJyYXkubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldFVucmVhZE5vdGlmaWNhdGlvbnMoKTogTm90aWZpY2F0aW9uW10ge1xuICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCB1blJlYWRBcnJheSA9IHRoaXMubm90aWZpY2F0aW9uTWFuYWdlci5nZXRVbnJlYWROb3RpZmljYXRpb25zKCk7XG5cbiAgICAgIGlmICh1blJlYWRBcnJheSAhPT0gbnVsbCAmJiB0eXBlb2YgdW5SZWFkQXJyYXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB1blJlYWRBcnJheTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwdWJsaWMgZ2V0Tm90aWZpY2F0aW9ucygpOiBOb3RpZmljYXRpb25bXSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCBhbGxOb3RpZnlBcnJheSA9IHRoaXMubm90aWZpY2F0aW9uTWFuYWdlci5nZXROb3RpZmljYXRpb25zKCk7XG4gICAgICBsZXQgbWF4Tm90aWZpY2F0aW9uID0gUGhsb3hBcHBJbmZvLkRFRkFVTFRfTUFYX05PVElGSUNBVElPTlM7XG4gICAgICBpZiAodGhpcy5waGxveEFwcEluZm8gIT09IG51bGwgJiYgdHlwZW9mIHRoaXMucGhsb3hBcHBJbmZvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAodGhpcy5waGxveEFwcEluZm8uc2V0dGluZ3MgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMucGhsb3hBcHBJbmZvLnNldHRpbmdzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIG1heE5vdGlmaWNhdGlvbiA9IHRoaXMucGhsb3hBcHBJbmZvLnNldHRpbmdzLk1BWF9OT1RJRklDQVRJT05TO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGxOb3RpZnlBcnJheSAhPT0gbnVsbCAmJiB0eXBlb2YgYWxsTm90aWZ5QXJyYXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCBvdmVyTGVuZ3RoID0gMDtcbiAgICAgICAgaWYgKGFsbE5vdGlmeUFycmF5Lmxlbmd0aCA+IG1heE5vdGlmaWNhdGlvbikge1xuICAgICAgICAgIG92ZXJMZW5ndGggPSBhbGxOb3RpZnlBcnJheS5sZW5ndGggLSBtYXhOb3RpZmljYXRpb247XG5cbiAgICAgICAgICBsZXQgcmVtb3ZlQXJyYXkgPSBhbGxOb3RpZnlBcnJheS5zbGljZSgwLCBvdmVyTGVuZ3RoKTtcblxuICAgICAgICAgIGZvciAobGV0IHIgb2YgcmVtb3ZlQXJyYXkpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlci5jbGVhcihyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWxsTm90aWZ5QXJyYXkgPSB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIuZ2V0Tm90aWZpY2F0aW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgbiBvZiBhbGxOb3RpZnlBcnJheSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKG4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBvbk5vdGlmaWNhdGlvbkNsaWNrZWQoJGV2ZW50OiBFdmVudCwgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pOiB2b2lkIHtcbiAgICBpZiAobm90aWZpY2F0aW9uID09PSBudWxsIHx8IHR5cGVvZiBub3RpZmljYXRpb24gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlci5jbGVhcihub3RpZmljYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblRvZ2dsZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHN1cGVyLm9uVG9nZ2xlKGV2ZW50KTtcblxuICAgIC8vIG1hcmsgYXMgcmVhZFxuICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlci5tYXJrQXNSZWFkQWxsKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG59XG4iXX0=