@ampath-kenya/ngx-openmrs-formentry 2.12.25-beta.0 → 2.12.26-beta
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/.editorconfig +13 -0
- package/.prettierignore +40 -0
- package/.prettierrc +6 -0
- package/.travis.yml +17 -0
- package/README.md +36 -0
- package/angular.json +143 -0
- package/{bundles → dist/ngx-formentry/bundles}/ampath-kenya-ngx-openmrs-formentry.umd.js +4 -2
- package/dist/ngx-formentry/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js.map +1 -0
- package/dist/ngx-formentry/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js +2 -0
- package/dist/ngx-formentry/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js.map +1 -0
- package/dist/ngx-formentry/esm2015/form-entry/form-renderer/form-renderer.component.js +655 -0
- package/dist/ngx-formentry/esm5/form-entry/form-renderer/form-renderer.component.js +217 -0
- package/dist/ngx-formentry/fesm2015/ampath-kenya-ngx-openmrs-formentry.js +11271 -0
- package/dist/ngx-formentry/fesm2015/ampath-kenya-ngx-openmrs-formentry.js.map +1 -0
- package/{fesm5 → dist/ngx-formentry/fesm5}/ampath-kenya-ngx-openmrs-formentry.js +5 -3
- package/dist/ngx-formentry/fesm5/ampath-kenya-ngx-openmrs-formentry.js.map +1 -0
- package/dist/ngx-formentry/package.json +35 -0
- package/package.json +74 -20
- package/scripts/build.sh +2 -0
- package/target/npmlist.json +1 -0
- package/tsconfig.json +20 -0
- package/tslint.json +96 -0
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js.map +0 -1
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js +0 -2
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js.map +0 -1
- package/esm2015/form-entry/form-renderer/form-renderer.component.js +0 -653
- package/esm5/form-entry/form-renderer/form-renderer.component.js +0 -215
- package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js +0 -11269
- package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js.map +0 -1
- package/fesm5/ampath-kenya-ngx-openmrs-formentry.js.map +0 -1
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/afe-control-type.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/afe-form-array.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/afe-form-control.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/afe-form-group.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/control-extensions.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/index.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/value-change.listener.d.ts +0 -0
- /package/{ampath-kenya-ngx-openmrs-formentry.d.ts → dist/ngx-formentry/ampath-kenya-ngx-openmrs-formentry.d.ts} +0 -0
- /package/{ampath-kenya-ngx-openmrs-formentry.metadata.json → dist/ngx-formentry/ampath-kenya-ngx-openmrs-formentry.metadata.json} +0 -0
- /package/{ampath-kenya-ngx-openmrs-formentry.metadata.json-e → dist/ngx-formentry/ampath-kenya-ngx-openmrs-formentry.metadata.json-e} +0 -0
- /package/{change-tracking → dist/ngx-formentry/change-tracking}/control-relation.d.ts +0 -0
- /package/{change-tracking → dist/ngx-formentry/change-tracking}/control-relations.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/afe-ng-select.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/appointments-overview/appointments-overview.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/check-box/checkbox.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/check-box/checkbox.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/date-picker/date-picker.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/date-time-picker.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/date-time-picker.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/picker-modal/modal.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/pipes/moment.pipe.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/time-picker/time-picker.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/file-upload/file-upload.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/file-upload/file-upload.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/file-upload/secure.pipe.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-date-time-picker/ngx-date-time-picker.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-date-time-picker/ngx-date-time-picker.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-time-picker/ngx-time-picker.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-time-picker/ngx-time-picker.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/remote-select/remote-select.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/remote-select/remote-select.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/diacritics.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/option-list.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/option.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/select-dropdown.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/select-dropdown.component.style.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/select.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/select.component.style.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/select.module.d.ts +0 -0
- /package/{encounter-viewer → dist/ngx-formentry/encounter-viewer}/display-controls/file-preview.component.d.ts +0 -0
- /package/{encounter-viewer → dist/ngx-formentry/encounter-viewer}/display-controls/question-control.component.d.ts +0 -0
- /package/{encounter-viewer → dist/ngx-formentry/encounter-viewer}/display-controls/remote-answer.component.d.ts +0 -0
- /package/{encounter-viewer → dist/ngx-formentry/encounter-viewer}/encounter-container/encounter-container.component.d.ts +0 -0
- /package/{encounter-viewer → dist/ngx-formentry/encounter-viewer}/encounter-pdf-viewer.service.d.ts +0 -0
- /package/{encounter-viewer → dist/ngx-formentry/encounter-viewer}/encounter-view/encounter-viewer.component.d.ts +0 -0
- /package/{encounter-viewer → dist/ngx-formentry/encounter-viewer}/encounter-viewer.module.d.ts +0 -0
- /package/{encounter-viewer → dist/ngx-formentry/encounter-viewer}/encounter-viewer.service.d.ts +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/abstract-controls-extension/afe-control-type.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/abstract-controls-extension/afe-form-array.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/abstract-controls-extension/afe-form-control.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/abstract-controls-extension/afe-form-group.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/abstract-controls-extension/control-extensions.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/abstract-controls-extension/index.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/abstract-controls-extension/value-change.listener.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/ampath-kenya-ngx-openmrs-formentry.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/change-tracking/control-relation.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/change-tracking/control-relations.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/afe-ng-select.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/appointments-overview/appointments-overview.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/check-box/checkbox.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/check-box/checkbox.module.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/date-time-picker/date-picker/date-picker.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/date-time-picker/date-time-picker.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/date-time-picker/date-time-picker.module.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/date-time-picker/picker-modal/modal.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/date-time-picker/pipes/moment.pipe.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/date-time-picker/time-picker/time-picker.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/file-upload/file-upload.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/file-upload/file-upload.module.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/file-upload/secure.pipe.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/ngx-date-time-picker/ngx-date-time-picker.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/ngx-date-time-picker/ngx-date-time-picker.module.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/ngx-time-picker/ngx-time-picker.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/ngx-time-picker/ngx-time-picker.module.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/remote-select/remote-select.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/remote-select/remote-select.module.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/select/diacritics.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/select/option-list.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/select/option.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/select/select-dropdown.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/select/select-dropdown.component.style.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/select/select.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/select/select.component.style.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/components/select/select.module.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/encounter-viewer/display-controls/file-preview.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/encounter-viewer/display-controls/question-control.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/encounter-viewer/display-controls/remote-answer.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/encounter-viewer/encounter-container/encounter-container.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/encounter-viewer/encounter-pdf-viewer.service.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/encounter-viewer/encounter-view/encounter-viewer.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/encounter-viewer/encounter-viewer.module.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/encounter-viewer/encounter-viewer.service.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/control-alerts/alert-helpers.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/control-alerts/can-generate-alert.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/control-calculators/can-calculate.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/control-hiders-disablers/can-disable.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/control-hiders-disablers/can-hide.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/control-hiders-disablers/disabler-helper.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/control-hiders-disablers/hider-helpers.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/data-sources/data-sources.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/data-sources/dummy-data-source.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/directives/historical-value-directive.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/error-renderer/error-renderer.component.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/expression-runner/expression-runner.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/form-entry.module.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/form-factory/control-relations.factory.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/form-factory/form-control.service.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/form-factory/form-node.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/form-factory/form.factory.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/form-factory/form.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/form-factory/hiders-disablers.factory.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/form-factory/question.factory.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/form-factory/show-messages.factory.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/form-factory/validation.factory.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/form-renderer/form-renderer.component.css.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/helpers/historical-expression-helper-service.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/helpers/historical-field-helper-service.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/helpers/js-expression-helper.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/checkbox.model.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/conditional-validation.model.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/date-question.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/date-validation.model.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/decimal-point-validation.model.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/file-upload-question.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/group-question.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/base-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/checkbox-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/data-source.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/date-question-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/file-upload-question-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/group-question-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/multi-select-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/nested-questions.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/repeating-question-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/select-option.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/select-question-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/test-order-question-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/text-area-question-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/text-question-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/time-question-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/interfaces/ui-select-question-options.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/js-expression-validation.model.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/max-validation.model.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/min-validation.model.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/models.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/multi-select-question.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/pair.model.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/question-base.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/rendering-type.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/repeating-question.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/select-option.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/select-question.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/test-order-question.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/text-area-input-question.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/text-input-question.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/time-question.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/ui-select-question.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/question-models/validation.model.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/services/debug-mode.service.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/services/form-errors.service.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/services/form-schema-compiler.service.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/services/historical-encounter-data.service.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/utils/messages.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/validators/conditional-answered.validator.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/validators/conditional-required.validator.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/validators/date.validator.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/validators/future-date-restriction.validator.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/validators/js-expression.validator.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/validators/max-date.validator.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/validators/max.validator.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/validators/min-date.validator.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/validators/min.validator.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/validators/required.validator.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/validators/validations.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/value-adapters/encounter.adapter.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/value-adapters/obs-adapter-helper.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/value-adapters/obs.adapter.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/value-adapters/order.adapter.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/value-adapters/person-attribute.adapter.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/form-entry/value-adapters/value.adapter.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/public_api.js +0 -0
- /package/{esm2015 → dist/ngx-formentry/esm2015}/shared.module.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/abstract-controls-extension/afe-control-type.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/abstract-controls-extension/afe-form-array.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/abstract-controls-extension/afe-form-control.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/abstract-controls-extension/afe-form-group.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/abstract-controls-extension/control-extensions.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/abstract-controls-extension/index.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/abstract-controls-extension/value-change.listener.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/ampath-kenya-ngx-openmrs-formentry.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/change-tracking/control-relation.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/change-tracking/control-relations.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/afe-ng-select.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/appointments-overview/appointments-overview.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/check-box/checkbox.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/check-box/checkbox.module.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/date-time-picker/date-picker/date-picker.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/date-time-picker/date-time-picker.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/date-time-picker/date-time-picker.module.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/date-time-picker/picker-modal/modal.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/date-time-picker/pipes/moment.pipe.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/date-time-picker/time-picker/time-picker.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/file-upload/file-upload.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/file-upload/file-upload.module.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/file-upload/secure.pipe.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/ngx-date-time-picker/ngx-date-time-picker.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/ngx-date-time-picker/ngx-date-time-picker.module.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/ngx-time-picker/ngx-time-picker.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/ngx-time-picker/ngx-time-picker.module.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/remote-select/remote-select.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/remote-select/remote-select.module.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/select/diacritics.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/select/option-list.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/select/option.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/select/select-dropdown.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/select/select-dropdown.component.style.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/select/select.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/select/select.component.style.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/components/select/select.module.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/encounter-viewer/display-controls/file-preview.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/encounter-viewer/display-controls/question-control.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/encounter-viewer/display-controls/remote-answer.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/encounter-viewer/encounter-container/encounter-container.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/encounter-viewer/encounter-pdf-viewer.service.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/encounter-viewer/encounter-view/encounter-viewer.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/encounter-viewer/encounter-viewer.module.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/encounter-viewer/encounter-viewer.service.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/control-alerts/alert-helpers.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/control-alerts/can-generate-alert.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/control-calculators/can-calculate.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/control-hiders-disablers/can-disable.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/control-hiders-disablers/can-hide.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/control-hiders-disablers/disabler-helper.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/control-hiders-disablers/hider-helpers.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/data-sources/data-sources.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/data-sources/dummy-data-source.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/directives/historical-value-directive.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/error-renderer/error-renderer.component.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/expression-runner/expression-runner.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/form-entry.module.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/form-factory/control-relations.factory.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/form-factory/form-control.service.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/form-factory/form-node.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/form-factory/form.factory.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/form-factory/form.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/form-factory/hiders-disablers.factory.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/form-factory/question.factory.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/form-factory/show-messages.factory.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/form-factory/validation.factory.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/form-renderer/form-renderer.component.css.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/helpers/historical-expression-helper-service.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/helpers/historical-field-helper-service.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/helpers/js-expression-helper.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/checkbox.model.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/conditional-validation.model.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/date-question.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/date-validation.model.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/decimal-point-validation.model.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/file-upload-question.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/group-question.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/base-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/checkbox-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/data-source.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/date-question-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/file-upload-question-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/group-question-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/multi-select-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/nested-questions.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/repeating-question-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/select-option.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/select-question-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/test-order-question-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/text-area-question-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/text-question-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/time-question-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/interfaces/ui-select-question-options.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/js-expression-validation.model.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/max-validation.model.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/min-validation.model.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/models.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/multi-select-question.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/pair.model.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/question-base.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/rendering-type.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/repeating-question.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/select-option.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/select-question.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/test-order-question.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/text-area-input-question.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/text-input-question.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/time-question.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/ui-select-question.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/question-models/validation.model.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/services/debug-mode.service.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/services/form-errors.service.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/services/form-schema-compiler.service.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/services/historical-encounter-data.service.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/utils/messages.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/validators/conditional-answered.validator.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/validators/conditional-required.validator.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/validators/date.validator.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/validators/future-date-restriction.validator.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/validators/js-expression.validator.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/validators/max-date.validator.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/validators/max.validator.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/validators/min-date.validator.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/validators/min.validator.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/validators/required.validator.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/validators/validations.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/value-adapters/encounter.adapter.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/value-adapters/obs-adapter-helper.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/value-adapters/obs.adapter.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/value-adapters/order.adapter.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/value-adapters/person-attribute.adapter.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/form-entry/value-adapters/value.adapter.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/public_api.js +0 -0
- /package/{esm5 → dist/ngx-formentry/esm5}/shared.module.js +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-alerts/alert-helpers.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-alerts/can-generate-alert.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-calculators/can-calculate.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-hiders-disablers/can-disable.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-hiders-disablers/can-hide.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-hiders-disablers/disabler-helper.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-hiders-disablers/hider-helpers.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/data-sources/data-sources.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/data-sources/dummy-data-source.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/directives/historical-value-directive.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/error-renderer/error-renderer.component.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/expression-runner/expression-runner.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-entry.module.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/control-relations.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/form-control.service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/form-node.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/form.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/form.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/hiders-disablers.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/question.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/show-messages.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/validation.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-renderer/form-renderer.component.css.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-renderer/form-renderer.component.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/helpers/historical-expression-helper-service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/helpers/historical-field-helper-service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/helpers/js-expression-helper.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/checkbox.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/conditional-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/date-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/date-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/decimal-point-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/file-upload-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/group-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/base-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/checkbox-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/data-source.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/date-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/file-upload-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/group-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/multi-select-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/nested-questions.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/repeating-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/select-option.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/select-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/test-order-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/text-area-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/text-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/time-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/ui-select-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/js-expression-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/max-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/min-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/models.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/multi-select-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/pair.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/question-base.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/rendering-type.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/repeating-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/select-option.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/select-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/test-order-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/text-area-input-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/text-input-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/time-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/ui-select-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/services/debug-mode.service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/services/form-errors.service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/services/form-schema-compiler.service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/services/historical-encounter-data.service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/utils/messages.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/conditional-answered.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/conditional-required.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/date.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/future-date-restriction.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/js-expression.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/max-date.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/max.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/min-date.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/min.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/required.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/validations.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/encounter.adapter.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/obs-adapter-helper.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/obs.adapter.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/order.adapter.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/person-attribute.adapter.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/value.adapter.d.ts +0 -0
- /package/{public_api.d.ts → dist/ngx-formentry/public_api.d.ts} +0 -0
- /package/{shared.module.d.ts → dist/ngx-formentry/shared.module.d.ts} +0 -0
|
@@ -1,653 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Inject } from '@angular/core';
|
|
2
|
-
import 'hammerjs';
|
|
3
|
-
import { DEFAULT_STYLES } from './form-renderer.component.css';
|
|
4
|
-
import { DOCUMENT } from '@angular/common';
|
|
5
|
-
import { DataSources } from '../data-sources/data-sources';
|
|
6
|
-
import { NodeBase, GroupNode } from '../form-factory/form-node';
|
|
7
|
-
import { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';
|
|
8
|
-
import { ValidationFactory } from '../form-factory/validation.factory';
|
|
9
|
-
import { FormErrorsService } from '../services/form-errors.service';
|
|
10
|
-
// import { concat, of, Observable, Subject, BehaviorSubject } from 'rxjs';
|
|
11
|
-
// import * as _ from 'lodash';
|
|
12
|
-
// import { debounceTime, distinctUntilChanged, tap, switchMap, catchError, map } from 'rxjs/operators';
|
|
13
|
-
// import { QuestionBase } from '../question-models';
|
|
14
|
-
export class FormRendererComponent {
|
|
15
|
-
// items$: Observable<any[]>;
|
|
16
|
-
// itemsLoading = false;
|
|
17
|
-
// itemsInput$ = new Subject<string>();
|
|
18
|
-
constructor(validationFactory, dataSources, formErrorsService, document) {
|
|
19
|
-
this.validationFactory = validationFactory;
|
|
20
|
-
this.dataSources = dataSources;
|
|
21
|
-
this.formErrorsService = formErrorsService;
|
|
22
|
-
this.document = document;
|
|
23
|
-
this.childComponents = [];
|
|
24
|
-
this.isCollapsed = false;
|
|
25
|
-
this.activeTab = 0;
|
|
26
|
-
}
|
|
27
|
-
ngOnInit() {
|
|
28
|
-
this.setUpRemoteSelect();
|
|
29
|
-
this.setUpFileUpload();
|
|
30
|
-
this.setUpDatepickerHolidays();
|
|
31
|
-
if (this.node && this.node.form) {
|
|
32
|
-
const tab = this.node.form.valueProcessingInfo.lastFormTab;
|
|
33
|
-
if (tab && tab !== this.activeTab) {
|
|
34
|
-
this.activeTab = tab;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (this.node && this.node.question.renderingType === 'form') {
|
|
38
|
-
this.formErrorsService.announceErrorField$.subscribe((error) => {
|
|
39
|
-
this.scrollToControl(error);
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
if (this.node && this.node.question.renderingType === 'section') {
|
|
43
|
-
this.isCollapsed = !this.node.question.isExpanded;
|
|
44
|
-
}
|
|
45
|
-
if (this.parentComponent) {
|
|
46
|
-
this.parentComponent.addChildComponent(this);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
addChildComponent(child) {
|
|
50
|
-
this.childComponents.push(child);
|
|
51
|
-
}
|
|
52
|
-
setUpRemoteSelect() {
|
|
53
|
-
if (this.node &&
|
|
54
|
-
this.node.question.extras &&
|
|
55
|
-
this.node.question.renderingType === 'remote-select') {
|
|
56
|
-
// let selectQuestion = this.node.form.searchNodeByQuestionId(this.node.question.key)[0];
|
|
57
|
-
this.dataSource = this.dataSources.dataSources[this.node.question.dataSource];
|
|
58
|
-
/*
|
|
59
|
-
let defaltValues = of([]);
|
|
60
|
-
if (this.dataSource.resolveSelectedValue(selectQuestion.control.value)) {
|
|
61
|
-
defaltValues = this.dataSource.resolveSelectedValue(selectQuestion.control.value).pipe(
|
|
62
|
-
catchError(() => of([])), // empty list on error
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
this.items$ = concat(
|
|
66
|
-
defaltValues,
|
|
67
|
-
this.itemsInput$.pipe(
|
|
68
|
-
debounceTime(200),
|
|
69
|
-
distinctUntilChanged(),
|
|
70
|
-
tap(() => this.itemsLoading = true),
|
|
71
|
-
switchMap(term => this.dataSource.searchOptions(term).pipe(
|
|
72
|
-
catchError(() => of([])), // empty list on error
|
|
73
|
-
tap(() => {
|
|
74
|
-
this.itemsLoading = false
|
|
75
|
-
})
|
|
76
|
-
))
|
|
77
|
-
)
|
|
78
|
-
);
|
|
79
|
-
*/
|
|
80
|
-
if (this.dataSource && this.node.question.dataSourceOptions) {
|
|
81
|
-
this.dataSource.dataSourceOptions = this.node.question.dataSourceOptions;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
setUpFileUpload() {
|
|
86
|
-
if (this.node &&
|
|
87
|
-
this.node.question.extras &&
|
|
88
|
-
this.node.question.renderingType === 'file') {
|
|
89
|
-
this.dataSource = this.dataSources.dataSources[this.node.question.dataSource];
|
|
90
|
-
// console.log('Key', this.node.question);
|
|
91
|
-
// console.log('Data source', this.dataSource);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
setUpDatepickerHolidays() {
|
|
95
|
-
this.dataSource = this.dataSources.dataSources[this.node.question.dataSource];
|
|
96
|
-
}
|
|
97
|
-
checkSection(node) {
|
|
98
|
-
if (node.question.renderingType === 'section') {
|
|
99
|
-
let groupChildrenHidden = false;
|
|
100
|
-
const allSectionControlsHidden = Object.keys(node.children).every((k) => {
|
|
101
|
-
const innerNode = node.children[k];
|
|
102
|
-
if (innerNode instanceof GroupNode) {
|
|
103
|
-
groupChildrenHidden = Object.keys(innerNode.children).every((i) => innerNode.children[i].control.hidden);
|
|
104
|
-
}
|
|
105
|
-
return node.children[k].control.hidden || groupChildrenHidden;
|
|
106
|
-
});
|
|
107
|
-
return !allSectionControlsHidden;
|
|
108
|
-
}
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
111
|
-
clickTab(tabNumber) {
|
|
112
|
-
this.activeTab = tabNumber;
|
|
113
|
-
}
|
|
114
|
-
loadPreviousTab() {
|
|
115
|
-
if (!this.isCurrentTabFirst()) {
|
|
116
|
-
this.clickTab(this.activeTab - 1);
|
|
117
|
-
document.body.scrollTop = 0;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
isCurrentTabFirst() {
|
|
121
|
-
return this.activeTab === 0;
|
|
122
|
-
}
|
|
123
|
-
isCurrentTabLast() {
|
|
124
|
-
return this.activeTab === this.node.question['questions'].length - 1;
|
|
125
|
-
}
|
|
126
|
-
loadNextTab() {
|
|
127
|
-
if (!this.isCurrentTabLast()) {
|
|
128
|
-
this.clickTab(this.activeTab + 1);
|
|
129
|
-
document.body.scrollTop = 0;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
tabSelected($event) {
|
|
133
|
-
this.activeTab = $event;
|
|
134
|
-
this.setPreviousTab();
|
|
135
|
-
}
|
|
136
|
-
setPreviousTab() {
|
|
137
|
-
if (this.node && this.node.form) {
|
|
138
|
-
this.node.form.valueProcessingInfo['lastFormTab'] = this.activeTab;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
hasErrors() {
|
|
142
|
-
return this.node.control.touched && !this.node.control.valid;
|
|
143
|
-
}
|
|
144
|
-
errors() {
|
|
145
|
-
return this.getErrors(this.node);
|
|
146
|
-
}
|
|
147
|
-
scrollToControl(error) {
|
|
148
|
-
const tab = +error.split(',')[0];
|
|
149
|
-
const elSelector = error.split(',')[1] + 'id';
|
|
150
|
-
// the tab components
|
|
151
|
-
const tabComponent = this.childComponents[tab];
|
|
152
|
-
this.clickTab(tab);
|
|
153
|
-
setTimeout(() => {
|
|
154
|
-
// expand all sections
|
|
155
|
-
tabComponent.childComponents.forEach((section) => {
|
|
156
|
-
section.isCollapsed = false;
|
|
157
|
-
setTimeout(() => {
|
|
158
|
-
const element = this.document.getElementById(elSelector);
|
|
159
|
-
if (element !== null && element.focus) {
|
|
160
|
-
element.focus();
|
|
161
|
-
element.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
162
|
-
}
|
|
163
|
-
}, 100);
|
|
164
|
-
});
|
|
165
|
-
}, 200);
|
|
166
|
-
}
|
|
167
|
-
onDateChanged(node) {
|
|
168
|
-
// console.log('Node', node);
|
|
169
|
-
this.node = node;
|
|
170
|
-
}
|
|
171
|
-
upload(event) {
|
|
172
|
-
// console.log('Event', event);
|
|
173
|
-
// console.log('Data', this.dataSource);
|
|
174
|
-
}
|
|
175
|
-
toggleInformation(infoId) {
|
|
176
|
-
const e = document.getElementById(infoId);
|
|
177
|
-
if (e.style.display === 'block') {
|
|
178
|
-
e.style.display = 'none';
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
e.style.display = 'block';
|
|
182
|
-
}
|
|
183
|
-
console.log('InfoId', infoId);
|
|
184
|
-
}
|
|
185
|
-
getErrors(node) {
|
|
186
|
-
const errors = node.control.errors;
|
|
187
|
-
if (errors) {
|
|
188
|
-
return this.validationFactory.errors(errors, node.question);
|
|
189
|
-
}
|
|
190
|
-
return [];
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
FormRendererComponent.decorators = [
|
|
194
|
-
{ type: Component, args: [{
|
|
195
|
-
selector: 'form-renderer',
|
|
196
|
-
template: `<!--CONTAINERS-->
|
|
197
|
-
<div *ngIf="node.question.renderingType === 'form'">
|
|
198
|
-
<div class="dropdown dropdown-tabs forms-dropdown">
|
|
199
|
-
<a class="btn dropdown-toggle" data-toggle="dropdown">
|
|
200
|
-
<i class="fa fa-angle-double-down"></i>
|
|
201
|
-
</a>
|
|
202
|
-
<ul
|
|
203
|
-
class="dropdown-menu dropdown-menu-right forms-dropdown-menu"
|
|
204
|
-
role="menu"
|
|
205
|
-
aria-labelledby="dropdownMenu"
|
|
206
|
-
>
|
|
207
|
-
<li
|
|
208
|
-
*ngFor="let question of node.question.questions; let i = index"
|
|
209
|
-
(click)="clickTab(i)"
|
|
210
|
-
>
|
|
211
|
-
{{ question.label }}
|
|
212
|
-
</li>
|
|
213
|
-
</ul>
|
|
214
|
-
</div>
|
|
215
|
-
<mat-tab-group
|
|
216
|
-
(selectedIndexChange)="tabSelected($event)"
|
|
217
|
-
[selectedIndex]="activeTab"
|
|
218
|
-
>
|
|
219
|
-
<mat-tab
|
|
220
|
-
[label]="question.label"
|
|
221
|
-
*ngFor="let question of node.question.questions; let i = index"
|
|
222
|
-
>
|
|
223
|
-
<div (swipeLeft)="loadNextTab()" (swipeRight)="loadPreviousTab()">
|
|
224
|
-
<form-renderer
|
|
225
|
-
[node]="node.children[question.key]"
|
|
226
|
-
[parentComponent]="this"
|
|
227
|
-
[parentGroup]="node.control"
|
|
228
|
-
></form-renderer>
|
|
229
|
-
</div>
|
|
230
|
-
</mat-tab>
|
|
231
|
-
</mat-tab-group>
|
|
232
|
-
|
|
233
|
-
<div style="text-align: center">
|
|
234
|
-
<button
|
|
235
|
-
type="button"
|
|
236
|
-
class="btn btn-default"
|
|
237
|
-
(click)="loadPreviousTab()"
|
|
238
|
-
[ngClass]="{ disabled: isCurrentTabFirst() }"
|
|
239
|
-
>
|
|
240
|
-
<<
|
|
241
|
-
</button>
|
|
242
|
-
<button
|
|
243
|
-
type="button"
|
|
244
|
-
class="btn btn-default"
|
|
245
|
-
(click)="loadNextTab()"
|
|
246
|
-
[ngClass]="{ disabled: isCurrentTabLast() }"
|
|
247
|
-
>
|
|
248
|
-
>>
|
|
249
|
-
</button>
|
|
250
|
-
</div>
|
|
251
|
-
</div>
|
|
252
|
-
<div *ngIf="node.question.renderingType === 'page'">
|
|
253
|
-
<!--<h2>{{node.question.label}}</h2>-->
|
|
254
|
-
<form-renderer
|
|
255
|
-
*ngFor="let question of node.question.questions"
|
|
256
|
-
[parentComponent]="this"
|
|
257
|
-
[node]="node.children[question.key]"
|
|
258
|
-
[parentGroup]="parentGroup"
|
|
259
|
-
></form-renderer>
|
|
260
|
-
</div>
|
|
261
|
-
<div *ngIf="node.question.renderingType === 'section' && checkSection(node)">
|
|
262
|
-
<div class="panel panel-primary">
|
|
263
|
-
<div class="panel-heading">
|
|
264
|
-
<button
|
|
265
|
-
type="button"
|
|
266
|
-
class="btn btn-primary pull-right"
|
|
267
|
-
(click)="isCollapsed = !isCollapsed"
|
|
268
|
-
>
|
|
269
|
-
{{ isCollapsed ? 'Show' : 'Hide' }}
|
|
270
|
-
</button>
|
|
271
|
-
{{ node.question.label }}
|
|
272
|
-
</div>
|
|
273
|
-
<div class="panel-body" [collapse]="isCollapsed">
|
|
274
|
-
<form-renderer
|
|
275
|
-
*ngFor="let question of node.question.questions"
|
|
276
|
-
[parentComponent]="this"
|
|
277
|
-
[node]="node.children[question.key]"
|
|
278
|
-
[parentGroup]="parentGroup"
|
|
279
|
-
></form-renderer>
|
|
280
|
-
</div>
|
|
281
|
-
</div>
|
|
282
|
-
</div>
|
|
283
|
-
|
|
284
|
-
<!-- MESSAGES -->
|
|
285
|
-
<div
|
|
286
|
-
*ngIf="node.control && node.control.alert && node.control.alert !== ''"
|
|
287
|
-
class="alert alert-warning"
|
|
288
|
-
>
|
|
289
|
-
<a class="close" data-dismiss="alert">×</a> {{ node.control.alert }}
|
|
290
|
-
</div>
|
|
291
|
-
|
|
292
|
-
<!--CONTROLS-->
|
|
293
|
-
|
|
294
|
-
<div
|
|
295
|
-
*ngIf="node.question.controlType === 0"
|
|
296
|
-
class="form-group"
|
|
297
|
-
[formGroup]="parentGroup"
|
|
298
|
-
[hidden]="node.control.hidden"
|
|
299
|
-
[ngClass]="{ disabled: node.control.disabled }"
|
|
300
|
-
>
|
|
301
|
-
<!--LEAF CONTROL-->
|
|
302
|
-
<div class="question-area">
|
|
303
|
-
<a
|
|
304
|
-
class="form-tooltip pull-right"
|
|
305
|
-
(click)="toggleInformation(node.question.extras.id)"
|
|
306
|
-
data-placement="right"
|
|
307
|
-
*ngIf="
|
|
308
|
-
node.question &&
|
|
309
|
-
node.question.extras.questionInfo &&
|
|
310
|
-
node.question.extras.questionInfo !== '' &&
|
|
311
|
-
node.question.extras.questionInfo !== ' '
|
|
312
|
-
"
|
|
313
|
-
>
|
|
314
|
-
<i class="glyphicon glyphicon-question-sign" aria-hidden="true"></i>
|
|
315
|
-
</a>
|
|
316
|
-
|
|
317
|
-
<label
|
|
318
|
-
*ngIf="node.question.label"
|
|
319
|
-
[style.color]="hasErrors() ? 'red' : ''"
|
|
320
|
-
class="control-label"
|
|
321
|
-
[attr.for]="node.question.key"
|
|
322
|
-
>
|
|
323
|
-
{{ node.question.required ? '*' : '' }} {{ node.question.label }}
|
|
324
|
-
</label>
|
|
325
|
-
<div [ngSwitch]="node.question.renderingType">
|
|
326
|
-
<select
|
|
327
|
-
class="form-control"
|
|
328
|
-
*ngSwitchCase="'select'"
|
|
329
|
-
[formControlName]="node.question.key"
|
|
330
|
-
[id]="node.question.key + 'id'"
|
|
331
|
-
>
|
|
332
|
-
<option *ngFor="let o of node.question.options" [ngValue]="o.value">
|
|
333
|
-
{{ o.label }}
|
|
334
|
-
</option>
|
|
335
|
-
</select>
|
|
336
|
-
|
|
337
|
-
<app-file-upload
|
|
338
|
-
*ngSwitchCase="'file'"
|
|
339
|
-
[dataSource]="dataSource"
|
|
340
|
-
[formControlName]="node.question.key"
|
|
341
|
-
[id]="node.question.key + 'id'"
|
|
342
|
-
(fileChanged)="upload($event)"
|
|
343
|
-
>
|
|
344
|
-
</app-file-upload>
|
|
345
|
-
<textarea
|
|
346
|
-
[placeholder]="node.question.placeholder"
|
|
347
|
-
[rows]="node.question.rows"
|
|
348
|
-
class="form-control"
|
|
349
|
-
*ngSwitchCase="'textarea'"
|
|
350
|
-
[formControlName]="node.question.key"
|
|
351
|
-
[id]="node.question.key + 'id'"
|
|
352
|
-
>
|
|
353
|
-
</textarea>
|
|
354
|
-
<!--
|
|
355
|
-
<ng-select *ngSwitchCase="'remote-select'" [items]="items$ | async" bindLabel="label" bindValue="value" placeholder="{{node.question.placeholder}}"
|
|
356
|
-
[hideSelected]="true" [loading]="itemsLoading" [typeahead]="itemsInput$" [formControlName]="node.question.key" [id]="node.question.key + 'id'">
|
|
357
|
-
</ng-select>
|
|
358
|
-
-->
|
|
359
|
-
<remote-select
|
|
360
|
-
*ngSwitchCase="'remote-select'"
|
|
361
|
-
[placeholder]="node.question.placeholder"
|
|
362
|
-
tabindex="0"
|
|
363
|
-
[dataSource]="dataSource"
|
|
364
|
-
[componentID]="node.question.key + 'id'"
|
|
365
|
-
[formControlName]="node.question.key"
|
|
366
|
-
[id]="node.question.key + 'id'"
|
|
367
|
-
></remote-select>
|
|
368
|
-
<!--
|
|
369
|
-
<date-time-picker *ngSwitchCase="'date'" [showTime]="node.question.showTime" tabindex="0" [weeks]='node.question.extras.questionOptions.weeksList'
|
|
370
|
-
(onDateChange)="onDateChanged(node)" [showWeeks]="node.question.showWeeksAdder" [formControlName]="node.question.key"
|
|
371
|
-
[id]="node.question.key + 'id'"></date-time-picker>
|
|
372
|
-
-->
|
|
373
|
-
|
|
374
|
-
<ngx-date-time-picker
|
|
375
|
-
*ngSwitchCase="'date'"
|
|
376
|
-
[showTime]="node.question.showTime"
|
|
377
|
-
[id]="node.question.key + 'id'"
|
|
378
|
-
[formControlName]="node.question.key"
|
|
379
|
-
[weeks]="node.question.extras.questionOptions.weeksList"
|
|
380
|
-
(onDateChange)="onDateChanged(node)"
|
|
381
|
-
[showWeeks]="node.question.showWeeksAdder"
|
|
382
|
-
[showHolidays]="node.question.showHolidays"
|
|
383
|
-
[dataSource]="dataSource"
|
|
384
|
-
></ngx-date-time-picker>
|
|
385
|
-
<ngx-time-picker
|
|
386
|
-
*ngSwitchCase="'time'"
|
|
387
|
-
id="node.question.key + 'id'"
|
|
388
|
-
[formControlName]="node.question.key"
|
|
389
|
-
></ngx-time-picker>
|
|
390
|
-
<ng-select
|
|
391
|
-
*ngSwitchCase="'multi-select'"
|
|
392
|
-
[style.height]="'auto'"
|
|
393
|
-
[style.overflow-x]="'hidden'"
|
|
394
|
-
tabindex="0"
|
|
395
|
-
[formControlName]="node.question.key"
|
|
396
|
-
[id]="node.question.key + 'id'"
|
|
397
|
-
[options]="node.question.options"
|
|
398
|
-
[multiple]="true"
|
|
399
|
-
>
|
|
400
|
-
</ng-select>
|
|
401
|
-
<ng-select
|
|
402
|
-
*ngSwitchCase="'single-select'"
|
|
403
|
-
[style.height]="auto"
|
|
404
|
-
tabindex="0"
|
|
405
|
-
[formControlName]="node.question.key"
|
|
406
|
-
[id]="node.question.key + 'id'"
|
|
407
|
-
[options]="node.question.options"
|
|
408
|
-
[multiple]="false"
|
|
409
|
-
>
|
|
410
|
-
</ng-select>
|
|
411
|
-
<input
|
|
412
|
-
class="form-control"
|
|
413
|
-
*ngSwitchCase="'number'"
|
|
414
|
-
[formControlName]="node.question.key"
|
|
415
|
-
[attr.placeholder]="node.question.placeholder"
|
|
416
|
-
[type]="'number'"
|
|
417
|
-
[id]="node.question.key + 'id'"
|
|
418
|
-
[step]="'any'"
|
|
419
|
-
[min]="node.question.extras.questionOptions.min"
|
|
420
|
-
[max]="node.question.extras.questionOptions.max"
|
|
421
|
-
/>
|
|
422
|
-
<input
|
|
423
|
-
class="form-control"
|
|
424
|
-
*ngSwitchCase="'decimal'"
|
|
425
|
-
[formControlName]="node.question.key"
|
|
426
|
-
[attr.placeholder]="node.question.placeholder"
|
|
427
|
-
[type]="'text'"
|
|
428
|
-
[id]="node.question.key + 'id'"
|
|
429
|
-
[min]="node.question.extras.questionOptions.min"
|
|
430
|
-
[max]="node.question.extras.questionOptions.max"
|
|
431
|
-
/>
|
|
432
|
-
<input
|
|
433
|
-
class="form-control"
|
|
434
|
-
*ngSwitchDefault
|
|
435
|
-
[formControlName]="node.question.key"
|
|
436
|
-
[attr.placeholder]="node.question.placeholder"
|
|
437
|
-
[type]="node.question.renderingType"
|
|
438
|
-
[id]="node.question.key + 'id'"
|
|
439
|
-
/>
|
|
440
|
-
|
|
441
|
-
<div *ngSwitchCase="'radio'">
|
|
442
|
-
<div *ngFor="let o of node.question.options">
|
|
443
|
-
<label class="form-control no-border">
|
|
444
|
-
<input
|
|
445
|
-
type="radio"
|
|
446
|
-
[formControlName]="node.question.key"
|
|
447
|
-
[id]="node.question.key + 'id'"
|
|
448
|
-
[value]="o.value"
|
|
449
|
-
/>
|
|
450
|
-
{{ o.label }}
|
|
451
|
-
</label>
|
|
452
|
-
</div>
|
|
453
|
-
</div>
|
|
454
|
-
|
|
455
|
-
<div *ngSwitchCase="'checkbox'">
|
|
456
|
-
<checkbox
|
|
457
|
-
[id]="node.question.key + 'id'"
|
|
458
|
-
[formControlName]="node.question.key"
|
|
459
|
-
[options]="node.question.options"
|
|
460
|
-
[selected]="node.control.value"
|
|
461
|
-
></checkbox>
|
|
462
|
-
</div>
|
|
463
|
-
|
|
464
|
-
<div
|
|
465
|
-
*ngIf="
|
|
466
|
-
node.question.enableHistoricalValue && node.question.historicalDisplay
|
|
467
|
-
"
|
|
468
|
-
style="margin-top: 2px"
|
|
469
|
-
>
|
|
470
|
-
<div class="container-fluid">
|
|
471
|
-
<div class="row">
|
|
472
|
-
<div class="col-xs-9">
|
|
473
|
-
<span class="text-warning">Previous Value: </span>
|
|
474
|
-
<strong>{{ node.question.historicalDisplay?.text }}</strong>
|
|
475
|
-
<span *ngIf="node.question.showHistoricalValueDate">
|
|
476
|
-
<span> | </span>
|
|
477
|
-
<strong class="text-primary"
|
|
478
|
-
>{{ node.question.historicalDisplay?._date }}
|
|
479
|
-
</strong>
|
|
480
|
-
<span
|
|
481
|
-
class="text-primary"
|
|
482
|
-
*ngIf="
|
|
483
|
-
node.question.historicalDisplay &&
|
|
484
|
-
node.question.historicalDisplay._date
|
|
485
|
-
"
|
|
486
|
-
>
|
|
487
|
-
({{ node.question.historicalDisplay._date | timeAgo }})</span
|
|
488
|
-
>
|
|
489
|
-
</span>
|
|
490
|
-
</div>
|
|
491
|
-
<button
|
|
492
|
-
type="button"
|
|
493
|
-
[node]="node"
|
|
494
|
-
[name]="'historyValue'"
|
|
495
|
-
class="btn btn-primary btn-small col-xs-3"
|
|
496
|
-
>
|
|
497
|
-
Use Value
|
|
498
|
-
</button>
|
|
499
|
-
</div>
|
|
500
|
-
</div>
|
|
501
|
-
</div>
|
|
502
|
-
<appointments-overview [node]="node"></appointments-overview>
|
|
503
|
-
<div *ngIf="hasErrors()">
|
|
504
|
-
<p *ngFor="let e of errors()">
|
|
505
|
-
<span class="text-danger">{{ e }}</span>
|
|
506
|
-
</p>
|
|
507
|
-
</div>
|
|
508
|
-
</div>
|
|
509
|
-
|
|
510
|
-
<div
|
|
511
|
-
class="question-info col-md-12 col-lg-12 col-sm-12"
|
|
512
|
-
id="{{ node.question.extras.id }}"
|
|
513
|
-
*ngIf="
|
|
514
|
-
node.question &&
|
|
515
|
-
node.question.extras.questionInfo &&
|
|
516
|
-
node.question.extras.questionInfo !== '' &&
|
|
517
|
-
node.question.extras.questionInfo !== ' '
|
|
518
|
-
"
|
|
519
|
-
>
|
|
520
|
-
{{ node.question.extras.questionInfo }}
|
|
521
|
-
</div>
|
|
522
|
-
</div>
|
|
523
|
-
</div>
|
|
524
|
-
<div
|
|
525
|
-
*ngIf="node.question.controlType === 1"
|
|
526
|
-
[hidden]="node.control.hidden"
|
|
527
|
-
[ngClass]="{ disabled: node.control.disabled }"
|
|
528
|
-
>
|
|
529
|
-
<!--ARRAY CONTROL-->
|
|
530
|
-
<div [ngSwitch]="node.question.renderingType">
|
|
531
|
-
<div class="well" style="padding: 2px" *ngSwitchCase="'repeating'">
|
|
532
|
-
<h4 style="margin: 2px; font-weight: bold">{{ node.question.label }}</h4>
|
|
533
|
-
<hr
|
|
534
|
-
style="
|
|
535
|
-
margin-left: -2px;
|
|
536
|
-
margin-right: -2px;
|
|
537
|
-
margin-bottom: 4px;
|
|
538
|
-
margin-top: 8px;
|
|
539
|
-
border-width: 2px;
|
|
540
|
-
"
|
|
541
|
-
/>
|
|
542
|
-
<div [ngSwitch]="node.question.extras.type">
|
|
543
|
-
<div *ngSwitchCase="'testOrder'">
|
|
544
|
-
<div *ngFor="let child of node.children; let i = index">
|
|
545
|
-
<form-renderer
|
|
546
|
-
*ngFor="let question of child.question.questions"
|
|
547
|
-
[parentComponent]="this"
|
|
548
|
-
[node]="child.children[question.key]"
|
|
549
|
-
[parentGroup]="child.control"
|
|
550
|
-
></form-renderer>
|
|
551
|
-
<div>{{ child.orderNumber }}</div>
|
|
552
|
-
<button
|
|
553
|
-
type="button "
|
|
554
|
-
class="btn btn-sm btn-danger"
|
|
555
|
-
(click)="node.removeAt(i)"
|
|
556
|
-
>
|
|
557
|
-
Remove
|
|
558
|
-
</button>
|
|
559
|
-
<br />
|
|
560
|
-
<hr
|
|
561
|
-
style="
|
|
562
|
-
margin-left: -2px;
|
|
563
|
-
margin-right: -2px;
|
|
564
|
-
margin-bottom: 4px;
|
|
565
|
-
margin-top: 8px;
|
|
566
|
-
border-width: 1px;
|
|
567
|
-
"
|
|
568
|
-
/>
|
|
569
|
-
</div>
|
|
570
|
-
</div>
|
|
571
|
-
|
|
572
|
-
<div *ngSwitchCase="'obsGroup'" style="margin-bottom: 20px">
|
|
573
|
-
<div *ngFor="let child of node.children; let i = index">
|
|
574
|
-
<form-renderer
|
|
575
|
-
*ngFor="let question of child.question.questions"
|
|
576
|
-
[parentComponent]="this"
|
|
577
|
-
[node]="child.children[question.key]"
|
|
578
|
-
[parentGroup]="child.control"
|
|
579
|
-
></form-renderer>
|
|
580
|
-
<button
|
|
581
|
-
type="button "
|
|
582
|
-
class="btn btn-sm btn-danger"
|
|
583
|
-
(click)="node.removeAt(i)"
|
|
584
|
-
>
|
|
585
|
-
Remove
|
|
586
|
-
</button>
|
|
587
|
-
<br />
|
|
588
|
-
<hr
|
|
589
|
-
style="
|
|
590
|
-
margin-left: -2px;
|
|
591
|
-
margin-right: -2px;
|
|
592
|
-
margin-bottom: 4px;
|
|
593
|
-
margin-top: 8px;
|
|
594
|
-
border-width: 1px;
|
|
595
|
-
"
|
|
596
|
-
/>
|
|
597
|
-
</div>
|
|
598
|
-
</div>
|
|
599
|
-
</div>
|
|
600
|
-
<button
|
|
601
|
-
type="button "
|
|
602
|
-
class="btn btn-primary"
|
|
603
|
-
(click)="node.createChildNode()"
|
|
604
|
-
>
|
|
605
|
-
Add
|
|
606
|
-
</button>
|
|
607
|
-
</div>
|
|
608
|
-
</div>
|
|
609
|
-
</div>
|
|
610
|
-
<div
|
|
611
|
-
*ngIf="node.question.controlType === 2"
|
|
612
|
-
[hidden]="node.control.hidden"
|
|
613
|
-
[ngClass]="{ disabled: node.control.disabled }"
|
|
614
|
-
>
|
|
615
|
-
<!--GROUP-->
|
|
616
|
-
<div [ngSwitch]="node.question.renderingType">
|
|
617
|
-
<div *ngSwitchCase="'group'">
|
|
618
|
-
<form-renderer
|
|
619
|
-
*ngFor="let question of node.question.questions"
|
|
620
|
-
[parentComponent]="this"
|
|
621
|
-
[node]="node.children[question.key]"
|
|
622
|
-
[parentGroup]="node.control"
|
|
623
|
-
></form-renderer>
|
|
624
|
-
</div>
|
|
625
|
-
<div
|
|
626
|
-
*ngSwitchCase="'field-set'"
|
|
627
|
-
style="border: 1px solid #eeeeee; padding: 2px; margin: 2px"
|
|
628
|
-
>
|
|
629
|
-
<form-renderer
|
|
630
|
-
*ngFor="let question of node.question.questions"
|
|
631
|
-
[parentComponent]="this"
|
|
632
|
-
[node]="node.children[question.key]"
|
|
633
|
-
[parentGroup]="node.control"
|
|
634
|
-
></form-renderer>
|
|
635
|
-
</div>
|
|
636
|
-
</div>
|
|
637
|
-
</div>
|
|
638
|
-
`,
|
|
639
|
-
styles: ['../../style/app.css', DEFAULT_STYLES]
|
|
640
|
-
},] },
|
|
641
|
-
];
|
|
642
|
-
FormRendererComponent.ctorParameters = () => [
|
|
643
|
-
{ type: ValidationFactory },
|
|
644
|
-
{ type: DataSources },
|
|
645
|
-
{ type: FormErrorsService },
|
|
646
|
-
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
|
|
647
|
-
];
|
|
648
|
-
FormRendererComponent.propDecorators = {
|
|
649
|
-
parentComponent: [{ type: Input }],
|
|
650
|
-
node: [{ type: Input }],
|
|
651
|
-
parentGroup: [{ type: Input }]
|
|
652
|
-
};
|
|
653
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYW1wYXRoLWtlbnlhL25neC1vcGVubXJzLWZvcm1lbnRyeS8iLCJzb3VyY2VzIjpbImZvcm0tZW50cnkvZm9ybS1yZW5kZXJlci9mb3JtLXJlbmRlcmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBWSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFcEUsMkVBQTJFO0FBQzNFLCtCQUErQjtBQUUvQix3R0FBd0c7QUFDeEcscURBQXFEO0FBaWNyRCxNQUFNO0lBYUosNkJBQTZCO0lBQzdCLHdCQUF3QjtJQUN4Qix1Q0FBdUM7SUFFdkMsWUFDVSxpQkFBb0MsRUFDcEMsV0FBd0IsRUFDeEIsaUJBQW9DLEVBQ2xCLFFBQWE7UUFIL0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQUs7UUFqQmxDLG9CQUFlLEdBQTRCLEVBQUUsQ0FBQztRQU05Qyxn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QUFDO2dCQUNULFFBQVEsRUFBRSxlQUFlO2dCQUN6QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EwYlg7Z0JBQ0MsTUFBTSxFQUFFLENBQUMscUJBQXFCLEVBQUUsY0FBYyxDQUFDO2FBQ2hEOzs7WUF4Y1EsaUJBQWlCO1lBSGpCLFdBQVc7WUFLWCxpQkFBaUI7NENBNGRyQixNQUFNLFNBQUMsUUFBUTs7OzhCQXBCakIsS0FBSzttQkFDTCxLQUFLOzBCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIEluamVjdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICdoYW1tZXJqcyc7XG5pbXBvcnQgeyBERUZBVUxUX1NUWUxFUyB9IGZyb20gJy4vZm9ybS1yZW5kZXJlci5jb21wb25lbnQuY3NzJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERhdGFTb3VyY2VzIH0gZnJvbSAnLi4vZGF0YS1zb3VyY2VzL2RhdGEtc291cmNlcyc7XG5pbXBvcnQgeyBOb2RlQmFzZSwgTGVhZk5vZGUsIEdyb3VwTm9kZSB9IGZyb20gJy4uL2Zvcm0tZmFjdG9yeS9mb3JtLW5vZGUnO1xuaW1wb3J0IHsgQWZlRm9ybUdyb3VwIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3QtY29udHJvbHMtZXh0ZW5zaW9uL2FmZS1mb3JtLWdyb3VwJztcbmltcG9ydCB7IFZhbGlkYXRpb25GYWN0b3J5IH0gZnJvbSAnLi4vZm9ybS1mYWN0b3J5L3ZhbGlkYXRpb24uZmFjdG9yeSc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vcXVlc3Rpb24tbW9kZWxzL2ludGVyZmFjZXMvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgRm9ybUVycm9yc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLWVycm9ycy5zZXJ2aWNlJztcbmltcG9ydCB7IFF1ZXN0aW9uR3JvdXAgfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMvZ3JvdXAtcXVlc3Rpb24nO1xuLy8gaW1wb3J0IHsgY29uY2F0LCBvZiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG4vLyBpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbi8vIGltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcCwgc3dpdGNoTWFwLCBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG4vLyBpbXBvcnQgeyBRdWVzdGlvbkJhc2UgfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmb3JtLXJlbmRlcmVyJyxcbiAgdGVtcGxhdGU6IGA8IS0tQ09OVEFJTkVSUy0tPlxuPGRpdiAqbmdJZj1cIm5vZGUucXVlc3Rpb24ucmVuZGVyaW5nVHlwZSA9PT0gJ2Zvcm0nXCI+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93biBkcm9wZG93bi10YWJzIGZvcm1zLWRyb3Bkb3duXCI+XG4gICAgPGEgY2xhc3M9XCJidG4gZHJvcGRvd24tdG9nZ2xlXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1kb3VibGUtZG93blwiPjwvaT5cbiAgICA8L2E+XG4gICAgPHVsXG4gICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodCBmb3Jtcy1kcm9wZG93bi1tZW51XCJcbiAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duTWVudVwiXG4gICAgPlxuICAgICAgPGxpXG4gICAgICAgICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBub2RlLnF1ZXN0aW9uLnF1ZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIChjbGljayk9XCJjbGlja1RhYihpKVwiXG4gICAgICA+XG4gICAgICAgIHt7IHF1ZXN0aW9uLmxhYmVsIH19XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuICA8bWF0LXRhYi1ncm91cFxuICAgIChzZWxlY3RlZEluZGV4Q2hhbmdlKT1cInRhYlNlbGVjdGVkKCRldmVudClcIlxuICAgIFtzZWxlY3RlZEluZGV4XT1cImFjdGl2ZVRhYlwiXG4gID5cbiAgICA8bWF0LXRhYlxuICAgICAgW2xhYmVsXT1cInF1ZXN0aW9uLmxhYmVsXCJcbiAgICAgICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBub2RlLnF1ZXN0aW9uLnF1ZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgPlxuICAgICAgPGRpdiAoc3dpcGVMZWZ0KT1cImxvYWROZXh0VGFiKClcIiAoc3dpcGVSaWdodCk9XCJsb2FkUHJldmlvdXNUYWIoKVwiPlxuICAgICAgICA8Zm9ybS1yZW5kZXJlclxuICAgICAgICAgIFtub2RlXT1cIm5vZGUuY2hpbGRyZW5bcXVlc3Rpb24ua2V5XVwiXG4gICAgICAgICAgW3BhcmVudENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICBbcGFyZW50R3JvdXBdPVwibm9kZS5jb250cm9sXCJcbiAgICAgICAgPjwvZm9ybS1yZW5kZXJlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRhYj5cbiAgPC9tYXQtdGFiLWdyb3VwPlxuXG4gIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIChjbGljayk9XCJsb2FkUHJldmlvdXNUYWIoKVwiXG4gICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBpc0N1cnJlbnRUYWJGaXJzdCgpIH1cIlxuICAgID5cbiAgICAgICZsdDsmbHQ7XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAoY2xpY2spPVwibG9hZE5leHRUYWIoKVwiXG4gICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBpc0N1cnJlbnRUYWJMYXN0KCkgfVwiXG4gICAgPlxuICAgICAgJmd0OyZndDtcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUgPT09ICdwYWdlJ1wiPlxuICA8IS0tPGgyPnt7bm9kZS5xdWVzdGlvbi5sYWJlbH19PC9oMj4tLT5cbiAgPGZvcm0tcmVuZGVyZXJcbiAgICAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2Ygbm9kZS5xdWVzdGlvbi5xdWVzdGlvbnNcIlxuICAgIFtwYXJlbnRDb21wb25lbnRdPVwidGhpc1wiXG4gICAgW25vZGVdPVwibm9kZS5jaGlsZHJlbltxdWVzdGlvbi5rZXldXCJcbiAgICBbcGFyZW50R3JvdXBdPVwicGFyZW50R3JvdXBcIlxuICA+PC9mb3JtLXJlbmRlcmVyPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwibm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlID09PSAnc2VjdGlvbicgJiYgY2hlY2tTZWN0aW9uKG5vZGUpXCI+XG4gIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1wcmltYXJ5XCI+XG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHB1bGwtcmlnaHRcIlxuICAgICAgICAoY2xpY2spPVwiaXNDb2xsYXBzZWQgPSAhaXNDb2xsYXBzZWRcIlxuICAgICAgPlxuICAgICAgICB7eyBpc0NvbGxhcHNlZCA/ICdTaG93JyA6ICdIaWRlJyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICB7eyBub2RlLnF1ZXN0aW9uLmxhYmVsIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIiBbY29sbGFwc2VdPVwiaXNDb2xsYXBzZWRcIj5cbiAgICAgIDxmb3JtLXJlbmRlcmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBub2RlLnF1ZXN0aW9uLnF1ZXN0aW9uc1wiXG4gICAgICAgIFtwYXJlbnRDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgIFtub2RlXT1cIm5vZGUuY2hpbGRyZW5bcXVlc3Rpb24ua2V5XVwiXG4gICAgICAgIFtwYXJlbnRHcm91cF09XCJwYXJlbnRHcm91cFwiXG4gICAgICA+PC9mb3JtLXJlbmRlcmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIE1FU1NBR0VTIC0tPlxuPGRpdlxuICAqbmdJZj1cIm5vZGUuY29udHJvbCAmJiBub2RlLmNvbnRyb2wuYWxlcnQgJiYgbm9kZS5jb250cm9sLmFsZXJ0ICE9PSAnJ1wiXG4gIGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXG4+XG4gIDxhIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJhbGVydFwiPiZ0aW1lczs8L2E+IHt7IG5vZGUuY29udHJvbC5hbGVydCB9fVxuPC9kaXY+XG5cbjwhLS1DT05UUk9MUy0tPlxuXG48ZGl2XG4gICpuZ0lmPVwibm9kZS5xdWVzdGlvbi5jb250cm9sVHlwZSA9PT0gMFwiXG4gIGNsYXNzPVwiZm9ybS1ncm91cFwiXG4gIFtmb3JtR3JvdXBdPVwicGFyZW50R3JvdXBcIlxuICBbaGlkZGVuXT1cIm5vZGUuY29udHJvbC5oaWRkZW5cIlxuICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBub2RlLmNvbnRyb2wuZGlzYWJsZWQgfVwiXG4+XG4gIDwhLS1MRUFGIENPTlRST0wtLT5cbiAgPGRpdiBjbGFzcz1cInF1ZXN0aW9uLWFyZWFcIj5cbiAgICA8YVxuICAgICAgY2xhc3M9XCJmb3JtLXRvb2x0aXAgcHVsbC1yaWdodFwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlSW5mb3JtYXRpb24obm9kZS5xdWVzdGlvbi5leHRyYXMuaWQpXCJcbiAgICAgIGRhdGEtcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgbm9kZS5xdWVzdGlvbiAmJlxuICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbkluZm8gJiZcbiAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25JbmZvICE9PSAnJyAmJlxuICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbkluZm8gIT09ICcgJ1xuICAgICAgXCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICA8L2E+XG5cbiAgICA8bGFiZWxcbiAgICAgICpuZ0lmPVwibm9kZS5xdWVzdGlvbi5sYWJlbFwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiaGFzRXJyb3JzKCkgPyAncmVkJyA6ICcnXCJcbiAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICBbYXR0ci5mb3JdPVwibm9kZS5xdWVzdGlvbi5rZXlcIlxuICAgID5cbiAgICAgIHt7IG5vZGUucXVlc3Rpb24ucmVxdWlyZWQgPyAnKicgOiAnJyB9fSB7eyBub2RlLnF1ZXN0aW9uLmxhYmVsIH19XG4gICAgPC9sYWJlbD5cbiAgICA8ZGl2IFtuZ1N3aXRjaF09XCJub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGVcIj5cbiAgICAgIDxzZWxlY3RcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5vZGUucXVlc3Rpb24ua2V5XCJcbiAgICAgICAgW2lkXT1cIm5vZGUucXVlc3Rpb24ua2V5ICsgJ2lkJ1wiXG4gICAgICA+XG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG8gb2Ygbm9kZS5xdWVzdGlvbi5vcHRpb25zXCIgW25nVmFsdWVdPVwiby52YWx1ZVwiPlxuICAgICAgICAgIHt7IG8ubGFiZWwgfX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cblxuICAgICAgPGFwcC1maWxlLXVwbG9hZFxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGUnXCJcbiAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibm9kZS5xdWVzdGlvbi5rZXlcIlxuICAgICAgICBbaWRdPVwibm9kZS5xdWVzdGlvbi5rZXkgKyAnaWQnXCJcbiAgICAgICAgKGZpbGVDaGFuZ2VkKT1cInVwbG9hZCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgIDwvYXBwLWZpbGUtdXBsb2FkPlxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJub2RlLnF1ZXN0aW9uLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3Jvd3NdPVwibm9kZS5xdWVzdGlvbi5yb3dzXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibm9kZS5xdWVzdGlvbi5rZXlcIlxuICAgICAgICBbaWRdPVwibm9kZS5xdWVzdGlvbi5rZXkgKyAnaWQnXCJcbiAgICAgID5cbiAgICAgIDwvdGV4dGFyZWE+XG4gICAgICA8IS0tXG4gICAgICA8bmctc2VsZWN0ICpuZ1N3aXRjaENhc2U9XCIncmVtb3RlLXNlbGVjdCdcIiBbaXRlbXNdPVwiaXRlbXMkIHwgYXN5bmNcIiBiaW5kTGFiZWw9XCJsYWJlbFwiIGJpbmRWYWx1ZT1cInZhbHVlXCIgcGxhY2Vob2xkZXI9XCJ7e25vZGUucXVlc3Rpb24ucGxhY2Vob2xkZXJ9fVwiXG4gICAgICAgIFtoaWRlU2VsZWN0ZWRdPVwidHJ1ZVwiIFtsb2FkaW5nXT1cIml0ZW1zTG9hZGluZ1wiICBbdHlwZWFoZWFkXT1cIml0ZW1zSW5wdXQkXCIgW2Zvcm1Db250cm9sTmFtZV09XCJub2RlLnF1ZXN0aW9uLmtleVwiIFtpZF09XCJub2RlLnF1ZXN0aW9uLmtleSArICdpZCdcIj5cbiAgICAgIDwvbmctc2VsZWN0PlxuICAgIC0tPlxuICAgICAgPHJlbW90ZS1zZWxlY3RcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidyZW1vdGUtc2VsZWN0J1wiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJub2RlLnF1ZXN0aW9uLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgIFtjb21wb25lbnRJRF09XCJub2RlLnF1ZXN0aW9uLmtleSArICdpZCdcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5vZGUucXVlc3Rpb24ua2V5XCJcbiAgICAgICAgW2lkXT1cIm5vZGUucXVlc3Rpb24ua2V5ICsgJ2lkJ1wiXG4gICAgICA+PC9yZW1vdGUtc2VsZWN0PlxuICAgICAgPCEtLSAgXG4gICAgICA8ZGF0ZS10aW1lLXBpY2tlciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCIgW3Nob3dUaW1lXT1cIm5vZGUucXVlc3Rpb24uc2hvd1RpbWVcIiB0YWJpbmRleD1cIjBcIiBbd2Vla3NdPSdub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMud2Vla3NMaXN0J1xuICAgICAgICAob25EYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZWQobm9kZSlcIiBbc2hvd1dlZWtzXT1cIm5vZGUucXVlc3Rpb24uc2hvd1dlZWtzQWRkZXJcIiBbZm9ybUNvbnRyb2xOYW1lXT1cIm5vZGUucXVlc3Rpb24ua2V5XCJcbiAgICAgICAgW2lkXT1cIm5vZGUucXVlc3Rpb24ua2V5ICsgJ2lkJ1wiPjwvZGF0ZS10aW1lLXBpY2tlcj5cbiAgLS0+XG5cbiAgICAgIDxuZ3gtZGF0ZS10aW1lLXBpY2tlclxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCJcbiAgICAgICAgW3Nob3dUaW1lXT1cIm5vZGUucXVlc3Rpb24uc2hvd1RpbWVcIlxuICAgICAgICBbaWRdPVwibm9kZS5xdWVzdGlvbi5rZXkgKyAnaWQnXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJub2RlLnF1ZXN0aW9uLmtleVwiXG4gICAgICAgIFt3ZWVrc109XCJub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMud2Vla3NMaXN0XCJcbiAgICAgICAgKG9uRGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2VkKG5vZGUpXCJcbiAgICAgICAgW3Nob3dXZWVrc109XCJub2RlLnF1ZXN0aW9uLnNob3dXZWVrc0FkZGVyXCJcbiAgICAgICAgW3Nob3dIb2xpZGF5c109XCJub2RlLnF1ZXN0aW9uLnNob3dIb2xpZGF5c1wiXG4gICAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgICAgPjwvbmd4LWRhdGUtdGltZS1waWNrZXI+XG4gICAgICA8bmd4LXRpbWUtcGlja2VyICBcbiAgICAgICpuZ1N3aXRjaENhc2U9XCIndGltZSdcIiAgXG4gICAgICBpZD1cIm5vZGUucXVlc3Rpb24ua2V5ICsgJ2lkJ1wiICBcbiAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibm9kZS5xdWVzdGlvbi5rZXlcIlxuICAgICAgPjwvbmd4LXRpbWUtcGlja2VyPlxuICAgICAgPG5nLXNlbGVjdFxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXNlbGVjdCdcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIidhdXRvJ1wiXG4gICAgICAgIFtzdHlsZS5vdmVyZmxvdy14XT1cIidoaWRkZW4nXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJub2RlLnF1ZXN0aW9uLmtleVwiXG4gICAgICAgIFtpZF09XCJub2RlLnF1ZXN0aW9uLmtleSArICdpZCdcIlxuICAgICAgICBbb3B0aW9uc109XCJub2RlLnF1ZXN0aW9uLm9wdGlvbnNcIlxuICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICA+XG4gICAgICA8L25nLXNlbGVjdD5cbiAgICAgIDxuZy1zZWxlY3RcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidzaW5nbGUtc2VsZWN0J1wiXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiYXV0b1wiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibm9kZS5xdWVzdGlvbi5rZXlcIlxuICAgICAgICBbaWRdPVwibm9kZS5xdWVzdGlvbi5rZXkgKyAnaWQnXCJcbiAgICAgICAgW29wdGlvbnNdPVwibm9kZS5xdWVzdGlvbi5vcHRpb25zXCJcbiAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICAgID5cbiAgICAgIDwvbmctc2VsZWN0PlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJub2RlLnF1ZXN0aW9uLmtleVwiXG4gICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cIm5vZGUucXVlc3Rpb24ucGxhY2Vob2xkZXJcIlxuICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXG4gICAgICAgIFtpZF09XCJub2RlLnF1ZXN0aW9uLmtleSArICdpZCdcIlxuICAgICAgICBbc3RlcF09XCInYW55J1wiXG4gICAgICAgIFttaW5dPVwibm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLm1pblwiXG4gICAgICAgIFttYXhdPVwibm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLm1heFwiXG4gICAgICAvPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkZWNpbWFsJ1wiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibm9kZS5xdWVzdGlvbi5rZXlcIlxuICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJub2RlLnF1ZXN0aW9uLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgW2lkXT1cIm5vZGUucXVlc3Rpb24ua2V5ICsgJ2lkJ1wiXG4gICAgICAgIFttaW5dPVwibm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLm1pblwiXG4gICAgICAgIFttYXhdPVwibm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLm1heFwiXG4gICAgICAvPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5vZGUucXVlc3Rpb24ua2V5XCJcbiAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwibm9kZS5xdWVzdGlvbi5wbGFjZWhvbGRlclwiXG4gICAgICAgIFt0eXBlXT1cIm5vZGUucXVlc3Rpb24ucmVuZGVyaW5nVHlwZVwiXG4gICAgICAgIFtpZF09XCJub2RlLnF1ZXN0aW9uLmtleSArICdpZCdcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvIG9mIG5vZGUucXVlc3Rpb24ub3B0aW9uc1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbCBuby1ib3JkZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5vZGUucXVlc3Rpb24ua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cIm5vZGUucXVlc3Rpb24ua2V5ICsgJ2lkJ1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvLnZhbHVlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7eyBvLmxhYmVsIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxuICAgICAgICA8Y2hlY2tib3hcbiAgICAgICAgICBbaWRdPVwibm9kZS5xdWVzdGlvbi5rZXkgKyAnaWQnXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5vZGUucXVlc3Rpb24ua2V5XCJcbiAgICAgICAgICBbb3B0aW9uc109XCJub2RlLnF1ZXN0aW9uLm9wdGlvbnNcIlxuICAgICAgICAgIFtzZWxlY3RlZF09XCJub2RlLmNvbnRyb2wudmFsdWVcIlxuICAgICAgICA+PC9jaGVja2JveD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgbm9kZS5xdWVzdGlvbi5lbmFibGVIaXN0b3JpY2FsVmFsdWUgJiYgbm9kZS5xdWVzdGlvbi5oaXN0b3JpY2FsRGlzcGxheVxuICAgICAgICBcIlxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDJweFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTlcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXdhcm5pbmdcIj5QcmV2aW91cyBWYWx1ZTogPC9zcGFuPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IG5vZGUucXVlc3Rpb24uaGlzdG9yaWNhbERpc3BsYXk/LnRleHQgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJub2RlLnF1ZXN0aW9uLnNob3dIaXN0b3JpY2FsVmFsdWVEYXRlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+IHwgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgPnt7IG5vZGUucXVlc3Rpb24uaGlzdG9yaWNhbERpc3BsYXk/Ll9kYXRlIH19XG4gICAgICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucXVlc3Rpb24uaGlzdG9yaWNhbERpc3BsYXkgJiZcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5xdWVzdGlvbi5oaXN0b3JpY2FsRGlzcGxheS5fZGF0ZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAoe3sgbm9kZS5xdWVzdGlvbi5oaXN0b3JpY2FsRGlzcGxheS5fZGF0ZSB8IHRpbWVBZ28gfX0pPC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICBbbmFtZV09XCInaGlzdG9yeVZhbHVlJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbWFsbCBjb2wteHMtM1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFVzZSBWYWx1ZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8YXBwb2ludG1lbnRzLW92ZXJ2aWV3IFtub2RlXT1cIm5vZGVcIj48L2FwcG9pbnRtZW50cy1vdmVydmlldz5cbiAgICAgIDxkaXYgKm5nSWY9XCJoYXNFcnJvcnMoKVwiPlxuICAgICAgICA8cCAqbmdGb3I9XCJsZXQgZSBvZiBlcnJvcnMoKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj57eyBlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicXVlc3Rpb24taW5mbyBjb2wtbWQtMTIgY29sLWxnLTEyIGNvbC1zbS0xMlwiXG4gICAgICBpZD1cInt7IG5vZGUucXVlc3Rpb24uZXh0cmFzLmlkIH19XCJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIG5vZGUucXVlc3Rpb24gJiZcbiAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25JbmZvICYmXG4gICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uSW5mbyAhPT0gJycgJiZcbiAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25JbmZvICE9PSAnICdcbiAgICAgIFwiXG4gICAgPlxuICAgICAge3sgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25JbmZvIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2XG4gICpuZ0lmPVwibm9kZS5xdWVzdGlvbi5jb250cm9sVHlwZSA9PT0gMVwiXG4gIFtoaWRkZW5dPVwibm9kZS5jb250cm9sLmhpZGRlblwiXG4gIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IG5vZGUuY29udHJvbC5kaXNhYmxlZCB9XCJcbj5cbiAgPCEtLUFSUkFZIENPTlRST0wtLT5cbiAgPGRpdiBbbmdTd2l0Y2hdPVwibm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlXCI+XG4gICAgPGRpdiBjbGFzcz1cIndlbGxcIiBzdHlsZT1cInBhZGRpbmc6IDJweFwiICpuZ1N3aXRjaENhc2U9XCIncmVwZWF0aW5nJ1wiPlxuICAgICAgPGg0IHN0eWxlPVwibWFyZ2luOiAycHg7IGZvbnQtd2VpZ2h0OiBib2xkXCI+e3sgbm9kZS5xdWVzdGlvbi5sYWJlbCB9fTwvaDQ+XG4gICAgICA8aHJcbiAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICBtYXJnaW4tbGVmdDogLTJweDtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0ycHg7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgICAgICBib3JkZXItd2lkdGg6IDJweDtcbiAgICAgICAgXCJcbiAgICAgIC8+XG4gICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJub2RlLnF1ZXN0aW9uLmV4dHJhcy50eXBlXCI+XG4gICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIid0ZXN0T3JkZXInXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPGZvcm0tcmVuZGVyZXJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGNoaWxkLnF1ZXN0aW9uLnF1ZXN0aW9uc1wiXG4gICAgICAgICAgICAgIFtwYXJlbnRDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgIFtub2RlXT1cImNoaWxkLmNoaWxkcmVuW3F1ZXN0aW9uLmtleV1cIlxuICAgICAgICAgICAgICBbcGFyZW50R3JvdXBdPVwiY2hpbGQuY29udHJvbFwiXG4gICAgICAgICAgICA+PC9mb3JtLXJlbmRlcmVyPlxuICAgICAgICAgICAgPGRpdj57eyBjaGlsZC5vcmRlck51bWJlciB9fTwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm5vZGUucmVtb3ZlQXQoaSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBSZW1vdmVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICA8aHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTJweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0ycHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidvYnNHcm91cCdcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDIwcHhcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8Zm9ybS1yZW5kZXJlclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgY2hpbGQucXVlc3Rpb24ucXVlc3Rpb25zXCJcbiAgICAgICAgICAgICAgW3BhcmVudENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgW25vZGVdPVwiY2hpbGQuY2hpbGRyZW5bcXVlc3Rpb24ua2V5XVwiXG4gICAgICAgICAgICAgIFtwYXJlbnRHcm91cF09XCJjaGlsZC5jb250cm9sXCJcbiAgICAgICAgICAgID48L2Zvcm0tcmVuZGVyZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b24gXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kYW5nZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibm9kZS5yZW1vdmVBdChpKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJlbW92ZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgIDxoclxuICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMnB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogLTJweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvbiBcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgIChjbGljayk9XCJub2RlLmNyZWF0ZUNoaWxkTm9kZSgpXCJcbiAgICAgID5cbiAgICAgICAgQWRkXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXZcbiAgKm5nSWY9XCJub2RlLnF1ZXN0aW9uLmNvbnRyb2xUeXBlID09PSAyXCJcbiAgW2hpZGRlbl09XCJub2RlLmNvbnRyb2wuaGlkZGVuXCJcbiAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogbm9kZS5jb250cm9sLmRpc2FibGVkIH1cIlxuPlxuICA8IS0tR1JPVVAtLT5cbiAgPGRpdiBbbmdTd2l0Y2hdPVwibm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlXCI+XG4gICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2dyb3VwJ1wiPlxuICAgICAgPGZvcm0tcmVuZGVyZXJcbiAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIG5vZGUucXVlc3Rpb24ucXVlc3Rpb25zXCJcbiAgICAgICAgW3BhcmVudENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgW25vZGVdPVwibm9kZS5jaGlsZHJlbltxdWVzdGlvbi5rZXldXCJcbiAgICAgICAgW3BhcmVudEdyb3VwXT1cIm5vZGUuY29udHJvbFwiXG4gICAgICA+PC9mb3JtLXJlbmRlcmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgICpuZ1N3aXRjaENhc2U9XCInZmllbGQtc2V0J1wiXG4gICAgICBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNlZWVlZWU7IHBhZGRpbmc6IDJweDsgbWFyZ2luOiAycHhcIlxuICAgID5cbiAgICAgIDxmb3JtLXJlbmRlcmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBub2RlLnF1ZXN0aW9uLnF1ZXN0aW9uc1wiXG4gICAgICAgIFtwYXJlbnRDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgIFtub2RlXT1cIm5vZGUuY2hpbGRyZW5bcXVlc3Rpb24ua2V5XVwiXG4gICAgICAgIFtwYXJlbnRHcm91cF09XCJub2RlLmNvbnRyb2xcIlxuICAgICAgPjwvZm9ybS1yZW5kZXJlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogWycuLi8uLi9zdHlsZS9hcHAuY3NzJywgREVGQVVMVF9TVFlMRVNdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1SZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYXJlbnRDb21wb25lbnQ6IEZvcm1SZW5kZXJlckNvbXBvbmVudDtcbiAgQElucHV0KCkgcHVibGljIG5vZGU6IE5vZGVCYXNlO1xuICBASW5wdXQoKSBwdWJsaWMgcGFyZW50R3JvdXA6IEFmZUZvcm1Hcm91cDtcbiAgcHVibGljIGNoaWxkQ29tcG9uZW50czogRm9ybVJlbmRlcmVyQ29tcG9uZW50W10gPSBbXTtcbiAgcHVibGljIHNob3dUaW1lOiBib29sZWFuO1xuICBwdWJsaWMgc2hvd1dlZWtzOiBib29sZWFuO1xuICBwdWJsaWMgc2hvd0hvbGlkYXlzOiBib29sZWFuO1xuICBwdWJsaWMgYWN0aXZlVGFiOiBudW1iZXI7XG4gIHB1YmxpYyBkYXRhU291cmNlOiBEYXRhU291cmNlO1xuICBwdWJsaWMgaXNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgcHVibGljIGF1dG86IGFueTtcblxuICAvLyBpdGVtcyQ6IE9ic2VydmFibGU8YW55W10+O1xuICAvLyBpdGVtc0xvYWRpbmcgPSBmYWxzZTtcbiAgLy8gaXRlbXNJbnB1dCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uRmFjdG9yeTogVmFsaWRhdGlvbkZhY3RvcnksXG4gICAgcHJpdmF0ZSBkYXRhU291cmNlczogRGF0YVNvdXJjZXMsXG4gICAgcHJpdmF0ZSBmb3JtRXJyb3JzU2VydmljZTogRm9ybUVycm9yc1NlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55XG4gICkge1xuICAgIHRoaXMuYWN0aXZlVGFiID0gMDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldFVwUmVtb3RlU2VsZWN0KCk7XG4gICAgdGhpcy5zZXRVcEZpbGVVcGxvYWQoKTtcbiAgICB0aGlzLnNldFVwRGF0ZXBpY2tlckhvbGlkYXlzKCk7XG5cbiAgICBpZiAodGhpcy5ub2RlICYmIHRoaXMubm9kZS5mb3JtKSB7XG4gICAgICBjb25zdCB0YWIgPSB0aGlzLm5vZGUuZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmxhc3RGb3JtVGFiO1xuICAgICAgaWYgKHRhYiAmJiB0YWIgIT09IHRoaXMuYWN0aXZlVGFiKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5ub2RlICYmIHRoaXMubm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlID09PSAnZm9ybScpIHtcbiAgICAgIHRoaXMuZm9ybUVycm9yc1NlcnZpY2UuYW5ub3VuY2VFcnJvckZpZWxkJC5zdWJzY3JpYmUoKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Db250cm9sKGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5vZGUgJiYgdGhpcy5ub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUgPT09ICdzZWN0aW9uJykge1xuICAgICAgdGhpcy5pc0NvbGxhcHNlZCA9ICEodGhpcy5ub2RlLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uR3JvdXApLmlzRXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFyZW50Q29tcG9uZW50KSB7XG4gICAgICB0aGlzLnBhcmVudENvbXBvbmVudC5hZGRDaGlsZENvbXBvbmVudCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkQ2hpbGRDb21wb25lbnQoY2hpbGQ6IEZvcm1SZW5kZXJlckNvbXBvbmVudCkge1xuICAgIHRoaXMuY2hpbGRDb21wb25lbnRzLnB1c2goY2hpbGQpO1xuICB9XG5cbiAgcHVibGljIHNldFVwUmVtb3RlU2VsZWN0KCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMubm9kZSAmJlxuICAgICAgdGhpcy5ub2RlLnF1ZXN0aW9uLmV4dHJhcyAmJlxuICAgICAgdGhpcy5ub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUgPT09ICdyZW1vdGUtc2VsZWN0J1xuICAgICkge1xuICAgICAgLy8gbGV0IHNlbGVjdFF1ZXN0aW9uID0gdGhpcy5ub2RlLmZvcm0uc2VhcmNoTm9kZUJ5UXVlc3Rpb25JZCh0aGlzLm5vZGUucXVlc3Rpb24ua2V5KVswXTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZXMuZGF0YVNvdXJjZXNbXG4gICAgICAgIHRoaXMubm9kZS5xdWVzdGlvbi5kYXRhU291cmNlXG4gICAgICBdO1xuICAgICAgLypcbiAgICAgIGxldCBkZWZhbHRWYWx1ZXMgPSBvZihbXSk7XG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlLnJlc29sdmVTZWxlY3RlZFZhbHVlKHNlbGVjdFF1ZXN0aW9uLmNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgIGRlZmFsdFZhbHVlcyA9IHRoaXMuZGF0YVNvdXJjZS5yZXNvbHZlU2VsZWN0ZWRWYWx1ZShzZWxlY3RRdWVzdGlvbi5jb250cm9sLnZhbHVlKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10pKSwgLy8gZW1wdHkgbGlzdCBvbiBlcnJvclxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5pdGVtcyQgPSBjb25jYXQoXG4gICAgICAgIGRlZmFsdFZhbHVlcyxcbiAgICAgICAgdGhpcy5pdGVtc0lucHV0JC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuaXRlbXNMb2FkaW5nID0gdHJ1ZSksXG4gICAgICAgICAgc3dpdGNoTWFwKHRlcm0gPT4gdGhpcy5kYXRhU291cmNlLnNlYXJjaE9wdGlvbnModGVybSkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10pKSwgLy8gZW1wdHkgbGlzdCBvbiBlcnJvclxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pdGVtc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgKi9cbiAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5ub2RlLnF1ZXN0aW9uLmRhdGFTb3VyY2VPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhU291cmNlT3B0aW9ucyA9IHRoaXMubm9kZS5xdWVzdGlvbi5kYXRhU291cmNlT3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0VXBGaWxlVXBsb2FkKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMubm9kZSAmJlxuICAgICAgdGhpcy5ub2RlLnF1ZXN0aW9uLmV4dHJhcyAmJlxuICAgICAgdGhpcy5ub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUgPT09ICdmaWxlJ1xuICAgICkge1xuICAgICAgdGhpcy5kYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlcy5kYXRhU291cmNlc1tcbiAgICAgICAgdGhpcy5ub2RlLnF1ZXN0aW9uLmRhdGFTb3VyY2VcbiAgICAgIF07XG4gICAgICAvLyBjb25zb2xlLmxvZygnS2V5JywgdGhpcy5ub2RlLnF1ZXN0aW9uKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdEYXRhIHNvdXJjZScsIHRoaXMuZGF0YVNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFVwRGF0ZXBpY2tlckhvbGlkYXlzKCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZXMuZGF0YVNvdXJjZXNbXG4gICAgICB0aGlzLm5vZGUucXVlc3Rpb24uZGF0YVNvdXJjZVxuICAgIF07XG4gIH1cblxuICBjaGVja1NlY3Rpb24obm9kZTogTm9kZUJhc2UpIHtcbiAgICBpZiAobm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlID09PSAnc2VjdGlvbicpIHtcbiAgICAgIGxldCBncm91cENoaWxkcmVuSGlkZGVuID0gZmFsc2U7XG4gICAgICBjb25zdCBhbGxTZWN0aW9uQ29udHJvbHNIaWRkZW4gPSBPYmplY3Qua2V5cyhub2RlLmNoaWxkcmVuKS5ldmVyeSgoaykgPT4ge1xuICAgICAgICBjb25zdCBpbm5lck5vZGUgPSBub2RlLmNoaWxkcmVuW2tdO1xuICAgICAgICBpZiAoaW5uZXJOb2RlIGluc3RhbmNlb2YgR3JvdXBOb2RlKSB7XG4gICAgICAgICAgZ3JvdXBDaGlsZHJlbkhpZGRlbiA9IE9iamVjdC5rZXlzKGlubmVyTm9kZS5jaGlsZHJlbikuZXZlcnkoXG4gICAgICAgICAgICAoaSkgPT4gaW5uZXJOb2RlLmNoaWxkcmVuW2ldLmNvbnRyb2wuaGlkZGVuXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbltrXS5jb250cm9sLmhpZGRlbiB8fCBncm91cENoaWxkcmVuSGlkZGVuO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gIWFsbFNlY3Rpb25Db250cm9sc0hpZGRlbjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgY2xpY2tUYWIodGFiTnVtYmVyKSB7XG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWJOdW1iZXI7XG4gIH1cblxuICBwdWJsaWMgbG9hZFByZXZpb3VzVGFiKCkge1xuICAgIGlmICghdGhpcy5pc0N1cnJlbnRUYWJGaXJzdCgpKSB7XG4gICAgICB0aGlzLmNsaWNrVGFiKHRoaXMuYWN0aXZlVGFiIC0gMSk7XG4gICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQ3VycmVudFRhYkZpcnN0KCkge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZVRhYiA9PT0gMDtcbiAgfVxuXG4gIHB1YmxpYyBpc0N1cnJlbnRUYWJMYXN0KCkge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZVRhYiA9PT0gdGhpcy5ub2RlLnF1ZXN0aW9uWydxdWVzdGlvbnMnXS5sZW5ndGggLSAxO1xuICB9XG5cbiAgcHVibGljIGxvYWROZXh0VGFiKCkge1xuICAgIGlmICghdGhpcy5pc0N1cnJlbnRUYWJMYXN0KCkpIHtcbiAgICAgIHRoaXMuY2xpY2tUYWIodGhpcy5hY3RpdmVUYWIgKyAxKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gIH1cbiAgcHVibGljIHRhYlNlbGVjdGVkKCRldmVudCkge1xuICAgIHRoaXMuYWN0aXZlVGFiID0gJGV2ZW50O1xuICAgIHRoaXMuc2V0UHJldmlvdXNUYWIoKTtcbiAgfVxuICBwdWJsaWMgc2V0UHJldmlvdXNUYWIoKSB7XG4gICAgaWYgKHRoaXMubm9kZSAmJiB0aGlzLm5vZGUuZm9ybSkge1xuICAgICAgdGhpcy5ub2RlLmZvcm0udmFsdWVQcm9jZXNzaW5nSW5mb1snbGFzdEZvcm1UYWInXSA9IHRoaXMuYWN0aXZlVGFiO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaGFzRXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGUuY29udHJvbC50b3VjaGVkICYmICF0aGlzLm5vZGUuY29udHJvbC52YWxpZDtcbiAgfVxuXG4gIHB1YmxpYyBlcnJvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RXJyb3JzKHRoaXMubm9kZSk7XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsVG9Db250cm9sKGVycm9yOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0YWI6IG51bWJlciA9ICtlcnJvci5zcGxpdCgnLCcpWzBdO1xuICAgIGNvbnN0IGVsU2VsZWN0b3IgPSBlcnJvci5zcGxpdCgnLCcpWzFdICsgJ2lkJztcblxuICAgIC8vIHRoZSB0YWIgY29tcG9uZW50c1xuICAgIGNvbnN0IHRhYkNvbXBvbmVudDogRm9ybVJlbmRlcmVyQ29tcG9uZW50ID0gdGhpcy5jaGlsZENvbXBvbmVudHNbdGFiXTtcblxuICAgIHRoaXMuY2xpY2tUYWIodGFiKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gZXhwYW5kIGFsbCBzZWN0aW9uc1xuICAgICAgdGFiQ29tcG9uZW50LmNoaWxkQ29tcG9uZW50cy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICAgIHNlY3Rpb24uaXNDb2xsYXBzZWQgPSBmYWxzZTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50OiBhbnkgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsU2VsZWN0b3IpO1xuICAgICAgICAgIGlmIChlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQuZm9jdXMpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9KTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgcHVibGljIG9uRGF0ZUNoYW5nZWQobm9kZTogTGVhZk5vZGUpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnTm9kZScsIG5vZGUpO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gIH1cblxuICBwdWJsaWMgdXBsb2FkKGV2ZW50KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ0V2ZW50JywgZXZlbnQpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdEYXRhJywgdGhpcy5kYXRhU291cmNlKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVJbmZvcm1hdGlvbihpbmZvSWQpIHtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5mb0lkKTtcblxuICAgIGlmIChlLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycpIHtcbiAgICAgIGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9IGVsc2Uge1xuICAgICAgZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnSW5mb0lkJywgaW5mb0lkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXJyb3JzKG5vZGU6IE5vZGVCYXNlKSB7XG4gICAgY29uc3QgZXJyb3JzOiBhbnkgPSBub2RlLmNvbnRyb2wuZXJyb3JzO1xuXG4gICAgaWYgKGVycm9ycykge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGlvbkZhY3RvcnkuZXJyb3JzKGVycm9ycywgbm9kZS5xdWVzdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iXX0=
|