geonetwork-ui 2.4.0-alpha.2.dbfa93cf3 → 2.4.0-alpha.2.ddc8a5a9f

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 (566) hide show
  1. package/README.md +1 -7
  2. package/esm2022/libs/api/metadata-converter/src/lib/common/distribution.mapper.mjs +3 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/common/license.mjs +1 -1
  4. package/esm2022/libs/api/metadata-converter/src/lib/common/resource-types.mjs +38 -0
  5. package/esm2022/libs/api/metadata-converter/src/lib/common/url.mjs +1 -1
  6. package/esm2022/libs/api/metadata-converter/src/lib/convert-utils.mjs +1 -1
  7. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +4 -2
  8. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.mjs +1 -1
  9. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.mjs +1 -1
  10. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.mjs +1 -1
  11. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.mjs +1 -1
  12. package/esm2022/libs/api/metadata-converter/src/lib/find-converter.mjs +1 -1
  13. package/esm2022/libs/api/metadata-converter/src/lib/function-utils.mjs +1 -1
  14. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +1 -1
  15. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.converter.mjs +4 -4
  16. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +20 -11
  17. package/esm2022/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.mjs +5 -5
  18. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/elasticsearch.model.mjs +1 -1
  19. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  20. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.mjs +5 -3
  21. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +16 -5
  22. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +7 -2
  23. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +62 -63
  24. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +33 -4
  25. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.mjs +1 -1
  26. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/role.mapper.mjs +1 -1
  27. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.mjs +1 -1
  28. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.mjs +1 -1
  29. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +7 -3
  30. package/esm2022/libs/api/metadata-converter/src/lib/xml-utils.mjs +1 -1
  31. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +12 -9
  32. package/esm2022/libs/api/repository/src/lib/gn4/auth/gravatar.service.mjs +5 -5
  33. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +7 -7
  34. package/esm2022/libs/api/repository/src/lib/gn4/favorites/favorites.service.mjs +4 -4
  35. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +5 -5
  36. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +4 -4
  37. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +5 -5
  38. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +5 -5
  39. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +5 -5
  40. package/esm2022/libs/api/repository/src/lib/gn4/selection/selection.service.mjs +4 -4
  41. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +4 -4
  42. package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
  43. package/esm2022/libs/common/domain/src/lib/model/record/contact.model.mjs +19 -19
  44. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  45. package/esm2022/libs/data-access/gn4/src/openapi/api/atom.api.service.mjs +6 -6
  46. package/esm2022/libs/data-access/gn4/src/openapi/api/customstyle.api.service.mjs +6 -6
  47. package/esm2022/libs/data-access/gn4/src/openapi/api/formatters.api.service.mjs +6 -6
  48. package/esm2022/libs/data-access/gn4/src/openapi/api/groups.api.service.mjs +6 -6
  49. package/esm2022/libs/data-access/gn4/src/openapi/api/harvesters.api.service.mjs +6 -6
  50. package/esm2022/libs/data-access/gn4/src/openapi/api/identifiers.api.service.mjs +6 -6
  51. package/esm2022/libs/data-access/gn4/src/openapi/api/languages.api.service.mjs +6 -6
  52. package/esm2022/libs/data-access/gn4/src/openapi/api/links.api.service.mjs +6 -6
  53. package/esm2022/libs/data-access/gn4/src/openapi/api/logos.api.service.mjs +6 -6
  54. package/esm2022/libs/data-access/gn4/src/openapi/api/mapservers.api.service.mjs +6 -6
  55. package/esm2022/libs/data-access/gn4/src/openapi/api/mapservices.api.service.mjs +6 -6
  56. package/esm2022/libs/data-access/gn4/src/openapi/api/me.api.service.mjs +6 -6
  57. package/esm2022/libs/data-access/gn4/src/openapi/api/operations.api.service.mjs +6 -6
  58. package/esm2022/libs/data-access/gn4/src/openapi/api/pages.api.service.mjs +6 -6
  59. package/esm2022/libs/data-access/gn4/src/openapi/api/processes.api.service.mjs +6 -6
  60. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +6 -6
  61. package/esm2022/libs/data-access/gn4/src/openapi/api/regions.api.service.mjs +6 -6
  62. package/esm2022/libs/data-access/gn4/src/openapi/api/registries.api.service.mjs +6 -6
  63. package/esm2022/libs/data-access/gn4/src/openapi/api/related.api.service.mjs +6 -6
  64. package/esm2022/libs/data-access/gn4/src/openapi/api/search.api.service.mjs +6 -6
  65. package/esm2022/libs/data-access/gn4/src/openapi/api/selections.api.service.mjs +6 -6
  66. package/esm2022/libs/data-access/gn4/src/openapi/api/site.api.service.mjs +6 -6
  67. package/esm2022/libs/data-access/gn4/src/openapi/api/sources.api.service.mjs +6 -6
  68. package/esm2022/libs/data-access/gn4/src/openapi/api/standards.api.service.mjs +6 -6
  69. package/esm2022/libs/data-access/gn4/src/openapi/api/status.api.service.mjs +6 -6
  70. package/esm2022/libs/data-access/gn4/src/openapi/api/tags.api.service.mjs +6 -6
  71. package/esm2022/libs/data-access/gn4/src/openapi/api/tools.api.service.mjs +6 -6
  72. package/esm2022/libs/data-access/gn4/src/openapi/api/ui.api.service.mjs +6 -6
  73. package/esm2022/libs/data-access/gn4/src/openapi/api/userfeedback.api.service.mjs +6 -6
  74. package/esm2022/libs/data-access/gn4/src/openapi/api/users.api.service.mjs +6 -6
  75. package/esm2022/libs/data-access/gn4/src/openapi/api/usersearches.api.service.mjs +6 -6
  76. package/esm2022/libs/data-access/gn4/src/openapi/api/userselections.api.service.mjs +6 -6
  77. package/esm2022/libs/data-access/gn4/src/openapi/api.module.mjs +7 -7
  78. package/esm2022/libs/data-access/gn4/src/openapi/configuration.mjs +1 -1
  79. package/esm2022/libs/feature/auth/src/lib/feature-auth.module.mjs +4 -4
  80. package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +4 -4
  81. package/esm2022/libs/feature/catalog/src/lib/my-org/my-org.service.mjs +4 -4
  82. package/esm2022/libs/feature/catalog/src/lib/organisations/organisations.component.mjs +6 -6
  83. package/esm2022/libs/feature/catalog/src/lib/records/records.service.mjs +4 -4
  84. package/esm2022/libs/feature/catalog/src/lib/site-title/site-title.component.mjs +4 -4
  85. package/esm2022/libs/feature/catalog/src/lib/source-label/source-label.component.mjs +5 -5
  86. package/esm2022/libs/feature/catalog/src/lib/sources/sources.service.mjs +4 -4
  87. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +5 -5
  88. package/esm2022/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.mjs +5 -5
  89. package/esm2022/libs/feature/dataviz/src/lib/figure/figure.service.mjs +4 -4
  90. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +5 -5
  91. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +18 -7
  92. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +5 -5
  93. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +3 -3
  94. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +3 -3
  95. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +1 -1
  96. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +1 -1
  97. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +4 -4
  98. package/esm2022/libs/feature/editor/src/lib/components/contact-card/contact-card.component.mjs +3 -3
  99. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +6 -6
  100. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +6 -6
  101. package/esm2022/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.mjs +5 -5
  102. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +4 -4
  103. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-array/form-field-array.component.mjs +3 -3
  104. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.mjs +4 -4
  105. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/constraints.utils.mjs +1 -1
  106. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.mjs +6 -6
  107. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +5 -5
  108. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +6 -6
  109. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-date/form-field-date.component.mjs +3 -3
  110. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-file/form-field-file.component.mjs +5 -5
  111. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +5 -5
  112. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +4 -4
  113. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.mjs +4 -4
  114. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-object/form-field-object.component.mjs +3 -3
  115. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +5 -5
  116. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +5 -5
  117. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.mjs +4 -4
  118. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +5 -5
  119. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +5 -5
  120. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.mjs +3 -3
  121. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +5 -5
  122. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-toggle/form-field-spatial-toggle.component.mjs +4 -4
  123. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.mjs +6 -6
  124. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +5 -5
  125. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +4 -4
  126. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +5 -5
  127. package/esm2022/libs/feature/editor/src/lib/components/wizard/wizard.component.mjs +5 -5
  128. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +7 -7
  129. package/esm2022/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.mjs +5 -5
  130. package/esm2022/libs/feature/editor/src/lib/expressions.mjs +1 -1
  131. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +4 -4
  132. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +5 -5
  133. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +5 -5
  134. package/esm2022/libs/feature/editor/src/lib/services/wizard.service.mjs +5 -5
  135. package/esm2022/libs/feature/map/src/lib/+state/map.facade.mjs +4 -4
  136. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +4 -4
  137. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +5 -5
  138. package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +5 -5
  139. package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +5 -5
  140. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +5 -5
  141. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +6 -6
  142. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +4 -4
  143. package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +5 -5
  144. package/esm2022/libs/feature/map/src/lib/geocoding.service.mjs +6 -6
  145. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +6 -6
  146. package/esm2022/libs/feature/map/src/lib/map-state-container/map-state-container.component.mjs +5 -5
  147. package/esm2022/libs/feature/map/src/lib/style/map-style.service.mjs +4 -4
  148. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +4 -4
  149. package/esm2022/libs/feature/notifications/src/lib/feature-notifications.module.mjs +4 -4
  150. package/esm2022/libs/feature/notifications/src/lib/notifications-container/notifications-container.component.mjs +4 -4
  151. package/esm2022/libs/feature/notifications/src/lib/notifications.service.mjs +3 -3
  152. package/esm2022/libs/feature/record/src/index.mjs +3 -1
  153. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +5 -5
  154. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +6 -6
  155. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +6 -6
  156. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +6 -6
  157. package/esm2022/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.mjs +6 -6
  158. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +11 -7
  159. package/esm2022/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.mjs +169 -0
  160. package/esm2022/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.mjs +45 -0
  161. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +21 -8
  162. package/esm2022/libs/feature/record/src/lib/record-meta/record-meta.component.mjs +5 -5
  163. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +5 -5
  164. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +14 -6
  165. package/esm2022/libs/feature/router/src/lib/default/container/search-router.container.directive.mjs +6 -6
  166. package/esm2022/libs/feature/router/src/lib/default/router.module.mjs +5 -5
  167. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +5 -5
  168. package/esm2022/libs/feature/router/src/lib/default/services/router-search.service.mjs +4 -4
  169. package/esm2022/libs/feature/router/src/lib/default/state/query-params.utils.mjs +1 -1
  170. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +6 -6
  171. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +4 -4
  172. package/esm2022/libs/feature/search/src/lib/facets/facets-container/facets-container.component.mjs +4 -4
  173. package/esm2022/libs/feature/search/src/lib/facets/facets.module.mjs +4 -4
  174. package/esm2022/libs/feature/search/src/lib/facets/facets.service.mjs +5 -5
  175. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +5 -5
  176. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +4 -4
  177. package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +5 -5
  178. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +5 -5
  179. package/esm2022/libs/feature/search/src/lib/records-metrics/records-metrics.component.mjs +5 -5
  180. package/esm2022/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.mjs +4 -4
  181. package/esm2022/libs/feature/search/src/lib/results-layout/results-layout.component.mjs +5 -5
  182. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +6 -6
  183. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +5 -5
  184. package/esm2022/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.mjs +6 -6
  185. package/esm2022/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.mjs +5 -5
  186. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +5 -5
  187. package/esm2022/libs/feature/search/src/lib/state/actions.mjs +1 -1
  188. package/esm2022/libs/feature/search/src/lib/state/container/search-state.container.directive.mjs +6 -6
  189. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +6 -6
  190. package/esm2022/libs/feature/search/src/lib/state/reducer.mjs +1 -1
  191. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +5 -5
  192. package/esm2022/libs/feature/search/src/lib/utils/operators/search.operator.mjs +1 -1
  193. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +1 -1
  194. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +4 -4
  195. package/esm2022/libs/feature/search/src/lib/utils/service/search.service.mjs +4 -4
  196. package/esm2022/libs/ui/catalog/src/lib/catalog-title/catalog-title.component.mjs +3 -3
  197. package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +6 -6
  198. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +4 -4
  199. package/esm2022/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.mjs +3 -3
  200. package/esm2022/libs/ui/catalog/src/lib/organisations-result/organisations-result.component.mjs +3 -3
  201. package/esm2022/libs/ui/dataviz/src/lib/chart/chart.component.mjs +6 -6
  202. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +5 -5
  203. package/esm2022/libs/ui/dataviz/src/lib/table/table.component.mjs +6 -6
  204. package/esm2022/libs/ui/dataviz/src/lib/ui-dataviz.module.mjs +4 -4
  205. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +7 -6
  206. package/esm2022/libs/ui/elements/src/lib/avatar/avatar.component.mjs +3 -3
  207. package/esm2022/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.mjs +5 -5
  208. package/esm2022/libs/ui/elements/src/lib/content-ghost/content-ghost.component.mjs +5 -5
  209. package/esm2022/libs/ui/elements/src/lib/download-item/download-item.component.mjs +6 -6
  210. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +31 -9
  211. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +4 -4
  212. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +4 -4
  213. package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +5 -5
  214. package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +4 -4
  215. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +7 -5
  216. package/esm2022/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.mjs +3 -3
  217. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +4 -4
  218. package/esm2022/libs/ui/elements/src/lib/metadata-info/linkify.directive.mjs +5 -5
  219. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +5 -5
  220. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +4 -4
  221. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +4 -4
  222. package/esm2022/libs/ui/elements/src/lib/notification/notification.component.mjs +6 -6
  223. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +4 -4
  224. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +5 -5
  225. package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +6 -6
  226. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +4 -4
  227. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.mjs +6 -6
  228. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +4 -4
  229. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +3 -3
  230. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +7 -7
  231. package/esm2022/libs/ui/inputs/src/lib/badge/badge.component.mjs +4 -4
  232. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +4 -4
  233. package/esm2022/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.mjs +3 -3
  234. package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +3 -3
  235. package/esm2022/libs/ui/inputs/src/lib/chips-input/chips-input.component.mjs +5 -5
  236. package/esm2022/libs/ui/inputs/src/lib/copy-text-button/copy-text-button.component.mjs +5 -5
  237. package/esm2022/libs/ui/inputs/src/lib/date-picker/date-picker.component.mjs +4 -4
  238. package/esm2022/libs/ui/inputs/src/lib/date-range-dropdown/date-range-dropdown.component.mjs +6 -6
  239. package/esm2022/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.mjs +5 -5
  240. package/esm2022/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.mjs +3 -3
  241. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +5 -5
  242. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +5 -5
  243. package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +5 -5
  244. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +7 -7
  245. package/esm2022/libs/ui/inputs/src/lib/files-drop/files-drop.directive.mjs +4 -4
  246. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +7 -7
  247. package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +3 -3
  248. package/esm2022/libs/ui/inputs/src/lib/search-input/search-input.component.mjs +4 -4
  249. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +5 -5
  250. package/esm2022/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.mjs +4 -4
  251. package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
  252. package/esm2022/libs/ui/inputs/src/lib/text-input/text-input.component.mjs +3 -3
  253. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +4 -4
  254. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +7 -7
  255. package/esm2022/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.mjs +5 -5
  256. package/esm2022/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.mjs +5 -5
  257. package/esm2022/libs/ui/layout/src/lib/block-list/block-list.component.mjs +5 -5
  258. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +5 -5
  259. package/esm2022/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.mjs +4 -4
  260. package/esm2022/libs/ui/layout/src/lib/expandable-panel-button/expandable-panel-button.component.mjs +4 -4
  261. package/esm2022/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.mjs +4 -4
  262. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +3 -3
  263. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +4 -4
  264. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +5 -5
  265. package/esm2022/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.mjs +5 -5
  266. package/esm2022/libs/ui/layout/src/lib/pagination/pagination.component.mjs +4 -4
  267. package/esm2022/libs/ui/layout/src/lib/pagination-buttons/pagination-buttons.component.mjs +4 -4
  268. package/esm2022/libs/ui/layout/src/lib/pagination-dots/pagination-dots.component.mjs +3 -3
  269. package/esm2022/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +4 -4
  270. package/esm2022/libs/ui/layout/src/lib/sortable-list/sortable-list.component.mjs +4 -4
  271. package/esm2022/libs/ui/layout/src/lib/sticky-header/sticky-header.component.mjs +6 -6
  272. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +4 -4
  273. package/esm2022/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.mjs +3 -3
  274. package/esm2022/libs/ui/map/src/lib/components/map-container/map-container.component.mjs +7 -7
  275. package/esm2022/libs/ui/map/src/lib/components/map-legend/map-legend.component.mjs +4 -4
  276. package/esm2022/libs/ui/map/src/lib/map-utils.mjs +1 -1
  277. package/esm2022/libs/ui/search/src/lib/facets/facet-block/facet-block.component.mjs +7 -7
  278. package/esm2022/libs/ui/search/src/lib/facets/facet-item/facet-item.component.mjs +6 -6
  279. package/esm2022/libs/ui/search/src/lib/facets/facet-list/facet-list.component.mjs +3 -3
  280. package/esm2022/libs/ui/search/src/lib/facets/facets.module.mjs +4 -4
  281. package/esm2022/libs/ui/search/src/lib/record-metric/record-metric.component.mjs +3 -3
  282. package/esm2022/libs/ui/search/src/lib/record-preview/record-preview.component.mjs +5 -5
  283. package/esm2022/libs/ui/search/src/lib/record-preview-card/record-preview-card.component.mjs +3 -3
  284. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +4 -4
  285. package/esm2022/libs/ui/search/src/lib/record-preview-list/record-preview-list.component.mjs +3 -3
  286. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +9 -8
  287. package/esm2022/libs/ui/search/src/lib/record-preview-text/record-preview-text.component.mjs +3 -3
  288. package/esm2022/libs/ui/search/src/lib/record-preview-title/record-preview-title.component.mjs +3 -3
  289. package/esm2022/libs/ui/search/src/lib/results-hits-number/results-hits-number.component.mjs +3 -3
  290. package/esm2022/libs/ui/search/src/lib/results-list/results-layout.config.mjs +1 -1
  291. package/esm2022/libs/ui/search/src/lib/results-list/results-list.component.mjs +3 -3
  292. package/esm2022/libs/ui/search/src/lib/results-list-item/results-list-item.component.mjs +5 -5
  293. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +5 -5
  294. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +6 -6
  295. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +4 -4
  296. package/esm2022/libs/ui/widgets/src/lib/color-scale/color-scale.component.mjs +3 -3
  297. package/esm2022/libs/ui/widgets/src/lib/loading-mask/loading-mask.component.mjs +5 -5
  298. package/esm2022/libs/ui/widgets/src/lib/popover/popover.component.mjs +5 -5
  299. package/esm2022/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.mjs +6 -6
  300. package/esm2022/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.mjs +4 -4
  301. package/esm2022/libs/ui/widgets/src/lib/spinning-loader/spinning-loader.component.mjs +3 -3
  302. package/esm2022/libs/ui/widgets/src/lib/step-bar/step-bar.component.mjs +5 -5
  303. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +4 -4
  304. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -1
  305. package/esm2022/libs/util/app-config/src/lib/map-layers.mjs +1 -1
  306. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  307. package/esm2022/libs/util/app-config/src/lib/parse-utils.mjs +1 -1
  308. package/esm2022/libs/util/data-fetcher/src/lib/data-fetcher.mjs +1 -1
  309. package/esm2022/libs/util/data-fetcher/src/lib/headers.mjs +1 -1
  310. package/esm2022/libs/util/data-fetcher/src/lib/model.mjs +3 -3
  311. package/esm2022/libs/util/data-fetcher/src/lib/readers/base-file.mjs +1 -1
  312. package/esm2022/libs/util/data-fetcher/src/lib/readers/csv.mjs +1 -1
  313. package/esm2022/libs/util/data-fetcher/src/lib/readers/excel.mjs +1 -1
  314. package/esm2022/libs/util/data-fetcher/src/lib/readers/geojson.mjs +1 -1
  315. package/esm2022/libs/util/data-fetcher/src/lib/readers/gml.mjs +1 -1
  316. package/esm2022/libs/util/data-fetcher/src/lib/readers/json.mjs +1 -1
  317. package/esm2022/libs/util/data-fetcher/src/lib/sql-utils.mjs +1 -1
  318. package/esm2022/libs/util/data-fetcher/src/lib/utils.mjs +13 -11
  319. package/esm2022/libs/util/i18n/src/lib/i18n.interceptor.mjs +4 -4
  320. package/esm2022/libs/util/i18n/src/lib/lang.service.mjs +4 -4
  321. package/esm2022/libs/util/i18n/src/lib/util-i18n.module.mjs +6 -6
  322. package/esm2022/libs/util/shared/src/lib/image-fallback.directive.mjs +5 -5
  323. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +6 -4
  324. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +1 -1
  325. package/esm2022/libs/util/shared/src/lib/services/log.service.mjs +3 -3
  326. package/esm2022/libs/util/shared/src/lib/services/proxy.service.mjs +12 -9
  327. package/esm2022/libs/util/shared/src/lib/services/theme.service.mjs +4 -4
  328. package/esm2022/libs/util/shared/src/lib/util-shared.module.mjs +4 -4
  329. package/esm2022/libs/util/shared/src/lib/utils/format-fields.mjs +1 -1
  330. package/esm2022/libs/util/shared/src/lib/utils/geojson.mjs +1 -1
  331. package/esm2022/libs/util/shared/src/lib/utils/image-resize.mjs +1 -1
  332. package/esm2022/libs/util/shared/src/lib/utils/no-duplicate-file-name.mjs +1 -1
  333. package/esm2022/libs/util/shared/src/lib/utils/parse.mjs +1 -1
  334. package/esm2022/libs/util/shared/src/lib/utils/temporal-extent-union.mjs +1 -1
  335. package/esm2022/libs/util/shared/src/lib/utils/url.mjs +1 -1
  336. package/esm2022/translations/de.json +6 -4
  337. package/esm2022/translations/en.json +87 -66
  338. package/esm2022/translations/es.json +6 -4
  339. package/esm2022/translations/fr.json +82 -61
  340. package/esm2022/translations/it.json +6 -4
  341. package/esm2022/translations/nl.json +6 -4
  342. package/esm2022/translations/pt.json +6 -4
  343. package/fesm2022/geonetwork-ui.mjs +1791 -1384
  344. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  345. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  346. package/libs/api/metadata-converter/src/lib/common/resource-types.d.ts +5 -0
  347. package/libs/api/metadata-converter/src/lib/common/resource-types.d.ts.map +1 -0
  348. package/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.d.ts.map +1 -1
  349. package/libs/api/metadata-converter/src/lib/function-utils.d.ts.map +1 -1
  350. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +4 -4
  351. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  352. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  353. package/libs/api/metadata-converter/src/lib/gn4/types/elasticsearch.model.d.ts +1 -1
  354. package/libs/api/metadata-converter/src/lib/gn4/types/elasticsearch.model.d.ts.map +1 -1
  355. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +11 -10
  356. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  357. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts.map +1 -1
  358. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +2 -1
  359. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
  360. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts +1 -0
  361. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
  362. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts +1 -0
  363. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  364. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +3 -1
  365. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  366. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +3 -2
  367. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  368. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts +2 -2
  369. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts.map +1 -1
  370. package/libs/api/repository/src/lib/gn4/auth/auth.service.d.ts +4 -2
  371. package/libs/api/repository/src/lib/gn4/auth/auth.service.d.ts.map +1 -1
  372. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +1 -1
  373. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
  374. package/libs/common/domain/src/lib/model/record/contact.model.d.ts +1 -1
  375. package/libs/common/domain/src/lib/model/record/contact.model.d.ts.map +1 -1
  376. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +15 -5
  377. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  378. package/libs/data-access/gn4/src/openapi/model/groupPrivilege.api.model.d.ts.map +1 -1
  379. package/libs/data-access/gn4/src/openapi/model/jsonNode.api.model.d.ts.map +1 -1
  380. package/libs/data-access/gn4/src/openapi/model/link.api.model.d.ts.map +1 -1
  381. package/libs/data-access/gn4/src/openapi/model/metadataResource.api.model.d.ts.map +1 -1
  382. package/libs/data-access/gn4/src/openapi/model/metadataResourceExternalManagementProperties.api.model.d.ts.map +1 -1
  383. package/libs/data-access/gn4/src/openapi/model/metadataStatusParameter.api.model.d.ts.map +1 -1
  384. package/libs/data-access/gn4/src/openapi/model/operation.api.model.d.ts.map +1 -1
  385. package/libs/data-access/gn4/src/openapi/model/pageProperties.api.model.d.ts.map +1 -1
  386. package/libs/data-access/gn4/src/openapi/model/publicationOption.api.model.d.ts.map +1 -1
  387. package/libs/data-access/gn4/src/openapi/model/setting.api.model.d.ts.map +1 -1
  388. package/libs/data-access/gn4/src/openapi/model/status.api.model.d.ts.map +1 -1
  389. package/libs/data-access/gn4/src/openapi/model/statusValue.api.model.d.ts.map +1 -1
  390. package/libs/data-access/gn4/src/openapi/model/user.api.model.d.ts.map +1 -1
  391. package/libs/data-access/gn4/src/openapi/model/userGroup.api.model.d.ts.map +1 -1
  392. package/libs/data-access/gn4/src/openapi/model/userGroupId.api.model.d.ts.map +1 -1
  393. package/libs/data-access/gn4/src/openapi/model/userSecurity.api.model.d.ts.map +1 -1
  394. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +3 -1
  395. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  396. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +12 -12
  397. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  398. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +11 -11
  399. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  400. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +2 -2
  401. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  402. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -1
  403. 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
  404. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +6 -6
  405. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  406. package/libs/feature/editor/src/lib/fields.config.d.ts +1 -1
  407. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  408. package/libs/feature/map/src/lib/+state/map.actions.d.ts +3 -3
  409. package/libs/feature/map/src/lib/+state/map.actions.d.ts.map +1 -1
  410. package/libs/feature/record/src/index.d.ts +2 -0
  411. package/libs/feature/record/src/index.d.ts.map +1 -1
  412. package/libs/feature/record/src/lib/feature-record.module.d.ts +2 -1
  413. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  414. package/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.d.ts +74 -0
  415. package/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.d.ts.map +1 -0
  416. package/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.d.ts +19 -0
  417. package/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.d.ts.map +1 -0
  418. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +3 -1
  419. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  420. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +13 -13
  421. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  422. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +9 -9
  423. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  424. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  425. package/libs/feature/router/src/lib/default/constants.d.ts +1 -1
  426. package/libs/feature/router/src/lib/default/constants.d.ts.map +1 -1
  427. package/libs/feature/router/src/lib/default/state/router.actions.d.ts +3 -3
  428. package/libs/feature/router/src/lib/default/state/router.actions.d.ts.map +1 -1
  429. package/libs/feature/router/src/lib/default/state/router.effects.d.ts +5 -5
  430. package/libs/feature/router/src/lib/default/state/router.effects.d.ts.map +1 -1
  431. package/libs/feature/router/src/lib/default/state/router.selectors.d.ts +1 -1
  432. package/libs/feature/router/src/lib/default/state/router.selectors.d.ts.map +1 -1
  433. package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts.map +1 -1
  434. package/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.d.ts.map +1 -1
  435. package/libs/feature/search/src/lib/state/actions.d.ts.map +1 -1
  436. package/libs/feature/search/src/lib/utils/operators/search.operator.d.ts.map +1 -1
  437. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  438. package/libs/ui/elements/src/lib/api-card/api-card.component.d.ts.map +1 -1
  439. package/libs/ui/elements/src/lib/download-item/download-item.component.d.ts +2 -2
  440. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +9 -8
  441. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  442. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +2 -1
  443. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -1
  444. package/libs/ui/elements/src/lib/metadata-info/linkify.directive.d.ts.map +1 -1
  445. package/libs/ui/inputs/src/lib/chips-input/chips-input.component.d.ts.map +1 -1
  446. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -1
  447. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +1 -1
  448. package/libs/ui/map/src/lib/components/map-container/map-settings.token.d.ts.map +1 -1
  449. package/libs/ui/search/src/lib/results-list/results-layout.config.d.ts.map +1 -1
  450. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  451. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  452. package/libs/util/app-config/src/lib/model.d.ts +1 -0
  453. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  454. package/libs/util/data-fetcher/src/lib/model.d.ts +2 -2
  455. package/libs/util/data-fetcher/src/lib/model.d.ts.map +1 -1
  456. package/libs/util/data-fetcher/src/lib/readers/csv.d.ts.map +1 -1
  457. package/libs/util/data-fetcher/src/lib/readers/excel.d.ts.map +1 -1
  458. package/libs/util/data-fetcher/src/lib/readers/geojson.d.ts.map +1 -1
  459. package/libs/util/data-fetcher/src/lib/readers/gml.d.ts.map +1 -1
  460. package/libs/util/data-fetcher/src/lib/readers/json.d.ts.map +1 -1
  461. package/libs/util/data-fetcher/src/lib/utils.d.ts +1 -1
  462. package/libs/util/data-fetcher/src/lib/utils.d.ts.map +1 -1
  463. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  464. package/libs/util/shared/src/lib/services/proxy.service.d.ts +4 -2
  465. package/libs/util/shared/src/lib/services/proxy.service.d.ts.map +1 -1
  466. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts +4 -1
  467. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts.map +1 -1
  468. package/package.json +50 -43
  469. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +1 -0
  470. package/src/libs/api/metadata-converter/src/lib/common/resource-types.ts +50 -0
  471. package/src/libs/api/metadata-converter/src/lib/convert-utils.ts +1 -1
  472. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +2 -0
  473. package/src/libs/api/metadata-converter/src/lib/fixtures/eu.dcat-ap.records.ts +3 -3
  474. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.reuse+ongules.ts +246 -0
  475. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.reuse+roilaye.ts +101 -0
  476. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.service+eaux-usees.ts +187 -0
  477. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +9 -1
  478. package/src/libs/api/metadata-converter/src/lib/fixtures/georhena.records.ts +216 -0
  479. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +6 -0
  480. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.reuse.ts +451 -0
  481. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.service+napitswallonia.ts +289 -0
  482. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +16 -11
  483. package/src/libs/api/metadata-converter/src/lib/gn4/types/elasticsearch.model.ts +1 -1
  484. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +11 -10
  485. package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +4 -0
  486. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +24 -10
  487. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +8 -2
  488. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +61 -56
  489. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +65 -10
  490. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +9 -3
  491. package/src/libs/api/metadata-converter/src/lib/xml-utils.ts +13 -1
  492. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +11 -3
  493. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +1 -1
  494. package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +1 -1
  495. package/src/libs/common/domain/src/lib/model/record/contact.model.ts +1 -1
  496. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +20 -4
  497. package/src/libs/common/fixtures/src/lib/elasticsearch/full-response.fixtures.ts +1 -0
  498. package/src/libs/common/fixtures/src/lib/elasticsearch/search-responses.fixtures.ts +12931 -0
  499. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +37 -28
  500. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +28 -5
  501. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-file/form-field-file.component.html +1 -1
  502. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.html +2 -2
  503. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +1 -1
  504. package/src/libs/feature/editor/src/lib/fields.config.ts +4 -4
  505. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.html +2 -2
  506. package/src/libs/feature/record/src/index.ts +2 -0
  507. package/src/libs/feature/record/src/lib/feature-record.module.ts +2 -0
  508. package/src/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.css +22 -0
  509. package/src/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.html +132 -0
  510. package/src/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.ts +253 -0
  511. package/src/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.css +0 -0
  512. package/src/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.html +37 -0
  513. package/src/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.ts +43 -0
  514. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +16 -3
  515. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +10 -1
  516. package/src/libs/feature/search/src/lib/facets/facets.service.ts +4 -4
  517. package/src/libs/feature/search/src/lib/state/actions.ts +69 -17
  518. package/src/libs/feature/search/src/lib/state/effects.ts +1 -1
  519. package/src/libs/ui/dataviz/src/lib/chart/chart.component.ts +1 -1
  520. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +5 -4
  521. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +14 -3
  522. package/src/libs/ui/elements/src/lib/api-card/api-card.component.ts +2 -1
  523. package/src/libs/ui/elements/src/lib/download-item/download-item.component.html +2 -2
  524. package/src/libs/ui/elements/src/lib/download-item/download-item.component.ts +1 -1
  525. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +1 -1
  526. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +46 -10
  527. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.html +4 -1
  528. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +1 -0
  529. package/src/libs/ui/elements/src/lib/metadata-info/linkify.directive.ts +4 -1
  530. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +6 -6
  531. package/src/libs/ui/elements/src/lib/notification/notification.component.html +1 -1
  532. package/src/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.ts +2 -2
  533. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
  534. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.ts +4 -1
  535. package/src/libs/ui/inputs/src/lib/copy-text-button/copy-text-button.component.html +1 -1
  536. package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +4 -1
  537. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.html +1 -1
  538. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.html +1 -1
  539. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.ts +4 -1
  540. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.html +1 -1
  541. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +4 -4
  542. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +2 -2
  543. package/src/libs/ui/layout/src/lib/sortable-list/sortable-list.component.css +4 -2
  544. package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +8 -2
  545. package/src/libs/ui/search/src/lib/results-list/results-layout.config.ts +1 -1
  546. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +4 -1
  547. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +2 -2
  548. package/src/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.html +1 -1
  549. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.ts +2 -2
  550. package/src/libs/util/app-config/src/lib/app-config.ts +3 -1
  551. package/src/libs/util/app-config/src/lib/model.ts +1 -0
  552. package/src/libs/util/data-fetcher/src/lib/model.ts +6 -6
  553. package/src/libs/util/data-fetcher/src/lib/readers/base-file.ts +1 -1
  554. package/src/libs/util/data-fetcher/src/lib/utils.ts +13 -11
  555. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +2 -0
  556. package/src/libs/util/shared/src/lib/links/link-utils.ts +1 -1
  557. package/src/libs/util/shared/src/lib/services/proxy.service.ts +7 -3
  558. package/src/libs/util/shared/src/lib/utils/temporal-extent-union.ts +6 -1
  559. package/translations/de.json +6 -4
  560. package/translations/en.json +87 -66
  561. package/translations/es.json +6 -4
  562. package/translations/fr.json +82 -61
  563. package/translations/it.json +6 -4
  564. package/translations/nl.json +6 -4
  565. package/translations/pt.json +6 -4
  566. package/translations/sk.json +6 -4
@@ -1,10 +1,11 @@
1
- import format from 'date-fns/format';
1
+ import { format } from 'date-fns/format';
2
2
  import { filterArray, map, mapArray, noop, pipe, tap, } from '../function-utils';
3
3
  import { allChildrenElement, appendChildren, createChild, createElement, createNestedChild, createNestedElement, findChildOrCreate, findChildrenElement, findNestedChildOrCreate, findNestedElement, findNestedElements, readAttribute, removeAllChildren, removeChildren, removeChildrenByName, setTextContent, writeAttribute, } from '../xml-utils';
4
4
  import { readKind } from './read-parts';
5
5
  import { writeGeometry } from './utils/geometry';
6
6
  import { namePartsToFull } from './utils/individual-name';
7
7
  import { LANG_2_TO_3_MAPPER } from '../../../../../../libs/util/i18n/src/lib/language-codes';
8
+ import { kindToCodeListValue } from '../common/resource-types';
8
9
  function writeLocalizedElement(writeFn, text, translations, defaultLanguage) {
9
10
  if (!translations)
10
11
  return writeFn;
@@ -306,7 +307,7 @@ export function writeUniqueIdentifier(record, rootEl) {
306
307
  pipe(findChildOrCreate('gmd:fileIdentifier'), writeCharacterString(record.uniqueIdentifier))(rootEl);
307
308
  }
308
309
  export function writeKind(record, rootEl) {
309
- pipe(findNestedChildOrCreate('gmd:hierarchyLevel', 'gmd:MD_ScopeCode'), writeAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ScopeCode'), writeAttribute('codeListValue', record.kind))(rootEl);
310
+ pipe(findNestedChildOrCreate('gmd:hierarchyLevel', 'gmd:MD_ScopeCode'), writeAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ScopeCode'), writeAttribute('codeListValue', kindToCodeListValue(record)))(rootEl);
310
311
  }
311
312
  export function writeTitle(record, rootEl) {
312
313
  pipe(findOrCreateIdentification(), findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation', 'gmd:title'), writeLocalizedCharacterString(record.title, record.translations?.title, record.defaultLanguage))(rootEl);
@@ -373,6 +374,9 @@ export function writeResourcePublished(record, rootEl) {
373
374
  return;
374
375
  appendResourceDate(record.resourcePublished, 'publication')(rootEl);
375
376
  }
377
+ export function writeReuseType(record, rootEl) {
378
+ writeKind(record, rootEl);
379
+ }
376
380
  export function writeSpatialRepresentation(record, rootEl) {
377
381
  if (!record.spatialRepresentation) {
378
382
  pipe(findOrCreateIdentification(), removeChildrenByName('gmd:spatialRepresentationType'))(rootEl);
@@ -482,4 +486,4 @@ export function writeResourceIdentifier(record, rootEl) {
482
486
  ? pipe(createNestedChild('gmd:identifier', 'gmd:MD_Identifier', 'gmd:code'), writeCharacterString(record.resourceIdentifier))
483
487
  : noop)(rootEl);
484
488
  }
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTEzOS93cml0ZS1wYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFFcEMsT0FBTyxFQUVMLFdBQVcsRUFDWCxHQUFHLEVBQ0gsUUFBUSxFQUNSLElBQUksRUFDSixJQUFJLEVBQ0osR0FBRyxHQUNKLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsV0FBVyxFQUNYLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxjQUFjLEdBRWYsTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFBO0FBRTVGLFNBQVMscUJBQXFCLENBQzVCLE9BQWtELEVBQ2xELElBQVksRUFDWixZQUE4QixFQUM5QixlQUE2QjtJQUU3QixJQUFJLENBQUMsWUFBWTtRQUFFLE9BQU8sT0FBTyxDQUFBO0lBQ2pDLFNBQVMsZUFBZSxDQUFDLElBQWtCLEVBQUUsV0FBbUI7UUFDOUQsT0FBTyxJQUFJLENBQ1QsbUJBQW1CLENBQUMsZUFBZSxFQUFFLDhCQUE4QixDQUFD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UUFDdkIsQ0FBQyxDQUFDLElBQUksQ0FDRixpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLENBQUMsRUFDcEUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQ2hEO1FBQ0gsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIENvbnN0cmFpbnQsXG4gIERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgRGF0YXNldFJlY29yZCxcbiAgRGF0YXNldFNlcnZpY2VEaXN0cmlidXRpb24sXG4gIEZpZWxkVHJhbnNsYXRpb24sXG4gIEluZGl2aWR1YWwsXG4gIEtleXdvcmQsXG4gIExhbmd1YWdlQ29kZSxcbiAgUmVjb3JkU3RhdHVzLFxuICBSZWNvcmRUcmFuc2xhdGlvbnMsXG4gIFJvbGUsXG4gIFNlcnZpY2VFbmRwb2ludCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlLFxuICBTZXJ2aWNlUmVjb3JkLFxuICBVcGRhdGVGcmVxdWVuY3lDb2RlLFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IGZvcm1hdCBmcm9tICdkYXRlLWZucy9mb3JtYXQnXG5pbXBvcnQgeyBHZW9tZXRyeSB9IGZyb20gJ2dlb2pzb24nXG5pbXBvcnQge1xuICBDaGFpbmFibGVGdW5jdGlvbixcbiAgZmlsdGVyQXJyYXksXG4gIG1hcCxcbiAgbWFwQXJyYXksXG4gIG5vb3AsXG4gIHBpcGUsXG4gIHRhcCxcbn0gZnJvbSAnLi4vZnVuY3Rpb24tdXRpbHMnXG5pbXBvcnQge1xuICBhbGxDaGlsZHJlbkVsZW1lbnQsXG4gIGFwcGVuZENoaWxkcmVuLFxuICBjcmVhdGVDaGlsZCxcbiAgY3JlYXRlRWxlbWVudCxcbiAgY3JlYXRlTmVzdGVkQ2hpbGQsXG4gIGNyZWF0ZU5lc3RlZEVsZW1lbnQsXG4gIGZpbmRDaGlsZE9yQ3JlYXRlLFxuICBmaW5kQ2hpbGRyZW5FbGVtZW50LFxuICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSxcbiAgZmluZE5lc3RlZEVsZW1lbnQsXG4gIGZpbmROZXN0ZWRFbGVtZW50cyxcbiAgcmVhZEF0dHJpYnV0ZSxcbiAgcmVtb3ZlQWxsQ2hpbGRyZW4sXG4gIHJlbW92ZUNoaWxkcmVuLFxuICByZW1vdmVDaGlsZHJlbkJ5TmFtZSxcbiAgc2V0VGV4dENvbnRlbnQsXG4gIHdyaXRlQXR0cmlidXRlLFxuICBYbWxFbGVtZW50LFxufSBmcm9tICcuLi94bWwtdXRpbHMnXG5pbXBvcnQgeyByZWFkS2luZCB9IGZyb20gJy4vcmVhZC1wYXJ0cydcbmltcG9ydCB7IHdyaXRlR2VvbWV0cnkgfSBmcm9tICcuL3V0aWxzL2dlb21ldHJ5J1xuaW1wb3J0IHsgbmFtZVBhcnRzVG9GdWxsIH0gZnJvbSAnLi91dGlscy9pbmRpdmlkdWFsLW5hbWUnXG5pbXBvcnQgeyBMQU5HXzJfVE9fM19NQVBQRVIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMvbGliL2xhbmd1YWdlLWNvZGVzJ1xuXG5mdW5jdGlvbiB3cml0ZUxvY2FsaXplZEVsZW1lbnQoXG4gIHdyaXRlRm46IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+LFxuICB0ZXh0OiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbixcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgaWYgKCF0cmFuc2xhdGlvbnMpIHJldHVybiB3cml0ZUZuXG4gIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsaXplZChsYW5nOiBMYW5ndWFnZUNvZGUsIHRyYW5zbGF0aW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDp0ZXh0R3JvdXAnLCAnZ21kOkxvY2FsaXNlZENoYXJhY3RlclN0cmluZycpLFxuICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2xvY2FsZScsIGAjJHtsYW5nLnRvVXBwZXJDYXNlKCl9YCksXG4gICAgICBzZXRUZXh0Q29udGVudCh0cmFuc2xhdGlvbilcbiAgICApXG4gIH1cbiAgcmV0dXJuIHBpcGUoXG4gICAgd3JpdGVGbixcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOlBUX0ZyZWVUZXh0JyksXG4gICAgY3JlYXRlQ2hpbGQoJ2dtZDpQVF9GcmVlVGV4dCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgY3JlYXRlTG9jYWxpemVkKGRlZmF1bHRMYW5ndWFnZSwgdGV4dCksXG4gICAgICAuLi5PYmplY3QuZW50cmllcyh0cmFuc2xhdGlvbnMpLm1hcCgoW2xhbmcsIHRyYW5zbGF0aW9uXSkgPT5cbiAgICAgICAgY3JlYXRlTG9jYWxpemVkKGxhbmcsIHRyYW5zbGF0aW9uKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDaGFyYWN0ZXJTdHJpbmcoXG4gIHRleHQ6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoZmluZENoaWxkT3JDcmVhdGUoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnKSwgc2V0VGV4dENvbnRlbnQodGV4dCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICB0ZXh0OiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbixcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHdyaXRlTG9jYWxpemVkRWxlbWVudChcbiAgICB3cml0ZUNoYXJhY3RlclN0cmluZyh0ZXh0KSxcbiAgICB0ZXh0LFxuICAgIHRyYW5zbGF0aW9ucyxcbiAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaW5rYWdlKFxuICB1cmw6IFVSTFxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmxpbmthZ2UnLCAnZ21kOlVSTCcpLFxuICAgICAgc2V0VGV4dENvbnRlbnQodXJsLnRvU3RyaW5nKCkpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUFuY2hvcihcbiAgdXJsOiBVUkwsXG4gIHRleHQ/OiBzdHJpbmdcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkT3JDcmVhdGUoJ2dteDpBbmNob3InKSxcbiAgICAgIHdyaXRlQXR0cmlidXRlKCd4bGluazpocmVmJywgdXJsLnRvU3RyaW5nKCkpLFxuICAgICAgdGV4dCA/IHNldFRleHRDb250ZW50KHRleHQpIDogbm9vcFxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMb2NhbGl6ZWRBbmNob3IoXG4gIHVybDogVVJMLFxuICB0ZXh0OiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbixcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHdyaXRlTG9jYWxpemVkRWxlbWVudChcbiAgICB3cml0ZUFuY2hvcih1cmwsIHRleHQpLFxuICAgIHRleHQsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIGRlZmF1bHRMYW5ndWFnZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURhdGVUaW1lKFxuICBkYXRlOiBEYXRlXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286RGF0ZVRpbWUnKSxcbiAgICBzZXRUZXh0Q29udGVudChmb3JtYXQoZGF0ZSwgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NcIikpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGF0ZShcbiAgZGF0ZTogRGF0ZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ2NvOkRhdGUnKSxcbiAgICAgIHNldFRleHRDb250ZW50KGZvcm1hdChkYXRlLCAneXl5eS1NTS1kZCcpKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEZWNpbWFsKFxuICBkZWNpbWFsOiBudW1iZXJcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286RGVjaW1hbCcpLCBzZXRUZXh0Q29udGVudChkZWNpbWFsLnRvU3RyaW5nKCkpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9ncmVzc0NvZGUoc3RhdHVzOiBSZWNvcmRTdGF0dXMpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICByZXR1cm4gJ2NvbXBsZXRlZCdcbiAgICBjYXNlICdkZXByZWNhdGVkJzpcbiAgICAgIHJldHVybiAnZGVwcmVjYXRlZCdcbiAgICBjYXNlICdvbmdvaW5nJzpcbiAgICAgIHJldHVybiAnb25Hb2luZydcbiAgICBjYXNlICdyZW1vdmVkJzpcbiAgICAgIHJldHVybiAncmVtb3ZlZCdcbiAgICBjYXNlICd1bmRlcl9kZXZlbG9wbWVudCc6XG4gICAgICByZXR1cm4gJ3VuZGVyRGV2ZWxvcG1lbnQnXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgcHJvZ3Jlc3MgY29kZSBmcm9tIHN0YXR1czogJHtzdGF0dXN9YFxuICAgICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb2xlQ29kZShyb2xlOiBSb2xlKTogc3RyaW5nIHtcbiAgc3dpdGNoIChyb2xlKSB7XG4gICAgY2FzZSAnYXV0aG9yJzpcbiAgICAgIHJldHVybiAnYXV0aG9yJ1xuICAgIGNhc2UgJ2NvbGxhYm9yYXRvcic6XG4gICAgICByZXR1cm4gJ2NvbGxhYm9yYXRvcidcbiAgICBjYXNlICdjb250cmlidXRvcic6XG4gICAgICByZXR1cm4gJ2NvbnRyaWJ1dG9yJ1xuICAgIGNhc2UgJ2N1c3RvZGlhbic6XG4gICAgICByZXR1cm4gJ2N1c3RvZGlhbidcbiAgICBjYXNlICdkaXN0cmlidXRvcic6XG4gICAgICByZXR1cm4gJ2Rpc3RyaWJ1dG9yJ1xuICAgIGNhc2UgJ2VkaXRvcic6XG4gICAgICByZXR1cm4gJ2VkaXRvcidcbiAgICBjYXNlICdmdW5kZXInOlxuICAgICAgcmV0dXJuICdmdW5kZXInXG4gICAgY2FzZSAnbWVkaWF0b3InOlxuICAgICAgcmV0dXJuICdtZWRpYXRvcidcbiAgICBjYXNlICdvcmlnaW5hdG9yJzpcbiAgICAgIHJldHVybiAnb3JpZ2luYXRvcidcbiAgICBjYXNlICdvdGhlcic6XG4gICAgICByZXR1cm4gJ290aGVyJ1xuICAgIGNhc2UgJ293bmVyJzpcbiAgICAgIHJldHVybiAnb3duZXInXG4gICAgY2FzZSAncG9pbnRfb2ZfY29udGFjdCc6XG4gICAgICByZXR1cm4gJ3BvaW50T2ZDb250YWN0J1xuICAgIGNhc2UgJ3ByaW5jaXBhbF9pbnZlc3RpZ2F0b3InOlxuICAgICAgcmV0dXJuICdwcmluY2lwYWxJbnZlc3RpZ2F0b3InXG4gICAgY2FzZSAncHJvY2Vzc29yJzpcbiAgICAgIHJldHVybiAncHJvY2Vzc29yJ1xuICAgIGNhc2UgJ3B1Ymxpc2hlcic6XG4gICAgICByZXR1cm4gJ3B1Ymxpc2hlcidcbiAgICBjYXNlICdyZXNvdXJjZV9wcm92aWRlcic6XG4gICAgICByZXR1cm4gJ3Jlc291cmNlUHJvdmlkZXInXG4gICAgY2FzZSAncmlnaHRzX2hvbGRlcic6XG4gICAgICByZXR1cm4gJ3JpZ2h0c0hvbGRlcidcbiAgICBjYXNlICdzcG9uc29yJzpcbiAgICAgIHJldHVybiAnc3BvbnNvcidcbiAgICBjYXNlICdzdGFrZWhvbGRlcic6XG4gICAgICByZXR1cm4gJ3N0YWtlaG9sZGVyJ1xuICAgIGNhc2UgJ3Vuc3BlY2lmaWVkJzpcbiAgICAgIHJldHVybiAndW5zcGVjaWZpZWQnXG4gICAgY2FzZSAndXNlcic6XG4gICAgICByZXR1cm4gJ3VzZXInXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSByb2xlIGNvZGUgZnJvbSByb2xlOiAke3JvbGV9YClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZURpc3RyaWJ1dGlvblByb3RvY29sKFxuICBkaXN0cmlidXRpb246IERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uXG4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKGRpc3RyaWJ1dGlvbi5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3dmcyc6XG4gICAgICByZXR1cm4gJ09HQzpXRlMnXG4gICAgY2FzZSAnd21zJzpcbiAgICAgIHJldHVybiAnT0dDOldNUydcbiAgICBjYXNlICd3cHMnOlxuICAgICAgcmV0dXJuICdPR0M6V1BTJ1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGlzdHJpYnV0aW9uLmFjY2Vzc1NlcnZpY2VQcm90b2NvbFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUoXG4gIHVwZGF0ZUZyZXF1ZW5jeTogVXBkYXRlRnJlcXVlbmN5Q29kZVxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIHN3aXRjaCAodXBkYXRlRnJlcXVlbmN5KSB7XG4gICAgY2FzZSAnYXNOZWVkZWQnOlxuICAgICAgcmV0dXJuICdhc05lZWRlZCdcbiAgICBjYXNlICd1bmtub3duJzpcbiAgICAgIHJldHVybiAndW5rbm93bidcbiAgICBjYXNlICdpcnJlZ3VsYXInOlxuICAgICAgcmV0dXJuICdpcnJlZ3VsYXInXG4gICAgY2FzZSAnbm90UGxhbm5lZCc6XG4gICAgICByZXR1cm4gJ25vdFBsYW5uZWQnXG4gICAgY2FzZSAnY29udGludWFsJzpcbiAgICAgIHJldHVybiAnY29udGludWFsJ1xuICAgIGNhc2UgJ3BlcmlvZGljJzpcbiAgICAgIHJldHVybiAncGVyaW9kaWMnXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElTT0R1cmF0aW9uKHVwZGF0ZUZyZXF1ZW5jeTogVXBkYXRlRnJlcXVlbmN5Q3VzdG9tKTogc3RyaW5nIHtcbiAgY29uc3QgZHVyYXRpb24gPSB7XG4gICAgeWVhcnM6IDAsXG4gICAgbW9udGhzOiAwLFxuICAgIHdlZWtzOiAwLFxuICAgIGRheXM6IDAsXG4gICAgaG91cnM6IDAsXG4gIH1cbiAgc3dpdGNoICh1cGRhdGVGcmVxdWVuY3kucGVyKSB7XG4gICAgY2FzZSAnZGF5JzpcbiAgICAgIGlmICh1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzIDw9IDEpIGR1cmF0aW9uLmRheXMgPSAxXG4gICAgICBlbHNlIGR1cmF0aW9uLmhvdXJzID0gTWF0aC5yb3VuZCgyNCAvIHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgZHVyYXRpb24uZGF5cyA9IE1hdGgucm91bmQoNyAvIHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgLSAwLjAwMDEpIC8vIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgJzIgdGltZXMgcGVyIHdlZWsnID0gJ2V2ZXJ5IDMgZGF5cydcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnbW9udGgnOlxuICAgICAgaWYgKHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgPD0gMSkgZHVyYXRpb24ubW9udGhzID0gMVxuICAgICAgZWxzZSBkdXJhdGlvbi5kYXlzID0gTWF0aC5yb3VuZCgzMCAvIHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3llYXInOlxuICAgICAgaWYgKHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgPD0gMSkgZHVyYXRpb24ueWVhcnMgPSAxXG4gICAgICBlbHNlIGR1cmF0aW9uLm1vbnRocyA9IE1hdGgucm91bmQoMTIgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzKVxuICAgICAgYnJlYWtcbiAgfVxuICBjb25zdCBob3VycyA9IGR1cmF0aW9uLmhvdXJzID4gMCA/IGBUJHtkdXJhdGlvbi5ob3Vyc31IYCA6ICcnXG4gIHJldHVybiBgUCR7ZHVyYXRpb24ueWVhcnN9WSR7ZHVyYXRpb24ubW9udGhzfU0ke2R1cmF0aW9uLmRheXN9RCR7aG91cnN9YFxufVxuXG5mdW5jdGlvbiBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KFxuICBjb250YWN0OiBJbmRpdmlkdWFsLFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICBjb25zdCBmdWxsTmFtZSA9IG5hbWVQYXJ0c1RvRnVsbChjb250YWN0LmZpcnN0TmFtZSwgY29udGFjdC5sYXN0TmFtZSlcblxuICBjb25zdCBjcmVhdGVBZGRyZXNzID0gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6YWRkcmVzcycsICdnbWQ6Q0lfQWRkcmVzcycpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmVsZWN0cm9uaWNNYWlsQWRkcmVzcycpLFxuICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LmVtYWlsKVxuICAgICAgKVxuICAgICksXG4gICAgY29udGFjdC5hZGRyZXNzXG4gICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVsaXZlcnlQb2ludCcpLFxuICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5hZGRyZXNzKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBub29wXG4gIClcblxuICBjb25zdCBjcmVhdGVDb250YWN0ID0gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6Y29udGFjdEluZm8nLCAnZ21kOkNJX0NvbnRhY3QnKSxcbiAgICBjb250YWN0LnBob25lXG4gICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6cGhvbmUnLCAnZ21kOkNJX1RlbGVwaG9uZScsICdnbWQ6dm9pY2UnKSxcbiAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QucGhvbmUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3AsXG4gICAgYXBwZW5kQ2hpbGRyZW4oY3JlYXRlQWRkcmVzcyksXG4gICAgY29udGFjdC5vcmdhbml6YXRpb24/LndlYnNpdGVcbiAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpvbmxpbmVSZXNvdXJjZScsICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnKSxcbiAgICAgICAgICAgIHdyaXRlTGlua2FnZShjb250YWN0Lm9yZ2FuaXphdGlvbi53ZWJzaXRlKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBub29wXG4gIClcblxuICByZXR1cm4gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JyksXG4gICAgICBmdWxsTmFtZVxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmluZGl2aWR1YWxOYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGZ1bGxOYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgY29udGFjdC5wb3NpdGlvblxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnBvc2l0aW9uTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LnBvc2l0aW9uKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuXG4gICAgICBjb250YWN0Lm9yZ2FuaXphdGlvbj8ubmFtZVxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm9yZ2FuaXNhdGlvbk5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5vcmdhbml6YXRpb24ubmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBjcmVhdGVDb250YWN0LFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpyb2xlJywgJ2dtZDpDSV9Sb2xlQ29kZScpLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX1JvbGVDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRSb2xlQ29kZShjb250YWN0LnJvbGUpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVLZXl3b3JkcygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKHBpcGUoZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZGVzY3JpcHRpdmVLZXl3b3JkcycpKSlcbn1cblxuLy8gcmV0dXJucyBhIDxnbWQ6dGhlc2F1cnVzTmFtZT4gZWxlbWVudFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRoZXNhdXJ1cyh0aGVzYXVydXM6IFRoZXNhdXJ1c01vZGVsKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDp0aGVzYXVydXNOYW1lJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnRpdGxlJyksXG4gICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHRoZXNhdXJ1cy5uYW1lIHx8IHRoZXNhdXJ1cy5pZClcbiAgICAgICksXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6aWRlbnRpZmllcicsICdnbWQ6TURfSWRlbnRpZmllcicpLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmNvZGUnKSxcbiAgICAgICAgICAgIHRoZXNhdXJ1cy51cmxcbiAgICAgICAgICAgICAgPyB3cml0ZUFuY2hvcih0aGVzYXVydXMudXJsLCB0aGVzYXVydXMuaWQpXG4gICAgICAgICAgICAgIDogd3JpdGVDaGFyYWN0ZXJTdHJpbmcodGhlc2F1cnVzLmlkKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kS2V5d29yZHMoXG4gIGtleXdvcmRzOiBLZXl3b3JkW10sXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pIHtcbiAgLy8ga2V5d29yZHMgYXJlIGdyb3VwZWQgYnkgdGhlc2F1cnVzIGlmIHRoZXkgaGF2ZSBvbmUsIG90aGVyd2lzZSBieSB0eXBlXG4gIGNvbnN0IGtleXdvcmRzQnlUaGVzYXVydXM6IEtleXdvcmRbXVtdID0ga2V5d29yZHMucmVkdWNlKChhY2MsIGtleXdvcmQpID0+IHtcbiAgICBjb25zdCB0aGVzYXVydXNJZCA9IGtleXdvcmQudGhlc2F1cnVzPy5pZFxuICAgIGNvbnN0IHR5cGUgPSBrZXl3b3JkLnR5cGVcbiAgICBsZXQgZXhpc3RpbmdHcm91cCA9IGFjYy5maW5kKChncm91cCkgPT5cbiAgICAgIHRoZXNhdXJ1c0lkXG4gICAgICAgID8gZ3JvdXBbMF0udGhlc2F1cnVzPy5pZCA9PT0gdGhlc2F1cnVzSWRcbiAgICAgICAgOiBncm91cFswXS50eXBlID09PSB0eXBlICYmICFncm91cFswXS50aGVzYXVydXNcbiAgICApXG4gICAgaWYgKCFleGlzdGluZ0dyb3VwKSB7XG4gICAgICBleGlzdGluZ0dyb3VwID0gW11cbiAgICAgIGFjYy5wdXNoKGV4aXN0aW5nR3JvdXApXG4gICAgfVxuICAgIGV4aXN0aW5nR3JvdXAucHVzaChrZXl3b3JkKVxuICAgIHJldHVybiBhY2NcbiAgfSwgW10pXG4gIHJldHVybiBhcHBlbmRDaGlsZHJlbihcbiAgICAuLi5rZXl3b3Jkc0J5VGhlc2F1cnVzLm1hcCgoa2V5d29yZHMpID0+XG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpdmVLZXl3b3JkcycsICdnbWQ6TURfS2V5d29yZHMnKSxcbiAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDp0eXBlJywgJ2dtZDpNRF9LZXl3b3JkVHlwZUNvZGUnKSxcbiAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9LZXl3b3JkVHlwZUNvZGUnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBrZXl3b3Jkc1swXS50eXBlKVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAga2V5d29yZHNbMF0udGhlc2F1cnVzXG4gICAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihjcmVhdGVUaGVzYXVydXMoa2V5d29yZHNbMF0udGhlc2F1cnVzKSlcbiAgICAgICAgICA6IG5vb3AsXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIC4uLmtleXdvcmRzLm1hcCgoa2V5d29yZCkgPT5cbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDprZXl3b3JkJyksXG4gICAgICAgICAgICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICAgIGtleXdvcmQubGFiZWwsXG4gICAgICAgICAgICAgICAga2V5d29yZC50cmFuc2xhdGlvbnM/LmxhYmVsLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50KFxuICBjb25zdHJhaW50OiBDb25zdHJhaW50LFxuICB0eXBlOiAnbGVnYWwnIHwgJ3NlY3VyaXR5JyB8ICdvdGhlcicsXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pIHtcbiAgaWYgKHR5cGUgPT09ICdzZWN1cml0eScpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoXG4gICAgICAgICdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycsXG4gICAgICAgICdnbWQ6TURfU2VjdXJpdHlDb25zdHJhaW50cydcbiAgICAgICksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICAgJ2dtZDpjbGFzc2lmaWNhdGlvbicsXG4gICAgICAgICAgICAnZ21kOk1EX0NsYXNzaWZpY2F0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX0NsYXNzaWZpY2F0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgJ3Jlc3RyaWN0ZWQnKVxuICAgICAgICApLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgICAgICAgJ3VybCcgaW4gY29uc3RyYWludFxuICAgICAgICAgICAgPyB3cml0ZUxvY2FsaXplZEFuY2hvcihcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnVybCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2xlZ2FsJykge1xuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLCAnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnb3RoZXJSZXN0cmljdGlvbnMnKVxuICAgICAgICApLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgICAgJ3VybCcgaW4gY29uc3RyYWludFxuICAgICAgICAgICAgPyB3cml0ZUxvY2FsaXplZEFuY2hvcihcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnVybCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH1cbiAgLy8gb3RoZXJcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycsXG4gICAgICAnZ21kOk1EX0NvbnN0cmFpbnRzJyxcbiAgICAgICdnbWQ6dXNlTGltaXRhdGlvbidcbiAgICApLFxuICAgICd1cmwnIGluIGNvbnN0cmFpbnRcbiAgICAgID8gd3JpdGVMb2NhbGl6ZWRBbmNob3IoXG4gICAgICAgICAgY29uc3RyYWludC51cmwsXG4gICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICApXG4gICAgICA6IHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVPdGhlckNvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgbWFwQXJyYXkoXG4gICAgICAgIHJlbW92ZUNoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfQ29uc3RyYWludHMnKSxcbiAgICAgICAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICAgICAgICAgICAgICAoYXJyYXkpID0+IGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU2VjdXJpdHlDb25zdHJhaW50cygpIHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIG1hcEFycmF5KFxuICAgICAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX1NlY3VyaXR5Q29uc3RyYWludHMnKSxcbiAgICAgICAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICAgICAgICAgICAgICAoYXJyYXkpID0+IGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGVnYWxDb25zdHJhaW50cygpIHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIG1hcEFycmF5KFxuICAgICAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnKSxcbiAgICAgICAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICAgICAgICdnbWQ6YWNjZXNzQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgICAgICAgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgICAgICAgICAgICAgIChyZXN0cmljdGlvbkNvZGVzKSA9PlxuICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25Db2Rlcy5ldmVyeSgoY29kZSkgPT4gY29kZSAhPT0gJ2xpY2Vuc2UnKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXB0eVJlc291cmNlQ29uc3RyYWludHMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KHBpcGUoYWxsQ2hpbGRyZW5FbGVtZW50LCAoYXJyYXkpID0+IGFycmF5Lmxlbmd0aCA9PT0gMCkpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMaWNlbnNlcygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6YWNjZXNzQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgICAgICAgIChyZXN0cmljdGlvbkNvZGVzKSA9PlxuICAgICAgICAgICAgcmVzdHJpY3Rpb25Db2Rlcy5zb21lKChjb2RlKSA9PiBjb2RlID09PSAnbGljZW5zZScpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxpY2Vuc2UoXG4gIGxpY2Vuc2U6IENvbnN0cmFpbnQsXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLCAnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDphY2Nlc3NDb25zdHJhaW50cycsICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICApLFxuICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdsaWNlbnNlJylcbiAgICAgICksXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6YWNjZXNzQ29uc3RyYWludHMnLCAnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgKSxcbiAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnb3RoZXJSZXN0cmljdGlvbnMnKVxuICAgICAgKSxcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgICd1cmwnIGluIGxpY2Vuc2VcbiAgICAgICAgICA/IHdyaXRlQW5jaG9yKGxpY2Vuc2UudXJsLCBsaWNlbnNlLnRleHQpXG4gICAgICAgICAgOiB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgbGljZW5zZS50ZXh0LFxuICAgICAgICAgICAgICBsaWNlbnNlLnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVPbmxpbmVSZXNvdXJjZXMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmRpc3RyaWJ1dGlvbkluZm8nKVxufVxuXG5mdW5jdGlvbiBhcHBlbmRPbmxpbmVSZXNvdXJjZUZvcm1hdChtaW1lVHlwZTogc3RyaW5nKSB7XG4gIHJldHVybiBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkZvcm1hdCcsICdnbWQ6TURfRm9ybWF0JyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6bmFtZScpLCB3cml0ZUNoYXJhY3RlclN0cmluZyhtaW1lVHlwZSkpLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp2ZXJzaW9uJyksXG4gICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoJzEuMCcpIC8vIGhhcmRjb2RpbmcgdGhpcyBhcyBpdCBtb3N0IGxpa2VseSB3b24ndCBiZSB1c2VkIGJ1dCBpcyBtYW5kYXRvcnlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlzdHJpYnV0aW9uSW5mbygpIHtcbiAgcmV0dXJuIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKVxufVxuXG4vLyBhcHBseSB0byBNRF9EaXN0cmlidXRpb25cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRPbmxpbmVSZXNvdXJjZShcbiAgb25saW5lUmVzb3VyY2U6IERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgYXBwZW5kRm9ybWF0Rm46IChcbiAgICBtaW1lVHlwZTogc3RyaW5nXG4gICkgPT4gQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4sXG4gIHRyYW5zbGF0aW9uczogUmVjb3JkVHJhbnNsYXRpb25zLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKSB7XG4gIGxldCBuYW1lOiBzdHJpbmdcbiAgbGV0IGZ1bmN0aW9uQ29kZTogc3RyaW5nXG4gIGxldCBwcm90b2NvbDogc3RyaW5nXG4gIGlmIChvbmxpbmVSZXNvdXJjZS50eXBlID09PSAnc2VydmljZScpIHtcbiAgICBuYW1lID0gb25saW5lUmVzb3VyY2UuaWRlbnRpZmllckluU2VydmljZSAvLyB0aGlzIGlzIGZvciBHZW9OZXR3b3JrIHRvIGtub3cgdGhlIGxheWVyIG5hbWVcbiAgICBmdW5jdGlvbkNvZGUgPSAnZG93bmxvYWQnXG4gICAgcHJvdG9jb2wgPSBnZXRTZXJ2aWNlRGlzdHJpYnV0aW9uUHJvdG9jb2wob25saW5lUmVzb3VyY2UpXG4gIH0gZWxzZSBpZiAob25saW5lUmVzb3VyY2UudHlwZSA9PT0gJ2Rvd25sb2FkJykge1xuICAgIG5hbWUgPSBvbmxpbmVSZXNvdXJjZS5uYW1lXG4gICAgZnVuY3Rpb25Db2RlID0gJ2Rvd25sb2FkJ1xuICAgIHByb3RvY29sID0gJ1dXVzpET1dOTE9BRCdcbiAgfSBlbHNlIHtcbiAgICBuYW1lID0gb25saW5lUmVzb3VyY2UubmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdpbmZvcm1hdGlvbidcbiAgICBwcm90b2NvbCA9ICdXV1c6TElOSydcbiAgfVxuICBjb25zdCBhcHBlbmRUcmFuc2Zlck9wdGlvbnMgPSBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDp0cmFuc2Zlck9wdGlvbnMnLFxuICAgICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgICAnZ21kOm9uTGluZScsXG4gICAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgICApLFxuICAgICAgd3JpdGVMaW5rYWdlKG9ubGluZVJlc291cmNlLnVybCksXG4gICAgICAnZGVzY3JpcHRpb24nIGluIG9ubGluZVJlc291cmNlXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgICAgICAgb25saW5lUmVzb3VyY2UuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgb25saW5lUmVzb3VyY2UudHJhbnNsYXRpb25zPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgbmFtZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6bmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIG9ubGluZVJlc291cmNlLnRyYW5zbGF0aW9ucz8ubmFtZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOnByb3RvY29sJyksIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHByb3RvY29sKSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmZ1bmN0aW9uJywgJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9PbkxpbmVGdW5jdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGZ1bmN0aW9uQ29kZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICAnbWltZVR5cGUnIGluIG9ubGluZVJlc291cmNlXG4gICAgICA/IGFwcGVuZEZvcm1hdEZuKG9ubGluZVJlc291cmNlLm1pbWVUeXBlKVxuICAgICAgOiBub29wLFxuICAgIGFwcGVuZFRyYW5zZmVyT3B0aW9uc1xuICApXG59XG5cbi8qKlxuICogTG9va3MgZm9yIHNydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24gb3IgZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbiBlbGVtZW50XG4gKiBkZXBlbmRpbmcgb24gcmVjb3JkIHR5cGUsIGNyZWF0ZSBpZiBtaXNzaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpIHtcbiAgcmV0dXJuIChyb290RWw6IFhtbEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBraW5kID0gcmVhZEtpbmQocm9vdEVsKVxuICAgIGxldCBlbHROYW1lID0gJ2dtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24nXG4gICAgaWYgKGtpbmQgPT09ICdzZXJ2aWNlJykgZWx0TmFtZSA9ICdzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uJ1xuICAgIHJldHVybiBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmlkZW50aWZpY2F0aW9uSW5mbycsIGVsdE5hbWUpKHJvb3RFbClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE9yQ3JlYXRlRGlzdHJpYnV0aW9uKCkge1xuICByZXR1cm4gKHJvb3RFbDogWG1sRWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZShcbiAgICAgICdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycsXG4gICAgICAnZ21kOk1EX0Rpc3RyaWJ1dGlvbidcbiAgICApKHJvb3RFbClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVVbmlxdWVJZGVudGlmaWVyKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpmaWxlSWRlbnRpZmllcicpLFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlS2luZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6aGllcmFyY2h5TGV2ZWwnLCAnZ21kOk1EX1Njb3BlQ29kZScpLFxuICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Njb3BlQ29kZSdcbiAgICApLFxuICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgcmVjb3JkLmtpbmQpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUaXRsZShyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICByZWNvcmQudGl0bGUsXG4gICAgICByZWNvcmQudHJhbnNsYXRpb25zPy50aXRsZSxcbiAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVBYnN0cmFjdChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDphYnN0cmFjdCcpLFxuICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgcmVjb3JkLmFic3RyYWN0LFxuICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucz8uYWJzdHJhY3QsXG4gICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3RhdHVzKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOnN0YXR1cycsICdnbWQ6TURfUHJvZ3Jlc3NDb2RlJyksXG4gICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAnY29kZUxpc3QnLFxuICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUHJvZ3Jlc3NDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRQcm9ncmVzc0NvZGUocmVjb3JkLnN0YXR1cykpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6Y29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmNvbnRhY3RzLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Y29udGFjdCcpLFxuICAgICAgICAgIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoXG4gICAgICAgICAgICBjb250YWN0LFxuICAgICAgICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0c0ZvclJlc291cmNlKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnBvaW50T2ZDb250YWN0JyksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpjb250YWN0JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuY29udGFjdHNGb3JSZXNvdXJjZS5tYXAoKGNvbnRhY3QpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnBvaW50T2ZDb250YWN0JyksXG4gICAgICAgICAgYXBwZW5kUmVzcG9uc2libGVQYXJ0eShcbiAgICAgICAgICAgIGNvbnRhY3QsXG4gICAgICAgICAgICByZWNvcmQudHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUtleXdvcmRzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVLZXl3b3JkcygpLFxuICAgIGFwcGVuZEtleXdvcmRzKHJlY29yZC5rZXl3b3JkcywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVRvcGljcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDp0b3BpY0NhdGVnb3J5JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQudG9waWNzLm1hcCgodG9waWMpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnRvcGljQ2F0ZWdvcnknLCAnZ21kOk1EX1RvcGljQ2F0ZWdvcnlDb2RlJyksXG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQodG9waWMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaWNlbnNlcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlTGljZW5zZXMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5saWNlbnNlcy5tYXAoKGxpY2Vuc2UpID0+XG4gICAgICAgIGNyZWF0ZUxpY2Vuc2UobGljZW5zZSwgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMZWdhbENvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVMZWdhbENvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQubGVnYWxDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ2xlZ2FsJywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTZWN1cml0eUNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVTZWN1cml0eUNvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuc2VjdXJpdHlDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ3NlY3VyaXR5JywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPdGhlckNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVPdGhlckNvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQub3RoZXJDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ290aGVyJywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVVcGRhdGVGcmVxdWVuY3koXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnbWQ6cmVzb3VyY2VNYWludGVuYW5jZScpLFxuICAgIHJlbW92ZUFsbENoaWxkcmVuKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpNRF9NYWludGVuYW5jZUluZm9ybWF0aW9uJyksXG4gICAgdHlwZW9mIHJlY29yZC51cGRhdGVGcmVxdWVuY3kgPT09ICdvYmplY3QnXG4gICAgICA/IHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoXG4gICAgICAgICAgICAnZ21kOnVzZXJEZWZpbmVkTWFpbnRlbmFuY2VGcmVxdWVuY3knLFxuICAgICAgICAgICAgJ2d0czpUTV9QZXJpb2REdXJhdGlvbidcbiAgICAgICAgICApLFxuICAgICAgICAgIHNldFRleHRDb250ZW50KGdldElTT0R1cmF0aW9uKHJlY29yZC51cGRhdGVGcmVxdWVuY3kpKVxuICAgICAgICApXG4gICAgICA6IHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoXG4gICAgICAgICAgICAnZ21kOm1haW50ZW5hbmNlQW5kVXBkYXRlRnJlcXVlbmN5JyxcbiAgICAgICAgICAgICdnbWQ6TURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3RWYWx1ZScsXG4gICAgICAgICAgICBnZXRNYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUocmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlY29yZFVwZGF0ZWQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmRhdGVTdGFtcCcpLFxuICAgIHJlbW92ZUFsbENoaWxkcmVuKCksXG4gICAgd3JpdGVEYXRlVGltZShyZWNvcmQucmVjb3JkVXBkYXRlZClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVSZXNvdXJjZURhdGUoXG4gIHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRhdGUnKSxcbiAgICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICAgICAnZ21kOkNJX0RhdGUnLFxuICAgICAgICAgICAgICAnZ21kOmRhdGVUeXBlJyxcbiAgICAgICAgICAgICAgJ2dtZDpDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRSZXNvdXJjZURhdGUoXG4gIGRhdGU6IERhdGUsXG4gIHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkYXRlJywgJ2dtZDpDSV9EYXRlJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOmRhdGUnKSwgd3JpdGVEYXRlVGltZShkYXRlKSksXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkYXRlVHlwZScsICdnbWQ6Q0lfRGF0ZVR5cGVDb2RlJyksXG4gICAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfRGF0ZVR5cGVDb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgdHlwZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VDcmVhdGVkKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHJlbW92ZVJlc291cmNlRGF0ZSgnY3JlYXRpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlc291cmNlQ3JlYXRlZCkgcmV0dXJuXG4gIGFwcGVuZFJlc291cmNlRGF0ZShyZWNvcmQucmVzb3VyY2VDcmVhdGVkLCAnY3JlYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlc291cmNlVXBkYXRlZChcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVSZXNvdXJjZURhdGUoJ3JldmlzaW9uJykocm9vdEVsKVxuICBpZiAoIXJlY29yZC5yZXNvdXJjZVVwZGF0ZWQpIHJldHVyblxuICBhcHBlbmRSZXNvdXJjZURhdGUocmVjb3JkLnJlc291cmNlVXBkYXRlZCwgJ3JldmlzaW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXNvdXJjZVB1Ymxpc2hlZChcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVSZXNvdXJjZURhdGUoJ3B1YmxpY2F0aW9uJykocm9vdEVsKVxuICBpZiAoIXJlY29yZC5yZXNvdXJjZVB1Ymxpc2hlZCkgcmV0dXJuXG4gIGFwcGVuZFJlc291cmNlRGF0ZShyZWNvcmQucmVzb3VyY2VQdWJsaXNoZWQsICdwdWJsaWNhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3BhdGlhbFJlcHJlc2VudGF0aW9uKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGlmICghcmVjb3JkLnNwYXRpYWxSZXByZXNlbnRhdGlvbikge1xuICAgIHBpcGUoXG4gICAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpzcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlJylcbiAgICApKHJvb3RFbClcbiAgICByZXR1cm5cbiAgfVxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnZ21kOnNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUnLFxuICAgICAgJ2dtZDpNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1NwYXRpYWxSZXByZXNlbnRhdGlvblR5cGVDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCByZWNvcmQuc3BhdGlhbFJlcHJlc2VudGF0aW9uKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlR3JhcGhpY092ZXJ2aWV3cyhcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpncmFwaGljT3ZlcnZpZXcnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5vdmVydmlld3MubWFwKChvdmVydmlldykgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6Z3JhcGhpY092ZXJ2aWV3JywgJ2dtZDpNRF9Ccm93c2VHcmFwaGljJyksXG4gICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZmlsZU5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob3ZlcnZpZXcudXJsLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICAnZGVzY3JpcHRpb24nIGluIG92ZXJ2aWV3XG4gICAgICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZmlsZURlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvdmVydmlldy5kZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbm9vcFxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGluZWFnZShyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpkYXRhUXVhbGl0eUluZm8nLFxuICAgICAgJ2dtZDpEUV9EYXRhUXVhbGl0eScsXG4gICAgICAnZ21kOmxpbmVhZ2UnLFxuICAgICAgJ2dtZDpMSV9MaW5lYWdlJyxcbiAgICAgICdnbWQ6c3RhdGVtZW50J1xuICAgICksXG4gICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICByZWNvcmQubGluZWFnZSxcbiAgICAgIHJlY29yZC50cmFuc2xhdGlvbnM/LmxpbmVhZ2UsXG4gICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcnZpY2VFbmRwb2ludFByb3RvY29sKGVuZHBvaW50OiBTZXJ2aWNlRW5kcG9pbnQpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGVuZHBvaW50LnByb3RvY29sLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICd3ZnMnOlxuICAgICAgcmV0dXJuICdPR0M6V0ZTJ1xuICAgIGNhc2UgJ3dtcyc6XG4gICAgICByZXR1cm4gJ09HQzpXTVMnXG4gICAgY2FzZSAnd3BzJzpcbiAgICAgIHJldHVybiAnT0dDOldQUydcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGVuZHBvaW50LnByb3RvY29sXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9ubGluZVJlc291cmNlKG9ubGluZVJlc291cmNlOiBTZXJ2aWNlT25saW5lUmVzb3VyY2UpIHtcbiAgbGV0IGxpbmthZ2VVcmwsIGZ1bmN0aW9uQ29kZSwgcHJvdG9jb2xcbiAgaWYgKG9ubGluZVJlc291cmNlLnR5cGUgPT09ICdlbmRwb2ludCcpIHtcbiAgICBsaW5rYWdlVXJsID0gb25saW5lUmVzb3VyY2UuZW5kcG9pbnRVcmwudG9TdHJpbmcoKVxuICAgIHByb3RvY29sID0gZ2V0U2VydmljZUVuZHBvaW50UHJvdG9jb2wob25saW5lUmVzb3VyY2UpXG4gICAgZnVuY3Rpb25Db2RlID0gJ2Rvd25sb2FkJ1xuICB9IGVsc2Uge1xuICAgIGxpbmthZ2VVcmwgPSBvbmxpbmVSZXNvdXJjZS51cmwudG9TdHJpbmcoKVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdpbmZvcm1hdGlvbidcbiAgICBwcm90b2NvbCA9ICdXV1c6TElOSydcbiAgfVxuICBjb25zdCBhcHBlbmRUcmFuc2Zlck9wdGlvbnMgPSBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnRyYW5zZmVyT3B0aW9ucycpLFxuICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoXG4gICAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICAgICksXG4gICAgICB3cml0ZUxpbmthZ2UobGlua2FnZVVybCksXG4gICAgICAnZGVzY3JpcHRpb24nIGluIG9ubGluZVJlc291cmNlXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob25saW5lUmVzb3VyY2UuZGVzY3JpcHRpb24pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICAnbmFtZScgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG9ubGluZVJlc291cmNlLm5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocHJvdG9jb2wpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX09uTGluZUZ1bmN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZnVuY3Rpb25Db2RlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBhcHBlbmRUcmFuc2Zlck9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YXNldE9ubGluZVJlc291cmNlcyhcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBhcHBlbmRDaGlsZHJlbihcbiAgICAuLi5yZWNvcmQub25saW5lUmVzb3VyY2VzLm1hcCgoZCkgPT5cbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZURpc3RyaWJ1dGlvbkluZm8oKSxcbiAgICAgICAgYXBwZW5kT25saW5lUmVzb3VyY2UoXG4gICAgICAgICAgZCxcbiAgICAgICAgICBhcHBlbmRPbmxpbmVSZXNvdXJjZUZvcm1hdCxcbiAgICAgICAgICByZWNvcmQudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRTZXJ2aWNlT25saW5lUmVzb3VyY2VzKFxuICByZWNvcmQ6IFNlcnZpY2VSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGFwcGVuZENoaWxkcmVuKC4uLnJlY29yZC5vbmxpbmVSZXNvdXJjZXMubWFwKGNyZWF0ZU9ubGluZVJlc291cmNlKSkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPbmxpbmVSZXNvdXJjZXMoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcmVtb3ZlT25saW5lUmVzb3VyY2VzKCkocm9vdEVsKVxuXG4gIGlmIChyZWNvcmQua2luZCA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgYXBwZW5kRGF0YXNldE9ubGluZVJlc291cmNlcyhyZWNvcmQsIHJvb3RFbClcbiAgICByZXR1cm5cbiAgfVxuICBhcHBlbmRTZXJ2aWNlT25saW5lUmVzb3VyY2VzKHJlY29yZCwgcm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUZW1wb3JhbEV4dGVudHMoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnRlbXBvcmFsRWxlbWVudCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLnRlbXBvcmFsRXh0ZW50cy5tYXAoKGV4dGVudCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6dGVtcG9yYWxFbGVtZW50JywgJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcpLFxuICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgJ3N0YXJ0JyBpbiBleHRlbnQgJiYgJ2VuZCcgaW4gZXh0ZW50XG4gICAgICAgICAgICAgID8gcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpleHRlbnQnLCAnZ21sOlRpbWVQZXJpb2QnKSxcbiAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtbDpiZWdpblBvc2l0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudC5zdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNldFRleHRDb250ZW50KGZvcm1hdChleHRlbnQuc3RhcnQsICd5eXl5LU1NLWRkJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogd3JpdGVBdHRyaWJ1dGUoJ2luZGV0ZXJtaW5hdGVQb3NpdGlvbicsICd1bmtub3duJylcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21sOmVuZFBvc2l0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudC5lbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZXRUZXh0Q29udGVudChmb3JtYXQoZXh0ZW50LmVuZCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB3cml0ZUF0dHJpYnV0ZSgnaW5kZXRlcm1pbmF0ZVBvc2l0aW9uJywgJ3Vua25vd24nKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBwaXBlKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgJ2dtZDpleHRlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZ21sOlRpbWVJbnN0YW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2dtbDp0aW1lUG9zaXRpb24nXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgZXh0ZW50LnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZm9ybWF0KGV4dGVudC5zdGFydCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgOiB3cml0ZUF0dHJpYnV0ZSgnaW5kZXRlcm1pbmF0ZVBvc2l0aW9uJywgJ3Vua25vd24nKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTcGF0aWFsRXh0ZW50cyhyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBjb25zdCBhcHBlbmRCb3VuZGluZ1BvbHlnb24gPSAoZ2VvbWV0cnk/OiBHZW9tZXRyeSkgPT4ge1xuICAgIGlmICghZ2VvbWV0cnkpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6RVhfQm91bmRpbmdQb2x5Z29uJyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cG9seWdvbicpLFxuICAgICAgICAgIGFwcGVuZENoaWxkcmVuKCgpID0+IHdyaXRlR2VvbWV0cnkoZ2VvbWV0cnkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgY29uc3QgYXBwZW5kR2VvZ3JhcGhpY0JvdW5kaW5nQm94ID0gKFxuICAgIGJib3g/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXVxuICApID0+IHtcbiAgICBpZiAoIWJib3gpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6RVhfR2VvZ3JhcGhpY0JvdW5kaW5nQm94JyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6d2VzdEJvdW5kTG9uZ2l0dWRlJyksIHdyaXRlRGVjaW1hbChiYm94WzBdKSksXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOmVhc3RCb3VuZExvbmdpdHVkZScpLCB3cml0ZURlY2ltYWwoYmJveFsyXSkpLFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpzb3V0aEJvdW5kTGF0aXR1ZGUnKSwgd3JpdGVEZWNpbWFsKGJib3hbMV0pKSxcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6bm9ydGhCb3VuZExhdGl0dWRlJyksIHdyaXRlRGVjaW1hbChiYm94WzNdKSlcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBjb25zdCBhcHBlbmRHZW9ncmFwaGljRGVzY3JpcHRpb24gPSAoXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgdHJhbnNsYXRpb25zPzogRmllbGRUcmFuc2xhdGlvblxuICApID0+IHtcbiAgICBpZiAoIWRlc2NyaXB0aW9uKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDpFWF9HZW9ncmFwaGljRGVzY3JpcHRpb24nLFxuICAgICAgICAnZ21kOmdlb2dyYXBoaWNJZGVudGlmaWVyJyxcbiAgICAgICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAgICAgJ2dtZDpjb2RlJ1xuICAgICAgKSxcbiAgICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmdlb2dyYXBoaWNFbGVtZW50JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuc3BhdGlhbEV4dGVudHMubWFwKChleHRlbnQpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmdlb2dyYXBoaWNFbGVtZW50JyksXG4gICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBhcHBlbmRCb3VuZGluZ1BvbHlnb24oZXh0ZW50Lmdlb21ldHJ5KSxcbiAgICAgICAgICAgIGFwcGVuZEdlb2dyYXBoaWNCb3VuZGluZ0JveChleHRlbnQuYmJveCksXG4gICAgICAgICAgICBhcHBlbmRHZW9ncmFwaGljRGVzY3JpcHRpb24oXG4gICAgICAgICAgICAgIGV4dGVudC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgZXh0ZW50LnRyYW5zbGF0aW9ucz8uZGVzY3JpcHRpb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMYW5ndWFnZXMocmVjb3JkOiBEYXRhc2V0UmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgLy8gY2xlYXIgZXhpc3RpbmdcbiAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpsb2NhbGUnKShyb290RWwpXG5cbiAgLy8gZG8gbm90IHdyaXRlIGRvd24gbGFuZ3VhZ2VzIGlmIHRoZXJlIGlzIG5vdGhpbmcgZWxzZSB0aGFuIHRoZSBkZWZhdWx0IG9uZVxuICBpZiAoIXJlY29yZC5vdGhlckxhbmd1YWdlcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBjcmVhdGVMYW5ndWFnZUVsID0gKGxhbmc6IExhbmd1YWdlQ29kZSkgPT5cbiAgICBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmxvY2FsZScsICdnbWQ6UFRfTG9jYWxlJyksXG4gICAgICB3cml0ZUF0dHJpYnV0ZSgnaWQnLCBsYW5nLnRvVXBwZXJDYXNlKCkpLFxuICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoJ2dtZDpsYW5ndWFnZUNvZGUnLCAnZ21kOkxhbmd1YWdlQ29kZScpLFxuICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0JywgJ2h0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvJyksXG4gICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIExBTkdfMl9UT18zX01BUFBFUltsYW5nXSlcbiAgICApXG5cbiAgLy8gYWRkIG5ldyBsYW5ndWFnZXMgKG9ubHkgaWYgb3RoZXIgdGhhbiBkZWZhdWx0IG9uZSlcbiAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgY3JlYXRlTGFuZ3VhZ2VFbChyZWNvcmQuZGVmYXVsdExhbmd1YWdlKSxcbiAgICAuLi5yZWNvcmQub3RoZXJMYW5ndWFnZXMubWFwKGNyZWF0ZUxhbmd1YWdlRWwpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEZWZhdWx0TGFuZ3VhZ2UoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgY29uc3QgbGFuZzMgPSBMQU5HXzJfVE9fM19NQVBQRVJbcmVjb3JkLmRlZmF1bHRMYW5ndWFnZS50b0xvd2VyQ2FzZSgpXVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmxhbmd1YWdlJywgJ2dtZDpMYW5ndWFnZUNvZGUnKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3QnLCAnaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi8nKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGxhbmczKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VJZGVudGlmaWVyKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6aWRlbnRpZmllcicpLFxuICAgIHJlY29yZC5yZXNvdXJjZUlkZW50aWZpZXJcbiAgICAgID8gcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRDaGlsZCgnZ21kOmlkZW50aWZpZXInLCAnZ21kOk1EX0lkZW50aWZpZXInLCAnZ21kOmNvZGUnKSxcbiAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhyZWNvcmQucmVzb3VyY2VJZGVudGlmaWVyKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcbiAgKShyb290RWwpXG59XG4iXX0=
489
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTEzOS93cml0ZS1wYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQkEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRXhDLE9BQU8sRUFFTCxXQUFXLEVBQ1gsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQTtBQUM1RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUU5RCxTQUFTLHFCQUFxQixDQUM1QixPQUFrRCxFQUNsRCxJQUFZLEVBQ1osWUFBOEIsRUFDOUIsZUFBNkI7SUFFN0IsSUFBSSxDQUFDLFlBQVk7UUFBRSxPQUFPLE9BQU8sQ0FBQTtJQUNqQyxTQUFTLGVBQWUsQ0FBQyxJQUFrQixFQUFFLFdBQW1C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QUFHO1FBQ2YsS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLEVBQUUsQ0FBQztRQUNULEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxFQUFFLENBQUM7UUFDUCxLQUFLLEVBQUUsQ0FBQztLQUNULENBQUE7SUFDRCxRQUFRLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1QixLQUFLLEtBQUs7WUFDUixJQUFJLGVBQWUsQ0FBQyxZQUFZLElBQUksQ0FBQztnQkFBRSxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTs7Z0JBQ25ELFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBQ25FLE1BQUs7UUFDUCxLQUFLLE1BQU07WUFDVCxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUEsQ0FBQyxnRUFBZ0U7WUFDdEksTUFBSztRQUNQLEtBQUssT0FBTztZQUNWLElBQUksZUFBZSxDQUFDLFlBQVksSUFBSSxDQUFDO2dCQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBOztnQkFDckQsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDbEUsTUFBSztRQUNQLEtBQUssTUFBTTtZQUNULElBQUksZUFBZSxDQUFDLFlBQVksSUFBSSxDQUFDO2dCQUFFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFBOztnQkFDcEQsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDcEUsTUFBSztJQUNULENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUM3RCxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUE7QUFDMUUsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQzdCLE9BQW1CLEVBQ25CLFlBQWdDLEVBQ2hDLGVBQTZCO0lBRTdCLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUVyRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQ3hCLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUNwRCxjQUFjLENBQ1osSUFBSSxDQUNGLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxFQUMxQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQ3BDLENBQ0YsRUFDRCxPQUFPLENBQUMsT0FBTztRQUNiLENBQUMsQ0FBQyxjQUFjLENBQ1osSUFBSSxDQUNGLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUNsQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQ3RDLENBQ0Y7UUFDSCxDQUFDLENBQUMsSUFBSSxDQUNULENBQUE7SUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQ3hCLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLEVBQ3hELE9BQU8sQ0FBQyxLQUFLO1FBQ1gsQ0FBQyxDQUFDLGNBQWMsQ0FDWixJQUFJLENBQ0YsbUJBQW1CLENBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxFQUNqRSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQ3BDLENBQ0Y7UUFDSCxDQUFDLENBQUMsSUFBSSxFQUNSLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFDN0IsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPO1FBQzNCLENBQUMsQ0FBQyxjQUFjLENBQ1osSUFBSSxDQUNGLG1CQUFtQixDQUFDLG9CQUFvQixFQUFFLHVCQUF1QixDQUFDLEVBQ2xFLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUMzQyxDQUNGO1FBQ0gsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUFBO0lBRUQsT0FBTyxjQUFjLENBQ25CLElBQUksQ0FDRixhQUFhLENBQUMseUJBQXlCLENBQUMsRUFDeEMsUUFBUTtRQUNOLENBQUMsQ0FBQyxjQUFjLENBQ1osSUFBSSxDQUNGLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxFQUNuQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FDL0IsQ0FDRjtRQUNILENBQUMsQ0FBQyxJQUFJLEVBQ1IsT0FBTyxDQUFDLFFBQVE7UUFDZCxDQUFDLENBQUMsY0FBYyxDQUNaLElBQUksQ0FDRixhQUFhLENBQUMsa0JBQWtCLENBQUMsRUFDakMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUN2QyxDQUNGO1FBQ0gsQ0FBQyxDQUFDLElBQUksRUFFUixPQUFPLENBQUMsWUFBWSxFQUFFLElBQUk7UUFDeEIsQ0FBQyxDQUFDLGNBQWMsQ0FDWixJQUFJLENBQ0YsYUFBYSxDQUFDLHNCQUFzQixDQUFDLEVBQ3JDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQ2hELENBQ0Y7UUFDSCxDQUFDLENBQUMsSUFBSSxFQUNSLGNBQWMsQ0FDWixhQUFhLEVBQ2IsSUFBSSxDQUNGLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxFQUNsRCxjQUFjLENBQ1osVUFBVSxFQUNWLDJFQUEyRSxDQUM1RSxFQUNELGNBQWMsQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUMzRCxDQUNGLENBQ0YsQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjO0lBQzVCLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUM1RSxDQUFDO0FBRUQsd0NBQXdDO0FBQ3hDLE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBeUI7SUFDdkQsT0FBTyxJQUFJLENBQ1QsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsRUFDM0QsY0FBYyxDQUNaLElBQUksQ0FDRixhQUFhLENBQUMsV0FBVyxDQUFDLEVBQzFCLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUNyRCxFQUNELElBQUksQ0FDRixtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxFQUMxRCxjQUFjLENBQ1osSUFBSSxDQUNGLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFDekIsU0FBUyxDQUFDLEdBQUc7UUFDWCxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUN2QyxDQUNGLENBQ0YsQ0FDRixDQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsUUFBbUIsRUFDbkIsZUFBNkI7SUFFN0Isd0VBQXdFO0lBQ3hFLE1BQU0sbUJBQW1CLEdBQWdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUE7UUFDekMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUN6QixJQUFJLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDckMsV0FBVztZQUNULENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxXQUFXO1lBQ3hDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ2xELENBQUE7UUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsYUFBYSxHQUFHLEVBQUUsQ0FBQTtZQUNsQixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3pCLENBQUM7UUFDRCxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzNCLE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ04sT0FBTyxjQUFjLENBQ25CLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDdEMsSUFBSSxDQUNGLG1CQUFtQixDQUFDLHlCQUF5QixFQUFFLGlCQUFpQixDQUFDLEVBQ2pFLGNBQWMsQ0FDWixJQUFJLENBQ0YsbUJBQW1CLENBQUMsVUFBVSxFQUFFLHdCQUF3QixDQUFDLEVBQ3pELGNBQWMsQ0FDWixVQUFVLEVBQ1Ysa0ZBQWtGLENBQ25GLEVBQ0QsY0FBYyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ2xELENBQ0YsRUFDRCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNuQixDQUFDLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLElBQUksRUFDUixjQUFjLENBQ1osR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDMUIsSUFBSSxDQUNGLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFDNUIsNkJBQTZCLENBQzNCLE9BQU8sQ0FBQyxLQUFLLEVBQ2IsT0FBTyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQzNCLGVBQWUsQ0FDaEIsQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUNGLENBQ0YsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFVBQXNCLEVBQ3RCLElBQW9DLEVBQ3BDLGVBQTZCO0lBRTdCLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUNULG1CQUFtQixDQUNqQix5QkFBeUIsRUFDekIsNEJBQTRCLENBQzdCLEVBQ0QsY0FBYyxDQUNaLElBQUksQ0FDRixtQkFBbUIsQ0FDakIsb0JBQW9CLEVBQ3BCLDJCQUEyQixDQUM1QixFQUNELGNBQWMsQ0FDWixVQUFVLEVBQ1YscUZBQXFGLENBQ3RGLEVBQ0QsY0FBYyxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FDOUMsRUFDRCxJQUFJLENBQ0YsYUFBYSxDQUFDLG1CQUFtQixDQUFDLEVBQ2xDLEtBQUssSUFBSSxVQUFVO1lBQ2pCLENBQUMsQ0FBQyxvQkFBb0IsQ0FDbEIsVUFBVSxDQUFDLEdBQUcsRUFDZCxVQUFVLENBQUMsSUFBSSxFQUNmLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUM3QixlQUFlLENBQ2hCO1lBQ0gsQ0FBQyxDQUFDLDZCQUE2QixDQUMzQixVQUFVLENBQUMsSUFBSSxFQUNmLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUM3QixlQUFlLENBQ2hCLENBQ04sQ0FDRixDQUNGLENBQUE7SUFDSCxDQUFDO1NBQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQ1QsbUJBQW1CLENBQUMseUJBQXlCLEVBQUUseUJBQXlCLENBQUMsRUFDekUsY0FBYyxDQUNaLElBQUksQ0FDRixtQkFBbUIsQ0FDakIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixDQUN6QixFQUNELGNBQWMsQ0FDWixVQUFVLEVBQ1Ysa0ZBQWtGLENBQ25GLEVBQ0QsY0FBYyxDQUFDLGVBQWUsRUFBRSxtQkFBbUIsQ0FBQyxDQUNyRCxFQUNELElBQUksQ0FDRixhQUFhLENBQUMsc0JBQXNCLENBQUMsRUFDckMsS0FBSyxJQUFJLFVBQVU7WUFDakIsQ0FBQyxDQUFDLG9CQUFvQixDQUNsQixVQUFVLENBQUMsR0FBRyxFQUNkLFVBQVUsQ0FBQyxJQUFJLEVBQ2YsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQzdCLGVBQWUsQ0FDaEI7WUFDSCxDQUFDLENBQUMsNkJBQTZCLENBQzNCLFVBQVUsQ0FBQyxJQUFJLEVBQ2YsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQzdCLGVBQWUsQ0FDaEIsQ0FDTixDQUNGLENBQ0YsQ0FBQTtJQUNILENBQUM7SUFDRCxRQUFRO0lBQ1IsT0FBTyxJQUFJLENBQ1QsbUJBQW1CLENBQ2pCLHlCQUF5QixFQUN6QixvQkFBb0IsRUFDcEIsbUJBQW1CLENBQ3BCLEVBQ0QsS0FBSyxJQUFJLFVBQVU7UUFDakIsQ0FBQyxDQUFDLG9CQUFvQixDQUNsQixVQUFVLENBQUMsR0FBRyxFQUNkLFVBQVUsQ0FBQyxJQUFJLEVBQ2YsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQzdCLGVBQWUsQ0FDaEI7UUFDSCxDQUFDLENBQUMsNkJBQTZCLENBQzNCLFVBQVUsQ0FBQyxJQUFJLEVBQ2YsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQzdCLGVBQWUsQ0FDaEIsQ0FDTixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxHQUFHLENBQ1IsSUFBSSxDQUNGLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLEVBQzlDLFFBQVEsQ0FDTixjQUFjLENBQ1osSUFBSSxDQUNGLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLEVBQ3pDLFdBQVcsQ0FDVCxJQUFJLENBQ0Ysa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsRUFDdkMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUM1QixDQUNGLENBQ0YsQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUI7SUFDdkMsT0FBTyxHQUFHLENBQ1IsSUFBSSxDQUNGLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLEVBQzlDLFFBQVEsQ0FDTixjQUFjLENBQ1osSUFBSSxDQUNGLG1CQUFtQixDQUFDLDRCQUE0QixDQUFDLEVBQ2pELFdBQVcsQ0FDVCxJQUFJLENBQ0Ysa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsRUFDdkMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUM1QixDQUNGLENBQ0YsQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxHQUFHLENBQ1IsSUFBSSxDQUNGLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLEVBQzlDLFFBQVEsQ0FDTixjQUFjLENBQ1osSUFBSSxDQUNGLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLEVBQzlDLFdBQVcsQ0FDVCxJQUFJLENBQ0Ysa0JBQWtCLENBQ2hCLHVCQUF1QixFQUN2Qix3QkFBd0IsQ0FDekIsRUFDRCxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQ3hDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUNuQixnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FDdkQsQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUNGLENBQ0YsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsOEJBQThCO0lBQzVDLE9BQU8sY0FBYyxDQUNuQixJQUFJLENBQ0YsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsRUFDOUMsV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNyRSxDQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWM7SUFDNUIsT0FBTyxjQUFjLENBQ25CLElBQUksQ0FDRixtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxFQUM5QyxXQUFXLENBQ1QsSUFBSSxDQUNGLGtCQUFrQixDQUNoQix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixDQUN6QixFQUNELFFBQVEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsRUFDeEMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQ25CLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUN0RCxDQUNGLENBQ0YsQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQzNCLE9BQW1CLEVBQ25CLGVBQTZCO0lBRTdCLE9BQU8sSUFBSSxDQUNULG1CQUFtQixDQUFDLHlCQUF5QixFQUFFLHlCQUF5QixDQUFDLEVBQ3pFLGNBQWMsQ0FDWixJQUFJLENBQ0YsbUJBQW1CLENBQUMsdUJBQXVCLEVBQUUsd0JBQXdCLENBQUMsRUFDdEUsY0FBYyxDQUNaLFVBQVUsRUFDVixrRkFBa0YsQ0FDbkYsRUFDRCxjQUFjLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUMzQyxFQUNELElBQUksQ0FDRixtQkFBbUIsQ0FBQyx1QkFBdUIsRUFBRSx3QkFBd0IsQ0FBQyxFQUN0RSxjQUFjLENBQ1osVUFBVSxFQUNWLGtGQUFrRixDQUNuRixFQUNELGNBQWMsQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLENBQUMsQ0FDckQsRUFDRCxJQUFJLENBQ0YsYUFBYSxDQUFDLHNCQUFzQixDQUFDLEVBQ3JDLEtBQUssSUFBSSxPQUFPO1FBQ2QsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDeEMsQ0FBQyxDQUFDLDZCQUE2QixDQUMzQixPQUFPLENBQUMsSUFBSSxFQUNaLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUMxQixlQUFlLENBQ2hCLENBQ04sQ0FDRixDQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxPQUFPLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLENBQUE7QUFDckQsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQUMsUUFBZ0I7SUFDbEQsT0FBTyxjQUFjLENBQ25CLElBQUksQ0FDRixtQkFBbUIsQ0FBQyx3QkFBd0IsRUFBRSxlQUFlLENBQUMsRUFDOUQsY0FBYyxDQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDL0QsSUFBSSxDQUNGLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFDNUIsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsbUVBQW1FO0tBQ2hHLENBQ0YsQ0FDRixDQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLHFCQUFxQixDQUFDLENBQUE7QUFDM0UsQ0FBQztBQUVELDJCQUEyQjtBQUMzQixNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLGNBQXFDLEVBQ3JDLGNBRThDLEVBQzlDLFlBQWdDLEVBQ2hDLGVBQTZCO0lBRTdCLElBQUksSUFBWSxDQUFBO0lBQ2hCLElBQUksWUFBb0IsQ0FBQTtJQUN4QixJQUFJLFFBQWdCLENBQUE7SUFDcEIsSUFBSSxjQUFjLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RDLElBQUksR0FBRyxjQUFjLENBQUMsbUJBQW1CLENBQUEsQ0FBQyxnREFBZ0Q7UUFDMUYsWUFBWSxHQUFHLFVBQVUsQ0FBQTtRQUN6QixRQUFRLEdBQUcsOEJBQThCLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDM0QsQ0FBQztTQUFNLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUM5QyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQTtRQUMxQixZQUFZLEdBQUcsVUFBVSxDQUFBO1FBQ3pCLFFBQVEsR0FBRyxjQUFjLENBQUE7SUFDM0IsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQTtRQUMxQixZQUFZLEdBQUcsYUFBYSxDQUFBO1FBQzVCLFFBQVEsR0FBRyxVQUFVLENBQUE7SUFDdkIsQ0FBQztJQUNELE1BQU0scUJBQXFCLEdBQUcsY0FBYyxDQUMxQyxJQUFJLENBQ0YsbUJBQW1CLENBQ2pCLHFCQUFxQixFQUNyQiwrQkFBK0IsRUFDL0IsWUFBWSxFQUNaLHVCQUF1QixDQUN4QixFQUNELFlBQVksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQ2hDLGFBQWEsSUFBSSxjQUFjO1FBQzdCLENBQUMsQ0FBQyxjQUFjLENBQ1osSUFBSSxDQUNGLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUNoQyw2QkFBNkIsQ0FDM0IsY0FBYyxDQUFDLFdBQVcsRUFDMUIsY0FBYyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQ3hDLGVBQWUsQ0FDaEIsQ0FDRixDQUNGO1FBQ0gsQ0FBQyxDQUFDLElBQUksRUFDUixJQUFJLEtBQUssU0FBUztRQUNoQixDQUFDLENBQUMsY0FBYyxDQUNaLElBQUksQ0FDRixhQUFhLENBQUMsVUFBVSxDQUFDLEVBQ3pCLDZCQUE2QixDQUMzQixJQUFJLEVBQ0osY0FBYyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQ2pDLGVBQWUsQ0FDaEIsQ0FDRixDQUNGO1FBQ0gsQ0FBQyxDQUFDLElBQUksRUFDUixjQUFjLENBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNuRSxJQUFJLENBQ0YsbUJBQW1CLENBQUMsY0FBYyxFQUFFLDJCQUEyQixDQUFDLEVBQ2hFLGNBQWMsQ0FDWixVQUFVLEVBQ1YscUZBQXFGLENBQ3RGLEVBQ0QsY0FBYyxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FDOUMsQ0FDRixDQUNGLENBQ0YsQ0FBQTtJQUNELE9BQU8sSUFBSSxDQUNULFVBQVUsSUFBSSxjQUFjO1FBQzFCLENBQUMsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztRQUN6QyxDQUFDLENBQUMsSUFBSSxFQUNSLHFCQUFxQixDQUN0QixDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsT0FBTyxDQUFDLE1BQWtCLEVBQUUsRUFBRTtRQUM1QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDN0IsSUFBSSxPQUFPLEdBQUcsMkJBQTJCLENBQUE7UUFDekMsSUFBSSxJQUFJLEtBQUssU0FBUztZQUFFLE9BQU8sR0FBRyw4QkFBOEIsQ0FBQTtRQUNoRSxPQUFPLHVCQUF1QixDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzNFLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU8sQ0FBQyxNQUFrQixFQUFFLEVBQUU7UUFDNUIsT0FBTyx1QkFBdUIsQ0FDNUIsc0JBQXNCLEVBQ3RCLHFCQUFxQixDQUN0QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ1gsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsTUFBcUIsRUFDckIsTUFBa0I7SUFFbEIsSUFBSSxDQUNGLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLEVBQ3ZDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUM5QyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBcUIsRUFBRSxNQUFrQjtJQUNqRSxJQUFJLENBQ0YsdUJBQXVCLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLENBQUMsRUFDakUsY0FBYyxDQUNaLFVBQVUsRUFDViw0RUFBNEUsQ0FDN0UsRUFDRCxjQUFjLENBQUMsZUFBZSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQzdELENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFxQixFQUFFLE1BQWtCO0lBQ2xFLElBQUksQ0FDRiwwQkFBMEIsRUFBRSxFQUM1Qix1QkFBdUIsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLEVBQ3ZFLDZCQUE2QixDQUMzQixNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUMxQixNQUFNLENBQUMsZUFBZSxDQUN2QixDQUNGLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFxQixFQUFFLE1BQWtCO0lBQ3JFLElBQUksQ0FDRiwwQkFBMEIsRUFBRSxFQUM1QixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsRUFDakMsNkJBQTZCLENBQzNCLE1BQU0sQ0FBQyxRQUFRLEVBQ2YsTUFBTSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQzdCLE1BQU0sQ0FBQyxlQUFlLENBQ3ZCLENBQ0YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQXFCLEVBQUUsTUFBa0I7SUFDbkUsSUFBSSxDQUNGLDBCQUEwQixFQUFFLEVBQzVCLHVCQUF1QixDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxFQUM1RCxjQUFjLENBQ1osVUFBVSxFQUNWLCtFQUErRSxDQUNoRixFQUNELGNBQWMsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNoRSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBcUIsRUFBRSxNQUFrQjtJQUNyRSxJQUFJLENBQ0Ysb0JBQW9CLENBQUMsYUFBYSxDQUFDLEVBQ25DLGNBQWMsQ0FDWixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDakMsSUFBSSxDQUNGLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFDNUIsc0JBQXNCLENBQ3BCLE9BQU8sRUFDUCxNQUFNLENBQUMsWUFBWSxFQUNuQixNQUFNLENBQUMsZUFBZSxDQUN2QixDQUNGLENBQ0YsQ0FDRixDQUNGLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxNQUFxQixFQUNyQixNQUFrQjtJQUVsQixJQUFJLENBQ0YsMEJBQTBCLEVBQUUsRUFDNUIsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsRUFDMUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLEVBQ25DLGNBQWMsQ0FDWixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUM1QyxJQUFJLENBQ0YsYUFBYSxDQUFDLG9CQUFvQixDQUFDLEVBQ25DLHNCQUFzQixDQUNwQixPQUFPLEVBQ1AsTUFBTSxDQUFDLFlBQVksRUFDbkIsTUFBTSxDQUFDLGVBQWUsQ0FDdkIsQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBcUIsRUFBRSxNQUFrQjtJQUNyRSxJQUFJLENBQ0YsMEJBQTBCLEVBQUUsRUFDNUIsY0FBYyxFQUFFLEVBQ2hCLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FDeEQsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQXFCLEVBQUUsTUFBa0I7SUFDbkUsSUFBSSxDQUNGLDBCQUEwQixFQUFFLEVBQzVCLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDLEVBQ3pDLGNBQWMsQ0FDWixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDN0IsSUFBSSxDQUNGLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLDBCQUEwQixDQUFDLEVBQ3BFLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FDdEIsQ0FDRixDQUNGLENBQ0YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLE1BQXFCLEVBQUUsTUFBa0I7SUFDckUsSUFBSSxDQUNGLDBCQUEwQixFQUFFLEVBQzVCLGNBQWMsRUFBRSxFQUNoQixjQUFjLENBQ1osR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2pDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUMvQyxDQUNGLENBQ0YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLE1BQXFCLEVBQ3JCLE1BQWtCO0lBRWxCLElBQUksQ0FDRiwwQkFBMEIsRUFBRSxFQUM1QixzQkFBc0IsRUFBRSxFQUN4Qiw4QkFBOEIsRUFBRSxFQUNoQyxjQUFjLENBQ1osR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDbkMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQ3JELENBQ0YsQ0FDRixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsTUFBcUIsRUFDckIsTUFBa0I7SUFFbEIsSUFBSSxDQUNGLDBCQUEwQixFQUFFLEVBQzVCLHlCQUF5QixFQUFFLEVBQzNCLDhCQUE4QixFQUFFLEVBQ2hDLGNBQWMsQ0FDWixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN0QyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FDeEQsQ0FDRixDQUNGLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxNQUFxQixFQUNyQixNQUFrQjtJQUVsQixJQUFJLENBQ0YsMEJBQTBCLEVBQUUsRUFDNUIsc0JBQXNCLEVBQUUsRUFDeEIsOEJBQThCLEVBQUUsRUFDaEMsY0FBYyxDQUNaLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ25DLGdCQUFnQixDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUNyRCxDQUNGLENBQ0YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLE1BQXFCLEVBQ3JCLE1BQWtCO0lBRWxCLElBQUksQ0FDRiwwQkFBMEIsRUFBRSxFQUM1QixpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxFQUM1QyxpQkFBaUIsRUFBRSxFQUNuQixpQkFBaUIsQ0FBQywrQkFBK0IsQ0FBQyxFQUNsRCxPQUFPLE1BQU0sQ0FBQyxlQUFlLEtBQUssUUFBUTtRQUN4QyxDQUFDLENBQUMsSUFBSSxDQUNGLGlCQUFpQixDQUNmLHFDQUFxQyxFQUNyQyx1QkFBdUIsQ0FDeEIsRUFDRCxjQUFjLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUN2RDtRQUNILENBQUMsQ0FBQyxJQUFJLENBQ0YsaUJBQWlCLENBQ2YsbUNBQW1DLEVBQ25DLGlDQUFpQyxDQUNsQyxFQUNELGNBQWMsQ0FDWixVQUFVLEVBQ1YsMkZBQTJGLENBQzVGLEVBQ0QsY0FBYyxDQUNaLGVBQWUsRUFDZiwyQkFBMkIsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQ3BELENBQ0YsQ0FDTixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFxQixFQUFFLE1BQWtCO0lBQzFFLElBQUksQ0FDRixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsRUFDbEMsaUJBQWlCLEVBQUUsRUFDbkIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FDcEMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLElBQTZDO0lBRTdDLE9BQU8sSUFBSSxDQUNULDBCQUEwQixFQUFFLEVBQzVCLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxFQUMxRCxjQUFjLENBQ1osSUFBSSxDQUNGLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUM5QixXQUFXLENBQ1QsSUFBSSxDQUNGLGlCQUFpQixDQUNmLGFBQWEsRUFDYixjQUFjLEVBQ2QscUJBQXFCLENBQ3RCLEVBQ0QsYUFBYSxDQUFDLGVBQWUsQ0FBQyxFQUM5QixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FDL0IsQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsSUFBVSxFQUNWLElBQTZDO0lBRTdDLE9BQU8sSUFBSSxDQUNULDBCQUEwQixFQUFFLEVBQzVCLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxFQUMxRCxjQUFjLENBQ1osSUFBSSxDQUNGLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsRUFDOUMsY0FBYyxDQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3BELElBQUksQ0FDRixtQkFBbUIsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUMsRUFDMUQsY0FBYyxDQUNaLFVBQVUsRUFDViwrRUFBK0UsQ0FDaEYsRUFDRCxjQUFjLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUN0QyxDQUNGLENBQ0YsQ0FDRixDQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxNQUFxQixFQUNyQixNQUFrQjtJQUVsQixrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWU7UUFBRSxPQUFNO0lBQ25DLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDaEUsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsTUFBcUIsRUFDckIsTUFBa0I7SUFFbEIsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlO1FBQUUsT0FBTTtJQUNuQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ2hFLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE1BQXFCLEVBQ3JCLE1BQWtCO0lBRWxCLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCO1FBQUUsT0FBTTtJQUNyQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDckUsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBcUIsRUFBRSxNQUFrQjtJQUN0RSxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQzNCLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLE1BQXFCLEVBQ3JCLE1BQWtCO0lBRWxCLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQ0YsMEJBQTBCLEVBQUUsRUFDNUIsb0JBQW9CLENBQUMsK0JBQStCLENBQUMsQ0FDdEQsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNULE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxDQUNGLDBCQUEwQixFQUFFLEVBQzVCLHVCQUF1QixDQUNyQiwrQkFBK0IsRUFDL0Isc0NBQXNDLENBQ3ZDLEVBQ0QsY0FBYyxDQUNaLFVBQVUsRUFDVixnR0FBZ0csQ0FDakcsRUFDRCxjQUFjLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUM5RCxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsTUFBcUIsRUFDckIsTUFBa0I7SUFFbEIsSUFBSSxDQUNGLDBCQUEwQixFQUFFLEVBQzVCLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLEVBQzNDLGNBQWMsQ0FDWixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDbkMsSUFBSSxDQUNGLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFLHNCQUFzQixDQUFDLEVBQ2xFLGNBQWMsQ0FDWixJQUFJLENBQ0YsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUM3QixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQzlDLENBQ0YsRUFDRCxhQUFhLElBQUksUUFBUTtRQUN2QixDQUFDLENBQUMsY0FBYyxDQUNaLElBQUksQ0FDRixhQUFhLENBQUMscUJBQXFCLENBQUMsRUFDcEMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUMzQyxDQUNGO1FBQ0gsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUNGLENBQ0YsQ0FDRixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBcUIsRUFBRSxNQUFrQjtJQUNwRSxJQUFJLENBQ0YsdUJBQXVCLENBQ3JCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixlQUFlLENBQ2hCLEVBQ0QsNkJBQTZCLENBQzNCLE1BQU0sQ0FBQyxPQUFPLEVBQ2QsTUFBTSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQzVCLE1BQU0sQ0FBQyxlQUFlLENBQ3ZCLENBQ0YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsUUFBeUI7SUFDbEUsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDeEMsS0FBSyxLQUFLO1lBQ1IsT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxTQUFTLENBQUE7UUFDbEI7WUFDRSxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUE7SUFDNUIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsY0FBcUM7SUFDeEUsSUFBSSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQTtJQUN0QyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDdkMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDbEQsUUFBUSxHQUFHLDBCQUEwQixDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3JELFlBQVksR0FBRyxVQUFVLENBQUE7SUFDM0IsQ0FBQztTQUFNLENBQUM7UUFDTixVQUFVLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUMxQyxZQUFZLEdBQUcsYUFBYSxDQUFBO1FBQzVCLFFBQVEsR0FBRyxVQUFVLENBQUE7SUFDdkIsQ0FBQztJQUNELE1BQU0scUJBQXFCLEdBQUcsY0FBYyxDQUMxQyxJQUFJLENBQ0YsYUFBYSxDQUFDLHFCQUFxQixDQUFDLEVBQ3BDLGlCQUFpQixDQUNmLCtCQUErQixFQUMvQixZQUFZLEVBQ1osdUJBQXVCLENBQ3hCLEVBQ0QsWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUN4QixhQUFhLElBQUksY0FBYztRQUM3QixDQUFDLENBQUMsY0FBYyxDQUNaLElBQUksQ0FDRixhQUFhLENBQUMsaUJBQWlCLENBQUMsRUFDaEMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUNqRCxDQUNGO1FBQ0gsQ0FBQyxDQUFDLElBQUksRUFDUixNQUFNLElBQUksY0FBYztRQUN0QixDQUFDLENBQUMsY0FBYyxDQUNaLElBQUksQ0FDRixhQUFhLENBQUMsVUFBVSxDQUFDLEVBQ3pCLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FDMUMsQ0FDRjtRQUNILENBQUMsQ0FBQyxJQUFJLEVBQ1IsY0FBYyxDQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDbkUsSUFBSSxDQUNGLG1CQUFtQixDQUFDLGNBQWMsRUFBRSwyQkFBMkIsQ0FBQyxFQUNoRSxjQUFjLENBQ1osVUFBVSxFQUNWLHFGQUFxRixDQUN0RixFQUNELGNBQWMsQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQzlDLENBQ0YsQ0FDRixDQUNGLENBQUE7SUFDRCxPQUFPLElBQUksQ0FDVCxtQkFBbUIsQ0FBQyxzQkFBc0IsRUFBRSxxQkFBcUIsQ0FBQyxFQUNsRSxxQkFBcUIsQ0FDdEIsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsNEJBQTRCLENBQzFDLE1BQXFCLEVBQ3JCLE1BQWtCO0lBRWxCLGNBQWMsQ0FDWixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDbEMsSUFBSSxDQUNGLHNCQUFzQixFQUFFLEVBQ3hCLG9CQUFvQixDQUNsQixDQUFDLEVBQ0QsMEJBQTBCLEVBQzFCLE1BQU0sQ0FBQyxZQUFZLEVBQ25CLE1BQU0sQ0FBQyxlQUFlLENBQ3ZCLENBQ0YsQ0FDRixDQUNGLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLDRCQUE0QixDQUMxQyxNQUFtQyxFQUNuQyxNQUFrQjtJQUVsQixjQUFjLENBQUMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDN0UsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsTUFBcUIsRUFDckIsTUFBa0I7SUFFbEIscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUUvQixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsNEJBQTRCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzVDLE9BQU07SUFDUixDQUFDO0lBQ0QsNEJBQTRCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQzlDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLE1BQXFCLEVBQ3JCLE1BQWtCO0lBRWxCLElBQUksQ0FDRiwwQkFBMEIsRUFBRSxFQUM1Qix1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLEVBQ3RELG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLEVBQzNDLGNBQWMsQ0FDWixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDdkMsSUFBSSxDQUNGLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFLHVCQUF1QixDQUFDLEVBQ25FLGNBQWMsQ0FDWixPQUFPLElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxNQUFNO1FBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQ0YsbUJBQW1CLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLEVBQ25ELGNBQWMsQ0FDWixJQUFJLENBQ0YsYUFBYSxDQUFDLG1CQUFtQixDQUFDLEVBQ2xDLElBQUksQ0FDRixNQUFNLENBQUMsS0FBSztZQUNWLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSxTQUFTLENBQUMsQ0FDdkQsQ0FDRixFQUNELElBQUksQ0FDRixhQUFhLENBQUMsaUJBQWlCLENBQUMsRUFDaEMsSUFBSSxDQUNGLE1BQU0sQ0FBQyxHQUFHO1lBQ1IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNsRCxDQUFDLENBQUMsY0FBYyxDQUFDLHVCQUF1QixFQUFFLFNBQVMsQ0FBQyxDQUN2RCxDQUNGLENBQ0YsQ0FDRjtRQUNILENBQUMsQ0FBQyxJQUFJLENBQ0YsbUJBQW1CLENBQ2pCLFlBQVksRUFDWixpQkFBaUIsRUFDakIsa0JBQWtCLENBQ25CLEVBQ0QsTUFBTSxDQUFDLEtBQUs7WUFDVixDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxjQUFjLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLENBQ3ZELENBQ04sQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFxQixFQUFFLE1BQWtCO0lBQzNFLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxRQUFtQixFQUFFLEVBQUU7UUFDcEQsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUMxQixPQUFPLElBQUksQ0FDVCxhQUFhLENBQUMsd0JBQXdCLENBQUMsRUFDdkMsY0FBYyxDQUNaLElBQUksQ0FDRixhQUFhLENBQUMsYUFBYSxDQUFDLEVBQzVCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDOUMsQ0FDRixDQUNGLENBQUE7SUFDSCxDQUFDLENBQUE7SUFFRCxNQUFNLDJCQUEyQixHQUFHLENBQ2xDLElBQXVDLEVBQ3ZDLEVBQUU7UUFDRixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBQ3RCLE9BQU8sSUFBSSxDQUNULGFBQWEsQ0FBQyw4QkFBOEIsQ0FBQyxFQUM3QyxjQUFjLENBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3BFLElBQUksQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDcEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNyRSxDQUNGLENBQUE7SUFDSCxDQUFDLENBQUE7SUFFRCxNQUFNLDJCQUEyQixHQUFHLENBQ2xDLFdBQW9CLEVBQ3BCLFlBQStCLEVBQy9CLEVBQUU7UUFDRixJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBQzdCLE9BQU8sSUFBSSxDQUNULG1CQUFtQixDQUNqQiw4QkFBOEIsRUFDOUIsMEJBQTBCLEVBQzFCLG1CQUFtQixFQUNuQixVQUFVLENBQ1gsRUFDRCw2QkFBNkIsQ0FDM0IsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLENBQUMsZUFBZSxDQUN2QixDQUNGLENBQUE7SUFDSCxDQUFDLENBQUE7SUFFRCxJQUFJLENBQ0YsMEJBQTBCLEVBQUUsRUFDNUIsdUJBQXVCLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxFQUN0RCxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxFQUM3QyxjQUFjLENBQ1osR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ3RDLElBQUksQ0FDRixhQUFhLENBQUMsdUJBQXVCLENBQUMsRUFDdEMsY0FBYyxDQUNaLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFDdEMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUN4QywyQkFBMkIsQ0FDekIsTUFBTSxDQUFDLFdBQVcsRUFDbEIsTUFBTSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQ2pDLENBQ0YsQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBcUIsRUFBRSxNQUFrQjtJQUN0RSxpQkFBaUI7SUFDakIsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFMUMsNEVBQTRFO0lBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ25DLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQWtCLEVBQUUsRUFBRSxDQUM5QyxJQUFJLENBQ0YsbUJBQW1CLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxFQUNsRCxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUN4QyxpQkFBaUIsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUN6RCxjQUFjLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLEVBQ3BFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDMUQsQ0FBQTtJQUVILHFEQUFxRDtJQUNyRCxjQUFjLENBQ1osZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUN4QyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQy9DLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxNQUFxQixFQUNyQixNQUFrQjtJQUVsQixNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFDdEUsT0FBTyxJQUFJLENBQ1QsdUJBQXVCLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLEVBQzNELGNBQWMsQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsRUFDcEUsY0FBYyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FDdkMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE1BQXFCLEVBQ3JCLE1BQWtCO0lBRWxCLElBQUksQ0FDRiwwQkFBMEIsRUFBRSxFQUM1Qix1QkFBdUIsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsRUFDMUQsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsRUFDdEMsTUFBTSxDQUFDLGtCQUFrQjtRQUN2QixDQUFDLENBQUMsSUFBSSxDQUNGLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxFQUNwRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FDaEQ7UUFDSCxDQUFDLENBQUMsSUFBSSxDQUNULENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2F0YWxvZ1JlY29yZCxcbiAgQ29uc3RyYWludCxcbiAgRGF0YXNldE9ubGluZVJlc291cmNlLFxuICBEYXRhc2V0UmVjb3JkLFxuICBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvbixcbiAgRmllbGRUcmFuc2xhdGlvbixcbiAgSW5kaXZpZHVhbCxcbiAgS2V5d29yZCxcbiAgTGFuZ3VhZ2VDb2RlLFxuICBSZWNvcmRTdGF0dXMsXG4gIFJlY29yZFRyYW5zbGF0aW9ucyxcbiAgUmV1c2VSZWNvcmQsXG4gIFJvbGUsXG4gIFNlcnZpY2VFbmRwb2ludCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlLFxuICBTZXJ2aWNlUmVjb3JkLFxuICBVcGRhdGVGcmVxdWVuY3lDb2RlLFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMvZm9ybWF0J1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdnZW9qc29uJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGZpbHRlckFycmF5LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBub29wLFxuICBwaXBlLFxuICB0YXAsXG59IGZyb20gJy4uL2Z1bmN0aW9uLXV0aWxzJ1xuaW1wb3J0IHtcbiAgYWxsQ2hpbGRyZW5FbGVtZW50LFxuICBhcHBlbmRDaGlsZHJlbixcbiAgY3JlYXRlQ2hpbGQsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIGNyZWF0ZU5lc3RlZENoaWxkLFxuICBjcmVhdGVOZXN0ZWRFbGVtZW50LFxuICBmaW5kQ2hpbGRPckNyZWF0ZSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCxcbiAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIHJlYWRBdHRyaWJ1dGUsXG4gIHJlbW92ZUFsbENoaWxkcmVuLFxuICByZW1vdmVDaGlsZHJlbixcbiAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUsXG4gIHNldFRleHRDb250ZW50LFxuICB3cml0ZUF0dHJpYnV0ZSxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHsgcmVhZEtpbmQgfSBmcm9tICcuL3JlYWQtcGFydHMnXG5pbXBvcnQgeyB3cml0ZUdlb21ldHJ5IH0gZnJvbSAnLi91dGlscy9nZW9tZXRyeSdcbmltcG9ydCB7IG5hbWVQYXJ0c1RvRnVsbCB9IGZyb20gJy4vdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgTEFOR18yX1RPXzNfTUFQUEVSIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL2kxOG4vc3JjL2xpYi9sYW5ndWFnZS1jb2RlcydcbmltcG9ydCB7IGtpbmRUb0NvZGVMaXN0VmFsdWUgfSBmcm9tICcuLi9jb21tb24vcmVzb3VyY2UtdHlwZXMnXG5cbmZ1bmN0aW9uIHdyaXRlTG9jYWxpemVkRWxlbWVudChcbiAgd3JpdGVGbjogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4sXG4gIHRleHQ6IHN0cmluZyxcbiAgdHJhbnNsYXRpb25zOiBGaWVsZFRyYW5zbGF0aW9uLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICBpZiAoIXRyYW5zbGF0aW9ucykgcmV0dXJuIHdyaXRlRm5cbiAgZnVuY3Rpb24gY3JlYXRlTG9jYWxpemVkKGxhbmc6IExhbmd1YWdlQ29kZSwgdHJhbnNsYXRpb246IHN0cmluZykge1xuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnRleHRHcm91cCcsICdnbWQ6TG9jYWxpc2VkQ2hhcmFjdGVyU3RyaW5nJyksXG4gICAgICB3cml0ZUF0dHJpYnV0ZSgnbG9jYWxlJywgYCMke2xhbmcudG9VcHBlckNhc2UoKX1gKSxcbiAgICAgIHNldFRleHRDb250ZW50KHRyYW5zbGF0aW9uKVxuICAgIClcbiAgfVxuICByZXR1cm4gcGlwZShcbiAgICB3cml0ZUZuLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6UFRfRnJlZVRleHQnKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOlBUX0ZyZWVUZXh0JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBjcmVhdGVMb2NhbGl6ZWQoZGVmYXVsdExhbmd1YWdlLCB0ZXh0KSxcbiAgICAgIC4uLk9iamVjdC5lbnRyaWVzKHRyYW5zbGF0aW9ucykubWFwKChbbGFuZywgdHJhbnNsYXRpb25dKSA9PlxuICAgICAgICBjcmVhdGVMb2NhbGl6ZWQobGFuZywgdHJhbnNsYXRpb24pXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNoYXJhY3RlclN0cmluZyhcbiAgdGV4dDogc3RyaW5nXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShmaW5kQ2hpbGRPckNyZWF0ZSgnZ2NvOkNoYXJhY3RlclN0cmluZycpLCBzZXRUZXh0Q29udGVudCh0ZXh0KSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gIHRleHQ6IHN0cmluZyxcbiAgdHJhbnNsYXRpb25zOiBGaWVsZFRyYW5zbGF0aW9uLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gd3JpdGVMb2NhbGl6ZWRFbGVtZW50KFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHRleHQpLFxuICAgIHRleHQsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIGRlZmF1bHRMYW5ndWFnZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxpbmthZ2UoXG4gIHVybDogVVJMXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6bGlua2FnZScsICdnbWQ6VVJMJyksXG4gICAgICBzZXRUZXh0Q29udGVudCh1cmwudG9TdHJpbmcoKSlcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlQW5jaG9yKFxuICB1cmw6IFVSTCxcbiAgdGV4dD86IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ214OkFuY2hvcicpLFxuICAgICAgd3JpdGVBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnLCB1cmwudG9TdHJpbmcoKSksXG4gICAgICB0ZXh0ID8gc2V0VGV4dENvbnRlbnQodGV4dCkgOiBub29wXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxvY2FsaXplZEFuY2hvcihcbiAgdXJsOiBVUkwsXG4gIHRleHQ6IHN0cmluZyxcbiAgdHJhbnNsYXRpb25zOiBGaWVsZFRyYW5zbGF0aW9uLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gd3JpdGVMb2NhbGl6ZWRFbGVtZW50KFxuICAgIHdyaXRlQW5jaG9yKHVybCwgdGV4dCksXG4gICAgdGV4dCxcbiAgICB0cmFuc2xhdGlvbnMsXG4gICAgZGVmYXVsdExhbmd1YWdlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGF0ZVRpbWUoXG4gIGRhdGU6IERhdGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2djbzpEYXRlVGltZScpLFxuICAgIHNldFRleHRDb250ZW50KGZvcm1hdChkYXRlLCBcInl5eXktTU0tZGQnVCdISDptbTpzc1wiKSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEYXRlKFxuICBkYXRlOiBEYXRlXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286RGF0ZScpLFxuICAgICAgc2V0VGV4dENvbnRlbnQoZm9ybWF0KGRhdGUsICd5eXl5LU1NLWRkJykpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURlY2ltYWwoXG4gIGRlY2ltYWw6IG51bWJlclxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoZmluZENoaWxkT3JDcmVhdGUoJ2djbzpEZWNpbWFsJyksIHNldFRleHRDb250ZW50KGRlY2ltYWwudG9TdHJpbmcoKSkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2dyZXNzQ29kZShzdGF0dXM6IFJlY29yZFN0YXR1cyk6IHN0cmluZyB7XG4gIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgIHJldHVybiAnY29tcGxldGVkJ1xuICAgIGNhc2UgJ2RlcHJlY2F0ZWQnOlxuICAgICAgcmV0dXJuICdkZXByZWNhdGVkJ1xuICAgIGNhc2UgJ29uZ29pbmcnOlxuICAgICAgcmV0dXJuICdvbkdvaW5nJ1xuICAgIGNhc2UgJ3JlbW92ZWQnOlxuICAgICAgcmV0dXJuICdyZW1vdmVkJ1xuICAgIGNhc2UgJ3VuZGVyX2RldmVsb3BtZW50JzpcbiAgICAgIHJldHVybiAndW5kZXJEZXZlbG9wbWVudCdcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBwcm9ncmVzcyBjb2RlIGZyb20gc3RhdHVzOiAke3N0YXR1c31gXG4gICAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvbGVDb2RlKHJvbGU6IFJvbGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHJvbGUpIHtcbiAgICBjYXNlICdhdXRob3InOlxuICAgICAgcmV0dXJuICdhdXRob3InXG4gICAgY2FzZSAnY29sbGFib3JhdG9yJzpcbiAgICAgIHJldHVybiAnY29sbGFib3JhdG9yJ1xuICAgIGNhc2UgJ2NvbnRyaWJ1dG9yJzpcbiAgICAgIHJldHVybiAnY29udHJpYnV0b3InXG4gICAgY2FzZSAnY3VzdG9kaWFuJzpcbiAgICAgIHJldHVybiAnY3VzdG9kaWFuJ1xuICAgIGNhc2UgJ2Rpc3RyaWJ1dG9yJzpcbiAgICAgIHJldHVybiAnZGlzdHJpYnV0b3InXG4gICAgY2FzZSAnZWRpdG9yJzpcbiAgICAgIHJldHVybiAnZWRpdG9yJ1xuICAgIGNhc2UgJ2Z1bmRlcic6XG4gICAgICByZXR1cm4gJ2Z1bmRlcidcbiAgICBjYXNlICdtZWRpYXRvcic6XG4gICAgICByZXR1cm4gJ21lZGlhdG9yJ1xuICAgIGNhc2UgJ29yaWdpbmF0b3InOlxuICAgICAgcmV0dXJuICdvcmlnaW5hdG9yJ1xuICAgIGNhc2UgJ290aGVyJzpcbiAgICAgIHJldHVybiAnb3RoZXInXG4gICAgY2FzZSAnb3duZXInOlxuICAgICAgcmV0dXJuICdvd25lcidcbiAgICBjYXNlICdwb2ludF9vZl9jb250YWN0JzpcbiAgICAgIHJldHVybiAncG9pbnRPZkNvbnRhY3QnXG4gICAgY2FzZSAncHJpbmNpcGFsX2ludmVzdGlnYXRvcic6XG4gICAgICByZXR1cm4gJ3ByaW5jaXBhbEludmVzdGlnYXRvcidcbiAgICBjYXNlICdwcm9jZXNzb3InOlxuICAgICAgcmV0dXJuICdwcm9jZXNzb3InXG4gICAgY2FzZSAncHVibGlzaGVyJzpcbiAgICAgIHJldHVybiAncHVibGlzaGVyJ1xuICAgIGNhc2UgJ3Jlc291cmNlX3Byb3ZpZGVyJzpcbiAgICAgIHJldHVybiAncmVzb3VyY2VQcm92aWRlcidcbiAgICBjYXNlICdyaWdodHNfaG9sZGVyJzpcbiAgICAgIHJldHVybiAncmlnaHRzSG9sZGVyJ1xuICAgIGNhc2UgJ3Nwb25zb3InOlxuICAgICAgcmV0dXJuICdzcG9uc29yJ1xuICAgIGNhc2UgJ3N0YWtlaG9sZGVyJzpcbiAgICAgIHJldHVybiAnc3Rha2Vob2xkZXInXG4gICAgY2FzZSAndW5zcGVjaWZpZWQnOlxuICAgICAgcmV0dXJuICd1bnNwZWNpZmllZCdcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiAndXNlcidcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHJvbGUgY29kZSBmcm9tIHJvbGU6ICR7cm9sZX1gKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlRGlzdHJpYnV0aW9uUHJvdG9jb2woXG4gIGRpc3RyaWJ1dGlvbjogRGF0YXNldFNlcnZpY2VEaXN0cmlidXRpb25cbik6IHN0cmluZyB7XG4gIHN3aXRjaCAoZGlzdHJpYnV0aW9uLmFjY2Vzc1NlcnZpY2VQcm90b2NvbC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnd2ZzJzpcbiAgICAgIHJldHVybiAnT0dDOldGUydcbiAgICBjYXNlICd3bXMnOlxuICAgICAgcmV0dXJuICdPR0M6V01TJ1xuICAgIGNhc2UgJ3dwcyc6XG4gICAgICByZXR1cm4gJ09HQzpXUFMnXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkaXN0cmlidXRpb24uYWNjZXNzU2VydmljZVByb3RvY29sXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1haW50ZW5hbmNlRnJlcXVlbmN5Q29kZShcbiAgdXBkYXRlRnJlcXVlbmN5OiBVcGRhdGVGcmVxdWVuY3lDb2RlXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgc3dpdGNoICh1cGRhdGVGcmVxdWVuY3kpIHtcbiAgICBjYXNlICdhc05lZWRlZCc6XG4gICAgICByZXR1cm4gJ2FzTmVlZGVkJ1xuICAgIGNhc2UgJ3Vua25vd24nOlxuICAgICAgcmV0dXJuICd1bmtub3duJ1xuICAgIGNhc2UgJ2lycmVndWxhcic6XG4gICAgICByZXR1cm4gJ2lycmVndWxhcidcbiAgICBjYXNlICdub3RQbGFubmVkJzpcbiAgICAgIHJldHVybiAnbm90UGxhbm5lZCdcbiAgICBjYXNlICdjb250aW51YWwnOlxuICAgICAgcmV0dXJuICdjb250aW51YWwnXG4gICAgY2FzZSAncGVyaW9kaWMnOlxuICAgICAgcmV0dXJuICdwZXJpb2RpYydcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SVNPRHVyYXRpb24odXBkYXRlRnJlcXVlbmN5OiBVcGRhdGVGcmVxdWVuY3lDdXN0b20pOiBzdHJpbmcge1xuICBjb25zdCBkdXJhdGlvbiA9IHtcbiAgICB5ZWFyczogMCxcbiAgICBtb250aHM6IDAsXG4gICAgd2Vla3M6IDAsXG4gICAgZGF5czogMCxcbiAgICBob3VyczogMCxcbiAgfVxuICBzd2l0Y2ggKHVwZGF0ZUZyZXF1ZW5jeS5wZXIpIHtcbiAgICBjYXNlICdkYXknOlxuICAgICAgaWYgKHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgPD0gMSkgZHVyYXRpb24uZGF5cyA9IDFcbiAgICAgIGVsc2UgZHVyYXRpb24uaG91cnMgPSBNYXRoLnJvdW5kKDI0IC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICBkdXJhdGlvbi5kYXlzID0gTWF0aC5yb3VuZCg3IC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyAtIDAuMDAwMSkgLy8gdGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCAnMiB0aW1lcyBwZXIgd2VlaycgPSAnZXZlcnkgMyBkYXlzJ1xuICAgICAgYnJlYWtcbiAgICBjYXNlICdtb250aCc6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi5tb250aHMgPSAxXG4gICAgICBlbHNlIGR1cmF0aW9uLmRheXMgPSBNYXRoLnJvdW5kKDMwIC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAneWVhcic6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi55ZWFycyA9IDFcbiAgICAgIGVsc2UgZHVyYXRpb24ubW9udGhzID0gTWF0aC5yb3VuZCgxMiAvIHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMpXG4gICAgICBicmVha1xuICB9XG4gIGNvbnN0IGhvdXJzID0gZHVyYXRpb24uaG91cnMgPiAwID8gYFQke2R1cmF0aW9uLmhvdXJzfUhgIDogJydcbiAgcmV0dXJuIGBQJHtkdXJhdGlvbi55ZWFyc31ZJHtkdXJhdGlvbi5tb250aHN9TSR7ZHVyYXRpb24uZGF5c31EJHtob3Vyc31gXG59XG5cbmZ1bmN0aW9uIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoXG4gIGNvbnRhY3Q6IEluZGl2aWR1YWwsXG4gIHRyYW5zbGF0aW9uczogUmVjb3JkVHJhbnNsYXRpb25zLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKSB7XG4gIGNvbnN0IGZ1bGxOYW1lID0gbmFtZVBhcnRzVG9GdWxsKGNvbnRhY3QuZmlyc3ROYW1lLCBjb250YWN0Lmxhc3ROYW1lKVxuXG4gIGNvbnN0IGNyZWF0ZUFkZHJlc3MgPSBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDphZGRyZXNzJywgJ2dtZDpDSV9BZGRyZXNzJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZWxlY3Ryb25pY01haWxBZGRyZXNzJyksXG4gICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QuZW1haWwpXG4gICAgICApXG4gICAgKSxcbiAgICBjb250YWN0LmFkZHJlc3NcbiAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkZWxpdmVyeVBvaW50JyksXG4gICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LmFkZHJlc3MpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcbiAgKVxuXG4gIGNvbnN0IGNyZWF0ZUNvbnRhY3QgPSBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpjb250YWN0SW5mbycsICdnbWQ6Q0lfQ29udGFjdCcpLFxuICAgIGNvbnRhY3QucGhvbmVcbiAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpwaG9uZScsICdnbWQ6Q0lfVGVsZXBob25lJywgJ2dtZDp2b2ljZScpLFxuICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5waG9uZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbm9vcCxcbiAgICBhcHBlbmRDaGlsZHJlbihjcmVhdGVBZGRyZXNzKSxcbiAgICBjb250YWN0Lm9yZ2FuaXphdGlvbj8ud2Vic2l0ZVxuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOm9ubGluZVJlc291cmNlJywgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZScpLFxuICAgICAgICAgICAgd3JpdGVMaW5rYWdlKGNvbnRhY3Qub3JnYW5pemF0aW9uLndlYnNpdGUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcbiAgKVxuXG4gIHJldHVybiBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknKSxcbiAgICAgIGZ1bGxOYW1lXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6aW5kaXZpZHVhbE5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoZnVsbE5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBjb250YWN0LnBvc2l0aW9uXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cG9zaXRpb25OYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QucG9zaXRpb24pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG5cbiAgICAgIGNvbnRhY3Qub3JnYW5pemF0aW9uPy5uYW1lXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6b3JnYW5pc2F0aW9uTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0Lm9yZ2FuaXphdGlvbi5uYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIGNyZWF0ZUNvbnRhY3QsXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnJvbGUnLCAnZ21kOkNJX1JvbGVDb2RlJyksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfUm9sZUNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGdldFJvbGVDb2RlKGNvbnRhY3Qucm9sZSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUtleXdvcmRzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4ocGlwZShmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJykpKVxufVxuXG4vLyByZXR1cm5zIGEgPGdtZDp0aGVzYXVydXNOYW1lPiBlbGVtZW50XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGhlc2F1cnVzKHRoZXNhdXJ1czogVGhlc2F1cnVzTW9kZWwpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnRoZXNhdXJ1c05hbWUnLCAnZ21kOkNJX0NpdGF0aW9uJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dGl0bGUnKSxcbiAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcodGhlc2F1cnVzLm5hbWUgfHwgdGhlc2F1cnVzLmlkKVxuICAgICAgKSxcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDppZGVudGlmaWVyJywgJ2dtZDpNRF9JZGVudGlmaWVyJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Y29kZScpLFxuICAgICAgICAgICAgdGhlc2F1cnVzLnVybFxuICAgICAgICAgICAgICA/IHdyaXRlQW5jaG9yKHRoZXNhdXJ1cy51cmwsIHRoZXNhdXJ1cy5pZClcbiAgICAgICAgICAgICAgOiB3cml0ZUNoYXJhY3RlclN0cmluZyh0aGVzYXVydXMuaWQpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRLZXl3b3JkcyhcbiAga2V5d29yZHM6IEtleXdvcmRbXSxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICAvLyBrZXl3b3JkcyBhcmUgZ3JvdXBlZCBieSB0aGVzYXVydXMgaWYgdGhleSBoYXZlIG9uZSwgb3RoZXJ3aXNlIGJ5IHR5cGVcbiAgY29uc3Qga2V5d29yZHNCeVRoZXNhdXJ1czogS2V5d29yZFtdW10gPSBrZXl3b3Jkcy5yZWR1Y2UoKGFjYywga2V5d29yZCkgPT4ge1xuICAgIGNvbnN0IHRoZXNhdXJ1c0lkID0ga2V5d29yZC50aGVzYXVydXM/LmlkXG4gICAgY29uc3QgdHlwZSA9IGtleXdvcmQudHlwZVxuICAgIGxldCBleGlzdGluZ0dyb3VwID0gYWNjLmZpbmQoKGdyb3VwKSA9PlxuICAgICAgdGhlc2F1cnVzSWRcbiAgICAgICAgPyBncm91cFswXS50aGVzYXVydXM/LmlkID09PSB0aGVzYXVydXNJZFxuICAgICAgICA6IGdyb3VwWzBdLnR5cGUgPT09IHR5cGUgJiYgIWdyb3VwWzBdLnRoZXNhdXJ1c1xuICAgIClcbiAgICBpZiAoIWV4aXN0aW5nR3JvdXApIHtcbiAgICAgIGV4aXN0aW5nR3JvdXAgPSBbXVxuICAgICAgYWNjLnB1c2goZXhpc3RpbmdHcm91cClcbiAgICB9XG4gICAgZXhpc3RpbmdHcm91cC5wdXNoKGtleXdvcmQpXG4gICAgcmV0dXJuIGFjY1xuICB9LCBbXSlcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIC4uLmtleXdvcmRzQnlUaGVzYXVydXMubWFwKChrZXl3b3JkcykgPT5cbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJywgJ2dtZDpNRF9LZXl3b3JkcycpLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnR5cGUnLCAnZ21kOk1EX0tleXdvcmRUeXBlQ29kZScpLFxuICAgICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX0tleXdvcmRUeXBlQ29kZSdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGtleXdvcmRzWzBdLnR5cGUpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBrZXl3b3Jkc1swXS50aGVzYXVydXNcbiAgICAgICAgICA/IGFwcGVuZENoaWxkcmVuKGNyZWF0ZVRoZXNhdXJ1cyhrZXl3b3Jkc1swXS50aGVzYXVydXMpKVxuICAgICAgICAgIDogbm9vcCxcbiAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgLi4ua2V5d29yZHMubWFwKChrZXl3b3JkKSA9PlxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmtleXdvcmQnKSxcbiAgICAgICAgICAgICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgICAgICAga2V5d29yZC5sYWJlbCxcbiAgICAgICAgICAgICAgICBrZXl3b3JkLnRyYW5zbGF0aW9ucz8ubGFiZWwsXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQoXG4gIGNvbnN0cmFpbnQ6IENvbnN0cmFpbnQsXG4gIHR5cGU6ICdsZWdhbCcgfCAnc2VjdXJpdHknIHwgJ290aGVyJyxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICBpZiAodHlwZSA9PT0gJ3NlY3VyaXR5Jykge1xuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyxcbiAgICAgICAgJ2dtZDpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJ1xuICAgICAgKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgICAnZ21kOmNsYXNzaWZpY2F0aW9uJyxcbiAgICAgICAgICAgICdnbWQ6TURfQ2xhc3NpZmljYXRpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfQ2xhc3NpZmljYXRpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAncmVzdHJpY3RlZCcpXG4gICAgICAgICksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICAgICAgICAndXJsJyBpbiBjb25zdHJhaW50XG4gICAgICAgICAgICA/IHdyaXRlTG9jYWxpemVkQW5jaG9yKFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudXJsLFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbGVnYWwnKSB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycsICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAgICdnbWQ6YWNjZXNzQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdvdGhlclJlc3RyaWN0aW9ucycpXG4gICAgICAgICksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm90aGVyQ29uc3RyYWludHMnKSxcbiAgICAgICAgICAndXJsJyBpbiBjb25zdHJhaW50XG4gICAgICAgICAgICA/IHdyaXRlTG9jYWxpemVkQW5jaG9yKFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudXJsLFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfVxuICAvLyBvdGhlclxuICByZXR1cm4gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyxcbiAgICAgICdnbWQ6TURfQ29uc3RyYWludHMnLFxuICAgICAgJ2dtZDp1c2VMaW1pdGF0aW9uJ1xuICAgICksXG4gICAgJ3VybCcgaW4gY29uc3RyYWludFxuICAgICAgPyB3cml0ZUxvY2FsaXplZEFuY2hvcihcbiAgICAgICAgICBjb25zdHJhaW50LnVybCxcbiAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgIClcbiAgICAgIDogd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU90aGVyQ29uc3RyYWludHMoKSB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBtYXBBcnJheShcbiAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9Db25zdHJhaW50cycpLFxuICAgICAgICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgICAgICAgIChhcnJheSkgPT4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTZWN1cml0eUNvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgbWFwQXJyYXkoXG4gICAgICAgIHJlbW92ZUNoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfU2VjdXJpdHlDb25zdHJhaW50cycpLFxuICAgICAgICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgICAgICAgIChhcnJheSkgPT4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMZWdhbENvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgbWFwQXJyYXkoXG4gICAgICAgIHJlbW92ZUNoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycpLFxuICAgICAgICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgICAgICAgJ2dtZDphY2Nlc3NDb25zdHJhaW50cycsXG4gICAgICAgICAgICAgICAgICAnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgICAgICAgICAgKHJlc3RyaWN0aW9uQ29kZXMpID0+XG4gICAgICAgICAgICAgICAgICByZXN0cmljdGlvbkNvZGVzLmV2ZXJ5KChjb2RlKSA9PiBjb2RlICE9PSAnbGljZW5zZScpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVtcHR5UmVzb3VyY2VDb25zdHJhaW50cygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgZmlsdGVyQXJyYXkocGlwZShhbGxDaGlsZHJlbkVsZW1lbnQsIChhcnJheSkgPT4gYXJyYXkubGVuZ3RoID09PSAwKSlcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxpY2Vuc2VzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAgICAgICAnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgJ2dtZDphY2Nlc3NDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgICAgKHJlc3RyaWN0aW9uQ29kZXMpID0+XG4gICAgICAgICAgICByZXN0cmljdGlvbkNvZGVzLnNvbWUoKGNvZGUpID0+IGNvZGUgPT09ICdsaWNlbnNlJylcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGljZW5zZShcbiAgbGljZW5zZTogQ29uc3RyYWludCxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICByZXR1cm4gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycsICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJywgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICksXG4gICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgJ2xpY2Vuc2UnKVxuICAgICAgKSxcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDphY2Nlc3NDb25zdHJhaW50cycsICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICApLFxuICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdvdGhlclJlc3RyaWN0aW9ucycpXG4gICAgICApLFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm90aGVyQ29uc3RyYWludHMnKSxcbiAgICAgICAgJ3VybCcgaW4gbGljZW5zZVxuICAgICAgICAgID8gd3JpdGVBbmNob3IobGljZW5zZS51cmwsIGxpY2Vuc2UudGV4dClcbiAgICAgICAgICA6IHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICBsaWNlbnNlLnRleHQsXG4gICAgICAgICAgICAgIGxpY2Vuc2UudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU9ubGluZVJlc291cmNlcygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycpXG59XG5cbmZ1bmN0aW9uIGFwcGVuZE9ubGluZVJlc291cmNlRm9ybWF0KG1pbWVUeXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uRm9ybWF0JywgJ2dtZDpNRF9Gb3JtYXQnKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG1pbWVUeXBlKSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnZlcnNpb24nKSxcbiAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZygnMS4wJykgLy8gaGFyZGNvZGluZyB0aGlzIGFzIGl0IG1vc3QgbGlrZWx5IHdvbid0IGJlIHVzZWQgYnV0IGlzIG1hbmRhdG9yeVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaXN0cmlidXRpb25JbmZvKCkge1xuICByZXR1cm4gY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkluZm8nLCAnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpXG59XG5cbi8vIGFwcGx5IHRvIE1EX0Rpc3RyaWJ1dGlvblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZE9ubGluZVJlc291cmNlKFxuICBvbmxpbmVSZXNvdXJjZTogRGF0YXNldE9ubGluZVJlc291cmNlLFxuICBhcHBlbmRGb3JtYXRGbjogKFxuICAgIG1pbWVUeXBlOiBzdHJpbmdcbiAgKSA9PiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PixcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnMsXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pIHtcbiAgbGV0IG5hbWU6IHN0cmluZ1xuICBsZXQgZnVuY3Rpb25Db2RlOiBzdHJpbmdcbiAgbGV0IHByb3RvY29sOiBzdHJpbmdcbiAgaWYgKG9ubGluZVJlc291cmNlLnR5cGUgPT09ICdzZXJ2aWNlJykge1xuICAgIG5hbWUgPSBvbmxpbmVSZXNvdXJjZS5pZGVudGlmaWVySW5TZXJ2aWNlIC8vIHRoaXMgaXMgZm9yIEdlb05ldHdvcmsgdG8ga25vdyB0aGUgbGF5ZXIgbmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgICBwcm90b2NvbCA9IGdldFNlcnZpY2VEaXN0cmlidXRpb25Qcm90b2NvbChvbmxpbmVSZXNvdXJjZSlcbiAgfSBlbHNlIGlmIChvbmxpbmVSZXNvdXJjZS50eXBlID09PSAnZG93bmxvYWQnKSB7XG4gICAgbmFtZSA9IG9ubGluZVJlc291cmNlLm5hbWVcbiAgICBmdW5jdGlvbkNvZGUgPSAnZG93bmxvYWQnXG4gICAgcHJvdG9jb2wgPSAnV1dXOkRPV05MT0FEJ1xuICB9IGVsc2Uge1xuICAgIG5hbWUgPSBvbmxpbmVSZXNvdXJjZS5uYW1lXG4gICAgZnVuY3Rpb25Db2RlID0gJ2luZm9ybWF0aW9uJ1xuICAgIHByb3RvY29sID0gJ1dXVzpMSU5LJ1xuICB9XG4gIGNvbnN0IGFwcGVuZFRyYW5zZmVyT3B0aW9ucyA9IGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAnZ21kOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICAgICksXG4gICAgICB3cml0ZUxpbmthZ2Uob25saW5lUmVzb3VyY2UudXJsKSxcbiAgICAgICdkZXNjcmlwdGlvbicgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgICBvbmxpbmVSZXNvdXJjZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBvbmxpbmVSZXNvdXJjZS50cmFuc2xhdGlvbnM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBuYW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgb25saW5lUmVzb3VyY2UudHJhbnNsYXRpb25zPy5uYW1lLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocHJvdG9jb2wpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX09uTGluZUZ1bmN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZnVuY3Rpb25Db2RlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgICdtaW1lVHlwZScgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgID8gYXBwZW5kRm9ybWF0Rm4ob25saW5lUmVzb3VyY2UubWltZVR5cGUpXG4gICAgICA6IG5vb3AsXG4gICAgYXBwZW5kVHJhbnNmZXJPcHRpb25zXG4gIClcbn1cblxuLyoqXG4gKiBMb29rcyBmb3Igc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbiBvciBnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uIGVsZW1lbnRcbiAqIGRlcGVuZGluZyBvbiByZWNvcmQgdHlwZSwgY3JlYXRlIGlmIG1pc3NpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCkge1xuICByZXR1cm4gKHJvb3RFbDogWG1sRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGtpbmQgPSByZWFkS2luZChyb290RWwpXG4gICAgbGV0IGVsdE5hbWUgPSAnZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbidcbiAgICBpZiAoa2luZCA9PT0gJ3NlcnZpY2UnKSBlbHROYW1lID0gJ3NydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24nXG4gICAgcmV0dXJuIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6aWRlbnRpZmljYXRpb25JbmZvJywgZWx0TmFtZSkocm9vdEVsKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kT3JDcmVhdGVEaXN0cmlidXRpb24oKSB7XG4gIHJldHVybiAocm9vdEVsOiBYbWxFbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpkaXN0cmlidXRpb25JbmZvJyxcbiAgICAgICdnbWQ6TURfRGlzdHJpYnV0aW9uJ1xuICAgICkocm9vdEVsKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVuaXF1ZUlkZW50aWZpZXIoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmZpbGVJZGVudGlmaWVyJyksXG4gICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVLaW5kKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpoaWVyYXJjaHlMZXZlbCcsICdnbWQ6TURfU2NvcGVDb2RlJyksXG4gICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAnY29kZUxpc3QnLFxuICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfU2NvcGVDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBraW5kVG9Db2RlTGlzdFZhbHVlKHJlY29yZCkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUaXRsZShyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICByZWNvcmQudGl0bGUsXG4gICAgICByZWNvcmQudHJhbnNsYXRpb25zPy50aXRsZSxcbiAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVBYnN0cmFjdChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDphYnN0cmFjdCcpLFxuICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgcmVjb3JkLmFic3RyYWN0LFxuICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucz8uYWJzdHJhY3QsXG4gICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3RhdHVzKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOnN0YXR1cycsICdnbWQ6TURfUHJvZ3Jlc3NDb2RlJyksXG4gICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAnY29kZUxpc3QnLFxuICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUHJvZ3Jlc3NDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRQcm9ncmVzc0NvZGUocmVjb3JkLnN0YXR1cykpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6Y29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmNvbnRhY3RzLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Y29udGFjdCcpLFxuICAgICAgICAgIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoXG4gICAgICAgICAgICBjb250YWN0LFxuICAgICAgICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0c0ZvclJlc291cmNlKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnBvaW50T2ZDb250YWN0JyksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpjb250YWN0JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuY29udGFjdHNGb3JSZXNvdXJjZS5tYXAoKGNvbnRhY3QpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnBvaW50T2ZDb250YWN0JyksXG4gICAgICAgICAgYXBwZW5kUmVzcG9uc2libGVQYXJ0eShcbiAgICAgICAgICAgIGNvbnRhY3QsXG4gICAgICAgICAgICByZWNvcmQudHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUtleXdvcmRzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVLZXl3b3JkcygpLFxuICAgIGFwcGVuZEtleXdvcmRzKHJlY29yZC5rZXl3b3JkcywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVRvcGljcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDp0b3BpY0NhdGVnb3J5JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQudG9waWNzLm1hcCgodG9waWMpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnRvcGljQ2F0ZWdvcnknLCAnZ21kOk1EX1RvcGljQ2F0ZWdvcnlDb2RlJyksXG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQodG9waWMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaWNlbnNlcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlTGljZW5zZXMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5saWNlbnNlcy5tYXAoKGxpY2Vuc2UpID0+XG4gICAgICAgIGNyZWF0ZUxpY2Vuc2UobGljZW5zZSwgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMZWdhbENvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVMZWdhbENvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQubGVnYWxDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ2xlZ2FsJywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTZWN1cml0eUNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVTZWN1cml0eUNvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuc2VjdXJpdHlDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ3NlY3VyaXR5JywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPdGhlckNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVPdGhlckNvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQub3RoZXJDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ290aGVyJywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVVcGRhdGVGcmVxdWVuY3koXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnbWQ6cmVzb3VyY2VNYWludGVuYW5jZScpLFxuICAgIHJlbW92ZUFsbENoaWxkcmVuKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpNRF9NYWludGVuYW5jZUluZm9ybWF0aW9uJyksXG4gICAgdHlwZW9mIHJlY29yZC51cGRhdGVGcmVxdWVuY3kgPT09ICdvYmplY3QnXG4gICAgICA/IHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoXG4gICAgICAgICAgICAnZ21kOnVzZXJEZWZpbmVkTWFpbnRlbmFuY2VGcmVxdWVuY3knLFxuICAgICAgICAgICAgJ2d0czpUTV9QZXJpb2REdXJhdGlvbidcbiAgICAgICAgICApLFxuICAgICAgICAgIHNldFRleHRDb250ZW50KGdldElTT0R1cmF0aW9uKHJlY29yZC51cGRhdGVGcmVxdWVuY3kpKVxuICAgICAgICApXG4gICAgICA6IHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoXG4gICAgICAgICAgICAnZ21kOm1haW50ZW5hbmNlQW5kVXBkYXRlRnJlcXVlbmN5JyxcbiAgICAgICAgICAgICdnbWQ6TURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3RWYWx1ZScsXG4gICAgICAgICAgICBnZXRNYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUocmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlY29yZFVwZGF0ZWQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmRhdGVTdGFtcCcpLFxuICAgIHJlbW92ZUFsbENoaWxkcmVuKCksXG4gICAgd3JpdGVEYXRlVGltZShyZWNvcmQucmVjb3JkVXBkYXRlZClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVSZXNvdXJjZURhdGUoXG4gIHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRhdGUnKSxcbiAgICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICAgICAnZ21kOkNJX0RhdGUnLFxuICAgICAgICAgICAgICAnZ21kOmRhdGVUeXBlJyxcbiAgICAgICAgICAgICAgJ2dtZDpDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRSZXNvdXJjZURhdGUoXG4gIGRhdGU6IERhdGUsXG4gIHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkYXRlJywgJ2dtZDpDSV9EYXRlJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOmRhdGUnKSwgd3JpdGVEYXRlVGltZShkYXRlKSksXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkYXRlVHlwZScsICdnbWQ6Q0lfRGF0ZVR5cGVDb2RlJyksXG4gICAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfRGF0ZVR5cGVDb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgdHlwZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VDcmVhdGVkKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHJlbW92ZVJlc291cmNlRGF0ZSgnY3JlYXRpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlc291cmNlQ3JlYXRlZCkgcmV0dXJuXG4gIGFwcGVuZFJlc291cmNlRGF0ZShyZWNvcmQucmVzb3VyY2VDcmVhdGVkLCAnY3JlYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlc291cmNlVXBkYXRlZChcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVSZXNvdXJjZURhdGUoJ3JldmlzaW9uJykocm9vdEVsKVxuICBpZiAoIXJlY29yZC5yZXNvdXJjZVVwZGF0ZWQpIHJldHVyblxuICBhcHBlbmRSZXNvdXJjZURhdGUocmVjb3JkLnJlc291cmNlVXBkYXRlZCwgJ3JldmlzaW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXNvdXJjZVB1Ymxpc2hlZChcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVSZXNvdXJjZURhdGUoJ3B1YmxpY2F0aW9uJykocm9vdEVsKVxuICBpZiAoIXJlY29yZC5yZXNvdXJjZVB1Ymxpc2hlZCkgcmV0dXJuXG4gIGFwcGVuZFJlc291cmNlRGF0ZShyZWNvcmQucmVzb3VyY2VQdWJsaXNoZWQsICdwdWJsaWNhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmV1c2VUeXBlKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHdyaXRlS2luZChyZWNvcmQsIHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3BhdGlhbFJlcHJlc2VudGF0aW9uKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGlmICghcmVjb3JkLnNwYXRpYWxSZXByZXNlbnRhdGlvbikge1xuICAgIHBpcGUoXG4gICAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpzcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlJylcbiAgICApKHJvb3RFbClcbiAgICByZXR1cm5cbiAgfVxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnZ21kOnNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUnLFxuICAgICAgJ2dtZDpNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1NwYXRpYWxSZXByZXNlbnRhdGlvblR5cGVDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCByZWNvcmQuc3BhdGlhbFJlcHJlc2VudGF0aW9uKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlR3JhcGhpY092ZXJ2aWV3cyhcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpncmFwaGljT3ZlcnZpZXcnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5vdmVydmlld3MubWFwKChvdmVydmlldykgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6Z3JhcGhpY092ZXJ2aWV3JywgJ2dtZDpNRF9Ccm93c2VHcmFwaGljJyksXG4gICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZmlsZU5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob3ZlcnZpZXcudXJsLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICAnZGVzY3JpcHRpb24nIGluIG92ZXJ2aWV3XG4gICAgICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZmlsZURlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvdmVydmlldy5kZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbm9vcFxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGluZWFnZShyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpkYXRhUXVhbGl0eUluZm8nLFxuICAgICAgJ2dtZDpEUV9EYXRhUXVhbGl0eScsXG4gICAgICAnZ21kOmxpbmVhZ2UnLFxuICAgICAgJ2dtZDpMSV9MaW5lYWdlJyxcbiAgICAgICdnbWQ6c3RhdGVtZW50J1xuICAgICksXG4gICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICByZWNvcmQubGluZWFnZSxcbiAgICAgIHJlY29yZC50cmFuc2xhdGlvbnM/LmxpbmVhZ2UsXG4gICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcnZpY2VFbmRwb2ludFByb3RvY29sKGVuZHBvaW50OiBTZXJ2aWNlRW5kcG9pbnQpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGVuZHBvaW50LnByb3RvY29sLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICd3ZnMnOlxuICAgICAgcmV0dXJuICdPR0M6V0ZTJ1xuICAgIGNhc2UgJ3dtcyc6XG4gICAgICByZXR1cm4gJ09HQzpXTVMnXG4gICAgY2FzZSAnd3BzJzpcbiAgICAgIHJldHVybiAnT0dDOldQUydcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGVuZHBvaW50LnByb3RvY29sXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9ubGluZVJlc291cmNlKG9ubGluZVJlc291cmNlOiBTZXJ2aWNlT25saW5lUmVzb3VyY2UpIHtcbiAgbGV0IGxpbmthZ2VVcmwsIGZ1bmN0aW9uQ29kZSwgcHJvdG9jb2xcbiAgaWYgKG9ubGluZVJlc291cmNlLnR5cGUgPT09ICdlbmRwb2ludCcpIHtcbiAgICBsaW5rYWdlVXJsID0gb25saW5lUmVzb3VyY2UuZW5kcG9pbnRVcmwudG9TdHJpbmcoKVxuICAgIHByb3RvY29sID0gZ2V0U2VydmljZUVuZHBvaW50UHJvdG9jb2wob25saW5lUmVzb3VyY2UpXG4gICAgZnVuY3Rpb25Db2RlID0gJ2Rvd25sb2FkJ1xuICB9IGVsc2Uge1xuICAgIGxpbmthZ2VVcmwgPSBvbmxpbmVSZXNvdXJjZS51cmwudG9TdHJpbmcoKVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdpbmZvcm1hdGlvbidcbiAgICBwcm90b2NvbCA9ICdXV1c6TElOSydcbiAgfVxuICBjb25zdCBhcHBlbmRUcmFuc2Zlck9wdGlvbnMgPSBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnRyYW5zZmVyT3B0aW9ucycpLFxuICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoXG4gICAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICAgICksXG4gICAgICB3cml0ZUxpbmthZ2UobGlua2FnZVVybCksXG4gICAgICAnZGVzY3JpcHRpb24nIGluIG9ubGluZVJlc291cmNlXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob25saW5lUmVzb3VyY2UuZGVzY3JpcHRpb24pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICAnbmFtZScgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG9ubGluZVJlc291cmNlLm5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocHJvdG9jb2wpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX09uTGluZUZ1bmN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZnVuY3Rpb25Db2RlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBhcHBlbmRUcmFuc2Zlck9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YXNldE9ubGluZVJlc291cmNlcyhcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBhcHBlbmRDaGlsZHJlbihcbiAgICAuLi5yZWNvcmQub25saW5lUmVzb3VyY2VzLm1hcCgoZCkgPT5cbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZURpc3RyaWJ1dGlvbkluZm8oKSxcbiAgICAgICAgYXBwZW5kT25saW5lUmVzb3VyY2UoXG4gICAgICAgICAgZCxcbiAgICAgICAgICBhcHBlbmRPbmxpbmVSZXNvdXJjZUZvcm1hdCxcbiAgICAgICAgICByZWNvcmQudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRTZXJ2aWNlT25saW5lUmVzb3VyY2VzKFxuICByZWNvcmQ6IFNlcnZpY2VSZWNvcmQgfCBSZXVzZVJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgYXBwZW5kQ2hpbGRyZW4oLi4ucmVjb3JkLm9ubGluZVJlc291cmNlcy5tYXAoY3JlYXRlT25saW5lUmVzb3VyY2UpKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU9ubGluZVJlc291cmNlcyhcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVPbmxpbmVSZXNvdXJjZXMoKShyb290RWwpXG5cbiAgaWYgKHJlY29yZC5raW5kID09PSAnZGF0YXNldCcpIHtcbiAgICBhcHBlbmREYXRhc2V0T25saW5lUmVzb3VyY2VzKHJlY29yZCwgcm9vdEVsKVxuICAgIHJldHVyblxuICB9XG4gIGFwcGVuZFNlcnZpY2VPbmxpbmVSZXNvdXJjZXMocmVjb3JkLCByb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVRlbXBvcmFsRXh0ZW50cyhcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpleHRlbnQnLCAnZ21kOkVYX0V4dGVudCcpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6dGVtcG9yYWxFbGVtZW50JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQudGVtcG9yYWxFeHRlbnRzLm1hcCgoZXh0ZW50KSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDp0ZW1wb3JhbEVsZW1lbnQnLCAnZ21kOkVYX1RlbXBvcmFsRXh0ZW50JyksXG4gICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAnc3RhcnQnIGluIGV4dGVudCAmJiAnZW5kJyBpbiBleHRlbnRcbiAgICAgICAgICAgICAgPyBwaXBlKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmV4dGVudCcsICdnbWw6VGltZVBlcmlvZCcpLFxuICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21sOmJlZ2luUG9zaXRpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50LnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZm9ybWF0KGV4dGVudC5zdGFydCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB3cml0ZUF0dHJpYnV0ZSgnaW5kZXRlcm1pbmF0ZVBvc2l0aW9uJywgJ3Vua25vd24nKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWw6ZW5kUG9zaXRpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50LmVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNldFRleHRDb250ZW50KGZvcm1hdChleHRlbnQuZW5kLCAneXl5eS1NTS1kZCcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHdyaXRlQXR0cmlidXRlKCdpbmRldGVybWluYXRlUG9zaXRpb24nLCAndW5rbm93bicpXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHBpcGUoXG4gICAgICAgICAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAnZ21kOmV4dGVudCcsXG4gICAgICAgICAgICAgICAgICAgICdnbWw6VGltZUluc3RhbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZ21sOnRpbWVQb3NpdGlvbidcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBleHRlbnQuc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgPyBzZXRUZXh0Q29udGVudChmb3JtYXQoZXh0ZW50LnN0YXJ0LCAneXl5eS1NTS1kZCcpKVxuICAgICAgICAgICAgICAgICAgICA6IHdyaXRlQXR0cmlidXRlKCdpbmRldGVybWluYXRlUG9zaXRpb24nLCAndW5rbm93bicpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVNwYXRpYWxFeHRlbnRzKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIGNvbnN0IGFwcGVuZEJvdW5kaW5nUG9seWdvbiA9IChnZW9tZXRyeT86IEdlb21ldHJ5KSA9PiB7XG4gICAgaWYgKCFnZW9tZXRyeSkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpFWF9Cb3VuZGluZ1BvbHlnb24nKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpwb2x5Z29uJyksXG4gICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oKCkgPT4gd3JpdGVHZW9tZXRyeShnZW9tZXRyeSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBjb25zdCBhcHBlbmRHZW9ncmFwaGljQm91bmRpbmdCb3ggPSAoXG4gICAgYmJveD86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG4gICkgPT4ge1xuICAgIGlmICghYmJveCkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpFWF9HZW9ncmFwaGljQm91bmRpbmdCb3gnKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDp3ZXN0Qm91bmRMb25naXR1ZGUnKSwgd3JpdGVEZWNpbWFsKGJib3hbMF0pKSxcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6ZWFzdEJvdW5kTG9uZ2l0dWRlJyksIHdyaXRlRGVjaW1hbChiYm94WzJdKSksXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOnNvdXRoQm91bmRMYXRpdHVkZScpLCB3cml0ZURlY2ltYWwoYmJveFsxXSkpLFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpub3J0aEJvdW5kTGF0aXR1ZGUnKSwgd3JpdGVEZWNpbWFsKGJib3hbM10pKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGFwcGVuZEdlb2dyYXBoaWNEZXNjcmlwdGlvbiA9IChcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICB0cmFuc2xhdGlvbnM/OiBGaWVsZFRyYW5zbGF0aW9uXG4gICkgPT4ge1xuICAgIGlmICghZGVzY3JpcHRpb24pIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAnZ21kOkVYX0dlb2dyYXBoaWNEZXNjcmlwdGlvbicsXG4gICAgICAgICdnbWQ6Z2VvZ3JhcGhpY0lkZW50aWZpZXInLFxuICAgICAgICAnZ21kOk1EX0lkZW50aWZpZXInLFxuICAgICAgICAnZ21kOmNvZGUnXG4gICAgICApLFxuICAgICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpleHRlbnQnLCAnZ21kOkVYX0V4dGVudCcpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6Z2VvZ3JhcGhpY0VsZW1lbnQnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5zcGF0aWFsRXh0ZW50cy5tYXAoKGV4dGVudCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Z2VvZ3JhcGhpY0VsZW1lbnQnKSxcbiAgICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIGFwcGVuZEJvdW5kaW5nUG9seWdvbihleHRlbnQuZ2VvbWV0cnkpLFxuICAgICAgICAgICAgYXBwZW5kR2VvZ3JhcGhpY0JvdW5kaW5nQm94KGV4dGVudC5iYm94KSxcbiAgICAgICAgICAgIGFwcGVuZEdlb2dyYXBoaWNEZXNjcmlwdGlvbihcbiAgICAgICAgICAgICAgZXh0ZW50LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICBleHRlbnQudHJhbnNsYXRpb25zPy5kZXNjcmlwdGlvblxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxhbmd1YWdlcyhyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICAvLyBjbGVhciBleGlzdGluZ1xuICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmxvY2FsZScpKHJvb3RFbClcblxuICAvLyBkbyBub3Qgd3JpdGUgZG93biBsYW5ndWFnZXMgaWYgdGhlcmUgaXMgbm90aGluZyBlbHNlIHRoYW4gdGhlIGRlZmF1bHQgb25lXG4gIGlmICghcmVjb3JkLm90aGVyTGFuZ3VhZ2VzPy5sZW5ndGgpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUxhbmd1YWdlRWwgPSAobGFuZzogTGFuZ3VhZ2VDb2RlKSA9PlxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6bG9jYWxlJywgJ2dtZDpQVF9Mb2NhbGUnKSxcbiAgICAgIHdyaXRlQXR0cmlidXRlKCdpZCcsIGxhbmcudG9VcHBlckNhc2UoKSksXG4gICAgICBjcmVhdGVOZXN0ZWRDaGlsZCgnZ21kOmxhbmd1YWdlQ29kZScsICdnbWQ6TGFuZ3VhZ2VDb2RlJyksXG4gICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3QnLCAnaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi8nKSxcbiAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgTEFOR18yX1RPXzNfTUFQUEVSW2xhbmddKVxuICAgIClcblxuICAvLyBhZGQgbmV3IGxhbmd1YWdlcyAob25seSBpZiBvdGhlciB0aGFuIGRlZmF1bHQgb25lKVxuICBhcHBlbmRDaGlsZHJlbihcbiAgICBjcmVhdGVMYW5ndWFnZUVsKHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UpLFxuICAgIC4uLnJlY29yZC5vdGhlckxhbmd1YWdlcy5tYXAoY3JlYXRlTGFuZ3VhZ2VFbClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURlZmF1bHRMYW5ndWFnZShcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBjb25zdCBsYW5nMyA9IExBTkdfMl9UT18zX01BUFBFUltyZWNvcmQuZGVmYXVsdExhbmd1YWdlLnRvTG93ZXJDYXNlKCldXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6bGFuZ3VhZ2UnLCAnZ21kOkxhbmd1YWdlQ29kZScpLFxuICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdCcsICdodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yLycpLFxuICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgbGFuZzMpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXNvdXJjZUlkZW50aWZpZXIoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJyksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDppZGVudGlmaWVyJyksXG4gICAgcmVjb3JkLnJlc291cmNlSWRlbnRpZmllclxuICAgICAgPyBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZENoaWxkKCdnbWQ6aWRlbnRpZmllcicsICdnbWQ6TURfSWRlbnRpZmllcicsICdnbWQ6Y29kZScpLFxuICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHJlY29yZC5yZXNvdXJjZUlkZW50aWZpZXIpXG4gICAgICAgIClcbiAgICAgIDogbm9vcFxuICApKHJvb3RFbClcbn1cbiJdfQ==