@mediusinc/mng-commons 0.0.1-rc.2

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 (187) hide show
  1. package/README.md +19 -0
  2. package/esm2020/lib/api/models/builders/query-param.builder.mjs +49 -0
  3. package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -0
  4. package/esm2020/lib/api/models/filter-param.model.mjs +46 -0
  5. package/esm2020/lib/api/models/index.mjs +9 -0
  6. package/esm2020/lib/api/models/mappers.mjs +17 -0
  7. package/esm2020/lib/api/models/query-mode.model.mjs +19 -0
  8. package/esm2020/lib/api/models/query-param.model.mjs +69 -0
  9. package/esm2020/lib/api/models/query-result.model.mjs +45 -0
  10. package/esm2020/lib/api/models/serialization.model.mjs +2 -0
  11. package/esm2020/lib/api/services/abstract-crud-api.service.mjs +72 -0
  12. package/esm2020/lib/api/services/index.mjs +2 -0
  13. package/esm2020/lib/api/utils/index.mjs +3 -0
  14. package/esm2020/lib/api/utils/medius-rest.util.mjs +70 -0
  15. package/esm2020/lib/api/utils/object-serializer.util.mjs +226 -0
  16. package/esm2020/lib/components/action/action.component.mjs +63 -0
  17. package/esm2020/lib/components/action/dialog/action-dialog.component.mjs +148 -0
  18. package/esm2020/lib/components/action/index.mjs +4 -0
  19. package/esm2020/lib/components/action/route/action-route.component.mjs +144 -0
  20. package/esm2020/lib/components/form/editor/form-editor.component.mjs +140 -0
  21. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +58 -0
  22. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +51 -0
  23. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +16 -0
  24. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +26 -0
  25. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +94 -0
  26. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +124 -0
  27. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +17 -0
  28. package/esm2020/lib/components/form/formly/fields/index.mjs +8 -0
  29. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +17 -0
  30. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +16 -0
  31. package/esm2020/lib/components/form/formly/wrappers/index.mjs +3 -0
  32. package/esm2020/lib/components/form/index.mjs +2 -0
  33. package/esm2020/lib/components/layout/app.breadcrumb.component.mjs +27 -0
  34. package/esm2020/lib/components/layout/app.footer.component.mjs +35 -0
  35. package/esm2020/lib/components/layout/app.main.component.mjs +25 -0
  36. package/esm2020/lib/components/layout/app.main.component.service.mjs +133 -0
  37. package/esm2020/lib/components/layout/app.menu.component.mjs +38 -0
  38. package/esm2020/lib/components/layout/app.menuitem.component.mjs +243 -0
  39. package/esm2020/lib/components/layout/app.topbar.component.mjs +135 -0
  40. package/esm2020/lib/components/layout/index.mjs +7 -0
  41. package/esm2020/lib/components/tableview/index.mjs +4 -0
  42. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +31 -0
  43. package/esm2020/lib/components/tableview/table/table.component.mjs +173 -0
  44. package/esm2020/lib/components/tableview/tableview.component.mjs +82 -0
  45. package/esm2020/lib/components/tableview/tableview.component.service.mjs +18 -0
  46. package/esm2020/lib/config/formly.config.mjs +165 -0
  47. package/esm2020/lib/config/index.mjs +2 -0
  48. package/esm2020/lib/directives/index.mjs +2 -0
  49. package/esm2020/lib/directives/template.directive.mjs +25 -0
  50. package/esm2020/lib/mng-commons.module.mjs +338 -0
  51. package/esm2020/lib/models/action/action.model.mjs +58 -0
  52. package/esm2020/lib/models/action/index.mjs +2 -0
  53. package/esm2020/lib/models/config/index.mjs +2 -0
  54. package/esm2020/lib/models/config/mng-config.model.mjs +3 -0
  55. package/esm2020/lib/models/descriptors/action-descriptor.model.mjs +283 -0
  56. package/esm2020/lib/models/descriptors/editor-descriptor.model.mjs +647 -0
  57. package/esm2020/lib/models/descriptors/index.mjs +6 -0
  58. package/esm2020/lib/models/descriptors/model-descriptor.model.mjs +34 -0
  59. package/esm2020/lib/models/descriptors/table-descriptor.model.mjs +123 -0
  60. package/esm2020/lib/models/descriptors/tableview-descriptor.model.mjs +124 -0
  61. package/esm2020/lib/models/events/editor-event.model.mjs +14 -0
  62. package/esm2020/lib/models/events/index.mjs +3 -0
  63. package/esm2020/lib/models/events/table-event.model.mjs +16 -0
  64. package/esm2020/lib/models/interfaces/confirmation-service.model.mjs +2 -0
  65. package/esm2020/lib/models/interfaces/index.mjs +2 -0
  66. package/esm2020/lib/models/providers/data-provider.model.mjs +86 -0
  67. package/esm2020/lib/models/providers/index.mjs +2 -0
  68. package/esm2020/lib/models/types/index.mjs +3 -0
  69. package/esm2020/lib/models/types/type.decorator.mjs +8 -0
  70. package/esm2020/lib/models/types/type.model.mjs +2 -0
  71. package/esm2020/lib/models/validators/field.validator.mjs +21 -0
  72. package/esm2020/lib/models/validators/index.mjs +2 -0
  73. package/esm2020/lib/pipes/index.mjs +2 -0
  74. package/esm2020/lib/pipes/property-path.pipe.mjs +36 -0
  75. package/esm2020/lib/services/action.service.mjs +239 -0
  76. package/esm2020/lib/services/breadcrumb.service.mjs +21 -0
  77. package/esm2020/lib/services/configuration.service.mjs +77 -0
  78. package/esm2020/lib/services/index.mjs +7 -0
  79. package/esm2020/lib/services/menu.service.mjs +26 -0
  80. package/esm2020/lib/services/navigation.service.mjs +49 -0
  81. package/esm2020/lib/services/providers/config-service.provider.mjs +12 -0
  82. package/esm2020/lib/services/providers/formly-config.provider.mjs +31 -0
  83. package/esm2020/lib/services/providers/index.mjs +3 -0
  84. package/esm2020/lib/services/settings.service.mjs +40 -0
  85. package/esm2020/lib/utils/editor-formly.util.mjs +165 -0
  86. package/esm2020/lib/utils/i18n.util.mjs +75 -0
  87. package/esm2020/lib/utils/index.mjs +5 -0
  88. package/esm2020/lib/utils/model.util.mjs +38 -0
  89. package/esm2020/lib/utils/type.util.mjs +43 -0
  90. package/esm2020/mediusinc-mng-commons.mjs +5 -0
  91. package/esm2020/public-api.mjs +33 -0
  92. package/fesm2015/mediusinc-mng-commons.mjs +5056 -0
  93. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -0
  94. package/fesm2020/mediusinc-mng-commons.mjs +5012 -0
  95. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -0
  96. package/lib/api/models/builders/query-param.builder.d.ts +11 -0
  97. package/lib/api/models/filter-match-type.model.d.ts +21 -0
  98. package/lib/api/models/filter-param.model.d.ts +23 -0
  99. package/lib/api/models/index.d.ts +8 -0
  100. package/lib/api/models/mappers.d.ts +6 -0
  101. package/lib/api/models/query-mode.model.d.ts +16 -0
  102. package/lib/api/models/query-param.model.d.ts +31 -0
  103. package/lib/api/models/query-result.model.d.ts +36 -0
  104. package/lib/api/models/serialization.model.d.ts +8 -0
  105. package/lib/api/services/abstract-crud-api.service.d.ts +23 -0
  106. package/lib/api/services/index.d.ts +1 -0
  107. package/lib/api/utils/index.d.ts +2 -0
  108. package/lib/api/utils/medius-rest.util.d.ts +6 -0
  109. package/lib/api/utils/object-serializer.util.d.ts +30 -0
  110. package/lib/components/action/action.component.d.ts +36 -0
  111. package/lib/components/action/dialog/action-dialog.component.d.ts +48 -0
  112. package/lib/components/action/index.d.ts +3 -0
  113. package/lib/components/action/route/action-route.component.d.ts +32 -0
  114. package/lib/components/form/editor/form-editor.component.d.ts +37 -0
  115. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +21 -0
  116. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +19 -0
  117. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +6 -0
  118. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +12 -0
  119. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +17 -0
  120. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +36 -0
  121. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -0
  122. package/lib/components/form/formly/fields/index.d.ts +7 -0
  123. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +8 -0
  124. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +8 -0
  125. package/lib/components/form/formly/wrappers/index.d.ts +2 -0
  126. package/lib/components/form/index.d.ts +1 -0
  127. package/lib/components/layout/app.breadcrumb.component.d.ts +16 -0
  128. package/lib/components/layout/app.footer.component.d.ts +8 -0
  129. package/lib/components/layout/app.main.component.d.ts +12 -0
  130. package/lib/components/layout/app.main.component.service.d.ts +40 -0
  131. package/lib/components/layout/app.menu.component.d.ts +14 -0
  132. package/lib/components/layout/app.menuitem.component.d.ts +31 -0
  133. package/lib/components/layout/app.topbar.component.d.ts +16 -0
  134. package/lib/components/layout/index.d.ts +6 -0
  135. package/lib/components/tableview/index.d.ts +3 -0
  136. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +15 -0
  137. package/lib/components/tableview/table/table.component.d.ts +47 -0
  138. package/lib/components/tableview/tableview.component.d.ts +36 -0
  139. package/lib/components/tableview/tableview.component.service.d.ts +11 -0
  140. package/lib/config/formly.config.d.ts +8 -0
  141. package/lib/config/index.d.ts +1 -0
  142. package/lib/directives/index.d.ts +1 -0
  143. package/lib/directives/template.directive.d.ts +11 -0
  144. package/lib/mng-commons.module.d.ts +74 -0
  145. package/lib/models/action/action.model.d.ts +53 -0
  146. package/lib/models/action/index.d.ts +1 -0
  147. package/lib/models/config/index.d.ts +1 -0
  148. package/lib/models/config/mng-config.model.d.ts +19 -0
  149. package/lib/models/descriptors/action-descriptor.model.d.ts +124 -0
  150. package/lib/models/descriptors/editor-descriptor.model.d.ts +248 -0
  151. package/lib/models/descriptors/index.d.ts +5 -0
  152. package/lib/models/descriptors/model-descriptor.model.d.ts +15 -0
  153. package/lib/models/descriptors/table-descriptor.model.d.ts +45 -0
  154. package/lib/models/descriptors/tableview-descriptor.model.d.ts +38 -0
  155. package/lib/models/events/editor-event.model.d.ts +11 -0
  156. package/lib/models/events/index.d.ts +2 -0
  157. package/lib/models/events/table-event.model.d.ts +17 -0
  158. package/lib/models/interfaces/confirmation-service.model.d.ts +6 -0
  159. package/lib/models/interfaces/index.d.ts +1 -0
  160. package/lib/models/providers/data-provider.model.d.ts +62 -0
  161. package/lib/models/providers/index.d.ts +1 -0
  162. package/lib/models/types/index.d.ts +2 -0
  163. package/lib/models/types/type.decorator.d.ts +2 -0
  164. package/lib/models/types/type.model.d.ts +10 -0
  165. package/lib/models/validators/field.validator.d.ts +18 -0
  166. package/lib/models/validators/index.d.ts +1 -0
  167. package/lib/pipes/index.d.ts +1 -0
  168. package/lib/pipes/property-path.pipe.d.ts +7 -0
  169. package/lib/services/action.service.d.ts +92 -0
  170. package/lib/services/breadcrumb.service.d.ts +9 -0
  171. package/lib/services/configuration.service.d.ts +35 -0
  172. package/lib/services/index.d.ts +6 -0
  173. package/lib/services/menu.service.d.ts +11 -0
  174. package/lib/services/navigation.service.d.ts +14 -0
  175. package/lib/services/providers/config-service.provider.d.ts +5 -0
  176. package/lib/services/providers/formly-config.provider.d.ts +4 -0
  177. package/lib/services/providers/index.d.ts +2 -0
  178. package/lib/services/settings.service.d.ts +18 -0
  179. package/lib/utils/editor-formly.util.d.ts +9 -0
  180. package/lib/utils/i18n.util.d.ts +14 -0
  181. package/lib/utils/index.d.ts +4 -0
  182. package/lib/utils/model.util.d.ts +5 -0
  183. package/lib/utils/type.util.d.ts +15 -0
  184. package/mediusinc-mng-commons-0.0.1-rc.2.tgz +0 -0
  185. package/mediusinc-mng-commons.d.ts +5 -0
  186. package/package.json +38 -0
  187. package/public-api.d.ts +22 -0
@@ -0,0 +1,58 @@
1
+ export class ActionExecContext {
2
+ constructor(dataProvider, serviceInstance, data, sourceComponent = null, tableview = null) {
3
+ this.dataProvider = dataProvider;
4
+ this.serviceInstance = serviceInstance;
5
+ this.data = data;
6
+ this.sourceComponent = sourceComponent;
7
+ this.tableview = tableview;
8
+ }
9
+ }
10
+ export class ActionError {
11
+ constructor(error, // error details
12
+ dismissed = false // by user
13
+ ) {
14
+ this.error = error;
15
+ this.dismissed = dismissed;
16
+ }
17
+ }
18
+ export class ActionRunResult {
19
+ constructor(context, result, error) {
20
+ this.context = context;
21
+ this.result = result;
22
+ this.error = error;
23
+ }
24
+ }
25
+ export class ActionActivationResult {
26
+ constructor(runResult, dialogRef) {
27
+ this.runResult = runResult;
28
+ this.dialogRef = dialogRef;
29
+ }
30
+ get runContext() {
31
+ return this.runResult ? this.runResult.context : null;
32
+ }
33
+ get result() {
34
+ return this.runResult ? this.runResult.result : null;
35
+ }
36
+ get error() {
37
+ return this.runResult ? this.runResult.error : null;
38
+ }
39
+ }
40
+ export class ActionTriggerResult {
41
+ constructor(activationResult, routerNavigation) {
42
+ this.activationResult = activationResult;
43
+ this.routerNavigation = routerNavigation;
44
+ }
45
+ get runContext() {
46
+ return this.activationResult ? this.activationResult.runResult : null;
47
+ }
48
+ get result() {
49
+ return this.activationResult ? this.activationResult.result : null;
50
+ }
51
+ get error() {
52
+ return this.activationResult ? this.activationResult.error : null;
53
+ }
54
+ get dialogRef() {
55
+ return this.activationResult ? this.activationResult.dialogRef : null;
56
+ }
57
+ }
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW5nLWNvbW1vbnMvc3JjL2xpYi9tb2RlbHMvYWN0aW9uL2FjdGlvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLE9BQU8saUJBQWlCO0lBQzFCLFlBQ29CLFlBQWlCLEVBQ2pCLGVBQW1CLEVBQ25CLElBSWYsRUFDZSxrQkFBdUIsSUFBSSxFQUMzQixZQUFrRCxJQUFJO1FBUnRELGlCQUFZLEdBQVosWUFBWSxDQUFLO1FBQ2pCLG9CQUFlLEdBQWYsZUFBZSxDQUFJO1FBQ25CLFNBQUksR0FBSixJQUFJLENBSW5CO1FBQ2Usb0JBQWUsR0FBZixlQUFlLENBQVk7UUFDM0IsY0FBUyxHQUFULFNBQVMsQ0FBNkM7SUFDdkUsQ0FBQztDQUNQO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFDcEIsWUFDb0IsS0FBVSxFQUFHLGdCQUFnQjtJQUM3QixZQUFxQixLQUFLLENBQUMsVUFBVTs7UUFEckMsVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNWLGNBQVMsR0FBVCxTQUFTLENBQWlCO0lBQzNDLENBQUM7Q0FDUDtBQUVELE1BQU0sT0FBTyxlQUFlO0lBQ3hCLFlBQ29CLE9BQXFDLEVBQ3JDLE1BQVUsRUFDVixLQUFtQjtRQUZuQixZQUFPLEdBQVAsT0FBTyxDQUE4QjtRQUNyQyxXQUFNLEdBQU4sTUFBTSxDQUFJO1FBQ1YsVUFBSyxHQUFMLEtBQUssQ0FBYztJQUNwQyxDQUFDO0NBQ1A7QUFFRCxNQUFNLE9BQU8sc0JBQXNCO0lBQy9CLFlBQ29CLFNBQXFDLEVBQ3JDLFNBQTRCO1FBRDVCLGNBQVMsR0FBVCxTQUFTLENBQTRCO1FBQ3JDLGNBQVMsR0FBVCxTQUFTLENBQW1CO0lBQzdDLENBQUM7SUFFSixJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFELENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekQsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN4RCxDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sbUJBQW1CO0lBQzVCLFlBQ29CLGdCQUFtRCxFQUNuRCxnQkFBc0M7UUFEdEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQztRQUNuRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXNCO0lBQ3ZELENBQUM7SUFFSixJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRSxDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEeW5hbWljRGlhbG9nUmVmfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtJZFR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7SURhdGFQcm92aWRlcn0gZnJvbSAnLi4vcHJvdmlkZXJzJztcbmltcG9ydCB7VGFibGV2aWV3Q29tcG9uZW50U2VydmljZX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIERQIGV4dGVuZHMgSURhdGFQcm92aWRlcjxULCBTPj4ge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YVByb3ZpZGVyPzogRFAsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlSW5zdGFuY2U/OiBTLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YT86IHtcbiAgICAgICAgICAgIGl0ZW0/OiBUO1xuICAgICAgICAgICAgaXRlbUlkPzogSWRUeXBlO1xuICAgICAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzb3VyY2VDb21wb25lbnQ6IGFueSA9IG51bGwsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSB0YWJsZXZpZXc6IFRhYmxldmlld0NvbXBvbmVudFNlcnZpY2U8VCwgUz58bnVsbCA9IG51bGxcbiAgICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25FcnJvciB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlcnJvcjogYW55LCAgLy8gZXJyb3IgZGV0YWlsc1xuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZGlzbWlzc2VkOiBib29sZWFuID0gZmFsc2UgLy8gYnkgdXNlclxuICAgICkge31cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvblJ1blJlc3VsdDxULCBTLCBEUCBleHRlbmRzIElEYXRhUHJvdmlkZXI8VCwgUz4+IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ/OiBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBEUD4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSByZXN1bHQ/OiBULFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZXJyb3I/OiBBY3Rpb25FcnJvclxuICAgICkge31cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkFjdGl2YXRpb25SZXN1bHQ8VCwgUywgRFAgZXh0ZW5kcyBJRGF0YVByb3ZpZGVyPFQsIFM+PiB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBydW5SZXN1bHQ/OiBBY3Rpb25SdW5SZXN1bHQ8VCwgUywgRFA+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZlxuICAgICkge31cblxuICAgIHB1YmxpYyBnZXQgcnVuQ29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuUmVzdWx0ID8gdGhpcy5ydW5SZXN1bHQuY29udGV4dCA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXN1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJ1blJlc3VsdCA/IHRoaXMucnVuUmVzdWx0LnJlc3VsdCA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuUmVzdWx0ID8gdGhpcy5ydW5SZXN1bHQuZXJyb3IgOiBudWxsO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvblRyaWdnZXJSZXN1bHQ8VCwgUywgRFAgZXh0ZW5kcyBJRGF0YVByb3ZpZGVyPFQsIFM+PiB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBhY3RpdmF0aW9uUmVzdWx0PzogQWN0aW9uQWN0aXZhdGlvblJlc3VsdDxULCBTLCBEUD4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSByb3V0ZXJOYXZpZ2F0aW9uPzogT2JzZXJ2YWJsZTxib29sZWFuPlxuICAgICkge31cblxuICAgIHB1YmxpYyBnZXQgcnVuQ29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGlvblJlc3VsdCA/IHRoaXMuYWN0aXZhdGlvblJlc3VsdC5ydW5SZXN1bHQgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVzdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmF0aW9uUmVzdWx0ID8gdGhpcy5hY3RpdmF0aW9uUmVzdWx0LnJlc3VsdCA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGlvblJlc3VsdCA/IHRoaXMuYWN0aXZhdGlvblJlc3VsdC5lcnJvciA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaWFsb2dSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2YXRpb25SZXN1bHQgPyB0aGlzLmFjdGl2YXRpb25SZXN1bHQuZGlhbG9nUmVmIDogbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkRhdGEgPSB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './action.model';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL21vZGVscy9hY3Rpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWN0aW9uLm1vZGVsJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './mng-config.model';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL21vZGVscy9jb25maWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbW5nLWNvbmZpZy5tb2RlbCc7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const MNG_MODULE_CONFIG_IT = new InjectionToken('MngModuleConfig');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW5nLWNvbmZpZy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21uZy1jb21tb25zL3NyYy9saWIvbW9kZWxzL2NvbmZpZy9tbmctY29uZmlnLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJN0MsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxjQUFjLENBQWtCLGlCQUFpQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuZXhwb3J0IGNvbnN0IE1OR19NT0RVTEVfQ09ORklHX0lUID0gbmV3IEluamVjdGlvblRva2VuPE1uZ01vZHVsZUNvbmZpZz4oJ01uZ01vZHVsZUNvbmZpZycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1uZ01vZHVsZUNvbmZpZyB7XG4gICAgY29uZmlndXJhdGlvbj86IHtcbiAgICAgICAgcHJvamVjdEVudmlyb25tZW50PzogYW55O1xuICAgICAgICBqc29uU291cmNlPzogc3RyaW5nO1xuICAgICAgICBza2lwSnNvblNvdXJjZUluaXQ/OiBib29sZWFuO1xuICAgIH0sXG4gICAgZm9ybWx5Pzoge1xuICAgICAgICBza2lwPzogYm9vbGVhbjtcbiAgICAgICAgbWVyZ2U/OiBib29sZWFuO1xuICAgICAgICB0eXBlcz86IGFueVtdO1xuICAgICAgICB3cmFwcGVycz86IGFueVtdO1xuICAgICAgICB2YWxpZGF0b3JzPzogYW55W107XG4gICAgICAgIGdldFZhbGlkYXRpb25NZXNzYWdlcz86ICh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpID0+IGFueVtdO1xuICAgIH0sXG4gICAgc2tpcE9iamVjdFNlcmlhbGl6ZXI/OiBib29sZWFuXG59XG4iXX0=
@@ -0,0 +1,283 @@
1
+ import { of, throwError } from 'rxjs';
2
+ import { TypeUtil } from '../../utils';
3
+ export class ActionDescriptor {
4
+ // TODO: messages on end
5
+ // TODO: on action finish
6
+ constructor(model, actionName, parentType, parentProperty) {
7
+ this._type = ActionTypeEnum.Direct;
8
+ this._activationTrigger = ActionActivationTriggerEnum.OnClick;
9
+ this._position = ActionPositionEnum.ToolbarRight;
10
+ this._level = ActionLevelEnum.Default;
11
+ this._routeUrl = null;
12
+ this._className = '';
13
+ this._hasRunConfirmation = false;
14
+ this._model = model;
15
+ this._actionName = actionName;
16
+ if ((parentType && !parentProperty) || (!parentProperty && parentProperty)) {
17
+ throw new Error(`Provide both the parent type and parent property or none: ${parentType}, ${parentProperty}.`);
18
+ }
19
+ this._parentType = parentType;
20
+ this._parentTypeName = parentType ? TypeUtil.findTypeName(parentType) : undefined;
21
+ this._parentProperty = parentProperty;
22
+ this._i18nModelActionBaseKey = this._parentTypeName
23
+ ? `${this._parentTypeName}.actions.${this._parentProperty}_${actionName}`
24
+ : `${this._model.typeName}.actions.${actionName}`;
25
+ }
26
+ get model() {
27
+ return this._model;
28
+ }
29
+ get parentTypeName() {
30
+ return this._parentTypeName;
31
+ }
32
+ get parentProperty() {
33
+ return this._parentProperty;
34
+ }
35
+ get i18nModelActionBaseKey() {
36
+ return this._i18nModelActionBaseKey;
37
+ }
38
+ get type() {
39
+ return this._type;
40
+ }
41
+ get activationTrigger() {
42
+ return this._activationTrigger;
43
+ }
44
+ get position() {
45
+ return this._position;
46
+ }
47
+ get level() {
48
+ return this._level;
49
+ }
50
+ get routeUrl() {
51
+ return this._routeUrl;
52
+ }
53
+ get title() {
54
+ return this._title;
55
+ }
56
+ get icon() {
57
+ return this._icon;
58
+ }
59
+ get runFunction() {
60
+ if (!this._runFunction) {
61
+ throw new Error('Run function is not defined and cannot be invoked');
62
+ }
63
+ return this._runFunction;
64
+ }
65
+ get isVisibleFunction() {
66
+ return this._isVisibleFunction;
67
+ }
68
+ get isEnabledFunction() {
69
+ return this._isEnabledFunction;
70
+ }
71
+ get actionName() {
72
+ return this._actionName;
73
+ }
74
+ get className() {
75
+ return this._className;
76
+ }
77
+ get hasRunConfirmation() {
78
+ return this._hasRunConfirmation;
79
+ }
80
+ get runConfirmationIcon() {
81
+ return this._runConfirmationIcon;
82
+ }
83
+ get runConfirmationTitle() {
84
+ return this._runConfirmationTitle;
85
+ }
86
+ get runConfirmationMessage() {
87
+ return this._runConfirmationMessage;
88
+ }
89
+ get runConfirmationAcceptTitle() {
90
+ return this._runConfirmationAcceptTitle;
91
+ }
92
+ get runConfirmationRejectTitle() {
93
+ return this._runConfirmationRejectTitle;
94
+ }
95
+ withRunFunction(fn) {
96
+ this._runFunction = fn;
97
+ return this;
98
+ }
99
+ withIsVisibleFunction(fn) {
100
+ this._isVisibleFunction = fn;
101
+ return this;
102
+ }
103
+ withIsEnabledFunction(fn) {
104
+ this._isEnabledFunction = fn;
105
+ return this;
106
+ }
107
+ withRouteTrigger(routeUrl) {
108
+ this._activationTrigger = ActionActivationTriggerEnum.OnRoute;
109
+ this._routeUrl = routeUrl;
110
+ return this;
111
+ }
112
+ withLevel(level) {
113
+ this._level = level;
114
+ return this;
115
+ }
116
+ /**
117
+ * Overrides default title key with model action key (${model.typeName}.actions.${actionName}). Not relevant if parentType name is provided.
118
+ */
119
+ withModelTitle() {
120
+ this._title = `${this._i18nModelActionBaseKey}.title`;
121
+ return this;
122
+ }
123
+ /**
124
+ * Overrides default title key (${actionName}.title). If null, no title will be shown.
125
+ * @param title Title i18n key or title.
126
+ */
127
+ withTitle(title) {
128
+ this._title = title;
129
+ return this;
130
+ }
131
+ withIcon(icon) {
132
+ this._icon = icon;
133
+ return this;
134
+ }
135
+ withClassName(className) {
136
+ this._className = className;
137
+ return this;
138
+ }
139
+ withPosition(position) {
140
+ this._position = position;
141
+ return this;
142
+ }
143
+ withRunConfirmation(icon = 'pi pi-exclamation-triangle', title, message, acceptTitle, rejectTitle) {
144
+ this._hasRunConfirmation = true;
145
+ this._runConfirmationIcon = icon;
146
+ this._runConfirmationTitle = title;
147
+ this._runConfirmationMessage = message;
148
+ this._runConfirmationAcceptTitle = acceptTitle;
149
+ this._runConfirmationRejectTitle = rejectTitle;
150
+ return this;
151
+ }
152
+ }
153
+ export class ActionEditorDescriptor extends ActionDescriptor {
154
+ constructor(editorDescriptor, actionName, parentType, parentProperty) {
155
+ super(editorDescriptor.model, actionName, parentType, parentProperty);
156
+ this._editorTitle = undefined;
157
+ this._type = ActionTypeEnum.Editor;
158
+ this._editorDescriptor = editorDescriptor;
159
+ }
160
+ get editorTitle() {
161
+ return this._editorTitle;
162
+ }
163
+ get editorDescriptor() {
164
+ return this._editorDescriptor;
165
+ }
166
+ get runFunction() {
167
+ throw new Error('Run function cannot be used in editor action. Use submit function instead!');
168
+ }
169
+ get fetchFunction() {
170
+ if (!this._fetchFunction) {
171
+ return (ctx) => {
172
+ console.warn(`Fetch function is not provided for function ${this._actionName}, using default and returning context item`, ctx.data?.item);
173
+ return of(ctx.data?.item ? ctx.data.item : {});
174
+ };
175
+ }
176
+ return this._fetchFunction;
177
+ }
178
+ get submitFunction() {
179
+ return this._submitFunction;
180
+ }
181
+ withEditorTitle(title) {
182
+ this._editorTitle = title;
183
+ return this;
184
+ }
185
+ withRunFunction(fn) {
186
+ return this.withSubmitFunction(fn);
187
+ return this;
188
+ }
189
+ withFetchFunction(fn) {
190
+ this._fetchFunction = fn;
191
+ return this;
192
+ }
193
+ withSubmitFunction(fn) {
194
+ this._submitFunction = fn;
195
+ return this;
196
+ }
197
+ }
198
+ export class ActionEditorDetailsDescriptor extends ActionEditorDescriptor {
199
+ constructor(editorDescriptor) {
200
+ super(editorDescriptor, 'details');
201
+ this.withPosition(ActionPositionEnum.RowClick);
202
+ this.withRouteTrigger(':itemId');
203
+ this.withFetchFunction(ctx => ctx.dataProvider?.fetch && ctx.data?.itemId
204
+ ? ctx.dataProvider.fetch(ctx.data?.itemId, ctx.serviceInstance)
205
+ : throwError(new Error(`Data provider fetch function or item id ${ctx.data?.itemId} is missing.`)));
206
+ this.withClassName('mng-details-dynamic-dialog');
207
+ }
208
+ }
209
+ export class ActionEditorAddDescriptor extends ActionEditorDescriptor {
210
+ constructor(editorDescriptor) {
211
+ super(editorDescriptor, 'add');
212
+ this.withPosition(ActionPositionEnum.ToolbarLeft);
213
+ this.withRouteTrigger('add');
214
+ this.withSubmitFunction(ctx => ctx.dataProvider?.create
215
+ ? ctx.dataProvider.create(ctx.data?.item, ctx.serviceInstance)
216
+ : throwError(new Error(`Data provider create function is missing.`)));
217
+ this.withLevel(ActionLevelEnum.Success);
218
+ this.withIcon('pi pi-plus');
219
+ this.withClassName('mng-details-dynamic-dialog');
220
+ }
221
+ }
222
+ export class ActionEditorEditDescriptor extends ActionEditorDescriptor {
223
+ constructor(editorDescriptor) {
224
+ super(editorDescriptor, 'edit');
225
+ this.withPosition(ActionPositionEnum.RowInline);
226
+ this.withTitle(null);
227
+ this.withRouteTrigger(':itemId/edit');
228
+ this.withFetchFunction(ctx => ctx.dataProvider?.fetch && ctx.data?.itemId
229
+ ? ctx.dataProvider.fetch(ctx.data.itemId, ctx.serviceInstance)
230
+ : throwError(new Error(`Data provider fetch function or item id ${ctx.data?.itemId} is missing.`)));
231
+ this.withSubmitFunction(ctx => ctx.dataProvider?.update && ctx.data?.itemId
232
+ ? ctx.dataProvider.update(ctx.data.itemId, ctx.data?.item, ctx.serviceInstance)
233
+ : throwError(new Error(`Data provider update function or item id ${ctx.data?.itemId} is missing.`)));
234
+ this.withIcon('pi pi-pencil');
235
+ this.withClassName('mng-details-dynamic-dialog');
236
+ }
237
+ }
238
+ export class ActionDeleteDescriptor extends ActionDescriptor {
239
+ constructor(model) {
240
+ super(model, 'delete');
241
+ this.withPosition(ActionPositionEnum.RowInline);
242
+ this.withTitle(null);
243
+ this.withRunFunction(ctx => {
244
+ const editorDataProvider = ctx.dataProvider;
245
+ return editorDataProvider?.delete && ctx.data?.itemId
246
+ ? editorDataProvider.delete(ctx.data.itemId, ctx.data.item, ctx.serviceInstance)
247
+ : throwError(new Error(`Data provider delete function or item id ${ctx.data?.itemId} is missing.`));
248
+ });
249
+ this.withLevel(ActionLevelEnum.Danger);
250
+ this.withIcon('pi pi-trash');
251
+ this.withRunConfirmation(undefined);
252
+ }
253
+ }
254
+ export var ActionPositionEnum;
255
+ (function (ActionPositionEnum) {
256
+ ActionPositionEnum[ActionPositionEnum["ToolbarLeft"] = 0] = "ToolbarLeft";
257
+ ActionPositionEnum[ActionPositionEnum["ToolbarRight"] = 1] = "ToolbarRight";
258
+ ActionPositionEnum[ActionPositionEnum["TableHeader"] = 2] = "TableHeader";
259
+ ActionPositionEnum[ActionPositionEnum["RowInline"] = 3] = "RowInline";
260
+ ActionPositionEnum[ActionPositionEnum["RowClick"] = 4] = "RowClick";
261
+ })(ActionPositionEnum || (ActionPositionEnum = {}));
262
+ export var ActionActivationTriggerEnum;
263
+ (function (ActionActivationTriggerEnum) {
264
+ ActionActivationTriggerEnum[ActionActivationTriggerEnum["OnClick"] = 0] = "OnClick";
265
+ ActionActivationTriggerEnum[ActionActivationTriggerEnum["OnRoute"] = 1] = "OnRoute"; // action is triggered for activation by route url
266
+ })(ActionActivationTriggerEnum || (ActionActivationTriggerEnum = {}));
267
+ export var ActionTypeEnum;
268
+ (function (ActionTypeEnum) {
269
+ ActionTypeEnum[ActionTypeEnum["Direct"] = 0] = "Direct";
270
+ ActionTypeEnum[ActionTypeEnum["Editor"] = 1] = "Editor"; // editor providing middle step for activation
271
+ })(ActionTypeEnum || (ActionTypeEnum = {}));
272
+ export var ActionLevelEnum;
273
+ (function (ActionLevelEnum) {
274
+ ActionLevelEnum[ActionLevelEnum["Default"] = 0] = "Default";
275
+ ActionLevelEnum[ActionLevelEnum["Primary"] = 1] = "Primary";
276
+ ActionLevelEnum[ActionLevelEnum["Secondary"] = 2] = "Secondary";
277
+ ActionLevelEnum[ActionLevelEnum["Info"] = 3] = "Info";
278
+ ActionLevelEnum[ActionLevelEnum["Help"] = 4] = "Help";
279
+ ActionLevelEnum[ActionLevelEnum["Success"] = 5] = "Success";
280
+ ActionLevelEnum[ActionLevelEnum["Warning"] = 6] = "Warning";
281
+ ActionLevelEnum[ActionLevelEnum["Danger"] = 7] = "Danger";
282
+ })(ActionLevelEnum || (ActionLevelEnum = {}));
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWRlc2NyaXB0b3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL21vZGVscy9kZXNjcmlwdG9ycy9hY3Rpb24tZGVzY3JpcHRvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsRUFBRSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQU1oRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE1BQU0sT0FBTyxnQkFBZ0I7SUE4QnpCLHdCQUF3QjtJQUN4Qix5QkFBeUI7SUFFekIsWUFBWSxLQUF5QixFQUFFLFVBQWtCLEVBQUUsVUFBMkIsRUFBRSxjQUF1QjtRQXpCckcsVUFBSyxHQUFtQixjQUFjLENBQUMsTUFBTSxDQUFDO1FBQzlDLHVCQUFrQixHQUFnQywyQkFBMkIsQ0FBQyxPQUFPLENBQUM7UUFDdEYsY0FBUyxHQUF1QixrQkFBa0IsQ0FBQyxZQUFZLENBQUM7UUFDaEUsV0FBTSxHQUFvQixlQUFlLENBQUMsT0FBTyxDQUFDO1FBRWxELGNBQVMsR0FBZ0IsSUFBSSxDQUFDO1FBSzlCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFLMUIsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBV3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBRTlCLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLGNBQWMsQ0FBQyxFQUFFO1lBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELFVBQVUsS0FBSyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1NBQ2xIO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLGVBQWUs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QUFsQixrQkFBa0IsUUFNN0I7QUFFRCxNQUFNLENBQU4sSUFBWSwyQkFHWDtBQUhELFdBQVksMkJBQTJCO0lBQ25DLG1GQUFPLENBQUE7SUFDUCxtRkFBTyxDQUFBLENBQUMsa0RBQWtEO0FBQzlELENBQUMsRUFIVywyQkFBMkIsS0FBM0IsMkJBQTJCLFFBR3RDO0FBRUQsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN0Qix1REFBTSxDQUFBO0lBQ04sdURBQU0sQ0FBQSxDQUFDLDhDQUE4QztBQUN6RCxDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFFRCxNQUFNLENBQU4sSUFBWSxlQVNYO0FBVEQsV0FBWSxlQUFlO0lBQ3ZCLDJEQUFPLENBQUE7SUFDUCwyREFBTyxDQUFBO0lBQ1AsK0RBQVMsQ0FBQTtJQUNULHFEQUFJLENBQUE7SUFDSixxREFBSSxDQUFBO0lBQ0osMkRBQU8sQ0FBQTtJQUNQLDJEQUFPLENBQUE7SUFDUCx5REFBTSxDQUFBO0FBQ1YsQ0FBQyxFQVRXLGVBQWUsS0FBZixlQUFlLFFBUzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Q2xhc3NUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0VkaXRvckRlc2NyaXB0b3IsIE1vZGVsRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtJRGF0YVByb3ZpZGVyLCBJRWRpdG9yRGF0YVByb3ZpZGVyfSBmcm9tICcuLi9wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25FeGVjQ29udGV4dH0gZnJvbSAnLi4vYWN0aW9uJztcbmltcG9ydCB7VHlwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2FjdGlvbk5hbWU6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3BhcmVudFR5cGU/OiBDbGFzc1R5cGU8YW55PjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3BhcmVudFR5cGVOYW1lPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcGFyZW50UHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pMThuTW9kZWxBY3Rpb25CYXNlS2V5OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX3R5cGU6IEFjdGlvblR5cGVFbnVtID0gQWN0aW9uVHlwZUVudW0uRGlyZWN0O1xuICAgIHByb3RlY3RlZCBfYWN0aXZhdGlvblRyaWdnZXI6IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PbkNsaWNrO1xuICAgIHByb3RlY3RlZCBfcG9zaXRpb246IEFjdGlvblBvc2l0aW9uRW51bSA9IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQ7XG4gICAgcHJvdGVjdGVkIF9sZXZlbDogQWN0aW9uTGV2ZWxFbnVtID0gQWN0aW9uTGV2ZWxFbnVtLkRlZmF1bHQ7XG5cbiAgICBwcm90ZWN0ZWQgX3JvdXRlVXJsOiBzdHJpbmd8bnVsbCA9IG51bGw7XG5cbiAgICBwcm90ZWN0ZWQgX3RpdGxlPzogc3RyaW5nfG51bGw7XG4gICAgcHJvdGVjdGVkIF9pY29uPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9jbGFzc05hbWU6IHN0cmluZyA9ICcnO1xuICAgIHByb3RlY3RlZCBfcnVuRnVuY3Rpb24/OiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VD47XG4gICAgcHJvdGVjdGVkIF9pc1Zpc2libGVGdW5jdGlvbj86IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSURhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2lzRW5hYmxlZEZ1bmN0aW9uPzogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgcHJpdmF0ZSBfaGFzUnVuQ29uZmlybWF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfcnVuQ29uZmlybWF0aW9uSWNvbj86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Db25maXJtYXRpb25UaXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Db25maXJtYXRpb25NZXNzYWdlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlPzogc3RyaW5nO1xuXG4gICAgLy8gVE9ETzogbWVzc2FnZXMgb24gZW5kXG4gICAgLy8gVE9ETzogb24gYWN0aW9uIGZpbmlzaFxuXG4gICAgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPiwgYWN0aW9uTmFtZTogc3RyaW5nLCBwYXJlbnRUeXBlPzogQ2xhc3NUeXBlPGFueT4sIHBhcmVudFByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX2FjdGlvbk5hbWUgPSBhY3Rpb25OYW1lO1xuXG4gICAgICAgIGlmICgocGFyZW50VHlwZSAmJiAhcGFyZW50UHJvcGVydHkpIHx8ICghcGFyZW50UHJvcGVydHkgJiYgcGFyZW50UHJvcGVydHkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGUgYm90aCB0aGUgcGFyZW50IHR5cGUgYW5kIHBhcmVudCBwcm9wZXJ0eSBvciBub25lOiAke3BhcmVudFR5cGV9LCAke3BhcmVudFByb3BlcnR5fS5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcbiAgICAgICAgdGhpcy5fcGFyZW50VHlwZU5hbWUgPSBwYXJlbnRUeXBlID8gVHlwZVV0aWwuZmluZFR5cGVOYW1lKHBhcmVudFR5cGUpIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9wYXJlbnRQcm9wZXJ0eSA9IHBhcmVudFByb3BlcnR5O1xuXG4gICAgICAgIHRoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXkgPSB0aGlzLl9wYXJlbnRUeXBlTmFtZVxuICAgICAgICAgICAgPyBgJHt0aGlzLl9wYXJlbnRUeXBlTmFtZX0uYWN0aW9ucy4ke3RoaXMuX3BhcmVudFByb3BlcnR5fV8ke2FjdGlvbk5hbWV9YFxuICAgICAgICAgICAgOiBgJHt0aGlzLl9tb2RlbC50eXBlTmFtZX0uYWN0aW9ucy4ke2FjdGlvbk5hbWV9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRUeXBlTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFR5cGVOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFyZW50UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGkxOG5Nb2RlbEFjdGlvbkJhc2VLZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pMThuTW9kZWxBY3Rpb25CYXNlS2V5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmF0aW9uVHJpZ2dlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRpb25UcmlnZ2VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxldmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3V0ZVVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlVXJsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGljb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuRnVuY3Rpb24oKTogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9ydW5GdW5jdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW4gZnVuY3Rpb24gaXMgbm90IGRlZmluZWQgYW5kIGNhbm5vdCBiZSBpbnZva2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlRnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Zpc2libGVGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzRW5hYmxlZEZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNFbmFibGVkRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3Rpb25OYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBnZXQgaGFzUnVuQ29uZmlybWF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzUnVuQ29uZmlybWF0aW9uO1xuICAgIH1cblxuICAgIGdldCBydW5Db25maXJtYXRpb25JY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uSWNvbjtcbiAgICB9XG5cbiAgICBnZXQgcnVuQ29uZmlybWF0aW9uVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Db25maXJtYXRpb25UaXRsZTtcbiAgICB9XG5cbiAgICBnZXQgcnVuQ29uZmlybWF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvbk1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZ2V0IHJ1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGU7XG4gICAgfVxuXG4gICAgZ2V0IHJ1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5GdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcnVuRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJc1Zpc2libGVGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNWaXNpYmxlRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJc0VuYWJsZWRGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNFbmFibGVkRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3V0ZVRyaWdnZXIocm91dGVVcmw6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9hY3RpdmF0aW9uVHJpZ2dlciA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlO1xuICAgICAgICB0aGlzLl9yb3V0ZVVybCA9IHJvdXRlVXJsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExldmVsKGxldmVsOiBBY3Rpb25MZXZlbEVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGVzIGRlZmF1bHQgdGl0bGUga2V5IHdpdGggbW9kZWwgYWN0aW9uIGtleSAoJHttb2RlbC50eXBlTmFtZX0uYWN0aW9ucy4ke2FjdGlvbk5hbWV9KS4gTm90IHJlbGV2YW50IGlmIHBhcmVudFR5cGUgbmFtZSBpcyBwcm92aWRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1vZGVsVGl0bGUoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gYCR7dGhpcy5faTE4bk1vZGVsQWN0aW9uQmFzZUtleX0udGl0bGVgO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkZXMgZGVmYXVsdCB0aXRsZSBrZXkgKCR7YWN0aW9uTmFtZX0udGl0bGUpLiBJZiBudWxsLCBubyB0aXRsZSB3aWxsIGJlIHNob3duLlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBpMThuIGtleSBvciB0aXRsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmd8bnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEljb24oaWNvbjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ljb24gPSBpY29uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUG9zaXRpb24ocG9zaXRpb246IEFjdGlvblBvc2l0aW9uRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJ1bkNvbmZpcm1hdGlvbihpY29uOiBzdHJpbmcgPSAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLCB0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgYWNjZXB0VGl0bGU/OiBzdHJpbmcsIHJlamVjdFRpdGxlPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc1J1bkNvbmZpcm1hdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkljb24gPSBpY29uO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25UaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25NZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUgPSBhY2NlcHRUaXRsZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGUgPSByZWplY3RUaXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPjtcblxuICAgIHByb3RlY3RlZCBfZWRpdG9yVGl0bGU/OiBzdHJpbmcgPSB1bmRlZmluZWQ7XG5cbiAgICBwcm90ZWN0ZWQgX2ZldGNoRnVuY3Rpb24/OiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VD47XG4gICAgcHJvdGVjdGVkIF9zdWJtaXRGdW5jdGlvbj86IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxUPjtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvckRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8VD4sIGFjdGlvbk5hbWU6IHN0cmluZywgcGFyZW50VHlwZT86IENsYXNzVHlwZTxhbnk+LCBwYXJlbnRQcm9wZXJ0eT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLm1vZGVsLCBhY3Rpb25OYW1lLCBwYXJlbnRUeXBlLCBwYXJlbnRQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX3R5cGUgPSBBY3Rpb25UeXBlRW51bS5FZGl0b3I7XG4gICAgICAgIHRoaXMuX2VkaXRvckRlc2NyaXB0b3IgPSBlZGl0b3JEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JUaXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckRlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcnVuRnVuY3Rpb24oKTogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW4gZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgaW4gZWRpdG9yIGFjdGlvbi4gVXNlIHN1Ym1pdCBmdW5jdGlvbiBpbnN0ZWFkIScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmV0Y2hGdW5jdGlvbigpOiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBpZiAoIXRoaXMuX2ZldGNoRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAoY3R4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBGZXRjaCBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQgZm9yIGZ1bmN0aW9uICR7dGhpcy5fYWN0aW9uTmFtZX0sIHVzaW5nIGRlZmF1bHQgYW5kIHJldHVybmluZyBjb250ZXh0IGl0ZW1gLCBjdHguZGF0YT8uaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKGN0eC5kYXRhPy5pdGVtID8gY3R4LmRhdGEuaXRlbSA6IHt9IGFzIFQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3VibWl0RnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEVkaXRvclRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZWRpdG9yVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhSdW5GdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFN1Ym1pdEZ1bmN0aW9uKGZuIGFzIChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPFQ+KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGZXRjaEZ1bmN0aW9uPFM+KGZuOiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+PikgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9mZXRjaEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU3VibWl0RnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3N1Ym1pdEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckRldGFpbHNEZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCAnZGV0YWlscycpO1xuICAgICAgICB0aGlzLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2spO1xuICAgICAgICB0aGlzLndpdGhSb3V0ZVRyaWdnZXIoJzppdGVtSWQnKTtcbiAgICAgICAgdGhpcy53aXRoRmV0Y2hGdW5jdGlvbihjdHggPT4gY3R4LmRhdGFQcm92aWRlcj8uZmV0Y2ggJiYgY3R4LmRhdGE/Lml0ZW1JZFxuICAgICAgICAgICAgPyBjdHguZGF0YVByb3ZpZGVyLmZldGNoKGN0eC5kYXRhPy5pdGVtSWQsIGN0eC5zZXJ2aWNlSW5zdGFuY2UpXG4gICAgICAgICAgICA6IHRocm93RXJyb3IobmV3IEVycm9yKGBEYXRhIHByb3ZpZGVyIGZldGNoIGZ1bmN0aW9uIG9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfSBpcyBtaXNzaW5nLmApKSk7XG4gICAgICAgIHRoaXMud2l0aENsYXNzTmFtZSgnbW5nLWRldGFpbHMtZHluYW1pYy1kaWFsb2cnKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25FZGl0b3JBZGREZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCAnYWRkJyk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignYWRkJyk7XG4gICAgICAgIHRoaXMud2l0aFN1Ym1pdEZ1bmN0aW9uKGN0eCA9PiBjdHguZGF0YVByb3ZpZGVyPy5jcmVhdGVcbiAgICAgICAgICAgID8gY3R4LmRhdGFQcm92aWRlci5jcmVhdGUoY3R4LmRhdGE/Lml0ZW0sIGN0eC5zZXJ2aWNlSW5zdGFuY2UpXG4gICAgICAgICAgICA6IHRocm93RXJyb3IobmV3IEVycm9yKGBEYXRhIHByb3ZpZGVyIGNyZWF0ZSBmdW5jdGlvbiBpcyBtaXNzaW5nLmApKSk7XG4gICAgICAgIHRoaXMud2l0aExldmVsKEFjdGlvbkxldmVsRW51bS5TdWNjZXNzKTtcbiAgICAgICAgdGhpcy53aXRoSWNvbigncGkgcGktcGx1cycpO1xuICAgICAgICB0aGlzLndpdGhDbGFzc05hbWUoJ21uZy1kZXRhaWxzLWR5bmFtaWMtZGlhbG9nJyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvckRlc2NyaXB0b3IsICdlZGl0Jyk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmUpO1xuICAgICAgICB0aGlzLndpdGhUaXRsZShudWxsKTtcbiAgICAgICAgdGhpcy53aXRoUm91dGVUcmlnZ2VyKCc6aXRlbUlkL2VkaXQnKTtcbiAgICAgICAgdGhpcy53aXRoRmV0Y2hGdW5jdGlvbihjdHggPT4gY3R4LmRhdGFQcm92aWRlcj8uZmV0Y2ggJiYgY3R4LmRhdGE/Lml0ZW1JZFxuICAgICAgICAgICAgPyBjdHguZGF0YVByb3ZpZGVyLmZldGNoKGN0eC5kYXRhLml0ZW1JZCwgY3R4LnNlcnZpY2VJbnN0YW5jZSlcbiAgICAgICAgICAgIDogdGhyb3dFcnJvcihuZXcgRXJyb3IoYERhdGEgcHJvdmlkZXIgZmV0Y2ggZnVuY3Rpb24gb3IgaXRlbSBpZCAke2N0eC5kYXRhPy5pdGVtSWR9IGlzIG1pc3NpbmcuYCkpKTtcbiAgICAgICAgdGhpcy53aXRoU3VibWl0RnVuY3Rpb24oY3R4ID0+IGN0eC5kYXRhUHJvdmlkZXI/LnVwZGF0ZSAmJiBjdHguZGF0YT8uaXRlbUlkXG4gICAgICAgICAgICA/IGN0eC5kYXRhUHJvdmlkZXIudXBkYXRlKGN0eC5kYXRhLml0ZW1JZCwgY3R4LmRhdGE/Lml0ZW0sIGN0eC5zZXJ2aWNlSW5zdGFuY2UpXG4gICAgICAgICAgICA6IHRocm93RXJyb3IobmV3IEVycm9yKGBEYXRhIHByb3ZpZGVyIHVwZGF0ZSBmdW5jdGlvbiBvciBpdGVtIGlkICR7Y3R4LmRhdGE/Lml0ZW1JZH0gaXMgbWlzc2luZy5gKSkpO1xuICAgICAgICB0aGlzLndpdGhJY29uKCdwaSBwaS1wZW5jaWwnKTtcbiAgICAgICAgdGhpcy53aXRoQ2xhc3NOYW1lKCdtbmctZGV0YWlscy1keW5hbWljLWRpYWxvZycpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKG1vZGVsLCAnZGVsZXRlJyk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmUpO1xuICAgICAgICB0aGlzLndpdGhUaXRsZShudWxsKTtcbiAgICAgICAgdGhpcy53aXRoUnVuRnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckRhdGFQcm92aWRlciA9IGN0eC5kYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgICAgICAgICAgcmV0dXJuIGVkaXRvckRhdGFQcm92aWRlcj8uZGVsZXRlICYmIGN0eC5kYXRhPy5pdGVtSWRcbiAgICAgICAgICAgICAgICA/IGVkaXRvckRhdGFQcm92aWRlci5kZWxldGUoY3R4LmRhdGEuaXRlbUlkLCBjdHguZGF0YS5pdGVtLCBjdHguc2VydmljZUluc3RhbmNlKVxuICAgICAgICAgICAgICAgIDogdGhyb3dFcnJvcihuZXcgRXJyb3IoYERhdGEgcHJvdmlkZXIgZGVsZXRlIGZ1bmN0aW9uIG9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfSBpcyBtaXNzaW5nLmApKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy53aXRoTGV2ZWwoQWN0aW9uTGV2ZWxFbnVtLkRhbmdlcik7XG4gICAgICAgIHRoaXMud2l0aEljb24oJ3BpIHBpLXRyYXNoJyk7XG4gICAgICAgIHRoaXMud2l0aFJ1bkNvbmZpcm1hdGlvbih1bmRlZmluZWQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uUG9zaXRpb25FbnVtIHtcbiAgICBUb29sYmFyTGVmdCxcbiAgICBUb29sYmFyUmlnaHQsXG4gICAgVGFibGVIZWFkZXIsXG4gICAgUm93SW5saW5lLFxuICAgIFJvd0NsaWNrXG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSB7XG4gICAgT25DbGljaywgLy8gYWN0aW9uIGlzIHRyaWdnZXJlZCBmb3IgYWN0aXZhdGlvbiBvbiBjbGlja1xuICAgIE9uUm91dGUgLy8gYWN0aW9uIGlzIHRyaWdnZXJlZCBmb3IgYWN0aXZhdGlvbiBieSByb3V0ZSB1cmxcbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uVHlwZUVudW0ge1xuICAgIERpcmVjdCwgLy8gYWN0aW9uIGlzIGRpcmVjdGx5IGFjdGl2YXRlZCBhbmQgZXhlY3V0ZWRcbiAgICBFZGl0b3IgLy8gZWRpdG9yIHByb3ZpZGluZyBtaWRkbGUgc3RlcCBmb3IgYWN0aXZhdGlvblxufVxuXG5leHBvcnQgZW51bSBBY3Rpb25MZXZlbEVudW0ge1xuICAgIERlZmF1bHQsXG4gICAgUHJpbWFyeSxcbiAgICBTZWNvbmRhcnksXG4gICAgSW5mbyxcbiAgICBIZWxwLFxuICAgIFN1Y2Nlc3MsXG4gICAgV2FybmluZyxcbiAgICBEYW5nZXJcbn1cbiJdfQ==