@saritasa/crm-delmar-core-sdk 0.0.198 → 0.0.200
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/README.md +2 -2
- package/api/branch-periods-api.service.d.ts +4 -9
- package/api/branches-api.service.d.ts +4 -9
- package/api/client-notes-api.service.d.ts +4 -9
- package/api/clients-api.service.d.ts +4 -9
- package/api/components-api.service.d.ts +4 -9
- package/api/departments-api.service.d.ts +4 -9
- package/api/dismissal-reasons-api.service.d.ts +4 -9
- package/api/export-job-reports-departments-api.service.d.ts +4 -9
- package/api/export-job-reports-departments-api.serviceInterface.d.ts +2 -0
- package/api/export-job-reports-users-api.service.d.ts +4 -9
- package/api/export-job-reports-users-api.serviceInterface.d.ts +2 -0
- package/api/export-jobs-api.service.d.ts +4 -9
- package/api/export-jobs-api.serviceInterface.d.ts +2 -0
- package/api/export-project-resources-api.service.d.ts +4 -9
- package/api/export-projects-api.service.d.ts +4 -9
- package/api/export-tasks-api.service.d.ts +4 -9
- package/api/export-user-periods-api.service.d.ts +4 -9
- package/api/export-users-api.service.d.ts +4 -9
- package/api/jira-client-api.service.d.ts +4 -9
- package/api/jira-instances-api.service.d.ts +4 -9
- package/api/jobs-api.service.d.ts +49 -10
- package/api/jobs-api.serviceInterface.d.ts +84 -0
- package/api/locations-api.service.d.ts +4 -9
- package/api/notifications-api.service.d.ts +4 -9
- package/api/permission-data-api.service.d.ts +4 -9
- package/api/profile-api.service.d.ts +4 -9
- package/api/project-notes-api.service.d.ts +4 -9
- package/api/project-priorities-api.service.d.ts +4 -9
- package/api/project-resources-api.service.d.ts +4 -9
- package/api/projects-api.service.d.ts +4 -9
- package/api/roles-api.service.d.ts +4 -9
- package/api/s3-api.service.d.ts +4 -9
- package/api/search-periods-api.service.d.ts +4 -9
- package/api/sso-api.service.d.ts +4 -9
- package/api/tasks-api.service.d.ts +4 -9
- package/api/token-api.service.d.ts +4 -9
- package/api/user-capacities-api.service.d.ts +4 -9
- package/api/user-logins-api.service.d.ts +4 -9
- package/api/user-periods-api.service.d.ts +4 -9
- package/api/user-scores-api.service.d.ts +4 -9
- package/api/user-timezone-setting-api.service.d.ts +4 -9
- package/api/user-timezones-api.service.d.ts +4 -9
- package/api/users-api.service.d.ts +4 -9
- package/api/vendors-api.service.d.ts +4 -9
- package/api/who-am-i-api.service.d.ts +4 -9
- package/api/work-types-api.service.d.ts +4 -9
- package/api.base.service.d.ts +12 -0
- package/configuration.d.ts +3 -1
- package/esm2022/api/branch-periods-api.service.mjs +34 -188
- package/esm2022/api/branches-api.service.mjs +48 -238
- package/esm2022/api/client-notes-api.service.mjs +21 -125
- package/esm2022/api/clients-api.service.mjs +110 -432
- package/esm2022/api/components-api.service.mjs +35 -175
- package/esm2022/api/departments-api.service.mjs +37 -197
- package/esm2022/api/dismissal-reasons-api.service.mjs +37 -197
- package/esm2022/api/export-job-reports-departments-api.service.mjs +51 -215
- package/esm2022/api/export-job-reports-departments-api.serviceInterface.mjs +1 -1
- package/esm2022/api/export-job-reports-users-api.service.mjs +51 -215
- package/esm2022/api/export-job-reports-users-api.serviceInterface.mjs +1 -1
- package/esm2022/api/export-jobs-api.service.mjs +49 -209
- package/esm2022/api/export-jobs-api.serviceInterface.mjs +1 -1
- package/esm2022/api/export-project-resources-api.service.mjs +38 -192
- package/esm2022/api/export-projects-api.service.mjs +38 -192
- package/esm2022/api/export-tasks-api.service.mjs +42 -204
- package/esm2022/api/export-user-periods-api.service.mjs +36 -186
- package/esm2022/api/export-users-api.service.mjs +38 -192
- package/esm2022/api/jira-client-api.service.mjs +10 -84
- package/esm2022/api/jira-instances-api.service.mjs +19 -119
- package/esm2022/api/jobs-api.service.mjs +366 -428
- package/esm2022/api/jobs-api.serviceInterface.mjs +1 -1
- package/esm2022/api/locations-api.service.mjs +37 -197
- package/esm2022/api/notifications-api.service.mjs +50 -244
- package/esm2022/api/permission-data-api.service.mjs +10 -84
- package/esm2022/api/profile-api.service.mjs +15 -107
- package/esm2022/api/project-notes-api.service.mjs +21 -125
- package/esm2022/api/project-priorities-api.service.mjs +22 -128
- package/esm2022/api/project-resources-api.service.mjs +31 -163
- package/esm2022/api/projects-api.service.mjs +62 -288
- package/esm2022/api/roles-api.service.mjs +37 -197
- package/esm2022/api/s3-api.service.mjs +10 -84
- package/esm2022/api/search-periods-api.service.mjs +11 -87
- package/esm2022/api/sso-api.service.mjs +17 -106
- package/esm2022/api/tasks-api.service.mjs +66 -276
- package/esm2022/api/token-api.service.mjs +13 -91
- package/esm2022/api/user-capacities-api.service.mjs +43 -207
- package/esm2022/api/user-logins-api.service.mjs +31 -163
- package/esm2022/api/user-periods-api.service.mjs +44 -226
- package/esm2022/api/user-scores-api.service.mjs +49 -225
- package/esm2022/api/user-timezone-setting-api.service.mjs +15 -107
- package/esm2022/api/user-timezones-api.service.mjs +21 -125
- package/esm2022/api/users-api.service.mjs +53 -245
- package/esm2022/api/vendors-api.service.mjs +35 -191
- package/esm2022/api/who-am-i-api.service.mjs +10 -84
- package/esm2022/api/work-types-api.service.mjs +38 -200
- package/esm2022/api.base.service.mjs +68 -0
- package/esm2022/configuration.mjs +9 -1
- package/esm2022/model/billing-frequency-enum.dto.mjs +1 -1
- package/esm2022/model/billing-method-enum.dto.mjs +1 -1
- package/esm2022/model/billing-type-enum.dto.mjs +1 -1
- package/esm2022/model/branch-period-type-enum.dto.mjs +1 -1
- package/esm2022/model/client-status-enum.dto.mjs +1 -1
- package/esm2022/model/config-enum.dto.mjs +1 -1
- package/esm2022/model/error-code401-enum.dto.mjs +1 -1
- package/esm2022/model/export-status-enum.dto.mjs +1 -1
- package/esm2022/model/file-format-enum.dto.mjs +1 -1
- package/esm2022/model/job-report-daily.dto.mjs +2 -0
- package/esm2022/model/job-stats.dto.mjs +11 -0
- package/esm2022/model/job-type-enum.dto.mjs +1 -1
- package/esm2022/model/jobs-billable-chart-list-department-id-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-billable-chart-list-department-id-in-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-billable-chart-list-error.dto.mjs +1 -1
- package/esm2022/model/jobs-list-department-id-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-list-department-id-in-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-list-error.dto.mjs +1 -1
- package/esm2022/model/jobs-production-chart-list-department-id-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-production-chart-list-department-id-in-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-production-chart-list-error.dto.mjs +1 -1
- package/esm2022/model/jobs-report-daily-list-billed-by-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-billed-by-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-branch-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-branch-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-created-by-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-created-by-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-date-gte-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-date-lte-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-department-id-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-report-daily-list-department-id-in-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-report-daily-list-error-response400.dto.mjs +2 -0
- package/esm2022/model/jobs-report-daily-list-error.dto.mjs +2 -0
- package/esm2022/model/jobs-report-daily-list-id-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-report-daily-list-id-in-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-report-daily-list-task-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-task-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-task-project-client-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-task-project-client-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-task-project-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-task-project-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-type-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-type-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-updated-by-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-updated-by-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-validation-error.dto.mjs +2 -0
- package/esm2022/model/jobs-report-daily-list-work-type-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-daily-list-work-type-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-report-departments-list-department-id-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-report-departments-list-department-id-in-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-report-departments-list-error.dto.mjs +1 -1
- package/esm2022/model/jobs-report-users-list-department-id-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-report-users-list-department-id-in-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-report-users-list-error.dto.mjs +1 -1
- package/esm2022/model/jobs-stats-retrieve-billed-by-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-billed-by-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-branch-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-branch-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-created-by-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-created-by-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-date-gte-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-date-lte-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-department-id-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-stats-retrieve-department-id-in-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-stats-retrieve-error-response400.dto.mjs +2 -0
- package/esm2022/model/jobs-stats-retrieve-error.dto.mjs +2 -0
- package/esm2022/model/jobs-stats-retrieve-id-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-stats-retrieve-id-in-error-component.dto.mjs +19 -0
- package/esm2022/model/jobs-stats-retrieve-task-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-task-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-task-project-client-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-task-project-client-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-task-project-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-task-project-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-type-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-type-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-updated-by-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-updated-by-in-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-validation-error.dto.mjs +2 -0
- package/esm2022/model/jobs-stats-retrieve-work-type-error-component.dto.mjs +18 -0
- package/esm2022/model/jobs-stats-retrieve-work-type-in-error-component.dto.mjs +18 -0
- package/esm2022/model/models.mjs +68 -1
- package/esm2022/model/notification-type-enum.dto.mjs +1 -1
- package/esm2022/model/paginated-job-report-daily-list.dto.mjs +2 -0
- package/esm2022/model/period-model-enum.dto.mjs +1 -1
- package/esm2022/model/period-type-enum.dto.mjs +1 -1
- package/esm2022/model/permission-enum.dto.mjs +1 -1
- package/esm2022/model/permission-group-enum.dto.mjs +1 -1
- package/esm2022/model/priority-enum.dto.mjs +1 -1
- package/esm2022/model/project-status-enum.dto.mjs +1 -1
- package/esm2022/model/scope-enum.dto.mjs +1 -1
- package/esm2022/model/state-enum.dto.mjs +1 -1
- package/esm2022/model/user-period-status-enum.dto.mjs +1 -1
- package/esm2022/model/user-period-type-enum.dto.mjs +1 -1
- package/esm2022/model/user-status-enum.dto.mjs +1 -1
- package/esm2022/model/user-timezone-setting-ordering-enum.dto.mjs +1 -1
- package/fesm2022/saritasa-crm-delmar-core-sdk.mjs +3101 -7851
- package/fesm2022/saritasa-crm-delmar-core-sdk.mjs.map +1 -1
- package/model/job-report-daily.dto.d.ts +20 -0
- package/model/job-stats.dto.d.ts +17 -0
- package/model/jobs-billable-chart-list-department-id-error-component.dto.d.ts +27 -0
- package/model/jobs-billable-chart-list-department-id-in-error-component.dto.d.ts +27 -0
- package/model/jobs-billable-chart-list-error.dto.d.ts +12 -10
- package/model/jobs-list-department-id-error-component.dto.d.ts +27 -0
- package/model/jobs-list-department-id-in-error-component.dto.d.ts +27 -0
- package/model/jobs-list-error.dto.d.ts +3 -1
- package/model/jobs-production-chart-list-department-id-error-component.dto.d.ts +27 -0
- package/model/jobs-production-chart-list-department-id-in-error-component.dto.d.ts +27 -0
- package/model/jobs-production-chart-list-error.dto.d.ts +8 -6
- package/model/jobs-report-daily-list-billed-by-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-billed-by-in-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-branch-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-branch-in-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-created-by-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-created-by-in-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-date-gte-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-date-lte-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-department-id-error-component.dto.d.ts +27 -0
- package/model/jobs-report-daily-list-department-id-in-error-component.dto.d.ts +27 -0
- package/model/jobs-report-daily-list-error-response400.dto.d.ts +16 -0
- package/model/jobs-report-daily-list-error.dto.d.ts +38 -0
- package/model/jobs-report-daily-list-id-error-component.dto.d.ts +27 -0
- package/model/jobs-report-daily-list-id-in-error-component.dto.d.ts +27 -0
- package/model/jobs-report-daily-list-task-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-task-in-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-task-project-client-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-task-project-client-in-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-task-project-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-task-project-in-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-type-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-type-in-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-updated-by-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-updated-by-in-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-validation-error.dto.d.ts +15 -0
- package/model/jobs-report-daily-list-work-type-error-component.dto.d.ts +26 -0
- package/model/jobs-report-daily-list-work-type-in-error-component.dto.d.ts +26 -0
- package/model/jobs-report-departments-list-department-id-error-component.dto.d.ts +27 -0
- package/model/jobs-report-departments-list-department-id-in-error-component.dto.d.ts +27 -0
- package/model/jobs-report-departments-list-error.dto.d.ts +12 -10
- package/model/jobs-report-users-list-department-id-error-component.dto.d.ts +27 -0
- package/model/jobs-report-users-list-department-id-in-error-component.dto.d.ts +27 -0
- package/model/jobs-report-users-list-error.dto.d.ts +10 -8
- package/model/jobs-stats-retrieve-billed-by-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-billed-by-in-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-branch-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-branch-in-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-created-by-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-created-by-in-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-date-gte-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-date-lte-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-department-id-error-component.dto.d.ts +27 -0
- package/model/jobs-stats-retrieve-department-id-in-error-component.dto.d.ts +27 -0
- package/model/jobs-stats-retrieve-error-response400.dto.d.ts +16 -0
- package/model/jobs-stats-retrieve-error.dto.d.ts +38 -0
- package/model/jobs-stats-retrieve-id-error-component.dto.d.ts +27 -0
- package/model/jobs-stats-retrieve-id-in-error-component.dto.d.ts +27 -0
- package/model/jobs-stats-retrieve-task-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-task-in-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-task-project-client-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-task-project-client-in-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-task-project-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-task-project-in-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-type-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-type-in-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-updated-by-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-updated-by-in-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-validation-error.dto.d.ts +15 -0
- package/model/jobs-stats-retrieve-work-type-error-component.dto.d.ts +26 -0
- package/model/jobs-stats-retrieve-work-type-in-error-component.dto.d.ts +26 -0
- package/model/models.d.ts +67 -0
- package/model/paginated-job-report-daily-list.dto.d.ts +16 -0
- package/package.json +2 -2
|
@@ -9,74 +9,18 @@
|
|
|
9
9
|
*/
|
|
10
10
|
/* tslint:disable:no-unused-variable member-ordering */
|
|
11
11
|
import { Inject, Injectable, Optional } from "@angular/core";
|
|
12
|
-
import {
|
|
13
|
-
import { CustomHttpParameterCodec } from "../encoder";
|
|
12
|
+
import { HttpParams, HttpContext, } from "@angular/common/http";
|
|
14
13
|
// @ts-ignore
|
|
15
14
|
import { BASE_PATH, COLLECTION_FORMATS } from "../variables";
|
|
16
|
-
import {
|
|
15
|
+
import { BaseService } from "../api.base.service";
|
|
17
16
|
import * as i0 from "@angular/core";
|
|
18
17
|
import * as i1 from "@angular/common/http";
|
|
19
18
|
import * as i2 from "../configuration";
|
|
20
|
-
export class UserCapacitiesApiService {
|
|
19
|
+
export class UserCapacitiesApiService extends BaseService {
|
|
21
20
|
httpClient;
|
|
22
|
-
basePath = "";
|
|
23
|
-
defaultHeaders = new HttpHeaders();
|
|
24
|
-
configuration = new Configuration();
|
|
25
|
-
encoder;
|
|
26
21
|
constructor(httpClient, basePath, configuration) {
|
|
22
|
+
super(basePath, configuration);
|
|
27
23
|
this.httpClient = httpClient;
|
|
28
|
-
if (configuration) {
|
|
29
|
-
this.configuration = configuration;
|
|
30
|
-
}
|
|
31
|
-
if (typeof this.configuration.basePath !== "string") {
|
|
32
|
-
const firstBasePath = Array.isArray(basePath) ? basePath[0] : undefined;
|
|
33
|
-
if (firstBasePath != undefined) {
|
|
34
|
-
basePath = firstBasePath;
|
|
35
|
-
}
|
|
36
|
-
if (typeof basePath !== "string") {
|
|
37
|
-
basePath = this.basePath;
|
|
38
|
-
}
|
|
39
|
-
this.configuration.basePath = basePath;
|
|
40
|
-
}
|
|
41
|
-
this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
|
|
42
|
-
}
|
|
43
|
-
// @ts-ignore
|
|
44
|
-
addToHttpParams(httpParams, value, key) {
|
|
45
|
-
if (typeof value === "object" && value instanceof Date === false) {
|
|
46
|
-
httpParams = this.addToHttpParamsRecursive(httpParams, value);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
|
|
50
|
-
}
|
|
51
|
-
return httpParams;
|
|
52
|
-
}
|
|
53
|
-
addToHttpParamsRecursive(httpParams, value, key) {
|
|
54
|
-
if (value == null) {
|
|
55
|
-
return httpParams;
|
|
56
|
-
}
|
|
57
|
-
if (typeof value === "object") {
|
|
58
|
-
if (Array.isArray(value)) {
|
|
59
|
-
value.forEach((elem) => (httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)));
|
|
60
|
-
}
|
|
61
|
-
else if (value instanceof Date) {
|
|
62
|
-
if (key != null) {
|
|
63
|
-
httpParams = httpParams.append(key, value.toISOString().substring(0, 10));
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
throw Error("key may not be null if value is Date");
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
Object.keys(value).forEach((k) => (httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k)));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
else if (key != null) {
|
|
74
|
-
httpParams = httpParams.append(key, value);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
throw Error("key may not be null if value is not object or array");
|
|
78
|
-
}
|
|
79
|
-
return httpParams;
|
|
80
24
|
}
|
|
81
25
|
userCapacitiesCalculateCapacityCreate(requestParameters, observe = "body", reportProgress = false, options) {
|
|
82
26
|
const userCapacityRequestDto = requestParameters?.userCapacityRequestDto;
|
|
@@ -85,34 +29,16 @@ export class UserCapacitiesApiService {
|
|
|
85
29
|
throw new Error("Required parameter userCapacityRequestDto was null or undefined when calling userCapacitiesCalculateCapacityCreate.");
|
|
86
30
|
}
|
|
87
31
|
let localVarHeaders = this.defaultHeaders;
|
|
88
|
-
let localVarCredential;
|
|
89
32
|
// authentication (cookieAuth) required
|
|
90
|
-
localVarCredential = this.configuration.lookupCredential("cookieAuth");
|
|
91
|
-
if (localVarCredential) {
|
|
92
|
-
}
|
|
93
33
|
// authentication (jwtAuth) required
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
99
|
-
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
100
|
-
// to determine the Accept header
|
|
101
|
-
const httpHeaderAccepts = ["application/json"];
|
|
102
|
-
localVarHttpHeaderAcceptSelected =
|
|
103
|
-
this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
104
|
-
}
|
|
34
|
+
localVarHeaders = this.configuration.addCredentialToHeaders("jwtAuth", "Authorization", localVarHeaders, "Bearer ");
|
|
35
|
+
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ??
|
|
36
|
+
this.configuration.selectHeaderAccept(["application/json"]);
|
|
105
37
|
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
106
38
|
localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
|
|
107
39
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
localVarHttpContext = new HttpContext();
|
|
111
|
-
}
|
|
112
|
-
let localVarTransferCache = options && options.transferCache;
|
|
113
|
-
if (localVarTransferCache === undefined) {
|
|
114
|
-
localVarTransferCache = true;
|
|
115
|
-
}
|
|
40
|
+
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
41
|
+
const localVarTransferCache = options?.transferCache ?? true;
|
|
116
42
|
// to determine the Content-Type header
|
|
117
43
|
const consumes = [
|
|
118
44
|
"application/json",
|
|
@@ -160,59 +86,27 @@ export class UserCapacitiesApiService {
|
|
|
160
86
|
const ordering = requestParameters?.ordering;
|
|
161
87
|
const search = requestParameters?.search;
|
|
162
88
|
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (dateLte !== undefined && dateLte !== null) {
|
|
167
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, dateLte, "date__lte");
|
|
168
|
-
}
|
|
169
|
-
if (limit !== undefined && limit !== null) {
|
|
170
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, "limit");
|
|
171
|
-
}
|
|
89
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, dateGte, "date__gte");
|
|
90
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, dateLte, "date__lte");
|
|
91
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, "limit");
|
|
172
92
|
if (objectIds) {
|
|
173
93
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...objectIds].join(COLLECTION_FORMATS["csv"]), "object_ids");
|
|
174
94
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, ordering, "ordering");
|
|
180
|
-
}
|
|
181
|
-
if (periodType !== undefined && periodType !== null) {
|
|
182
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, periodType, "period_type");
|
|
183
|
-
}
|
|
184
|
-
if (search !== undefined && search !== null) {
|
|
185
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, search, "search");
|
|
186
|
-
}
|
|
95
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, offset, "offset");
|
|
96
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, ordering, "ordering");
|
|
97
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, periodType, "period_type");
|
|
98
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, search, "search");
|
|
187
99
|
let localVarHeaders = this.defaultHeaders;
|
|
188
|
-
let localVarCredential;
|
|
189
100
|
// authentication (cookieAuth) required
|
|
190
|
-
localVarCredential = this.configuration.lookupCredential("cookieAuth");
|
|
191
|
-
if (localVarCredential) {
|
|
192
|
-
}
|
|
193
101
|
// authentication (jwtAuth) required
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}
|
|
198
|
-
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
199
|
-
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
200
|
-
// to determine the Accept header
|
|
201
|
-
const httpHeaderAccepts = ["application/json"];
|
|
202
|
-
localVarHttpHeaderAcceptSelected =
|
|
203
|
-
this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
204
|
-
}
|
|
102
|
+
localVarHeaders = this.configuration.addCredentialToHeaders("jwtAuth", "Authorization", localVarHeaders, "Bearer ");
|
|
103
|
+
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ??
|
|
104
|
+
this.configuration.selectHeaderAccept(["application/json"]);
|
|
205
105
|
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
206
106
|
localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
|
|
207
107
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
localVarHttpContext = new HttpContext();
|
|
211
|
-
}
|
|
212
|
-
let localVarTransferCache = options && options.transferCache;
|
|
213
|
-
if (localVarTransferCache === undefined) {
|
|
214
|
-
localVarTransferCache = true;
|
|
215
|
-
}
|
|
108
|
+
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
109
|
+
const localVarTransferCache = options?.transferCache ?? true;
|
|
216
110
|
let responseType_ = "json";
|
|
217
111
|
if (localVarHttpHeaderAcceptSelected) {
|
|
218
112
|
if (localVarHttpHeaderAcceptSelected.startsWith("text")) {
|
|
@@ -255,83 +149,43 @@ export class UserCapacitiesApiService {
|
|
|
255
149
|
const workTypeId = requestParameters?.workTypeId;
|
|
256
150
|
const workTypeIdIn = requestParameters?.workTypeIdIn;
|
|
257
151
|
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
258
|
-
|
|
259
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, branchId, "branch__id");
|
|
260
|
-
}
|
|
152
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, branchId, "branch__id");
|
|
261
153
|
if (branchIdIn) {
|
|
262
154
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...branchIdIn].join(COLLECTION_FORMATS["csv"]), "branch__id__in");
|
|
263
155
|
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
if (dateLte !== undefined && dateLte !== null) {
|
|
268
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, dateLte, "date__lte");
|
|
269
|
-
}
|
|
270
|
-
if (departmentId !== undefined && departmentId !== null) {
|
|
271
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, departmentId, "department__id");
|
|
272
|
-
}
|
|
156
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, dateGte, "date__gte");
|
|
157
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, dateLte, "date__lte");
|
|
158
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, departmentId, "department__id");
|
|
273
159
|
if (departmentIdIn) {
|
|
274
160
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...departmentIdIn].join(COLLECTION_FORMATS["csv"]), "department__id__in");
|
|
275
161
|
}
|
|
276
|
-
|
|
277
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, id, "id");
|
|
278
|
-
}
|
|
162
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, id, "id");
|
|
279
163
|
if (idIn) {
|
|
280
164
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...idIn].join(COLLECTION_FORMATS["csv"]), "id__in");
|
|
281
165
|
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
288
|
-
if (ordering !== undefined && ordering !== null) {
|
|
289
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, ordering, "ordering");
|
|
290
|
-
}
|
|
291
|
-
if (search !== undefined && search !== null) {
|
|
292
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, search, "search");
|
|
293
|
-
}
|
|
294
|
-
if (userId !== undefined && userId !== null) {
|
|
295
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, userId, "user__id");
|
|
296
|
-
}
|
|
166
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, "limit");
|
|
167
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, offset, "offset");
|
|
168
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, ordering, "ordering");
|
|
169
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, search, "search");
|
|
170
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, userId, "user__id");
|
|
297
171
|
if (userIdIn) {
|
|
298
172
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...userIdIn].join(COLLECTION_FORMATS["csv"]), "user__id__in");
|
|
299
173
|
}
|
|
300
|
-
|
|
301
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, workTypeId, "work_type__id");
|
|
302
|
-
}
|
|
174
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, workTypeId, "work_type__id");
|
|
303
175
|
if (workTypeIdIn) {
|
|
304
176
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...workTypeIdIn].join(COLLECTION_FORMATS["csv"]), "work_type__id__in");
|
|
305
177
|
}
|
|
306
178
|
let localVarHeaders = this.defaultHeaders;
|
|
307
|
-
let localVarCredential;
|
|
308
179
|
// authentication (cookieAuth) required
|
|
309
|
-
localVarCredential = this.configuration.lookupCredential("cookieAuth");
|
|
310
|
-
if (localVarCredential) {
|
|
311
|
-
}
|
|
312
180
|
// authentication (jwtAuth) required
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
}
|
|
317
|
-
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
318
|
-
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
319
|
-
// to determine the Accept header
|
|
320
|
-
const httpHeaderAccepts = ["application/json"];
|
|
321
|
-
localVarHttpHeaderAcceptSelected =
|
|
322
|
-
this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
323
|
-
}
|
|
181
|
+
localVarHeaders = this.configuration.addCredentialToHeaders("jwtAuth", "Authorization", localVarHeaders, "Bearer ");
|
|
182
|
+
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ??
|
|
183
|
+
this.configuration.selectHeaderAccept(["application/json"]);
|
|
324
184
|
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
325
185
|
localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
|
|
326
186
|
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
localVarHttpContext = new HttpContext();
|
|
330
|
-
}
|
|
331
|
-
let localVarTransferCache = options && options.transferCache;
|
|
332
|
-
if (localVarTransferCache === undefined) {
|
|
333
|
-
localVarTransferCache = true;
|
|
334
|
-
}
|
|
187
|
+
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
188
|
+
const localVarTransferCache = options?.transferCache ?? true;
|
|
335
189
|
let responseType_ = "json";
|
|
336
190
|
if (localVarHttpHeaderAcceptSelected) {
|
|
337
191
|
if (localVarHttpHeaderAcceptSelected.startsWith("text")) {
|
|
@@ -362,34 +216,16 @@ export class UserCapacitiesApiService {
|
|
|
362
216
|
throw new Error("Required parameter id was null or undefined when calling userCapacitiesRetrieve.");
|
|
363
217
|
}
|
|
364
218
|
let localVarHeaders = this.defaultHeaders;
|
|
365
|
-
let localVarCredential;
|
|
366
219
|
// authentication (cookieAuth) required
|
|
367
|
-
localVarCredential = this.configuration.lookupCredential("cookieAuth");
|
|
368
|
-
if (localVarCredential) {
|
|
369
|
-
}
|
|
370
220
|
// authentication (jwtAuth) required
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
}
|
|
375
|
-
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
376
|
-
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
377
|
-
// to determine the Accept header
|
|
378
|
-
const httpHeaderAccepts = ["application/json"];
|
|
379
|
-
localVarHttpHeaderAcceptSelected =
|
|
380
|
-
this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
381
|
-
}
|
|
221
|
+
localVarHeaders = this.configuration.addCredentialToHeaders("jwtAuth", "Authorization", localVarHeaders, "Bearer ");
|
|
222
|
+
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ??
|
|
223
|
+
this.configuration.selectHeaderAccept(["application/json"]);
|
|
382
224
|
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
383
225
|
localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
|
|
384
226
|
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
localVarHttpContext = new HttpContext();
|
|
388
|
-
}
|
|
389
|
-
let localVarTransferCache = options && options.transferCache;
|
|
390
|
-
if (localVarTransferCache === undefined) {
|
|
391
|
-
localVarTransferCache = true;
|
|
392
|
-
}
|
|
227
|
+
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
228
|
+
const localVarTransferCache = options?.transferCache ?? true;
|
|
393
229
|
let responseType_ = "json";
|
|
394
230
|
if (localVarHttpHeaderAcceptSelected) {
|
|
395
231
|
if (localVarHttpHeaderAcceptSelected.startsWith("text")) {
|
|
@@ -429,4 +265,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
429
265
|
}] }, { type: i2.Configuration, decorators: [{
|
|
430
266
|
type: Optional
|
|
431
267
|
}] }] });
|
|
432
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jYXBhY2l0aWVzLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL3VzZXItY2FwYWNpdGllcy1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUVMLFdBQVcsRUFDWCxVQUFVLEVBSVYsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBa0N0RCxhQUFhO0FBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFZakQsTUFBTSxPQUFPLHdCQUF3QjtJQVN2QjtJQU5GLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDakIsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUNZLFVBQXNCLEVBQ0QsUUFBMkIsRUFDOUMsYUFBNEI7UUFGOUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUloQyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxT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dGVudCI6WyIvKipcbiAqIERlbG1hciBBcGlcbiAqXG4gKlxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEh0dHBDbGllbnQsXG4gIEh0dHBIZWFkZXJzLFxuICBIdHRwUGFyYW1zLFxuICBIdHRwUmVzcG9uc2UsXG4gIEh0dHBFdmVudCxcbiAgSHR0cFBhcmFtZXRlckNvZGVjLFxuICBIdHRwQ29udGV4dCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMgfSBmcm9tIFwiLi4vZW5jb2RlclwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDFEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDEuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDAzRHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDAzLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwNER0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwNC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDVEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDUuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDA2RHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDA2LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQxNUR0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQxNS5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U1MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U1MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBQYWdpbmF0ZWRVc2VyQ2FwYWNpdHlMaXN0RHRvIH0gZnJvbSBcIi4uL21vZGVsL3BhZ2luYXRlZC11c2VyLWNhcGFjaXR5LWxpc3QuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBQYWdpbmF0ZWRVc2VyU3VtQ2FwYWNpdHlMaXN0RHRvIH0gZnJvbSBcIi4uL21vZGVsL3BhZ2luYXRlZC11c2VyLXN1bS1jYXBhY2l0eS1saXN0LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVXNlckNhcGFjaXRpZXNDYWxjdWxhdGVDYXBhY2l0eUNyZWF0ZUVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvdXNlci1jYXBhY2l0aWVzLWNhbGN1bGF0ZS1jYXBhY2l0eS1jcmVhdGUtZXJyb3ItcmVzcG9uc2U0MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBVc2VyQ2FwYWNpdGllc0dldFBlcmlvZENhcGFjaXR5TGlzdEVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvdXNlci1jYXBhY2l0aWVzLWdldC1wZXJpb2QtY2FwYWNpdHktbGlzdC1lcnJvci1yZXNwb25zZTQwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFVzZXJDYXBhY2l0aWVzTGlzdEVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvdXNlci1jYXBhY2l0aWVzLWxpc3QtZXJyb3ItcmVzcG9uc2U0MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBVc2VyQ2FwYWNpdGllc1JldHJpZXZlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC91c2VyLWNhcGFjaXRpZXMtcmV0cmlldmUtZXJyb3ItcmVzcG9uc2U0MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBVc2VyQ2FwYWNpdHlEdG8gfSBmcm9tIFwiLi4vbW9kZWwvdXNlci1jYXBhY2l0eS5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFVzZXJDYXBhY2l0eVJlcXVlc3REdG8gfSBmcm9tIFwiLi4vbW9kZWwvdXNlci1jYXBhY2l0eS1yZXF1ZXN0LmR0b1wiO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUyB9IGZyb20gXCIuLi92YXJpYWJsZXNcIjtcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHtcbiAgVXNlckNhcGFjaXRpZXNBcGlTZXJ2aWNlSW50ZXJmYWNlLFxuICBVc2VyQ2FwYWNpdGllc0NhbGN1bGF0ZUNhcGFjaXR5Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgVXNlckNhcGFjaXRpZXNHZXRQZXJpb2RDYXBhY2l0eUxpc3RSZXF1ZXN0UGFyYW1zLFxuICBVc2VyQ2FwYWNpdGllc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICBVc2VyQ2FwYWNpdGllc1JldHJpZXZlUmVxdWVzdFBhcmFtcyxcbn0gZnJvbSBcIi4vdXNlci1jYXBhY2l0aWVzLWFwaS5zZXJ2aWNlSW50ZXJmYWNlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogXCJyb290XCIsXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJDYXBhY2l0aWVzQXBpU2VydmljZVxuICBpbXBsZW1lbnRzIFVzZXJDYXBhY2l0aWVzQXBpU2VydmljZUludGVyZmFjZVxue1xuICBwcm90ZWN0ZWQgYmFzZVBhdGggPSBcIlwiO1xuICBwdWJsaWMgZGVmYXVsdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgcHVibGljIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICBwdWJsaWMgZW5jb2RlcjogSHR0cFBhcmFtZXRlckNvZGVjO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQkFTRV9QQVRIKSBiYXNlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbixcbiAgKSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25zdCBmaXJzdEJhc2VQYXRoID0gQXJyYXkuaXNBcnJheShiYXNlUGF0aCkgPyBiYXNlUGF0aFswXSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChmaXJzdEJhc2VQYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlUGF0aCA9IGZpcnN0QmFzZVBhdGg7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYmFzZVBhdGggIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYmFzZVBhdGggPSB0aGlzLmJhc2VQYXRoO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgfVxuICAgIHRoaXMuZW5jb2RlciA9IHRoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVyIHx8IG5ldyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMoKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXMoXG4gICAgaHR0cFBhcmFtczogSHR0cFBhcmFtcyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGtleT86IHN0cmluZyxcbiAgKTogSHR0cFBhcmFtcyB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPT09IGZhbHNlKSB7XG4gICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUsIGtleSk7XG4gICAgfVxuICAgIHJldHVybiBodHRwUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoXG4gICAgaHR0cFBhcmFtczogSHR0cFBhcmFtcyxcbiAgICB2YWx1ZT86IGFueSxcbiAgICBrZXk/OiBzdHJpbmcsXG4gICk6IEh0dHBQYXJhbXMge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgKHZhbHVlIGFzIGFueVtdKS5mb3JFYWNoKFxuICAgICAgICAgIChlbGVtKSA9PlxuICAgICAgICAgICAgKGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCBlbGVtLCBrZXkpKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICh2YWx1ZSBhcyBEYXRlKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgRGF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goXG4gICAgICAgICAgKGspID0+XG4gICAgICAgICAgICAoaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKFxuICAgICAgICAgICAgICBodHRwUGFyYW1zLFxuICAgICAgICAgICAgICB2YWx1ZVtrXSxcbiAgICAgICAgICAgICAga2V5ICE9IG51bGwgPyBgJHtrZXl9LiR7a31gIDogayxcbiAgICAgICAgICAgICkpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIG5vdCBvYmplY3Qgb3IgYXJyYXlcIik7XG4gICAgfVxuICAgIHJldHVybiBodHRwUGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBjYWxjdWxhdGUgY2FwYWNpdHkgdGFzay5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc0NhbGN1bGF0ZUNhcGFjaXR5Q3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBVc2VyQ2FwYWNpdGllc0NhbGN1bGF0ZUNhcGFjaXR5Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPFVzZXJDYXBhY2l0eUR0bz47XG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc0NhbGN1bGF0ZUNhcGFjaXR5Q3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBVc2VyQ2FwYWNpdGllc0NhbGN1bGF0ZUNhcGFjaXR5Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8VXNlckNhcGFjaXR5RHRvPj47XG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc0NhbGN1bGF0ZUNhcGFjaXR5Q3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBVc2VyQ2FwYWNpdGllc0NhbGN1bGF0ZUNhcGFjaXR5Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJldmVudHNcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFVzZXJDYXBhY2l0eUR0bz4+O1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNDYWxjdWxhdGVDYXBhY2l0eUNyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogVXNlckNhcGFjaXRpZXNDYWxjdWxhdGVDYXBhY2l0eUNyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZTogYW55ID0gXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB1c2VyQ2FwYWNpdHlSZXF1ZXN0RHRvID0gcmVxdWVzdFBhcmFtZXRlcnM/LnVzZXJDYXBhY2l0eVJlcXVlc3REdG87XG4gICAgaWYgKFxuICAgICAgdXNlckNhcGFjaXR5UmVxdWVzdER0byA9PT0gbnVsbCB8fFxuICAgICAgdXNlckNhcGFjaXR5UmVxdWVzdER0byA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiUmVxdWlyZWQgcGFyYW1ldGVyIHVzZXJDYXBhY2l0eVJlcXVlc3REdG8gd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1c2VyQ2FwYWNpdGllc0NhbGN1bGF0ZUNhcGFjaXR5Q3JlYXRlLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImNvb2tpZUF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgIH1cblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiand0QXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJCZWFyZXIgXCIgKyBsb2NhbFZhckNyZWRlbnRpYWwsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcImFwcGxpY2F0aW9uL2pzb25cIl07XG4gICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgIH1cbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLFxuICAgICAgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsXG4gICAgXTtcbiAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2VUeXBlXzogXCJ0ZXh0XCIgfCBcImpzb25cIiB8IFwiYmxvYlwiID0gXCJqc29uXCI7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aChcInRleHRcIikpIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwidGV4dFwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwianNvblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwiYmxvYlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS92MS91c2VyLWNhcGFjaXRpZXMvY2FsY3VsYXRlLWNhcGFjaXR5L2A7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFVzZXJDYXBhY2l0eUR0bz4oXG4gICAgICBcInBvc3RcIixcbiAgICAgIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAge1xuICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICBib2R5OiB1c2VyQ2FwYWNpdHlSZXF1ZXN0RHRvLFxuICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjYXBhY2l0eSBzdW0gZm9yIHBlcmlvZC5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc0dldFBlcmlvZENhcGFjaXR5TGlzdChcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogVXNlckNhcGFjaXRpZXNHZXRQZXJpb2RDYXBhY2l0eUxpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8UGFnaW5hdGVkVXNlclN1bUNhcGFjaXR5TGlzdER0bz47XG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc0dldFBlcmlvZENhcGFjaXR5TGlzdChcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogVXNlckNhcGFjaXRpZXNHZXRQZXJpb2RDYXBhY2l0eUxpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxQYWdpbmF0ZWRVc2VyU3VtQ2FwYWNpdHlMaXN0RHRvPj47XG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc0dldFBlcmlvZENhcGFjaXR5TGlzdChcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogVXNlckNhcGFjaXRpZXNHZXRQZXJpb2RDYXBhY2l0eUxpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8UGFnaW5hdGVkVXNlclN1bUNhcGFjaXR5TGlzdER0bz4+O1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNHZXRQZXJpb2RDYXBhY2l0eUxpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IFVzZXJDYXBhY2l0aWVzR2V0UGVyaW9kQ2FwYWNpdHlMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlOiBhbnkgPSBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHBlcmlvZFR5cGUgPSByZXF1ZXN0UGFyYW1ldGVycz8ucGVyaW9kVHlwZTtcbiAgICBpZiAocGVyaW9kVHlwZSA9PT0gbnVsbCB8fCBwZXJpb2RUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgcGVyaW9kVHlwZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVzZXJDYXBhY2l0aWVzR2V0UGVyaW9kQ2FwYWNpdHlMaXN0LlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZUd0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5kYXRlR3RlO1xuICAgIGNvbnN0IGRhdGVMdGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uZGF0ZUx0ZTtcbiAgICBjb25zdCBsaW1pdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5saW1pdDtcbiAgICBjb25zdCBvYmplY3RJZHMgPSByZXF1ZXN0UGFyYW1ldGVycz8ub2JqZWN0SWRzO1xuICAgIGNvbnN0IG9mZnNldCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vZmZzZXQ7XG4gICAgY29uc3Qgb3JkZXJpbmcgPSByZXF1ZXN0UGFyYW1ldGVycz8ub3JkZXJpbmc7XG4gICAgY29uc3Qgc2VhcmNoID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNlYXJjaDtcblxuICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHsgZW5jb2RlcjogdGhpcy5lbmNvZGVyIH0pO1xuICAgIGlmIChkYXRlR3RlICE9PSB1bmRlZmluZWQgJiYgZGF0ZUd0ZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+ZGF0ZUd0ZSxcbiAgICAgICAgXCJkYXRlX19ndGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkYXRlTHRlICE9PSB1bmRlZmluZWQgJiYgZGF0ZUx0ZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+ZGF0ZUx0ZSxcbiAgICAgICAgXCJkYXRlX19sdGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChsaW1pdCAhPT0gdW5kZWZpbmVkICYmIGxpbWl0ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5saW1pdCxcbiAgICAgICAgXCJsaW1pdFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9iamVjdElkcykge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5vYmplY3RJZHNdLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJvYmplY3RfaWRzXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgb2Zmc2V0ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5vZmZzZXQsXG4gICAgICAgIFwib2Zmc2V0XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3JkZXJpbmcgIT09IHVuZGVmaW5lZCAmJiBvcmRlcmluZyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+b3JkZXJpbmcsXG4gICAgICAgIFwib3JkZXJpbmdcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwZXJpb2RUeXBlICE9PSB1bmRlZmluZWQgJiYgcGVyaW9kVHlwZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+cGVyaW9kVHlwZSxcbiAgICAgICAgXCJwZXJpb2RfdHlwZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHNlYXJjaCAhPT0gdW5kZWZpbmVkICYmIHNlYXJjaCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+c2VhcmNoLFxuICAgICAgICBcInNlYXJjaFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImNvb2tpZUF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgIH1cblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiand0QXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJCZWFyZXIgXCIgKyBsb2NhbFZhckNyZWRlbnRpYWwsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcImFwcGxpY2F0aW9uL2pzb25cIl07XG4gICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgIH1cbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlVHlwZV86IFwidGV4dFwiIHwgXCJqc29uXCIgfCBcImJsb2JcIiA9IFwianNvblwiO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoXCJ0ZXh0XCIpKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcInRleHRcIjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImpzb25cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImJsb2JcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvdjEvdXNlci1jYXBhY2l0aWVzL2dldC1wZXJpb2QtY2FwYWNpdHkvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8UGFnaW5hdGVkVXNlclN1bUNhcGFjaXR5TGlzdER0bz4oXG4gICAgICBcImdldFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZG9ubHkgdmlldyBzZXQgZm9yIFVzZXJDYXBhY2l0eSBtb2RlbC5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBVc2VyQ2FwYWNpdGllc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8UGFnaW5hdGVkVXNlckNhcGFjaXR5TGlzdER0bz47XG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBVc2VyQ2FwYWNpdGllc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxQYWdpbmF0ZWRVc2VyQ2FwYWNpdHlMaXN0RHRvPj47XG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBVc2VyQ2FwYWNpdGllc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8UGFnaW5hdGVkVXNlckNhcGFjaXR5TGlzdER0bz4+O1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogVXNlckNhcGFjaXRpZXNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlOiBhbnkgPSBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGJyYW5jaElkID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJyYW5jaElkO1xuICAgIGNvbnN0IGJyYW5jaElkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYnJhbmNoSWRJbjtcbiAgICBjb25zdCBkYXRlR3RlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmRhdGVHdGU7XG4gICAgY29uc3QgZGF0ZUx0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5kYXRlTHRlO1xuICAgIGNvbnN0IGRlcGFydG1lbnRJZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5kZXBhcnRtZW50SWQ7XG4gICAgY29uc3QgZGVwYXJ0bWVudElkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uZGVwYXJ0bWVudElkSW47XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgY29uc3QgaWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pZEluO1xuICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgIGNvbnN0IG9mZnNldCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vZmZzZXQ7XG4gICAgY29uc3Qgb3JkZXJpbmcgPSByZXF1ZXN0UGFyYW1ldGVycz8ub3JkZXJpbmc7XG4gICAgY29uc3Qgc2VhcmNoID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNlYXJjaDtcbiAgICBjb25zdCB1c2VySWQgPSByZXF1ZXN0UGFyYW1ldGVycz8udXNlcklkO1xuICAgIGNvbnN0IHVzZXJJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnVzZXJJZEluO1xuICAgIGNvbnN0IHdvcmtUeXBlSWQgPSByZXF1ZXN0UGFyYW1ldGVycz8ud29ya1R5cGVJZDtcbiAgICBjb25zdCB3b3JrVHlwZUlkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8ud29ya1R5cGVJZEluO1xuXG4gICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoeyBlbmNvZGVyOiB0aGlzLmVuY29kZXIgfSk7XG4gICAgaWYgKGJyYW5jaElkICE9PSB1bmRlZmluZWQgJiYgYnJhbmNoSWQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmJyYW5jaElkLFxuICAgICAgICBcImJyYW5jaF9faWRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChicmFuY2hJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmJyYW5jaElkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJicmFuY2hfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRhdGVHdGUgIT09IHVuZGVmaW5lZCAmJiBkYXRlR3RlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5kYXRlR3RlLFxuICAgICAgICBcImRhdGVfX2d0ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRhdGVMdGUgIT09IHVuZGVmaW5lZCAmJiBkYXRlTHRlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5kYXRlTHRlLFxuICAgICAgICBcImRhdGVfX2x0ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRlcGFydG1lbnRJZCAhPT0gdW5kZWZpbmVkICYmIGRlcGFydG1lbnRJZCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+ZGVwYXJ0bWVudElkLFxuICAgICAgICBcImRlcGFydG1lbnRfX2lkXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVwYXJ0bWVudElkSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uZGVwYXJ0bWVudElkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJkZXBhcnRtZW50X19pZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIGlkICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5pZCxcbiAgICAgICAgXCJpZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlkSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uaWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImlkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbGltaXQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmxpbWl0LFxuICAgICAgICBcImxpbWl0XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgb2Zmc2V0ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5vZmZzZXQsXG4gICAgICAgIFwib2Zmc2V0XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3JkZXJpbmcgIT09IHVuZGVmaW5lZCAmJiBvcmRlcmluZyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+b3JkZXJpbmcsXG4gICAgICAgIFwib3JkZXJpbmdcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzZWFyY2ggIT09IHVuZGVmaW5lZCAmJiBzZWFyY2ggIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnNlYXJjaCxcbiAgICAgICAgXCJzZWFyY2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh1c2VySWQgIT09IHVuZGVmaW5lZCAmJiB1c2VySWQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnVzZXJJZCxcbiAgICAgICAgXCJ1c2VyX19pZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVzZXJJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnVzZXJJZEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwidXNlcl9faWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAod29ya1R5cGVJZCAhPT0gdW5kZWZpbmVkICYmIHdvcmtUeXBlSWQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PndvcmtUeXBlSWQsXG4gICAgICAgIFwid29ya190eXBlX19pZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHdvcmtUeXBlSWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi53b3JrVHlwZUlkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ3b3JrX3R5cGVfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImNvb2tpZUF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgIH1cblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiand0QXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJCZWFyZXIgXCIgKyBsb2NhbFZhckNyZWRlbnRpYWwsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcImFwcGxpY2F0aW9uL2pzb25cIl07XG4gICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgIH1cbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlVHlwZV86IFwidGV4dFwiIHwgXCJqc29uXCIgfCBcImJsb2JcIiA9IFwianNvblwiO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoXCJ0ZXh0XCIpKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcInRleHRcIjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImpzb25cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImJsb2JcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvdjEvdXNlci1jYXBhY2l0aWVzL2A7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFBhZ2luYXRlZFVzZXJDYXBhY2l0eUxpc3REdG8+KFxuICAgICAgXCJnZXRcIixcbiAgICAgIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAge1xuICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRvbmx5IHZpZXcgc2V0IGZvciBVc2VyQ2FwYWNpdHkgbW9kZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogVXNlckNhcGFjaXRpZXNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxVc2VyQ2FwYWNpdHlEdG8+O1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogVXNlckNhcGFjaXRpZXNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwicmVzcG9uc2VcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFVzZXJDYXBhY2l0eUR0bz4+O1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogVXNlckNhcGFjaXRpZXNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiZXZlbnRzXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxVc2VyQ2FwYWNpdHlEdG8+PjtcbiAgcHVibGljIHVzZXJDYXBhY2l0aWVzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IFVzZXJDYXBhY2l0aWVzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgaWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1c2VyQ2FwYWNpdGllc1JldHJpZXZlLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImNvb2tpZUF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgIH1cblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiand0QXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJCZWFyZXIgXCIgKyBsb2NhbFZhckNyZWRlbnRpYWwsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcImFwcGxpY2F0aW9uL2pzb25cIl07XG4gICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgIH1cbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlVHlwZV86IFwidGV4dFwiIHwgXCJqc29uXCIgfCBcImJsb2JcIiA9IFwianNvblwiO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoXCJ0ZXh0XCIpKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcInRleHRcIjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImpzb25cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImJsb2JcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvdjEvdXNlci1jYXBhY2l0aWVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHsgbmFtZTogXCJpZFwiLCB2YWx1ZTogaWQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJudW1iZXJcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkIH0pfS9gO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxVc2VyQ2FwYWNpdHlEdG8+KFxuICAgICAgXCJnZXRcIixcbiAgICAgIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAge1xuICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzLFxuICAgICAgfSxcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jYXBhY2l0aWVzLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL3VzZXItY2FwYWNpdGllcy1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUdMLFVBQVUsRUFJVixXQUFXLEdBQ1osTUFBTSxzQkFBc0IsQ0FBQztBQW1DOUIsYUFBYTtBQUNiLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBWWxELE1BQU0sT0FBTyx3QkFDWCxTQUFRLFdBQVc7SUFJUDtJQURaLFlBQ1ksVUFBc0IsRUFDRCxRQUEyQixFQUM5QyxhQUE2QjtRQUV6QyxLQUFLLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBSnJCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFLbEMsQ0FBQztJQXNDTSxxQ0FBcUMsQ0FDMUMsaUJBQXFFLEVBQ3JFLFVBQWUsTUFBTSxFQUNyQixpQkFBMEIsS0FBSyxFQUMvQixPQUlDO1FBRUQsTUFBTSxzQkFBc0IsR0FBRyxpQkFBaUIsRUFBRSxzQkFBc0IsQ0FBQztRQUN6RSxJQUNFLHNCQUFzQixLQUFLLElBQUk7WUFDL0Isc0JBQXNCLEtBQUssU0FBUyxFQUNwQyxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYixxSEFBcUgsQ0FDdEgsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRTFDLHVDQUF1QztRQUV2QyxvQ0FBb0M7UUFDcEMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENB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QUNGLENBQUM7SUFDSixDQUFDO3dHQTVtQlUsd0JBQXdCLDRDQU1iLFNBQVM7NEdBTnBCLHdCQUF3QixjQUZ2QixNQUFNOzs0RkFFUCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFPSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFNBQVM7OzBCQUM1QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWxtYXIgQXBpXG4gKlxuICpcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwSGVhZGVycyxcbiAgSHR0cFBhcmFtcyxcbiAgSHR0cFJlc3BvbnNlLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBQYXJhbWV0ZXJDb2RlYyxcbiAgSHR0cENvbnRleHQsXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjIH0gZnJvbSBcIi4uL2VuY29kZXJcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDAxRHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDAxLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwM0R0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwMy5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDREdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDQuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDA1RHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDA1LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwNkR0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwNi5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MTVEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MTUuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNTAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNTAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnaW5hdGVkVXNlckNhcGFjaXR5TGlzdER0byB9IGZyb20gXCIuLi9tb2RlbC9wYWdpbmF0ZWQtdXNlci1jYXBhY2l0eS1saXN0LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnaW5hdGVkVXNlclN1bUNhcGFjaXR5TGlzdER0byB9IGZyb20gXCIuLi9tb2RlbC9wYWdpbmF0ZWQtdXNlci1zdW0tY2FwYWNpdHktbGlzdC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFVzZXJDYXBhY2l0aWVzQ2FsY3VsYXRlQ2FwYWNpdHlDcmVhdGVFcnJvclJlc3BvbnNlNDAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL3VzZXItY2FwYWNpdGllcy1jYWxjdWxhdGUtY2FwYWNpdHktY3JlYXRlLWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVXNlckNhcGFjaXRpZXNHZXRQZXJpb2RDYXBhY2l0eUxpc3RFcnJvclJlc3BvbnNlNDAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL3VzZXItY2FwYWNpdGllcy1nZXQtcGVyaW9kLWNhcGFjaXR5LWxpc3QtZXJyb3ItcmVzcG9uc2U0MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBVc2VyQ2FwYWNpdGllc0xpc3RFcnJvclJlc3BvbnNlNDAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL3VzZXItY2FwYWNpdGllcy1saXN0LWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVXNlckNhcGFjaXRpZXNSZXRyaWV2ZUVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvdXNlci1jYXBhY2l0aWVzLXJldHJpZXZlLWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVXNlckNhcGFjaXR5RHRvIH0gZnJvbSBcIi4uL21vZGVsL3VzZXItY2FwYWNpdHkuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBVc2VyQ2FwYWNpdHlSZXF1ZXN0RHRvIH0gZnJvbSBcIi4uL21vZGVsL3VzZXItY2FwYWNpdHktcmVxdWVzdC5kdG9cIjtcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQkFTRV9QQVRILCBDT0xMRUNUSU9OX0ZPUk1BVFMgfSBmcm9tIFwiLi4vdmFyaWFibGVzXCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSBcIi4uL2FwaS5iYXNlLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIFVzZXJDYXBhY2l0aWVzQXBpU2VydmljZUludGVyZmFjZSxcbiAgVXNlckNhcGFjaXRpZXNDYWxjdWxhdGVDYXBhY2l0eUNyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gIFVzZXJDYXBhY2l0aWVzR2V0UGVyaW9kQ2FwYWNpdHlMaXN0UmVxdWVzdFBhcmFtcyxcbiAgVXNlckNhcGFjaXRpZXNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgVXNlckNhcGFjaXRpZXNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG59IGZyb20gXCIuL3VzZXItY2FwYWNpdGllcy1hcGkuc2VydmljZUludGVyZmFjZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBVc2VyQ2FwYWNpdGllc0FwaVNlcnZpY2VcbiAgZXh0ZW5kcyBCYXNlU2VydmljZVxuICBpbXBsZW1lbnRzIFVzZXJDYXBhY2l0aWVzQXBpU2VydmljZUludGVyZmFjZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uLFxuICApIHtcbiAgICBzdXBlcihiYXNlUGF0aCwgY29uZmlndXJhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUnVuIGNhbGN1bGF0ZSBjYXBhY2l0eSB0YXNrLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIHVzZXJDYXBhY2l0aWVzQ2FsY3VsYXRlQ2FwYWNpdHlDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IFVzZXJDYXBhY2l0aWVzQ2FsY3VsYXRlQ2FwYWNpdHlDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8VXNlckNhcGFjaXR5RHRvPjtcbiAgcHVibGljIHVzZXJDYXBhY2l0aWVzQ2FsY3VsYXRlQ2FwYWNpdHlDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IFVzZXJDYXBhY2l0aWVzQ2FsY3VsYXRlQ2FwYWNpdHlDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxVc2VyQ2FwYWNpdHlEdG8+PjtcbiAgcHVibGljIHVzZXJDYXBhY2l0aWVzQ2FsY3VsYXRlQ2FwYWNpdHlDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IFVzZXJDYXBhY2l0aWVzQ2FsY3VsYXRlQ2FwYWNpdHlDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8VXNlckNhcGFjaXR5RHRvPj47XG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc0NhbGN1bGF0ZUNhcGFjaXR5Q3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBVc2VyQ2FwYWNpdGllc0NhbGN1bGF0ZUNhcGFjaXR5Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlOiBhbnkgPSBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVzZXJDYXBhY2l0eVJlcXVlc3REdG8gPSByZXF1ZXN0UGFyYW1ldGVycz8udXNlckNhcGFjaXR5UmVxdWVzdER0bztcbiAgICBpZiAoXG4gICAgICB1c2VyQ2FwYWNpdHlSZXF1ZXN0RHRvID09PSBudWxsIHx8XG4gICAgICB1c2VyQ2FwYWNpdHlSZXF1ZXN0RHRvID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgdXNlckNhcGFjaXR5UmVxdWVzdER0byB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVzZXJDYXBhY2l0aWVzQ2FsY3VsYXRlQ2FwYWNpdHlDcmVhdGUuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkQ3JlZGVudGlhbFRvSGVhZGVycyhcbiAgICAgIFwiand0QXV0aFwiLFxuICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICBsb2NhbFZhckhlYWRlcnMsXG4gICAgICBcIkJlYXJlciBcIixcbiAgICApO1xuXG4gICAgY29uc3QgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zPy5odHRwSGVhZGVyQWNjZXB0ID8/XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KFtcImFwcGxpY2F0aW9uL2pzb25cIl0pO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkFjY2VwdFwiLFxuICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgPVxuICAgICAgb3B0aW9ucz8uY29udGV4dCA/PyBuZXcgSHR0cENvbnRleHQoKTtcblxuICAgIGNvbnN0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiA9IG9wdGlvbnM/LnRyYW5zZmVyQ2FjaGUgPz8gdHJ1ZTtcblxuICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgIFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIixcbiAgICAgIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLFxuICAgIF07XG4gICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICBodHRwQ29udGVudFR5cGVTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlVHlwZV86IFwidGV4dFwiIHwgXCJqc29uXCIgfCBcImJsb2JcIiA9IFwianNvblwiO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoXCJ0ZXh0XCIpKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcInRleHRcIjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImpzb25cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImJsb2JcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvdjEvdXNlci1jYXBhY2l0aWVzL2NhbGN1bGF0ZS1jYXBhY2l0eS9gO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxVc2VyQ2FwYWNpdHlEdG8+KFxuICAgICAgXCJwb3N0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgYm9keTogdXNlckNhcGFjaXR5UmVxdWVzdER0byxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2FwYWNpdHkgc3VtIGZvciBwZXJpb2QuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNHZXRQZXJpb2RDYXBhY2l0eUxpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IFVzZXJDYXBhY2l0aWVzR2V0UGVyaW9kQ2FwYWNpdHlMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPFBhZ2luYXRlZFVzZXJTdW1DYXBhY2l0eUxpc3REdG8+O1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNHZXRQZXJpb2RDYXBhY2l0eUxpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IFVzZXJDYXBhY2l0aWVzR2V0UGVyaW9kQ2FwYWNpdHlMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8UGFnaW5hdGVkVXNlclN1bUNhcGFjaXR5TGlzdER0bz4+O1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNHZXRQZXJpb2RDYXBhY2l0eUxpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IFVzZXJDYXBhY2l0aWVzR2V0UGVyaW9kQ2FwYWNpdHlMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJldmVudHNcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFBhZ2luYXRlZFVzZXJTdW1DYXBhY2l0eUxpc3REdG8+PjtcbiAgcHVibGljIHVzZXJDYXBhY2l0aWVzR2V0UGVyaW9kQ2FwYWNpdHlMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBVc2VyQ2FwYWNpdGllc0dldFBlcmlvZENhcGFjaXR5TGlzdFJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZTogYW55ID0gXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBwZXJpb2RUeXBlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnBlcmlvZFR5cGU7XG4gICAgaWYgKHBlcmlvZFR5cGUgPT09IG51bGwgfHwgcGVyaW9kVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiUmVxdWlyZWQgcGFyYW1ldGVyIHBlcmlvZFR5cGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1c2VyQ2FwYWNpdGllc0dldFBlcmlvZENhcGFjaXR5TGlzdC5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGVHdGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uZGF0ZUd0ZTtcbiAgICBjb25zdCBkYXRlTHRlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmRhdGVMdGU7XG4gICAgY29uc3QgbGltaXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ubGltaXQ7XG4gICAgY29uc3Qgb2JqZWN0SWRzID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm9iamVjdElkcztcbiAgICBjb25zdCBvZmZzZXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ub2Zmc2V0O1xuICAgIGNvbnN0IG9yZGVyaW5nID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm9yZGVyaW5nO1xuICAgIGNvbnN0IHNlYXJjaCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zZWFyY2g7XG5cbiAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7IGVuY29kZXI6IHRoaXMuZW5jb2RlciB9KTtcbiAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICA8YW55PmRhdGVHdGUsXG4gICAgICBcImRhdGVfX2d0ZVwiLFxuICAgICk7XG4gICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgPGFueT5kYXRlTHRlLFxuICAgICAgXCJkYXRlX19sdGVcIixcbiAgICApO1xuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+bGltaXQsXG4gICAgICBcImxpbWl0XCIsXG4gICAgKTtcbiAgICBpZiAob2JqZWN0SWRzKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLm9iamVjdElkc10uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcIm9iamVjdF9pZHNcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+b2Zmc2V0LFxuICAgICAgXCJvZmZzZXRcIixcbiAgICApO1xuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+b3JkZXJpbmcsXG4gICAgICBcIm9yZGVyaW5nXCIsXG4gICAgKTtcbiAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICA8YW55PnBlcmlvZFR5cGUsXG4gICAgICBcInBlcmlvZF90eXBlXCIsXG4gICAgKTtcbiAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICA8YW55PnNlYXJjaCxcbiAgICAgIFwic2VhcmNoXCIsXG4gICAgKTtcblxuICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkQ3JlZGVudGlhbFRvSGVhZGVycyhcbiAgICAgIFwiand0QXV0aFwiLFxuICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICBsb2NhbFZhckhlYWRlcnMsXG4gICAgICBcIkJlYXJlciBcIixcbiAgICApO1xuXG4gICAgY29uc3QgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zPy5odHRwSGVhZGVyQWNjZXB0ID8/XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KFtcImFwcGxpY2F0aW9uL2pzb25cIl0pO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkFjY2VwdFwiLFxuICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgPVxuICAgICAgb3B0aW9ucz8uY29udGV4dCA/PyBuZXcgSHR0cENvbnRleHQoKTtcblxuICAgIGNvbnN0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiA9IG9wdGlvbnM/LnRyYW5zZmVyQ2FjaGUgPz8gdHJ1ZTtcblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL3VzZXItY2FwYWNpdGllcy9nZXQtcGVyaW9kLWNhcGFjaXR5L2A7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFBhZ2luYXRlZFVzZXJTdW1DYXBhY2l0eUxpc3REdG8+KFxuICAgICAgXCJnZXRcIixcbiAgICAgIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAge1xuICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRvbmx5IHZpZXcgc2V0IGZvciBVc2VyQ2FwYWNpdHkgbW9kZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogVXNlckNhcGFjaXRpZXNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPFBhZ2luYXRlZFVzZXJDYXBhY2l0eUxpc3REdG8+O1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogVXNlckNhcGFjaXRpZXNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8UGFnaW5hdGVkVXNlckNhcGFjaXR5TGlzdER0bz4+O1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogVXNlckNhcGFjaXRpZXNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJldmVudHNcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFBhZ2luYXRlZFVzZXJDYXBhY2l0eUxpc3REdG8+PjtcbiAgcHVibGljIHVzZXJDYXBhY2l0aWVzTGlzdChcbiAgICByZXF1ZXN0UGFyYW1ldGVycz86IFVzZXJDYXBhY2l0aWVzTGlzdFJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZTogYW55ID0gXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBicmFuY2hJZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5icmFuY2hJZDtcbiAgICBjb25zdCBicmFuY2hJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJyYW5jaElkSW47XG4gICAgY29uc3QgZGF0ZUd0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5kYXRlR3RlO1xuICAgIGNvbnN0IGRhdGVMdGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uZGF0ZUx0ZTtcbiAgICBjb25zdCBkZXBhcnRtZW50SWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uZGVwYXJ0bWVudElkO1xuICAgIGNvbnN0IGRlcGFydG1lbnRJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmRlcGFydG1lbnRJZEluO1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlkO1xuICAgIGNvbnN0IGlkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uaWRJbjtcbiAgICBjb25zdCBsaW1pdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5saW1pdDtcbiAgICBjb25zdCBvZmZzZXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ub2Zmc2V0O1xuICAgIGNvbnN0IG9yZGVyaW5nID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm9yZGVyaW5nO1xuICAgIGNvbnN0IHNlYXJjaCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zZWFyY2g7XG4gICAgY29uc3QgdXNlcklkID0gcmVxdWVzdFBhcmFtZXRlcnM/LnVzZXJJZDtcbiAgICBjb25zdCB1c2VySWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy51c2VySWRJbjtcbiAgICBjb25zdCB3b3JrVHlwZUlkID0gcmVxdWVzdFBhcmFtZXRlcnM/LndvcmtUeXBlSWQ7XG4gICAgY29uc3Qgd29ya1R5cGVJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LndvcmtUeXBlSWRJbjtcblxuICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHsgZW5jb2RlcjogdGhpcy5lbmNvZGVyIH0pO1xuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+YnJhbmNoSWQsXG4gICAgICBcImJyYW5jaF9faWRcIixcbiAgICApO1xuICAgIGlmIChicmFuY2hJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmJyYW5jaElkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJicmFuY2hfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgPGFueT5kYXRlR3RlLFxuICAgICAgXCJkYXRlX19ndGVcIixcbiAgICApO1xuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+ZGF0ZUx0ZSxcbiAgICAgIFwiZGF0ZV9fbHRlXCIsXG4gICAgKTtcbiAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICA8YW55PmRlcGFydG1lbnRJZCxcbiAgICAgIFwiZGVwYXJ0bWVudF9faWRcIixcbiAgICApO1xuICAgIGlmIChkZXBhcnRtZW50SWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5kZXBhcnRtZW50SWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImRlcGFydG1lbnRfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgPGFueT5pZCxcbiAgICAgIFwiaWRcIixcbiAgICApO1xuICAgIGlmIChpZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmlkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJpZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+bGltaXQsXG4gICAgICBcImxpbWl0XCIsXG4gICAgKTtcbiAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICA8YW55Pm9mZnNldCxcbiAgICAgIFwib2Zmc2V0XCIsXG4gICAgKTtcbiAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICA8YW55Pm9yZGVyaW5nLFxuICAgICAgXCJvcmRlcmluZ1wiLFxuICAgICk7XG4gICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgPGFueT5zZWFyY2gsXG4gICAgICBcInNlYXJjaFwiLFxuICAgICk7XG4gICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgPGFueT51c2VySWQsXG4gICAgICBcInVzZXJfX2lkXCIsXG4gICAgKTtcbiAgICBpZiAodXNlcklkSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4udXNlcklkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ1c2VyX19pZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+d29ya1R5cGVJZCxcbiAgICAgIFwid29ya190eXBlX19pZFwiLFxuICAgICk7XG4gICAgaWYgKHdvcmtUeXBlSWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi53b3JrVHlwZUlkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ3b3JrX3R5cGVfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChjb29raWVBdXRoKSByZXF1aXJlZFxuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGp3dEF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5jb25maWd1cmF0aW9uLmFkZENyZWRlbnRpYWxUb0hlYWRlcnMoXG4gICAgICBcImp3dEF1dGhcIixcbiAgICAgIFwiQXV0aG9yaXphdGlvblwiLFxuICAgICAgbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgXCJCZWFyZXIgXCIsXG4gICAgKTtcblxuICAgIGNvbnN0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucz8uaHR0cEhlYWRlckFjY2VwdCA/P1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChbXCJhcHBsaWNhdGlvbi9qc29uXCJdKTtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0ID1cbiAgICAgIG9wdGlvbnM/LmNvbnRleHQgPz8gbmV3IEh0dHBDb250ZXh0KCk7XG5cbiAgICBjb25zdCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gPSBvcHRpb25zPy50cmFuc2ZlckNhY2hlID8/IHRydWU7XG5cbiAgICBsZXQgcmVzcG9uc2VUeXBlXzogXCJ0ZXh0XCIgfCBcImpzb25cIiB8IFwiYmxvYlwiID0gXCJqc29uXCI7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aChcInRleHRcIikpIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwidGV4dFwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwianNvblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwiYmxvYlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS92MS91c2VyLWNhcGFjaXRpZXMvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8UGFnaW5hdGVkVXNlckNhcGFjaXR5TGlzdER0bz4oXG4gICAgICBcImdldFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZG9ubHkgdmlldyBzZXQgZm9yIFVzZXJDYXBhY2l0eSBtb2RlbC5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc1JldHJpZXZlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBVc2VyQ2FwYWNpdGllc1JldHJpZXZlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPFVzZXJDYXBhY2l0eUR0bz47XG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc1JldHJpZXZlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBVc2VyQ2FwYWNpdGllc1JldHJpZXZlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8VXNlckNhcGFjaXR5RHRvPj47XG4gIHB1YmxpYyB1c2VyQ2FwYWNpdGllc1JldHJpZXZlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBVc2VyQ2FwYWNpdGllc1JldHJpZXZlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJldmVudHNcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFVzZXJDYXBhY2l0eUR0bz4+O1xuICBwdWJsaWMgdXNlckNhcGFjaXRpZXNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogVXNlckNhcGFjaXRpZXNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZTogYW55ID0gXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBpZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pZDtcbiAgICBpZiAoaWQgPT09IG51bGwgfHwgaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlJlcXVpcmVkIHBhcmFtZXRlciBpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVzZXJDYXBhY2l0aWVzUmV0cmlldmUuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkQ3JlZGVudGlhbFRvSGVhZGVycyhcbiAgICAgIFwiand0QXV0aFwiLFxuICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICBsb2NhbFZhckhlYWRlcnMsXG4gICAgICBcIkJlYXJlciBcIixcbiAgICApO1xuXG4gICAgY29uc3QgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zPy5odHRwSGVhZGVyQWNjZXB0ID8/XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KFtcImFwcGxpY2F0aW9uL2pzb25cIl0pO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkFjY2VwdFwiLFxuICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgPVxuICAgICAgb3B0aW9ucz8uY29udGV4dCA/PyBuZXcgSHR0cENvbnRleHQoKTtcblxuICAgIGNvbnN0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiA9IG9wdGlvbnM/LnRyYW5zZmVyQ2FjaGUgPz8gdHJ1ZTtcblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL3VzZXItY2FwYWNpdGllcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7IG5hbWU6IFwiaWRcIiwgdmFsdWU6IGlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwibnVtYmVyXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCB9KX0vYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8VXNlckNhcGFjaXR5RHRvPihcbiAgICAgIFwiZ2V0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIl19
|