iptdevs-design-system
Version:
Library common elements into IPT Plattform.
202 lines • 26 kB
JavaScript
import { Injectable } from '@angular/core';
import Swal from 'sweetalert2';
import * as i0 from "@angular/core";
import * as i1 from "../../services/user-service/user-service";
import * as i2 from "../../services/storage-service/storage-service";
import * as i3 from "../../services/calendar-service/calendar.service";
export class BaseService {
constructor(userService, storageService, calendarService) {
this.userService = userService;
this.storageService = storageService;
this.calendarService = calendarService;
}
webLogin(user, password) {
let request = {
user: user,
password: password
};
let service = this.userService;
let storage = this.storageService;
let appUser = this.isAnAppUser();
return new Promise(function (resolve, reject) {
service.login(request).subscribe(response => {
switch (response.message.code) {
case 1:
if (!appUser) {
Swal.fire({
'title': '<p style="font-family: Poppins"">Perfect!</p>',
'html': '<p style="font-family: Poppins"">Succesfull login</p>',
'icon': 'success',
});
}
const loginRegisterUser = {
token: response.data.token,
user: response.data,
};
storage.setCurrentSession(loginRegisterUser);
resolve(true);
break;
case 2:
Swal.fire({
'title': '<p style="font-family: Poppins"">Warning!</p>',
'html': '<p style="font-family: Poppins"">The data does not correspond to a user registered in our system, please review them.</p>',
'icon': 'warning',
});
resolve(false);
break;
case 3:
Swal.fire({
'title': '<p style="font-family: Poppins"">Error!</p>',
'html': '<p style="font-family: Poppins"">The input data does not meet the established parameters.</p>',
'icon': 'error',
});
resolve(false);
break;
case 4:
Swal.fire({
title: '<p style="font-family: Poppins">Warning!</p>',
html: '<div style="text-align: center; font-family: Poppins;">' +
'<i class="fas fa-exclamation-triangle" style="color: red; font-size: 24px;"></i>' +
'<p>Your account is in inactive status. Contact support.</p>' +
'</div>',
showConfirmButton: true,
});
resolve(false);
break;
default:
Swal.fire({
'title': '<p style="font-family: Poppins"">Error!</p>',
'html': '<p style="font-family: Poppins"">An unexpected error has occurred</p>',
'icon': 'error',
});
resolve(false);
break;
}
reject('Unhandled exception');
});
});
}
getCronogramAvailability(isTeacher, code, startDate, numClass, weekDays, startTime, endTime) {
let request = {
isTeacher: isTeacher,
code: code,
startDate: startDate,
numClass: numClass,
weekDays: weekDays,
startTime: startTime,
endTime: endTime,
};
let service = this.calendarService;
return new Promise(function (resolve, reject) {
service.postCreateQueryEvent(request).subscribe((response) => {
switch (response.message.code) {
case 1:
resolve(response.data);
break;
default:
reject('Unhandled exception');
}
reject('Unhandled exception');
});
});
}
isAnAppUser() {
const userAgent = window.navigator.userAgent;
return userAgent.includes('Flutter IPT APP');
}
getUserRole() {
let user = this.storageService.getCurrentUser()?.role;
return user === undefined ? -1 : user;
}
getUserToken() {
let token = this.storageService.getCurrentUser()?.token;
return token === undefined ? '-1' : token;
}
getUserName() {
let user = this.storageService.getCurrentUser();
let response = user === null ? '' : user.name;
return response;
}
getUserCode() {
let user = this.storageService.getCurrentUser();
let response = user === null ? -1 : user.code;
return response;
}
registerUserFromDashboard(registerDashboardRq) {
let request = registerDashboardRq;
let service = this.userService;
return new Promise(function (resolve, reject) {
service.registerDashboard(request).subscribe((response) => {
switch (response.message.code) {
case 1:
Swal.fire({
'title': '<p style="font-family: Poppins"">Perfect!</p>',
'html': '<p style="font-family: Poppins"">Sucesfull register!</p>',
'icon': 'success',
});
resolve(true);
break;
case 3:
Swal.fire({
'title': '<p style="font-family: Poppins"">Error!</p>',
'html': '<p style="font-family: Poppins"">The input data does not meet the established parameters.</p>',
'icon': 'error',
});
resolve(false);
break;
case 4:
Swal.fire({
'title': '<p style="font-family: Poppins">Ups!</p>',
'html': '<p style="font-family: Poppins">The input data has a high relation with a user that already exists!</p>',
'icon': 'warning',
});
resolve(false);
break;
default:
Swal.fire({
'title': '<p style="font-family: Poppins"">Error!</p>',
'html': '<p style="font-family: Poppins"">An unexpected error has occurred</p>',
'icon': 'error',
});
resolve(false);
break;
}
reject('Unhandled exception');
});
});
}
jsonToArray(data) {
var response = [];
data.forEach((element) => {
var object = [];
for (var clave in element) {
if (element.hasOwnProperty(clave)) {
if (typeof element[clave] == 'object') {
element[clave] = this.subJsonToArray(element[clave]);
}
object.push(element[clave]);
}
}
response.push(object);
});
return response;
}
subJsonToArray(data) {
var object = '';
for (var clave in data) {
if (clave != 'code') {
object += '\n' + data[clave];
}
}
return object;
}
}
BaseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: BaseService, deps: [{ token: i1.UserService }, { token: i2.StorageService }, { token: i3.CalendarService }], target: i0.ɵɵFactoryTarget.Injectable });
BaseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: BaseService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: BaseService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.StorageService }, { type: i3.CalendarService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvcmUvdXRpbHMvYmFzZS1zZXJ2aWNlL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFVL0IsTUFBTSxPQUFPLFdBQVc7SUFFdEIsWUFDVSxXQUF3QixFQUN4QixjQUE4QixFQUM5QixlQUFnQztRQUZoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7SUFFSixRQUFRLENBQUMsSUFBWSxFQUFFLFFBQWdCO1FBQ3JDLElBQUksT0FBTyxHQUFZO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQTtRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFTLE9BQU8sRUFBRSxNQUFNO1lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUMzQyxRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO29CQUM3QixLQUFLLENBQUM7d0JBQ0osSUFBRyxDQUFDLE9BQU8sRUFBRTs0QkFDWCxJQUFJLENBQUMsSUFBSSxDQUFFO2dDQUNULE9BQU8sRUFBRSwrQ0FBK0M7Z0NBQ3hELE1BQU0sRUFBRSx1REFBdUQ7Z0NBQy9ELE1BQU0sRUFBQyxTQUFTOzZCQUNqQixDQUFDLENBQUM7eUJBQ0o7d0JBQ0QsTUFBTSxpQkFBaUIsR0FBWTs0QkFDakMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDMUIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO3lCQUNwQixDQUFDO3dCQUVGLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3dCQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2QsTUFBTTtvQkFDUixLQUFLLENBQUM7d0JBQ0osSUFBSSxDQUFDLElBQUksQ0FBQzs0QkFDUixPQUFPLEVBQUUsK0NBQStDOzRCQUN4RCxNQUFNLEVBQUUsMkhBQTJIOzRCQUNuSSxNQUFNLEVBQUMsU0FBUzt5QkFDakIsQ0FBQyxDQUFDO3dCQUVILE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDZixNQUFNO29CQUNSLEtBQUssQ0FBQzt3QkFDSixJQUFJLENBQUMsSUFBSSxDQUFDOzRCQUNSLE9BQU8sRUFBRSw2Q0FBNkM7NEJBQ3RELE1BQU0sRUFBRSwrRkFBK0Y7NEJBQ3ZHLE1BQU0sRUFBQyxPQUFPO3lCQUNmLENBQUMsQ0FBQzt3QkFFSCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2YsTUFBTTtvQkFDUixLQUFLLENBQUM7d0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQzs0QkFDUixLQUFLLEVBQUUsOENBQThDOzRCQUNyRCxJQUFJLEVBQUUseURBQXlEO2dDQUN6RCxrRkFBa0Y7Z0NBQ2xGLDZEQUE2RDtnQ0FDN0QsUUFBUTs0QkFDZCxpQkFBaUIsRUFBRSxJQUFJO3lCQUN4QixDQUFDLENBQUM7d0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNmLE1BQU07b0JBQ1Y7d0JBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQzs0QkFDUixPQUFPLEVBQUUsNkNBQTZDOzRCQUN0RCxNQUFNLEVBQUUsdUVBQXVFOzRCQUMvRSxNQUFNLEVBQUMsT0FBTzt5QkFDZixDQUFDLENBQUM7d0JBRUgsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNmLE1BQU07aUJBQ1Q7Z0JBQ0QsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxTQUFrQixFQUFFLElBQVksRUFBRSxTQUFpQixFQUFFLFFBQWdCLEVBQUUsUUFBZSxFQUFFLFNBQWlCLEVBQUUsT0FBZTtRQUNqSixJQUFJLE9BQU8sR0FBd0I7WUFDakMsU0FBUyxFQUFFLFNBQVM7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsU0FBUztZQUNwQixRQUFRLEVBQUUsUUFBUTtZQUNsQixRQUFRLEVBQUUsUUFBUTtZQUNsQixTQUFTLEVBQUUsU0FBUztZQUNwQixPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDO1FBRUYsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUVuQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVMsT0FBTyxFQUFFLE1BQU07WUFDekMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBRyxDQUFDLFFBQWtCLEVBQUUsRUFBRTtnQkFDdkUsUUFBUSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtvQkFDN0IsS0FBSyxDQUFDO3dCQUNKLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3ZCLE1BQUs7b0JBQ1A7d0JBQ0UsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7aUJBQ2pDO2dCQUNELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sU0FBUyxHQUFXLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ3JELE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUM7UUFDdEQsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxLQUFLLENBQUM7UUFDeEQsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDaEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzlDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNoRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM5QyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQseUJBQXlCLENBQUMsbUJBQXdDO1FBQ2hFLElBQUksT0FBTyxHQUFHLG1CQUFtQixDQUFDO1FBQ2xDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFL0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFTLE9BQU8sRUFBRSxNQUFNO1lBQ3pDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFFeEQsUUFBUSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtvQkFDN0IsS0FBSyxDQUFDO3dCQUNKLElBQUksQ0FBQyxJQUFJLENBQUU7NEJBQ1QsT0FBTyxFQUFFLCtDQUErQzs0QkFDeEQsTUFBTSxFQUFFLDBEQUEwRDs0QkFDbEUsTUFBTSxFQUFDLFNBQVM7eUJBQ2pCLENBQUMsQ0FBQzt3QkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2QsTUFBTTtvQkFDUixLQUFLLENBQUM7d0JBQ0osSUFBSSxDQUFDLElBQUksQ0FBRTs0QkFDVCxPQUFPLEVBQUUsNkNBQTZDOzRCQUN0RCxNQUFNLEVBQUUsK0ZBQStGOzRCQUN2RyxNQUFNLEVBQUMsT0FBTzt5QkFDZixDQUFDLENBQUM7d0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNmLE1BQU07b0JBQ1IsS0FBSyxDQUFDO3dCQUNKLElBQUksQ0FBQyxJQUFJLENBQUU7NEJBQ1QsT0FBTyxFQUFFLDBDQUEwQzs0QkFDbkQsTUFBTSxFQUFFLHlHQUF5Rzs0QkFDakgsTUFBTSxFQUFFLFNBQVM7eUJBQ2xCLENBQUMsQ0FBQzt3QkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2YsTUFBTTtvQkFDUjt3QkFDRSxJQUFJLENBQUMsSUFBSSxDQUFFOzRCQUNULE9BQU8sRUFBRSw2Q0FBNkM7NEJBQ3RELE1BQU0sRUFBRSx1RUFBdUU7NEJBQy9FLE1BQU0sRUFBQyxPQUFPO3lCQUNmLENBQUMsQ0FBQzt3QkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2YsTUFBTTtpQkFDVDtnQkFFRCxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFXO1FBQ3JCLElBQUksUUFBUSxHQUFVLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxNQUFNLEdBQVUsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFO2dCQUN6QixJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2pDLElBQUksT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFO3dCQUNyQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDdEQ7b0JBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDN0I7YUFDRjtZQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVc7UUFDeEIsSUFBSSxNQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ3RCLElBQUksS0FBSyxJQUFJLE1BQU0sRUFBRTtnQkFDbkIsTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDOUI7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O3dHQS9NVSxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9naW5ScSwgUmVnaXN0ZXJEYXNoYm9hcmRScSB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyL3VzZXItcnEubW9kZWwnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLXNlcnZpY2UvdXNlci1zZXJ2aWNlJztcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvc2Vzc2lvbi9zZXNzaW9uLm1vZGVsJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS1zZXJ2aWNlL3N0b3JhZ2Utc2VydmljZSc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlRdWVyeVJxIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Nyb25vZ3JhbS9jcm9ub2dyYW0ubW9kZWxzJztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhbGVuZGFyLXNlcnZpY2UvY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9yZXNwb25zZS9yZXNwb25zZS5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQmFzZVNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhclNlcnZpY2VcbiAgKSB7fVxuXG4gIHdlYkxvZ2luKHVzZXI6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj57XG4gICAgbGV0IHJlcXVlc3Q6IExvZ2luUnEgPSB7XG4gICAgICB1c2VyOiB1c2VyLFxuICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkXG4gICAgfVxuICAgIGxldCBzZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZTtcbiAgICBsZXQgc3RvcmFnZSA9IHRoaXMuc3RvcmFnZVNlcnZpY2U7XG4gICAgbGV0IGFwcFVzZXIgPSB0aGlzLmlzQW5BcHBVc2VyKCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBzZXJ2aWNlLmxvZ2luKHJlcXVlc3QpLnN1YnNjcmliZSggcmVzcG9uc2UgPT4ge1xuICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLm1lc3NhZ2UuY29kZSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGlmKCFhcHBVc2VyKSB7XG4gICAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xuICAgICAgICAgICAgICAgICd0aXRsZSc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5QZXJmZWN0ITwvcD4nLFxuICAgICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlN1Y2Nlc2Z1bGwgbG9naW48L3A+JyxcbiAgICAgICAgICAgICAgICAnaWNvbic6J3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxvZ2luUmVnaXN0ZXJVc2VyOiBTZXNzaW9uID0ge1xuICAgICAgICAgICAgICB0b2tlbjogcmVzcG9uc2UuZGF0YS50b2tlbixcbiAgICAgICAgICAgICAgdXNlcjogcmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0Q3VycmVudFNlc3Npb24obG9naW5SZWdpc3RlclVzZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICd0aXRsZSc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5XYXJuaW5nITwvcD4nLFxuICAgICAgICAgICAgICAnaHRtbCc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5UaGUgZGF0YSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdXNlciByZWdpc3RlcmVkIGluIG91ciBzeXN0ZW0sIHBsZWFzZSByZXZpZXcgdGhlbS48L3A+JyxcbiAgICAgICAgICAgICAgJ2ljb24nOid3YXJuaW5nJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICd0aXRsZSc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5FcnJvciE8L3A+JyxcbiAgICAgICAgICAgICAgJ2h0bWwnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+VGhlIGlucHV0IGRhdGEgZG9lcyBub3QgbWVldCB0aGUgZXN0YWJsaXNoZWQgcGFyYW1ldGVycy48L3A+JyxcbiAgICAgICAgICAgICAgJ2ljb24nOidlcnJvcicsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCI+V2FybmluZyE8L3A+JyxcbiAgICAgICAgICAgICAgICBodG1sOiAnPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1mYW1pbHk6IFBvcHBpbnM7XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgJzxpIGNsYXNzPVwiZmFzIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCIgc3R5bGU9XCJjb2xvcjogcmVkOyBmb250LXNpemU6IDI0cHg7XCI+PC9pPicgK1xuICAgICAgICAgICAgICAgICAgICAgICc8cD5Zb3VyIGFjY291bnQgaXMgaW4gaW5hY3RpdmUgc3RhdHVzLiBDb250YWN0IHN1cHBvcnQuPC9wPicgK1xuICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nLFxuICAgICAgICAgICAgICAgIHNob3dDb25maXJtQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+RXJyb3IhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkPC9wPicsXG4gICAgICAgICAgICAgICdpY29uJzonZXJyb3InLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICB9KTtcbiAgICB9KVxuICB9XG5cbiAgZ2V0Q3Jvbm9ncmFtQXZhaWxhYmlsaXR5KGlzVGVhY2hlcjogYm9vbGVhbiwgY29kZTogbnVtYmVyLCBzdGFydERhdGU6IHN0cmluZywgbnVtQ2xhc3M6IG51bWJlciwgd2Vla0RheXM6IGFueVtdLCBzdGFydFRpbWU6IHN0cmluZywgZW5kVGltZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+e1xuICAgIGxldCByZXF1ZXN0OiBBdmFpbGFiaWxpdHlRdWVyeVJxID0ge1xuICAgICAgaXNUZWFjaGVyOiBpc1RlYWNoZXIsXG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgc3RhcnREYXRlOiBzdGFydERhdGUsXG4gICAgICBudW1DbGFzczogbnVtQ2xhc3MsXG4gICAgICB3ZWVrRGF5czogd2Vla0RheXMsXG4gICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZSxcbiAgICAgIGVuZFRpbWU6IGVuZFRpbWUsXG4gICAgfTtcblxuICAgIGxldCBzZXJ2aWNlID0gdGhpcy5jYWxlbmRhclNlcnZpY2U7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBzZXJ2aWNlLnBvc3RDcmVhdGVRdWVyeUV2ZW50KHJlcXVlc3QpLnN1YnNjcmliZSggIChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgc3dpdGNoIChyZXNwb25zZS5tZXNzYWdlLmNvZGUpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQW5BcHBVc2VyKCkge1xuICAgIGNvbnN0IHVzZXJBZ2VudDogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgcmV0dXJuIHVzZXJBZ2VudC5pbmNsdWRlcygnRmx1dHRlciBJUFQgQVBQJyk7XG4gIH1cblxuICBnZXRVc2VyUm9sZSgpOiBudW1iZXIge1xuICAgIGxldCB1c2VyID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRDdXJyZW50VXNlcigpPy5yb2xlO1xuICAgIHJldHVybiB1c2VyID09PSB1bmRlZmluZWQgPyAtMSA6IHVzZXI7XG4gIH1cblxuICBnZXRVc2VyVG9rZW4oKTogc3RyaW5nIHtcbiAgICBsZXQgdG9rZW4gPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk/LnRva2VuO1xuICAgIHJldHVybiB0b2tlbiA9PT0gdW5kZWZpbmVkID8gJy0xJyA6IHRva2VuO1xuICB9XG5cbiAgZ2V0VXNlck5hbWUoKTogc3RyaW5nIHtcbiAgICBsZXQgdXNlciA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBsZXQgcmVzcG9uc2UgPSB1c2VyID09PSBudWxsID8gJycgOiB1c2VyLm5hbWU7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgZ2V0VXNlckNvZGUoKTogbnVtYmVyIHtcbiAgICBsZXQgdXNlciA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBsZXQgcmVzcG9uc2UgPSB1c2VyID09PSBudWxsID8gLTEgOiB1c2VyLmNvZGU7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcmVnaXN0ZXJVc2VyRnJvbURhc2hib2FyZChyZWdpc3RlckRhc2hib2FyZFJxOiBSZWdpc3RlckRhc2hib2FyZFJxKTogUHJvbWlzZTxib29sZWFuPntcbiAgICBsZXQgcmVxdWVzdCA9IHJlZ2lzdGVyRGFzaGJvYXJkUnE7XG4gICAgbGV0IHNlcnZpY2UgPSB0aGlzLnVzZXJTZXJ2aWNlO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgc2VydmljZS5yZWdpc3RlckRhc2hib2FyZChyZXF1ZXN0KS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG5cbiAgICAgICAgc3dpdGNoIChyZXNwb25zZS5tZXNzYWdlLmNvZGUpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBTd2FsLmZpcmUgKHtcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlBlcmZlY3QhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlN1Y2VzZnVsbCByZWdpc3RlciE8L3A+JyxcbiAgICAgICAgICAgICAgJ2ljb24nOidzdWNjZXNzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+RXJyb3IhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlRoZSBpbnB1dCBkYXRhIGRvZXMgbm90IG1lZXQgdGhlIGVzdGFibGlzaGVkIHBhcmFtZXRlcnMuPC9wPicsXG4gICAgICAgICAgICAgICdpY29uJzonZXJyb3InLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiPlVwcyE8L3A+JyxcbiAgICAgICAgICAgICAgJ2h0bWwnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiPlRoZSBpbnB1dCBkYXRhIGhhcyBhIGhpZ2ggcmVsYXRpb24gd2l0aCBhIHVzZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyE8L3A+JyxcbiAgICAgICAgICAgICAgJ2ljb24nOiAnd2FybmluZycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+RXJyb3IhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkPC9wPicsXG4gICAgICAgICAgICAgICdpY29uJzonZXJyb3InLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGpzb25Ub0FycmF5KGRhdGE6IGFueVtdKTogYW55W11bXSB7XG4gICAgdmFyIHJlc3BvbnNlOiBhbnlbXSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgdmFyIG9iamVjdDogYW55W10gPSBbXTtcbiAgICAgIGZvciAodmFyIGNsYXZlIGluIGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoY2xhdmUpKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50W2NsYXZlXSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZWxlbWVudFtjbGF2ZV0gPSB0aGlzLnN1Ykpzb25Ub0FycmF5KGVsZW1lbnRbY2xhdmVdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYmplY3QucHVzaChlbGVtZW50W2NsYXZlXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlLnB1c2gob2JqZWN0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBzdWJKc29uVG9BcnJheShkYXRhOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgdmFyIG9iamVjdDogc3RyaW5nID0gJyc7XG4gICAgZm9yICh2YXIgY2xhdmUgaW4gZGF0YSkge1xuICAgICAgaWYgKGNsYXZlICE9ICdjb2RlJykge1xuICAgICAgICBvYmplY3QgKz0gJ1xcbicgKyBkYXRhW2NsYXZlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG59XG4iXX0=