@myclub_se/data-access 2.9.4 → 2.9.5
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/esm2020/lib/api-models/api-booking-calendar.mjs +1 -1
- package/esm2020/lib/models/booking-calendar.mjs +4 -2
- package/esm2020/lib/services/booking-calendar.service.mjs +24 -1
- package/esm2020/lib/services/factories/booking-calendar-factory.mjs +2 -2
- package/fesm2015/myclub_se-data-access.mjs +27 -2
- package/fesm2015/myclub_se-data-access.mjs.map +1 -1
- package/fesm2020/myclub_se-data-access.mjs +27 -2
- package/fesm2020/myclub_se-data-access.mjs.map +1 -1
- package/lib/api-models/api-booking-calendar.d.ts +1 -0
- package/lib/models/booking-calendar.d.ts +3 -1
- package/lib/services/booking-calendar.service.d.ts +4 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWJvb2tpbmctY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWFjY2Vzcy9zcmMvbGliL2FwaS1tb2RlbHMvYXBpLWJvb2tpbmctY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBpQWN0aXZpdHlMb2NhdGlvbkdyb3VwfSBmcm9tIFwiLi9hcGktYWN0aXZpdHktbG9jYXRpb24tZ3JvdXBcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBcGlCb29raW5nQ2FsZW5kYXIge1xuICBpZDogc3RyaW5nO1xuICBjbHViX2lkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNsdWJfbmFtZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNlY3Rpb25faWQ6IHN0cmluZyB8IG51bGw7XG4gIHJlYWRvbmx5IHNlY3Rpb25fbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgdGVhbV9pZDogc3RyaW5nIHwgbnVsbDtcbiAgcmVhZG9ubHkgdGVhbV9uYW1lOiBzdHJpbmcgfCBudWxsO1xuICBzdGF0dXM6IHN0cmluZztcbiAgbG9jYXRpb25fZ3JvdXBzOiBBcnJheTxBcGlBY3Rpdml0eUxvY2F0aW9uR3JvdXA+
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWJvb2tpbmctY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWFjY2Vzcy9zcmMvbGliL2FwaS1tb2RlbHMvYXBpLWJvb2tpbmctY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBpQWN0aXZpdHlMb2NhdGlvbkdyb3VwfSBmcm9tIFwiLi9hcGktYWN0aXZpdHktbG9jYXRpb24tZ3JvdXBcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBcGlCb29raW5nQ2FsZW5kYXIge1xuICBpZDogc3RyaW5nO1xuICBjbHViX2lkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNsdWJfbmFtZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNlY3Rpb25faWQ6IHN0cmluZyB8IG51bGw7XG4gIHJlYWRvbmx5IHNlY3Rpb25fbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgdGVhbV9pZDogc3RyaW5nIHwgbnVsbDtcbiAgcmVhZG9ubHkgdGVhbV9uYW1lOiBzdHJpbmcgfCBudWxsO1xuICBzdGF0dXM6IHN0cmluZztcbiAgbG9jYXRpb25fZ3JvdXBzOiBBcnJheTxBcGlBY3Rpdml0eUxvY2F0aW9uR3JvdXA+IHwgbnVsbCxcbiAgbWF4X2FwcGxpY2F0aW9uX251bWJlcjogbnVtYmVyO1xuICBjYW5fdGVhbV9leHBvcnQ6IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FormArray, FormControl, FormGroup, Validators } from "@angular/forms";
|
|
2
2
|
import { ActivityLocationGroup } from "./activity-location-group";
|
|
3
3
|
export class BookingCalendar {
|
|
4
|
-
constructor(id, club_id, section_id, team_id, club_name, name, section_name, team_name, status, max_application_number, location_groups) {
|
|
4
|
+
constructor(id, club_id, section_id, team_id, club_name, name, section_name, team_name, status, max_application_number, can_team_export, location_groups) {
|
|
5
5
|
this.id = id;
|
|
6
6
|
this.club_id = club_id;
|
|
7
7
|
this.section_id = section_id;
|
|
@@ -12,6 +12,7 @@ export class BookingCalendar {
|
|
|
12
12
|
this.team_name = team_name;
|
|
13
13
|
this.status = status;
|
|
14
14
|
this.max_application_number = max_application_number;
|
|
15
|
+
this.can_team_export = can_team_export;
|
|
15
16
|
this.location_groups = location_groups;
|
|
16
17
|
}
|
|
17
18
|
static asFormGroup(calendar) {
|
|
@@ -33,7 +34,8 @@ export class BookingCalendar {
|
|
|
33
34
|
status: new FormControl(calendar?.status || 'preliminary'),
|
|
34
35
|
location_groups: new FormArray(locationGroups),
|
|
35
36
|
max_application_number: new FormControl(calendar?.max_application_number || 0),
|
|
37
|
+
can_team_export: new FormControl(calendar?.can_team_export || false)
|
|
36
38
|
});
|
|
37
39
|
}
|
|
38
40
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtYWNjZXNzL3NyYy9saWIvbW9kZWxzL2Jvb2tpbmctY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRWhFLE1BQU0sT0FBTyxlQUFlO0lBeUIxQixZQUNTLEVBQVUsRUFDVixPQUFlLEVBQ2YsVUFBeUIsRUFDekIsT0FBc0IsRUFDdEIsU0FBaUIsRUFDakIsSUFBWSxFQUNaLFlBQTJCLEVBQzNCLFNBQXdCLEVBQ3hCLE1BQXFCLEVBQ3JCLHNCQUE4QixFQUM5QixlQUF3QixFQUN4QixlQUFxRDtRQVhyRCxPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQ1YsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQWU7UUFDekIsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUN0QixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMzQixjQUFTLEdBQVQsU0FBUyxDQUFlO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFRO1FBQzlCLG9CQUFlLEdBQWYsZUFBZSxDQUFTO1FBQ3hCLG9CQUFlLEdBQWYsZUFBZSxDQUFzQztJQUU5RCxDQUFDO0lBdENELE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBMEI7UUFDM0MsTUFBTSxjQUFjLEdBQXFCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLFFBQVEsRUFBRSxlQUFlLEVBQUU7WUFDN0IsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFvQyxFQUFFLEVBQUU7Z0JBQ3hFLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDeEUsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUVELE9BQU8sSUFBSSxTQUFTLENBQUM7WUFDbkIsRUFBRSxFQUFFLElBQUksV0FBVyxDQUFTLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQy9DLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBUyxRQUFRLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxVQUFVLEVBQUUsSUFBSSxXQUFXLENBQWdCLFFBQVEsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsUUFBUSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDaEUsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFTLFFBQVEsRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO1lBQzdELElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBUyxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3hFLFlBQVksRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsUUFBUSxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDMUUsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFnQixRQUFRLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQztZQUNwRSxNQUFNLEVBQUUsSUFBSSxXQUFXLENBQVMsUUFBUSxFQUFFLE1BQU0sSUFBSSxhQUFhLENBQUM7WUFDbEUsZUFBZSxFQUFFLElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQztZQUM5QyxzQkFBc0IsRUFBRSxJQUFJLFdBQVcsQ0FBUyxRQUFRLEVBQUUsc0JBQXNCLElBQUksQ0FBQyxDQUFDO1lBQ3RGLGVBQWUsRUFBRSxJQUFJLFdBQVcsQ0FBVSxRQUFRLEVBQUUsZUFBZSxJQUFJLEtBQUssQ0FBQztTQUM5RSxDQUFDLENBQUM7SUFDTCxDQUFDO0NBaUJGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtBY3Rpdml0eUxvY2F0aW9uR3JvdXB9IGZyb20gXCIuL2FjdGl2aXR5LWxvY2F0aW9uLWdyb3VwXCI7XG5cbmV4cG9ydCBjbGFzcyBCb29raW5nQ2FsZW5kYXIge1xuICBzdGF0aWMgYXNGb3JtR3JvdXAoY2FsZW5kYXI/OiBCb29raW5nQ2FsZW5kYXIpIHtcbiAgICBjb25zdCBsb2NhdGlvbkdyb3VwczogQXJyYXk8Rm9ybUdyb3VwPiA9IFtdO1xuICAgIGlmIChjYWxlbmRhcj8ubG9jYXRpb25fZ3JvdXBzKSB7XG4gICAgICBjYWxlbmRhci5sb2NhdGlvbl9ncm91cHMuZm9yRWFjaCgobG9jYXRpb25Hcm91cDogQWN0aXZpdHlMb2NhdGlvbkdyb3VwKSA9PiB7XG4gICAgICAgIGxvY2F0aW9uR3JvdXBzLnB1c2goQWN0aXZpdHlMb2NhdGlvbkdyb3VwLmFzRm9ybUdyb3VwKGxvY2F0aW9uR3JvdXApKTtcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoe1xuICAgICAgaWQ6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KGNhbGVuZGFyPy5pZCB8fCAnJyksXG4gICAgICBjbHViX2lkOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihjYWxlbmRhcj8uY2x1Yl9pZCB8fCAnJyksXG4gICAgICBzZWN0aW9uX2lkOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oY2FsZW5kYXI/LnNlY3Rpb25faWQgfHwgJycpLFxuICAgICAgdGVhbV9pZDogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KGNhbGVuZGFyPy50ZWFtX2lkIHx8ICcnKSxcbiAgICAgIGNsdWJfbmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZz4oY2FsZW5kYXI/LmNsdWJfbmFtZSB8fCAnJyksXG4gICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihjYWxlbmRhcj8ubmFtZSB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICBzZWN0aW9uX25hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihjYWxlbmRhcj8uc2VjdGlvbl9uYW1lIHx8ICcnKSxcbiAgICAgIHRlYW1fbmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KGNhbGVuZGFyPy50ZWFtX25hbWUgfHwgJycpLFxuICAgICAgc3RhdHVzOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihjYWxlbmRhcj8uc3RhdHVzIHx8ICdwcmVsaW1pbmFyeScpLFxuICAgICAgbG9jYXRpb25fZ3JvdXBzOiBuZXcgRm9ybUFycmF5KGxvY2F0aW9uR3JvdXBzKSxcbiAgICAgIG1heF9hcHBsaWNhdGlvbl9udW1iZXI6IG5ldyBGb3JtQ29udHJvbDxudW1iZXI+KGNhbGVuZGFyPy5tYXhfYXBwbGljYXRpb25fbnVtYmVyIHx8IDApLFxuICAgICAgY2FuX3RlYW1fZXhwb3J0OiBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4oY2FsZW5kYXI/LmNhbl90ZWFtX2V4cG9ydCB8fCBmYWxzZSlcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpZDogc3RyaW5nLFxuICAgIHB1YmxpYyBjbHViX2lkOiBzdHJpbmcsXG4gICAgcHVibGljIHNlY3Rpb25faWQ6IHN0cmluZyB8IG51bGwsXG4gICAgcHVibGljIHRlYW1faWQ6IHN0cmluZyB8IG51bGwsXG4gICAgcHVibGljIGNsdWJfbmFtZTogc3RyaW5nLFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIHNlY3Rpb25fbmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgICBwdWJsaWMgdGVhbV9uYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgIHB1YmxpYyBzdGF0dXM6IHN0cmluZyB8IG51bGwsXG4gICAgcHVibGljIG1heF9hcHBsaWNhdGlvbl9udW1iZXI6IG51bWJlcixcbiAgICBwdWJsaWMgY2FuX3RlYW1fZXhwb3J0OiBib29sZWFuLFxuICAgIHB1YmxpYyBsb2NhdGlvbl9ncm91cHM/OiBBcnJheTxBY3Rpdml0eUxvY2F0aW9uR3JvdXA+IHwgbnVsbCxcbiAgKSB7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -696,6 +696,29 @@ export class BookingCalendarService {
|
|
|
696
696
|
teamId,
|
|
697
697
|
}, availableTime);
|
|
698
698
|
}
|
|
699
|
+
deleteBookingCalendarApplicationTime(role, clubOrSectionOrTeamId, availableTimeId) {
|
|
700
|
+
if (role == Role.ClubAdmin) {
|
|
701
|
+
return this.deleteClubBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
702
|
+
}
|
|
703
|
+
else if (role == Role.SectionAdmin) {
|
|
704
|
+
return this.deleteSectionBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
705
|
+
}
|
|
706
|
+
return this.deleteTeamBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
707
|
+
}
|
|
708
|
+
deleteClubBookingCalendarApplicationTime(clubId, id) {
|
|
709
|
+
return this.apiService
|
|
710
|
+
.deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
711
|
+
clubId,
|
|
712
|
+
id
|
|
713
|
+
});
|
|
714
|
+
}
|
|
715
|
+
deleteSectionBookingCalendarApplicationTime(sectionId, id) {
|
|
716
|
+
return this.apiService
|
|
717
|
+
.deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
718
|
+
sectionId,
|
|
719
|
+
id
|
|
720
|
+
});
|
|
721
|
+
}
|
|
699
722
|
deleteTeamBookingCalendarApplicationTime(teamId, id) {
|
|
700
723
|
return this.apiService
|
|
701
724
|
.deleteResource(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
@@ -712,4 +735,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImpo
|
|
|
712
735
|
providedIn: 'root'
|
|
713
736
|
}]
|
|
714
737
|
}], ctorParameters: function () { return [{ type: i1.ApiService }]; } });
|
|
715
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBTUwsSUFBSSxHQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsc0JBQXNCLEVBQ3ZCLE1BQU0sYUFBYSxDQUFDOzs7QUFFckIsTUFBTSwyQkFBMkIsR0FBRywrQkFBK0IsQ0FBQztBQUNwRSxNQUFNLDBCQUEwQixHQUFHLG1DQUFtQyxDQUFDO0FBQ3ZFLE1BQU0sZ0NBQWdDLEdBQUcsMkJBQTJCLENBQUM7QUFDckUsTUFBTSxrREFBa0QsR0FBRyw2Q0FBNkMsQ0FBQztBQUN6RyxNQUFNLHFDQUFxQyxHQUFHLGdDQUFnQyxDQUFDO0FBQy9FLE1BQU0sc0NBQXNDLEdBQUcsaUNBQWlDLENBQUM7QUFDakYsTUFBTSxxQ0FBcUMsR0FBRyxnQ0FBZ0MsQ0FBQztBQUMvRSxNQUFNLCtCQUErQixHQUFHLCtCQUErQixDQUFDO0FBQ3hFLE1BQU0sMENBQTBDLEdBQUcsbUNBQW1DLENBQUM7QUFDdkYsTUFBTSx3Q0FBd0MsR0FBRyw4QkFBOEIsQ0FBQztBQUNoRixNQUFNLHVDQUF1QyxHQUFHLGtDQUFrQyxDQUFDO0FBQ25GLE1BQU0sNkNBQTZDLEdBQUcsc0NBQXNDLENBQUM7QUFDN0YsTUFBTSwwQkFBMEIsR0FBRyxzQ0FBc0MsQ0FBQztBQUMxRSxNQUFNLDJDQUEyQyxHQUFHLDJDQUEyQyxDQUFDO0FBQ2hHLE1BQU0sNENBQTRDLEdBQUcsdUNBQXVDLENBQUM7QUFFN0YsTUFBTSw4QkFBOEIsR0FBRyxrQ0FBa0MsQ0FBQztBQUMxRSxNQUFNLDZCQUE2QixHQUFHLHNDQUFzQyxDQUFDO0FBQzdFLE1BQU0sbUNBQW1DLEdBQUcsOEJBQThCLENBQUM7QUFDM0UsTUFBTSxxREFBcUQsR0FBRyxnREFBZ0QsQ0FBQztBQUMvRyxNQUFNLHdDQUF3QyxHQUFHLG1DQUFtQyxDQUFDO0FBQ3JGLE1BQU0seUNBQXlDLEdBQUcsb0NBQW9DLENBQUM7QUFDdkYsTUFBTSx3Q0FBd0MsR0FBRyxtQ0FBbUMsQ0FBQztBQUNyRixNQUFNLGtDQUFrQyxHQUFHLGtDQUFrQyxDQUFDO0FBQzlFLE1BQU0sNkNBQTZDLEdBQUcsc0NBQXNDLENBQUM7QUFDN0YsTUFBTSwyQ0FBMkMsR0FBRyxpQ0FBaUMsQ0FBQztBQUN0RixNQUFNLDBDQUEwQyxHQUFHLHFDQUFxQyxDQUFDO0FBQ3pGLE1BQU0sZ0RBQWdELEdBQUcseUNBQXlDLENBQUM7QUFDbkcsTUFBTSw2QkFBNkIsR0FBRyx5Q0FBeUMsQ0FBQztBQUNoRixNQUFNLDhDQUE4QyxHQUFHLDhDQUE4QyxDQUFDO0FBQ3RHLE1BQU0sK0NBQStDLEdBQUcsMENBQTBDLENBQUM7QUFFbkcsTUFBTSwyQkFBMkIsR0FBRywrQkFBK0IsQ0FBQztBQUNwRSxNQUFNLGdDQUFnQyxHQUFHLDJCQUEyQixDQUFDO0FBQ3JFLE1BQU0scUNBQXFDLEdBQUcsZ0NBQWdDLENBQUM7QUFDL0UsTUFBTSxrREFBa0QsR0FBRyw2Q0FBNkMsQ0FBQztBQUN6RyxNQUFNLDBCQUEwQixHQUFHLHNDQUFzQyxDQUFDO0FBQzFFLE1BQU0sd0NBQXdDLEdBQUcsOEJBQThCLENBQUM7QUFDaEYsTUFBTSx1Q0FBdUMsR0FBRyxrQ0FBa0MsQ0FBQztBQUNuRixNQUFNLCtCQUErQixHQUFHLCtCQUErQixDQUFDO0FBRXhFLE1BQU0sNENBQTRDLEdBQUcsdUNBQXVDLENBQUM7QUFDN0YsTUFBTSwyQ0FBMkMsR0FBRywyQ0FBMkMsQ0FBQztBQUdoRyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQ1MsWUFBMkIsSUFBSSxFQUMvQixVQUF5QixJQUFJLEVBQzdCLGNBQStCLEVBQUUsRUFDakMsY0FBK0IsRUFBRSxFQUNqQyxTQUEwQixFQUFFLEVBQzVCLFVBQTJCLEVBQUUsRUFDN0IsbUJBQW9DLEVBQUUsRUFDdEMsa0JBQW1DLEVBQUUsRUFDckMsa0JBQWtDLElBQUksRUFDdEMsdUJBQXVDLElBQUksRUFDM0MsU0FBd0IsSUFBSTtRQVY1QixjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUMvQixZQUFPLEdBQVAsT0FBTyxDQUFzQjtRQUM3QixnQkFBVyxHQUFYLFdBQVcsQ0FBc0I7UUFDakMsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQzVCLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBQzdCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBc0I7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQXNCO1FBQ3JDLG9CQUFlLEdBQWYsZUFBZSxDQUF1QjtRQUN0Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXVCO1FBQzNDLFdBQU0sR0FBTixNQUFNLENBQXNCO0lBRXJDLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQXlCO1FBQ3pDLE9BQU8sSUFBSSxJQUFJLENBQ2IsTUFBTSxDQUFDLFNBQVMsRUFDaEIsTUFBTSxDQUFDLE9BQU8sRUFDZCxNQUFNLENBQUMsV0FBVyxFQUNsQixNQUFNLENBQUMsV0FBVyxFQUNsQixNQUFNLENBQUMsTUFBTSxFQUNiLE1BQU0sQ0FBQyxPQUFPLEVBQ2QsTUFBTSxDQUFDLGdCQUFnQixFQUN2QixNQUFNLENBQUMsZUFBZSxFQUN0QixNQUFNLENBQUMsZUFBZSxFQUN0QixNQUFNLENBQUMsb0JBQW9CLEVBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxNQUFNLEdBQThCLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO1FBRTFELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUNyQztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUNuQztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUMvQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDbkQ7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDL0MsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQ25EO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtZQUN6RCxNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQzlEO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ3JDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUN6QztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUN2QyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDM0M7UUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDdkQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDNUQ7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDN0MsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUM1RDtRQUVELElBQUksT0FBTyxJQUFJLENBQUMsb0JBQW9CLEtBQUssU0FBUyxFQUFFO1lBQ2xELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN0RTtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBTUQsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQzFDLENBQUM7SUFFRCwwQkFBMEI7SUFFMUIscUJBQXFCLENBQUMsSUFBVSxFQUFFLHFCQUE2QixFQUFFLFFBQWtDO1FBQ2pHLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMscUJBQXFCLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDeEU7UUFDRCxPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU8seUJBQXlCLENBQUMsTUFBYyxFQUFFLFFBQWtDO1FBQ2xGLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFlBQVksQ0FDWCxzQkFBc0IsRUFDdEIsSUFBSSxDQUFDLFNBQVMsRUFDZCwyQkFBMkIsRUFDM0I7WUFDRSxNQUFNO1NBQ1AsRUFDRCxRQUFRLENBQ1QsQ0FBQTtJQUNMLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxTQUFpQixFQUFFLFFBQWtDO1FBQ3hGLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFlBQVksQ0FDWCxzQkFBc0IsRUFDdEIsSUFBSSxDQUFDLFlBQVksRUFDakIsOEJBQThCLEVBQzlCO1lBQ0UsU0FBUztTQUNWLEVBQ0QsUUFBUSxDQUNULENBQUE7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBVSxFQUFFLHFCQUE2QixFQUFFLE9BQXNCLElBQUk7UUFDdkYsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNsRTthQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEMsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDckU7UUFDRCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU8sdUJBQXVCLENBQUMsTUFBYyxFQUFFLE9BQXNCLElBQUk7UUFDeEUsTUFBTSxNQUFNLEdBQThCLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO1FBRTFELElBQUksSUFBSSxFQUFFO1lBQ1IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztTQUN2QjtRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsYUFBYSxDQUNaLHNCQUFzQixFQUN0QixJQUFJLENBQUMsU0FBUyxFQUNkLDJCQUEyQixFQUMzQixFQUFDLE1BQU0sRUFBQyxFQUNSO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxTQUFpQixFQUFFLE9BQXNCLElBQUk7UUFDOUUsTUFBTSxNQUFNLEdBQThCLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO1FBRTFELElBQUksSUFBSSxFQUFFO1lBQ1IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztTQUN2QjtRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsYUFBYSxDQUNaLHNCQUFzQixFQUN0QixJQUFJLENBQUMsWUFBWSxFQUNqQiw4QkFBOEIsRUFDOUIsRUFBQyxTQUFTLEVBQUMsRUFDWDtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsTUFBYyxFQUFFLE9BQXNCLElBQUk7UUFDeEUsTUFBTSxNQUFNLEdBQThCLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO1FBRTFELElBQUksSUFBSSxFQUFFO1lBQ1IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztTQUN2QjtRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsYUFBYSxDQUNaLHNCQUFzQixFQUN0QixJQUFJLENBQUMsU0FBUyxFQUNkLDJCQUEyQixFQUMzQixFQUFDLE1BQU0sRUFBQyxFQUNSO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxJQUFVLEVBQUUscUJBQTZCLEVBQUUsUUFBeUI7UUFDeEYsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsQ0FBQTtTQUN2RTtRQUNELE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxNQUFjLEVBQUUsUUFBeUI7UUFDekUsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2Isc0JBQXNCLEVBQ3RCLElBQUksQ0FBQyxTQUFTLEVBQ2QsMEJBQTBCLEVBQzFCO1lBQ0UsTUFBTTtZQUNOLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTtTQUNoQixFQUNELFFBQVEsQ0FDVCxDQUFDO0lBQ04sQ0FBQztJQUVPLDRCQUE0QixDQUFDLFNBQWlCLEVBQUUsUUFBeUI7UUFDL0UsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2Isc0JBQXNCLEVBQ3RCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLDZCQUE2QixFQUM3QjtZQUNFLFNBQVM7WUFDVCxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUU7U0FDaEIsRUFDRCxRQUFRLENBQ1QsQ0FBQztJQUNOLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxJQUFVLEVBQUUscUJBQTZCLEVBQUUsRUFBVTtRQUN6RSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsT0FBTyxJQUFJLENBQUMsNEJBQTRCLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLHlCQUF5QixDQUFDLE1BQWMsRUFBRSxFQUFVO1FBQzFELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLElBQUksQ0FBQyxTQUFTLEVBQ2QsMEJBQTBCLEVBQzFCO1lBQ0UsTUFBTTtZQUNOLEVBQUU7U0FDSCxDQUNGLENBQUM7SUFDTixDQUFDO0lBRU8sNEJBQTRCLENBQUMsU0FBaUIsRUFBRSxFQUFVO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLElBQUksQ0FBQyxZQUFZLEVBQ2pCLDZCQUE2QixFQUM3QjtZQUNFLFNBQVM7WUFDVCxFQUFFO1NBQ0gsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELFlBQVk7SUFFWiwrQkFBK0I7SUFFL0IseUJBQXlCLENBQUMsSUFBVSxFQUFFLHFCQUE2QixFQUFFLElBQWtDO1FBQ3JHLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEU7UUFDRCxPQUFPLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU8sNkJBQTZCLENBQUMsTUFBYyxFQUFFLElBQWtDO1FBQ3RGLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsWUFBWSxDQUNYLDBCQUEwQixFQUMxQixJQUFJLENBQUMsU0FBUyxFQUNkLGdDQUFnQyxFQUNoQztZQUNFLE1BQU07U0FDUCxFQUNELElBQUksQ0FDTCxDQUFBO0lBQ0wsQ0FBQztJQUVPLGdDQUFnQyxDQUFDLFNBQWlCLEVBQUUsSUFBa0M7UUFDNUYsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixZQUFZLENBQ1gsMEJBQTBCLEVBQzFCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLG1DQUFtQyxFQUNuQztZQUNFLFNBQVM7U0FDVixFQUNELElBQUksQ0FDTCxDQUFBO0lBQ0wsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQVUsRUFBRSxxQkFBNkIsRUFBRSxpQkFBb0M7UUFDckcsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ25GO2FBQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3RGO1FBQ0QsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtJQUNuRixDQUFDO0lBRU8sMkJBQTJCLENBQUMsTUFBYyxFQUFFLGlCQUFvQztRQUN0RixNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU1QyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWiwwQkFBMEIsRUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFDZCxnQ0FBZ0MsRUFDaEMsRUFBQyxNQUFNLEVBQUMsRUFDUjtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRU8sOEJBQThCLENBQUMsU0FBaUIsRUFBRSxpQkFBb0M7UUFDNUYsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osMEJBQTBCLEVBQzFCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLG1DQUFtQyxFQUNuQyxFQUFDLFNBQVMsRUFBQyxFQUNYO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFTywyQkFBMkIsQ0FBQyxNQUFjLEVBQUUsaUJBQW9DO1FBQ3RGLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsYUFBYSxDQUNaLDBCQUEwQixFQUMxQixJQUFJLENBQUMsU0FBUyxFQUNkLGdDQUFnQyxFQUNoQyxFQUFDLE1BQU0sRUFBQyxFQUNSO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFVLEVBQUUscUJBQTZCLEVBQUUsTUFBYztRQUM5RSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZFO2FBQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQTtTQUN6RTtRQUNELE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxNQUFjLEVBQUUsTUFBYztRQUMvRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFdBQVcsQ0FDViwwQkFBMEIsRUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFDZCwrQkFBK0IsRUFDL0I7WUFDRSxNQUFNO1lBQ04sRUFBRSxFQUFFLE1BQU07U0FDWCxDQUNGLENBQUM7SUFDTixDQUFDO0lBRU8sNkJBQTZCLENBQUMsU0FBaUIsRUFBRSxNQUFjO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLDBCQUEwQixFQUMxQixJQUFJLENBQUMsWUFBWSxFQUNqQixrQ0FBa0MsRUFDbEM7WUFDRSxTQUFTO1lBQ1QsRUFBRSxFQUFFLE1BQU07U0FDWCxDQUNGLENBQUM7SUFDTixDQUFDO0lBRU8sMEJBQTBCLENBQUMsTUFBYyxFQUFFLE1BQWM7UUFDL0QsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixXQUFXLENBQ1YsMEJBQTBCLEVBQzFCLElBQUksQ0FBQyxTQUFTLEVBQ2QsK0JBQStCLEVBQy9CO1lBQ0UsTUFBTTtZQUNOLEVBQUUsRUFBRSxNQUFNO1NBQ1gsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELHNDQUFzQyxDQUFDLElBQVUsRUFBRSxxQkFBNkIsRUFBRSxpQkFBb0M7UUFDcEgsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ2xHO2FBQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO1NBQ3BHO1FBQ0QsT0FBTyxJQUFJLENBQUMsMENBQTBDLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtJQUNsRyxDQUFDO0lBRU8sMENBQTBDLENBQUMsTUFBYyxFQUFFLGlCQUFvQztRQUNyRyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU1QyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWiwwQkFBMEIsRUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFDZCxrREFBa0QsRUFDbEQsRUFBQyxNQUFNLEVBQUMsRUFDUjtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRU8sNkNBQTZDLENBQUMsU0FBaUIsRUFBRSxpQkFBb0M7UUFDM0csTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osMEJBQTBCLEVBQzFCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHFEQUFxRCxFQUNyRCxFQUFDLFNBQVMsRUFBQyxFQUNYO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFTywwQ0FBMEMsQ0FBQyxNQUFjLEVBQUUsaUJBQW9DO1FBQ3JHLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsYUFBYSxDQUNaLDBCQUEwQixFQUMxQixJQUFJLENBQUMsU0FBUyxFQUNkLGtEQUFrRCxFQUNsRCxFQUFDLE1BQU0sRUFBQyxFQUNSO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFRCxrQ0FBa0MsQ0FBQyxJQUFVLEVBQUUscUJBQTZCLEVBQUUsaUJBQW9DO1FBQ2hILElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsc0NBQXNDLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztTQUM5RjthQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEMsT0FBTyxJQUFJLENBQUMseUNBQXlDLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtTQUNoRztRQUNELE9BQU8sSUFBSSxDQUFDLHNDQUFzQyxDQUFDLHFCQUFxQixFQUFFLGlCQUFpQixDQUFDLENBQUE7SUFDOUYsQ0FBQztJQUVPLHNDQUFzQyxDQUFDLE1BQWMsRUFBRSxpQkFBb0M7UUFDakcsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1oscUNBQXFDLEVBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQ2QsNENBQTRDLEVBQzVDLEVBQUMsTUFBTSxFQUFDLEVBQ1I7WUFDRSxNQUFNO1NBQ1AsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVPLHlDQUF5QyxDQUFDLFNBQWlCLEVBQUUsaUJBQW9DO1FBQ3ZHLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsYUFBYSxDQUNaLHFDQUFxQyxFQUNyQyxJQUFJLENBQUMsWUFBWSxFQUNqQiwrQ0FBK0MsRUFDL0MsRUFBQyxTQUFTLEVBQUMsRUFDWDtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRU8sc0NBQXNDLENBQUMsTUFBYyxFQUFFLGlCQUFvQztRQUNqRyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU1QyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWixxQ0FBcUMsRUFDckMsSUFBSSxDQUFDLFNBQVMsRUFDZCw0Q0FBNEMsRUFDNUMsRUFBQyxNQUFNLEVBQUMsRUFDUjtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRUQsd0JBQXdCLENBQ3RCLElBQVUsRUFDVixxQkFBNkIsRUFDN0IsbUJBQTZCLEVBQzdCLGdCQUF5QixLQUFLLEVBQzlCLGlCQUFvQztRQUVwQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3hIO1FBQ0QsT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUMscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDNUgsQ0FBQztJQUVPLDRCQUE0QixDQUNsQyxNQUFjLEVBQ2QsbUJBQTZCLEVBQzdCLGdCQUF5QixLQUFLLEVBQzlCLGlCQUFvQztRQUVwQyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU1QyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLHNCQUFzQixDQUNyQixJQUFJLENBQUMsU0FBUyxFQUNkLHFDQUFxQyxFQUNyQyxFQUFDLE1BQU0sRUFBQyxFQUNSO1lBQ0UscUJBQXFCLEVBQUUsbUJBQW1CO1lBQzFDLGVBQWUsRUFBRSxhQUFhO1NBQy9CLEVBQ0Q7WUFDRSxNQUFNO1NBQ1AsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVPLCtCQUErQixDQUNyQyxTQUFpQixFQUNqQixtQkFBNkIsRUFDN0IsZ0JBQXlCLEtBQUssRUFDOUIsaUJBQW9DO1FBRXBDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsc0JBQXNCLENBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHdDQUF3QyxFQUN4QyxFQUFDLFNBQVMsRUFBQyxFQUNYO1lBQ0UscUJBQXFCLEVBQUUsbUJBQW1CO1lBQzFDLGVBQWUsRUFBRSxhQUFhO1NBQy9CLEVBQ0Q7WUFDRSxNQUFNO1NBQ1AsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELHlCQUF5QixDQUN2QixJQUFVLEVBQ1YscUJBQTZCLEVBQzdCLG9CQUE0QixFQUM1QixtQkFBNkIsRUFDN0IscUJBQThCLEtBQUssRUFDbkMsNkJBQXNDLEtBQUssRUFDM0MsaUJBQW9DO1FBRXBDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztTQUNoTDtRQUNELE9BQU8sSUFBSSxDQUFDLGdDQUFnQyxDQUFDLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDcEwsQ0FBQztJQUVPLDZCQUE2QixDQUNuQyxNQUFjLEVBQ2Qsb0JBQTRCLEVBQzVCLG1CQUE2QixFQUM3QixxQkFBOEIsS0FBSyxFQUNuQyw2QkFBc0MsS0FBSyxFQUMzQyxpQkFBb0M7UUFFcEMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixzQkFBc0IsQ0FDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCxzQ0FBc0MsRUFDdEMsRUFBQyxNQUFNLEVBQUMsRUFDUjtZQUNFLElBQUksRUFBRTtnQkFDSix1QkFBdUIsRUFBRSxvQkFBb0I7Z0JBQzdDLHFCQUFxQixFQUFFLG1CQUFtQjtnQkFDMUMsb0JBQW9CLEVBQUUsa0JBQWtCO2dCQUN4Qyw2QkFBNkIsRUFBRSwwQkFBMEI7YUFDMUQ7WUFDRCxNQUFNO1NBQ1AsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVPLGdDQUFnQyxDQUN0QyxTQUFpQixFQUNqQixvQkFBNEIsRUFDNUIsbUJBQTZCLEVBQzdCLHFCQUE4QixLQUFLLEVBQ25DLDZCQUFzQyxLQUFLLEVBQzNDLGlCQUFvQztRQUVwQyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU1QyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLHNCQUFzQixDQUNyQixJQUFJLENBQUMsWUFBWSxFQUNqQix5Q0FBeUMsRUFDekMsRUFBQyxTQUFTLEVBQUMsRUFDWDtZQUNFLElBQUksRUFBRTtnQkFDSix1QkFBdUIsRUFBRSxvQkFBb0I7Z0JBQzdDLHFCQUFxQixFQUFFLG1CQUFtQjtnQkFDMUMsb0JBQW9CLEVBQUUsa0JBQWtCO2dCQUN4Qyw2QkFBNkIsRUFBRSwwQkFBMEI7YUFDMUQ7WUFDRCxNQUFNO1NBQ1AsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELHdCQUF3QixDQUN0QixJQUFVLEVBQ1YscUJBQTZCLEVBQzdCLG9CQUE0QixFQUM1QixtQkFBNkIsRUFDN0IsaUJBQW9DO1FBRXBDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsNEJBQTRCLENBQUMscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztTQUMvSDthQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEMsT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUMscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtTQUNqSTtRQUNELE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDaEksQ0FBQztJQUVPLDRCQUE0QixDQUNsQyxNQUFjLEVBQ2Qsb0JBQTRCLEVBQzVCLG1CQUE2QixFQUM3QixpQkFBb0M7UUFFcEMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixzQkFBc0IsQ0FDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCxxQ0FBcUMsRUFDckMsRUFBQyxNQUFNLEVBQUMsRUFDUjtZQUNFLHVCQUF1QixFQUFFLG9CQUFvQjtZQUM3QyxxQkFBcUIsRUFBRSxtQkFBbUI7U0FDM0MsRUFDRCxFQUFDLE1BQU0sRUFBQyxDQUNULENBQUE7SUFDTCxDQUFDO0lBRU8sK0JBQStCLENBQ3JDLFNBQWlCLEVBQ2pCLG9CQUE0QixFQUM1QixtQkFBNkIsRUFDN0IsaUJBQW9DO1FBRXBDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsc0JBQXNCLENBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHdDQUF3QyxFQUN4QyxFQUFDLFNBQVMsRUFBQyxFQUNYO1lBQ0UsdUJBQXVCLEVBQUUsb0JBQW9CO1lBQzdDLHFCQUFxQixFQUFFLG1CQUFtQjtTQUMzQyxFQUNELEVBQUMsTUFBTSxFQUFDLENBQ1QsQ0FBQTtJQUNMLENBQUM7SUFFTyw0QkFBNEIsQ0FDbEMsTUFBYyxFQUNkLG9CQUE0QixFQUM1QixtQkFBNkIsRUFDN0IsaUJBQW9DO1FBRXBDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsc0JBQXNCLENBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQ2QscUNBQXFDLEVBQ3JDLEVBQUMsTUFBTSxFQUFDLEVBQ1I7WUFDRSx1QkFBdUIsRUFBRSxvQkFBb0I7WUFDN0MscUJBQXFCLEVBQUUsbUJBQW1CO1NBQzNDLEVBQ0QsRUFBQyxNQUFNLEVBQUMsQ0FDVCxDQUFBO0lBQ0wsQ0FBQztJQUVELHlCQUF5QixDQUFDLElBQVUsRUFBRSxxQkFBNkIsRUFBRSxJQUF5QjtRQUM1RixJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0NBQWdDLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVPLDZCQUE2QixDQUFDLE1BQWMsRUFBRSxJQUF5QjtRQUM3RSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYiwwQkFBMEIsRUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFDZCwrQkFBK0IsRUFDL0I7WUFDRSxNQUFNO1lBQ04sRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ1osRUFDRCxJQUFJLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxnQ0FBZ0MsQ0FBQyxTQUFpQixFQUFFLElBQXlCO1FBQ25GLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLDBCQUEwQixFQUMxQixJQUFJLENBQUMsWUFBWSxFQUNqQixrQ0FBa0MsRUFDbEM7WUFDRSxTQUFTO1lBQ1QsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ1osRUFDRCxJQUFJLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxJQUFVLEVBQUUscUJBQTZCLEVBQUUsRUFBVTtRQUM3RSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3RFO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0NBQWdDLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLDZCQUE2QixDQUFDLE1BQWMsRUFBRSxFQUFVO1FBQzlELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLElBQUksQ0FBQyxTQUFTLEVBQ2QsK0JBQStCLEVBQy9CO1lBQ0UsTUFBTTtZQUNOLEVBQUU7U0FDSCxDQUNGLENBQUM7SUFDTixDQUFDO0lBRU8sZ0NBQWdDLENBQUMsU0FBaUIsRUFBRSxFQUFVO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLElBQUksQ0FBQyxZQUFZLEVBQ2pCLGtDQUFrQyxFQUNsQztZQUNFLFNBQVM7WUFDVCxFQUFFO1NBQ0gsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELG1DQUFtQyxDQUFDLElBQVUsRUFBRSxxQkFBNkIsRUFBRSxFQUFVLEVBQUUsZUFBOEI7UUFDdkgsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDakc7UUFDRCxPQUFPLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVPLHVDQUF1QyxDQUFDLE1BQWMsRUFBRSxFQUFVLEVBQUUsZUFBOEI7UUFDeEcsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixzQkFBc0IsQ0FDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCwwQ0FBMEMsRUFDMUM7WUFDRSxNQUFNO1lBQ04sRUFBRTtTQUNILEVBQ0QsRUFBQyxJQUFJLEVBQUUsRUFBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUMsRUFBQyxDQUM3QyxDQUFDO0lBQ04sQ0FBQztJQUVPLDBDQUEwQyxDQUFDLFNBQWlCLEVBQUUsRUFBVSxFQUFFLGVBQThCO1FBQzlHLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsc0JBQXNCLENBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLDZDQUE2QyxFQUM3QztZQUNFLFNBQVM7WUFDVCxFQUFFO1NBQ0gsRUFDRCxFQUFDLElBQUksRUFBRSxFQUFDLGlCQUFpQixFQUFFLGVBQWUsRUFBQyxFQUFDLENBQzdDLENBQUM7SUFDTixDQUFDO0lBRUQsWUFBWTtJQUVaLHVDQUF1QztJQUV2QyxnQ0FBZ0MsQ0FBQyxJQUFVLEVBQUUscUJBQTZCLEVBQUUsT0FBNEM7UUFDdEgsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNsRjthQUFNLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUMsdUNBQXVDLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDckY7UUFDRCxPQUFPLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRU8sb0NBQW9DLENBQUMsTUFBYyxFQUFFLE9BQTRDO1FBQ3ZHLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFlBQVksQ0FDWCxpQ0FBaUMsRUFDakMsSUFBSSxDQUFDLFNBQVMsRUFDZCx3Q0FBd0MsRUFDeEM7WUFDRSxNQUFNO1NBQ1AsRUFDRCxPQUFPLENBQ1IsQ0FBQTtJQUNMLENBQUM7SUFFTyx1Q0FBdUMsQ0FBQyxTQUFpQixFQUFFLE9BQTRDO1FBQzdHLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFlBQVksQ0FDWCxpQ0FBaUMsRUFDakMsSUFBSSxDQUFDLFlBQVksRUFDakIsMkNBQTJDLEVBQzNDO1lBQ0UsU0FBUztTQUNWLEVBQ0QsT0FBTyxDQUNSLENBQUE7SUFDTCxDQUFDO0lBRU8sb0NBQW9DLENBQUMsTUFBYyxFQUFFLE9BQTRDO1FBQ3ZHLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFlBQVksQ0FDWCxpQ0FBaUMsRUFDakMsSUFBSSxDQUFDLFNBQVMsRUFDZCx3Q0FBd0MsRUFDeEM7WUFDRSxNQUFNO1NBQ1AsRUFDRCxPQUFPLENBQ1IsQ0FBQTtJQUNMLENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxJQUFVLEVBQUUscUJBQTZCLEVBQUUsT0FBbUM7UUFDN0csSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNsRjthQUFNLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUMsdUNBQXVDLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDckY7UUFDRCxPQUFPLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRU8sb0NBQW9DLENBQUMsTUFBYyxFQUFFLE9BQW1DO1FBQzlGLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLGlDQUFpQyxFQUNqQyxJQUFJLENBQUMsU0FBUyxFQUNkLHVDQUF1QyxFQUN2QztZQUNFLE1BQU07WUFDTixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7U0FDZixFQUNELE9BQU8sQ0FDUixDQUFDO0lBQ04sQ0FBQztJQUVPLHVDQUF1QyxDQUFDLFNBQWlCLEVBQUUsT0FBbUM7UUFDcEcsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsaUNBQWlDLEVBQ2pDLElBQUksQ0FBQyxZQUFZLEVBQ2pCLDBDQUEwQyxFQUMxQztZQUNFLFNBQVM7WUFDVCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7U0FDZixFQUNELE9BQU8sQ0FDUixDQUFDO0lBQ04sQ0FBQztJQUVPLG9DQUFvQyxDQUFDLE1BQWMsRUFBRSxPQUFtQztRQUM5RixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixpQ0FBaUMsRUFDakMsSUFBSSxDQUFDLFNBQVMsRUFDZCx1Q0FBdUMsRUFDdkM7WUFDRSxNQUFNO1lBQ04sRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1NBQ2YsRUFDRCxPQUFPLENBQ1IsQ0FBQztJQUNOLENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxJQUFVLEVBQUUscUJBQTZCLEVBQUUsRUFBVTtRQUNwRixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLG9DQUFvQyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzdFO2FBQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNoRjtRQUNELE9BQU8sSUFBSSxDQUFDLG9DQUFvQyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFTyxvQ0FBb0MsQ0FBQyxNQUFjLEVBQUUsRUFBVTtRQUNyRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUNkLHVDQUF1QyxFQUN2QztZQUNFLE1BQU07WUFDTixFQUFFO1NBQ0gsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVPLHVDQUF1QyxDQUFDLFNBQWlCLEVBQUUsRUFBVTtRQUMzRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsWUFBWSxFQUNqQiwwQ0FBMEMsRUFDMUM7WUFDRSxTQUFTO1lBQ1QsRUFBRTtTQUNILENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFTyxvQ0FBb0MsQ0FBQyxNQUFjLEVBQUUsRUFBVTtRQUNyRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUNkLHVDQUF1QyxFQUN2QztZQUNFLE1BQU07WUFDTixFQUFFO1NBQ0gsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELDBDQUEwQyxDQUFDLElBQVUsRUFBRSxxQkFBNkIsRUFBRSxFQUFVLEVBQUUsZUFBOEI7UUFDOUgsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyw4Q0FBOEMsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDeEc7UUFDRCxPQUFPLElBQUksQ0FBQyxpREFBaUQsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVPLDhDQUE4QyxDQUFDLE1BQWMsRUFBRSxFQUFVLEVBQUUsZUFBOEI7UUFDL0csT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixzQkFBc0IsQ0FDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCw2Q0FBNkMsRUFDN0M7WUFDRSxNQUFNO1lBQ04sRUFBRTtTQUNILEVBQ0QsRUFBQyxJQUFJLEVBQUUsRUFBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUMsRUFBQyxDQUM3QyxDQUFDO0lBQ04sQ0FBQztJQUVPLGlEQUFpRCxDQUFDLFNBQWlCLEVBQUUsRUFBVSxFQUFFLGVBQThCO1FBQ3JILE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsc0JBQXNCLENBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLGdEQUFnRCxFQUNoRDtZQUNFLFNBQVM7WUFDVCxFQUFFO1NBQ0gsRUFDRCxFQUFDLElBQUksRUFBRSxFQUFDLGlCQUFpQixFQUFFLGVBQWUsRUFBQyxFQUFDLENBQzdDLENBQUM7SUFDTixDQUFDO0lBR0QsWUFBWTtJQUVaLHlCQUF5QjtJQUV6QixrQkFBa0IsQ0FBQyxJQUFVLEVBQUUscUJBQTZCO1FBQzFELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUMzRDthQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEMsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUM5RDtRQUNELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQWM7UUFDM0MsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixXQUFXLENBQ1Ysc0JBQXNCLEVBQ3RCLElBQUksQ0FBQyxTQUFTLEVBQ2QsMEJBQTBCLEVBQzFCLEVBQUMsTUFBTSxFQUFDLENBQ1QsQ0FBQTtJQUNMLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxTQUFpQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFdBQVcsQ0FDVixzQkFBc0IsRUFDdEIsSUFBSSxDQUFDLFlBQVksRUFDakIsNkJBQTZCLEVBQzdCLEVBQUMsU0FBUyxFQUFDLENBQ1osQ0FBQTtJQUNMLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxNQUFjO1FBQzNDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLHNCQUFzQixFQUN0QixJQUFJLENBQUMsU0FBUyxFQUNkLDBCQUEwQixFQUMxQixFQUFDLE1BQU0sRUFBQyxDQUNULENBQUE7SUFDTCxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBVSxFQUFFLHFCQUE2QixFQUFFLGVBQWdDO1FBQy9GLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMscUJBQXFCLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDL0U7YUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLHFCQUFxQixFQUFFLGVBQWUsQ0FBQyxDQUFBO1NBQ2pGO1FBQ0QsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMscUJBQXFCLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVPLHlCQUF5QixDQUFDLE1BQWMsRUFBRSxlQUFnQztRQUNoRixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixzQkFBc0IsRUFDdEIsSUFBSSxDQUFDLFNBQVMsRUFDZCwwQkFBMEIsRUFDMUI7WUFDRSxNQUFNO1NBQ1AsRUFDRCxlQUFlLENBQ2hCLENBQUM7SUFDTixDQUFDO0lBRU8sNEJBQTRCLENBQUMsU0FBaUIsRUFBRSxlQUFnQztRQUN0RixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixzQkFBc0IsRUFDdEIsSUFBSSxDQUFDLFlBQVksRUFDakIsNkJBQTZCLEVBQzdCO1lBQ0UsU0FBUztTQUNWLEVBQ0QsZUFBZSxDQUNoQixDQUFDO0lBQ04sQ0FBQztJQUVPLHlCQUF5QixDQUFDLE1BQWMsRUFBRSxlQUFnQztRQUNoRixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixzQkFBc0IsRUFDdEIsSUFBSSxDQUFDLFNBQVMsRUFDZCwwQkFBMEIsRUFDMUI7WUFDRSxNQUFNO1NBQ1AsRUFDRCxlQUFlLENBQ2hCLENBQUM7SUFDTixDQUFDO0lBRUQsWUFBWTtJQUVaLDRDQUE0QztJQUU1QyxvQ0FBb0MsQ0FBQyxJQUFVLEVBQUUscUJBQTZCLEVBQUUsYUFBNkM7UUFDM0gsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUM1RjthQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEMsT0FBTyxJQUFJLENBQUMsMkNBQTJDLENBQUMscUJBQXFCLEVBQUUsYUFBYSxDQUFDLENBQUE7U0FDOUY7UUFDRCxPQUFPLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRU8sd0NBQXdDLENBQUMsTUFBYyxFQUFFLGFBQTZDO1FBQzVHLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLHFDQUFxQyxFQUNyQyxJQUFJLENBQUMsU0FBUyxFQUNkLDJDQUEyQyxFQUMzQztZQUNFLE1BQU07WUFDTixFQUFFLEVBQUUsYUFBYSxDQUFDLEVBQUU7U0FDckIsRUFDRCxhQUFhLENBQ2QsQ0FBQztJQUNOLENBQUM7SUFFTywyQ0FBMkMsQ0FBQyxTQUFpQixFQUFFLGFBQTZDO1FBQ2xILE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLHFDQUFxQyxFQUNyQyxJQUFJLENBQUMsWUFBWSxFQUNqQiw4Q0FBOEMsRUFDOUM7WUFDRSxTQUFTO1lBQ1QsRUFBRSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1NBQ3JCLEVBQ0QsYUFBYSxDQUNkLENBQUM7SUFDTixDQUFDO0lBRUQsd0NBQXdDLENBQUMsTUFBYyxFQUFFLGFBQTZDO1FBQ3BHLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLHFDQUFxQyxFQUNyQyxJQUFJLENBQUMsU0FBUyxFQUNkLDJDQUEyQyxFQUMzQztZQUNFLE1BQU07WUFDTixFQUFFLEVBQUUsYUFBYSxDQUFDLEVBQUU7U0FDckIsRUFDRCxhQUFhLENBQ2QsQ0FBQztJQUNOLENBQUM7SUFFRCx3Q0FBd0MsQ0FBQyxNQUFjLEVBQUUsYUFBc0Q7UUFDN0csT0FBTyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsWUFBWSxDQUNYLHFDQUFxQyxFQUNyQyxJQUFJLENBQUMsU0FBUyxFQUNkLDRDQUE0QyxFQUM1QztZQUNFLE1BQU07U0FDUCxFQUNELGFBQWEsQ0FDZCxDQUFBO0lBQ0wsQ0FBQztJQUVELHdDQUF3QyxDQUFDLE1BQWMsRUFBRSxFQUFVO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLElBQUksQ0FBQyxTQUFTLEVBQ2QsMkNBQTJDLEVBQzNDO1lBQ0UsTUFBTTtZQUNOLEVBQUU7U0FDSCxDQUNGLENBQUM7SUFDTixDQUFDOztvSEExakNVLHNCQUFzQjt3SEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07NEZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FwaVNlcnZpY2V9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQm9va2luZ0NhbGVuZGFyLFxuICBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUsXG4gIEJvb2tpbmdDYWxlbmRhclNsb3QsXG4gIEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uLFxuICBCb29raW5nU2V0dGluZ3MsXG4gIFJvbGUsXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICBib29raW5nU2V0dGluZ3NGYWN0b3J5XG59IGZyb20gXCIuL2ZhY3Rvcmllc1wiO1xuXG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2NhbGVuZGFycy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2NhbGVuZGFycy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9jb3B5Lyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvY2xlYXIvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy86aWQvYWxsLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zZXNzaW9ucy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkL2FsbC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5cbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DT1BZX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzL2NvcHkvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9jbGVhci8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1NZTkNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvc3luYy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TTE9UX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC9hbGwvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvYWxsLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfU0VUVElOR1NfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYm9va2luZy1zZXR0aW5ncy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvJztcblxuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1NZTkNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvc3luYy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYm9va2luZy1zZXR0aW5ncy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcblxuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy86aWQvJztcblxuXG5leHBvcnQgY2xhc3MgQm9va2luZ1Nsb3RGaWx0ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBwdWJsaWMgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgcHVibGljIGNhbGVuZGFySWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyB0YWdJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyB0ZWFtSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgbG9jYXRpb25Hcm91cElkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIGFjdGl2aXR5VHlwZUlkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIGhhc09wZW5TZXNzaW9uczogYm9vbGVhbiB8IG51bGwgPSBudWxsLFxuICAgIHB1YmxpYyBzaG93QXBwbGljYXRpb25UaW1lczogYm9vbGVhbiB8IG51bGwgPSBudWxsLFxuICAgIHB1YmxpYyBzb3J0Qnk6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICApIHtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRmlsdGVyKGZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpOiBCb29raW5nU2xvdEZpbHRlciB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKFxuICAgICAgZmlsdGVyLnN0YXJ0RGF0ZSxcbiAgICAgIGZpbHRlci5lbmREYXRlLFxuICAgICAgZmlsdGVyLmNhbGVuZGFySWRzLFxuICAgICAgZmlsdGVyLmxvY2F0aW9uSWRzLFxuICAgICAgZmlsdGVyLnRhZ0lkcyxcbiAgICAgIGZpbHRlci50ZWFtSWRzLFxuICAgICAgZmlsdGVyLmxvY2F0aW9uR3JvdXBJZHMsXG4gICAgICBmaWx0ZXIuYWN0aXZpdHlUeXBlSWRzLFxuICAgICAgZmlsdGVyLmhhc09wZW5TZXNzaW9ucyxcbiAgICAgIGZpbHRlci5zaG93QXBwbGljYXRpb25UaW1lcyxcbiAgICAgIGZpbHRlci5zb3J0QnksXG4gICAgKTtcbiAgfVxuXG4gIHRvUGFyYW1zKCk6IGFueSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHRoaXMuc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fZ3RlJ10gPSB0aGlzLnN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSB0aGlzLmVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FsZW5kYXJJZHMgJiYgdGhpcy5jYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IHRoaXMuY2FsZW5kYXJJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9jYXRpb25JZHMgJiYgdGhpcy5sb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IHRoaXMubG9jYXRpb25JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9jYXRpb25Hcm91cElkcyAmJiB0aGlzLmxvY2F0aW9uR3JvdXBJZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2xvY2F0aW9uX2dyb3VwX2lkJ10gPSB0aGlzLmxvY2F0aW9uR3JvdXBJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFnSWRzICYmIHRoaXMudGFnSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWyd0YWdfaWQnXSA9IHRoaXMudGFnSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRlYW1JZHMgJiYgdGhpcy50ZWFtSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWyd0ZWFtX2lkJ10gPSB0aGlzLnRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZpdHlUeXBlSWRzICYmIHRoaXMuYWN0aXZpdHlUeXBlSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zW1wiYWN0aXZpdHlfdHlwZV9pZFwiXSA9IHRoaXMuYWN0aXZpdHlUeXBlSWRzLmpvaW4oXCIsXCIpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLmhhc09wZW5TZXNzaW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ2hhc19vcGVuX3Nlc3Npb25zJ10gPSBTdHJpbmcodGhpcy5oYXNPcGVuU2Vzc2lvbnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5zaG93QXBwbGljYXRpb25UaW1lcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ3Nob3dfYXBwbGljYXRpb25fdGltZXMnXSA9IFN0cmluZyh0aGlzLnNob3dBcHBsaWNhdGlvblRpbWVzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zb3J0QnkpIHtcbiAgICAgIHBhcmFtc1snb3JkZXInXSA9IHRoaXMuc29ydEJ5O1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQm9va2luZ0NhbGVuZGFyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSkge1xuICB9XG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXJcblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBkZWxldGUgY2FsZW5kYXIuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihzZWN0aW9uSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIGRlbGV0ZSBjYWxlbmRhci5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKVxuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFycyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhcnMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJzKGNsdWJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhcnMoc2VjdGlvbklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHBhcmFtc1snbmFtZSddID0gbmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFycyh0ZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcGFyYW1zWyduYW1lJ10gPSBuYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGNhbGVuZGFyOiBCb29raW5nQ2FsZW5kYXIpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGNhbGVuZGFyKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgY2FsZW5kYXI6IEJvb2tpbmdDYWxlbmRhcikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBjYWxlbmRhci5pZFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihzZWN0aW9uSWQ6IHN0cmluZywgY2FsZW5kYXI6IEJvb2tpbmdDYWxlbmRhcikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBjYWxlbmRhci5pZFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhcihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXIgc2xvdFxuXG4gIGNyZWF0ZUJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgZGVsZXRlIHNsb3QuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgc2xvdFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIGRlbGV0ZSBzbG90LmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhclNsb3RzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNsb3RJZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdElkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdElkKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3RJZCk7XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90KHRlYW1JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBjb3B5Qm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNvcHlDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBvbmx5Q29weVNsb3RzLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvcHlTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBvbmx5Q29weVNsb3RzLCBib29raW5nU2xvdEZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIGNvcHlDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgY2x1YklkOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seUNvcHlTbG90czogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgb25seV9jb3B5X3Nsb3RzOiBvbmx5Q29weVNsb3RzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY29weVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICBvbmx5X2NvcHlfc2xvdHM6IG9ubHlDb3B5U2xvdHMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgY2xlYXJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICByb2xlOiBSb2xlLFxuICAgIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seURlbGV0ZVNlc3Npb25zOiBib29sZWFuID0gZmFsc2UsXG4gICAgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seURlbGV0ZVNlc3Npb25zLCBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbGVhclNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBvbmx5RGVsZXRlU2Vzc2lvbnMsIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzLCBib29raW5nU2xvdEZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIGNsdWJJZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seURlbGV0ZVNlc3Npb25zOiBib29sZWFuID0gZmFsc2UsXG4gICAgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICAgIG9ubHlfZGVsZXRlX3Nlc3Npb25zOiBvbmx5RGVsZXRlU2Vzc2lvbnMsXG4gICAgICAgICAgICBzaG91bGRfZGVsZXRlX3JlcGVhdGluZ19zbG90czogc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgIH0sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHNlY3Rpb25JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seURlbGV0ZVNlc3Npb25zOiBib29sZWFuID0gZmFsc2UsXG4gICAgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICAgIG9ubHlfZGVsZXRlX3Nlc3Npb25zOiBvbmx5RGVsZXRlU2Vzc2lvbnMsXG4gICAgICAgICAgICBzaG91bGRfZGVsZXRlX3JlcGVhdGluZ19zbG90czogc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgIH0sXG4gICAgICApXG4gIH1cblxuICBzeW5jQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnN5bmNDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuc3luY1NlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBib29raW5nU2xvdEZpbHRlcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3luY1RlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBib29raW5nU2xvdEZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIHN5bmNDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgY2x1YklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIHN5bmNTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIHN5bmNUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgdGVhbUlkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzbG90OiBCb29raW5nQ2FsZW5kYXJTbG90KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViSWQ6IHN0cmluZywgc2xvdDogQm9va2luZ0NhbGVuZGFyU2xvdCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzbG90LmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBzbG90OiBCb29raW5nQ2FsZW5kYXJTbG90KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWQ6IHNsb3QuaWRcbiAgICAgICAgfSxcbiAgICAgICAgc2xvdFxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQsIGRlbGV0ZVVudGlsRGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2luZyBjYWxlbmRhciBzbG90IHNlc3Npb25cblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHRlYW1JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzZXNzaW9uOiBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbikge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2Vzc2lvbik7XG4gICAgfSBlbHNlIGlmIChyb2xlID09PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2Vzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIHNlc3Npb246IEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWQ6IHNlc3Npb24uaWRcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBzZXNzaW9uOiBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQsIGRlbGV0ZVVudGlsRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgZGVsZXRlVW50aWxEYXRlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge2JvZHk6IHtkZWxldGVfdW50aWxfZGF0ZTogZGVsZXRlVW50aWxEYXRlfX0sXG4gICAgICApO1xuICB9XG5cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2luZyBTZXR0aW5nXG5cbiAgZ2V0Qm9va2luZ1NldHRpbmdzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdTZXR0aW5ncyhjbHViT3JTZWN0aW9uT3JUZWFtSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ1NldHRpbmdzKGNsdWJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nU2V0dGluZ3Moc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdTZXR0aW5ncyh0ZWFtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7dGVhbUlkfVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ1NldHRpbmdzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1NldHRpbmdzKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2V0dGluZ3MpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2V0dGluZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ1NldHRpbmdzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBib29raW5nU2V0dGluZ3NcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nU2V0dGluZ3Moc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTZXR0aW5nczogQm9va2luZ1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc1xuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGVhbUJvb2tpbmdTZXR0aW5ncyh0ZWFtSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgQ2FsZW5kYXIgQXBwbGljYXRpb24gVGltZXNcblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSkge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZSk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJJZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoc2VjdGlvbklkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWQ6IGF2YWlsYWJsZVRpbWUuaWRcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUodGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWQ6IGF2YWlsYWJsZVRpbWUuaWRcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUodGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lPikge1xuICAgIGRlbGV0ZSBhdmFpbGFibGVUaW1lLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKVxuICB9XG5cbiAgZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSh0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG5cbn1cbiJdfQ==
|
|
738
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBTUwsSUFBSSxHQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsc0JBQXNCLEVBQ3ZCLE1BQU0sYUFBYSxDQUFDOzs7QUFFckIsTUFBTSwyQkFBMkIsR0FBRywrQkFBK0IsQ0FBQztBQUNwRSxNQUFNLDBCQUEwQixHQUFHLG1DQUFtQyxDQUFDO0FBQ3ZFLE1BQU0sZ0NBQWdDLEdBQUcsMkJBQTJCLENBQUM7QUFDckUsTUFBTSxrREFBa0QsR0FBRyw2Q0FBNkMsQ0FBQztBQUN6RyxNQUFNLHFDQUFxQyxHQUFHLGdDQUFnQyxDQUFDO0FBQy9FLE1BQU0sc0NBQXNDLEdBQUcsaUNBQWlDLENBQUM7QUFDakYsTUFBTSxxQ0FBcUMsR0FBRyxnQ0FBZ0MsQ0FBQztBQUMvRSxNQUFNLCtCQUErQixHQUFHLCtCQUErQixDQUFDO0FBQ3hFLE1BQU0sMENBQTBDLEdBQUcsbUNBQW1DLENBQUM7QUFDdkYsTUFBTSx3Q0FBd0MsR0FBRyw4QkFBOEIsQ0FBQztBQUNoRixNQUFNLHVDQUF1QyxHQUFHLGtDQUFrQyxDQUFDO0FBQ25GLE1BQU0sNkNBQTZDLEdBQUcsc0NBQXNDLENBQUM7QUFDN0YsTUFBTSwwQkFBMEIsR0FBRyxzQ0FBc0MsQ0FBQztBQUMxRSxNQUFNLDJDQUEyQyxHQUFHLDJDQUEyQyxDQUFDO0FBQ2hHLE1BQU0sNENBQTRDLEdBQUcsdUNBQXVDLENBQUM7QUFFN0YsTUFBTSw4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QUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUNkLDJDQUEyQyxFQUMzQztZQUNFLE1BQU07WUFDTixFQUFFO1NBQ0gsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVPLDJDQUEyQyxDQUFDLFNBQWlCLEVBQUUsRUFBVTtRQUMvRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsWUFBWSxFQUNqQiw4Q0FBOEMsRUFDOUM7WUFDRSxTQUFTO1lBQ1QsRUFBRTtTQUNILENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFTyx3Q0FBd0MsQ0FBQyxNQUFjLEVBQUUsRUFBVTtRQUN6RSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUNkLDJDQUEyQyxFQUMzQztZQUNFLE1BQU07WUFDTixFQUFFO1NBQ0gsQ0FDRixDQUFDO0lBQ04sQ0FBQzs7b0hBM2xDVSxzQkFBc0I7d0hBQXRCLHNCQUFzQixjQUZyQixNQUFNOzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcGlTZXJ2aWNlfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEJvb2tpbmdDYWxlbmRhcixcbiAgQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lLFxuICBCb29raW5nQ2FsZW5kYXJTbG90LFxuICBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbixcbiAgQm9va2luZ1NldHRpbmdzLFxuICBSb2xlLFxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgYm9va2luZ1NldHRpbmdzRmFjdG9yeVxufSBmcm9tIFwiLi9mYWN0b3JpZXNcIjtcblxuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvY29weS8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL2NsZWFyLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9zeW5jLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkL2FsbC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TRVNTSU9OX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC9hbGwvJztcbmNvbnN0IENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9ib29raW5nLXNldHRpbmdzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuXG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2NhbGVuZGFycy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2NhbGVuZGFycy86aWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9jb3B5Lyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvY2xlYXIvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy86aWQvYWxsLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zZXNzaW9ucy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkL2FsbC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5cbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvOmlkLyc7XG5cbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvOmlkLyc7XG5cblxuZXhwb3J0IGNsYXNzIEJvb2tpbmdTbG90RmlsdGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgcHVibGljIGVuZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIHB1YmxpYyBjYWxlbmRhcklkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIGxvY2F0aW9uSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgdGFnSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIGxvY2F0aW9uR3JvdXBJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyBhY3Rpdml0eVR5cGVJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyBoYXNPcGVuU2Vzc2lvbnM6IGJvb2xlYW4gfCBudWxsID0gbnVsbCxcbiAgICBwdWJsaWMgc2hvd0FwcGxpY2F0aW9uVGltZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbCxcbiAgICBwdWJsaWMgc29ydEJ5OiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gIH1cblxuICBzdGF0aWMgZnJvbUZpbHRlcihmaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKTogQm9va2luZ1Nsb3RGaWx0ZXIge1xuICAgIHJldHVybiBuZXcgdGhpcyhcbiAgICAgIGZpbHRlci5zdGFydERhdGUsXG4gICAgICBmaWx0ZXIuZW5kRGF0ZSxcbiAgICAgIGZpbHRlci5jYWxlbmRhcklkcyxcbiAgICAgIGZpbHRlci5sb2NhdGlvbklkcyxcbiAgICAgIGZpbHRlci50YWdJZHMsXG4gICAgICBmaWx0ZXIudGVhbUlkcyxcbiAgICAgIGZpbHRlci5sb2NhdGlvbkdyb3VwSWRzLFxuICAgICAgZmlsdGVyLmFjdGl2aXR5VHlwZUlkcyxcbiAgICAgIGZpbHRlci5oYXNPcGVuU2Vzc2lvbnMsXG4gICAgICBmaWx0ZXIuc2hvd0FwcGxpY2F0aW9uVGltZXMsXG4gICAgICBmaWx0ZXIuc29ydEJ5LFxuICAgICk7XG4gIH1cblxuICB0b1BhcmFtcygpOiBhbnkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2d0ZSddID0gdGhpcy5zdGFydERhdGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kRGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2x0ZSddID0gdGhpcy5lbmREYXRlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhbGVuZGFySWRzICYmIHRoaXMuY2FsZW5kYXJJZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2NhbGVuZGFyX2lkJ10gPSB0aGlzLmNhbGVuZGFySWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmxvY2F0aW9uSWRzICYmIHRoaXMubG9jYXRpb25JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2xvY2F0aW9uX2lkJ10gPSB0aGlzLmxvY2F0aW9uSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmxvY2F0aW9uR3JvdXBJZHMgJiYgdGhpcy5sb2NhdGlvbkdyb3VwSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydsb2NhdGlvbl9ncm91cF9pZCddID0gdGhpcy5sb2NhdGlvbkdyb3VwSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRhZ0lkcyAmJiB0aGlzLnRhZ0lkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1sndGFnX2lkJ10gPSB0aGlzLnRhZ0lkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZWFtSWRzICYmIHRoaXMudGVhbUlkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1sndGVhbV9pZCddID0gdGhpcy50ZWFtSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2aXR5VHlwZUlkcyAmJiB0aGlzLmFjdGl2aXR5VHlwZUlkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1tcImFjdGl2aXR5X3R5cGVfaWRcIl0gPSB0aGlzLmFjdGl2aXR5VHlwZUlkcy5qb2luKFwiLFwiKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5oYXNPcGVuU2Vzc2lvbnMgPT09ICdib29sZWFuJykge1xuICAgICAgcGFyYW1zWydoYXNfb3Blbl9zZXNzaW9ucyddID0gU3RyaW5nKHRoaXMuaGFzT3BlblNlc3Npb25zKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuc2hvd0FwcGxpY2F0aW9uVGltZXMgPT09ICdib29sZWFuJykge1xuICAgICAgcGFyYW1zWydzaG93X2FwcGxpY2F0aW9uX3RpbWVzJ10gPSBTdHJpbmcodGhpcy5zaG93QXBwbGljYXRpb25UaW1lcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc29ydEJ5KSB7XG4gICAgICBwYXJhbXNbJ29yZGVyJ10gPSB0aGlzLnNvcnRCeTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJvb2tpbmdDYWxlbmRhclNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UpIHtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIGNhbGVuZGFyXG5cbiAgY3JlYXRlQm9va2luZ0NhbGVuZGFyKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBjYWxlbmRhcjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXI+KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY2FsZW5kYXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY2FsZW5kYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJJZDogc3RyaW5nLCBjYWxlbmRhcjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXI+KSB7XG4gICAgZGVsZXRlIGNhbGVuZGFyLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoc2VjdGlvbklkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBkZWxldGUgY2FsZW5kYXIuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhcnMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFycyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFycyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFycyhjbHViSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcGFyYW1zWyduYW1lJ10gPSBuYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJzKHNlY3Rpb25JZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhcnModGVhbUlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHBhcmFtc1snbmFtZSddID0gbmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBjYWxlbmRhcjogQm9va2luZ0NhbGVuZGFyKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY2FsZW5kYXIpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGNhbGVuZGFyOiBCb29raW5nQ2FsZW5kYXIpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogY2FsZW5kYXIuaWRcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoc2VjdGlvbklkOiBzdHJpbmcsIGNhbGVuZGFyOiBCb29raW5nQ2FsZW5kYXIpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogY2FsZW5kYXIuaWRcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIGNhbGVuZGFyIHNsb3RcblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIGRlbGV0ZSBzbG90LmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3Qoc2VjdGlvbklkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBkZWxldGUgc2xvdC5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJTbG90cyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyh0ZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3RJZCk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3RJZClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViSWQ6IHN0cmluZywgc2xvdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogc2xvdElkXG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogc2xvdElkXG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdCh0ZWFtSWQ6IHN0cmluZywgc2xvdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZDogc2xvdElkXG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyh0ZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgY29weUJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHJvbGU6IFJvbGUsXG4gICAgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seUNvcHlTbG90czogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb3B5Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seUNvcHlTbG90cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb3B5U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seUNvcHlTbG90cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3B5Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIGNsdWJJZDogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlDb3B5U2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DT1BZX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICAgIG9ubHlfY29weV9zbG90czogb25seUNvcHlTbG90cyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNvcHlTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seUNvcHlTbG90czogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgb25seV9jb3B5X3Nsb3RzOiBvbmx5Q29weVNsb3RzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGNsZWFyQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlEZWxldGVTZXNzaW9ucywgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xlYXJTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seURlbGV0ZVNlc3Npb25zLCBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBjdXJyZW50X3dlZWtfc3RhcnRfZGF0ZTogY3VycmVudFdlZWtTdGFydERhdGUsXG4gICAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgICBvbmx5X2RlbGV0ZV9zZXNzaW9uczogb25seURlbGV0ZVNlc3Npb25zLFxuICAgICAgICAgICAgc2hvdWxkX2RlbGV0ZV9yZXBlYXRpbmdfc2xvdHM6IHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBjdXJyZW50X3dlZWtfc3RhcnRfZGF0ZTogY3VycmVudFdlZWtTdGFydERhdGUsXG4gICAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgICBvbmx5X2RlbGV0ZV9zZXNzaW9uczogb25seURlbGV0ZVNlc3Npb25zLFxuICAgICAgICAgICAgc2hvdWxkX2RlbGV0ZV9yZXBlYXRpbmdfc2xvdHM6IHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgKVxuICB9XG5cbiAgc3luY0Jvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHJvbGU6IFJvbGUsXG4gICAgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5zeW5jQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnN5bmNTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN5bmNUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIGNsdWJJZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHNlY3Rpb25JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHRlYW1JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyU2xvdChyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2xvdDogQm9va2luZ0NhbGVuZGFyU2xvdCkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIHNsb3Q6IEJvb2tpbmdDYWxlbmRhclNsb3QpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogc2xvdC5pZFxuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdDogQm9va2luZ0NhbGVuZGFyU2xvdCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzbG90LmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgZGVsZXRlVW50aWxEYXRlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge2JvZHk6IHtkZWxldGVfdW50aWxfZGF0ZTogZGVsZXRlVW50aWxEYXRlfX0sXG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXIgc2xvdCBzZXNzaW9uXG5cbiAgY3JlYXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNlc3Npb246IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24+KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2Vzc2lvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihzZWN0aW9uSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBzZXNzaW9uOiBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihzZWN0aW9uSWQ6IHN0cmluZywgc2Vzc2lvbjogQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24odGVhbUlkOiBzdHJpbmcsIHNlc3Npb246IEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWQ6IHNlc3Npb24uaWRcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgU2V0dGluZ1xuXG4gIGdldEJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7Y2x1YklkfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ1NldHRpbmdzKHNlY3Rpb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge3RlYW1JZH1cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTZXR0aW5ncyk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1NldHRpbmdzKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVUZWFtQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1NldHRpbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ1NldHRpbmdzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBib29raW5nU2V0dGluZ3NcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTZXR0aW5nczogQm9va2luZ1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc1xuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIENhbGVuZGFyIEFwcGxpY2F0aW9uIFRpbWVzXG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWUpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWUpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBhdmFpbGFibGVUaW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZTogQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogYXZhaWxhYmxlVGltZS5pZFxuICAgICAgICB9LFxuICAgICAgICBhdmFpbGFibGVUaW1lXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHNlY3Rpb25JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZT4pIHtcbiAgICBkZWxldGUgYXZhaWxhYmxlVGltZS5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgIClcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZUlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWVJZCk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZUlkKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSh0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG5cbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { BookingCalendar } from "../../models";
|
|
2
2
|
import { activityLocationGroupFactory } from "./activity-location-group-factory";
|
|
3
|
-
export const bookingCalendarFactory = (apiBookingCalendar) => new BookingCalendar(apiBookingCalendar.id, apiBookingCalendar.club_id, apiBookingCalendar.section_id, apiBookingCalendar.team_id, apiBookingCalendar.club_name, apiBookingCalendar.name, apiBookingCalendar.section_name, apiBookingCalendar.team_name, apiBookingCalendar.status, apiBookingCalendar.max_application_number, apiBookingCalendar.location_groups && apiBookingCalendar.location_groups.length ? apiBookingCalendar.location_groups.map((apiActivityLocationGroup) => activityLocationGroupFactory(apiActivityLocationGroup)) : []);
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
export const bookingCalendarFactory = (apiBookingCalendar) => new BookingCalendar(apiBookingCalendar.id, apiBookingCalendar.club_id, apiBookingCalendar.section_id, apiBookingCalendar.team_id, apiBookingCalendar.club_name, apiBookingCalendar.name, apiBookingCalendar.section_name, apiBookingCalendar.team_name, apiBookingCalendar.status, apiBookingCalendar.max_application_number, apiBookingCalendar.can_team_export, apiBookingCalendar.location_groups && apiBookingCalendar.location_groups.length ? apiBookingCalendar.location_groups.map((apiActivityLocationGroup) => activityLocationGroupFactory(apiActivityLocationGroup)) : []);
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9mYWN0b3JpZXMvYm9va2luZy1jYWxlbmRhci1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFL0UsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxrQkFBc0MsRUFBRSxFQUFFLENBQy9FLElBQUksZUFBZSxDQUNqQixrQkFBa0IsQ0FBQyxFQUFFLEVBQ3JCLGtCQUFrQixDQUFDLE9BQU8sRUFDMUIsa0JBQWtCLENBQUMsVUFBVSxFQUM3QixrQkFBa0IsQ0FBQyxPQUFPLEVBQzFCLGtCQUFrQixDQUFDLFNBQVMsRUFDNUIsa0JBQWtCLENBQUMsSUFBSSxFQUN2QixrQkFBa0IsQ0FBQyxZQUFZLEVBQy9CLGtCQUFrQixDQUFDLFNBQVMsRUFDNUIsa0JBQWtCLENBQUMsTUFBTSxFQUN6QixrQkFBa0IsQ0FBQyxzQkFBc0IsRUFDekMsa0JBQWtCLENBQUMsZUFBZSxFQUNsQyxrQkFBa0IsQ0FBQyxlQUFlLElBQUksa0JBQWtCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FDdEgsQ0FBQyx3QkFBa0QsRUFBRSxFQUFFLENBQUMsNEJBQTRCLENBQUMsd0JBQXdCLENBQUMsQ0FDL0csQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FwaUFjdGl2aXR5TG9jYXRpb25Hcm91cCwgQXBpQm9va2luZ0NhbGVuZGFyfSBmcm9tIFwiLi4vLi4vYXBpLW1vZGVsc1wiO1xuaW1wb3J0IHtCb29raW5nQ2FsZW5kYXJ9IGZyb20gXCIuLi8uLi9tb2RlbHNcIjtcbmltcG9ydCB7YWN0aXZpdHlMb2NhdGlvbkdyb3VwRmFjdG9yeX0gZnJvbSBcIi4vYWN0aXZpdHktbG9jYXRpb24tZ3JvdXAtZmFjdG9yeVwiO1xuXG5leHBvcnQgY29uc3QgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSA9IChhcGlCb29raW5nQ2FsZW5kYXI6IEFwaUJvb2tpbmdDYWxlbmRhcikgPT5cbiAgbmV3IEJvb2tpbmdDYWxlbmRhcihcbiAgICBhcGlCb29raW5nQ2FsZW5kYXIuaWQsXG4gICAgYXBpQm9va2luZ0NhbGVuZGFyLmNsdWJfaWQsXG4gICAgYXBpQm9va2luZ0NhbGVuZGFyLnNlY3Rpb25faWQsXG4gICAgYXBpQm9va2luZ0NhbGVuZGFyLnRlYW1faWQsXG4gICAgYXBpQm9va2luZ0NhbGVuZGFyLmNsdWJfbmFtZSxcbiAgICBhcGlCb29raW5nQ2FsZW5kYXIubmFtZSxcbiAgICBhcGlCb29raW5nQ2FsZW5kYXIuc2VjdGlvbl9uYW1lLFxuICAgIGFwaUJvb2tpbmdDYWxlbmRhci50ZWFtX25hbWUsXG4gICAgYXBpQm9va2luZ0NhbGVuZGFyLnN0YXR1cyxcbiAgICBhcGlCb29raW5nQ2FsZW5kYXIubWF4X2FwcGxpY2F0aW9uX251bWJlcixcbiAgICBhcGlCb29raW5nQ2FsZW5kYXIuY2FuX3RlYW1fZXhwb3J0LFxuICAgIGFwaUJvb2tpbmdDYWxlbmRhci5sb2NhdGlvbl9ncm91cHMgJiYgYXBpQm9va2luZ0NhbGVuZGFyLmxvY2F0aW9uX2dyb3Vwcy5sZW5ndGggPyBhcGlCb29raW5nQ2FsZW5kYXIubG9jYXRpb25fZ3JvdXBzLm1hcChcbiAgICAgIChhcGlBY3Rpdml0eUxvY2F0aW9uR3JvdXA6IEFwaUFjdGl2aXR5TG9jYXRpb25Hcm91cCkgPT4gYWN0aXZpdHlMb2NhdGlvbkdyb3VwRmFjdG9yeShhcGlBY3Rpdml0eUxvY2F0aW9uR3JvdXApXG4gICAgKSA6IFtdLFxuICApO1xuIl19
|
|
@@ -306,7 +306,7 @@ class Authentication {
|
|
|
306
306
|
}
|
|
307
307
|
|
|
308
308
|
class BookingCalendar {
|
|
309
|
-
constructor(id, club_id, section_id, team_id, club_name, name, section_name, team_name, status, max_application_number, location_groups) {
|
|
309
|
+
constructor(id, club_id, section_id, team_id, club_name, name, section_name, team_name, status, max_application_number, can_team_export, location_groups) {
|
|
310
310
|
this.id = id;
|
|
311
311
|
this.club_id = club_id;
|
|
312
312
|
this.section_id = section_id;
|
|
@@ -317,6 +317,7 @@ class BookingCalendar {
|
|
|
317
317
|
this.team_name = team_name;
|
|
318
318
|
this.status = status;
|
|
319
319
|
this.max_application_number = max_application_number;
|
|
320
|
+
this.can_team_export = can_team_export;
|
|
320
321
|
this.location_groups = location_groups;
|
|
321
322
|
}
|
|
322
323
|
static asFormGroup(calendar) {
|
|
@@ -338,6 +339,7 @@ class BookingCalendar {
|
|
|
338
339
|
status: new FormControl((calendar === null || calendar === void 0 ? void 0 : calendar.status) || 'preliminary'),
|
|
339
340
|
location_groups: new FormArray(locationGroups),
|
|
340
341
|
max_application_number: new FormControl((calendar === null || calendar === void 0 ? void 0 : calendar.max_application_number) || 0),
|
|
342
|
+
can_team_export: new FormControl((calendar === null || calendar === void 0 ? void 0 : calendar.can_team_export) || false)
|
|
341
343
|
});
|
|
342
344
|
}
|
|
343
345
|
}
|
|
@@ -1600,7 +1602,7 @@ const authTeamFactory = (apiAuthTeam) => new AuthTeam(apiAuthTeam.id, apiAuthTea
|
|
|
1600
1602
|
|
|
1601
1603
|
const authFactory = (apiAuth) => new Auth(apiAuth.id, apiAuth.name, apiAuth.club_admin, apiAuth.is_section_club, apiAuth.members.map((apiAuthMember) => authMemberFactory(apiAuthMember)), apiAuth.registration_enabled, apiAuth.sections.map((apiAuthSection) => authSectionFactory(apiAuthSection)), apiAuth.site_enabled, apiAuth.teams.map((apiAuthTeam) => authTeamFactory(apiAuthTeam)), apiAuth.user_name);
|
|
1602
1604
|
|
|
1603
|
-
const bookingCalendarFactory = (apiBookingCalendar) => new BookingCalendar(apiBookingCalendar.id, apiBookingCalendar.club_id, apiBookingCalendar.section_id, apiBookingCalendar.team_id, apiBookingCalendar.club_name, apiBookingCalendar.name, apiBookingCalendar.section_name, apiBookingCalendar.team_name, apiBookingCalendar.status, apiBookingCalendar.max_application_number, apiBookingCalendar.location_groups && apiBookingCalendar.location_groups.length ? apiBookingCalendar.location_groups.map((apiActivityLocationGroup) => activityLocationGroupFactory(apiActivityLocationGroup)) : []);
|
|
1605
|
+
const bookingCalendarFactory = (apiBookingCalendar) => new BookingCalendar(apiBookingCalendar.id, apiBookingCalendar.club_id, apiBookingCalendar.section_id, apiBookingCalendar.team_id, apiBookingCalendar.club_name, apiBookingCalendar.name, apiBookingCalendar.section_name, apiBookingCalendar.team_name, apiBookingCalendar.status, apiBookingCalendar.max_application_number, apiBookingCalendar.can_team_export, apiBookingCalendar.location_groups && apiBookingCalendar.location_groups.length ? apiBookingCalendar.location_groups.map((apiActivityLocationGroup) => activityLocationGroupFactory(apiActivityLocationGroup)) : []);
|
|
1604
1606
|
|
|
1605
1607
|
const bookingCalendarApplicationTimeFactory = (apiBookingApplicationTime) => new BookingCalendarApplicationTime(apiBookingApplicationTime.id, apiBookingApplicationTime.section_id, apiBookingApplicationTime.slot_id, apiBookingApplicationTime.team_id, apiBookingApplicationTime.end_time, apiBookingApplicationTime.section_name, apiBookingApplicationTime.start_time, apiBookingApplicationTime.team_name, apiBookingApplicationTime.location_zones_taken, apiBookingApplicationTime.applicant_comment, apiBookingApplicationTime.reviewer_comment, apiBookingApplicationTime.status, apiBookingApplicationTime.location_part_id, apiBookingApplicationTime.location_part_name, apiBookingApplicationTime.location_id, apiBookingApplicationTime.repeat, apiBookingApplicationTime.activity_type_id, apiBookingApplicationTime.color, apiBookingApplicationTime.slot_start_time, apiBookingApplicationTime.slot_end_time, apiBookingApplicationTime.slot_day, apiBookingApplicationTime.slot_number_of_available_sessions, apiBookingApplicationTime.slot_last_repeating_date, apiBookingApplicationTime.created, apiBookingApplicationTime.location_name);
|
|
1606
1608
|
|
|
@@ -3186,6 +3188,29 @@ class BookingCalendarService {
|
|
|
3186
3188
|
teamId,
|
|
3187
3189
|
}, availableTime);
|
|
3188
3190
|
}
|
|
3191
|
+
deleteBookingCalendarApplicationTime(role, clubOrSectionOrTeamId, availableTimeId) {
|
|
3192
|
+
if (role == Role.ClubAdmin) {
|
|
3193
|
+
return this.deleteClubBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
3194
|
+
}
|
|
3195
|
+
else if (role == Role.SectionAdmin) {
|
|
3196
|
+
return this.deleteSectionBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
3197
|
+
}
|
|
3198
|
+
return this.deleteTeamBookingCalendarApplicationTime(clubOrSectionOrTeamId, availableTimeId);
|
|
3199
|
+
}
|
|
3200
|
+
deleteClubBookingCalendarApplicationTime(clubId, id) {
|
|
3201
|
+
return this.apiService
|
|
3202
|
+
.deleteResource(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
3203
|
+
clubId,
|
|
3204
|
+
id
|
|
3205
|
+
});
|
|
3206
|
+
}
|
|
3207
|
+
deleteSectionBookingCalendarApplicationTime(sectionId, id) {
|
|
3208
|
+
return this.apiService
|
|
3209
|
+
.deleteResource(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|
|
3210
|
+
sectionId,
|
|
3211
|
+
id
|
|
3212
|
+
});
|
|
3213
|
+
}
|
|
3189
3214
|
deleteTeamBookingCalendarApplicationTime(teamId, id) {
|
|
3190
3215
|
return this.apiService
|
|
3191
3216
|
.deleteResource(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH, {
|