@esfaenza/core 15.2.261 → 15.2.263
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/error/404/pagenotfound.component.d.ts +2 -1
- package/components/error/500/servererror.component.d.ts +2 -1
- package/components/error/Angular/angularerror.component.d.ts +2 -1
- package/components/navbar/navbar.component.d.ts +2 -1
- package/esm2020/components/error/404/pagenotfound.component.mjs +12 -7
- package/esm2020/components/error/500/servererror.component.mjs +12 -7
- package/esm2020/components/error/Angular/angularerror.component.mjs +12 -7
- package/esm2020/components/navbar/navbar.component.mjs +10 -6
- package/esm2020/lib/app.component.mjs +2 -2
- package/esm2020/lib/core.module.mjs +2 -2
- package/fesm2015/esfaenza-core-components.mjs +43 -21
- package/fesm2015/esfaenza-core-components.mjs.map +1 -1
- package/fesm2015/esfaenza-core.mjs +3 -3
- package/fesm2015/esfaenza-core.mjs.map +1 -1
- package/fesm2020/esfaenza-core-components.mjs +37 -21
- package/fesm2020/esfaenza-core-components.mjs.map +1 -1
- package/fesm2020/esfaenza-core.mjs +3 -3
- package/fesm2020/esfaenza-core.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -138,7 +138,7 @@ export class EsFaenzaCoreModule {
|
|
|
138
138
|
// Aggiunta della route di embedding se non dichiarata, lato aggiunta faccio in modo che l'embedding sia disponibile solo da route interne (pages OK, pages_ext NON OK)
|
|
139
139
|
if (!config.routes.find(t => t.path.startsWith("embed")))
|
|
140
140
|
config.routes = [...config.routes, { path: "embed/:module", loadChildren: () => import('@esfaenza/core/modules').then(m => m.EmbeddingModule) }];
|
|
141
|
-
baseAppRoutes[0].redirectTo = `pages/${config.emptyRouteRedirect || 'dashboard'}`;
|
|
141
|
+
baseAppRoutes[0].redirectTo = ["pages", "pages_ext"].map(t => (config.emptyRouteRedirect || '').startsWith(t)).some(t => !!t) ? "/" + config.emptyRouteRedirect : `pages/${config.emptyRouteRedirect || 'dashboard'}`;
|
|
142
142
|
baseAppRoutes.filter(t => ["pages", "pages_ext"].includes(t.path)).forEach(path => {
|
|
143
143
|
path.children = [
|
|
144
144
|
{ path: "profile", component: UserInfosComponent, data: { InternalNavigation: true, title: "profilo" } },
|
|
@@ -254,4 +254,4 @@ export var DebugFlags;
|
|
|
254
254
|
DebugFlags[DebugFlags["Tabber"] = 128] = "Tabber";
|
|
255
255
|
DebugFlags[DebugFlags["All"] = 255] = "All";
|
|
256
256
|
})(DebugFlags || (DebugFlags = {}));
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQTZCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQVUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxtQ0FBbUMsQ0FBQztBQUUzQyxVQUFVO0FBQ1YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxzQkFBc0IsQ0FBQztBQUU5QixLQUFLO0FBQ0wsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxnQ0FBZ0MsRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLGdC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QWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixFQUFFO2FBQ3pIO1NBQ0osQ0FBQztJQUNOLENBQUM7OytHQWhIUSxrQkFBa0I7Z0hBQWxCLGtCQUFrQixpQkFIWixZQUFZLGFBbEUzQix1QkFBdUI7UUFDdkIsZ0JBQWdCO1FBQ2hCLGNBQWM7UUFDZCxnQkFBZ0I7Z0hBa0VQLGtCQUFrQixZQUZkLE9BQU87MkZBRVgsa0JBQWtCO2tCQUo5QixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDNUIsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7aUJBQ3hCOztBQW9IRCxNQUFNLE9BQU8sd0JBQXdCO0NBeUNwQztBQUVELE1BQU0sQ0FBTixJQUFZLFVBV1g7QUFYRCxXQUFZLFVBQVU7SUFDbEIsMkNBQVEsQ0FBQTtJQUNSLDZEQUFzQixDQUFBO0lBQ3RCLHVEQUFtQixDQUFBO0lBQ25CLDZEQUFzQixDQUFBO0lBQ3RCLDJDQUFhLENBQUE7SUFDYixrREFBZ0IsQ0FBQTtJQUNoQiwwREFBb0IsQ0FBQTtJQUNwQixnREFBZSxDQUFBO0lBQ2YsaURBQWUsQ0FBQTtJQUNmLDJDQUFnQixDQUFBO0FBQ3BCLENBQUMsRUFYVyxVQUFVLEtBQVYsVUFBVSxRQVdyQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgTmdNb2R1bGUsIEVycm9ySGFuZGxlciwgTE9DQUxFX0lELCBBUFBfSU5JVElBTElaRVIsIE1vZHVsZVdpdGhQcm92aWRlcnMsIFR5cGUsIGlzRGV2TW9kZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJyb3dzZXJBbmltYXRpb25zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgUm91dGVzLCBSb3V0ZXJNb2R1bGUsIE5vUHJlbG9hZGluZywgUk9VVEVTIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBNQVRfREFURV9GT1JNQVRTLCBNQVRfREFURV9MT0NBTEUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xyXG5pbXBvcnQgeyBFVkVOVF9NQU5BR0VSX1BMVUdJTlMgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlV29ya2VyTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL3NlcnZpY2Utd29ya2VyXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IFwiQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvZ2xvYmFsL2l0XCI7XHJcblxyXG4vLyBQbHVnaW5zXHJcbmltcG9ydCB7IE5neE1hdERhdGVBZGFwdGVyLCBOR1hfTUFUX0RBVEVfRk9STUFUUyB9IGZyb20gXCJAYW5ndWxhci1tYXRlcmlhbC1jb21wb25lbnRzL2RhdGV0aW1lLXBpY2tlclwiO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSBcIm5neC1jb29raWUtc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUb2FzdHJNb2R1bGUgfSBmcm9tIFwibmd4LXRvYXN0clwiO1xyXG5pbXBvcnQgXCJ3aWRnc3Rlci93aWRnc3Rlci5qc1wiO1xyXG5cclxuLy8gRVNcclxuaW1wb3J0IHsgUHJlZmVyZW5jZXNNb2R1bGUsIFBSRUZfREVCVUdfTU9ERSwgUHJlZmVyZW5jZXNQZXJzaXN0b3IsIExvY2FsU3RvcmFnZVByZWZlcmVuY2VzUGVyc2lzdG9yLCBDYWNoZVBlcnNpc3RvciwgTG9jYWxTdG9yYWdlQ2FjaGVQZXJzaXN0b3IgfSBmcm9tIFwiQGVzZmFlbnphL3ByZWZlcmVuY2VzXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbk1vZHVsZSwgTG9jYWxpemF0aW9uU2VydmljZSwgTG9jYWxpemF0aW9uTWlzc2luZ1BvbGljeSwgTE9DX0RFQlVHX01PREUsIEJhc2VMb2NhbGl6YXRpb24gfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgSHR0cHNlcnZpY2VNb2R1bGUsIEh0dHBTZXJ2aWNlRXh0ZW5zaW9ucywgSFRUUFNlcnZpY2UsIEhUVFBfREVCVUdfTU9ERSwgSFRUUF9JTlZBTElEQVRJT04gfSBmcm9tIFwiQGVzZmFlbnphL2h0dHBzZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNpZ25hbHJOb3RpZmljYXRpb25zTW9kdWxlLCBTR1JfREVCVUdfTU9ERSwgQmFzZU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9zaWduYWxyLW5vdGlmaWNhdGlvbnNcIjtcclxuaW1wb3J0IHsgRm9ybXNBbmRWYWxpZGF0aW9uc01vZHVsZSwgTmd4RXhwYW5kZWREYXlKc0RhdGVBZGFwdGVyIH0gZnJvbSBcIkBlc2ZhZW56YS9mb3Jtcy1hbmQtdmFsaWRhdGlvbnNcIjtcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbE1vZHVsZSwgQWNjZXNzQ29udHJvbFNlcnZpY2UsIEFDQ19ERUJVR19NT0RFIH0gZnJvbSBcIkBlc2ZhZW56YS9hY2Nlc3MtY29udHJvbFwiO1xyXG5pbXBvcnQgeyBCYXNlQWRhcHRlciwgRXNDaGFydHNNb2R1bGUsIEVTQ19ERUJVR19NT0RFIH0gZnJvbSBcIkBlc2ZhZW56YS9lcy1jaGFydHNcIjtcclxuaW1wb3J0IHsgRXh0ZW5zaW9uc01vZHVsZSwgRVhUX0RFQlVHX01PREUgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuaW1wb3J0IHsgQ29udGV4dE1lbnVNb2R1bGUgfSBmcm9tIFwiQGVzZmFlbnphL25neC1jb250ZXh0bWVudVwiO1xyXG5pbXBvcnQgeyBEcmFndWxhTW9kdWxlIH0gZnJvbSAnQGVzZmFlbnphL25neC1kcmFndWxhJztcclxuaW1wb3J0IHsgRXNUYWJsZU1vZHVsZSB9IGZyb20gXCJAZXNmYWVuemEvZXMtdGFibGVcIjtcclxuaW1wb3J0IHsgVEFCX0RFQlVHX01PREUgfSBmcm9tIFwiQGVzZmFlbnphL3RhYmJlclwiO1xyXG5cclxuLy8gQ29yZVxyXG5pbXBvcnQgeyBBUFBFcnJvckhhbmRsZXIsIEhUVFBTZXJ2aWNlRXh0ZW5zaW9ucywgQXBwbGljYXRpb25QcmVmZXJlbmNlc1BlcnNpc3RvciwgQXBwbGljYXRpb25DYWNoZVBlcnNpc3RvciwgU2Vzc2lvblJldHJpZXZlciwgT3V0Wm9uZUV2ZW50UGx1Z2luLCBUb2tlblNlcnZpY2UsIEdsb2JhbFNlYXJjaFNlcnZpY2UsIENvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZSwgTWVudUZpbHRlcmluZ1NlcnZpY2UsIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvc2VydmljZXNcIjtcclxuaW1wb3J0IHsgUGFnZU5vdEZvdW5kQ29tcG9uZW50LCBTZXJ2ZXJFcnJvckNvbXBvbmVudCwgQW5ndWxhckVycm9yQ29tcG9uZW50LCBFeHRlcm5hbFBhZ2VzQ29tcG9uZW50LCBKYWNlTG9naW5Db21wb25lbnQsIFBhZ2VzQ29tcG9uZW50LCBSZWRpcmVjdGVyQ29tcG9uZW50LCBDb21wb25lbnRzTW9kdWxlLCBVc2VySW5mb3NDb21wb25lbnQgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvY29tcG9uZW50c1wiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbk1lbnUsIEVudk9wdGlvbnMsIEFjY291bnRTY29wZSwgTUVOVSwgTUVOVV9MT0NBTElaQVRJT04sIFJFRElSRUNUX01BUCwgVVNFX0ZBS0VfQUNDRVNTX1RPS0VOLCBOQVZCQVJfRVhURU5TSU9OUywgTE9HSU5fVVJMX0xFR0FDWSwgQU5PTllNT1VTX01PREUgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvZG9tYWluXCJcclxuaW1wb3J0IHsgUk9VVEUsIEVNQkVEREVEX1JPVVRFIH0gZnJvbSBcIkBlc2ZhZW56YS9jb3JlL2RvbWFpblwiXHJcbmltcG9ydCB7IFRlbXBsYXRlQ29tbW9uIH0gZnJvbSBcIkBlc2ZhZW56YS9jb3JlL21vZHVsZXNcIjtcclxuXHJcbi8vIFJ4SnNcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8vIEJvb3RzdHJhcFxyXG5pbXBvcnQgeyBQcm9ncmVzc2Jhck1vZHVsZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL3Byb2dyZXNzYmFyXCI7XHJcbmltcG9ydCB7IFRpbWVwaWNrZXJNb2R1bGUgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC90aW1lcGlja2VyXCI7XHJcbmltcG9ydCB7IEJzRHJvcGRvd25Nb2R1bGUgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC9kcm9wZG93blwiO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvdG9vbHRpcFwiO1xyXG5pbXBvcnQgeyBNb2RhbE1vZHVsZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL21vZGFsXCI7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSBcIi4vYXBwLmNvbXBvbmVudFwiO1xyXG5cclxuLy8gUmVwb3NpdG9yaWVzXHJcbmNvbnN0IEdFVF9KYWNlX0dldEFjY291bnRTY29wZTogc3RyaW5nID0gXCIvYXBpL0phY2UvR2V0QWNjb3VudFNjb3BlXCI7XHJcbmNvbnN0IEdFVF9BcHBDb25maWdfR2V0QXBwQ29uZmlnOiBzdHJpbmcgPSBcIi9hcGkvQXBwQ29uZmlnL0dldEFwcENvbmZpZ1wiO1xyXG5cclxuZGVjbGFyZSB2YXIgbXljb25maWc6IEVudk9wdGlvbnM7XHJcblxyXG5jb25zdCBiYXNlQXBwUm91dGVzOiBSb3V0ZXMgPSBbXHJcbiAgICB7IHBhdGg6IFwiXCIsIHJlZGlyZWN0VG86IFwicGFnZXMve2VtcHR5Um91dGVSZWRpcmVjdH1cIiwgcGF0aE1hdGNoOiBcImZ1bGxcIiB9LFxyXG4gICAgeyBwYXRoOiBFTUJFRERFRF9ST1VURSwgY29tcG9uZW50OiBFeHRlcm5hbFBhZ2VzQ29tcG9uZW50IH0sXHJcbiAgICB7IHBhdGg6IFJPVVRFLCBjb21wb25lbnQ6IFBhZ2VzQ29tcG9uZW50IH0sXHJcbiAgICB7IHBhdGg6IFwicmRcIiwgY29tcG9uZW50OiBSZWRpcmVjdGVyQ29tcG9uZW50IH0sXHJcbiAgICB7IHBhdGg6IFwicmQvOnRlbmFudFwiLCBjb21wb25lbnQ6IFJlZGlyZWN0ZXJDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogXCJsb2dpblwiLCBjb21wb25lbnQ6IEphY2VMb2dpbkNvbXBvbmVudCB9LFxyXG4gICAgeyBwYXRoOiBcImlzZXJyXCIsIGNvbXBvbmVudDogU2VydmVyRXJyb3JDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogXCJhbmVyclwiLCBjb21wb25lbnQ6IEFuZ3VsYXJFcnJvckNvbXBvbmVudCB9LFxyXG4gICAgeyBwYXRoOiBcIioqXCIsIGNvbXBvbmVudDogUGFnZU5vdEZvdW5kQ29tcG9uZW50IH0sXHJcblxyXG5dO1xyXG5cclxuY29uc3QgTU9EVUxFUyA9IFtcclxuICAgIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlLFxyXG4gICAgSHR0cENsaWVudE1vZHVsZSxcclxuICAgIFRlbXBsYXRlQ29tbW9uLFxyXG4gICAgQ29tcG9uZW50c01vZHVsZSxcclxuXHJcbiAgICAvLyBBdHRlbnppb25lIGEgbGFzY2lhcmxvIGF0dGl2byBpbiBuZyBzZXJ2ZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvNDc0NTVcclxuICAgIFNlcnZpY2VXb3JrZXJNb2R1bGUucmVnaXN0ZXIoJ25nc3ctd29ya2VyLmpzJywgeyBlbmFibGVkOiAhaXNEZXZNb2RlKCkgfSksXHJcbiAgICBSb3V0ZXJNb2R1bGUuZm9yUm9vdChbXSwgeyB1c2VIYXNoOiB0cnVlLCBwcmVsb2FkaW5nU3RyYXRlZ3k6IE5vUHJlbG9hZGluZywgb25TYW1lVXJsTmF2aWdhdGlvbjogXCJyZWxvYWRcIiB9KSxcclxuXHJcbiAgICAvLyBFU1xyXG4gICAgRXNUYWJsZU1vZHVsZS5mb3JSb290KCksXHJcbiAgICBGb3Jtc0FuZFZhbGlkYXRpb25zTW9kdWxlLmZvclJvb3QoeyBhY29jdXN0b206IFwiT1wiLCBzbGlkZXJNb2RlOiB0cnVlIH0pLFxyXG4gICAgRXh0ZW5zaW9uc01vZHVsZS5mb3JSb290KCksXHJcbiAgICBMb2NhbGl6YXRpb25Nb2R1bGUuZm9yUm9vdCh7IGxvY2FsaXphdGlvbk1pc3NpbmdQb2xpY3k6IExvY2FsaXphdGlvbk1pc3NpbmdQb2xpY3kuUHJpbnRTb3VyY2UsIGRlZmF1bHRMb2NhbGU6ICdpdC1JVCcgfSksXHJcbiAgICBBY2Nlc3NDb250cm9sTW9kdWxlLmZvclJvb3QoeyBjb250ZXh0QXdhcmVLZXk6IFwiT1wiLCBkZWZhdWx0Q29uZGl0aW9uOiAnKFI6SmFjZSBBZG1pbiB8fCBSOkphY2UgU3VwcG9ydCknIH0pLFxyXG4gICAgSHR0cHNlcnZpY2VNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgU2lnbmFsck5vdGlmaWNhdGlvbnNNb2R1bGUuZm9yUm9vdCh7IGVuZHBvaW50VXJsOiAnbm90aWZ5JywgdXNlTWVzc2FnZVBhY2s6IHRydWUgfSksXHJcbiAgICBQcmVmZXJlbmNlc01vZHVsZS5mb3JSb290KHsgcmV0cmlldmVBbGxBdFN0YXJ0OiB0cnVlLCBzZXNzaW9uUmV0cmlldmVyOiBTZXNzaW9uUmV0cmlldmVyLCBwcmVmZXJlbmNlUGVyc2lzdG9yOiBBcHBsaWNhdGlvblByZWZlcmVuY2VzUGVyc2lzdG9yLCBjYWNoZVBlcnNpc3RvcjogQXBwbGljYXRpb25DYWNoZVBlcnNpc3RvciB9KSxcclxuICAgIEVzQ2hhcnRzTW9kdWxlLmZvclJvb3QoKSxcclxuXHJcbiAgICAvLyBCb290c3RyYXBcclxuICAgIFRvb2x0aXBNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgTW9kYWxNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgUHJvZ3Jlc3NiYXJNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgQnNEcm9wZG93bk1vZHVsZS5mb3JSb290KCksXHJcbiAgICBUb2FzdHJNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgVGltZXBpY2tlck1vZHVsZS5mb3JSb290KCksXHJcbiAgICBDb250ZXh0TWVudU1vZHVsZS5mb3JSb290KCksXHJcbiAgICBEcmFndWxhTW9kdWxlLmZvclJvb3QoKVxyXG5dO1xyXG5cclxuLy8gR2VuZXJhdG9yZSBkZWkgZm9ybWF0aSBkYXRhXHJcbnZhciBmb3JtYXRzID0gKHN0eWxlOiAnbG9uZycgfCAnc2hvcnQnKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHBhcnNlOiB7IGRhdGVJbnB1dDogJ0REL01NL1lZWVknICsgKHN0eWxlID09PSAnbG9uZycgPyAnIEhIOm1tOnNzJyA6ICcnKSB9LFxyXG4gICAgICAgIGRpc3BsYXk6IHtcclxuICAgICAgICAgICAgZGF0ZUlucHV0OiAnREQvTU0vWVlZWScgKyAoc3R5bGUgPT09ICdsb25nJyA/ICcgSEg6bW06c3MnIDogJycpLFxyXG4gICAgICAgICAgICBtb250aFllYXJMYWJlbDogJ01NIFlZWVknLFxyXG4gICAgICAgICAgICBkYXRlQTExeUxhYmVsOiAnREQvTU0vWVlZWScgKyAoc3R5bGUgPT09ICdsb25nJyA/ICcgSEg6bW06c3MnIDogJycpLFxyXG4gICAgICAgICAgICBtb250aFllYXJBMTF5TGFiZWw6ICdNTSBZWVlZJyxcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5jb25zdCBsb2NhbGVGYWN0b3J5ID0gKGxvYzogTG9jYWxpemF0aW9uU2VydmljZSkgPT4gbG9jLlNtYWxsTG9jYWxlO1xyXG5cclxuY29uc3QgUFJPVklERVJTID0gW1xyXG4gICAgQ29va2llU2VydmljZSxcclxuXHJcbiAgICAvLyBQcm92aWRlcnMgYXBwbGljYXRpdmlcclxuICAgIHsgcHJvdmlkZTogRXJyb3JIYW5kbGVyLCB1c2VDbGFzczogQVBQRXJyb3JIYW5kbGVyIH0sXHJcbiAgICB7IHByb3ZpZGU6IEVWRU5UX01BTkFHRVJfUExVR0lOUywgdXNlRXhpc3Rpbmc6IE91dFpvbmVFdmVudFBsdWdpbiwgbXVsdGk6IHRydWUgfSxcclxuICAgIHsgcHJvdmlkZTogSHR0cFNlcnZpY2VFeHRlbnNpb25zLCB1c2VDbGFzczogSFRUUFNlcnZpY2VFeHRlbnNpb25zIH0sXHJcblxyXG4gICAgLy8gTG9jYWxlIGUgZ2VzdGlvbmkgZGVsbGUgZGF0ZVxyXG4gICAgeyBwcm92aWRlOiBMT0NBTEVfSUQsIHVzZUZhY3Rvcnk6IGxvY2FsZUZhY3RvcnksIGRlcHM6IFtMb2NhbGl6YXRpb25TZXJ2aWNlXSB9LFxyXG4gICAgeyBwcm92aWRlOiBNQVRfREFURV9MT0NBTEUsIHVzZUZhY3Rvcnk6IGxvY2FsZUZhY3RvcnksIGRlcHM6IFtMb2NhbGl6YXRpb25TZXJ2aWNlXSB9LFxyXG4gICAgeyBwcm92aWRlOiBNQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogZm9ybWF0cygnc2hvcnQnKSB9LFxyXG5cclxuICAgIC8vIFF1ZXN0aSBkdWUgc29ubyBwcm92aWRhdGkgZGFsIEZvcm1zQW5kVmFsaWRhdGlvbk1vZHVsZSBzdGVzc28sIHBlcsOyIHF1ZXN0J3VsdGltbyDDqCBkZWZpbml0byBpbiBmb3JSb290IHNvbG8gbGF0byBjb21wb25lbnRpIHNoYXJlZCwgXHJcbiAgICAvLyBxdWluZGkgcGVyIHJlbmRlcmUgcXVlc3RpIHByb3ZpZGVyIGRpc3BvbmliaWxpIGFuY2hlIGEgbW9kdWxpIGVzdGVybmkgZGV2byByaXByb3ZpZGFybGkgYW5jaGUgcXVpXHJcbiAgICB7IHByb3ZpZGU6IE5HWF9NQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogZm9ybWF0cygnbG9uZycpIH0sXHJcbiAgICB7IHByb3ZpZGU6IE5neE1hdERhdGVBZGFwdGVyLCB1c2VDbGFzczogTmd4RXhwYW5kZWREYXlKc0RhdGVBZGFwdGVyIH1cclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLFxyXG4gICAgaW1wb3J0czogWy4uLk1PRFVMRVNdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFc0ZhZW56YUNvcmVNb2R1bGUge1xyXG4gICAgc3RhdGljIGZvclJvb3QoY29uZmlnPzogRXNGYWVuemFDb3JlTW9kdWxlQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxFc0ZhZW56YUNvcmVNb2R1bGU+IHtcclxuICAgICAgICBpZiAoY29uZmlnLnJvdXRlcykge1xyXG4gICAgICAgICAgICAvLyBBZ2dpdW50YSBkZWxsYSByb3V0ZSBkaSBlbWJlZGRpbmcgc2Ugbm9uIGRpY2hpYXJhdGEsIGxhdG8gYWdnaXVudGEgZmFjY2lvIGluIG1vZG8gY2hlIGwnZW1iZWRkaW5nIHNpYSBkaXNwb25pYmlsZSBzb2xvIGRhIHJvdXRlIGludGVybmUgKHBhZ2VzIE9LLCBwYWdlc19leHQgTk9OIE9LKVxyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5yb3V0ZXMuZmluZCh0ID0+IHQucGF0aC5zdGFydHNXaXRoKFwiZW1iZWRcIikpKVxyXG4gICAgICAgICAgICAgICAgY29uZmlnLnJvdXRlcyA9IFsuLi5jb25maWcucm91dGVzLCB7IHBhdGg6IFwiZW1iZWQvOm1vZHVsZVwiLCBsb2FkQ2hpbGRyZW46ICgpID0+IGltcG9ydCgnQGVzZmFlbnphL2NvcmUvbW9kdWxlcycpLnRoZW4obSA9PiBtLkVtYmVkZGluZ01vZHVsZSkgfV1cclxuXHJcbiAgICAgICAgICAgIGJhc2VBcHBSb3V0ZXNbMF0ucmVkaXJlY3RUbyA9IGBwYWdlcy8ke2NvbmZpZy5lbXB0eVJvdXRlUmVkaXJlY3QgfHwgJ2Rhc2hib2FyZCd9YDtcclxuICAgICAgICAgICAgYmFzZUFwcFJvdXRlcy5maWx0ZXIodCA9PiBbXCJwYWdlc1wiLCBcInBhZ2VzX2V4dFwiXS5pbmNsdWRlcyh0LnBhdGgpKS5mb3JFYWNoKHBhdGggPT4ge1xyXG4gICAgICAgICAgICAgICAgcGF0aC5jaGlsZHJlbiA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7IHBhdGg6IFwicHJvZmlsZVwiLCBjb21wb25lbnQ6IFVzZXJJbmZvc0NvbXBvbmVudCwgZGF0YTogeyBJbnRlcm5hbE5hdmlnYXRpb246IHRydWUsIHRpdGxlOiBcInByb2ZpbG9cIiB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLnJvdXRlcy5maWx0ZXIociA9PiAhcGF0aC5wYXRoLmluY2x1ZGVzKFwicGFnZXNfZXh0XCIpIHx8ICFyLnBhdGguc3RhcnRzV2l0aChcImVtYmVkXCIpKVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbmZpZy5kZWJ1Z01vZGUgPSAoIWlzRGV2TW9kZSgpICYmICFjb25maWcuZm9yY2VEZWJ1Z01vZGVGb3JQcm9kQnVpbGRzKSA/IERlYnVnRmxhZ3MuTm9uZSA6IChjb25maWcuZGVidWdNb2RlIHx8IERlYnVnRmxhZ3MuQWxsKTtcclxuXHJcbiAgICAgICAgbGV0IG1lcmdlZEFwcEluaXRpYWxpemVyID0gKGh0dHA6IEhUVFBTZXJ2aWNlLCBidHM6IFRva2VuU2VydmljZSwgYWFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgbG9jOiBCYXNlTG9jYWxpemF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmFub255bW91c01vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjW0FQUF9JTklUSUFMSVpFUl0gTG9hZGluZyBBcHBDb25maWcuLi5cIiwgXCJiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHAuZ2V0PEVudk9wdGlvbnM+KEdFVF9BcHBDb25maWdfR2V0QXBwQ29uZmlnLCBudWxsLCBudWxsLCBmYWxzZSkucGlwZShjYXRjaEVycm9yKF8gPT4gb2Yoe30pKSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFwKChhcHBDb25maWc6IEVudk9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15Y29uZmlnID0gYXBwQ29uZmlnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBhcHBDb25maWcgcmVnaXN0ZXJlZFwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhYy5pbml0aWFsaXplSWRlbnRpdHkobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5pbml0aWFsaXplckZ1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBMb2FkaW5nIGN1c3RvbSBhcHBsaWNhdGlvbiBpbml0aWFsaXphdGlvblwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuaW5pdGlhbGl6ZXJGdW5jdGlvbihodHRwLCBidHMsIGFhYykoKS5waXBlKHRhcChfID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjW0FQUF9JTklUSUFMSVpFUl0gSW5pdGlhbGl6YXRpb24gaXMgb3ZlclwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBMb2FkaW5nIEFwcENvbmZpZyBhbmQgQWNjb3VudCBTY29wZS4uLlwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgIGxldCByZWFsT2JzZXJ2YWJsZSA9IGZvcmtKb2luKFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwQ29uZmlnOiBodHRwLmdldDxFbnZPcHRpb25zPihHRVRfQXBwQ29uZmlnX0dldEFwcENvbmZpZywgbnVsbCwgbnVsbCwgZmFsc2UpLnBpcGUoY2F0Y2hFcnJvcihfID0+IG9mKHt9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogaHR0cC5nZXQ8QWNjb3VudFNjb3BlPihHRVRfSmFjZV9HZXRBY2NvdW50U2NvcGUsIG51bGwsIG51bGwsIGZhbHNlKS5waXBlKGNhdGNoRXJyb3IoXyA9PiBvZihudWxsKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IGxvYy5Mb2NhbGUucGlwZSh0YWtlKDEpLCBjYXRjaEVycm9yKF8gPT4gb2YoJ2l0LUlUJykpKSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlZE9ic2VydmFibGUgPSBjb25maWcub3B0aW9uc0FuZFNjb3BlUHJvdmlkZXIgfHwgcmVhbE9ic2VydmFibGU7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZWRPYnNlcnZhYmxlLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFwKChyZXM6IHsgYXBwQ29uZmlnOiBFbnZPcHRpb25zLCBzY29wZTogQWNjb3VudFNjb3BlLCBsb2NhbGU6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG15Y29uZmlnID0gcmVzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTCdhY2NvdW50IHNjb3BlIGxvIHByZW5kbyBkYWxsYSBRdWVyeSBhIGJhY2tlbmQgc29sbyBzZSBub24gdXNvIGlsIEZha2UgdG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFidHMuVVNFX0ZBS0VfQUNDRVNTX1RPS0VOKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRzLmFjY291bnRTY29wZSA9IHJlcy5zY29wZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBhcHBDb25maWcgYW5kIHNjb3BlIHJlZ2lzdGVyZWRcIiwgXCJiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3dcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWRlbnR0aXR5ID0gYnRzLmdldEphY2VJZGVudGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnRzLmFjY291bnRTY29wZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhYy5pbml0aWFsaXplSWRlbnRpdHkoaWRlbnR0aXR5KTtcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlnLmluaXRpYWxpemVyRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBMb2FkaW5nIGN1c3RvbSBhcHBsaWNhdGlvbiBpbml0aWFsaXphdGlvblwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5pbml0aWFsaXplckZ1bmN0aW9uKGh0dHAsIGJ0cywgYWFjKSgpLnBpcGUodGFwKF8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1tBUFBfSU5JVElBTElaRVJdIEluaXRpYWxpemF0aW9uIGlzIG92ZXJcIiwgXCJiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5nTW9kdWxlOiBFc0ZhZW56YUNvcmVNb2R1bGUsXHJcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgICAgICAgICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqIFByb3ZpZGVyIHN0YXRpY2kgKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblxyXG4gICAgICAgICAgICAgICAgLi4uUFJPVklERVJTLFxyXG5cclxuICAgICAgICAgICAgICAgIC8vICoqKioqKioqKioqKioqKioqKioqKioqKiBQcm92aWRlciBjdXN0b21penphYmlsaSAqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgICAgICAgICAgIC4uLighY29uZmlnLnJlZGlyZWN0aW9uTWFwID8gW10gOiBbeyBwcm92aWRlOiBSRURJUkVDVF9NQVAsIHVzZVZhbHVlOiBjb25maWcucmVkaXJlY3Rpb25NYXAgfV0pLFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsIHVzZUZhY3Rvcnk6IG1lcmdlZEFwcEluaXRpYWxpemVyLCBkZXBzOiBbSFRUUFNlcnZpY2UsIFRva2VuU2VydmljZSwgQWNjZXNzQ29udHJvbFNlcnZpY2UsIEJhc2VMb2NhbGl6YXRpb25dLCBtdWx0aTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBST1VURVMsIHVzZVZhbHVlOiBiYXNlQXBwUm91dGVzLCBtdWx0aTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMT0NfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuTG9jYWxpemF0aW9ucykgPT0gRGVidWdGbGFncy5Mb2NhbGl6YXRpb25zIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogRVhUX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLkV4dGVuc2lvbnMpID09IERlYnVnRmxhZ3MuRXh0ZW5zaW9ucyA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEFDQ19ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5BY2Nlc3NDb250cm9sKSA9PSBEZWJ1Z0ZsYWdzLkFjY2Vzc0NvbnRyb2wgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBIVFRQX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLkh0dHApID09IERlYnVnRmxhZ3MuSHR0cCA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEhUVFBfSU5WQUxJREFUSU9OLCB1c2VWYWx1ZTogY29uZmlnPy5odHRwSW52YWxpZGF0aW9uQ2FjaGUgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogVEFCX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLlRhYmJlcikgPT0gRGVidWdGbGFncy5UYWJiZXIgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBTR1JfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuU2lnbmFsUikgPT0gRGVidWdGbGFncy5TaWduYWxSIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogUFJFRl9ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5QcmVmZXJlbmNlcykgPT0gRGVidWdGbGFncy5QcmVmZXJlbmNlcyA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEVTQ19ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5DaGFydHMpID09IERlYnVnRmxhZ3MuQ2hhcnRzIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTE9HSU5fVVJMX0xFR0FDWSwgdXNlVmFsdWU6IGNvbmZpZy5sZWdhY3lMb2dpbiAhPT0gbnVsbCAmJiBjb25maWcubGVnYWN5TG9naW4gIT09IHVuZGVmaW5lZCA/IGNvbmZpZy5sZWdhY3lMb2dpbiA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5BVkJBUl9FWFRFTlNJT05TLCB1c2VWYWx1ZTogY29uZmlnLm5hdmJhckV4dGVuc2lvbnMgPyBjb25maWcubmF2YmFyRXh0ZW5zaW9ucyA6IFtdIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEFOT05ZTU9VU19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmFub255bW91c01vZGUgPyBjb25maWcuYW5vbnltb3VzTW9kZSA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEJhc2VBZGFwdGVyLCB1c2VDbGFzczogY29uZmlnPy5jaGFydHNBZGFwdGVyIHx8IEJhc2VBZGFwdGVyIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEJhc2VNZXNzYWdlU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8ubWVzc2FnZVNlcnZpY2UgfHwgQmFzZU1lc3NhZ2VTZXJ2aWNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEdsb2JhbFNlYXJjaFNlcnZpY2UsIHVzZUNsYXNzOiBjb25maWc/Lmdsb2JhbFNlYXJjaFNlcnZpY2UgfHwgR2xvYmFsU2VhcmNoU2VydmljZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBDb21wbGV0ZWRKb2JSZWRpcmVjdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBjb25maWc/LmNvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZSB8fCBDb21wbGV0ZWRKb2JSZWRpcmVjdGlvblNlcnZpY2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTWVudUZpbHRlcmluZ1NlcnZpY2UsIHVzZUNsYXNzOiBjb25maWc/Lm1lbnVGaWx0ZXJpbmdTZXJ2aWNlIHx8IE1lbnVGaWx0ZXJpbmdTZXJ2aWNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsIHVzZUNsYXNzOiBjb25maWc/LnVzZXJQcmVmZXJlbmNlc1Byb3ZpZGVyIHx8IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTUVOVV9MT0NBTElaQVRJT04sIHVzZVZhbHVlOiBjb25maWcubWVudUxvYyB8fCBudWxsIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE1FTlUsIHVzZVZhbHVlOiBjb25maWcubWVudSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBVU0VfRkFLRV9BQ0NFU1NfVE9LRU4sIHVzZVZhbHVlOiAhIWNvbmZpZy5mYWtlQWNjZXNzVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogUHJlZmVyZW5jZXNQZXJzaXN0b3IsIHVzZUNsYXNzOiBjb25maWcuZmFrZUFjY2Vzc1Rva2VuID8gTG9jYWxTdG9yYWdlUHJlZmVyZW5jZXNQZXJzaXN0b3IgOiBBcHBsaWNhdGlvblByZWZlcmVuY2VzUGVyc2lzdG9yIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IENhY2hlUGVyc2lzdG9yLCB1c2VDbGFzczogY29uZmlnLmZha2VBY2Nlc3NUb2tlbiA/IExvY2FsU3RvcmFnZUNhY2hlUGVyc2lzdG9yIDogQXBwbGljYXRpb25DYWNoZVBlcnNpc3RvciB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRXNGYWVuemFDb3JlTW9kdWxlQ29uZmlnIHtcclxuICAgIC8qIFJvdXRlIGFwcGxpY2F0aXZlLCBzb2xvIHF1ZWxsZSBkZW50cm8gYSAqKnBhZ2VzKiogKi9cclxuICAgIHJvdXRlcyE6IFJvdXRlcztcclxuICAgIC8qIE1lbsO5IGRlbGxhIHNpZGViYXIgZGVsbCdhcHBsaWNhemlvbmUgKi9cclxuICAgIG1lbnU6IEFwcGxpY2F0aW9uTWVudVtdO1xyXG4gICAgLyogSW5kaWNhIHNlIHV0aWxpenphcmUgbCdhY2Nlc3MgdG9rZW4gZmludG8gKi9cclxuICAgIGZha2VBY2Nlc3NUb2tlbj86IGJvb2xlYW47XHJcbiAgICAvKiBUaXBvIGRhIHVzYXJlIHBlciBnZW5lcmFyZSBsZSBsb2NhbGl6emFpem9uaSBkZWwgbWVuw7kgKi9cclxuICAgIG1lbnVMb2M/OiBUeXBlPExvY2FsaXphdGlvblNlcnZpY2U+O1xyXG4gICAgLyogUmVkaXJlY3QgcGVyIGxhIHJvb3QgZGVsbCdhcHBsaWNhemlvbmUsIGRpIGRlZmF1bHQgw6ggaW1wb3N0YXRvIGEgKipkYXNoYm9hcmQqKi4gU2UgYWxsJ2ludGVybm8gZGVsbGUgKipyb3V0ZXMqKiBub24gZXNpc3RlIGxhIHJvdXRlICoqZGFzaGJvYXJkKiogw6ggZGEgaW1wb3N0YXJlIGFkZWd1YXRhbWVudGUgKi9cclxuICAgIGVtcHR5Um91dGVSZWRpcmVjdD86IHN0cmluZztcclxuICAgIC8qIFNlIG5vbiBzcGVjaWZpY2F0YSB2aWVuZSBpbXBvc3RhdGEgYXV0b21hdGljYW1lbnRlIGFkIFwiQWxsXCIgaW4gZmFzZSBkaSBkZWJ1ZywgXCJOb25lXCIgaW4gcHJvZHV6aW9uZSAocXVlc3QndWx0aW1vIGEgcHJlc2NpbmRlcmUsIGEgbWVubyBjaGUgKipmb3JjZURlYnVnTW9kZUZvclByb2RCdWlsZHMqKiBub24gc2lhIHRydWUpKi9cclxuICAgIGRlYnVnTW9kZT86IERlYnVnRmxhZ3M7XHJcbiAgICAvKiBQZXJtZXR0ZSBkaSBmb3J6YXJlIGxhIG1vZGFsaXTDoCBkaSBkZWJ1ZyBzcGVjaWZpY2F0YSBhbmNoZSBwZXIgbGUgYnVpbGQgZGkgcHJvZHV6aW9uZSwgKipOT04gSU1QT1NUQVJFIEEgVFJVRSoqIGEgbWVubyBkaSByYXJpc3NpbWlzc2ltaXNzaW1pIGNhc2kgKi9cclxuICAgIGZvcmNlRGVidWdNb2RlRm9yUHJvZEJ1aWxkcz86IGJvb2xlYW47XHJcbiAgICAvKiBDYWNoZSBkaSBpbnZhbGlkYXppb25lIHBlciBsZSBjaGlhbWF0ZSBodHRwICovXHJcbiAgICBodHRwSW52YWxpZGF0aW9uQ2FjaGU/OiBhbnk7XHJcbiAgICAvKiBGdW56aW9uZSBkaSBpbml6aWFsaXp6YXppb25lIEFQUF9JTklUSUFMSVpFUi1saWtlIGNoZSB2aWVuZSByaWNoaWFtYXRhIGRvcG8gYWxsYSBmdW56aW9uZSBkaSBpbml6aWFsaXp6YXppb25lIGRpIGRlZmF1bHQgKi9cclxuICAgIGluaXRpYWxpemVyRnVuY3Rpb24/OiAoaHR0cDogSFRUUFNlcnZpY2UsIGJ0czogVG9rZW5TZXJ2aWNlLCBhYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlKSA9PiAoKSA9PiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICAvKiBNYXBwYSBkaSByZWRpcmVjdCBwZXIgcGVybWV0dGVyZSBhbCAqKlJlZGlyZWN0ZXJDb21wb25lbnQqKiBkaSBzYXBlcmUgZG92ZSBuYXZpZ2FyZSBpbiBiYXNlIGEgT2dnZXR0by1QYXJhbWV0cmkgKi9cclxuICAgIHJlZGlyZWN0aW9uTWFwPzogeyBbaW5kZXg6IHN0cmluZ106IHsgdXJsOiBzdHJpbmcsIHBhcmFtczogc3RyaW5nW10gfSB9O1xyXG4gICAgLyogQWRhdHRhdG9yZSBkZWkgZ3JhZmljaSBuZWwgY2FzbyB1biBwcm9nZXR0byBmb3NzZSB2ZWNjaGlvIChSaW11b3ZpYmlsZSBxdWFuZG8gdHV0dGkgaSBwcm9nZXR0aSB1c2FubyBuYXRpdmFtZW50ZSBlcy1jaGFydHMpICovXHJcbiAgICBjaGFydHNBZGFwdGVyPzogVHlwZTxCYXNlQWRhcHRlcj47XHJcbiAgICAvKiBTZXJ2aXppbyBjaGUgZXNwb25lIGkgbWVzc2FnZ2kgZGlzcG9uaWJpbGkgc3UgU2lnbmFsciAqL1xyXG4gICAgbWVzc2FnZVNlcnZpY2U/OiBUeXBlPEJhc2VNZXNzYWdlU2VydmljZT47XHJcbiAgICAvKiBTZXJ2aXppbyBwZXIgbGEgc2VhcmNoIGdsb2JhbGUgZGVsIG1vZHVsbyAqL1xyXG4gICAgZ2xvYmFsU2VhcmNoU2VydmljZT86IFR5cGU8R2xvYmFsU2VhcmNoU2VydmljZT47XHJcbiAgICAvKiBTZXJ2aXppbyBwZXIgZmlsdHJhcmUgbGUgdm9jaSBkaSBtZW7DuSAqL1xyXG4gICAgbWVudUZpbHRlcmluZ1NlcnZpY2U/OiBUeXBlPE1lbnVGaWx0ZXJpbmdTZXJ2aWNlPjtcclxuICAgIC8qIFNlcnZpemlvIGRpIHJpZGlyZXppb25lIHBlciBqb2IgY29tcGxldGF0aSAqL1xyXG4gICAgY29tcGxldGVkSm9iUmVkaXJlY3Rpb25TZXJ2aWNlPzogVHlwZTxDb21wbGV0ZWRKb2JSZWRpcmVjdGlvblNlcnZpY2U+O1xyXG4gICAgLyogRnVuemlvbmUgZGkgb3ZlcnJpZGUgcGVyIHJlY3VwZXJhcmUgYWNjb3VudCBzY29wZSBlIGVudm9wdGlvbnMuIFB1w7IgYW5jaGUgZXNzZXJlIHV0aWxpenphdGEgcGVyIGZvcm5pcmUgbW9kZWxsaSBmaW50aSBmaW5vIGFkIGltcGxlbWVudGF6aW9uZSAqL1xyXG4gICAgb3B0aW9uc0FuZFNjb3BlUHJvdmlkZXI/OiBPYnNlcnZhYmxlPHsgYXBwQ29uZmlnOiBFbnZPcHRpb25zLCBzY29wZTogQWNjb3VudFNjb3BlLCBsb2NhbGU6IHN0cmluZyB9PjtcclxuICAgIC8qIExpc3RhIGRlaSBjb21wb25lbnRpIGNvbiBjdWkgZXNwYW5kZXJlIGxhIG5hdmJhciAqL1xyXG4gICAgbmF2YmFyRXh0ZW5zaW9ucz86IFR5cGU8YW55PltdO1xyXG4gICAgLyogU2Vydml6aW8gZGkgcmVjdXBlcm8vbW9kaWZpY2EgcHJlZmVyZW56ZSB1dGVudGUgKi9cclxuICAgIHVzZXJQcmVmZXJlbmNlc1Byb3ZpZGVyPzogVHlwZTxVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlPjtcclxuICAgIC8qIGlkZW50aWZpY2Egc2UgdXRpbGl6emFyZSBsYSB2ZXJzaW9uZSB2ZWNjaGlhIGRlbGwndXJsIGRpIGF1dGggKCR7bXljb25maWcuQVVUSF9VUkx9L2xvZ2luL2Zvcm0/Y2xpZW50PSR7bXljb25maWcuQ0xJRU5UX05BTUV9KSBpbnZlY2UgY2hlIGxhIG51b3ZhICgke215Y29uZmlnLkFVVEhfVVJMfS9sb2dpbjtjbGllbnQ9JHtteWNvbmZpZy5DTElFTlRfTkFNRX0pICovXHJcbiAgICBsZWdhY3lMb2dpbj86IGJvb2xlYW47XHJcbiAgICAvKiBJbmRpY2Egc2UgaWwgc2Vydml6aW8gZGkgYXV0ZW50aWNhemlvbmUgZGV2ZSBmdW56aW9uYXJlIGluIGFub25pbW8gbGF0byBGcm9udGVuZC4gRGV2J2Vzc2VyZSB1dGlsaXp6YXRvIGluc2llbWUgYWwgdGFnIFwiQXV0aFwiIGluIGNvZGUgYmVoaW5kICovXHJcbiAgICBhbm9ueW1vdXNNb2RlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRGVidWdGbGFncyB7XHJcbiAgICBOb25lID0gMCxcclxuICAgIExvY2FsaXphdGlvbnMgPSAxIDw8IDAsXHJcbiAgICBFeHRlbnNpb25zID0gMSA8PCAxLFxyXG4gICAgQWNjZXNzQ29udHJvbCA9IDEgPDwgMixcclxuICAgIEh0dHAgPSAxIDw8IDMsXHJcbiAgICBTaWduYWxSID0gMSA8PCA0LFxyXG4gICAgUHJlZmVyZW5jZXMgPSAxIDw8IDUsXHJcbiAgICBDaGFydHMgPSAxIDw8IDYsXHJcbiAgICBUYWJiZXIgPSAxIDw8IDcsXHJcbiAgICBBbGwgPSB+KH4wIDw8IDgpXHJcbn0iXX0=
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQTZCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQVUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxtQ0FBbUMsQ0FBQztBQUUzQyxVQUFVO0FBQ1YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxzQkFBc0IsQ0FBQztBQUU5QixLQUFLO0FBQ0wsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxnQ0FBZ0MsRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLGdC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QUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUMxSCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFO2dCQUN2RSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUM3SCxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUMvSCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUN4SSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUM3SCxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFB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RXJyb3JIYW5kbGVyLCBMT0NBTEVfSUQsIEFQUF9JTklUSUFMSVpFUiwgTW9kdWxlV2l0aFByb3ZpZGVycywgVHlwZSwgaXNEZXZNb2RlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBSb3V0ZXMsIFJvdXRlck1vZHVsZSwgTm9QcmVsb2FkaW5nLCBST1VURVMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IE1BVF9EQVRFX0ZPUk1BVFMsIE1BVF9EQVRFX0xPQ0FMRSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XHJcbmltcG9ydCB7IEVWRU5UX01BTkFHRVJfUExVR0lOUyB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VXb3JrZXJNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvc2VydmljZS13b3JrZXJcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgXCJAYW5ndWxhci9jb21tb24vbG9jYWxlcy9nbG9iYWwvaXRcIjtcclxuXHJcbi8vIFBsdWdpbnNcclxuaW1wb3J0IHsgTmd4TWF0RGF0ZUFkYXB0ZXIsIE5HWF9NQVRfREFURV9GT1JNQVRTIH0gZnJvbSBcIkBhbmd1bGFyLW1hdGVyaWFsLWNvbXBvbmVudHMvZGF0ZXRpbWUtcGlja2VyXCI7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tIFwibmd4LWNvb2tpZS1zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRvYXN0ck1vZHVsZSB9IGZyb20gXCJuZ3gtdG9hc3RyXCI7XHJcbmltcG9ydCBcIndpZGdzdGVyL3dpZGdzdGVyLmpzXCI7XHJcblxyXG4vLyBFU1xyXG5pbXBvcnQgeyBQcmVmZXJlbmNlc01vZHVsZSwgUFJFRl9ERUJVR19NT0RFLCBQcmVmZXJlbmNlc1BlcnNpc3RvciwgTG9jYWxTdG9yYWdlUHJlZmVyZW5jZXNQZXJzaXN0b3IsIENhY2hlUGVyc2lzdG9yLCBMb2NhbFN0b3JhZ2VDYWNoZVBlcnNpc3RvciB9IGZyb20gXCJAZXNmYWVuemEvcHJlZmVyZW5jZXNcIjtcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uTW9kdWxlLCBMb2NhbGl6YXRpb25TZXJ2aWNlLCBMb2NhbGl6YXRpb25NaXNzaW5nUG9saWN5LCBMT0NfREVCVUdfTU9ERSwgQmFzZUxvY2FsaXphdGlvbiB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBIdHRwc2VydmljZU1vZHVsZSwgSHR0cFNlcnZpY2VFeHRlbnNpb25zLCBIVFRQU2VydmljZSwgSFRUUF9ERUJVR19NT0RFLCBIVFRQX0lOVkFMSURBVElPTiB9IGZyb20gXCJAZXNmYWVuemEvaHR0cHNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2lnbmFsck5vdGlmaWNhdGlvbnNNb2R1bGUsIFNHUl9ERUJVR19NT0RFLCBCYXNlTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL3NpZ25hbHItbm90aWZpY2F0aW9uc1wiO1xyXG5pbXBvcnQgeyBGb3Jtc0FuZFZhbGlkYXRpb25zTW9kdWxlLCBOZ3hFeHBhbmRlZERheUpzRGF0ZUFkYXB0ZXIgfSBmcm9tIFwiQGVzZmFlbnphL2Zvcm1zLWFuZC12YWxpZGF0aW9uc1wiO1xyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sTW9kdWxlLCBBY2Nlc3NDb250cm9sU2VydmljZSwgQUNDX0RFQlVHX01PREUgfSBmcm9tIFwiQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sXCI7XHJcbmltcG9ydCB7IEJhc2VBZGFwdGVyLCBFc0NoYXJ0c01vZHVsZSwgRVNDX0RFQlVHX01PREUgfSBmcm9tIFwiQGVzZmFlbnphL2VzLWNoYXJ0c1wiO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25zTW9kdWxlLCBFWFRfREVCVUdfTU9ERSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudU1vZHVsZSB9IGZyb20gXCJAZXNmYWVuemEvbmd4LWNvbnRleHRtZW51XCI7XHJcbmltcG9ydCB7IERyYWd1bGFNb2R1bGUgfSBmcm9tICdAZXNmYWVuemEvbmd4LWRyYWd1bGEnO1xyXG5pbXBvcnQgeyBFc1RhYmxlTW9kdWxlIH0gZnJvbSBcIkBlc2ZhZW56YS9lcy10YWJsZVwiO1xyXG5pbXBvcnQgeyBUQUJfREVCVUdfTU9ERSB9IGZyb20gXCJAZXNmYWVuemEvdGFiYmVyXCI7XHJcblxyXG4vLyBDb3JlXHJcbmltcG9ydCB7IEFQUEVycm9ySGFuZGxlciwgSFRUUFNlcnZpY2VFeHRlbnNpb25zLCBBcHBsaWNhdGlvblByZWZlcmVuY2VzUGVyc2lzdG9yLCBBcHBsaWNhdGlvbkNhY2hlUGVyc2lzdG9yLCBTZXNzaW9uUmV0cmlldmVyLCBPdXRab25lRXZlbnRQbHVnaW4sIFRva2VuU2VydmljZSwgR2xvYmFsU2VhcmNoU2VydmljZSwgQ29tcGxldGVkSm9iUmVkaXJlY3Rpb25TZXJ2aWNlLCBNZW51RmlsdGVyaW5nU2VydmljZSwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBQYWdlTm90Rm91bmRDb21wb25lbnQsIFNlcnZlckVycm9yQ29tcG9uZW50LCBBbmd1bGFyRXJyb3JDb21wb25lbnQsIEV4dGVybmFsUGFnZXNDb21wb25lbnQsIEphY2VMb2dpbkNvbXBvbmVudCwgUGFnZXNDb21wb25lbnQsIFJlZGlyZWN0ZXJDb21wb25lbnQsIENvbXBvbmVudHNNb2R1bGUsIFVzZXJJbmZvc0NvbXBvbmVudCB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9jb21wb25lbnRzXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uTWVudSwgRW52T3B0aW9ucywgQWNjb3VudFNjb3BlLCBNRU5VLCBNRU5VX0xPQ0FMSVpBVElPTiwgUkVESVJFQ1RfTUFQLCBVU0VfRkFLRV9BQ0NFU1NfVE9LRU4sIE5BVkJBUl9FWFRFTlNJT05TLCBMT0dJTl9VUkxfTEVHQUNZLCBBTk9OWU1PVVNfTU9ERSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIlxyXG5pbXBvcnQgeyBST1VURSwgRU1CRURERURfUk9VVEUgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvZG9tYWluXCJcclxuaW1wb3J0IHsgVGVtcGxhdGVDb21tb24gfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvbW9kdWxlc1wiO1xyXG5cclxuLy8gUnhKc1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuLy8gQm9vdHN0cmFwXHJcbmltcG9ydCB7IFByb2dyZXNzYmFyTW9kdWxlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvcHJvZ3Jlc3NiYXJcIjtcclxuaW1wb3J0IHsgVGltZXBpY2tlck1vZHVsZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL3RpbWVwaWNrZXJcIjtcclxuaW1wb3J0IHsgQnNEcm9wZG93bk1vZHVsZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duXCI7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC90b29sdGlwXCI7XHJcbmltcG9ydCB7IE1vZGFsTW9kdWxlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tIFwiLi9hcHAuY29tcG9uZW50XCI7XHJcblxyXG4vLyBSZXBvc2l0b3JpZXNcclxuY29uc3QgR0VUX0phY2VfR2V0QWNjb3VudFNjb3BlOiBzdHJpbmcgPSBcIi9hcGkvSmFjZS9HZXRBY2NvdW50U2NvcGVcIjtcclxuY29uc3QgR0VUX0FwcENvbmZpZ19HZXRBcHBDb25maWc6IHN0cmluZyA9IFwiL2FwaS9BcHBDb25maWcvR2V0QXBwQ29uZmlnXCI7XHJcblxyXG5kZWNsYXJlIHZhciBteWNvbmZpZzogRW52T3B0aW9ucztcclxuXHJcbmNvbnN0IGJhc2VBcHBSb3V0ZXM6IFJvdXRlcyA9IFtcclxuICAgIHsgcGF0aDogXCJcIiwgcmVkaXJlY3RUbzogXCJwYWdlcy97ZW1wdHlSb3V0ZVJlZGlyZWN0fVwiLCBwYXRoTWF0Y2g6IFwiZnVsbFwiIH0sXHJcbiAgICB7IHBhdGg6IEVNQkVEREVEX1JPVVRFLCBjb21wb25lbnQ6IEV4dGVybmFsUGFnZXNDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogUk9VVEUsIGNvbXBvbmVudDogUGFnZXNDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogXCJyZFwiLCBjb21wb25lbnQ6IFJlZGlyZWN0ZXJDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogXCJyZC86dGVuYW50XCIsIGNvbXBvbmVudDogUmVkaXJlY3RlckNvbXBvbmVudCB9LFxyXG4gICAgeyBwYXRoOiBcImxvZ2luXCIsIGNvbXBvbmVudDogSmFjZUxvZ2luQ29tcG9uZW50IH0sXHJcbiAgICB7IHBhdGg6IFwiaXNlcnJcIiwgY29tcG9uZW50OiBTZXJ2ZXJFcnJvckNvbXBvbmVudCB9LFxyXG4gICAgeyBwYXRoOiBcImFuZXJyXCIsIGNvbXBvbmVudDogQW5ndWxhckVycm9yQ29tcG9uZW50IH0sXHJcbiAgICB7IHBhdGg6IFwiKipcIiwgY29tcG9uZW50OiBQYWdlTm90Rm91bmRDb21wb25lbnQgfSxcclxuXHJcbl07XHJcblxyXG5jb25zdCBNT0RVTEVTID0gW1xyXG4gICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUsXHJcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxyXG4gICAgVGVtcGxhdGVDb21tb24sXHJcbiAgICBDb21wb25lbnRzTW9kdWxlLFxyXG5cclxuICAgIC8vIEF0dGVuemlvbmUgYSBsYXNjaWFybG8gYXR0aXZvIGluIG5nIHNlcnZlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy80NzQ1NVxyXG4gICAgU2VydmljZVdvcmtlck1vZHVsZS5yZWdpc3Rlcignbmdzdy13b3JrZXIuanMnLCB7IGVuYWJsZWQ6ICFpc0Rldk1vZGUoKSB9KSxcclxuICAgIFJvdXRlck1vZHVsZS5mb3JSb290KFtdLCB7IHVzZUhhc2g6IHRydWUsIHByZWxvYWRpbmdTdHJhdGVneTogTm9QcmVsb2FkaW5nLCBvblNhbWVVcmxOYXZpZ2F0aW9uOiBcInJlbG9hZFwiIH0pLFxyXG5cclxuICAgIC8vIEVTXHJcbiAgICBFc1RhYmxlTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIEZvcm1zQW5kVmFsaWRhdGlvbnNNb2R1bGUuZm9yUm9vdCh7IGFjb2N1c3RvbTogXCJPXCIsIHNsaWRlck1vZGU6IHRydWUgfSksXHJcbiAgICBFeHRlbnNpb25zTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIExvY2FsaXphdGlvbk1vZHVsZS5mb3JSb290KHsgbG9jYWxpemF0aW9uTWlzc2luZ1BvbGljeTogTG9jYWxpemF0aW9uTWlzc2luZ1BvbGljeS5QcmludFNvdXJjZSwgZGVmYXVsdExvY2FsZTogJ2l0LUlUJyB9KSxcclxuICAgIEFjY2Vzc0NvbnRyb2xNb2R1bGUuZm9yUm9vdCh7IGNvbnRleHRBd2FyZUtleTogXCJPXCIsIGRlZmF1bHRDb25kaXRpb246ICcoUjpKYWNlIEFkbWluIHx8IFI6SmFjZSBTdXBwb3J0KScgfSksXHJcbiAgICBIdHRwc2VydmljZU1vZHVsZS5mb3JSb290KCksXHJcbiAgICBTaWduYWxyTm90aWZpY2F0aW9uc01vZHVsZS5mb3JSb290KHsgZW5kcG9pbnRVcmw6ICdub3RpZnknLCB1c2VNZXNzYWdlUGFjazogdHJ1ZSB9KSxcclxuICAgIFByZWZlcmVuY2VzTW9kdWxlLmZvclJvb3QoeyByZXRyaWV2ZUFsbEF0U3RhcnQ6IHRydWUsIHNlc3Npb25SZXRyaWV2ZXI6IFNlc3Npb25SZXRyaWV2ZXIsIHByZWZlcmVuY2VQZXJzaXN0b3I6IEFwcGxpY2F0aW9uUHJlZmVyZW5jZXNQZXJzaXN0b3IsIGNhY2hlUGVyc2lzdG9yOiBBcHBsaWNhdGlvbkNhY2hlUGVyc2lzdG9yIH0pLFxyXG4gICAgRXNDaGFydHNNb2R1bGUuZm9yUm9vdCgpLFxyXG5cclxuICAgIC8vIEJvb3RzdHJhcFxyXG4gICAgVG9vbHRpcE1vZHVsZS5mb3JSb290KCksXHJcbiAgICBNb2RhbE1vZHVsZS5mb3JSb290KCksXHJcbiAgICBQcm9ncmVzc2Jhck1vZHVsZS5mb3JSb290KCksXHJcbiAgICBCc0Ryb3Bkb3duTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIFRvYXN0ck1vZHVsZS5mb3JSb290KCksXHJcbiAgICBUaW1lcGlja2VyTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIENvbnRleHRNZW51TW9kdWxlLmZvclJvb3QoKSxcclxuICAgIERyYWd1bGFNb2R1bGUuZm9yUm9vdCgpXHJcbl07XHJcblxyXG4vLyBHZW5lcmF0b3JlIGRlaSBmb3JtYXRpIGRhdGFcclxudmFyIGZvcm1hdHMgPSAoc3R5bGU6ICdsb25nJyB8ICdzaG9ydCcpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcGFyc2U6IHsgZGF0ZUlucHV0OiAnREQvTU0vWVlZWScgKyAoc3R5bGUgPT09ICdsb25nJyA/ICcgSEg6bW06c3MnIDogJycpIH0sXHJcbiAgICAgICAgZGlzcGxheToge1xyXG4gICAgICAgICAgICBkYXRlSW5wdXQ6ICdERC9NTS9ZWVlZJyArIChzdHlsZSA9PT0gJ2xvbmcnID8gJyBISDptbTpzcycgOiAnJyksXHJcbiAgICAgICAgICAgIG1vbnRoWWVhckxhYmVsOiAnTU0gWVlZWScsXHJcbiAgICAgICAgICAgIGRhdGVBMTF5TGFiZWw6ICdERC9NTS9ZWVlZJyArIChzdHlsZSA9PT0gJ2xvbmcnID8gJyBISDptbTpzcycgOiAnJyksXHJcbiAgICAgICAgICAgIG1vbnRoWWVhckExMXlMYWJlbDogJ01NIFlZWVknLFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IGxvY2FsZUZhY3RvcnkgPSAobG9jOiBMb2NhbGl6YXRpb25TZXJ2aWNlKSA9PiBsb2MuU21hbGxMb2NhbGU7XHJcblxyXG5jb25zdCBQUk9WSURFUlMgPSBbXHJcbiAgICBDb29raWVTZXJ2aWNlLFxyXG5cclxuICAgIC8vIFByb3ZpZGVycyBhcHBsaWNhdGl2aVxyXG4gICAgeyBwcm92aWRlOiBFcnJvckhhbmRsZXIsIHVzZUNsYXNzOiBBUFBFcnJvckhhbmRsZXIgfSxcclxuICAgIHsgcHJvdmlkZTogRVZFTlRfTUFOQUdFUl9QTFVHSU5TLCB1c2VFeGlzdGluZzogT3V0Wm9uZUV2ZW50UGx1Z2luLCBtdWx0aTogdHJ1ZSB9LFxyXG4gICAgeyBwcm92aWRlOiBIdHRwU2VydmljZUV4dGVuc2lvbnMsIHVzZUNsYXNzOiBIVFRQU2VydmljZUV4dGVuc2lvbnMgfSxcclxuXHJcbiAgICAvLyBMb2NhbGUgZSBnZXN0aW9uaSBkZWxsZSBkYXRlXHJcbiAgICB7IHByb3ZpZGU6IExPQ0FMRV9JRCwgdXNlRmFjdG9yeTogbG9jYWxlRmFjdG9yeSwgZGVwczogW0xvY2FsaXphdGlvblNlcnZpY2VdIH0sXHJcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0xPQ0FMRSwgdXNlRmFjdG9yeTogbG9jYWxlRmFjdG9yeSwgZGVwczogW0xvY2FsaXphdGlvblNlcnZpY2VdIH0sXHJcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBmb3JtYXRzKCdzaG9ydCcpIH0sXHJcblxyXG4gICAgLy8gUXVlc3RpIGR1ZSBzb25vIHByb3ZpZGF0aSBkYWwgRm9ybXNBbmRWYWxpZGF0aW9uTW9kdWxlIHN0ZXNzbywgcGVyw7IgcXVlc3QndWx0aW1vIMOoIGRlZmluaXRvIGluIGZvclJvb3Qgc29sbyBsYXRvIGNvbXBvbmVudGkgc2hhcmVkLCBcclxuICAgIC8vIHF1aW5kaSBwZXIgcmVuZGVyZSBxdWVzdGkgcHJvdmlkZXIgZGlzcG9uaWJpbGkgYW5jaGUgYSBtb2R1bGkgZXN0ZXJuaSBkZXZvIHJpcHJvdmlkYXJsaSBhbmNoZSBxdWlcclxuICAgIHsgcHJvdmlkZTogTkdYX01BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBmb3JtYXRzKCdsb25nJykgfSxcclxuICAgIHsgcHJvdmlkZTogTmd4TWF0RGF0ZUFkYXB0ZXIsIHVzZUNsYXNzOiBOZ3hFeHBhbmRlZERheUpzRGF0ZUFkYXB0ZXIgfVxyXG5dO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sXHJcbiAgICBpbXBvcnRzOiBbLi4uTU9EVUxFU11cclxufSlcclxuZXhwb3J0IGNsYXNzIEVzRmFlbnphQ29yZU1vZHVsZSB7XHJcbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc/OiBFc0ZhZW56YUNvcmVNb2R1bGVDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEVzRmFlbnphQ29yZU1vZHVsZT4ge1xyXG4gICAgICAgIGlmIChjb25maWcucm91dGVzKSB7XHJcbiAgICAgICAgICAgIC8vIEFnZ2l1bnRhIGRlbGxhIHJvdXRlIGRpIGVtYmVkZGluZyBzZSBub24gZGljaGlhcmF0YSwgbGF0byBhZ2dpdW50YSBmYWNjaW8gaW4gbW9kbyBjaGUgbCdlbWJlZGRpbmcgc2lhIGRpc3BvbmliaWxlIHNvbG8gZGEgcm91dGUgaW50ZXJuZSAocGFnZXMgT0ssIHBhZ2VzX2V4dCBOT04gT0spXHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLnJvdXRlcy5maW5kKHQgPT4gdC5wYXRoLnN0YXJ0c1dpdGgoXCJlbWJlZFwiKSkpXHJcbiAgICAgICAgICAgICAgICBjb25maWcucm91dGVzID0gWy4uLmNvbmZpZy5yb3V0ZXMsIHsgcGF0aDogXCJlbWJlZC86bW9kdWxlXCIsIGxvYWRDaGlsZHJlbjogKCkgPT4gaW1wb3J0KCdAZXNmYWVuemEvY29yZS9tb2R1bGVzJykudGhlbihtID0+IG0uRW1iZWRkaW5nTW9kdWxlKSB9XVxyXG5cclxuICAgICAgICAgICAgYmFzZUFwcFJvdXRlc1swXS5yZWRpcmVjdFRvID0gW1wicGFnZXNcIiwgXCJwYWdlc19leHRcIl0ubWFwKHQgPT4gKGNvbmZpZy5lbXB0eVJvdXRlUmVkaXJlY3QgfHwgJycpLnN0YXJ0c1dpdGgodCkpLnNvbWUodCA9PiAhIXQpID8gXCIvXCIgKyBjb25maWcuZW1wdHlSb3V0ZVJlZGlyZWN0IDogIGBwYWdlcy8ke2NvbmZpZy5lbXB0eVJvdXRlUmVkaXJlY3QgfHwgJ2Rhc2hib2FyZCd9YDtcclxuICAgICAgICAgICAgYmFzZUFwcFJvdXRlcy5maWx0ZXIodCA9PiBbXCJwYWdlc1wiLCBcInBhZ2VzX2V4dFwiXS5pbmNsdWRlcyh0LnBhdGgpKS5mb3JFYWNoKHBhdGggPT4ge1xyXG4gICAgICAgICAgICAgICAgcGF0aC5jaGlsZHJlbiA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7IHBhdGg6IFwicHJvZmlsZVwiLCBjb21wb25lbnQ6IFVzZXJJbmZvc0NvbXBvbmVudCwgZGF0YTogeyBJbnRlcm5hbE5hdmlnYXRpb246IHRydWUsIHRpdGxlOiBcInByb2ZpbG9cIiB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLnJvdXRlcy5maWx0ZXIociA9PiAhcGF0aC5wYXRoLmluY2x1ZGVzKFwicGFnZXNfZXh0XCIpIHx8ICFyLnBhdGguc3RhcnRzV2l0aChcImVtYmVkXCIpKVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbmZpZy5kZWJ1Z01vZGUgPSAoIWlzRGV2TW9kZSgpICYmICFjb25maWcuZm9yY2VEZWJ1Z01vZGVGb3JQcm9kQnVpbGRzKSA/IERlYnVnRmxhZ3MuTm9uZSA6IChjb25maWcuZGVidWdNb2RlIHx8IERlYnVnRmxhZ3MuQWxsKTtcclxuXHJcbiAgICAgICAgbGV0IG1lcmdlZEFwcEluaXRpYWxpemVyID0gKGh0dHA6IEhUVFBTZXJ2aWNlLCBidHM6IFRva2VuU2VydmljZSwgYWFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgbG9jOiBCYXNlTG9jYWxpemF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmFub255bW91c01vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjW0FQUF9JTklUSUFMSVpFUl0gTG9hZGluZyBBcHBDb25maWcuLi5cIiwgXCJiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHAuZ2V0PEVudk9wdGlvbnM+KEdFVF9BcHBDb25maWdfR2V0QXBwQ29uZmlnLCBudWxsLCBudWxsLCBmYWxzZSkucGlwZShjYXRjaEVycm9yKF8gPT4gb2Yoe30pKSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFwKChhcHBDb25maWc6IEVudk9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15Y29uZmlnID0gYXBwQ29uZmlnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBhcHBDb25maWcgcmVnaXN0ZXJlZFwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhYy5pbml0aWFsaXplSWRlbnRpdHkobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5pbml0aWFsaXplckZ1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBMb2FkaW5nIGN1c3RvbSBhcHBsaWNhdGlvbiBpbml0aWFsaXphdGlvblwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuaW5pdGlhbGl6ZXJGdW5jdGlvbihodHRwLCBidHMsIGFhYykoKS5waXBlKHRhcChfID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjW0FQUF9JTklUSUFMSVpFUl0gSW5pdGlhbGl6YXRpb24gaXMgb3ZlclwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBMb2FkaW5nIEFwcENvbmZpZyBhbmQgQWNjb3VudCBTY29wZS4uLlwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgIGxldCByZWFsT2JzZXJ2YWJsZSA9IGZvcmtKb2luKFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwQ29uZmlnOiBodHRwLmdldDxFbnZPcHRpb25zPihHRVRfQXBwQ29uZmlnX0dldEFwcENvbmZpZywgbnVsbCwgbnVsbCwgZmFsc2UpLnBpcGUoY2F0Y2hFcnJvcihfID0+IG9mKHt9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogaHR0cC5nZXQ8QWNjb3VudFNjb3BlPihHRVRfSmFjZV9HZXRBY2NvdW50U2NvcGUsIG51bGwsIG51bGwsIGZhbHNlKS5waXBlKGNhdGNoRXJyb3IoXyA9PiBvZihudWxsKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IGxvYy5Mb2NhbGUucGlwZSh0YWtlKDEpLCBjYXRjaEVycm9yKF8gPT4gb2YoJ2l0LUlUJykpKSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlZE9ic2VydmFibGUgPSBjb25maWcub3B0aW9uc0FuZFNjb3BlUHJvdmlkZXIgfHwgcmVhbE9ic2VydmFibGU7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZWRPYnNlcnZhYmxlLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFwKChyZXM6IHsgYXBwQ29uZmlnOiBFbnZPcHRpb25zLCBzY29wZTogQWNjb3VudFNjb3BlLCBsb2NhbGU6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG15Y29uZmlnID0gcmVzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTCdhY2NvdW50IHNjb3BlIGxvIHByZW5kbyBkYWxsYSBRdWVyeSBhIGJhY2tlbmQgc29sbyBzZSBub24gdXNvIGlsIEZha2UgdG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFidHMuVVNFX0ZBS0VfQUNDRVNTX1RPS0VOKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRzLmFjY291bnRTY29wZSA9IHJlcy5zY29wZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBhcHBDb25maWcgYW5kIHNjb3BlIHJlZ2lzdGVyZWRcIiwgXCJiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3dcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWRlbnR0aXR5ID0gYnRzLmdldEphY2VJZGVudGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnRzLmFjY291bnRTY29wZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhYy5pbml0aWFsaXplSWRlbnRpdHkoaWRlbnR0aXR5KTtcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlnLmluaXRpYWxpemVyRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBMb2FkaW5nIGN1c3RvbSBhcHBsaWNhdGlvbiBpbml0aWFsaXphdGlvblwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5pbml0aWFsaXplckZ1bmN0aW9uKGh0dHAsIGJ0cywgYWFjKSgpLnBpcGUodGFwKF8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1tBUFBfSU5JVElBTElaRVJdIEluaXRpYWxpemF0aW9uIGlzIG92ZXJcIiwgXCJiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5nTW9kdWxlOiBFc0ZhZW56YUNvcmVNb2R1bGUsXHJcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgICAgICAgICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqIFByb3ZpZGVyIHN0YXRpY2kgKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblxyXG4gICAgICAgICAgICAgICAgLi4uUFJPVklERVJTLFxyXG5cclxuICAgICAgICAgICAgICAgIC8vICoqKioqKioqKioqKioqKioqKioqKioqKiBQcm92aWRlciBjdXN0b21penphYmlsaSAqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgICAgICAgICAgIC4uLighY29uZmlnLnJlZGlyZWN0aW9uTWFwID8gW10gOiBbeyBwcm92aWRlOiBSRURJUkVDVF9NQVAsIHVzZVZhbHVlOiBjb25maWcucmVkaXJlY3Rpb25NYXAgfV0pLFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsIHVzZUZhY3Rvcnk6IG1lcmdlZEFwcEluaXRpYWxpemVyLCBkZXBzOiBbSFRUUFNlcnZpY2UsIFRva2VuU2VydmljZSwgQWNjZXNzQ29udHJvbFNlcnZpY2UsIEJhc2VMb2NhbGl6YXRpb25dLCBtdWx0aTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBST1VURVMsIHVzZVZhbHVlOiBiYXNlQXBwUm91dGVzLCBtdWx0aTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMT0NfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuTG9jYWxpemF0aW9ucykgPT0gRGVidWdGbGFncy5Mb2NhbGl6YXRpb25zIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogRVhUX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLkV4dGVuc2lvbnMpID09IERlYnVnRmxhZ3MuRXh0ZW5zaW9ucyA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEFDQ19ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5BY2Nlc3NDb250cm9sKSA9PSBEZWJ1Z0ZsYWdzLkFjY2Vzc0NvbnRyb2wgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBIVFRQX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLkh0dHApID09IERlYnVnRmxhZ3MuSHR0cCA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEhUVFBfSU5WQUxJREFUSU9OLCB1c2VWYWx1ZTogY29uZmlnPy5odHRwSW52YWxpZGF0aW9uQ2FjaGUgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogVEFCX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLlRhYmJlcikgPT0gRGVidWdGbGFncy5UYWJiZXIgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBTR1JfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuU2lnbmFsUikgPT0gRGVidWdGbGFncy5TaWduYWxSIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogUFJFRl9ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5QcmVmZXJlbmNlcykgPT0gRGVidWdGbGFncy5QcmVmZXJlbmNlcyA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEVTQ19ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5DaGFydHMpID09IERlYnVnRmxhZ3MuQ2hhcnRzIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTE9HSU5fVVJMX0xFR0FDWSwgdXNlVmFsdWU6IGNvbmZpZy5sZWdhY3lMb2dpbiAhPT0gbnVsbCAmJiBjb25maWcubGVnYWN5TG9naW4gIT09IHVuZGVmaW5lZCA/IGNvbmZpZy5sZWdhY3lMb2dpbiA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5BVkJBUl9FWFRFTlNJT05TLCB1c2VWYWx1ZTogY29uZmlnLm5hdmJhckV4dGVuc2lvbnMgPyBjb25maWcubmF2YmFyRXh0ZW5zaW9ucyA6IFtdIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEFOT05ZTU9VU19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmFub255bW91c01vZGUgPyBjb25maWcuYW5vbnltb3VzTW9kZSA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEJhc2VBZGFwdGVyLCB1c2VDbGFzczogY29uZmlnPy5jaGFydHNBZGFwdGVyIHx8IEJhc2VBZGFwdGVyIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEJhc2VNZXNzYWdlU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8ubWVzc2FnZVNlcnZpY2UgfHwgQmFzZU1lc3NhZ2VTZXJ2aWNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEdsb2JhbFNlYXJjaFNlcnZpY2UsIHVzZUNsYXNzOiBjb25maWc/Lmdsb2JhbFNlYXJjaFNlcnZpY2UgfHwgR2xvYmFsU2VhcmNoU2VydmljZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBDb21wbGV0ZWRKb2JSZWRpcmVjdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBjb25maWc/LmNvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZSB8fCBDb21wbGV0ZWRKb2JSZWRpcmVjdGlvblNlcnZpY2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTWVudUZpbHRlcmluZ1NlcnZpY2UsIHVzZUNsYXNzOiBjb25maWc/Lm1lbnVGaWx0ZXJpbmdTZXJ2aWNlIHx8IE1lbnVGaWx0ZXJpbmdTZXJ2aWNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsIHVzZUNsYXNzOiBjb25maWc/LnVzZXJQcmVmZXJlbmNlc1Byb3ZpZGVyIHx8IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTUVOVV9MT0NBTElaQVRJT04sIHVzZVZhbHVlOiBjb25maWcubWVudUxvYyB8fCBudWxsIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE1FTlUsIHVzZVZhbHVlOiBjb25maWcubWVudSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBVU0VfRkFLRV9BQ0NFU1NfVE9LRU4sIHVzZVZhbHVlOiAhIWNvbmZpZy5mYWtlQWNjZXNzVG9rZW4gfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogUHJlZmVyZW5jZXNQZXJzaXN0b3IsIHVzZUNsYXNzOiBjb25maWcuZmFrZUFjY2Vzc1Rva2VuID8gTG9jYWxTdG9yYWdlUHJlZmVyZW5jZXNQZXJzaXN0b3IgOiBBcHBsaWNhdGlvblByZWZlcmVuY2VzUGVyc2lzdG9yIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IENhY2hlUGVyc2lzdG9yLCB1c2VDbGFzczogY29uZmlnLmZha2VBY2Nlc3NUb2tlbiA/IExvY2FsU3RvcmFnZUNhY2hlUGVyc2lzdG9yIDogQXBwbGljYXRpb25DYWNoZVBlcnNpc3RvciB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRXNGYWVuemFDb3JlTW9kdWxlQ29uZmlnIHtcclxuICAgIC8qIFJvdXRlIGFwcGxpY2F0aXZlLCBzb2xvIHF1ZWxsZSBkZW50cm8gYSAqKnBhZ2VzKiogKi9cclxuICAgIHJvdXRlcyE6IFJvdXRlcztcclxuICAgIC8qIE1lbsO5IGRlbGxhIHNpZGViYXIgZGVsbCdhcHBsaWNhemlvbmUgKi9cclxuICAgIG1lbnU6IEFwcGxpY2F0aW9uTWVudVtdO1xyXG4gICAgLyogSW5kaWNhIHNlIHV0aWxpenphcmUgbCdhY2Nlc3MgdG9rZW4gZmludG8gKi9cclxuICAgIGZha2VBY2Nlc3NUb2tlbj86IGJvb2xlYW47XHJcbiAgICAvKiBUaXBvIGRhIHVzYXJlIHBlciBnZW5lcmFyZSBsZSBsb2NhbGl6emFpem9uaSBkZWwgbWVuw7kgKi9cclxuICAgIG1lbnVMb2M/OiBUeXBlPExvY2FsaXphdGlvblNlcnZpY2U+O1xyXG4gICAgLyogUmVkaXJlY3QgcGVyIGxhIHJvb3QgZGVsbCdhcHBsaWNhemlvbmUsIGRpIGRlZmF1bHQgw6ggaW1wb3N0YXRvIGEgKipkYXNoYm9hcmQqKi4gU2UgYWxsJ2ludGVybm8gZGVsbGUgKipyb3V0ZXMqKiBub24gZXNpc3RlIGxhIHJvdXRlICoqZGFzaGJvYXJkKiogw6ggZGEgaW1wb3N0YXJlIGFkZWd1YXRhbWVudGUgKi9cclxuICAgIGVtcHR5Um91dGVSZWRpcmVjdD86IHN0cmluZztcclxuICAgIC8qIFNlIG5vbiBzcGVjaWZpY2F0YSB2aWVuZSBpbXBvc3RhdGEgYXV0b21hdGljYW1lbnRlIGFkIFwiQWxsXCIgaW4gZmFzZSBkaSBkZWJ1ZywgXCJOb25lXCIgaW4gcHJvZHV6aW9uZSAocXVlc3QndWx0aW1vIGEgcHJlc2NpbmRlcmUsIGEgbWVubyBjaGUgKipmb3JjZURlYnVnTW9kZUZvclByb2RCdWlsZHMqKiBub24gc2lhIHRydWUpKi9cclxuICAgIGRlYnVnTW9kZT86IERlYnVnRmxhZ3M7XHJcbiAgICAvKiBQZXJtZXR0ZSBkaSBmb3J6YXJlIGxhIG1vZGFsaXTDoCBkaSBkZWJ1ZyBzcGVjaWZpY2F0YSBhbmNoZSBwZXIgbGUgYnVpbGQgZGkgcHJvZHV6aW9uZSwgKipOT04gSU1QT1NUQVJFIEEgVFJVRSoqIGEgbWVubyBkaSByYXJpc3NpbWlzc2ltaXNzaW1pIGNhc2kgKi9cclxuICAgIGZvcmNlRGVidWdNb2RlRm9yUHJvZEJ1aWxkcz86IGJvb2xlYW47XHJcbiAgICAvKiBDYWNoZSBkaSBpbnZhbGlkYXppb25lIHBlciBsZSBjaGlhbWF0ZSBodHRwICovXHJcbiAgICBodHRwSW52YWxpZGF0aW9uQ2FjaGU/OiBhbnk7XHJcbiAgICAvKiBGdW56aW9uZSBkaSBpbml6aWFsaXp6YXppb25lIEFQUF9JTklUSUFMSVpFUi1saWtlIGNoZSB2aWVuZSByaWNoaWFtYXRhIGRvcG8gYWxsYSBmdW56aW9uZSBkaSBpbml6aWFsaXp6YXppb25lIGRpIGRlZmF1bHQgKi9cclxuICAgIGluaXRpYWxpemVyRnVuY3Rpb24/OiAoaHR0cDogSFRUUFNlcnZpY2UsIGJ0czogVG9rZW5TZXJ2aWNlLCBhYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlKSA9PiAoKSA9PiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICAvKiBNYXBwYSBkaSByZWRpcmVjdCBwZXIgcGVybWV0dGVyZSBhbCAqKlJlZGlyZWN0ZXJDb21wb25lbnQqKiBkaSBzYXBlcmUgZG92ZSBuYXZpZ2FyZSBpbiBiYXNlIGEgT2dnZXR0by1QYXJhbWV0cmkgKi9cclxuICAgIHJlZGlyZWN0aW9uTWFwPzogeyBbaW5kZXg6IHN0cmluZ106IHsgdXJsOiBzdHJpbmcsIHBhcmFtczogc3RyaW5nW10gfSB9O1xyXG4gICAgLyogQWRhdHRhdG9yZSBkZWkgZ3JhZmljaSBuZWwgY2FzbyB1biBwcm9nZXR0byBmb3NzZSB2ZWNjaGlvIChSaW11b3ZpYmlsZSBxdWFuZG8gdHV0dGkgaSBwcm9nZXR0aSB1c2FubyBuYXRpdmFtZW50ZSBlcy1jaGFydHMpICovXHJcbiAgICBjaGFydHNBZGFwdGVyPzogVHlwZTxCYXNlQWRhcHRlcj47XHJcbiAgICAvKiBTZXJ2aXppbyBjaGUgZXNwb25lIGkgbWVzc2FnZ2kgZGlzcG9uaWJpbGkgc3UgU2lnbmFsciAqL1xyXG4gICAgbWVzc2FnZVNlcnZpY2U/OiBUeXBlPEJhc2VNZXNzYWdlU2VydmljZT47XHJcbiAgICAvKiBTZXJ2aXppbyBwZXIgbGEgc2VhcmNoIGdsb2JhbGUgZGVsIG1vZHVsbyAqL1xyXG4gICAgZ2xvYmFsU2VhcmNoU2VydmljZT86IFR5cGU8R2xvYmFsU2VhcmNoU2VydmljZT47XHJcbiAgICAvKiBTZXJ2aXppbyBwZXIgZmlsdHJhcmUgbGUgdm9jaSBkaSBtZW7DuSAqL1xyXG4gICAgbWVudUZpbHRlcmluZ1NlcnZpY2U/OiBUeXBlPE1lbnVGaWx0ZXJpbmdTZXJ2aWNlPjtcclxuICAgIC8qIFNlcnZpemlvIGRpIHJpZGlyZXppb25lIHBlciBqb2IgY29tcGxldGF0aSAqL1xyXG4gICAgY29tcGxldGVkSm9iUmVkaXJlY3Rpb25TZXJ2aWNlPzogVHlwZTxDb21wbGV0ZWRKb2JSZWRpcmVjdGlvblNlcnZpY2U+O1xyXG4gICAgLyogRnVuemlvbmUgZGkgb3ZlcnJpZGUgcGVyIHJlY3VwZXJhcmUgYWNjb3VudCBzY29wZSBlIGVudm9wdGlvbnMuIFB1w7IgYW5jaGUgZXNzZXJlIHV0aWxpenphdGEgcGVyIGZvcm5pcmUgbW9kZWxsaSBmaW50aSBmaW5vIGFkIGltcGxlbWVudGF6aW9uZSAqL1xyXG4gICAgb3B0aW9uc0FuZFNjb3BlUHJvdmlkZXI/OiBPYnNlcnZhYmxlPHsgYXBwQ29uZmlnOiBFbnZPcHRpb25zLCBzY29wZTogQWNjb3VudFNjb3BlLCBsb2NhbGU6IHN0cmluZyB9PjtcclxuICAgIC8qIExpc3RhIGRlaSBjb21wb25lbnRpIGNvbiBjdWkgZXNwYW5kZXJlIGxhIG5hdmJhciAqL1xyXG4gICAgbmF2YmFyRXh0ZW5zaW9ucz86IFR5cGU8YW55PltdO1xyXG4gICAgLyogU2Vydml6aW8gZGkgcmVjdXBlcm8vbW9kaWZpY2EgcHJlZmVyZW56ZSB1dGVudGUgKi9cclxuICAgIHVzZXJQcmVmZXJlbmNlc1Byb3ZpZGVyPzogVHlwZTxVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlPjtcclxuICAgIC8qIGlkZW50aWZpY2Egc2UgdXRpbGl6emFyZSBsYSB2ZXJzaW9uZSB2ZWNjaGlhIGRlbGwndXJsIGRpIGF1dGggKCR7bXljb25maWcuQVVUSF9VUkx9L2xvZ2luL2Zvcm0/Y2xpZW50PSR7bXljb25maWcuQ0xJRU5UX05BTUV9KSBpbnZlY2UgY2hlIGxhIG51b3ZhICgke215Y29uZmlnLkFVVEhfVVJMfS9sb2dpbjtjbGllbnQ9JHtteWNvbmZpZy5DTElFTlRfTkFNRX0pICovXHJcbiAgICBsZWdhY3lMb2dpbj86IGJvb2xlYW47XHJcbiAgICAvKiBJbmRpY2Egc2UgaWwgc2Vydml6aW8gZGkgYXV0ZW50aWNhemlvbmUgZGV2ZSBmdW56aW9uYXJlIGluIGFub25pbW8gbGF0byBGcm9udGVuZC4gRGV2J2Vzc2VyZSB1dGlsaXp6YXRvIGluc2llbWUgYWwgdGFnIFwiQXV0aFwiIGluIGNvZGUgYmVoaW5kICovXHJcbiAgICBhbm9ueW1vdXNNb2RlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRGVidWdGbGFncyB7XHJcbiAgICBOb25lID0gMCxcclxuICAgIExvY2FsaXphdGlvbnMgPSAxIDw8IDAsXHJcbiAgICBFeHRlbnNpb25zID0gMSA8PCAxLFxyXG4gICAgQWNjZXNzQ29udHJvbCA9IDEgPDwgMixcclxuICAgIEh0dHAgPSAxIDw8IDMsXHJcbiAgICBTaWduYWxSID0gMSA8PCA0LFxyXG4gICAgUHJlZmVyZW5jZXMgPSAxIDw8IDUsXHJcbiAgICBDaGFydHMgPSAxIDw8IDYsXHJcbiAgICBUYWJiZXIgPSAxIDw8IDcsXHJcbiAgICBBbGwgPSB+KH4wIDw8IDgpXHJcbn0iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, ViewEncapsulation, Input, ViewChild, HostListener, Injectable, ChangeDetectionStrategy, Optional,
|
|
2
|
+
import { Component, ViewEncapsulation, Input, ViewChild, HostListener, Inject, Injectable, ChangeDetectionStrategy, Optional, EventEmitter, Output, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1$1 from '@angular/router';
|
|
4
4
|
import { NavigationEnd, RouterLink, RouterLinkActive, RouterOutlet, ActivatedRoute, Router, RouterModule } from '@angular/router';
|
|
5
5
|
import * as i2 from '@angular/common';
|
|
@@ -11,11 +11,11 @@ import { AppState } from '@esfaenza/core/services';
|
|
|
11
11
|
import * as i3 from '@angular/platform-browser';
|
|
12
12
|
import * as i4 from '@esfaenza/extensions';
|
|
13
13
|
import { AppEmbeddingExtensions, ExtensionsModule } from '@esfaenza/extensions';
|
|
14
|
+
import { ANONYMOUS_MODE, MENU_LOCALIZATION, MENU, ActiveModuleView, NAVBAR_EXTENSIONS, LOGIN_URL_LEGACY, USE_FAKE_ACCESS_TOKEN, REDIRECT_MAP, EMBEDDED_ROUTE, ROUTE, UpdatePasswordDto } from '@esfaenza/core/domain';
|
|
14
15
|
import * as i2$1 from '@esfaenza/httpservice';
|
|
15
16
|
import { __awaiter } from 'tslib';
|
|
16
17
|
import * as i1$2 from '@esfaenza/localizations';
|
|
17
18
|
import { LocalizationService, LocalizationModule } from '@esfaenza/localizations';
|
|
18
|
-
import { MENU_LOCALIZATION, MENU, ActiveModuleView, NAVBAR_EXTENSIONS, LOGIN_URL_LEGACY, USE_FAKE_ACCESS_TOKEN, REDIRECT_MAP, EMBEDDED_ROUTE, ROUTE, UpdatePasswordDto } from '@esfaenza/core/domain';
|
|
19
19
|
import { SlimScroll, ComponentHostDirective, EsModalDirective, Draggable, DirectivesModule } from '@esfaenza/core/directives';
|
|
20
20
|
import * as i7 from '@esfaenza/es-table';
|
|
21
21
|
import { EsTableColumnsDefinition, EsTableModule } from '@esfaenza/es-table';
|
|
@@ -153,9 +153,10 @@ class BreadcrumbItem {
|
|
|
153
153
|
|
|
154
154
|
// Angular
|
|
155
155
|
class PageNotFoundComponent {
|
|
156
|
-
constructor(router, _location, emb) {
|
|
156
|
+
constructor(router, _location, emb, ANONYMOUS_MODE) {
|
|
157
157
|
this._location = _location;
|
|
158
158
|
this.emb = emb;
|
|
159
|
+
this.ANONYMOUS_MODE = ANONYMOUS_MODE;
|
|
159
160
|
this.router = router;
|
|
160
161
|
}
|
|
161
162
|
goPreviousPage() {
|
|
@@ -169,20 +170,26 @@ class PageNotFoundComponent {
|
|
|
169
170
|
this.router.navigate([url]);
|
|
170
171
|
}
|
|
171
172
|
}
|
|
172
|
-
PageNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PageNotFoundComponent, deps: [{ token: i1$1.Router }, { token: i2.Location }, { token: i4.AppEmbeddingExtensions }], target: i0.ɵɵFactoryTarget.Component });
|
|
173
|
-
PageNotFoundComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: PageNotFoundComponent, isStandalone: true, selector: "pagenotfound", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\">404</h1>\r\n <h6 class=\"card-title\">La risorsa richiesta non è stata trovata ma in futuro potrebbe essere disponibile.</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", encapsulation: i0.ViewEncapsulation.None });
|
|
173
|
+
PageNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PageNotFoundComponent, deps: [{ token: i1$1.Router }, { token: i2.Location }, { token: i4.AppEmbeddingExtensions }, { token: ANONYMOUS_MODE }], target: i0.ɵɵFactoryTarget.Component });
|
|
174
|
+
PageNotFoundComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: PageNotFoundComponent, isStandalone: true, selector: "pagenotfound", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\">404</h1>\r\n <h6 class=\"card-title\">La risorsa richiesta non è stata trovata ma in futuro potrebbe essere disponibile.</h6>\r\n <div *ngIF=\"!ANONYMOUS_MODE\">\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", encapsulation: i0.ViewEncapsulation.None });
|
|
174
175
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PageNotFoundComponent, decorators: [{
|
|
175
176
|
type: Component,
|
|
176
|
-
args: [{ selector: "pagenotfound", encapsulation: ViewEncapsulation.None, standalone: true, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\">404</h1>\r\n <h6 class=\"card-title\">La risorsa richiesta non è stata trovata ma in futuro potrebbe essere disponibile.</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
|
|
177
|
-
}], ctorParameters: function () {
|
|
177
|
+
args: [{ selector: "pagenotfound", encapsulation: ViewEncapsulation.None, standalone: true, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\">404</h1>\r\n <h6 class=\"card-title\">La risorsa richiesta non è stata trovata ma in futuro potrebbe essere disponibile.</h6>\r\n <div *ngIF=\"!ANONYMOUS_MODE\">\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
|
|
178
|
+
}], ctorParameters: function () {
|
|
179
|
+
return [{ type: i1$1.Router }, { type: i2.Location }, { type: i4.AppEmbeddingExtensions }, { type: undefined, decorators: [{
|
|
180
|
+
type: Inject,
|
|
181
|
+
args: [ANONYMOUS_MODE]
|
|
182
|
+
}] }];
|
|
183
|
+
} });
|
|
178
184
|
|
|
179
185
|
// Angular
|
|
180
186
|
class ServerErrorComponent {
|
|
181
|
-
constructor(router, route, emb, as) {
|
|
187
|
+
constructor(router, route, emb, as, ANONYMOUS_MODE) {
|
|
182
188
|
this.router = router;
|
|
183
189
|
this.route = route;
|
|
184
190
|
this.emb = emb;
|
|
185
191
|
this.as = as;
|
|
192
|
+
this.ANONYMOUS_MODE = ANONYMOUS_MODE;
|
|
186
193
|
this.statusCode = this.route.snapshot.params["statusCode"];
|
|
187
194
|
this.statusText = this.b64DecodeUnicode(this.route.snapshot.params["statusText"]);
|
|
188
195
|
this.previousUrl = this.route.snapshot.params["fromUrl"];
|
|
@@ -204,21 +211,27 @@ class ServerErrorComponent {
|
|
|
204
211
|
this.router.navigate([url]);
|
|
205
212
|
}
|
|
206
213
|
}
|
|
207
|
-
ServerErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ServerErrorComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i4.AppEmbeddingExtensions }, { token: i1.AppState }], target: i0.ɵɵFactoryTarget.Component });
|
|
208
|
-
ServerErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ServerErrorComponent, isStandalone: true, selector: "servererror", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\" *ngIf=\"!statusCode\"> </h1>\r\n <h1 class=\"display-1\" *ngIf=\"statusCode\">{{statusCode}}</h1>\r\n <h6 class=\"card-title\" *ngIf=\"!statusText\"> </h6>\r\n <h6 class=\"card-title\" style=\"word-wrap:break-word; max-height: 500px; overflow: auto\" *ngIf=\"statusText\">{{statusText}}</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
214
|
+
ServerErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ServerErrorComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i4.AppEmbeddingExtensions }, { token: i1.AppState }, { token: ANONYMOUS_MODE }], target: i0.ɵɵFactoryTarget.Component });
|
|
215
|
+
ServerErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ServerErrorComponent, isStandalone: true, selector: "servererror", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\" *ngIf=\"!statusCode\"> </h1>\r\n <h1 class=\"display-1\" *ngIf=\"statusCode\">{{statusCode}}</h1>\r\n <h6 class=\"card-title\" *ngIf=\"!statusText\"> </h6>\r\n <h6 class=\"card-title\" style=\"word-wrap:break-word; max-height: 500px; overflow: auto\" *ngIf=\"statusText\">{{statusText}}</h6>\r\n <div *ngIF=\"!ANONYMOUS_MODE\">\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
209
216
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ServerErrorComponent, decorators: [{
|
|
210
217
|
type: Component,
|
|
211
|
-
args: [{ selector: "servererror", encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf], template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\" *ngIf=\"!statusCode\"> </h1>\r\n <h1 class=\"display-1\" *ngIf=\"statusCode\">{{statusCode}}</h1>\r\n <h6 class=\"card-title\" *ngIf=\"!statusText\"> </h6>\r\n <h6 class=\"card-title\" style=\"word-wrap:break-word; max-height: 500px; overflow: auto\" *ngIf=\"statusText\">{{statusText}}</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
|
|
212
|
-
}], ctorParameters: function () {
|
|
218
|
+
args: [{ selector: "servererror", encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf], template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\" *ngIf=\"!statusCode\"> </h1>\r\n <h1 class=\"display-1\" *ngIf=\"statusCode\">{{statusCode}}</h1>\r\n <h6 class=\"card-title\" *ngIf=\"!statusText\"> </h6>\r\n <h6 class=\"card-title\" style=\"word-wrap:break-word; max-height: 500px; overflow: auto\" *ngIf=\"statusText\">{{statusText}}</h6>\r\n <div *ngIF=\"!ANONYMOUS_MODE\">\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
|
|
219
|
+
}], ctorParameters: function () {
|
|
220
|
+
return [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i4.AppEmbeddingExtensions }, { type: i1.AppState }, { type: undefined, decorators: [{
|
|
221
|
+
type: Inject,
|
|
222
|
+
args: [ANONYMOUS_MODE]
|
|
223
|
+
}] }];
|
|
224
|
+
} });
|
|
213
225
|
|
|
214
226
|
// Angular
|
|
215
227
|
class AngularErrorComponent {
|
|
216
|
-
constructor(router, route, http, bts, emb) {
|
|
228
|
+
constructor(router, route, http, bts, emb, ANONYMOUS_MODE) {
|
|
217
229
|
this.router = router;
|
|
218
230
|
this.route = route;
|
|
219
231
|
this.http = http;
|
|
220
232
|
this.bts = bts;
|
|
221
233
|
this.emb = emb;
|
|
234
|
+
this.ANONYMOUS_MODE = ANONYMOUS_MODE;
|
|
222
235
|
let identity = this.bts.getJaceIdentity();
|
|
223
236
|
this.previousUrl = this.route.snapshot.params["fromUrl"];
|
|
224
237
|
let calls = (this.http.LastThreeCompletedCalls[0] || "<empty>") + ", " + (this.http.LastThreeCompletedCalls[1] || "<empty>") + ", " + (this.http.LastThreeCompletedCalls[2] || "<empty>");
|
|
@@ -253,12 +266,17 @@ class AngularErrorComponent {
|
|
|
253
266
|
this.router.navigate([url]);
|
|
254
267
|
}
|
|
255
268
|
}
|
|
256
|
-
AngularErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AngularErrorComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i2$1.HTTPService }, { token: i1.TokenService }, { token: i4.AppEmbeddingExtensions }], target: i0.ɵɵFactoryTarget.Component });
|
|
257
|
-
AngularErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AngularErrorComponent, isStandalone: true, selector: "angularerror", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-8 col-md-10 col-10 offset-xl-2 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-4\">Qualcosa è andato storto.</h1>\r\n <h6>\r\n <small>\r\n Si è verificato un errore interno all'applicazione. Questo non dovrebbe accadere. Prova a ricaricare la pagina precedente e rieffettuare le stesse operazioni, se il problema persiste contatta il service desk allegando una breve descrizione delle operazioni che stavi eseguendo e questo messaggio d'errore:\r\n </small>\r\n </h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"identityInfos\"><em>{{identityInfos}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorFrom\"><em>{{errorFrom}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorLastCalls\"><em>{{errorLastCalls}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorMessage\"><em>{{errorMessage}}</em></h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right app-margin-right-10\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
269
|
+
AngularErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AngularErrorComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i2$1.HTTPService }, { token: i1.TokenService }, { token: i4.AppEmbeddingExtensions }, { token: ANONYMOUS_MODE }], target: i0.ɵɵFactoryTarget.Component });
|
|
270
|
+
AngularErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AngularErrorComponent, isStandalone: true, selector: "angularerror", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-8 col-md-10 col-10 offset-xl-2 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-4\">Qualcosa è andato storto.</h1>\r\n <h6>\r\n <small>\r\n Si è verificato un errore interno all'applicazione. Questo non dovrebbe accadere. Prova a ricaricare la pagina precedente e rieffettuare le stesse operazioni, se il problema persiste contatta il service desk allegando una breve descrizione delle operazioni che stavi eseguendo e questo messaggio d'errore:\r\n </small>\r\n </h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"identityInfos\"><em>{{identityInfos}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorFrom\"><em>{{errorFrom}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorLastCalls\"><em>{{errorLastCalls}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorMessage\"><em>{{errorMessage}}</em></h6>\r\n <div *ngIF=\"!ANONYMOUS_MODE\">\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right app-margin-right-10\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
258
271
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AngularErrorComponent, decorators: [{
|
|
259
272
|
type: Component,
|
|
260
|
-
args: [{ selector: "angularerror", encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf], template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-8 col-md-10 col-10 offset-xl-2 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-4\">Qualcosa è andato storto.</h1>\r\n <h6>\r\n <small>\r\n Si è verificato un errore interno all'applicazione. Questo non dovrebbe accadere. Prova a ricaricare la pagina precedente e rieffettuare le stesse operazioni, se il problema persiste contatta il service desk allegando una breve descrizione delle operazioni che stavi eseguendo e questo messaggio d'errore:\r\n </small>\r\n </h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"identityInfos\"><em>{{identityInfos}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorFrom\"><em>{{errorFrom}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorLastCalls\"><em>{{errorLastCalls}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorMessage\"><em>{{errorMessage}}</em></h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right app-margin-right-10\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
|
|
261
|
-
}], ctorParameters: function () {
|
|
273
|
+
args: [{ selector: "angularerror", encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf], template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-8 col-md-10 col-10 offset-xl-2 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-4\">Qualcosa è andato storto.</h1>\r\n <h6>\r\n <small>\r\n Si è verificato un errore interno all'applicazione. Questo non dovrebbe accadere. Prova a ricaricare la pagina precedente e rieffettuare le stesse operazioni, se il problema persiste contatta il service desk allegando una breve descrizione delle operazioni che stavi eseguendo e questo messaggio d'errore:\r\n </small>\r\n </h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"identityInfos\"><em>{{identityInfos}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorFrom\"><em>{{errorFrom}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorLastCalls\"><em>{{errorLastCalls}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorMessage\"><em>{{errorMessage}}</em></h6>\r\n <div *ngIF=\"!ANONYMOUS_MODE\">\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right app-margin-right-10\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
|
|
274
|
+
}], ctorParameters: function () {
|
|
275
|
+
return [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i2$1.HTTPService }, { type: i1.TokenService }, { type: i4.AppEmbeddingExtensions }, { type: undefined, decorators: [{
|
|
276
|
+
type: Inject,
|
|
277
|
+
args: [ANONYMOUS_MODE]
|
|
278
|
+
}] }];
|
|
279
|
+
} });
|
|
262
280
|
|
|
263
281
|
class SideBarLoc extends LocalizationService {
|
|
264
282
|
constructor(injector) {
|
|
@@ -636,7 +654,7 @@ const GET_Cache_ClearAllCaches = "/api/Cache/ClearAllCaches";
|
|
|
636
654
|
const GET_Cache_ClearAllClientsCaches = "/api/Cache/ClearAllClientsCaches";
|
|
637
655
|
const GET_Cache_ClearAllClientsPreferences = "/api/Cache/ClearAllClientsPreferences";
|
|
638
656
|
class Navbar extends ReactiveComponent {
|
|
639
|
-
constructor(prefsService, cacheService, MessageDef, notifications, msgExts, lc, http, cdr, _state, sr, router, cjrService, extensionComponents, loginUrlLegacy, fakeToken) {
|
|
657
|
+
constructor(prefsService, cacheService, MessageDef, notifications, msgExts, lc, http, cdr, _state, sr, router, cjrService, extensionComponents, loginUrlLegacy, fakeToken, ANONYMOUS_MODE) {
|
|
640
658
|
super();
|
|
641
659
|
this.prefsService = prefsService;
|
|
642
660
|
this.cacheService = cacheService;
|
|
@@ -653,6 +671,7 @@ class Navbar extends ReactiveComponent {
|
|
|
653
671
|
this.extensionComponents = extensionComponents;
|
|
654
672
|
this.loginUrlLegacy = loginUrlLegacy;
|
|
655
673
|
this.fakeToken = fakeToken;
|
|
674
|
+
this.ANONYMOUS_MODE = ANONYMOUS_MODE;
|
|
656
675
|
this.applicationVersion = myconfig.AppData.ComponentVersion;
|
|
657
676
|
this.applicationEnvironment = myconfig.AppData.ComponentEnvironment;
|
|
658
677
|
this.isMenuCollapsed = false;
|
|
@@ -798,11 +817,11 @@ class Navbar extends ReactiveComponent {
|
|
|
798
817
|
this.cjrService.redirect(job);
|
|
799
818
|
}
|
|
800
819
|
}
|
|
801
|
-
Navbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Navbar, deps: [{ token: i1$3.PreferencesService }, { token: i1$3.CacheService }, { token: i2$2.BaseMessageService }, { token: i2$2.NotificationsService }, { token: i4.MessageService }, { token: i1$2.LocalizationService }, { token: i2$1.HTTPService }, { token: i0.ChangeDetectorRef }, { token: i1.AppState }, { token: i1.TokenService }, { token: i1$1.Router }, { token: i1.CompletedJobRedirectionService }, { token: NAVBAR_EXTENSIONS }, { token: LOGIN_URL_LEGACY }, { token: USE_FAKE_ACCESS_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
|
|
802
|
-
Navbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Navbar, isStandalone: true, selector: "navbar", viewQueries: [{ propertyName: "navbar", first: true, predicate: ["navbar"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nav #navbar class=\"nav enuma-navbar\">\r\n <div class=\"d-flex\" style=\"width: 100%;\">\r\n <!-- Collapse men\u00F9 a sinistra -->\r\n <div><a (click)=\"toggleMenu()\" class=\"far fa-bars nav-icon app-padding-left-15\" style=\"padding-top: 8px;\"></a></div>\r\n\r\n <!-- Breadcrumb -->\r\n <div class=\"app-padding-left-15\" style=\"padding-top: 8px;\"><ng-content></ng-content></div>\r\n\r\n <div style=\"margin-left: auto; display: flex;\">\r\n <!--Notifications (Jobs)-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <div *ngIf=\"_state.jobsInProgress > 0\" class=\"fa-beat-fade nav-jobs-icon-notification\"></div>\r\n <a [class.fa-shake]=\"_state.jobsInProgress > 0\" class=\"far fa-bell module-nav-menu-link dropdown-toggle app-pointer\" style=\"--fa-animation-duration: 3s; --fa-animation-iteration-count: 1;\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span style=\"margin-right: auto;\">{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n <span class=\"m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\" class=\"app-link app-no-selection app-inline app-pointer\" (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{'Completed' | localize : lc}}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\" [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\" [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n \r\n <!--Other Modules-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-cubes module-nav-menu-link dropdown-toggle app-pointer\" (click)=\"goToDashboard()\"></a>\r\n </div>\r\n\r\n <!--Quick Actions-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-folder-gear module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"d-flex dropdown-title-bg\">\r\n <div class=\"dropdown-title\">Gestisci Cache Utente</div>\r\n </li>\r\n <li class=\"dropdown-top\"></li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\">\r\n <i class=\"far fa-user-times app-margin-right-10\"></i>{{'Ripulisci le Preferenze Utente' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearAll()\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache' | localize : lc}}\r\n </li>\r\n <li *ac=\"'R:Jace Admin'\" class=\"dropdown-item app-pointer\" (click)=\"forceClearConnectedClientAssets('cache')\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache di tutti' | localize : lc}}\r\n </li>\r\n <li *ac=\"'R:Jace Admin'\" class=\"dropdown-item app-pointer\" (click)=\"forceClearConnectedClientAssets('preferences')\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci le Preferenze di tutti' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-bot\"></li>\r\n </ul>\r\n </div>\r\n \r\n <!--Punti di estensione per Calendar, Chatroom e chi pi\u00F9 ne ha pi\u00F9 ne metta...-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" *ngFor=\"let comp of extensionComponents\">\r\n <ng-template [componentHost]=\"comp\"></ng-template>\r\n </div>\r\n </div>\r\n\r\n <!--Ambiente-->\r\n <div>\r\n <div class=\"nav-environment app-no-selection\">\r\n <ng-container *ngIf=\"['Dev', 2].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevA', 3].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevB', 4].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo B' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Stage', 5].includes(applicationEnvironment)\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['StageA', 6].includes(applicationEnvironment)\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Prod', 1].includes(applicationEnvironment)\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n </div>\r\n </div>\r\n\r\n <!--Debugging ruoli e permessi-->\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity?.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity?.Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n</nav>\r\n\r\n<!-- Template per l'icona dell'utente -->\r\n<ng-template #userIcon let-context>\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context?.right || undefined\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context?.right || undefined\" *ngIf=\"_state.halloweenTime\">\r\n</ng-template>\r\n\r\n<!-- Template per le informaizoni di debug: Ambiente, ruoli, permessi ecc -->\r\n<ng-template #debugInfos>\r\n <div>{{CurrentIdentity?.FullName}} - ({{CurrentIdentity?.TenantName}})</div>\r\n <div hidden>{{applicationEnvironment}}</div>\r\n <div class=\"text-sm-center\">\r\n <ng-container *ngIf=\"['Dev', 2].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevA', 3].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevB', 4].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo B' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Stage', 5].includes(applicationEnvironment)\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['StageA', 6].includes(applicationEnvironment)\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Prod', 1].includes(applicationEnvironment)\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n </div>\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity?.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity?.Roles\">{{r}}</div>\r\n </div>\r\n</ng-template>", styles: [".nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-icon-notification{top:7px;left:-7px;position:absolute;background-color:#0056b3;border-radius:50%;height:8px;width:8px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #3e4d64}.nav-jobs-menu-header{background-color:#344154;padding:8px;font-size:14px;margin-top:-5px;margin-left:-5px;margin-right:-5px;display:flex}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#024a88}.user-menu .dropdown-menu a:hover{color:#fff8a9;background-color:red}.user-menu .dropdown-menu a i{margin-right:8px}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 11px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:8px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.dropdown-title-bg{background-color:#344154;border:1px solid #3e4d64;border-bottom:0px}.dropdown-title{color:#fff;margin:auto;padding:8px 0;font-size:18px}.dropdown-menu{background-color:#fff;border:none}.dropdown-divider{border-top:1px solid #eeeeee}.dropdown-item{background-color:#fff;color:#0056b3}.dropdown-item:hover{color:#004a9a!important;background-color:#eee}.dropdown-top{background-color:#fff;height:0;margin-bottom:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.dropdown-bot{background-color:#fff;height:0;margin-top:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.enuma-navbar{height:60px;align-items:center;background-color:#2a3544;box-shadow:0 8px 6px -6px #1313130a,0 12px 16px -16px #1313130d;margin-bottom:-1px;border-bottom:1px solid #191E29}.nav-environment{color:#fff;background-color:#3e4d64;text-align:center;padding:5px 10px;margin:2px 10px 0 0}.nav-icon{color:#fff!important;font-size:20px;cursor:pointer}.nav-right-section{position:absolute;right:10px;top:10px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i9.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i9.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i9.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i10.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ProgressbarModule }, { kind: "component", type: i11.ProgressbarComponent, selector: "progressbar", inputs: ["max", "animate", "striped", "type", "value"] }, { kind: "directive", type: ComponentHostDirective, selector: "[componentHost]", inputs: ["componentHost", "Inputs"] }, { kind: "ngmodule", type: EsTableModule }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$2.LocalizePipe, name: "localize" }, { kind: "ngmodule", type: AccessControlModule }, { kind: "directive", type: i5.AccessControlDirective, selector: "[ac]", inputs: ["ac", "acAbsolute"] }], viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
820
|
+
Navbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Navbar, deps: [{ token: i1$3.PreferencesService }, { token: i1$3.CacheService }, { token: i2$2.BaseMessageService }, { token: i2$2.NotificationsService }, { token: i4.MessageService }, { token: i1$2.LocalizationService }, { token: i2$1.HTTPService }, { token: i0.ChangeDetectorRef }, { token: i1.AppState }, { token: i1.TokenService }, { token: i1$1.Router }, { token: i1.CompletedJobRedirectionService }, { token: NAVBAR_EXTENSIONS }, { token: LOGIN_URL_LEGACY }, { token: USE_FAKE_ACCESS_TOKEN }, { token: ANONYMOUS_MODE }], target: i0.ɵɵFactoryTarget.Component });
|
|
821
|
+
Navbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Navbar, isStandalone: true, selector: "navbar", viewQueries: [{ propertyName: "navbar", first: true, predicate: ["navbar"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nav #navbar class=\"nav enuma-navbar\">\r\n <div class=\"d-flex\" style=\"width: 100%;\">\r\n <!-- Collapse men\u00F9 a sinistra -->\r\n <div><a (click)=\"toggleMenu()\" class=\"far fa-bars nav-icon app-padding-left-15\" style=\"padding-top: 8px;\"></a></div>\r\n\r\n <!-- Breadcrumb -->\r\n <div class=\"app-padding-left-15\" style=\"padding-top: 8px;\"><ng-content></ng-content></div>\r\n\r\n <div style=\"margin-left: auto; display: flex;\">\r\n <!--Notifications (Jobs)-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <div *ngIf=\"_state.jobsInProgress > 0\" class=\"fa-beat-fade nav-jobs-icon-notification\"></div>\r\n <a [class.fa-shake]=\"_state.jobsInProgress > 0\" class=\"far fa-bell module-nav-menu-link dropdown-toggle app-pointer\" style=\"--fa-animation-duration: 3s; --fa-animation-iteration-count: 1;\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span style=\"margin-right: auto;\">{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n <span class=\"m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\" class=\"app-link app-no-selection app-inline app-pointer\" (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{'Completed' | localize : lc}}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\" [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\" [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n \r\n <!--Other Modules-->\r\n <div *ngIf=\"!ANONYMOUS_MODE\" class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-cubes module-nav-menu-link dropdown-toggle app-pointer\" (click)=\"goToDashboard()\"></a>\r\n </div>\r\n\r\n <!--Quick Actions-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-folder-gear module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"d-flex dropdown-title-bg\">\r\n <div class=\"dropdown-title\">Gestisci Cache Utente</div>\r\n </li>\r\n <li class=\"dropdown-top\"></li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\">\r\n <i class=\"far fa-user-times app-margin-right-10\"></i>{{'Ripulisci le Preferenze Utente' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearAll()\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache' | localize : lc}}\r\n </li>\r\n <li *ac=\"'R:Jace Admin'\" class=\"dropdown-item app-pointer\" (click)=\"forceClearConnectedClientAssets('cache')\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache di tutti' | localize : lc}}\r\n </li>\r\n <li *ac=\"'R:Jace Admin'\" class=\"dropdown-item app-pointer\" (click)=\"forceClearConnectedClientAssets('preferences')\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci le Preferenze di tutti' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-bot\"></li>\r\n </ul>\r\n </div>\r\n \r\n <!--Punti di estensione per Calendar, Chatroom e chi pi\u00F9 ne ha pi\u00F9 ne metta...-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" *ngFor=\"let comp of extensionComponents\">\r\n <ng-template [componentHost]=\"comp\"></ng-template>\r\n </div>\r\n </div>\r\n\r\n <!--Ambiente-->\r\n <div>\r\n <div class=\"nav-environment app-no-selection\">\r\n <ng-container *ngIf=\"['Dev', 2].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevA', 3].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevB', 4].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo B' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Stage', 5].includes(applicationEnvironment)\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['StageA', 6].includes(applicationEnvironment)\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Prod', 1].includes(applicationEnvironment)\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n </div>\r\n </div>\r\n\r\n <!--Debugging ruoli e permessi-->\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity?.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity?.Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n</nav>\r\n\r\n<!-- Template per l'icona dell'utente -->\r\n<ng-template #userIcon let-context>\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context?.right || undefined\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context?.right || undefined\" *ngIf=\"_state.halloweenTime\">\r\n</ng-template>\r\n\r\n<!-- Template per le informaizoni di debug: Ambiente, ruoli, permessi ecc -->\r\n<ng-template #debugInfos>\r\n <div>{{CurrentIdentity?.FullName}} - ({{CurrentIdentity?.TenantName}})</div>\r\n <div hidden>{{applicationEnvironment}}</div>\r\n <div class=\"text-sm-center\">\r\n <ng-container *ngIf=\"['Dev', 2].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevA', 3].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevB', 4].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo B' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Stage', 5].includes(applicationEnvironment)\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['StageA', 6].includes(applicationEnvironment)\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Prod', 1].includes(applicationEnvironment)\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n </div>\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity?.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity?.Roles\">{{r}}</div>\r\n </div>\r\n</ng-template>", styles: [".nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-icon-notification{top:7px;left:-7px;position:absolute;background-color:#0056b3;border-radius:50%;height:8px;width:8px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #3e4d64}.nav-jobs-menu-header{background-color:#344154;padding:8px;font-size:14px;margin-top:-5px;margin-left:-5px;margin-right:-5px;display:flex}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#024a88}.user-menu .dropdown-menu a:hover{color:#fff8a9;background-color:red}.user-menu .dropdown-menu a i{margin-right:8px}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 11px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:8px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.dropdown-title-bg{background-color:#344154;border:1px solid #3e4d64;border-bottom:0px}.dropdown-title{color:#fff;margin:auto;padding:8px 0;font-size:18px}.dropdown-menu{background-color:#fff;border:none}.dropdown-divider{border-top:1px solid #eeeeee}.dropdown-item{background-color:#fff;color:#0056b3}.dropdown-item:hover{color:#004a9a!important;background-color:#eee}.dropdown-top{background-color:#fff;height:0;margin-bottom:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.dropdown-bot{background-color:#fff;height:0;margin-top:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.enuma-navbar{height:60px;align-items:center;background-color:#2a3544;box-shadow:0 8px 6px -6px #1313130a,0 12px 16px -16px #1313130d;margin-bottom:-1px;border-bottom:1px solid #191E29}.nav-environment{color:#fff;background-color:#3e4d64;text-align:center;padding:5px 10px;margin:2px 10px 0 0}.nav-icon{color:#fff!important;font-size:20px;cursor:pointer}.nav-right-section{position:absolute;right:10px;top:10px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i9.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i9.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i9.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i10.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ProgressbarModule }, { kind: "component", type: i11.ProgressbarComponent, selector: "progressbar", inputs: ["max", "animate", "striped", "type", "value"] }, { kind: "directive", type: ComponentHostDirective, selector: "[componentHost]", inputs: ["componentHost", "Inputs"] }, { kind: "ngmodule", type: EsTableModule }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$2.LocalizePipe, name: "localize" }, { kind: "ngmodule", type: AccessControlModule }, { kind: "directive", type: i5.AccessControlDirective, selector: "[ac]", inputs: ["ac", "acAbsolute"] }], viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
803
822
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Navbar, decorators: [{
|
|
804
823
|
type: Component,
|
|
805
|
-
args: [{ selector: "navbar", viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FormsModule, BsDropdownModule, MatSlideToggleModule, NgIf, NgFor, ProgressbarModule, ComponentHostDirective, EsTableModule, LocalizationModule, AccessControlModule], template: "<nav #navbar class=\"nav enuma-navbar\">\r\n <div class=\"d-flex\" style=\"width: 100%;\">\r\n <!-- Collapse men\u00F9 a sinistra -->\r\n <div><a (click)=\"toggleMenu()\" class=\"far fa-bars nav-icon app-padding-left-15\" style=\"padding-top: 8px;\"></a></div>\r\n\r\n <!-- Breadcrumb -->\r\n <div class=\"app-padding-left-15\" style=\"padding-top: 8px;\"><ng-content></ng-content></div>\r\n\r\n <div style=\"margin-left: auto; display: flex;\">\r\n <!--Notifications (Jobs)-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <div *ngIf=\"_state.jobsInProgress > 0\" class=\"fa-beat-fade nav-jobs-icon-notification\"></div>\r\n <a [class.fa-shake]=\"_state.jobsInProgress > 0\" class=\"far fa-bell module-nav-menu-link dropdown-toggle app-pointer\" style=\"--fa-animation-duration: 3s; --fa-animation-iteration-count: 1;\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span style=\"margin-right: auto;\">{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n <span class=\"m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\" class=\"app-link app-no-selection app-inline app-pointer\" (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{'Completed' | localize : lc}}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\" [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\" [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n \r\n <!--Other Modules-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-cubes module-nav-menu-link dropdown-toggle app-pointer\" (click)=\"goToDashboard()\"></a>\r\n </div>\r\n\r\n <!--Quick Actions-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-folder-gear module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"d-flex dropdown-title-bg\">\r\n <div class=\"dropdown-title\">Gestisci Cache Utente</div>\r\n </li>\r\n <li class=\"dropdown-top\"></li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\">\r\n <i class=\"far fa-user-times app-margin-right-10\"></i>{{'Ripulisci le Preferenze Utente' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearAll()\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache' | localize : lc}}\r\n </li>\r\n <li *ac=\"'R:Jace Admin'\" class=\"dropdown-item app-pointer\" (click)=\"forceClearConnectedClientAssets('cache')\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache di tutti' | localize : lc}}\r\n </li>\r\n <li *ac=\"'R:Jace Admin'\" class=\"dropdown-item app-pointer\" (click)=\"forceClearConnectedClientAssets('preferences')\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci le Preferenze di tutti' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-bot\"></li>\r\n </ul>\r\n </div>\r\n \r\n <!--Punti di estensione per Calendar, Chatroom e chi pi\u00F9 ne ha pi\u00F9 ne metta...-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" *ngFor=\"let comp of extensionComponents\">\r\n <ng-template [componentHost]=\"comp\"></ng-template>\r\n </div>\r\n </div>\r\n\r\n <!--Ambiente-->\r\n <div>\r\n <div class=\"nav-environment app-no-selection\">\r\n <ng-container *ngIf=\"['Dev', 2].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevA', 3].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevB', 4].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo B' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Stage', 5].includes(applicationEnvironment)\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['StageA', 6].includes(applicationEnvironment)\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Prod', 1].includes(applicationEnvironment)\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n </div>\r\n </div>\r\n\r\n <!--Debugging ruoli e permessi-->\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity?.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity?.Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n</nav>\r\n\r\n<!-- Template per l'icona dell'utente -->\r\n<ng-template #userIcon let-context>\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context?.right || undefined\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context?.right || undefined\" *ngIf=\"_state.halloweenTime\">\r\n</ng-template>\r\n\r\n<!-- Template per le informaizoni di debug: Ambiente, ruoli, permessi ecc -->\r\n<ng-template #debugInfos>\r\n <div>{{CurrentIdentity?.FullName}} - ({{CurrentIdentity?.TenantName}})</div>\r\n <div hidden>{{applicationEnvironment}}</div>\r\n <div class=\"text-sm-center\">\r\n <ng-container *ngIf=\"['Dev', 2].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevA', 3].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevB', 4].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo B' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Stage', 5].includes(applicationEnvironment)\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['StageA', 6].includes(applicationEnvironment)\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Prod', 1].includes(applicationEnvironment)\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n </div>\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity?.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity?.Roles\">{{r}}</div>\r\n </div>\r\n</ng-template>", styles: [".nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-icon-notification{top:7px;left:-7px;position:absolute;background-color:#0056b3;border-radius:50%;height:8px;width:8px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #3e4d64}.nav-jobs-menu-header{background-color:#344154;padding:8px;font-size:14px;margin-top:-5px;margin-left:-5px;margin-right:-5px;display:flex}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#024a88}.user-menu .dropdown-menu a:hover{color:#fff8a9;background-color:red}.user-menu .dropdown-menu a i{margin-right:8px}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 11px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:8px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.dropdown-title-bg{background-color:#344154;border:1px solid #3e4d64;border-bottom:0px}.dropdown-title{color:#fff;margin:auto;padding:8px 0;font-size:18px}.dropdown-menu{background-color:#fff;border:none}.dropdown-divider{border-top:1px solid #eeeeee}.dropdown-item{background-color:#fff;color:#0056b3}.dropdown-item:hover{color:#004a9a!important;background-color:#eee}.dropdown-top{background-color:#fff;height:0;margin-bottom:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.dropdown-bot{background-color:#fff;height:0;margin-top:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.enuma-navbar{height:60px;align-items:center;background-color:#2a3544;box-shadow:0 8px 6px -6px #1313130a,0 12px 16px -16px #1313130d;margin-bottom:-1px;border-bottom:1px solid #191E29}.nav-environment{color:#fff;background-color:#3e4d64;text-align:center;padding:5px 10px;margin:2px 10px 0 0}.nav-icon{color:#fff!important;font-size:20px;cursor:pointer}.nav-right-section{position:absolute;right:10px;top:10px}\n"] }]
|
|
824
|
+
args: [{ selector: "navbar", viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FormsModule, BsDropdownModule, MatSlideToggleModule, NgIf, NgFor, ProgressbarModule, ComponentHostDirective, EsTableModule, LocalizationModule, AccessControlModule], template: "<nav #navbar class=\"nav enuma-navbar\">\r\n <div class=\"d-flex\" style=\"width: 100%;\">\r\n <!-- Collapse men\u00F9 a sinistra -->\r\n <div><a (click)=\"toggleMenu()\" class=\"far fa-bars nav-icon app-padding-left-15\" style=\"padding-top: 8px;\"></a></div>\r\n\r\n <!-- Breadcrumb -->\r\n <div class=\"app-padding-left-15\" style=\"padding-top: 8px;\"><ng-content></ng-content></div>\r\n\r\n <div style=\"margin-left: auto; display: flex;\">\r\n <!--Notifications (Jobs)-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <div *ngIf=\"_state.jobsInProgress > 0\" class=\"fa-beat-fade nav-jobs-icon-notification\"></div>\r\n <a [class.fa-shake]=\"_state.jobsInProgress > 0\" class=\"far fa-bell module-nav-menu-link dropdown-toggle app-pointer\" style=\"--fa-animation-duration: 3s; --fa-animation-iteration-count: 1;\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span style=\"margin-right: auto;\">{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n <span class=\"m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\" class=\"app-link app-no-selection app-inline app-pointer\" (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{'Completed' | localize : lc}}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\" [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\" [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n \r\n <!--Other Modules-->\r\n <div *ngIf=\"!ANONYMOUS_MODE\" class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-cubes module-nav-menu-link dropdown-toggle app-pointer\" (click)=\"goToDashboard()\"></a>\r\n </div>\r\n\r\n <!--Quick Actions-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-folder-gear module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"d-flex dropdown-title-bg\">\r\n <div class=\"dropdown-title\">Gestisci Cache Utente</div>\r\n </li>\r\n <li class=\"dropdown-top\"></li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\">\r\n <i class=\"far fa-user-times app-margin-right-10\"></i>{{'Ripulisci le Preferenze Utente' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearAll()\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache' | localize : lc}}\r\n </li>\r\n <li *ac=\"'R:Jace Admin'\" class=\"dropdown-item app-pointer\" (click)=\"forceClearConnectedClientAssets('cache')\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache di tutti' | localize : lc}}\r\n </li>\r\n <li *ac=\"'R:Jace Admin'\" class=\"dropdown-item app-pointer\" (click)=\"forceClearConnectedClientAssets('preferences')\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci le Preferenze di tutti' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-bot\"></li>\r\n </ul>\r\n </div>\r\n \r\n <!--Punti di estensione per Calendar, Chatroom e chi pi\u00F9 ne ha pi\u00F9 ne metta...-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" *ngFor=\"let comp of extensionComponents\">\r\n <ng-template [componentHost]=\"comp\"></ng-template>\r\n </div>\r\n </div>\r\n\r\n <!--Ambiente-->\r\n <div>\r\n <div class=\"nav-environment app-no-selection\">\r\n <ng-container *ngIf=\"['Dev', 2].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevA', 3].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevB', 4].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo B' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Stage', 5].includes(applicationEnvironment)\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['StageA', 6].includes(applicationEnvironment)\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Prod', 1].includes(applicationEnvironment)\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n </div>\r\n </div>\r\n\r\n <!--Debugging ruoli e permessi-->\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity?.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity?.Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n</nav>\r\n\r\n<!-- Template per l'icona dell'utente -->\r\n<ng-template #userIcon let-context>\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context?.right || undefined\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context?.right || undefined\" *ngIf=\"_state.halloweenTime\">\r\n</ng-template>\r\n\r\n<!-- Template per le informaizoni di debug: Ambiente, ruoli, permessi ecc -->\r\n<ng-template #debugInfos>\r\n <div>{{CurrentIdentity?.FullName}} - ({{CurrentIdentity?.TenantName}})</div>\r\n <div hidden>{{applicationEnvironment}}</div>\r\n <div class=\"text-sm-center\">\r\n <ng-container *ngIf=\"['Dev', 2].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevA', 3].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['DevB', 4].includes(applicationEnvironment)\">{{'Ambiente di Sviluppo B' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Stage', 5].includes(applicationEnvironment)\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['StageA', 6].includes(applicationEnvironment)\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"['Prod', 1].includes(applicationEnvironment)\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n </div>\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity?.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity?.Roles\">{{r}}</div>\r\n </div>\r\n</ng-template>", styles: [".nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-icon-notification{top:7px;left:-7px;position:absolute;background-color:#0056b3;border-radius:50%;height:8px;width:8px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #3e4d64}.nav-jobs-menu-header{background-color:#344154;padding:8px;font-size:14px;margin-top:-5px;margin-left:-5px;margin-right:-5px;display:flex}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#024a88}.user-menu .dropdown-menu a:hover{color:#fff8a9;background-color:red}.user-menu .dropdown-menu a i{margin-right:8px}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 11px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:8px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.dropdown-title-bg{background-color:#344154;border:1px solid #3e4d64;border-bottom:0px}.dropdown-title{color:#fff;margin:auto;padding:8px 0;font-size:18px}.dropdown-menu{background-color:#fff;border:none}.dropdown-divider{border-top:1px solid #eeeeee}.dropdown-item{background-color:#fff;color:#0056b3}.dropdown-item:hover{color:#004a9a!important;background-color:#eee}.dropdown-top{background-color:#fff;height:0;margin-bottom:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.dropdown-bot{background-color:#fff;height:0;margin-top:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.enuma-navbar{height:60px;align-items:center;background-color:#2a3544;box-shadow:0 8px 6px -6px #1313130a,0 12px 16px -16px #1313130d;margin-bottom:-1px;border-bottom:1px solid #191E29}.nav-environment{color:#fff;background-color:#3e4d64;text-align:center;padding:5px 10px;margin:2px 10px 0 0}.nav-icon{color:#fff!important;font-size:20px;cursor:pointer}.nav-right-section{position:absolute;right:10px;top:10px}\n"] }]
|
|
806
825
|
}], ctorParameters: function () {
|
|
807
826
|
return [{ type: i1$3.PreferencesService }, { type: i1$3.CacheService }, { type: i2$2.BaseMessageService }, { type: i2$2.NotificationsService }, { type: i4.MessageService }, { type: i1$2.LocalizationService }, { type: i2$1.HTTPService }, { type: i0.ChangeDetectorRef }, { type: i1.AppState }, { type: i1.TokenService }, { type: i1$1.Router }, { type: i1.CompletedJobRedirectionService }, { type: undefined, decorators: [{
|
|
808
827
|
type: Inject,
|
|
@@ -813,6 +832,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
813
832
|
}] }, { type: undefined, decorators: [{
|
|
814
833
|
type: Inject,
|
|
815
834
|
args: [USE_FAKE_ACCESS_TOKEN]
|
|
835
|
+
}] }, { type: undefined, decorators: [{
|
|
836
|
+
type: Inject,
|
|
837
|
+
args: [ANONYMOUS_MODE]
|
|
816
838
|
}] }];
|
|
817
839
|
}, propDecorators: { navbar: [{
|
|
818
840
|
type: ViewChild,
|