@alfresco/adf-process-services 8.1.0-16320806191 → 9.1.0-16312921641

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.
Files changed (125) hide show
  1. package/fesm2022/adf-process-services.mjs +297 -301
  2. package/fesm2022/adf-process-services.mjs.map +1 -1
  3. package/package.json +4 -6
  4. package/esm2022/adf-process-services.mjs +0 -5
  5. package/esm2022/lib/app-list/apps-list.component.mjs +0 -195
  6. package/esm2022/lib/app-list/icon.model.mjs +0 -166
  7. package/esm2022/lib/app-list/index.mjs +0 -18
  8. package/esm2022/lib/app-list/public-api.mjs +0 -23
  9. package/esm2022/lib/app-list/select-apps-dialog/select-apps-dialog.component.mjs +0 -53
  10. package/esm2022/lib/attachment/create-process-attachment/create-process-attachment.component.mjs +0 -73
  11. package/esm2022/lib/attachment/create-task-attachment/create-task-attachment.component.mjs +0 -73
  12. package/esm2022/lib/attachment/index.mjs +0 -18
  13. package/esm2022/lib/attachment/process-attachment-list/process-attachment-list.component.mjs +0 -197
  14. package/esm2022/lib/attachment/public-api.mjs +0 -31
  15. package/esm2022/lib/attachment/task-attachment-list/task-attachment-list.component.mjs +0 -196
  16. package/esm2022/lib/compat/types.mjs +0 -18
  17. package/esm2022/lib/form/events/validate-dynamic-table-row.event.mjs +0 -26
  18. package/esm2022/lib/form/form-custom-outcomes.component.mjs +0 -31
  19. package/esm2022/lib/form/form-list/form-list.component.mjs +0 -50
  20. package/esm2022/lib/form/form.component.mjs +0 -346
  21. package/esm2022/lib/form/index.mjs +0 -18
  22. package/esm2022/lib/form/model/form-definition.model.mjs +0 -92
  23. package/esm2022/lib/form/process-form-rendering.service.mjs +0 -55
  24. package/esm2022/lib/form/public-api.mjs +0 -32
  25. package/esm2022/lib/form/services/activiti-alfresco.service.mjs +0 -113
  26. package/esm2022/lib/form/services/ecm-model.service.mjs +0 -156
  27. package/esm2022/lib/form/services/editor.service.mjs +0 -87
  28. package/esm2022/lib/form/services/external-alfresco-api.service.mjs +0 -57
  29. package/esm2022/lib/form/services/index.mjs +0 -26
  30. package/esm2022/lib/form/services/model.service.mjs +0 -130
  31. package/esm2022/lib/form/services/process-content.service.mjs +0 -223
  32. package/esm2022/lib/form/services/process-definition.service.mjs +0 -93
  33. package/esm2022/lib/form/services/task-form.service.mjs +0 -127
  34. package/esm2022/lib/form/services/task.service.mjs +0 -77
  35. package/esm2022/lib/form/start-form/start-form.component.mjs +0 -141
  36. package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog-component.interface.mjs +0 -18
  37. package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.component.mjs +0 -115
  38. package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.service.mjs +0 -100
  39. package/esm2022/lib/form/widgets/content-widget/attach-file-widget.component.mjs +0 -254
  40. package/esm2022/lib/form/widgets/content-widget/attach-folder-widget.component.mjs +0 -93
  41. package/esm2022/lib/form/widgets/content-widget/index.mjs +0 -18
  42. package/esm2022/lib/form/widgets/content-widget/public-api.mjs +0 -22
  43. package/esm2022/lib/form/widgets/document/content.widget.mjs +0 -125
  44. package/esm2022/lib/form/widgets/document/document.widget.mjs +0 -61
  45. package/esm2022/lib/form/widgets/dropdown/dropdown.widget.mjs +0 -182
  46. package/esm2022/lib/form/widgets/dynamic-table/dynamic-table.widget.mjs +0 -192
  47. package/esm2022/lib/form/widgets/dynamic-table/editors/amount/amount.editor.mjs +0 -47
  48. package/esm2022/lib/form/widgets/dynamic-table/editors/boolean/boolean.editor.mjs +0 -42
  49. package/esm2022/lib/form/widgets/dynamic-table/editors/date/date.editor.mjs +0 -84
  50. package/esm2022/lib/form/widgets/dynamic-table/editors/datetime/datetime.editor.mjs +0 -84
  51. package/esm2022/lib/form/widgets/dynamic-table/editors/dropdown/dropdown.editor.mjs +0 -95
  52. package/esm2022/lib/form/widgets/dynamic-table/editors/models/cell-validator.model.mjs +0 -18
  53. package/esm2022/lib/form/widgets/dynamic-table/editors/models/date-cell-validator-model.mjs +0 -47
  54. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-row-validation-summary.model.mjs +0 -24
  55. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-column-option.model.mjs +0 -18
  56. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-column.model.mjs +0 -18
  57. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-row.model.mjs +0 -18
  58. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table.widget.model.mjs +0 -159
  59. package/esm2022/lib/form/widgets/dynamic-table/editors/models/number-cell-validator.model.mjs +0 -45
  60. package/esm2022/lib/form/widgets/dynamic-table/editors/models/required-cell-validator.model.mjs +0 -40
  61. package/esm2022/lib/form/widgets/dynamic-table/editors/row-editor/row.editor.mjs +0 -89
  62. package/esm2022/lib/form/widgets/dynamic-table/editors/text/text.editor.mjs +0 -47
  63. package/esm2022/lib/form/widgets/dynamic-table/index.mjs +0 -18
  64. package/esm2022/lib/form/widgets/dynamic-table/public-api.mjs +0 -44
  65. package/esm2022/lib/form/widgets/file-viewer/file-viewer.widget.mjs +0 -46
  66. package/esm2022/lib/form/widgets/functional-group/functional-group.widget.mjs +0 -167
  67. package/esm2022/lib/form/widgets/index.mjs +0 -18
  68. package/esm2022/lib/form/widgets/people/people.widget.mjs +0 -169
  69. package/esm2022/lib/form/widgets/public-api.mjs +0 -54
  70. package/esm2022/lib/form/widgets/radio-buttons/radio-buttons.widget.mjs +0 -97
  71. package/esm2022/lib/form/widgets/typeahead/typeahead.widget.mjs +0 -152
  72. package/esm2022/lib/form/widgets/upload/upload.widget.mjs +0 -128
  73. package/esm2022/lib/people/components/people/people.component.mjs +0 -124
  74. package/esm2022/lib/people/components/people-list/people-list.component.mjs +0 -74
  75. package/esm2022/lib/people/components/people-search/people-search.component.mjs +0 -83
  76. package/esm2022/lib/people/components/people-search-field/people-search-field.component.mjs +0 -90
  77. package/esm2022/lib/people/components/people-selector/people-selector.component.mjs +0 -76
  78. package/esm2022/lib/people/helpers/get-display-user.mjs +0 -22
  79. package/esm2022/lib/people/index.mjs +0 -18
  80. package/esm2022/lib/people/interfaces/perform-search-callback.interface.mjs +0 -18
  81. package/esm2022/lib/people/public-api.mjs +0 -35
  82. package/esm2022/lib/process-comments/index.mjs +0 -21
  83. package/esm2022/lib/process-comments/process-comments.component.mjs +0 -45
  84. package/esm2022/lib/process-comments/services/comment-process.service.mjs +0 -77
  85. package/esm2022/lib/process-list/components/process-audit/process-audit.directive.mjs +0 -105
  86. package/esm2022/lib/process-list/components/process-filters/process-filters.component.mjs +0 -211
  87. package/esm2022/lib/process-list/components/process-instance-details/process-instance-details.component.mjs +0 -142
  88. package/esm2022/lib/process-list/components/process-instance-header/process-instance-header.component.mjs +0 -123
  89. package/esm2022/lib/process-list/components/process-instance-tasks/process-instance-tasks.component.mjs +0 -163
  90. package/esm2022/lib/process-list/components/process-list/process-list.component.mjs +0 -327
  91. package/esm2022/lib/process-list/components/start-process/start-process.component.mjs +0 -423
  92. package/esm2022/lib/process-list/index.mjs +0 -18
  93. package/esm2022/lib/process-list/public-api.mjs +0 -44
  94. package/esm2022/lib/process-list/services/process-filter.service.mjs +0 -182
  95. package/esm2022/lib/process-list/services/process.service.mjs +0 -259
  96. package/esm2022/lib/process.module.mjs +0 -132
  97. package/esm2022/lib/services/apps-process.service.mjs +0 -58
  98. package/esm2022/lib/services/people-process.service.mjs +0 -124
  99. package/esm2022/lib/services/task-comments.service.mjs +0 -65
  100. package/esm2022/lib/task-comments/index.mjs +0 -21
  101. package/esm2022/lib/task-comments/task-comments.component.mjs +0 -44
  102. package/esm2022/lib/task-list/components/attach-form/attach-form.component.mjs +0 -127
  103. package/esm2022/lib/task-list/components/checklist/checklist.component.mjs +0 -140
  104. package/esm2022/lib/task-list/components/start-task/start-task.component.mjs +0 -221
  105. package/esm2022/lib/task-list/components/task-details/task-details.component.mjs +0 -360
  106. package/esm2022/lib/task-list/components/task-filters/task-filters.component.mjs +0 -261
  107. package/esm2022/lib/task-list/components/task-form/claim-task.directive.mjs +0 -77
  108. package/esm2022/lib/task-list/components/task-form/task-form.component.mjs +0 -313
  109. package/esm2022/lib/task-list/components/task-form/unclaim-task.directive.mjs +0 -77
  110. package/esm2022/lib/task-list/components/task-header/task-header.component.mjs +0 -361
  111. package/esm2022/lib/task-list/components/task-list/task-list.component.mjs +0 -359
  112. package/esm2022/lib/task-list/components/task-standalone/task-standalone.component.mjs +0 -82
  113. package/esm2022/lib/task-list/index.mjs +0 -18
  114. package/esm2022/lib/task-list/models/form.model.mjs +0 -26
  115. package/esm2022/lib/task-list/models/task-details.event.mjs +0 -32
  116. package/esm2022/lib/task-list/models/task-preset.model.mjs +0 -41
  117. package/esm2022/lib/task-list/models/user-event.model.mjs +0 -18
  118. package/esm2022/lib/task-list/models/user-group.model.mjs +0 -18
  119. package/esm2022/lib/task-list/public-api.mjs +0 -60
  120. package/esm2022/lib/task-list/services/process-upload.service.mjs +0 -42
  121. package/esm2022/lib/task-list/services/task-filter.service.mjs +0 -249
  122. package/esm2022/lib/task-list/services/task-upload.service.mjs +0 -42
  123. package/esm2022/lib/task-list/services/tasklist.service.mjs +0 -251
  124. package/esm2022/lib/task-list/validators/task-description.validator.mjs +0 -26
  125. package/esm2022/public-api.mjs +0 -30
@@ -1,313 +0,0 @@
1
- /*!
2
- * @license
3
- * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- import { Component, EventEmitter, inject, Input, Output, ViewEncapsulation } from '@angular/core';
18
- import { EmptyContentComponent, TranslationService } from '@alfresco/adf-core';
19
- import { TaskListService } from '../../services/tasklist.service';
20
- import { PeopleProcessService } from '../../../services/people-process.service';
21
- import { CommonModule } from '@angular/common';
22
- import { MatCardModule } from '@angular/material/card';
23
- import { MatButtonModule } from '@angular/material/button';
24
- import { TranslatePipe } from '@ngx-translate/core';
25
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
26
- import { ClaimTaskDirective } from './claim-task.directive';
27
- import { UnclaimTaskDirective } from './unclaim-task.directive';
28
- import { TaskStandaloneComponent } from '../task-standalone/task-standalone.component';
29
- import { FormComponent, FormCustomOutcomesComponent } from '../../../form';
30
- import * as i0 from "@angular/core";
31
- import * as i1 from "@angular/common";
32
- import * as i2 from "@angular/material/card";
33
- import * as i3 from "@angular/material/button";
34
- import * as i4 from "@angular/material/progress-spinner";
35
- export class TaskFormComponent {
36
- constructor() {
37
- /** Toggles rendering of the form title. */
38
- this.showFormTitle = false;
39
- /** Toggles rendering of the `Complete` outcome button. */
40
- this.showFormCompleteButton = true;
41
- /** Toggles rendering of the `Save` outcome button. */
42
- this.showFormSaveButton = true;
43
- /** Toggle rendering of the `Cancel` button. */
44
- this.showCancelButton = true;
45
- /**
46
- * Toggles read-only state of the form. All form widgets render as read-only if enabled.
47
- */
48
- this.readOnlyForm = false;
49
- /** Toggles rendering of the `Refresh` button. */
50
- this.showFormRefreshButton = true;
51
- /** Toggle rendering of the validation icon next to the form title. */
52
- this.showFormValidationIcon = true;
53
- /** Field validators for use with the form. */
54
- this.fieldValidators = [];
55
- /** Emitted when the form is submitted with the `Save` or custom outcomes. */
56
- this.formSaved = new EventEmitter();
57
- /** Emitted when the form is submitted with the `Complete` outcome. */
58
- this.formCompleted = new EventEmitter();
59
- /** Emitted when the form field content is clicked. */
60
- this.formContentClicked = new EventEmitter();
61
- /** Emitted when the form is loaded or reloaded. */
62
- this.formLoaded = new EventEmitter();
63
- /** Emitted when the form associated with the form task is attached. */
64
- this.showAttachForm = new EventEmitter();
65
- /**
66
- * Emitted when any outcome is executed. Default behaviour can be prevented
67
- * via `event.preventDefault()`.
68
- */
69
- this.executeOutcome = new EventEmitter();
70
- /** Emitted when the form associated with the task is completed. */
71
- this.completed = new EventEmitter();
72
- /** Emitted when the supplied form values have a validation error. */
73
- this.formError = new EventEmitter();
74
- /** Emitted when an error occurs. */
75
- this.error = new EventEmitter();
76
- /** Emitted when the "Cancel" button is clicked. */
77
- this.cancel = new EventEmitter();
78
- /** Emitted when the task is claimed. */
79
- this.taskClaimed = new EventEmitter();
80
- /** Emitted when the task is unclaimed (ie, requeued).. */
81
- this.taskUnclaimed = new EventEmitter();
82
- this.loading = false;
83
- this.internalReadOnlyForm = false;
84
- this.taskListService = inject(TaskListService);
85
- this.peopleProcessService = inject(PeopleProcessService);
86
- this.translationService = inject(TranslationService);
87
- }
88
- ngOnInit() {
89
- this.peopleProcessService.getCurrentUserInfo().subscribe((user) => {
90
- this.currentLoggedUser = user;
91
- });
92
- this.loadTask(this.taskId);
93
- }
94
- ngOnChanges(changes) {
95
- const taskId = changes['taskId'];
96
- if (taskId?.currentValue) {
97
- this.loadTask(this.taskId);
98
- return;
99
- }
100
- }
101
- loadTask(taskId) {
102
- this.loading = true;
103
- if (taskId) {
104
- this.taskListService.getTaskDetails(taskId).subscribe((res) => {
105
- this.taskDetails = res;
106
- if (!this.taskDetails.name) {
107
- this.taskDetails.name = 'No name';
108
- }
109
- const endDate = res.endDate;
110
- if (endDate && !isNaN(endDate.getTime())) {
111
- this.internalReadOnlyForm = true;
112
- }
113
- else {
114
- this.internalReadOnlyForm = this.readOnlyForm;
115
- }
116
- this.loading = false;
117
- });
118
- }
119
- }
120
- onFormSaved(savedForm) {
121
- this.formSaved.emit(savedForm);
122
- }
123
- onFormCompleted(form) {
124
- this.formCompleted.emit(form);
125
- }
126
- onFormLoaded(form) {
127
- this.formLoaded.emit(form);
128
- }
129
- onFormContentClick(content) {
130
- this.formContentClicked.emit(content);
131
- }
132
- onFormExecuteOutcome(outcome) {
133
- this.executeOutcome.emit(outcome);
134
- }
135
- onFormError(error) {
136
- this.formError.emit(error);
137
- }
138
- onError(error) {
139
- this.error.emit(error);
140
- }
141
- onCompleteTask() {
142
- this.taskListService.completeTask(this.taskDetails.id).subscribe(() => this.completed.emit(), (error) => this.error.emit(error));
143
- }
144
- onCancel() {
145
- this.cancel.emit();
146
- }
147
- onShowAttachForm() {
148
- this.showAttachForm.emit();
149
- }
150
- hasFormKey() {
151
- return !!this.taskDetails?.formKey;
152
- }
153
- isStandaloneTask() {
154
- return !this.taskDetails?.processDefinitionId;
155
- }
156
- isCompletedTask() {
157
- return !!this.taskDetails?.endDate;
158
- }
159
- isCompleteButtonVisible() {
160
- return !this.hasFormKey() && this.isTaskActive() && this.isCompleteButtonEnabled();
161
- }
162
- isTaskActive() {
163
- return this.taskDetails?.duration === null;
164
- }
165
- isAssigned() {
166
- return !!this.taskDetails.assignee;
167
- }
168
- isAssignedToMe() {
169
- return this.isAssigned() && this.hasEmailAddress() ? this.isEmailEqual() : this.isExternalIdEqual();
170
- }
171
- isCompleteButtonEnabled() {
172
- return this.isAssignedToMe() || this.canInitiatorComplete();
173
- }
174
- canInitiatorComplete() {
175
- return !!this.taskDetails?.initiatorCanCompleteTask;
176
- }
177
- isReadOnlyForm() {
178
- let readOnlyForm;
179
- if (this.isCandidateMember()) {
180
- readOnlyForm = this.internalReadOnlyForm || !this.isAssignedToMe();
181
- }
182
- else {
183
- readOnlyForm =
184
- this.internalReadOnlyForm || !(this.isAssignedToMe() || this.canCurrentUserAsInitiatorComplete() || this.isCurrentUserInvolved());
185
- }
186
- return readOnlyForm;
187
- }
188
- isCurrentUserInvolved() {
189
- let isInvolved = false;
190
- if (this.taskDetails.involvedPeople && this.currentLoggedUser) {
191
- const userInvolved = this.taskDetails.involvedPeople.find((involvedUser) => involvedUser.email.toLocaleLowerCase() === this.currentLoggedUser.email.toLocaleLowerCase() ||
192
- involvedUser.id + '' === this.currentLoggedUser.externalId);
193
- isInvolved = !!userInvolved;
194
- }
195
- if (this.taskDetails.involvedGroups?.length && this.currentLoggedUser.groups?.length && !isInvolved) {
196
- const userGroup = this.taskDetails.involvedGroups.find((involvedGroup) => this.currentLoggedUser.groups.find((group) => group.name === involvedGroup.name.toLocaleLowerCase() || group.id === involvedGroup.id));
197
- isInvolved = !!userGroup;
198
- }
199
- return isInvolved;
200
- }
201
- canCurrentUserAsInitiatorComplete() {
202
- return this.canInitiatorComplete() && this.isProcessInitiator();
203
- }
204
- isProcessInitiator() {
205
- return this.currentLoggedUser && this.currentLoggedUser.id === +this.taskDetails.processInstanceStartUserId;
206
- }
207
- isSaveButtonVisible() {
208
- return this.showFormSaveButton && (!this.canInitiatorComplete() || this.isAssignedToMe() || this.isCurrentUserInvolved());
209
- }
210
- canCompleteNoFormTask() {
211
- return this.isReadOnlyForm();
212
- }
213
- getCompletedTaskTranslatedMessage() {
214
- return this.translationService.get('ADF_TASK_FORM.COMPLETED_TASK.TITLE', { taskName: this.taskDetails.name });
215
- }
216
- isCandidateMember() {
217
- return this.taskDetails.managerOfCandidateGroup || this.taskDetails.memberOfCandidateGroup || this.taskDetails.memberOfCandidateUsers;
218
- }
219
- isTaskClaimable() {
220
- return this.isCandidateMember() && !this.isAssigned();
221
- }
222
- isTaskClaimedByCandidateMember() {
223
- return this.isCandidateMember() && this.isAssignedToMe() && !this.isCompletedTask();
224
- }
225
- reloadTask() {
226
- this.loadTask(this.taskId);
227
- }
228
- onClaimTask(taskId) {
229
- this.taskClaimed.emit(taskId);
230
- }
231
- onClaimTaskError(error) {
232
- this.error.emit(error);
233
- }
234
- onUnclaimTask(taskId) {
235
- this.taskUnclaimed.emit(taskId);
236
- }
237
- onUnclaimTaskError(error) {
238
- this.error.emit(error);
239
- }
240
- hasEmailAddress() {
241
- return !!this.taskDetails.assignee.email;
242
- }
243
- isEmailEqual() {
244
- return (this.taskDetails.assignee &&
245
- this.currentLoggedUser &&
246
- this.taskDetails.assignee.email.toLocaleLowerCase() === this.currentLoggedUser.email.toLocaleLowerCase());
247
- }
248
- isExternalIdEqual() {
249
- return this.taskDetails.assignee && this.currentLoggedUser && this.taskDetails.assignee.externalId === this.currentLoggedUser.externalId;
250
- }
251
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
252
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TaskFormComponent, isStandalone: true, selector: "adf-task-form", inputs: { taskId: "taskId", showFormTitle: "showFormTitle", showFormCompleteButton: "showFormCompleteButton", showFormSaveButton: "showFormSaveButton", showCancelButton: "showCancelButton", readOnlyForm: "readOnlyForm", showFormRefreshButton: "showFormRefreshButton", showFormValidationIcon: "showFormValidationIcon", fieldValidators: "fieldValidators" }, outputs: { formSaved: "formSaved", formCompleted: "formCompleted", formContentClicked: "formContentClicked", formLoaded: "formLoaded", showAttachForm: "showAttachForm", executeOutcome: "executeOutcome", completed: "completed", formError: "formError", error: "error", cancel: "cancel", taskClaimed: "taskClaimed", taskUnclaimed: "taskUnclaimed" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!loading; else loadingTemplate\">\n <adf-form *ngIf=\"hasFormKey(); else withoutForm\"\n [taskId]=\"taskDetails?.id\"\n [showTitle]=\"showFormTitle\"\n [showValidationIcon]=\"showFormValidationIcon\"\n [showRefreshButton]=\"showFormRefreshButton\"\n [showCompleteButton]=\"showFormCompleteButton\"\n [showSaveButton]=\"isSaveButtonVisible()\"\n [disableCompleteButton]=\"!isCompleteButtonEnabled()\"\n [readOnly]=\"isReadOnlyForm()\"\n [fieldValidators]=\"fieldValidators\"\n (formSaved)='onFormSaved($event)'\n (formCompleted)='onFormCompleted($event)'\n (formContentClicked)='onFormContentClick($event)'\n (formLoaded)='onFormLoaded($event)'\n (formError)='onFormError($event)'\n (error)='onError($event)'\n (executeOutcome)='onFormExecuteOutcome($event)'>\n <adf-form-custom-outcomes>\n <ng-template [ngTemplateOutlet]=\"taskFormButtons\" />\n </adf-form-custom-outcomes>\n </adf-form>\n <ng-template #withoutForm>\n <adf-task-standalone *ngIf=\"isStandaloneTask(); else emptyFormMessage\"\n [taskName]=\"taskDetails.name\"\n [taskId]=\"taskDetails.id\"\n [isCompleted]=\"isCompletedTask()\"\n [hasCompletePermission]=\"isCompleteButtonVisible()\"\n [hideCancelButton]=\"showCancelButton\"\n (complete)=\"onCompleteTask()\"\n (showAttachForm)=\"onShowAttachForm()\" />\n <ng-template #emptyFormMessage>\n <mat-card appearance=\"outlined\" class=\"adf-task-form-container\">\n <mat-card-header>\n <mat-card-title>\n <h4>\n <span class=\"adf-form-title\">\n {{taskDetails.name}}\n <ng-container *ngIf=\"!taskDetails.name\">\n {{'FORM.FORM_RENDERER.NAMELESS_TASK' | translate}}\n </ng-container>\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <adf-empty-content *ngIf=\"isCompletedTask(); else emptyFormTemplate\"\n [icon]=\"'description'\"\n [title]=\"getCompletedTaskTranslatedMessage() | async\"\n [subtitle]=\"'ADF_TASK_FORM.COMPLETED_TASK.SUBTITLE'\" />\n <ng-template #emptyFormTemplate>\n <adf-empty-content\n [icon]=\"'description'\"\n [title]=\"'ADF_TASK_LIST.STANDALONE_TASK.NO_FORM_MESSAGE'\"\n [subtitle]=\"'ADF_TASK_FORM.EMPTY_FORM.SUBTITLE'\" />\n </ng-template>\n </mat-card-content>\n <mat-card-actions align=\"end\">\n <div class=\"adf-task-form-actions\">\n <ng-template [ngTemplateOutlet]=\"taskFormButtons\" />\n <button mat-button\n *ngIf=\"!isCompletedTask()\" id=\"adf-no-form-complete-button\"\n color=\"primary\"\n class=\"adf-task-form-actions-button\"\n [disabled]=\"canCompleteNoFormTask()\"\n (click)=\"onCompleteTask()\">\n {{'ADF_TASK_FORM.EMPTY_FORM.BUTTONS.COMPLETE' | translate}}\n </button>\n </div>\n </mat-card-actions>\n </mat-card>\n </ng-template>\n </ng-template>\n\n <ng-template #taskFormButtons>\n <button mat-button id=\"adf-no-form-cancel-button\"\n *ngIf=\"showCancelButton\"\n (click)=\"onCancel()\">\n {{'ADF_TASK_FORM.EMPTY_FORM.BUTTONS.CANCEL' | translate}}\n </button>\n <button mat-button data-automation-id=\"adf-task-form-claim-button\"\n *ngIf=\"isTaskClaimable()\"\n adf-claim-task\n [taskId]=\"taskId\"\n (success)=\"onClaimTask($event)\"\n (error)=\"onClaimTaskError($event)\">\n {{ 'ADF_TASK_FORM.EMPTY_FORM.BUTTONS.CLAIM' | translate }}\n </button>\n <button mat-button data-automation-id=\"adf-task-form-unclaim-button\"\n *ngIf=\"isTaskClaimedByCandidateMember()\"\n adf-unclaim-task\n [taskId]=\"taskId\"\n (success)=\"onUnclaimTask($event)\"\n (error)=\"onUnclaimTaskError($event)\">\n {{ 'ADF_TASK_FORM.EMPTY_FORM.BUTTONS.UNCLAIM' | translate }}\n </button>\n </ng-template>\n</ng-container>\n<ng-template #loadingTemplate>\n <div class=\"adf-task-form-spinner-container\">\n <mat-spinner />\n </div>\n</ng-template>\n", styles: [".adf-task-form-container{overflow:hidden}.adf-task-form-actions{float:right;padding-right:25px;padding-bottom:25px}.adf-task-form-actions .mat-mdc-button{height:36px;border-radius:5px}.adf-task-form-actions .mdc-button__label{width:58px;height:20px;opacity:.54;font-size:var(--theme-body-2-font-size);font-weight:700}.adf-task-form-spinner-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.adf-task-form-spinner-container mat-spinner{display:flex;max-height:100%;place-content:center;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i2.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: ClaimTaskDirective, selector: "[adf-claim-task]", inputs: ["taskId"], outputs: ["success", "error"] }, { kind: "directive", type: UnclaimTaskDirective, selector: "[adf-unclaim-task]", inputs: ["taskId"], outputs: ["success", "error"] }, { kind: "component", type: TaskStandaloneComponent, selector: "adf-task-standalone", inputs: ["taskName", "taskId", "isCompleted", "hasCompletePermission", "hideCancelButton"], outputs: ["cancel", "complete", "showAttachForm"] }, { kind: "component", type: FormComponent, selector: "adf-form", inputs: ["taskId", "nodeId", "formId", "formName", "saveMetadata", "data", "enableFixedSpacedForm"], outputs: ["formSaved", "formCompleted", "formContentClicked", "formLoaded", "formDataRefreshed"] }, { kind: "component", type: FormCustomOutcomesComponent, selector: "adf-form-custom-outcomes" }], encapsulation: i0.ViewEncapsulation.None }); }
253
- }
254
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskFormComponent, decorators: [{
255
- type: Component,
256
- args: [{ selector: 'adf-task-form', standalone: true, imports: [
257
- CommonModule,
258
- MatCardModule,
259
- EmptyContentComponent,
260
- MatButtonModule,
261
- TranslatePipe,
262
- MatProgressSpinnerModule,
263
- ClaimTaskDirective,
264
- UnclaimTaskDirective,
265
- TaskStandaloneComponent,
266
- FormComponent,
267
- FormCustomOutcomesComponent
268
- ], encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"!loading; else loadingTemplate\">\n <adf-form *ngIf=\"hasFormKey(); else withoutForm\"\n [taskId]=\"taskDetails?.id\"\n [showTitle]=\"showFormTitle\"\n [showValidationIcon]=\"showFormValidationIcon\"\n [showRefreshButton]=\"showFormRefreshButton\"\n [showCompleteButton]=\"showFormCompleteButton\"\n [showSaveButton]=\"isSaveButtonVisible()\"\n [disableCompleteButton]=\"!isCompleteButtonEnabled()\"\n [readOnly]=\"isReadOnlyForm()\"\n [fieldValidators]=\"fieldValidators\"\n (formSaved)='onFormSaved($event)'\n (formCompleted)='onFormCompleted($event)'\n (formContentClicked)='onFormContentClick($event)'\n (formLoaded)='onFormLoaded($event)'\n (formError)='onFormError($event)'\n (error)='onError($event)'\n (executeOutcome)='onFormExecuteOutcome($event)'>\n <adf-form-custom-outcomes>\n <ng-template [ngTemplateOutlet]=\"taskFormButtons\" />\n </adf-form-custom-outcomes>\n </adf-form>\n <ng-template #withoutForm>\n <adf-task-standalone *ngIf=\"isStandaloneTask(); else emptyFormMessage\"\n [taskName]=\"taskDetails.name\"\n [taskId]=\"taskDetails.id\"\n [isCompleted]=\"isCompletedTask()\"\n [hasCompletePermission]=\"isCompleteButtonVisible()\"\n [hideCancelButton]=\"showCancelButton\"\n (complete)=\"onCompleteTask()\"\n (showAttachForm)=\"onShowAttachForm()\" />\n <ng-template #emptyFormMessage>\n <mat-card appearance=\"outlined\" class=\"adf-task-form-container\">\n <mat-card-header>\n <mat-card-title>\n <h4>\n <span class=\"adf-form-title\">\n {{taskDetails.name}}\n <ng-container *ngIf=\"!taskDetails.name\">\n {{'FORM.FORM_RENDERER.NAMELESS_TASK' | translate}}\n </ng-container>\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <adf-empty-content *ngIf=\"isCompletedTask(); else emptyFormTemplate\"\n [icon]=\"'description'\"\n [title]=\"getCompletedTaskTranslatedMessage() | async\"\n [subtitle]=\"'ADF_TASK_FORM.COMPLETED_TASK.SUBTITLE'\" />\n <ng-template #emptyFormTemplate>\n <adf-empty-content\n [icon]=\"'description'\"\n [title]=\"'ADF_TASK_LIST.STANDALONE_TASK.NO_FORM_MESSAGE'\"\n [subtitle]=\"'ADF_TASK_FORM.EMPTY_FORM.SUBTITLE'\" />\n </ng-template>\n </mat-card-content>\n <mat-card-actions align=\"end\">\n <div class=\"adf-task-form-actions\">\n <ng-template [ngTemplateOutlet]=\"taskFormButtons\" />\n <button mat-button\n *ngIf=\"!isCompletedTask()\" id=\"adf-no-form-complete-button\"\n color=\"primary\"\n class=\"adf-task-form-actions-button\"\n [disabled]=\"canCompleteNoFormTask()\"\n (click)=\"onCompleteTask()\">\n {{'ADF_TASK_FORM.EMPTY_FORM.BUTTONS.COMPLETE' | translate}}\n </button>\n </div>\n </mat-card-actions>\n </mat-card>\n </ng-template>\n </ng-template>\n\n <ng-template #taskFormButtons>\n <button mat-button id=\"adf-no-form-cancel-button\"\n *ngIf=\"showCancelButton\"\n (click)=\"onCancel()\">\n {{'ADF_TASK_FORM.EMPTY_FORM.BUTTONS.CANCEL' | translate}}\n </button>\n <button mat-button data-automation-id=\"adf-task-form-claim-button\"\n *ngIf=\"isTaskClaimable()\"\n adf-claim-task\n [taskId]=\"taskId\"\n (success)=\"onClaimTask($event)\"\n (error)=\"onClaimTaskError($event)\">\n {{ 'ADF_TASK_FORM.EMPTY_FORM.BUTTONS.CLAIM' | translate }}\n </button>\n <button mat-button data-automation-id=\"adf-task-form-unclaim-button\"\n *ngIf=\"isTaskClaimedByCandidateMember()\"\n adf-unclaim-task\n [taskId]=\"taskId\"\n (success)=\"onUnclaimTask($event)\"\n (error)=\"onUnclaimTaskError($event)\">\n {{ 'ADF_TASK_FORM.EMPTY_FORM.BUTTONS.UNCLAIM' | translate }}\n </button>\n </ng-template>\n</ng-container>\n<ng-template #loadingTemplate>\n <div class=\"adf-task-form-spinner-container\">\n <mat-spinner />\n </div>\n</ng-template>\n", styles: [".adf-task-form-container{overflow:hidden}.adf-task-form-actions{float:right;padding-right:25px;padding-bottom:25px}.adf-task-form-actions .mat-mdc-button{height:36px;border-radius:5px}.adf-task-form-actions .mdc-button__label{width:58px;height:20px;opacity:.54;font-size:var(--theme-body-2-font-size);font-weight:700}.adf-task-form-spinner-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.adf-task-form-spinner-container mat-spinner{display:flex;max-height:100%;place-content:center;align-items:center}\n"] }]
269
- }], propDecorators: { taskId: [{
270
- type: Input,
271
- args: [{ required: true }]
272
- }], showFormTitle: [{
273
- type: Input
274
- }], showFormCompleteButton: [{
275
- type: Input
276
- }], showFormSaveButton: [{
277
- type: Input
278
- }], showCancelButton: [{
279
- type: Input
280
- }], readOnlyForm: [{
281
- type: Input
282
- }], showFormRefreshButton: [{
283
- type: Input
284
- }], showFormValidationIcon: [{
285
- type: Input
286
- }], fieldValidators: [{
287
- type: Input
288
- }], formSaved: [{
289
- type: Output
290
- }], formCompleted: [{
291
- type: Output
292
- }], formContentClicked: [{
293
- type: Output
294
- }], formLoaded: [{
295
- type: Output
296
- }], showAttachForm: [{
297
- type: Output
298
- }], executeOutcome: [{
299
- type: Output
300
- }], completed: [{
301
- type: Output
302
- }], formError: [{
303
- type: Output
304
- }], error: [{
305
- type: Output
306
- }], cancel: [{
307
- type: Output
308
- }], taskClaimed: [{
309
- type: Output
310
- }], taskUnclaimed: [{
311
- type: Output
312
- }] } });
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzL3NyYy9saWIvdGFzay1saXN0L2NvbXBvbmVudHMvdGFzay1mb3JtL3Rhc2stZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Rhc2stbGlzdC9jb21wb25lbnRzL3Rhc2stZm9ybS90YXNrLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSSxPQUFPLEVBRUgscUJBQXFCLEVBS3JCLGtCQUFrQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUdsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxF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Q3hCLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3dCQUNwQix1QkFBdUI7d0JBQ3ZCLGFBQWE7d0JBQ2IsMkJBQTJCO3FCQUM5QixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJOzhCQUtyQyxNQUFNO3NCQURMLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUt6QixhQUFhO3NCQURaLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFPTixZQUFZO3NCQURYLEtBQUs7Z0JBS04scUJBQXFCO3NCQURwQixLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sU0FBUztzQkFEUixNQUFNO2dCQUtQLGFBQWE7c0JBRFosTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsVUFBVTtzQkFEVCxNQUFNO2dCQUtQLGNBQWM7c0JBRGIsTUFBTTtnQkFRUCxjQUFjO3NCQURiLE1BQU07Z0JBS1AsU0FBUztzQkFEUixNQUFNO2dCQUtQLFNBQVM7c0JBRFIsTUFBTTtnQkFLUCxLQUFLO3NCQURKLE1BQU07Z0JBS1AsTUFBTTtzQkFETCxNQUFNO2dCQUtQLFdBQVc7c0JBRFYsTUFBTTtnQkFLUCxhQUFhO3NCQURaLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50TGlua01vZGVsLFxuICAgIEVtcHR5Q29udGVudENvbXBvbmVudCxcbiAgICBGb3JtRmllbGRNb2RlbCxcbiAgICBGb3JtRmllbGRWYWxpZGF0b3IsXG4gICAgRm9ybU1vZGVsLFxuICAgIEZvcm1PdXRjb21lRXZlbnQsXG4gICAgVHJhbnNsYXRpb25TZXJ2aWNlXG59IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBUYXNrTGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YXNrbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhc2tSZXByZXNlbnRhdGlvbiwgVXNlclJlcHJlc2VudGF0aW9uIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQZW9wbGVQcm9jZXNzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Blb3BsZS1wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IENsYWltVGFza0RpcmVjdGl2ZSB9IGZyb20gJy4vY2xhaW0tdGFzay5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVW5jbGFpbVRhc2tEaXJlY3RpdmUgfSBmcm9tICcuL3VuY2xhaW0tdGFzay5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGFza1N0YW5kYWxvbmVDb21wb25lbnQgfSBmcm9tICcuLi90YXNrLXN0YW5kYWxvbmUvdGFzay1zdGFuZGFsb25lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50LCBGb3JtQ3VzdG9tT3V0Y29tZXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9mb3JtJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtdGFzay1mb3JtJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRDYXJkTW9kdWxlLFxuICAgICAgICBFbXB0eUNvbnRlbnRDb21wb25lbnQsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBDbGFpbVRhc2tEaXJlY3RpdmUsXG4gICAgICAgIFVuY2xhaW1UYXNrRGlyZWN0aXZlLFxuICAgICAgICBUYXNrU3RhbmRhbG9uZUNvbXBvbmVudCxcbiAgICAgICAgRm9ybUNvbXBvbmVudCxcbiAgICAgICAgRm9ybUN1c3RvbU91dGNvbWVzQ29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFzay1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YXNrLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFRhc2tGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKiAoKipyZXF1aXJlZCoqKSBUaGUgaWQgb2YgdGhlIHRhc2sgd2hvc2UgZGV0YWlscyB3ZSBhcmUgYXNraW5nIGZvci4gKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHRhc2tJZDogc3RyaW5nO1xuXG4gICAgLyoqIFRvZ2dsZXMgcmVuZGVyaW5nIG9mIHRoZSBmb3JtIHRpdGxlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0Zvcm1UaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgcmVuZGVyaW5nIG9mIHRoZSBgQ29tcGxldGVgIG91dGNvbWUgYnV0dG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0Zvcm1Db21wbGV0ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogVG9nZ2xlcyByZW5kZXJpbmcgb2YgdGhlIGBTYXZlYCBvdXRjb21lIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dGb3JtU2F2ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogVG9nZ2xlIHJlbmRlcmluZyBvZiB0aGUgYENhbmNlbGAgYnV0dG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0NhbmNlbEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgZm9ybS4gQWxsIGZvcm0gd2lkZ2V0cyByZW5kZXIgYXMgcmVhZC1vbmx5IGlmIGVuYWJsZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByZWFkT25seUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIHJlbmRlcmluZyBvZiB0aGUgYFJlZnJlc2hgIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dGb3JtUmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogVG9nZ2xlIHJlbmRlcmluZyBvZiB0aGUgdmFsaWRhdGlvbiBpY29uIG5leHQgdG8gdGhlIGZvcm0gdGl0bGUuICovXG4gICAgQElucHV0KClcbiAgICBzaG93Rm9ybVZhbGlkYXRpb25JY29uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKiBGaWVsZCB2YWxpZGF0b3JzIGZvciB1c2Ugd2l0aCB0aGUgZm9ybS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZpZWxkVmFsaWRhdG9yczogRm9ybUZpZWxkVmFsaWRhdG9yW10gPSBbXTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggdGhlIGBTYXZlYCBvciBjdXN0b20gb3V0Y29tZXMuICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybVNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtTW9kZWw+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCB3aXRoIHRoZSBgQ29tcGxldGVgIG91dGNvbWUuICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybUNvbXBsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybU1vZGVsPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgZm9ybSBmaWVsZCBjb250ZW50IGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybUNvbnRlbnRDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDb250ZW50TGlua01vZGVsPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgZm9ybSBpcyBsb2FkZWQgb3IgcmVsb2FkZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybU1vZGVsPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgZm9ybSBhc3NvY2lhdGVkIHdpdGggdGhlIGZvcm0gdGFzayBpcyBhdHRhY2hlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzaG93QXR0YWNoRm9ybSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBhbnkgb3V0Y29tZSBpcyBleGVjdXRlZC4gRGVmYXVsdCBiZWhhdmlvdXIgY2FuIGJlIHByZXZlbnRlZFxuICAgICAqIHZpYSBgZXZlbnQucHJldmVudERlZmF1bHQoKWAuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZXhlY3V0ZU91dGNvbWUgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1PdXRjb21lRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBmb3JtIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBpcyBjb21wbGV0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgY29tcGxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgc3VwcGxpZWQgZm9ybSB2YWx1ZXMgaGF2ZSBhIHZhbGlkYXRpb24gZXJyb3IuICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybUVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtRmllbGRNb2RlbFtdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIFwiQ2FuY2VsXCIgYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdGFzayBpcyBjbGFpbWVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHRhc2tDbGFpbWVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSB0YXNrIGlzIHVuY2xhaW1lZCAoaWUsIHJlcXVldWVkKS4uICovXG4gICAgQE91dHB1dCgpXG4gICAgdGFza1VuY2xhaW1lZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgdGFza0RldGFpbHM6IFRhc2tSZXByZXNlbnRhdGlvbjtcbiAgICBjdXJyZW50TG9nZ2VkVXNlcjogVXNlclJlcHJlc2VudGF0aW9uO1xuICAgIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpbnRlcm5hbFJlYWRPbmx5Rm9ybTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSB0YXNrTGlzdFNlcnZpY2UgPSBpbmplY3QoVGFza0xpc3RTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHBlb3BsZVByb2Nlc3NTZXJ2aWNlID0gaW5qZWN0KFBlb3BsZVByb2Nlc3NTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucGVvcGxlUHJvY2Vzc1NlcnZpY2UuZ2V0Q3VycmVudFVzZXJJbmZvKCkuc3Vic2NyaWJlKCh1c2VyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2dnZWRVc2VyID0gdXNlcjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9hZFRhc2sodGhpcy50YXNrSWQpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgdGFza0lkID0gY2hhbmdlc1sndGFza0lkJ107XG4gICAgICAgIGlmICh0YXNrSWQ/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkVGFzayh0aGlzLnRhc2tJZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkVGFzayh0YXNrSWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBpZiAodGFza0lkKSB7XG4gICAgICAgICAgICB0aGlzLnRhc2tMaXN0U2VydmljZS5nZXRUYXNrRGV0YWlscyh0YXNrSWQpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YXNrRGV0YWlscyA9IHJlcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50YXNrRGV0YWlscy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFza0RldGFpbHMubmFtZSA9ICdObyBuYW1lJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbmREYXRlOiBhbnkgPSByZXMuZW5kRGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kRGF0ZSAmJiAhaXNOYU4oZW5kRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxSZWFkT25seUZvcm0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxSZWFkT25seUZvcm0gPSB0aGlzLnJlYWRPbmx5Rm9ybTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRm9ybVNhdmVkKHNhdmVkRm9ybTogRm9ybU1vZGVsKSB7XG4gICAgICAgIHRoaXMuZm9ybVNhdmVkLmVtaXQoc2F2ZWRGb3JtKTtcbiAgICB9XG5cbiAgICBvbkZvcm1Db21wbGV0ZWQoZm9ybTogRm9ybU1vZGVsKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbXBsZXRlZC5lbWl0KGZvcm0pO1xuICAgIH1cblxuICAgIG9uRm9ybUxvYWRlZChmb3JtOiBGb3JtTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtTG9hZGVkLmVtaXQoZm9ybSk7XG4gICAgfVxuXG4gICAgb25Gb3JtQ29udGVudENsaWNrKGNvbnRlbnQ6IENvbnRlbnRMaW5rTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udGVudENsaWNrZWQuZW1pdChjb250ZW50KTtcbiAgICB9XG5cbiAgICBvbkZvcm1FeGVjdXRlT3V0Y29tZShvdXRjb21lOiBGb3JtT3V0Y29tZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZU91dGNvbWUuZW1pdChvdXRjb21lKTtcbiAgICB9XG5cbiAgICBvbkZvcm1FcnJvcihlcnJvcjogYW55KSB7XG4gICAgICAgIHRoaXMuZm9ybUVycm9yLmVtaXQoZXJyb3IpO1xuICAgIH1cblxuICAgIG9uRXJyb3IoZXJyb3I6IGFueSkge1xuICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyb3IpO1xuICAgIH1cblxuICAgIG9uQ29tcGxldGVUYXNrKCkge1xuICAgICAgICB0aGlzLnRhc2tMaXN0U2VydmljZS5jb21wbGV0ZVRhc2sodGhpcy50YXNrRGV0YWlscy5pZCkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5jb21wbGV0ZWQuZW1pdCgpLFxuICAgICAgICAgICAgKGVycm9yKSA9PiB0aGlzLmVycm9yLmVtaXQoZXJyb3IpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25DYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgICB9XG5cbiAgICBvblNob3dBdHRhY2hGb3JtKCkge1xuICAgICAgICB0aGlzLnNob3dBdHRhY2hGb3JtLmVtaXQoKTtcbiAgICB9XG5cbiAgICBoYXNGb3JtS2V5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnRhc2tEZXRhaWxzPy5mb3JtS2V5O1xuICAgIH1cblxuICAgIGlzU3RhbmRhbG9uZVRhc2soKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YXNrRGV0YWlscz8ucHJvY2Vzc0RlZmluaXRpb25JZDtcbiAgICB9XG5cbiAgICBpc0NvbXBsZXRlZFRhc2soKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudGFza0RldGFpbHM/LmVuZERhdGU7XG4gICAgfVxuXG4gICAgaXNDb21wbGV0ZUJ1dHRvblZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5oYXNGb3JtS2V5KCkgJiYgdGhpcy5pc1Rhc2tBY3RpdmUoKSAmJiB0aGlzLmlzQ29tcGxldGVCdXR0b25FbmFibGVkKCk7XG4gICAgfVxuXG4gICAgaXNUYXNrQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXNrRGV0YWlscz8uZHVyYXRpb24gPT09IG51bGw7XG4gICAgfVxuXG4gICAgaXNBc3NpZ25lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy50YXNrRGV0YWlscy5hc3NpZ25lZTtcbiAgICB9XG5cbiAgICBpc0Fzc2lnbmVkVG9NZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBc3NpZ25lZCgpICYmIHRoaXMuaGFzRW1haWxBZGRyZXNzKCkgPyB0aGlzLmlzRW1haWxFcXVhbCgpIDogdGhpcy5pc0V4dGVybmFsSWRFcXVhbCgpO1xuICAgIH1cblxuICAgIGlzQ29tcGxldGVCdXR0b25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Fzc2lnbmVkVG9NZSgpIHx8IHRoaXMuY2FuSW5pdGlhdG9yQ29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBjYW5Jbml0aWF0b3JDb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy50YXNrRGV0YWlscz8uaW5pdGlhdG9yQ2FuQ29tcGxldGVUYXNrO1xuICAgIH1cblxuICAgIGlzUmVhZE9ubHlGb3JtKCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgcmVhZE9ubHlGb3JtOiBib29sZWFuO1xuICAgICAgICBpZiAodGhpcy5pc0NhbmRpZGF0ZU1lbWJlcigpKSB7XG4gICAgICAgICAgICByZWFkT25seUZvcm0gPSB0aGlzLmludGVybmFsUmVhZE9ubHlGb3JtIHx8ICF0aGlzLmlzQXNzaWduZWRUb01lKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWFkT25seUZvcm0gPVxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxSZWFkT25seUZvcm0gfHwgISh0aGlzLmlzQXNzaWduZWRUb01lKCkgfHwgdGhpcy5jYW5DdXJyZW50VXNlckFzSW5pdGlhdG9yQ29tcGxldGUoKSB8fCB0aGlzLmlzQ3VycmVudFVzZXJJbnZvbHZlZCgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWFkT25seUZvcm07XG4gICAgfVxuXG4gICAgaXNDdXJyZW50VXNlckludm9sdmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgaXNJbnZvbHZlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy50YXNrRGV0YWlscy5pbnZvbHZlZFBlb3BsZSAmJiB0aGlzLmN1cnJlbnRMb2dnZWRVc2VyKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VySW52b2x2ZWQgPSB0aGlzLnRhc2tEZXRhaWxzLmludm9sdmVkUGVvcGxlLmZpbmQoXG4gICAgICAgICAgICAgICAgKGludm9sdmVkVXNlcikgPT5cbiAgICAgICAgICAgICAgICAgICAgaW52b2x2ZWRVc2VyLmVtYWlsLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHRoaXMuY3VycmVudExvZ2dlZFVzZXIuZW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKSB8fFxuICAgICAgICAgICAgICAgICAgICBpbnZvbHZlZFVzZXIuaWQgKyAnJyA9PT0gdGhpcy5jdXJyZW50TG9nZ2VkVXNlci5leHRlcm5hbElkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaXNJbnZvbHZlZCA9ICEhdXNlckludm9sdmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGFza0RldGFpbHMuaW52b2x2ZWRHcm91cHM/Lmxlbmd0aCAmJiB0aGlzLmN1cnJlbnRMb2dnZWRVc2VyLmdyb3Vwcz8ubGVuZ3RoICYmICFpc0ludm9sdmVkKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VyR3JvdXAgPSB0aGlzLnRhc2tEZXRhaWxzLmludm9sdmVkR3JvdXBzLmZpbmQoKGludm9sdmVkR3JvdXApID0+XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9nZ2VkVXNlci5ncm91cHMuZmluZCgoZ3JvdXApID0+IGdyb3VwLm5hbWUgPT09IGludm9sdmVkR3JvdXAubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpIHx8IGdyb3VwLmlkID09PSBpbnZvbHZlZEdyb3VwLmlkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlzSW52b2x2ZWQgPSAhIXVzZXJHcm91cDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNJbnZvbHZlZDtcbiAgICB9XG5cbiAgICBjYW5DdXJyZW50VXNlckFzSW5pdGlhdG9yQ29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbkluaXRpYXRvckNvbXBsZXRlKCkgJiYgdGhpcy5pc1Byb2Nlc3NJbml0aWF0b3IoKTtcbiAgICB9XG5cbiAgICBpc1Byb2Nlc3NJbml0aWF0b3IoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMb2dnZWRVc2VyICYmIHRoaXMuY3VycmVudExvZ2dlZFVzZXIuaWQgPT09ICt0aGlzLnRhc2tEZXRhaWxzLnByb2Nlc3NJbnN0YW5jZVN0YXJ0VXNlcklkO1xuICAgIH1cblxuICAgIGlzU2F2ZUJ1dHRvblZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dGb3JtU2F2ZUJ1dHRvbiAmJiAoIXRoaXMuY2FuSW5pdGlhdG9yQ29tcGxldGUoKSB8fCB0aGlzLmlzQXNzaWduZWRUb01lKCkgfHwgdGhpcy5pc0N1cnJlbnRVc2VySW52b2x2ZWQoKSk7XG4gICAgfVxuXG4gICAgY2FuQ29tcGxldGVOb0Zvcm1UYXNrKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1JlYWRPbmx5Rm9ybSgpO1xuICAgIH1cblxuICAgIGdldENvbXBsZXRlZFRhc2tUcmFuc2xhdGVkTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuZ2V0KCdBREZfVEFTS19GT1JNLkNPTVBMRVRFRF9UQVNLLlRJVExFJywgeyB0YXNrTmFtZTogdGhpcy50YXNrRGV0YWlscy5uYW1lIH0pO1xuICAgIH1cblxuICAgIGlzQ2FuZGlkYXRlTWVtYmVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YXNrRGV0YWlscy5tYW5hZ2VyT2ZDYW5kaWRhdGVHcm91cCB8fCB0aGlzLnRhc2tEZXRhaWxzLm1lbWJlck9mQ2FuZGlkYXRlR3JvdXAgfHwgdGhpcy50YXNrRGV0YWlscy5tZW1iZXJPZkNhbmRpZGF0ZVVzZXJzO1xuICAgIH1cblxuICAgIGlzVGFza0NsYWltYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDYW5kaWRhdGVNZW1iZXIoKSAmJiAhdGhpcy5pc0Fzc2lnbmVkKCk7XG4gICAgfVxuXG4gICAgaXNUYXNrQ2xhaW1lZEJ5Q2FuZGlkYXRlTWVtYmVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0NhbmRpZGF0ZU1lbWJlcigpICYmIHRoaXMuaXNBc3NpZ25lZFRvTWUoKSAmJiAhdGhpcy5pc0NvbXBsZXRlZFRhc2soKTtcbiAgICB9XG5cbiAgICByZWxvYWRUYXNrKCkge1xuICAgICAgICB0aGlzLmxvYWRUYXNrKHRoaXMudGFza0lkKTtcbiAgICB9XG5cbiAgICBvbkNsYWltVGFzayh0YXNrSWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRhc2tDbGFpbWVkLmVtaXQodGFza0lkKTtcbiAgICB9XG5cbiAgICBvbkNsYWltVGFza0Vycm9yKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycm9yKTtcbiAgICB9XG5cbiAgICBvblVuY2xhaW1UYXNrKHRhc2tJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudGFza1VuY2xhaW1lZC5lbWl0KHRhc2tJZCk7XG4gICAgfVxuXG4gICAgb25VbmNsYWltVGFza0Vycm9yKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycm9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0VtYWlsQWRkcmVzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy50YXNrRGV0YWlscy5hc3NpZ25lZS5lbWFpbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRW1haWxFcXVhbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudGFza0RldGFpbHMuYXNzaWduZWUgJiZcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvZ2dlZFVzZXIgJiZcbiAgICAgICAgICAgIHRoaXMudGFza0RldGFpbHMuYXNzaWduZWUuZW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGhpcy5jdXJyZW50TG9nZ2VkVXNlci5lbWFpbC50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0V4dGVybmFsSWRFcXVhbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza0RldGFpbHMuYXNzaWduZWUgJiYgdGhpcy5jdXJyZW50TG9nZ2VkVXNlciAmJiB0aGlzLnRhc2tEZXRhaWxzLmFzc2lnbmVlLmV4dGVybmFsSWQgPT09IHRoaXMuY3VycmVudExvZ2dlZFVzZXIuZXh0ZXJuYWxJZDtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2UgbG9hZGluZ1RlbXBsYXRlXCI+XG4gIDxhZGYtZm9ybSAqbmdJZj1cImhhc0Zvcm1LZXkoKTsgZWxzZSB3aXRob3V0Rm9ybVwiXG4gICAgW3Rhc2tJZF09XCJ0YXNrRGV0YWlscz8uaWRcIlxuICAgIFtzaG93VGl0bGVdPVwic2hvd0Zvcm1UaXRsZVwiXG4gICAgW3Nob3dWYWxpZGF0aW9uSWNvbl09XCJzaG93Rm9ybVZhbGlkYXRpb25JY29uXCJcbiAgICBbc2hvd1JlZnJlc2hCdXR0b25dPVwic2hvd0Zvcm1SZWZyZXNoQnV0dG9uXCJcbiAgICBbc2hvd0NvbXBsZXRlQnV0dG9uXT1cInNob3dGb3JtQ29tcGxldGVCdXR0b25cIlxuICAgIFtzaG93U2F2ZUJ1dHRvbl09XCJpc1NhdmVCdXR0b25WaXNpYmxlKClcIlxuICAgIFtkaXNhYmxlQ29tcGxldGVCdXR0b25dPVwiIWlzQ29tcGxldGVCdXR0b25FbmFibGVkKClcIlxuICAgIFtyZWFkT25seV09XCJpc1JlYWRPbmx5Rm9ybSgpXCJcbiAgICBbZmllbGRWYWxpZGF0b3JzXT1cImZpZWxkVmFsaWRhdG9yc1wiXG4gICAgKGZvcm1TYXZlZCk9J29uRm9ybVNhdmVkKCRldmVudCknXG4gICAgKGZvcm1Db21wbGV0ZWQpPSdvbkZvcm1Db21wbGV0ZWQoJGV2ZW50KSdcbiAgICAoZm9ybUNvbnRlbnRDbGlja2VkKT0nb25Gb3JtQ29udGVudENsaWNrKCRldmVudCknXG4gICAgKGZvcm1Mb2FkZWQpPSdvbkZvcm1Mb2FkZWQoJGV2ZW50KSdcbiAgICAoZm9ybUVycm9yKT0nb25Gb3JtRXJyb3IoJGV2ZW50KSdcbiAgICAoZXJyb3IpPSdvbkVycm9yKCRldmVudCknXG4gICAgKGV4ZWN1dGVPdXRjb21lKT0nb25Gb3JtRXhlY3V0ZU91dGNvbWUoJGV2ZW50KSc+XG4gICAgPGFkZi1mb3JtLWN1c3RvbS1vdXRjb21lcz5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhc2tGb3JtQnV0dG9uc1wiIC8+XG4gICAgPC9hZGYtZm9ybS1jdXN0b20tb3V0Y29tZXM+XG4gIDwvYWRmLWZvcm0+XG4gIDxuZy10ZW1wbGF0ZSAjd2l0aG91dEZvcm0+XG4gICAgPGFkZi10YXNrLXN0YW5kYWxvbmUgKm5nSWY9XCJpc1N0YW5kYWxvbmVUYXNrKCk7IGVsc2UgZW1wdHlGb3JtTWVzc2FnZVwiXG4gICAgICAgIFt0YXNrTmFtZV09XCJ0YXNrRGV0YWlscy5uYW1lXCJcbiAgICAgICAgW3Rhc2tJZF09XCJ0YXNrRGV0YWlscy5pZFwiXG4gICAgICAgIFtpc0NvbXBsZXRlZF09XCJpc0NvbXBsZXRlZFRhc2soKVwiXG4gICAgICAgIFtoYXNDb21wbGV0ZVBlcm1pc3Npb25dPVwiaXNDb21wbGV0ZUJ1dHRvblZpc2libGUoKVwiXG4gICAgICAgIFtoaWRlQ2FuY2VsQnV0dG9uXT1cInNob3dDYW5jZWxCdXR0b25cIlxuICAgICAgICAoY29tcGxldGUpPVwib25Db21wbGV0ZVRhc2soKVwiXG4gICAgICAgIChzaG93QXR0YWNoRm9ybSk9XCJvblNob3dBdHRhY2hGb3JtKClcIiAvPlxuICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eUZvcm1NZXNzYWdlPlxuICAgICAgICA8bWF0LWNhcmQgYXBwZWFyYW5jZT1cIm91dGxpbmVkXCIgY2xhc3M9XCJhZGYtdGFzay1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxoND5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLWZvcm0tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3Rhc2tEZXRhaWxzLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFza0RldGFpbHMubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydGT1JNLkZPUk1fUkVOREVSRVIuTkFNRUxFU1NfVEFTSycgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgIDxhZGYtZW1wdHktY29udGVudCAqbmdJZj1cImlzQ29tcGxldGVkVGFzaygpOyBlbHNlIGVtcHR5Rm9ybVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ2Rlc2NyaXB0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJnZXRDb21wbGV0ZWRUYXNrVHJhbnNsYXRlZE1lc3NhZ2UoKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cIidBREZfVEFTS19GT1JNLkNPTVBMRVRFRF9UQVNLLlNVQlRJVExFJ1wiIC8+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eUZvcm1UZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPGFkZi1lbXB0eS1jb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCInZGVzY3JpcHRpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQURGX1RBU0tfTElTVC5TVEFOREFMT05FX1RBU0suTk9fRk9STV9NRVNTQUdFJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3VidGl0bGVdPVwiJ0FERl9UQVNLX0ZPUk0uRU1QVFlfRk9STS5TVUJUSVRMRSdcIiAvPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdGFzay1mb3JtLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhc2tGb3JtQnV0dG9uc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNDb21wbGV0ZWRUYXNrKClcIiBpZD1cImFkZi1uby1mb3JtLWNvbXBsZXRlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtdGFzay1mb3JtLWFjdGlvbnMtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjYW5Db21wbGV0ZU5vRm9ybVRhc2soKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Db21wbGV0ZVRhc2soKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3snQURGX1RBU0tfRk9STS5FTVBUWV9GT1JNLkJVVFRPTlMuQ09NUExFVEUnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjdGFza0Zvcm1CdXR0b25zPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gaWQ9XCJhZGYtbm8tZm9ybS1jYW5jZWwtYnV0dG9uXCJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0NhbmNlbEJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DYW5jZWwoKVwiPlxuICAgICAgICAgICAge3snQURGX1RBU0tfRk9STS5FTVBUWV9GT1JNLkJVVFRPTlMuQ0FOQ0VMJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXRhc2stZm9ybS1jbGFpbS1idXR0b25cIlxuICAgICAgICAgICAgKm5nSWY9XCJpc1Rhc2tDbGFpbWFibGUoKVwiXG4gICAgICAgICAgICBhZGYtY2xhaW0tdGFza1xuICAgICAgICAgICAgW3Rhc2tJZF09XCJ0YXNrSWRcIlxuICAgICAgICAgICAgKHN1Y2Nlc3MpPVwib25DbGFpbVRhc2soJGV2ZW50KVwiXG4gICAgICAgICAgICAoZXJyb3IpPVwib25DbGFpbVRhc2tFcnJvcigkZXZlbnQpXCI+XG4gICAgICAgICAgICB7eyAnQURGX1RBU0tfRk9STS5FTVBUWV9GT1JNLkJVVFRPTlMuQ0xBSU0nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXRhc2stZm9ybS11bmNsYWltLWJ1dHRvblwiXG4gICAgICAgICAgICAqbmdJZj1cImlzVGFza0NsYWltZWRCeUNhbmRpZGF0ZU1lbWJlcigpXCJcbiAgICAgICAgICAgIGFkZi11bmNsYWltLXRhc2tcbiAgICAgICAgICAgIFt0YXNrSWRdPVwidGFza0lkXCJcbiAgICAgICAgICAgIChzdWNjZXNzKT1cIm9uVW5jbGFpbVRhc2soJGV2ZW50KVwiXG4gICAgICAgICAgICAoZXJyb3IpPVwib25VbmNsYWltVGFza0Vycm9yKCRldmVudClcIj5cbiAgICAgICAgICAgIHt7ICdBREZfVEFTS19GT1JNLkVNUFRZX0ZPUk0uQlVUVE9OUy5VTkNMQUlNJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNsb2FkaW5nVGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImFkZi10YXNrLWZvcm0tc3Bpbm5lci1jb250YWluZXJcIj5cbiAgICAgICAgPG1hdC1zcGlubmVyIC8+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,77 +0,0 @@
1
- /*!
2
- * @license
3
- * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- import { Directive, HostListener, Input, Output, EventEmitter } from '@angular/core';
18
- import { TaskListService } from '../../services/tasklist.service';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "../../services/tasklist.service";
21
- export class UnclaimTaskDirective {
22
- constructor(taskListService) {
23
- this.taskListService = taskListService;
24
- /** Emitted when the task is released. */
25
- this.success = new EventEmitter();
26
- /** Emitted when the task cannot be released. */
27
- this.error = new EventEmitter();
28
- this.invalidParams = [];
29
- }
30
- onClick() {
31
- try {
32
- this.unclaimTask();
33
- }
34
- catch (error) {
35
- this.error.emit(error);
36
- }
37
- }
38
- ngOnInit() {
39
- this.validateInputs();
40
- }
41
- validateInputs() {
42
- if (!this.isTaskValid()) {
43
- this.invalidParams.push('taskId');
44
- }
45
- if (this.invalidParams.length) {
46
- throw new Error(`Attribute ${this.invalidParams.join(', ')} is required`);
47
- }
48
- }
49
- isTaskValid() {
50
- return this.taskId && this.taskId.length > 0;
51
- }
52
- unclaimTask() {
53
- this.taskListService.unclaimTask(this.taskId).subscribe(() => {
54
- this.success.emit(this.taskId);
55
- }, (error) => this.error.emit(error));
56
- }
57
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UnclaimTaskDirective, deps: [{ token: i1.TaskListService }], target: i0.ɵɵFactoryTarget.Directive }); }
58
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: UnclaimTaskDirective, isStandalone: true, selector: "[adf-unclaim-task]", inputs: { taskId: "taskId" }, outputs: { success: "success", error: "error" }, host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
59
- }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UnclaimTaskDirective, decorators: [{
61
- type: Directive,
62
- args: [{
63
- // eslint-disable-next-line @angular-eslint/directive-selector
64
- selector: '[adf-unclaim-task]',
65
- standalone: true
66
- }]
67
- }], ctorParameters: () => [{ type: i1.TaskListService }], propDecorators: { taskId: [{
68
- type: Input
69
- }], success: [{
70
- type: Output
71
- }], error: [{
72
- type: Output
73
- }], onClick: [{
74
- type: HostListener,
75
- args: ['click']
76
- }] } });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5jbGFpbS10YXNrLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzL3NyYy9saWIvdGFzay1saXN0L2NvbXBvbmVudHMvdGFzay1mb3JtL3VuY2xhaW0tdGFzay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFPbEUsTUFBTSxPQUFPLG9CQUFvQjtJQWU3QixZQUFvQixlQUFnQztRQUFoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFWcEQseUNBQXlDO1FBRXpDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWxDLGdEQUFnRDtRQUVoRCxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVoQyxrQkFBYSxHQUFhLEVBQUUsQ0FBQztJQUUwQixDQUFDO0lBR3hELE9BQU87UUFDSCxJQUFJLENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLFdBQVc7UUFDZixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUNuRCxHQUFHLEVBQUU7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FDcEMsQ0FBQztJQUNOLENBQUM7K0dBbERRLG9CQUFvQjttR0FBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQUxoQyxTQUFTO21CQUFDO29CQUNQLDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsVUFBVSxFQUFFLElBQUk7aUJBQ25CO29GQUlHLE1BQU07c0JBREwsS0FBSztnQkFLTixPQUFPO3NCQUROLE1BQU07Z0JBS1AsS0FBSztzQkFESixNQUFNO2dCQVFQLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhc2tMaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rhc2tsaXN0LnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW2FkZi11bmNsYWltLXRhc2tdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFVuY2xhaW1UYXNrRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogKFJlcXVpcmVkKSBUaGUgaWQgb2YgdGhlIHRhc2suICovXG4gICAgQElucHV0KClcbiAgICB0YXNrSWQ6IHN0cmluZztcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHRhc2sgaXMgcmVsZWFzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdGFzayBjYW5ub3QgYmUgcmVsZWFzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIGludmFsaWRQYXJhbXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhc2tMaXN0U2VydmljZTogVGFza0xpc3RTZXJ2aWNlKSB7fVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICAgIG9uQ2xpY2soKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnVuY2xhaW1UYXNrKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dHMoKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUlucHV0cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVGFza1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZFBhcmFtcy5wdXNoKCd0YXNrSWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkUGFyYW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdHRyaWJ1dGUgJHt0aGlzLmludmFsaWRQYXJhbXMuam9pbignLCAnKX0gaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzVGFza1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YXNrSWQgJiYgdGhpcy50YXNrSWQubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVuY2xhaW1UYXNrKCkge1xuICAgICAgICB0aGlzLnRhc2tMaXN0U2VydmljZS51bmNsYWltVGFzayh0aGlzLnRhc2tJZCkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzcy5lbWl0KHRoaXMudGFza0lkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3IpID0+IHRoaXMuZXJyb3IuZW1pdChlcnJvcilcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=