@netgrif/components-core 6.2.0-rc.9 → 6.2.1

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 (167) hide show
  1. package/commons/schema.d.ts +2 -0
  2. package/esm2020/assets/i18n/de.json +9 -0
  3. package/esm2020/assets/i18n/en.json +9 -0
  4. package/esm2020/assets/i18n/sk.json +9 -0
  5. package/esm2020/commons/schema.mjs +1 -1
  6. package/esm2020/commons/view-class-info.mjs +9 -1
  7. package/esm2020/lib/admin/public-api.mjs +2 -2
  8. package/esm2020/lib/admin/role-assignment-ldap-group/abstract-ldap-group-role-assignment.component.mjs +88 -0
  9. package/esm2020/lib/authentication/services/methods/basic-authentication/basic-authentication.service.mjs +10 -2
  10. package/esm2020/lib/data-fields/button-field/abstract-button-field.component.mjs +2 -12
  11. package/esm2020/lib/data-fields/button-field/models/button-field.mjs +2 -18
  12. package/esm2020/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.mjs +4 -5
  13. package/esm2020/lib/data-fields/enumeration-field/models/enumeration-field.mjs +2 -22
  14. package/esm2020/lib/data-fields/file-field/abstract-file-field.component.mjs +30 -13
  15. package/esm2020/lib/data-fields/file-list-field/abstract-file-list-field.component.mjs +35 -15
  16. package/esm2020/lib/data-fields/i18n-field/abstract-i18n-field.component.mjs +1 -4
  17. package/esm2020/lib/data-fields/models/abstract-data-field.mjs +9 -1
  18. package/esm2020/lib/data-fields/multichoice-field/models/multichoice-field.mjs +2 -17
  19. package/esm2020/lib/data-fields/multichoice-field/multichoice-autocomplete-field/abstract-multichoice-autocomplete-field-component.component.mjs +79 -0
  20. package/esm2020/lib/data-fields/public-api.mjs +4 -1
  21. package/esm2020/lib/data-fields/text-field/models/text-area-field.mjs +4 -5
  22. package/esm2020/lib/data-fields/text-field/models/text-field.mjs +2 -14
  23. package/esm2020/lib/data-fields/user-list-field/abstract-user-list-field.component.mjs +75 -0
  24. package/esm2020/lib/data-fields/user-list-field/models/user-list-field.mjs +11 -0
  25. package/esm2020/lib/data-fields/user-list-field/models/user-list-value.mjs +36 -0
  26. package/esm2020/lib/dialog/components/alert-dialog/alert-dialog.component.mjs +4 -4
  27. package/esm2020/lib/dialog/components/confirm-dialog/confirm-dialog.component.mjs +4 -4
  28. package/esm2020/lib/dialog/components/prompt-dialog/prompt-dialog.component.mjs +4 -4
  29. package/esm2020/lib/dialog/models/abstract-dialog.component.mjs +29 -0
  30. package/esm2020/lib/header/abstract-header-service.mjs +25 -9
  31. package/esm2020/lib/header/abstract-header.component.mjs +7 -5
  32. package/esm2020/lib/header/case-header/case-header.service.mjs +2 -2
  33. package/esm2020/lib/header/services/overflow.service.mjs +2 -2
  34. package/esm2020/lib/header/task-header/task-header.service.mjs +7 -4
  35. package/esm2020/lib/header/workflow-header/workflow-header.service.mjs +11 -8
  36. package/esm2020/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.mjs +69 -0
  37. package/esm2020/lib/navigation/public-api.mjs +2 -1
  38. package/esm2020/lib/navigation/service/uri.service.mjs +5 -1
  39. package/esm2020/lib/panel/abstract/panel-with-header-binding.mjs +17 -5
  40. package/esm2020/lib/panel/abstract/panel-with-immediate-data.mjs +52 -22
  41. package/esm2020/lib/panel/abstract-panel.component.mjs +16 -4
  42. package/esm2020/lib/panel/case-panel/abstract-case-panel.component.mjs +13 -11
  43. package/esm2020/lib/panel/configuration/config-params.mjs +5 -0
  44. package/esm2020/lib/panel/public-api.mjs +3 -1
  45. package/esm2020/lib/panel/task-panel/abstract-task-panel.component.mjs +18 -12
  46. package/esm2020/lib/panel/task-panel-list/abstract-task-list.component.mjs +3 -3
  47. package/esm2020/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.mjs +94 -0
  48. package/esm2020/lib/panel/task-panel-list/task-panel-list-pagination/abstract-task-list-pagination.component.mjs +3 -3
  49. package/esm2020/lib/panel/workflow-panel/abstract-workflow-panel.component.mjs +40 -6
  50. package/esm2020/lib/public/factories/public-factory-resolver.mjs +8 -3
  51. package/esm2020/lib/resources/engine-endpoint/petri-net-resource.service.mjs +12 -4
  52. package/esm2020/lib/resources/engine-endpoint/public/public-task-resource.service.mjs +1 -40
  53. package/esm2020/lib/resources/engine-endpoint/task-resource.service.mjs +4 -1
  54. package/esm2020/lib/resources/interface/fields.mjs +1 -1
  55. package/esm2020/lib/routing/redirect-service/redirect.service.mjs +2 -1
  56. package/esm2020/lib/side-menu/content-components/new-case/model/new-case-injection-data.mjs +1 -1
  57. package/esm2020/lib/side-menu/content-components/save-filter/abstract-save-filter.component.mjs +8 -7
  58. package/esm2020/lib/side-menu/content-components/user-assign/abstract-user-assign.component.mjs +1 -1
  59. package/esm2020/lib/side-menu/content-components/user-assign/model/user-list-injected-data.mjs +1 -1
  60. package/esm2020/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.mjs +3 -3
  61. package/esm2020/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.mjs +3 -3
  62. package/esm2020/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.mjs +3 -3
  63. package/esm2020/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.mjs +3 -3
  64. package/esm2020/lib/snack-bar/models/abstract-snack-bar.component.mjs +26 -0
  65. package/esm2020/lib/snack-bar/public-api.mjs +2 -2
  66. package/esm2020/lib/task/services/finish-policy.service.mjs +2 -2
  67. package/esm2020/lib/task/services/task-data.service.mjs +51 -13
  68. package/esm2020/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.mjs +3 -2
  69. package/esm2020/lib/task-content/model/field-type-resource.mjs +2 -1
  70. package/esm2020/lib/task-content/model/resource-interface.mjs +1 -1
  71. package/esm2020/lib/task-content/services/field-converter.service.mjs +28 -90
  72. package/esm2020/lib/task-content/services/task-content.service.mjs +5 -2
  73. package/esm2020/lib/view/abstract/view-with-headers.mjs +13 -4
  74. package/esm2020/lib/view/case-view/abstract-case-view.mjs +9 -12
  75. package/esm2020/lib/view/case-view/components/case-list/abstract-case-list.component.mjs +3 -3
  76. package/esm2020/lib/view/case-view/components/case-list-paginator/abstract-case-list-paginator.component.mjs +3 -3
  77. package/esm2020/lib/view/case-view/components/default-case-list/abstract-default-case-list.component.mjs +81 -0
  78. package/esm2020/lib/view/case-view/tabbed-case-view.mjs +7 -14
  79. package/esm2020/lib/view/task-view/abstract-single-task-view.component.mjs +3 -4
  80. package/esm2020/lib/view/task-view/abstract-task-view.mjs +6 -5
  81. package/esm2020/lib/view/task-view/tabbed-task-view.mjs +6 -5
  82. package/esm2020/lib/view/tree-case-view/tree-component/case-tree.service.mjs +6 -4
  83. package/esm2020/lib/view/workflow-view/abstract-workflow-view.component.mjs +6 -5
  84. package/fesm2015/netgrif-components-core.mjs +927 -577
  85. package/fesm2015/netgrif-components-core.mjs.map +1 -1
  86. package/fesm2020/netgrif-components-core.mjs +908 -577
  87. package/fesm2020/netgrif-components-core.mjs.map +1 -1
  88. package/lib/admin/public-api.d.ts +1 -1
  89. package/lib/admin/role-assignment-ldap-group/{abstract-ldap-group-role-assignment.d.ts → abstract-ldap-group-role-assignment.component.d.ts} +3 -3
  90. package/lib/authentication/services/methods/basic-authentication/basic-authentication.service.d.ts +2 -0
  91. package/lib/data-fields/button-field/abstract-button-field.component.d.ts +0 -5
  92. package/lib/data-fields/button-field/models/button-field.d.ts +1 -12
  93. package/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.d.ts +2 -3
  94. package/lib/data-fields/enumeration-field/models/enumeration-field.d.ts +1 -11
  95. package/lib/data-fields/i18n-field/abstract-i18n-field.component.d.ts +0 -1
  96. package/lib/data-fields/models/abstract-data-field.d.ts +5 -0
  97. package/lib/data-fields/multichoice-field/models/multichoice-field.d.ts +1 -8
  98. package/lib/data-fields/multichoice-field/multichoice-autocomplete-field/abstract-multichoice-autocomplete-field-component.component.d.ts +24 -0
  99. package/lib/data-fields/public-api.d.ts +3 -0
  100. package/lib/data-fields/text-field/models/text-area-field.d.ts +2 -3
  101. package/lib/data-fields/text-field/models/text-field.d.ts +1 -9
  102. package/lib/data-fields/user-list-field/abstract-user-list-field.component.d.ts +38 -0
  103. package/lib/data-fields/user-list-field/models/user-list-field.d.ts +10 -0
  104. package/lib/data-fields/user-list-field/models/user-list-value.d.ts +16 -0
  105. package/lib/dialog/components/alert-dialog/alert-dialog.component.d.ts +3 -3
  106. package/lib/dialog/components/confirm-dialog/confirm-dialog.component.d.ts +3 -3
  107. package/lib/dialog/components/prompt-dialog/prompt-dialog.component.d.ts +3 -3
  108. package/lib/dialog/models/{abstract-dialog.d.ts → abstract-dialog.component.d.ts} +3 -3
  109. package/lib/header/abstract-header-service.d.ts +6 -3
  110. package/lib/header/abstract-header.component.d.ts +2 -2
  111. package/lib/header/services/overflow.service.d.ts +1 -1
  112. package/lib/header/task-header/task-header.service.d.ts +3 -2
  113. package/lib/header/workflow-header/workflow-header.service.d.ts +3 -2
  114. package/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.d.ts +18 -0
  115. package/lib/navigation/public-api.d.ts +1 -0
  116. package/lib/navigation/service/uri.service.d.ts +2 -0
  117. package/lib/panel/abstract/panel-with-header-binding.d.ts +5 -2
  118. package/lib/panel/abstract/panel-with-immediate-data.d.ts +4 -2
  119. package/lib/panel/abstract-panel.component.d.ts +5 -1
  120. package/lib/panel/case-panel/abstract-case-panel.component.d.ts +3 -3
  121. package/lib/panel/configuration/config-params.d.ts +3 -0
  122. package/lib/panel/public-api.d.ts +1 -0
  123. package/lib/panel/task-panel/abstract-task-panel.component.d.ts +5 -2
  124. package/lib/panel/task-panel-list/abstract-task-list.component.d.ts +2 -2
  125. package/lib/panel/task-panel-list/default-task-panel-list/{abstract-default-task-list.d.ts → abstract-default-task-list.component.d.ts} +3 -3
  126. package/lib/panel/task-panel-list/task-panel-list-pagination/abstract-task-list-pagination.component.d.ts +2 -2
  127. package/lib/panel/workflow-panel/abstract-workflow-panel.component.d.ts +13 -2
  128. package/lib/public/factories/public-factory-resolver.d.ts +2 -1
  129. package/lib/resources/engine-endpoint/petri-net-resource.service.d.ts +1 -1
  130. package/lib/resources/engine-endpoint/public/public-task-resource.service.d.ts +0 -12
  131. package/lib/resources/interface/fields.d.ts +0 -5
  132. package/lib/side-menu/content-components/new-case/model/new-case-injection-data.d.ts +5 -0
  133. package/lib/side-menu/content-components/save-filter/abstract-save-filter.component.d.ts +2 -1
  134. package/lib/side-menu/content-components/user-assign/model/user-list-injected-data.d.ts +2 -1
  135. package/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.d.ts +2 -2
  136. package/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.d.ts +2 -2
  137. package/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.d.ts +2 -2
  138. package/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.d.ts +2 -2
  139. package/lib/snack-bar/models/{abstract-snack-bar.d.ts → abstract-snack-bar.component.d.ts} +3 -3
  140. package/lib/snack-bar/public-api.d.ts +1 -1
  141. package/lib/task/services/task-data.service.d.ts +12 -3
  142. package/lib/task-content/model/field-type-resource.d.ts +1 -0
  143. package/lib/task-content/model/resource-interface.d.ts +0 -3
  144. package/lib/task-content/services/field-converter.service.d.ts +3 -16
  145. package/lib/task-content/services/task-content.service.d.ts +1 -0
  146. package/lib/view/abstract/view-with-headers.d.ts +5 -1
  147. package/lib/view/case-view/abstract-case-view.d.ts +5 -3
  148. package/lib/view/case-view/components/case-list/abstract-case-list.component.d.ts +2 -2
  149. package/lib/view/case-view/components/case-list-paginator/abstract-case-list-paginator.component.d.ts +2 -2
  150. package/lib/view/case-view/components/default-case-list/{abstract-default-case-list.d.ts → abstract-default-case-list.component.d.ts} +3 -3
  151. package/lib/view/case-view/tabbed-case-view.d.ts +4 -4
  152. package/lib/view/task-view/abstract-single-task-view.component.d.ts +0 -1
  153. package/lib/view/task-view/abstract-task-view.d.ts +2 -1
  154. package/lib/view/task-view/tabbed-task-view.d.ts +2 -1
  155. package/lib/view/workflow-view/abstract-workflow-view.component.d.ts +2 -1
  156. package/package.json +1 -2
  157. package/schematics/_commons/view-class-info.js +8 -0
  158. package/schematics/_commons/view-class-info.js.map +1 -1
  159. package/src/assets/i18n/de.json +9 -0
  160. package/src/assets/i18n/en.json +9 -0
  161. package/src/assets/i18n/sk.json +9 -0
  162. package/src/schema/nae-schema.json +6 -0
  163. package/esm2020/lib/admin/role-assignment-ldap-group/abstract-ldap-group-role-assignment.mjs +0 -88
  164. package/esm2020/lib/dialog/models/abstract-dialog.mjs +0 -29
  165. package/esm2020/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.mjs +0 -94
  166. package/esm2020/lib/snack-bar/models/abstract-snack-bar.mjs +0 -26
  167. package/esm2020/lib/view/case-view/components/default-case-list/abstract-default-case-list.mjs +0 -81
@@ -1,13 +1,13 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { BooleanField } from '../../data-fields/boolean-field/models/boolean-field';
3
- import { TextField, TextFieldView } from '../../data-fields/text-field/models/text-field';
3
+ import { TextField } from '../../data-fields/text-field/models/text-field';
4
4
  import { NumberField } from '../../data-fields/number-field/models/number-field';
5
- import { EnumerationField, EnumerationFieldView } from '../../data-fields/enumeration-field/models/enumeration-field';
6
- import { MultichoiceField, MultichoiceFieldView } from '../../data-fields/multichoice-field/models/multichoice-field';
5
+ import { EnumerationField } from '../../data-fields/enumeration-field/models/enumeration-field';
6
+ import { MultichoiceField } from '../../data-fields/multichoice-field/models/multichoice-field';
7
7
  import { DateField } from '../../data-fields/date-field/models/date-field';
8
8
  import { DateTimeField } from '../../data-fields/date-time-field/models/date-time-field';
9
9
  import { UserField } from '../../data-fields/user-field/models/user-field';
10
- import { ButtonField, ButtonFieldView } from '../../data-fields/button-field/models/button-field';
10
+ import { ButtonField } from '../../data-fields/button-field/models/button-field';
11
11
  import { FileField } from '../../data-fields/file-field/models/file-field';
12
12
  import moment from 'moment';
13
13
  import { UserValue } from '../../data-fields/user-field/models/user-value';
@@ -18,45 +18,31 @@ import { TaskRefField } from '../../data-fields/task-ref-field/model/task-ref-fi
18
18
  import { DynamicEnumerationField } from '../../data-fields/enumeration-field/models/dynamic-enumeration-field';
19
19
  import { FilterField } from '../../data-fields/filter-field/models/filter-field';
20
20
  import { I18nField } from '../../data-fields/i18n-field/models/i18n-field';
21
+ import { UserListField } from '../../data-fields/user-list-field/models/user-list-field';
22
+ import { UserListValue } from '../../data-fields/user-list-field/models/user-list-value';
21
23
  import * as i0 from "@angular/core";
22
24
  export class FieldConverterService {
23
25
  constructor() {
26
+ this.textFieldNames = ['textarea', 'richtextarea', 'htmltextarea', 'editor', 'htmlEditor', 'area'];
24
27
  }
25
28
  toClass(item) {
26
29
  switch (item.type) {
27
30
  case FieldTypeResource.BOOLEAN:
28
31
  return new BooleanField(item.stringId, item.name, item.value, item.behavior, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId);
29
32
  case FieldTypeResource.TEXT:
30
- /*@deprecated in 4.3.0*/
31
- let type = TextFieldView.DEFAULT;
32
- if (item.subType !== undefined && item.subType === 'area') {
33
- type = TextFieldView.TEXTAREA;
33
+ if (this.textFieldNames.includes(item.component?.name)) {
34
+ return new TextAreaField(item.stringId, item.name, this.resolveTextValue(item, item.value), item.behavior, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId);
34
35
  }
35
- if (item.view !== undefined && item.view.value !== undefined && (item.view.value === 'editor' || item.view.value === TextFieldView.RICHTEXTAREA)) {
36
- type = TextFieldView.RICHTEXTAREA;
37
- return new TextAreaField(item.stringId, item.name, item.value, item.behavior, item.placeholder, item.description, item.layout, item.validations, type);
38
- }
39
- else if (item.view !== undefined && item.view.value !== undefined && item.view.value === 'area') {
40
- type = TextFieldView.TEXTAREA;
41
- }
42
- else if (item.view !== undefined && item.view.value !== undefined && item.view.value === 'htmlEditor') {
43
- type = TextFieldView.HTMLTEXTAREA;
44
- return new TextAreaField(item.stringId, item.name, item.value, item.behavior, item.placeholder, item.description, item.layout, item.validations, type);
45
- }
46
- if (item.component !== undefined && item.component.name !== undefined && (item.component.name === 'editor' ||
47
- item.component.name === TextFieldView.HTMLTEXTAREA || item.component.name === TextFieldView.RICHTEXTAREA)) {
48
- return new TextAreaField(item.stringId, item.name, this.resolveTextValue(item, item.value), item.behavior, item.placeholder, item.description, item.layout, item.validations, type, item.component, item.parentTaskId);
49
- }
50
- return new TextField(item.stringId, item.name, this.resolveTextValue(item, item.value), item.behavior, item.placeholder, item.description, item.layout, item.validations, type, item.component, item.parentTaskId);
36
+ return new TextField(item.stringId, item.name, this.resolveTextValue(item, item.value), item.behavior, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId);
51
37
  case FieldTypeResource.NUMBER:
52
38
  return new NumberField(item.stringId, item.name, item.value, item.behavior, item.validations, item.placeholder, item.description, item.layout, item.formatFilter, this.resolveNumberComponent(item), item.parentTaskId);
53
39
  case FieldTypeResource.ENUMERATION:
54
40
  case FieldTypeResource.ENUMERATION_MAP:
55
41
  return this.resolveEnumField(item);
56
42
  case FieldTypeResource.MULTICHOICE:
57
- return new MultichoiceField(item.stringId, item.name, item.value, this.resolveMultichoiceChoices(item), item.behavior, item.placeholder, item.description, item.layout, this.resolveMultichoiceViewType(item), item.type, item.validations, item.component, item.parentTaskId);
43
+ return new MultichoiceField(item.stringId, item.name, item.value, this.resolveMultichoiceChoices(item), item.behavior, item.placeholder, item.description, item.layout, item.type, item.validations, item.component, item.parentTaskId);
58
44
  case FieldTypeResource.MULTICHOICE_MAP:
59
- return new MultichoiceField(item.stringId, item.name, item.value, this.resolveMultichoiceOptions(item), item.behavior, item.placeholder, item.description, item.layout, this.resolveMultichoiceViewType(item), item.type, item.validations, item.component, item.parentTaskId);
45
+ return new MultichoiceField(item.stringId, item.name, item.value, this.resolveMultichoiceOptions(item), item.behavior, item.placeholder, item.description, item.layout, item.type, item.validations, item.component, item.parentTaskId);
60
46
  case FieldTypeResource.DATE:
61
47
  let date;
62
48
  if (item.value) {
@@ -75,10 +61,14 @@ export class FieldConverterService {
75
61
  user = new UserValue(item.value.id, item.value.name, item.value.surname, item.value.email);
76
62
  }
77
63
  return new UserField(item.stringId, item.name, item.behavior, user, item.roles, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId);
64
+ case FieldTypeResource.USER_LIST:
65
+ let userListValue = new UserListValue([]);
66
+ if (item.value) {
67
+ item.value.userValues.forEach(u => userListValue.addUserValue(new UserValue(u.id, u.name, u.surname, u.email)));
68
+ }
69
+ return new UserListField(item.stringId, item.name, item.behavior, userListValue, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId);
78
70
  case FieldTypeResource.BUTTON:
79
- /*@deprecated in 4.3.0*/
80
- const typeBtn = this.resolveButtonView(item);
81
- return new ButtonField(item.stringId, item.name, item.behavior, item.value, item.placeholder, item.description, item.layout, typeBtn, item.validations, item.component, item.parentTaskId);
71
+ return new ButtonField(item.stringId, item.name, item.behavior, item.value, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId);
82
72
  case FieldTypeResource.FILE:
83
73
  return new FileField(item.stringId, item.name, item.behavior, item.value ? item.value : {}, item.placeholder, item.description, item.layout, null, null, item.validations, item.component, item.parentTaskId);
84
74
  case FieldTypeResource.FILE_LIST:
@@ -119,6 +109,9 @@ export class FieldConverterService {
119
109
  else if (item instanceof UserField) {
120
110
  return FieldTypeResource.USER;
121
111
  }
112
+ else if (item instanceof UserListField) {
113
+ return FieldTypeResource.USER_LIST;
114
+ }
122
115
  else if (item instanceof TaskRefField) {
123
116
  return FieldTypeResource.TASK_REF;
124
117
  }
@@ -132,30 +125,6 @@ export class FieldConverterService {
132
125
  return FieldTypeResource.I18N;
133
126
  }
134
127
  }
135
- /*@deprecated in 4.3.0*/
136
- resolveButtonView(item) {
137
- if (item.view !== undefined && item.view.value !== undefined) {
138
- switch (item.view.value) {
139
- case ButtonFieldView.STROKED:
140
- return ButtonFieldView.STROKED;
141
- case ButtonFieldView.RAISED:
142
- return ButtonFieldView.RAISED;
143
- case ButtonFieldView.FAB:
144
- return ButtonFieldView.FAB;
145
- case ButtonFieldView.FLAT:
146
- return ButtonFieldView.FLAT;
147
- case ButtonFieldView.ICON:
148
- return ButtonFieldView.ICON;
149
- case ButtonFieldView.MINIFAB:
150
- return ButtonFieldView.MINIFAB;
151
- default:
152
- return ButtonFieldView.STANDARD;
153
- }
154
- }
155
- else if (item instanceof ButtonField) {
156
- return ButtonFieldView.STANDARD;
157
- }
158
- }
159
128
  formatValueForBackend(field, value) {
160
129
  if (this.resolveType(field) === FieldTypeResource.TEXT && value === null) {
161
130
  return null;
@@ -174,6 +143,9 @@ export class FieldConverterService {
174
143
  if (this.resolveType(field) === FieldTypeResource.USER) {
175
144
  return value.id;
176
145
  }
146
+ if (this.resolveType(field) === FieldTypeResource.USER_LIST) {
147
+ return value.userValues.map(u => u.id);
148
+ }
177
149
  if (this.resolveType(field) === FieldTypeResource.DATE_TIME) {
178
150
  if (moment.isMoment(value)) {
179
151
  return value.format('DD.MM.YYYY HH:mm:ss');
@@ -200,32 +172,12 @@ export class FieldConverterService {
200
172
  ? this.resolveEnumChoices(enumField)
201
173
  : this.resolveEnumOptions(enumField);
202
174
  if (enumField.component && enumField.component.name === 'autocomplete_dynamic') {
203
- return new DynamicEnumerationField(enumField.stringId, enumField.name, enumField.value, options, enumField.behavior, enumField.placeholder, enumField.description, enumField.layout, this.resolveEnumViewType(enumField), enumField.type, enumField.validations, enumField.component, enumField.parentTaskId);
175
+ return new DynamicEnumerationField(enumField.stringId, enumField.name, enumField.value, options, enumField.behavior, enumField.placeholder, enumField.description, enumField.layout, enumField.type, enumField.validations, enumField.component, enumField.parentTaskId);
204
176
  }
205
177
  else {
206
- return new EnumerationField(enumField.stringId, enumField.name, enumField.value, options, enumField.behavior, enumField.placeholder, enumField.description, enumField.layout, this.resolveEnumViewType(enumField), enumField.type, enumField.validations, enumField.component, enumField.parentTaskId);
178
+ return new EnumerationField(enumField.stringId, enumField.name, enumField.value, options, enumField.behavior, enumField.placeholder, enumField.description, enumField.layout, enumField.type, enumField.validations, enumField.component, enumField.parentTaskId);
207
179
  }
208
180
  }
209
- /**
210
- * @param enumField enumeration field resource object who's view type we want to resolve
211
- * @returns the view type defined in the field object, or default if none, or invalid type is defined
212
- * @deprecated in 4.3.0
213
- */
214
- resolveEnumViewType(enumField) {
215
- let typeEnum = EnumerationFieldView.DEFAULT;
216
- if (enumField.view && enumField.view.value !== undefined) {
217
- if (enumField.view.value === 'list') {
218
- typeEnum = EnumerationFieldView.LIST;
219
- }
220
- else if (enumField.view.value === 'autocomplete') {
221
- typeEnum = EnumerationFieldView.AUTOCOMPLETE;
222
- }
223
- else if (enumField.view.value === 'stepper') {
224
- typeEnum = EnumerationFieldView.STEPPER;
225
- }
226
- }
227
- return typeEnum;
228
- }
229
181
  /**
230
182
  * This function is used to parse enumeration options from the `choices` attribute
231
183
  * @param enumField enumeration field resource object who's choices we want to resolve
@@ -253,20 +205,6 @@ export class FieldConverterService {
253
205
  resolveEnumOptions(enumField) {
254
206
  return Object.entries(enumField.options).map(entry => ({ key: entry[0], value: entry[1] }));
255
207
  }
256
- /**
257
- * @param multiField multichoice field resource object who's view type we want to resolve
258
- * @returns the view type defined in the field object, or default if none, or invalid type is defined
259
- * @deprecated in 4.3.0
260
- */
261
- resolveMultichoiceViewType(multiField) {
262
- let typeMulti = MultichoiceFieldView.DEFAULT;
263
- if (multiField.view && multiField.view.value !== undefined) {
264
- if (multiField.view.value === 'list') {
265
- typeMulti = MultichoiceFieldView.LIST;
266
- }
267
- }
268
- return typeMulti;
269
- }
270
208
  /**
271
209
  * This function is used to parse multichoice options from the `choices` attribute
272
210
  * @param multiField multichoice field resource object who's options we want to resolve
@@ -345,4 +283,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
345
283
  providedIn: 'root'
346
284
  }]
347
285
  }], ctorParameters: function () { return []; } });
348
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtY29udmVydGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3Rhc2stY29udGVudC9zZXJ2aWNlcy9maWVsZC1jb252ZXJ0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3pDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUNsRixPQUFPLEVBQUMsU0FBUyxFQUFFLGFBQWEsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUMvRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQXlCLG9CQUFvQixFQUFDLE1BQU0sOERBQThELENBQUM7QUFDM0ksT0FBTyxFQUFDLGdCQUFnQixFQUF5QixvQkFBb0IsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBQzNJLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDdkYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxXQUFXLEVBQUUsZUFBZSxFQUFDLE1BQU0sb0RBQW9ELENBQUM7QUFDaEcsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pFLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQ3ZGLE9B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QUssU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDN0csT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOzttSEFoVlEscUJBQXFCO3VIQUFyQixxQkFBcUIsY0FGbEIsTUFBTTs0RkFFVCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0YUZpZWxkUmVzb3VyY2V9IGZyb20gJy4uL21vZGVsL3Jlc291cmNlLWludGVyZmFjZSc7XG5pbXBvcnQge0RhdGFGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2Fic3RyYWN0LWRhdGEtZmllbGQnO1xuaW1wb3J0IHtCb29sZWFuRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2Jvb2xlYW4tZmllbGQvbW9kZWxzL2Jvb2xlYW4tZmllbGQnO1xuaW1wb3J0IHtUZXh0RmllbGQsIFRleHRGaWVsZFZpZXd9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3RleHQtZmllbGQvbW9kZWxzL3RleHQtZmllbGQnO1xuaW1wb3J0IHtOdW1iZXJGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbnVtYmVyLWZpZWxkL21vZGVscy9udW1iZXItZmllbGQnO1xuaW1wb3J0IHtFbnVtZXJhdGlvbkZpZWxkLCBFbnVtZXJhdGlvbkZpZWxkVmFsdWUsIEVudW1lcmF0aW9uRmllbGRWaWV3fSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9lbnVtZXJhdGlvbi1maWVsZC9tb2RlbHMvZW51bWVyYXRpb24tZmllbGQnO1xuaW1wb3J0IHtNdWx0aWNob2ljZUZpZWxkLCBNdWx0aWNob2ljZUZpZWxkVmFsdWUsIE11bHRpY2hvaWNlRmllbGRWaWV3fSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9tdWx0aWNob2ljZS1maWVsZC9tb2RlbHMvbXVsdGljaG9pY2UtZmllbGQnO1xuaW1wb3J0IHtEYXRlRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2RhdGUtZmllbGQvbW9kZWxzL2RhdGUtZmllbGQnO1xuaW1wb3J0IHtEYXRlVGltZUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9kYXRlLXRpbWUtZmllbGQvbW9kZWxzL2RhdGUtdGltZS1maWVsZCc7XG5pbXBvcnQge1VzZXJGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdXNlci1maWVsZC9tb2RlbHMvdXNlci1maWVsZCc7XG5pbXBvcnQge0J1dHRvbkZpZWxkLCBCdXR0b25GaWVsZFZpZXd9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2J1dHRvbi1maWVsZC9tb2RlbHMvYnV0dG9uLWZpZWxkJztcbmltcG9ydCB7RmlsZUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9maWxlLWZpZWxkL21vZGVscy9maWxlLWZpZWxkJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7VXNlclZhbHVlfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy91c2VyLWZpZWxkL21vZGVscy91c2VyLXZhbHVlJztcbmltcG9ydCB7RmllbGRUeXBlUmVzb3VyY2V9IGZyb20gJy4uL21vZGVsL2ZpZWxkLXR5cGUtcmVzb3VyY2UnO1xuaW1wb3J0IHtGaWxlTGlzdEZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9maWxlLWxpc3QtZmllbGQvbW9kZWxzL2ZpbGUtbGlzdC1maWVsZCc7XG5pbXBvcnQge1RleHRBcmVhRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3RleHQtZmllbGQvbW9kZWxzL3RleHQtYXJlYS1maWVsZCc7XG5pbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2NvbXBvbmVudCc7XG5pbXBvcnQge1Rhc2tSZWZGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdGFzay1yZWYtZmllbGQvbW9kZWwvdGFzay1yZWYtZmllbGQnO1xuaW1wb3J0IHtEeW5hbWljRW51bWVyYXRpb25GaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZW51bWVyYXRpb24tZmllbGQvbW9kZWxzL2R5bmFtaWMtZW51bWVyYXRpb24tZmllbGQnO1xuaW1wb3J0IHtGaWx0ZXJGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZmlsdGVyLWZpZWxkL21vZGVscy9maWx0ZXItZmllbGQnO1xuaW1wb3J0IHtJMThuRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2kxOG4tZmllbGQvbW9kZWxzL2kxOG4tZmllbGQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQ29udmVydGVyU2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9DbGFzcyhpdGVtOiBEYXRhRmllbGRSZXNvdXJjZSk6IERhdGFGaWVsZDxhbnk+IHtcbiAgICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuQk9PTEVBTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW5GaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0udmFsdWUgYXMgYm9vbGVhbiwgaXRlbS5iZWhhdmlvcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLlRFWFQ6XG4gICAgICAgICAgICAgICAgLypAZGVwcmVjYXRlZCBpbiA0LjMuMCovXG4gICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBUZXh0RmllbGRWaWV3LkRFRkFVTFQ7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc3ViVHlwZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0uc3ViVHlwZSA9PT0gJ2FyZWEnKSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUZXh0RmllbGRWaWV3LlRFWFRBUkVBO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS52aWV3ICE9PSB1bmRlZmluZWQgJiYgaXRlbS52aWV3LnZhbHVlICE9PSB1bmRlZmluZWQgJiYgKGl0ZW0udmlldy52YWx1ZSA9PT0gJ2VkaXRvcicgfHwgaXRlbS52aWV3LnZhbHVlID09PSBUZXh0RmllbGRWaWV3LlJJQ0hURVhUQVJFQSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFRleHRGaWVsZFZpZXcuUklDSFRFWFRBUkVBO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRleHRBcmVhRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlIGFzIHN0cmluZywgaXRlbS5iZWhhdmlvciwgaXRlbS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCB0eXBlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udmlldyAhPT0gdW5kZWZpbmVkICYmIGl0ZW0udmlldy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0udmlldy52YWx1ZSA9PT0gJ2FyZWEnKSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBUZXh0RmllbGRWaWV3LlRFWFRBUkVBO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS52aWV3ICE9PSB1bmRlZmluZWQgJiYgaXRlbS52aWV3LnZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXRlbS52aWV3LnZhbHVlID09PSAnaHRtbEVkaXRvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFRleHRGaWVsZFZpZXcuSFRNTFRFWFRBUkVBO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRleHRBcmVhRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlIGFzIHN0cmluZywgaXRlbS5iZWhhdmlvciwgaXRlbS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCB0eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29tcG9uZW50ICE9PSB1bmRlZmluZWQgJiYgaXRlbS5jb21wb25lbnQubmFtZSAhPT0gdW5kZWZpbmVkICYmIChpdGVtLmNvbXBvbmVudC5uYW1lID09PSAnZWRpdG9yJyB8fFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbXBvbmVudC5uYW1lID09PSBUZXh0RmllbGRWaWV3LkhUTUxURVhUQVJFQSB8fCBpdGVtLmNvbXBvbmVudC5uYW1lID09PSBUZXh0RmllbGRWaWV3LlJJQ0hURVhUQVJFQSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0QXJlYUZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgdGhpcy5yZXNvbHZlVGV4dFZhbHVlKGl0ZW0sIGl0ZW0udmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5iZWhhdmlvciwgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIHR5cGUsIGl0ZW0uY29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRleHRGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIHRoaXMucmVzb2x2ZVRleHRWYWx1ZShpdGVtLCBpdGVtLnZhbHVlKSwgaXRlbS5iZWhhdmlvciwgaXRlbS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIHR5cGUsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLk5VTUJFUjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE51bWJlckZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS52YWx1ZSBhcyBudW1iZXIsIGl0ZW0uYmVoYXZpb3IsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLmZvcm1hdEZpbHRlciwgdGhpcy5yZXNvbHZlTnVtYmVyQ29tcG9uZW50KGl0ZW0pLCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkVOVU1FUkFUSU9OOlxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5FTlVNRVJBVElPTl9NQVA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUVudW1GaWVsZChpdGVtKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuTVVMVElDSE9JQ0U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNdWx0aWNob2ljZUZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS52YWx1ZSwgdGhpcy5yZXNvbHZlTXVsdGljaG9pY2VDaG9pY2VzKGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmJlaGF2aW9yLCBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgdGhpcy5yZXNvbHZlTXVsdGljaG9pY2VWaWV3VHlwZShpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS50eXBlLCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5NVUxUSUNIT0lDRV9NQVA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNdWx0aWNob2ljZUZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS52YWx1ZSwgdGhpcy5yZXNvbHZlTXVsdGljaG9pY2VPcHRpb25zKGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmJlaGF2aW9yLCBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgdGhpcy5yZXNvbHZlTXVsdGljaG9pY2VWaWV3VHlwZShpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS50eXBlLCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5EQVRFOlxuICAgICAgICAgICAgICAgIGxldCBkYXRlO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBtb21lbnQobmV3IERhdGUoaXRlbS52YWx1ZVswXSwgaXRlbS52YWx1ZVsxXSAtIDEsIGl0ZW0udmFsdWVbMl0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBkYXRlLCBpdGVtLmJlaGF2aW9yLCBpdGVtLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuREFURV9USU1FOlxuICAgICAgICAgICAgICAgIGxldCBkYXRlVGltZTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlVGltZSA9IG1vbWVudChuZXcgRGF0ZShpdGVtLnZhbHVlWzBdLCBpdGVtLnZhbHVlWzFdIC0gMSwgaXRlbS52YWx1ZVsyXSwgaXRlbS52YWx1ZVszXSwgaXRlbS52YWx1ZVs0XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGVUaW1lRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBkYXRlVGltZSwgaXRlbS5iZWhhdmlvcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLlVTRVI6XG4gICAgICAgICAgICAgICAgbGV0IHVzZXI7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdXNlciA9IG5ldyBVc2VyVmFsdWUoaXRlbS52YWx1ZS5pZCwgaXRlbS52YWx1ZS5uYW1lLCBpdGVtLnZhbHVlLnN1cm5hbWUsIGl0ZW0udmFsdWUuZW1haWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVzZXJGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0uYmVoYXZpb3IsIHVzZXIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucm9sZXMsIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5CVVRUT046XG4gICAgICAgICAgICAgICAgLypAZGVwcmVjYXRlZCBpbiA0LjMuMCovXG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZUJ0biA9IHRoaXMucmVzb2x2ZUJ1dHRvblZpZXcoaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCdXR0b25GaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0uYmVoYXZpb3IsIGl0ZW0udmFsdWUgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgdHlwZUJ0biwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuRklMRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0uYmVoYXZpb3IsIGl0ZW0udmFsdWUgPyBpdGVtLnZhbHVlIDoge30sXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBudWxsLCBudWxsLCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5GSUxFX0xJU1Q6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlTGlzdEZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS5iZWhhdmlvciwgaXRlbS52YWx1ZSA/IGl0ZW0udmFsdWUgOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIG51bGwsIG51bGwsIGl0ZW0uY29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLlRBU0tfUkVGOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGFza1JlZkZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS52YWx1ZSA/IGl0ZW0udmFsdWUgOiBbXSwgaXRlbS5iZWhhdmlvcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkZJTFRFUjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbHRlckZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS52YWx1ZSA/PyAnJywgaXRlbS5maWx0ZXJNZXRhZGF0YSwgaXRlbS5hbGxvd2VkTmV0cyxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5iZWhhdmlvciwgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkkxOE46XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJMThuRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlID8/IHtkZWZhdWx0VmFsdWU6ICcnfSwgaXRlbS5iZWhhdmlvciwgaXRlbS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlVHlwZShpdGVtOiBEYXRhRmllbGQ8YW55Pik6IEZpZWxkVHlwZVJlc291cmNlIHtcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCb29sZWFuRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5CT09MRUFOO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCdXR0b25GaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLkJVVFRPTjtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgVGV4dEZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuVEVYVDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgTnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5OVU1CRVI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIERhdGVGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLkRBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIERhdGVUaW1lRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5EQVRFX1RJTUU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEZpbGVGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLkZJTEU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEZpbGVMaXN0RmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5GSUxFX0xJU1Q7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFVzZXJGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLlVTRVI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFRhc2tSZWZGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLlRBU0tfUkVGO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBFbnVtZXJhdGlvbkZpZWxkIHx8IGl0ZW0gaW5zdGFuY2VvZiBNdWx0aWNob2ljZUZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5maWVsZFR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEZpbHRlckZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuRklMVEVSO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBJMThuRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5JMThOO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypAZGVwcmVjYXRlZCBpbiA0LjMuMCovXG4gICAgcHVibGljIHJlc29sdmVCdXR0b25WaWV3KGl0ZW06IERhdGFGaWVsZFJlc291cmNlKTogQnV0dG9uRmllbGRWaWV3IHtcbiAgICAgICAgaWYgKGl0ZW0udmlldyAhPT0gdW5kZWZpbmVkICYmIGl0ZW0udmlldy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0udmlldy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQnV0dG9uRmllbGRWaWV3LlNUUk9LRUQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCdXR0b25GaWVsZFZpZXcuU1RST0tFRDtcbiAgICAgICAgICAgICAgICBjYXNlIEJ1dHRvbkZpZWxkVmlldy5SQUlTRUQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCdXR0b25GaWVsZFZpZXcuUkFJU0VEO1xuICAgICAgICAgICAgICAgIGNhc2UgQnV0dG9uRmllbGRWaWV3LkZBQjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJ1dHRvbkZpZWxkVmlldy5GQUI7XG4gICAgICAgICAgICAgICAgY2FzZSBCdXR0b25GaWVsZFZpZXcuRkxBVDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJ1dHRvbkZpZWxkVmlldy5GTEFUO1xuICAgICAgICAgICAgICAgIGNhc2UgQnV0dG9uRmllbGRWaWV3LklDT046XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCdXR0b25GaWVsZFZpZXcuSUNPTjtcbiAgICAgICAgICAgICAgICBjYXNlIEJ1dHRvbkZpZWxkVmlldy5NSU5JRkFCOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQnV0dG9uRmllbGRWaWV3Lk1JTklGQUI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJ1dHRvbkZpZWxkVmlldy5TVEFOREFSRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgQnV0dG9uRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBCdXR0b25GaWVsZFZpZXcuU1RBTkRBUkQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZm9ybWF0VmFsdWVGb3JCYWNrZW5kKGZpZWxkOiBEYXRhRmllbGQ8YW55PiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVEVYVCAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5URVhUICYmIGZpZWxkLmNvbXBvbmVudCAmJiBmaWVsZC5jb21wb25lbnQubmFtZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICAgICAgcmV0dXJuIGJ0b2EodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5EQVRFKSB7XG4gICAgICAgICAgICBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLlVTRVIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLkRBVEVfVElNRSkge1xuICAgICAgICAgICAgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuZm9ybWF0KCdERC5NTS5ZWVlZIEhIOm1tOnNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlTnVtYmVyQ29tcG9uZW50KG51bWJlckZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSk6IENvbXBvbmVudCB7XG4gICAgICAgIGxldCBudW1iZXJDb21wb25lbnQgPSB7bmFtZTogJ2RlZmF1bHQnLCBwcm9wZXJ0aWVzOiB1bmRlZmluZWR9O1xuICAgICAgICBpZiAobnVtYmVyRmllbGQuY29tcG9uZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG51bWJlckNvbXBvbmVudCA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBudW1iZXJGaWVsZC5jb21wb25lbnQubmFtZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBudW1iZXJGaWVsZC5jb21wb25lbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyQ29tcG9uZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmVzIGBlbnVtZXJhdGlvbmAgYW5kIGBldW51bWVyYXRpb25fbWFwYCBmaWVsZHMgaW50byB0aGVpciBhcHByb3ByaWF0ZSBjbGFzcyBpbnN0YW5jZXNcbiAgICAgKiBAcGFyYW0gZW51bUZpZWxkIGVudW1lcmF0aW9uIGZpZWxkIHJlc291cmNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVFbnVtRmllbGQoZW51bUZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSk6IEVudW1lcmF0aW9uRmllbGQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZW51bUZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZVJlc291cmNlLkVOVU1FUkFUSU9OXG4gICAgICAgICAgICA/IHRoaXMucmVzb2x2ZUVudW1DaG9pY2VzKGVudW1GaWVsZClcbiAgICAgICAgICAgIDogdGhpcy5yZXNvbHZlRW51bU9wdGlvbnMoZW51bUZpZWxkKTtcbiAgICAgICAgaWYgKGVudW1GaWVsZC5jb21wb25lbnQgJiYgZW51bUZpZWxkLmNvbXBvbmVudC5uYW1lID09PSAnYXV0b2NvbXBsZXRlX2R5bmFtaWMnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IER5bmFtaWNFbnVtZXJhdGlvbkZpZWxkKGVudW1GaWVsZC5zdHJpbmdJZCwgZW51bUZpZWxkLm5hbWUsIGVudW1GaWVsZC52YWx1ZSwgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBlbnVtRmllbGQuYmVoYXZpb3IsIGVudW1GaWVsZC5wbGFjZWhvbGRlciwgZW51bUZpZWxkLmRlc2NyaXB0aW9uLCBlbnVtRmllbGQubGF5b3V0LCB0aGlzLnJlc29sdmVFbnVtVmlld1R5cGUoZW51bUZpZWxkKSxcbiAgICAgICAgICAgICAgICBlbnVtRmllbGQudHlwZSwgZW51bUZpZWxkLnZhbGlkYXRpb25zLCBlbnVtRmllbGQuY29tcG9uZW50LCBlbnVtRmllbGQucGFyZW50VGFza0lkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRW51bWVyYXRpb25GaWVsZChlbnVtRmllbGQuc3RyaW5nSWQsIGVudW1GaWVsZC5uYW1lLCBlbnVtRmllbGQudmFsdWUsIG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgZW51bUZpZWxkLmJlaGF2aW9yLCBlbnVtRmllbGQucGxhY2Vob2xkZXIsIGVudW1GaWVsZC5kZXNjcmlwdGlvbiwgZW51bUZpZWxkLmxheW91dCwgdGhpcy5yZXNvbHZlRW51bVZpZXdUeXBlKGVudW1GaWVsZCksXG4gICAgICAgICAgICAgICAgZW51bUZpZWxkLnR5cGUsIGVudW1GaWVsZC52YWxpZGF0aW9ucywgZW51bUZpZWxkLmNvbXBvbmVudCwgZW51bUZpZWxkLnBhcmVudFRhc2tJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZW51bUZpZWxkIGVudW1lcmF0aW9uIGZpZWxkIHJlc291cmNlIG9iamVjdCB3aG8ncyB2aWV3IHR5cGUgd2Ugd2FudCB0byByZXNvbHZlXG4gICAgICogQHJldHVybnMgdGhlIHZpZXcgdHlwZSBkZWZpbmVkIGluIHRoZSBmaWVsZCBvYmplY3QsIG9yIGRlZmF1bHQgaWYgbm9uZSwgb3IgaW52YWxpZCB0eXBlIGlzIGRlZmluZWRcbiAgICAgKiBAZGVwcmVjYXRlZCBpbiA0LjMuMFxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZXNvbHZlRW51bVZpZXdUeXBlKGVudW1GaWVsZDogRGF0YUZpZWxkUmVzb3VyY2UpOiBFbnVtZXJhdGlvbkZpZWxkVmlldyB7XG4gICAgICAgIGxldCB0eXBlRW51bSA9IEVudW1lcmF0aW9uRmllbGRWaWV3LkRFRkFVTFQ7XG4gICAgICAgIGlmIChlbnVtRmllbGQudmlldyAmJiBlbnVtRmllbGQudmlldy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZW51bUZpZWxkLnZpZXcudmFsdWUgPT09ICdsaXN0Jykge1xuICAgICAgICAgICAgICAgIHR5cGVFbnVtID0gRW51bWVyYXRpb25GaWVsZFZpZXcuTElTVDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW51bUZpZWxkLnZpZXcudmFsdWUgPT09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgICAgdHlwZUVudW0gPSBFbnVtZXJhdGlvbkZpZWxkVmlldy5BVVRPQ09NUExFVEU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVudW1GaWVsZC52aWV3LnZhbHVlID09PSAnc3RlcHBlcicpIHtcbiAgICAgICAgICAgICAgICB0eXBlRW51bSA9IEVudW1lcmF0aW9uRmllbGRWaWV3LlNURVBQRVI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVFbnVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBlbnVtZXJhdGlvbiBvcHRpb25zIGZyb20gdGhlIGBjaG9pY2VzYCBhdHRyaWJ1dGVcbiAgICAgKiBAcGFyYW0gZW51bUZpZWxkIGVudW1lcmF0aW9uIGZpZWxkIHJlc291cmNlIG9iamVjdCB3aG8ncyBjaG9pY2VzIHdlIHdhbnQgdG8gcmVzb2x2ZVxuICAgICAqIEByZXR1cm5zIHRoZSBvcHRpb25zIGZvciB0aGUgZW51bWVyYXRpb24gZmllbGRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUVudW1DaG9pY2VzKGVudW1GaWVsZDogRGF0YUZpZWxkUmVzb3VyY2UpOiBBcnJheTxFbnVtZXJhdGlvbkZpZWxkVmFsdWU+IHtcbiAgICAgICAgY29uc3QgZW51bUNob2ljZXMgPSBbXTtcbiAgICAgICAgaWYgKGVudW1GaWVsZC5jaG9pY2VzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIGVudW1GaWVsZC5jaG9pY2VzLmZvckVhY2goaXQgPT4ge1xuICAgICAgICAgICAgICAgIGVudW1DaG9pY2VzLnB1c2goe2tleTogaXQsIHZhbHVlOiBpdH0gYXMgRW51bWVyYXRpb25GaWVsZFZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZW51bUZpZWxkLmNob2ljZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBlbnVtQ2hvaWNlcy5wdXNoKHtrZXksIHZhbHVlOiBlbnVtRmllbGQuY2hvaWNlc1trZXldfSBhcyBFbnVtZXJhdGlvbkZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1DaG9pY2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBlbnVtZXJhdGlvbiBvcHRpb25zIGZyb20gdGhlIGBvcHRpb25zYCBhdHRyaWJ1dGVcbiAgICAgKiBAcGFyYW0gZW51bUZpZWxkIGVudW1lcmF0aW9uIGZpZWxkIHJlc291cmNlIG9iamVjdCB3aG8ncyBvcHRpb25zIHdlIHdhbnQgdG8gcmVzb2x2ZVxuICAgICAqIEByZXR1cm5zIHRoZSBvcHRpb25zIGZvciB0aGUgZW51bWVyYXRpb24gZmllbGRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUVudW1PcHRpb25zKGVudW1GaWVsZDogRGF0YUZpZWxkUmVzb3VyY2UpOiBBcnJheTxFbnVtZXJhdGlvbkZpZWxkVmFsdWU+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGVudW1GaWVsZC5vcHRpb25zKS5tYXAoZW50cnkgPT4gKHtrZXk6IGVudHJ5WzBdLCB2YWx1ZTogZW50cnlbMV19KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG11bHRpRmllbGQgbXVsdGljaG9pY2UgZmllbGQgcmVzb3VyY2Ugb2JqZWN0IHdobydzIHZpZXcgdHlwZSB3ZSB3YW50IHRvIHJlc29sdmVcbiAgICAgKiBAcmV0dXJucyB0aGUgdmlldyB0eXBlIGRlZmluZWQgaW4gdGhlIGZpZWxkIG9iamVjdCwgb3IgZGVmYXVsdCBpZiBub25lLCBvciBpbnZhbGlkIHR5cGUgaXMgZGVmaW5lZFxuICAgICAqIEBkZXByZWNhdGVkIGluIDQuMy4wXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVNdWx0aWNob2ljZVZpZXdUeXBlKG11bHRpRmllbGQ6IERhdGFGaWVsZFJlc291cmNlKTogTXVsdGljaG9pY2VGaWVsZFZpZXcge1xuICAgICAgICBsZXQgdHlwZU11bHRpID0gTXVsdGljaG9pY2VGaWVsZFZpZXcuREVGQVVMVDtcbiAgICAgICAgaWYgKG11bHRpRmllbGQudmlldyAmJiBtdWx0aUZpZWxkLnZpZXcudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKG11bHRpRmllbGQudmlldy52YWx1ZSA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICAgICAgdHlwZU11bHRpID0gTXVsdGljaG9pY2VGaWVsZFZpZXcuTElTVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHlwZU11bHRpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBtdWx0aWNob2ljZSBvcHRpb25zIGZyb20gdGhlIGBjaG9pY2VzYCBhdHRyaWJ1dGVcbiAgICAgKiBAcGFyYW0gbXVsdGlGaWVsZCBtdWx0aWNob2ljZSBmaWVsZCByZXNvdXJjZSBvYmplY3Qgd2hvJ3Mgb3B0aW9ucyB3ZSB3YW50IHRvIHJlc29sdmVcbiAgICAgKiBAcmV0dXJucyB0aGUgb3B0aW9ucyBmb3IgdGhlIG11bHRpY2hvaWNlIGZpZWxkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVNdWx0aWNob2ljZUNob2ljZXMobXVsdGlGaWVsZDogRGF0YUZpZWxkUmVzb3VyY2UpOiBBcnJheTxNdWx0aWNob2ljZUZpZWxkVmFsdWU+IHtcbiAgICAgICAgY29uc3QgY2hvaWNlc011bHRpOiBBcnJheTxNdWx0aWNob2ljZUZpZWxkVmFsdWU+ID0gW107XG4gICAgICAgIGlmIChtdWx0aUZpZWxkLmNob2ljZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgbXVsdGlGaWVsZC5jaG9pY2VzLmZvckVhY2goaXQgPT4ge1xuICAgICAgICAgICAgICAgIGNob2ljZXNNdWx0aS5wdXNoKHtrZXk6IGl0LCB2YWx1ZTogaXR9IGFzIE11bHRpY2hvaWNlRmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG11bHRpRmllbGQuY2hvaWNlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNob2ljZXNNdWx0aS5wdXNoKHtrZXksIHZhbHVlOiBtdWx0aUZpZWxkLmNob2ljZXNba2V5XX0gYXMgTXVsdGljaG9pY2VGaWVsZFZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaG9pY2VzTXVsdGk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIGVudW1lcmF0aW9uIG9wdGlvbnMgZnJvbSB0aGUgYG9wdGlvbnNgIGF0dHJpYnV0ZVxuICAgICAqIEBwYXJhbSBtdWx0aUZpZWxkIG11bHRpY2hvaWNlIGZpZWxkIHJlc291cmNlIG9iamVjdCB3aG8ncyBvcHRpb25zIHdlIHdhbnQgdG8gcmVzb2x2ZVxuICAgICAqIEByZXR1cm5zIHRoZSBvcHRpb25zIGZvciB0aGUgbXVsdGljaG9pY2UgZmllbGRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZU11bHRpY2hvaWNlT3B0aW9ucyhtdWx0aUZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSk6IEFycmF5PE11bHRpY2hvaWNlRmllbGRWYWx1ZT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMobXVsdGlGaWVsZC5vcHRpb25zKS5tYXAoZW50cnkgPT4gKHtrZXk6IGVudHJ5WzBdLCB2YWx1ZTogZW50cnlbMV19KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvcm1hdFZhbHVlRnJvbUJhY2tlbmQoZmllbGQ6IERhdGFGaWVsZDxhbnk+LCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVEVYVCAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5URVhUICYmIGZpZWxkLmNvbXBvbmVudCAmJiBmaWVsZC5jb21wb25lbnQubmFtZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICAgICAgcmV0dXJuIGF0b2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuREFURSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChuZXcgRGF0ZSh2YWx1ZVswXSwgdmFsdWVbMV0gLSAxLCB2YWx1ZVsyXSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVVNFUikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVc2VyVmFsdWUodmFsdWUuaWQsIHZhbHVlLm5hbWUsIHZhbHVlLnN1cm5hbWUsIHZhbHVlLmVtYWlsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLkRBVEVfVElNRSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChuZXcgRGF0ZSh2YWx1ZVswXSwgdmFsdWVbMV0gLSAxLCB2YWx1ZVsyXSwgdmFsdWVbM10sIHZhbHVlWzRdKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5NVUxUSUNIT0lDRSkge1xuICAgICAgICAgICAgY29uc3QgYXJyYXkgPSBbXTtcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2godiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2godi5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2godik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlVGV4dFZhbHVlKGZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChmaWVsZC5jb21wb25lbnQgIT09IHVuZGVmaW5lZCAmJiBmaWVsZC5jb21wb25lbnQubmFtZSA9PT0gJ3Bhc3N3b3JkJyAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF0b2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iXX0=
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtY29udmVydGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3Rhc2stY29udGVudC9zZXJ2aWNlcy9maWVsZC1jb252ZXJ0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3pDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUNsRixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQy9FLE9BQU8sRUFBQyxnQkFBZ0IsRUFBd0IsTUFBTSw4REFBOEQsQ0FBQztBQUNySCxPQUFPLEVBQUMsZ0JBQWdCLEVBQXdCLE1BQU0sOERBQThELENBQUM7QUFDckgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN2RixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQy9FLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN2RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFFbEYsT0FB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UixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEYXRhRmllbGRSZXNvdXJjZX0gZnJvbSAnLi4vbW9kZWwvcmVzb3VyY2UtaW50ZXJmYWNlJztcbmltcG9ydCB7RGF0YUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9tb2RlbHMvYWJzdHJhY3QtZGF0YS1maWVsZCc7XG5pbXBvcnQge0Jvb2xlYW5GaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvYm9vbGVhbi1maWVsZC9tb2RlbHMvYm9vbGVhbi1maWVsZCc7XG5pbXBvcnQge1RleHRGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdGV4dC1maWVsZC9tb2RlbHMvdGV4dC1maWVsZCc7XG5pbXBvcnQge051bWJlckZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9udW1iZXItZmllbGQvbW9kZWxzL251bWJlci1maWVsZCc7XG5pbXBvcnQge0VudW1lcmF0aW9uRmllbGQsIEVudW1lcmF0aW9uRmllbGRWYWx1ZX0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZW51bWVyYXRpb24tZmllbGQvbW9kZWxzL2VudW1lcmF0aW9uLWZpZWxkJztcbmltcG9ydCB7TXVsdGljaG9pY2VGaWVsZCwgTXVsdGljaG9pY2VGaWVsZFZhbHVlfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9tdWx0aWNob2ljZS1maWVsZC9tb2RlbHMvbXVsdGljaG9pY2UtZmllbGQnO1xuaW1wb3J0IHtEYXRlRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2RhdGUtZmllbGQvbW9kZWxzL2RhdGUtZmllbGQnO1xuaW1wb3J0IHtEYXRlVGltZUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9kYXRlLXRpbWUtZmllbGQvbW9kZWxzL2RhdGUtdGltZS1maWVsZCc7XG5pbXBvcnQge1VzZXJGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdXNlci1maWVsZC9tb2RlbHMvdXNlci1maWVsZCc7XG5pbXBvcnQge0J1dHRvbkZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9idXR0b24tZmllbGQvbW9kZWxzL2J1dHRvbi1maWVsZCc7XG5pbXBvcnQge0ZpbGVGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZmlsZS1maWVsZC9tb2RlbHMvZmlsZS1maWVsZCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge1VzZXJWYWx1ZX0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdXNlci1maWVsZC9tb2RlbHMvdXNlci12YWx1ZSc7XG5pbXBvcnQge0ZpZWxkVHlwZVJlc291cmNlfSBmcm9tICcuLi9tb2RlbC9maWVsZC10eXBlLXJlc291cmNlJztcbmltcG9ydCB7RmlsZUxpc3RGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZmlsZS1saXN0LWZpZWxkL21vZGVscy9maWxlLWxpc3QtZmllbGQnO1xuaW1wb3J0IHtUZXh0QXJlYUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy90ZXh0LWZpZWxkL21vZGVscy90ZXh0LWFyZWEtZmllbGQnO1xuaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9jb21wb25lbnQnO1xuaW1wb3J0IHtUYXNrUmVmRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3Rhc2stcmVmLWZpZWxkL21vZGVsL3Rhc2stcmVmLWZpZWxkJztcbmltcG9ydCB7RHluYW1pY0VudW1lcmF0aW9uRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2VudW1lcmF0aW9uLWZpZWxkL21vZGVscy9keW5hbWljLWVudW1lcmF0aW9uLWZpZWxkJztcbmltcG9ydCB7RmlsdGVyRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2ZpbHRlci1maWVsZC9tb2RlbHMvZmlsdGVyLWZpZWxkJztcbmltcG9ydCB7STE4bkZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9pMThuLWZpZWxkL21vZGVscy9pMThuLWZpZWxkJztcbmltcG9ydCB7IFVzZXJMaXN0RmllbGQgfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy91c2VyLWxpc3QtZmllbGQvbW9kZWxzL3VzZXItbGlzdC1maWVsZCc7XG5pbXBvcnQgeyBVc2VyTGlzdFZhbHVlIH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdXNlci1saXN0LWZpZWxkL21vZGVscy91c2VyLWxpc3QtdmFsdWUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQ29udmVydGVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSB0ZXh0RmllbGROYW1lcyA9IFsndGV4dGFyZWEnLCAncmljaHRleHRhcmVhJywgJ2h0bWx0ZXh0YXJlYScsICdlZGl0b3InLCAnaHRtbEVkaXRvcicsICdhcmVhJ11cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0NsYXNzKGl0ZW06IERhdGFGaWVsZFJlc291cmNlKTogRGF0YUZpZWxkPGFueT4ge1xuICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5CT09MRUFOOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQm9vbGVhbkZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS52YWx1ZSBhcyBib29sZWFuLCBpdGVtLmJlaGF2aW9yLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuVEVYVDpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXh0RmllbGROYW1lcy5pbmNsdWRlcyhpdGVtLmNvbXBvbmVudD8ubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0QXJlYUZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgdGhpcy5yZXNvbHZlVGV4dFZhbHVlKGl0ZW0sIGl0ZW0udmFsdWUpLCBpdGVtLmJlaGF2aW9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dEZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgdGhpcy5yZXNvbHZlVGV4dFZhbHVlKGl0ZW0sIGl0ZW0udmFsdWUpLCBpdGVtLmJlaGF2aW9yLCBpdGVtLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuTlVNQkVSOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTnVtYmVyRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlIGFzIG51bWJlciwgaXRlbS5iZWhhdmlvciwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0uZm9ybWF0RmlsdGVyLCB0aGlzLnJlc29sdmVOdW1iZXJDb21wb25lbnQoaXRlbSksIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuRU5VTUVSQVRJT046XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkVOVU1FUkFUSU9OX01BUDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlRW51bUZpZWxkKGl0ZW0pO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5NVUxUSUNIT0lDRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpY2hvaWNlRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlLCB0aGlzLnJlc29sdmVNdWx0aWNob2ljZUNob2ljZXMoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uYmVoYXZpb3IsIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnR5cGUsIGl0ZW0udmFsaWRhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLk1VTFRJQ0hPSUNFX01BUDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpY2hvaWNlRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlLCB0aGlzLnJlc29sdmVNdWx0aWNob2ljZU9wdGlvbnMoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uYmVoYXZpb3IsIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnR5cGUsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkRBVEU6XG4gICAgICAgICAgICAgICAgbGV0IGRhdGU7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IG1vbWVudChuZXcgRGF0ZShpdGVtLnZhbHVlWzBdLCBpdGVtLnZhbHVlWzFdIC0gMSwgaXRlbS52YWx1ZVsyXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGVGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGRhdGUsIGl0ZW0uYmVoYXZpb3IsIGl0ZW0ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5EQVRFX1RJTUU6XG4gICAgICAgICAgICAgICAgbGV0IGRhdGVUaW1lO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVUaW1lID0gbW9tZW50KG5ldyBEYXRlKGl0ZW0udmFsdWVbMF0sIGl0ZW0udmFsdWVbMV0gLSAxLCBpdGVtLnZhbHVlWzJdLCBpdGVtLnZhbHVlWzNdLCBpdGVtLnZhbHVlWzRdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWVGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGRhdGVUaW1lLCBpdGVtLmJlaGF2aW9yLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuVVNFUjpcbiAgICAgICAgICAgICAgICBsZXQgdXNlcjtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB1c2VyID0gbmV3IFVzZXJWYWx1ZShpdGVtLnZhbHVlLmlkLCBpdGVtLnZhbHVlLm5hbWUsIGl0ZW0udmFsdWUuc3VybmFtZSwgaXRlbS52YWx1ZS5lbWFpbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVXNlckZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS5iZWhhdmlvciwgdXNlcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5yb2xlcywgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLlVTRVJfTElTVDpcbiAgICAgICAgICAgICAgICBsZXQgdXNlckxpc3RWYWx1ZSA9IG5ldyBVc2VyTGlzdFZhbHVlKFtdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnZhbHVlLnVzZXJWYWx1ZXMuZm9yRWFjaCh1ID0+IHVzZXJMaXN0VmFsdWUuYWRkVXNlclZhbHVlKG5ldyBVc2VyVmFsdWUodS5pZCwgdS5uYW1lLCB1LnN1cm5hbWUsIHUuZW1haWwpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVXNlckxpc3RGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0uYmVoYXZpb3IsIHVzZXJMaXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5CVVRUT046XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCdXR0b25GaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0uYmVoYXZpb3IsIGl0ZW0udmFsdWUgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuRklMRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0uYmVoYXZpb3IsIGl0ZW0udmFsdWUgPyBpdGVtLnZhbHVlIDoge30sXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBudWxsLCBudWxsLCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5GSUxFX0xJU1Q6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlTGlzdEZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS5iZWhhdmlvciwgaXRlbS52YWx1ZSA/IGl0ZW0udmFsdWUgOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIG51bGwsIG51bGwsIGl0ZW0uY29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLlRBU0tfUkVGOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGFza1JlZkZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS52YWx1ZSA/IGl0ZW0udmFsdWUgOiBbXSwgaXRlbS5iZWhhdmlvcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkZJTFRFUjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbHRlckZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS52YWx1ZSA/PyAnJywgaXRlbS5maWx0ZXJNZXRhZGF0YSwgaXRlbS5hbGxvd2VkTmV0cyxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5iZWhhdmlvciwgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkkxOE46XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJMThuRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlID8/IHtkZWZhdWx0VmFsdWU6ICcnfSwgaXRlbS5iZWhhdmlvciwgaXRlbS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlVHlwZShpdGVtOiBEYXRhRmllbGQ8YW55Pik6IEZpZWxkVHlwZVJlc291cmNlIHtcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCb29sZWFuRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5CT09MRUFOO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCdXR0b25GaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLkJVVFRPTjtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgVGV4dEZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuVEVYVDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgTnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5OVU1CRVI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIERhdGVGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLkRBVEU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIERhdGVUaW1lRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5EQVRFX1RJTUU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEZpbGVGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLkZJTEU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEZpbGVMaXN0RmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5GSUxFX0xJU1Q7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFVzZXJGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLlVTRVI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFVzZXJMaXN0RmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5VU0VSX0xJU1Q7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFRhc2tSZWZGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLlRBU0tfUkVGO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBFbnVtZXJhdGlvbkZpZWxkIHx8IGl0ZW0gaW5zdGFuY2VvZiBNdWx0aWNob2ljZUZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5maWVsZFR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEZpbHRlckZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuRklMVEVSO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBJMThuRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5JMThOO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvcm1hdFZhbHVlRm9yQmFja2VuZChmaWVsZDogRGF0YUZpZWxkPGFueT4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLlRFWFQgJiYgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVEVYVCAmJiBmaWVsZC5jb21wb25lbnQgJiYgZmllbGQuY29tcG9uZW50Lm5hbWUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBidG9hKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuREFURSkge1xuICAgICAgICAgICAgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5VU0VSKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5VU0VSX0xJU1QpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS51c2VyVmFsdWVzLm1hcCh1ID0+IHUuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuREFURV9USU1FKSB7XG4gICAgICAgICAgICBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5mb3JtYXQoJ0RELk1NLllZWVkgSEg6bW06c3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVOdW1iZXJDb21wb25lbnQobnVtYmVyRmllbGQ6IERhdGFGaWVsZFJlc291cmNlKTogQ29tcG9uZW50IHtcbiAgICAgICAgbGV0IG51bWJlckNvbXBvbmVudCA9IHtuYW1lOiAnZGVmYXVsdCcsIHByb3BlcnRpZXM6IHVuZGVmaW5lZH07XG4gICAgICAgIGlmIChudW1iZXJGaWVsZC5jb21wb25lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbnVtYmVyQ29tcG9uZW50ID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IG51bWJlckZpZWxkLmNvbXBvbmVudC5uYW1lLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IG51bWJlckZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXJDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgYGVudW1lcmF0aW9uYCBhbmQgYGV1bnVtZXJhdGlvbl9tYXBgIGZpZWxkcyBpbnRvIHRoZWlyIGFwcHJvcHJpYXRlIGNsYXNzIGluc3RhbmNlc1xuICAgICAqIEBwYXJhbSBlbnVtRmllbGQgZW51bWVyYXRpb24gZmllbGQgcmVzb3VyY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUVudW1GaWVsZChlbnVtRmllbGQ6IERhdGFGaWVsZFJlc291cmNlKTogRW51bWVyYXRpb25GaWVsZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBlbnVtRmllbGQudHlwZSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuRU5VTUVSQVRJT05cbiAgICAgICAgICAgID8gdGhpcy5yZXNvbHZlRW51bUNob2ljZXMoZW51bUZpZWxkKVxuICAgICAgICAgICAgOiB0aGlzLnJlc29sdmVFbnVtT3B0aW9ucyhlbnVtRmllbGQpO1xuICAgICAgICBpZiAoZW51bUZpZWxkLmNvbXBvbmVudCAmJiBlbnVtRmllbGQuY29tcG9uZW50Lm5hbWUgPT09ICdhdXRvY29tcGxldGVfZHluYW1pYycpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRHluYW1pY0VudW1lcmF0aW9uRmllbGQoZW51bUZpZWxkLnN0cmluZ0lkLCBlbnVtRmllbGQubmFtZSwgZW51bUZpZWxkLnZhbHVlLCBvcHRpb25zLFxuICAgICAgICAgICAgICAgIGVudW1GaWVsZC5iZWhhdmlvciwgZW51bUZpZWxkLnBsYWNlaG9sZGVyLCBlbnVtRmllbGQuZGVzY3JpcHRpb24sIGVudW1GaWVsZC5sYXlvdXQsXG4gICAgICAgICAgICAgICAgZW51bUZpZWxkLnR5cGUsIGVudW1GaWVsZC52YWxpZGF0aW9ucywgZW51bUZpZWxkLmNvbXBvbmVudCwgZW51bUZpZWxkLnBhcmVudFRhc2tJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVudW1lcmF0aW9uRmllbGQoZW51bUZpZWxkLnN0cmluZ0lkLCBlbnVtRmllbGQubmFtZSwgZW51bUZpZWxkLnZhbHVlLCBvcHRpb25zLFxuICAgICAgICAgICAgICAgIGVudW1GaWVsZC5iZWhhdmlvciwgZW51bUZpZWxkLnBsYWNlaG9sZGVyLCBlbnVtRmllbGQuZGVzY3JpcHRpb24sIGVudW1GaWVsZC5sYXlvdXQsXG4gICAgICAgICAgICAgICAgZW51bUZpZWxkLnR5cGUsIGVudW1GaWVsZC52YWxpZGF0aW9ucywgZW51bUZpZWxkLmNvbXBvbmVudCwgZW51bUZpZWxkLnBhcmVudFRhc2tJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgZW51bWVyYXRpb24gb3B0aW9ucyBmcm9tIHRoZSBgY2hvaWNlc2AgYXR0cmlidXRlXG4gICAgICogQHBhcmFtIGVudW1GaWVsZCBlbnVtZXJhdGlvbiBmaWVsZCByZXNvdXJjZSBvYmplY3Qgd2hvJ3MgY2hvaWNlcyB3ZSB3YW50IHRvIHJlc29sdmVcbiAgICAgKiBAcmV0dXJucyB0aGUgb3B0aW9ucyBmb3IgdGhlIGVudW1lcmF0aW9uIGZpZWxkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVFbnVtQ2hvaWNlcyhlbnVtRmllbGQ6IERhdGFGaWVsZFJlc291cmNlKTogQXJyYXk8RW51bWVyYXRpb25GaWVsZFZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGVudW1DaG9pY2VzID0gW107XG4gICAgICAgIGlmIChlbnVtRmllbGQuY2hvaWNlcyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICBlbnVtRmllbGQuY2hvaWNlcy5mb3JFYWNoKGl0ID0+IHtcbiAgICAgICAgICAgICAgICBlbnVtQ2hvaWNlcy5wdXNoKHtrZXk6IGl0LCB2YWx1ZTogaXR9IGFzIEVudW1lcmF0aW9uRmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGVudW1GaWVsZC5jaG9pY2VzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZW51bUNob2ljZXMucHVzaCh7a2V5LCB2YWx1ZTogZW51bUZpZWxkLmNob2ljZXNba2V5XX0gYXMgRW51bWVyYXRpb25GaWVsZFZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtQ2hvaWNlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgZW51bWVyYXRpb24gb3B0aW9ucyBmcm9tIHRoZSBgb3B0aW9uc2AgYXR0cmlidXRlXG4gICAgICogQHBhcmFtIGVudW1GaWVsZCBlbnVtZXJhdGlvbiBmaWVsZCByZXNvdXJjZSBvYmplY3Qgd2hvJ3Mgb3B0aW9ucyB3ZSB3YW50IHRvIHJlc29sdmVcbiAgICAgKiBAcmV0dXJucyB0aGUgb3B0aW9ucyBmb3IgdGhlIGVudW1lcmF0aW9uIGZpZWxkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVFbnVtT3B0aW9ucyhlbnVtRmllbGQ6IERhdGFGaWVsZFJlc291cmNlKTogQXJyYXk8RW51bWVyYXRpb25GaWVsZFZhbHVlPiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhlbnVtRmllbGQub3B0aW9ucykubWFwKGVudHJ5ID0+ICh7a2V5OiBlbnRyeVswXSwgdmFsdWU6IGVudHJ5WzFdfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBtdWx0aWNob2ljZSBvcHRpb25zIGZyb20gdGhlIGBjaG9pY2VzYCBhdHRyaWJ1dGVcbiAgICAgKiBAcGFyYW0gbXVsdGlGaWVsZCBtdWx0aWNob2ljZSBmaWVsZCByZXNvdXJjZSBvYmplY3Qgd2hvJ3Mgb3B0aW9ucyB3ZSB3YW50IHRvIHJlc29sdmVcbiAgICAgKiBAcmV0dXJucyB0aGUgb3B0aW9ucyBmb3IgdGhlIG11bHRpY2hvaWNlIGZpZWxkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVNdWx0aWNob2ljZUNob2ljZXMobXVsdGlGaWVsZDogRGF0YUZpZWxkUmVzb3VyY2UpOiBBcnJheTxNdWx0aWNob2ljZUZpZWxkVmFsdWU+IHtcbiAgICAgICAgY29uc3QgY2hvaWNlc011bHRpOiBBcnJheTxNdWx0aWNob2ljZUZpZWxkVmFsdWU+ID0gW107XG4gICAgICAgIGlmIChtdWx0aUZpZWxkLmNob2ljZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgbXVsdGlGaWVsZC5jaG9pY2VzLmZvckVhY2goaXQgPT4ge1xuICAgICAgICAgICAgICAgIGNob2ljZXNNdWx0aS5wdXNoKHtrZXk6IGl0LCB2YWx1ZTogaXR9IGFzIE11bHRpY2hvaWNlRmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG11bHRpRmllbGQuY2hvaWNlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNob2ljZXNNdWx0aS5wdXNoKHtrZXksIHZhbHVlOiBtdWx0aUZpZWxkLmNob2ljZXNba2V5XX0gYXMgTXVsdGljaG9pY2VGaWVsZFZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaG9pY2VzTXVsdGk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIGVudW1lcmF0aW9uIG9wdGlvbnMgZnJvbSB0aGUgYG9wdGlvbnNgIGF0dHJpYnV0ZVxuICAgICAqIEBwYXJhbSBtdWx0aUZpZWxkIG11bHRpY2hvaWNlIGZpZWxkIHJlc291cmNlIG9iamVjdCB3aG8ncyBvcHRpb25zIHdlIHdhbnQgdG8gcmVzb2x2ZVxuICAgICAqIEByZXR1cm5zIHRoZSBvcHRpb25zIGZvciB0aGUgbXVsdGljaG9pY2UgZmllbGRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZU11bHRpY2hvaWNlT3B0aW9ucyhtdWx0aUZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSk6IEFycmF5PE11bHRpY2hvaWNlRmllbGRWYWx1ZT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMobXVsdGlGaWVsZC5vcHRpb25zKS5tYXAoZW50cnkgPT4gKHtrZXk6IGVudHJ5WzBdLCB2YWx1ZTogZW50cnlbMV19KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvcm1hdFZhbHVlRnJvbUJhY2tlbmQoZmllbGQ6IERhdGFGaWVsZDxhbnk+LCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVEVYVCAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5URVhUICYmIGZpZWxkLmNvbXBvbmVudCAmJiBmaWVsZC5jb21wb25lbnQubmFtZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICAgICAgcmV0dXJuIGF0b2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuREFURSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChuZXcgRGF0ZSh2YWx1ZVswXSwgdmFsdWVbMV0gLSAxLCB2YWx1ZVsyXSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVVNFUikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVc2VyVmFsdWUodmFsdWUuaWQsIHZhbHVlLm5hbWUsIHZhbHVlLnN1cm5hbWUsIHZhbHVlLmVtYWlsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLkRBVEVfVElNRSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChuZXcgRGF0ZSh2YWx1ZVswXSwgdmFsdWVbMV0gLSAxLCB2YWx1ZVsyXSwgdmFsdWVbM10sIHZhbHVlWzRdKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5NVUxUSUNIT0lDRSkge1xuICAgICAgICAgICAgY29uc3QgYXJyYXkgPSBbXTtcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2godiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2godi5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2godik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlVGV4dFZhbHVlKGZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChmaWVsZC5jb21wb25lbnQgIT09IHVuZGVmaW5lZCAmJiBmaWVsZC5jb21wb25lbnQubmFtZSA9PT0gJ3Bhc3N3b3JkJyAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF0b2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iXX0=
@@ -274,6 +274,9 @@ export class TaskContentService {
274
274
  timer().subscribe(() => this.validateTaskData());
275
275
  }
276
276
  }
277
+ getReferencedFieldTask(field) {
278
+ return Object.keys(this.taskFieldsIndex).find(taskId => Object.keys(this.taskFieldsIndex[taskId].fields).includes(field));
279
+ }
277
280
  isFieldInTaskRef(changedField) {
278
281
  return !!this.taskFieldsIndex &&
279
282
  Object.keys(this.taskFieldsIndex)
@@ -281,7 +284,7 @@ export class TaskContentService {
281
284
  }
282
285
  getReferencedTransitionId(changedField) {
283
286
  if (!!this.taskFieldsIndex) {
284
- const taskFieldsIndexId = Object.keys(this.taskFieldsIndex).find(taskId => Object.keys(this.taskFieldsIndex[taskId].fields).includes(changedField));
287
+ const taskFieldsIndexId = this.getReferencedFieldTask(changedField);
285
288
  return this.taskFieldsIndex[taskFieldsIndexId].transitionId;
286
289
  }
287
290
  return undefined;
@@ -300,4 +303,4 @@ TaskContentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", v
300
303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: TaskContentService, decorators: [{
301
304
  type: Injectable
302
305
  }], ctorParameters: function () { return [{ type: i1.FieldConverterService }, { type: i2.SnackBarService }, { type: i3.TranslateService }, { type: i4.LoggerService }]; } });
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1jb250ZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3Rhc2stY29udGVudC9zZXJ2aWNlcy90YXNrLWNvbnRlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBQyxlQUFlLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFTaEYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0VBQXNFLENBQUM7Ozs7OztBQU03Rzs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFnQixrQkFBa0I7SUFlcEMsWUFBZ0Msc0JBQTZDLEVBQzdDLGdCQUFpQyxFQUNqQyxVQUE0QixFQUM1QixPQUFzQjtRQUh0QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzdDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQVI5QyxxQkFBZ0IsR0FFcEIsRUFBRSxDQUFDO1FBQ0MsOEJBQXlCLEdBQXdDLEVBQUUsQ0FBQztRQU14RSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFtQixDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUN2QixJQUFJLENB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QWtCO29IQUFsQixrQkFBa0I7NEZBQWxCLGtCQUFrQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0YUdyb3VwfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2RhdGEtZ3JvdXBzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1Rhc2t9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvdGFzayc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge1NuYWNrQmFyU2VydmljZX0gZnJvbSAnLi4vLi4vc25hY2stYmFyL3NlcnZpY2VzL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0VudW1lcmF0aW9uRmllbGQsIEVudW1lcmF0aW9uRmllbGRWYWx1ZX0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZW51bWVyYXRpb24tZmllbGQvbW9kZWxzL2VudW1lcmF0aW9uLWZpZWxkJztcbmltcG9ydCB7TXVsdGljaG9pY2VGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbXVsdGljaG9pY2UtZmllbGQvbW9kZWxzL211bHRpY2hvaWNlLWZpZWxkJztcbmltcG9ydCB7Q2hhbmdlLCBDaGFuZ2VkRmllbGRzLCBGcm9udGVuZEFjdGlvbnN9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9jaGFuZ2VkLWZpZWxkcyc7XG5pbXBvcnQge0ZpZWxkQ29udmVydGVyU2VydmljZX0gZnJvbSAnLi9maWVsZC1jb252ZXJ0ZXIuc2VydmljZSc7XG5pbXBvcnQge0ZpZWxkVHlwZVJlc291cmNlfSBmcm9tICcuLi9tb2RlbC9maWVsZC10eXBlLXJlc291cmNlJztcbmltcG9ydCB7RHluYW1pY0VudW1lcmF0aW9uRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2VudW1lcmF0aW9uLWZpZWxkL21vZGVscy9keW5hbWljLWVudW1lcmF0aW9uLWZpZWxkJztcbmltcG9ydCB7VmFsaWRhdGlvbn0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHtUYXNrRXZlbnRPdXRjb21lfSBmcm9tICcuLi8uLi9ldmVudC9tb2RlbC9ldmVudC1vdXRjb21lcy90YXNrLW91dGNvbWVzL3Rhc2stZXZlbnQtb3V0Y29tZSc7XG5pbXBvcnQge0RhdGFGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2Fic3RyYWN0LWRhdGEtZmllbGQnO1xuaW1wb3J0IHtUYXNrRmllbGRzfSBmcm9tICcuLi9tb2RlbC90YXNrLWZpZWxkcyc7XG5cbi8qKlxuICogQWN0cyBhcyBhIGNvbW11bmljYXRpb24gaW50ZXJmYWNlIGJldHdlZW4gdGhlIENvbXBvbmVudCB0aGF0IHJlbmRlcnMgVGFzayBjb250ZW50IGFuZCBpdCdzIHBhcmVudCBDb21wb25lbnQuXG4gKiBBbHNvIHByb3ZpZGVzIHNvbWUgZ2VuZXJhbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgbmVlZGVkIHdoZW4gd29ya2luZyB3aXRoIHRhc2sgY29udGVudC5cbiAqXG4gKiBOb3RhYmxlIGV4YW1wbGUgb2YgYSBwYXJlbnQgQ29tcG9uZW50IGlzIHRoZSB7QGxpbmsgQWJzdHJhY3RUYXNrUGFuZWxDb21wb25lbnR9LlxuICpcbiAqIE5vdGFibGUgZXhhbXBsZSBvZiBhIHRhc2sgY29udGVudCByZW5kZXJlciBpcyB0aGUge0BsaW5rIEFic3RyYWN0VGFza0NvbnRlbnRDb21wb25lbnR9LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGFza0NvbnRlbnRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZST05URU5EX0FDVElPTlNfS0VZID0gJ19mcm9udGVuZF9hY3Rpb25zJztcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBWQUxJREFURV9GUk9OVEVORF9BQ1RJT04gPSAndmFsaWRhdGUnO1xuXG4gICAgJHNob3VsZENyZWF0ZTogUmVwbGF5U3ViamVjdDxBcnJheTxEYXRhR3JvdXA+PjtcbiAgICAkc2hvdWxkQ3JlYXRlQ291bnRlcjogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj47XG4gICAgcHJvdGVjdGVkIF90YXNrOiBUYXNrO1xuICAgIHByb3RlY3RlZCBfdGFza0RhdGFSZWxvYWRSZXF1ZXN0JDogU3ViamVjdDxGcm9udGVuZEFjdGlvbnM+O1xuICAgIHByb3RlY3RlZCBfaXNFeHBhbmRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gICAgcHJpdmF0ZSBfdGFza0ZpZWxkc0luZGV4OiB7XG4gICAgICAgIFt0YXNrSWQ6IHN0cmluZ106IFRhc2tGaWVsZHNcbiAgICB9ID0ge307XG4gICAgcHJpdmF0ZSBfcmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzOiB7IFtjYXNlSWQ6IHN0cmluZ106IEFycmF5PHN0cmluZz4gfSA9IHt9O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfZmllbGRDb252ZXJ0ZXJTZXJ2aWNlOiBGaWVsZENvbnZlcnRlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfc25hY2tCYXJTZXJ2aWNlOiBTbmFja0JhclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZ2dlcjogTG9nZ2VyU2VydmljZSkge1xuICAgICAgICB0aGlzLiRzaG91bGRDcmVhdGUgPSBuZXcgUmVwbGF5U3ViamVjdDxBcnJheTxEYXRhR3JvdXA+PigxKTtcbiAgICAgICAgdGhpcy4kc2hvdWxkQ3JlYXRlQ291bnRlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICAgICAgdGhpcy5faXNFeHBhbmRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgICAgIHRoaXMuX3Rhc2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3Rhc2tEYXRhUmVsb2FkUmVxdWVzdCQgPSBuZXcgU3ViamVjdDxGcm9udGVuZEFjdGlvbnM+KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy4kc2hvdWxkQ3JlYXRlLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy4kc2hvdWxkQ3JlYXRlLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGFza0RhdGFSZWxvYWRSZXF1ZXN0JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9pc0V4cGFuZGluZyQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB0aGUgVGFzayBvYmplY3QgaWYgc2V0IGFuZCBgdW5kZWZpbmVkYCBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IHRhc2soKTogVGFzayB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFNldHRpbmcgYSBUYXNrIGFsc28gZW1pdHMgaXQgaW50byB0aGUgc3RyZWFtIGFjY2Vzc2libGUgYnkgdGhlIFt0YXNrJF17QGxpbmsgVGFza0NvbnRlbnRTZXJ2aWNlI3Rhc2skfSBnZXR0ZXIgbWV0aG9kLlxuICAgICAqIEBwYXJhbSB0YXNrIHRoZSBUYXNrIHRoYXQgb3ducyB0aGUgY29udGVudCBtYW5hZ2VkIGJ5IHRoaXMgc2VydmljZVxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBzZXQgdGFzayh0YXNrOiBUYXNrKTtcblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSByZXR1cm5zIGEge0BsaW5rIFRhc2t9IG9iamVjdCBldmVyeSB0aW1lIHRoaXMgb2JqZWN0IGlzIHNldC5cbiAgICAgKlxuICAgICAqIFVzZSBbdGFza117QGxpbmsgVGFza0NvbnRlbnRTZXJ2aWNlI3Rhc2t9IHNldHRlciBtZXRob2QgdG8gc2V0IHRoZSBUYXNrLlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgdGFzayQoKTogT2JzZXJ2YWJsZTxUYXNrPjtcblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSB0aGF0IGVtaXRzIGV2ZXJ5IHRpbWUgYSBkYXRhIHJlbG9hZCBpcyByZXF1ZXN0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldCB0YXNrRGF0YVJlbG9hZFJlcXVlc3QkKCk6IE9ic2VydmFibGU8RnJvbnRlbmRBY3Rpb25zPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXNrRGF0YVJlbG9hZFJlcXVlc3QkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuXG4gICAgZ2V0IHRhc2tGaWVsZHNJbmRleCgpOiB7IFtwOiBzdHJpbmddOiBUYXNrRmllbGRzIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFza0ZpZWxkc0luZGV4O1xuICAgIH1cblxuICAgIHNldCB0YXNrRmllbGRzSW5kZXgodmFsdWU6IHsgW3A6IHN0cmluZ106IFRhc2tGaWVsZHMgfSkge1xuICAgICAgICB0aGlzLl90YXNrRmllbGRzSW5kZXggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgcmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzKCk6IHsgW3A6IHN0cmluZ106IEFycmF5PHN0cmluZz4gfSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZlcmVuY2VkVGFza0FuZENhc2VJZHM7XG4gICAgfVxuXG4gICAgc2V0IHJlZmVyZW5jZWRUYXNrQW5kQ2FzZUlkcyh2YWx1ZTogeyBbcDogc3RyaW5nXTogQXJyYXk8c3RyaW5nPiB9KSB7XG4gICAgICAgIHRoaXMuX3JlZmVyZW5jZWRUYXNrQW5kQ2FzZUlkcyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHBhbmVsIHRoYXQgdGhlIHRhc2sgY29udGVudCBpcyBjb250YWluZWQgaW4gaXMgY3VycmVudGx5IGV4cGFuZGluZy5cbiAgICAgKlxuICAgICAqIElmIHRoZSB0YXNrIGNvbnRlbnQgaXMgbm90IGNvbnRhaW5lZCBpbiBhIHBhbmVsLCBgaXNFeHBhbmRpbmdgIHdpbGwgYmUgYWx3YXlzIGBmYWxzZWAuXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0V4cGFuZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRXhwYW5kaW5nJC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgdGFzayBjb250ZW50IHRvIGBleHBhbmRpbmdgLlxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbnNpb25TdGFydGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc0V4cGFuZGluZyQubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgdGFzayBjb250ZW50IHRvIGBub3QgZXhwYW5kaW5nYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5zaW9uRmluaXNoZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzRXhwYW5kaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIGFsbCBkYXRhIGZpZWxkcyBpbiB0aGUgbWFuYWdlZCB7QGxpbmsgVGFza30uXG4gICAgICpcbiAgICAgKiBJZiBzb21lIG9mIHRoZSBmaWVsZHMgYXJlIGludmFsaWQgdG91Y2hlcyB0aGVtIHNvIHRoZWlyIHZhbGlkYXRpb24gZXJyb3JzIHdpbGwgYXBwZWFyIChpZiBzZXQpLlxuICAgICAqIEEgc25hY2tiYXIgd2lsbCBhbHNvIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlciwgaW5mb3JtaW5nIHRoZW0gb2YgdGhlIGZhY3QgdGhhdCB0aGUgZmllbGRzIGFyZSBpbnZhbGlkLlxuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIHRhc2sgaXMgdmFsaWQgb3Igbm90XG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlVGFza0RhdGEoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5fdGFzayB8fCAhdGhpcy5fdGFzay5kYXRhR3JvdXBzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSAhdGhpcy5fdGFzay5kYXRhR3JvdXBzLnNvbWUoZ3JvdXAgPT4gZ3JvdXAuZmllbGRzLnNvbWUoZmllbGQgPT4gIWZpZWxkLnZhbGlkICYmICFmaWVsZC5kaXNhYmxlZCkpO1xuICAgICAgICBjb25zdCB2YWxpZERpc2FibGVkID0gIXRoaXMuX3Rhc2suZGF0YUdyb3Vwcy5zb21lKGdyb3VwID0+IGdyb3VwLmZpZWxkcy5zb21lKGZpZWxkID0+ICFmaWVsZC52YWxpZFJlcXVpcmVkICYmIGZpZWxkLmRpc2FibGVkKSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyU2VydmljZS5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIuaW52YWxpZERhdGEnKSk7XG4gICAgICAgICAgICB0aGlzLl90YXNrLmRhdGFHcm91cHMuZm9yRWFjaChncm91cCA9PiBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiBmaWVsZC50b3VjaCA9IHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyU2VydmljZS5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIubWlzc2luZ1JlcXVpcmVkJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZCAmJiB2YWxpZERpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGludmFsaWQgZGF0YSBvZiB0YXNrXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhcnJheSBvZiBpbnZhbGlkIGRhdGFmaWVsZHNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW52YWxpZFRhc2tEYXRhKCk6IEFycmF5PERhdGFGaWVsZDxhbnk+PiB7XG4gICAgICAgIGNvbnN0IGludmFsaWRGaWVsZHMgPSBbXTtcbiAgICAgICAgdGhpcy5fdGFzay5kYXRhR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4gaW52YWxpZEZpZWxkcy5wdXNoKC4uLmdyb3VwLmZpZWxkcy5maWx0ZXIoZmllbGQgPT5cbiAgICAgICAgICAgICghZmllbGQudmFsaWQgJiYgIWZpZWxkLmRpc2FibGVkKSB8fCAoIWZpZWxkLnZhbGlkUmVxdWlyZWQgJiYgIWZpZWxkLmRpc2FibGVkKSkpKTtcbiAgICAgICAgcmV0dXJuIGludmFsaWRGaWVsZHM7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlRHluYW1pY0VudW1GaWVsZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrIHx8ICF0aGlzLl90YXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLl90YXNrLmRhdGFHcm91cHMuc29tZShncm91cCA9PiBncm91cC5maWVsZHMuc29tZShmaWVsZCA9PiBmaWVsZCBpbnN0YW5jZW9mIER5bmFtaWNFbnVtZXJhdGlvbkZpZWxkKSk7XG4gICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuX3Rhc2suZGF0YUdyb3Vwcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBncm91cC5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBEeW5hbWljRW51bWVyYXRpb25GaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuY2hvaWNlcyAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLmNob2ljZXMubGVuZ3RoICE9PSAwICYmIGZpZWxkLnZhbHVlICE9PSAnJyAmJiBmaWVsZC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkLmNob2ljZXMuc29tZShjaG9pY2UgPT4gY2hvaWNlLmtleSA9PT0gZmllbGQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuYmVoYXZpb3IucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5fc25hY2tCYXJTZXJ2aWNlLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5taXNzaW5nUmVxdWlyZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGhlIGJsb2NraW5nIHN0YXRlIG9mIGFsbCBmaWVsZHMgaW4gdGhlIG1hbmFnZWQgVGFzay5cbiAgICAgKiBAcGFyYW0gYmxvY2tpbmdTdGF0ZSB3aGV0aGVyIHRoZSBmaWVsZCBzaG91bGQgYmUgYmxvY2tlZCBvciBub3RcbiAgICAgKi9cbiAgICBwdWJsaWMgYmxvY2tGaWVsZHMoYmxvY2tpbmdTdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fdGFzayAmJiB0aGlzLl90YXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2suZGF0YUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmJsb2NrID0gYmxvY2tpbmdTdGF0ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBhc3NpZ25lZSwgc3RhcnQgZGF0ZSBhbmQgZmluaXNoIGRhdGUgZnJvbSB0aGUgbWFuYWdlZCBUYXNrLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVTdGF0ZURhdGEoZXZlbnRPdXRjb21lOiBUYXNrRXZlbnRPdXRjb21lKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl90YXNrKSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrLnVzZXIgPSBldmVudE91dGNvbWUudGFzay51c2VyO1xuICAgICAgICAgICAgdGhpcy5fdGFzay5zdGFydERhdGUgPSBldmVudE91dGNvbWUudGFzay5zdGFydERhdGU7XG4gICAgICAgICAgICB0aGlzLl90YXNrLmZpbmlzaERhdGUgPSBldmVudE91dGNvbWUudGFzay5maW5pc2hEYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgcHJvcGVydGllcyBvZiBmaWVsZHMgaW4gdGhlIG1hbmFnZWQgdGFzayBiYXNlZCBvbiBhIGRlbHRhIG9mIGNoYW5nZXMgZnJvbSBwcmV2aW91cyBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gY2hGaWVsZHMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlbHRhIG9mIHRoZSBjaGFuZ2VzIGZyb20gdGhlIHByZXZpb3VzIHN0YXRlXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZUZyb21DaGFuZ2VkRmllbGRzKGNoRmllbGRzOiBDaGFuZ2VkRmllbGRzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fdGFzayB8fCAhdGhpcy5fdGFzay5kYXRhR3JvdXBzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gdG9kbyBhY3Rpb25zIG93bmVyIHpieXRvxI1uw70/XG4gICAgICAgIGNvbnN0IGZyb250ZW5kQWN0aW9ucyA9IGNoRmllbGRzLnRhc2tJZCA9PT0gdGhpcy50YXNrLnN0cmluZ0lkICYmIGNoRmllbGRzW1Rhc2tDb250ZW50U2VydmljZS5GUk9OVEVORF9BQ1RJT05TX0tFWV07XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY2hGaWVsZHMpLmZvckVhY2goY2hhbmdlZEZpZWxkID0+IHtcbiAgICAgICAgICAgIGlmICghIXRoaXMudGFza0ZpZWxkc0luZGV4W2NoRmllbGRzLnRhc2tJZF0gJiYgISF0aGlzLnRhc2tGaWVsZHNJbmRleFtjaEZpZWxkcy50YXNrSWRdLmZpZWxkc1xuICAgICAgICAgICAgICAgICYmICEhdGhpcy50YXNrRmllbGRzSW5kZXhbY2hGaWVsZHMudGFza0lkXS5maWVsZHNbY2hhbmdlZEZpZWxkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRmllbGQoY2hGaWVsZHMsIHRoaXMudGFza0ZpZWxkc0luZGV4W2NoRmllbGRzLnRhc2tJZF0uZmllbGRzW2NoYW5nZWRGaWVsZF0sIGZyb250ZW5kQWN0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGaWVsZEluVGFza1JlZihjaGFuZ2VkRmllbGQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFza0lkID0gdGhpcy5nZXRSZWZlcmVuY2VkVGFza0lkKGNoYW5nZWRGaWVsZCk7XG4gICAgICAgICAgICAgICAgaWYgKCEhdGFza0lkICYmICEhdGhpcy50YXNrRmllbGRzSW5kZXhbdGFza0lkXSAmJiAhIXRoaXMudGFza0ZpZWxkc0luZGV4W3Rhc2tJZF0uZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICYmICEhdGhpcy50YXNrRmllbGRzSW5kZXhbdGFza0lkXS5maWVsZHNbY2hhbmdlZEZpZWxkXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSZWZlcmVuY2VkRmllbGQoY2hGaWVsZHMsIHRoaXMudGFza0ZpZWxkc0luZGV4W3Rhc2tJZF0uZmllbGRzW2NoYW5nZWRGaWVsZF0sIGZyb250ZW5kQWN0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJHNob3VsZENyZWF0ZS5uZXh0KHRoaXMuX3Rhc2suZGF0YUdyb3Vwcyk7XG4gICAgICAgIHRoaXMucGVyZm9ybUZyb250ZW5kQWN0aW9uKGZyb250ZW5kQWN0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVGaWVsZChjaEZpZWxkczogQ2hhbmdlZEZpZWxkcywgZmllbGQ6IERhdGFGaWVsZDxhbnk+LCBmcm9udGVuZEFjdGlvbnM6IENoYW5nZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZmllbGRDb252ZXJ0ZXJTZXJ2aWNlLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVEFTS19SRUYpIHtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tEYXRhUmVsb2FkUmVxdWVzdCQubmV4dChmcm9udGVuZEFjdGlvbnMgPyBmcm9udGVuZEFjdGlvbnMgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkID0gY2hGaWVsZHNbZmllbGQuc3RyaW5nSWRdO1xuICAgICAgICBPYmplY3Qua2V5cyh1cGRhdGVkRmllbGQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHR5cGUgaXMganVzdCBhbiBpbmZvcm1hdGlvbiwgbm90IGFuIHVwZGF0ZS4gQSBmaWVsZCBjYW5ub3QgY2hhbmdlIGl0cyB0eXBlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY29udGludWUgLSB0aGUgZmllbGQgZG9lcyBub3QgbmVlZCB1cGRhdGluZywgc2luY2Ugbm90aGluZyBjaGFuZ2VkXG4gICAgICAgICAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZVdpdGhvdXRDaGFuZ2UodGhpcy5fZmllbGRDb252ZXJ0ZXJTZXJ2aWNlLmZvcm1hdFZhbHVlRnJvbUJhY2tlbmQoZmllbGQsIHVwZGF0ZWRGaWVsZFtrZXldKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2JlaGF2aW9yJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRGaWVsZC5iZWhhdmlvclt0aGlzLl90YXNrLnRyYW5zaXRpb25JZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gTkdTRC00ODkgZml4IGJlaGF2aW9yIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmJlaGF2aW9yID0gdXBkYXRlZEZpZWxkLmJlaGF2aW9yW3RoaXMuX3Rhc2sudHJhbnNpdGlvbklkXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zaXRpb25JZCA9IHRoaXMuZ2V0UmVmZXJlbmNlZFRyYW5zaXRpb25JZChmaWVsZC5zdHJpbmdJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISF0cmFuc2l0aW9uSWQgJiYgdHJhbnNpdGlvbklkICE9PSAnJyAmJiB1cGRhdGVkRmllbGQuYmVoYXZpb3JbdHJhbnNpdGlvbklkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5iZWhhdmlvciA9IHVwZGF0ZWRGaWVsZC5iZWhhdmlvclt0cmFuc2l0aW9uSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hvaWNlcyc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Nob2ljZXM6IEFycmF5PEVudW1lcmF0aW9uRmllbGRWYWx1ZT4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRGaWVsZC5jaG9pY2VzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRGaWVsZC5jaG9pY2VzLmZvckVhY2goaXQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nob2ljZXMucHVzaCh7a2V5OiBpdCwgdmFsdWU6IGl0fSBhcyBFbnVtZXJhdGlvbkZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh1cGRhdGVkRmllbGQuY2hvaWNlcykuZm9yRWFjaChjaG9pY2VLZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nob2ljZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY2hvaWNlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdXBkYXRlZEZpZWxkLmNob2ljZXNbY2hvaWNlS2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgRW51bWVyYXRpb25GaWVsZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIChmaWVsZCBhcyBFbnVtZXJhdGlvbkZpZWxkIHwgTXVsdGljaG9pY2VGaWVsZCkuY2hvaWNlcyA9IG5ld0Nob2ljZXM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ29wdGlvbnMnOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZWRGaWVsZC5vcHRpb25zKS5mb3JFYWNoKG9wdGlvbktleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zLnB1c2goe2tleTogb3B0aW9uS2V5LCB2YWx1ZTogdXBkYXRlZEZpZWxkLm9wdGlvbnNbb3B0aW9uS2V5XX0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIEVudW1lcmF0aW9uRmllbGQgfCBNdWx0aWNob2ljZUZpZWxkKS5jaG9pY2VzID0gbmV3T3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAndmFsaWRhdGlvbnMnOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZXBsYWNlVmFsaWRhdGlvbnModXBkYXRlZEZpZWxkLnZhbGlkYXRpb25zLm1hcChpdCA9PiAoaXQgYXMgVmFsaWRhdGlvbikpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGRba2V5XSA9IHVwZGF0ZWRGaWVsZFtrZXldO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZC51cGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVSZWZlcmVuY2VkRmllbGQoY2hGaWVsZHM6IENoYW5nZWRGaWVsZHMsIGZpZWxkOiBEYXRhRmllbGQ8YW55PiwgZnJvbnRlbmRBY3Rpb25zOiBDaGFuZ2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkQ29udmVydGVyU2VydmljZS5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLlRBU0tfUkVGKSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrRGF0YVJlbG9hZFJlcXVlc3QkLm5leHQoZnJvbnRlbmRBY3Rpb25zID8gZnJvbnRlbmRBY3Rpb25zIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkRmllbGQgPSBjaEZpZWxkc1tmaWVsZC5zdHJpbmdJZF07XG4gICAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZWRGaWVsZCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdiZWhhdmlvcic6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zaXRpb25JZCA9IHRoaXMuZ2V0UmVmZXJlbmNlZFRyYW5zaXRpb25JZChmaWVsZC5zdHJpbmdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIXRyYW5zaXRpb25JZCAmJiB0cmFuc2l0aW9uSWQgIT09ICcnICYmIHVwZGF0ZWRGaWVsZC5iZWhhdmlvclt0cmFuc2l0aW9uSWRdKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuYmVoYXZpb3IgPSB1cGRhdGVkRmllbGQuYmVoYXZpb3JbdHJhbnNpdGlvbklkXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGRba2V5XSA9IHVwZGF0ZWRGaWVsZFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGQudXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIHRoZSBzcGVjaWZpYyBmcm9udGVuZCBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBBIHByb3RvdHlwZSBpbXBsZW1lbnRhdGlvbiBvZiBmcm9udGVuZCBhY3Rpb25zLlxuICAgICAqXG4gICAgICogVGhlIHNwZWNpZmljcyBhcmUgc3ViamVjdCB0byBjaGFuZ2UuIEl0IGlzIHZlcnkgbGlrZWx5IHRoYXQgdGhpcyBtZXRob2Qgd2lsbCBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZyb250ZW5kQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBwZXJmb3JtRnJvbnRlbmRBY3Rpb24oZnJvbnRlbmRBY3Rpb246IEZyb250ZW5kQWN0aW9ucyk6IHZvaWQge1xuICAgICAgICBpZiAoZnJvbnRlbmRBY3Rpb24gJiYgZnJvbnRlbmRBY3Rpb24udHlwZSA9PT0gVGFza0NvbnRlbnRTZXJ2aWNlLlZBTElEQVRFX0ZST05URU5EX0FDVElPTikge1xuICAgICAgICAgICAgdGltZXIoKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy52YWxpZGF0ZVRhc2tEYXRhKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0ZpZWxkSW5UYXNrUmVmKGNoYW5nZWRGaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudGFza0ZpZWxkc0luZGV4ICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnRhc2tGaWVsZHNJbmRleClcbiAgICAgICAgICAgIC5zb21lKHRhc2tJZCA9PiB0YXNrSWQgIT09IHRoaXMudGFzay5zdHJpbmdJZCAmJiB0aGlzLnRhc2tGaWVsZHNJbmRleFt0YXNrSWRdLmZpZWxkc1tjaGFuZ2VkRmllbGRdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlZmVyZW5jZWRUcmFuc2l0aW9uSWQoY2hhbmdlZEZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoISF0aGlzLnRhc2tGaWVsZHNJbmRleCkge1xuICAgICAgICAgICBjb25zdCB0YXNrRmllbGRzSW5kZXhJZCA9IE9iamVjdC5rZXlzKHRoaXMudGFza0ZpZWxkc0luZGV4KS5maW5kKHRhc2tJZCA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMudGFza0ZpZWxkc0luZGV4W3Rhc2tJZF0uZmllbGRzKS5pbmNsdWRlcyhjaGFuZ2VkRmllbGQpKTtcbiAgICAgICAgICAgcmV0dXJuIHRoaXMudGFza0ZpZWxkc0luZGV4W3Rhc2tGaWVsZHNJbmRleElkXS50cmFuc2l0aW9uSWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlZmVyZW5jZWRUYXNrSWQoY2hhbmdlZEZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoISF0aGlzLnRhc2tGaWVsZHNJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuICBPYmplY3Qua2V5cyh0aGlzLnRhc2tGaWVsZHNJbmRleCkuZmluZCh0YXNrSWQgPT5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnRhc2tGaWVsZHNJbmRleFt0YXNrSWRdLmZpZWxkcykuaW5jbHVkZXMoY2hhbmdlZEZpZWxkKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iXX0=
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1jb250ZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3Rhc2stY29udGVudC9zZXJ2aWNlcy90YXNrLWNvbnRlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBQyxlQUFlLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFTaEYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0VBQXNFLENBQUM7Ozs7OztBQU03Rzs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFnQixrQkFBa0I7SUFlcEMsWUFBZ0Msc0JBQTZDLEVBQzdDLGdCQUFpQyxFQUNqQyxVQUE0QixFQUM1QixPQUFzQjtRQUh0QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzdDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQVI5QyxxQkFBZ0IsR0FFcEIsRUFBRSxDQUFDO1FBQ0MsOEJBQXlCLEdBQXdDLEVBQUUsQ0FBQztRQU14RSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFtQixDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUN2QixJQUFJLENB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QUNyQixDQUFDOztBQTVVdUIsdUNBQW9CLEdBQUcsbUJBQW9CLENBQUE7QUFDM0MsMkNBQXdCLEdBQUcsVUFBVyxDQUFBO2dIQUg1QyxrQkFBa0I7b0hBQWxCLGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEYXRhR3JvdXB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvZGF0YS1ncm91cHMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7VGFza30gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS90YXNrJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7U25hY2tCYXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zbmFjay1iYXIvc2VydmljZXMvc25hY2stYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RW51bWVyYXRpb25GaWVsZCwgRW51bWVyYXRpb25GaWVsZFZhbHVlfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9lbnVtZXJhdGlvbi1maWVsZC9tb2RlbHMvZW51bWVyYXRpb24tZmllbGQnO1xuaW1wb3J0IHtNdWx0aWNob2ljZUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9tdWx0aWNob2ljZS1maWVsZC9tb2RlbHMvbXVsdGljaG9pY2UtZmllbGQnO1xuaW1wb3J0IHtDaGFuZ2UsIENoYW5nZWRGaWVsZHMsIEZyb250ZW5kQWN0aW9uc30gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2NoYW5nZWQtZmllbGRzJztcbmltcG9ydCB7RmllbGRDb252ZXJ0ZXJTZXJ2aWNlfSBmcm9tICcuL2ZpZWxkLWNvbnZlcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7RmllbGRUeXBlUmVzb3VyY2V9IGZyb20gJy4uL21vZGVsL2ZpZWxkLXR5cGUtcmVzb3VyY2UnO1xuaW1wb3J0IHtEeW5hbWljRW51bWVyYXRpb25GaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZW51bWVyYXRpb24tZmllbGQvbW9kZWxzL2R5bmFtaWMtZW51bWVyYXRpb24tZmllbGQnO1xuaW1wb3J0IHtWYWxpZGF0aW9ufSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9tb2RlbHMvdmFsaWRhdGlvbic7XG5pbXBvcnQge1Rhc2tFdmVudE91dGNvbWV9IGZyb20gJy4uLy4uL2V2ZW50L21vZGVsL2V2ZW50LW91dGNvbWVzL3Rhc2stb3V0Y29tZXMvdGFzay1ldmVudC1vdXRjb21lJztcbmltcG9ydCB7RGF0YUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9tb2RlbHMvYWJzdHJhY3QtZGF0YS1maWVsZCc7XG5pbXBvcnQge1Rhc2tGaWVsZHN9IGZyb20gJy4uL21vZGVsL3Rhc2stZmllbGRzJztcblxuLyoqXG4gKiBBY3RzIGFzIGEgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgQ29tcG9uZW50IHRoYXQgcmVuZGVycyBUYXNrIGNvbnRlbnQgYW5kIGl0J3MgcGFyZW50IENvbXBvbmVudC5cbiAqIEFsc28gcHJvdmlkZXMgc29tZSBnZW5lcmFsIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBuZWVkZWQgd2hlbiB3b3JraW5nIHdpdGggdGFzayBjb250ZW50LlxuICpcbiAqIE5vdGFibGUgZXhhbXBsZSBvZiBhIHBhcmVudCBDb21wb25lbnQgaXMgdGhlIHtAbGluayBBYnN0cmFjdFRhc2tQYW5lbENvbXBvbmVudH0uXG4gKlxuICogTm90YWJsZSBleGFtcGxlIG9mIGEgdGFzayBjb250ZW50IHJlbmRlcmVyIGlzIHRoZSB7QGxpbmsgQWJzdHJhY3RUYXNrQ29udGVudENvbXBvbmVudH0uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUYXNrQ29udGVudFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRlJPTlRFTkRfQUNUSU9OU19LRVkgPSAnX2Zyb250ZW5kX2FjdGlvbnMnO1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFZBTElEQVRFX0ZST05URU5EX0FDVElPTiA9ICd2YWxpZGF0ZSc7XG5cbiAgICAkc2hvdWxkQ3JlYXRlOiBSZXBsYXlTdWJqZWN0PEFycmF5PERhdGFHcm91cD4+O1xuICAgICRzaG91bGRDcmVhdGVDb3VudGVyOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcbiAgICBwcm90ZWN0ZWQgX3Rhc2s6IFRhc2s7XG4gICAgcHJvdGVjdGVkIF90YXNrRGF0YVJlbG9hZFJlcXVlc3QkOiBTdWJqZWN0PEZyb250ZW5kQWN0aW9ucz47XG4gICAgcHJvdGVjdGVkIF9pc0V4cGFuZGluZyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgICBwcml2YXRlIF90YXNrRmllbGRzSW5kZXg6IHtcbiAgICAgICAgW3Rhc2tJZDogc3RyaW5nXTogVGFza0ZpZWxkc1xuICAgIH0gPSB7fTtcbiAgICBwcml2YXRlIF9yZWZlcmVuY2VkVGFza0FuZENhc2VJZHM6IHsgW2Nhc2VJZDogc3RyaW5nXTogQXJyYXk8c3RyaW5nPiB9ID0ge307XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIF9maWVsZENvbnZlcnRlclNlcnZpY2U6IEZpZWxkQ29udmVydGVyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuJHNob3VsZENyZWF0ZSA9IG5ldyBSZXBsYXlTdWJqZWN0PEFycmF5PERhdGFHcm91cD4+KDEpO1xuICAgICAgICB0aGlzLiRzaG91bGRDcmVhdGVDb3VudGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICAgICAgICB0aGlzLl9pc0V4cGFuZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAgICAgdGhpcy5fdGFzayA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fdGFza0RhdGFSZWxvYWRSZXF1ZXN0JCA9IG5ldyBTdWJqZWN0PEZyb250ZW5kQWN0aW9ucz4oKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLiRzaG91bGRDcmVhdGUuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLiRzaG91bGRDcmVhdGUuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90YXNrRGF0YVJlbG9hZFJlcXVlc3QkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2lzRXhwYW5kaW5nJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSBUYXNrIG9iamVjdCBpZiBzZXQgYW5kIGB1bmRlZmluZWRgIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgdGFzaygpOiBUYXNrIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogU2V0dGluZyBhIFRhc2sgYWxzbyBlbWl0cyBpdCBpbnRvIHRoZSBzdHJlYW0gYWNjZXNzaWJsZSBieSB0aGUgW3Rhc2skXXtAbGluayBUYXNrQ29udGVudFNlcnZpY2UjdGFzayR9IGdldHRlciBtZXRob2QuXG4gICAgICogQHBhcmFtIHRhc2sgdGhlIFRhc2sgdGhhdCBvd25zIHRoZSBjb250ZW50IG1hbmFnZWQgYnkgdGhpcyBzZXJ2aWNlXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IHNldCB0YXNrKHRhc2s6IFRhc2spO1xuXG4gICAgLyoqXG4gICAgICogU3RyZWFtIHJldHVybnMgYSB7QGxpbmsgVGFza30gb2JqZWN0IGV2ZXJ5IHRpbWUgdGhpcyBvYmplY3QgaXMgc2V0LlxuICAgICAqXG4gICAgICogVXNlIFt0YXNrXXtAbGluayBUYXNrQ29udGVudFNlcnZpY2UjdGFza30gc2V0dGVyIG1ldGhvZCB0byBzZXQgdGhlIFRhc2suXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IGdldCB0YXNrJCgpOiBPYnNlcnZhYmxlPFRhc2s+O1xuXG4gICAgLyoqXG4gICAgICogU3RyZWFtIHRoYXQgZW1pdHMgZXZlcnkgdGltZSBhIGRhdGEgcmVsb2FkIGlzIHJlcXVlc3RlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRhc2tEYXRhUmVsb2FkUmVxdWVzdCQoKTogT2JzZXJ2YWJsZTxGcm9udGVuZEFjdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2tEYXRhUmVsb2FkUmVxdWVzdCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG5cbiAgICBnZXQgdGFza0ZpZWxkc0luZGV4KCk6IHsgW3A6IHN0cmluZ106IFRhc2tGaWVsZHMgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXNrRmllbGRzSW5kZXg7XG4gICAgfVxuXG4gICAgc2V0IHRhc2tGaWVsZHNJbmRleCh2YWx1ZTogeyBbcDogc3RyaW5nXTogVGFza0ZpZWxkcyB9KSB7XG4gICAgICAgIHRoaXMuX3Rhc2tGaWVsZHNJbmRleCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCByZWZlcmVuY2VkVGFza0FuZENhc2VJZHMoKTogeyBbcDogc3RyaW5nXTogQXJyYXk8c3RyaW5nPiB9IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZmVyZW5jZWRUYXNrQW5kQ2FzZUlkcztcbiAgICB9XG5cbiAgICBzZXQgcmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzKHZhbHVlOiB7IFtwOiBzdHJpbmddOiBBcnJheTxzdHJpbmc+IH0pIHtcbiAgICAgICAgdGhpcy5fcmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcGFuZWwgdGhhdCB0aGUgdGFzayBjb250ZW50IGlzIGNvbnRhaW5lZCBpbiBpcyBjdXJyZW50bHkgZXhwYW5kaW5nLlxuICAgICAqXG4gICAgICogSWYgdGhlIHRhc2sgY29udGVudCBpcyBub3QgY29udGFpbmVkIGluIGEgcGFuZWwsIGBpc0V4cGFuZGluZ2Agd2lsbCBiZSBhbHdheXMgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzRXhwYW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNFeHBhbmRpbmckLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGhlIHN0YXRlIG9mIHRoZSB0YXNrIGNvbnRlbnQgdG8gYGV4cGFuZGluZ2AuXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuc2lvblN0YXJ0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzRXhwYW5kaW5nJC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGhlIHN0YXRlIG9mIHRoZSB0YXNrIGNvbnRlbnQgdG8gYG5vdCBleHBhbmRpbmdgLlxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbnNpb25GaW5pc2hlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNFeHBhbmRpbmckLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB0aGUgdmFsaWRpdHkgb2YgYWxsIGRhdGEgZmllbGRzIGluIHRoZSBtYW5hZ2VkIHtAbGluayBUYXNrfS5cbiAgICAgKlxuICAgICAqIElmIHNvbWUgb2YgdGhlIGZpZWxkcyBhcmUgaW52YWxpZCB0b3VjaGVzIHRoZW0gc28gdGhlaXIgdmFsaWRhdGlvbiBlcnJvcnMgd2lsbCBhcHBlYXIgKGlmIHNldCkuXG4gICAgICogQSBzbmFja2JhciB3aWxsIGFsc28gYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLCBpbmZvcm1pbmcgdGhlbSBvZiB0aGUgZmFjdCB0aGF0IHRoZSBmaWVsZHMgYXJlIGludmFsaWQuXG4gICAgICogQHJldHVybnMgd2hldGhlciB0aGUgdGFzayBpcyB2YWxpZCBvciBub3RcbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGVUYXNrRGF0YSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrIHx8ICF0aGlzLl90YXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9ICF0aGlzLl90YXNrLmRhdGFHcm91cHMuc29tZShncm91cCA9PiBncm91cC5maWVsZHMuc29tZShmaWVsZCA9PiAhZmllbGQudmFsaWQgJiYgIWZpZWxkLmRpc2FibGVkKSk7XG4gICAgICAgIGNvbnN0IHZhbGlkRGlzYWJsZWQgPSAhdGhpcy5fdGFzay5kYXRhR3JvdXBzLnNvbWUoZ3JvdXAgPT4gZ3JvdXAuZmllbGRzLnNvbWUoZmllbGQgPT4gIWZpZWxkLnZhbGlkUmVxdWlyZWQgJiYgZmllbGQuZGlzYWJsZWQpKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5fc25hY2tCYXJTZXJ2aWNlLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5pbnZhbGlkRGF0YScpKTtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2suZGF0YUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IGdyb3VwLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IGZpZWxkLnRvdWNoID0gdHJ1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsaWREaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fc25hY2tCYXJTZXJ2aWNlLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5taXNzaW5nUmVxdWlyZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkICYmIHZhbGlkRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgaW52YWxpZCBkYXRhIG9mIHRhc2tcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFycmF5IG9mIGludmFsaWQgZGF0YWZpZWxkc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJbnZhbGlkVGFza0RhdGEoKTogQXJyYXk8RGF0YUZpZWxkPGFueT4+IHtcbiAgICAgICAgY29uc3QgaW52YWxpZEZpZWxkcyA9IFtdO1xuICAgICAgICB0aGlzLl90YXNrLmRhdGFHcm91cHMuZm9yRWFjaChncm91cCA9PiBpbnZhbGlkRmllbGRzLnB1c2goLi4uZ3JvdXAuZmllbGRzLmZpbHRlcihmaWVsZCA9PlxuICAgICAgICAgICAgKCFmaWVsZC52YWxpZCAmJiAhZmllbGQuZGlzYWJsZWQpIHx8ICghZmllbGQudmFsaWRSZXF1aXJlZCAmJiAhZmllbGQuZGlzYWJsZWQpKSkpO1xuICAgICAgICByZXR1cm4gaW52YWxpZEZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGVEeW5hbWljRW51bUZpZWxkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuX3Rhc2sgfHwgIXRoaXMuX3Rhc2suZGF0YUdyb3Vwcykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuX3Rhc2suZGF0YUdyb3Vwcy5zb21lKGdyb3VwID0+IGdyb3VwLmZpZWxkcy5zb21lKGZpZWxkID0+IGZpZWxkIGluc3RhbmNlb2YgRHluYW1pY0VudW1lcmF0aW9uRmllbGQpKTtcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5fdGFzay5kYXRhR3JvdXBzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGdyb3VwLmZpZWxkcykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZCBpbnN0YW5jZW9mIER5bmFtaWNFbnVtZXJhdGlvbkZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5jaG9pY2VzICE9PSB1bmRlZmluZWQgJiYgZmllbGQuY2hvaWNlcy5sZW5ndGggIT09IDAgJiYgZmllbGQudmFsdWUgIT09ICcnICYmIGZpZWxkLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmllbGQuY2hvaWNlcy5zb21lKGNob2ljZSA9PiBjaG9pY2Uua2V5ID09PSBmaWVsZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5iZWhhdmlvci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLl9zbmFja0JhclNlcnZpY2Uub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLm1pc3NpbmdSZXF1aXJlZCcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyB0aGUgYmxvY2tpbmcgc3RhdGUgb2YgYWxsIGZpZWxkcyBpbiB0aGUgbWFuYWdlZCBUYXNrLlxuICAgICAqIEBwYXJhbSBibG9ja2luZ1N0YXRlIHdoZXRoZXIgdGhlIGZpZWxkIHNob3VsZCBiZSBibG9ja2VkIG9yIG5vdFxuICAgICAqL1xuICAgIHB1YmxpYyBibG9ja0ZpZWxkcyhibG9ja2luZ1N0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl90YXNrICYmIHRoaXMuX3Rhc2suZGF0YUdyb3Vwcykge1xuICAgICAgICAgICAgdGhpcy5fdGFzay5kYXRhR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgICAgIGdyb3VwLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuYmxvY2sgPSBibG9ja2luZ1N0YXRlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGFzc2lnbmVlLCBzdGFydCBkYXRlIGFuZCBmaW5pc2ggZGF0ZSBmcm9tIHRoZSBtYW5hZ2VkIFRhc2suXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVN0YXRlRGF0YShldmVudE91dGNvbWU6IFRhc2tFdmVudE91dGNvbWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3Rhc2spIHtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2sudXNlciA9IGV2ZW50T3V0Y29tZS50YXNrLnVzZXI7XG4gICAgICAgICAgICB0aGlzLl90YXNrLnN0YXJ0RGF0ZSA9IGV2ZW50T3V0Y29tZS50YXNrLnN0YXJ0RGF0ZTtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2suZmluaXNoRGF0ZSA9IGV2ZW50T3V0Y29tZS50YXNrLmZpbmlzaERhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBwcm9wZXJ0aWVzIG9mIGZpZWxkcyBpbiB0aGUgbWFuYWdlZCB0YXNrIGJhc2VkIG9uIGEgZGVsdGEgb2YgY2hhbmdlcyBmcm9tIHByZXZpb3VzIHN0YXRlLlxuICAgICAqIEBwYXJhbSBjaEZpZWxkcyBvYmplY3QgY29udGFpbmluZyB0aGUgZGVsdGEgb2YgdGhlIGNoYW5nZXMgZnJvbSB0aGUgcHJldmlvdXMgc3RhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlRnJvbUNoYW5nZWRGaWVsZHMoY2hGaWVsZHM6IENoYW5nZWRGaWVsZHMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrIHx8ICF0aGlzLl90YXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyB0b2RvIGFjdGlvbnMgb3duZXIgemJ5dG/EjW7DvT9cbiAgICAgICAgY29uc3QgZnJvbnRlbmRBY3Rpb25zID0gY2hGaWVsZHMudGFza0lkID09PSB0aGlzLnRhc2suc3RyaW5nSWQgJiYgY2hGaWVsZHNbVGFza0NvbnRlbnRTZXJ2aWNlLkZST05URU5EX0FDVElPTlNfS0VZXTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjaEZpZWxkcykuZm9yRWFjaChjaGFuZ2VkRmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKCEhdGhpcy50YXNrRmllbGRzSW5kZXhbY2hGaWVsZHMudGFza0lkXSAmJiAhIXRoaXMudGFza0ZpZWxkc0luZGV4W2NoRmllbGRzLnRhc2tJZF0uZmllbGRzXG4gICAgICAgICAgICAgICAgJiYgISF0aGlzLnRhc2tGaWVsZHNJbmRleFtjaEZpZWxkcy50YXNrSWRdLmZpZWxkc1tjaGFuZ2VkRmllbGRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZChjaEZpZWxkcywgdGhpcy50YXNrRmllbGRzSW5kZXhbY2hGaWVsZHMudGFza0lkXS5maWVsZHNbY2hhbmdlZEZpZWxkXSwgZnJvbnRlbmRBY3Rpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0ZpZWxkSW5UYXNrUmVmKGNoYW5nZWRGaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrSWQgPSB0aGlzLmdldFJlZmVyZW5jZWRUYXNrSWQoY2hhbmdlZEZpZWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoISF0YXNrSWQgJiYgISF0aGlzLnRhc2tGaWVsZHNJbmRleFt0YXNrSWRdICYmICEhdGhpcy50YXNrRmllbGRzSW5kZXhbdGFza0lkXS5maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgJiYgISF0aGlzLnRhc2tGaWVsZHNJbmRleFt0YXNrSWRdLmZpZWxkc1tjaGFuZ2VkRmllbGRdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJlZmVyZW5jZWRGaWVsZChjaEZpZWxkcywgdGhpcy50YXNrRmllbGRzSW5kZXhbdGFza0lkXS5maWVsZHNbY2hhbmdlZEZpZWxkXSwgZnJvbnRlbmRBY3Rpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4kc2hvdWxkQ3JlYXRlLm5leHQodGhpcy5fdGFzay5kYXRhR3JvdXBzKTtcbiAgICAgICAgdGhpcy5wZXJmb3JtRnJvbnRlbmRBY3Rpb24oZnJvbnRlbmRBY3Rpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUZpZWxkKGNoRmllbGRzOiBDaGFuZ2VkRmllbGRzLCBmaWVsZDogRGF0YUZpZWxkPGFueT4sIGZyb250ZW5kQWN0aW9uczogQ2hhbmdlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9maWVsZENvbnZlcnRlclNlcnZpY2UucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5UQVNLX1JFRikge1xuICAgICAgICAgICAgdGhpcy5fdGFza0RhdGFSZWxvYWRSZXF1ZXN0JC5uZXh0KGZyb250ZW5kQWN0aW9ucyA/IGZyb250ZW5kQWN0aW9ucyA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cGRhdGVkRmllbGQgPSBjaEZpZWxkc1tmaWVsZC5zdHJpbmdJZF07XG4gICAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZWRGaWVsZCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0eXBlJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHlwZSBpcyBqdXN0IGFuIGluZm9ybWF0aW9uLCBub3QgYW4gdXBkYXRlLiBBIGZpZWxkIGNhbm5vdCBjaGFuZ2UgaXRzIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBjb250aW51ZSAtIHRoZSBmaWVsZCBkb2VzIG5vdCBuZWVkIHVwZGF0aW5nLCBzaW5jZSBub3RoaW5nIGNoYW5nZWRcbiAgICAgICAgICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlV2l0aG91dENoYW5nZSh0aGlzLl9maWVsZENvbnZlcnRlclNlcnZpY2UuZm9ybWF0VmFsdWVGcm9tQmFja2VuZChmaWVsZCwgdXBkYXRlZEZpZWxkW2tleV0pKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnYmVoYXZpb3InOlxuICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZEZpZWxkLmJlaGF2aW9yW3RoaXMuX3Rhc2sudHJhbnNpdGlvbklkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBOR1NELTQ4OSBmaXggYmVoYXZpb3IgcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuYmVoYXZpb3IgPSB1cGRhdGVkRmllbGQuYmVoYXZpb3JbdGhpcy5fdGFzay50cmFuc2l0aW9uSWRdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbklkID0gdGhpcy5nZXRSZWZlcmVuY2VkVHJhbnNpdGlvbklkKGZpZWxkLnN0cmluZ0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXRyYW5zaXRpb25JZCAmJiB0cmFuc2l0aW9uSWQgIT09ICcnICYmIHVwZGF0ZWRGaWVsZC5iZWhhdmlvclt0cmFuc2l0aW9uSWRdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmJlaGF2aW9yID0gdXBkYXRlZEZpZWxkLmJlaGF2aW9yW3RyYW5zaXRpb25JZF07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdjaG9pY2VzJzpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2hvaWNlczogQXJyYXk8RW51bWVyYXRpb25GaWVsZFZhbHVlPiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZEZpZWxkLmNob2ljZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkLmNob2ljZXMuZm9yRWFjaChpdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hvaWNlcy5wdXNoKHtrZXk6IGl0LCB2YWx1ZTogaXR9IGFzIEVudW1lcmF0aW9uRmllbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZWRGaWVsZC5jaG9pY2VzKS5mb3JFYWNoKGNob2ljZUtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hvaWNlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaG9pY2VLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1cGRhdGVkRmllbGQuY2hvaWNlc1tjaG9pY2VLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBFbnVtZXJhdGlvbkZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIEVudW1lcmF0aW9uRmllbGQgfCBNdWx0aWNob2ljZUZpZWxkKS5jaG9pY2VzID0gbmV3Q2hvaWNlcztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModXBkYXRlZEZpZWxkLm9wdGlvbnMpLmZvckVhY2gob3B0aW9uS2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMucHVzaCh7a2V5OiBvcHRpb25LZXksIHZhbHVlOiB1cGRhdGVkRmllbGQub3B0aW9uc1tvcHRpb25LZXldfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAoZmllbGQgYXMgRW51bWVyYXRpb25GaWVsZCB8IE11bHRpY2hvaWNlRmllbGQpLmNob2ljZXMgPSBuZXdPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd2YWxpZGF0aW9ucyc6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnJlcGxhY2VWYWxpZGF0aW9ucyh1cGRhdGVkRmllbGQudmFsaWRhdGlvbnMubWFwKGl0ID0+IChpdCBhcyBWYWxpZGF0aW9uKSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBmaWVsZFtrZXldID0gdXBkYXRlZEZpZWxkW2tleV07XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkLnVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVJlZmVyZW5jZWRGaWVsZChjaEZpZWxkczogQ2hhbmdlZEZpZWxkcywgZmllbGQ6IERhdGFGaWVsZDxhbnk+LCBmcm9udGVuZEFjdGlvbnM6IENoYW5nZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZmllbGRDb252ZXJ0ZXJTZXJ2aWNlLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVEFTS19SRUYpIHtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tEYXRhUmVsb2FkUmVxdWVzdCQubmV4dChmcm9udGVuZEFjdGlvbnMgPyBmcm9udGVuZEFjdGlvbnMgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaWVsZCA9IGNoRmllbGRzW2ZpZWxkLnN0cmluZ0lkXTtcbiAgICAgICAgT2JqZWN0LmtleXModXBkYXRlZEZpZWxkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2JlaGF2aW9yJzpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbklkID0gdGhpcy5nZXRSZWZlcmVuY2VkVHJhbnNpdGlvbklkKGZpZWxkLnN0cmluZ0lkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhdHJhbnNpdGlvbklkICYmIHRyYW5zaXRpb25JZCAhPT0gJycgJiYgdXBkYXRlZEZpZWxkLmJlaGF2aW9yW3RyYW5zaXRpb25JZF0pXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5iZWhhdmlvciA9IHVwZGF0ZWRGaWVsZC5iZWhhdmlvclt0cmFuc2l0aW9uSWRdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBmaWVsZFtrZXldID0gdXBkYXRlZEZpZWxkW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZC51cGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgdGhlIHNwZWNpZmljIGZyb250ZW5kIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEEgcHJvdG90eXBlIGltcGxlbWVudGF0aW9uIG9mIGZyb250ZW5kIGFjdGlvbnMuXG4gICAgICpcbiAgICAgKiBUaGUgc3BlY2lmaWNzIGFyZSBzdWJqZWN0IHRvIGNoYW5nZS4gSXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB0aGlzIG1ldGhvZCB3aWxsIGJlIG1vdmVkIHRvIGEgZGlmZmVyZW50IHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZnJvbnRlbmRBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQuXG4gICAgICovXG4gICAgcHVibGljIHBlcmZvcm1Gcm9udGVuZEFjdGlvbihmcm9udGVuZEFjdGlvbjogRnJvbnRlbmRBY3Rpb25zKTogdm9pZCB7XG4gICAgICAgIGlmIChmcm9udGVuZEFjdGlvbiAmJiBmcm9udGVuZEFjdGlvbi50eXBlID09PSBUYXNrQ29udGVudFNlcnZpY2UuVkFMSURBVEVfRlJPTlRFTkRfQUNUSU9OKSB7XG4gICAgICAgICAgICB0aW1lcigpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnZhbGlkYXRlVGFza0RhdGEoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVmZXJlbmNlZEZpZWxkVGFzayhmaWVsZCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnRhc2tGaWVsZHNJbmRleCkuZmluZCh0YXNrSWQgPT4gT2JqZWN0LmtleXModGhpcy50YXNrRmllbGRzSW5kZXhbdGFza0lkXS5maWVsZHMpLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0ZpZWxkSW5UYXNrUmVmKGNoYW5nZWRGaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudGFza0ZpZWxkc0luZGV4ICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnRhc2tGaWVsZHNJbmRleClcbiAgICAgICAgICAgIC5zb21lKHRhc2tJZCA9PiB0YXNrSWQgIT09IHRoaXMudGFzay5zdHJpbmdJZCAmJiB0aGlzLnRhc2tGaWVsZHNJbmRleFt0YXNrSWRdLmZpZWxkc1tjaGFuZ2VkRmllbGRdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlZmVyZW5jZWRUcmFuc2l0aW9uSWQoY2hhbmdlZEZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoISF0aGlzLnRhc2tGaWVsZHNJbmRleCkge1xuICAgICAgICAgICBjb25zdCB0YXNrRmllbGRzSW5kZXhJZCA9IHRoaXMuZ2V0UmVmZXJlbmNlZEZpZWxkVGFzayhjaGFuZ2VkRmllbGQpO1xuICAgICAgICAgICByZXR1cm4gdGhpcy50YXNrRmllbGRzSW5kZXhbdGFza0ZpZWxkc0luZGV4SWRdLnRyYW5zaXRpb25JZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVmZXJlbmNlZFRhc2tJZChjaGFuZ2VkRmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghIXRoaXMudGFza0ZpZWxkc0luZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gIE9iamVjdC5rZXlzKHRoaXMudGFza0ZpZWxkc0luZGV4KS5maW5kKHRhc2tJZCA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMudGFza0ZpZWxkc0luZGV4W3Rhc2tJZF0uZmllbGRzKS5pbmNsdWRlcyhjaGFuZ2VkRmllbGQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbiJdfQ==