ontimize-web-ngx 15.6.0-next.1 → 15.6.0-next.11

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 (161) hide show
  1. package/esm2020/lib/components/app-header/o-app-header.component.mjs +3 -3
  2. package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +19 -3
  3. package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +17 -4
  4. package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +7 -5
  5. package/esm2020/lib/components/filter-builder/o-filter-builder.component.mjs +1 -1
  6. package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +42 -24
  7. package/esm2020/lib/components/form/o-form.component.mjs +4 -3
  8. package/esm2020/lib/components/form/services/o-form-message.service.mjs +2 -2
  9. package/esm2020/lib/components/grid/o-grid.component.mjs +19 -17
  10. package/esm2020/lib/components/grid/skeketon/o-grid-skeleton.component.mjs +12 -15
  11. package/esm2020/lib/components/index.mjs +2 -1
  12. package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +3 -2
  13. package/esm2020/lib/components/input/o-boolean-form-data-component.class.mjs +9 -1
  14. package/esm2020/lib/components/input/o-form-service-component.class.mjs +4 -3
  15. package/esm2020/lib/components/list/list-item/o-list-item.component.mjs +8 -3
  16. package/esm2020/lib/components/list/o-list.component.mjs +41 -16
  17. package/esm2020/lib/components/list/skeleton/o-list-skeleton.component.mjs +12 -15
  18. package/esm2020/lib/components/o-form-data-component.class.mjs +2 -2
  19. package/esm2020/lib/components/o-repeatable-skeleton.component.mjs +33 -0
  20. package/esm2020/lib/components/o-service-base-component.class.mjs +5 -4
  21. package/esm2020/lib/components/o-service-component.class.mjs +10 -9
  22. package/esm2020/lib/components/o-skeleton.component.mjs +15 -6
  23. package/esm2020/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.mjs +2 -2
  24. package/esm2020/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.mjs +1 -1
  25. package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +5 -4
  26. package/esm2020/lib/components/table/column/o-column.class.mjs +2 -1
  27. package/esm2020/lib/components/table/column/o-table-column.component.mjs +10 -4
  28. package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +24 -6
  29. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +75 -87
  30. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.mjs +53 -0
  31. package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +12 -4
  32. package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +2 -2
  33. package/esm2020/lib/components/table/extensions/o-table.dao.mjs +6 -4
  34. package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +5 -19
  35. package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
  36. package/esm2020/lib/components/table/o-table.component.mjs +104 -10
  37. package/esm2020/lib/components/table/o-table.module.mjs +4 -1
  38. package/esm2020/lib/components/tree/o-tree.component.mjs +96 -14
  39. package/esm2020/lib/components/tree/o-tree.datasource.mjs +3 -3
  40. package/esm2020/lib/components/user-info/o-user-info.component.mjs +5 -4
  41. package/esm2020/lib/config/o-providers.mjs +5 -3
  42. package/esm2020/lib/i18n/i18n.mjs +6 -3
  43. package/esm2020/lib/injection-tokens/index.mjs +19 -0
  44. package/esm2020/lib/interfaces/base-response.interface.mjs +1 -1
  45. package/esm2020/lib/interfaces/form-layout-manager.interface.mjs +1 -1
  46. package/esm2020/lib/interfaces/index.mjs +3 -1
  47. package/esm2020/lib/interfaces/jsonapi-config.interface.mjs +3 -0
  48. package/esm2020/lib/interfaces/jsonapi-response.interface.mjs +2 -1
  49. package/esm2020/lib/interfaces/o-table-column.interface.mjs +1 -1
  50. package/esm2020/lib/interfaces/service-response.interface.mjs +1 -1
  51. package/esm2020/lib/layouts/app-layout/o-app-layout-base.class.mjs +1 -1
  52. package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +26 -9
  53. package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +4 -3
  54. package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +2 -2
  55. package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +2 -1
  56. package/esm2020/lib/services/base-service.class.mjs +3 -3
  57. package/esm2020/lib/services/factories.mjs +25 -53
  58. package/esm2020/lib/services/index.mjs +2 -2
  59. package/esm2020/lib/services/jsonapi/jsonapi-preferences.service.mjs +2 -2
  60. package/esm2020/lib/services/jsonapi/jsonapi.service.mjs +53 -21
  61. package/esm2020/lib/services/request-adapter/base-request-argument.adapter.mjs +12 -0
  62. package/esm2020/lib/services/request-adapter/base-request-argument.interface.mjs +2 -0
  63. package/esm2020/lib/services/request-adapter/index.mjs +5 -0
  64. package/esm2020/lib/services/request-adapter/jsonapi-request-arguments.adapter.mjs +70 -0
  65. package/esm2020/lib/services/request-adapter/ontimize-request-arguments.adapter.mjs +19 -0
  66. package/esm2020/lib/services/state/o-filter-builder-component-state.service.mjs +1 -1
  67. package/esm2020/lib/services/state/o-table-component-state.class.mjs +7 -1
  68. package/esm2020/lib/services/state/o-table-component-state.service.mjs +8 -2
  69. package/esm2020/lib/services/translate/o-translate.service.mjs +3 -2
  70. package/esm2020/lib/types/config.type.mjs +1 -1
  71. package/esm2020/lib/types/form-layout-detail-component-data.type.mjs +1 -1
  72. package/esm2020/lib/types/index.mjs +1 -2
  73. package/esm2020/lib/types/service-configuration.type.mjs +1 -1
  74. package/esm2020/lib/types/table/index.mjs +2 -1
  75. package/esm2020/lib/types/table/o-column-value-filter.type.mjs +1 -1
  76. package/esm2020/lib/types/table/o-table-expandable-row-state.type.mjs +2 -0
  77. package/esm2020/lib/util/codes.mjs +3 -1
  78. package/esm2020/lib/util/errors.mjs +3 -9
  79. package/esm2020/lib/util/factory.util.mjs +67 -0
  80. package/esm2020/lib/util/index.mjs +3 -1
  81. package/esm2020/lib/util/injection-token.utils.mjs +4 -0
  82. package/esm2020/lib/util/preference-mapping-util.mjs +2 -2
  83. package/esm2020/lib/util/sqltypes.mjs +2 -2
  84. package/esm2020/lib/util/util.mjs +11 -53
  85. package/esm2020/public-api.mjs +2 -1
  86. package/fesm2015/ontimize-web-ngx.mjs +6995 -6537
  87. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  88. package/fesm2020/ontimize-web-ngx.mjs +6634 -6194
  89. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  90. package/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.d.ts +3 -0
  91. package/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.d.ts +1 -0
  92. package/lib/components/app-sidenav/o-app-sidenav.component.d.ts +2 -1
  93. package/lib/components/filter-builder/o-filter-builder.component.d.ts +1 -1
  94. package/lib/components/form/navigation/o-form-navigation.component.d.ts +7 -4
  95. package/lib/components/grid/skeketon/o-grid-skeleton.component.d.ts +4 -7
  96. package/lib/components/index.d.ts +1 -0
  97. package/lib/components/input/o-boolean-form-data-component.class.d.ts +1 -0
  98. package/lib/components/list/o-list.component.d.ts +5 -1
  99. package/lib/components/list/skeleton/o-list-skeleton.component.d.ts +4 -7
  100. package/lib/components/o-repeatable-skeleton.component.d.ts +9 -0
  101. package/lib/components/o-skeleton.component.d.ts +10 -5
  102. package/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.d.ts +1 -1
  103. package/lib/components/table/column/o-column.class.d.ts +2 -1
  104. package/lib/components/table/column/o-table-column.component.d.ts +2 -2
  105. package/lib/components/table/extensions/contextmenu/o-table-context-menu.component.d.ts +2 -0
  106. package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.d.ts +9 -6
  107. package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.d.ts +12 -0
  108. package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
  109. package/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.d.ts +1 -1
  110. package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +1 -10
  111. package/lib/components/table/o-table-base.class.d.ts +2 -0
  112. package/lib/components/table/o-table.component.d.ts +12 -2
  113. package/lib/components/tree/o-tree.component.d.ts +10 -1
  114. package/lib/components/user-info/o-user-info.component.d.ts +2 -1
  115. package/lib/config/o-directives.d.ts +1 -1
  116. package/lib/i18n/i18n.d.ts +3 -0
  117. package/lib/injection-tokens/index.d.ts +33 -0
  118. package/lib/interfaces/base-response.interface.d.ts +0 -2
  119. package/lib/interfaces/form-layout-manager.interface.d.ts +1 -1
  120. package/lib/interfaces/index.d.ts +2 -0
  121. package/lib/interfaces/jsonapi-config.interface.d.ts +3 -0
  122. package/lib/interfaces/jsonapi-response.interface.d.ts +47 -7
  123. package/lib/interfaces/o-table-column.interface.d.ts +2 -1
  124. package/lib/interfaces/service-response.interface.d.ts +2 -0
  125. package/lib/layouts/app-layout/o-app-layout-base.class.d.ts +1 -1
  126. package/lib/layouts/app-layout/o-app-layout.component.d.ts +7 -3
  127. package/lib/services/base-service.class.d.ts +2 -2
  128. package/lib/services/factories.d.ts +7 -28
  129. package/lib/services/index.d.ts +1 -1
  130. package/lib/services/jsonapi/jsonapi.service.d.ts +7 -4
  131. package/lib/services/{query-arguments/base-query-argument.adapter.d.ts → request-adapter/base-request-argument.adapter.d.ts} +2 -1
  132. package/lib/services/{query-arguments/base-query-argument.interface.d.ts → request-adapter/base-request-argument.interface.d.ts} +1 -1
  133. package/lib/services/request-adapter/index.d.ts +4 -0
  134. package/lib/services/request-adapter/jsonapi-request-arguments.adapter.d.ts +13 -0
  135. package/lib/services/request-adapter/ontimize-request-arguments.adapter.d.ts +8 -0
  136. package/lib/services/state/o-filter-builder-component-state.service.d.ts +1 -1
  137. package/lib/services/state/o-table-component-state.class.d.ts +3 -0
  138. package/lib/types/config.type.d.ts +2 -2
  139. package/lib/types/form-layout-detail-component-data.type.d.ts +1 -1
  140. package/lib/types/index.d.ts +0 -1
  141. package/lib/types/service-configuration.type.d.ts +12 -2
  142. package/lib/types/table/index.d.ts +1 -0
  143. package/lib/types/table/o-column-value-filter.type.d.ts +3 -0
  144. package/lib/types/table/o-table-expandable-row-state.type.d.ts +5 -0
  145. package/lib/util/codes.d.ts +3 -0
  146. package/lib/util/factory.util.d.ts +10 -0
  147. package/lib/util/index.d.ts +2 -0
  148. package/lib/util/injection-token.utils.d.ts +2 -0
  149. package/lib/util/util.d.ts +1 -5
  150. package/package.json +1 -1
  151. package/public-api.d.ts +1 -0
  152. package/esm2020/lib/services/query-arguments/base-query-argument.adapter.mjs +0 -9
  153. package/esm2020/lib/services/query-arguments/base-query-argument.interface.mjs +0 -2
  154. package/esm2020/lib/services/query-arguments/index.mjs +0 -5
  155. package/esm2020/lib/services/query-arguments/jsonapi-query-arguments.adapter.mjs +0 -62
  156. package/esm2020/lib/services/query-arguments/ontimize-query-arguments.adapter.mjs +0 -19
  157. package/esm2020/lib/types/ontimize-service-config.type.mjs +0 -2
  158. package/lib/services/query-arguments/index.d.ts +0 -4
  159. package/lib/services/query-arguments/jsonapi-query-arguments.adapter.d.ts +0 -12
  160. package/lib/services/query-arguments/ontimize-query-arguments.adapter.d.ts +0 -8
  161. package/lib/types/ontimize-service-config.type.d.ts +0 -5
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1jb2x1bW4uaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2ludGVyZmFjZXMvby10YWJsZS1jb2x1bW4uaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgT1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZS9vLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi4vdHlwZXMvZXhwcmVzc2lvbi50eXBlJztcbmltcG9ydCB7IEVycm9yRGF0YSB9IGZyb20gJy4uL3R5cGVzL2Vycm9yLWRhdGEudHlwZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT1RhYmxlQ29sdW1uIHtcbiAgYXR0cjogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHRhYmxlOiBPVGFibGVDb21wb25lbnQ7XG4gIGVkaXRvcjogYW55O1xuICByZW5kZXJlcjogYW55O1xuICBtdWx0aWxpbmU6IGJvb2xlYW47XG4gIG9yZGVyYWJsZTogYm9vbGVhbjtcbiAgc2VhcmNoYWJsZTogYm9vbGVhbjtcbiAgZ3JvdXBhYmxlOiBib29sZWFuO1xuICByZXNpemFibGU6IGJvb2xlYW47XG4gIHRpdGxlQWxpZ246IHN0cmluZztcbiAgY29udGVudEFsaWduOiBzdHJpbmc7XG4gIGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcbiAgc2hvd1BsYWNlSG9sZGVyOiBib29sZWFuO1xuICB3aWR0aDogc3RyaW5nO1xuICBtaW5XaWR0aDogc3RyaW5nO1xuICBtYXhXaWR0aDogc3RyaW5nO1xuICBvcmlnaW5hbFdpZHRoOiBzdHJpbmc7XG4gIGNsYXNzOiBzdHJpbmc7XG4gIHRvb2x0aXA6IGJvb2xlYW47XG4gIHRvb2x0aXBWYWx1ZTogc3RyaW5nO1xuICBhbmd1bGFyVmFsaWRhdG9yc0ZuOiBWYWxpZGF0b3JGbltdO1xuICBhbmd1bGFyVmFsaWRhdG9yc0ZuRXJyb3JzOiBFcnJvckRhdGFbXTtcbiAgYW5ndWxhckFzeW5jVmFsaWRhdG9yc0ZuOiBBc3luY1ZhbGlkYXRvckZuW107XG4gIHRvb2x0aXBGdW5jdGlvbjogKHJvd0RhdGE6IGFueSkgPT4gYW55O1xuICBmaWx0ZXJFeHByZXNzaW9uRnVuY3Rpb246IChjb2x1bW5BdHRyOiBzdHJpbmcsIHF1aWNrRmlsdGVyPzogc3RyaW5nKSA9PiBFeHByZXNzaW9uO1xuICBnZXRTUUxUeXBlOiAoKSA9PiBudW1iZXI7XG4gIGJ1aWxkQ2VsbEVkaXRvcjogKHR5cGU6IHN0cmluZywgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLCBwcm9wc09yaWdpbjogYW55LCByZWdpc3RlckluQ29sdW1uPzogYm9vbGVhbikgPT4gYW55O1xuICByZWdpc3RlckVkaXRvcjogKGVkaXRvcjogYW55KSA9PiB2b2lkO1xuICByZWdpc3RlclJlbmRlcmVyOiAoZWRpdG9yOiBhbnkpID0+IHZvaWQ7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1jb2x1bW4uaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2ludGVyZmFjZXMvby10YWJsZS1jb2x1bW4uaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHR5cGUgeyBPVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3RhYmxlL28tdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tICcuLi90eXBlcy9leHByZXNzaW9uLnR5cGUnO1xuaW1wb3J0IHsgRXJyb3JEYXRhIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItZGF0YS50eXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBPVGFibGVDb2x1bW4ge1xuICBhdHRyOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgdGFibGU6IE9UYWJsZUNvbXBvbmVudDtcbiAgZWRpdG9yOiBhbnk7XG4gIHJlbmRlcmVyOiBhbnk7XG4gIG11bHRpbGluZTogYm9vbGVhbjtcbiAgb3JkZXJhYmxlOiBib29sZWFuO1xuICBzZWFyY2hhYmxlOiBib29sZWFuO1xuICBncm91cGFibGU6IGJvb2xlYW47XG4gIHJlc2l6YWJsZTogYm9vbGVhbjtcbiAgdGl0bGVBbGlnbjogc3RyaW5nO1xuICBjb250ZW50QWxpZ246IHN0cmluZztcbiAgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuICBzaG93UGxhY2VIb2xkZXI6IGJvb2xlYW47XG4gIHdpZHRoOiBzdHJpbmc7XG4gIG1pbldpZHRoOiBzdHJpbmc7XG4gIG1heFdpZHRoOiBzdHJpbmc7XG4gIG9yaWdpbmFsV2lkdGg6IHN0cmluZztcbiAgY2xhc3M6IHN0cmluZztcbiAgdG9vbHRpcDogYm9vbGVhbjtcbiAgdG9vbHRpcFZhbHVlOiBzdHJpbmc7XG4gIGFuZ3VsYXJWYWxpZGF0b3JzRm46IFZhbGlkYXRvckZuW107XG4gIGFuZ3VsYXJWYWxpZGF0b3JzRm5FcnJvcnM6IEVycm9yRGF0YVtdO1xuICBhbmd1bGFyQXN5bmNWYWxpZGF0b3JzRm46IEFzeW5jVmFsaWRhdG9yRm5bXTtcbiAgdmFsdWVDb2x1bW46IHN0cmluZztcbiAgdG9vbHRpcEZ1bmN0aW9uOiAocm93RGF0YTogYW55KSA9PiBhbnk7XG4gIGZpbHRlckV4cHJlc3Npb25GdW5jdGlvbjogKGNvbHVtbkF0dHI6IHN0cmluZywgcXVpY2tGaWx0ZXI/OiBzdHJpbmcpID0+IEV4cHJlc3Npb247XG4gIGdldFNRTFR5cGU6ICgpID0+IG51bWJlcjtcbiAgYnVpbGRDZWxsRWRpdG9yOiAodHlwZTogc3RyaW5nLCBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIHByb3BzT3JpZ2luOiBhbnksIHJlZ2lzdGVySW5Db2x1bW4/OiBib29sZWFuKSA9PiBhbnk7XG4gIHJlZ2lzdGVyRWRpdG9yOiAoZWRpdG9yOiBhbnkpID0+IHZvaWQ7XG4gIHJlZ2lzdGVyUmVuZGVyZXI6IChlZGl0b3I6IGFueSkgPT4gdm9pZDtcbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVJlc3BvbnNlIH0gZnJvbSBcIi4vYmFzZS1yZXNwb25zZS5pbnRlcmZhY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlUmVzcG9uc2UgZXh0ZW5kcyBCYXNlUmVzcG9uc2V7XG4gIGNvZGU6IG51bWJlcjtcbiAgc3FsVHlwZXM/OiB7IFtrZXk6IHN0cmluZ106IG51bWJlcjsgfTtcbiAgc3RhcnRSZWNvcmRJbmRleD86IG51bWJlcjtcbiAgdG90YWxRdWVyeVJlY29yZHNOdW1iZXI/OiBudW1iZXI7XG5cbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVJlc3BvbnNlIH0gZnJvbSBcIi4vYmFzZS1yZXNwb25zZS5pbnRlcmZhY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlUmVzcG9uc2UgZXh0ZW5kcyBCYXNlUmVzcG9uc2V7XG4gIGNvZGU6IG51bWJlcjtcbiAgc3FsVHlwZXM/OiB7IFtrZXk6IHN0cmluZ106IG51bWJlcjsgfTtcbiAgc3RhcnRSZWNvcmRJbmRleD86IG51bWJlcjtcbiAgdG90YWxRdWVyeVJlY29yZHNOdW1iZXI/OiBudW1iZXI7XG4gIGRhdGE6IGFueTtcbiAgbWVzc2FnZTogc3RyaW5nO1xuXG59XG4iXX0=
@@ -1,3 +1,3 @@
1
1
  export class OAppLayoutBase {
2
2
  }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hcHAtbGF5b3V0LWJhc2UuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvbGF5b3V0cy9hcHAtbGF5b3V0L28tYXBwLWxheW91dC1iYXNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBZ0IsY0FBYztDQUVuQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPQXBwTGF5b3V0QmFzZXtcbiAgYWJzdHJhY3QgdXNlRmxhZ0ljb25zOiBib29sZWFuO0Zcbn0iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hcHAtbGF5b3V0LWJhc2UuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvbGF5b3V0cy9hcHAtbGF5b3V0L28tYXBwLWxheW91dC1iYXNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBZ0IsY0FBYztDQUduQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPQXBwTGF5b3V0QmFzZXtcbiAgYWJzdHJhY3QgdXNlRmxhZ0ljb25zOiBib29sZWFuO1xuICBhYnN0cmFjdCB0b29sdGlwRGlzcGxheU1vZGU6IHN0cmluZztcbn1cbiJdfQ==
@@ -1,11 +1,11 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { Component, ContentChild, EventEmitter, ViewChild, ViewEncapsulation, forwardRef } from '@angular/core';
2
+ import { Component, ContentChild, EventEmitter, forwardRef, ViewChild, ViewEncapsulation } from '@angular/core';
3
+ import { OAppHeaderBase } from '../../components/app-header/o-app-header-base.class';
4
+ import { OAppSidenavBase } from '../../components/app-sidenav/o-app-sidenav-base.class';
3
5
  import { OUserInfoConfigurationDirective } from '../../components/user-info/user-info-configuration/o-user-info-configuration.directive';
4
6
  import { BooleanInputConverter } from '../../decorators/input-converter';
5
7
  import { Codes } from '../../util/codes';
6
8
  import { Util } from '../../util/util';
7
- import { OAppSidenavBase } from '../../components/app-sidenav/o-app-sidenav-base.class';
8
- import { OAppHeaderBase } from '../../components/app-header/o-app-header-base.class';
9
9
  import { OAppLayoutBase } from './o-app-layout-base.class';
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "@angular/common";
@@ -26,7 +26,9 @@ export const DEFAULT_INPUTS_O_APP_LAYOUT = [
26
26
  'headerHeight: header-height',
27
27
  'showTitle: show-title',
28
28
  'staticTitle: static-title',
29
- 'showStaticTitle: show-static-title'
29
+ 'showStaticTitle: show-static-title',
30
+ 'tooltipDisplayMode: tooltip-display-mode',
31
+ 'showEllipsisMenu: show-ellipsis-menu'
30
32
  ];
31
33
  export const DEFAULT_OUTPUTS_O_APP_LAYOUT = [
32
34
  'beforeOpenSidenav',
@@ -43,11 +45,13 @@ export class OAppLayoutComponent {
43
45
  this._showHeader = true;
44
46
  this.showTitle = false;
45
47
  this.showStaticTitle = false;
48
+ this.showEllipsisMenu = false;
46
49
  this.headerHeight = Codes.DEFAULT_ROW_HEIGHT;
47
50
  this.beforeOpenSidenav = new EventEmitter();
48
51
  this.afterOpenSidenav = new EventEmitter();
49
52
  this.beforeCloseSidenav = new EventEmitter();
50
53
  this.afterCloseSidenav = new EventEmitter();
54
+ this._tooltipDisplayMode = Codes.TOOLTIP_DISPLAY_COLLAPSED;
51
55
  }
52
56
  get showHeader() {
53
57
  return this._showHeader;
@@ -82,6 +86,15 @@ export class OAppLayoutComponent {
82
86
  console.error('Invalid `o-app-layout` sidenav-mode (' + val + ')');
83
87
  }
84
88
  }
89
+ get tooltipDisplayMode() {
90
+ return this._tooltipDisplayMode;
91
+ }
92
+ set tooltipDisplayMode(val) {
93
+ const m = Codes.TOOLTIP_DISPLAY_MODE.find(e => e.toLocaleLowerCase() === val);
94
+ if (Util.isDefined(m)) {
95
+ this._tooltipDisplayMode = m;
96
+ }
97
+ }
85
98
  sidenavToggle(opened) {
86
99
  opened ? this.beforeOpenSidenav.emit() : this.beforeCloseSidenav.emit();
87
100
  }
@@ -95,9 +108,9 @@ export class OAppLayoutComponent {
95
108
  }
96
109
  }
97
110
  OAppLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OAppLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
98
- OAppLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OAppLayoutComponent, selector: "o-app-layout", inputs: { mode: "mode", sidenavMode: ["sidenav-mode", "sidenavMode"], sidenavOpened: ["sidenav-opened", "sidenavOpened"], _showHeader: ["show-header", "_showHeader"], showUserInfo: ["show-user-info", "showUserInfo"], showLanguageSelector: ["show-language-selector", "showLanguageSelector"], useFlagIcons: ["use-flag-icons", "useFlagIcons"], openedSidenavImg: ["opened-sidenav-image", "openedSidenavImg"], closedSidenavImg: ["closed-sidenav-image", "closedSidenavImg"], headerColor: ["header-color", "headerColor"], headerHeight: ["header-height", "headerHeight"], showTitle: ["show-title", "showTitle"], staticTitle: ["static-title", "staticTitle"], showStaticTitle: ["show-static-title", "showStaticTitle"] }, outputs: { beforeOpenSidenav: "beforeOpenSidenav", afterOpenSidenav: "afterOpenSidenav", beforeCloseSidenav: "beforeCloseSidenav", afterCloseSidenav: "afterCloseSidenav" }, providers: [
111
+ OAppLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OAppLayoutComponent, selector: "o-app-layout", inputs: { mode: "mode", sidenavMode: ["sidenav-mode", "sidenavMode"], sidenavOpened: ["sidenav-opened", "sidenavOpened"], _showHeader: ["show-header", "_showHeader"], showUserInfo: ["show-user-info", "showUserInfo"], showLanguageSelector: ["show-language-selector", "showLanguageSelector"], useFlagIcons: ["use-flag-icons", "useFlagIcons"], openedSidenavImg: ["opened-sidenav-image", "openedSidenavImg"], closedSidenavImg: ["closed-sidenav-image", "closedSidenavImg"], headerColor: ["header-color", "headerColor"], headerHeight: ["header-height", "headerHeight"], showTitle: ["show-title", "showTitle"], staticTitle: ["static-title", "staticTitle"], showStaticTitle: ["show-static-title", "showStaticTitle"], tooltipDisplayMode: ["tooltip-display-mode", "tooltipDisplayMode"], showEllipsisMenu: ["show-ellipsis-menu", "showEllipsisMenu"] }, outputs: { beforeOpenSidenav: "beforeOpenSidenav", afterOpenSidenav: "afterOpenSidenav", beforeCloseSidenav: "beforeCloseSidenav", afterCloseSidenav: "afterCloseSidenav" }, providers: [
99
112
  { provide: OAppLayoutBase, useExisting: forwardRef(() => OAppLayoutComponent) }
100
- ], queries: [{ propertyName: "userInfoConfiguration", first: true, predicate: OUserInfoConfigurationDirective, descendants: true }], viewQueries: [{ propertyName: "appSidenav", first: true, predicate: ["appSidenav"], descendants: true }, { propertyName: "appHeader", first: true, predicate: ["appHeader"], descendants: true }], ngImport: i0, template: "<o-app-sidenav #appSidenav [sidenav-mode]=\"sidenavMode\" [opened]=\"sidenavOpened\" [show-user-info]=\"showUserInfo\" [show-toggle-button]=\"!showHeader\"\n [opened-sidenav-image]=\"openedSidenavImg\" [closed-sidenav-image]=\"closedSidenavImg\" [layout-mode]=\"mode\" [class.header-layout]=\"showHeader\"\n (onSidenavToggle)=\"sidenavToggle($event)\" (afterSidenavToggle)=\"afterToggle($event)\">\n\n <ng-content select=\"o-app-layout-sidenav[position=start]\" ngProjectAs=\"o-app-layout-sidenav-projection-start\">\n </ng-content>\n <ng-content select=\"o-app-layout-sidenav[position=end]\" ngProjectAs=\"o-app-layout-sidenav-projection-end\">\n </ng-content>\n <ng-content select=\"o-app-layout-sidenav\" ngProjectAs=\"o-app-layout-sidenav-projection-end\"></ng-content>\n\n <o-app-header #appHeader *ngIf=\"showHeader\" [show-title]=\"showTitle\" [show-static-title]=\"showStaticTitle\" [static-title]=\"staticTitle\"\n [show-user-info]=\"showUserInfo\" [show-language-selector]=\"showLanguageSelector\" [use-flag-icons]=\"useFlagIcons\"\n (onSidenavToggle)=\"appSidenav.toggleSidenav()\" [color]=\"headerColor\" [header-height]=\"headerHeight\">\n <mat-icon class=\"sidenav-toggle\" svgIcon=\"ontimize:menu\" (click)=\"appSidenav.toggleSidenav()\" *ngIf=\"appSidenav.isMobileMode()\"></mat-icon>\n <ng-content select=\"o-app-layout-header[position=start]\" ngProjectAs=\"o-app-layout-header-projection-start\">\n </ng-content>\n <ng-content select=\"o-app-layout-header[position=end]\" ngProjectAs=\"o-app-layout-header-projection-end\">\n </ng-content>\n <ng-content select=\"o-app-layout-header\" ngProjectAs=\"o-app-layout-header-projection-start\"></ng-content>\n </o-app-header>\n\n <div class=\"application-layout-content-wrapper\" [class.header-layout]=\"showHeader\">\n <ng-content></ng-content>\n </div>\n</o-app-sidenav>\n", styles: [".application-layout-content-wrapper{z-index:1;position:absolute;top:0;bottom:0;left:0;right:0;overflow:auto;padding:16px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.OAppSidenavComponent, selector: "o-app-sidenav", inputs: ["opened", "show-user-info", "show-toggle-button", "opened-sidenav-image", "closed-sidenav-image", "layout-mode", "sidenav-mode", "store-state"], outputs: ["onSidenavOpenedChange", "onSidenavOpenedStart", "onSidenavClosedStart", "onSidenavToggle", "afterSidenavToggle"] }, { kind: "component", type: i4.OAppHeaderComponent, selector: "o-app-header", inputs: ["show-user-info", "show-language-selector", "use-flag-icons", "color", "header-height", "show-title", "static-title", "show-static-title"], outputs: ["onSidenavToggle"] }], encapsulation: i0.ViewEncapsulation.None });
113
+ ], queries: [{ propertyName: "userInfoConfiguration", first: true, predicate: OUserInfoConfigurationDirective, descendants: true }], viewQueries: [{ propertyName: "appSidenav", first: true, predicate: ["appSidenav"], descendants: true }, { propertyName: "appHeader", first: true, predicate: ["appHeader"], descendants: true }], ngImport: i0, template: "<o-app-sidenav #appSidenav [sidenav-mode]=\"sidenavMode\" [opened]=\"sidenavOpened\" [show-user-info]=\"showUserInfo\" [show-toggle-button]=\"!showHeader\"\n [opened-sidenav-image]=\"openedSidenavImg\" [closed-sidenav-image]=\"closedSidenavImg\" [layout-mode]=\"mode\" [class.header-layout]=\"showHeader\"\n [show-ellipsis-menu] = \"showEllipsisMenu\" (onSidenavToggle)=\"sidenavToggle($event)\" (afterSidenavToggle)=\"afterToggle($event)\">\n\n <ng-content select=\"o-app-layout-sidenav[position=start]\" ngProjectAs=\"o-app-layout-sidenav-projection-start\">\n </ng-content>\n <ng-content select=\"o-app-layout-sidenav[position=end]\" ngProjectAs=\"o-app-layout-sidenav-projection-end\">\n </ng-content>\n <ng-content select=\"o-app-layout-sidenav\" ngProjectAs=\"o-app-layout-sidenav-projection-end\"></ng-content>\n\n <o-app-header #appHeader *ngIf=\"showHeader\" [show-title]=\"showTitle\" [show-static-title]=\"showStaticTitle\" [static-title]=\"staticTitle\"\n [show-user-info]=\"showUserInfo\" [show-language-selector]=\"showLanguageSelector\" [use-flag-icons]=\"useFlagIcons\"\n (onSidenavToggle)=\"appSidenav.toggleSidenav()\" [color]=\"headerColor\" [header-height]=\"headerHeight\">\n <mat-icon class=\"sidenav-toggle\" svgIcon=\"ontimize:menu\" (click)=\"appSidenav.toggleSidenav()\" *ngIf=\"appSidenav.isMobileMode()\"></mat-icon>\n <ng-content select=\"o-app-layout-header[position=start]\" ngProjectAs=\"o-app-layout-header-projection-start\">\n </ng-content>\n <ng-content select=\"o-app-layout-header[position=end]\" ngProjectAs=\"o-app-layout-header-projection-end\">\n </ng-content>\n <ng-content select=\"o-app-layout-header\" ngProjectAs=\"o-app-layout-header-projection-start\"></ng-content>\n </o-app-header>\n\n <div class=\"application-layout-content-wrapper\" [class.header-layout]=\"showHeader\">\n <ng-content></ng-content>\n </div>\n</o-app-sidenav>\n", styles: [".application-layout-content-wrapper{z-index:1;position:absolute;top:0;bottom:0;left:0;right:0;overflow:auto;padding:16px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.OAppSidenavComponent, selector: "o-app-sidenav", inputs: ["opened", "show-user-info", "show-toggle-button", "opened-sidenav-image", "closed-sidenav-image", "layout-mode", "sidenav-mode", "store-state", "show-ellipsis-menu"], outputs: ["onSidenavOpenedChange", "onSidenavOpenedStart", "onSidenavClosedStart", "onSidenavToggle", "afterSidenavToggle"] }, { kind: "component", type: i4.OAppHeaderComponent, selector: "o-app-header", inputs: ["show-user-info", "show-language-selector", "use-flag-icons", "color", "header-height", "show-title", "static-title", "show-static-title"], outputs: ["onSidenavToggle"] }], encapsulation: i0.ViewEncapsulation.None });
101
114
  __decorate([
102
115
  BooleanInputConverter(),
103
116
  __metadata("design:type", Boolean)
@@ -126,12 +139,16 @@ __decorate([
126
139
  BooleanInputConverter(),
127
140
  __metadata("design:type", Boolean)
128
141
  ], OAppLayoutComponent.prototype, "showStaticTitle", void 0);
142
+ __decorate([
143
+ BooleanInputConverter(),
144
+ __metadata("design:type", Boolean)
145
+ ], OAppLayoutComponent.prototype, "showEllipsisMenu", void 0);
129
146
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OAppLayoutComponent, decorators: [{
130
147
  type: Component,
131
148
  args: [{ selector: 'o-app-layout', inputs: DEFAULT_INPUTS_O_APP_LAYOUT, outputs: DEFAULT_OUTPUTS_O_APP_LAYOUT, encapsulation: ViewEncapsulation.None, providers: [
132
149
  { provide: OAppLayoutBase, useExisting: forwardRef(() => OAppLayoutComponent) }
133
- ], template: "<o-app-sidenav #appSidenav [sidenav-mode]=\"sidenavMode\" [opened]=\"sidenavOpened\" [show-user-info]=\"showUserInfo\" [show-toggle-button]=\"!showHeader\"\n [opened-sidenav-image]=\"openedSidenavImg\" [closed-sidenav-image]=\"closedSidenavImg\" [layout-mode]=\"mode\" [class.header-layout]=\"showHeader\"\n (onSidenavToggle)=\"sidenavToggle($event)\" (afterSidenavToggle)=\"afterToggle($event)\">\n\n <ng-content select=\"o-app-layout-sidenav[position=start]\" ngProjectAs=\"o-app-layout-sidenav-projection-start\">\n </ng-content>\n <ng-content select=\"o-app-layout-sidenav[position=end]\" ngProjectAs=\"o-app-layout-sidenav-projection-end\">\n </ng-content>\n <ng-content select=\"o-app-layout-sidenav\" ngProjectAs=\"o-app-layout-sidenav-projection-end\"></ng-content>\n\n <o-app-header #appHeader *ngIf=\"showHeader\" [show-title]=\"showTitle\" [show-static-title]=\"showStaticTitle\" [static-title]=\"staticTitle\"\n [show-user-info]=\"showUserInfo\" [show-language-selector]=\"showLanguageSelector\" [use-flag-icons]=\"useFlagIcons\"\n (onSidenavToggle)=\"appSidenav.toggleSidenav()\" [color]=\"headerColor\" [header-height]=\"headerHeight\">\n <mat-icon class=\"sidenav-toggle\" svgIcon=\"ontimize:menu\" (click)=\"appSidenav.toggleSidenav()\" *ngIf=\"appSidenav.isMobileMode()\"></mat-icon>\n <ng-content select=\"o-app-layout-header[position=start]\" ngProjectAs=\"o-app-layout-header-projection-start\">\n </ng-content>\n <ng-content select=\"o-app-layout-header[position=end]\" ngProjectAs=\"o-app-layout-header-projection-end\">\n </ng-content>\n <ng-content select=\"o-app-layout-header\" ngProjectAs=\"o-app-layout-header-projection-start\"></ng-content>\n </o-app-header>\n\n <div class=\"application-layout-content-wrapper\" [class.header-layout]=\"showHeader\">\n <ng-content></ng-content>\n </div>\n</o-app-sidenav>\n", styles: [".application-layout-content-wrapper{z-index:1;position:absolute;top:0;bottom:0;left:0;right:0;overflow:auto;padding:16px}\n"] }]
134
- }], propDecorators: { sidenavOpened: [], showUserInfo: [], showLanguageSelector: [], useFlagIcons: [], _showHeader: [], showTitle: [], showStaticTitle: [], appSidenav: [{
150
+ ], template: "<o-app-sidenav #appSidenav [sidenav-mode]=\"sidenavMode\" [opened]=\"sidenavOpened\" [show-user-info]=\"showUserInfo\" [show-toggle-button]=\"!showHeader\"\n [opened-sidenav-image]=\"openedSidenavImg\" [closed-sidenav-image]=\"closedSidenavImg\" [layout-mode]=\"mode\" [class.header-layout]=\"showHeader\"\n [show-ellipsis-menu] = \"showEllipsisMenu\" (onSidenavToggle)=\"sidenavToggle($event)\" (afterSidenavToggle)=\"afterToggle($event)\">\n\n <ng-content select=\"o-app-layout-sidenav[position=start]\" ngProjectAs=\"o-app-layout-sidenav-projection-start\">\n </ng-content>\n <ng-content select=\"o-app-layout-sidenav[position=end]\" ngProjectAs=\"o-app-layout-sidenav-projection-end\">\n </ng-content>\n <ng-content select=\"o-app-layout-sidenav\" ngProjectAs=\"o-app-layout-sidenav-projection-end\"></ng-content>\n\n <o-app-header #appHeader *ngIf=\"showHeader\" [show-title]=\"showTitle\" [show-static-title]=\"showStaticTitle\" [static-title]=\"staticTitle\"\n [show-user-info]=\"showUserInfo\" [show-language-selector]=\"showLanguageSelector\" [use-flag-icons]=\"useFlagIcons\"\n (onSidenavToggle)=\"appSidenav.toggleSidenav()\" [color]=\"headerColor\" [header-height]=\"headerHeight\">\n <mat-icon class=\"sidenav-toggle\" svgIcon=\"ontimize:menu\" (click)=\"appSidenav.toggleSidenav()\" *ngIf=\"appSidenav.isMobileMode()\"></mat-icon>\n <ng-content select=\"o-app-layout-header[position=start]\" ngProjectAs=\"o-app-layout-header-projection-start\">\n </ng-content>\n <ng-content select=\"o-app-layout-header[position=end]\" ngProjectAs=\"o-app-layout-header-projection-end\">\n </ng-content>\n <ng-content select=\"o-app-layout-header\" ngProjectAs=\"o-app-layout-header-projection-start\"></ng-content>\n </o-app-header>\n\n <div class=\"application-layout-content-wrapper\" [class.header-layout]=\"showHeader\">\n <ng-content></ng-content>\n </div>\n</o-app-sidenav>\n", styles: [".application-layout-content-wrapper{z-index:1;position:absolute;top:0;bottom:0;left:0;right:0;overflow:auto;padding:16px}\n"] }]
151
+ }], propDecorators: { sidenavOpened: [], showUserInfo: [], showLanguageSelector: [], useFlagIcons: [], _showHeader: [], showTitle: [], showStaticTitle: [], showEllipsisMenu: [], appSidenav: [{
135
152
  type: ViewChild,
136
153
  args: ['appSidenav']
137
154
  }], appHeader: [{
@@ -141,4 +158,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
141
158
  type: ContentChild,
142
159
  args: [OUserInfoConfigurationDirective]
143
160
  }] } });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hcHAtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2FwcC1sYXlvdXQvby1hcHAtbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2FwcC1sYXlvdXQvby1hcHAtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0gsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sd0ZBQXdGLENBQUM7QUFDekksT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFFLEtBQUssRUFBZ0MsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQUUzRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRztJQUN6QyxNQUFNO0lBQ04sMkJBQTJCO0lBQzNCLCtCQUErQjtJQUMvQiwwQkFBMEI7SUFDMUIsOEJBQThCO0lBQzlCLDhDQUE4QztJQUM5Qyw4QkFBOEI7SUFDOUIsd0NBQXdDO0lBQ3hDLHdDQUF3QztJQUN4QywyQkFBMkI7SUFDM0IsNkJBQTZCO0lBQzdCLHVCQUF1QjtJQUN2QiwyQkFBMkI7SUFD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bml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuaW1wb3J0IHsgT1VzZXJJbmZvQ29uZmlndXJhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvdXNlci1pbmZvL3VzZXItaW5mby1jb25maWd1cmF0aW9uL28tdXNlci1pbmZvLWNvbmZpZ3VyYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IENvZGVzLCBPQXBwTGF5b3V0TW9kZSwgT1NpZGVuYXZNb2RlIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9BcHBTaWRlbmF2QmFzZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYXBwLXNpZGVuYXYvby1hcHAtc2lkZW5hdi1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9BcHBIZWFkZXJCYXNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hcHAtaGVhZGVyL28tYXBwLWhlYWRlci1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9BcHBMYXlvdXRCYXNlIH0gZnJvbSAnLi9vLWFwcC1sYXlvdXQtYmFzZS5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0FQUF9MQVlPVVQgPSBbXG4gICdtb2RlJyxcbiAgJ3NpZGVuYXZNb2RlOiBzaWRlbmF2LW1vZGUnLFxuICAnc2lkZW5hdk9wZW5lZDogc2lkZW5hdi1vcGVuZWQnLFxuICAnX3Nob3dIZWFkZXI6IHNob3ctaGVhZGVyJyxcbiAgJ3Nob3dVc2VySW5mbzogc2hvdy11c2VyLWluZm8nLFxuICAnc2hvd0xhbmd1YWdlU2VsZWN0b3I6IHNob3ctbGFuZ3VhZ2Utc2VsZWN0b3InLFxuICAndXNlRmxhZ0ljb25zOiB1c2UtZmxhZy1pY29ucycsXG4gICdvcGVuZWRTaWRlbmF2SW1nOiBvcGVuZWQtc2lkZW5hdi1pbWFnZScsXG4gICdjbG9zZWRTaWRlbmF2SW1nOiBjbG9zZWQtc2lkZW5hdi1pbWFnZScsXG4gICdoZWFkZXJDb2xvcjogaGVhZGVyLWNvbG9yJyxcbiAgJ2hlYWRlckhlaWdodDogaGVhZGVyLWhlaWdodCcsXG4gICdzaG93VGl0bGU6IHNob3ctdGl0bGUnLFxuICAnc3RhdGljVGl0bGU6IHN0YXRpYy10aXRsZScsXG4gICdzaG93U3RhdGljVGl0bGU6IHNob3ctc3RhdGljLXRpdGxlJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX0FQUF9MQVlPVVQ6IGFueVtdID0gW1xuICAnYmVmb3JlT3BlblNpZGVuYXYnLFxuICAnYWZ0ZXJPcGVuU2lkZW5hdicsXG4gICdiZWZvcmVDbG9zZVNpZGVuYXYnLFxuICAnYWZ0ZXJDbG9zZVNpZGVuYXYnXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWFwcC1sYXlvdXQnLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fQVBQX0xBWU9VVCxcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fQVBQX0xBWU9VVCxcbiAgdGVtcGxhdGVVcmw6ICcuL28tYXBwLWxheW91dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tYXBwLWxheW91dC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE9BcHBMYXlvdXRCYXNlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBPQXBwTGF5b3V0Q29tcG9uZW50KSB9XG4gIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBPQXBwTGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNpZGVuYXZPcGVuZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1VzZXJJbmZvOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dMYW5ndWFnZVNlbGVjdG9yOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHVzZUZsYWdJY29uczogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIF9zaG93SGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzaG93VGl0bGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpY1RpdGxlOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgc2hvd1N0YXRpY1RpdGxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGhlYWRlckNvbG9yOiBUaGVtZVBhbGV0dGU7XG4gIHB1YmxpYyBoZWFkZXJIZWlnaHQgPSBDb2Rlcy5ERUZBVUxUX1JPV19IRUlHSFQ7XG5cbiAgQFZpZXdDaGlsZCgnYXBwU2lkZW5hdicpXG4gIHB1YmxpYyBhcHBTaWRlbmF2OiBPQXBwU2lkZW5hdkJhc2U7XG5cbiAgQFZpZXdDaGlsZCgnYXBwSGVhZGVyJylcbiAgcHVibGljIGFwcEhlYWRlcjogT0FwcEhlYWRlckJhc2U7XG5cbiAgQENvbnRlbnRDaGlsZChPVXNlckluZm9Db25maWd1cmF0aW9uRGlyZWN0aXZlKVxuICBwdWJsaWMgdXNlckluZm9Db25maWd1cmF0aW9uOiBPVXNlckluZm9Db25maWd1cmF0aW9uRGlyZWN0aXZlO1xuXG4gIHByb3RlY3RlZCBfbW9kZTogT0FwcExheW91dE1vZGU7XG4gIHByb3RlY3RlZCBfc2lkZW5hdk1vZGU6IE9TaWRlbmF2TW9kZTtcblxuICBvcGVuZWRTaWRlbmF2SW1nOiBzdHJpbmc7XG4gIGNsb3NlZFNpZGVuYXZJbWc6IHN0cmluZztcblxuICBiZWZvcmVPcGVuU2lkZW5hdjogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBhZnRlck9wZW5TaWRlbmF2OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIGJlZm9yZUNsb3NlU2lkZW5hdjogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBhZnRlckNsb3NlU2lkZW5hdjogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGdldCBzaG93SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93SGVhZGVyO1xuICB9XG5cbiAgc2V0IHNob3dIZWFkZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0hlYWRlciA9IHZhbDtcbiAgfVxuXG4gIGdldCBtb2RlKCk6IE9BcHBMYXlvdXRNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcbiAgfVxuXG4gIHNldCBtb2RlKHZhbDogT0FwcExheW91dE1vZGUpIHtcbiAgICBjb25zdCBtID0gQ29kZXMuT0FwcExheW91dE1vZGVzLmZpbmQoZSA9PiBlID09PSB2YWwpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChtKSkge1xuICAgICAgdGhpcy5fbW9kZSA9IG07XG4gICAgICBpZiAodGhpcy5fbW9kZSA9PT0gJ21vYmlsZScgJiYgIVV0aWwuaXNEZWZpbmVkKHRoaXMuc2hvd0hlYWRlcikpIHtcbiAgICAgICAgdGhpcy5zaG93SGVhZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBgby1hcHAtbGF5b3V0YCBtb2RlICgnICsgdmFsICsgJyknKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2lkZW5hdk1vZGUoKTogT1NpZGVuYXZNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fc2lkZW5hdk1vZGU7XG4gIH1cblxuICBzZXQgc2lkZW5hdk1vZGUodmFsOiBPU2lkZW5hdk1vZGUpIHtcbiAgICBjb25zdCBtID0gQ29kZXMuT1NpZGVuYXZNb2Rlcy5maW5kKGUgPT4gZSA9PT0gdmFsKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQobSkpIHtcbiAgICAgIHRoaXMuX3NpZGVuYXZNb2RlID0gbTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBgby1hcHAtbGF5b3V0YCBzaWRlbmF2LW1vZGUgKCcgKyB2YWwgKyAnKScpO1xuICAgIH1cbiAgfVxuXG4gIHNpZGVuYXZUb2dnbGUob3BlbmVkOiBib29sZWFuKSB7XG4gICAgb3BlbmVkID8gdGhpcy5iZWZvcmVPcGVuU2lkZW5hdi5lbWl0KCkgOiB0aGlzLmJlZm9yZUNsb3NlU2lkZW5hdi5lbWl0KCk7XG4gIH1cblxuICBhZnRlclRvZ2dsZShvcGVuZWQ6IGJvb2xlYW4pIHtcbiAgICBvcGVuZWQgPyB0aGlzLmFmdGVyT3BlblNpZGVuYXYuZW1pdCgpIDogdGhpcy5hZnRlckNsb3NlU2lkZW5hdi5lbWl0KCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXBwSGVhZGVyICYmIHRoaXMuYXBwSGVhZGVyLnVzZXJJbmZvKSB7XG4gICAgICB0aGlzLmFwcEhlYWRlci51c2VySW5mby5yZWdpc3RlclVzZXJJbmZvQ29uZmlndXJhdGlvbih0aGlzLnVzZXJJbmZvQ29uZmlndXJhdGlvbik7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxvLWFwcC1zaWRlbmF2ICNhcHBTaWRlbmF2IFtzaWRlbmF2LW1vZGVdPVwic2lkZW5hdk1vZGVcIiBbb3BlbmVkXT1cInNpZGVuYXZPcGVuZWRcIiBbc2hvdy11c2VyLWluZm9dPVwic2hvd1VzZXJJbmZvXCIgW3Nob3ctdG9nZ2xlLWJ1dHRvbl09XCIhc2hvd0hlYWRlclwiXG4gIFtvcGVuZWQtc2lkZW5hdi1pbWFnZV09XCJvcGVuZWRTaWRlbmF2SW1nXCIgW2Nsb3NlZC1zaWRlbmF2LWltYWdlXT1cImNsb3NlZFNpZGVuYXZJbWdcIiBbbGF5b3V0LW1vZGVdPVwibW9kZVwiIFtjbGFzcy5oZWFkZXItbGF5b3V0XT1cInNob3dIZWFkZXJcIlxuICAob25TaWRlbmF2VG9nZ2xlKT1cInNpZGVuYXZUb2dnbGUoJGV2ZW50KVwiIChhZnRlclNpZGVuYXZUb2dnbGUpPVwiYWZ0ZXJUb2dnbGUoJGV2ZW50KVwiPlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIm8tYXBwLWxheW91dC1zaWRlbmF2W3Bvc2l0aW9uPXN0YXJ0XVwiIG5nUHJvamVjdEFzPVwiby1hcHAtbGF5b3V0LXNpZGVuYXYtcHJvamVjdGlvbi1zdGFydFwiPlxuICA8L25nLWNvbnRlbnQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIm8tYXBwLWxheW91dC1zaWRlbmF2W3Bvc2l0aW9uPWVuZF1cIiBuZ1Byb2plY3RBcz1cIm8tYXBwLWxheW91dC1zaWRlbmF2LXByb2plY3Rpb24tZW5kXCI+XG4gIDwvbmctY29udGVudD5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby1hcHAtbGF5b3V0LXNpZGVuYXZcIiBuZ1Byb2plY3RBcz1cIm8tYXBwLWxheW91dC1zaWRlbmF2LXByb2plY3Rpb24tZW5kXCI+PC9uZy1jb250ZW50PlxuXG4gIDxvLWFwcC1oZWFkZXIgI2FwcEhlYWRlciAqbmdJZj1cInNob3dIZWFkZXJcIiBbc2hvdy10aXRsZV09XCJzaG93VGl0bGVcIiBbc2hvdy1zdGF0aWMtdGl0bGVdPVwic2hvd1N0YXRpY1RpdGxlXCIgW3N0YXRpYy10aXRsZV09XCJzdGF0aWNUaXRsZVwiXG4gICAgW3Nob3ctdXNlci1pbmZvXT1cInNob3dVc2VySW5mb1wiIFtzaG93LWxhbmd1YWdlLXNlbGVjdG9yXT1cInNob3dMYW5ndWFnZVNlbGVjdG9yXCIgW3VzZS1mbGFnLWljb25zXT1cInVzZUZsYWdJY29uc1wiXG4gICAgKG9uU2lkZW5hdlRvZ2dsZSk9XCJhcHBTaWRlbmF2LnRvZ2dsZVNpZGVuYXYoKVwiIFtjb2xvcl09XCJoZWFkZXJDb2xvclwiIFtoZWFkZXItaGVpZ2h0XT1cImhlYWRlckhlaWdodFwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cInNpZGVuYXYtdG9nZ2xlXCIgc3ZnSWNvbj1cIm9udGltaXplOm1lbnVcIiAoY2xpY2spPVwiYXBwU2lkZW5hdi50b2dnbGVTaWRlbmF2KClcIiAqbmdJZj1cImFwcFNpZGVuYXYuaXNNb2JpbGVNb2RlKClcIj48L21hdC1pY29uPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm8tYXBwLWxheW91dC1oZWFkZXJbcG9zaXRpb249c3RhcnRdXCIgbmdQcm9qZWN0QXM9XCJvLWFwcC1sYXlvdXQtaGVhZGVyLXByb2plY3Rpb24tc3RhcnRcIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby1hcHAtbGF5b3V0LWhlYWRlcltwb3NpdGlvbj1lbmRdXCIgbmdQcm9qZWN0QXM9XCJvLWFwcC1sYXlvdXQtaGVhZGVyLXByb2plY3Rpb24tZW5kXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm8tYXBwLWxheW91dC1oZWFkZXJcIiBuZ1Byb2plY3RBcz1cIm8tYXBwLWxheW91dC1oZWFkZXItcHJvamVjdGlvbi1zdGFydFwiPjwvbmctY29udGVudD5cbiAgPC9vLWFwcC1oZWFkZXI+XG5cbiAgPGRpdiBjbGFzcz1cImFwcGxpY2F0aW9uLWxheW91dC1jb250ZW50LXdyYXBwZXJcIiBbY2xhc3MuaGVhZGVyLWxheW91dF09XCJzaG93SGVhZGVyXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvby1hcHAtc2lkZW5hdj5cbiJdfQ==
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hcHAtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2FwcC1sYXlvdXQvby1hcHAtbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2FwcC1sYXlvdXQvby1hcHAtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx3RkFBd0YsQ0FBQztBQUN6SSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFnQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQUUzRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRztJQUN6QyxNQUFNO0lBQ04sMkJBQTJCO0lBQzNCLCtCQUErQjtJQUMvQiwwQkFBMEI7SUFDMUIsOEJBQThCO0lBQzlCLDhDQUE4QztJQUM5Qyw4QkFBOEI7SUFDOUIsd0NBQXdDO0lBQ3hDLHdDQUF3QztJQUN4QywyQkFBMkI7SUFDM0IsNkJBQTZCO0lBQzdCLHVCQUF1QjtJQUN2QiwyQkFBMkI7SUFD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QUFDeEM7SUFBQyxxQkFBcUIsRUFBRTs7NkRBQ2lCOzJGQWxCOUIsbUJBQW1CO2tCQVovQixTQUFTOytCQUNFLGNBQWMsVUFDaEIsMkJBQTJCLFdBQzFCLDRCQUE0QixpQkFHdEIsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDVCxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsRUFBRTtxQkFDaEY7OEJBTUQsYUFBYSxNQUViLFlBQVksTUFFWixvQkFBb0IsTUFFcEIsWUFBWSxNQUVGLFdBQVcsTUFFZCxTQUFTLE1BR1QsZUFBZSxNQUVmLGdCQUFnQixNQU1oQixVQUFVO3NCQURoQixTQUFTO3VCQUFDLFlBQVk7Z0JBSWhCLFNBQVM7c0JBRGYsU0FBUzt1QkFBQyxXQUFXO2dCQUlmLHFCQUFxQjtzQkFEM0IsWUFBWTt1QkFBQywrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuaW1wb3J0IHsgT0FwcEhlYWRlckJhc2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FwcC1oZWFkZXIvby1hcHAtaGVhZGVyLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT0FwcFNpZGVuYXZCYXNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hcHAtc2lkZW5hdi9vLWFwcC1zaWRlbmF2LWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT1VzZXJJbmZvQ29uZmlndXJhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvdXNlci1pbmZvL3VzZXItaW5mby1jb25maWd1cmF0aW9uL28tdXNlci1pbmZvLWNvbmZpZ3VyYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IENvZGVzLCBPQXBwTGF5b3V0TW9kZSwgT1NpZGVuYXZNb2RlIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9BcHBMYXlvdXRCYXNlIH0gZnJvbSAnLi9vLWFwcC1sYXlvdXQtYmFzZS5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0FQUF9MQVlPVVQgPSBbXG4gICdtb2RlJyxcbiAgJ3NpZGVuYXZNb2RlOiBzaWRlbmF2LW1vZGUnLFxuICAnc2lkZW5hdk9wZW5lZDogc2lkZW5hdi1vcGVuZWQnLFxuICAnX3Nob3dIZWFkZXI6IHNob3ctaGVhZGVyJyxcbiAgJ3Nob3dVc2VySW5mbzogc2hvdy11c2VyLWluZm8nLFxuICAnc2hvd0xhbmd1YWdlU2VsZWN0b3I6IHNob3ctbGFuZ3VhZ2Utc2VsZWN0b3InLFxuICAndXNlRmxhZ0ljb25zOiB1c2UtZmxhZy1pY29ucycsXG4gICdvcGVuZWRTaWRlbmF2SW1nOiBvcGVuZWQtc2lkZW5hdi1pbWFnZScsXG4gICdjbG9zZWRTaWRlbmF2SW1nOiBjbG9zZWQtc2lkZW5hdi1pbWFnZScsXG4gICdoZWFkZXJDb2xvcjogaGVhZGVyLWNvbG9yJyxcbiAgJ2hlYWRlckhlaWdodDogaGVhZGVyLWhlaWdodCcsXG4gICdzaG93VGl0bGU6IHNob3ctdGl0bGUnLFxuICAnc3RhdGljVGl0bGU6IHN0YXRpYy10aXRsZScsXG4gICdzaG93U3RhdGljVGl0bGU6IHNob3ctc3RhdGljLXRpdGxlJyxcbiAgJ3Rvb2x0aXBEaXNwbGF5TW9kZTogdG9vbHRpcC1kaXNwbGF5LW1vZGUnLFxuICAnc2hvd0VsbGlwc2lzTWVudTogc2hvdy1lbGxpcHNpcy1tZW51J1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX0FQUF9MQVlPVVQ6IGFueVtdID0gW1xuICAnYmVmb3JlT3BlblNpZGVuYXYnLFxuICAnYWZ0ZXJPcGVuU2lkZW5hdicsXG4gICdiZWZvcmVDbG9zZVNpZGVuYXYnLFxuICAnYWZ0ZXJDbG9zZVNpZGVuYXYnXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWFwcC1sYXlvdXQnLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fQVBQX0xBWU9VVCxcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fQVBQX0xBWU9VVCxcbiAgdGVtcGxhdGVVcmw6ICcuL28tYXBwLWxheW91dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tYXBwLWxheW91dC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE9BcHBMYXlvdXRCYXNlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBPQXBwTGF5b3V0Q29tcG9uZW50KSB9XG4gIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBPQXBwTGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNpZGVuYXZPcGVuZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1VzZXJJbmZvOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dMYW5ndWFnZVNlbGVjdG9yOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHVzZUZsYWdJY29uczogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIF9zaG93SGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzaG93VGl0bGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpY1RpdGxlOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgc2hvd1N0YXRpY1RpdGxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgc2hvd0VsbGlwc2lzTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBoZWFkZXJDb2xvcjogVGhlbWVQYWxldHRlO1xuICBwdWJsaWMgaGVhZGVySGVpZ2h0ID0gQ29kZXMuREVGQVVMVF9ST1dfSEVJR0hUO1xuXG4gIEBWaWV3Q2hpbGQoJ2FwcFNpZGVuYXYnKVxuICBwdWJsaWMgYXBwU2lkZW5hdjogT0FwcFNpZGVuYXZCYXNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2FwcEhlYWRlcicpXG4gIHB1YmxpYyBhcHBIZWFkZXI6IE9BcHBIZWFkZXJCYXNlO1xuXG4gIEBDb250ZW50Q2hpbGQoT1VzZXJJbmZvQ29uZmlndXJhdGlvbkRpcmVjdGl2ZSlcbiAgcHVibGljIHVzZXJJbmZvQ29uZmlndXJhdGlvbjogT1VzZXJJbmZvQ29uZmlndXJhdGlvbkRpcmVjdGl2ZTtcblxuICBwcm90ZWN0ZWQgX21vZGU6IE9BcHBMYXlvdXRNb2RlO1xuICBwcm90ZWN0ZWQgX3NpZGVuYXZNb2RlOiBPU2lkZW5hdk1vZGU7XG5cbiAgb3BlbmVkU2lkZW5hdkltZzogc3RyaW5nO1xuICBjbG9zZWRTaWRlbmF2SW1nOiBzdHJpbmc7XG5cbiAgYmVmb3JlT3BlblNpZGVuYXY6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgYWZ0ZXJPcGVuU2lkZW5hdjogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBiZWZvcmVDbG9zZVNpZGVuYXY6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgYWZ0ZXJDbG9zZVNpZGVuYXY6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBfdG9vbHRpcERpc3BsYXlNb2RlOiBzdHJpbmcgPSBDb2Rlcy5UT09MVElQX0RJU1BMQVlfQ09MTEFQU0VEXG5cbiAgZ2V0IHNob3dIZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dIZWFkZXI7XG4gIH1cblxuICBzZXQgc2hvd0hlYWRlcih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93SGVhZGVyID0gdmFsO1xuICB9XG5cbiAgZ2V0IG1vZGUoKTogT0FwcExheW91dE1vZGUge1xuICAgIHJldHVybiB0aGlzLl9tb2RlO1xuICB9XG5cbiAgc2V0IG1vZGUodmFsOiBPQXBwTGF5b3V0TW9kZSkge1xuICAgIGNvbnN0IG0gPSBDb2Rlcy5PQXBwTGF5b3V0TW9kZXMuZmluZChlID0+IGUgPT09IHZhbCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKG0pKSB7XG4gICAgICB0aGlzLl9tb2RlID0gbTtcbiAgICAgIGlmICh0aGlzLl9tb2RlID09PSAnbW9iaWxlJyAmJiAhVXRpbC5pc0RlZmluZWQodGhpcy5zaG93SGVhZGVyKSkge1xuICAgICAgICB0aGlzLnNob3dIZWFkZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGBvLWFwcC1sYXlvdXRgIG1vZGUgKCcgKyB2YWwgKyAnKScpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaWRlbmF2TW9kZSgpOiBPU2lkZW5hdk1vZGUge1xuICAgIHJldHVybiB0aGlzLl9zaWRlbmF2TW9kZTtcbiAgfVxuXG4gIHNldCBzaWRlbmF2TW9kZSh2YWw6IE9TaWRlbmF2TW9kZSkge1xuICAgIGNvbnN0IG0gPSBDb2Rlcy5PU2lkZW5hdk1vZGVzLmZpbmQoZSA9PiBlID09PSB2YWwpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChtKSkge1xuICAgICAgdGhpcy5fc2lkZW5hdk1vZGUgPSBtO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGBvLWFwcC1sYXlvdXRgIHNpZGVuYXYtbW9kZSAoJyArIHZhbCArICcpJyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRvb2x0aXBEaXNwbGF5TW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90b29sdGlwRGlzcGxheU1vZGU7XG4gIH1cblxuICBzZXQgdG9vbHRpcERpc3BsYXlNb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgY29uc3QgbSA9IENvZGVzLlRPT0xUSVBfRElTUExBWV9NT0RFLmZpbmQoZSA9PiBlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHZhbCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKG0pKSB7XG4gICAgICB0aGlzLl90b29sdGlwRGlzcGxheU1vZGUgPSBtO1xuICAgIH1cbiAgfVxuXG4gIHNpZGVuYXZUb2dnbGUob3BlbmVkOiBib29sZWFuKSB7XG4gICAgb3BlbmVkID8gdGhpcy5iZWZvcmVPcGVuU2lkZW5hdi5lbWl0KCkgOiB0aGlzLmJlZm9yZUNsb3NlU2lkZW5hdi5lbWl0KCk7XG4gIH1cblxuICBhZnRlclRvZ2dsZShvcGVuZWQ6IGJvb2xlYW4pIHtcbiAgICBvcGVuZWQgPyB0aGlzLmFmdGVyT3BlblNpZGVuYXYuZW1pdCgpIDogdGhpcy5hZnRlckNsb3NlU2lkZW5hdi5lbWl0KCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXBwSGVhZGVyICYmIHRoaXMuYXBwSGVhZGVyLnVzZXJJbmZvKSB7XG4gICAgICB0aGlzLmFwcEhlYWRlci51c2VySW5mby5yZWdpc3RlclVzZXJJbmZvQ29uZmlndXJhdGlvbih0aGlzLnVzZXJJbmZvQ29uZmlndXJhdGlvbik7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxvLWFwcC1zaWRlbmF2ICNhcHBTaWRlbmF2IFtzaWRlbmF2LW1vZGVdPVwic2lkZW5hdk1vZGVcIiBbb3BlbmVkXT1cInNpZGVuYXZPcGVuZWRcIiBbc2hvdy11c2VyLWluZm9dPVwic2hvd1VzZXJJbmZvXCIgW3Nob3ctdG9nZ2xlLWJ1dHRvbl09XCIhc2hvd0hlYWRlclwiXG4gIFtvcGVuZWQtc2lkZW5hdi1pbWFnZV09XCJvcGVuZWRTaWRlbmF2SW1nXCIgW2Nsb3NlZC1zaWRlbmF2LWltYWdlXT1cImNsb3NlZFNpZGVuYXZJbWdcIiBbbGF5b3V0LW1vZGVdPVwibW9kZVwiIFtjbGFzcy5oZWFkZXItbGF5b3V0XT1cInNob3dIZWFkZXJcIlxuICBbc2hvdy1lbGxpcHNpcy1tZW51XSA9IFwic2hvd0VsbGlwc2lzTWVudVwiIChvblNpZGVuYXZUb2dnbGUpPVwic2lkZW5hdlRvZ2dsZSgkZXZlbnQpXCIgKGFmdGVyU2lkZW5hdlRvZ2dsZSk9XCJhZnRlclRvZ2dsZSgkZXZlbnQpXCI+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby1hcHAtbGF5b3V0LXNpZGVuYXZbcG9zaXRpb249c3RhcnRdXCIgbmdQcm9qZWN0QXM9XCJvLWFwcC1sYXlvdXQtc2lkZW5hdi1wcm9qZWN0aW9uLXN0YXJ0XCI+XG4gIDwvbmctY29udGVudD5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby1hcHAtbGF5b3V0LXNpZGVuYXZbcG9zaXRpb249ZW5kXVwiIG5nUHJvamVjdEFzPVwiby1hcHAtbGF5b3V0LXNpZGVuYXYtcHJvamVjdGlvbi1lbmRcIj5cbiAgPC9uZy1jb250ZW50PlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJvLWFwcC1sYXlvdXQtc2lkZW5hdlwiIG5nUHJvamVjdEFzPVwiby1hcHAtbGF5b3V0LXNpZGVuYXYtcHJvamVjdGlvbi1lbmRcIj48L25nLWNvbnRlbnQ+XG5cbiAgPG8tYXBwLWhlYWRlciAjYXBwSGVhZGVyICpuZ0lmPVwic2hvd0hlYWRlclwiIFtzaG93LXRpdGxlXT1cInNob3dUaXRsZVwiIFtzaG93LXN0YXRpYy10aXRsZV09XCJzaG93U3RhdGljVGl0bGVcIiBbc3RhdGljLXRpdGxlXT1cInN0YXRpY1RpdGxlXCJcbiAgICBbc2hvdy11c2VyLWluZm9dPVwic2hvd1VzZXJJbmZvXCIgW3Nob3ctbGFuZ3VhZ2Utc2VsZWN0b3JdPVwic2hvd0xhbmd1YWdlU2VsZWN0b3JcIiBbdXNlLWZsYWctaWNvbnNdPVwidXNlRmxhZ0ljb25zXCJcbiAgICAob25TaWRlbmF2VG9nZ2xlKT1cImFwcFNpZGVuYXYudG9nZ2xlU2lkZW5hdigpXCIgW2NvbG9yXT1cImhlYWRlckNvbG9yXCIgW2hlYWRlci1oZWlnaHRdPVwiaGVhZGVySGVpZ2h0XCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwic2lkZW5hdi10b2dnbGVcIiBzdmdJY29uPVwib250aW1pemU6bWVudVwiIChjbGljayk9XCJhcHBTaWRlbmF2LnRvZ2dsZVNpZGVuYXYoKVwiICpuZ0lmPVwiYXBwU2lkZW5hdi5pc01vYmlsZU1vZGUoKVwiPjwvbWF0LWljb24+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby1hcHAtbGF5b3V0LWhlYWRlcltwb3NpdGlvbj1zdGFydF1cIiBuZ1Byb2plY3RBcz1cIm8tYXBwLWxheW91dC1oZWFkZXItcHJvamVjdGlvbi1zdGFydFwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJvLWFwcC1sYXlvdXQtaGVhZGVyW3Bvc2l0aW9uPWVuZF1cIiBuZ1Byb2plY3RBcz1cIm8tYXBwLWxheW91dC1oZWFkZXItcHJvamVjdGlvbi1lbmRcIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby1hcHAtbGF5b3V0LWhlYWRlclwiIG5nUHJvamVjdEFzPVwiby1hcHAtbGF5b3V0LWhlYWRlci1wcm9qZWN0aW9uLXN0YXJ0XCI+PC9uZy1jb250ZW50PlxuICA8L28tYXBwLWhlYWRlcj5cblxuICA8ZGl2IGNsYXNzPVwiYXBwbGljYXRpb24tbGF5b3V0LWNvbnRlbnQtd3JhcHBlclwiIFtjbGFzcy5oZWFkZXItbGF5b3V0XT1cInNob3dIZWFkZXJcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9vLWFwcC1zaWRlbmF2PlxuIl19
@@ -4,7 +4,7 @@ import { MatDialog } from '@angular/material/dialog';
4
4
  import { ActivatedRoute, Router } from '@angular/router';
5
5
  import { BehaviorSubject, Subscription } from 'rxjs';
6
6
  import { BooleanInputConverter } from '../../decorators/input-converter';
7
- import { ComponentStateServiceProvider, O_COMPONENT_STATE_SERVICE } from '../../services/factories';
7
+ import { ComponentStateServiceProvider } from '../../services/factories';
8
8
  import { LocalStorageService } from '../../services/local-storage.service';
9
9
  import { NavigationService } from '../../services/navigation.service';
10
10
  import { OFormLayoutManagerService } from '../../services/o-form-layout-manager.service';
@@ -17,6 +17,7 @@ import { Util } from '../../util/util';
17
17
  import { OFormLayoutDialogComponent } from './dialog/o-form-layout-dialog.component';
18
18
  import { CanActivateFormLayoutChildGuard } from './guards/o-form-layout-can-activate-child.guard';
19
19
  import { OFormLayoutManagerBase } from './o-form-layout-manager-base.class';
20
+ import { O_COMPONENT_STATE_SERVICE } from '../../injection-tokens';
20
21
  import * as i0 from "@angular/core";
21
22
  import * as i1 from "@angular/router";
22
23
  import * as i2 from "@angular/material/dialog";
@@ -287,8 +288,8 @@ export class OFormLayoutManagerComponent {
287
288
  label: context?.label || '',
288
289
  innerFormsInfo: {},
289
290
  rendered: false,
291
+ rendererSubject: new BehaviorSubject(false),
290
292
  insertionMode: childRoute.queryParams[Codes.INSERTION_MODE] === 'true',
291
- rendererSubject: new BehaviorSubject(false)
292
293
  };
293
294
  newDetailComp.rendererSubject.subscribe((renderer) => {
294
295
  if (renderer) {
@@ -554,4 +555,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
554
555
  type: HostListener,
555
556
  args: ['window:beforeunload', []]
556
557
  }] } });
557
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWxheW91dC1tYW5hZ2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2Zvcm0tbGF5b3V0L28tZm9ybS1sYXlvdXQtbWFuYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvbGF5b3V0cy9mb3JtLWxheW91dC9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxFQUdSLFFBQVEsRUFDUixRQUFRLEVBRVIsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQWlDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBaUMsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEYsT0FBTyxFQUFFLGVBQWUsRUFBYyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFJekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFL0YsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sb0VB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UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2tpcFNlbGYsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgSUxheW91dE1hbmFnZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2xheW91dC1tYW5hZ2VyLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUxvY2FsU3RvcmFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbG9jYWwtc3RvcmFnZS1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlck1vZGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tZm9ybS1sYXlvdXQtbWFuYWdlci1tb2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb21wb25lbnRTdGF0ZVNlcnZpY2VQcm92aWRlciwgT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tZm9ybS1sYXlvdXQtbWFuYWdlci1jb21wb25lbnQtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGUvby1mb3JtLWxheW91dC1tYW5hZ2VyLWNvbXBvbmVudC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlL28tdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUxheW91dENsb3NlRGV0YWlsT3B0aW9ucywgRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEgfSBmcm9tICcuLi8uLi90eXBlcy9mb3JtLWxheW91dC1kZXRhaWwtY29tcG9uZW50LWRhdGEudHlwZSc7XG5pbXBvcnQgeyBPX0dMT0JBTF9DT05GSUcgfSBmcm9tICcuLi8uLi90eXBlcy9vLWdsb2JhbC1jb25maWcudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRm9ybUxheW91dERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9nL28tZm9ybS1sYXlvdXQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYW5BY3RpdmF0ZUZvcm1MYXlvdXRDaGlsZEd1YXJkIH0gZnJvbSAnLi9ndWFyZHMvby1mb3JtLWxheW91dC1jYW4tYWN0aXZhdGUtY2hpbGQuZ3VhcmQnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSB9IGZyb20gJy4vby1mb3JtLWxheW91dC1tYW5hZ2VyLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29udGV4dCB9IGZyb20gJy4uLy4uL3R5cGVzL2Zvcm0tbGF5b3V0LW1hbmFnZXItY29udGV4dC50eXBlJztcbmltcG9ydCB7IElPRm9ybUxheW91dE1hbmFnZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Zvcm0tbGF5b3V0LW1hbmFnZXIuaW50ZXJmYWNlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fRk9STV9MQVlPVVRfTUFOQUdFUiA9IFtcbiAgJ29hdHRyOiBhdHRyJyxcbiAgJ21vZGUnLFxuICAnc3RvcmVTdGF0ZTogc3RvcmUtc3RhdGUnLFxuXG4gIC8vIENvbW1vbiBmb3IgZGlhbG9nIGFuZCB0YWIgbW9kZVxuICAvLyBkZXByZWNhdGVkLCBvbmx5IG1hbnRhaW5lZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgJ3RpdGxlJyxcbiAgJ2xhYmVsQ29sdW1uczogbGFiZWwtY29sdW1ucycsXG4gICdzZXBhcmF0b3InLFxuXG4gIC8vIGF0dHIgb2YgdGhlIGNoaWxkIGZvcm0gZnJvbSB3aGljaCB0aGUgZGF0YSBmb3IgYnVpbGRpbmcgdGhlIHRhYiB0aXRsZSB3aWxsIGJlIG9idGFpbmVkIChvbmx5IGluIHRhYiBtb2RlKVxuICAvLyBkZXByZWNhdGVkLCBvbmx5IG1hbnRhaW5lZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgJ3RpdGxlRGF0YU9yaWdpbjogdGl0bGUtZGF0YS1vcmlnaW4nLFxuXG4gIC8vIE9ubHkgZGlhbG9nIG9wdGlvbnMgY29uZmlndXJhYmxlIGFzIGFuIGlucHV0IG9mIHRoZSBvLWZvcm0tbGF5b3V0LW1hbmFnZXIgKHVzZSB0aGUgby1mb3JtLWxheW91dC1kaWFsb2ctb3B0aW9ucyBkaXJlY3RpdmUpXG4gIC8vIGRlcHJlY2F0ZWQsIG9ubHkgbWFudGFpbmVkIGZvciBsZWdhY3kgcmVhc29uc1xuICAnZGlhbG9nV2lkdGg6IGRpYWxvZy13aWR0aCcsXG4gICdkaWFsb2dNaW5XaWR0aDogZGlhbG9nLW1pbi13aWR0aCcsXG4gICdkaWFsb2dNYXhXaWR0aDogZGlhbG9nLW1heC13aWR0aCcsXG4gICdkaWFsb2dIZWlnaHQ6IGRpYWxvZy1oZWlnaHQnLFxuICAnZGlhbG9nTWluSGVpZ2h0OiBkaWFsb2ctbWluLWhlaWdodCcsXG4gICdkaWFsb2dNYXhIZWlnaHQgZGlhbG9nLW1heC1oZWlnaHQnLFxuICAnZGlhbG9nQ2xhc3M6IGRpYWxvZy1jbGFzcycsXG4gICdkaWFsb2dUaXRsZVNlcGFyYXRvcjogZGlhbG9nLXRpdGxlLXNlcGFyYXRvcidcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19GT1JNX0xBWU9VVF9NQU5BR0VSID0gW1xuICAnb25NYWluVGFiU2VsZWN0ZWQnLFxuICAnb25TZWxlY3RlZFRhYkNoYW5nZScsXG4gICdvbkNsb3NlVGFiJ1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1mb3JtLWxheW91dC1tYW5hZ2VyJyxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0ZPUk1fTEFZT1VUX01BTkFHRVIsXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX0ZPUk1fTEFZT1VUX01BTkFHRVIsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsXG4gICAgeyBwcm92aWRlOiBPX0NPTVBPTkVOVF9TVEFURV9TRVJWSUNFLCB1c2VDbGFzczogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0sXG4gICAgeyBwcm92aWRlOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlLCB1c2VFeGlzdGluZzogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50IH1cbiAgXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby1mb3JtLWxheW91dC1tYW5hZ2VyXSc6ICd0cnVlJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95LCBJTG9jYWxTdG9yYWdlQ29tcG9uZW50LElPRm9ybUxheW91dE1hbmFnZXIge1xuXG4gIC8vIGRlY2xhcmluZyB0aGlzIHByb3BlcnR5IHRvIGhhdmUgYWNjZXMgdG8gc3RhdGljIG1lbWJlcnMgaW4gdGhlIHRlbXBsYXRlXG4gIE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCA9IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudDtcblxuXG4gIHB1YmxpYyBzdGF0aWMgRElBTE9HX01PREUgPSAnZGlhbG9nJztcbiAgcHVibGljIHN0YXRpYyBUQUJfTU9ERSA9ICd0YWInO1xuICBwdWJsaWMgc3RhdGljIFNQTElUX1BBTkVfTU9ERSA9ICdzcGxpdC1wYW5lJztcblxuICBwdWJsaWMgb2F0dHI6IHN0cmluZztcbiAgcHVibGljIF9tb2RlOiBzdHJpbmcgPSBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuRElBTE9HX01PREU7XG4gIHB1YmxpYyBzdHJldGNoVGFicyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBnZXQgbW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9tb2RlO1xuICB9XG5cbiAgcHVibGljIHNldCBtb2RlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhdmFpbGFibGVNb2RlVmFsdWVzID0gW09Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5ESUFMT0dfTU9ERSwgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LlRBQl9NT0RFLCBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuU1BMSVRfUEFORV9NT0RFXTtcbiAgICB0aGlzLl9tb2RlID0gKHZhbHVlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChhdmFpbGFibGVNb2RlVmFsdWVzLmluZGV4T2YodGhpcy5fbW9kZSkgPT09IC0xKSB7XG4gICAgICB0aGlzLl9tb2RlID0gT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LkRJQUxPR19NT0RFO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfc2VwYXJhdG9yOiBzdHJpbmcgPSAnICc7XG5cbiAgLyoqXG4gICogQGRlcHJlY2F0ZWQgdXNlciBzaG91bGQgdXNlIHRoZSBvcHRpb25zIGlucHV0XG4gICovXG4gIHNldCBzZXBhcmF0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NlcGFyYXRvciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlcGFyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXBhcmF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlciBzaG91bGQgdXNlIHRoZSBvcHRpb25zIGlucHV0XG4gICAqL1xuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHN0b3JlU3RhdGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIHVzZXIgc2hvdWxkIHVzZSB0aGUgb3B0aW9ucyBpbnB1dFxuICAqL1xuICBwdWJsaWMgdGl0bGVEYXRhT3JpZ2luOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBuZXh0IGlucHV0cyBhcmUgZGVwcmVjYXRlZCBhbmQgdXNlciBzaG91bGQgdXNlIHRoZSBPRm9ybUxheW91dERpYWxvZ09wdGlvbnNEaXJlY3RpdmUgaW5wdXRzXG4gICAqL1xuICBwdWJsaWMgZGlhbG9nV2lkdGg6IHN0cmluZztcbiAgcHVibGljIGRpYWxvZ01pbldpZHRoOiBzdHJpbmc7XG4gIHB1YmxpYyBkaWFsb2dNYXhXaWR0aDogc3RyaW5nO1xuICBwdWJsaWMgZGlhbG9nSGVpZ2h0OiBzdHJpbmc7XG4gIHB1YmxpYyBkaWFsb2dNaW5IZWlnaHQ6IHN0cmluZztcbiAgcHVibGljIGRpYWxvZ01heEhlaWdodDogc3RyaW5nO1xuICBwdWJsaWMgZGlhbG9nQ2xhc3M6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgZGlhbG9nVGl0bGVTZXBhcmF0b3IgPSAnOic7XG5cbiAgQFZpZXdDaGlsZCgndGFiR3JvdXAnKVxuICBwdWJsaWMgb1RhYkdyb3VwOiBPRm9ybUxheW91dE1hbmFnZXJNb2RlO1xuICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8T0Zvcm1MYXlvdXREaWFsb2dDb21wb25lbnQ+O1xuICBAVmlld0NoaWxkKCdzcGxpdFBhbmUnKVxuICBwdWJsaWMgb1NwbGl0UGFuZTogT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZTtcblxuICBwdWJsaWMgb25NYWluVGFiU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBvblNlbGVjdGVkVGFiQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25DbG9zZVRhYjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwcm90ZWN0ZWQgX2xhYmVsQ29sdW1uczogc3RyaW5nO1xuXG4gIGdldCBsYWJlbENvbHVtbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWxDb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICogQGRlcHJlY2F0ZWQgdXNlciBzaG91bGQgdXNlIHRoZSBvcHRpb25zIGlucHV0XG4gICovXG4gIHNldCBsYWJlbENvbHVtbnModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2xhYmVsQ29sdW1ucyA9IHZhbHVlO1xuICAgIHRoaXMuX2xhYmVsQ29sc0FycmF5ID0gVXRpbC5wYXJzZUFycmF5KHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbGFiZWxDb2xzQXJyYXk6IHN0cmluZ1tdID0gW107XG5cbiAgZ2V0IGxhYmVsQ29sc0FycmF5KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWxDb2xzQXJyYXk7XG4gIH1cblxuICBzZXQgbGFiZWxDb2xzQXJyYXkodmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fbGFiZWxDb2xzQXJyYXkgPSB2YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBPVHJhbnNsYXRlU2VydmljZTtcbiAgcHJvdGVjdGVkIG9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2U6IE9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2U7XG4gIHByb3RlY3RlZCBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlO1xuXG4gIHByb3RlY3RlZCBfdGFiR3JvdXBPcHRpb25zOiBhbnkgPSB7fTtcblxuICBnZXQgdGFiR3JvdXBPcHRpb25zKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYkdyb3VwT3B0aW9ucztcbiAgfVxuXG4gIGFkZFRhYkdyb3VwT3B0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl90YWJHcm91cE9wdGlvbnMsIHZhbHVlKTtcbiAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2xhYmVsQ29sdW1ucycpKSB7XG4gICAgICB0aGlzLmxhYmVsQ29sc0FycmF5ID0gVXRpbC5wYXJzZUFycmF5KHZhbHVlWydsYWJlbENvbHVtbnMnXSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnc2VwYXJhdG9yJykpIHtcbiAgICAgIHRoaXMuc2VwYXJhdG9yID0gdmFsdWVbJ3NlcGFyYXRvciddO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3N0cmV0Y2hUYWJzJykpIHtcbiAgICAgIHRoaXMuc3RyZXRjaFRhYnMgPSB2YWx1ZVsnc3RyZXRjaFRhYnMnXTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX2RpYWxvZ09wdGlvbnM6IGFueSA9IHt9O1xuXG4gIGdldCBkaWFsb2dPcHRpb25zKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpYWxvZ09wdGlvbnM7XG4gIH1cblxuICBhZGREaWFsb2dPcHRpb25zKHZhbHVlOiBhbnkpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX2RpYWxvZ09wdGlvbnMsIHZhbHVlKTtcbiAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2xhYmVsQ29sdW1ucycpKSB7XG4gICAgICB0aGlzLmxhYmVsQ29sc0FycmF5ID0gVXRpbC5wYXJzZUFycmF5KHZhbHVlWydsYWJlbENvbHVtbnMnXSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnc2VwYXJhdG9yJykpIHtcbiAgICAgIHRoaXMuc2VwYXJhdG9yID0gdmFsdWVbJ3NlcGFyYXRvciddO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2RpYWxvZ1RpdGxlU2VwYXJhdG9yJykpIHtcbiAgICAgIHRoaXMuZGlhbG9nVGl0bGVTZXBhcmF0b3IgPSB2YWx1ZVsnZGlhbG9nVGl0bGVTZXBhcmF0b3InXTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3NwbGl0UGFuZU9wdGlvbnM6IGFueSA9IHt9O1xuXG4gIGdldCBzcGxpdFBhbmVPcHRpb25zKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3NwbGl0UGFuZU9wdGlvbnM7XG4gIH1cblxuICBhZGRTcGxpdFBhbmVPcHRpb25zKHZhbHVlOiBhbnkpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3NwbGl0UGFuZU9wdGlvbnMsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRpbmdHdWFyZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2U7XG5cbiAgcHVibGljIF9tYXJrRm9yVXBkYXRlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBvblRyaWdnZXJVcGRhdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHByb3RlY3RlZCBjb21wb25lbnRTdGF0ZVNlcnZpY2U6IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudFN0YXRlU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgYWN0Um91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcm90ZWN0ZWQgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgQFNraXBTZWxmKCkgQE9wdGlvbmFsKClcbiAgICBwdWJsaWMgcGFyZW50Rm9ybUxheW91dE1hbmFnZXI6IE9Gb3JtTGF5b3V0TWFuYWdlckJhc2VcbiAgKSB7XG4gICAgdGhpcy5vRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSk7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTG9jYWxTdG9yYWdlU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT1RyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChOYXZpZ2F0aW9uU2VydmljZSk7XG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRTdGF0ZVNlcnZpY2U+KEFic3RyYWN0Q29tcG9uZW50U3RhdGVTZXJ2aWNlIGFzIFR5cGU8T0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVTZXJ2aWNlPik7XG4gICAgaWYgKHRoaXMuc3RvcmVTdGF0ZSkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5vblJvdXRlQ2hhbmdlLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlU3RvcmFnZSgpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgICB0aGlzLmdldEluamVjdGlvblRva2VuQ29uZmlnKCk7XG5cbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5qZWN0aW9uVG9rZW5Db25maWcoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9HbG9iYWxDb25maWcgPSB0aGlzLmluamVjdG9yLmdldChPX0dMT0JBTF9DT05GSUcpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9HbG9iYWxDb25maWcuc3RvcmVTdGF0ZSkpIHtcbiAgICAgICAgdGhpcy5zdG9yZVN0YXRlID0gb0dsb2JhbENvbmZpZy5zdG9yZVN0YXRlO1xuICAgICAgICBpZiAoIXRoaXMuc3RvcmVTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRG8gbm90aGluZyBiZWNhdXNlIGlzIG9wdGlvbmFsXG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudFN0YXRlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5zdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZEFjdGl2YXRlQ2hpbGRHdWFyZCgpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5vYXR0cikpIHtcbiAgICAgIHRoaXMub2F0dHIgPSAodGhpcy50aXRsZSB8fCAnJykgKyB0aGlzLm1vZGU7XG4gICAgICBjb25zb2xlLndhcm4oJ28tZm9ybS1sYXlvdXQtbWFuYWdlciBtdXN0IGhhdmUgYW4gdW5pcXVlIGF0dHInKTtcbiAgICB9XG4gICAgdGhpcy5vRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLnJlZ2lzdGVyRm9ybUxheW91dE1hbmFnZXIodGhpcyk7XG4gICAgaWYgKHRoaXMuc3RvcmVTdGF0ZSkge1xuICAgICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZWxSZWYpIHtcbiAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMub0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZS5yZW1vdmVGb3JtTGF5b3V0TWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLmRlc3Ryb3lBY3RpdmF0ZUNoaWxkR3VhcmQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdHRyaWJ1dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vYXR0cjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21wb25lbnRLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ09Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudF8nICsgdGhpcy5vYXR0cjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3V0ZUtleSgpOiBzdHJpbmcge1xuICAgIGxldCByb3V0ZSA9IHRoaXMucm91dGVyLnVybDtcbiAgICB0aGlzLmFjdFJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICByb3V0ZSA9IHJvdXRlLnJlcGxhY2UocGFyYW1zW2tleV0sIGtleSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcm91dGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YVRvU3RvcmUoKTogYW55IHtcbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5nZXRMYXlvdXRNb2RlQ29tcG9uZW50KCk7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpID8gY29tcFJlZi5nZXREYXRhVG9TdG9yZSgpIDoge307XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgW10pXG4gIHB1YmxpYyBiZWZvcmV1bmxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGVTdG9yYWdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFiZWxGcm9tVXJsUGFyYW1zKHVybFBhcmFtczogb2JqZWN0KTogc3RyaW5nIHtcbiAgICBsZXQgbGFiZWwgPSAnJztcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModXJsUGFyYW1zKTtcbiAgICBrZXlzLmZvckVhY2goKHBhcmFtLCBpKSA9PiB7XG4gICAgICBsYWJlbCArPSB1cmxQYXJhbXNbcGFyYW1dICsgKChpIDwga2V5cy5sZW5ndGggLSAxKSA/IHRoaXMuc2VwYXJhdG9yIDogJycpO1xuICAgIH0pO1xuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGb3JtRGF0YUZyb21MYWJlbENvbHVtbnMoZGF0YTogYW55KSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKHggPT4ge1xuICAgICAgaWYgKHRoaXMubGFiZWxDb2xzQXJyYXkuaW5kZXhPZih4KSA+IC0xKSB7XG4gICAgICAgIGZvcm1EYXRhW3hdID0gZGF0YVt4XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH1cblxuICBwdWJsaWMgYWRkQWN0aXZhdGVDaGlsZEd1YXJkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvdXRlQ29uZmlnID0gdGhpcy5nZXRQYXJlbnRBY3RSb3V0ZVJvdXRlKCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHJvdXRlQ29uZmlnKSkge1xuICAgICAgY29uc3QgY2FuQWN0aXZhdGVDaGlsZEFycmF5ID0gKHJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQgfHwgW10pO1xuICAgICAgbGV0IHByZXZpb3VzbHlBZGRlZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNhbkFjdGl2YXRlQ2hpbGRBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBndWFyZENoaWxkID0gdGhpcy5pbmplY3Rvci5nZXQoQ2FuQWN0aXZhdGVGb3JtTGF5b3V0Q2hpbGRHdWFyZCk7XG4gICAgICAgIHByZXZpb3VzbHlBZGRlZCA9IChjYW5BY3RpdmF0ZUNoaWxkQXJyYXlbaV0gPT09IGd1YXJkQ2hpbGQuY29uc3RydWN0b3IpO1xuICAgICAgICBpZiAocHJldmlvdXNseUFkZGVkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghcHJldmlvdXNseUFkZGVkKSB7XG4gICAgICAgIHRoaXMuYWRkaW5nR3VhcmQgPSB0cnVlO1xuICAgICAgICBjYW5BY3RpdmF0ZUNoaWxkQXJyYXkucHVzaChDYW5BY3RpdmF0ZUZvcm1MYXlvdXRDaGlsZEd1YXJkKTtcbiAgICAgICAgcm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZCA9IGNhbkFjdGl2YXRlQ2hpbGRBcnJheTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveUFjdGl2YXRlQ2hpbGRHdWFyZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWRkaW5nR3VhcmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLmFjdGl2ZUZvcm1MYXlvdXRNYW5hZ2VyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZS5jb250ZXh0ID0gdm9pZCAwO1xuICAgIGNvbnN0IHJvdXRlQ29uZmlnID0gdGhpcy5nZXRQYXJlbnRBY3RSb3V0ZVJvdXRlKCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHJvdXRlQ29uZmlnKSkge1xuICAgICAgZm9yIChsZXQgaSA9IChyb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkIHx8IFtdKS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBndWFyZENoaWxkID0gdGhpcy5pbmplY3Rvci5nZXQoQ2FuQWN0aXZhdGVGb3JtTGF5b3V0Q2hpbGRHdWFyZCk7XG4gICAgICAgIGlmIChyb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkW2ldID09PSBndWFyZENoaWxkLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgcm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNEaWFsb2dNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5ESUFMT0dfTU9ERTtcbiAgfVxuXG4gIHB1YmxpYyBpc1RhYk1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LlRBQl9NT0RFO1xuICB9XG5cbiAgcHVibGljIGlzU3BsaXRQYW5lTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuU1BMSVRfUEFORV9NT0RFO1xuICB9XG5cbiAgcHVibGljIGFkZERldGFpbENvbXBvbmVudChjaGlsZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCB1cmw6IHN0cmluZywgY29udGV4dD86IE9Gb3JtTGF5b3V0TWFuYWdlckNvbnRleHQpOiB2b2lkIHtcbiAgICBjaGlsZFJvdXRlID0gVXRpbC5nZXRMYXN0QWN0aXZhdGVSb3V0ZShjaGlsZFJvdXRlKTtcbiAgICBjb25zdCBuZXdEZXRhaWxDb21wOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSA9IHtcbiAgICAgIHBhcmFtczogY2hpbGRSb3V0ZS5wYXJhbXMsXG4gICAgICBxdWVyeVBhcmFtczogY2hpbGRSb3V0ZS5xdWVyeVBhcmFtcyxcbiAgICAgIHVybFNlZ21lbnRzOiBjaGlsZFJvdXRlLnVybCxcbiAgICAgIGNvbXBvbmVudDogY2hpbGRSb3V0ZS5yb3V0ZUNvbmZpZy5jb21wb25lbnQsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGlkOiBVdGlsLnJhbmRvbU51bWJlcigpLnRvU3RyaW5nKCksXG4gICAgICBsYWJlbDogY29udGV4dD8ubGFiZWwgfHwgJycsXG4gICAgICBpbm5lckZvcm1zSW5mbzoge30sXG4gICAgICByZW5kZXJlZDogZmFsc2UsXG4gICAgICBpbnNlcnRpb25Nb2RlOiBjaGlsZFJvdXRlLnF1ZXJ5UGFyYW1zW0NvZGVzLklOU0VSVElPTl9NT0RFXSA9PT0gJ3RydWUnLFxuICAgICAgcmVuZGVyZXJTdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKVxuICAgIH07XG4gICAgLyoqIGxpc3RlbmluZyBmb3IgdGhlIGNvbXBvbmVudHMgdG8gYmUgcmVuZGVyZWQgdG8gZGV0ZXJtaW5lIHRoYXQgdGhlIGZvcm0tbGF5b3V0LW1hbmFnZXIgaXMgZmluaXNoZWQgbmF2aWdhdGluZy4gKi9cbiAgICBuZXdEZXRhaWxDb21wLnJlbmRlcmVyU3ViamVjdC5zdWJzY3JpYmUoKHJlbmRlcmVyOmJvb2xlYW4pID0+IHtcbiAgICAgIGlmIChyZW5kZXJlcikge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmlzTmF2aWdhdGluZyA9ICFyZW5kZXJlcjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmlzRGlhbG9nTW9kZSgpKSB7XG4gICAgICB0aGlzLm9wZW5Gb3JtTGF5b3V0RGlhbG9nKG5ld0RldGFpbENvbXApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb21wUmVmID0gdGhpcy5nZXRMYXlvdXRNb2RlQ29tcG9uZW50KCk7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29tcFJlZikpIHtcbiAgICAgICAgY29tcFJlZi5vcGVuRGV0YWlsKG5ld0RldGFpbENvbXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbG9zZURldGFpbChvcHRpb25zPzogRm9ybUxheW91dENsb3NlRGV0YWlsT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29tcFJlZikpIHtcbiAgICAgIGNvbXBSZWYuY2xvc2VEZXRhaWwob3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb3NlRGV0YWlscyhkZXRhaWxzRGF0YTogYW55W10gPSBbXSwgb3B0aW9ucz86IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1RhYk1vZGUoKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJHcm91cCkpIHtcbiAgICAgIHRoaXMub1RhYkdyb3VwLmNsb3NlRGV0YWlscyhkZXRhaWxzRGF0YSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5Gb3JtTGF5b3V0RGlhbG9nKGRldGFpbENvbXA6IEZvcm1MYXlvdXREZXRhaWxDb21wb25lbnREYXRhKTogdm9pZCB7XG4gICAgY29uc3QgY3NzY2xhc3MgPSBbJ28tZm9ybS1sYXlvdXQtZGlhbG9nLW92ZXJsYXknXTtcbiAgICBpZiAodGhpcy5kaWFsb2dDbGFzcykge1xuICAgICAgY3NzY2xhc3MucHVzaCh0aGlzLmRpYWxvZ0NsYXNzKTtcbiAgICB9XG5cbiAgICBjb25zdCBkaWFsb2dPcHRpb25zID0gKHRoaXMuZGlhbG9nT3B0aW9ucyB8fCB7fSk7XG5cbiAgICBjb25zdCBkaWFsb2dDb25maWc6IE1hdERpYWxvZ0NvbmZpZyA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZGF0YTogZGV0YWlsQ29tcCxcbiAgICAgICAgbGF5b3V0TWFuYWdlckNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgdGl0bGU6ICh0aGlzLnRpdGxlIHx8IGRpYWxvZ09wdGlvbnMudGl0bGUpLFxuICAgICAgICBkaWFsb2dUaXRsZVNlcGFyYXRvcjogdGhpcy5kaWFsb2dUaXRsZVNlcGFyYXRvclxuICAgICAgfSxcbiAgICAgIHdpZHRoOiBkaWFsb2dPcHRpb25zLndpZHRoIHx8IHRoaXMuZGlhbG9nV2lkdGgsXG4gICAgICBtaW5XaWR0aDogZGlhbG9nT3B0aW9ucy5taW5XaWR0aCB8fCB0aGlzLmRpYWxvZ01pbldpZHRoLFxuICAgICAgbWF4V2lkdGg6IGRpYWxvZ09wdGlvbnMubWF4V2lkdGggfHwgdGhpcy5kaWFsb2dNYXhXaWR0aCxcbiAgICAgIGhlaWdodDogZGlhbG9nT3B0aW9ucy5oZWlnaHQgfHwgdGhpcy5kaWFsb2dIZWlnaHQsXG4gICAgICBtaW5IZWlnaHQ6IGRpYWxvZ09wdGlvbnMubWluSGVpZ2h0IHx8IHRoaXMuZGlhbG9nTWluSGVpZ2h0LFxuICAgICAgbWF4SGVpZ2h0OiBkaWFsb2dPcHRpb25zLm1heEhlaWdodCB8fCB0aGlzLmRpYWxvZ01heEhlaWdodCxcbiAgICAgIGRpc2FibGVDbG9zZTogZGlhbG9nT3B0aW9ucy5kaXNhYmxlQ2xvc2UgfHwgdHJ1ZSxcbiAgICAgIHBhbmVsQ2xhc3M6IGRpYWxvZ09wdGlvbnMuY2xhc3MgfHwgY3NzY2xhc3NcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZGlhbG9nT3B0aW9ucykge1xuICAgICAgZGlhbG9nQ29uZmlnLmNsb3NlT25OYXZpZ2F0aW9uID0gdGhpcy5kaWFsb2dPcHRpb25zLmNsb3NlT25OYXZpZ2F0aW9uO1xuICAgICAgZGlhbG9nQ29uZmlnLmJhY2tkcm9wQ2xhc3MgPSB0aGlzLmRpYWxvZ09wdGlvbnMuYmFja2Ryb3BDbGFzcztcbiAgICAgIGRpYWxvZ0NvbmZpZy5wb3NpdGlvbiA9IHRoaXMuZGlhbG9nT3B0aW9ucy5wb3NpdGlvbjtcbiAgICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSB0aGlzLmRpYWxvZ09wdGlvbnMuZGlzYWJsZUNsb3NlO1xuICAgIH1cblxuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihPRm9ybUxheW91dERpYWxvZ0NvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tYXJrRm9yVXBkYXRlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSWZOZWVkZWQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVsb2FkTWFpbkNvbXBvbmVudHMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlck9wZW5lZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBkZXRhaWxDb21wLnJlbmRlcmVkID0gdHJ1ZTtcbiAgICAgIGRldGFpbENvbXAucmVuZGVyZXJTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rm9ybUNhY2hlRGF0YSgpOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChjb21wUmVmKSA/IGNvbXBSZWYuZ2V0Rm9ybUNhY2hlRGF0YSgpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldE1vZGlmaWVkU3RhdGUoZm9ybUF0dHI6IHN0cmluZywgbW9kaWZpZWQ6IGJvb2xlYW4sIGNvbmZpcm1FeGl0OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb21wUmVmKSkge1xuICAgICAgY29tcFJlZi5zZXRNb2RpZmllZFN0YXRlKGZvcm1BdHRyLCBtb2RpZmllZCwgY29uZmlybUV4aXQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRMYWJlbEZyb21EYXRhKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IGxhYmVsID0gJyc7XG4gICAgY29uc3QgaXNEYXRhRGVmaW5lZCA9IFV0aWwuaXNEZWZpbmVkKGRhdGEpO1xuICAgIGlmIChpc0RhdGFEZWZpbmVkICYmIGRhdGEuaGFzT3duUHJvcGVydHkoJ25ld190YWJfdGl0bGUnKSkge1xuICAgICAgbGFiZWwgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGRhdGEubmV3X3RhYl90aXRsZSk7XG4gICAgfSBlbHNlIGlmIChpc0RhdGFEZWZpbmVkICYmIHRoaXMubGFiZWxDb2xzQXJyYXkubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLmxhYmVsQ29sc0FycmF5LmZvckVhY2goKGNvbCwgaWR4KSA9PiB7XG4gICAgICAgIGlmIChkYXRhW2NvbF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxhYmVsICs9IGRhdGFbY29sXSArICgoaWR4IDwgdGhpcy5sYWJlbENvbHNBcnJheS5sZW5ndGggLSAxKSA/IHRoaXMuc2VwYXJhdG9yIDogJycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZU5hdmlnYXRpb24oZGF0YTogYW55LCBrZXlzVmFsdWVzOiBhbnksIGluc2VydGlvbk1vZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5nZXRMYXlvdXRNb2RlQ29tcG9uZW50KCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpKSB7XG4gICAgICBjb21wUmVmLnVwZGF0ZU5hdmlnYXRpb24oZGF0YSwga2V5c1ZhbHVlcywgaW5zZXJ0aW9uTW9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUFjdGl2ZURhdGEoZGF0YTogYW55KSB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb21wUmVmKSkge1xuICAgICAgY29tcFJlZi51cGRhdGVBY3RpdmVEYXRhKGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3V0ZU9mQWN0aXZlSXRlbSgpOiBhbnlbXSB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChjb21wUmVmKSA/IGNvbXBSZWYuZ2V0Um91dGVPZkFjdGl2ZUl0ZW0oKSA6IFtdO1xuICB9XG5cbiAgcHVibGljIGlzTWFpbkNvbXBvbmVudChjb21wOiBJTGF5b3V0TWFuYWdlckNvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRGlhbG9nTW9kZSgpKSB7XG4gICAgICByZXR1cm4gIWNvbXAub0Zvcm1MYXlvdXREaWFsb2c7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIHJldHVybiAoVXRpbC5pc0RlZmluZWQoY29tcFJlZilcbiAgICAgICYmIChjb21wUmVmLmlzTWFpbkNvbXBvbmVudChjb21wKVxuICAgICAgICB8fCAoVXRpbC5pc0RlZmluZWQoY29tcC5wYXJlbnRDb21wb25lbnQpKSAmJiBjb21wUmVmLmlzTWFpbkNvbXBvbmVudChjb21wLnBhcmVudENvbXBvbmVudCkpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3V0ZUZvckNvbXBvbmVudChjb21wOiBJTGF5b3V0TWFuYWdlckNvbXBvbmVudCk6IGFueVtdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAodGhpcy5wYXJlbnRGb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgY29uc3QgcGFyZW50Um91dGUgPSB0aGlzLnBhcmVudEZvcm1MYXlvdXRNYW5hZ2VyLmdldFJvdXRlRm9yQ29tcG9uZW50KGNvbXApO1xuICAgICAgaWYgKHBhcmVudFJvdXRlICYmIHBhcmVudFJvdXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4ucGFyZW50Um91dGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNNYWluQ29tcG9uZW50KGNvbXApKSB7XG4gICAgICBjb25zdCBhY3RpdmVSb3V0ZSA9IHRoaXMuZ2V0Um91dGVPZkFjdGl2ZUl0ZW0oKTtcblxuICAgICAgaWYgKGFjdGl2ZVJvdXRlICYmIGFjdGl2ZVJvdXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4uYWN0aXZlUm91dGUpO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBc0FjdGl2ZUZvcm1MYXlvdXRNYW5hZ2VyKCk6IHZvaWQge1xuICAgIHRoaXMub0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZS5hY3RpdmVGb3JtTGF5b3V0TWFuYWdlciA9IHRoaXM7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkTWFpbkNvbXBvbmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5vblRyaWdnZXJVcGRhdGUuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIGFsbG93VG9VcGRhdGVOYXZpZ2F0aW9uKGZvcm1BdHRyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuaXNUYWJNb2RlKCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5vVGFiR3JvdXApICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMudGl0bGVEYXRhT3JpZ2luKSkgP1xuICAgICAgdGhpcy50aXRsZURhdGFPcmlnaW4gPT09IGZvcm1BdHRyIDpcbiAgICAgIHRydWU7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3RhdGVTdG9yYWdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlIHx8ICF0aGlzLnN0b3JlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNUYWJNb2RlID0gdGhpcy5pc1RhYk1vZGUoKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJHcm91cCk7XG4gICAgY29uc3QgaXNTcGxpdFBhbmVNb2RlID0gdGhpcy5pc1NwbGl0UGFuZU1vZGUoKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9TcGxpdFBhbmUpO1xuICAgIGlmIChpc1RhYk1vZGUgfHwgaXNTcGxpdFBhbmVNb2RlKSB7XG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UudXBkYXRlQ29tcG9uZW50U3RvcmFnZSh0aGlzLCB0aGlzLmdldFJvdXRlS2V5KCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFyZW50QWN0Um91dGVSb3V0ZSgpOiBSb3V0ZSB7XG4gICAgbGV0IGFjdFJvdXRlID0gdGhpcy5hY3RSb3V0ZTtcbiAgICB3aGlsZSAoYWN0Um91dGUucGFyZW50ICE9PSB1bmRlZmluZWQgJiYgYWN0Um91dGUucGFyZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoYWN0Um91dGUucm91dGVDb25maWcuY2hpbGRyZW4gfHwgYWN0Um91dGUucm91dGVDb25maWcubG9hZENoaWxkcmVuKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgYWN0Um91dGUgPSBhY3RSb3V0ZS5wYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiBhY3RSb3V0ZS5yb3V0ZUNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVJZk5lZWRlZCgpIHtcbiAgICBpZiAodGhpcy5tYXJrRm9yVXBkYXRlKSB7XG4gICAgICB0aGlzLm1hcmtGb3JVcGRhdGUgPSBmYWxzZTtcbiAgICAgIHRoaXMub25UcmlnZ2VyVXBkYXRlLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFyYW1zKCk6IGFueSB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChjb21wUmVmKSA/IGNvbXBSZWYuZ2V0UGFyYW1zKCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBzZXQgbWFya0ZvclVwZGF0ZShhcmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tYXJrRm9yVXBkYXRlID0gYXJnO1xuICAgIGlmICh0aGlzLmlzU3BsaXRQYW5lTW9kZSgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZUlmTmVlZGVkKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1hcmtGb3JVcGRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtGb3JVcGRhdGU7XG4gIH1cblxuICBnZXQgaWdub3JlQ2FuRGVhY3RpdmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNTcGxpdFBhbmVNb2RlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpOiBPRm9ybUxheW91dE1hbmFnZXJNb2RlIHtcbiAgICBsZXQgY29tcFJlZjtcbiAgICBpZiAodGhpcy5pc1RhYk1vZGUoKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJHcm91cCkpIHtcbiAgICAgIGNvbXBSZWYgPSB0aGlzLm9UYWJHcm91cDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNEaWFsb2dNb2RlKCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5kaWFsb2dSZWYpKSB7XG4gICAgICBjb21wUmVmID0gdGhpcy5kaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzU3BsaXRQYW5lTW9kZSgpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMub1NwbGl0UGFuZSkpIHtcbiAgICAgIGNvbXBSZWYgPSB0aGlzLm9TcGxpdFBhbmU7XG4gICAgfVxuICAgIHJldHVybiBjb21wUmVmO1xuICB9XG5cbiAgYWxsb3dOYXZpZ2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc1RhYk1vZGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5BZGREZXRhaWxDb21wb25lbnQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIHJldHVybiBVdGlsLndyYXBJbnRvT2JzZXJ2YWJsZShVdGlsLmlzRGVmaW5lZChjb21wUmVmKSA/IGNvbXBSZWYuY2FuQWRkRGV0YWlsQ29tcG9uZW50KCkgOiB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNUb0NvbmZpcm1FeGl0KGRhdGE6IEZvcm1MYXlvdXREZXRhaWxDb21wb25lbnREYXRhLCBvcHRpb25zPzogRm9ybUxheW91dENsb3NlRGV0YWlsT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChvcHRpb25zKSAmJiBvcHRpb25zLmV4aXRXaXRob3V0Q29uZmlybWF0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1zQXR0ciA9IE9iamVjdC5rZXlzKGRhdGEuaW5uZXJGb3Jtc0luZm8pO1xuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoZm9ybXNBdHRyLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvcm1zQXR0ci5mb3JFYWNoKGZvcm1BdHRyID0+IHtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IGRhdGEuaW5uZXJGb3Jtc0luZm9bZm9ybUF0dHJdO1xuICAgICAgICAgIHJlc3VsdCA9IGZvcm1EYXRhLmNvbmZpcm1PbkV4aXQgJiYgZm9ybURhdGEubW9kaWZpZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldElkT2ZBY3RpdmVJdGVtKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChjb21wUmVmKSA/IGAke3RoaXMub2F0dHJ9LSR7Y29tcFJlZi5nZXRJZE9mQWN0aXZlSXRlbSgpfS1gIDogJyc7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIm1vZGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LlRBQl9NT0RFXCI+XG4gICAgPG8tZm9ybS1sYXlvdXQtdGFiZ3JvdXAgI3RhYkdyb3VwIFt0aXRsZV09XCJ0aXRsZVwiIChvbk1haW5UYWJTZWxlY3RlZCk9XCJvbk1haW5UYWJTZWxlY3RlZC5lbWl0KCRldmVudClcIlxuICAgICAgKG9uU2VsZWN0ZWRUYWJDaGFuZ2UpPVwib25TZWxlY3RlZFRhYkNoYW5nZS5lbWl0KCRldmVudClcIiAob25DbG9zZVRhYik9XCJvbkNsb3NlVGFiLmVtaXQoJGV2ZW50KVwiXG4gICAgICBbb3B0aW9uc109XCJ0YWJHcm91cE9wdGlvbnNcIiBbc3RyZXRjaC10YWJzXT1cInN0cmV0Y2hUYWJzXCI+XG4gICAgICA8bmctY29udGVudCAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRCbG9ja1wiPjwvbmctY29udGVudD5cbiAgICA8L28tZm9ybS1sYXlvdXQtdGFiZ3JvdXA+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIk9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5TUExJVF9QQU5FX01PREVcIj5cbiAgICA8by1mb3JtLWxheW91dC1zcGxpdC1wYW5lICNzcGxpdFBhbmUgW29wdGlvbnNdPVwic3BsaXRQYW5lT3B0aW9uc1wiPlxuICAgICAgPG5nLWNvbnRlbnQgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50QmxvY2tcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9vLWZvcm0tbGF5b3V0LXNwbGl0LXBhbmU+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIk9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5ESUFMT0dfTU9ERVwiPlxuICAgIDxuZy1jb250ZW50ICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudEJsb2NrXCI+PC9uZy1jb250ZW50PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudEJsb2NrPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPiJdfQ==
558
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWxheW91dC1tYW5hZ2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2Zvcm0tbGF5b3V0L28tZm9ybS1sYXlvdXQtbWFuYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvbGF5b3V0cy9mb3JtLWxheW91dC9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxFQUdSLFFBQVEsRUFDUixRQUFRLEVBRVIsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQWlDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBaUMsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEYsT0FBTyxFQUFFLGVBQWUsRUFBYyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFJekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFL0YsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFD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aWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2tpcFNlbGYsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgSUxheW91dE1hbmFnZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2xheW91dC1tYW5hZ2VyLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUxvY2FsU3RvcmFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbG9jYWwtc3RvcmFnZS1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlck1vZGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tZm9ybS1sYXlvdXQtbWFuYWdlci1tb2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb21wb25lbnRTdGF0ZVNlcnZpY2VQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tZm9ybS1sYXlvdXQtbWFuYWdlci1jb21wb25lbnQtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGUvby1mb3JtLWxheW91dC1tYW5hZ2VyLWNvbXBvbmVudC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlL28tdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUxheW91dENsb3NlRGV0YWlsT3B0aW9ucywgRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEgfSBmcm9tICcuLi8uLi90eXBlcy9mb3JtLWxheW91dC1kZXRhaWwtY29tcG9uZW50LWRhdGEudHlwZSc7XG5pbXBvcnQgeyBPX0dMT0JBTF9DT05GSUcgfSBmcm9tICcuLi8uLi90eXBlcy9vLWdsb2JhbC1jb25maWcudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRm9ybUxheW91dERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9nL28tZm9ybS1sYXlvdXQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYW5BY3RpdmF0ZUZvcm1MYXlvdXRDaGlsZEd1YXJkIH0gZnJvbSAnLi9ndWFyZHMvby1mb3JtLWxheW91dC1jYW4tYWN0aXZhdGUtY2hpbGQuZ3VhcmQnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSB9IGZyb20gJy4vby1mb3JtLWxheW91dC1tYW5hZ2VyLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29udGV4dCB9IGZyb20gJy4uLy4uL3R5cGVzL2Zvcm0tbGF5b3V0LW1hbmFnZXItY29udGV4dC50eXBlJztcbmltcG9ydCB7IElPRm9ybUxheW91dE1hbmFnZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Zvcm0tbGF5b3V0LW1hbmFnZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9fQ09NUE9ORU5UX1NUQVRFX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9pbmplY3Rpb24tdG9rZW5zJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fRk9STV9MQVlPVVRfTUFOQUdFUiA9IFtcbiAgJ29hdHRyOiBhdHRyJyxcbiAgJ21vZGUnLFxuICAnc3RvcmVTdGF0ZTogc3RvcmUtc3RhdGUnLFxuXG4gIC8vIENvbW1vbiBmb3IgZGlhbG9nIGFuZCB0YWIgbW9kZVxuICAvLyBkZXByZWNhdGVkLCBvbmx5IG1hbnRhaW5lZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgJ3RpdGxlJyxcbiAgJ2xhYmVsQ29sdW1uczogbGFiZWwtY29sdW1ucycsXG4gICdzZXBhcmF0b3InLFxuXG4gIC8vIGF0dHIgb2YgdGhlIGNoaWxkIGZvcm0gZnJvbSB3aGljaCB0aGUgZGF0YSBmb3IgYnVpbGRpbmcgdGhlIHRhYiB0aXRsZSB3aWxsIGJlIG9idGFpbmVkIChvbmx5IGluIHRhYiBtb2RlKVxuICAvLyBkZXByZWNhdGVkLCBvbmx5IG1hbnRhaW5lZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgJ3RpdGxlRGF0YU9yaWdpbjogdGl0bGUtZGF0YS1vcmlnaW4nLFxuXG4gIC8vIE9ubHkgZGlhbG9nIG9wdGlvbnMgY29uZmlndXJhYmxlIGFzIGFuIGlucHV0IG9mIHRoZSBvLWZvcm0tbGF5b3V0LW1hbmFnZXIgKHVzZSB0aGUgby1mb3JtLWxheW91dC1kaWFsb2ctb3B0aW9ucyBkaXJlY3RpdmUpXG4gIC8vIGRlcHJlY2F0ZWQsIG9ubHkgbWFudGFpbmVkIGZvciBsZWdhY3kgcmVhc29uc1xuICAnZGlhbG9nV2lkdGg6IGRpYWxvZy13aWR0aCcsXG4gICdkaWFsb2dNaW5XaWR0aDogZGlhbG9nLW1pbi13aWR0aCcsXG4gICdkaWFsb2dNYXhXaWR0aDogZGlhbG9nLW1heC13aWR0aCcsXG4gICdkaWFsb2dIZWlnaHQ6IGRpYWxvZy1oZWlnaHQnLFxuICAnZGlhbG9nTWluSGVpZ2h0OiBkaWFsb2ctbWluLWhlaWdodCcsXG4gICdkaWFsb2dNYXhIZWlnaHQgZGlhbG9nLW1heC1oZWlnaHQnLFxuICAnZGlhbG9nQ2xhc3M6IGRpYWxvZy1jbGFzcycsXG4gICdkaWFsb2dUaXRsZVNlcGFyYXRvcjogZGlhbG9nLXRpdGxlLXNlcGFyYXRvcidcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19GT1JNX0xBWU9VVF9NQU5BR0VSID0gW1xuICAnb25NYWluVGFiU2VsZWN0ZWQnLFxuICAnb25TZWxlY3RlZFRhYkNoYW5nZScsXG4gICdvbkNsb3NlVGFiJ1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1mb3JtLWxheW91dC1tYW5hZ2VyJyxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0ZPUk1fTEFZT1VUX01BTkFHRVIsXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX0ZPUk1fTEFZT1VUX01BTkFHRVIsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLWZvcm0tbGF5b3V0LW1hbmFnZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsXG4gICAgeyBwcm92aWRlOiBPX0NPTVBPTkVOVF9TVEFURV9TRVJWSUNFLCB1c2VDbGFzczogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0sXG4gICAgeyBwcm92aWRlOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlLCB1c2VFeGlzdGluZzogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50IH1cbiAgXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby1mb3JtLWxheW91dC1tYW5hZ2VyXSc6ICd0cnVlJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95LCBJTG9jYWxTdG9yYWdlQ29tcG9uZW50LCBJT0Zvcm1MYXlvdXRNYW5hZ2VyIHtcblxuICAvLyBkZWNsYXJpbmcgdGhpcyBwcm9wZXJ0eSB0byBoYXZlIGFjY2VzIHRvIHN0YXRpYyBtZW1iZXJzIGluIHRoZSB0ZW1wbGF0ZVxuICBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQgPSBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQ7XG5cblxuICBwdWJsaWMgc3RhdGljIERJQUxPR19NT0RFID0gJ2RpYWxvZyc7XG4gIHB1YmxpYyBzdGF0aWMgVEFCX01PREUgPSAndGFiJztcbiAgcHVibGljIHN0YXRpYyBTUExJVF9QQU5FX01PREUgPSAnc3BsaXQtcGFuZSc7XG5cbiAgcHVibGljIG9hdHRyOiBzdHJpbmc7XG4gIHB1YmxpYyBfbW9kZTogc3RyaW5nID0gT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LkRJQUxPR19NT0RFO1xuICBwdWJsaWMgc3RyZXRjaFRhYnMgPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IG1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgbW9kZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlTW9kZVZhbHVlcyA9IFtPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuRElBTE9HX01PREUsIE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5UQUJfTU9ERSwgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LlNQTElUX1BBTkVfTU9ERV07XG4gICAgdGhpcy5fbW9kZSA9ICh2YWx1ZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoYXZhaWxhYmxlTW9kZVZhbHVlcy5pbmRleE9mKHRoaXMuX21vZGUpID09PSAtMSkge1xuICAgICAgdGhpcy5fbW9kZSA9IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5ESUFMT0dfTU9ERTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3NlcGFyYXRvcjogc3RyaW5nID0gJyAnO1xuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIHVzZXIgc2hvdWxkIHVzZSB0aGUgb3B0aW9ucyBpbnB1dFxuICAqL1xuICBzZXQgc2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzZXBhcmF0b3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VwYXJhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZXIgc2hvdWxkIHVzZSB0aGUgb3B0aW9ucyBpbnB1dFxuICAgKi9cbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzdG9yZVN0YXRlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgKiBAZGVwcmVjYXRlZCB1c2VyIHNob3VsZCB1c2UgdGhlIG9wdGlvbnMgaW5wdXRcbiAgKi9cbiAgcHVibGljIHRpdGxlRGF0YU9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgbmV4dCBpbnB1dHMgYXJlIGRlcHJlY2F0ZWQgYW5kIHVzZXIgc2hvdWxkIHVzZSB0aGUgT0Zvcm1MYXlvdXREaWFsb2dPcHRpb25zRGlyZWN0aXZlIGlucHV0c1xuICAgKi9cbiAgcHVibGljIGRpYWxvZ1dpZHRoOiBzdHJpbmc7XG4gIHB1YmxpYyBkaWFsb2dNaW5XaWR0aDogc3RyaW5nO1xuICBwdWJsaWMgZGlhbG9nTWF4V2lkdGg6IHN0cmluZztcbiAgcHVibGljIGRpYWxvZ0hlaWdodDogc3RyaW5nO1xuICBwdWJsaWMgZGlhbG9nTWluSGVpZ2h0OiBzdHJpbmc7XG4gIHB1YmxpYyBkaWFsb2dNYXhIZWlnaHQ6IHN0cmluZztcbiAgcHVibGljIGRpYWxvZ0NsYXNzOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGRpYWxvZ1RpdGxlU2VwYXJhdG9yID0gJzonO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYkdyb3VwJylcbiAgcHVibGljIG9UYWJHcm91cDogT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZTtcbiAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE9Gb3JtTGF5b3V0RGlhbG9nQ29tcG9uZW50PjtcbiAgQFZpZXdDaGlsZCgnc3BsaXRQYW5lJylcbiAgcHVibGljIG9TcGxpdFBhbmU6IE9Gb3JtTGF5b3V0TWFuYWdlck1vZGU7XG5cbiAgcHVibGljIG9uTWFpblRhYlNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25TZWxlY3RlZFRhYkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uQ2xvc2VUYWI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJvdGVjdGVkIF9sYWJlbENvbHVtbnM6IHN0cmluZztcblxuICBnZXQgbGFiZWxDb2x1bW5zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsQ29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIHVzZXIgc2hvdWxkIHVzZSB0aGUgb3B0aW9ucyBpbnB1dFxuICAqL1xuICBzZXQgbGFiZWxDb2x1bW5zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYWJlbENvbHVtbnMgPSB2YWx1ZTtcbiAgICB0aGlzLl9sYWJlbENvbHNBcnJheSA9IFV0aWwucGFyc2VBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2xhYmVsQ29sc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuXG4gIGdldCBsYWJlbENvbHNBcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsQ29sc0FycmF5O1xuICB9XG5cbiAgc2V0IGxhYmVsQ29sc0FycmF5KHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX2xhYmVsQ29sc0FycmF5ID0gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogT1RyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBvRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlOiBPRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgbG9jYWxTdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZTtcblxuICBwcm90ZWN0ZWQgX3RhYkdyb3VwT3B0aW9uczogYW55ID0ge307XG5cbiAgZ2V0IHRhYkdyb3VwT3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl90YWJHcm91cE9wdGlvbnM7XG4gIH1cblxuICBhZGRUYWJHcm91cE9wdGlvbnModmFsdWU6IGFueSkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fdGFiR3JvdXBPcHRpb25zLCB2YWx1ZSk7XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdsYWJlbENvbHVtbnMnKSkge1xuICAgICAgdGhpcy5sYWJlbENvbHNBcnJheSA9IFV0aWwucGFyc2VBcnJheSh2YWx1ZVsnbGFiZWxDb2x1bW5zJ10pO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3NlcGFyYXRvcicpKSB7XG4gICAgICB0aGlzLnNlcGFyYXRvciA9IHZhbHVlWydzZXBhcmF0b3InXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdzdHJldGNoVGFicycpKSB7XG4gICAgICB0aGlzLnN0cmV0Y2hUYWJzID0gdmFsdWVbJ3N0cmV0Y2hUYWJzJ107XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9kaWFsb2dPcHRpb25zOiBhbnkgPSB7fTtcblxuICBnZXQgZGlhbG9nT3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9kaWFsb2dPcHRpb25zO1xuICB9XG5cbiAgYWRkRGlhbG9nT3B0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9kaWFsb2dPcHRpb25zLCB2YWx1ZSk7XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdsYWJlbENvbHVtbnMnKSkge1xuICAgICAgdGhpcy5sYWJlbENvbHNBcnJheSA9IFV0aWwucGFyc2VBcnJheSh2YWx1ZVsnbGFiZWxDb2x1bW5zJ10pO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3NlcGFyYXRvcicpKSB7XG4gICAgICB0aGlzLnNlcGFyYXRvciA9IHZhbHVlWydzZXBhcmF0b3InXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdkaWFsb2dUaXRsZVNlcGFyYXRvcicpKSB7XG4gICAgICB0aGlzLmRpYWxvZ1RpdGxlU2VwYXJhdG9yID0gdmFsdWVbJ2RpYWxvZ1RpdGxlU2VwYXJhdG9yJ107XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9zcGxpdFBhbmVPcHRpb25zOiBhbnkgPSB7fTtcblxuICBnZXQgc3BsaXRQYW5lT3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9zcGxpdFBhbmVPcHRpb25zO1xuICB9XG5cbiAgYWRkU3BsaXRQYW5lT3B0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9zcGxpdFBhbmVPcHRpb25zLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkaW5nR3VhcmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlO1xuXG4gIHB1YmxpYyBfbWFya0ZvclVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgb25UcmlnZ2VyVXBkYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwcm90ZWN0ZWQgY29tcG9uZW50U3RhdGVTZXJ2aWNlOiBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRTdGF0ZVNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJvdGVjdGVkIGFjdFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcm90ZWN0ZWQgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJvdGVjdGVkIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIEBTa2lwU2VsZigpIEBPcHRpb25hbCgpXG4gICAgcHVibGljIHBhcmVudEZvcm1MYXlvdXRNYW5hZ2VyOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlXG4gICkge1xuICAgIHRoaXMub0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UpO1xuICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KExvY2FsU3RvcmFnZVNlcnZpY2UpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTmF2aWdhdGlvblNlcnZpY2UpO1xuICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8T0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVTZXJ2aWNlPihBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZSBhcyBUeXBlPE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudFN0YXRlU2VydmljZT4pO1xuICAgIGlmICh0aGlzLnN0b3JlU3RhdGUpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uub25Sb3V0ZUNoYW5nZS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZVN0b3JhZ2UoKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgdGhpcy5nZXRJbmplY3Rpb25Ub2tlbkNvbmZpZygpO1xuXG4gIH1cblxuICBwcml2YXRlIGdldEluamVjdGlvblRva2VuQ29uZmlnKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvR2xvYmFsQ29uZmlnID0gdGhpcy5pbmplY3Rvci5nZXQoT19HTE9CQUxfQ09ORklHKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvR2xvYmFsQ29uZmlnLnN0b3JlU3RhdGUpKSB7XG4gICAgICAgIHRoaXMuc3RvcmVTdGF0ZSA9IG9HbG9iYWxDb25maWcuc3RvcmVTdGF0ZTtcbiAgICAgICAgaWYgKCF0aGlzLnN0b3JlU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSBpcyBvcHRpb25hbFxuICAgIH1cbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRTdGF0ZUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RhdGU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRBY3RpdmF0ZUNoaWxkR3VhcmQoKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMub2F0dHIpKSB7XG4gICAgICB0aGlzLm9hdHRyID0gKHRoaXMudGl0bGUgfHwgJycpICsgdGhpcy5tb2RlO1xuICAgICAgY29uc29sZS53YXJuKCdvLWZvcm0tbGF5b3V0LW1hbmFnZXIgbXVzdCBoYXZlIGFuIHVuaXF1ZSBhdHRyJyk7XG4gICAgfVxuICAgIHRoaXMub0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZS5yZWdpc3RlckZvcm1MYXlvdXRNYW5hZ2VyKHRoaXMpO1xuICAgIGlmICh0aGlzLnN0b3JlU3RhdGUpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlLmluaXRpYWxpemUodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmVsUmVmKSB7XG4gICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLm9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UucmVtb3ZlRm9ybUxheW91dE1hbmFnZXIodGhpcyk7XG4gICAgdGhpcy5kZXN0cm95QWN0aXZhdGVDaGlsZEd1YXJkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0cmlidXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMub2F0dHI7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tcG9uZW50S2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnRfJyArIHRoaXMub2F0dHI7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um91dGVLZXkoKTogc3RyaW5nIHtcbiAgICBsZXQgcm91dGUgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgdGhpcy5hY3RSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgcm91dGUgPSByb3V0ZS5yZXBsYWNlKHBhcmFtc1trZXldLCBrZXkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgcHVibGljIGdldERhdGFUb1N0b3JlKCk6IGFueSB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChjb21wUmVmKSA/IGNvbXBSZWYuZ2V0RGF0YVRvU3RvcmUoKSA6IHt9O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFtdKVxuICBwdWJsaWMgYmVmb3JldW5sb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlU3RvcmFnZSgpO1xuICB9XG5cbiAgcHVibGljIGdldExhYmVsRnJvbVVybFBhcmFtcyh1cmxQYXJhbXM6IG9iamVjdCk6IHN0cmluZyB7XG4gICAgbGV0IGxhYmVsID0gJyc7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHVybFBhcmFtcyk7XG4gICAga2V5cy5mb3JFYWNoKChwYXJhbSwgaSkgPT4ge1xuICAgICAgbGFiZWwgKz0gdXJsUGFyYW1zW3BhcmFtXSArICgoaSA8IGtleXMubGVuZ3RoIC0gMSkgPyB0aGlzLnNlcGFyYXRvciA6ICcnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rm9ybURhdGFGcm9tTGFiZWxDb2x1bW5zKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IGZvcm1EYXRhID0ge307XG4gICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCh4ID0+IHtcbiAgICAgIGlmICh0aGlzLmxhYmVsQ29sc0FycmF5LmluZGV4T2YoeCkgPiAtMSkge1xuICAgICAgICBmb3JtRGF0YVt4XSA9IGRhdGFbeF07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgcHVibGljIGFkZEFjdGl2YXRlQ2hpbGRHdWFyZCgpOiB2b2lkIHtcbiAgICBjb25zdCByb3V0ZUNvbmZpZyA9IHRoaXMuZ2V0UGFyZW50QWN0Um91dGVSb3V0ZSgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChyb3V0ZUNvbmZpZykpIHtcbiAgICAgIGNvbnN0IGNhbkFjdGl2YXRlQ2hpbGRBcnJheSA9IChyb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkIHx8IFtdKTtcbiAgICAgIGxldCBwcmV2aW91c2x5QWRkZWQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjYW5BY3RpdmF0ZUNoaWxkQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgZ3VhcmRDaGlsZCA9IHRoaXMuaW5qZWN0b3IuZ2V0KENhbkFjdGl2YXRlRm9ybUxheW91dENoaWxkR3VhcmQpO1xuICAgICAgICBwcmV2aW91c2x5QWRkZWQgPSAoY2FuQWN0aXZhdGVDaGlsZEFycmF5W2ldID09PSBndWFyZENoaWxkLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgaWYgKHByZXZpb3VzbHlBZGRlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXByZXZpb3VzbHlBZGRlZCkge1xuICAgICAgICB0aGlzLmFkZGluZ0d1YXJkID0gdHJ1ZTtcbiAgICAgICAgY2FuQWN0aXZhdGVDaGlsZEFycmF5LnB1c2goQ2FuQWN0aXZhdGVGb3JtTGF5b3V0Q2hpbGRHdWFyZCk7XG4gICAgICAgIHJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQgPSBjYW5BY3RpdmF0ZUNoaWxkQXJyYXk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlc3Ryb3lBY3RpdmF0ZUNoaWxkR3VhcmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFkZGluZ0d1YXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZS5hY3RpdmVGb3JtTGF5b3V0TWFuYWdlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UuY29udGV4dCA9IHZvaWQgMDtcbiAgICBjb25zdCByb3V0ZUNvbmZpZyA9IHRoaXMuZ2V0UGFyZW50QWN0Um91dGVSb3V0ZSgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChyb3V0ZUNvbmZpZykpIHtcbiAgICAgIGZvciAobGV0IGkgPSAocm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZCB8fCBbXSkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgZ3VhcmRDaGlsZCA9IHRoaXMuaW5qZWN0b3IuZ2V0KENhbkFjdGl2YXRlRm9ybUxheW91dENoaWxkR3VhcmQpO1xuICAgICAgICBpZiAocm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZFtpXSA9PT0gZ3VhcmRDaGlsZC5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgIHJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRGlhbG9nTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuRElBTE9HX01PREU7XG4gIH1cblxuICBwdWJsaWMgaXNUYWJNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5UQUJfTU9ERTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NwbGl0UGFuZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50LlNQTElUX1BBTkVfTU9ERTtcbiAgfVxuXG4gIHB1YmxpYyBhZGREZXRhaWxDb21wb25lbnQoY2hpbGRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgdXJsOiBzdHJpbmcsIGNvbnRleHQ/OiBPRm9ybUxheW91dE1hbmFnZXJDb250ZXh0KTogdm9pZCB7XG4gICAgY2hpbGRSb3V0ZSA9IFV0aWwuZ2V0TGFzdEFjdGl2YXRlUm91dGUoY2hpbGRSb3V0ZSk7XG4gICAgY29uc3QgbmV3RGV0YWlsQ29tcDogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEgPSB7XG4gICAgICBwYXJhbXM6IGNoaWxkUm91dGUucGFyYW1zLFxuICAgICAgcXVlcnlQYXJhbXM6IGNoaWxkUm91dGUucXVlcnlQYXJhbXMsXG4gICAgICB1cmxTZWdtZW50czogY2hpbGRSb3V0ZS51cmwsXG4gICAgICBjb21wb25lbnQ6IGNoaWxkUm91dGUucm91dGVDb25maWcuY29tcG9uZW50LFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBpZDogVXRpbC5yYW5kb21OdW1iZXIoKS50b1N0cmluZygpLFxuICAgICAgbGFiZWw6IGNvbnRleHQ/LmxhYmVsIHx8ICcnLFxuICAgICAgaW5uZXJGb3Jtc0luZm86IHt9LFxuICAgICAgcmVuZGVyZWQ6ZmFsc2UsXG4gICAgICByZW5kZXJlclN1YmplY3Q6IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpLFxuICAgICAgaW5zZXJ0aW9uTW9kZTogY2hpbGRSb3V0ZS5xdWVyeVBhcmFtc1tDb2Rlcy5JTlNFUlRJT05fTU9ERV0gPT09ICd0cnVlJyxcbiAgICB9O1xuXG4gICAgLyoqIGxpc3RlbmluZyBmb3IgdGhlIGNvbXBvbmVudHMgdG8gYmUgcmVuZGVyZWQgdG8gZGV0ZXJtaW5lIHRoYXQgdGhlIGZvcm0tbGF5b3V0LW1hbmFnZXIgaXMgZmluaXNoZWQgbmF2aWdhdGluZy4gKi9cbiAgICBuZXdEZXRhaWxDb21wLnJlbmRlcmVyU3ViamVjdC5zdWJzY3JpYmUoKHJlbmRlcmVyOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAocmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5pc05hdmlnYXRpbmcgPSAhcmVuZGVyZXI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc0RpYWxvZ01vZGUoKSkge1xuICAgICAgdGhpcy5vcGVuRm9ybUxheW91dERpYWxvZyhuZXdEZXRhaWxDb21wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpKSB7XG4gICAgICAgIGNvbXBSZWYub3BlbkRldGFpbChuZXdEZXRhaWxDb21wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xvc2VEZXRhaWwob3B0aW9ucz86IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5nZXRMYXlvdXRNb2RlQ29tcG9uZW50KCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpKSB7XG4gICAgICBjb21wUmVmLmNsb3NlRGV0YWlsKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbG9zZURldGFpbHMoZGV0YWlsc0RhdGE6IGFueVtdID0gW10sIG9wdGlvbnM/OiBGb3JtTGF5b3V0Q2xvc2VEZXRhaWxPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNUYWJNb2RlKCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5vVGFiR3JvdXApKSB7XG4gICAgICB0aGlzLm9UYWJHcm91cC5jbG9zZURldGFpbHMoZGV0YWlsc0RhdGEsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuRm9ybUxheW91dERpYWxvZyhkZXRhaWxDb21wOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSk6IHZvaWQge1xuICAgIGNvbnN0IGNzc2NsYXNzID0gWydvLWZvcm0tbGF5b3V0LWRpYWxvZy1vdmVybGF5J107XG4gICAgaWYgKHRoaXMuZGlhbG9nQ2xhc3MpIHtcbiAgICAgIGNzc2NsYXNzLnB1c2godGhpcy5kaWFsb2dDbGFzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nT3B0aW9ucyA9ICh0aGlzLmRpYWxvZ09wdGlvbnMgfHwge30pO1xuXG4gICAgY29uc3QgZGlhbG9nQ29uZmlnOiBNYXREaWFsb2dDb25maWcgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGRhdGE6IGRldGFpbENvbXAsXG4gICAgICAgIGxheW91dE1hbmFnZXJDb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIHRpdGxlOiAodGhpcy50aXRsZSB8fCBkaWFsb2dPcHRpb25zLnRpdGxlKSxcbiAgICAgICAgZGlhbG9nVGl0bGVTZXBhcmF0b3I6IHRoaXMuZGlhbG9nVGl0bGVTZXBhcmF0b3JcbiAgICAgIH0sXG4gICAgICB3aWR0aDogZGlhbG9nT3B0aW9ucy53aWR0aCB8fCB0aGlzLmRpYWxvZ1dpZHRoLFxuICAgICAgbWluV2lkdGg6IGRpYWxvZ09wdGlvbnMubWluV2lkdGggfHwgdGhpcy5kaWFsb2dNaW5XaWR0aCxcbiAgICAgIG1heFdpZHRoOiBkaWFsb2dPcHRpb25zLm1heFdpZHRoIHx8IHRoaXMuZGlhbG9nTWF4V2lkdGgsXG4gICAgICBoZWlnaHQ6IGRpYWxvZ09wdGlvbnMuaGVpZ2h0IHx8IHRoaXMuZGlhbG9nSGVpZ2h0LFxuICAgICAgbWluSGVpZ2h0OiBkaWFsb2dPcHRpb25zLm1pbkhlaWdodCB8fCB0aGlzLmRpYWxvZ01pbkhlaWdodCxcbiAgICAgIG1heEhlaWdodDogZGlhbG9nT3B0aW9ucy5tYXhIZWlnaHQgfHwgdGhpcy5kaWFsb2dNYXhIZWlnaHQsXG4gICAgICBkaXNhYmxlQ2xvc2U6IGRpYWxvZ09wdGlvbnMuZGlzYWJsZUNsb3NlIHx8IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBkaWFsb2dPcHRpb25zLmNsYXNzIHx8IGNzc2NsYXNzXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmRpYWxvZ09wdGlvbnMpIHtcbiAgICAgIGRpYWxvZ0NvbmZpZy5jbG9zZU9uTmF2aWdhdGlvbiA9IHRoaXMuZGlhbG9nT3B0aW9ucy5jbG9zZU9uTmF2aWdhdGlvbjtcbiAgICAgIGRpYWxvZ0NvbmZpZy5iYWNrZHJvcENsYXNzID0gdGhpcy5kaWFsb2dPcHRpb25zLmJhY2tkcm9wQ2xhc3M7XG4gICAgICBkaWFsb2dDb25maWcucG9zaXRpb24gPSB0aGlzLmRpYWxvZ09wdGlvbnMucG9zaXRpb247XG4gICAgICBkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gdGhpcy5kaWFsb2dPcHRpb25zLmRpc2FibGVDbG9zZTtcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oT0Zvcm1MYXlvdXREaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubWFya0ZvclVwZGF0ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUlmTmVlZGVkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbG9hZE1haW5Db21wb25lbnRzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKiBPbmNlIHRoZSBtb2RhbCBpcyBvcGVuZWQsIHRoZSBjb21wb25lbnQgaXMgcmVuZGVyZWQgYW5kIHRoZSByZW5kZXJlclN1YmplY3QgaXMgZW1pdHRlZCB0byBlbmFibGUgbmF2aWdhdGlvbiovXG4gICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgZGV0YWlsQ29tcC5yZW5kZXJlZCA9IHRydWU7XG4gICAgICBkZXRhaWxDb21wLnJlbmRlcmVyU3ViamVjdC5uZXh0KHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEZvcm1DYWNoZURhdGEoKTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29tcFJlZikgPyBjb21wUmVmLmdldEZvcm1DYWNoZURhdGEoKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNb2RpZmllZFN0YXRlKGZvcm1BdHRyOiBzdHJpbmcsIG1vZGlmaWVkOiBib29sZWFuLCBjb25maXJtRXhpdDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29tcFJlZikpIHtcbiAgICAgIGNvbXBSZWYuc2V0TW9kaWZpZWRTdGF0ZShmb3JtQXR0ciwgbW9kaWZpZWQsIGNvbmZpcm1FeGl0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFiZWxGcm9tRGF0YShkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBsYWJlbCA9ICcnO1xuICAgIGNvbnN0IGlzRGF0YURlZmluZWQgPSBVdGlsLmlzRGVmaW5lZChkYXRhKTtcbiAgICBpZiAoaXNEYXRhRGVmaW5lZCAmJiBkYXRhLmhhc093blByb3BlcnR5KCduZXdfdGFiX3RpdGxlJykpIHtcbiAgICAgIGxhYmVsID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChkYXRhLm5ld190YWJfdGl0bGUpO1xuICAgIH0gZWxzZSBpZiAoaXNEYXRhRGVmaW5lZCAmJiB0aGlzLmxhYmVsQ29sc0FycmF5Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5sYWJlbENvbHNBcnJheS5mb3JFYWNoKChjb2wsIGlkeCkgPT4ge1xuICAgICAgICBpZiAoZGF0YVtjb2xdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsYWJlbCArPSBkYXRhW2NvbF0gKyAoKGlkeCA8IHRoaXMubGFiZWxDb2xzQXJyYXkubGVuZ3RoIC0gMSkgPyB0aGlzLnNlcGFyYXRvciA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVOYXZpZ2F0aW9uKGRhdGE6IGFueSwga2V5c1ZhbHVlczogYW55LCBpbnNlcnRpb25Nb2RlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuZ2V0TGF5b3V0TW9kZUNvbXBvbmVudCgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb21wUmVmKSkge1xuICAgICAgY29tcFJlZi51cGRhdGVOYXZpZ2F0aW9uKGRhdGEsIGtleXNWYWx1ZXMsIGluc2VydGlvbk1vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVBY3RpdmVEYXRhKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29tcFJlZikpIHtcbiAgICAgIGNvbXBSZWYudXBkYXRlQWN0aXZlRGF0YShkYXRhKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Um91dGVPZkFjdGl2ZUl0ZW0oKTogYW55W10ge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29tcFJlZikgPyBjb21wUmVmLmdldFJvdXRlT2ZBY3RpdmVJdGVtKCkgOiBbXTtcbiAgfVxuXG4gIHB1YmxpYyBpc01haW5Db21wb25lbnQoY29tcDogSUxheW91dE1hbmFnZXJDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0RpYWxvZ01vZGUoKSkge1xuICAgICAgcmV0dXJuICFjb21wLm9Gb3JtTGF5b3V0RGlhbG9nO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gKFV0aWwuaXNEZWZpbmVkKGNvbXBSZWYpXG4gICAgICAmJiAoY29tcFJlZi5pc01haW5Db21wb25lbnQoY29tcClcbiAgICAgICAgfHwgKFV0aWwuaXNEZWZpbmVkKGNvbXAucGFyZW50Q29tcG9uZW50KSkgJiYgY29tcFJlZi5pc01haW5Db21wb25lbnQoY29tcC5wYXJlbnRDb21wb25lbnQpKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um91dGVGb3JDb21wb25lbnQoY29tcDogSUxheW91dE1hbmFnZXJDb21wb25lbnQpOiBhbnlbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgaWYgKHRoaXMucGFyZW50Rm9ybUxheW91dE1hbmFnZXIpIHtcbiAgICAgIGNvbnN0IHBhcmVudFJvdXRlID0gdGhpcy5wYXJlbnRGb3JtTGF5b3V0TWFuYWdlci5nZXRSb3V0ZUZvckNvbXBvbmVudChjb21wKTtcbiAgICAgIGlmIChwYXJlbnRSb3V0ZSAmJiBwYXJlbnRSb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnBhcmVudFJvdXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzTWFpbkNvbXBvbmVudChjb21wKSkge1xuICAgICAgY29uc3QgYWN0aXZlUm91dGUgPSB0aGlzLmdldFJvdXRlT2ZBY3RpdmVJdGVtKCk7XG5cbiAgICAgIGlmIChhY3RpdmVSb3V0ZSAmJiBhY3RpdmVSb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLmFjdGl2ZVJvdXRlKTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgc2V0QXNBY3RpdmVGb3JtTGF5b3V0TWFuYWdlcigpOiB2b2lkIHtcbiAgICB0aGlzLm9Gb3JtTGF5b3V0TWFuYWdlclNlcnZpY2UuYWN0aXZlRm9ybUxheW91dE1hbmFnZXIgPSB0aGlzO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZE1haW5Db21wb25lbnRzKCk6IHZvaWQge1xuICAgIHRoaXMub25UcmlnZ2VyVXBkYXRlLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhbGxvd1RvVXBkYXRlTmF2aWdhdGlvbihmb3JtQXR0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmlzVGFiTW9kZSgpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYkdyb3VwKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnRpdGxlRGF0YU9yaWdpbikpID9cbiAgICAgIHRoaXMudGl0bGVEYXRhT3JpZ2luID09PSBmb3JtQXR0ciA6XG4gICAgICB0cnVlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0YXRlU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubG9jYWxTdG9yYWdlU2VydmljZSB8fCAhdGhpcy5zdG9yZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzVGFiTW9kZSA9IHRoaXMuaXNUYWJNb2RlKCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5vVGFiR3JvdXApO1xuICAgIGNvbnN0IGlzU3BsaXRQYW5lTW9kZSA9IHRoaXMuaXNTcGxpdFBhbmVNb2RlKCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5vU3BsaXRQYW5lKTtcbiAgICBpZiAoaXNUYWJNb2RlIHx8IGlzU3BsaXRQYW5lTW9kZSkge1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUNvbXBvbmVudFN0b3JhZ2UodGhpcywgdGhpcy5nZXRSb3V0ZUtleSgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmVudEFjdFJvdXRlUm91dGUoKTogUm91dGUge1xuICAgIGxldCBhY3RSb3V0ZSA9IHRoaXMuYWN0Um91dGU7XG4gICAgd2hpbGUgKGFjdFJvdXRlLnBhcmVudCAhPT0gdW5kZWZpbmVkICYmIGFjdFJvdXRlLnBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGFjdFJvdXRlLnJvdXRlQ29uZmlnLmNoaWxkcmVuIHx8IGFjdFJvdXRlLnJvdXRlQ29uZmlnLmxvYWRDaGlsZHJlbikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGFjdFJvdXRlID0gYWN0Um91dGUucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gYWN0Um91dGUucm91dGVDb25maWc7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMubWFya0ZvclVwZGF0ZSkge1xuICAgICAgdGhpcy5tYXJrRm9yVXBkYXRlID0gZmFsc2U7XG4gICAgICB0aGlzLm9uVHJpZ2dlclVwZGF0ZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFBhcmFtcygpOiBhbnkge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29tcFJlZikgPyBjb21wUmVmLmdldFBhcmFtcygpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgc2V0IG1hcmtGb3JVcGRhdGUoYXJnOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbWFya0ZvclVwZGF0ZSA9IGFyZztcbiAgICBpZiAodGhpcy5pc1NwbGl0UGFuZU1vZGUoKSkge1xuICAgICAgdGhpcy51cGRhdGVJZk5lZWRlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtYXJrRm9yVXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tYXJrRm9yVXBkYXRlO1xuICB9XG5cbiAgZ2V0IGlnbm9yZUNhbkRlYWN0aXZhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzU3BsaXRQYW5lTW9kZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldExheW91dE1vZGVDb21wb25lbnQoKTogT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZSB7XG4gICAgbGV0IGNvbXBSZWY7XG4gICAgaWYgKHRoaXMuaXNUYWJNb2RlKCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5vVGFiR3JvdXApKSB7XG4gICAgICBjb21wUmVmID0gdGhpcy5vVGFiR3JvdXA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRGlhbG9nTW9kZSgpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuZGlhbG9nUmVmKSkge1xuICAgICAgY29tcFJlZiA9IHRoaXMuZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1NwbGl0UGFuZU1vZGUoKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9TcGxpdFBhbmUpKSB7XG4gICAgICBjb21wUmVmID0gdGhpcy5vU3BsaXRQYW5lO1xuICAgIH1cbiAgICByZXR1cm4gY29tcFJlZjtcbiAgfVxuXG4gIGFsbG93TmF2aWdhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNUYWJNb2RlKCk7XG4gIH1cblxuICBwdWJsaWMgY2FuQWRkRGV0YWlsQ29tcG9uZW50KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC53cmFwSW50b09ic2VydmFibGUoVXRpbC5pc0RlZmluZWQoY29tcFJlZikgPyBjb21wUmVmLmNhbkFkZERldGFpbENvbXBvbmVudCgpIDogdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgaGFzVG9Db25maXJtRXhpdChkYXRhOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSwgb3B0aW9ucz86IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQob3B0aW9ucykgJiYgb3B0aW9ucy5leGl0V2l0aG91dENvbmZpcm1hdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBmb3Jtc0F0dHIgPSBPYmplY3Qua2V5cyhkYXRhLmlubmVyRm9ybXNJbmZvKTtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKGZvcm1zQXR0ci5sZW5ndGggPiAwKSB7XG4gICAgICBmb3Jtc0F0dHIuZm9yRWFjaChmb3JtQXR0ciA9PiB7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBkYXRhLmlubmVyRm9ybXNJbmZvW2Zvcm1BdHRyXTtcbiAgICAgICAgICByZXN1bHQgPSBmb3JtRGF0YS5jb25maXJtT25FeGl0ICYmIGZvcm1EYXRhLm1vZGlmaWVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJZE9mQWN0aXZlSXRlbSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmdldExheW91dE1vZGVDb21wb25lbnQoKTtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29tcFJlZikgPyBgJHt0aGlzLm9hdHRyfS0ke2NvbXBSZWYuZ2V0SWRPZkFjdGl2ZUl0ZW0oKX0tYCA6ICcnO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJtb2RlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIk9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudC5UQUJfTU9ERVwiPlxuICAgIDxvLWZvcm0tbGF5b3V0LXRhYmdyb3VwICN0YWJHcm91cCBbdGl0bGVdPVwidGl0bGVcIiAob25NYWluVGFiU2VsZWN0ZWQpPVwib25NYWluVGFiU2VsZWN0ZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChvblNlbGVjdGVkVGFiQ2hhbmdlKT1cIm9uU2VsZWN0ZWRUYWJDaGFuZ2UuZW1pdCgkZXZlbnQpXCIgKG9uQ2xvc2VUYWIpPVwib25DbG9zZVRhYi5lbWl0KCRldmVudClcIlxuICAgICAgW29wdGlvbnNdPVwidGFiR3JvdXBPcHRpb25zXCIgW3N0cmV0Y2gtdGFic109XCJzdHJldGNoVGFic1wiPlxuICAgICAgPG5nLWNvbnRlbnQgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50QmxvY2tcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9vLWZvcm0tbGF5b3V0LXRhYmdyb3VwPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuU1BMSVRfUEFORV9NT0RFXCI+XG4gICAgPG8tZm9ybS1sYXlvdXQtc3BsaXQtcGFuZSAjc3BsaXRQYW5lIFtvcHRpb25zXT1cInNwbGl0UGFuZU9wdGlvbnNcIj5cbiAgICAgIDxuZy1jb250ZW50ICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudEJsb2NrXCI+PC9uZy1jb250ZW50PlxuICAgIDwvby1mb3JtLWxheW91dC1zcGxpdC1wYW5lPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQuRElBTE9HX01PREVcIj5cbiAgICA8bmctY29udGVudCAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRCbG9ja1wiPjwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnRCbG9jaz5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT4iXX0=