@jigx/core-sdk 1.0.0
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/CHANGELOG.md +95 -0
- package/README.md +87 -0
- package/dist/PACKAGE.d.ts +4 -0
- package/dist/PACKAGE.d.ts.map +1 -0
- package/dist/PACKAGE.js +5 -0
- package/dist/abstract/app-info.d.ts +8 -0
- package/dist/abstract/app-info.d.ts.map +1 -0
- package/dist/abstract/app-info.js +8 -0
- package/dist/abstract/app-name.d.ts +15 -0
- package/dist/abstract/app-name.d.ts.map +1 -0
- package/dist/abstract/app-name.js +28 -0
- package/dist/abstract/base-builder.d.ts +4 -0
- package/dist/abstract/base-builder.d.ts.map +1 -0
- package/dist/abstract/base-builder.js +3 -0
- package/dist/abstract/element-base-builder.d.ts +7 -0
- package/dist/abstract/element-base-builder.d.ts.map +1 -0
- package/dist/abstract/element-base-builder.js +11 -0
- package/dist/abstract/generic.d.ts +31 -0
- package/dist/abstract/generic.d.ts.map +1 -0
- package/dist/abstract/generic.js +2 -0
- package/dist/abstract/index.d.ts +12 -0
- package/dist/abstract/index.d.ts.map +1 -0
- package/dist/abstract/index.js +11 -0
- package/dist/abstract/register.d.ts +31 -0
- package/dist/abstract/register.d.ts.map +1 -0
- package/dist/abstract/register.js +48 -0
- package/dist/abstract/sdk.expression.d.ts +43 -0
- package/dist/abstract/sdk.expression.d.ts.map +1 -0
- package/dist/abstract/sdk.expression.js +175 -0
- package/dist/abstract/sdk.text.d.ts +23 -0
- package/dist/abstract/sdk.text.d.ts.map +1 -0
- package/dist/abstract/sdk.text.js +110 -0
- package/dist/abstract/sdk.types.d.ts +16 -0
- package/dist/abstract/sdk.types.d.ts.map +1 -0
- package/dist/abstract/sdk.types.js +88 -0
- package/dist/abstract/zod.strata.d.ts +17 -0
- package/dist/abstract/zod.strata.d.ts.map +1 -0
- package/dist/abstract/zod.strata.js +11 -0
- package/dist/abstract/zod.types.d.ts +1937 -0
- package/dist/abstract/zod.types.d.ts.map +1 -0
- package/dist/abstract/zod.types.js +848 -0
- package/dist/action/action-definition.builder.d.ts +16 -0
- package/dist/action/action-definition.builder.d.ts.map +1 -0
- package/dist/action/action-definition.builder.js +35 -0
- package/dist/action/action.descriptor.d.ts +8 -0
- package/dist/action/action.descriptor.d.ts.map +1 -0
- package/dist/action/action.descriptor.js +2 -0
- package/dist/action/index.d.ts +57 -0
- package/dist/action/index.d.ts.map +1 -0
- package/dist/action/index.js +48 -0
- package/dist/action/ja.abstract.d.ts +33 -0
- package/dist/action/ja.abstract.d.ts.map +1 -0
- package/dist/action/ja.abstract.js +58 -0
- package/dist/action/ja.action-definition.d.ts +11 -0
- package/dist/action/ja.action-definition.d.ts.map +1 -0
- package/dist/action/ja.action-definition.js +12 -0
- package/dist/action/ja.action-list.d.ts +9 -0
- package/dist/action/ja.action-list.d.ts.map +1 -0
- package/dist/action/ja.action-list.js +15 -0
- package/dist/action/ja.clear-queue.d.ts +9 -0
- package/dist/action/ja.clear-queue.d.ts.map +1 -0
- package/dist/action/ja.clear-queue.js +9 -0
- package/dist/action/ja.color.d.ts +3 -0
- package/dist/action/ja.color.d.ts.map +1 -0
- package/dist/action/ja.color.js +2 -0
- package/dist/action/ja.confirm.abstract.d.ts +16 -0
- package/dist/action/ja.confirm.abstract.d.ts.map +1 -0
- package/dist/action/ja.confirm.abstract.js +25 -0
- package/dist/action/ja.confirm.d.ts +23 -0
- package/dist/action/ja.confirm.d.ts.map +1 -0
- package/dist/action/ja.confirm.js +28 -0
- package/dist/action/ja.delete-queue-command.d.ts +9 -0
- package/dist/action/ja.delete-queue-command.d.ts.map +1 -0
- package/dist/action/ja.delete-queue-command.js +9 -0
- package/dist/action/ja.delete-sync-scope.d.ts +10 -0
- package/dist/action/ja.delete-sync-scope.d.ts.map +1 -0
- package/dist/action/ja.delete-sync-scope.js +14 -0
- package/dist/action/ja.delete-sync-status.d.ts +9 -0
- package/dist/action/ja.delete-sync-status.d.ts.map +1 -0
- package/dist/action/ja.delete-sync-status.js +9 -0
- package/dist/action/ja.evaluate.d.ts +12 -0
- package/dist/action/ja.evaluate.d.ts.map +1 -0
- package/dist/action/ja.evaluate.js +9 -0
- package/dist/action/ja.execute-action.d.ts +11 -0
- package/dist/action/ja.execute-action.d.ts.map +1 -0
- package/dist/action/ja.execute-action.js +15 -0
- package/dist/action/ja.execute-entities.d.ts +7 -0
- package/dist/action/ja.execute-entities.d.ts.map +1 -0
- package/dist/action/ja.execute-entities.js +8 -0
- package/dist/action/ja.execute-entity.abstract.d.ts +41 -0
- package/dist/action/ja.execute-entity.abstract.d.ts.map +1 -0
- package/dist/action/ja.execute-entity.abstract.js +104 -0
- package/dist/action/ja.execute-entity.d.ts +6 -0
- package/dist/action/ja.execute-entity.d.ts.map +1 -0
- package/dist/action/ja.execute-entity.dynamic-data.d.ts +6 -0
- package/dist/action/ja.execute-entity.dynamic-data.d.ts.map +1 -0
- package/dist/action/ja.execute-entity.dynamic-data.js +2 -0
- package/dist/action/ja.execute-entity.generic.d.ts +11 -0
- package/dist/action/ja.execute-entity.generic.d.ts.map +1 -0
- package/dist/action/ja.execute-entity.generic.js +2 -0
- package/dist/action/ja.execute-entity.js +8 -0
- package/dist/action/ja.execute-entity.sql.d.ts +12 -0
- package/dist/action/ja.execute-entity.sql.d.ts.map +1 -0
- package/dist/action/ja.execute-entity.sql.js +2 -0
- package/dist/action/ja.execute-sql.abstract.d.ts +6 -0
- package/dist/action/ja.execute-sql.abstract.d.ts.map +1 -0
- package/dist/action/ja.execute-sql.abstract.js +2 -0
- package/dist/action/ja.execute-sql.d.ts +16 -0
- package/dist/action/ja.execute-sql.d.ts.map +1 -0
- package/dist/action/ja.execute-sql.js +64 -0
- package/dist/action/ja.find-replace.d.ts +12 -0
- package/dist/action/ja.find-replace.d.ts.map +1 -0
- package/dist/action/ja.find-replace.js +22 -0
- package/dist/action/ja.generate-file.d.ts +11 -0
- package/dist/action/ja.generate-file.d.ts.map +1 -0
- package/dist/action/ja.generate-file.js +19 -0
- package/dist/action/ja.generate-pdf.d.ts +10 -0
- package/dist/action/ja.generate-pdf.d.ts.map +1 -0
- package/dist/action/ja.generate-pdf.js +10 -0
- package/dist/action/ja.go-back.d.ts +9 -0
- package/dist/action/ja.go-back.d.ts.map +1 -0
- package/dist/action/ja.go-back.js +11 -0
- package/dist/action/ja.go-to.d.ts +18 -0
- package/dist/action/ja.go-to.d.ts.map +1 -0
- package/dist/action/ja.go-to.js +41 -0
- package/dist/action/ja.in-background.d.ts +95 -0
- package/dist/action/ja.in-background.d.ts.map +1 -0
- package/dist/action/ja.in-background.factory.d.ts +88 -0
- package/dist/action/ja.in-background.factory.d.ts.map +1 -0
- package/dist/action/ja.in-background.factory.js +98 -0
- package/dist/action/ja.in-background.js +247 -0
- package/dist/action/ja.info-modal.d.ts +37 -0
- package/dist/action/ja.info-modal.d.ts.map +1 -0
- package/dist/action/ja.info-modal.js +61 -0
- package/dist/action/ja.jig-actions.d.ts +16 -0
- package/dist/action/ja.jig-actions.d.ts.map +1 -0
- package/dist/action/ja.jig-actions.js +35 -0
- package/dist/action/ja.on-button.factory.d.ts +89 -0
- package/dist/action/ja.on-button.factory.d.ts.map +1 -0
- package/dist/action/ja.on-button.factory.js +86 -0
- package/dist/action/ja.open-app-settings.d.ts +6 -0
- package/dist/action/ja.open-app-settings.d.ts.map +1 -0
- package/dist/action/ja.open-app-settings.js +8 -0
- package/dist/action/ja.open-map.abstract.d.ts +6 -0
- package/dist/action/ja.open-map.abstract.d.ts.map +1 -0
- package/dist/action/ja.open-map.abstract.js +2 -0
- package/dist/action/ja.open-map.d.ts +11 -0
- package/dist/action/ja.open-map.d.ts.map +1 -0
- package/dist/action/ja.open-map.js +25 -0
- package/dist/action/ja.open-media-picker.abstract.d.ts +8 -0
- package/dist/action/ja.open-media-picker.abstract.d.ts.map +1 -0
- package/dist/action/ja.open-media-picker.abstract.js +2 -0
- package/dist/action/ja.open-media-picker.d.ts +18 -0
- package/dist/action/ja.open-media-picker.d.ts.map +1 -0
- package/dist/action/ja.open-media-picker.js +46 -0
- package/dist/action/ja.open-scanner.d.ts +14 -0
- package/dist/action/ja.open-scanner.d.ts.map +1 -0
- package/dist/action/ja.open-scanner.js +23 -0
- package/dist/action/ja.open-url.d.ts +10 -0
- package/dist/action/ja.open-url.d.ts.map +1 -0
- package/dist/action/ja.open-url.js +13 -0
- package/dist/action/ja.print.d.ts +10 -0
- package/dist/action/ja.print.d.ts.map +1 -0
- package/dist/action/ja.print.js +17 -0
- package/dist/action/ja.reset-application-state.d.ts +9 -0
- package/dist/action/ja.reset-application-state.d.ts.map +1 -0
- package/dist/action/ja.reset-application-state.js +12 -0
- package/dist/action/ja.reset-component-state.d.ts +9 -0
- package/dist/action/ja.reset-component-state.d.ts.map +1 -0
- package/dist/action/ja.reset-component-state.js +13 -0
- package/dist/action/ja.reset-screen-state.d.ts +9 -0
- package/dist/action/ja.reset-screen-state.d.ts.map +1 -0
- package/dist/action/ja.reset-screen-state.js +12 -0
- package/dist/action/ja.reset-state.d.ts +9 -0
- package/dist/action/ja.reset-state.d.ts.map +1 -0
- package/dist/action/ja.reset-state.js +13 -0
- package/dist/action/ja.retry-queue-command.d.ts +9 -0
- package/dist/action/ja.retry-queue-command.d.ts.map +1 -0
- package/dist/action/ja.retry-queue-command.js +9 -0
- package/dist/action/ja.sdk.d.ts +4 -0
- package/dist/action/ja.sdk.d.ts.map +1 -0
- package/dist/action/ja.sdk.js +2 -0
- package/dist/action/ja.set-active-tab.d.ts +13 -0
- package/dist/action/ja.set-active-tab.d.ts.map +1 -0
- package/dist/action/ja.set-active-tab.js +29 -0
- package/dist/action/ja.set-application-state.d.ts +9 -0
- package/dist/action/ja.set-application-state.d.ts.map +1 -0
- package/dist/action/ja.set-application-state.js +17 -0
- package/dist/action/ja.set-screen-state.d.ts +9 -0
- package/dist/action/ja.set-screen-state.d.ts.map +1 -0
- package/dist/action/ja.set-screen-state.js +12 -0
- package/dist/action/ja.share.d.ts +12 -0
- package/dist/action/ja.share.d.ts.map +1 -0
- package/dist/action/ja.share.js +23 -0
- package/dist/action/ja.show-alert.d.ts +33 -0
- package/dist/action/ja.show-alert.d.ts.map +1 -0
- package/dist/action/ja.show-alert.js +61 -0
- package/dist/action/ja.start-location-sharing.abstract.d.ts +6 -0
- package/dist/action/ja.start-location-sharing.abstract.d.ts.map +1 -0
- package/dist/action/ja.start-location-sharing.abstract.js +2 -0
- package/dist/action/ja.start-location-sharing.d.ts +18 -0
- package/dist/action/ja.start-location-sharing.d.ts.map +1 -0
- package/dist/action/ja.start-location-sharing.js +33 -0
- package/dist/action/ja.start-sync-scope.d.ts +9 -0
- package/dist/action/ja.start-sync-scope.d.ts.map +1 -0
- package/dist/action/ja.start-sync-scope.js +18 -0
- package/dist/action/ja.stop-location-sharing.d.ts +6 -0
- package/dist/action/ja.stop-location-sharing.d.ts.map +1 -0
- package/dist/action/ja.stop-location-sharing.js +8 -0
- package/dist/action/ja.submit-form.abstract.d.ts +11 -0
- package/dist/action/ja.submit-form.abstract.d.ts.map +1 -0
- package/dist/action/ja.submit-form.abstract.js +2 -0
- package/dist/action/ja.submit-form.d.ts +31 -0
- package/dist/action/ja.submit-form.d.ts.map +1 -0
- package/dist/action/ja.submit-form.js +124 -0
- package/dist/action/ja.swipeable-action.d.ts +19 -0
- package/dist/action/ja.swipeable-action.d.ts.map +1 -0
- package/dist/action/ja.swipeable-action.js +25 -0
- package/dist/action/ja.sync-entities.abstract.d.ts +25 -0
- package/dist/action/ja.sync-entities.abstract.d.ts.map +1 -0
- package/dist/action/ja.sync-entities.abstract.js +2 -0
- package/dist/action/ja.sync-entities.d.ts +32 -0
- package/dist/action/ja.sync-entities.d.ts.map +1 -0
- package/dist/action/ja.sync-entities.js +142 -0
- package/dist/action/ja.update-profile.d.ts +12 -0
- package/dist/action/ja.update-profile.d.ts.map +1 -0
- package/dist/action/ja.update-profile.js +20 -0
- package/dist/application/application.sdk.d.ts +84 -0
- package/dist/application/application.sdk.d.ts.map +1 -0
- package/dist/application/application.sdk.js +217 -0
- package/dist/application/application.tab.d.ts +20 -0
- package/dist/application/application.tab.d.ts.map +1 -0
- package/dist/application/application.tab.js +45 -0
- package/dist/application/context.sdk.d.ts +48 -0
- package/dist/application/context.sdk.d.ts.map +1 -0
- package/dist/application/context.sdk.js +116 -0
- package/dist/application/index.d.ts +4 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +4 -0
- package/dist/assets/example-extraction-cache.json +9 -0
- package/dist/assets/extracted-core-sdk-examples.yaml +44440 -0
- package/dist/assets/extracted-core-sdk-types.yaml +12100 -0
- package/dist/assets/stream-line-icons.csv +19281 -0
- package/dist/assets/type-extraction-cache.json +9 -0
- package/dist/builder/application-analyzer/application-analyzer.d.ts +42 -0
- package/dist/builder/application-analyzer/application-analyzer.d.ts.map +1 -0
- package/dist/builder/application-analyzer/application-analyzer.js +150 -0
- package/dist/builder/application-analyzer/create-application-analyzer.d.ts +17 -0
- package/dist/builder/application-analyzer/create-application-analyzer.d.ts.map +1 -0
- package/dist/builder/application-analyzer/create-application-analyzer.js +121 -0
- package/dist/builder/application-analyzer/index.d.ts +5 -0
- package/dist/builder/application-analyzer/index.d.ts.map +1 -0
- package/dist/builder/application-analyzer/index.js +5 -0
- package/dist/builder/application-analyzer/select-component-nodes.d.ts +7 -0
- package/dist/builder/application-analyzer/select-component-nodes.d.ts.map +1 -0
- package/dist/builder/application-analyzer/select-component-nodes.js +15 -0
- package/dist/builder/application-analyzer/select-datasource-node-by-id.d.ts +8 -0
- package/dist/builder/application-analyzer/select-datasource-node-by-id.d.ts.map +1 -0
- package/dist/builder/application-analyzer/select-datasource-node-by-id.js +20 -0
- package/dist/builder/application-analyzer/types.d.ts +60 -0
- package/dist/builder/application-analyzer/types.d.ts.map +1 -0
- package/dist/builder/application-analyzer/types.js +16 -0
- package/dist/builder/application-analyzer/utils.d.ts +3 -0
- package/dist/builder/application-analyzer/utils.d.ts.map +1 -0
- package/dist/builder/application-analyzer/utils.js +8 -0
- package/dist/builder/builder.d.ts +8 -0
- package/dist/builder/builder.d.ts.map +1 -0
- package/dist/builder/builder.js +54 -0
- package/dist/builder/index.d.ts +5 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +4 -0
- package/dist/builder/transform-summary.d.ts +3 -0
- package/dist/builder/transform-summary.d.ts.map +1 -0
- package/dist/builder/transform-summary.js +39 -0
- package/dist/builder/types.d.ts +8 -0
- package/dist/builder/types.d.ts.map +1 -0
- package/dist/builder/types.js +2 -0
- package/dist/builder/validate-datasource-ids.d.ts +17 -0
- package/dist/builder/validate-datasource-ids.d.ts.map +1 -0
- package/dist/builder/validate-datasource-ids.js +51 -0
- package/dist/component/common/index.d.ts +22 -0
- package/dist/component/common/index.d.ts.map +1 -0
- package/dist/component/common/index.js +16 -0
- package/dist/component/common/jc.avatar-field.types.d.ts +9 -0
- package/dist/component/common/jc.avatar-field.types.d.ts.map +1 -0
- package/dist/component/common/jc.avatar-field.types.js +11 -0
- package/dist/component/common/jc.chart.common.abstract.d.ts +85 -0
- package/dist/component/common/jc.chart.common.abstract.d.ts.map +1 -0
- package/dist/component/common/jc.chart.common.abstract.js +2 -0
- package/dist/component/common/jc.chart.common.builders.d.ts +37 -0
- package/dist/component/common/jc.chart.common.builders.d.ts.map +1 -0
- package/dist/component/common/jc.chart.common.builders.js +81 -0
- package/dist/component/common/jc.component.types.d.ts +101 -0
- package/dist/component/common/jc.component.types.d.ts.map +1 -0
- package/dist/component/common/jc.component.types.js +144 -0
- package/dist/component/common/jc.context.d.ts +7 -0
- package/dist/component/common/jc.context.d.ts.map +1 -0
- package/dist/component/common/jc.context.js +2 -0
- package/dist/component/common/jc.element.types.d.ts +14 -0
- package/dist/component/common/jc.element.types.d.ts.map +1 -0
- package/dist/component/common/jc.element.types.js +13 -0
- package/dist/component/common/jc.field-base.builder.d.ts +21 -0
- package/dist/component/common/jc.field-base.builder.d.ts.map +1 -0
- package/dist/component/common/jc.field-base.builder.js +101 -0
- package/dist/component/common/jc.field-base.types.d.ts +28 -0
- package/dist/component/common/jc.field-base.types.d.ts.map +1 -0
- package/dist/component/common/jc.field-base.types.js +2 -0
- package/dist/component/common/jc.left-right.element.avatar.d.ts +11 -0
- package/dist/component/common/jc.left-right.element.avatar.d.ts.map +1 -0
- package/dist/component/common/jc.left-right.element.avatar.js +18 -0
- package/dist/component/common/jc.left-right.element.badge.d.ts +11 -0
- package/dist/component/common/jc.left-right.element.badge.d.ts.map +1 -0
- package/dist/component/common/jc.left-right.element.badge.js +17 -0
- package/dist/component/common/jc.left-right.element.button.d.ts +11 -0
- package/dist/component/common/jc.left-right.element.button.d.ts.map +1 -0
- package/dist/component/common/jc.left-right.element.button.js +14 -0
- package/dist/component/common/jc.left-right.element.checkbox.d.ts +13 -0
- package/dist/component/common/jc.left-right.element.checkbox.d.ts.map +1 -0
- package/dist/component/common/jc.left-right.element.checkbox.js +21 -0
- package/dist/component/common/jc.left-right.element.d.ts +31 -0
- package/dist/component/common/jc.left-right.element.d.ts.map +1 -0
- package/dist/component/common/jc.left-right.element.icon.d.ts +18 -0
- package/dist/component/common/jc.left-right.element.icon.d.ts.map +1 -0
- package/dist/component/common/jc.left-right.element.icon.js +32 -0
- package/dist/component/common/jc.left-right.element.image.d.ts +16 -0
- package/dist/component/common/jc.left-right.element.image.d.ts.map +1 -0
- package/dist/component/common/jc.left-right.element.image.js +29 -0
- package/dist/component/common/jc.left-right.element.js +2 -0
- package/dist/component/common/jc.left-right.element.progress.d.ts +11 -0
- package/dist/component/common/jc.left-right.element.progress.d.ts.map +1 -0
- package/dist/component/common/jc.left-right.element.progress.js +17 -0
- package/dist/component/common/jc.left-right.element.switch.d.ts +13 -0
- package/dist/component/common/jc.left-right.element.switch.d.ts.map +1 -0
- package/dist/component/common/jc.left-right.element.switch.js +21 -0
- package/dist/component/common/jc.left-right.element.value.d.ts +10 -0
- package/dist/component/common/jc.left-right.element.value.d.ts.map +1 -0
- package/dist/component/common/jc.left-right.element.value.js +12 -0
- package/dist/component/common/jc.picker-field-options.types.d.ts +13 -0
- package/dist/component/common/jc.picker-field-options.types.d.ts.map +1 -0
- package/dist/component/common/jc.picker-field-options.types.js +2 -0
- package/dist/component/common/jc.text.types.d.ts +6 -0
- package/dist/component/common/jc.text.types.d.ts.map +1 -0
- package/dist/component/common/jc.text.types.js +2 -0
- package/dist/component/common/jc.validation.d.ts +9 -0
- package/dist/component/common/jc.validation.d.ts.map +1 -0
- package/dist/component/common/jc.validation.js +48 -0
- package/dist/component/index.d.ts +86 -0
- package/dist/component/index.d.ts.map +1 -0
- package/dist/component/index.js +83 -0
- package/dist/component/jc.abstract.d.ts +32 -0
- package/dist/component/jc.abstract.d.ts.map +1 -0
- package/dist/component/jc.abstract.factory.d.ts +488 -0
- package/dist/component/jc.abstract.factory.d.ts.map +1 -0
- package/dist/component/jc.abstract.factory.js +757 -0
- package/dist/component/jc.abstract.js +53 -0
- package/dist/component/jc.abstract.utils.d.ts +3 -0
- package/dist/component/jc.abstract.utils.d.ts.map +1 -0
- package/dist/component/jc.abstract.utils.js +26 -0
- package/dist/component/jc.amount-control.d.ts +16 -0
- package/dist/component/jc.amount-control.d.ts.map +1 -0
- package/dist/component/jc.amount-control.js +36 -0
- package/dist/component/jc.avatar-field.d.ts +11 -0
- package/dist/component/jc.avatar-field.d.ts.map +1 -0
- package/dist/component/jc.avatar-field.js +27 -0
- package/dist/component/jc.avatar.d.ts +14 -0
- package/dist/component/jc.avatar.d.ts.map +1 -0
- package/dist/component/jc.avatar.js +26 -0
- package/dist/component/jc.banner.d.ts +81 -0
- package/dist/component/jc.banner.d.ts.map +1 -0
- package/dist/component/jc.banner.js +49 -0
- package/dist/component/jc.bar-chart.d.ts +23 -0
- package/dist/component/jc.bar-chart.d.ts.map +1 -0
- package/dist/component/jc.bar-chart.js +45 -0
- package/dist/component/jc.button.d.ts +20 -0
- package/dist/component/jc.button.d.ts.map +1 -0
- package/dist/component/jc.button.js +39 -0
- package/dist/component/jc.card.abstract.d.ts +14 -0
- package/dist/component/jc.card.abstract.d.ts.map +1 -0
- package/dist/component/jc.card.abstract.js +31 -0
- package/dist/component/jc.card.on-default.d.ts +91 -0
- package/dist/component/jc.card.on-default.d.ts.map +1 -0
- package/dist/component/jc.card.on-default.js +96 -0
- package/dist/component/jc.carousel.d.ts +31 -0
- package/dist/component/jc.carousel.d.ts.map +1 -0
- package/dist/component/jc.carousel.js +58 -0
- package/dist/component/jc.chat-message.d.ts +17 -0
- package/dist/component/jc.chat-message.d.ts.map +1 -0
- package/dist/component/jc.chat-message.js +32 -0
- package/dist/component/jc.chat.d.ts +23 -0
- package/dist/component/jc.chat.d.ts.map +1 -0
- package/dist/component/jc.chat.js +68 -0
- package/dist/component/jc.checkbox.d.ts +15 -0
- package/dist/component/jc.checkbox.d.ts.map +1 -0
- package/dist/component/jc.checkbox.js +38 -0
- package/dist/component/jc.choice-field-item.d.ts +15 -0
- package/dist/component/jc.choice-field-item.d.ts.map +1 -0
- package/dist/component/jc.choice-field-item.js +41 -0
- package/dist/component/jc.choice-field.d.ts +21 -0
- package/dist/component/jc.choice-field.d.ts.map +1 -0
- package/dist/component/jc.choice-field.js +34 -0
- package/dist/component/jc.count-down.d.ts +18 -0
- package/dist/component/jc.count-down.d.ts.map +1 -0
- package/dist/component/jc.count-down.js +55 -0
- package/dist/component/jc.count-up.d.ts +15 -0
- package/dist/component/jc.count-up.d.ts.map +1 -0
- package/dist/component/jc.count-up.js +42 -0
- package/dist/component/jc.custom-component.interop.d.ts +58 -0
- package/dist/component/jc.custom-component.interop.d.ts.map +1 -0
- package/dist/component/jc.custom-component.interop.js +115 -0
- package/dist/component/jc.date-picker.d.ts +15 -0
- package/dist/component/jc.date-picker.d.ts.map +1 -0
- package/dist/component/jc.date-picker.js +31 -0
- package/dist/component/jc.divider.d.ts +7 -0
- package/dist/component/jc.divider.d.ts.map +1 -0
- package/dist/component/jc.divider.js +8 -0
- package/dist/component/jc.dropdown.d.ts +20 -0
- package/dist/component/jc.dropdown.d.ts.map +1 -0
- package/dist/component/jc.dropdown.item.d.ts +22 -0
- package/dist/component/jc.dropdown.item.d.ts.map +1 -0
- package/dist/component/jc.dropdown.item.js +85 -0
- package/dist/component/jc.dropdown.js +33 -0
- package/dist/component/jc.duration-picker.d.ts +18 -0
- package/dist/component/jc.duration-picker.d.ts.map +1 -0
- package/dist/component/jc.duration-picker.js +35 -0
- package/dist/component/jc.email-field.d.ts +11 -0
- package/dist/component/jc.email-field.d.ts.map +1 -0
- package/dist/component/jc.email-field.js +19 -0
- package/dist/component/jc.entity-field.d.ts +23 -0
- package/dist/component/jc.entity-field.d.ts.map +1 -0
- package/dist/component/jc.entity-field.js +71 -0
- package/dist/component/jc.entity.d.ts +15 -0
- package/dist/component/jc.entity.d.ts.map +1 -0
- package/dist/component/jc.entity.js +27 -0
- package/dist/component/jc.event.d.ts +22 -0
- package/dist/component/jc.event.d.ts.map +1 -0
- package/dist/component/jc.event.js +68 -0
- package/dist/component/jc.expander.d.ts +49 -0
- package/dist/component/jc.expander.d.ts.map +1 -0
- package/dist/component/jc.expander.header.d.ts +25 -0
- package/dist/component/jc.expander.header.d.ts.map +1 -0
- package/dist/component/jc.expander.header.js +39 -0
- package/dist/component/jc.expander.js +53 -0
- package/dist/component/jc.field-row.d.ts +34 -0
- package/dist/component/jc.field-row.d.ts.map +1 -0
- package/dist/component/jc.field-row.entity.d.ts +12 -0
- package/dist/component/jc.field-row.entity.d.ts.map +1 -0
- package/dist/component/jc.field-row.entity.js +35 -0
- package/dist/component/jc.field-row.js +37 -0
- package/dist/component/jc.form.d.ts +98 -0
- package/dist/component/jc.form.d.ts.map +1 -0
- package/dist/component/jc.form.js +127 -0
- package/dist/component/jc.gallery-item.d.ts +12 -0
- package/dist/component/jc.gallery-item.d.ts.map +1 -0
- package/dist/component/jc.gallery-item.js +24 -0
- package/dist/component/jc.grid-item.d.ts +15 -0
- package/dist/component/jc.grid-item.d.ts.map +1 -0
- package/dist/component/jc.grid-item.js +31 -0
- package/dist/component/jc.grid.d.ts +16 -0
- package/dist/component/jc.grid.d.ts.map +1 -0
- package/dist/component/jc.grid.js +64 -0
- package/dist/component/jc.guards.d.ts +17 -0
- package/dist/component/jc.guards.d.ts.map +1 -0
- package/dist/component/jc.guards.js +14 -0
- package/dist/component/jc.icon.d.ts +19 -0
- package/dist/component/jc.icon.d.ts.map +1 -0
- package/dist/component/jc.icon.js +41 -0
- package/dist/component/jc.image.abstract.d.ts +28 -0
- package/dist/component/jc.image.abstract.d.ts.map +1 -0
- package/dist/component/jc.image.abstract.js +52 -0
- package/dist/component/jc.image.d.ts +5 -0
- package/dist/component/jc.image.d.ts.map +1 -0
- package/dist/component/jc.image.js +2 -0
- package/dist/component/jc.image.on-carousel.d.ts +23 -0
- package/dist/component/jc.image.on-carousel.d.ts.map +1 -0
- package/dist/component/jc.image.on-carousel.js +19 -0
- package/dist/component/jc.image.on-default.d.ts +25 -0
- package/dist/component/jc.image.on-default.d.ts.map +1 -0
- package/dist/component/jc.image.on-default.js +22 -0
- package/dist/component/jc.interactive-image.d.ts +41 -0
- package/dist/component/jc.interactive-image.d.ts.map +1 -0
- package/dist/component/jc.interactive-image.item.d.ts +24 -0
- package/dist/component/jc.interactive-image.item.d.ts.map +1 -0
- package/dist/component/jc.interactive-image.item.js +78 -0
- package/dist/component/jc.interactive-image.js +78 -0
- package/dist/component/jc.jig-header.d.ts +19 -0
- package/dist/component/jc.jig-header.d.ts.map +1 -0
- package/dist/component/jc.jig-header.js +42 -0
- package/dist/component/jc.jig-widget.d.ts +15 -0
- package/dist/component/jc.jig-widget.d.ts.map +1 -0
- package/dist/component/jc.jig-widget.js +41 -0
- package/dist/component/jc.jig.d.ts +11 -0
- package/dist/component/jc.jig.d.ts.map +1 -0
- package/dist/component/jc.jig.js +24 -0
- package/dist/component/jc.line-chart.d.ts +28 -0
- package/dist/component/jc.line-chart.d.ts.map +1 -0
- package/dist/component/jc.line-chart.js +45 -0
- package/dist/component/jc.list-item.d.ts +106 -0
- package/dist/component/jc.list-item.d.ts.map +1 -0
- package/dist/component/jc.list-item.js +274 -0
- package/dist/component/jc.list-item.standalone.d.ts +13 -0
- package/dist/component/jc.list-item.standalone.d.ts.map +1 -0
- package/dist/component/jc.list-item.standalone.js +10 -0
- package/dist/component/jc.list.abstract.d.ts +36 -0
- package/dist/component/jc.list.abstract.d.ts.map +1 -0
- package/dist/component/jc.list.abstract.js +2 -0
- package/dist/component/jc.list.d.ts +39 -0
- package/dist/component/jc.list.d.ts.map +1 -0
- package/dist/component/jc.list.js +95 -0
- package/dist/component/jc.location.d.ts +41 -0
- package/dist/component/jc.location.d.ts.map +1 -0
- package/dist/component/jc.location.js +63 -0
- package/dist/component/jc.marker-item.d.ts +29 -0
- package/dist/component/jc.marker-item.d.ts.map +1 -0
- package/dist/component/jc.marker-item.js +48 -0
- package/dist/component/jc.media-field.d.ts +13 -0
- package/dist/component/jc.media-field.d.ts.map +1 -0
- package/dist/component/jc.media-field.js +37 -0
- package/dist/component/jc.menu-item.d.ts +89 -0
- package/dist/component/jc.menu-item.d.ts.map +1 -0
- package/dist/component/jc.menu-item.js +65 -0
- package/dist/component/jc.number-field.d.ts +21 -0
- package/dist/component/jc.number-field.d.ts.map +1 -0
- package/dist/component/jc.number-field.js +33 -0
- package/dist/component/jc.pie-chart.d.ts +26 -0
- package/dist/component/jc.pie-chart.d.ts.map +1 -0
- package/dist/component/jc.pie-chart.js +45 -0
- package/dist/component/jc.product-item.amount.d.ts +17 -0
- package/dist/component/jc.product-item.amount.d.ts.map +1 -0
- package/dist/component/jc.product-item.amount.js +31 -0
- package/dist/component/jc.product-item.d.ts +30 -0
- package/dist/component/jc.product-item.d.ts.map +1 -0
- package/dist/component/jc.product-item.js +68 -0
- package/dist/component/jc.progress-bar.d.ts +45 -0
- package/dist/component/jc.progress-bar.d.ts.map +1 -0
- package/dist/component/jc.progress-bar.js +58 -0
- package/dist/component/jc.rating.d.ts +17 -0
- package/dist/component/jc.rating.d.ts.map +1 -0
- package/dist/component/jc.rating.js +38 -0
- package/dist/component/jc.section.abstract.d.ts +87 -0
- package/dist/component/jc.section.abstract.d.ts.map +1 -0
- package/dist/component/jc.section.abstract.js +33 -0
- package/dist/component/jc.section.on-default.d.ts +85 -0
- package/dist/component/jc.section.on-default.d.ts.map +1 -0
- package/dist/component/jc.section.on-default.js +85 -0
- package/dist/component/jc.section.on-entity.d.ts +11 -0
- package/dist/component/jc.section.on-entity.d.ts.map +1 -0
- package/dist/component/jc.section.on-entity.js +11 -0
- package/dist/component/jc.segmented-control.d.ts +23 -0
- package/dist/component/jc.segmented-control.d.ts.map +1 -0
- package/dist/component/jc.segmented-control.js +66 -0
- package/dist/component/jc.signature-field.d.ts +11 -0
- package/dist/component/jc.signature-field.d.ts.map +1 -0
- package/dist/component/jc.signature-field.js +18 -0
- package/dist/component/jc.slider.d.ts +36 -0
- package/dist/component/jc.slider.d.ts.map +1 -0
- package/dist/component/jc.slider.js +53 -0
- package/dist/component/jc.stage.d.ts +23 -0
- package/dist/component/jc.stage.d.ts.map +1 -0
- package/dist/component/jc.stage.js +31 -0
- package/dist/component/jc.step.d.ts +30 -0
- package/dist/component/jc.step.d.ts.map +1 -0
- package/dist/component/jc.step.js +35 -0
- package/dist/component/jc.stepper.d.ts +34 -0
- package/dist/component/jc.stepper.d.ts.map +1 -0
- package/dist/component/jc.stepper.js +59 -0
- package/dist/component/jc.story-group.d.ts +18 -0
- package/dist/component/jc.story-group.d.ts.map +1 -0
- package/dist/component/jc.story-group.js +27 -0
- package/dist/component/jc.summary.abstract.d.ts +15 -0
- package/dist/component/jc.summary.abstract.d.ts.map +1 -0
- package/dist/component/jc.summary.abstract.js +29 -0
- package/dist/component/jc.summary.card.d.ts +14 -0
- package/dist/component/jc.summary.card.d.ts.map +1 -0
- package/dist/component/jc.summary.card.js +36 -0
- package/dist/component/jc.summary.counter.d.ts +12 -0
- package/dist/component/jc.summary.counter.d.ts.map +1 -0
- package/dist/component/jc.summary.counter.js +28 -0
- package/dist/component/jc.summary.default.d.ts +16 -0
- package/dist/component/jc.summary.default.d.ts.map +1 -0
- package/dist/component/jc.summary.default.js +34 -0
- package/dist/component/jc.summary.progress.d.ts +46 -0
- package/dist/component/jc.summary.progress.d.ts.map +1 -0
- package/dist/component/jc.summary.progress.js +35 -0
- package/dist/component/jc.tab-button.d.ts +18 -0
- package/dist/component/jc.tab-button.d.ts.map +1 -0
- package/dist/component/jc.tab-button.js +43 -0
- package/dist/component/jc.text-field.d.ts +20 -0
- package/dist/component/jc.text-field.d.ts.map +1 -0
- package/dist/component/jc.text-field.js +49 -0
- package/dist/component/jc.text.d.ts +24 -0
- package/dist/component/jc.text.d.ts.map +1 -0
- package/dist/component/jc.text.js +44 -0
- package/dist/component/jc.titles.d.ts +19 -0
- package/dist/component/jc.titles.d.ts.map +1 -0
- package/dist/component/jc.titles.js +34 -0
- package/dist/component/jc.trend.d.ts +18 -0
- package/dist/component/jc.trend.d.ts.map +1 -0
- package/dist/component/jc.trend.js +31 -0
- package/dist/component/jc.types.d.ts +75 -0
- package/dist/component/jc.types.d.ts.map +1 -0
- package/dist/component/jc.types.js +74 -0
- package/dist/component/jc.video-player.abstract.d.ts +28 -0
- package/dist/component/jc.video-player.abstract.d.ts.map +1 -0
- package/dist/component/jc.video-player.abstract.js +38 -0
- package/dist/component/jc.video-player.d.ts +4 -0
- package/dist/component/jc.video-player.d.ts.map +1 -0
- package/dist/component/jc.video-player.js +2 -0
- package/dist/component/jc.video-player.on-jig.d.ts +25 -0
- package/dist/component/jc.video-player.on-jig.d.ts.map +1 -0
- package/dist/component/jc.video-player.on-jig.js +31 -0
- package/dist/component/jc.view.d.ts +158 -0
- package/dist/component/jc.view.d.ts.map +1 -0
- package/dist/component/jc.view.js +85 -0
- package/dist/component/jc.web-view.abstract.d.ts +15 -0
- package/dist/component/jc.web-view.abstract.d.ts.map +1 -0
- package/dist/component/jc.web-view.abstract.js +33 -0
- package/dist/component/jc.web-view.on-default.d.ts +5 -0
- package/dist/component/jc.web-view.on-default.d.ts.map +1 -0
- package/dist/component/jc.web-view.on-default.js +4 -0
- package/dist/component/jc.web-view.on-full.d.ts +10 -0
- package/dist/component/jc.web-view.on-full.d.ts.map +1 -0
- package/dist/component/jc.web-view.on-full.js +14 -0
- package/dist/database/database.abstract.d.ts +39 -0
- package/dist/database/database.abstract.d.ts.map +1 -0
- package/dist/database/database.abstract.js +42 -0
- package/dist/database/index.d.ts +2 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +2 -0
- package/dist/datasource/datasource.abstract.d.ts +39 -0
- package/dist/datasource/datasource.abstract.d.ts.map +1 -0
- package/dist/datasource/datasource.abstract.js +47 -0
- package/dist/datasource/datasource.descriptor.d.ts +11 -0
- package/dist/datasource/datasource.descriptor.d.ts.map +1 -0
- package/dist/datasource/datasource.descriptor.js +2 -0
- package/dist/datasource/datasource.reference.d.ts +33 -0
- package/dist/datasource/datasource.reference.d.ts.map +1 -0
- package/dist/datasource/datasource.reference.js +66 -0
- package/dist/datasource/datasource.sdk.d.ts +7 -0
- package/dist/datasource/datasource.sdk.d.ts.map +1 -0
- package/dist/datasource/datasource.sdk.js +5 -0
- package/dist/datasource/datasource.sqlite.d.ts +88 -0
- package/dist/datasource/datasource.sqlite.d.ts.map +1 -0
- package/dist/datasource/datasource.sqlite.js +286 -0
- package/dist/datasource/datasource.static.d.ts +21 -0
- package/dist/datasource/datasource.static.d.ts.map +1 -0
- package/dist/datasource/datasource.static.js +30 -0
- package/dist/datasource/datasource.system.d.ts +18 -0
- package/dist/datasource/datasource.system.d.ts.map +1 -0
- package/dist/datasource/datasource.system.js +10 -0
- package/dist/datasource/entity.descriptor.d.ts +9 -0
- package/dist/datasource/entity.descriptor.d.ts.map +1 -0
- package/dist/datasource/entity.descriptor.js +2 -0
- package/dist/datasource/index.d.ts +11 -0
- package/dist/datasource/index.d.ts.map +1 -0
- package/dist/datasource/index.js +9 -0
- package/dist/datasource/sqlite-normalizer.d.ts +3 -0
- package/dist/datasource/sqlite-normalizer.d.ts.map +1 -0
- package/dist/datasource/sqlite-normalizer.js +194 -0
- package/dist/datasource/sqlite-validator.d.ts +28 -0
- package/dist/datasource/sqlite-validator.d.ts.map +1 -0
- package/dist/datasource/sqlite-validator.js +218 -0
- package/dist/function/function.abstract.d.ts +538 -0
- package/dist/function/function.abstract.d.ts.map +1 -0
- package/dist/function/function.abstract.js +271 -0
- package/dist/function/function.guard.d.ts +17 -0
- package/dist/function/function.guard.d.ts.map +1 -0
- package/dist/function/function.guard.js +62 -0
- package/dist/function/function.operation.d.ts +26 -0
- package/dist/function/function.operation.d.ts.map +1 -0
- package/dist/function/function.operation.js +118 -0
- package/dist/function/function.rest.continuation.d.ts +12 -0
- package/dist/function/function.rest.continuation.d.ts.map +1 -0
- package/dist/function/function.rest.continuation.js +24 -0
- package/dist/function/function.rest.d.ts +31 -0
- package/dist/function/function.rest.d.ts.map +1 -0
- package/dist/function/function.rest.error-builder.d.ts +38 -0
- package/dist/function/function.rest.error-builder.d.ts.map +1 -0
- package/dist/function/function.rest.error-builder.js +161 -0
- package/dist/function/function.rest.js +72 -0
- package/dist/function/function.rest.parameter-builder.d.ts +33 -0
- package/dist/function/function.rest.parameter-builder.d.ts.map +1 -0
- package/dist/function/function.rest.parameter-builder.js +81 -0
- package/dist/function/function.rest.types.d.ts +28 -0
- package/dist/function/function.rest.types.d.ts.map +1 -0
- package/dist/function/function.rest.types.js +2 -0
- package/dist/function/function.sdk.d.ts +10 -0
- package/dist/function/function.sdk.d.ts.map +1 -0
- package/dist/function/function.sdk.js +12 -0
- package/dist/function/function.soap.d.ts +19 -0
- package/dist/function/function.soap.d.ts.map +1 -0
- package/dist/function/function.soap.js +36 -0
- package/dist/function/function.soap.parameter-builder.d.ts +25 -0
- package/dist/function/function.soap.parameter-builder.d.ts.map +1 -0
- package/dist/function/function.soap.parameter-builder.js +41 -0
- package/dist/function/function.soap.types.d.ts +17 -0
- package/dist/function/function.soap.types.d.ts.map +1 -0
- package/dist/function/function.soap.types.js +2 -0
- package/dist/function/function.sql.d.ts +20 -0
- package/dist/function/function.sql.d.ts.map +1 -0
- package/dist/function/function.sql.js +53 -0
- package/dist/function/function.sql.parameter-builder.d.ts +24 -0
- package/dist/function/function.sql.parameter-builder.d.ts.map +1 -0
- package/dist/function/function.sql.parameter-builder.js +44 -0
- package/dist/function/function.sql.types.d.ts +20 -0
- package/dist/function/function.sql.types.d.ts.map +1 -0
- package/dist/function/function.sql.types.js +2 -0
- package/dist/function/function.types.d.ts +7 -0
- package/dist/function/function.types.d.ts.map +1 -0
- package/dist/function/function.types.js +2 -0
- package/dist/function/index.d.ts +17 -0
- package/dist/function/index.d.ts.map +1 -0
- package/dist/function/index.js +13 -0
- package/dist/icon/index.d.ts +3 -0
- package/dist/icon/index.d.ts.map +1 -0
- package/dist/icon/index.js +3 -0
- package/dist/icon/sdk.icon.d.ts +10 -0
- package/dist/icon/sdk.icon.d.ts.map +1 -0
- package/dist/icon/sdk.icon.data.d.ts +7 -0
- package/dist/icon/sdk.icon.data.d.ts.map +1 -0
- package/dist/icon/sdk.icon.data.js +19283 -0
- package/dist/icon/sdk.icon.js +27 -0
- package/dist/icon/sdk.icon.loader.d.ts +7 -0
- package/dist/icon/sdk.icon.loader.d.ts.map +1 -0
- package/dist/icon/sdk.icon.loader.js +15 -0
- package/dist/icon/sdk.icon.name.d.ts +7 -0
- package/dist/icon/sdk.icon.name.d.ts.map +1 -0
- package/dist/icon/sdk.icon.name.js +19305 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/jsonata/ast.d.ts +15 -0
- package/dist/jsonata/ast.d.ts.map +1 -0
- package/dist/jsonata/ast.js +118 -0
- package/dist/jsonata/base.d.ts +7 -0
- package/dist/jsonata/base.d.ts.map +1 -0
- package/dist/jsonata/base.js +43 -0
- package/dist/jsonata/builder.d.ts +28 -0
- package/dist/jsonata/builder.d.ts.map +1 -0
- package/dist/jsonata/builder.js +140 -0
- package/dist/jsonata/context.d.ts +10 -0
- package/dist/jsonata/context.d.ts.map +1 -0
- package/dist/jsonata/context.js +349 -0
- package/dist/jsonata/expression.d.ts +35 -0
- package/dist/jsonata/expression.d.ts.map +1 -0
- package/dist/jsonata/expression.js +498 -0
- package/dist/jsonata/index.d.ts +6 -0
- package/dist/jsonata/index.d.ts.map +1 -0
- package/dist/jsonata/index.js +6 -0
- package/dist/logger/index.d.ts +2 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +2 -0
- package/dist/logger/logger.d.ts +14 -0
- package/dist/logger/logger.d.ts.map +1 -0
- package/dist/logger/logger.js +40 -0
- package/dist/runtime/auth.d.ts +19 -0
- package/dist/runtime/auth.d.ts.map +1 -0
- package/dist/runtime/auth.js +11 -0
- package/dist/runtime/index.d.ts +5 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +3 -0
- package/dist/runtime/system.d.ts +27 -0
- package/dist/runtime/system.d.ts.map +1 -0
- package/dist/runtime/system.js +26 -0
- package/dist/screen/common/index.d.ts +9 -0
- package/dist/screen/common/index.d.ts.map +1 -0
- package/dist/screen/common/index.js +7 -0
- package/dist/screen/common/screen.badge.d.ts +8 -0
- package/dist/screen/common/screen.badge.d.ts.map +1 -0
- package/dist/screen/common/screen.badge.js +2 -0
- package/dist/screen/common/screen.bottom-sheet.d.ts +62 -0
- package/dist/screen/common/screen.bottom-sheet.d.ts.map +1 -0
- package/dist/screen/common/screen.bottom-sheet.js +31 -0
- package/dist/screen/common/screen.callback-actions.d.ts +7 -0
- package/dist/screen/common/screen.callback-actions.d.ts.map +1 -0
- package/dist/screen/common/screen.callback-actions.js +19 -0
- package/dist/screen/common/screen.input-definition.d.ts +108 -0
- package/dist/screen/common/screen.input-definition.d.ts.map +1 -0
- package/dist/screen/common/screen.input-definition.js +109 -0
- package/dist/screen/common/screen.placeholder.d.ts +20 -0
- package/dist/screen/common/screen.placeholder.d.ts.map +1 -0
- package/dist/screen/common/screen.placeholder.js +54 -0
- package/dist/screen/common/screen.preview.actions.d.ts +47 -0
- package/dist/screen/common/screen.preview.actions.d.ts.map +1 -0
- package/dist/screen/common/screen.preview.actions.js +122 -0
- package/dist/screen/common/screen.preview.d.ts +40 -0
- package/dist/screen/common/screen.preview.d.ts.map +1 -0
- package/dist/screen/common/screen.preview.js +87 -0
- package/dist/screen/common/screen.state.d.ts +7 -0
- package/dist/screen/common/screen.state.d.ts.map +1 -0
- package/dist/screen/common/screen.state.js +2 -0
- package/dist/screen/common/screen.summary.d.ts +14 -0
- package/dist/screen/common/screen.summary.d.ts.map +1 -0
- package/dist/screen/common/screen.summary.js +22 -0
- package/dist/screen/index.d.ts +16 -0
- package/dist/screen/index.d.ts.map +1 -0
- package/dist/screen/index.js +16 -0
- package/dist/screen/screen.abstract.d.ts +105 -0
- package/dist/screen/screen.abstract.d.ts.map +1 -0
- package/dist/screen/screen.abstract.js +175 -0
- package/dist/screen/screen.calendar.d.ts +22 -0
- package/dist/screen/screen.calendar.d.ts.map +1 -0
- package/dist/screen/screen.calendar.js +32 -0
- package/dist/screen/screen.default.d.ts +65 -0
- package/dist/screen/screen.default.d.ts.map +1 -0
- package/dist/screen/screen.default.js +68 -0
- package/dist/screen/screen.document.d.ts +58 -0
- package/dist/screen/screen.document.d.ts.map +1 -0
- package/dist/screen/screen.document.js +72 -0
- package/dist/screen/screen.full-screen.d.ts +23 -0
- package/dist/screen/screen.full-screen.d.ts.map +1 -0
- package/dist/screen/screen.full-screen.js +18 -0
- package/dist/screen/screen.gallery.d.ts +15 -0
- package/dist/screen/screen.gallery.d.ts.map +1 -0
- package/dist/screen/screen.gallery.js +14 -0
- package/dist/screen/screen.grid.base.d.ts +18 -0
- package/dist/screen/screen.grid.base.d.ts.map +1 -0
- package/dist/screen/screen.grid.base.js +17 -0
- package/dist/screen/screen.grid.dynamic.d.ts +18 -0
- package/dist/screen/screen.grid.dynamic.d.ts.map +1 -0
- package/dist/screen/screen.grid.dynamic.js +26 -0
- package/dist/screen/screen.grid.static.d.ts +14 -0
- package/dist/screen/screen.grid.static.d.ts.map +1 -0
- package/dist/screen/screen.grid.static.js +12 -0
- package/dist/screen/screen.guards.d.ts +41 -0
- package/dist/screen/screen.guards.d.ts.map +1 -0
- package/dist/screen/screen.guards.js +35 -0
- package/dist/screen/screen.list.d.ts +79 -0
- package/dist/screen/screen.list.d.ts.map +1 -0
- package/dist/screen/screen.list.js +123 -0
- package/dist/screen/screen.sdk.d.ts +13 -0
- package/dist/screen/screen.sdk.d.ts.map +1 -0
- package/dist/screen/screen.sdk.js +9 -0
- package/dist/screen/screen.tabs.d.ts +27 -0
- package/dist/screen/screen.tabs.d.ts.map +1 -0
- package/dist/screen/screen.tabs.instance.d.ts +34 -0
- package/dist/screen/screen.tabs.instance.d.ts.map +1 -0
- package/dist/screen/screen.tabs.instance.js +79 -0
- package/dist/screen/screen.tabs.js +35 -0
- package/dist/screen/screen.wizard.d.ts +12 -0
- package/dist/screen/screen.wizard.d.ts.map +1 -0
- package/dist/screen/screen.wizard.instance.d.ts +20 -0
- package/dist/screen/screen.wizard.instance.d.ts.map +1 -0
- package/dist/screen/screen.wizard.instance.js +40 -0
- package/dist/screen/screen.wizard.js +23 -0
- package/dist/utils/check.d.ts +3 -0
- package/dist/utils/check.d.ts.map +1 -0
- package/dist/utils/check.js +7 -0
- package/dist/utils/convert.d.ts +2 -0
- package/dist/utils/convert.d.ts.map +1 -0
- package/dist/utils/convert.js +8 -0
- package/dist/utils/dedent.d.ts +2 -0
- package/dist/utils/dedent.d.ts.map +1 -0
- package/dist/utils/dedent.js +28 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/types.d.ts +2 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +2 -0
- package/dist/utils/utils.d.ts +9 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +49 -0
- package/dist/widget/index.d.ts +12 -0
- package/dist/widget/index.d.ts.map +1 -0
- package/dist/widget/index.js +12 -0
- package/dist/widget/jw.abstract.d.ts +27 -0
- package/dist/widget/jw.abstract.d.ts.map +1 -0
- package/dist/widget/jw.abstract.js +36 -0
- package/dist/widget/jw.actions.d.ts +17 -0
- package/dist/widget/jw.actions.d.ts.map +1 -0
- package/dist/widget/jw.actions.js +30 -0
- package/dist/widget/jw.avatar.d.ts +19 -0
- package/dist/widget/jw.avatar.d.ts.map +1 -0
- package/dist/widget/jw.avatar.js +23 -0
- package/dist/widget/jw.chart.d.ts +18 -0
- package/dist/widget/jw.chart.d.ts.map +1 -0
- package/dist/widget/jw.chart.js +23 -0
- package/dist/widget/jw.group.d.ts +28 -0
- package/dist/widget/jw.group.d.ts.map +1 -0
- package/dist/widget/jw.group.js +35 -0
- package/dist/widget/jw.image.d.ts +27 -0
- package/dist/widget/jw.image.d.ts.map +1 -0
- package/dist/widget/jw.image.js +54 -0
- package/dist/widget/jw.list.d.ts +44 -0
- package/dist/widget/jw.list.d.ts.map +1 -0
- package/dist/widget/jw.list.js +44 -0
- package/dist/widget/jw.location.d.ts +41 -0
- package/dist/widget/jw.location.d.ts.map +1 -0
- package/dist/widget/jw.location.js +54 -0
- package/dist/widget/jw.sdk.d.ts +2 -0
- package/dist/widget/jw.sdk.d.ts.map +1 -0
- package/dist/widget/jw.sdk.js +2 -0
- package/dist/widget/jw.status.condition.d.ts +20 -0
- package/dist/widget/jw.status.condition.d.ts.map +1 -0
- package/dist/widget/jw.status.condition.js +27 -0
- package/dist/widget/jw.status.d.ts +8 -0
- package/dist/widget/jw.status.d.ts.map +1 -0
- package/dist/widget/jw.status.js +11 -0
- package/dist/widget/jw.value.d.ts +24 -0
- package/dist/widget/jw.value.d.ts.map +1 -0
- package/dist/widget/jw.value.js +51 -0
- package/package.json +94 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { CommonNameMixedRegex, isSqliteSystemTable, } from '../abstract/zod.types.js';
|
|
3
|
+
const COLUMN_NAME_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_ .-]{0,127}$/;
|
|
4
|
+
const COLUMN_FORBIDDEN_CHARS = /['"`;()\\]/;
|
|
5
|
+
const DEFAULT_SCHEMA = 'default';
|
|
6
|
+
const SCHEMA_SEPARATOR = '/';
|
|
7
|
+
const MAX_POST_ESCAPE = 80;
|
|
8
|
+
const RESERVED_COLUMNS = new Set(['id', 'data']);
|
|
9
|
+
const TABLE_TRANSFORMATIONS = [
|
|
10
|
+
[/\//g, '__jx__'],
|
|
11
|
+
[/-/g, '_jx_'],
|
|
12
|
+
];
|
|
13
|
+
const BLOCK_COMMENT_REGEX = /\/\*[\s\S]*?\*\//g;
|
|
14
|
+
const LINE_COMMENT_REGEX = /--[^\n]*/g;
|
|
15
|
+
const EXTERNAL_PACKAGE_TABLE_PATTERN = /^\[([^\]]+)\]\.\[([^\]]+)\]$/;
|
|
16
|
+
const SYSTEM_TABLE_SCHEMAS = {
|
|
17
|
+
_syncScope: `
|
|
18
|
+
[id] TEXT NOT NULL PRIMARY KEY,
|
|
19
|
+
[timestamp] INTEGER,
|
|
20
|
+
[state] TEXT,
|
|
21
|
+
[notStarted] INTEGER DEFAULT(0),
|
|
22
|
+
[syncing] INTEGER DEFAULT(0),
|
|
23
|
+
[synced] INTEGER DEFAULT(0),
|
|
24
|
+
[failed] INTEGER DEFAULT(0),
|
|
25
|
+
[lastStartedAt] INTEGER NULL,
|
|
26
|
+
[lastFailedAt] INTEGER NULL,
|
|
27
|
+
[lastSyncedAt] INTEGER NULL,
|
|
28
|
+
[details] TEXT NULL
|
|
29
|
+
`,
|
|
30
|
+
_commandQueue: `
|
|
31
|
+
[id] INTEGER NOT NULL PRIMARY KEY,
|
|
32
|
+
[queue] TEXT NOT NULL,
|
|
33
|
+
[type] TEXT NOT NULL,
|
|
34
|
+
[payload] TEXT NULL,
|
|
35
|
+
[state] TEXT NULL,
|
|
36
|
+
[error] TEXT NULL,
|
|
37
|
+
[retryCount] INTEGER NULL,
|
|
38
|
+
[retryAfter] INTEGER NULL
|
|
39
|
+
`,
|
|
40
|
+
};
|
|
41
|
+
export function validateColumnName(name) {
|
|
42
|
+
if (typeof name !== 'string') {
|
|
43
|
+
throw new Error(`Column name must be a string, got: ${typeof name}`);
|
|
44
|
+
}
|
|
45
|
+
if (name === '') {
|
|
46
|
+
throw new Error('Column name must be a non-empty string');
|
|
47
|
+
}
|
|
48
|
+
if (hasOuterWhitespace(name)) {
|
|
49
|
+
throw new Error(`Invalid column name '${name}': cannot have leading or trailing spaces`);
|
|
50
|
+
}
|
|
51
|
+
if (/[^\x20-\x7E]/.test(name)) {
|
|
52
|
+
throw new Error(`Invalid column name '${name}': only ASCII characters are allowed`);
|
|
53
|
+
}
|
|
54
|
+
if (!COLUMN_NAME_PATTERN.test(name)) {
|
|
55
|
+
throw new Error(`Invalid column name: must start with letter or underscore, contain only letters/numbers/spaces/hyphens/periods/underscores, max 128 chars`);
|
|
56
|
+
}
|
|
57
|
+
ensureDoesNotContain(name, '--', `Invalid column name '${name}': cannot contain -- (SQL comment marker)`);
|
|
58
|
+
ensureDoesNotContainAny(name, ['/*', '*/'], `Invalid column name '${name}': cannot contain /* or */ (SQL comment markers)`);
|
|
59
|
+
if (COLUMN_FORBIDDEN_CHARS.test(name)) {
|
|
60
|
+
throw new Error(`Invalid column name '${name}': cannot contain quotes (', ", \`), semicolons, parentheses, or backslashes`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export function validateTableName(name) {
|
|
64
|
+
if (!name || typeof name !== 'string') {
|
|
65
|
+
throw new Error(`Table name must be a non-empty string, got: ${typeof name}`);
|
|
66
|
+
}
|
|
67
|
+
if (name.includes(']') || name.includes('[')) {
|
|
68
|
+
throw new Error(`Invalid table name '${name}': cannot contain brackets [ or ] (bracket escape vulnerability)`);
|
|
69
|
+
}
|
|
70
|
+
ensureDoesNotContain(name, '--', `Invalid table name '${name}': cannot contain -- (SQL comment marker)`);
|
|
71
|
+
const { tableName, hasSchema } = extractTableName(name);
|
|
72
|
+
if (isSqliteSystemTable(tableName)) {
|
|
73
|
+
const transformedName = safeTableName(name);
|
|
74
|
+
if (transformedName.length > MAX_POST_ESCAPE) {
|
|
75
|
+
throw new Error(`Invalid table name '${name}': after transformation becomes '${transformedName}' (${String(transformedName.length)} chars, max ${String(MAX_POST_ESCAPE)})`);
|
|
76
|
+
}
|
|
77
|
+
return transformedName;
|
|
78
|
+
}
|
|
79
|
+
if (!CommonNameMixedRegex.test(tableName)) {
|
|
80
|
+
const part = hasSchema ? `table part '${tableName}'` : `name`;
|
|
81
|
+
throw new Error(`Invalid table name '${name}': ${part} must be 2-50 characters, start with a letter, contain only letters/numbers/hyphens/underscores, and end with a letter or number`);
|
|
82
|
+
}
|
|
83
|
+
const transformedName = safeTableName(name);
|
|
84
|
+
if (transformedName.length > MAX_POST_ESCAPE) {
|
|
85
|
+
throw new Error(`Invalid table name '${name}': after transformation becomes '${transformedName}' (${String(transformedName.length)} chars, max ${String(MAX_POST_ESCAPE)})`);
|
|
86
|
+
}
|
|
87
|
+
return transformedName;
|
|
88
|
+
}
|
|
89
|
+
function safeTableName(tableName) {
|
|
90
|
+
const needsTransform = TABLE_TRANSFORMATIONS.some(([pattern]) => pattern.test(tableName));
|
|
91
|
+
if (!needsTransform)
|
|
92
|
+
return tableName;
|
|
93
|
+
return TABLE_TRANSFORMATIONS.reduce((current, [pattern, replacement]) => current.replace(pattern, replacement), tableName);
|
|
94
|
+
}
|
|
95
|
+
export const __testOnly__ = {
|
|
96
|
+
safeTableName,
|
|
97
|
+
};
|
|
98
|
+
export function replaceParameters(query) {
|
|
99
|
+
return query.replace(/[$@](\w+)/g, '?');
|
|
100
|
+
}
|
|
101
|
+
export function replaceTableName(query, originalName, safeName) {
|
|
102
|
+
if (!query || !originalName || !safeName || originalName === safeName) {
|
|
103
|
+
return query;
|
|
104
|
+
}
|
|
105
|
+
if (originalName.startsWith('[') && originalName.endsWith(']')) {
|
|
106
|
+
const escapedName = escapeRegExp(originalName);
|
|
107
|
+
return query.replace(new RegExp(escapedName, 'g'), `[${safeName}]`);
|
|
108
|
+
}
|
|
109
|
+
const escapedName = escapeRegExp(originalName);
|
|
110
|
+
return (query
|
|
111
|
+
.replace(new RegExp(`\\[${escapedName}\\]`, 'g'), `[${safeName}]`)
|
|
112
|
+
.replace(new RegExp(`\\b${escapedName}\\b`, 'g'), safeName));
|
|
113
|
+
}
|
|
114
|
+
export function createValidationDatabase(tableNames, options = {}) {
|
|
115
|
+
const db = new Database(':memory:');
|
|
116
|
+
const { additionalColumns = [] } = options;
|
|
117
|
+
const columns = buildColumnDefinitions(additionalColumns);
|
|
118
|
+
const tables = new Map();
|
|
119
|
+
for (const tableName of tableNames) {
|
|
120
|
+
const packageMatch = EXTERNAL_PACKAGE_TABLE_PATTERN.exec(tableName);
|
|
121
|
+
if (packageMatch) {
|
|
122
|
+
const [, packageName, entityName] = packageMatch;
|
|
123
|
+
const safeName = `${packageName.replace(/-/g, '_')}_${entityName}`;
|
|
124
|
+
const normalizedName = tableName;
|
|
125
|
+
db.exec(`CREATE TABLE IF NOT EXISTS [${safeName}] (${columns.join(', ')})`);
|
|
126
|
+
tables.set(tableName, { safeName, normalizedName });
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
const normalizedName = stripWrappingBrackets(tableName);
|
|
130
|
+
if (isSqliteSystemTable(normalizedName)) {
|
|
131
|
+
const safeName = normalizedName;
|
|
132
|
+
const schema = SYSTEM_TABLE_SCHEMAS[normalizedName];
|
|
133
|
+
if (!schema) {
|
|
134
|
+
throw new Error(`System table '${normalizedName}' is whitelisted but missing schema definition. ` +
|
|
135
|
+
`Add schema to SYSTEM_TABLE_SCHEMAS (source: jigx/packages/datastore/src/database/migrations/solution/)`);
|
|
136
|
+
}
|
|
137
|
+
db.exec(`CREATE TABLE IF NOT EXISTS [${safeName}] (${schema})`);
|
|
138
|
+
tables.set(tableName, { safeName, normalizedName });
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
const safeName = validateTableName(normalizedName);
|
|
142
|
+
db.exec(`CREATE TABLE IF NOT EXISTS [${safeName}] (${columns.join(', ')})`);
|
|
143
|
+
tables.set(tableName, { safeName, normalizedName });
|
|
144
|
+
}
|
|
145
|
+
return { db, tables };
|
|
146
|
+
}
|
|
147
|
+
export function stripSqlComments(query) {
|
|
148
|
+
return query.replace(BLOCK_COMMENT_REGEX, ' ').replace(LINE_COMMENT_REGEX, ' ');
|
|
149
|
+
}
|
|
150
|
+
export function validateSelectQuery(db, query) {
|
|
151
|
+
const trimmed = query.trim();
|
|
152
|
+
if (!trimmed) {
|
|
153
|
+
throw new Error('Query cannot be empty');
|
|
154
|
+
}
|
|
155
|
+
const noComments = stripSqlComments(trimmed).trim();
|
|
156
|
+
const upperQuery = noComments.toUpperCase();
|
|
157
|
+
if (upperQuery.startsWith('PRAGMA')) {
|
|
158
|
+
throw new Error('PRAGMA commands are not allowed in datasources');
|
|
159
|
+
}
|
|
160
|
+
const stmt = db.prepare(query);
|
|
161
|
+
if (!stmt.reader) {
|
|
162
|
+
throw new Error('Only SELECT queries are allowed in datasources');
|
|
163
|
+
}
|
|
164
|
+
return stmt;
|
|
165
|
+
}
|
|
166
|
+
export function extractColumns(stmt) {
|
|
167
|
+
return stmt.columns().map((col) => col.name.toLowerCase());
|
|
168
|
+
}
|
|
169
|
+
export function validateRequiredColumns(columns, requiredColumns) {
|
|
170
|
+
const columnSet = new Set(columns);
|
|
171
|
+
const missing = requiredColumns.filter((required) => !columnSet.has(required));
|
|
172
|
+
return {
|
|
173
|
+
isValid: missing.length === 0,
|
|
174
|
+
missing,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function hasOuterWhitespace(value) {
|
|
178
|
+
return value.trim() !== value;
|
|
179
|
+
}
|
|
180
|
+
function ensureDoesNotContain(value, token, errorMessage) {
|
|
181
|
+
if (value.includes(token)) {
|
|
182
|
+
throw new Error(errorMessage);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function ensureDoesNotContainAny(value, tokens, errorMessage) {
|
|
186
|
+
if (tokens.some((token) => value.includes(token))) {
|
|
187
|
+
throw new Error(errorMessage);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
function extractTableName(name) {
|
|
191
|
+
const parts = name.split(SCHEMA_SEPARATOR);
|
|
192
|
+
if (parts.length === 1) {
|
|
193
|
+
return { tableName: name, hasSchema: false };
|
|
194
|
+
}
|
|
195
|
+
if (parts.length === 2) {
|
|
196
|
+
const [schema, table] = parts;
|
|
197
|
+
if (schema !== DEFAULT_SCHEMA) {
|
|
198
|
+
throw new Error(`Invalid table name '${name}': schema must be '${DEFAULT_SCHEMA}', got '${schema}'`);
|
|
199
|
+
}
|
|
200
|
+
return { tableName: table, hasSchema: true };
|
|
201
|
+
}
|
|
202
|
+
throw new Error(`Invalid table name '${name}': cannot contain multiple '/' separators`);
|
|
203
|
+
}
|
|
204
|
+
function stripWrappingBrackets(name) {
|
|
205
|
+
return name.startsWith('[') && name.endsWith(']') ? name.slice(1, -1) : name;
|
|
206
|
+
}
|
|
207
|
+
function buildColumnDefinitions(additionalColumns) {
|
|
208
|
+
const uniqueColumns = Array.from(new Set(additionalColumns)).filter((column) => !RESERVED_COLUMNS.has(column));
|
|
209
|
+
const validatedColumns = uniqueColumns.map((column) => {
|
|
210
|
+
validateColumnName(column);
|
|
211
|
+
return `[${column}] TEXT`;
|
|
212
|
+
});
|
|
213
|
+
return ['id TEXT PRIMARY KEY', 'data TEXT', 'file TEXT', ...validatedColumns];
|
|
214
|
+
}
|
|
215
|
+
function escapeRegExp(value) {
|
|
216
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsaXRlLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhc291cmNlL3NxbGl0ZS12YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUE7QUFDckMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixtQkFBbUIsR0FFcEIsTUFBTSwwQkFBMEIsQ0FBQTtBQWtDakMsTUFBTSxtQkFBbUIsR0FBRyxtQ0FBbUMsQ0FBQTtBQUMvRCxNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQTtBQUMzQyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUE7QUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUE7QUFDNUIsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFBO0FBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNoRCxNQUFNLHFCQUFxQixHQUE0QjtJQUNyRCxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7SUFDakIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0NBQ2YsQ0FBQTtBQUNELE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CLENBQUE7QUFDL0MsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUE7QUFTdEMsTUFBTSw4QkFBOEIsR0FBRyw4QkFBOEIsQ0FBQTtBQVFyRSxNQUFNLG9CQUFvQixHQUEwQztJQUVsRSxVQUFVLEVBQUU7Ozs7Ozs7Ozs7OztHQVlYO0lBRUQsYUFBYSxFQUFFOzs7Ozs7Ozs7R0FTZDtDQUNGLENBQUE7QUFzQ0QsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQVksRUFBUTtJQUVyRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUN0RSxD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QUUsQ0FBQztRQUNyRCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMxQixPQUFPLElBQUksTUFBTSxRQUFRLENBQUE7SUFBQSxDQUMxQixDQUFDLENBQUE7SUFFRixPQUFPLENBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUE7QUFBQSxDQUM5RTtBQUVELFNBQVMsWUFBWSxDQUFDLEtBQWEsRUFBVTtJQUMzQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFBQSxDQUNwRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEYXRhYmFzZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbmltcG9ydCB7XG4gIENvbW1vbk5hbWVNaXhlZFJlZ2V4LFxuICBpc1NxbGl0ZVN5c3RlbVRhYmxlLFxuICB0eXBlIFN5c3RlbVNxbGl0ZVRhYmxlTmFtZSxcbn0gZnJvbSAnLi4vYWJzdHJhY3Qvem9kLnR5cGVzLmpzJ1xuXG4vKipcbiAqIFNRTGl0ZSBTZWN1cml0eSBWYWxpZGF0aW9uIFV0aWxpdGllc1xuICpcbiAqIFRoaXMgbW9kdWxlIGxldmVyYWdlcyBTUUxpdGUncyBidWlsdC1pbiBzZWN1cml0eSBmZWF0dXJlcyBmb3IgdmFsaWRhdGlvbjpcbiAqXG4gKiAxLiAqKlNRTGl0ZSdzIEhhcmRlbmVkIFBhcnNlcioqIChkYi5wcmVwYXJlKCkpXG4gKiAgICAtIEJhdHRsZS10ZXN0ZWQgU1FMIHBhcnNlciB1c2VkIGJ5IG1pbGxpb25zIG9mIGFwcGxpY2F0aW9uc1xuICogICAgLSBWYWxpZGF0ZXMgcXVlcnkgc3ludGF4IHdpdGhvdXQgZXhlY3V0aW9uXG4gKiAgICAtIFJlZmVyZW5jZTogaHR0cHM6Ly9zcWxpdGUub3JnL2xhbmcuaHRtbCwgaHR0cHM6Ly9zcWxpdGUub3JnL3NlY3VyaXR5Lmh0bWxcbiAqXG4gKiAyLiAqKmJldHRlci1zcWxpdGUzIE11bHRpcGxlIFN0YXRlbWVudCBQcm90ZWN0aW9uKipcbiAqICAgIC0gUHJlcGFyZWQgc3RhdGVtZW50cyAoZGIucHJlcGFyZSkgYmxvY2sgbXVsdGlwbGUgU1FMIHN0YXRlbWVudHNcbiAqICAgIC0gUHJldmVudHMgaW5qZWN0aW9uIHZpYSBzdGF0ZW1lbnQgY2hhaW5pbmc6IGAnOyBEUk9QIFRBQkxFIHVzZXJzOyAtLWBcbiAqICAgIC0gVGhyb3dzIFJhbmdlRXJyb3IgaWYgbXVsdGlwbGUgc3RhdGVtZW50cyBkZXRlY3RlZFxuICpcbiAqIDMuICoqU1FMaXRlIEJyYWNrZXQtUXVvdGluZyoqIChbaWRlbnRpZmllcl0pXG4gKiAgICAtIFNhZmUgaWRlbnRpZmllciBxdW90aW5nIG1lY2hhbmlzbSBidWlsdCBpbnRvIFNRTGl0ZVxuICogICAgLSBQcm90ZWN0cyBhZ2FpbnN0IHJlc2VydmVkIGtleXdvcmRzIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnNcbiAqICAgIC0gU3VwcG9ydHMgZXNjYXBlIHZpYSBdXSBmb3IgbGl0ZXJhbCBdIGNoYXJhY3RlclxuICpcbiAqIDQuICoqU1FMaXRlIEV4cHJlc3Npb24gTGltaXRzKiogKFNRTElURV9MSU1JVF9FWFBSX0RFUFRIID0gMTAwMClcbiAqICAgIC0gQnVpbHQtaW4gRG9TIHByb3RlY3Rpb24gYWdhaW5zdCBkZWVwbHkgbmVzdGVkIGV4cHJlc3Npb25zXG4gKiAgICAtIFJlZmVyZW5jZTogaHR0cHM6Ly9zcWxpdGUub3JnL2xpbWl0cy5odG1sXG4gKlxuICogNS4gKipQcmVwYXJlZCBTdGF0ZW1lbnQgUGFyYW1ldGVyIEJpbmRpbmcqKlxuICogICAgLSBiZXR0ZXItc3FsaXRlMyBhdXRvbWF0aWNhbGx5IGVzY2FwZXMgYm91bmQgcGFyYW1ldGVyc1xuICogICAgLSBQcmV2ZW50cyBpbmplY3Rpb24gYnkgc2VwYXJhdGluZyBjb2RlIGZyb20gZGF0YVxuICpcbiAqIEFkZGl0aW9uYWwgbGF5ZXJzOiBDdXN0b20gdmFsaWRhdGlvbiAodmFsaWRhdGVUYWJsZU5hbWUsIHZhbGlkYXRlQ29sdW1uTmFtZSlcbiAqIHByb3ZpZGVzIGFsbG93bGlzdC1iYXNlZCBpZGVudGlmaWVyIHZhbGlkYXRpb24gYmVmb3JlIHVzaW5nIFNRTGl0ZSBmZWF0dXJlcy5cbiAqL1xuXG5jb25zdCBDT0xVTU5fTkFNRV9QQVRURVJOID0gL15bYS16QS1aX11bYS16QS1aMC05XyAuLV17MCwxMjd9JC9cbmNvbnN0IENPTFVNTl9GT1JCSURERU5fQ0hBUlMgPSAvWydcImA7KClcXFxcXS9cbmNvbnN0IERFRkFVTFRfU0NIRU1BID0gJ2RlZmF1bHQnXG5jb25zdCBTQ0hFTUFfU0VQQVJBVE9SID0gJy8nXG5jb25zdCBNQVhfUE9TVF9FU0NBUEUgPSA4MFxuY29uc3QgUkVTRVJWRURfQ09MVU1OUyA9IG5ldyBTZXQoWydpZCcsICdkYXRhJ10pXG5jb25zdCBUQUJMRV9UUkFOU0ZPUk1BVElPTlM6IEFycmF5PFtSZWdFeHAsIHN0cmluZ10+ID0gW1xuICBbL1xcLy9nLCAnX19qeF9fJ10sXG4gIFsvLS9nLCAnX2p4XyddLFxuXVxuY29uc3QgQkxPQ0tfQ09NTUVOVF9SRUdFWCA9IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvL2dcbmNvbnN0IExJTkVfQ09NTUVOVF9SRUdFWCA9IC8tLVteXFxuXSovZ1xuXG4vKipcbiAqIE1hdGNoZXMgZXh0ZXJuYWwgcGFja2FnZSB0YWJsZSBmb3JtYXQ6IFtwYWNrYWdlTmFtZV0uW3RhYmxlTmFtZV1cbiAqXG4gKiBFeGFtcGxlOiBcIltteVBhY2thZ2VdLltteVRhYmxlXVwiXG4gKiAtIEdyb3VwIDE6IHBhY2thZ2VOYW1lIChjaGFyYWN0ZXJzIGJldHdlZW4gZmlyc3QgcGFpciBvZiBicmFja2V0cylcbiAqIC0gR3JvdXAgMjogdGFibGVOYW1lIChjaGFyYWN0ZXJzIGJldHdlZW4gc2Vjb25kIHBhaXIgb2YgYnJhY2tldHMpXG4gKi9cbmNvbnN0IEVYVEVSTkFMX1BBQ0tBR0VfVEFCTEVfUEFUVEVSTiA9IC9eXFxbKFteXFxdXSspXFxdXFwuXFxbKFteXFxdXSspXFxdJC9cblxuLyoqXG4gKiBTeXN0ZW0gdGFibGUgc2NoZW1hcyBmcm9tIHBsYXRmb3JtIGRhdGFiYXNlIG1pZ3JhdGlvbnMuXG4gKiBTb3VyY2U6IGppZ3gvcGFja2FnZXMvZGF0YXN0b3JlL3NyYy9kYXRhYmFzZS9taWdyYXRpb25zL3NvbHV0aW9uL1xuICpcbiAqIFRoZXNlIHNjaGVtYXMgYXJlIHVzZWQgdG8gY3JlYXRlIGFjY3VyYXRlIHZhbGlkYXRpb24gZGF0YWJhc2VzIGZvciBzeXN0ZW0gdGFibGVzLlxuICovXG5jb25zdCBTWVNURU1fVEFCTEVfU0NIRU1BUzogUmVjb3JkPFN5c3RlbVNxbGl0ZVRhYmxlTmFtZSwgc3RyaW5nPiA9IHtcbiAgLy8gU291cmNlOiAwMDNfc3luY19zdGF0dXNfYW5kX3Njb3BlLnNxbC50c1xuICBfc3luY1Njb3BlOiBgXG4gICAgW2lkXSAgICAgICAgICAgIFRFWFQgTk9UIE5VTEwgUFJJTUFSWSBLRVksXG4gICAgW3RpbWVzdGFtcF0gICAgIElOVEVHRVIsXG4gICAgW3N0YXRlXSAgICAgICAgIFRFWFQsXG4gICAgW25vdFN0YXJ0ZWRdICAgIElOVEVHRVIgREVGQVVMVCgwKSxcbiAgICBbc3luY2luZ10gICAgICAgSU5URUdFUiBERUZBVUxUKDApLFxuICAgIFtzeW5jZWRdICAgICAgICBJTlRFR0VSIERFRkFVTFQoMCksXG4gICAgW2ZhaWxlZF0gICAgICAgIElOVEVHRVIgREVGQVVMVCgwKSxcbiAgICBbbGFzdFN0YXJ0ZWRBdF0gSU5URUdFUiBOVUxMLFxuICAgIFtsYXN0RmFpbGVkQXRdICBJTlRFR0VSIE5VTEwsXG4gICAgW2xhc3RTeW5jZWRBdF0gIElOVEVHRVIgTlVMTCxcbiAgICBbZGV0YWlsc10gICAgICAgVEVYVCBOVUxMXG4gIGAsXG4gIC8vIFNvdXJjZTogMDAxX2luaXRpYWwuc3FsLnRzXG4gIF9jb21tYW5kUXVldWU6IGBcbiAgICBbaWRdICAgICAgICAgSU5URUdFUiBOT1QgTlVMTCBQUklNQVJZIEtFWSxcbiAgICBbcXVldWVdICAgICAgVEVYVCBOT1QgTlVMTCxcbiAgICBbdHlwZV0gICAgICAgVEVYVCBOT1QgTlVMTCxcbiAgICBbcGF5bG9hZF0gICAgVEVYVCBOVUxMLFxuICAgIFtzdGF0ZV0gICAgICBURVhUIE5VTEwsXG4gICAgW2Vycm9yXSAgICAgIFRFWFQgTlVMTCxcbiAgICBbcmV0cnlDb3VudF0gSU5URUdFUiBOVUxMLFxuICAgIFtyZXRyeUFmdGVyXSBJTlRFR0VSIE5VTExcbiAgYCxcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgY3JlYXRlVmFsaWRhdGlvbkRhdGFiYXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlUYWJsZVZhbGlkYXRpb25SZXN1bHQge1xuICByZWFkb25seSBkYjogRGF0YWJhc2UuRGF0YWJhc2VcbiAgcmVhZG9ubHkgdGFibGVzOiBNYXA8c3RyaW5nLCB7IHJlYWRvbmx5IHNhZmVOYW1lOiBzdHJpbmc7IHJlYWRvbmx5IG5vcm1hbGl6ZWROYW1lOiBzdHJpbmcgfT5cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IGEgY29sdW1uIG5hbWUgaXMgYSBzYWZlIFNRTCBpZGVudGlmaWVyLlxuICogUHJldmVudHMgU1FMIGluamVjdGlvbiBieSBlbnN1cmluZyBjb2x1bW4gbmFtZXMgZm9sbG93IHN0cmljdCBydWxlcy5cbiAqXG4gKiBSdWxlczpcbiAqIC0gQ2Fubm90IGJlIGVtcHR5XG4gKiAtIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciAoYS16LCBBLVopIG9yIHVuZGVyc2NvcmVcbiAqIC0gQ2FuIGNvbnRhaW4gcHJpbnRhYmxlIEFTQ0lJOiBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlLCBoeXBoZW4sIHBlcmlvZCwgc3BhY2VcbiAqIC0gTWF4aW11bSAxMjggY2hhcmFjdGVycyB0b3RhbCAoMSBzdGFydCBjaGFyYWN0ZXIgKyB1cCB0byAxMjcgYWRkaXRpb25hbCBjaGFyYWN0ZXJzKVxuICogLSBDYW5ub3QgY29udGFpbiBkYW5nZXJvdXMgc2VxdWVuY2VzOiAtLSwgLyosICpcXC9cbiAqIC0gQ2Fubm90IGNvbnRhaW4gaW5qZWN0aW9uIGNoYXJhY3RlcnM6IHF1b3Rlcywgc2VtaWNvbG9ucywgcGFyZW50aGVzZXMsIGJhY2tzbGFzaGVzXG4gKiAtIFNRTCByZXNlcnZlZCBrZXl3b3JkcyBhcmUgYWxsb3dlZCAod2lsbCBiZSBhdXRvbWF0aWNhbGx5IHF1b3RlZCB3aXRoIGJyYWNrZXRzKVxuICpcbiAqIEBwYXJhbSBuYW1lIC0gQ29sdW1uIG5hbWUgdG8gdmFsaWRhdGVcbiAqIEB0aHJvd3MgRXJyb3IgaWYgY29sdW1uIG5hbWUgaXMgaW52YWxpZCBvciBwb3RlbnRpYWxseSBkYW5nZXJvdXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdmFsaWRhdGVDb2x1bW5OYW1lKCd1c2VyX2lkJykgICAgICAvLyDinIUgVmFsaWRcbiAqIHZhbGlkYXRlQ29sdW1uTmFtZSgnRmlyc3QgTmFtZScpICAgLy8g4pyFIFZhbGlkIChzcGFjZSBhbGxvd2VkKVxuICogdmFsaWRhdGVDb2x1bW5OYW1lKCdjcmVhdGVkLWF0JykgICAvLyDinIUgVmFsaWQgKGh5cGhlbiBhbGxvd2VkKVxuICogdmFsaWRhdGVDb2x1bW5OYW1lKCd1c2VyLmVtYWlsJykgICAvLyDinIUgVmFsaWQgKHBlcmlvZCBhbGxvd2VkKVxuICogdmFsaWRhdGVDb2x1bW5OYW1lKCdzZWxlY3QnKSAgICAgICAvLyDinIUgVmFsaWQgKGtleXdvcmQsIHdpbGwgYmUgcXVvdGVkIGFzIFtzZWxlY3RdKVxuICogdmFsaWRhdGVDb2x1bW5OYW1lKCdmb28tLWJhcicpICAgICAvLyDinYwgVGhyb3dzICgtLSBpcyBTUUwgY29tbWVudCBtYXJrZXIpXG4gKiB2YWxpZGF0ZUNvbHVtbk5hbWUoJzEyM2FiYycpICAgICAgIC8vIOKdjCBUaHJvd3MgKHN0YXJ0cyB3aXRoIG51bWJlcilcbiAqIHZhbGlkYXRlQ29sdW1uTmFtZSgneDsgRFJPUCcpICAgICAgLy8g4p2MIFRocm93cyAoY29udGFpbnMgc2VtaWNvbG9uKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbHVtbk5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIC8vIENoZWNrIGZvciBub24tc3RyaW5nIHZhbHVlc1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBnb3Q6ICR7dHlwZW9mIG5hbWV9YClcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBlbXB0eSBzdHJpbmdcbiAgaWYgKG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW4gbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpXG4gIH1cblxuICAvLyBSZWplY3QgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlXG4gIGlmIChoYXNPdXRlcldoaXRlc3BhY2UobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29sdW1uIG5hbWUgJyR7bmFtZX0nOiBjYW5ub3QgaGF2ZSBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlc2ApXG4gIH1cblxuICAvLyBCbG9jayBub24tQVNDSUkgY2hhcmFjdGVycyAob25seSBwcmludGFibGUgQVNDSUkgYWxsb3dlZCBmb3Igc2VjdXJpdHkvY29tcGF0aWJpbGl0eSlcblxuICBpZiAoL1teXFx4MjAtXFx4N0VdLy50ZXN0KG5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvbHVtbiBuYW1lICcke25hbWV9Jzogb25seSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkYClcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGJhc2ljIHBhdHRlcm46IGxldHRlci91bmRlcnNjb3JlIGZvbGxvd2VkIGJ5IHNhZmUgY2hhcmFjdGVycywgbWF4IDEyOCBjaGFyc1xuICAvLyBBbGxvd3M6IGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZSwgaHlwaGVuLCBwZXJpb2QsIHNwYWNlXG4gIGlmICghQ09MVU1OX05BTUVfUEFUVEVSTi50ZXN0KG5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgY29sdW1uIG5hbWU6IG11c3Qgc3RhcnQgd2l0aCBsZXR0ZXIgb3IgdW5kZXJzY29yZSwgY29udGFpbiBvbmx5IGxldHRlcnMvbnVtYmVycy9zcGFjZXMvaHlwaGVucy9wZXJpb2RzL3VuZGVyc2NvcmVzLCBtYXggMTI4IGNoYXJzYCxcbiAgICApXG4gIH1cblxuICAvLyBCbG9jayBTUUwgY29tbWVudCBtYXJrZXJzIChldmVuIHRob3VnaCB3ZSBicmFja2V0LXF1b3RlLCBkZWZlbnNlLWluLWRlcHRoKVxuICBlbnN1cmVEb2VzTm90Q29udGFpbihcbiAgICBuYW1lLFxuICAgICctLScsXG4gICAgYEludmFsaWQgY29sdW1uIG5hbWUgJyR7bmFtZX0nOiBjYW5ub3QgY29udGFpbiAtLSAoU1FMIGNvbW1lbnQgbWFya2VyKWAsXG4gIClcbiAgZW5zdXJlRG9lc05vdENvbnRhaW5BbnkoXG4gICAgbmFtZSxcbiAgICBbJy8qJywgJyovJ10sXG4gICAgYEludmFsaWQgY29sdW1uIG5hbWUgJyR7bmFtZX0nOiBjYW5ub3QgY29udGFpbiAvKiBvciAqLyAoU1FMIGNvbW1lbnQgbWFya2VycylgLFxuICApXG5cbiAgLy8gQmxvY2sgU1FMIGluamVjdGlvbiBjaGFyYWN0ZXJzXG4gIGlmIChDT0xVTU5fRk9SQklEREVOX0NIQVJTLnRlc3QobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjb2x1bW4gbmFtZSAnJHtuYW1lfSc6IGNhbm5vdCBjb250YWluIHF1b3RlcyAoJywgXCIsIFxcYCksIHNlbWljb2xvbnMsIHBhcmVudGhlc2VzLCBvciBiYWNrc2xhc2hlc2AsXG4gICAgKVxuICB9XG5cbiAgLy8gTm90ZTogU1FMIHJlc2VydmVkIGtleXdvcmRzIChTRUxFQ1QsIFdIRVJFLCBldGMuKSBwYXNzIHZhbGlkYXRpb25cbiAgLy8gVGhleSBhcmUgYXV0b21hdGljYWxseSBxdW90ZWQgd2l0aCBicmFja2V0cyBba2V5d29yZF0gZHVyaW5nIHRhYmxlIGNyZWF0aW9uXG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhhdCBhIHRhYmxlIG5hbWUgaXMgYSBzYWZlIFNRTCBpZGVudGlmaWVyLlxuICogUHJldmVudHMgU1FMIGluamVjdGlvbiBieSBlbnN1cmluZyB0YWJsZSBuYW1lcyBmb2xsb3cgc3RyaWN0IHJ1bGVzLlxuICogVmFsaWRhdGVkIG5hbWVzIGFyZSB1c2VkIHdpdGggU1FMaXRlJ3MgYnJhY2tldC1xdW90aW5nIHN5bnRheCBbbmFtZV0gZm9yIHNhZmUgaGFuZGxpbmcuXG4gKlxuICogSU1QT1JUQU5UOiBUaGlzIHZhbGlkYXRlcyBTVFJVQ1RVUkFML01FVEEgaWRlbnRpZmllcnMgKHRhYmxlIG5hbWVzKSwgTk9UIGRhdGEgaWRlbnRpZmllcnMuXG4gKiBEYXRhIHJvdyBpZGVudGlmaWVycyAoUklEKSB1c2Ugc2VwYXJhdGUgdmFsaWRhdGlvbiB3aXRoIDY0LWNoYXIgbGltaXQgZm9yIHBheWxvYWQgZGF0YS5cbiAqXG4gKiBWYWxpZGF0aW9uIG9jY3VycyBhdCBUV08gc3RhZ2VzOlxuICogMS4gUFJFLVRSQU5TRk9STUFUSU9OOiBJbnB1dCB2YWxpZGF0aW9uIChzdHJ1Y3R1cmFsIGNvcnJlY3RuZXNzKVxuICogMi4gUE9TVC1UUkFOU0ZPUk1BVElPTjogQWZ0ZXIgZXNjYXBpbmcgKC8g4oaSIF9fanhfXywgLSDihpIgX2p4XykgdG8gZW5zdXJlIFNRTGl0ZSBjb21wYXRpYmlsaXR5XG4gKlxuICogUnVsZXMgKHByZS10cmFuc2Zvcm1hdGlvbik6XG4gKiAtIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciAoYS16LCBBLVopXG4gKiAtIENhbiBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBmb3J3YXJkIHNsYXNoZXMsIGh5cGhlbnNcbiAqIC0gTWF4aW11bSA1OCBjaGFyYWN0ZXJzIChkZWZhdWx0LyBwcmVmaXggOCBjaGFycyArIHRhYmxlIG5hbWUgNTAgY2hhcnMpXG4gKiAtIENhbm5vdCBjb250YWluIGJyYWNrZXRzIF0gd2hpY2ggY291bGQgZXNjYXBlIGJyYWNrZXQtcXVvdGluZ1xuICogLSBDYW5ub3QgYmUgZW1wdHlcbiAqXG4gKiBSdWxlcyAocG9zdC10cmFuc2Zvcm1hdGlvbik6XG4gKiAtIFRyYW5zZm9ybWVkIG5hbWUgbXVzdCBub3QgZXhjZWVkIDgwIGNoYXJhY3RlcnNcbiAqIC0gUHJldmVudHMgU1FMaXRlIGlkZW50aWZpZXIgb3ZlcmZsb3cgYWZ0ZXIgZXNjYXBpbmdcbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRhYmxlIG5hbWUgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIFNhZmUgdGFibGUgbmFtZSBmb3IgU1FMaXRlIChlLmcuLCAnZGVmYXVsdF9fanhfX2V4cGVuc2VzJywgJ2Zvb19qeF9iYXInKVxuICogQHRocm93cyBFcnJvciBpZiB0YWJsZSBuYW1lIGlzIGludmFsaWQgb3IgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNhZmUgPSB2YWxpZGF0ZVRhYmxlTmFtZSgndXNlcnMnKSAgICAgICAgICAgLy8gUmV0dXJucyAndXNlcnMnXG4gKiBjb25zdCBzYWZlID0gdmFsaWRhdGVUYWJsZU5hbWUoJ2RlZmF1bHQvb3JkZXJzJykgIC8vIFJldHVybnMgJ2RlZmF1bHRfX2p4X19vcmRlcnMnXG4gKiBjb25zdCBzYWZlID0gdmFsaWRhdGVUYWJsZU5hbWUoJ2Zvby1iYXInKSAgICAgICAgIC8vIFJldHVybnMgJ2Zvb19qeF9iYXInXG4gKiB2YWxpZGF0ZVRhYmxlTmFtZSgndGVzdF0gRFJPUCcpICAgICAgICAgICAgICAgICAgIC8vIFRocm93cyAoYnJhY2tldCBlc2NhcGUpXG4gKiB2YWxpZGF0ZVRhYmxlTmFtZSgnMTIzYWJjJykgICAgICAgICAgICAgICAgICAgICAgIC8vIFRocm93cyAoc3RhcnRzIHdpdGggbnVtYmVyKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRhYmxlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBDaGVjayBmb3IgZW1wdHkgb3Igbm9uLXN0cmluZyB2YWx1ZXNcbiAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZywgZ290OiAke3R5cGVvZiBuYW1lfWApXG4gIH1cblxuICAvLyBSZWplY3QgYnJhY2tldCBjaGFyYWN0ZXJzIHRoYXQgY291bGQgZXNjYXBlIFNRTGl0ZSdzIGJyYWNrZXQtcXVvdGluZ1xuICAvLyBTUUxpdGUgdXNlcyBbbmFtZV0gZm9yIGlkZW50aWZpZXJzLCBhbmQgXSB3b3VsZCBjbG9zZSB0aGUgYnJhY2tldCBlYXJseVxuICAvLyBBbGxvd3MgdXMgdG8gc2FmZWx5IHVzZSB2YWxpZGF0ZWQgbmFtZXMgaW4gQ1JFQVRFIFRBQkxFIFske25hbWV9XSBzdGF0ZW1lbnRzXG4gIGlmIChuYW1lLmluY2x1ZGVzKCddJykgfHwgbmFtZS5pbmNsdWRlcygnWycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgdGFibGUgbmFtZSAnJHtuYW1lfSc6IGNhbm5vdCBjb250YWluIGJyYWNrZXRzIFsgb3IgXSAoYnJhY2tldCBlc2NhcGUgdnVsbmVyYWJpbGl0eSlgLFxuICAgIClcbiAgfVxuXG4gIC8vIEJsb2NrIFNRTCBjb21tZW50IG1hcmtlcnMgKGRlZmVuc2UtaW4tZGVwdGggZXZlbiB3aXRoIGJyYWNrZXQtcXVvdGluZylcbiAgZW5zdXJlRG9lc05vdENvbnRhaW4oXG4gICAgbmFtZSxcbiAgICAnLS0nLFxuICAgIGBJbnZhbGlkIHRhYmxlIG5hbWUgJyR7bmFtZX0nOiBjYW5ub3QgY29udGFpbiAtLSAoU1FMIGNvbW1lbnQgbWFya2VyKWAsXG4gIClcblxuICBjb25zdCB7IHRhYmxlTmFtZSwgaGFzU2NoZW1hIH0gPSBleHRyYWN0VGFibGVOYW1lKG5hbWUpXG5cbiAgLy8gQWxsb3cgd2hpdGVsaXN0ZWQgc3lzdGVtIHRhYmxlcyAoZS5nLiwgX3N5bmNTY29wZSwgX2NvbW1hbmRRdWV1ZSlcbiAgaWYgKGlzU3FsaXRlU3lzdGVtVGFibGUodGFibGVOYW1lKSkge1xuICAgIC8vIFN5c3RlbSB0YWJsZXMgYnlwYXNzIENvbW1vbk5hbWVNaXhlZFJlZ2V4IHZhbGlkYXRpb24gYnV0IHN0aWxsIGdldCB0cmFuc2Zvcm1lZFxuICAgIGNvbnN0IHRyYW5zZm9ybWVkTmFtZSA9IHNhZmVUYWJsZU5hbWUobmFtZSlcbiAgICBpZiAodHJhbnNmb3JtZWROYW1lLmxlbmd0aCA+IE1BWF9QT1NUX0VTQ0FQRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB0YWJsZSBuYW1lICcke25hbWV9JzogYWZ0ZXIgdHJhbnNmb3JtYXRpb24gYmVjb21lcyAnJHt0cmFuc2Zvcm1lZE5hbWV9JyAoJHtTdHJpbmcodHJhbnNmb3JtZWROYW1lLmxlbmd0aCl9IGNoYXJzLCBtYXggJHtTdHJpbmcoTUFYX1BPU1RfRVNDQVBFKX0pYCxcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkTmFtZVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgdGFibGUgbmFtZSBtYXRjaGVzIENvbW1vbk5hbWVNaXhlZFJlZ2V4XG4gIC8vICgyLTUwIGNoYXJzLCBhbHBoYW51bWVyaWMvaHlwaGVucy91bmRlcnNjb3Jlcywgc3RhcnRzL2VuZHMgd2l0aCBsZXR0ZXIgb3IgbnVtYmVyKVxuICBpZiAoIUNvbW1vbk5hbWVNaXhlZFJlZ2V4LnRlc3QodGFibGVOYW1lKSkge1xuICAgIGNvbnN0IHBhcnQgPSBoYXNTY2hlbWEgPyBgdGFibGUgcGFydCAnJHt0YWJsZU5hbWV9J2AgOiBgbmFtZWBcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCB0YWJsZSBuYW1lICcke25hbWV9JzogJHtwYXJ0fSBtdXN0IGJlIDItNTAgY2hhcmFjdGVycywgc3RhcnQgd2l0aCBhIGxldHRlciwgY29udGFpbiBvbmx5IGxldHRlcnMvbnVtYmVycy9oeXBoZW5zL3VuZGVyc2NvcmVzLCBhbmQgZW5kIHdpdGggYSBsZXR0ZXIgb3IgbnVtYmVyYCxcbiAgICApXG4gIH1cblxuICAvLyBQT1NULVRSQU5TRk9STUFUSU9OIFZBTElEQVRJT046IEVuc3VyZSB0cmFuc2Zvcm1lZCBuYW1lIGRvZXNuJ3QgZXhjZWVkIGxpbWl0XG4gIC8vIFRyYW5zZm9ybWF0aW9uIGV4cGFuZHMgY2hhcmFjdGVyczogLyDihpIgX19qeF9fICgxIOKGkiA1IGNoYXJzKSwgLSDihpIgX2p4XyAoMSDihpIgNCBjaGFycylcbiAgLy8gRXhhbXBsZTogJ2RlZmF1bHQvZm9vLWJhcicgKDE1IGNoYXJzKSDihpIgJ2RlZmF1bHRfX2p4X19mb29fanhfYmFyJyAoMjMgY2hhcnMpXG4gIC8vIExpbWl0IGFjY291bnRzIGZvciBicmFja2V0LXF1b3RpbmcgW25hbWVdIGFkZGVkIGR1cmluZyBDUkVBVEUgVEFCTEVcbiAgLy8gTWF4OiA1OCBjaGFycyAoZGVmYXVsdC8gKyA1MCBjaGFyIHRhYmxlIG5hbWUpICsgZXhwYW5zaW9uICsgMiBicmFja2V0c1xuICBjb25zdCB0cmFuc2Zvcm1lZE5hbWUgPSBzYWZlVGFibGVOYW1lKG5hbWUpXG4gIGlmICh0cmFuc2Zvcm1lZE5hbWUubGVuZ3RoID4gTUFYX1BPU1RfRVNDQVBFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgdGFibGUgbmFtZSAnJHtuYW1lfSc6IGFmdGVyIHRyYW5zZm9ybWF0aW9uIGJlY29tZXMgJyR7dHJhbnNmb3JtZWROYW1lfScgKCR7U3RyaW5nKHRyYW5zZm9ybWVkTmFtZS5sZW5ndGgpfSBjaGFycywgbWF4ICR7U3RyaW5nKE1BWF9QT1NUX0VTQ0FQRSl9KWAsXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkTmFtZVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSB0YWJsZSBuYW1lIHRvIGJlIFNRTGl0ZSBwYXJzZXItY29tcGF0aWJsZS5cbiAqIC0gJy8nIC0+ICdfX2p4X18nIChlLmcuLCBkZWZhdWx0L2V4cGVuc2VzKVxuICogLSAnLScgLT4gJ19qeF8nIChlLmcuLCBmb28tYmFyKVxuICpcbiAqIEludGVybmFsIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIHVzZWQgYnkgdmFsaWRhdGVUYWJsZU5hbWUoKS5cbiAqIEV4dGVybmFsIGNhbGxlcnMgc2hvdWxkIHVzZSB2YWxpZGF0ZVRhYmxlTmFtZSgpIHdoaWNoIHZhbGlkYXRlcyBBTkQgdHJhbnNmb3Jtcy5cbiAqXG4gKiBAcGFyYW0gdGFibGVOYW1lIC0gT3JpZ2luYWwgdGFibGUgbmFtZSAoZS5nLiwgJ2RlZmF1bHQvZXhwZW5zZXMnLCAnZm9vLWJhcicpXG4gKiBAcmV0dXJucyBTYWZlIHRhYmxlIG5hbWUgZm9yIFNRTGl0ZSAoZS5nLiwgJ2RlZmF1bHRfX2p4X19leHBlbnNlcycsICdmb29fanhfYmFyJylcbiAqXG4gKiBAaW50ZXJuYWwgLSBBY2Nlc3MgdmlhIF9fdGVzdE9ubHlfXyBleHBvcnQgZm9yIHRlc3RpbmdcbiAqL1xuZnVuY3Rpb24gc2FmZVRhYmxlTmFtZSh0YWJsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5lZWRzVHJhbnNmb3JtID0gVEFCTEVfVFJBTlNGT1JNQVRJT05TLnNvbWUoKFtwYXR0ZXJuXSkgPT4gcGF0dGVybi50ZXN0KHRhYmxlTmFtZSkpXG4gIGlmICghbmVlZHNUcmFuc2Zvcm0pIHJldHVybiB0YWJsZU5hbWVcblxuICByZXR1cm4gVEFCTEVfVFJBTlNGT1JNQVRJT05TLnJlZHVjZShcbiAgICAoY3VycmVudCwgW3BhdHRlcm4sIHJlcGxhY2VtZW50XSkgPT4gY3VycmVudC5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KSxcbiAgICB0YWJsZU5hbWUsXG4gIClcbn1cblxuLyoqXG4gKiBUZXN0aW5nLW9ubHkgZXhwb3J0cyAtIG5vdCBwYXJ0IG9mIHB1YmxpYyBBUElcbiAqIEFjY2VzcyBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHVuaXQgdGVzdGluZyB0cmFuc2Zvcm1hdGlvbiBsb2dpY1xuICovXG5leHBvcnQgY29uc3QgX190ZXN0T25seV9fID0ge1xuICBzYWZlVGFibGVOYW1lLFxufSBhcyBjb25zdFxuXG4vKipcbiAqIFJlcGxhY2UgcXVlcnkgcGFyYW1ldGVycyAoJHBhcmFtIG9yIEBwYXJhbSkgd2l0aCAnPycgcGxhY2Vob2xkZXJzIGZvciB2YWxpZGF0aW9uLlxuICogU1FMaXRlJ3MgcGFyc2VyIHJlcXVpcmVzIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgcXVlcnkgcHJlcGFyYXRpb24uXG4gKlxuICogQHBhcmFtIHF1ZXJ5IC0gU1FMIHF1ZXJ5IHdpdGggbmFtZWQgcGFyYW1ldGVyc1xuICogQHJldHVybnMgUXVlcnkgd2l0aCBwb3NpdGlvbmFsIHBsYWNlaG9sZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVBhcmFtZXRlcnMocXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFNRTGl0ZSdzIHBhcnNlciBkb2VzIG5vdCBzdXBwb3J0IG5hbWVkIHBhcmFtZXRlcnMgbGlrZSAkcGFyYW0gb3IgQHBhcmFtIGluIHRoZSBzYW1lIHdheSBhcyBvdGhlciBkYXRhYmFzZXMuXG4gIC8vIFRvIHZhbGlkYXRlIHRoZSBxdWVyeSBzeW50YXggd2l0aG91dCBwcm92aWRpbmcgcGFyYW1ldGVyIHZhbHVlcywgd2UgcmVwbGFjZSAkcGFyYW0gYW5kIEBwYXJhbSB3aXRoICc/Jy5cbiAgLy8gVGhpcyBlbnN1cmVzIGNvbXBhdGliaWxpdHkgd2l0aCBTUUxpdGUncyBwYXJzZXIgZHVyaW5nIHF1ZXJ5IHZhbGlkYXRpb24uXG4gIHJldHVybiBxdWVyeS5yZXBsYWNlKC9bJEBdKFxcdyspL2csICc/Jylcbn1cblxuLyoqXG4gKiBSZXBsYWNlIHRhYmxlIG5hbWVzIGluIHF1ZXJ5IHdpdGggc2FmZSBuYW1lcyBmb3IgdmFsaWRhdGlvbi5cbiAqXG4gKiBTZWN1cml0eTogR3VhcmRzIGFnYWluc3QgZW1wdHkgc3RyaW5nIHdoaWNoIHdvdWxkIGNhdXNlIHJlZ2V4IHRvIG1hdGNoIGVudGlyZSBxdWVyeS5cbiAqXG4gKiBAcGFyYW0gcXVlcnkgLSBPcmlnaW5hbCBTUUwgcXVlcnlcbiAqIEBwYXJhbSBvcmlnaW5hbE5hbWUgLSBPcmlnaW5hbCB0YWJsZSBuYW1lXG4gKiBAcGFyYW0gc2FmZU5hbWUgLSBTYWZlIHRhYmxlIG5hbWVcbiAqIEByZXR1cm5zIFF1ZXJ5IHdpdGggcmVwbGFjZWQgdGFibGUgbmFtZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VUYWJsZU5hbWUocXVlcnk6IHN0cmluZywgb3JpZ2luYWxOYW1lOiBzdHJpbmcsIHNhZmVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBHdWFyZCBhZ2FpbnN0IGVtcHR5IGlucHV0cyB3aGljaCB3b3VsZCBjYXVzZSByZWdleCBpc3N1ZXNcbiAgaWYgKCFxdWVyeSB8fCAhb3JpZ2luYWxOYW1lIHx8ICFzYWZlTmFtZSB8fCBvcmlnaW5hbE5hbWUgPT09IHNhZmVOYW1lKSB7XG4gICAgcmV0dXJuIHF1ZXJ5XG4gIH1cblxuICAvLyBDaGVjayBpZiBvcmlnaW5hbE5hbWUgaXMgYWxyZWFkeSBicmFja2V0ZWQgKGUuZy4sIFtwYWNrYWdlXS5bdGFibGVdKVxuICAvLyBGb3IgdGhlc2UsIGRvIGEgZGlyZWN0IHJlcGxhY2VtZW50IHdpdGhvdXQgYWRkaW5nIG1vcmUgYnJhY2tldHNcbiAgaWYgKG9yaWdpbmFsTmFtZS5zdGFydHNXaXRoKCdbJykgJiYgb3JpZ2luYWxOYW1lLmVuZHNXaXRoKCddJykpIHtcbiAgICBjb25zdCBlc2NhcGVkTmFtZSA9IGVzY2FwZVJlZ0V4cChvcmlnaW5hbE5hbWUpXG4gICAgcmV0dXJuIHF1ZXJ5LnJlcGxhY2UobmV3IFJlZ0V4cChlc2NhcGVkTmFtZSwgJ2cnKSwgYFske3NhZmVOYW1lfV1gKVxuICB9XG5cbiAgLy8gRXNjYXBlIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVycyBpbiB0YWJsZSBuYW1lXG4gIGNvbnN0IGVzY2FwZWROYW1lID0gZXNjYXBlUmVnRXhwKG9yaWdpbmFsTmFtZSlcblxuICAvLyBSZXBsYWNlIHVucXVvdGVkIHRhYmxlLW5hbWUgd2l0aCBzYWZlLW5hbWUgKHVzaW5nIHdvcmQgYm91bmRhcmllcylcbiAgcmV0dXJuIChcbiAgICBxdWVyeVxuICAgICAgLy8gUmVwbGFjZSBbdGFibGUtbmFtZV0gd2l0aCBbc2FmZS1uYW1lXSAoZm9yIFNRTC1lc2NhcGVkIG5hbWVzKVxuICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXFske2VzY2FwZWROYW1lfVxcXFxdYCwgJ2cnKSwgYFske3NhZmVOYW1lfV1gKVxuICAgICAgLy8gUmVwbGFjZSB1bnF1b3RlZCB0YWJsZS1uYW1lIHdpdGggc2FmZS1uYW1lICh1c2luZyB3b3JkIGJvdW5kYXJpZXMpXG4gICAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcYiR7ZXNjYXBlZE5hbWV9XFxcXGJgLCAnZycpLCBzYWZlTmFtZSlcbiAgKVxufVxuXG4vKipcbiAqIENyZWF0ZSBpbi1tZW1vcnkgU1FMaXRlIGRhdGFiYXNlIHdpdGggdGFibGVzIGZvciB2YWxpZGF0aW9uLlxuICogQ3JlYXRlcyB0YWJsZXMgd2l0aCBzdGFuZGFyZCBKaWd4IHNjaGVtYSAoaWQsIGRhdGEpIHBsdXMgb3B0aW9uYWwgYWRkaXRpb25hbCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSB0YWJsZU5hbWVzIC0gQXJyYXkgb2YgdGFibGUgbmFtZXMgdG8gY3JlYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFNjaGVtYSBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5hZGRpdGlvbmFsQ29sdW1ucyAtIEFkZGl0aW9uYWwgY29sdW1uIG5hbWVzIHRvIGluY2x1ZGUgKGFsbCBjcmVhdGVkIGFzIFRFWFQpXG4gKiBAcmV0dXJucyBEYXRhYmFzZSBpbnN0YW5jZSB3aXRoIHRhYmxlIGluZm8gbWFwIChjYWxsZXIgbXVzdCBjbG9zZSBpdClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gU2luZ2xlIHRhYmxlXG4gKiBjb25zdCB7IGRiLCB0YWJsZXMgfSA9IGNyZWF0ZVZhbGlkYXRpb25EYXRhYmFzZShbJ3VzZXJzJ10pXG4gKiB0YWJsZXMuZ2V0KCd1c2VycycpIC8vIHsgc2FmZU5hbWU6ICd1c2VycycsIG5vcm1hbGl6ZWROYW1lOiAndXNlcnMnIH1cbiAqXG4gKiAvLyBNdWx0aXBsZSB0YWJsZXNcbiAqIGNvbnN0IHsgZGIsIHRhYmxlcyB9ID0gY3JlYXRlVmFsaWRhdGlvbkRhdGFiYXNlKFsndXNlcnMnLCAnZGVmYXVsdC9vcmRlcnMnXSlcbiAqIHRhYmxlcy5nZXQoJ2RlZmF1bHQvb3JkZXJzJykgLy8geyBzYWZlTmFtZTogJ2RlZmF1bHRfX2p4X19vcmRlcnMnLCBub3JtYWxpemVkTmFtZTogJ2RlZmF1bHQvb3JkZXJzJyB9XG4gKlxuICogLy8gV2l0aCBhZGRpdGlvbmFsIGNvbHVtbnNcbiAqIGNvbnN0IHsgZGIsIHRhYmxlcyB9ID0gY3JlYXRlVmFsaWRhdGlvbkRhdGFiYXNlKFsnaXRlbXMnXSwge1xuICogICBhZGRpdGlvbmFsQ29sdW1uczogWyduYW1lJywgJ3ZhbHVlJywgJ2xhYmVsJywgJ2ljb24nXVxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVmFsaWRhdGlvbkRhdGFiYXNlKFxuICB0YWJsZU5hbWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczoge1xuICAgIGFkZGl0aW9uYWxDb2x1bW5zPzogc3RyaW5nW11cbiAgfSA9IHt9LFxuKTogTXVsdGlUYWJsZVZhbGlkYXRpb25SZXN1bHQge1xuICBjb25zdCBkYiA9IG5ldyBEYXRhYmFzZSgnOm1lbW9yeTonKVxuICBjb25zdCB7IGFkZGl0aW9uYWxDb2x1bW5zID0gW10gfSA9IG9wdGlvbnNcbiAgY29uc3QgY29sdW1ucyA9IGJ1aWxkQ29sdW1uRGVmaW5pdGlvbnMoYWRkaXRpb25hbENvbHVtbnMpXG4gIGNvbnN0IHRhYmxlcyA9IG5ldyBNYXA8c3RyaW5nLCB7IHJlYWRvbmx5IHNhZmVOYW1lOiBzdHJpbmc7IHJlYWRvbmx5IG5vcm1hbGl6ZWROYW1lOiBzdHJpbmcgfT4oKVxuXG4gIGZvciAoY29uc3QgdGFibGVOYW1lIG9mIHRhYmxlTmFtZXMpIHtcbiAgICAvLyBDaGVjayBmb3IgZXh0ZXJuYWwgcGFja2FnZSBmb3JtYXQ6IFtwYWNrYWdlXS5bdGFibGVdXG4gICAgY29uc3QgcGFja2FnZU1hdGNoID0gRVhURVJOQUxfUEFDS0FHRV9UQUJMRV9QQVRURVJOLmV4ZWModGFibGVOYW1lKVxuICAgIGlmIChwYWNrYWdlTWF0Y2gpIHtcbiAgICAgIC8vIEV4dGVybmFsIHBhY2thZ2UgdGFibGUgLSBjcmVhdGUgd2l0aCBwYWNrYWdlX3RhYmxlIGZvcm1hdCBmb3IgdmFsaWRhdGlvblxuICAgICAgY29uc3QgWywgcGFja2FnZU5hbWUsIGVudGl0eU5hbWVdID0gcGFja2FnZU1hdGNoXG4gICAgICBjb25zdCBzYWZlTmFtZSA9IGAke3BhY2thZ2VOYW1lLnJlcGxhY2UoLy0vZywgJ18nKX1fJHtlbnRpdHlOYW1lfWBcbiAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgYnJhY2tldGVkIGZvcm1hdCBhcyBub3JtYWxpemVkTmFtZSBmb3IgcXVlcnkgcmVwbGFjZW1lbnRcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gdGFibGVOYW1lXG5cbiAgICAgIGRiLmV4ZWMoYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFske3NhZmVOYW1lfV0gKCR7Y29sdW1ucy5qb2luKCcsICcpfSlgKVxuICAgICAgdGFibGVzLnNldCh0YWJsZU5hbWUsIHsgc2FmZU5hbWUsIG5vcm1hbGl6ZWROYW1lIH0pXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gc3RyaXBXcmFwcGluZ0JyYWNrZXRzKHRhYmxlTmFtZSlcblxuICAgIC8vIFN5c3RlbSB0YWJsZXMgYnlwYXNzIG5hbWUgdmFsaWRhdGlvbiBhbmQgdXNlIHBsYXRmb3JtIHNjaGVtYXNcbiAgICBpZiAoaXNTcWxpdGVTeXN0ZW1UYWJsZShub3JtYWxpemVkTmFtZSkpIHtcbiAgICAgIGNvbnN0IHNhZmVOYW1lID0gbm9ybWFsaXplZE5hbWUgLy8gU3lzdGVtIHRhYmxlcyBkb24ndCBuZWVkIHRyYW5zZm9ybWF0aW9uXG4gICAgICBjb25zdCBzY2hlbWEgPSBTWVNURU1fVEFCTEVfU0NIRU1BU1tub3JtYWxpemVkTmFtZV1cbiAgICAgIGlmICghc2NoZW1hKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU3lzdGVtIHRhYmxlICcke25vcm1hbGl6ZWROYW1lfScgaXMgd2hpdGVsaXN0ZWQgYnV0IG1pc3Npbmcgc2NoZW1hIGRlZmluaXRpb24uIGAgK1xuICAgICAgICAgICAgYEFkZCBzY2hlbWEgdG8gU1lTVEVNX1RBQkxFX1NDSEVNQVMgKHNvdXJjZTogamlneC9wYWNrYWdlcy9kYXRhc3RvcmUvc3JjL2RhdGFiYXNlL21pZ3JhdGlvbnMvc29sdXRpb24vKWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGRiLmV4ZWMoYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFske3NhZmVOYW1lfV0gKCR7c2NoZW1hfSlgKVxuICAgICAgdGFibGVzLnNldCh0YWJsZU5hbWUsIHsgc2FmZU5hbWUsIG5vcm1hbGl6ZWROYW1lIH0pXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IHNhZmVOYW1lID0gdmFsaWRhdGVUYWJsZU5hbWUobm9ybWFsaXplZE5hbWUpXG5cbiAgICBkYi5leGVjKGBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBbJHtzYWZlTmFtZX1dICgke2NvbHVtbnMuam9pbignLCAnKX0pYClcblxuICAgIC8vIFN0b3JlIG1hcHBpbmcgd2l0aCBvcmlnaW5hbCB0YWJsZSBuYW1lIGFzIGtleVxuICAgIHRhYmxlcy5zZXQodGFibGVOYW1lLCB7IHNhZmVOYW1lLCBub3JtYWxpemVkTmFtZSB9KVxuICB9XG5cbiAgcmV0dXJuIHsgZGIsIHRhYmxlcyB9XG59XG5cbi8qKlxuICogU3RyaXAgU1FMIGNvbW1lbnRzIGZyb20gcXVlcnkgdG8gcHJldmVudCBjb21tZW50LWJhc2VkIGJ5cGFzc2VzLlxuICogUmVtb3ZlcyBib3RoIGxpbmUgY29tbWVudHMgKC0tKSBhbmQgYmxvY2sgY29tbWVudHMgKHNsYXNoLXN0YXIgbm90YXRpb24pLlxuICpcbiAqIEBwYXJhbSBxdWVyeSAtIFNRTCBxdWVyeSB3aXRoIHBvdGVudGlhbCBjb21tZW50c1xuICogQHJldHVybnMgUXVlcnkgd2l0aCBjb21tZW50cyByZW1vdmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHN0cmlwU3FsQ29tbWVudHMoJy8qIGNvbW1lbnQgKlxcLyBTRUxFQ1QgKiBGUk9NIHVzZXJzJylcbiAqIC8vIFJldHVybnM6ICcgU0VMRUNUICogRlJPTSB1c2VycydcbiAqXG4gKiBzdHJpcFNxbENvbW1lbnRzKCctLSBjb21tZW50XFxuU0VMRUNUICogRlJPTSB1c2VycycpXG4gKiAvLyBSZXR1cm5zOiAnXFxuU0VMRUNUICogRlJPTSB1c2VycydcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBTcWxDb21tZW50cyhxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHF1ZXJ5LnJlcGxhY2UoQkxPQ0tfQ09NTUVOVF9SRUdFWCwgJyAnKS5yZXBsYWNlKExJTkVfQ09NTUVOVF9SRUdFWCwgJyAnKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIFNRTCBTRUxFQ1QgcXVlcnkgc3ludGF4IGFuZCByZXR1cm4gcHJlcGFyZWQgc3RhdGVtZW50LlxuICogVGhyb3dzIGVycm9yIGlmIHF1ZXJ5IGlzIGludmFsaWQgb3Igbm90IGEgU0VMRUNULlxuICpcbiAqIFNlY3VyaXR5OiBCbG9ja3MgUFJBR01BIGNvbW1hbmRzIGFuZCBub24tU0VMRUNUIHN0YXRlbWVudHMgdG8gcHJldmVudFxuICogaW5mb3JtYXRpb24gZGlzY2xvc3VyZSBhbmQgdW5hdXRob3JpemVkIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gKiBTdHJpcHMgY29tbWVudHMgYmVmb3JlIGNoZWNraW5nIHRvIHByZXZlbnQgY29tbWVudC1iYXNlZCBieXBhc3Nlcy5cbiAqXG4gKiBAcGFyYW0gZGIgLSBTUUxpdGUgZGF0YWJhc2UgaW5zdGFuY2VcbiAqIEBwYXJhbSBxdWVyeSAtIFNRTCBxdWVyeSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgUHJlcGFyZWQgc3RhdGVtZW50XG4gKiBAdGhyb3dzIEVycm9yIGlmIHF1ZXJ5IGlzIGludmFsaWQsIG5vdCBTRUxFQ1QsIG9yIGlzIFBSQUdNQVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB2YWxpZGF0ZVNlbGVjdFF1ZXJ5KGRiLCAnU0VMRUNUICogRlJPTSB1c2VycycpICAgICAgICAgICAvLyDinIUgQWxsb3dlZFxuICogdmFsaWRhdGVTZWxlY3RRdWVyeShkYiwgJ1NFTEVDVCAqIEZST00gdXNlcnMgV0hFUkUgaWQ9MScpIC8vIOKchSBBbGxvd2VkXG4gKiB2YWxpZGF0ZVNlbGVjdFF1ZXJ5KGRiLCAnSU5TRVJUIElOVE8gdXNlcnMgLi4uJykgICAgICAgICAgLy8g4p2MIFRocm93c1xuICogdmFsaWRhdGVTZWxlY3RRdWVyeShkYiwgJ1BSQUdNQSB0YWJsZV9pbmZvKHVzZXJzKScpICAgICAgIC8vIOKdjCBUaHJvd3MgKGluZm8gZGlzY2xvc3VyZSlcbiAqIHZhbGlkYXRlU2VsZWN0UXVlcnkoZGIsICcvKiBjb21tZW50ICpcXC8gUFJBR01BIC4uLicpICAgICAgLy8g4p2MIFRocm93cyAoY29tbWVudCBzdHJpcHBlZCBmaXJzdClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTZWxlY3RRdWVyeShkYjogRGF0YWJhc2UuRGF0YWJhc2UsIHF1ZXJ5OiBzdHJpbmcpOiBEYXRhYmFzZS5TdGF0ZW1lbnQge1xuICAvLyBUcmltIGFuZCBub3JtYWxpemUgd2hpdGVzcGFjZSBmb3IgY2hlY2tpbmdcbiAgY29uc3QgdHJpbW1lZCA9IHF1ZXJ5LnRyaW0oKVxuXG4gIGlmICghdHJpbW1lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgY2Fubm90IGJlIGVtcHR5JylcbiAgfVxuXG4gIC8vIFN0cmlwIGNvbW1lbnRzIGJlZm9yZSBjaGVja2luZyBmb3IgUFJBR01BIHRvIHByZXZlbnQgY29tbWVudC1iYXNlZCBieXBhc3Nlc1xuICAvLyBFeGFtcGxlcyBvZiBieXBhc3NlczogLyogY29tbWVudCAqLyBQUkFHTUEsIC0tIGNvbW1lbnRcXG5QUkFHTUFcbiAgY29uc3Qgbm9Db21tZW50cyA9IHN0cmlwU3FsQ29tbWVudHModHJpbW1lZCkudHJpbSgpXG5cbiAgLy8gQmxvY2sgUFJBR01BIGNvbW1hbmRzIGV4cGxpY2l0bHkgKHRoZXkgYXJlIG1hcmtlZCBhcyBcInJlYWRlclwiIGJ1dCBleHBvc2Ugc3lzdGVtIGluZm8pXG4gIC8vIFBSQUdNQSBjYW4gbGVhayBkYXRhYmFzZSBzY2hlbWEsIHRhYmxlIHN0cnVjdHVyZSwgYW5kIGNvbmZpZ3VyYXRpb25cbiAgLy8gRXhhbXBsZXM6IFBSQUdNQSB0YWJsZV9pbmZvKCksIFBSQUdNQSBkYXRhYmFzZV9saXN0LCBQUkFHTUEgc2NoZW1hLnRhYmxlX2luZm8oKVxuICBjb25zdCB1cHBlclF1ZXJ5ID0gbm9Db21tZW50cy50b1VwcGVyQ2FzZSgpXG4gIGlmICh1cHBlclF1ZXJ5LnN0YXJ0c1dpdGgoJ1BSQUdNQScpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQUkFHTUEgY29tbWFuZHMgYXJlIG5vdCBhbGxvd2VkIGluIGRhdGFzb3VyY2VzJylcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHF1ZXJ5IHN5bnRheCB3aXRob3V0IGV4ZWN1dGluZyAtIGp1c3QgcHJlcGFyZSB0aGUgc3RhdGVtZW50XG4gIC8vIFVzZXMgU1FMaXRlJ3MgaGFyZGVuZWQgcGFyc2VyIChiYXR0bGUtdGVzdGVkIG92ZXIgZGVjYWRlcykgdG8gdmFsaWRhdGUgc3ludGF4XG4gIC8vIFRoaXMgY2hlY2tzIFNRTCBzeW50YXggd2l0aG91dCBuZWVkaW5nIHBhcmFtZXRlciB2YWx1ZXNcbiAgY29uc3Qgc3RtdCA9IGRiLnByZXBhcmUocXVlcnkpXG5cbiAgLy8gRW5zdXJlIGl0J3MgYSBTRUxFQ1QgcXVlcnkgKHJlYWRlciA9IHRydWUgbWVhbnMgcmVhZC1vbmx5KVxuICAvLyBOb3RlOiBQUkFHTUEgaXMgYWxzbyBtYXJrZWQgYXMgcmVhZGVyLCBoZW5jZSB0aGUgZXhwbGljaXQgY2hlY2sgYWJvdmVcbiAgaWYgKCFzdG10LnJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSBTRUxFQ1QgcXVlcmllcyBhcmUgYWxsb3dlZCBpbiBkYXRhc291cmNlcycpXG4gIH1cblxuICByZXR1cm4gc3RtdFxufVxuXG4vKipcbiAqIEV4dHJhY3QgY29sdW1uIG5hbWVzIGZyb20gcHJlcGFyZWQgc3RhdGVtZW50LlxuICpcbiAqIEBwYXJhbSBzdG10IC0gUHJlcGFyZWQgU1FMaXRlIHN0YXRlbWVudFxuICogQHJldHVybnMgQXJyYXkgb2YgbG93ZXJjYXNlIGNvbHVtbiBuYW1lc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdENvbHVtbnMoc3RtdDogRGF0YWJhc2UuU3RhdGVtZW50KTogc3RyaW5nW10ge1xuICByZXR1cm4gc3RtdC5jb2x1bW5zKCkubWFwKChjb2wpID0+IGNvbC5uYW1lLnRvTG93ZXJDYXNlKCkpXG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhhdCBxdWVyeSByZXR1cm5zIHJlcXVpcmVkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGNvbHVtbnMgLSBDb2x1bW4gbmFtZXMgZnJvbSBxdWVyeSAobG93ZXJjYXNlKVxuICogQHBhcmFtIHJlcXVpcmVkQ29sdW1ucyAtIFJlcXVpcmVkIGNvbHVtbiBuYW1lcyAobG93ZXJjYXNlKVxuICogQHJldHVybnMgT2JqZWN0IHdpdGggdmFsaWRhdGlvbiByZXN1bHQgYW5kIG1pc3NpbmcgY29sdW1uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBWYWxpZGF0ZSBkcm9wZG93biBjb2x1bW5zXG4gKiBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVJlcXVpcmVkQ29sdW1ucyhjb2x1bW5zLCBbJ3ZhbHVlJywgJ2xhYmVsJ10pXG4gKlxuICogLy8gVmFsaWRhdGUgY3VzdG9tIGNvbHVtbnNcbiAqIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUmVxdWlyZWRDb2x1bW5zKGNvbHVtbnMsIFsnaWQnLCAnbmFtZScsICdlbWFpbCddKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVJlcXVpcmVkQ29sdW1ucyhcbiAgY29sdW1uczogc3RyaW5nW10sXG4gIHJlcXVpcmVkQ29sdW1uczogc3RyaW5nW10sXG4pOiB7XG4gIGlzVmFsaWQ6IGJvb2xlYW5cbiAgbWlzc2luZzogc3RyaW5nW11cbn0ge1xuICBjb25zdCBjb2x1bW5TZXQgPSBuZXcgU2V0KGNvbHVtbnMpXG4gIGNvbnN0IG1pc3NpbmcgPSByZXF1aXJlZENvbHVtbnMuZmlsdGVyKChyZXF1aXJlZCkgPT4gIWNvbHVtblNldC5oYXMocmVxdWlyZWQpKVxuXG4gIHJldHVybiB7XG4gICAgaXNWYWxpZDogbWlzc2luZy5sZW5ndGggPT09IDAsXG4gICAgbWlzc2luZyxcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNPdXRlcldoaXRlc3BhY2UodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUudHJpbSgpICE9PSB2YWx1ZVxufVxuXG5mdW5jdGlvbiBlbnN1cmVEb2VzTm90Q29udGFpbih2YWx1ZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBlcnJvck1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAodmFsdWUuaW5jbHVkZXModG9rZW4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnN1cmVEb2VzTm90Q29udGFpbkFueSh2YWx1ZTogc3RyaW5nLCB0b2tlbnM6IHN0cmluZ1tdLCBlcnJvck1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAodG9rZW5zLnNvbWUoKHRva2VuKSA9PiB2YWx1ZS5pbmNsdWRlcyh0b2tlbikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0VGFibGVOYW1lKG5hbWU6IHN0cmluZyk6IHsgdGFibGVOYW1lOiBzdHJpbmc7IGhhc1NjaGVtYTogYm9vbGVhbiB9IHtcbiAgY29uc3QgcGFydHMgPSBuYW1lLnNwbGl0KFNDSEVNQV9TRVBBUkFUT1IpXG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7IHRhYmxlTmFtZTogbmFtZSwgaGFzU2NoZW1hOiBmYWxzZSB9XG4gIH1cblxuICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgY29uc3QgW3NjaGVtYSwgdGFibGVdID0gcGFydHNcblxuICAgIGlmIChzY2hlbWEgIT09IERFRkFVTFRfU0NIRU1BKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHRhYmxlIG5hbWUgJyR7bmFtZX0nOiBzY2hlbWEgbXVzdCBiZSAnJHtERUZBVUxUX1NDSEVNQX0nLCBnb3QgJyR7c2NoZW1hfSdgLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB7IHRhYmxlTmFtZTogdGFibGUsIGhhc1NjaGVtYTogdHJ1ZSB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFibGUgbmFtZSAnJHtuYW1lfSc6IGNhbm5vdCBjb250YWluIG11bHRpcGxlICcvJyBzZXBhcmF0b3JzYClcbn1cblxuZnVuY3Rpb24gc3RyaXBXcmFwcGluZ0JyYWNrZXRzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBuYW1lLnN0YXJ0c1dpdGgoJ1snKSAmJiBuYW1lLmVuZHNXaXRoKCddJykgPyBuYW1lLnNsaWNlKDEsIC0xKSA6IG5hbWVcbn1cblxuZnVuY3Rpb24gYnVpbGRDb2x1bW5EZWZpbml0aW9ucyhhZGRpdGlvbmFsQ29sdW1uczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHVuaXF1ZUNvbHVtbnMgPSBBcnJheS5mcm9tKG5ldyBTZXQoYWRkaXRpb25hbENvbHVtbnMpKS5maWx0ZXIoXG4gICAgKGNvbHVtbikgPT4gIVJFU0VSVkVEX0NPTFVNTlMuaGFzKGNvbHVtbiksXG4gIClcblxuICBjb25zdCB2YWxpZGF0ZWRDb2x1bW5zID0gdW5pcXVlQ29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgIHZhbGlkYXRlQ29sdW1uTmFtZShjb2x1bW4pXG4gICAgcmV0dXJuIGBbJHtjb2x1bW59XSBURVhUYFxuICB9KVxuXG4gIHJldHVybiBbJ2lkIFRFWFQgUFJJTUFSWSBLRVknLCAnZGF0YSBURVhUJywgJ2ZpbGUgVEVYVCcsIC4uLnZhbGlkYXRlZENvbHVtbnNdXG59XG5cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJylcbn1cbiJdfQ==
|