@kaspernj/api-maker 1.0.2160 → 1.0.2161
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.
- package/build/api.d.ts +46 -34
- package/build/api.d.ts.map +1 -1
- package/build/api.js +32 -25
- package/build/attribute-not-loaded-error.d.ts.map +1 -1
- package/build/attribute-not-loaded-error.js +2 -1
- package/build/base-error.d.ts +49 -60
- package/build/base-error.d.ts.map +1 -1
- package/build/base-error.js +3 -2
- package/build/base-model/column.d.ts +2 -2
- package/build/base-model/column.d.ts.map +1 -1
- package/build/base-model/column.js +3 -2
- package/build/base-model/reflection.d.ts +8 -3
- package/build/base-model/reflection.d.ts.map +1 -1
- package/build/base-model/reflection.js +8 -3
- package/build/base-model/scope.d.ts +1 -1
- package/build/base-model/scope.d.ts.map +1 -1
- package/build/base-model/scope.js +3 -2
- package/build/base-model.d.ts +3801 -117
- package/build/base-model.d.ts.map +1 -1
- package/build/base-model.js +271 -143
- package/build/bootstrap/attribute-row.d.ts +12 -0
- package/build/bootstrap/attribute-row.d.ts.map +1 -1
- package/build/bootstrap/attribute-row.js +23 -5
- package/build/bootstrap/attribute-rows.d.ts +8 -0
- package/build/bootstrap/attribute-rows.d.ts.map +1 -1
- package/build/bootstrap/attribute-rows.js +14 -5
- package/build/bootstrap/card.d.ts +17 -0
- package/build/bootstrap/card.d.ts.map +1 -1
- package/build/bootstrap/card.js +30 -10
- package/build/bootstrap/checkbox.d.ts +16 -0
- package/build/bootstrap/checkbox.d.ts.map +1 -1
- package/build/bootstrap/checkbox.js +20 -2
- package/build/bootstrap/checkboxes.d.ts +31 -0
- package/build/bootstrap/checkboxes.d.ts.map +1 -1
- package/build/bootstrap/checkboxes.js +35 -3
- package/build/bootstrap/index.js +2 -1
- package/build/bootstrap/input.d.ts +24 -0
- package/build/bootstrap/input.d.ts.map +1 -1
- package/build/bootstrap/input.js +27 -2
- package/build/bootstrap/invalid-feedback.d.ts.map +1 -1
- package/build/bootstrap/invalid-feedback.js +2 -1
- package/build/bootstrap/paginate.d.ts +5 -0
- package/build/bootstrap/paginate.d.ts.map +1 -1
- package/build/bootstrap/paginate.js +9 -4
- package/build/bootstrap/radio-buttons.js +2 -1
- package/build/bootstrap/select.js +2 -1
- package/build/bootstrap/sort-link.d.ts +10 -0
- package/build/bootstrap/sort-link.d.ts.map +1 -1
- package/build/bootstrap/sort-link.js +15 -4
- package/build/cable-connection-pool.d.ts +201 -24
- package/build/cable-connection-pool.d.ts.map +1 -1
- package/build/cable-connection-pool.js +76 -16
- package/build/cable-subscription-pool.d.ts +186 -20
- package/build/cable-subscription-pool.d.ts.map +1 -1
- package/build/cable-subscription-pool.js +61 -22
- package/build/cable-subscription.d.ts.map +1 -1
- package/build/cable-subscription.js +3 -2
- package/build/cache-key-generator.d.ts +194 -20
- package/build/cache-key-generator.d.ts.map +1 -1
- package/build/cache-key-generator.js +63 -12
- package/build/can-can.d.ts +146 -29
- package/build/can-can.d.ts.map +1 -1
- package/build/can-can.js +105 -19
- package/build/channels-consumer.d.ts +23 -1
- package/build/channels-consumer.d.ts.map +1 -1
- package/build/channels-consumer.js +26 -8
- package/build/collection-loader.js +2 -1
- package/build/collection.d.ts +361 -370
- package/build/collection.d.ts.map +1 -1
- package/build/collection.js +59 -19
- package/build/command-execution.d.ts +50 -26
- package/build/command-execution.d.ts.map +1 -1
- package/build/command-execution.js +31 -13
- package/build/command-submit-data.d.ts +50 -37
- package/build/command-submit-data.d.ts.map +1 -1
- package/build/command-submit-data.js +35 -22
- package/build/commands-pool.d.ts +65 -27
- package/build/commands-pool.d.ts.map +1 -1
- package/build/commands-pool.js +67 -20
- package/build/compose.d.ts +8 -2
- package/build/compose.d.ts.map +1 -1
- package/build/compose.js +9 -2
- package/build/config.d.ts +31 -15
- package/build/config.d.ts.map +1 -1
- package/build/config.js +60 -23
- package/build/custom-error.d.ts.map +1 -1
- package/build/custom-error.js +2 -1
- package/build/data-set-to-attributes.d.ts +14 -2
- package/build/data-set-to-attributes.d.ts.map +1 -1
- package/build/data-set-to-attributes.js +12 -3
- package/build/deserializer.d.ts +116 -2
- package/build/deserializer.d.ts.map +1 -1
- package/build/deserializer.js +13 -2
- package/build/destroy-error.d.ts.map +1 -1
- package/build/destroy-error.js +2 -1
- package/build/devise.d.ts +638 -39
- package/build/devise.d.ts.map +1 -1
- package/build/devise.js +97 -28
- package/build/draggable-sort/controller.d.ts +126 -35
- package/build/draggable-sort/controller.d.ts.map +1 -1
- package/build/draggable-sort/controller.js +100 -28
- package/build/draggable-sort/index.d.ts +55 -0
- package/build/draggable-sort/index.d.ts.map +1 -1
- package/build/draggable-sort/index.js +71 -3
- package/build/draggable-sort/item.d.ts +54 -0
- package/build/draggable-sort/item.d.ts.map +1 -1
- package/build/draggable-sort/item.js +94 -6
- package/build/error-logger.d.ts +30 -14
- package/build/error-logger.d.ts.map +1 -1
- package/build/error-logger.js +22 -11
- package/build/event-connection.d.ts.map +1 -1
- package/build/event-connection.js +3 -2
- package/build/event-emitter-listener.d.ts.map +1 -1
- package/build/event-emitter-listener.js +2 -1
- package/build/event-model-class.d.ts.map +1 -1
- package/build/event-model-class.js +2 -1
- package/build/events.d.ts.map +1 -1
- package/build/events.js +2 -1
- package/build/form.d.ts +23 -0
- package/build/form.d.ts.map +1 -1
- package/build/form.js +16 -4
- package/build/history-expo.d.ts +6 -2
- package/build/history-expo.d.ts.map +1 -1
- package/build/history-expo.js +5 -2
- package/build/history-react-native.d.ts +6 -2
- package/build/history-react-native.d.ts.map +1 -1
- package/build/history-react-native.js +5 -2
- package/build/history.js +2 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -1
- package/build/inputs/attachment.d.ts +11 -0
- package/build/inputs/attachment.d.ts.map +1 -1
- package/build/inputs/attachment.js +17 -4
- package/build/inputs/auto-submit.d.ts +41 -13
- package/build/inputs/auto-submit.d.ts.map +1 -1
- package/build/inputs/auto-submit.js +16 -4
- package/build/inputs/checkbox.d.ts +15 -0
- package/build/inputs/checkbox.d.ts.map +1 -1
- package/build/inputs/checkbox.js +22 -6
- package/build/inputs/checkboxes.d.ts +16 -0
- package/build/inputs/checkboxes.d.ts.map +1 -1
- package/build/inputs/checkboxes.js +20 -4
- package/build/inputs/id-for-component.d.ts +21 -2
- package/build/inputs/id-for-component.d.ts.map +1 -1
- package/build/inputs/id-for-component.js +9 -2
- package/build/inputs/input-wrapper.d.ts.map +1 -1
- package/build/inputs/input-wrapper.js +2 -1
- package/build/inputs/input.d.ts +36 -0
- package/build/inputs/input.d.ts.map +1 -1
- package/build/inputs/input.js +26 -7
- package/build/inputs/money.d.ts +2 -0
- package/build/inputs/money.d.ts.map +1 -1
- package/build/inputs/money.js +6 -3
- package/build/inputs/name-for-component.d.ts +21 -2
- package/build/inputs/name-for-component.d.ts.map +1 -1
- package/build/inputs/name-for-component.js +9 -2
- package/build/inputs/select.d.ts +33 -0
- package/build/inputs/select.d.ts.map +1 -1
- package/build/inputs/select.js +21 -4
- package/build/instance-of-class-name.d.ts +7 -2
- package/build/instance-of-class-name.d.ts.map +1 -1
- package/build/instance-of-class-name.js +8 -4
- package/build/is-expo.d.ts.map +1 -1
- package/build/is-expo.js +2 -1
- package/build/key-value-store.d.ts +24 -14
- package/build/key-value-store.d.ts.map +1 -1
- package/build/key-value-store.js +22 -12
- package/build/link.d.ts +30 -0
- package/build/link.d.ts.map +1 -1
- package/build/link.js +76 -30
- package/build/logger.d.ts +10 -6
- package/build/logger.d.ts.map +1 -1
- package/build/logger.js +7 -4
- package/build/merge-styles.d.ts +10 -2
- package/build/merge-styles.d.ts.map +1 -1
- package/build/merge-styles.js +10 -3
- package/build/modal.d.ts +2 -0
- package/build/modal.d.ts.map +1 -1
- package/build/modal.js +6 -4
- package/build/model-class-require.d.ts +4 -2
- package/build/model-class-require.d.ts.map +1 -1
- package/build/model-class-require.js +4 -2
- package/build/model-events.d.ts +139 -346
- package/build/model-events.d.ts.map +1 -1
- package/build/model-events.js +21 -9
- package/build/model-name.d.ts +21 -7
- package/build/model-name.d.ts.map +1 -1
- package/build/model-name.js +12 -2
- package/build/model-prop-type.d.ts +533 -26
- package/build/model-prop-type.d.ts.map +1 -1
- package/build/model-prop-type.js +69 -11
- package/build/model-recipes-loader.d.ts +7 -3
- package/build/model-recipes-loader.d.ts.map +1 -1
- package/build/model-recipes-loader.js +4 -2
- package/build/model-recipes-model-loader.d.ts +189 -1493
- package/build/model-recipes-model-loader.d.ts.map +1 -1
- package/build/model-recipes-model-loader.js +119 -17
- package/build/models-response-reader.d.ts +600 -195
- package/build/models-response-reader.d.ts.map +1 -1
- package/build/models-response-reader.js +12 -4
- package/build/models.d.ts +438 -1
- package/build/models.d.ts.map +1 -1
- package/build/models.js +2 -1
- package/build/money-formatter.d.ts +25 -31
- package/build/money-formatter.d.ts.map +1 -1
- package/build/money-formatter.js +11 -8
- package/build/not-loaded-error.d.ts.map +1 -1
- package/build/not-loaded-error.js +2 -1
- package/build/params.d.ts +25 -17
- package/build/params.d.ts.map +1 -1
- package/build/params.js +19 -15
- package/build/preloaded.d.ts +61 -64
- package/build/preloaded.d.ts.map +1 -1
- package/build/preloaded.js +10 -4
- package/build/reset-realtime-runtime-state.d.ts.map +1 -1
- package/build/reset-realtime-runtime-state.js +2 -1
- package/build/resize-observer.d.ts.map +1 -1
- package/build/resize-observer.js +2 -1
- package/build/rest-props-validator.d.ts +2 -2
- package/build/rest-props-validator.d.ts.map +1 -1
- package/build/rest-props-validator.js +3 -2
- package/build/result.d.ts +142 -175
- package/build/result.d.ts.map +1 -1
- package/build/result.js +3 -2
- package/build/router/route.d.ts +50 -0
- package/build/router/route.d.ts.map +1 -1
- package/build/router/route.js +39 -10
- package/build/router/switch.d.ts +37 -1
- package/build/router/switch.d.ts.map +1 -1
- package/build/router/switch.js +29 -7
- package/build/router.d.ts +20 -0
- package/build/router.d.ts.map +1 -1
- package/build/router.js +15 -4
- package/build/routes-native.d.ts +13 -13
- package/build/routes-native.d.ts.map +1 -1
- package/build/routes-native.js +23 -11
- package/build/routes.d.ts +17 -9
- package/build/routes.d.ts.map +1 -1
- package/build/routes.js +7 -2
- package/build/run-last.d.ts.map +1 -1
- package/build/run-last.js +2 -1
- package/build/serializer.d.ts +44 -12
- package/build/serializer.d.ts.map +1 -1
- package/build/serializer.js +36 -7
- package/build/services.d.ts +29 -4
- package/build/services.d.ts.map +1 -1
- package/build/services.js +16 -4
- package/build/session-status-updater.d.ts +73 -25
- package/build/session-status-updater.d.ts.map +1 -1
- package/build/session-status-updater.js +52 -14
- package/build/source-maps-loader.d.ts +88 -33
- package/build/source-maps-loader.d.ts.map +1 -1
- package/build/source-maps-loader.js +74 -18
- package/build/super-admin/config-reader.d.ts.map +1 -1
- package/build/super-admin/config-reader.js +11 -16
- package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts +10 -0
- package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute-checkbox.js +16 -4
- package/build/super-admin/edit-page/edit-attribute-content.d.ts +9 -0
- package/build/super-admin/edit-page/edit-attribute-content.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute-content.js +15 -4
- package/build/super-admin/edit-page/edit-attribute-input.d.ts +8 -0
- package/build/super-admin/edit-page/edit-attribute-input.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute-input.js +13 -4
- package/build/super-admin/edit-page/edit-attribute.d.ts +6 -0
- package/build/super-admin/edit-page/edit-attribute.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute.js +11 -4
- package/build/super-admin/edit-page.d.ts +5 -0
- package/build/super-admin/edit-page.d.ts.map +1 -1
- package/build/super-admin/edit-page.js +11 -5
- package/build/super-admin/has-edit-config.d.ts.map +1 -1
- package/build/super-admin/has-edit-config.js +2 -1
- package/build/super-admin/index-page.d.ts +4 -0
- package/build/super-admin/index-page.d.ts.map +1 -1
- package/build/super-admin/index-page.js +9 -4
- package/build/super-admin/index.d.ts +4 -0
- package/build/super-admin/index.d.ts.map +1 -1
- package/build/super-admin/index.js +12 -6
- package/build/super-admin/layout/header/index.d.ts +4 -0
- package/build/super-admin/layout/header/index.d.ts.map +1 -1
- package/build/super-admin/layout/header/index.js +13 -8
- package/build/super-admin/layout/index.d.ts +24 -0
- package/build/super-admin/layout/index.d.ts.map +1 -1
- package/build/super-admin/layout/index.js +33 -5
- package/build/super-admin/layout/menu/index.d.ts +2 -0
- package/build/super-admin/layout/menu/index.d.ts.map +1 -1
- package/build/super-admin/layout/menu/index.js +8 -6
- package/build/super-admin/layout/menu/menu-content.d.ts +2 -0
- package/build/super-admin/layout/menu/menu-content.d.ts.map +1 -1
- package/build/super-admin/layout/menu/menu-content.js +6 -4
- package/build/super-admin/layout/menu/menu-item.d.ts +9 -0
- package/build/super-admin/layout/menu/menu-item.d.ts.map +1 -1
- package/build/super-admin/layout/menu/menu-item.js +15 -4
- package/build/super-admin/layout/no-access.d.ts +2 -0
- package/build/super-admin/layout/no-access.d.ts.map +1 -1
- package/build/super-admin/layout/no-access.js +7 -5
- package/build/super-admin/model-class-table.d.ts +4 -0
- package/build/super-admin/model-class-table.d.ts.map +1 -1
- package/build/super-admin/model-class-table.js +9 -4
- package/build/super-admin/models.d.ts.map +1 -1
- package/build/super-admin/models.js +2 -1
- package/build/super-admin/show-nav.d.ts +2 -0
- package/build/super-admin/show-nav.d.ts.map +1 -1
- package/build/super-admin/show-nav.js +6 -4
- package/build/super-admin/show-page/belongs-to-attribute-row.d.ts +17 -1
- package/build/super-admin/show-page/belongs-to-attribute-row.d.ts.map +1 -1
- package/build/super-admin/show-page/belongs-to-attribute-row.js +14 -5
- package/build/super-admin/show-page/index.d.ts +4 -0
- package/build/super-admin/show-page/index.d.ts.map +1 -1
- package/build/super-admin/show-page/index.js +9 -4
- package/build/super-admin/show-reflection-actions.d.ts +6 -0
- package/build/super-admin/show-reflection-actions.d.ts.map +1 -1
- package/build/super-admin/show-reflection-actions.js +11 -4
- package/build/super-admin/show-reflection-link.d.ts +4 -0
- package/build/super-admin/show-reflection-link.d.ts.map +1 -1
- package/build/super-admin/show-reflection-link.js +9 -4
- package/build/super-admin/show-reflection-page.d.ts +5 -0
- package/build/super-admin/show-reflection-page.d.ts.map +1 -1
- package/build/super-admin/show-reflection-page.js +10 -4
- package/build/table/column-content.d.ts +155 -19
- package/build/table/column-content.d.ts.map +1 -1
- package/build/table/column-content.js +55 -12
- package/build/table/column-identifier.d.ts +11 -2
- package/build/table/column-identifier.d.ts.map +1 -1
- package/build/table/column-identifier.js +7 -2
- package/build/table/column-visible.d.ts +11 -2
- package/build/table/column-visible.d.ts.map +1 -1
- package/build/table/column-visible.js +8 -2
- package/build/table/components/column.d.ts +2 -0
- package/build/table/components/column.d.ts.map +1 -1
- package/build/table/components/column.js +6 -4
- package/build/table/components/flat-list.d.ts +2 -0
- package/build/table/components/flat-list.d.ts.map +1 -1
- package/build/table/components/flat-list.js +6 -4
- package/build/table/components/header.d.ts +2 -0
- package/build/table/components/header.d.ts.map +1 -1
- package/build/table/components/header.js +6 -4
- package/build/table/components/row.d.ts +2 -0
- package/build/table/components/row.d.ts.map +1 -1
- package/build/table/components/row.js +6 -4
- package/build/table/filters/attribute-element.d.ts +2 -0
- package/build/table/filters/attribute-element.d.ts.map +1 -1
- package/build/table/filters/attribute-element.js +7 -7
- package/build/table/filters/filter-form.d.ts +58 -0
- package/build/table/filters/filter-form.d.ts.map +1 -1
- package/build/table/filters/filter-form.js +72 -9
- package/build/table/filters/filter.d.ts +2 -0
- package/build/table/filters/filter.d.ts.map +1 -1
- package/build/table/filters/filter.js +6 -4
- package/build/table/filters/index.d.ts +127 -0
- package/build/table/filters/index.d.ts.map +1 -1
- package/build/table/filters/index.js +21 -4
- package/build/table/filters/load-search-modal.d.ts +130 -0
- package/build/table/filters/load-search-modal.d.ts.map +1 -1
- package/build/table/filters/load-search-modal.js +28 -6
- package/build/table/filters/reflection-element.d.ts +2 -0
- package/build/table/filters/reflection-element.d.ts.map +1 -1
- package/build/table/filters/reflection-element.js +6 -4
- package/build/table/filters/save-search-modal.d.ts +134 -0
- package/build/table/filters/save-search-modal.d.ts.map +1 -1
- package/build/table/filters/save-search-modal.js +36 -5
- package/build/table/filters/scope-element.d.ts +6 -0
- package/build/table/filters/scope-element.d.ts.map +1 -1
- package/build/table/filters/scope-element.js +13 -8
- package/build/table/header-column-content.d.ts +7 -0
- package/build/table/header-column-content.d.ts.map +1 -1
- package/build/table/header-column-content.js +12 -4
- package/build/table/header-column.d.ts +50 -0
- package/build/table/header-column.d.ts.map +1 -1
- package/build/table/header-column.js +32 -5
- package/build/table/header-select.d.ts +18 -0
- package/build/table/header-select.d.ts.map +1 -1
- package/build/table/header-select.js +19 -4
- package/build/table/model-callback-args.d.ts +116 -3
- package/build/table/model-callback-args.d.ts.map +1 -1
- package/build/table/model-callback-args.js +10 -3
- package/build/table/model-column.d.ts +136 -0
- package/build/table/model-column.d.ts.map +1 -1
- package/build/table/model-column.js +27 -4
- package/build/table/model-row.d.ts +19 -0
- package/build/table/model-row.d.ts.map +1 -1
- package/build/table/model-row.js +24 -4
- package/build/table/select-calculator.d.ts +37 -2
- package/build/table/select-calculator.d.ts.map +1 -1
- package/build/table/select-calculator.js +29 -6
- package/build/table/settings/column-row.d.ts +6 -0
- package/build/table/settings/column-row.d.ts.map +1 -1
- package/build/table/settings/column-row.js +13 -12
- package/build/table/settings/download-action.d.ts +5 -0
- package/build/table/settings/download-action.d.ts.map +1 -1
- package/build/table/settings/download-action.js +10 -4
- package/build/table/settings/index.d.ts +5 -0
- package/build/table/settings/index.d.ts.map +1 -1
- package/build/table/settings/index.js +10 -4
- package/build/table/should-render-loading-content.d.ts +2 -2
- package/build/table/should-render-loading-content.d.ts.map +1 -1
- package/build/table/should-render-loading-content.js +3 -2
- package/build/table/table-settings.d.ts +236 -43
- package/build/table/table-settings.d.ts.map +1 -1
- package/build/table/table-settings.js +104 -20
- package/build/table/table.d.ts +271 -0
- package/build/table/table.d.ts.map +1 -1
- package/build/table/table.js +167 -16
- package/build/table/use-sorting.d.ts +10 -8
- package/build/table/use-sorting.d.ts.map +1 -1
- package/build/table/use-sorting.js +16 -8
- package/build/table/widths.d.ts +55 -8
- package/build/table/widths.d.ts.map +1 -1
- package/build/table/widths.js +25 -2
- package/build/table/worker-plugins-check-all-checkbox.d.ts +18 -0
- package/build/table/worker-plugins-check-all-checkbox.d.ts.map +1 -1
- package/build/table/worker-plugins-check-all-checkbox.js +25 -5
- package/build/table/worker-plugins-checkbox.d.ts +5 -0
- package/build/table/worker-plugins-checkbox.d.ts.map +1 -1
- package/build/table/worker-plugins-checkbox.js +10 -4
- package/build/translated-attributes.d.ts +7 -2
- package/build/translated-attributes.d.ts.map +1 -1
- package/build/translated-attributes.js +8 -2
- package/build/translated-collections.d.ts +11 -2
- package/build/translated-collections.d.ts.map +1 -1
- package/build/translated-collections.js +9 -3
- package/build/updated-attribute.d.ts.map +1 -1
- package/build/updated-attribute.js +2 -1
- package/build/url-encode.d.ts.map +1 -1
- package/build/url-encode.js +2 -1
- package/build/use-can-can.d.ts +2 -2
- package/build/use-can-can.d.ts.map +1 -1
- package/build/use-can-can.js +27 -12
- package/build/use-collection.d.ts +167 -121
- package/build/use-collection.d.ts.map +1 -1
- package/build/use-collection.js +113 -44
- package/build/use-created-event.d.ts +120 -11
- package/build/use-created-event.d.ts.map +1 -1
- package/build/use-created-event.js +10 -7
- package/build/use-current-user-context.d.ts +2 -2
- package/build/use-current-user-context.d.ts.map +1 -1
- package/build/use-current-user-context.js +3 -2
- package/build/use-current-user.d.ts +86 -70
- package/build/use-current-user.d.ts.map +1 -1
- package/build/use-current-user.js +36 -8
- package/build/use-destroyed-event.d.ts +117 -8
- package/build/use-destroyed-event.d.ts.map +1 -1
- package/build/use-destroyed-event.js +29 -22
- package/build/use-input.d.ts +74 -12
- package/build/use-input.d.ts.map +1 -1
- package/build/use-input.js +33 -5
- package/build/use-model-class-event.d.ts +124 -10
- package/build/use-model-class-event.d.ts.map +1 -1
- package/build/use-model-class-event.js +26 -16
- package/build/use-model-event.d.ts +121 -8
- package/build/use-model-event.d.ts.map +1 -1
- package/build/use-model-event.js +24 -19
- package/build/use-model.d.ts +162 -244
- package/build/use-model.d.ts.map +1 -1
- package/build/use-model.js +85 -32
- package/build/use-resize-observer.d.ts.map +1 -1
- package/build/use-resize-observer.js +2 -1
- package/build/use-router.d.ts.map +1 -1
- package/build/use-router.js +2 -1
- package/build/use-screen-layout.d.ts +7 -2
- package/build/use-screen-layout.d.ts.map +1 -1
- package/build/use-screen-layout.js +8 -5
- package/build/use-shape.js +2 -1
- package/build/use-styles.d.ts +11 -5
- package/build/use-styles.d.ts.map +1 -1
- package/build/use-styles.js +16 -9
- package/build/use-updated-event.d.ts +66 -182
- package/build/use-updated-event.d.ts.map +1 -1
- package/build/use-updated-event.js +22 -18
- package/build/use-validation-errors.d.ts.map +1 -1
- package/build/use-validation-errors.js +2 -1
- package/build/utils/button.d.ts +14 -0
- package/build/utils/button.d.ts.map +1 -1
- package/build/utils/button.js +24 -7
- package/build/utils/card.d.ts +9 -0
- package/build/utils/card.d.ts.map +1 -1
- package/build/utils/card.js +13 -2
- package/build/utils/checkbox.d.ts +12 -0
- package/build/utils/checkbox.d.ts.map +1 -1
- package/build/utils/checkbox.js +18 -4
- package/build/utils/checkboxes.d.ts +25 -0
- package/build/utils/checkboxes.d.ts.map +1 -1
- package/build/utils/checkboxes.js +29 -3
- package/build/utils/default-style.d.ts +10 -4
- package/build/utils/default-style.d.ts.map +1 -1
- package/build/utils/default-style.js +12 -4
- package/build/utils/header.d.ts +6 -1
- package/build/utils/header.d.ts.map +1 -1
- package/build/utils/header.js +4 -2
- package/build/utils/icon.d.ts +7 -6
- package/build/utils/icon.d.ts.map +1 -1
- package/build/utils/icon.js +12 -11
- package/build/utils/invalid-feedback.d.ts +4 -0
- package/build/utils/invalid-feedback.d.ts.map +1 -1
- package/build/utils/invalid-feedback.js +8 -2
- package/build/utils/modal.d.ts +2 -0
- package/build/utils/modal.d.ts.map +1 -1
- package/build/utils/modal.js +9 -7
- package/build/utils/text.d.ts +8 -1
- package/build/utils/text.d.ts.map +1 -1
- package/build/utils/text.js +9 -2
- package/build/validation-error.d.ts +5 -2
- package/build/validation-error.d.ts.map +1 -1
- package/build/validation-error.js +5 -2
- package/build/validation-errors.d.ts +57 -15
- package/build/validation-errors.d.ts.map +1 -1
- package/build/validation-errors.js +37 -8
- package/build/websocket-request-client.d.ts +61 -15
- package/build/websocket-request-client.d.ts.map +1 -1
- package/build/websocket-request-client.js +35 -9
- package/build/with-api-maker.d.ts.map +1 -1
- package/build/with-api-maker.js +2 -1
- package/build/with-collection.d.ts.map +1 -1
- package/build/with-collection.js +2 -1
- package/build/with-current-user.d.ts.map +1 -1
- package/build/with-current-user.js +2 -1
- package/build/with-model.d.ts.map +1 -1
- package/build/with-model.js +2 -1
- package/build/with-router.d.ts.map +1 -1
- package/build/with-router.js +2 -1
- package/package.json +4 -3
- package/build/base-component.d.ts +0 -5
- package/build/base-component.d.ts.map +0 -1
- package/build/base-component.js +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-recipes-model-loader.d.ts","sourceRoot":"/src/","sources":["model-recipes-model-loader.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-recipes-model-loader.d.ts","sourceRoot":"/src/","sources":["model-recipes-model-loader.js"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,62 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import * as inflection from "inflection";
|
|
2
3
|
import { digg, digs } from "diggerize";
|
|
3
4
|
import BaseModel from "./base-model.js";
|
|
4
5
|
import Collection from "./collection.js";
|
|
6
|
+
/** @typedef {import("./model-recipes-loader.js").default} ModelRecipesLoaderLike */
|
|
7
|
+
/** @typedef {typeof import("./base-model.js").default} ModelClassLike */
|
|
8
|
+
/** @typedef {ModelClassLike & {modelClassData: () => ModelRecipeClassData}} ModelClassWithData */
|
|
9
|
+
/** @typedef {Record<string, {name: string}>} ModelRecipeAttributes */
|
|
10
|
+
/** @typedef {Record<string, {args?: Record<string, object | string | number | boolean | null | undefined>}>} ModelRecipeCommands */
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {object} ModelRecipeClassData
|
|
13
|
+
* @property {string} className
|
|
14
|
+
* @property {string} collectionName
|
|
15
|
+
* @property {string} name
|
|
16
|
+
* @property {string} primaryKey
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* @typedef {object} RelationshipOptions
|
|
20
|
+
* @property {string} [as]
|
|
21
|
+
* @property {string} [primary_key]
|
|
22
|
+
* @property {string} [through]
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* @typedef {object} RelationshipDefinition
|
|
26
|
+
* @property {{name: string, primary_key: string}} active_record
|
|
27
|
+
* @property {string} class_name
|
|
28
|
+
* @property {string} foreign_key
|
|
29
|
+
* @property {{primary_key: string}} klass
|
|
30
|
+
* @property {RelationshipOptions} options
|
|
31
|
+
* @property {string} resource_name
|
|
32
|
+
* @property {"belongs_to" | "has_many" | "has_one"} type
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* @typedef {object} ModelRecipe
|
|
36
|
+
* @property {ModelRecipeAttributes} attributes
|
|
37
|
+
* @property {ModelRecipeCommands} collection_commands
|
|
38
|
+
* @property {ModelRecipeCommands} member_commands
|
|
39
|
+
* @property {ModelRecipeClassData} model_class_data
|
|
40
|
+
* @property {Record<string, RelationshipDefinition>} relationships
|
|
41
|
+
*/
|
|
5
42
|
/** Builds runtime model classes from recipe definitions. */
|
|
6
43
|
export default class ApiMakerModelRecipesModelLoader {
|
|
7
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Constructor.
|
|
46
|
+
* @param {object} root0
|
|
47
|
+
* @param {ModelRecipe} root0.modelRecipe
|
|
48
|
+
* @param {ModelRecipesLoaderLike} root0.modelRecipesLoader
|
|
49
|
+
*/
|
|
8
50
|
constructor({ modelRecipe, modelRecipesLoader }) {
|
|
9
51
|
if (!modelRecipe)
|
|
10
52
|
throw new Error("No 'modelRecipe' was given");
|
|
11
53
|
this.modelRecipesLoader = modelRecipesLoader;
|
|
12
54
|
this.modelRecipe = modelRecipe;
|
|
13
55
|
}
|
|
14
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* createClass.
|
|
58
|
+
* @returns {ModelClassLike}
|
|
59
|
+
*/
|
|
15
60
|
createClass() {
|
|
16
61
|
const { modelRecipe } = digs(this, "modelRecipe");
|
|
17
62
|
const { attributes, collection_commands: collectionCommands, member_commands: memberCommands, model_class_data: modelClassData, relationships } = digs(modelRecipe, "attributes", "collection_commands", "member_commands", "model_class_data", "relationships");
|
|
@@ -19,7 +64,7 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
19
64
|
const ModelClass = class ApiMakerModel extends BaseModel {
|
|
20
65
|
};
|
|
21
66
|
Object.defineProperty(ModelClass, "name", { writable: false, value: modelClassName });
|
|
22
|
-
const modelClassConstructor = /** @type {
|
|
67
|
+
const modelClassConstructor = /** @type {ModelClassWithData} */ (ModelClass.prototype.constructor);
|
|
23
68
|
modelClassConstructor.modelClassData = () => modelClassData;
|
|
24
69
|
this.addAttributeMethodsToModelClass(ModelClass, attributes);
|
|
25
70
|
this.addRelationshipsToModelClass(ModelClass, modelClassData, relationships);
|
|
@@ -27,7 +72,11 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
27
72
|
this.addMemberCommandsToModelClass(ModelClass, memberCommands);
|
|
28
73
|
return ModelClass;
|
|
29
74
|
}
|
|
30
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* addAttributeMethodsToModelClass.
|
|
77
|
+
* @param {ModelClassLike} ModelClass
|
|
78
|
+
* @param {ModelRecipeAttributes} attributes
|
|
79
|
+
*/
|
|
31
80
|
addAttributeMethodsToModelClass(ModelClass, attributes) {
|
|
32
81
|
for (const attributeName in attributes) {
|
|
33
82
|
const attribute = attributes[attributeName];
|
|
@@ -43,7 +92,11 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
43
92
|
};
|
|
44
93
|
}
|
|
45
94
|
}
|
|
46
|
-
/**
|
|
95
|
+
/**
|
|
96
|
+
* addQueryCommandsToModelClass.
|
|
97
|
+
* @param {ModelClassLike} ModelClass
|
|
98
|
+
* @param {ModelRecipeCommands} collectionCommands
|
|
99
|
+
*/
|
|
47
100
|
addQueryCommandsToModelClass(ModelClass, collectionCommands) {
|
|
48
101
|
for (const collectionCommandName in collectionCommands) {
|
|
49
102
|
const methodName = inflection.camelize(collectionCommandName, true);
|
|
@@ -58,7 +111,11 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
58
111
|
};
|
|
59
112
|
}
|
|
60
113
|
}
|
|
61
|
-
/**
|
|
114
|
+
/**
|
|
115
|
+
* addMemberCommandsToModelClass.
|
|
116
|
+
* @param {ModelClassLike} ModelClass
|
|
117
|
+
* @param {ModelRecipeCommands} memberCommands
|
|
118
|
+
*/
|
|
62
119
|
addMemberCommandsToModelClass(ModelClass, memberCommands) {
|
|
63
120
|
for (const memberCommandName in memberCommands) {
|
|
64
121
|
const methodName = inflection.camelize(memberCommandName, true);
|
|
@@ -74,7 +131,12 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
74
131
|
};
|
|
75
132
|
}
|
|
76
133
|
}
|
|
77
|
-
/**
|
|
134
|
+
/**
|
|
135
|
+
* addRelationshipsToModelClass.
|
|
136
|
+
* @param {ModelClassLike} ModelClass
|
|
137
|
+
* @param {ModelRecipeClassData} modelClassData
|
|
138
|
+
* @param {Record<string, RelationshipDefinition>} relationships
|
|
139
|
+
*/
|
|
78
140
|
addRelationshipsToModelClass(ModelClass, modelClassData, relationships) {
|
|
79
141
|
const { modelRecipesLoader } = digs(this, "modelRecipesLoader");
|
|
80
142
|
for (const relationshipName in relationships) {
|
|
@@ -143,19 +205,42 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
143
205
|
}
|
|
144
206
|
}
|
|
145
207
|
}
|
|
146
|
-
/**
|
|
208
|
+
/**
|
|
209
|
+
* defineEnsureAssociationLoadedMethod.
|
|
210
|
+
* @param {object} root0
|
|
211
|
+
* @param {string} root0.ensureMethodName
|
|
212
|
+
* @param {ModelClassLike} root0.ModelClass
|
|
213
|
+
* @param {string} root0.relationshipName
|
|
214
|
+
*/
|
|
147
215
|
defineEnsureAssociationLoadedMethod({ ensureMethodName, ModelClass, relationshipName }) {
|
|
148
216
|
ModelClass.prototype[ensureMethodName] = function () {
|
|
149
217
|
return this.ensureAssociationLoaded(relationshipName);
|
|
150
218
|
};
|
|
151
219
|
}
|
|
152
|
-
/**
|
|
220
|
+
/**
|
|
221
|
+
* defineBelongsToGetMethod.
|
|
222
|
+
* @param {object} root0
|
|
223
|
+
* @param {ModelClassLike} root0.ModelClass
|
|
224
|
+
* @param {string} root0.modelMethodName
|
|
225
|
+
* @param {string} root0.relationshipName
|
|
226
|
+
*/
|
|
153
227
|
defineBelongsToGetMethod({ ModelClass, modelMethodName, relationshipName }) {
|
|
154
228
|
ModelClass.prototype[modelMethodName] = function () {
|
|
155
229
|
return this._readBelongsToReflection({ reflectionName: relationshipName });
|
|
156
230
|
};
|
|
157
231
|
}
|
|
158
|
-
/**
|
|
232
|
+
/**
|
|
233
|
+
* defineBelongsToLoadMethod.
|
|
234
|
+
* @param {object} root0
|
|
235
|
+
* @param {string} root0.foreignKey
|
|
236
|
+
* @param {string} root0.klassPrimaryKey
|
|
237
|
+
* @param {ModelClassLike} root0.ModelClass
|
|
238
|
+
* @param {ModelRecipesLoaderLike} root0.modelRecipesLoader
|
|
239
|
+
* @param {string} root0.loadMethodName
|
|
240
|
+
* @param {string | undefined} root0.optionsPrimaryKey
|
|
241
|
+
* @param {string} root0.relationshipName
|
|
242
|
+
* @param {string} root0.resourceName
|
|
243
|
+
*/
|
|
159
244
|
defineBelongsToLoadMethod({ foreignKey, klassPrimaryKey, ModelClass, modelRecipesLoader, loadMethodName, optionsPrimaryKey, relationshipName, resourceName }) {
|
|
160
245
|
ModelClass.prototype[loadMethodName] = function () {
|
|
161
246
|
const foreignKeyMethodName = inflection.camelize(foreignKey, true);
|
|
@@ -163,7 +248,7 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
163
248
|
throw new Error(`Foreign key method wasn't defined: ${foreignKeyMethodName}`);
|
|
164
249
|
const id = this[foreignKeyMethodName]();
|
|
165
250
|
const modelClass = modelRecipesLoader.getModelClass(resourceName);
|
|
166
|
-
const ransack = {};
|
|
251
|
+
const ransack = /** @type {import("./collection.js").CollectionRansackParams} */ ({});
|
|
167
252
|
const ransackIdSearchKey = `${optionsPrimaryKey || klassPrimaryKey}_eq`;
|
|
168
253
|
ransack[ransackIdSearchKey] = id;
|
|
169
254
|
return this._loadBelongsToReflection({ reflectionName: relationshipName, model: this, modelClass }, { ransack });
|
|
@@ -194,7 +279,7 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
194
279
|
};
|
|
195
280
|
}
|
|
196
281
|
else {
|
|
197
|
-
const ransack = {};
|
|
282
|
+
const ransack = /** @type {import("./collection.js").CollectionRansackParams} */ ({});
|
|
198
283
|
const primaryKeyColumnName = optionsPrimaryKey || digg(ModelClass.modelClassData(), "primaryKey");
|
|
199
284
|
const primaryKeyMethodName = inflection.camelize(primaryKeyColumnName, true);
|
|
200
285
|
if (!(primaryKeyMethodName in this))
|
|
@@ -208,7 +293,18 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
208
293
|
return new Collection(hasManyParameters, queryParameters);
|
|
209
294
|
};
|
|
210
295
|
}
|
|
211
|
-
/**
|
|
296
|
+
/**
|
|
297
|
+
* defineHasManyLoadMethod.
|
|
298
|
+
* @param {object} root0
|
|
299
|
+
* @param {string} root0.foreignKey
|
|
300
|
+
* @param {string} root0.loadMethodName
|
|
301
|
+
* @param {ModelClassLike} root0.ModelClass
|
|
302
|
+
* @param {ModelRecipeClassData} root0.modelClassData
|
|
303
|
+
* @param {ModelRecipesLoaderLike} root0.modelRecipesLoader
|
|
304
|
+
* @param {string | undefined} root0.optionsThrough
|
|
305
|
+
* @param {string} root0.relationshipName
|
|
306
|
+
* @param {string} root0.resourceName
|
|
307
|
+
*/
|
|
212
308
|
defineHasManyLoadMethod({ foreignKey, loadMethodName, ModelClass, modelClassData, modelRecipesLoader, optionsThrough, relationshipName, resourceName }) {
|
|
213
309
|
ModelClass.prototype[loadMethodName] = function () {
|
|
214
310
|
const id = this.primaryKey();
|
|
@@ -230,7 +326,7 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
230
326
|
});
|
|
231
327
|
}
|
|
232
328
|
else {
|
|
233
|
-
const ransack = {};
|
|
329
|
+
const ransack = /** @type {import("./collection.js").CollectionRansackParams} */ ({});
|
|
234
330
|
ransack[`${foreignKey}_eq`] = id;
|
|
235
331
|
return this._loadHasManyReflection({
|
|
236
332
|
reflectionName: relationshipName,
|
|
@@ -240,7 +336,13 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
240
336
|
}
|
|
241
337
|
};
|
|
242
338
|
}
|
|
243
|
-
/**
|
|
339
|
+
/**
|
|
340
|
+
* defineHasOneGetMethd.
|
|
341
|
+
* @param {object} root0
|
|
342
|
+
* @param {ModelClassLike} root0.ModelClass
|
|
343
|
+
* @param {string} root0.modelMethodName
|
|
344
|
+
* @param {string} root0.relationshipName
|
|
345
|
+
*/
|
|
244
346
|
defineHasOneGetMethd({ ModelClass, modelMethodName, relationshipName }) {
|
|
245
347
|
ModelClass.prototype[modelMethodName] = function () {
|
|
246
348
|
return this._readHasOneReflection({ reflectionName: relationshipName });
|
|
@@ -258,7 +360,7 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
258
360
|
return this._loadHasOneReflection({ reflectionName: relationshipName, model: this, modelClass }, { params: { through: { model: modelClassName, id, reflection: relationshipName } } });
|
|
259
361
|
}
|
|
260
362
|
else {
|
|
261
|
-
const ransack = {};
|
|
363
|
+
const ransack = /** @type {import("./collection.js").CollectionRansackParams} */ ({});
|
|
262
364
|
ransack[`${foreignKey}_eq`] = id;
|
|
263
365
|
return this._loadHasOneReflection({
|
|
264
366
|
reflectionName: relationshipName,
|
|
@@ -269,4 +371,4 @@ export default class ApiMakerModelRecipesModelLoader {
|
|
|
269
371
|
};
|
|
270
372
|
}
|
|
271
373
|
}
|
|
272
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcmVjaXBlcy1tb2RlbC1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbIm1vZGVsLXJlY2lwZXMtbW9kZWwtbG9hZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ3BDLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBQ3ZDLE9BQU8sVUFBVSxNQUFNLGlCQUFpQixDQUFBO0FBRXhDLDREQUE0RDtBQUM1RCxNQUFNLENBQUMsT0FBTyxPQUFPLCtCQUErQjtJQUNsRCxtQkFBbUI7SUFDbkIsWUFBYSxFQUFDLFdBQVcsRUFBRSxrQkFBa0IsRUFBQztRQUM1QyxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtRQUUvRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUE7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7SUFDaEMsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixXQUFXO1FBQ1QsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDL0MsTUFBTSxFQUNKLFVBQVUsRUFDVixtQkFBbUIsRUFBRSxrQkFBa0IsRUFDdkMsZUFBZSxFQUFFLGNBQWMsRUFDL0IsZ0JBQWdCLEVBQUUsY0FBYyxFQUNoQyxhQUFhLEVBQ2QsR0FBRyxJQUFJLENBQ04sV0FBVyxFQUNYLFlBQVksRUFDWixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixlQUFlLENBQ2hCLENBQUE7UUFDRCxNQUFNLEVBQUMsSUFBSSxFQUFFLGNBQWMsRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFD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QUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUE7WUFDdkMsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBRWpFLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUE7Z0JBRXhELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUMvQixFQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxFQUMzRCxFQUFDLE1BQU0sRUFBRSxFQUFDLE9BQU8sRUFBRSxFQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBQyxFQUFDLEVBQUMsQ0FDL0UsQ0FBQTtZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7Z0JBRWxCLE9BQU8sQ0FBQyxHQUFHLFVBQVUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUVoQyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FDL0I7b0JBQ0UsY0FBYyxFQUFFLGdCQUFnQjtvQkFDaEMsS0FBSyxFQUFFLElBQUk7b0JBQ1gsVUFBVTtpQkFDWCxFQUNELEVBQUMsT0FBTyxFQUFDLENBQ1YsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7ZGlnZywgZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL2Jhc2UtbW9kZWwuanNcIlxuaW1wb3J0IENvbGxlY3Rpb24gZnJvbSBcIi4vY29sbGVjdGlvbi5qc1wiXG5cbi8qKiBCdWlsZHMgcnVudGltZSBtb2RlbCBjbGFzc2VzIGZyb20gcmVjaXBlIGRlZmluaXRpb25zLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJNb2RlbFJlY2lwZXNNb2RlbExvYWRlciB7XG4gIC8qKiBDb25zdHJ1Y3Rvci4gKi9cbiAgY29uc3RydWN0b3IgKHttb2RlbFJlY2lwZSwgbW9kZWxSZWNpcGVzTG9hZGVyfSkge1xuICAgIGlmICghbW9kZWxSZWNpcGUpIHRocm93IG5ldyBFcnJvcihcIk5vICdtb2RlbFJlY2lwZScgd2FzIGdpdmVuXCIpXG5cbiAgICB0aGlzLm1vZGVsUmVjaXBlc0xvYWRlciA9IG1vZGVsUmVjaXBlc0xvYWRlclxuICAgIHRoaXMubW9kZWxSZWNpcGUgPSBtb2RlbFJlY2lwZVxuICB9XG5cbiAgLyoqIGNyZWF0ZUNsYXNzLiAqL1xuICBjcmVhdGVDbGFzcyAoKSB7XG4gICAgY29uc3Qge21vZGVsUmVjaXBlfSA9IGRpZ3ModGhpcywgXCJtb2RlbFJlY2lwZVwiKVxuICAgIGNvbnN0IHtcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBjb2xsZWN0aW9uX2NvbW1hbmRzOiBjb2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgICBtZW1iZXJfY29tbWFuZHM6IG1lbWJlckNvbW1hbmRzLFxuICAgICAgbW9kZWxfY2xhc3NfZGF0YTogbW9kZWxDbGFzc0RhdGEsXG4gICAgICByZWxhdGlvbnNoaXBzXG4gICAgfSA9IGRpZ3MoXG4gICAgICBtb2RlbFJlY2lwZSxcbiAgICAgIFwiYXR0cmlidXRlc1wiLFxuICAgICAgXCJjb2xsZWN0aW9uX2NvbW1hbmRzXCIsXG4gICAgICBcIm1lbWJlcl9jb21tYW5kc1wiLFxuICAgICAgXCJtb2RlbF9jbGFzc19kYXRhXCIsXG4gICAgICBcInJlbGF0aW9uc2hpcHNcIlxuICAgIClcbiAgICBjb25zdCB7bmFtZTogbW9kZWxDbGFzc05hbWV9ID0gZGlncyhtb2RlbENsYXNzRGF0YSwgXCJuYW1lXCIpXG4gICAgY29uc3QgTW9kZWxDbGFzcyA9IGNsYXNzIEFwaU1ha2VyTW9kZWwgZXh0ZW5kcyBCYXNlTW9kZWwgeyB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICBNb2RlbENsYXNzLFxuICAgICAgXCJuYW1lXCIsXG4gICAgICB7d3JpdGFibGU6IGZhbHNlLCB2YWx1ZTogbW9kZWxDbGFzc05hbWV9XG4gICAgKVxuXG4gICAgY29uc3QgbW9kZWxDbGFzc0NvbnN0cnVjdG9yID0gLyoqIEB0eXBlIHthbnl9ICovIChNb2RlbENsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvcilcbiAgICBtb2RlbENsYXNzQ29uc3RydWN0b3IubW9kZWxDbGFzc0RhdGEgPSAoKSA9PiBtb2RlbENsYXNzRGF0YVxuXG4gICAgdGhpcy5hZGRBdHRyaWJ1dGVNZXRob2RzVG9Nb2RlbENsYXNzKE1vZGVsQ2xhc3MsIGF0dHJpYnV0ZXMpXG4gICAgdGhpcy5hZGRSZWxhdGlvbnNoaXBzVG9Nb2RlbENsYXNzKE1vZGVsQ2xhc3MsIG1vZGVsQ2xhc3NEYXRhLCByZWxhdGlvbnNoaXBzKVxuICAgIHRoaXMuYWRkUXVlcnlDb21tYW5kc1RvTW9kZWxDbGFzcyhNb2RlbENsYXNzLCBjb2xsZWN0aW9uQ29tbWFuZHMpXG4gICAgdGhpcy5hZGRNZW1iZXJDb21tYW5kc1RvTW9kZWxDbGFzcyhNb2RlbENsYXNzLCBtZW1iZXJDb21tYW5kcylcblxuICAgIHJldHVybiBNb2RlbENsYXNzXG4gIH1cblxuICAvKiogYWRkQXR0cmlidXRlTWV0aG9kc1RvTW9kZWxDbGFzcy4gKi9cbiAgYWRkQXR0cmlidXRlTWV0aG9kc1RvTW9kZWxDbGFzcyAoTW9kZWxDbGFzcywgYXR0cmlidXRlcykge1xuICAgIGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdXG4gICAgICBjb25zdCB7bmFtZX0gPSBkaWdzKGF0dHJpYnV0ZSwgXCJuYW1lXCIpXG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShuYW1lLCB0cnVlKVxuICAgICAgY29uc3QgaGFzTWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYGhhc18ke25hbWV9YCwgdHJ1ZSlcblxuICAgICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRBdHRyaWJ1dGVVbmRlcnNjb3JlKGF0dHJpYnV0ZU5hbWUpXG4gICAgICB9XG5cbiAgICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW2hhc01ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbbWV0aG9kTmFtZV0oKVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ByZXNlbnQodmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGFkZFF1ZXJ5Q29tbWFuZHNUb01vZGVsQ2xhc3MuICovXG4gIGFkZFF1ZXJ5Q29tbWFuZHNUb01vZGVsQ2xhc3MgKE1vZGVsQ2xhc3MsIGNvbGxlY3Rpb25Db21tYW5kcykge1xuICAgIGZvciAoY29uc3QgY29sbGVjdGlvbkNvbW1hbmROYW1lIGluIGNvbGxlY3Rpb25Db21tYW5kcykge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoY29sbGVjdGlvbkNvbW1hbmROYW1lLCB0cnVlKVxuICAgICAgY29uc3QgY29sbGVjdGlvbkNvbW1hbmQgPSBjb2xsZWN0aW9uQ29tbWFuZHNbY29sbGVjdGlvbkNvbW1hbmROYW1lXVxuXG4gICAgICBNb2RlbENsYXNzW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKGFyZ3MsIGNvbW1hbmRBcmdzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxDb2xsZWN0aW9uQ29tbWFuZChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgY29tbWFuZDogY29sbGVjdGlvbkNvbW1hbmROYW1lLFxuICAgICAgICAgICAgY29sbGVjdGlvbk5hbWU6IGRpZ2codGhpcy5tb2RlbENsYXNzRGF0YSgpLCBcImNvbGxlY3Rpb25OYW1lXCIpLFxuICAgICAgICAgICAgdHlwZTogXCJjb2xsZWN0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsuLi5kaWdnKGNvbGxlY3Rpb25Db21tYW5kLCBcImFyZ3NcIiksIC4uLmNvbW1hbmRBcmdzfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGFkZE1lbWJlckNvbW1hbmRzVG9Nb2RlbENsYXNzLiAqL1xuICBhZGRNZW1iZXJDb21tYW5kc1RvTW9kZWxDbGFzcyAoTW9kZWxDbGFzcywgbWVtYmVyQ29tbWFuZHMpIHtcbiAgICBmb3IgKGNvbnN0IG1lbWJlckNvbW1hbmROYW1lIGluIG1lbWJlckNvbW1hbmRzKSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShtZW1iZXJDb21tYW5kTmFtZSwgdHJ1ZSlcbiAgICAgIGNvbnN0IG1lbWJlckNvbW1hbmQgPSBtZW1iZXJDb21tYW5kc1ttZW1iZXJDb21tYW5kTmFtZV1cblxuICAgICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoYXJncywgY29tbWFuZEFyZ3MgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsbE1lbWJlckNvbW1hbmQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgIGNvbW1hbmQ6IG1lbWJlckNvbW1hbmROYW1lLFxuICAgICAgICAgICAgcHJpbWFyeUtleTogdGhpcy5wcmltYXJ5S2V5KCksXG4gICAgICAgICAgICBjb2xsZWN0aW9uTmFtZTogdGhpcy5tb2RlbENsYXNzRGF0YSgpLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgICAgICAgdHlwZTogXCJtZW1iZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgey4uLmRpZ2cobWVtYmVyQ29tbWFuZCwgXCJhcmdzXCIpLCAuLi5jb21tYW5kQXJnc31cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBhZGRSZWxhdGlvbnNoaXBzVG9Nb2RlbENsYXNzLiAqL1xuICBhZGRSZWxhdGlvbnNoaXBzVG9Nb2RlbENsYXNzIChNb2RlbENsYXNzLCBtb2RlbENsYXNzRGF0YSwgcmVsYXRpb25zaGlwcykge1xuICAgIGNvbnN0IHttb2RlbFJlY2lwZXNMb2FkZXJ9ID0gZGlncyh0aGlzLCBcIm1vZGVsUmVjaXBlc0xvYWRlclwiKVxuXG4gICAgZm9yIChjb25zdCByZWxhdGlvbnNoaXBOYW1lIGluIHJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcHNbcmVsYXRpb25zaGlwTmFtZV1cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWN0aXZlX3JlY29yZDoge1xuICAgICAgICAgIG5hbWU6IGFjdGl2ZVJlY29yZE5hbWUsXG4gICAgICAgICAgcHJpbWFyeV9rZXk6IGFjdGl2ZVJlY29yZFByaW1hcnlLZXlcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NfbmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBmb3JlaWduX2tleTogZm9yZWlnbktleSxcbiAgICAgICAga2xhc3M6IHtwcmltYXJ5X2tleToga2xhc3NQcmltYXJ5S2V5fSxcbiAgICAgICAgb3B0aW9uczoge2FzOiBvcHRpb25zQXMsIHByaW1hcnlfa2V5OiBvcHRpb25zUHJpbWFyeUtleSwgdGhyb3VnaDogb3B0aW9uc1Rocm91Z2h9LFxuICAgICAgICByZXNvdXJjZV9uYW1lOiByZXNvdXJjZU5hbWUsXG4gICAgICAgIHR5cGVcbiAgICAgIH0gPSBkaWdzKFxuICAgICAgICByZWxhdGlvbnNoaXAsXG4gICAgICAgIFwiYWN0aXZlX3JlY29yZFwiLFxuICAgICAgICBcImNsYXNzX25hbWVcIixcbiAgICAgICAgXCJmb3JlaWduX2tleVwiLFxuICAgICAgICBcImtsYXNzXCIsXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInJlc291cmNlX25hbWVcIixcbiAgICAgICAgXCJ0eXBlXCJcbiAgICAgIClcbiAgICAgIGNvbnN0IGVuc3VyZU1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGBlbnN1cmVfJHtyZWxhdGlvbnNoaXBOYW1lfV9sb2FkZWRgLCB0cnVlKVxuICAgICAgY29uc3QgbG9hZE1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGBsb2FkXyR7cmVsYXRpb25zaGlwTmFtZX1gLCB0cnVlKVxuICAgICAgY29uc3QgbW9kZWxNZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShyZWxhdGlvbnNoaXBOYW1lLCB0cnVlKVxuXG4gICAgICBpZiAodHlwZSA9PSBcImJlbG9uZ3NfdG9cIikge1xuICAgICAgICB0aGlzLmRlZmluZUJlbG9uZ3NUb0dldE1ldGhvZCh7TW9kZWxDbGFzcywgbW9kZWxNZXRob2ROYW1lLCByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICAgICAgdGhpcy5kZWZpbmVCZWxvbmdzVG9Mb2FkTWV0aG9kKHtcbiAgICAgICAgICBmb3JlaWduS2V5LFxuICAgICAgICAgIGtsYXNzUHJpbWFyeUtleSxcbiAgICAgICAgICBsb2FkTWV0aG9kTmFtZSxcbiAgICAgICAgICBNb2RlbENsYXNzLFxuICAgICAgICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICAgICAgICBvcHRpb25zUHJpbWFyeUtleSxcbiAgICAgICAgICByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgIHJlc291cmNlTmFtZVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRlZmluZUVuc3VyZUFzc29jaWF0aW9uTG9hZGVkTWV0aG9kKHtlbnN1cmVNZXRob2ROYW1lLCBNb2RlbENsYXNzLCByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImhhc19tYW55XCIpIHtcbiAgICAgICAgdGhpcy5kZWZpbmVIYXNNYW55R2V0TWV0aG9kKHtcbiAgICAgICAgICBhY3RpdmVSZWNvcmROYW1lLFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBmb3JlaWduS2V5LFxuICAgICAgICAgIE1vZGVsQ2xhc3MsXG4gICAgICAgICAgbW9kZWxNZXRob2ROYW1lLFxuICAgICAgICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICAgICAgICBvcHRpb25zQXMsXG4gICAgICAgICAgb3B0aW9uc1ByaW1hcnlLZXksXG4gICAgICAgICAgb3B0aW9uc1Rocm91Z2gsXG4gICAgICAgICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICByZXNvdXJjZU5hbWVcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kZWZpbmVIYXNNYW55TG9hZE1ldGhvZCh7XG4gICAgICAgICAgZm9yZWlnbktleSxcbiAgICAgICAgICBsb2FkTWV0aG9kTmFtZSxcbiAgICAgICAgICBNb2RlbENsYXNzLFxuICAgICAgICAgIG1vZGVsQ2xhc3NEYXRhLFxuICAgICAgICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICAgICAgICBvcHRpb25zVGhyb3VnaCxcbiAgICAgICAgICByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgIHJlc291cmNlTmFtZVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRlZmluZUVuc3VyZUFzc29jaWF0aW9uTG9hZGVkTWV0aG9kKHtlbnN1cmVNZXRob2ROYW1lLCBNb2RlbENsYXNzLCByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImhhc19vbmVcIikge1xuICAgICAgICB0aGlzLmRlZmluZUhhc09uZUdldE1ldGhkKHtNb2RlbENsYXNzLCBtb2RlbE1ldGhvZE5hbWUsIHJlbGF0aW9uc2hpcE5hbWV9KVxuICAgICAgICB0aGlzLmRlZmluZUhhc09uZUxvYWRNZXRob2Qoe1xuICAgICAgICAgIGFjdGl2ZVJlY29yZFByaW1hcnlLZXksXG4gICAgICAgICAgZm9yZWlnbktleSxcbiAgICAgICAgICBsb2FkTWV0aG9kTmFtZSxcbiAgICAgICAgICBNb2RlbENsYXNzLFxuICAgICAgICAgIG1vZGVsQ2xhc3NEYXRhLFxuICAgICAgICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICAgICAgICBvcHRpb25zVGhyb3VnaCxcbiAgICAgICAgICByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgIHJlc291cmNlTmFtZVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRlZmluZUVuc3VyZUFzc29jaWF0aW9uTG9hZGVkTWV0aG9kKHtlbnN1cmVNZXRob2ROYW1lLCBNb2RlbENsYXNzLCByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZWxhdGlvbnNoaXAgdHlwZTogJHt0eXBlfWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGRlZmluZUVuc3VyZUFzc29jaWF0aW9uTG9hZGVkTWV0aG9kLiAqL1xuICBkZWZpbmVFbnN1cmVBc3NvY2lhdGlvbkxvYWRlZE1ldGhvZCAoe2Vuc3VyZU1ldGhvZE5hbWUsIE1vZGVsQ2xhc3MsIHJlbGF0aW9uc2hpcE5hbWV9KSB7XG4gICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbZW5zdXJlTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnN1cmVBc3NvY2lhdGlvbkxvYWRlZChyZWxhdGlvbnNoaXBOYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBkZWZpbmVCZWxvbmdzVG9HZXRNZXRob2QuICovXG4gIGRlZmluZUJlbG9uZ3NUb0dldE1ldGhvZCAoe01vZGVsQ2xhc3MsIG1vZGVsTWV0aG9kTmFtZSwgcmVsYXRpb25zaGlwTmFtZX0pIHtcbiAgICBNb2RlbENsYXNzLnByb3RvdHlwZVttb2RlbE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRCZWxvbmdzVG9SZWZsZWN0aW9uKHtyZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgfVxuICB9XG5cbiAgLyoqIGRlZmluZUJlbG9uZ3NUb0xvYWRNZXRob2QuICovXG4gIGRlZmluZUJlbG9uZ3NUb0xvYWRNZXRob2QgKHtmb3JlaWduS2V5LCBrbGFzc1ByaW1hcnlLZXksIE1vZGVsQ2xhc3MsIG1vZGVsUmVjaXBlc0xvYWRlciwgbG9hZE1ldGhvZE5hbWUsIG9wdGlvbnNQcmltYXJ5S2V5LCByZWxhdGlvbnNoaXBOYW1lLCByZXNvdXJjZU5hbWV9KSB7XG4gICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbG9hZE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZm9yZWlnbktleU1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGZvcmVpZ25LZXksIHRydWUpXG5cbiAgICAgIGlmICghKGZvcmVpZ25LZXlNZXRob2ROYW1lIGluIHRoaXMpKSB0aHJvdyBuZXcgRXJyb3IoYEZvcmVpZ24ga2V5IG1ldGhvZCB3YXNuJ3QgZGVmaW5lZDogJHtmb3JlaWduS2V5TWV0aG9kTmFtZX1gKVxuXG4gICAgICBjb25zdCBpZCA9IHRoaXNbZm9yZWlnbktleU1ldGhvZE5hbWVdKClcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbFJlY2lwZXNMb2FkZXIuZ2V0TW9kZWxDbGFzcyhyZXNvdXJjZU5hbWUpXG4gICAgICBjb25zdCByYW5zYWNrID0ge31cbiAgICAgIGNvbnN0IHJhbnNhY2tJZFNlYXJjaEtleSA9IGAke29wdGlvbnNQcmltYXJ5S2V5IHx8IGtsYXNzUHJpbWFyeUtleX1fZXFgXG5cbiAgICAgIHJhbnNhY2tbcmFuc2Fja0lkU2VhcmNoS2V5XSA9IGlkXG5cbiAgICAgIHJldHVybiB0aGlzLl9sb2FkQmVsb25nc1RvUmVmbGVjdGlvbihcbiAgICAgICAge3JlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lLCBtb2RlbDogdGhpcywgbW9kZWxDbGFzc30sXG4gICAgICAgIHtyYW5zYWNrfVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGRlZmluZUhhc01hbnlHZXRNZXRob2QgKHtcbiAgICBhY3RpdmVSZWNvcmROYW1lLFxuICAgIGNsYXNzTmFtZSxcbiAgICBmb3JlaWduS2V5LFxuICAgIE1vZGVsQ2xhc3MsXG4gICAgbW9kZWxNZXRob2ROYW1lLFxuICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICBvcHRpb25zQXMsXG4gICAgb3B0aW9uc1ByaW1hcnlLZXksXG4gICAgb3B0aW9uc1Rocm91Z2gsXG4gICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICByZXNvdXJjZU5hbWVcbiAgfSkge1xuICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW21vZGVsTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMucHJpbWFyeUtleSgpXG4gICAgICBjb25zdCBtb2RlbENsYXNzID0gbW9kZWxSZWNpcGVzTG9hZGVyLmdldE1vZGVsQ2xhc3MocmVzb3VyY2VOYW1lKVxuICAgICAgY29uc3QgcmFuc2FjayA9IHt9XG5cbiAgICAgIHJhbnNhY2tbYCR7Zm9yZWlnbktleX1fZXFgXSA9IGlkXG5cbiAgICAgIGNvbnN0IGhhc01hbnlQYXJhbWV0ZXJzID0ge1xuICAgICAgICByZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgIG1vZGVsTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBtb2RlbENsYXNzXG4gICAgICB9XG5cbiAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnNcblxuICAgICAgaWYgKG9wdGlvbnNUaHJvdWdoKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHRocm91Z2g6IHtcbiAgICAgICAgICAgICAgbW9kZWw6IGFjdGl2ZVJlY29yZE5hbWUsXG4gICAgICAgICAgICAgIGlkOiB0aGlzLnByaW1hcnlLZXkoKSxcbiAgICAgICAgICAgICAgcmVmbGVjdGlvbjogcmVsYXRpb25zaGlwTmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmFuc2FjayA9IHt9XG4gICAgICAgIGNvbnN0IHByaW1hcnlLZXlDb2x1bW5OYW1lID0gb3B0aW9uc1ByaW1hcnlLZXkgfHwgZGlnZyhNb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwicHJpbWFyeUtleVwiKVxuICAgICAgICBjb25zdCBwcmltYXJ5S2V5TWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUocHJpbWFyeUtleUNvbHVtbk5hbWUsIHRydWUpXG5cbiAgICAgICAgaWYgKCEocHJpbWFyeUtleU1ldGhvZE5hbWUgaW4gdGhpcykpIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBwcmltYXJ5IGtleSBtZXRob2Q6ICR7cHJpbWFyeUtleU1ldGhvZE5hbWV9YClcblxuICAgICAgICByYW5zYWNrW2Ake2ZvcmVpZ25LZXl9X2VxYF0gPSB0aGlzW3ByaW1hcnlLZXlNZXRob2ROYW1lXSgpXG5cbiAgICAgICAgaWYgKG9wdGlvbnNBcykge1xuICAgICAgICAgIHJhbnNhY2tbYCR7b3B0aW9uc0FzfV90eXBlX2VxYF0gPSBhY3RpdmVSZWNvcmROYW1lXG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSB7cmFuc2Fja31cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKGhhc01hbnlQYXJhbWV0ZXJzLCBxdWVyeVBhcmFtZXRlcnMpXG4gICAgfVxuICB9XG5cbiAgLyoqIGRlZmluZUhhc01hbnlMb2FkTWV0aG9kLiAqL1xuICBkZWZpbmVIYXNNYW55TG9hZE1ldGhvZCAoe2ZvcmVpZ25LZXksIGxvYWRNZXRob2ROYW1lLCBNb2RlbENsYXNzLCBtb2RlbENsYXNzRGF0YSwgbW9kZWxSZWNpcGVzTG9hZGVyLCBvcHRpb25zVGhyb3VnaCwgcmVsYXRpb25zaGlwTmFtZSwgcmVzb3VyY2VOYW1lfSkge1xuICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW2xvYWRNZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5wcmltYXJ5S2V5KClcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbFJlY2lwZXNMb2FkZXIuZ2V0TW9kZWxDbGFzcyhyZXNvdXJjZU5hbWUpXG5cbiAgICAgIGlmIChvcHRpb25zVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IGRpZ2cobW9kZWxDbGFzc0RhdGEsIFwiY2xhc3NOYW1lXCIpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRIYXNNYW55UmVmbGVjdGlvbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICAgICAgbW9kZWxDbGFzc1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHRocm91Z2g6IHtcbiAgICAgICAgICAgICAgICBtb2RlbDogbW9kZWxDbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcmVmbGVjdGlvbjogcmVsYXRpb25zaGlwTmFtZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByYW5zYWNrID0ge31cblxuICAgICAgICByYW5zYWNrW2Ake2ZvcmVpZ25LZXl9X2VxYF0gPSBpZFxuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkSGFzTWFueVJlZmxlY3Rpb24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVmbGVjdGlvbk5hbWU6IHJlbGF0aW9uc2hpcE5hbWUsXG4gICAgICAgICAgICBtb2RlbDogdGhpcyxcbiAgICAgICAgICAgIG1vZGVsQ2xhc3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtyYW5zYWNrfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGRlZmluZUhhc09uZUdldE1ldGhkLiAqL1xuICBkZWZpbmVIYXNPbmVHZXRNZXRoZCAoe01vZGVsQ2xhc3MsIG1vZGVsTWV0aG9kTmFtZSwgcmVsYXRpb25zaGlwTmFtZX0pIHtcbiAgICBNb2RlbENsYXNzLnByb3RvdHlwZVttb2RlbE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRIYXNPbmVSZWZsZWN0aW9uKHtyZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgfVxuICB9XG5cbiAgZGVmaW5lSGFzT25lTG9hZE1ldGhvZCAoe1xuICAgIGFjdGl2ZVJlY29yZFByaW1hcnlLZXksXG4gICAgZm9yZWlnbktleSxcbiAgICBsb2FkTWV0aG9kTmFtZSxcbiAgICBNb2RlbENsYXNzLFxuICAgIG1vZGVsQ2xhc3NEYXRhLFxuICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICBvcHRpb25zVGhyb3VnaCxcbiAgICByZWxhdGlvbnNoaXBOYW1lLFxuICAgIHJlc291cmNlTmFtZVxuICB9KSB7XG4gICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbG9hZE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHJpbWFyeUtleU1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFjdGl2ZVJlY29yZFByaW1hcnlLZXksIHRydWUpXG5cbiAgICAgIGlmICghKHByaW1hcnlLZXlNZXRob2ROYW1lIGluIHRoaXMpKSB0aHJvdyBuZXcgRXJyb3IoYFByaW1hcnkga2V5IG1ldGhvZCB3YXNuJ3QgZGVmaW5lZDogJHtwcmltYXJ5S2V5TWV0aG9kTmFtZX1gKVxuXG4gICAgICBjb25zdCBpZCA9IHRoaXNbcHJpbWFyeUtleU1ldGhvZE5hbWVdKClcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbFJlY2lwZXNMb2FkZXIuZ2V0TW9kZWxDbGFzcyhyZXNvdXJjZU5hbWUpXG5cbiAgICAgIGlmIChvcHRpb25zVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IGRpZ2cobW9kZWxDbGFzc0RhdGEsIFwiY2xhc3NOYW1lXCIpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRIYXNPbmVSZWZsZWN0aW9uKFxuICAgICAgICAgIHtyZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSwgbW9kZWw6IHRoaXMsIG1vZGVsQ2xhc3N9LFxuICAgICAgICAgIHtwYXJhbXM6IHt0aHJvdWdoOiB7bW9kZWw6IG1vZGVsQ2xhc3NOYW1lLCBpZCwgcmVmbGVjdGlvbjogcmVsYXRpb25zaGlwTmFtZX19fVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByYW5zYWNrID0ge31cblxuICAgICAgICByYW5zYWNrW2Ake2ZvcmVpZ25LZXl9X2VxYF0gPSBpZFxuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkSGFzT25lUmVmbGVjdGlvbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICAgICAgbW9kZWxDbGFzc1xuICAgICAgICAgIH0sXG4gICAgICAgICAge3JhbnNhY2t9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
374
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcmVjaXBlcy1tb2RlbC1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbIm1vZGVsLXJlY2lwZXMtbW9kZWwtbG9hZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFDWixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUNwQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQTtBQUV4QyxvRkFBb0Y7QUFDcEYseUVBQXlFO0FBQ3pFLGtHQUFrRztBQUNsRyxzRUFBc0U7QUFDdEUsb0lBQW9JO0FBQ3BJOzs7Ozs7R0FNRztBQUNIOzs7OztHQUtHO0FBQ0g7Ozs7Ozs7OztHQVNHO0FBQ0g7Ozs7Ozs7R0FPRztBQUVILDREQUE0RDtBQUM1RCxNQUFNLENBQUMsT0FBTyxPQUFPLCtCQUErQjtJQUNsRDs7Ozs7T0FLRztJQUNILFlBQWEsRUFBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7UUFFL0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1QsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDL0MsTUFBTSxFQUNKLFVBQVUsRUFDVixtQkFBbUIsRUFBRSxrQkFBa0IsRUFDdkMsZUFBZSxFQUFFLGNBQWMsRUFDL0IsZ0JBQWdCLEVBQUUsY0FBYyxFQUNoQyxhQUFhLEVBQ2QsR0FBRyxJQUFJLENBQ04sV0FBVyxFQUNYLFlBQVks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Iiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7ZGlnZywgZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL2Jhc2UtbW9kZWwuanNcIlxuaW1wb3J0IENvbGxlY3Rpb24gZnJvbSBcIi4vY29sbGVjdGlvbi5qc1wiXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9tb2RlbC1yZWNpcGVzLWxvYWRlci5qc1wiKS5kZWZhdWx0fSBNb2RlbFJlY2lwZXNMb2FkZXJMaWtlICovXG4vKiogQHR5cGVkZWYge3R5cGVvZiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH0gTW9kZWxDbGFzc0xpa2UgKi9cbi8qKiBAdHlwZWRlZiB7TW9kZWxDbGFzc0xpa2UgJiB7bW9kZWxDbGFzc0RhdGE6ICgpID0+IE1vZGVsUmVjaXBlQ2xhc3NEYXRhfX0gTW9kZWxDbGFzc1dpdGhEYXRhICovXG4vKiogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHtuYW1lOiBzdHJpbmd9Pn0gTW9kZWxSZWNpcGVBdHRyaWJ1dGVzICovXG4vKiogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHthcmdzPzogUmVjb3JkPHN0cmluZywgb2JqZWN0IHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ+fT59IE1vZGVsUmVjaXBlQ29tbWFuZHMgKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTW9kZWxSZWNpcGVDbGFzc0RhdGFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc05hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb2xsZWN0aW9uTmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcmltYXJ5S2V5XG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVsYXRpb25zaGlwT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFthc11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHJpbWFyeV9rZXldXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rocm91Z2hdXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVsYXRpb25zaGlwRGVmaW5pdGlvblxuICogQHByb3BlcnR5IHt7bmFtZTogc3RyaW5nLCBwcmltYXJ5X2tleTogc3RyaW5nfX0gYWN0aXZlX3JlY29yZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzX25hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmb3JlaWduX2tleVxuICogQHByb3BlcnR5IHt7cHJpbWFyeV9rZXk6IHN0cmluZ319IGtsYXNzXG4gKiBAcHJvcGVydHkge1JlbGF0aW9uc2hpcE9wdGlvbnN9IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZXNvdXJjZV9uYW1lXG4gKiBAcHJvcGVydHkge1wiYmVsb25nc190b1wiIHwgXCJoYXNfbWFueVwiIHwgXCJoYXNfb25lXCJ9IHR5cGVcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBNb2RlbFJlY2lwZVxuICogQHByb3BlcnR5IHtNb2RlbFJlY2lwZUF0dHJpYnV0ZXN9IGF0dHJpYnV0ZXNcbiAqIEBwcm9wZXJ0eSB7TW9kZWxSZWNpcGVDb21tYW5kc30gY29sbGVjdGlvbl9jb21tYW5kc1xuICogQHByb3BlcnR5IHtNb2RlbFJlY2lwZUNvbW1hbmRzfSBtZW1iZXJfY29tbWFuZHNcbiAqIEBwcm9wZXJ0eSB7TW9kZWxSZWNpcGVDbGFzc0RhdGF9IG1vZGVsX2NsYXNzX2RhdGFcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmVsYXRpb25zaGlwRGVmaW5pdGlvbj59IHJlbGF0aW9uc2hpcHNcbiAqL1xuXG4vKiogQnVpbGRzIHJ1bnRpbWUgbW9kZWwgY2xhc3NlcyBmcm9tIHJlY2lwZSBkZWZpbml0aW9ucy4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyTW9kZWxSZWNpcGVzTW9kZWxMb2FkZXIge1xuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByb290MFxuICAgKiBAcGFyYW0ge01vZGVsUmVjaXBlfSByb290MC5tb2RlbFJlY2lwZVxuICAgKiBAcGFyYW0ge01vZGVsUmVjaXBlc0xvYWRlckxpa2V9IHJvb3QwLm1vZGVsUmVjaXBlc0xvYWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IgKHttb2RlbFJlY2lwZSwgbW9kZWxSZWNpcGVzTG9hZGVyfSkge1xuICAgIGlmICghbW9kZWxSZWNpcGUpIHRocm93IG5ldyBFcnJvcihcIk5vICdtb2RlbFJlY2lwZScgd2FzIGdpdmVuXCIpXG5cbiAgICB0aGlzLm1vZGVsUmVjaXBlc0xvYWRlciA9IG1vZGVsUmVjaXBlc0xvYWRlclxuICAgIHRoaXMubW9kZWxSZWNpcGUgPSBtb2RlbFJlY2lwZVxuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZUNsYXNzLlxuICAgKiBAcmV0dXJucyB7TW9kZWxDbGFzc0xpa2V9XG4gICAqL1xuICBjcmVhdGVDbGFzcyAoKSB7XG4gICAgY29uc3Qge21vZGVsUmVjaXBlfSA9IGRpZ3ModGhpcywgXCJtb2RlbFJlY2lwZVwiKVxuICAgIGNvbnN0IHtcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBjb2xsZWN0aW9uX2NvbW1hbmRzOiBjb2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgICBtZW1iZXJfY29tbWFuZHM6IG1lbWJlckNvbW1hbmRzLFxuICAgICAgbW9kZWxfY2xhc3NfZGF0YTogbW9kZWxDbGFzc0RhdGEsXG4gICAgICByZWxhdGlvbnNoaXBzXG4gICAgfSA9IGRpZ3MoXG4gICAgICBtb2RlbFJlY2lwZSxcbiAgICAgIFwiYXR0cmlidXRlc1wiLFxuICAgICAgXCJjb2xsZWN0aW9uX2NvbW1hbmRzXCIsXG4gICAgICBcIm1lbWJlcl9jb21tYW5kc1wiLFxuICAgICAgXCJtb2RlbF9jbGFzc19kYXRhXCIsXG4gICAgICBcInJlbGF0aW9uc2hpcHNcIlxuICAgIClcbiAgICBjb25zdCB7bmFtZTogbW9kZWxDbGFzc05hbWV9ID0gZGlncyhtb2RlbENsYXNzRGF0YSwgXCJuYW1lXCIpXG4gICAgY29uc3QgTW9kZWxDbGFzcyA9IGNsYXNzIEFwaU1ha2VyTW9kZWwgZXh0ZW5kcyBCYXNlTW9kZWwgeyB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICBNb2RlbENsYXNzLFxuICAgICAgXCJuYW1lXCIsXG4gICAgICB7d3JpdGFibGU6IGZhbHNlLCB2YWx1ZTogbW9kZWxDbGFzc05hbWV9XG4gICAgKVxuXG4gICAgY29uc3QgbW9kZWxDbGFzc0NvbnN0cnVjdG9yID0gLyoqIEB0eXBlIHtNb2RlbENsYXNzV2l0aERhdGF9ICovIChNb2RlbENsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvcilcbiAgICBtb2RlbENsYXNzQ29uc3RydWN0b3IubW9kZWxDbGFzc0RhdGEgPSAoKSA9PiBtb2RlbENsYXNzRGF0YVxuXG4gICAgdGhpcy5hZGRBdHRyaWJ1dGVNZXRob2RzVG9Nb2RlbENsYXNzKE1vZGVsQ2xhc3MsIGF0dHJpYnV0ZXMpXG4gICAgdGhpcy5hZGRSZWxhdGlvbnNoaXBzVG9Nb2RlbENsYXNzKE1vZGVsQ2xhc3MsIG1vZGVsQ2xhc3NEYXRhLCByZWxhdGlvbnNoaXBzKVxuICAgIHRoaXMuYWRkUXVlcnlDb21tYW5kc1RvTW9kZWxDbGFzcyhNb2RlbENsYXNzLCBjb2xsZWN0aW9uQ29tbWFuZHMpXG4gICAgdGhpcy5hZGRNZW1iZXJDb21tYW5kc1RvTW9kZWxDbGFzcyhNb2RlbENsYXNzLCBtZW1iZXJDb21tYW5kcylcblxuICAgIHJldHVybiBNb2RlbENsYXNzXG4gIH1cblxuICAvKipcbiAgICogYWRkQXR0cmlidXRlTWV0aG9kc1RvTW9kZWxDbGFzcy5cbiAgICogQHBhcmFtIHtNb2RlbENsYXNzTGlrZX0gTW9kZWxDbGFzc1xuICAgKiBAcGFyYW0ge01vZGVsUmVjaXBlQXR0cmlidXRlc30gYXR0cmlidXRlc1xuICAgKi9cbiAgYWRkQXR0cmlidXRlTWV0aG9kc1RvTW9kZWxDbGFzcyAoTW9kZWxDbGFzcywgYXR0cmlidXRlcykge1xuICAgIGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdXG4gICAgICBjb25zdCB7bmFtZX0gPSBkaWdzKGF0dHJpYnV0ZSwgXCJuYW1lXCIpXG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShuYW1lLCB0cnVlKVxuICAgICAgY29uc3QgaGFzTWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYGhhc18ke25hbWV9YCwgdHJ1ZSlcblxuICAgICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRBdHRyaWJ1dGVVbmRlcnNjb3JlKGF0dHJpYnV0ZU5hbWUpXG4gICAgICB9XG5cbiAgICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW2hhc01ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbbWV0aG9kTmFtZV0oKVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ByZXNlbnQodmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGFkZFF1ZXJ5Q29tbWFuZHNUb01vZGVsQ2xhc3MuXG4gICAqIEBwYXJhbSB7TW9kZWxDbGFzc0xpa2V9IE1vZGVsQ2xhc3NcbiAgICogQHBhcmFtIHtNb2RlbFJlY2lwZUNvbW1hbmRzfSBjb2xsZWN0aW9uQ29tbWFuZHNcbiAgICovXG4gIGFkZFF1ZXJ5Q29tbWFuZHNUb01vZGVsQ2xhc3MgKE1vZGVsQ2xhc3MsIGNvbGxlY3Rpb25Db21tYW5kcykge1xuICAgIGZvciAoY29uc3QgY29sbGVjdGlvbkNvbW1hbmROYW1lIGluIGNvbGxlY3Rpb25Db21tYW5kcykge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoY29sbGVjdGlvbkNvbW1hbmROYW1lLCB0cnVlKVxuICAgICAgY29uc3QgY29sbGVjdGlvbkNvbW1hbmQgPSBjb2xsZWN0aW9uQ29tbWFuZHNbY29sbGVjdGlvbkNvbW1hbmROYW1lXVxuXG4gICAgICBNb2RlbENsYXNzW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKGFyZ3MsIGNvbW1hbmRBcmdzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxDb2xsZWN0aW9uQ29tbWFuZChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgY29tbWFuZDogY29sbGVjdGlvbkNvbW1hbmROYW1lLFxuICAgICAgICAgICAgY29sbGVjdGlvbk5hbWU6IGRpZ2codGhpcy5tb2RlbENsYXNzRGF0YSgpLCBcImNvbGxlY3Rpb25OYW1lXCIpLFxuICAgICAgICAgICAgdHlwZTogXCJjb2xsZWN0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsuLi5kaWdnKGNvbGxlY3Rpb25Db21tYW5kLCBcImFyZ3NcIiksIC4uLmNvbW1hbmRBcmdzfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGFkZE1lbWJlckNvbW1hbmRzVG9Nb2RlbENsYXNzLlxuICAgKiBAcGFyYW0ge01vZGVsQ2xhc3NMaWtlfSBNb2RlbENsYXNzXG4gICAqIEBwYXJhbSB7TW9kZWxSZWNpcGVDb21tYW5kc30gbWVtYmVyQ29tbWFuZHNcbiAgICovXG4gIGFkZE1lbWJlckNvbW1hbmRzVG9Nb2RlbENsYXNzIChNb2RlbENsYXNzLCBtZW1iZXJDb21tYW5kcykge1xuICAgIGZvciAoY29uc3QgbWVtYmVyQ29tbWFuZE5hbWUgaW4gbWVtYmVyQ29tbWFuZHMpIHtcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKG1lbWJlckNvbW1hbmROYW1lLCB0cnVlKVxuICAgICAgY29uc3QgbWVtYmVyQ29tbWFuZCA9IG1lbWJlckNvbW1hbmRzW21lbWJlckNvbW1hbmROYW1lXVxuXG4gICAgICBNb2RlbENsYXNzLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uIChhcmdzLCBjb21tYW5kQXJncyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxsTWVtYmVyQ29tbWFuZChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgY29tbWFuZDogbWVtYmVyQ29tbWFuZE5hbWUsXG4gICAgICAgICAgICBwcmltYXJ5S2V5OiB0aGlzLnByaW1hcnlLZXkoKSxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25OYW1lOiB0aGlzLm1vZGVsQ2xhc3NEYXRhKCkuY29sbGVjdGlvbk5hbWUsXG4gICAgICAgICAgICB0eXBlOiBcIm1lbWJlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7Li4uZGlnZyhtZW1iZXJDb21tYW5kLCBcImFyZ3NcIiksIC4uLmNvbW1hbmRBcmdzfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGFkZFJlbGF0aW9uc2hpcHNUb01vZGVsQ2xhc3MuXG4gICAqIEBwYXJhbSB7TW9kZWxDbGFzc0xpa2V9IE1vZGVsQ2xhc3NcbiAgICogQHBhcmFtIHtNb2RlbFJlY2lwZUNsYXNzRGF0YX0gbW9kZWxDbGFzc0RhdGFcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbnNoaXBEZWZpbml0aW9uPn0gcmVsYXRpb25zaGlwc1xuICAgKi9cbiAgYWRkUmVsYXRpb25zaGlwc1RvTW9kZWxDbGFzcyAoTW9kZWxDbGFzcywgbW9kZWxDbGFzc0RhdGEsIHJlbGF0aW9uc2hpcHMpIHtcbiAgICBjb25zdCB7bW9kZWxSZWNpcGVzTG9hZGVyfSA9IGRpZ3ModGhpcywgXCJtb2RlbFJlY2lwZXNMb2FkZXJcIilcblxuICAgIGZvciAoY29uc3QgcmVsYXRpb25zaGlwTmFtZSBpbiByZWxhdGlvbnNoaXBzKSB7XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBzW3JlbGF0aW9uc2hpcE5hbWVdXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFjdGl2ZV9yZWNvcmQ6IHtcbiAgICAgICAgICBuYW1lOiBhY3RpdmVSZWNvcmROYW1lLFxuICAgICAgICAgIHByaW1hcnlfa2V5OiBhY3RpdmVSZWNvcmRQcmltYXJ5S2V5XG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzX25hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgZm9yZWlnbl9rZXk6IGZvcmVpZ25LZXksXG4gICAgICAgIGtsYXNzOiB7cHJpbWFyeV9rZXk6IGtsYXNzUHJpbWFyeUtleX0sXG4gICAgICAgIG9wdGlvbnM6IHthczogb3B0aW9uc0FzLCBwcmltYXJ5X2tleTogb3B0aW9uc1ByaW1hcnlLZXksIHRocm91Z2g6IG9wdGlvbnNUaHJvdWdofSxcbiAgICAgICAgcmVzb3VyY2VfbmFtZTogcmVzb3VyY2VOYW1lLFxuICAgICAgICB0eXBlXG4gICAgICB9ID0gZGlncyhcbiAgICAgICAgcmVsYXRpb25zaGlwLFxuICAgICAgICBcImFjdGl2ZV9yZWNvcmRcIixcbiAgICAgICAgXCJjbGFzc19uYW1lXCIsXG4gICAgICAgIFwiZm9yZWlnbl9rZXlcIixcbiAgICAgICAgXCJrbGFzc1wiLFxuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJyZXNvdXJjZV9uYW1lXCIsXG4gICAgICAgIFwidHlwZVwiXG4gICAgICApXG4gICAgICBjb25zdCBlbnN1cmVNZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShgZW5zdXJlXyR7cmVsYXRpb25zaGlwTmFtZX1fbG9hZGVkYCwgdHJ1ZSlcbiAgICAgIGNvbnN0IGxvYWRNZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShgbG9hZF8ke3JlbGF0aW9uc2hpcE5hbWV9YCwgdHJ1ZSlcbiAgICAgIGNvbnN0IG1vZGVsTWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUocmVsYXRpb25zaGlwTmFtZSwgdHJ1ZSlcblxuICAgICAgaWYgKHR5cGUgPT0gXCJiZWxvbmdzX3RvXCIpIHtcbiAgICAgICAgdGhpcy5kZWZpbmVCZWxvbmdzVG9HZXRNZXRob2Qoe01vZGVsQ2xhc3MsIG1vZGVsTWV0aG9kTmFtZSwgcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgICAgIHRoaXMuZGVmaW5lQmVsb25nc1RvTG9hZE1ldGhvZCh7XG4gICAgICAgICAgZm9yZWlnbktleSxcbiAgICAgICAgICBrbGFzc1ByaW1hcnlLZXksXG4gICAgICAgICAgbG9hZE1ldGhvZE5hbWUsXG4gICAgICAgICAgTW9kZWxDbGFzcyxcbiAgICAgICAgICBtb2RlbFJlY2lwZXNMb2FkZXIsXG4gICAgICAgICAgb3B0aW9uc1ByaW1hcnlLZXksXG4gICAgICAgICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICByZXNvdXJjZU5hbWVcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kZWZpbmVFbnN1cmVBc3NvY2lhdGlvbkxvYWRlZE1ldGhvZCh7ZW5zdXJlTWV0aG9kTmFtZSwgTW9kZWxDbGFzcywgcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJoYXNfbWFueVwiKSB7XG4gICAgICAgIHRoaXMuZGVmaW5lSGFzTWFueUdldE1ldGhvZCh7XG4gICAgICAgICAgYWN0aXZlUmVjb3JkTmFtZSxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgZm9yZWlnbktleSxcbiAgICAgICAgICBNb2RlbENsYXNzLFxuICAgICAgICAgIG1vZGVsTWV0aG9kTmFtZSxcbiAgICAgICAgICBtb2RlbFJlY2lwZXNMb2FkZXIsXG4gICAgICAgICAgb3B0aW9uc0FzLFxuICAgICAgICAgIG9wdGlvbnNQcmltYXJ5S2V5LFxuICAgICAgICAgIG9wdGlvbnNUaHJvdWdoLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcE5hbWUsXG4gICAgICAgICAgcmVzb3VyY2VOYW1lXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZGVmaW5lSGFzTWFueUxvYWRNZXRob2Qoe1xuICAgICAgICAgIGZvcmVpZ25LZXksXG4gICAgICAgICAgbG9hZE1ldGhvZE5hbWUsXG4gICAgICAgICAgTW9kZWxDbGFzcyxcbiAgICAgICAgICBtb2RlbENsYXNzRGF0YSxcbiAgICAgICAgICBtb2RlbFJlY2lwZXNMb2FkZXIsXG4gICAgICAgICAgb3B0aW9uc1Rocm91Z2gsXG4gICAgICAgICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICByZXNvdXJjZU5hbWVcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kZWZpbmVFbnN1cmVBc3NvY2lhdGlvbkxvYWRlZE1ldGhvZCh7ZW5zdXJlTWV0aG9kTmFtZSwgTW9kZWxDbGFzcywgcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJoYXNfb25lXCIpIHtcbiAgICAgICAgdGhpcy5kZWZpbmVIYXNPbmVHZXRNZXRoZCh7TW9kZWxDbGFzcywgbW9kZWxNZXRob2ROYW1lLCByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICAgICAgdGhpcy5kZWZpbmVIYXNPbmVMb2FkTWV0aG9kKHtcbiAgICAgICAgICBhY3RpdmVSZWNvcmRQcmltYXJ5S2V5LFxuICAgICAgICAgIGZvcmVpZ25LZXksXG4gICAgICAgICAgbG9hZE1ldGhvZE5hbWUsXG4gICAgICAgICAgTW9kZWxDbGFzcyxcbiAgICAgICAgICBtb2RlbENsYXNzRGF0YSxcbiAgICAgICAgICBtb2RlbFJlY2lwZXNMb2FkZXIsXG4gICAgICAgICAgb3B0aW9uc1Rocm91Z2gsXG4gICAgICAgICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICByZXNvdXJjZU5hbWVcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kZWZpbmVFbnN1cmVBc3NvY2lhdGlvbkxvYWRlZE1ldGhvZCh7ZW5zdXJlTWV0aG9kTmFtZSwgTW9kZWxDbGFzcywgcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVsYXRpb25zaGlwIHR5cGU6ICR7dHlwZX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBkZWZpbmVFbnN1cmVBc3NvY2lhdGlvbkxvYWRlZE1ldGhvZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHJvb3QwXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5lbnN1cmVNZXRob2ROYW1lXG4gICAqIEBwYXJhbSB7TW9kZWxDbGFzc0xpa2V9IHJvb3QwLk1vZGVsQ2xhc3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3QwLnJlbGF0aW9uc2hpcE5hbWVcbiAgICovXG4gIGRlZmluZUVuc3VyZUFzc29jaWF0aW9uTG9hZGVkTWV0aG9kICh7ZW5zdXJlTWV0aG9kTmFtZSwgTW9kZWxDbGFzcywgcmVsYXRpb25zaGlwTmFtZX0pIHtcbiAgICBNb2RlbENsYXNzLnByb3RvdHlwZVtlbnN1cmVNZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuc3VyZUFzc29jaWF0aW9uTG9hZGVkKHJlbGF0aW9uc2hpcE5hbWUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGRlZmluZUJlbG9uZ3NUb0dldE1ldGhvZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHJvb3QwXG4gICAqIEBwYXJhbSB7TW9kZWxDbGFzc0xpa2V9IHJvb3QwLk1vZGVsQ2xhc3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3QwLm1vZGVsTWV0aG9kTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdDAucmVsYXRpb25zaGlwTmFtZVxuICAgKi9cbiAgZGVmaW5lQmVsb25nc1RvR2V0TWV0aG9kICh7TW9kZWxDbGFzcywgbW9kZWxNZXRob2ROYW1lLCByZWxhdGlvbnNoaXBOYW1lfSkge1xuICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW21vZGVsTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZEJlbG9uZ3NUb1JlZmxlY3Rpb24oe3JlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZGVmaW5lQmVsb25nc1RvTG9hZE1ldGhvZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHJvb3QwXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5mb3JlaWduS2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5rbGFzc1ByaW1hcnlLZXlcbiAgICogQHBhcmFtIHtNb2RlbENsYXNzTGlrZX0gcm9vdDAuTW9kZWxDbGFzc1xuICAgKiBAcGFyYW0ge01vZGVsUmVjaXBlc0xvYWRlckxpa2V9IHJvb3QwLm1vZGVsUmVjaXBlc0xvYWRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdDAubG9hZE1ldGhvZE5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHJvb3QwLm9wdGlvbnNQcmltYXJ5S2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5yZWxhdGlvbnNoaXBOYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5yZXNvdXJjZU5hbWVcbiAgICovXG4gIGRlZmluZUJlbG9uZ3NUb0xvYWRNZXRob2QgKHtmb3JlaWduS2V5LCBrbGFzc1ByaW1hcnlLZXksIE1vZGVsQ2xhc3MsIG1vZGVsUmVjaXBlc0xvYWRlciwgbG9hZE1ldGhvZE5hbWUsIG9wdGlvbnNQcmltYXJ5S2V5LCByZWxhdGlvbnNoaXBOYW1lLCByZXNvdXJjZU5hbWV9KSB7XG4gICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbG9hZE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZm9yZWlnbktleU1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGZvcmVpZ25LZXksIHRydWUpXG5cbiAgICAgIGlmICghKGZvcmVpZ25LZXlNZXRob2ROYW1lIGluIHRoaXMpKSB0aHJvdyBuZXcgRXJyb3IoYEZvcmVpZ24ga2V5IG1ldGhvZCB3YXNuJ3QgZGVmaW5lZDogJHtmb3JlaWduS2V5TWV0aG9kTmFtZX1gKVxuXG4gICAgICBjb25zdCBpZCA9IHRoaXNbZm9yZWlnbktleU1ldGhvZE5hbWVdKClcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbFJlY2lwZXNMb2FkZXIuZ2V0TW9kZWxDbGFzcyhyZXNvdXJjZU5hbWUpXG4gICAgICBjb25zdCByYW5zYWNrID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2NvbGxlY3Rpb24uanNcIikuQ29sbGVjdGlvblJhbnNhY2tQYXJhbXN9ICovICh7fSlcbiAgICAgIGNvbnN0IHJhbnNhY2tJZFNlYXJjaEtleSA9IGAke29wdGlvbnNQcmltYXJ5S2V5IHx8IGtsYXNzUHJpbWFyeUtleX1fZXFgXG5cbiAgICAgIHJhbnNhY2tbcmFuc2Fja0lkU2VhcmNoS2V5XSA9IGlkXG5cbiAgICAgIHJldHVybiB0aGlzLl9sb2FkQmVsb25nc1RvUmVmbGVjdGlvbihcbiAgICAgICAge3JlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lLCBtb2RlbDogdGhpcywgbW9kZWxDbGFzc30sXG4gICAgICAgIHtyYW5zYWNrfVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGRlZmluZUhhc01hbnlHZXRNZXRob2QgKHtcbiAgICBhY3RpdmVSZWNvcmROYW1lLFxuICAgIGNsYXNzTmFtZSxcbiAgICBmb3JlaWduS2V5LFxuICAgIE1vZGVsQ2xhc3MsXG4gICAgbW9kZWxNZXRob2ROYW1lLFxuICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICBvcHRpb25zQXMsXG4gICAgb3B0aW9uc1ByaW1hcnlLZXksXG4gICAgb3B0aW9uc1Rocm91Z2gsXG4gICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICByZXNvdXJjZU5hbWVcbiAgfSkge1xuICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW21vZGVsTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMucHJpbWFyeUtleSgpXG4gICAgICBjb25zdCBtb2RlbENsYXNzID0gbW9kZWxSZWNpcGVzTG9hZGVyLmdldE1vZGVsQ2xhc3MocmVzb3VyY2VOYW1lKVxuICAgICAgY29uc3QgcmFuc2FjayA9IHt9XG5cbiAgICAgIHJhbnNhY2tbYCR7Zm9yZWlnbktleX1fZXFgXSA9IGlkXG5cbiAgICAgIGNvbnN0IGhhc01hbnlQYXJhbWV0ZXJzID0ge1xuICAgICAgICByZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgIG1vZGVsTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBtb2RlbENsYXNzXG4gICAgICB9XG5cbiAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnNcblxuICAgICAgaWYgKG9wdGlvbnNUaHJvdWdoKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHRocm91Z2g6IHtcbiAgICAgICAgICAgICAgbW9kZWw6IGFjdGl2ZVJlY29yZE5hbWUsXG4gICAgICAgICAgICAgIGlkOiB0aGlzLnByaW1hcnlLZXkoKSxcbiAgICAgICAgICAgICAgcmVmbGVjdGlvbjogcmVsYXRpb25zaGlwTmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmFuc2FjayA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9jb2xsZWN0aW9uLmpzXCIpLkNvbGxlY3Rpb25SYW5zYWNrUGFyYW1zfSAqLyAoe30pXG4gICAgICAgIGNvbnN0IHByaW1hcnlLZXlDb2x1bW5OYW1lID0gb3B0aW9uc1ByaW1hcnlLZXkgfHwgZGlnZyhNb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwicHJpbWFyeUtleVwiKVxuICAgICAgICBjb25zdCBwcmltYXJ5S2V5TWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUocHJpbWFyeUtleUNvbHVtbk5hbWUsIHRydWUpXG5cbiAgICAgICAgaWYgKCEocHJpbWFyeUtleU1ldGhvZE5hbWUgaW4gdGhpcykpIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBwcmltYXJ5IGtleSBtZXRob2Q6ICR7cHJpbWFyeUtleU1ldGhvZE5hbWV9YClcblxuICAgICAgICByYW5zYWNrW2Ake2ZvcmVpZ25LZXl9X2VxYF0gPSB0aGlzW3ByaW1hcnlLZXlNZXRob2ROYW1lXSgpXG5cbiAgICAgICAgaWYgKG9wdGlvbnNBcykge1xuICAgICAgICAgIHJhbnNhY2tbYCR7b3B0aW9uc0FzfV90eXBlX2VxYF0gPSBhY3RpdmVSZWNvcmROYW1lXG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSB7cmFuc2Fja31cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKGhhc01hbnlQYXJhbWV0ZXJzLCBxdWVyeVBhcmFtZXRlcnMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGRlZmluZUhhc01hbnlMb2FkTWV0aG9kLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcm9vdDBcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3QwLmZvcmVpZ25LZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3QwLmxvYWRNZXRob2ROYW1lXG4gICAqIEBwYXJhbSB7TW9kZWxDbGFzc0xpa2V9IHJvb3QwLk1vZGVsQ2xhc3NcbiAgICogQHBhcmFtIHtNb2RlbFJlY2lwZUNsYXNzRGF0YX0gcm9vdDAubW9kZWxDbGFzc0RhdGFcbiAgICogQHBhcmFtIHtNb2RlbFJlY2lwZXNMb2FkZXJMaWtlfSByb290MC5tb2RlbFJlY2lwZXNMb2FkZXJcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHJvb3QwLm9wdGlvbnNUaHJvdWdoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5yZWxhdGlvbnNoaXBOYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5yZXNvdXJjZU5hbWVcbiAgICovXG4gIGRlZmluZUhhc01hbnlMb2FkTWV0aG9kICh7Zm9yZWlnbktleSwgbG9hZE1ldGhvZE5hbWUsIE1vZGVsQ2xhc3MsIG1vZGVsQ2xhc3NEYXRhLCBtb2RlbFJlY2lwZXNMb2FkZXIsIG9wdGlvbnNUaHJvdWdoLCByZWxhdGlvbnNoaXBOYW1lLCByZXNvdXJjZU5hbWV9KSB7XG4gICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbG9hZE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLnByaW1hcnlLZXkoKVxuICAgICAgY29uc3QgbW9kZWxDbGFzcyA9IG1vZGVsUmVjaXBlc0xvYWRlci5nZXRNb2RlbENsYXNzKHJlc291cmNlTmFtZSlcblxuICAgICAgaWYgKG9wdGlvbnNUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gZGlnZyhtb2RlbENsYXNzRGF0YSwgXCJjbGFzc05hbWVcIilcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZEhhc01hbnlSZWZsZWN0aW9uKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgICAgICBtb2RlbENsYXNzXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgdGhyb3VnaDoge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBtb2RlbENsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICByZWZsZWN0aW9uOiByZWxhdGlvbnNoaXBOYW1lXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhbnNhY2sgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vY29sbGVjdGlvbi5qc1wiKS5Db2xsZWN0aW9uUmFuc2Fja1BhcmFtc30gKi8gKHt9KVxuXG4gICAgICAgIHJhbnNhY2tbYCR7Zm9yZWlnbktleX1fZXFgXSA9IGlkXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRIYXNNYW55UmVmbGVjdGlvbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICAgICAgbW9kZWxDbGFzc1xuICAgICAgICAgIH0sXG4gICAgICAgICAge3JhbnNhY2t9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZGVmaW5lSGFzT25lR2V0TWV0aGQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByb290MFxuICAgKiBAcGFyYW0ge01vZGVsQ2xhc3NMaWtlfSByb290MC5Nb2RlbENsYXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5tb2RlbE1ldGhvZE5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3QwLnJlbGF0aW9uc2hpcE5hbWVcbiAgICovXG4gIGRlZmluZUhhc09uZUdldE1ldGhkICh7TW9kZWxDbGFzcywgbW9kZWxNZXRob2ROYW1lLCByZWxhdGlvbnNoaXBOYW1lfSkge1xuICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW21vZGVsTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZEhhc09uZVJlZmxlY3Rpb24oe3JlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICB9XG4gIH1cblxuICBkZWZpbmVIYXNPbmVMb2FkTWV0aG9kICh7XG4gICAgYWN0aXZlUmVjb3JkUHJpbWFyeUtleSxcbiAgICBmb3JlaWduS2V5LFxuICAgIGxvYWRNZXRob2ROYW1lLFxuICAgIE1vZGVsQ2xhc3MsXG4gICAgbW9kZWxDbGFzc0RhdGEsXG4gICAgbW9kZWxSZWNpcGVzTG9hZGVyLFxuICAgIG9wdGlvbnNUaHJvdWdoLFxuICAgIHJlbGF0aW9uc2hpcE5hbWUsXG4gICAgcmVzb3VyY2VOYW1lXG4gIH0pIHtcbiAgICBNb2RlbENsYXNzLnByb3RvdHlwZVtsb2FkTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwcmltYXJ5S2V5TWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYWN0aXZlUmVjb3JkUHJpbWFyeUtleSwgdHJ1ZSlcblxuICAgICAgaWYgKCEocHJpbWFyeUtleU1ldGhvZE5hbWUgaW4gdGhpcykpIHRocm93IG5ldyBFcnJvcihgUHJpbWFyeSBrZXkgbWV0aG9kIHdhc24ndCBkZWZpbmVkOiAke3ByaW1hcnlLZXlNZXRob2ROYW1lfWApXG5cbiAgICAgIGNvbnN0IGlkID0gdGhpc1twcmltYXJ5S2V5TWV0aG9kTmFtZV0oKVxuICAgICAgY29uc3QgbW9kZWxDbGFzcyA9IG1vZGVsUmVjaXBlc0xvYWRlci5nZXRNb2RlbENsYXNzKHJlc291cmNlTmFtZSlcblxuICAgICAgaWYgKG9wdGlvbnNUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gZGlnZyhtb2RlbENsYXNzRGF0YSwgXCJjbGFzc05hbWVcIilcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZEhhc09uZVJlZmxlY3Rpb24oXG4gICAgICAgICAge3JlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lLCBtb2RlbDogdGhpcywgbW9kZWxDbGFzc30sXG4gICAgICAgICAge3BhcmFtczoge3Rocm91Z2g6IHttb2RlbDogbW9kZWxDbGFzc05hbWUsIGlkLCByZWZsZWN0aW9uOiByZWxhdGlvbnNoaXBOYW1lfX19XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhbnNhY2sgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vY29sbGVjdGlvbi5qc1wiKS5Db2xsZWN0aW9uUmFuc2Fja1BhcmFtc30gKi8gKHt9KVxuXG4gICAgICAgIHJhbnNhY2tbYCR7Zm9yZWlnbktleX1fZXFgXSA9IGlkXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRIYXNPbmVSZWZsZWN0aW9uKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgICAgICBtb2RlbENsYXNzXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7cmFuc2Fja31cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|