geonetwork-ui 2.6.0-dev.f073bbb4e → 2.7.0-dev.0d8b7bca9

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 (862) hide show
  1. package/README.md +2 -3
  2. package/esm2022/libs/api/metadata-converter/src/index.mjs +2 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/base.converter.mjs +1 -1
  4. package/esm2022/libs/api/metadata-converter/src/lib/common/distribution.mapper.mjs +3 -1
  5. package/esm2022/libs/api/metadata-converter/src/lib/common/resource-types.mjs +17 -15
  6. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +11 -2
  7. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.mjs +3 -3
  8. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +59 -15
  9. package/esm2022/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.mjs +3 -3
  10. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  11. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +6 -6
  12. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +3 -3
  13. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +14 -6
  14. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +7 -7
  15. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +8 -8
  16. package/esm2022/libs/api/metadata-converter/src/lib/translate-utils.mjs +17 -0
  17. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +4 -4
  18. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +5 -2
  19. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +21 -27
  20. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +79 -16
  21. package/esm2022/libs/api/repository/src/lib/gn4/gn4.provider.mjs +7 -1
  22. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +8 -8
  23. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +14 -11
  24. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +81 -46
  25. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +2 -1
  26. package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
  27. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  28. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  29. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  30. package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +7 -31
  31. package/esm2022/libs/feature/catalog/src/lib/sources/sources.service.mjs +9 -8
  32. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +59 -11
  33. package/esm2022/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.mjs +4 -5
  34. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +2 -2
  35. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +42 -3
  36. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +31 -8
  37. package/esm2022/libs/feature/editor/src/index.mjs +2 -4
  38. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
  39. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +13 -7
  40. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +4 -1
  41. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +5 -1
  42. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +5 -7
  43. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +8 -13
  44. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +5 -6
  45. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +275 -0
  46. package/esm2022/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.mjs +5 -15
  47. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +5 -5
  48. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.mjs +5 -8
  49. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.mjs +4 -5
  50. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +6 -10
  51. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +9 -14
  52. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +4 -15
  53. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +4 -4
  54. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +4 -4
  55. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +4 -4
  56. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +7 -7
  57. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.mjs +4 -4
  58. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +4 -4
  59. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +6 -17
  60. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +4 -5
  61. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +12 -30
  62. package/esm2022/libs/feature/editor/src/lib/models/index.mjs +1 -3
  63. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +5 -6
  64. package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +11 -8
  65. package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +11 -8
  66. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +11 -6
  67. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +10 -5
  68. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +3 -36
  69. package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +5 -11
  70. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +6 -6
  71. package/esm2022/libs/feature/record/src/index.mjs +2 -4
  72. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +50 -26
  73. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +10 -15
  74. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +5 -6
  75. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +12 -17
  76. package/esm2022/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.mjs +7 -4
  77. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +8 -22
  78. package/esm2022/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.mjs +5 -5
  79. package/esm2022/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.mjs +15 -7
  80. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +151 -24
  81. package/esm2022/libs/feature/record/src/lib/record-meta/record-meta.component.mjs +1 -1
  82. package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +3 -1
  83. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +16 -5
  84. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +13 -15
  85. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +7 -1
  86. package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +3 -1
  87. package/esm2022/libs/feature/router/src/lib/default/constants.mjs +3 -1
  88. package/esm2022/libs/feature/router/src/lib/default/router.config.mjs +1 -1
  89. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +10 -2
  90. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +9 -3
  91. package/esm2022/libs/feature/search/src/index.mjs +2 -2
  92. package/esm2022/libs/feature/search/src/lib/constants.mjs +4 -2
  93. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +12 -8
  94. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +33 -42
  95. package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +3 -3
  96. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +8 -6
  97. package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -2
  98. package/esm2022/libs/feature/search/src/lib/results-hits/results-hits.container.component.mjs +44 -0
  99. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +35 -15
  100. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +13 -10
  101. package/esm2022/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.mjs +5 -7
  102. package/esm2022/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.mjs +4 -4
  103. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +74 -4
  104. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +4 -3
  105. package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +3 -3
  106. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +4 -5
  107. package/esm2022/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.mjs +4 -5
  108. package/esm2022/libs/ui/catalog/src/lib/organisations-result/organisations-result.component.mjs +4 -5
  109. package/esm2022/libs/ui/dataviz/src/index.mjs +1 -2
  110. package/esm2022/libs/ui/dataviz/src/lib/chart/chart.component.mjs +5 -3
  111. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +14 -8
  112. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +5 -5
  113. package/esm2022/libs/ui/elements/src/index.mjs +7 -4
  114. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +7 -7
  115. package/esm2022/libs/ui/elements/src/lib/application-banner/application-banner.component.mjs +5 -5
  116. package/esm2022/libs/ui/elements/src/lib/avatar/avatar.component.mjs +4 -3
  117. package/esm2022/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.mjs +5 -3
  118. package/esm2022/libs/ui/elements/src/lib/download-item/download-item.component.mjs +5 -6
  119. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +20 -9
  120. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +4 -5
  121. package/esm2022/libs/ui/elements/src/lib/external-link-card/external-link-card.component.mjs +59 -0
  122. package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +54 -0
  123. package/esm2022/libs/ui/elements/src/lib/image-input/image-input.component.mjs +4 -5
  124. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +3 -3
  125. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +89 -0
  126. package/esm2022/libs/ui/elements/src/lib/kind-badge/kind-badge.component.mjs +70 -0
  127. package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +3 -6
  128. package/esm2022/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.mjs +4 -5
  129. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +5 -6
  130. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +10 -8
  131. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +40 -17
  132. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +8 -5
  133. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +9 -6
  134. package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +70 -0
  135. package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +170 -0
  136. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +4 -5
  137. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +5 -4
  138. package/esm2022/libs/ui/inputs/src/index.mjs +3 -3
  139. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +10 -13
  140. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +2 -2
  141. package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +4 -3
  142. package/esm2022/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.mjs +7 -6
  143. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +29 -7
  144. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +5 -6
  145. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +5 -7
  146. package/esm2022/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.mjs +43 -0
  147. package/esm2022/libs/ui/inputs/src/lib/inline-filter/inline-filter.model.mjs +2 -0
  148. package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +73 -0
  149. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +8 -3
  150. package/esm2022/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.mjs +4 -5
  151. package/esm2022/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.mjs +3 -3
  152. package/esm2022/libs/ui/layout/src/index.mjs +3 -2
  153. package/esm2022/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.mjs +44 -3
  154. package/esm2022/libs/ui/layout/src/lib/block-list/block-list.component.mjs +61 -14
  155. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +3 -3
  156. package/esm2022/libs/ui/layout/src/lib/cell-popin/cell-popin.component.mjs +110 -0
  157. package/esm2022/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.mjs +34 -13
  158. package/esm2022/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.mjs +4 -5
  159. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +26 -5
  160. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +4 -5
  161. package/esm2022/libs/ui/layout/src/lib/pagination/pagination.component.mjs +4 -5
  162. package/esm2022/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +6 -6
  163. package/esm2022/libs/ui/layout/src/lib/sticky-header/sticky-header.component.mjs +4 -3
  164. package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +71 -0
  165. package/esm2022/libs/ui/map/src/index.mjs +2 -1
  166. package/esm2022/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.mjs +29 -4
  167. package/esm2022/libs/ui/map/src/lib/components/map-container/map-container.component.mjs +4 -5
  168. package/esm2022/libs/ui/map/src/lib/components/map-legend/map-legend.component.mjs +2 -2
  169. package/esm2022/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.mjs +80 -0
  170. package/esm2022/libs/ui/search/src/index.mjs +3 -1
  171. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +6 -6
  172. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +17 -10
  173. package/esm2022/libs/ui/search/src/lib/results-hits-number/results-hits-number.component.mjs +3 -3
  174. package/esm2022/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.mjs +53 -0
  175. package/esm2022/libs/ui/search/src/lib/results-list/results-layout.config.mjs +2 -2
  176. package/esm2022/libs/ui/search/src/lib/results-list/results-list.component.mjs +3 -3
  177. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +24 -17
  178. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +45 -20
  179. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +39 -26
  180. package/esm2022/libs/ui/widgets/src/index.mjs +1 -2
  181. package/esm2022/libs/ui/widgets/src/lib/color-scale/color-scale.component.mjs +3 -3
  182. package/esm2022/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.mjs +3 -3
  183. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +6 -3
  184. package/esm2022/libs/util/app-config/src/lib/fixtures.mjs +3 -1
  185. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  186. package/esm2022/libs/util/i18n/src/index.mjs +2 -3
  187. package/esm2022/libs/util/i18n/src/lib/embedded.translate.loader.mjs +3 -2
  188. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +36 -28
  189. package/esm2022/libs/util/i18n/src/lib/i18n.interceptor.mjs +10 -9
  190. package/esm2022/libs/util/i18n/src/lib/i18n.providers.mjs +41 -0
  191. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +63 -3
  192. package/esm2022/libs/util/shared/src/index.mjs +3 -2
  193. package/esm2022/libs/util/shared/src/lib/gn-ui-version.mjs +6 -0
  194. package/esm2022/libs/util/shared/src/lib/image-fallback.directive.mjs +3 -2
  195. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +5 -1
  196. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +24 -6
  197. package/esm2022/libs/util/shared/src/lib/record.util.mjs +56 -0
  198. package/esm2022/translations/de.json +91 -24
  199. package/esm2022/translations/en.json +91 -24
  200. package/esm2022/translations/es.json +90 -23
  201. package/esm2022/translations/fr.json +92 -25
  202. package/esm2022/translations/it.json +90 -24
  203. package/esm2022/translations/nl.json +90 -23
  204. package/esm2022/translations/pt.json +90 -23
  205. package/esm2022/translations/sk.json +608 -0
  206. package/fesm2022/geonetwork-ui.mjs +11089 -8767
  207. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  208. package/libs/api/metadata-converter/src/index.d.ts +1 -0
  209. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  210. package/libs/api/metadata-converter/src/lib/base.converter.d.ts.map +1 -1
  211. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  212. package/libs/api/metadata-converter/src/lib/common/resource-types.d.ts +21 -0
  213. package/libs/api/metadata-converter/src/lib/common/resource-types.d.ts.map +1 -1
  214. package/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.d.ts.map +1 -1
  215. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +4 -4
  216. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  217. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +0 -1
  218. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  219. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +1 -0
  220. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
  221. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  222. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  223. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  224. package/libs/api/metadata-converter/src/lib/translate-utils.d.ts +2 -0
  225. package/libs/api/metadata-converter/src/lib/translate-utils.d.ts.map +1 -0
  226. package/libs/api/repository/src/lib/gn4/auth/auth.service.d.ts.map +1 -1
  227. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  228. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +9 -7
  229. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  230. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +14 -3
  231. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  232. package/libs/api/repository/src/lib/gn4/gn4.provider.d.ts.map +1 -1
  233. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.d.ts +1 -0
  234. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.d.ts.map +1 -1
  235. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts +4 -4
  236. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  237. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -4
  238. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  239. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts +1 -0
  240. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  241. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +8 -1
  242. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
  243. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +26 -17
  244. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  245. package/libs/common/domain/src/lib/platform.service.interface.d.ts +2 -1
  246. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  247. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +7 -1
  248. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  249. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts +4 -8
  250. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts.map +1 -1
  251. package/libs/feature/catalog/src/lib/sources/sources.service.d.ts +3 -3
  252. package/libs/feature/catalog/src/lib/sources/sources.service.d.ts.map +1 -1
  253. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +14 -9
  254. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  255. package/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.d.ts.map +1 -1
  256. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +3 -0
  257. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  258. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +6 -3
  259. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  260. package/libs/feature/editor/src/index.d.ts +1 -3
  261. package/libs/feature/editor/src/index.d.ts.map +1 -1
  262. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +8 -1
  263. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  264. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +10 -12
  265. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  266. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +2 -1
  267. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  268. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  269. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +1 -1
  270. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  271. package/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.d.ts.map +1 -1
  272. package/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.d.ts.map +1 -1
  273. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts.map +1 -1
  274. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts +52 -0
  275. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -0
  276. package/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.d.ts.map +1 -1
  277. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +6 -6
  278. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  279. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.d.ts.map +1 -1
  280. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.d.ts.map +1 -1
  281. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts.map +1 -1
  282. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -1
  283. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts.map +1 -1
  284. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts.map +1 -1
  285. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts.map +1 -1
  286. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +1 -1
  287. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts.map +1 -1
  288. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts.map +1 -1
  289. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  290. package/libs/feature/editor/src/lib/feature-editor.module.d.ts +10 -17
  291. package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
  292. package/libs/feature/editor/src/lib/models/index.d.ts +0 -2
  293. package/libs/feature/editor/src/lib/models/index.d.ts.map +1 -1
  294. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.d.ts.map +1 -1
  295. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -1
  296. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts.map +1 -1
  297. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -1
  298. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts.map +1 -1
  299. package/libs/feature/map/src/lib/feature-map.module.d.ts +2 -11
  300. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  301. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -1
  302. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts.map +1 -1
  303. package/libs/feature/record/src/index.d.ts +1 -3
  304. package/libs/feature/record/src/index.d.ts.map +1 -1
  305. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +23 -7
  306. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  307. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +2 -3
  308. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  309. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +1 -2
  310. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  311. package/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.d.ts +2 -1
  312. package/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.d.ts.map +1 -1
  313. package/libs/feature/record/src/lib/feature-record.module.d.ts +8 -12
  314. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  315. package/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.d.ts.map +1 -1
  316. package/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.d.ts.map +1 -1
  317. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +22 -8
  318. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  319. package/libs/feature/record/src/lib/record-meta/record-meta.component.d.ts +2 -2
  320. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +13 -3
  321. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  322. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +9 -1
  323. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  324. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +30 -23
  325. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  326. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +4 -2
  327. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  328. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +3 -1
  329. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
  330. package/libs/feature/router/src/lib/default/constants.d.ts +2 -0
  331. package/libs/feature/router/src/lib/default/constants.d.ts.map +1 -1
  332. package/libs/feature/router/src/lib/default/router.config.d.ts +2 -0
  333. package/libs/feature/router/src/lib/default/router.config.d.ts.map +1 -1
  334. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  335. package/libs/feature/router/src/lib/default/state/router.facade.d.ts +5 -0
  336. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  337. package/libs/feature/search/src/index.d.ts +1 -1
  338. package/libs/feature/search/src/index.d.ts.map +1 -1
  339. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  340. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +2 -1
  341. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  342. package/libs/feature/search/src/lib/feature-search.module.d.ts +24 -22
  343. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  344. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +2 -1
  345. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  346. package/libs/feature/search/src/lib/record-url.token.d.ts +3 -1
  347. package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -1
  348. package/libs/feature/search/src/lib/results-hits/results-hits.container.component.d.ts +22 -0
  349. package/libs/feature/search/src/lib/results-hits/results-hits.container.component.d.ts.map +1 -0
  350. package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts +5 -3
  351. package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts.map +1 -1
  352. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +6 -5
  353. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  354. package/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.d.ts +1 -2
  355. package/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.d.ts.map +1 -1
  356. package/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.d.ts.map +1 -1
  357. package/libs/feature/search/src/lib/utils/service/fields.d.ts +22 -2
  358. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  359. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  360. package/libs/ui/dataviz/src/index.d.ts +0 -1
  361. package/libs/ui/dataviz/src/index.d.ts.map +1 -1
  362. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +2 -1
  363. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts.map +1 -1
  364. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts +6 -1
  365. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -1
  366. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts +1 -1
  367. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts.map +1 -1
  368. package/libs/ui/elements/src/index.d.ts +6 -3
  369. package/libs/ui/elements/src/index.d.ts.map +1 -1
  370. package/libs/ui/elements/src/lib/api-card/api-card.component.d.ts.map +1 -1
  371. package/libs/ui/elements/src/lib/avatar/avatar.component.d.ts +1 -1
  372. package/libs/ui/elements/src/lib/avatar/avatar.component.d.ts.map +1 -1
  373. package/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.d.ts +2 -0
  374. package/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.d.ts.map +1 -1
  375. package/libs/ui/elements/src/lib/download-item/download-item.component.d.ts +1 -1
  376. package/libs/ui/elements/src/lib/download-item/download-item.component.d.ts.map +1 -1
  377. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +7 -1
  378. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  379. package/libs/ui/elements/src/lib/{link-card/link-card.component.d.ts → external-link-card/external-link-card.component.d.ts} +5 -5
  380. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts.map +1 -0
  381. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts +15 -0
  382. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -0
  383. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +30 -0
  384. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -0
  385. package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts +14 -0
  386. package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts.map +1 -0
  387. package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts.map +1 -1
  388. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +2 -2
  389. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  390. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +3 -0
  391. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  392. package/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.d.ts.map +1 -1
  393. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  394. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +27 -0
  395. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -0
  396. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts +31 -0
  397. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -0
  398. package/libs/ui/elements/src/lib/user-preview/user-preview.component.d.ts +1 -1
  399. package/libs/ui/elements/src/lib/user-preview/user-preview.component.d.ts.map +1 -1
  400. package/libs/ui/inputs/src/index.d.ts +2 -2
  401. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  402. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts +1 -2
  403. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  404. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  405. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  406. package/libs/ui/inputs/src/lib/checkbox/checkbox.component.d.ts +1 -1
  407. package/libs/ui/inputs/src/lib/checkbox/checkbox.component.d.ts.map +1 -1
  408. package/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.d.ts +1 -1
  409. package/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.d.ts.map +1 -1
  410. package/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.d.ts +1 -1
  411. package/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.d.ts.map +1 -1
  412. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts.map +1 -1
  413. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.d.ts +14 -0
  414. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.d.ts.map +1 -0
  415. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.model.d.ts +6 -0
  416. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.model.d.ts.map +1 -0
  417. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts +17 -0
  418. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -0
  419. package/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.d.ts +2 -1
  420. package/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.d.ts.map +1 -1
  421. package/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.d.ts +1 -1
  422. package/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.d.ts.map +1 -1
  423. package/libs/ui/layout/src/index.d.ts +2 -1
  424. package/libs/ui/layout/src/index.d.ts.map +1 -1
  425. package/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.d.ts +10 -3
  426. package/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.d.ts.map +1 -1
  427. package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts +11 -3
  428. package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts.map +1 -1
  429. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts +28 -0
  430. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts.map +1 -0
  431. package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts +15 -8
  432. package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts.map +1 -1
  433. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +5 -1
  434. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  435. package/libs/ui/layout/src/lib/sticky-header/sticky-header.component.d.ts +1 -1
  436. package/libs/ui/layout/src/lib/sticky-header/sticky-header.component.d.ts.map +1 -1
  437. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +22 -0
  438. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -0
  439. package/libs/ui/map/src/index.d.ts +1 -0
  440. package/libs/ui/map/src/index.d.ts.map +1 -1
  441. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts +6 -2
  442. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts.map +1 -1
  443. package/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.d.ts +15 -0
  444. package/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.d.ts.map +1 -0
  445. package/libs/ui/search/src/index.d.ts +2 -0
  446. package/libs/ui/search/src/index.d.ts.map +1 -1
  447. package/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.d.ts +2 -0
  448. package/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.d.ts.map +1 -1
  449. package/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.d.ts +17 -0
  450. package/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.d.ts.map +1 -0
  451. package/libs/ui/search/src/lib/results-list/results-list.component.d.ts.map +1 -1
  452. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +4 -3
  453. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  454. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +10 -4
  455. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  456. package/libs/ui/search/src/lib/ui-search.module.d.ts +22 -19
  457. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  458. package/libs/ui/widgets/src/index.d.ts +0 -1
  459. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  460. package/libs/ui/widgets/src/lib/color-scale/color-scale.component.d.ts +1 -1
  461. package/libs/ui/widgets/src/lib/color-scale/color-scale.component.d.ts.map +1 -1
  462. package/libs/util/app-config/src/lib/app-config.d.ts +0 -1
  463. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  464. package/libs/util/app-config/src/lib/fixtures.d.ts.map +1 -1
  465. package/libs/util/app-config/src/lib/model.d.ts +2 -0
  466. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  467. package/libs/util/i18n/src/index.d.ts +1 -2
  468. package/libs/util/i18n/src/index.d.ts.map +1 -1
  469. package/libs/util/i18n/src/lib/embedded.translate.loader.d.ts +1 -1
  470. package/libs/util/i18n/src/lib/embedded.translate.loader.d.ts.map +1 -1
  471. package/libs/util/i18n/src/lib/i18n.constants.d.ts +6 -15
  472. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  473. package/libs/util/i18n/src/lib/i18n.interceptor.d.ts +5 -5
  474. package/libs/util/i18n/src/lib/i18n.interceptor.d.ts.map +1 -1
  475. package/libs/util/i18n/src/lib/i18n.providers.d.ts +4 -0
  476. package/libs/util/i18n/src/lib/i18n.providers.d.ts.map +1 -0
  477. package/libs/util/i18n/src/lib/language-codes.d.ts +15 -19
  478. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
  479. package/libs/util/shared/src/index.d.ts +2 -1
  480. package/libs/util/shared/src/index.d.ts.map +1 -1
  481. package/libs/util/shared/src/lib/gn-ui-version.d.ts +3 -0
  482. package/libs/util/shared/src/lib/gn-ui-version.d.ts.map +1 -0
  483. package/libs/util/shared/src/lib/image-fallback.directive.d.ts +1 -1
  484. package/libs/util/shared/src/lib/image-fallback.directive.d.ts.map +1 -1
  485. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts +3 -3
  486. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  487. package/libs/util/shared/src/lib/links/link-utils.d.ts +15 -7
  488. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  489. package/libs/util/shared/src/lib/record.util.d.ts +3 -0
  490. package/libs/util/shared/src/lib/record.util.d.ts.map +1 -0
  491. package/package.json +4 -4
  492. package/src/libs/api/metadata-converter/src/index.ts +1 -0
  493. package/src/libs/api/metadata-converter/src/lib/base.converter.ts +1 -4
  494. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +1 -0
  495. package/src/libs/api/metadata-converter/src/lib/common/resource-types.ts +29 -15
  496. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +10 -1
  497. package/src/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.ts +2 -2
  498. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.service+eaux-usees.ts +2 -2
  499. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +3 -3
  500. package/src/libs/api/metadata-converter/src/lib/fixtures/metadata-for-i18n.records.ts +4240 -0
  501. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +2 -2
  502. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.service+napitswallonia.ts +2 -2
  503. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +81 -11
  504. package/src/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.ts +4 -4
  505. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +0 -1
  506. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +11 -5
  507. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +2 -2
  508. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +14 -8
  509. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +12 -8
  510. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +8 -7
  511. package/src/libs/api/metadata-converter/src/lib/translate-utils.ts +17 -0
  512. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +3 -6
  513. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +4 -1
  514. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +17 -17
  515. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +119 -16
  516. package/src/libs/api/repository/src/lib/gn4/gn4.provider.ts +6 -0
  517. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +8 -7
  518. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +13 -6
  519. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +102 -69
  520. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -0
  521. package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +10 -1
  522. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +27 -11
  523. package/src/libs/common/domain/src/lib/platform.service.interface.ts +4 -1
  524. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +11 -1
  525. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +36 -26
  526. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +16 -2
  527. package/src/libs/common/fixtures/src/lib/record-link.fixtures.ts +5 -5
  528. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +114 -1
  529. package/src/libs/feature/catalog/src/lib/feature-catalog.module.ts +4 -17
  530. package/src/libs/feature/catalog/src/lib/sources/sources.service.ts +7 -3
  531. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.html +12 -9
  532. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +70 -13
  533. package/src/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.ts +2 -2
  534. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +49 -1
  535. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.html +1 -0
  536. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +33 -3
  537. package/src/libs/feature/editor/src/index.ts +1 -3
  538. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +9 -1
  539. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +23 -12
  540. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +13 -1
  541. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +9 -1
  542. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.ts +3 -4
  543. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.ts +5 -16
  544. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.ts +7 -5
  545. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +120 -0
  546. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +331 -0
  547. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.ts +3 -12
  548. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +5 -4
  549. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.ts +3 -4
  550. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.ts +2 -2
  551. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.ts +4 -11
  552. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +6 -9
  553. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +2 -17
  554. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.ts +2 -2
  555. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +2 -2
  556. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.ts +2 -2
  557. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +2 -2
  558. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +2 -2
  559. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +4 -4
  560. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.ts +2 -2
  561. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +2 -2
  562. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +2 -15
  563. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +2 -2
  564. package/src/libs/feature/editor/src/lib/feature-editor.module.ts +4 -17
  565. package/src/libs/feature/editor/src/lib/models/index.ts +0 -2
  566. package/src/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.ts +2 -1
  567. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +8 -3
  568. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.ts +10 -3
  569. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +8 -2
  570. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.ts +8 -2
  571. package/src/libs/feature/map/src/lib/feature-map.module.ts +0 -17
  572. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +3 -8
  573. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.ts +3 -2
  574. package/src/libs/feature/record/src/index.ts +1 -3
  575. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +19 -11
  576. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +56 -30
  577. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +4 -5
  578. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.html +1 -1
  579. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.ts +2 -2
  580. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +6 -7
  581. package/src/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.html +2 -2
  582. package/src/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.ts +3 -2
  583. package/src/libs/feature/record/src/lib/feature-record.module.ts +4 -13
  584. package/src/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.ts +4 -3
  585. package/src/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.ts +10 -4
  586. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +43 -13
  587. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +189 -25
  588. package/src/libs/feature/record/src/lib/record-meta/record-meta.component.ts +2 -2
  589. package/src/libs/feature/record/src/lib/state/mdview.actions.ts +12 -2
  590. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +31 -3
  591. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +23 -19
  592. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +14 -2
  593. package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +9 -0
  594. package/src/libs/feature/router/src/lib/default/constants.ts +2 -0
  595. package/src/libs/feature/router/src/lib/default/router.config.ts +2 -0
  596. package/src/libs/feature/router/src/lib/default/router.service.ts +10 -0
  597. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +10 -1
  598. package/src/libs/feature/search/src/index.ts +1 -1
  599. package/src/libs/feature/search/src/lib/constants.ts +3 -1
  600. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +2 -7
  601. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +16 -7
  602. package/src/libs/feature/search/src/lib/feature-search.module.ts +17 -23
  603. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +1 -1
  604. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +5 -0
  605. package/src/libs/feature/search/src/lib/record-url.token.ts +10 -1
  606. package/src/libs/feature/search/src/lib/results-hits/results-hits.container.component.html +17 -0
  607. package/src/libs/feature/search/src/lib/results-hits/results-hits.container.component.ts +60 -0
  608. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.css +6 -0
  609. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.html +1 -0
  610. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +26 -5
  611. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  612. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +13 -3
  613. package/src/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.ts +10 -4
  614. package/src/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.ts +2 -2
  615. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +4 -5
  616. package/src/libs/feature/search/src/lib/utils/service/fields.ts +103 -3
  617. package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -1
  618. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.ts +2 -2
  619. package/src/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.ts +2 -2
  620. package/src/libs/ui/catalog/src/lib/organisations-result/organisations-result.component.ts +2 -2
  621. package/src/libs/ui/dataviz/src/index.ts +0 -1
  622. package/src/libs/ui/dataviz/src/lib/chart/chart.component.ts +2 -1
  623. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.html +6 -3
  624. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +12 -6
  625. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +0 -1
  626. package/src/libs/ui/dataviz/src/lib/figure/figure.component.ts +4 -0
  627. package/src/libs/ui/elements/src/index.ts +6 -3
  628. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +4 -4
  629. package/src/libs/ui/elements/src/lib/api-card/api-card.component.ts +3 -2
  630. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.html +6 -6
  631. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.ts +2 -2
  632. package/src/libs/ui/elements/src/lib/avatar/avatar.component.ts +3 -0
  633. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.html +6 -2
  634. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.ts +5 -1
  635. package/src/libs/ui/elements/src/lib/download-item/download-item.component.html +8 -5
  636. package/src/libs/ui/elements/src/lib/download-item/download-item.component.ts +4 -4
  637. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +42 -11
  638. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +28 -4
  639. package/src/libs/ui/elements/src/lib/error/error.component.ts +2 -2
  640. package/src/libs/ui/elements/src/lib/{link-card/link-card.component.html → external-link-card/external-link-card.component.html} +5 -2
  641. package/src/libs/ui/elements/src/lib/{link-card/link-card.component.ts → external-link-card/external-link-card.component.ts} +9 -13
  642. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.css +4 -0
  643. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +13 -0
  644. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +54 -0
  645. package/src/libs/ui/elements/src/lib/image-input/image-input.component.ts +2 -2
  646. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +1 -1
  647. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +87 -0
  648. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.scss +115 -0
  649. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +98 -0
  650. package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.css +6 -0
  651. package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.html +15 -0
  652. package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.ts +72 -0
  653. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +1 -4
  654. package/src/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.html +3 -5
  655. package/src/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.ts +2 -2
  656. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +12 -9
  657. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts +2 -2
  658. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +9 -0
  659. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +24 -7
  660. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +11 -6
  661. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +20 -21
  662. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +51 -13
  663. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +6 -2
  664. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +6 -3
  665. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +107 -0
  666. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +82 -0
  667. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.css +0 -0
  668. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.html +110 -0
  669. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +196 -0
  670. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +2 -2
  671. package/src/libs/ui/elements/src/lib/user-preview/user-preview.component.ts +4 -0
  672. package/src/libs/ui/inputs/src/index.ts +2 -2
  673. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +3 -3
  674. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +6 -9
  675. package/src/libs/ui/inputs/src/lib/button/button.component.ts +2 -2
  676. package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.ts +3 -0
  677. package/src/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.html +1 -1
  678. package/src/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.ts +4 -0
  679. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
  680. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.ts +27 -0
  681. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.html +1 -1
  682. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +2 -2
  683. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.ts +3 -4
  684. package/src/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.html +23 -0
  685. package/src/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.ts +47 -0
  686. package/src/libs/ui/inputs/src/lib/inline-filter/inline-filter.model.ts +5 -0
  687. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.css +0 -0
  688. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +43 -0
  689. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +83 -0
  690. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.css +0 -1
  691. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.html +11 -8
  692. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.ts +4 -1
  693. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +2 -2
  694. package/src/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.ts +1 -0
  695. package/src/libs/ui/layout/src/index.ts +2 -1
  696. package/src/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.ts +47 -2
  697. package/src/libs/ui/layout/src/lib/block-list/block-list.component.css +22 -0
  698. package/src/libs/ui/layout/src/lib/block-list/block-list.component.html +2 -3
  699. package/src/libs/ui/layout/src/lib/block-list/block-list.component.ts +57 -9
  700. package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +0 -1
  701. package/src/libs/ui/layout/src/lib/carousel/carousel.component.html +1 -1
  702. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.html +40 -0
  703. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.ts +141 -0
  704. package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.html +24 -8
  705. package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.ts +36 -10
  706. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.ts +2 -2
  707. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +4 -7
  708. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +22 -2
  709. package/src/libs/ui/layout/src/lib/max-lines/max-lines.component.html +1 -1
  710. package/src/libs/ui/layout/src/lib/max-lines/max-lines.component.ts +2 -2
  711. package/src/libs/ui/layout/src/lib/pagination/pagination.component.ts +2 -2
  712. package/src/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.html +17 -5
  713. package/src/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.ts +3 -3
  714. package/src/libs/ui/layout/src/lib/sticky-header/sticky-header.component.ts +3 -0
  715. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +27 -0
  716. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +84 -0
  717. package/src/libs/ui/map/src/index.ts +1 -0
  718. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.html +3 -3
  719. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.ts +27 -3
  720. package/src/libs/ui/map/src/lib/components/map-container/map-container.component.ts +2 -2
  721. package/src/libs/ui/map/src/lib/components/map-legend/map-legend.component.ts +1 -1
  722. package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.css +0 -0
  723. package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.html +4 -0
  724. package/src/libs/{feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.ts → ui/map/src/lib/components/spatial-extent/spatial-extent.component.ts} +8 -8
  725. package/src/libs/ui/search/src/index.ts +2 -0
  726. package/src/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.html +4 -1
  727. package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +9 -81
  728. package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.ts +14 -1
  729. package/src/libs/ui/search/src/lib/results-hits-number/results-hits-number.component.html +1 -1
  730. package/src/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.html +25 -0
  731. package/src/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.ts +53 -0
  732. package/src/libs/ui/search/src/lib/results-list/results-layout.config.ts +2 -2
  733. package/src/libs/ui/search/src/lib/results-list/results-list.component.html +1 -0
  734. package/src/libs/ui/search/src/lib/results-list/results-list.component.ts +0 -1
  735. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +16 -6
  736. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +18 -15
  737. package/src/libs/ui/search/src/lib/results-table/results-table.component.css +4 -0
  738. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +29 -24
  739. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +49 -17
  740. package/src/libs/ui/search/src/lib/ui-search.module.ts +19 -10
  741. package/src/libs/ui/widgets/src/index.ts +0 -1
  742. package/src/libs/ui/widgets/src/lib/color-scale/color-scale.component.ts +1 -0
  743. package/src/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.html +4 -3
  744. package/src/libs/util/app-config/src/lib/app-config.ts +6 -2
  745. package/src/libs/util/app-config/src/lib/fixtures.ts +2 -0
  746. package/src/libs/util/app-config/src/lib/model.ts +2 -0
  747. package/src/libs/util/i18n/src/index.ts +1 -2
  748. package/src/libs/util/i18n/src/lib/embedded.translate.loader.ts +4 -3
  749. package/src/libs/util/i18n/src/lib/i18n.constants.ts +39 -29
  750. package/src/libs/util/i18n/src/lib/i18n.interceptor.ts +11 -9
  751. package/src/libs/util/i18n/src/lib/i18n.providers.ts +68 -0
  752. package/src/libs/util/i18n/src/lib/language-codes.ts +67 -2
  753. package/src/libs/util/shared/src/index.ts +2 -1
  754. package/src/libs/util/shared/src/lib/gn-ui-version.ts +8 -0
  755. package/src/libs/util/shared/src/lib/image-fallback.directive.ts +1 -0
  756. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +15 -3
  757. package/src/libs/util/shared/src/lib/links/link-utils.ts +42 -12
  758. package/src/libs/util/shared/src/lib/record.util.ts +114 -0
  759. package/tailwind.base.config.js +3 -0
  760. package/tailwind.base.css +24 -26
  761. package/translations/de.json +91 -24
  762. package/translations/en.json +91 -24
  763. package/translations/es.json +90 -23
  764. package/translations/fr.json +92 -25
  765. package/translations/it.json +90 -24
  766. package/translations/nl.json +90 -23
  767. package/translations/pt.json +90 -23
  768. package/translations/sk.json +90 -23
  769. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.mjs +0 -79
  770. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.mjs +0 -44
  771. package/esm2022/libs/feature/editor/src/lib/components/wizard/wizard.component.mjs +0 -75
  772. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +0 -160
  773. package/esm2022/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.mjs +0 -53
  774. package/esm2022/libs/feature/editor/src/lib/models/wizard-field.model.mjs +0 -2
  775. package/esm2022/libs/feature/editor/src/lib/models/wizard-field.type.mjs +0 -8
  776. package/esm2022/libs/feature/editor/src/lib/services/wizard.service.mjs +0 -87
  777. package/esm2022/libs/feature/record/src/lib/gn-ui-version.token.mjs +0 -3
  778. package/esm2022/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.mjs +0 -18
  779. package/esm2022/libs/ui/dataviz/src/lib/ui-dataviz.module.mjs +0 -47
  780. package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +0 -60
  781. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +0 -46
  782. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +0 -106
  783. package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +0 -16
  784. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +0 -161
  785. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +0 -31
  786. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +0 -46
  787. package/esm2022/libs/util/i18n/src/lib/lang.service.mjs +0 -31
  788. package/esm2022/libs/util/i18n/src/lib/util-i18n.module.mjs +0 -37
  789. package/esm2022/libs/util/shared/src/lib/util-shared.module.mjs +0 -18
  790. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts +0 -15
  791. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts.map +0 -1
  792. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts +0 -14
  793. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts.map +0 -1
  794. package/libs/feature/editor/src/lib/components/wizard/wizard.component.d.ts +0 -31
  795. package/libs/feature/editor/src/lib/components/wizard/wizard.component.d.ts.map +0 -1
  796. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts +0 -43
  797. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts.map +0 -1
  798. package/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.d.ts +0 -17
  799. package/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.d.ts.map +0 -1
  800. package/libs/feature/editor/src/lib/models/wizard-field.model.d.ts +0 -10
  801. package/libs/feature/editor/src/lib/models/wizard-field.model.d.ts.map +0 -1
  802. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts +0 -7
  803. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts.map +0 -1
  804. package/libs/feature/editor/src/lib/services/wizard.service.d.ts +0 -33
  805. package/libs/feature/editor/src/lib/services/wizard.service.d.ts.map +0 -1
  806. package/libs/feature/record/src/lib/gn-ui-version.token.d.ts +0 -3
  807. package/libs/feature/record/src/lib/gn-ui-version.token.d.ts.map +0 -1
  808. package/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.d.ts +0 -9
  809. package/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.d.ts.map +0 -1
  810. package/libs/ui/dataviz/src/lib/ui-dataviz.module.d.ts +0 -11
  811. package/libs/ui/dataviz/src/lib/ui-dataviz.module.d.ts.map +0 -1
  812. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts.map +0 -1
  813. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +0 -12
  814. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +0 -1
  815. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +0 -27
  816. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +0 -1
  817. package/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.d.ts +0 -8
  818. package/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.d.ts.map +0 -1
  819. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +0 -34
  820. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +0 -1
  821. package/libs/ui/layout/src/lib/ui-layout.module.d.ts +0 -12
  822. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +0 -1
  823. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +0 -15
  824. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +0 -1
  825. package/libs/util/i18n/src/lib/lang.service.d.ts +0 -13
  826. package/libs/util/i18n/src/lib/lang.service.d.ts.map +0 -1
  827. package/libs/util/i18n/src/lib/util-i18n.module.d.ts +0 -12
  828. package/libs/util/i18n/src/lib/util-i18n.module.d.ts.map +0 -1
  829. package/libs/util/shared/src/lib/util-shared.module.d.ts +0 -9
  830. package/libs/util/shared/src/lib/util-shared.module.d.ts.map +0 -1
  831. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.html +0 -1
  832. package/src/libs/feature/editor/src/lib/components/wizard/wizard.component.css +0 -5
  833. package/src/libs/feature/editor/src/lib/components/wizard/wizard.component.html +0 -22
  834. package/src/libs/feature/editor/src/lib/components/wizard/wizard.component.ts +0 -93
  835. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.css +0 -31
  836. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.html +0 -62
  837. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.ts +0 -206
  838. package/src/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.css +0 -3
  839. package/src/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.html +0 -21
  840. package/src/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.ts +0 -58
  841. package/src/libs/feature/editor/src/lib/models/wizard-field.model.ts +0 -10
  842. package/src/libs/feature/editor/src/lib/models/wizard-field.type.ts +0 -6
  843. package/src/libs/feature/editor/src/lib/services/wizard.service.ts +0 -105
  844. package/src/libs/feature/record/src/lib/gn-ui-version.token.ts +0 -3
  845. package/src/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.html +0 -4
  846. package/src/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.ts +0 -10
  847. package/src/libs/ui/dataviz/src/lib/ui-dataviz.module.ts +0 -27
  848. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +0 -30
  849. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +0 -48
  850. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +0 -61
  851. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.css +0 -3
  852. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +0 -9
  853. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.ts +0 -15
  854. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +0 -96
  855. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +0 -18
  856. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +0 -25
  857. package/src/libs/util/i18n/src/lib/lang.service.ts +0 -23
  858. package/src/libs/util/i18n/src/lib/util-i18n.module.ts +0 -26
  859. package/src/libs/util/shared/src/lib/util-shared.module.ts +0 -10
  860. /package/src/libs/feature/editor/src/lib/components/{record-form/form-field/form-field-map-container/form-field-map-container.component.css → multilingual-panel/multilingual-panel.component.css} +0 -0
  861. /package/src/libs/{ui/elements/src/lib/link-card/link-card.component.css → feature/search/src/lib/results-hits/results-hits.container.component.css} +0 -0
  862. /package/src/libs/ui/elements/src/lib/{related-record-card/related-record-card.component.css → external-link-card/external-link-card.component.css} +0 -0
@@ -3,7 +3,7 @@ import { fallback, filterArray, getAtIndex, map, mapArray, noop, pipe, } from '.
3
3
  import { appendKeywords, appendOnlineResource, appendServiceOnlineResources, createDistributionInfo, findOrCreateDistribution, findOrCreateIdentification, getProgressCode, getRoleCode, removeKeywords, writeCharacterString, writeDateTime, writeLinkage, writeLocalizedCharacterString, } from '../iso19139/write-parts';
4
4
  import { findIdentification } from '../iso19139/read-parts';
5
5
  import { namePartsToFull } from '../iso19139/utils/individual-name';
6
- import { LANG_2_TO_3_MAPPER } from '../../../../../../libs/util/i18n/src/lib/language-codes';
6
+ import { getLang3FromLang2 } from '../../../../../../libs/util/i18n/src/lib/language-codes';
7
7
  import { kindToCodeListValue } from '../common/resource-types';
8
8
  export function writeUniqueIdentifier(record, rootEl) {
9
9
  pipe(findNestedChildOrCreate('mdb:metadataIdentifier', 'mcc:MD_Identifier', 'mcc:code'), writeCharacterString(record.uniqueIdentifier))(rootEl);
@@ -135,7 +135,7 @@ export function writeOnlineResources(record, rootEl) {
135
135
  });
136
136
  }
137
137
  function writeLocaleElement(language) {
138
- const lang3 = LANG_2_TO_3_MAPPER[language.toLowerCase()];
138
+ const lang3 = getLang3FromLang2(language.toLowerCase()) ?? language;
139
139
  return pipe(findChildOrCreate('lan:PT_Locale'), writeAttribute('id', language.toUpperCase()), findNestedChildOrCreate('lan:language', 'gmd:LanguageCode'), writeAttribute('codeList', 'http://www.loc.gov/standards/iso639-2/'), writeAttribute('codeListValue', lang3));
140
140
  }
141
141
  export function writeDefaultLanguage(record, rootEl) {
@@ -150,4 +150,4 @@ export function writeOtherLanguages(record, rootEl) {
150
150
  }
151
151
  appendChildren(...record.otherLanguages.map((lang) => pipe(createElement('mdb:otherLocale'), writeLocaleElement(lang))))(rootEl);
152
152
  }
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTExNS0zL3dyaXRlLXBhcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGVBQWUsRUFDZixXQUFXLEVBQ1gsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxjQUFjLEdBRWYsTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUNMLFFBQVEsRUFDUixXQUFXLEVBQ1gsVUFBVSxFQUNWLEdBQUcsRUFDSCxRQUFRLEVBQ1IsSUFBSSxFQUNKLElBQUksR0FDTCxNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLDRCQUE0QixFQUM1QixzQkFBc0IsRUFDdEIsd0JBQXdCLEVBQ3hCLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YsV0FBVyxFQUNYLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFlBQVksRUFDWiw2QkFBNkIsR0FDOUIsTUFBTSx5QkFBeUIsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seURBQXlELENBQUE7QUFDNUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFOUQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxNQUFxQixFQUNyQixNQUFr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QUksQ0FBQyxDQUFDLENBQ2pFLENBQ0YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDYXRhbG9nUmVjb3JkLFxuICBEYXRhc2V0UmVjb3JkLFxuICBJbmRpdmlkdWFsLFxuICBMYW5ndWFnZUNvZGUsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7XG4gIGFsbENoaWxkcmVuRWxlbWVudCxcbiAgYXBwZW5kQ2hpbGRyZW4sXG4gIGFwcGVuZENoaWxkVHJlZSxcbiAgY3JlYXRlQ2hpbGQsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIGZpbmRDaGlsZEVsZW1lbnQsXG4gIGZpbmRDaGlsZE9yQ3JlYXRlLFxuICBmaW5kQ2hpbGRyZW5FbGVtZW50LFxuICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSxcbiAgZmluZE5lc3RlZEVsZW1lbnQsXG4gIGZpbmROZXN0ZWRFbGVtZW50cyxcbiAgcmVhZEF0dHJpYnV0ZSxcbiAgcmVtb3ZlQ2hpbGRyZW4sXG4gIHJlbW92ZUNoaWxkcmVuQnlOYW1lLFxuICBzZXRUZXh0Q29udGVudCxcbiAgd3JpdGVBdHRyaWJ1dGUsXG4gIFhtbEVsZW1lbnQsXG59IGZyb20gJy4uL3htbC11dGlscydcbmltcG9ydCB7XG4gIGZhbGxiYWNrLFxuICBmaWx0ZXJBcnJheSxcbiAgZ2V0QXRJbmRleCxcbiAgbWFwLFxuICBtYXBBcnJheSxcbiAgbm9vcCxcbiAgcGlwZSxcbn0gZnJvbSAnLi4vZnVuY3Rpb24tdXRpbHMnXG5pbXBvcnQge1xuICBhcHBlbmRLZXl3b3JkcyxcbiAgYXBwZW5kT25saW5lUmVzb3VyY2UsXG4gIGFwcGVuZFNlcnZpY2VPbmxpbmVSZXNvdXJjZXMsXG4gIGNyZWF0ZURpc3RyaWJ1dGlvbkluZm8sXG4gIGZpbmRPckNyZWF0ZURpc3RyaWJ1dGlvbixcbiAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24sXG4gIGdldFByb2dyZXNzQ29kZSxcbiAgZ2V0Um9sZUNvZGUsXG4gIHJlbW92ZUtleXdvcmRzLFxuICB3cml0ZUNoYXJhY3RlclN0cmluZyxcbiAgd3JpdGVEYXRlVGltZSxcbiAgd3JpdGVMaW5rYWdlLFxuICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyxcbn0gZnJvbSAnLi4vaXNvMTkxMzkvd3JpdGUtcGFydHMnXG5pbXBvcnQgeyBmaW5kSWRlbnRpZmljYXRpb24gfSBmcm9tICcuLi9pc28xOTEzOS9yZWFkLXBhcnRzJ1xuaW1wb3J0IHsgbmFtZVBhcnRzVG9GdWxsIH0gZnJvbSAnLi4vaXNvMTkxMzkvdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgTEFOR18yX1RPXzNfTUFQUEVSIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL2kxOG4vc3JjL2xpYi9sYW5ndWFnZS1jb2RlcydcbmltcG9ydCB7IGtpbmRUb0NvZGVMaXN0VmFsdWUgfSBmcm9tICcuLi9jb21tb24vcmVzb3VyY2UtdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVuaXF1ZUlkZW50aWZpZXIoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZShcbiAgICAgICdtZGI6bWV0YWRhdGFJZGVudGlmaWVyJyxcbiAgICAgICdtY2M6TURfSWRlbnRpZmllcicsXG4gICAgICAnbWNjOmNvZGUnXG4gICAgKSxcbiAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhyZWNvcmQudW5pcXVlSWRlbnRpZmllcilcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUtpbmQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgY29uc3Qga2luZCA9IGtpbmRUb0NvZGVMaXN0VmFsdWUocmVjb3JkKVxuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ21kYjptZXRhZGF0YVNjb3BlJyxcbiAgICAgICdtZGI6TURfTWV0YWRhdGFTY29wZScsXG4gICAgICAnbWRiOnJlc291cmNlU2NvcGUnLFxuICAgICAgJ21jYzpNRF9TY29wZUNvZGUnXG4gICAgKSxcbiAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cHM6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMTUvcmVzb3VyY2VzL0NvZGVsaXN0cy9jYXQvY29kZWxpc3RzLnhtbCNNRF9TY29wZUNvZGUnXG4gICAgKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGtpbmQpLFxuICAgIHNldFRleHRDb250ZW50KGtpbmQpXG4gICkocm9vdEVsKVxufVxuXG5mdW5jdGlvbiByZW1vdmVSZWNvcmREYXRlKHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nIHwgJ3B1YmxpY2F0aW9uJykge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ21kYjpkYXRlSW5mbycsIGZhbHNlKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2NpdDpDSV9EYXRlVHlwZUNvZGUnKSxcbiAgICAgICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gYXBwZW5kUmVjb3JkRGF0ZShcbiAgZGF0ZTogRGF0ZSxcbiAgdHlwZTogJ3JldmlzaW9uJyB8ICdjcmVhdGlvbicgfCAncHVibGljYXRpb24nXG4pIHtcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdtZGI6ZGF0ZUluZm8nKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfRGF0ZScpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnY2l0OmRhdGUnKSwgd3JpdGVEYXRlVGltZShkYXRlKSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnY2l0OmRhdGVUeXBlJyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpDSV9EYXRlVHlwZUNvZGUnKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMTUvcmVzb3VyY2VzL0NvZGVsaXN0cy9jYXQvY29kZWxpc3RzLnhtbCNDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIHR5cGUpLFxuICAgICAgICAgIHNldFRleHRDb250ZW50KHR5cGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVjb3JkVXBkYXRlZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICByZW1vdmVSZWNvcmREYXRlKCdyZXZpc2lvbicpKHJvb3RFbClcbiAgYXBwZW5kUmVjb3JkRGF0ZShyZWNvcmQucmVjb3JkVXBkYXRlZCwgJ3JldmlzaW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZWNvcmRDcmVhdGVkKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHJlbW92ZVJlY29yZERhdGUoJ2NyZWF0aW9uJykocm9vdEVsKVxuICBpZiAoIXJlY29yZC5yZWNvcmRDcmVhdGVkKSByZXR1cm5cbiAgYXBwZW5kUmVjb3JkRGF0ZShyZWNvcmQucmVjb3JkQ3JlYXRlZCwgJ2NyZWF0aW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZWNvcmRQdWJsaXNoZWQoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcmVtb3ZlUmVjb3JkRGF0ZSgncHVibGljYXRpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlY29yZFB1Ymxpc2hlZCkgcmV0dXJuXG4gIGFwcGVuZFJlY29yZERhdGUocmVjb3JkLnJlY29yZFB1Ymxpc2hlZCwgJ3B1YmxpY2F0aW9uJykocm9vdEVsKVxufVxuXG5mdW5jdGlvbiByZW1vdmVSZXNvdXJjZURhdGUodHlwZTogJ3JldmlzaW9uJyB8ICdjcmVhdGlvbicgfCAncHVibGljYXRpb24nKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ21yaTpjaXRhdGlvbicsICdjaXQ6Q0lfQ2l0YXRpb24nKSxcbiAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2NpdDpkYXRlJywgZmFsc2UpLFxuICAgICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnY2l0OkNJX0RhdGVUeXBlQ29kZScpLFxuICAgICAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIGFwcGVuZFJlc291cmNlRGF0ZShcbiAgZGF0ZTogRGF0ZSxcbiAgdHlwZTogJ3JldmlzaW9uJyB8ICdjcmVhdGlvbicgfCAncHVibGljYXRpb24nXG4pIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ21yaTpjaXRhdGlvbicsICdjaXQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpkYXRlJyksXG4gICAgICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfRGF0ZScpLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2NpdDpkYXRlJyksIHdyaXRlRGF0ZVRpbWUoZGF0ZSkpLFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdjaXQ6ZGF0ZVR5cGUnKSxcbiAgICAgICAgICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfRGF0ZVR5cGVDb2RlJyksXG4gICAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICAgJ2h0dHBzOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTE1L3Jlc291cmNlcy9Db2RlbGlzdHMvY2F0L2NvZGVsaXN0cy54bWwjQ0lfRGF0ZVR5cGVDb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgdHlwZSksXG4gICAgICAgICAgICBzZXRUZXh0Q29udGVudCh0eXBlKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXNvdXJjZVVwZGF0ZWQoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcmVtb3ZlUmVzb3VyY2VEYXRlKCdyZXZpc2lvbicpKHJvb3RFbClcbiAgaWYgKCFyZWNvcmQucmVzb3VyY2VVcGRhdGVkKSByZXR1cm5cbiAgYXBwZW5kUmVzb3VyY2VEYXRlKHJlY29yZC5yZXNvdXJjZVVwZGF0ZWQsICdyZXZpc2lvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VDcmVhdGVkKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHJlbW92ZVJlc291cmNlRGF0ZSgnY3JlYXRpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlc291cmNlQ3JlYXRlZCkgcmV0dXJuXG4gIGFwcGVuZFJlc291cmNlRGF0ZShyZWNvcmQucmVzb3VyY2VDcmVhdGVkLCAnY3JlYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlc291cmNlUHVibGlzaGVkKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHJlbW92ZVJlc291cmNlRGF0ZSgncHVibGljYXRpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlc291cmNlUHVibGlzaGVkKSByZXR1cm5cbiAgYXBwZW5kUmVzb3VyY2VEYXRlKHJlY29yZC5yZXNvdXJjZVB1Ymxpc2hlZCwgJ3B1YmxpY2F0aW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXVzZVR5cGUocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgd3JpdGVLaW5kKHJlY29yZCwgcm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kUmVzcG9uc2libGVQYXJ0eShcbiAgY29udGFjdDogSW5kaXZpZHVhbCxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICBjb25zdCBmdWxsTmFtZSA9IG5hbWVQYXJ0c1RvRnVsbChjb250YWN0LmZpcnN0TmFtZSwgY29udGFjdC5sYXN0TmFtZSlcblxuICBjb25zdCBjcmVhdGVJbmRpdmlkdWFsID0gcGlwZShcbiAgICBjcmVhdGVFbGVtZW50KCdjaXQ6aW5kaXZpZHVhbCcpLFxuICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfSW5kaXZpZHVhbCcpLFxuICAgIGZ1bGxOYW1lXG4gICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnY2l0Om5hbWUnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoZnVsbE5hbWUpKVxuICAgICAgICApXG4gICAgICA6IG5vb3AsXG4gICAgY29udGFjdC5wb3NpdGlvblxuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnY2l0OnBvc2l0aW9uTmFtZScpLFxuICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5wb3NpdGlvbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbm9vcFxuICApXG5cbiAgY29uc3QgY3JlYXRlQ29udGFjdEluZm8gPSBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpjb250YWN0SW5mbycpLFxuICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfQ29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnY2l0OmFkZHJlc3MnKSxcbiAgICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpDSV9BZGRyZXNzJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdjaXQ6ZWxlY3Ryb25pY01haWxBZGRyZXNzJyksXG4gICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LmVtYWlsKVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgY29udGFjdC5hZGRyZXNzXG4gICAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdjaXQ6ZGVsaXZlcnlQb2ludCcpLFxuICAgICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QuYWRkcmVzcylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogbm9vcFxuICAgICAgKVxuICAgICksXG4gICAgY29udGFjdC5vcmdhbml6YXRpb24/LndlYnNpdGVcbiAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpvbmxpbmVSZXNvdXJjZScpLFxuICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpDSV9PbmxpbmVSZXNvdXJjZScpLFxuICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpsaW5rYWdlJyksXG4gICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0Lm9yZ2FuaXphdGlvbi53ZWJzaXRlLnRvU3RyaW5nKCkpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3AsXG4gICAgY29udGFjdC5waG9uZVxuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnY2l0OnBob25lJyksXG4gICAgICAgICAgICBjcmVhdGVDaGlsZCgnY2l0OkNJX1RlbGVwaG9uZScpLFxuICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpudW1iZXInKSxcbiAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QucGhvbmUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcbiAgKVxuXG4gIGNvbnN0IGNyZWF0ZVJvbGUgPSBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpyb2xlJyksXG4gICAgY3JlYXRlQ2hpbGQoJ2NpdDpDSV9Sb2xlQ29kZScpLFxuICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICdodHRwczovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS9yZXNvdXJjZXMvQ29kZWxpc3RzL2NhdC9jb2RlbGlzdHMueG1sI0NJX1JvbGVDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRSb2xlQ29kZShjb250YWN0LnJvbGUpKSxcbiAgICBzZXRUZXh0Q29udGVudChnZXRSb2xlQ29kZShjb250YWN0LnJvbGUpKVxuICApXG5cbiAgY29uc3QgY3JlYXRlUGFydHkgPSBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpwYXJ0eScpLFxuICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfT3JnYW5pc2F0aW9uJyksXG4gICAgY29udGFjdC5vcmdhbml6YXRpb24/Lm5hbWVcbiAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpuYW1lJyksXG4gICAgICAgICAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgY29udGFjdC5vcmdhbml6YXRpb24/Lm5hbWUsXG4gICAgICAgICAgICAgIGNvbnRhY3Qub3JnYW5pemF0aW9uPy50cmFuc2xhdGlvbnM/Lm5hbWUsXG4gICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBub29wLFxuICAgIGFwcGVuZENoaWxkcmVuKGNyZWF0ZUNvbnRhY3RJbmZvLCBjcmVhdGVJbmRpdmlkdWFsKVxuICApXG5cbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdjaXQ6Q0lfUmVzcG9uc2liaWxpdHknKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKGNyZWF0ZVJvbGUsIGNyZWF0ZVBhcnR5KVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdtZGI6Y29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmNvbnRhY3RzLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Y29udGFjdCcpLFxuICAgICAgICAgIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoY29udGFjdCwgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNvbnRhY3RzRm9yUmVzb3VyY2UoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgY29uc3Qgd2l0aG91dERpc3RyaWJ1dG9ycyA9IHJlY29yZC5jb250YWN0c0ZvclJlc291cmNlLmZpbHRlcihcbiAgICAoYykgPT4gYy5yb2xlICE9PSAnZGlzdHJpYnV0b3InXG4gIClcbiAgY29uc3QgZGlzdHJpYnV0b3JzID0gcmVjb3JkLmNvbnRhY3RzRm9yUmVzb3VyY2UuZmlsdGVyKFxuICAgIChjKSA9PiBjLnJvbGUgPT09ICdkaXN0cmlidXRvcidcbiAgKVxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ21yaTpwb2ludE9mQ29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ud2l0aG91dERpc3RyaWJ1dG9ycy5tYXAoKGNvbnRhY3QpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnbXJpOnBvaW50T2ZDb250YWN0JyksXG4gICAgICAgICAgYXBwZW5kUmVzcG9uc2libGVQYXJ0eShjb250YWN0LCByZWNvcmQuZGVmYXVsdExhbmd1YWdlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbiAgaWYgKCFkaXN0cmlidXRvcnMubGVuZ3RoKSByZXR1cm5cbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVEaXN0cmlidXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnbXJkOmRpc3RyaWJ1dG9yJyksXG4gICAgY3JlYXRlQ2hpbGQoJ21yZDpkaXN0cmlidXRvcicpLFxuICAgIGNyZWF0ZUNoaWxkKCdtcmQ6TURfRGlzdHJpYnV0b3InKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLmRpc3RyaWJ1dG9ycy5tYXAoKGNvbnRhY3QpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnbXJkOmRpc3RyaWJ1dG9yQ29udGFjdCcpLFxuICAgICAgICAgIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoY29udGFjdCwgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUtleXdvcmRzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVLZXl3b3JkcygpLFxuICAgIGFwcGVuZEtleXdvcmRzKHJlY29yZC5rZXl3b3JkcywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxhbmRpbmdQYWdlKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnbWRiOm1ldGFkYXRhTGlua2FnZScsXG4gICAgICAnY2l0OkNJX09ubGluZVJlc291cmNlJyxcbiAgICAgICdjaXQ6bGlua2FnZSdcbiAgICApLFxuICAgIHdyaXRlTGlua2FnZShyZWNvcmQubGFuZGluZ1BhZ2UpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaW5lYWdlKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnbWRiOnJlc291cmNlTGluZWFnZScsXG4gICAgICAnbXJsOkxJX0xpbmVhZ2UnLFxuICAgICAgJ21ybDpzdGF0ZW1lbnQnXG4gICAgKSxcbiAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgIHJlY29yZC5saW5lYWdlLFxuICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucz8ubGluZWFnZSxcbiAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTdGF0dXMocmVjb3JkOiBEYXRhc2V0UmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgY29uc3QgcHJvZ3Jlc3NDb2RlID0gZ2V0UHJvZ3Jlc3NDb2RlKHJlY29yZC5zdGF0dXMpXG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnbXJpOnN0YXR1cycsICdtY2M6TURfUHJvZ3Jlc3NDb2RlJyksXG4gICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAnY29kZUxpc3QnLFxuICAgICAgJ2h0dHBzOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTE1L3Jlc291cmNlcy9Db2RlbGlzdHMvY2F0L2NvZGVsaXN0cy54bWwjTURfUHJvZ3Jlc3NDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBwcm9ncmVzc0NvZGUpLFxuICAgIHNldFRleHRDb250ZW50KHByb2dyZXNzQ29kZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVNwYXRpYWxSZXByZXNlbnRhdGlvbihcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBpZiAoIXJlY29yZC5zcGF0aWFsUmVwcmVzZW50YXRpb24pIHtcbiAgICBwaXBlKFxuICAgICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdtcmk6c3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZScpXG4gICAgKShyb290RWwpXG4gICAgcmV0dXJuXG4gIH1cbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ21yaTpzcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlJyxcbiAgICAgICdtY2M6TURfU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZUNvZGUnXG4gICAgKSxcbiAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cHM6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMTUvcmVzb3VyY2VzL0NvZGVsaXN0cy9jYXQvY29kZWxpc3RzLnhtbCNNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgcmVjb3JkLnNwYXRpYWxSZXByZXNlbnRhdGlvbiksXG4gICAgc2V0VGV4dENvbnRlbnQocmVjb3JkLnNwYXRpYWxSZXByZXNlbnRhdGlvbilcbiAgKShyb290RWwpXG59XG5cbi8vIHRoaXMgd2lsbCByZW1vdmUgYWxsIHRyYW5zZmVyIG9wdGlvbnMgYW5kIGZvcm1hdHMgZnJvbSBkaXN0cmlidXRpb24gaW5mb1xuLy8gYW5kIHJlbW92ZSBlbXB0eSBkaXN0cmlidXRpb24gaW5mb1xuZnVuY3Rpb24gcmVtb3ZlVHJhbnNmZXJPcHRpb25zKHJvb3RFbDogWG1sRWxlbWVudCkge1xuICAvLyByZW1vdmUgdHJhbnNmZXIgb3B0aW9ucyAmIGZvcm1hdHNcbiAgcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ21kYjpkaXN0cmlidXRpb25JbmZvJywgJ21yZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBtYXBBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIHJlbW92ZUNoaWxkcmVuKGZpbmRDaGlsZHJlbkVsZW1lbnQoJ21yZDpkaXN0cmlidXRpb25Gb3JtYXQnLCBmYWxzZSkpLFxuICAgICAgICByZW1vdmVDaGlsZHJlbihmaW5kQ2hpbGRyZW5FbGVtZW50KCdtcmQ6dHJhbnNmZXJPcHRpb25zJywgZmFsc2UpKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG4gIC8vIHJlbW92ZSBlbXB0eSBkaXN0cmlidXRpb25zXG4gIHJlbW92ZUNoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdtZGI6ZGlzdHJpYnV0aW9uSW5mbycsIGZhbHNlKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ21yZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICAgICAgICBhbGxDaGlsZHJlbkVsZW1lbnQsXG4gICAgICAgICAgbWFwKChjaGlsZHJlbikgPT4gY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZnVuY3Rpb24gYXBwZW5kT25saW5lUmVzb3VyY2VGb3JtYXQobWltZVR5cGU6IHN0cmluZykge1xuICByZXR1cm4gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ21yZDpkaXN0cmlidXRpb25Gb3JtYXQnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdtcmQ6TURfRm9ybWF0JyksXG4gICAgICBjcmVhdGVDaGlsZCgnbXJkOmZvcm1hdFNwZWNpZmljYXRpb25DaXRhdGlvbicpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpDSV9DaXRhdGlvbicpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDp0aXRsZScpLFxuICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcobWltZVR5cGUpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU9ubGluZVJlc291cmNlcyhcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVUcmFuc2Zlck9wdGlvbnMocm9vdEVsKVxuXG4gIGlmIChyZWNvcmQua2luZCA9PT0gJ3NlcnZpY2UnKSB7XG4gICAgYXBwZW5kU2VydmljZU9ubGluZVJlc291cmNlcyhyZWNvcmQsIHJvb3RFbClcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGZvciBlYWNoIG9ubGluZSByZXNvdXJjZSwgZWl0aGVyIGZpbmQgYW4gZXhpc3RpbmcgZGlzdHJpYnV0aW9uIGluZm8gb3IgY3JlYXRlIGEgbmV3IG9uZVxuICByZWNvcmQub25saW5lUmVzb3VyY2VzLmZvckVhY2goKG9ubGluZVJlc291cmNlLCBpbmRleCkgPT4ge1xuICAgIHBpcGUoXG4gICAgICBmYWxsYmFjayhcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICAgICAgICBnZXRBdEluZGV4KGluZGV4KVxuICAgICAgICApLFxuICAgICAgICBhcHBlbmRDaGlsZFRyZWUoY3JlYXRlRGlzdHJpYnV0aW9uSW5mbygpKVxuICAgICAgKSxcbiAgICAgIGFwcGVuZE9ubGluZVJlc291cmNlKFxuICAgICAgICBvbmxpbmVSZXNvdXJjZSxcbiAgICAgICAgYXBwZW5kT25saW5lUmVzb3VyY2VGb3JtYXQsXG4gICAgICAgIHJlY29yZC50cmFuc2xhdGlvbnMsXG4gICAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgIClcbiAgICApKHJvb3RFbClcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVMb2NhbGVFbGVtZW50KGxhbmd1YWdlOiBMYW5ndWFnZUNvZGUpIHtcbiAgY29uc3QgbGFuZzMgPSBMQU5HXzJfVE9fM19NQVBQRVJbbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKV1cbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2xhbjpQVF9Mb2NhbGUnKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnaWQnLCBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnbGFuOmxhbmd1YWdlJywgJ2dtZDpMYW5ndWFnZUNvZGUnKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3QnLCAnaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi8nKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGxhbmczKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURlZmF1bHRMYW5ndWFnZShcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdtZGI6ZGVmYXVsdExvY2FsZScpLFxuICAgIHdyaXRlTG9jYWxlRWxlbWVudChyZWNvcmQuZGVmYXVsdExhbmd1YWdlKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlT3RoZXJMYW5ndWFnZXMocmVjb3JkOiBEYXRhc2V0UmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgLy8gY2xlYXIgZXhpc3RpbmdcbiAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ21kYjpvdGhlckxvY2FsZScpKHJvb3RFbClcblxuICAvLyBkbyBub3Qgd3JpdGUgZG93biBsYW5ndWFnZXMgaWYgdGhlcmUgaXMgbm90aGluZyBlbHNlIHRoYW4gdGhlIGRlZmF1bHQgb25lXG4gIGlmICghcmVjb3JkLm90aGVyTGFuZ3VhZ2VzPy5sZW5ndGgpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGFwcGVuZENoaWxkcmVuKFxuICAgIC4uLnJlY29yZC5vdGhlckxhbmd1YWdlcy5tYXAoKGxhbmc6IExhbmd1YWdlQ29kZSkgPT5cbiAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnbWRiOm90aGVyTG9jYWxlJyksIHdyaXRlTG9jYWxlRWxlbWVudChsYW5nKSlcbiAgICApXG4gICkocm9vdEVsKVxufVxuIl19
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTExNS0zL3dyaXRlLXBhcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGVBQWUsRUFDZixXQUFXLEVBQ1gsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxjQUFjLEdBRWYsTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUNMLFFBQVEsRUFDUixXQUFXLEVBQ1gsVUFBVSxFQUNWLEdBQUcsRUFDSCxRQUFRLEVBQ1IsSUFBSSxFQUNKLElBQUksR0FDTCxNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLDRCQUE0QixFQUM1QixzQkFBc0IsRUFDdEIsd0JBQXdCLEVBQ3hCLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YsV0FBVyxFQUNYLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFlBQVksRUFDWiw2QkFBNkIsR0FDOUIsTUFBTSx5QkFBeUIsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seURBQXlELENBQUE7QUFDM0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFOUQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxNQUFxQixFQUNyQixNQUFr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a0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUNqRSxDQUNGLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2F0YWxvZ1JlY29yZCxcbiAgRGF0YXNldFJlY29yZCxcbiAgSW5kaXZpZHVhbCxcbiAgTGFuZ3VhZ2VDb2RlLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQge1xuICBhbGxDaGlsZHJlbkVsZW1lbnQsXG4gIGFwcGVuZENoaWxkcmVuLFxuICBhcHBlbmRDaGlsZFRyZWUsXG4gIGNyZWF0ZUNoaWxkLFxuICBjcmVhdGVFbGVtZW50LFxuICBmaW5kQ2hpbGRFbGVtZW50LFxuICBmaW5kQ2hpbGRPckNyZWF0ZSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCxcbiAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIHJlYWRBdHRyaWJ1dGUsXG4gIHJlbW92ZUNoaWxkcmVuLFxuICByZW1vdmVDaGlsZHJlbkJ5TmFtZSxcbiAgc2V0VGV4dENvbnRlbnQsXG4gIHdyaXRlQXR0cmlidXRlLFxuICBYbWxFbGVtZW50LFxufSBmcm9tICcuLi94bWwtdXRpbHMnXG5pbXBvcnQge1xuICBmYWxsYmFjayxcbiAgZmlsdGVyQXJyYXksXG4gIGdldEF0SW5kZXgsXG4gIG1hcCxcbiAgbWFwQXJyYXksXG4gIG5vb3AsXG4gIHBpcGUsXG59IGZyb20gJy4uL2Z1bmN0aW9uLXV0aWxzJ1xuaW1wb3J0IHtcbiAgYXBwZW5kS2V5d29yZHMsXG4gIGFwcGVuZE9ubGluZVJlc291cmNlLFxuICBhcHBlbmRTZXJ2aWNlT25saW5lUmVzb3VyY2VzLFxuICBjcmVhdGVEaXN0cmlidXRpb25JbmZvLFxuICBmaW5kT3JDcmVhdGVEaXN0cmlidXRpb24sXG4gIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uLFxuICBnZXRQcm9ncmVzc0NvZGUsXG4gIGdldFJvbGVDb2RlLFxuICByZW1vdmVLZXl3b3JkcyxcbiAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcsXG4gIHdyaXRlRGF0ZVRpbWUsXG4gIHdyaXRlTGlua2FnZSxcbiAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcsXG59IGZyb20gJy4uL2lzbzE5MTM5L3dyaXRlLXBhcnRzJ1xuaW1wb3J0IHsgZmluZElkZW50aWZpY2F0aW9uIH0gZnJvbSAnLi4vaXNvMTkxMzkvcmVhZC1wYXJ0cydcbmltcG9ydCB7IG5hbWVQYXJ0c1RvRnVsbCB9IGZyb20gJy4uL2lzbzE5MTM5L3V0aWxzL2luZGl2aWR1YWwtbmFtZSdcbmltcG9ydCB7IGdldExhbmczRnJvbUxhbmcyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL2kxOG4vc3JjL2xpYi9sYW5ndWFnZS1jb2RlcydcbmltcG9ydCB7IGtpbmRUb0NvZGVMaXN0VmFsdWUgfSBmcm9tICcuLi9jb21tb24vcmVzb3VyY2UtdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVuaXF1ZUlkZW50aWZpZXIoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZShcbiAgICAgICdtZGI6bWV0YWRhdGFJZGVudGlmaWVyJyxcbiAgICAgICdtY2M6TURfSWRlbnRpZmllcicsXG4gICAgICAnbWNjOmNvZGUnXG4gICAgKSxcbiAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhyZWNvcmQudW5pcXVlSWRlbnRpZmllcilcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUtpbmQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgY29uc3Qga2luZCA9IGtpbmRUb0NvZGVMaXN0VmFsdWUocmVjb3JkKVxuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ21kYjptZXRhZGF0YVNjb3BlJyxcbiAgICAgICdtZGI6TURfTWV0YWRhdGFTY29wZScsXG4gICAgICAnbWRiOnJlc291cmNlU2NvcGUnLFxuICAgICAgJ21jYzpNRF9TY29wZUNvZGUnXG4gICAgKSxcbiAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cHM6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMTUvcmVzb3VyY2VzL0NvZGVsaXN0cy9jYXQvY29kZWxpc3RzLnhtbCNNRF9TY29wZUNvZGUnXG4gICAgKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGtpbmQpLFxuICAgIHNldFRleHRDb250ZW50KGtpbmQpXG4gICkocm9vdEVsKVxufVxuXG5mdW5jdGlvbiByZW1vdmVSZWNvcmREYXRlKHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nIHwgJ3B1YmxpY2F0aW9uJykge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ21kYjpkYXRlSW5mbycsIGZhbHNlKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2NpdDpDSV9EYXRlVHlwZUNvZGUnKSxcbiAgICAgICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gYXBwZW5kUmVjb3JkRGF0ZShcbiAgZGF0ZTogRGF0ZSxcbiAgdHlwZTogJ3JldmlzaW9uJyB8ICdjcmVhdGlvbicgfCAncHVibGljYXRpb24nXG4pIHtcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdtZGI6ZGF0ZUluZm8nKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfRGF0ZScpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnY2l0OmRhdGUnKSwgd3JpdGVEYXRlVGltZShkYXRlKSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnY2l0OmRhdGVUeXBlJyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpDSV9EYXRlVHlwZUNvZGUnKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMTUvcmVzb3VyY2VzL0NvZGVsaXN0cy9jYXQvY29kZWxpc3RzLnhtbCNDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIHR5cGUpLFxuICAgICAgICAgIHNldFRleHRDb250ZW50KHR5cGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVjb3JkVXBkYXRlZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICByZW1vdmVSZWNvcmREYXRlKCdyZXZpc2lvbicpKHJvb3RFbClcbiAgYXBwZW5kUmVjb3JkRGF0ZShyZWNvcmQucmVjb3JkVXBkYXRlZCwgJ3JldmlzaW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZWNvcmRDcmVhdGVkKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHJlbW92ZVJlY29yZERhdGUoJ2NyZWF0aW9uJykocm9vdEVsKVxuICBpZiAoIXJlY29yZC5yZWNvcmRDcmVhdGVkKSByZXR1cm5cbiAgYXBwZW5kUmVjb3JkRGF0ZShyZWNvcmQucmVjb3JkQ3JlYXRlZCwgJ2NyZWF0aW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZWNvcmRQdWJsaXNoZWQoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcmVtb3ZlUmVjb3JkRGF0ZSgncHVibGljYXRpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlY29yZFB1Ymxpc2hlZCkgcmV0dXJuXG4gIGFwcGVuZFJlY29yZERhdGUocmVjb3JkLnJlY29yZFB1Ymxpc2hlZCwgJ3B1YmxpY2F0aW9uJykocm9vdEVsKVxufVxuXG5mdW5jdGlvbiByZW1vdmVSZXNvdXJjZURhdGUodHlwZTogJ3JldmlzaW9uJyB8ICdjcmVhdGlvbicgfCAncHVibGljYXRpb24nKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ21yaTpjaXRhdGlvbicsICdjaXQ6Q0lfQ2l0YXRpb24nKSxcbiAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2NpdDpkYXRlJywgZmFsc2UpLFxuICAgICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnY2l0OkNJX0RhdGVUeXBlQ29kZScpLFxuICAgICAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIGFwcGVuZFJlc291cmNlRGF0ZShcbiAgZGF0ZTogRGF0ZSxcbiAgdHlwZTogJ3JldmlzaW9uJyB8ICdjcmVhdGlvbicgfCAncHVibGljYXRpb24nXG4pIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ21yaTpjaXRhdGlvbicsICdjaXQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpkYXRlJyksXG4gICAgICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfRGF0ZScpLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2NpdDpkYXRlJyksIHdyaXRlRGF0ZVRpbWUoZGF0ZSkpLFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdjaXQ6ZGF0ZVR5cGUnKSxcbiAgICAgICAgICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfRGF0ZVR5cGVDb2RlJyksXG4gICAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICAgJ2h0dHBzOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTE1L3Jlc291cmNlcy9Db2RlbGlzdHMvY2F0L2NvZGVsaXN0cy54bWwjQ0lfRGF0ZVR5cGVDb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgdHlwZSksXG4gICAgICAgICAgICBzZXRUZXh0Q29udGVudCh0eXBlKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXNvdXJjZVVwZGF0ZWQoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcmVtb3ZlUmVzb3VyY2VEYXRlKCdyZXZpc2lvbicpKHJvb3RFbClcbiAgaWYgKCFyZWNvcmQucmVzb3VyY2VVcGRhdGVkKSByZXR1cm5cbiAgYXBwZW5kUmVzb3VyY2VEYXRlKHJlY29yZC5yZXNvdXJjZVVwZGF0ZWQsICdyZXZpc2lvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VDcmVhdGVkKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHJlbW92ZVJlc291cmNlRGF0ZSgnY3JlYXRpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlc291cmNlQ3JlYXRlZCkgcmV0dXJuXG4gIGFwcGVuZFJlc291cmNlRGF0ZShyZWNvcmQucmVzb3VyY2VDcmVhdGVkLCAnY3JlYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlc291cmNlUHVibGlzaGVkKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHJlbW92ZVJlc291cmNlRGF0ZSgncHVibGljYXRpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlc291cmNlUHVibGlzaGVkKSByZXR1cm5cbiAgYXBwZW5kUmVzb3VyY2VEYXRlKHJlY29yZC5yZXNvdXJjZVB1Ymxpc2hlZCwgJ3B1YmxpY2F0aW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXVzZVR5cGUocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgd3JpdGVLaW5kKHJlY29yZCwgcm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kUmVzcG9uc2libGVQYXJ0eShcbiAgY29udGFjdDogSW5kaXZpZHVhbCxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICBjb25zdCBmdWxsTmFtZSA9IG5hbWVQYXJ0c1RvRnVsbChjb250YWN0LmZpcnN0TmFtZSwgY29udGFjdC5sYXN0TmFtZSlcblxuICBjb25zdCBjcmVhdGVJbmRpdmlkdWFsID0gcGlwZShcbiAgICBjcmVhdGVFbGVtZW50KCdjaXQ6aW5kaXZpZHVhbCcpLFxuICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfSW5kaXZpZHVhbCcpLFxuICAgIGZ1bGxOYW1lXG4gICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnY2l0Om5hbWUnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoZnVsbE5hbWUpKVxuICAgICAgICApXG4gICAgICA6IG5vb3AsXG4gICAgY29udGFjdC5wb3NpdGlvblxuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnY2l0OnBvc2l0aW9uTmFtZScpLFxuICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5wb3NpdGlvbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbm9vcFxuICApXG5cbiAgY29uc3QgY3JlYXRlQ29udGFjdEluZm8gPSBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpjb250YWN0SW5mbycpLFxuICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfQ29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnY2l0OmFkZHJlc3MnKSxcbiAgICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpDSV9BZGRyZXNzJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdjaXQ6ZWxlY3Ryb25pY01haWxBZGRyZXNzJyksXG4gICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LmVtYWlsKVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgY29udGFjdC5hZGRyZXNzXG4gICAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdjaXQ6ZGVsaXZlcnlQb2ludCcpLFxuICAgICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QuYWRkcmVzcylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogbm9vcFxuICAgICAgKVxuICAgICksXG4gICAgY29udGFjdC5vcmdhbml6YXRpb24/LndlYnNpdGVcbiAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpvbmxpbmVSZXNvdXJjZScpLFxuICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpDSV9PbmxpbmVSZXNvdXJjZScpLFxuICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpsaW5rYWdlJyksXG4gICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0Lm9yZ2FuaXphdGlvbi53ZWJzaXRlLnRvU3RyaW5nKCkpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3AsXG4gICAgY29udGFjdC5waG9uZVxuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnY2l0OnBob25lJyksXG4gICAgICAgICAgICBjcmVhdGVDaGlsZCgnY2l0OkNJX1RlbGVwaG9uZScpLFxuICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpudW1iZXInKSxcbiAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QucGhvbmUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcbiAgKVxuXG4gIGNvbnN0IGNyZWF0ZVJvbGUgPSBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpyb2xlJyksXG4gICAgY3JlYXRlQ2hpbGQoJ2NpdDpDSV9Sb2xlQ29kZScpLFxuICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICdodHRwczovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS9yZXNvdXJjZXMvQ29kZWxpc3RzL2NhdC9jb2RlbGlzdHMueG1sI0NJX1JvbGVDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRSb2xlQ29kZShjb250YWN0LnJvbGUpKSxcbiAgICBzZXRUZXh0Q29udGVudChnZXRSb2xlQ29kZShjb250YWN0LnJvbGUpKVxuICApXG5cbiAgY29uc3QgY3JlYXRlUGFydHkgPSBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpwYXJ0eScpLFxuICAgIGNyZWF0ZUNoaWxkKCdjaXQ6Q0lfT3JnYW5pc2F0aW9uJyksXG4gICAgY29udGFjdC5vcmdhbml6YXRpb24/Lm5hbWVcbiAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2NpdDpuYW1lJyksXG4gICAgICAgICAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgY29udGFjdC5vcmdhbml6YXRpb24/Lm5hbWUsXG4gICAgICAgICAgICAgIGNvbnRhY3Qub3JnYW5pemF0aW9uPy50cmFuc2xhdGlvbnM/Lm5hbWUsXG4gICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBub29wLFxuICAgIGFwcGVuZENoaWxkcmVuKGNyZWF0ZUNvbnRhY3RJbmZvLCBjcmVhdGVJbmRpdmlkdWFsKVxuICApXG5cbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdjaXQ6Q0lfUmVzcG9uc2liaWxpdHknKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKGNyZWF0ZVJvbGUsIGNyZWF0ZVBhcnR5KVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdtZGI6Y29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmNvbnRhY3RzLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Y29udGFjdCcpLFxuICAgICAgICAgIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoY29udGFjdCwgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNvbnRhY3RzRm9yUmVzb3VyY2UoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgY29uc3Qgd2l0aG91dERpc3RyaWJ1dG9ycyA9IHJlY29yZC5jb250YWN0c0ZvclJlc291cmNlLmZpbHRlcihcbiAgICAoYykgPT4gYy5yb2xlICE9PSAnZGlzdHJpYnV0b3InXG4gIClcbiAgY29uc3QgZGlzdHJpYnV0b3JzID0gcmVjb3JkLmNvbnRhY3RzRm9yUmVzb3VyY2UuZmlsdGVyKFxuICAgIChjKSA9PiBjLnJvbGUgPT09ICdkaXN0cmlidXRvcidcbiAgKVxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ21yaTpwb2ludE9mQ29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ud2l0aG91dERpc3RyaWJ1dG9ycy5tYXAoKGNvbnRhY3QpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnbXJpOnBvaW50T2ZDb250YWN0JyksXG4gICAgICAgICAgYXBwZW5kUmVzcG9uc2libGVQYXJ0eShjb250YWN0LCByZWNvcmQuZGVmYXVsdExhbmd1YWdlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbiAgaWYgKCFkaXN0cmlidXRvcnMubGVuZ3RoKSByZXR1cm5cbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVEaXN0cmlidXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnbXJkOmRpc3RyaWJ1dG9yJyksXG4gICAgY3JlYXRlQ2hpbGQoJ21yZDpkaXN0cmlidXRvcicpLFxuICAgIGNyZWF0ZUNoaWxkKCdtcmQ6TURfRGlzdHJpYnV0b3InKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLmRpc3RyaWJ1dG9ycy5tYXAoKGNvbnRhY3QpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnbXJkOmRpc3RyaWJ1dG9yQ29udGFjdCcpLFxuICAgICAgICAgIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoY29udGFjdCwgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUtleXdvcmRzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVLZXl3b3JkcygpLFxuICAgIGFwcGVuZEtleXdvcmRzKHJlY29yZC5rZXl3b3JkcywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxhbmRpbmdQYWdlKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnbWRiOm1ldGFkYXRhTGlua2FnZScsXG4gICAgICAnY2l0OkNJX09ubGluZVJlc291cmNlJyxcbiAgICAgICdjaXQ6bGlua2FnZSdcbiAgICApLFxuICAgIHdyaXRlTGlua2FnZShyZWNvcmQubGFuZGluZ1BhZ2UpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaW5lYWdlKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnbWRiOnJlc291cmNlTGluZWFnZScsXG4gICAgICAnbXJsOkxJX0xpbmVhZ2UnLFxuICAgICAgJ21ybDpzdGF0ZW1lbnQnXG4gICAgKSxcbiAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgIHJlY29yZC5saW5lYWdlLFxuICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucz8ubGluZWFnZSxcbiAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTdGF0dXMocmVjb3JkOiBEYXRhc2V0UmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgY29uc3QgcHJvZ3Jlc3NDb2RlID0gZ2V0UHJvZ3Jlc3NDb2RlKHJlY29yZC5zdGF0dXMpXG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnbXJpOnN0YXR1cycsICdtY2M6TURfUHJvZ3Jlc3NDb2RlJyksXG4gICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAnY29kZUxpc3QnLFxuICAgICAgJ2h0dHBzOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTE1L3Jlc291cmNlcy9Db2RlbGlzdHMvY2F0L2NvZGVsaXN0cy54bWwjTURfUHJvZ3Jlc3NDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBwcm9ncmVzc0NvZGUpLFxuICAgIHNldFRleHRDb250ZW50KHByb2dyZXNzQ29kZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVNwYXRpYWxSZXByZXNlbnRhdGlvbihcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBpZiAoIXJlY29yZC5zcGF0aWFsUmVwcmVzZW50YXRpb24pIHtcbiAgICBwaXBlKFxuICAgICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdtcmk6c3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZScpXG4gICAgKShyb290RWwpXG4gICAgcmV0dXJuXG4gIH1cbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ21yaTpzcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlJyxcbiAgICAgICdtY2M6TURfU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZUNvZGUnXG4gICAgKSxcbiAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cHM6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMTUvcmVzb3VyY2VzL0NvZGVsaXN0cy9jYXQvY29kZWxpc3RzLnhtbCNNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgcmVjb3JkLnNwYXRpYWxSZXByZXNlbnRhdGlvbiksXG4gICAgc2V0VGV4dENvbnRlbnQocmVjb3JkLnNwYXRpYWxSZXByZXNlbnRhdGlvbilcbiAgKShyb290RWwpXG59XG5cbi8vIHRoaXMgd2lsbCByZW1vdmUgYWxsIHRyYW5zZmVyIG9wdGlvbnMgYW5kIGZvcm1hdHMgZnJvbSBkaXN0cmlidXRpb24gaW5mb1xuLy8gYW5kIHJlbW92ZSBlbXB0eSBkaXN0cmlidXRpb24gaW5mb1xuZnVuY3Rpb24gcmVtb3ZlVHJhbnNmZXJPcHRpb25zKHJvb3RFbDogWG1sRWxlbWVudCkge1xuICAvLyByZW1vdmUgdHJhbnNmZXIgb3B0aW9ucyAmIGZvcm1hdHNcbiAgcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ21kYjpkaXN0cmlidXRpb25JbmZvJywgJ21yZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBtYXBBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIHJlbW92ZUNoaWxkcmVuKGZpbmRDaGlsZHJlbkVsZW1lbnQoJ21yZDpkaXN0cmlidXRpb25Gb3JtYXQnLCBmYWxzZSkpLFxuICAgICAgICByZW1vdmVDaGlsZHJlbihmaW5kQ2hpbGRyZW5FbGVtZW50KCdtcmQ6dHJhbnNmZXJPcHRpb25zJywgZmFsc2UpKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG4gIC8vIHJlbW92ZSBlbXB0eSBkaXN0cmlidXRpb25zXG4gIHJlbW92ZUNoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdtZGI6ZGlzdHJpYnV0aW9uSW5mbycsIGZhbHNlKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ21yZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICAgICAgICBhbGxDaGlsZHJlbkVsZW1lbnQsXG4gICAgICAgICAgbWFwKChjaGlsZHJlbikgPT4gY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZnVuY3Rpb24gYXBwZW5kT25saW5lUmVzb3VyY2VGb3JtYXQobWltZVR5cGU6IHN0cmluZykge1xuICByZXR1cm4gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ21yZDpkaXN0cmlidXRpb25Gb3JtYXQnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdtcmQ6TURfRm9ybWF0JyksXG4gICAgICBjcmVhdGVDaGlsZCgnbXJkOmZvcm1hdFNwZWNpZmljYXRpb25DaXRhdGlvbicpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDpDSV9DaXRhdGlvbicpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2NpdDp0aXRsZScpLFxuICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcobWltZVR5cGUpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU9ubGluZVJlc291cmNlcyhcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVUcmFuc2Zlck9wdGlvbnMocm9vdEVsKVxuXG4gIGlmIChyZWNvcmQua2luZCA9PT0gJ3NlcnZpY2UnKSB7XG4gICAgYXBwZW5kU2VydmljZU9ubGluZVJlc291cmNlcyhyZWNvcmQsIHJvb3RFbClcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGZvciBlYWNoIG9ubGluZSByZXNvdXJjZSwgZWl0aGVyIGZpbmQgYW4gZXhpc3RpbmcgZGlzdHJpYnV0aW9uIGluZm8gb3IgY3JlYXRlIGEgbmV3IG9uZVxuICByZWNvcmQub25saW5lUmVzb3VyY2VzLmZvckVhY2goKG9ubGluZVJlc291cmNlLCBpbmRleCkgPT4ge1xuICAgIHBpcGUoXG4gICAgICBmYWxsYmFjayhcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICAgICAgICBnZXRBdEluZGV4KGluZGV4KVxuICAgICAgICApLFxuICAgICAgICBhcHBlbmRDaGlsZFRyZWUoY3JlYXRlRGlzdHJpYnV0aW9uSW5mbygpKVxuICAgICAgKSxcbiAgICAgIGFwcGVuZE9ubGluZVJlc291cmNlKFxuICAgICAgICBvbmxpbmVSZXNvdXJjZSxcbiAgICAgICAgYXBwZW5kT25saW5lUmVzb3VyY2VGb3JtYXQsXG4gICAgICAgIHJlY29yZC50cmFuc2xhdGlvbnMsXG4gICAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgIClcbiAgICApKHJvb3RFbClcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVMb2NhbGVFbGVtZW50KGxhbmd1YWdlOiBMYW5ndWFnZUNvZGUpIHtcbiAgY29uc3QgbGFuZzMgPSBnZXRMYW5nM0Zyb21MYW5nMihsYW5ndWFnZS50b0xvd2VyQ2FzZSgpKSA/PyBsYW5ndWFnZVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnbGFuOlBUX0xvY2FsZScpLFxuICAgIHdyaXRlQXR0cmlidXRlKCdpZCcsIGxhbmd1YWdlLnRvVXBwZXJDYXNlKCkpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdsYW46bGFuZ3VhZ2UnLCAnZ21kOkxhbmd1YWdlQ29kZScpLFxuICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdCcsICdodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yLycpLFxuICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgbGFuZzMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGVmYXVsdExhbmd1YWdlKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ21kYjpkZWZhdWx0TG9jYWxlJyksXG4gICAgd3JpdGVMb2NhbGVFbGVtZW50KHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPdGhlckxhbmd1YWdlcyhyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICAvLyBjbGVhciBleGlzdGluZ1xuICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnbWRiOm90aGVyTG9jYWxlJykocm9vdEVsKVxuXG4gIC8vIGRvIG5vdCB3cml0ZSBkb3duIGxhbmd1YWdlcyBpZiB0aGVyZSBpcyBub3RoaW5nIGVsc2UgdGhhbiB0aGUgZGVmYXVsdCBvbmVcbiAgaWYgKCFyZWNvcmQub3RoZXJMYW5ndWFnZXM/Lmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgLi4ucmVjb3JkLm90aGVyTGFuZ3VhZ2VzLm1hcCgobGFuZzogTGFuZ3VhZ2VDb2RlKSA9PlxuICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdtZGI6b3RoZXJMb2NhbGUnKSwgd3JpdGVMb2NhbGVFbGVtZW50KGxhbmcpKVxuICAgIClcbiAgKShyb290RWwpXG59XG4iXX0=
@@ -1,5 +1,6 @@
1
1
  import { BaseConverter } from '../base.converter';
2
2
  import { isEqual } from '../convert-utils';
3
+ import { isFieldTranslatable } from '../translate-utils';
3
4
  import { createDocument, createElement, getRootElement, parseXmlString, xmlToString, } from '../xml-utils';
4
5
  import { readAbstract, readContacts, readContactsForResource, readDefaultLanguage, readIsoTopics, readKeywords, readKind, readLegalConstraints, readLicenses, readLineage, readOnlineResources, readOtherConstraints, readOtherLanguages, readOverviews, readOwnerOrganization, readRecordUpdated, readResourceCreated, readResourceIdentifier, readResourcePublished, readResourceUpdated, readReuseType, readSecurityConstraints, readSpatialExtents, readSpatialRepresentation, readStatus, readTemporalExtents, readTitle, readUniqueIdentifier, readUpdateFrequency, } from './read-parts';
5
6
  import { writeAbstract, writeContacts, writeContactsForResource, writeDefaultLanguage, writeGraphicOverviews, writeKeywords, writeKind, writeLanguages, writeLegalConstraints, writeLicenses, writeLineage, writeOnlineResources, writeOtherConstraints, writeRecordUpdated, writeResourceCreated, writeResourceIdentifier, writeResourcePublished, writeResourceUpdated, writeReuseType, writeSecurityConstraints, writeSpatialExtents, writeSpatialRepresentation, writeStatus, writeTemporalExtents, writeTitle, writeTopics, writeUniqueIdentifier, writeUpdateFrequency, } from './write-parts';
@@ -78,7 +79,7 @@ export class Iso19139Converter extends BaseConverter {
78
79
  // TODO
79
80
  extras: () => undefined,
80
81
  landingPage: () => undefined,
81
- translations: () => undefined,
82
+ translations: () => undefined, // NB. translations are handled in properties
82
83
  };
83
84
  }
84
85
  beforeDocumentCreation(rootElement) {
@@ -228,14 +229,18 @@ export class Iso19139Converter extends BaseConverter {
228
229
  let rootEl;
229
230
  let fieldChanged;
230
231
  if (reference) {
232
+ // eslint-disable-next-line prefer-const
233
+ let languagesChanged;
231
234
  const originalDoc = parseXmlString(reference);
232
235
  const originalRecord = await this.readRecord(reference);
233
236
  rootEl = getRootElement(originalDoc);
234
237
  fieldChanged = (name) => {
235
238
  return originalRecord !== null
236
- ? !isEqual(record[name], originalRecord[name])
239
+ ? !isEqual(record[name], originalRecord[name]) ||
240
+ (languagesChanged && isFieldTranslatable(name))
237
241
  : true;
238
242
  };
243
+ languagesChanged = fieldChanged('otherLanguages');
239
244
  }
240
245
  else {
241
246
  rootEl = createElement('gmd:MD_Metadata')();
@@ -256,8 +261,10 @@ export class Iso19139Converter extends BaseConverter {
256
261
  this.writers['recordCreated'](record, rootEl);
257
262
  fieldChanged('recordPublished') &&
258
263
  this.writers['recordPublished'](record, rootEl);
259
- fieldChanged('title') && this.writers['title'](record, rootEl);
260
- fieldChanged('abstract') && this.writers['abstract'](record, rootEl);
264
+ (fieldChanged('title') || fieldChanged('translations')) &&
265
+ this.writers['title'](record, rootEl);
266
+ (fieldChanged('abstract') || fieldChanged('translations')) &&
267
+ this.writers['abstract'](record, rootEl);
261
268
  fieldChanged('resourceCreated') &&
262
269
  this.writers['resourceCreated'](record, rootEl);
263
270
  fieldChanged('resourcePublished') &&
@@ -290,7 +297,8 @@ export class Iso19139Converter extends BaseConverter {
290
297
  this.writers['temporalExtents'](record, rootEl);
291
298
  fieldChanged('spatialExtents') &&
292
299
  this.writers['spatialExtents'](record, rootEl);
293
- fieldChanged('lineage') && this.writers['lineage'](record, rootEl);
300
+ (fieldChanged('lineage') || fieldChanged('translations')) &&
301
+ this.writers['lineage'](record, rootEl);
294
302
  }
295
303
  fieldChanged('otherLanguages') &&
296
304
  this.writers['otherLanguages'](record, rootEl);
@@ -299,4 +307,4 @@ export class Iso19139Converter extends BaseConverter {
299
307
  return xmlToString(newDocument);
300
308
  }
301
309
  }
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvMTkxMzkuY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvbWV0YWRhdGEtY29udmVydGVyL3NyYy9saWIvaXNvMTkxMzkvaXNvMTkxMzkuY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDMUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxhQUFhLEVBQ2IsY0FBYyxFQUNkLGNBQWMsRUFDZCxXQUFXLEdBQ1osTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsWUFBWSxFQUNaLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsU0FBUyxFQUNULG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUNMLGFBQWEsRUFDYixhQUFhLEVBQ2Isd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsYUFBYSxFQUNiLFNBQVMsRUFDVCxjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixrQkFBa0Is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QUMsQ0FBQTtJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDYXRhbG9nUmVjb3JkLFxuICBDYXRhbG9nUmVjb3JkS2V5cyxcbiAgRGF0YXNldFJlY29yZCxcbiAgTW9kZWxUcmFuc2xhdGlvbnMsXG4gIFJlY29yZEtpbmQsXG4gIFJlY29yZFRyYW5zbGF0aW9ucyxcbiAgUmV1c2VSZWNvcmQsXG4gIFNlcnZpY2VSZWNvcmQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFhtbEVsZW1lbnQgfSBmcm9tICdAcmdyb3ZlL3BhcnNlLXhtbCdcbmltcG9ydCB7IEJhc2VDb252ZXJ0ZXIgfSBmcm9tICcuLi9iYXNlLmNvbnZlcnRlcidcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICcuLi9jb252ZXJ0LXV0aWxzJ1xuaW1wb3J0IHtcbiAgY3JlYXRlRG9jdW1lbnQsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIGdldFJvb3RFbGVtZW50LFxuICBwYXJzZVhtbFN0cmluZyxcbiAgeG1sVG9TdHJpbmcsXG59IGZyb20gJy4uL3htbC11dGlscydcbmltcG9ydCB7XG4gIHJlYWRBYnN0cmFjdCxcbiAgcmVhZENvbnRhY3RzLFxuICByZWFkQ29udGFjdHNGb3JSZXNvdXJjZSxcbiAgcmVhZERlZmF1bHRMYW5ndWFnZSxcbiAgcmVhZElzb1RvcGljcyxcbiAgcmVhZEtleXdvcmRzLFxuICByZWFkS2luZCxcbiAgcmVhZExlZ2FsQ29uc3RyYWludHMsXG4gIHJlYWRMaWNlbnNlcyxcbiAgcmVhZExpbmVhZ2UsXG4gIHJlYWRPbmxpbmVSZXNvdXJjZXMsXG4gIHJlYWRPdGhlckNvbnN0cmFpbnRzLFxuICByZWFkT3RoZXJMYW5ndWFnZXMsXG4gIHJlYWRPdmVydmlld3MsXG4gIHJlYWRPd25lck9yZ2FuaXphdGlvbixcbiAgcmVhZFJlY29yZFVwZGF0ZWQsXG4gIHJlYWRSZXNvdXJjZUNyZWF0ZWQsXG4gIHJlYWRSZXNvdXJjZUlkZW50aWZpZXIsXG4gIHJlYWRSZXNvdXJjZVB1Ymxpc2hlZCxcbiAgcmVhZFJlc291cmNlVXBkYXRlZCxcbiAgcmVhZFJldXNlVHlwZSxcbiAgcmVhZFNlY3VyaXR5Q29uc3RyYWludHMsXG4gIHJlYWRTcGF0aWFsRXh0ZW50cyxcbiAgcmVhZFNwYXRpYWxSZXByZXNlbnRhdGlvbixcbiAgcmVhZFN0YXR1cyxcbiAgcmVhZFRlbXBvcmFsRXh0ZW50cyxcbiAgcmVhZFRpdGxlLFxuICByZWFkVW5pcXVlSWRlbnRpZmllcixcbiAgcmVhZFVwZGF0ZUZyZXF1ZW5jeSxcbn0gZnJvbSAnLi9yZWFkLXBhcnRzJ1xuaW1wb3J0IHtcbiAgd3JpdGVBYnN0cmFjdCxcbiAgd3JpdGVDb250YWN0cyxcbiAgd3JpdGVDb250YWN0c0ZvclJlc291cmNlLFxuICB3cml0ZURlZmF1bHRMYW5ndWFnZSxcbiAgd3JpdGVHcmFwaGljT3ZlcnZpZXdzLFxuICB3cml0ZUtleXdvcmRzLFxuICB3cml0ZUtpbmQsXG4gIHdyaXRlTGFuZ3VhZ2VzLFxuICB3cml0ZUxlZ2FsQ29uc3RyYWludHMsXG4gIHdyaXRlTGljZW5zZXMsXG4gIHdyaXRlTGluZWFnZSxcbiAgd3JpdGVPbmxpbmVSZXNvdXJjZXMsXG4gIHdyaXRlT3RoZXJDb25zdHJhaW50cyxcbiAgd3JpdGVSZWNvcmRVcGRhdGVkLFxuICB3cml0ZVJlc291cmNlQ3JlYXRlZCxcbiAgd3JpdGVSZXNvdXJjZUlkZW50aWZpZXIsXG4gIHdyaXRlUmVzb3VyY2VQdWJsaXNoZWQsXG4gIHdyaXRlUmVzb3VyY2VVcGRhdGVkLFxuICB3cml0ZVJldXNlVHlwZSxcbiAgd3JpdGVTZWN1cml0eUNvbnN0cmFpbnRzLFxuICB3cml0ZVNwYXRpYWxFeHRlbnRzLFxuICB3cml0ZVNwYXRpYWxSZXByZXNlbnRhdGlvbixcbiAgd3JpdGVTdGF0dXMsXG4gIHdyaXRlVGVtcG9yYWxFeHRlbnRzLFxuICB3cml0ZVRpdGxlLFxuICB3cml0ZVRvcGljcyxcbiAgd3JpdGVVbmlxdWVJZGVudGlmaWVyLFxuICB3cml0ZVVwZGF0ZUZyZXF1ZW5jeSxcbn0gZnJvbSAnLi93cml0ZS1wYXJ0cydcblxuZXhwb3J0IGNsYXNzIElzbzE5MTM5Q29udmVydGVyIGV4dGVuZHMgQmFzZUNvbnZlcnRlcjxzdHJpbmc+IHtcbiAgcHJvdGVjdGVkIHJlYWRlcnM6IFJlY29yZDxcbiAgICBDYXRhbG9nUmVjb3JkS2V5cyxcbiAgICAocm9vdEVsOiBYbWxFbGVtZW50LCB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9ucykgPT4gdW5rbm93blxuICA+ID0ge1xuICAgIHVuaXF1ZUlkZW50aWZpZXI6IHJlYWRVbmlxdWVJZGVudGlmaWVyLFxuICAgIGtpbmQ6IHJlYWRLaW5kLFxuICAgIG93bmVyT3JnYW5pemF0aW9uOiByZWFkT3duZXJPcmdhbml6YXRpb24sXG4gICAgcmVjb3JkVXBkYXRlZDogcmVhZFJlY29yZFVwZGF0ZWQsXG4gICAgcmVjb3JkQ3JlYXRlZDogKCkgPT4gdW5kZWZpbmVkLCAvLyBub3Qgc3VwcG9ydGVkIGluIElTTzE5MTM5XG4gICAgcmVjb3JkUHVibGlzaGVkOiAoKSA9PiB1bmRlZmluZWQsIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSVNPMTkxMzlcbiAgICByZXNvdXJjZUlkZW50aWZpZXI6IHJlYWRSZXNvdXJjZUlkZW50aWZpZXIsXG4gICAgcmVzb3VyY2VVcGRhdGVkOiByZWFkUmVzb3VyY2VVcGRhdGVkLFxuICAgIHJlc291cmNlQ3JlYXRlZDogcmVhZFJlc291cmNlQ3JlYXRlZCxcbiAgICByZXNvdXJjZVB1Ymxpc2hlZDogcmVhZFJlc291cmNlUHVibGlzaGVkLFxuICAgIHJldXNlVHlwZTogcmVhZFJldXNlVHlwZSxcbiAgICB0aXRsZTogcmVhZFRpdGxlLFxuICAgIGFic3RyYWN0OiByZWFkQWJzdHJhY3QsXG4gICAgY29udGFjdHM6IHJlYWRDb250YWN0cyxcbiAgICBjb250YWN0c0ZvclJlc291cmNlOiByZWFkQ29udGFjdHNGb3JSZXNvdXJjZSxcbiAgICBrZXl3b3JkczogcmVhZEtleXdvcmRzLFxuICAgIHRvcGljczogcmVhZElzb1RvcGljcyxcbiAgICBsaWNlbnNlczogcmVhZExpY2Vuc2VzLFxuICAgIGxlZ2FsQ29uc3RyYWludHM6IHJlYWRMZWdhbENvbnN0cmFpbnRzLFxuICAgIHNlY3VyaXR5Q29uc3RyYWludHM6IHJlYWRTZWN1cml0eUNvbnN0cmFpbnRzLFxuICAgIG90aGVyQ29uc3RyYWludHM6IHJlYWRPdGhlckNvbnN0cmFpbnRzLFxuICAgIHN0YXR1czogcmVhZFN0YXR1cyxcbiAgICB1cGRhdGVGcmVxdWVuY3k6IHJlYWRVcGRhdGVGcmVxdWVuY3ksXG4gICAgc3BhdGlhbFJlcHJlc2VudGF0aW9uOiByZWFkU3BhdGlhbFJlcHJlc2VudGF0aW9uLFxuICAgIG92ZXJ2aWV3czogcmVhZE92ZXJ2aWV3cyxcbiAgICBsaW5lYWdlOiByZWFkTGluZWFnZSxcbiAgICBvbmxpbmVSZXNvdXJjZXM6IHJlYWRPbmxpbmVSZXNvdXJjZXMsXG4gICAgdGVtcG9yYWxFeHRlbnRzOiByZWFkVGVtcG9yYWxFeHRlbnRzLFxuICAgIHNwYXRpYWxFeHRlbnRzOiByZWFkU3BhdGlhbEV4dGVudHMsXG4gICAgb3RoZXJMYW5ndWFnZXM6IHJlYWRPdGhlckxhbmd1YWdlcyxcbiAgICBkZWZhdWx0TGFuZ3VhZ2U6IHJlYWREZWZhdWx0TGFuZ3VhZ2UsXG4gICAgLy8gVE9ET1xuICAgIGV4dHJhczogKCkgPT4gdW5kZWZpbmVkLFxuICAgIGxhbmRpbmdQYWdlOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgdHJhbnNsYXRpb25zOiAoKSA9PiB1bmRlZmluZWQsXG4gIH1cblxuICBwcm90ZWN0ZWQgd3JpdGVyczogUmVjb3JkPFxuICAgIENhdGFsb2dSZWNvcmRLZXlzLFxuICAgIChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkgPT4gdm9pZFxuICA+ID0ge1xuICAgIHVuaXF1ZUlkZW50aWZpZXI6IHdyaXRlVW5pcXVlSWRlbnRpZmllcixcbiAgICBraW5kOiB3cml0ZUtpbmQsXG4gICAgb3duZXJPcmdhbml6YXRpb246ICgpID0+IHVuZGVmaW5lZCwgLy8gZml4bWU6IGZpbmQgYSB3YXkgdG8gc3RvcmUgdGhpcyB2YWx1ZSBwcm9wZXJseVxuICAgIHJlY29yZFVwZGF0ZWQ6IHdyaXRlUmVjb3JkVXBkYXRlZCxcbiAgICByZWNvcmRDcmVhdGVkOiAoKSA9PiB1bmRlZmluZWQsIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSVNPMTkxMzlcbiAgICByZWNvcmRQdWJsaXNoZWQ6ICgpID0+IHVuZGVmaW5lZCwgLy8gbm90IHN1cHBvcnRlZCBpbiBJU08xOTEzOVxuICAgIHJlc291cmNlSWRlbnRpZmllcjogd3JpdGVSZXNvdXJjZUlkZW50aWZpZXIsXG4gICAgcmVzb3VyY2VVcGRhdGVkOiB3cml0ZVJlc291cmNlVXBkYXRlZCxcbiAgICByZXNvdXJjZUNyZWF0ZWQ6IHdyaXRlUmVzb3VyY2VDcmVhdGVkLFxuICAgIHJlc291cmNlUHVibGlzaGVkOiB3cml0ZVJlc291cmNlUHVibGlzaGVkLFxuICAgIHJldXNlVHlwZTogd3JpdGVSZXVzZVR5cGUsXG4gICAgdGl0bGU6IHdyaXRlVGl0bGUsXG4gICAgYWJzdHJhY3Q6IHdyaXRlQWJzdHJhY3QsXG4gICAgY29udGFjdHM6IHdyaXRlQ29udGFjdHMsXG4gICAgY29udGFjdHNGb3JSZXNvdXJjZTogd3JpdGVDb250YWN0c0ZvclJlc291cmNlLFxuICAgIGtleXdvcmRzOiB3cml0ZUtleXdvcmRzLFxuICAgIHRvcGljczogd3JpdGVUb3BpY3MsXG4gICAgbGljZW5zZXM6IHdyaXRlTGljZW5zZXMsXG4gICAgbGVnYWxDb25zdHJhaW50czogd3JpdGVMZWdhbENvbnN0cmFpbnRzLFxuICAgIHNlY3VyaXR5Q29uc3RyYWludHM6IHdyaXRlU2VjdXJpdHlDb25zdHJhaW50cyxcbiAgICBvdGhlckNvbnN0cmFpbnRzOiB3cml0ZU90aGVyQ29uc3RyYWludHMsXG4gICAgc3RhdHVzOiB3cml0ZVN0YXR1cyxcbiAgICB1cGRhdGVGcmVxdWVuY3k6IHdyaXRlVXBkYXRlRnJlcXVlbmN5LFxuICAgIHNwYXRpYWxSZXByZXNlbnRhdGlvbjogd3JpdGVTcGF0aWFsUmVwcmVzZW50YXRpb24sXG4gICAgb3ZlcnZpZXdzOiB3cml0ZUdyYXBoaWNPdmVydmlld3MsXG4gICAgbGluZWFnZTogd3JpdGVMaW5lYWdlLFxuICAgIG9ubGluZVJlc291cmNlczogd3JpdGVPbmxpbmVSZXNvdXJjZXMsXG4gICAgdGVtcG9yYWxFeHRlbnRzOiB3cml0ZVRlbXBvcmFsRXh0ZW50cyxcbiAgICBzcGF0aWFsRXh0ZW50czogd3JpdGVTcGF0aWFsRXh0ZW50cyxcbiAgICBvdGhlckxhbmd1YWdlczogd3JpdGVMYW5ndWFnZXMsXG4gICAgZGVmYXVsdExhbmd1YWdlOiB3cml0ZURlZmF1bHRMYW5ndWFnZSxcbiAgICAvLyBUT0RPXG4gICAgZXh0cmFzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgbGFuZGluZ1BhZ2U6ICgpID0+IHVuZGVmaW5lZCxcbiAgICB0cmFuc2xhdGlvbnM6ICgpID0+IHVuZGVmaW5lZCxcbiAgfVxuXG4gIHByb3RlY3RlZCBiZWZvcmVEb2N1bWVudENyZWF0aW9uKHJvb3RFbGVtZW50OiBYbWxFbGVtZW50KSB7XG4gICAgLy8gdG8gb3ZlcnJpZGVcbiAgfVxuXG4gIHByb3RlY3RlZCBhZnRlclJlY29yZFJlYWQocmVjb3JkOiBDYXRhbG9nUmVjb3JkKTogQ2F0YWxvZ1JlY29yZCB7XG4gICAgZnVuY3Rpb24gZml4TGFuZ3VhZ2VzKHRhcmdldDogeyB0cmFuc2xhdGlvbnM/OiBNb2RlbFRyYW5zbGF0aW9ucyB9KSB7XG4gICAgICBpZiAoISgndHJhbnNsYXRpb25zJyBpbiB0YXJnZXQpKSByZXR1cm5cbiAgICAgIGZvciAoY29uc3QgZmllbGROYW1lIGluIHRhcmdldC50cmFuc2xhdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZmllbGRUcmFuc2xhdGlvbnMgPSB0YXJnZXQudHJhbnNsYXRpb25zW2ZpZWxkTmFtZV0gPz8ge31cbiAgICAgICAgLy8gcmVtb3ZlIHJlZHVuZGFudCB0cmFuc2xhdGlvbnNcbiAgICAgICAgaWYgKHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UgaW4gZmllbGRUcmFuc2xhdGlvbnMpIHtcbiAgICAgICAgICBkZWxldGUgZmllbGRUcmFuc2xhdGlvbnNbcmVjb3JkLmRlZmF1bHRMYW5ndWFnZV1cbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgdHJhbnNsYXRlZCB2YWx1ZXMgaWYgdGhleSBoYXZlIG5vIHRyYW5zbGF0aW9uc1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRUcmFuc2xhdGlvbnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSB0YXJnZXQudHJhbnNsYXRpb25zW2ZpZWxkTmFtZV1cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCBsYW5ndWFnZXMgdGhhdCBoYXZlIHRyYW5zbGF0aW9ucyB0byB0aGUgcm9vdCBsYW5ndWFnZSBsaXN0XG4gICAgICAgIGZvciAoY29uc3QgbGFuZyBpbiBmaWVsZFRyYW5zbGF0aW9ucykge1xuICAgICAgICAgIGlmICghcmVjb3JkLm90aGVyTGFuZ3VhZ2VzLmluY2x1ZGVzKGxhbmcpKSB7XG4gICAgICAgICAgICByZWNvcmQub3RoZXJMYW5ndWFnZXMucHVzaChsYW5nKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaXhMYW5ndWFnZXMocmVjb3JkKVxuICAgIHJlY29yZC5rZXl3b3Jkcy5tYXAoZml4TGFuZ3VhZ2VzKVxuICAgIHJlY29yZC5vbmxpbmVSZXNvdXJjZXMubWFwKGZpeExhbmd1YWdlcylcbiAgICByZWNvcmQubGljZW5zZXMubWFwKGZpeExhbmd1YWdlcylcbiAgICByZWNvcmQubGVnYWxDb25zdHJhaW50cy5tYXAoZml4TGFuZ3VhZ2VzKVxuICAgIHJlY29yZC5zZWN1cml0eUNvbnN0cmFpbnRzLm1hcChmaXhMYW5ndWFnZXMpXG4gICAgcmVjb3JkLm90aGVyQ29uc3RyYWludHMubWFwKGZpeExhbmd1YWdlcylcbiAgICByZWNvcmQuY29udGFjdHMubWFwKChjKSA9PiBmaXhMYW5ndWFnZXMoYy5vcmdhbml6YXRpb24pKVxuICAgIHJlY29yZC5jb250YWN0c0ZvclJlc291cmNlLm1hcCgoYykgPT4gZml4TGFuZ3VhZ2VzKGMub3JnYW5pemF0aW9uKSlcbiAgICBmaXhMYW5ndWFnZXMocmVjb3JkLm93bmVyT3JnYW5pemF0aW9uKVxuICAgIGlmIChyZWNvcmQua2luZCA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICByZWNvcmQuc3BhdGlhbEV4dGVudHMubWFwKGZpeExhbmd1YWdlcylcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgZGVmYXVsdCBsYW5ndWFnZSBmcm9tIG90aGVyTGFuZ3VhZ2VzIGxpc3RcbiAgICBpZiAocmVjb3JkLm90aGVyTGFuZ3VhZ2VzLmluY2x1ZGVzKHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UpKSB7XG4gICAgICByZWNvcmQub3RoZXJMYW5ndWFnZXMgPSByZWNvcmQub3RoZXJMYW5ndWFnZXMuZmlsdGVyKFxuICAgICAgICAobGFuZykgPT4gbGFuZyAhPT0gcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRcbiAgfVxuXG4gIHJlYWRCYXNlUmVjb3JkKHJvb3RFbDogWG1sRWxlbWVudCwgdHI6IFJlY29yZFRyYW5zbGF0aW9ucyk6IENhdGFsb2dSZWNvcmQge1xuICAgIGNvbnN0IHVuaXF1ZUlkZW50aWZpZXIgPSB0aGlzLnJlYWRlcnNbJ3VuaXF1ZUlkZW50aWZpZXInXShyb290RWwsIHRyKVxuICAgIGNvbnN0IGtpbmQgPSB0aGlzLnJlYWRlcnNbJ2tpbmQnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IG93bmVyT3JnYW5pemF0aW9uID0gdGhpcy5yZWFkZXJzWydvd25lck9yZ2FuaXphdGlvbiddKHJvb3RFbCwgdHIpXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLnJlYWRlcnNbJ3RpdGxlJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCBhYnN0cmFjdCA9IHRoaXMucmVhZGVyc1snYWJzdHJhY3QnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IGNvbnRhY3RzID0gdGhpcy5yZWFkZXJzWydjb250YWN0cyddKHJvb3RFbCwgdHIpXG4gICAgY29uc3QgY29udGFjdHNGb3JSZXNvdXJjZSA9IHRoaXMucmVhZGVyc1snY29udGFjdHNGb3JSZXNvdXJjZSddKHJvb3RFbCwgdHIpXG4gICAgY29uc3QgcmVjb3JkVXBkYXRlZCA9IHRoaXMucmVhZGVyc1sncmVjb3JkVXBkYXRlZCddKHJvb3RFbCwgdHIpXG4gICAgY29uc3QgcmVjb3JkQ3JlYXRlZCA9IHRoaXMucmVhZGVyc1sncmVjb3JkQ3JlYXRlZCddKHJvb3RFbCwgdHIpXG4gICAgY29uc3QgcmVjb3JkUHVibGlzaGVkID0gdGhpcy5yZWFkZXJzWydyZWNvcmRQdWJsaXNoZWQnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IHJlc291cmNlQ3JlYXRlZCA9IHRoaXMucmVhZGVyc1sncmVzb3VyY2VDcmVhdGVkJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCByZXNvdXJjZVVwZGF0ZWQgPSB0aGlzLnJlYWRlcnNbJ3Jlc291cmNlVXBkYXRlZCddKHJvb3RFbCwgdHIpXG4gICAgY29uc3QgcmVzb3VyY2VQdWJsaXNoZWQgPSB0aGlzLnJlYWRlcnNbJ3Jlc291cmNlUHVibGlzaGVkJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCBrZXl3b3JkcyA9IHRoaXMucmVhZGVyc1sna2V5d29yZHMnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IHRvcGljcyA9IHRoaXMucmVhZGVyc1sndG9waWNzJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCBsZWdhbENvbnN0cmFpbnRzID0gdGhpcy5yZWFkZXJzWydsZWdhbENvbnN0cmFpbnRzJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCBvdGhlckNvbnN0cmFpbnRzID0gdGhpcy5yZWFkZXJzWydvdGhlckNvbnN0cmFpbnRzJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCBzZWN1cml0eUNvbnN0cmFpbnRzID0gdGhpcy5yZWFkZXJzWydzZWN1cml0eUNvbnN0cmFpbnRzJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCBsaWNlbnNlcyA9IHRoaXMucmVhZGVyc1snbGljZW5zZXMnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IG92ZXJ2aWV3cyA9IHRoaXMucmVhZGVyc1snb3ZlcnZpZXdzJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCBsYW5kaW5nUGFnZSA9IHRoaXMucmVhZGVyc1snbGFuZGluZ1BhZ2UnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IG9ubGluZVJlc291cmNlcyA9IHRoaXMucmVhZGVyc1snb25saW5lUmVzb3VyY2VzJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCBvdGhlckxhbmd1YWdlcyA9IHRoaXMucmVhZGVyc1snb3RoZXJMYW5ndWFnZXMnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IHRoaXMucmVhZGVyc1snZGVmYXVsdExhbmd1YWdlJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCByZXNvdXJjZUlkZW50aWZpZXIgPSB0aGlzLnJlYWRlcnNbJ3Jlc291cmNlSWRlbnRpZmllciddKHJvb3RFbCwgdHIpXG4gICAgY29uc3Qgc3BhdGlhbEV4dGVudHMgPSB0aGlzLnJlYWRlcnNbJ3NwYXRpYWxFeHRlbnRzJ10ocm9vdEVsLCB0cilcblxuICAgIHJldHVybiB7XG4gICAgICB1bmlxdWVJZGVudGlmaWVyLFxuICAgICAgLi4uKHJlc291cmNlSWRlbnRpZmllciAmJiB7IHJlc291cmNlSWRlbnRpZmllciB9KSxcbiAgICAgIGtpbmQsXG4gICAgICBvdGhlckxhbmd1YWdlcyxcbiAgICAgIGRlZmF1bHRMYW5ndWFnZSxcbiAgICAgIC4uLihyZWNvcmRDcmVhdGVkICYmIHsgcmVjb3JkQ3JlYXRlZCB9KSxcbiAgICAgIC4uLihyZWNvcmRQdWJsaXNoZWQgJiYgeyByZWNvcmRQdWJsaXNoZWQgfSksXG4gICAgICByZWNvcmRVcGRhdGVkLFxuICAgICAgLi4uKHJlc291cmNlQ3JlYXRlZCAmJiB7IHJlc291cmNlQ3JlYXRlZCB9KSxcbiAgICAgIC4uLihyZXNvdXJjZVVwZGF0ZWQgJiYgeyByZXNvdXJjZVVwZGF0ZWQgfSksXG4gICAgICAuLi4ocmVzb3VyY2VQdWJsaXNoZWQgJiYgeyByZXNvdXJjZVB1Ymxpc2hlZCB9KSxcbiAgICAgIHRpdGxlLFxuICAgICAgYWJzdHJhY3QsXG4gICAgICBvd25lck9yZ2FuaXphdGlvbixcbiAgICAgIGNvbnRhY3RzLFxuICAgICAgY29udGFjdHNGb3JSZXNvdXJjZSxcbiAgICAgIGtleXdvcmRzLFxuICAgICAgdG9waWNzLFxuICAgICAgbGljZW5zZXMsXG4gICAgICBsZWdhbENvbnN0cmFpbnRzLFxuICAgICAgc2VjdXJpdHlDb25zdHJhaW50cyxcbiAgICAgIG90aGVyQ29uc3RyYWludHMsXG4gICAgICBvdmVydmlld3MsXG4gICAgICBzcGF0aWFsRXh0ZW50cyxcbiAgICAgIG9ubGluZVJlc291cmNlcyxcbiAgICAgIHRyYW5zbGF0aW9uczogdHIsXG4gICAgICAuLi4obGFuZGluZ1BhZ2UgJiYgeyBsYW5kaW5nUGFnZSB9KSxcbiAgICB9IGFzIENhdGFsb2dSZWNvcmRcbiAgfVxuXG4gIGFzeW5jIHJlYWRSZWNvcmQoZG9jdW1lbnQ6IHN0cmluZyk6IFByb21pc2U8Q2F0YWxvZ1JlY29yZD4ge1xuICAgIGNvbnN0IGRvYyA9IHBhcnNlWG1sU3RyaW5nKGRvY3VtZW50KVxuICAgIGNvbnN0IHJvb3RFbCA9IGdldFJvb3RFbGVtZW50KGRvYylcblxuICAgIGNvbnN0IHRyOiBSZWNvcmRUcmFuc2xhdGlvbnMgPSB7fVxuICAgIGNvbnN0IGtpbmQgPSB0aGlzLnJlYWRlcnNbJ2tpbmQnXShyb290RWwsIHRyKSBhcyBSZWNvcmRLaW5kXG5cbiAgICBpZiAoa2luZCA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLnJlYWRlcnNbJ3N0YXR1cyddKHJvb3RFbCwgdHIpXG4gICAgICBjb25zdCBzcGF0aWFsUmVwcmVzZW50YXRpb24gPSB0aGlzLnJlYWRlcnNbJ3NwYXRpYWxSZXByZXNlbnRhdGlvbiddKFxuICAgICAgICByb290RWwsXG4gICAgICAgIHRyXG4gICAgICApXG4gICAgICBjb25zdCB0ZW1wb3JhbEV4dGVudHMgPSB0aGlzLnJlYWRlcnNbJ3RlbXBvcmFsRXh0ZW50cyddKHJvb3RFbCwgdHIpXG4gICAgICBjb25zdCBsaW5lYWdlID0gdGhpcy5yZWFkZXJzWydsaW5lYWdlJ10ocm9vdEVsLCB0cilcbiAgICAgIGNvbnN0IHVwZGF0ZUZyZXF1ZW5jeSA9IHRoaXMucmVhZGVyc1sndXBkYXRlRnJlcXVlbmN5J10ocm9vdEVsLCB0cilcblxuICAgICAgcmV0dXJuIHRoaXMuYWZ0ZXJSZWNvcmRSZWFkKHtcbiAgICAgICAgLi4udGhpcy5yZWFkQmFzZVJlY29yZChyb290RWwsIHRyKSxcbiAgICAgICAga2luZCxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBsaW5lYWdlLFxuICAgICAgICAuLi4oc3BhdGlhbFJlcHJlc2VudGF0aW9uICYmIHsgc3BhdGlhbFJlcHJlc2VudGF0aW9uIH0pLFxuICAgICAgICB0ZW1wb3JhbEV4dGVudHMsXG4gICAgICAgIHVwZGF0ZUZyZXF1ZW5jeSxcbiAgICAgICAgdHJhbnNsYXRpb25zOiB0cixcbiAgICAgIH0gYXMgRGF0YXNldFJlY29yZClcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICdyZXVzZScpIHtcbiAgICAgIGNvbnN0IGxpbmVhZ2UgPSB0aGlzLnJlYWRlcnNbJ2xpbmVhZ2UnXShyb290RWwsIHRyKVxuICAgICAgY29uc3QgdGVtcG9yYWxFeHRlbnRzID0gdGhpcy5yZWFkZXJzWyd0ZW1wb3JhbEV4dGVudHMnXShyb290RWwsIHRyKVxuICAgICAgY29uc3QgcmV1c2VUeXBlID0gdGhpcy5yZWFkZXJzWydyZXVzZVR5cGUnXShyb290RWwsIHRyKVxuXG4gICAgICByZXR1cm4gdGhpcy5hZnRlclJlY29yZFJlYWQoe1xuICAgICAgICAuLi50aGlzLnJlYWRCYXNlUmVjb3JkKHJvb3RFbCwgdHIpLFxuICAgICAgICBraW5kLFxuICAgICAgICBsaW5lYWdlLFxuICAgICAgICB0ZW1wb3JhbEV4dGVudHMsXG4gICAgICAgIHJldXNlVHlwZSxcbiAgICAgIH0gYXMgUmV1c2VSZWNvcmQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFmdGVyUmVjb3JkUmVhZCh7XG4gICAgICAgIC4uLnRoaXMucmVhZEJhc2VSZWNvcmQocm9vdEVsLCB0ciksXG4gICAgICAgIGtpbmQsXG4gICAgICB9IGFzIFNlcnZpY2VSZWNvcmQpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd3JpdGVSZWNvcmQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZT86IHN0cmluZ1xuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCByb290RWw6IFhtbEVsZW1lbnRcbiAgICBsZXQgZmllbGRDaGFuZ2VkOiAobmFtZTogc3RyaW5nKSA9PiBib29sZWFuXG4gICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxEb2MgPSBwYXJzZVhtbFN0cmluZyhyZWZlcmVuY2UpXG4gICAgICBjb25zdCBvcmlnaW5hbFJlY29yZCA9IGF3YWl0IHRoaXMucmVhZFJlY29yZChyZWZlcmVuY2UpXG4gICAgICByb290RWwgPSBnZXRSb290RWxlbWVudChvcmlnaW5hbERvYylcblxuICAgICAgZmllbGRDaGFuZ2VkID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZWNvcmQgIT09IG51bGxcbiAgICAgICAgICA/ICFpc0VxdWFsKHJlY29yZFtuYW1lXSwgb3JpZ2luYWxSZWNvcmRbbmFtZV0pXG4gICAgICAgICAgOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RFbCA9IGNyZWF0ZUVsZW1lbnQoJ2dtZDpNRF9NZXRhZGF0YScpKClcbiAgICAgIGZpZWxkQ2hhbmdlZCA9ICgpID0+IHRydWVcbiAgICB9XG5cbiAgICBmaWVsZENoYW5nZWQoJ3VuaXF1ZUlkZW50aWZpZXInKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWyd1bmlxdWVJZGVudGlmaWVyJ10ocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCdyZXVzZVR5cGUnKSAmJiB0aGlzLndyaXRlcnNbJ3JldXNlVHlwZSddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgna2luZCcpICYmIHRoaXMud3JpdGVyc1sna2luZCddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgnZGVmYXVsdExhbmd1YWdlJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snZGVmYXVsdExhbmd1YWdlJ10ocmVjb3JkLCByb290RWwpXG5cbiAgICBmaWVsZENoYW5nZWQoJ2NvbnRhY3RzJykgJiYgdGhpcy53cml0ZXJzWydjb250YWN0cyddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgnb3duZXJPcmdhbml6YXRpb24nKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydvd25lck9yZ2FuaXphdGlvbiddKHJlY29yZCwgcm9vdEVsKVxuXG4gICAgZmllbGRDaGFuZ2VkKCdyZWNvcmRVcGRhdGVkJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sncmVjb3JkVXBkYXRlZCddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgncmVjb3JkQ3JlYXRlZCcpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ3JlY29yZENyZWF0ZWQnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ3JlY29yZFB1Ymxpc2hlZCcpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ3JlY29yZFB1Ymxpc2hlZCddKHJlY29yZCwgcm9vdEVsKVxuXG4gICAgZmllbGRDaGFuZ2VkKCd0aXRsZScpICYmIHRoaXMud3JpdGVyc1sndGl0bGUnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ2Fic3RyYWN0JykgJiYgdGhpcy53cml0ZXJzWydhYnN0cmFjdCddKHJlY29yZCwgcm9vdEVsKVxuXG4gICAgZmllbGRDaGFuZ2VkKCdyZXNvdXJjZUNyZWF0ZWQnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydyZXNvdXJjZUNyZWF0ZWQnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ3Jlc291cmNlUHVibGlzaGVkJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sncmVzb3VyY2VQdWJsaXNoZWQnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ3Jlc291cmNlVXBkYXRlZCcpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ3Jlc291cmNlVXBkYXRlZCddKHJlY29yZCwgcm9vdEVsKVxuXG4gICAgZmllbGRDaGFuZ2VkKCdjb250YWN0c0ZvclJlc291cmNlJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snY29udGFjdHNGb3JSZXNvdXJjZSddKHJlY29yZCwgcm9vdEVsKVxuXG4gICAgZmllbGRDaGFuZ2VkKCdrZXl3b3JkcycpICYmIHRoaXMud3JpdGVyc1sna2V5d29yZHMnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ3RvcGljcycpICYmIHRoaXMud3JpdGVyc1sndG9waWNzJ10ocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCdsZWdhbENvbnN0cmFpbnRzJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snbGVnYWxDb25zdHJhaW50cyddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgnc2VjdXJpdHlDb25zdHJhaW50cycpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ3NlY3VyaXR5Q29uc3RyYWludHMnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ2xpY2Vuc2VzJykgJiYgdGhpcy53cml0ZXJzWydsaWNlbnNlcyddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgnb3RoZXJDb25zdHJhaW50cycpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ290aGVyQ29uc3RyYWludHMnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ29ubGluZVJlc291cmNlcycpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ29ubGluZVJlc291cmNlcyddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgncmVzb3VyY2VJZGVudGlmaWVyJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sncmVzb3VyY2VJZGVudGlmaWVyJ10ocmVjb3JkLCByb290RWwpXG5cbiAgICBpZiAocmVjb3JkLmtpbmQgPT09ICdkYXRhc2V0Jykge1xuICAgICAgZmllbGRDaGFuZ2VkKCdzdGF0dXMnKSAmJiB0aGlzLndyaXRlcnNbJ3N0YXR1cyddKHJlY29yZCwgcm9vdEVsKVxuICAgICAgZmllbGRDaGFuZ2VkKCd1cGRhdGVGcmVxdWVuY3knKSAmJlxuICAgICAgICB0aGlzLndyaXRlcnNbJ3VwZGF0ZUZyZXF1ZW5jeSddKHJlY29yZCwgcm9vdEVsKVxuICAgICAgZmllbGRDaGFuZ2VkKCdzcGF0aWFsUmVwcmVzZW50YXRpb24nKSAmJlxuICAgICAgICB0aGlzLndyaXRlcnNbJ3NwYXRpYWxSZXByZXNlbnRhdGlvbiddKHJlY29yZCwgcm9vdEVsKVxuICAgICAgZmllbGRDaGFuZ2VkKCdvdmVydmlld3MnKSAmJiB0aGlzLndyaXRlcnNbJ292ZXJ2aWV3cyddKHJlY29yZCwgcm9vdEVsKVxuICAgICAgZmllbGRDaGFuZ2VkKCd0ZW1wb3JhbEV4dGVudHMnKSAmJlxuICAgICAgICB0aGlzLndyaXRlcnNbJ3RlbXBvcmFsRXh0ZW50cyddKHJlY29yZCwgcm9vdEVsKVxuICAgICAgZmllbGRDaGFuZ2VkKCdzcGF0aWFsRXh0ZW50cycpICYmXG4gICAgICAgIHRoaXMud3JpdGVyc1snc3BhdGlhbEV4dGVudHMnXShyZWNvcmQsIHJvb3RFbClcbiAgICAgIGZpZWxkQ2hhbmdlZCgnbGluZWFnZScpICYmIHRoaXMud3JpdGVyc1snbGluZWFnZSddKHJlY29yZCwgcm9vdEVsKVxuICAgIH1cblxuICAgIGZpZWxkQ2hhbmdlZCgnb3RoZXJMYW5ndWFnZXMnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydvdGhlckxhbmd1YWdlcyddKHJlY29yZCwgcm9vdEVsKVxuXG4gICAgdGhpcy5iZWZvcmVEb2N1bWVudENyZWF0aW9uKHJvb3RFbClcblxuICAgIGNvbnN0IG5ld0RvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQocm9vdEVsKVxuICAgIHJldHVybiB4bWxUb1N0cmluZyhuZXdEb2N1bWVudClcbiAgfVxufVxuIl19
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvMTkxMzkuY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvbWV0YWRhdGEtY29udmVydGVyL3NyYy9saWIvaXNvMTkxMzkvaXNvMTkxMzkuY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDeEQsT0FBTyxFQUNMLGNBQWMsRUFDZCxhQUFhLEVBQ2IsY0FBYyxFQUNkLGNBQWMsRUFDZCxXQUFXLEdBQ1osTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsWUFBWSxFQUNaLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsU0FBUyxFQUNULG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUNMLGFBQWEsRUFDYixhQUFhLEVBQ2Isd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsYUFBYSxFQUNiLFNBQVMsRUFDVCxjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLGFBQWEsRUFD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QUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDM0MsQ0FBQztRQUNELFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztZQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRWhELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUVuQyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDMUMsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDakMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2F0YWxvZ1JlY29yZCxcbiAgQ2F0YWxvZ1JlY29yZEtleXMsXG4gIERhdGFzZXRSZWNvcmQsXG4gIE1vZGVsVHJhbnNsYXRpb25zLFxuICBSZWNvcmRLaW5kLFxuICBSZWNvcmRUcmFuc2xhdGlvbnMsXG4gIFJldXNlUmVjb3JkLFxuICBTZXJ2aWNlUmVjb3JkLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQgeyBYbWxFbGVtZW50IH0gZnJvbSAnQHJncm92ZS9wYXJzZS14bWwnXG5pbXBvcnQgeyBCYXNlQ29udmVydGVyIH0gZnJvbSAnLi4vYmFzZS5jb252ZXJ0ZXInXG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnLi4vY29udmVydC11dGlscydcbmltcG9ydCB7IGlzRmllbGRUcmFuc2xhdGFibGUgfSBmcm9tICcuLi90cmFuc2xhdGUtdXRpbHMnXG5pbXBvcnQge1xuICBjcmVhdGVEb2N1bWVudCxcbiAgY3JlYXRlRWxlbWVudCxcbiAgZ2V0Um9vdEVsZW1lbnQsXG4gIHBhcnNlWG1sU3RyaW5nLFxuICB4bWxUb1N0cmluZyxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHtcbiAgcmVhZEFic3RyYWN0LFxuICByZWFkQ29udGFjdHMsXG4gIHJlYWRDb250YWN0c0ZvclJlc291cmNlLFxuICByZWFkRGVmYXVsdExhbmd1YWdlLFxuICByZWFkSXNvVG9waWNzLFxuICByZWFkS2V5d29yZHMsXG4gIHJlYWRLaW5kLFxuICByZWFkTGVnYWxDb25zdHJhaW50cyxcbiAgcmVhZExpY2Vuc2VzLFxuICByZWFkTGluZWFnZSxcbiAgcmVhZE9ubGluZVJlc291cmNlcyxcbiAgcmVhZE90aGVyQ29uc3RyYWludHMsXG4gIHJlYWRPdGhlckxhbmd1YWdlcyxcbiAgcmVhZE92ZXJ2aWV3cyxcbiAgcmVhZE93bmVyT3JnYW5pemF0aW9uLFxuICByZWFkUmVjb3JkVXBkYXRlZCxcbiAgcmVhZFJlc291cmNlQ3JlYXRlZCxcbiAgcmVhZFJlc291cmNlSWRlbnRpZmllcixcbiAgcmVhZFJlc291cmNlUHVibGlzaGVkLFxuICByZWFkUmVzb3VyY2VVcGRhdGVkLFxuICByZWFkUmV1c2VUeXBlLFxuICByZWFkU2VjdXJpdHlDb25zdHJhaW50cyxcbiAgcmVhZFNwYXRpYWxFeHRlbnRzLFxuICByZWFkU3BhdGlhbFJlcHJlc2VudGF0aW9uLFxuICByZWFkU3RhdHVzLFxuICByZWFkVGVtcG9yYWxFeHRlbnRzLFxuICByZWFkVGl0bGUsXG4gIHJlYWRVbmlxdWVJZGVudGlmaWVyLFxuICByZWFkVXBkYXRlRnJlcXVlbmN5LFxufSBmcm9tICcuL3JlYWQtcGFydHMnXG5pbXBvcnQge1xuICB3cml0ZUFic3RyYWN0LFxuICB3cml0ZUNvbnRhY3RzLFxuICB3cml0ZUNvbnRhY3RzRm9yUmVzb3VyY2UsXG4gIHdyaXRlRGVmYXVsdExhbmd1YWdlLFxuICB3cml0ZUdyYXBoaWNPdmVydmlld3MsXG4gIHdyaXRlS2V5d29yZHMsXG4gIHdyaXRlS2luZCxcbiAgd3JpdGVMYW5ndWFnZXMsXG4gIHdyaXRlTGVnYWxDb25zdHJhaW50cyxcbiAgd3JpdGVMaWNlbnNlcyxcbiAgd3JpdGVMaW5lYWdlLFxuICB3cml0ZU9ubGluZVJlc291cmNlcyxcbiAgd3JpdGVPdGhlckNvbnN0cmFpbnRzLFxuICB3cml0ZVJlY29yZFVwZGF0ZWQsXG4gIHdyaXRlUmVzb3VyY2VDcmVhdGVkLFxuICB3cml0ZVJlc291cmNlSWRlbnRpZmllcixcbiAgd3JpdGVSZXNvdXJjZVB1Ymxpc2hlZCxcbiAgd3JpdGVSZXNvdXJjZVVwZGF0ZWQsXG4gIHdyaXRlUmV1c2VUeXBlLFxuICB3cml0ZVNlY3VyaXR5Q29uc3RyYWludHMsXG4gIHdyaXRlU3BhdGlhbEV4dGVudHMsXG4gIHdyaXRlU3BhdGlhbFJlcHJlc2VudGF0aW9uLFxuICB3cml0ZVN0YXR1cyxcbiAgd3JpdGVUZW1wb3JhbEV4dGVudHMsXG4gIHdyaXRlVGl0bGUsXG4gIHdyaXRlVG9waWNzLFxuICB3cml0ZVVuaXF1ZUlkZW50aWZpZXIsXG4gIHdyaXRlVXBkYXRlRnJlcXVlbmN5LFxufSBmcm9tICcuL3dyaXRlLXBhcnRzJ1xuXG5leHBvcnQgY2xhc3MgSXNvMTkxMzlDb252ZXJ0ZXIgZXh0ZW5kcyBCYXNlQ29udmVydGVyPHN0cmluZz4ge1xuICBwcm90ZWN0ZWQgcmVhZGVyczogUmVjb3JkPFxuICAgIENhdGFsb2dSZWNvcmRLZXlzLFxuICAgIChyb290RWw6IFhtbEVsZW1lbnQsIHRyYW5zbGF0aW9uczogUmVjb3JkVHJhbnNsYXRpb25zKSA9PiB1bmtub3duXG4gID4gPSB7XG4gICAgdW5pcXVlSWRlbnRpZmllcjogcmVhZFVuaXF1ZUlkZW50aWZpZXIsXG4gICAga2luZDogcmVhZEtpbmQsXG4gICAgb3duZXJPcmdhbml6YXRpb246IHJlYWRPd25lck9yZ2FuaXphdGlvbixcbiAgICByZWNvcmRVcGRhdGVkOiByZWFkUmVjb3JkVXBkYXRlZCxcbiAgICByZWNvcmRDcmVhdGVkOiAoKSA9PiB1bmRlZmluZWQsIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSVNPMTkxMzlcbiAgICByZWNvcmRQdWJsaXNoZWQ6ICgpID0+IHVuZGVmaW5lZCwgLy8gbm90IHN1cHBvcnRlZCBpbiBJU08xOTEzOVxuICAgIHJlc291cmNlSWRlbnRpZmllcjogcmVhZFJlc291cmNlSWRlbnRpZmllcixcbiAgICByZXNvdXJjZVVwZGF0ZWQ6IHJlYWRSZXNvdXJjZVVwZGF0ZWQsXG4gICAgcmVzb3VyY2VDcmVhdGVkOiByZWFkUmVzb3VyY2VDcmVhdGVkLFxuICAgIHJlc291cmNlUHVibGlzaGVkOiByZWFkUmVzb3VyY2VQdWJsaXNoZWQsXG4gICAgcmV1c2VUeXBlOiByZWFkUmV1c2VUeXBlLFxuICAgIHRpdGxlOiByZWFkVGl0bGUsXG4gICAgYWJzdHJhY3Q6IHJlYWRBYnN0cmFjdCxcbiAgICBjb250YWN0czogcmVhZENvbnRhY3RzLFxuICAgIGNvbnRhY3RzRm9yUmVzb3VyY2U6IHJlYWRDb250YWN0c0ZvclJlc291cmNlLFxuICAgIGtleXdvcmRzOiByZWFkS2V5d29yZHMsXG4gICAgdG9waWNzOiByZWFkSXNvVG9waWNzLFxuICAgIGxpY2Vuc2VzOiByZWFkTGljZW5zZXMsXG4gICAgbGVnYWxDb25zdHJhaW50czogcmVhZExlZ2FsQ29uc3RyYWludHMsXG4gICAgc2VjdXJpdHlDb25zdHJhaW50czogcmVhZFNlY3VyaXR5Q29uc3RyYWludHMsXG4gICAgb3RoZXJDb25zdHJhaW50czogcmVhZE90aGVyQ29uc3RyYWludHMsXG4gICAgc3RhdHVzOiByZWFkU3RhdHVzLFxuICAgIHVwZGF0ZUZyZXF1ZW5jeTogcmVhZFVwZGF0ZUZyZXF1ZW5jeSxcbiAgICBzcGF0aWFsUmVwcmVzZW50YXRpb246IHJlYWRTcGF0aWFsUmVwcmVzZW50YXRpb24sXG4gICAgb3ZlcnZpZXdzOiByZWFkT3ZlcnZpZXdzLFxuICAgIGxpbmVhZ2U6IHJlYWRMaW5lYWdlLFxuICAgIG9ubGluZVJlc291cmNlczogcmVhZE9ubGluZVJlc291cmNlcyxcbiAgICB0ZW1wb3JhbEV4dGVudHM6IHJlYWRUZW1wb3JhbEV4dGVudHMsXG4gICAgc3BhdGlhbEV4dGVudHM6IHJlYWRTcGF0aWFsRXh0ZW50cyxcbiAgICBvdGhlckxhbmd1YWdlczogcmVhZE90aGVyTGFuZ3VhZ2VzLFxuICAgIGRlZmF1bHRMYW5ndWFnZTogcmVhZERlZmF1bHRMYW5ndWFnZSxcbiAgICAvLyBUT0RPXG4gICAgZXh0cmFzOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgbGFuZGluZ1BhZ2U6ICgpID0+IHVuZGVmaW5lZCxcbiAgICB0cmFuc2xhdGlvbnM6ICgpID0+IHVuZGVmaW5lZCxcbiAgfVxuXG4gIHByb3RlY3RlZCB3cml0ZXJzOiBSZWNvcmQ8XG4gICAgQ2F0YWxvZ1JlY29yZEtleXMsXG4gICAgKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSA9PiB2b2lkXG4gID4gPSB7XG4gICAgdW5pcXVlSWRlbnRpZmllcjogd3JpdGVVbmlxdWVJZGVudGlmaWVyLFxuICAgIGtpbmQ6IHdyaXRlS2luZCxcbiAgICBvd25lck9yZ2FuaXphdGlvbjogKCkgPT4gdW5kZWZpbmVkLCAvLyBmaXhtZTogZmluZCBhIHdheSB0byBzdG9yZSB0aGlzIHZhbHVlIHByb3Blcmx5XG4gICAgcmVjb3JkVXBkYXRlZDogd3JpdGVSZWNvcmRVcGRhdGVkLFxuICAgIHJlY29yZENyZWF0ZWQ6ICgpID0+IHVuZGVmaW5lZCwgLy8gbm90IHN1cHBvcnRlZCBpbiBJU08xOTEzOVxuICAgIHJlY29yZFB1Ymxpc2hlZDogKCkgPT4gdW5kZWZpbmVkLCAvLyBub3Qgc3VwcG9ydGVkIGluIElTTzE5MTM5XG4gICAgcmVzb3VyY2VJZGVudGlmaWVyOiB3cml0ZVJlc291cmNlSWRlbnRpZmllcixcbiAgICByZXNvdXJjZVVwZGF0ZWQ6IHdyaXRlUmVzb3VyY2VVcGRhdGVkLFxuICAgIHJlc291cmNlQ3JlYXRlZDogd3JpdGVSZXNvdXJjZUNyZWF0ZWQsXG4gICAgcmVzb3VyY2VQdWJsaXNoZWQ6IHdyaXRlUmVzb3VyY2VQdWJsaXNoZWQsXG4gICAgcmV1c2VUeXBlOiB3cml0ZVJldXNlVHlwZSxcbiAgICB0aXRsZTogd3JpdGVUaXRsZSxcbiAgICBhYnN0cmFjdDogd3JpdGVBYnN0cmFjdCxcbiAgICBjb250YWN0czogd3JpdGVDb250YWN0cyxcbiAgICBjb250YWN0c0ZvclJlc291cmNlOiB3cml0ZUNvbnRhY3RzRm9yUmVzb3VyY2UsXG4gICAga2V5d29yZHM6IHdyaXRlS2V5d29yZHMsXG4gICAgdG9waWNzOiB3cml0ZVRvcGljcyxcbiAgICBsaWNlbnNlczogd3JpdGVMaWNlbnNlcyxcbiAgICBsZWdhbENvbnN0cmFpbnRzOiB3cml0ZUxlZ2FsQ29uc3RyYWludHMsXG4gICAgc2VjdXJpdHlDb25zdHJhaW50czogd3JpdGVTZWN1cml0eUNvbnN0cmFpbnRzLFxuICAgIG90aGVyQ29uc3RyYWludHM6IHdyaXRlT3RoZXJDb25zdHJhaW50cyxcbiAgICBzdGF0dXM6IHdyaXRlU3RhdHVzLFxuICAgIHVwZGF0ZUZyZXF1ZW5jeTogd3JpdGVVcGRhdGVGcmVxdWVuY3ksXG4gICAgc3BhdGlhbFJlcHJlc2VudGF0aW9uOiB3cml0ZVNwYXRpYWxSZXByZXNlbnRhdGlvbixcbiAgICBvdmVydmlld3M6IHdyaXRlR3JhcGhpY092ZXJ2aWV3cyxcbiAgICBsaW5lYWdlOiB3cml0ZUxpbmVhZ2UsXG4gICAgb25saW5lUmVzb3VyY2VzOiB3cml0ZU9ubGluZVJlc291cmNlcyxcbiAgICB0ZW1wb3JhbEV4dGVudHM6IHdyaXRlVGVtcG9yYWxFeHRlbnRzLFxuICAgIHNwYXRpYWxFeHRlbnRzOiB3cml0ZVNwYXRpYWxFeHRlbnRzLFxuICAgIG90aGVyTGFuZ3VhZ2VzOiB3cml0ZUxhbmd1YWdlcyxcbiAgICBkZWZhdWx0TGFuZ3VhZ2U6IHdyaXRlRGVmYXVsdExhbmd1YWdlLFxuICAgIC8vIFRPRE9cbiAgICBleHRyYXM6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBsYW5kaW5nUGFnZTogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHRyYW5zbGF0aW9uczogKCkgPT4gdW5kZWZpbmVkLCAvLyBOQi4gdHJhbnNsYXRpb25zIGFyZSBoYW5kbGVkIGluIHByb3BlcnRpZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBiZWZvcmVEb2N1bWVudENyZWF0aW9uKHJvb3RFbGVtZW50OiBYbWxFbGVtZW50KSB7XG4gICAgLy8gdG8gb3ZlcnJpZGVcbiAgfVxuXG4gIHByb3RlY3RlZCBhZnRlclJlY29yZFJlYWQocmVjb3JkOiBDYXRhbG9nUmVjb3JkKTogQ2F0YWxvZ1JlY29yZCB7XG4gICAgZnVuY3Rpb24gZml4TGFuZ3VhZ2VzKHRhcmdldDogeyB0cmFuc2xhdGlvbnM/OiBNb2RlbFRyYW5zbGF0aW9ucyB9KSB7XG4gICAgICBpZiAoISgndHJhbnNsYXRpb25zJyBpbiB0YXJnZXQpKSByZXR1cm5cbiAgICAgIGZvciAoY29uc3QgZmllbGROYW1lIGluIHRhcmdldC50cmFuc2xhdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZmllbGRUcmFuc2xhdGlvbnMgPSB0YXJnZXQudHJhbnNsYXRpb25zW2ZpZWxkTmFtZV0gPz8ge31cbiAgICAgICAgLy8gcmVtb3ZlIHJlZHVuZGFudCB0cmFuc2xhdGlvbnNcbiAgICAgICAgaWYgKHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UgaW4gZmllbGRUcmFuc2xhdGlvbnMpIHtcbiAgICAgICAgICBkZWxldGUgZmllbGRUcmFuc2xhdGlvbnNbcmVjb3JkLmRlZmF1bHRMYW5ndWFnZV1cbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgdHJhbnNsYXRlZCB2YWx1ZXMgaWYgdGhleSBoYXZlIG5vIHRyYW5zbGF0aW9uc1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRUcmFuc2xhdGlvbnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSB0YXJnZXQudHJhbnNsYXRpb25zW2ZpZWxkTmFtZV1cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCBsYW5ndWFnZXMgdGhhdCBoYXZlIHRyYW5zbGF0aW9ucyB0byB0aGUgcm9vdCBsYW5ndWFnZSBsaXN0XG4gICAgICAgIGZvciAoY29uc3QgbGFuZyBpbiBmaWVsZFRyYW5zbGF0aW9ucykge1xuICAgICAgICAgIGlmICghcmVjb3JkLm90aGVyTGFuZ3VhZ2VzLmluY2x1ZGVzKGxhbmcpKSB7XG4gICAgICAgICAgICByZWNvcmQub3RoZXJMYW5ndWFnZXMucHVzaChsYW5nKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZpeExhbmd1YWdlcyhyZWNvcmQpXG4gICAgcmVjb3JkLmtleXdvcmRzLm1hcChmaXhMYW5ndWFnZXMpXG4gICAgcmVjb3JkLm9ubGluZVJlc291cmNlcy5tYXAoZml4TGFuZ3VhZ2VzKVxuICAgIHJlY29yZC5saWNlbnNlcy5tYXAoZml4TGFuZ3VhZ2VzKVxuICAgIHJlY29yZC5sZWdhbENvbnN0cmFpbnRzLm1hcChmaXhMYW5ndWFnZXMpXG4gICAgcmVjb3JkLnNlY3VyaXR5Q29uc3RyYWludHMubWFwKGZpeExhbmd1YWdlcylcbiAgICByZWNvcmQub3RoZXJDb25zdHJhaW50cy5tYXAoZml4TGFuZ3VhZ2VzKVxuICAgIHJlY29yZC5jb250YWN0cy5tYXAoKGMpID0+IGZpeExhbmd1YWdlcyhjLm9yZ2FuaXphdGlvbikpXG4gICAgcmVjb3JkLmNvbnRhY3RzRm9yUmVzb3VyY2UubWFwKChjKSA9PiBmaXhMYW5ndWFnZXMoYy5vcmdhbml6YXRpb24pKVxuICAgIGZpeExhbmd1YWdlcyhyZWNvcmQub3duZXJPcmdhbml6YXRpb24pXG4gICAgaWYgKHJlY29yZC5raW5kID09PSAnZGF0YXNldCcpIHtcbiAgICAgIHJlY29yZC5zcGF0aWFsRXh0ZW50cy5tYXAoZml4TGFuZ3VhZ2VzKVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkZWZhdWx0IGxhbmd1YWdlIGZyb20gb3RoZXJMYW5ndWFnZXMgbGlzdFxuICAgIGlmIChyZWNvcmQub3RoZXJMYW5ndWFnZXMuaW5jbHVkZXMocmVjb3JkLmRlZmF1bHRMYW5ndWFnZSkpIHtcbiAgICAgIHJlY29yZC5vdGhlckxhbmd1YWdlcyA9IHJlY29yZC5vdGhlckxhbmd1YWdlcy5maWx0ZXIoXG4gICAgICAgIChsYW5nKSA9PiBsYW5nICE9PSByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZFxuICB9XG5cbiAgcmVhZEJhc2VSZWNvcmQocm9vdEVsOiBYbWxFbGVtZW50LCB0cjogUmVjb3JkVHJhbnNsYXRpb25zKTogQ2F0YWxvZ1JlY29yZCB7XG4gICAgY29uc3QgdW5pcXVlSWRlbnRpZmllciA9IHRoaXMucmVhZGVyc1sndW5pcXVlSWRlbnRpZmllciddKHJvb3RFbCwgdHIpXG4gICAgY29uc3Qga2luZCA9IHRoaXMucmVhZGVyc1sna2luZCddKHJvb3RFbCwgdHIpXG4gICAgY29uc3Qgb3duZXJPcmdhbml6YXRpb24gPSB0aGlzLnJlYWRlcnNbJ293bmVyT3JnYW5pemF0aW9uJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMucmVhZGVyc1sndGl0bGUnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IGFic3RyYWN0ID0gdGhpcy5yZWFkZXJzWydhYnN0cmFjdCddKHJvb3RFbCwgdHIpXG4gICAgY29uc3QgY29udGFjdHMgPSB0aGlzLnJlYWRlcnNbJ2NvbnRhY3RzJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCBjb250YWN0c0ZvclJlc291cmNlID0gdGhpcy5yZWFkZXJzWydjb250YWN0c0ZvclJlc291cmNlJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCByZWNvcmRVcGRhdGVkID0gdGhpcy5yZWFkZXJzWydyZWNvcmRVcGRhdGVkJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCByZWNvcmRDcmVhdGVkID0gdGhpcy5yZWFkZXJzWydyZWNvcmRDcmVhdGVkJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCByZWNvcmRQdWJsaXNoZWQgPSB0aGlzLnJlYWRlcnNbJ3JlY29yZFB1Ymxpc2hlZCddKHJvb3RFbCwgdHIpXG4gICAgY29uc3QgcmVzb3VyY2VDcmVhdGVkID0gdGhpcy5yZWFkZXJzWydyZXNvdXJjZUNyZWF0ZWQnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IHJlc291cmNlVXBkYXRlZCA9IHRoaXMucmVhZGVyc1sncmVzb3VyY2VVcGRhdGVkJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCByZXNvdXJjZVB1Ymxpc2hlZCA9IHRoaXMucmVhZGVyc1sncmVzb3VyY2VQdWJsaXNoZWQnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IGtleXdvcmRzID0gdGhpcy5yZWFkZXJzWydrZXl3b3JkcyddKHJvb3RFbCwgdHIpXG4gICAgY29uc3QgdG9waWNzID0gdGhpcy5yZWFkZXJzWyd0b3BpY3MnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IGxlZ2FsQ29uc3RyYWludHMgPSB0aGlzLnJlYWRlcnNbJ2xlZ2FsQ29uc3RyYWludHMnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IG90aGVyQ29uc3RyYWludHMgPSB0aGlzLnJlYWRlcnNbJ290aGVyQ29uc3RyYWludHMnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IHNlY3VyaXR5Q29uc3RyYWludHMgPSB0aGlzLnJlYWRlcnNbJ3NlY3VyaXR5Q29uc3RyYWludHMnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IGxpY2Vuc2VzID0gdGhpcy5yZWFkZXJzWydsaWNlbnNlcyddKHJvb3RFbCwgdHIpXG4gICAgY29uc3Qgb3ZlcnZpZXdzID0gdGhpcy5yZWFkZXJzWydvdmVydmlld3MnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IGxhbmRpbmdQYWdlID0gdGhpcy5yZWFkZXJzWydsYW5kaW5nUGFnZSddKHJvb3RFbCwgdHIpXG4gICAgY29uc3Qgb25saW5lUmVzb3VyY2VzID0gdGhpcy5yZWFkZXJzWydvbmxpbmVSZXNvdXJjZXMnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IG90aGVyTGFuZ3VhZ2VzID0gdGhpcy5yZWFkZXJzWydvdGhlckxhbmd1YWdlcyddKHJvb3RFbCwgdHIpXG4gICAgY29uc3QgZGVmYXVsdExhbmd1YWdlID0gdGhpcy5yZWFkZXJzWydkZWZhdWx0TGFuZ3VhZ2UnXShyb290RWwsIHRyKVxuICAgIGNvbnN0IHJlc291cmNlSWRlbnRpZmllciA9IHRoaXMucmVhZGVyc1sncmVzb3VyY2VJZGVudGlmaWVyJ10ocm9vdEVsLCB0cilcbiAgICBjb25zdCBzcGF0aWFsRXh0ZW50cyA9IHRoaXMucmVhZGVyc1snc3BhdGlhbEV4dGVudHMnXShyb290RWwsIHRyKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICAuLi4ocmVzb3VyY2VJZGVudGlmaWVyICYmIHsgcmVzb3VyY2VJZGVudGlmaWVyIH0pLFxuICAgICAga2luZCxcbiAgICAgIG90aGVyTGFuZ3VhZ2VzLFxuICAgICAgZGVmYXVsdExhbmd1YWdlLFxuICAgICAgLi4uKHJlY29yZENyZWF0ZWQgJiYgeyByZWNvcmRDcmVhdGVkIH0pLFxuICAgICAgLi4uKHJlY29yZFB1Ymxpc2hlZCAmJiB7IHJlY29yZFB1Ymxpc2hlZCB9KSxcbiAgICAgIHJlY29yZFVwZGF0ZWQsXG4gICAgICAuLi4ocmVzb3VyY2VDcmVhdGVkICYmIHsgcmVzb3VyY2VDcmVhdGVkIH0pLFxuICAgICAgLi4uKHJlc291cmNlVXBkYXRlZCAmJiB7IHJlc291cmNlVXBkYXRlZCB9KSxcbiAgICAgIC4uLihyZXNvdXJjZVB1Ymxpc2hlZCAmJiB7IHJlc291cmNlUHVibGlzaGVkIH0pLFxuICAgICAgdGl0bGUsXG4gICAgICBhYnN0cmFjdCxcbiAgICAgIG93bmVyT3JnYW5pemF0aW9uLFxuICAgICAgY29udGFjdHMsXG4gICAgICBjb250YWN0c0ZvclJlc291cmNlLFxuICAgICAga2V5d29yZHMsXG4gICAgICB0b3BpY3MsXG4gICAgICBsaWNlbnNlcyxcbiAgICAgIGxlZ2FsQ29uc3RyYWludHMsXG4gICAgICBzZWN1cml0eUNvbnN0cmFpbnRzLFxuICAgICAgb3RoZXJDb25zdHJhaW50cyxcbiAgICAgIG92ZXJ2aWV3cyxcbiAgICAgIHNwYXRpYWxFeHRlbnRzLFxuICAgICAgb25saW5lUmVzb3VyY2VzLFxuICAgICAgdHJhbnNsYXRpb25zOiB0cixcbiAgICAgIC4uLihsYW5kaW5nUGFnZSAmJiB7IGxhbmRpbmdQYWdlIH0pLFxuICAgIH0gYXMgQ2F0YWxvZ1JlY29yZFxuICB9XG5cbiAgYXN5bmMgcmVhZFJlY29yZChkb2N1bWVudDogc3RyaW5nKTogUHJvbWlzZTxDYXRhbG9nUmVjb3JkPiB7XG4gICAgY29uc3QgZG9jID0gcGFyc2VYbWxTdHJpbmcoZG9jdW1lbnQpXG4gICAgY29uc3Qgcm9vdEVsID0gZ2V0Um9vdEVsZW1lbnQoZG9jKVxuICAgIGNvbnN0IHRyOiBSZWNvcmRUcmFuc2xhdGlvbnMgPSB7fVxuICAgIGNvbnN0IGtpbmQgPSB0aGlzLnJlYWRlcnNbJ2tpbmQnXShyb290RWwsIHRyKSBhcyBSZWNvcmRLaW5kXG5cbiAgICBpZiAoa2luZCA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLnJlYWRlcnNbJ3N0YXR1cyddKHJvb3RFbCwgdHIpXG4gICAgICBjb25zdCBzcGF0aWFsUmVwcmVzZW50YXRpb24gPSB0aGlzLnJlYWRlcnNbJ3NwYXRpYWxSZXByZXNlbnRhdGlvbiddKFxuICAgICAgICByb290RWwsXG4gICAgICAgIHRyXG4gICAgICApXG4gICAgICBjb25zdCB0ZW1wb3JhbEV4dGVudHMgPSB0aGlzLnJlYWRlcnNbJ3RlbXBvcmFsRXh0ZW50cyddKHJvb3RFbCwgdHIpXG4gICAgICBjb25zdCBsaW5lYWdlID0gdGhpcy5yZWFkZXJzWydsaW5lYWdlJ10ocm9vdEVsLCB0cilcbiAgICAgIGNvbnN0IHVwZGF0ZUZyZXF1ZW5jeSA9IHRoaXMucmVhZGVyc1sndXBkYXRlRnJlcXVlbmN5J10ocm9vdEVsLCB0cilcblxuICAgICAgcmV0dXJuIHRoaXMuYWZ0ZXJSZWNvcmRSZWFkKHtcbiAgICAgICAgLi4udGhpcy5yZWFkQmFzZVJlY29yZChyb290RWwsIHRyKSxcbiAgICAgICAga2luZCxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBsaW5lYWdlLFxuICAgICAgICAuLi4oc3BhdGlhbFJlcHJlc2VudGF0aW9uICYmIHsgc3BhdGlhbFJlcHJlc2VudGF0aW9uIH0pLFxuICAgICAgICB0ZW1wb3JhbEV4dGVudHMsXG4gICAgICAgIHVwZGF0ZUZyZXF1ZW5jeSxcbiAgICAgICAgdHJhbnNsYXRpb25zOiB0cixcbiAgICAgIH0gYXMgRGF0YXNldFJlY29yZClcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICdyZXVzZScpIHtcbiAgICAgIGNvbnN0IGxpbmVhZ2UgPSB0aGlzLnJlYWRlcnNbJ2xpbmVhZ2UnXShyb290RWwsIHRyKVxuICAgICAgY29uc3QgdGVtcG9yYWxFeHRlbnRzID0gdGhpcy5yZWFkZXJzWyd0ZW1wb3JhbEV4dGVudHMnXShyb290RWwsIHRyKVxuICAgICAgY29uc3QgcmV1c2VUeXBlID0gdGhpcy5yZWFkZXJzWydyZXVzZVR5cGUnXShyb290RWwsIHRyKVxuXG4gICAgICByZXR1cm4gdGhpcy5hZnRlclJlY29yZFJlYWQoe1xuICAgICAgICAuLi50aGlzLnJlYWRCYXNlUmVjb3JkKHJvb3RFbCwgdHIpLFxuICAgICAgICBraW5kLFxuICAgICAgICBsaW5lYWdlLFxuICAgICAgICB0ZW1wb3JhbEV4dGVudHMsXG4gICAgICAgIHJldXNlVHlwZSxcbiAgICAgIH0gYXMgUmV1c2VSZWNvcmQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFmdGVyUmVjb3JkUmVhZCh7XG4gICAgICAgIC4uLnRoaXMucmVhZEJhc2VSZWNvcmQocm9vdEVsLCB0ciksXG4gICAgICAgIGtpbmQsXG4gICAgICB9IGFzIFNlcnZpY2VSZWNvcmQpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd3JpdGVSZWNvcmQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZT86IHN0cmluZ1xuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCByb290RWw6IFhtbEVsZW1lbnRcbiAgICBsZXQgZmllbGRDaGFuZ2VkOiAobmFtZTogc3RyaW5nKSA9PiBib29sZWFuXG4gICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgbGV0IGxhbmd1YWdlc0NoYW5nZWQ6IGJvb2xlYW5cbiAgICAgIGNvbnN0IG9yaWdpbmFsRG9jID0gcGFyc2VYbWxTdHJpbmcocmVmZXJlbmNlKVxuICAgICAgY29uc3Qgb3JpZ2luYWxSZWNvcmQgPSBhd2FpdCB0aGlzLnJlYWRSZWNvcmQocmVmZXJlbmNlKVxuICAgICAgcm9vdEVsID0gZ2V0Um9vdEVsZW1lbnQob3JpZ2luYWxEb2MpXG5cbiAgICAgIGZpZWxkQ2hhbmdlZCA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVjb3JkICE9PSBudWxsXG4gICAgICAgICAgPyAhaXNFcXVhbChyZWNvcmRbbmFtZV0sIG9yaWdpbmFsUmVjb3JkW25hbWVdKSB8fFxuICAgICAgICAgICAgICAobGFuZ3VhZ2VzQ2hhbmdlZCAmJiBpc0ZpZWxkVHJhbnNsYXRhYmxlKG5hbWUpKVxuICAgICAgICAgIDogdHJ1ZVxuICAgICAgfVxuICAgICAgbGFuZ3VhZ2VzQ2hhbmdlZCA9IGZpZWxkQ2hhbmdlZCgnb3RoZXJMYW5ndWFnZXMnKVxuICAgIH0gZWxzZSB7XG4gICAgICByb290RWwgPSBjcmVhdGVFbGVtZW50KCdnbWQ6TURfTWV0YWRhdGEnKSgpXG4gICAgICBmaWVsZENoYW5nZWQgPSAoKSA9PiB0cnVlXG4gICAgfVxuXG4gICAgZmllbGRDaGFuZ2VkKCd1bmlxdWVJZGVudGlmaWVyJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sndW5pcXVlSWRlbnRpZmllciddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgncmV1c2VUeXBlJykgJiYgdGhpcy53cml0ZXJzWydyZXVzZVR5cGUnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ2tpbmQnKSAmJiB0aGlzLndyaXRlcnNbJ2tpbmQnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ2RlZmF1bHRMYW5ndWFnZScpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ2RlZmF1bHRMYW5ndWFnZSddKHJlY29yZCwgcm9vdEVsKVxuXG4gICAgZmllbGRDaGFuZ2VkKCdjb250YWN0cycpICYmIHRoaXMud3JpdGVyc1snY29udGFjdHMnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ293bmVyT3JnYW5pemF0aW9uJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snb3duZXJPcmdhbml6YXRpb24nXShyZWNvcmQsIHJvb3RFbClcblxuICAgIGZpZWxkQ2hhbmdlZCgncmVjb3JkVXBkYXRlZCcpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ3JlY29yZFVwZGF0ZWQnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ3JlY29yZENyZWF0ZWQnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydyZWNvcmRDcmVhdGVkJ10ocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCdyZWNvcmRQdWJsaXNoZWQnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydyZWNvcmRQdWJsaXNoZWQnXShyZWNvcmQsIHJvb3RFbClcbiAgICA7KGZpZWxkQ2hhbmdlZCgndGl0bGUnKSB8fCBmaWVsZENoYW5nZWQoJ3RyYW5zbGF0aW9ucycpKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWyd0aXRsZSddKHJlY29yZCwgcm9vdEVsKVxuICAgIDsoZmllbGRDaGFuZ2VkKCdhYnN0cmFjdCcpIHx8IGZpZWxkQ2hhbmdlZCgndHJhbnNsYXRpb25zJykpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ2Fic3RyYWN0J10ocmVjb3JkLCByb290RWwpXG5cbiAgICBmaWVsZENoYW5nZWQoJ3Jlc291cmNlQ3JlYXRlZCcpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ3Jlc291cmNlQ3JlYXRlZCddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgncmVzb3VyY2VQdWJsaXNoZWQnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydyZXNvdXJjZVB1Ymxpc2hlZCddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgncmVzb3VyY2VVcGRhdGVkJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1sncmVzb3VyY2VVcGRhdGVkJ10ocmVjb3JkLCByb290RWwpXG5cbiAgICBmaWVsZENoYW5nZWQoJ2NvbnRhY3RzRm9yUmVzb3VyY2UnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydjb250YWN0c0ZvclJlc291cmNlJ10ocmVjb3JkLCByb290RWwpXG5cbiAgICBmaWVsZENoYW5nZWQoJ2tleXdvcmRzJykgJiYgdGhpcy53cml0ZXJzWydrZXl3b3JkcyddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgndG9waWNzJykgJiYgdGhpcy53cml0ZXJzWyd0b3BpY3MnXShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ2xlZ2FsQ29uc3RyYWludHMnKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydsZWdhbENvbnN0cmFpbnRzJ10ocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCdzZWN1cml0eUNvbnN0cmFpbnRzJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snc2VjdXJpdHlDb25zdHJhaW50cyddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgnbGljZW5zZXMnKSAmJiB0aGlzLndyaXRlcnNbJ2xpY2Vuc2VzJ10ocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCdvdGhlckNvbnN0cmFpbnRzJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snb3RoZXJDb25zdHJhaW50cyddKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgnb25saW5lUmVzb3VyY2VzJykgJiZcbiAgICAgIHRoaXMud3JpdGVyc1snb25saW5lUmVzb3VyY2VzJ10ocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCdyZXNvdXJjZUlkZW50aWZpZXInKSAmJlxuICAgICAgdGhpcy53cml0ZXJzWydyZXNvdXJjZUlkZW50aWZpZXInXShyZWNvcmQsIHJvb3RFbClcblxuICAgIGlmIChyZWNvcmQua2luZCA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICBmaWVsZENoYW5nZWQoJ3N0YXR1cycpICYmIHRoaXMud3JpdGVyc1snc3RhdHVzJ10ocmVjb3JkLCByb290RWwpXG4gICAgICBmaWVsZENoYW5nZWQoJ3VwZGF0ZUZyZXF1ZW5jeScpICYmXG4gICAgICAgIHRoaXMud3JpdGVyc1sndXBkYXRlRnJlcXVlbmN5J10ocmVjb3JkLCByb290RWwpXG4gICAgICBmaWVsZENoYW5nZWQoJ3NwYXRpYWxSZXByZXNlbnRhdGlvbicpICYmXG4gICAgICAgIHRoaXMud3JpdGVyc1snc3BhdGlhbFJlcHJlc2VudGF0aW9uJ10ocmVjb3JkLCByb290RWwpXG4gICAgICBmaWVsZENoYW5nZWQoJ292ZXJ2aWV3cycpICYmIHRoaXMud3JpdGVyc1snb3ZlcnZpZXdzJ10ocmVjb3JkLCByb290RWwpXG4gICAgICBmaWVsZENoYW5nZWQoJ3RlbXBvcmFsRXh0ZW50cycpICYmXG4gICAgICAgIHRoaXMud3JpdGVyc1sndGVtcG9yYWxFeHRlbnRzJ10ocmVjb3JkLCByb290RWwpXG4gICAgICBmaWVsZENoYW5nZWQoJ3NwYXRpYWxFeHRlbnRzJykgJiZcbiAgICAgICAgdGhpcy53cml0ZXJzWydzcGF0aWFsRXh0ZW50cyddKHJlY29yZCwgcm9vdEVsKVxuICAgICAgOyhmaWVsZENoYW5nZWQoJ2xpbmVhZ2UnKSB8fCBmaWVsZENoYW5nZWQoJ3RyYW5zbGF0aW9ucycpKSAmJlxuICAgICAgICB0aGlzLndyaXRlcnNbJ2xpbmVhZ2UnXShyZWNvcmQsIHJvb3RFbClcbiAgICB9XG4gICAgZmllbGRDaGFuZ2VkKCdvdGhlckxhbmd1YWdlcycpICYmXG4gICAgICB0aGlzLndyaXRlcnNbJ290aGVyTGFuZ3VhZ2VzJ10ocmVjb3JkLCByb290RWwpXG5cbiAgICB0aGlzLmJlZm9yZURvY3VtZW50Q3JlYXRpb24ocm9vdEVsKVxuXG4gICAgY29uc3QgbmV3RG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudChyb290RWwpXG4gICAgcmV0dXJuIHhtbFRvU3RyaW5nKG5ld0RvY3VtZW50KVxuICB9XG59XG4iXX0=