@mtna/web-form-angular 1.0.6-SNAPSHOT.22 → 1.0.6-SNAPSHOT.24
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/_index.scss +2 -0
- package/bundles/mtna-web-form-angular.umd.js +1466 -644
- package/bundles/mtna-web-form-angular.umd.js.map +1 -1
- package/esm2015/lib/components/form-item-impl/date/date.component.js +6 -29
- package/esm2015/lib/components/form-item-impl/date/date.module.js +2 -5
- package/esm2015/lib/components/form-item-impl/year-quarter/year-quarter.component.js +1 -1
- package/esm2015/lib/components/form-item-injector/form-item-injector.component.js +43 -2
- package/esm2015/lib/components/template-item-impl/date/year-quarter-item/year-quarter-item.component.js +105 -12
- package/esm2015/lib/components/template-item-impl/date/year-quarter-range-item/year-quarter-range-item.component.js +11 -2
- package/esm2015/lib/components/template-item-impl/date-item/date-item.component.js +3 -27
- package/esm2015/lib/components/template-item-impl/date-item/date-item.module.js +2 -5
- package/esm2015/lib/components/template-item-impl/decimal-answer-item/decimal-answer-item.component.js +4 -4
- package/esm2015/lib/components/template-item-impl/decimal-answer-item/decimal-answer-item.module.js +15 -8
- package/esm2015/lib/components/template-item-impl/template-display-viewer/template-display-viewer.component.js +25 -4
- package/esm2015/lib/components/template-item-impl/template-item/template-item.component.js +7 -3
- package/esm2015/lib/components/template-item-impl/template-item-injector/template-item-injector.component.js +49 -4
- package/esm2015/lib/components/template-item-impl/template-section/template-section.component.js +1 -1
- package/esm2015/lib/models/design/design-constants/index.js +2 -0
- package/esm2015/lib/models/design/design-constants/template-design-constants.model.js +54 -0
- package/esm2015/lib/models/design/design-mapper/bulleted-list-item-template-mapper.js +2 -2
- package/esm2015/lib/models/design/design-mapper/date-item-template-mapper.js +10 -18
- package/esm2015/lib/models/design/design-mapper/dropdown-item-template-mapper.js +1 -12
- package/esm2015/lib/models/design/design-mapper/file-upload-item-template-mapper.js +4 -8
- package/esm2015/lib/models/design/design-mapper/i18n-text-response-item-template-mapper.js +2 -2
- package/esm2015/lib/models/design/design-mapper/mapper-classes.model.js +35 -26
- package/esm2015/lib/models/design/design-mapper/mapping-logic-core.js +23 -5
- package/esm2015/lib/models/design/design-mapper/multiple-choice-item-template-mapper.js +1 -11
- package/esm2015/lib/models/design/design-mapper/numbered-list-item-template-mapper.js +2 -2
- package/esm2015/lib/models/design/design-mapper/numeric-response-item-template-mapper.js +2 -2
- package/esm2015/lib/models/design/design-mapper/offset-date-range-template-mapper.js +11 -9
- package/esm2015/lib/models/design/design-mapper/option-group-item-mapper.js +27 -10
- package/esm2015/lib/models/design/design-mapper/option-item-mapper.js +4 -3
- package/esm2015/lib/models/design/design-mapper/option-selector-mapper.js +17 -5
- package/esm2015/lib/models/design/design-mapper/repeatable-item-template-mapper.js +2 -2
- package/esm2015/lib/models/design/design-mapper/template-item-group-mapper.js +48 -13
- package/esm2015/lib/models/design/design-mapper/template-item-mapper.js +47 -33
- package/esm2015/lib/models/design/design-mapper/template-mapper.js +7 -5
- package/esm2015/lib/models/design/design-mapper/template-section-mapper.js +14 -12
- package/esm2015/lib/models/design/design-mapper/text-item-template-mapper.js +2 -2
- package/esm2015/lib/models/design/design-mapper/text-response-item-template-mapper.js +2 -2
- package/esm2015/lib/models/design/design-mapper/time-item-template-mapper.js +2 -2
- package/esm2015/lib/models/design/design-mapper/title-item-template-mapper.js +18 -9
- package/esm2015/lib/models/design/design-mapper/year-quarter-range-template-mapper.js +27 -7
- package/esm2015/lib/models/design/design-properties/engagement-property-type.model.js +2 -0
- package/esm2015/lib/models/design/design-properties/enumeration-value-functions/date-format.js +29 -0
- package/esm2015/lib/models/design/design-properties/enumeration-value-functions/index.js +4 -0
- package/esm2015/lib/models/design/design-properties/enumeration-value-functions/layout.js +14 -0
- package/esm2015/lib/models/design/design-properties/enumeration-value-functions/quarter-range.js +20 -0
- package/esm2015/lib/models/design/design-properties/enumerations/date-display-format-enumeration.model.js +38 -0
- package/esm2015/lib/models/design/design-properties/enumerations/index.js +4 -0
- package/esm2015/lib/models/design/design-properties/enumerations/layout-enumeration.model.js +11 -0
- package/esm2015/lib/models/design/design-properties/enumerations/quarter-range-enumeration.model.js +24 -0
- package/esm2015/lib/models/design/design-properties/properties/date-format.model.js +14 -0
- package/esm2015/lib/models/design/design-properties/properties/index.js +4 -0
- package/esm2015/lib/models/design/design-properties/properties/layout.model.js +14 -0
- package/esm2015/lib/models/design/design-properties/properties/quarter-range.model.js +23 -0
- package/esm2015/lib/models/design/index.js +4 -3
- package/esm2015/lib/models/design/potential-designs.model.js +24 -2
- package/esm2015/lib/models/design/unavailable-template-item-name-map.model.js +27 -0
- package/esm2015/lib/models/i18n-constants.model.js +58 -12
- package/esm2015/lib/pipes/get-form-control-error.pipe.js +1 -1
- package/esm2015/lib/pipes/get-i18n-string-value-from-locale.pipe.js +2 -2
- package/esm2015/lib/pipes/instance-of-template-item.pipe.js +3 -3
- package/esm2015/lib/services/api.service.js +58 -28
- package/esm2015/lib/services/ui.service.js +2 -2
- package/esm2015/lib/state/design/template-design.facade.js +124 -45
- package/esm2015/lib/state/form/template-form.effects.js +30 -18
- package/esm2015/lib/utilities/enum-property-handlers-util.js +14 -0
- package/esm2015/lib/utilities/form-option-design-util.js +5 -5
- package/esm2015/lib/utilities/get-design-properties.util.js +8 -0
- package/esm2015/lib/utilities/index.js +7 -1
- package/esm2015/lib/utilities/is-template-util.js +68 -0
- package/esm2015/lib/utilities/item-to-design-base.util.js +25 -0
- package/esm2015/lib/utilities/merge-template-util.js +1 -2
- package/esm2015/lib/utilities/model-map-util.js +27 -0
- package/esm2015/lib/utilities/new-base-designs.util.js +5 -4
- package/esm2015/lib/utilities/serializer-util.js +2 -50
- package/esm2015/lib/utilities/template-design-core-util.js +8 -7
- package/esm2015/lib/utilities/template-design-util.js +7 -74
- package/esm2015/lib/utilities/to-design-util.js +24 -0
- package/esm2015/lib/utilities/validator-functions-util.js +59 -0
- package/fesm2015/mtna-web-form-angular.js +1169 -476
- package/fesm2015/mtna-web-form-angular.js.map +1 -1
- package/lib/_index.scss +2 -0
- package/lib/components/form-item-impl/checkbox/_checkbox-theme.scss +4 -4
- package/lib/components/form-item-impl/date/date.component.d.ts +2 -8
- package/lib/components/form-item-impl/multiple-choice/_multiple-choice-theme.scss +4 -4
- package/lib/components/form-item-injector/form-item-injector.component.d.ts +1 -0
- package/lib/components/template-item-impl/checkbox-item/_checkbox-item-template-theme.scss +4 -4
- package/lib/components/template-item-impl/date/year-quarter-item/year-quarter-item.component.d.ts +20 -2
- package/lib/components/template-item-impl/date/year-quarter-range-item/year-quarter-range-item.component.d.ts +4 -0
- package/lib/components/template-item-impl/date-item/date-item.component.d.ts +1 -8
- package/lib/components/template-item-impl/decimal-answer-item/decimal-answer-item.module.d.ts +7 -5
- package/lib/components/template-item-impl/multiple-choice-item/_multiple-choice-item-theme.scss +65 -0
- package/lib/components/template-item-impl/template-display-viewer/template-display-viewer.component.d.ts +4 -2
- package/lib/components/template-item-impl/template-item/template-item.component.d.ts +1 -0
- package/lib/components/template-item-impl/template-item-injector/template-item-injector.component.d.ts +1 -0
- package/lib/components/template-item-impl/template-section/template-section.component.d.ts +1 -1
- package/lib/core/_all-color.scss +2 -0
- package/lib/core/_all-theme.scss +2 -0
- package/lib/core/_all-typography.scss +2 -0
- package/lib/models/design/design-constants/index.d.ts +1 -0
- package/lib/models/design/{template-design-constants.model.d.ts → design-constants/template-design-constants.model.d.ts} +8 -2
- package/lib/models/design/design-mapper/dropdown-item-template-mapper.d.ts +0 -1
- package/lib/models/design/design-mapper/mapping-logic-core.d.ts +23 -4
- package/lib/models/design/design-mapper/option-selector-mapper.d.ts +1 -0
- package/lib/models/design/design-mapper/template-item-group-mapper.d.ts +1 -0
- package/lib/models/design/design-mapper/template-item-mapper.d.ts +2 -2
- package/lib/models/design/design-mapper/title-item-template-mapper.d.ts +1 -0
- package/lib/models/design/design-properties/engagement-property-type.model.d.ts +14 -0
- package/lib/models/design/design-properties/enumeration-value-functions/date-format.d.ts +2 -0
- package/lib/models/design/design-properties/enumeration-value-functions/index.d.ts +3 -0
- package/lib/models/design/design-properties/enumeration-value-functions/layout.d.ts +3 -0
- package/lib/models/design/design-properties/enumeration-value-functions/quarter-range.d.ts +2 -0
- package/lib/models/design/{enumerations/date-enumeration.model.d.ts → design-properties/enumerations/date-display-format-enumeration.model.d.ts} +2 -1
- package/lib/models/design/design-properties/enumerations/index.d.ts +3 -0
- package/lib/models/design/design-properties/enumerations/layout-enumeration.model.d.ts +4 -0
- package/lib/models/design/design-properties/enumerations/quarter-range-enumeration.model.d.ts +6 -0
- package/lib/models/design/design-properties/properties/date-format.model.d.ts +2 -0
- package/lib/models/design/design-properties/properties/index.d.ts +3 -0
- package/lib/models/design/design-properties/properties/layout.model.d.ts +2 -0
- package/lib/models/design/design-properties/properties/quarter-range.model.d.ts +3 -0
- package/lib/models/design/index.d.ts +3 -2
- package/lib/models/design/unavailable-template-item-name-map.model.d.ts +1 -0
- package/lib/models/i18n-constants.model.d.ts +56 -10
- package/lib/pipes/get-form-control-error.pipe.d.ts +2 -2
- package/lib/pipes/get-i18n-string-value-from-locale.pipe.d.ts +1 -1
- package/lib/services/api.service.d.ts +52 -18
- package/lib/services/ui.service.d.ts +2 -2
- package/lib/state/design/template-design.facade.d.ts +26 -0
- package/lib/state/form/template-form.effects.d.ts +0 -6
- package/lib/utilities/enum-property-handlers-util.d.ts +4 -0
- package/lib/utilities/form-option-design-util.d.ts +2 -2
- package/lib/utilities/get-design-properties.util.d.ts +3 -0
- package/lib/utilities/index.d.ts +6 -0
- package/lib/utilities/is-template-util.d.ts +5 -0
- package/lib/utilities/item-to-design-base.util.d.ts +5 -0
- package/lib/utilities/model-map-util.d.ts +2 -0
- package/lib/utilities/template-design-core-util.d.ts +4 -4
- package/lib/utilities/template-design-util.d.ts +4 -7
- package/lib/utilities/to-design-util.d.ts +4 -0
- package/lib/utilities/validator-functions-util.d.ts +12 -0
- package/package.json +2 -2
- package/esm2015/lib/models/design/enumerations/date-enumeration.model.js +0 -33
- package/esm2015/lib/models/design/enumerations/index.js +0 -2
- package/esm2015/lib/models/design/template-design-constants.model.js +0 -48
- package/lib/models/design/enumerations/index.d.ts +0 -1
|
@@ -2,6 +2,7 @@ import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
|
|
|
2
2
|
import { isNullOrUndefined, isPresent, isType } from '@mtna/core-ts';
|
|
3
3
|
import { CHECKBOX_ITEM_ID, DECIMAL_ANSWER_ITEM_ID, I18N_PARAGRAPH_ANSWER_ITEM_ID, I18N_SHORT_ANSWER_ITEM_ID, isForm, isFormItemGroupImpl, isOffsetDateRangeItem, isProgressiveForm, isRepeatableItem, isSection, isTableItem, isWholeNumberItem, isYearQuarterRangeItem, PARAGRAPH_ANSWER_ITEM_ID, SHORT_ANSWER_ITEM_ID, WHOLE_NUMBER_ANSWER_ITEM_ID, } from '@mtna/web-form-ts';
|
|
4
4
|
import { validationResultValidator } from '../validators';
|
|
5
|
+
import { numericalValueCheck, numValueLimit, positiveNumberPattern, wholeNumberPattern } from './validator-functions-util';
|
|
5
6
|
/** RegEx to validate number items contain only negative, digits, or decimals */
|
|
6
7
|
const numOnlyWithoutComma = /^-?\d+(\.\d*)?$/;
|
|
7
8
|
/** RegEx to validate number items contain only negative, digits, or decimals in comma format */
|
|
@@ -379,53 +380,4 @@ function _isDisabled(item, disabledState) {
|
|
|
379
380
|
const disabled = disabledState[item.instanceId];
|
|
380
381
|
return isNullOrUndefined(disabled) ? item.disabled : disabled;
|
|
381
382
|
}
|
|
382
|
-
function wholeNumberPattern() {
|
|
383
|
-
return (control) => {
|
|
384
|
-
if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
|
|
385
|
-
return null;
|
|
386
|
-
}
|
|
387
|
-
return wholeNumber.test(control.value) ? null : { wholeNumber: true };
|
|
388
|
-
};
|
|
389
|
-
}
|
|
390
|
-
function numericalValueCheck() {
|
|
391
|
-
return (control) => {
|
|
392
|
-
if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
|
|
393
|
-
return null;
|
|
394
|
-
}
|
|
395
|
-
return numOnlyWithoutComma.test(control.value) || numOnlyWithComma.test(control.value) ? null : { nonDigit: true };
|
|
396
|
-
};
|
|
397
|
-
}
|
|
398
|
-
function positiveNumberPattern() {
|
|
399
|
-
return (control) => {
|
|
400
|
-
if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
|
|
401
|
-
return null;
|
|
402
|
-
}
|
|
403
|
-
return posOnly.test(control.value) ? null : { positive: true };
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* This works as a combination of the angular 'min'/'max' Validators. Using the built-in validators
|
|
408
|
-
* appears to take precedence over custom validators, regardless of order in the array. Using this function
|
|
409
|
-
* ensures validators set before this one maintain priority. For instance, the input value failing numerical validation
|
|
410
|
-
* is more important than the value being within min-max range.
|
|
411
|
-
*/
|
|
412
|
-
function numValueLimit(type, limit) {
|
|
413
|
-
return (control) => {
|
|
414
|
-
if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
|
|
415
|
-
return null;
|
|
416
|
-
}
|
|
417
|
-
const value = parseFloat(control.value);
|
|
418
|
-
return !isNaN(value) && (type === 'min' ? value < limit : value > limit)
|
|
419
|
-
? {
|
|
420
|
-
[type]: {
|
|
421
|
-
[type]: limit,
|
|
422
|
-
actual: control.value,
|
|
423
|
-
},
|
|
424
|
-
}
|
|
425
|
-
: null;
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
function isEmptyString(value) {
|
|
429
|
-
return typeof value === 'string' && !value.length;
|
|
430
|
-
}
|
|
431
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy9zZXJpYWxpemVyLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUNMLGdCQUFnQixFQUloQixzQkFBc0IsRUFNdEIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUd6QixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUd0Qix3QkFBd0IsRUFHeEIsb0JBQW9CLEVBS3BCLDJCQUEyQixHQUc1QixNQUFNLG1CQUFtQixDQUFDO0FBSTNCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0xRCxnRkFBZ0Y7QUFDaEYsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxnR0FBZ0c7QUFDaEcsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RCw2RUFBNkU7QUFDN0UsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQzFCLDRGQUE0RjtBQUM1RixNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztBQUV2QyxnQ0FBZ0M7QUFFaEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFFBQWtELEVBQ2xELGNBQW9DLEVBQ3BDLDRCQUF5RCxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQ3BFLHNCQUFtRTtJQUVuRSxN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QUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RixJQUFJLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckYsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQzFDLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkcsUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMxRztJQUNELE1BQU0sVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUV6RSxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEYsSUFBSSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25GLElBQUksUUFBUSxDQUFD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QUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtRQUMzRCxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3RFLENBQUMsQ0FBQztnQkFDRSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNOLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSztvQkFDYixNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUs7aUJBQ3RCO2FBQ0Y7WUFDSCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbnRlcm5hdGlvbmFsaXplZFN0cmluZyB9IGZyb20gJ0BtdG5hL2NvcmUtaTE4bi10cyc7XG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCwgaXNQcmVzZW50LCBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7XG4gIENIRUNLQk9YX0lURU1fSUQsXG4gIENoZWNrYm94SXRlbSxcbiAgQ29uZGl0aW9uYWxJdGVtLFxuICBEYXRlUmFuZ2UsXG4gIERFQ0lNQUxfQU5TV0VSX0lURU1fSUQsXG4gIERlY2ltYWxBbnN3ZXJJdGVtLFxuICBGb3JtIGFzIFdlYkZvcm0sXG4gIEZvcm1JdGVtLFxuICBGb3JtSXRlbUdyb3VwLFxuICBGb3JtSXRlbUltcGwsXG4gIEkxOE5fUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lELFxuICBJMThOX1NIT1JUX0FOU1dFUl9JVEVNX0lELFxuICBJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW0sXG4gIEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtLFxuICBpc0Zvcm0sXG4gIGlzRm9ybUl0ZW1Hcm91cEltcGwsXG4gIGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbSxcbiAgaXNQcm9ncmVzc2l2ZUZvcm0sXG4gIGlzUmVwZWF0YWJsZUl0ZW0sXG4gIGlzU2VjdGlvbixcbiAgaXNUYWJsZUl0ZW0sXG4gIGlzV2hvbGVOdW1iZXJJdGVtLFxuICBpc1llYXJRdWFydGVyUmFuZ2VJdGVtLFxuICBPcHRpb24sXG4gIE9wdGlvbkdyb3VwSXRlbUltcGwsXG4gIFBBUkFHUkFQSF9BTlNXRVJfSVRFTV9JRCxcbiAgUGFyYWdyYXBoQW5zd2VySXRlbSxcbiAgUmVwZWF0YWJsZUl0ZW0sXG4gIFNIT1JUX0FOU1dFUl9JVEVNX0lELFxuICBTaG9ydEFuc3dlckl0ZW0sXG4gIFRhYmxlSXRlbSxcbiAgVGFibGVSb3dJdGVtLFxuICBWYWx1ZUl0ZW0sXG4gIFdIT0xFX05VTUJFUl9BTlNXRVJfSVRFTV9JRCxcbiAgV2hvbGVOdW1iZXJBbnN3ZXJJdGVtLFxuICBZZWFyUXVhcnRlcixcbn0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgTXRuYVdmTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyB2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5cbi8qKiBUeXBlcyBvZiBWYWxpZGF0b3JzIHRoYXQgY2FuIGJlIHNldCBvbiBhIEZvcm1Db250cm9sICovXG5leHBvcnQgdHlwZSBWYWxpZGF0b3JUeXBlID0gJ3JlcXVpcmVkJyB8ICdyZXF1aXJlZFRydWUnIHwgJ2VtYWlsJztcbmV4cG9ydCB0eXBlIFZhbGlkYXRvcldpdGhOdW1iZXJUeXBlID0gJ21pbkxlbmd0aCcgfCAnbWF4TGVuZ3RoJyB8ICdtaW4nIHwgJ21heCc7XG5cbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSBudW1iZXIgaXRlbXMgY29udGFpbiBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGRlY2ltYWxzICovXG5jb25zdCBudW1Pbmx5V2l0aG91dENvbW1hID0gL14tP1xcZCsoXFwuXFxkKik/JC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgbnVtYmVyIGl0ZW1zIGNvbnRhaW4gb25seSBuZWdhdGl2ZSwgZGlnaXRzLCBvciBkZWNpbWFscyBpbiBjb21tYSBmb3JtYXQgKi9cbmNvbnN0IG51bU9ubHlXaXRoQ29tbWEgPSAvXi0/XFxkezEsM30oLFxcZHszfSkqKFxcLlxcZCopPyQvO1xuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlICdwb3NpdGl2ZSBvbmx5JyBpdGVtIGNvbmFpbnMgbm9uLW5lZ2F0aXZlIGNoYXJhY3RlcnMgKi9cbmNvbnN0IHBvc09ubHkgPSAvXlteLV0qJC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgJ3dob2xlIG51bWJlcicgaXRlbSBjb250YWlucyBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGNvbW1hIGZvcm1hdCAqL1xuY29uc3Qgd2hvbGVOdW1iZXIgPSAvXi0/XFxkKygsXFxkezN9KSokLztcblxuLy8jcmVnaW9uIEZvcm1Db250cm9sIEdlbmVyYXRpb25cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgRm9ybUdyb3VwIHdpdGggRm9ybUNvbnRyb2xzICYgcG9zc2libGUgbmVzdGVkIEZvcm1Hcm91cHNcbiAqIEBwYXJhbSBmb3JtSXRlbSBXZWJGb3JtLCBTZWN0aW9uLCBHcm91cCwgb3IgUmVwZWF0YWJsZUl0ZW0gdXNlZCB0byBjcmVhdGUgYSBGb3JtR3JvdXBcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIGJvb2xlYW4gZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBGb3JtR3JvdXAge1xuICBjb25zdCBmb3JtOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGZvcm1JdGVtLml0ZW1zKSB7XG4gICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gICAgICBpdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgIG1hbmFnZXJTZXJ2aWNlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICApO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICBmb3JtW2l0ZW0uaW5zdGFuY2VJZF0gPSBjb250cm9sO1xuICAgIH1cbiAgfVxuICBjb25zdCByZXF1aXJlZCA9IGlzRm9ybShmb3JtSXRlbSkgPyB0cnVlIDogZm9ybUl0ZW0ucmVxdWlyZWQ7XG4gIGNvbnN0IGdyb3VwID0gcmVxdWlyZWQgPyBuZXcgRm9ybUdyb3VwKGZvcm0sIFZhbGlkYXRvcnMucmVxdWlyZWQpIDogbmV3IEZvcm1Hcm91cChmb3JtKTtcbiAgaWYgKCdkaXNhYmxlZCcgaW4gZm9ybUl0ZW0gJiYgZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB0YWlsb3JlZCBGb3JtQ29udHJvbCB3aXRoIHZhbGlkYXRvcnMgZm9yIGEgRm9ybUl0ZW1cbiAqIEBwYXJhbSBmb3JtSXRlbSBUaGUgRm9ybUl0ZW0gcmVxdWVzdGluZyBhIHRhaWxvcmVkIEZvcm1Db250cm9sXG4gKiBAaW50ZXJuYWwgQ3JlYXRpbmcgdGhlIGZvcm0gY29udHJvbCBhbmQgdGhlbiBjYWxsaW5nIHNldFZhbGlkYXRvcnMgZm9yY2UgYSB2YWxpZGF0aW9uIHBhc3MsXG4gKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTk2MjIjaXNzdWVjb21tZW50LTM0MTU0Nzg4NFxuICogQmV0dGVyIHRvIGdhdGhlciB0aGUgdmFsaWRhdG9ycyBhbmQgcHV0IHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBmb3JtIGNvbnRyb2wuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbTogRm9ybUl0ZW1JbXBsPHVua25vd24+LCBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UpOiBBYnN0cmFjdENvbnRyb2wge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPih2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yKGZvcm1JdGVtLmluc3RhbmNlSWQsIG1hbmFnZXJTZXJ2aWNlKSk7XG4gIGlmIChmb3JtSXRlbS5yZXF1aXJlZCkge1xuICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxuICBzd2l0Y2ggKGZvcm1JdGVtLml0ZW1JZCkge1xuICAgIGNhc2UgQ0hFQ0tCT1hfSVRFTV9JRDoge1xuICAgICAgY29uc3QgY2hlY2tib3hJdGVtID0gZm9ybUl0ZW0gYXMgQ2hlY2tib3hJdGVtO1xuICAgICAgY29uc3QgdmFsdWUgPSBjaGVja2JveEl0ZW0udmFsdWUgfHwgW107XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobnVtQ2hlY2tib3hlc1ZhbGlkYXRvcignTUlOJywgY2hlY2tib3hJdGVtLm1pblNlbGVjdGlvbnMpLCBudW1DaGVja2JveGVzVmFsaWRhdG9yKCdNQVgnLCBjaGVja2JveEl0ZW0ubWF4U2VsZWN0aW9ucykpO1xuICAgICAgY29uc3QgYXJyID0gbmV3IEZvcm1BcnJheShcbiAgICAgICAgY2hlY2tib3hJdGVtLm9wdGlvbnMubWFwKFxuICAgICAgICAgIChvKSA9PlxuICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKHtcbiAgICAgICAgICAgICAgdmFsdWU6IG8uc2VsZWN0ZWQgfHwgdmFsdWUuc29tZSgodikgPT4gdiA9PT0gby5vcHRpb24uaWQpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogY2hlY2tib3hJdGVtLmRpc2FibGVkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgY2FzZSBERUNJTUFMX0FOU1dFUl9JVEVNX0lEOlxuICAgIGNhc2UgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBpdGVtID0gZm9ybUl0ZW0gYXMgRGVjaW1hbEFuc3dlckl0ZW0gfCBXaG9sZU51bWJlckFuc3dlckl0ZW07XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobnVtZXJpY2FsVmFsdWVDaGVjaygpKTtcbiAgICAgIGlmIChpc1dob2xlTnVtYmVySXRlbShpdGVtKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2god2hvbGVOdW1iZXJQYXR0ZXJuKCkpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0ucG9zaXRpdmVPbmx5KSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChwb3NpdGl2ZU51bWJlclBhdHRlcm4oKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZW0ubWluVmFsdWUpKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1WYWx1ZUxpbWl0KCdtaW4nLCBpdGVtLm1pblZhbHVlKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZW0ubWF4VmFsdWUpKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1WYWx1ZUxpbWl0KCdtYXgnLCBpdGVtLm1heFZhbHVlKSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBQQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBTSE9SVF9BTlNXRVJfSVRFTV9JRDoge1xuICAgICAgY29uc3Qgc2hvcnRBbnN3ZXJJdGVtID0gZm9ybUl0ZW0gYXMgU2hvcnRBbnN3ZXJJdGVtIHwgUGFyYWdyYXBoQW5zd2VySXRlbTtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCguLi5nZXROdW1lcmljVmFsaWRhdG9yKCdtaW5MZW5ndGgnLCBzaG9ydEFuc3dlckl0ZW0ubWluQ2hhckNvdW50KSk7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goLi4uZ2V0TnVtZXJpY1ZhbGlkYXRvcignbWF4TGVuZ3RoJywgc2hvcnRBbnN3ZXJJdGVtLm1heENoYXJDb3VudCkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgSTE4Tl9QQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBJMThOX1NIT1JUX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBpMThuSXRlbSA9IGZvcm1JdGVtIGFzIEludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSB8IEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtO1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9LCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xuICAgICAgZm9yIChjb25zdCBsYW5ndWFnZSBvZiBpMThuSXRlbS5sYW5ndWFnZVRhZ3MpIHtcbiAgICAgICAgLy8gRklYTUUgaWYgdGhlcmUgaXMgbm90aGlnbiB0aGVyZSBpbiB0aGUgdmFsdWUgc2hvdWxkIEkgc2V0IGEgbmV3IGludGVybmF0aW9uYWxpemVkIHN0cmluZz9cbiAgICAgICAgZ3JvdXAuY29udHJvbHNbbGFuZ3VhZ2VdID0gbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpMThuSXRlbS5kaXNhYmxlZCkge1xuICAgICAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZvcm1JdGVtLnZhbHVlLCBkaXNhYmxlZDogISFmb3JtSXRlbS5kaXNhYmxlZCB9LCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb250cm9scyBmb3IgYW55IGZvcm0gaXRlbXMgbmVzdGVkIGluc2lkZSBhIHBhcmVudCBpdGVtcyBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybUl0ZW0gVGhlIEZvcm1JdGVtIHdpdGggYW4gJ29wdGlvbnMnIHByb3BlcnR5XG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBjb25kaXRpb25hbCBmdW5jdGlvbiBmcm9tIHBhcmVudCAnc2VyaWFsaXplRm9ybUl0ZW1zJyBmdW5jdGlvblxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgRm9ybUNvbnRyb2wgZ2VuZXJhdG9yIGZyb20gcGFyZW50ICdzZXJpYWxpemVGb3JtSXRlbXMnIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVOZXN0ZWRPcHRpb25Gb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEZvcm1Hcm91cCB7XG4gIGNvbnN0IGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3QgaWQgaW4gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCwgaWQpKSB7XG4gICAgICBjb25zdCBzdWJJdGVtID0gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcFtpZF0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+O1xuICAgICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2Uoc3ViSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbHNbc3ViSXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29udHJvbHNbZm9ybUl0ZW0uaW5zdGFuY2VJZF0gPSBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UpO1xuICBjb25zdCBncm91cCA9IGZvcm1JdGVtLnJlcXVpcmVkID8gbmV3IEZvcm1Hcm91cChjb250cm9scywgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzKTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBCdWlsZCBGb3JtQ29udHJvbHMgZm9yIGEgVGFibGVJdGVtXG4gKiBAcGFyYW0gaXRlbSBUYWJsZUl0ZW0gcmVxdWlyaW5nIEZvcm1Db250cm9sc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZnVuY3Rpb24gZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVUYWJsZUl0ZW0oXG4gIGl0ZW06IFRhYmxlSXRlbSxcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdGFibGVDb250cm9sOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3Qgcm93IG9mIGl0ZW0udGFibGVSb3dzKSB7XG4gICAgZm9yIChjb25zdCByb3dJdGVtIG9mIHJvdy5pdGVtcy5maWx0ZXIoKGkpID0+ICEhaSkpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKFxuICAgICAgICByb3dJdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgICAgbWFuYWdlclNlcnZpY2UsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICAgICk7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICB0YWJsZUNvbnRyb2xbcm93SXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGdyb3VwID0gaXRlbS5yZXF1aXJlZCA/IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sKTtcbiAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGZvciB0aGUgY2FsbGVyIHRvIHVzZS5cbiAqXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIHNlcmlhbGl6YXRpb25cbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIENvbmRpdGlvbmFsIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgU2VyaWFsaXplciBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gIGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8dW5rbm93bj4gfCBXZWJGb3JtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcbiAgaWYgKFxuICAgIGlzRm9ybShmb3JtSXRlbSkgfHxcbiAgICBpc1Byb2dyZXNzaXZlRm9ybShmb3JtSXRlbSkgfHxcbiAgICBpc1JlcGVhdGFibGVJdGVtKGZvcm1JdGVtKSB8fFxuICAgIGlzU2VjdGlvbihmb3JtSXRlbSkgfHxcbiAgICBpc0Zvcm1JdGVtR3JvdXBJbXBsKGZvcm1JdGVtKVxuICApIHtcbiAgICByZXR1cm4gc2VyaWFsaXplRm9ybUl0ZW1zKGZvcm1JdGVtLCBtYW5hZ2VyU2VydmljZSwgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCwgY3VzdG9tQ29udHJvbEdlbmVyYXRvcik7XG4gIH0gZWxzZSBpZiAoaXNUYWJsZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZVRhYmxlSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICB9IGVsc2UgaWYgKGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwoZm9ybUl0ZW0pICYmICEhY3VzdG9tQ29udHJvbEdlbmVyYXRvcikge1xuICAgIHJldHVybiBjdXN0b21Db250cm9sR2VuZXJhdG9yKGZvcm1JdGVtKTtcbiAgfSBlbHNlIGlmIChoYXNOZXN0ZWRGb3JtSXRlbXMoZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZU5lc3RlZE9wdGlvbkZvcm1JdGVtcyhmb3JtSXRlbSBhcyBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sIG1hbmFnZXJTZXJ2aWNlKTtcbiAgfSBlbHNlIGlmIChpc09mZnNldERhdGVSYW5nZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZVJhbmdlSXRlbShmb3JtSXRlbSk7XG4gIH0gZWxzZSBpZiAoaXNZZWFyUXVhcnRlclJhbmdlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplWWVhclF1YXJ0ZXJSYW5nZUl0ZW0oZm9ybUl0ZW0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGEgRm9ybUdyb3VwIGZvciBhIHJhbmdlIGl0ZW1cbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSBmb3IgYSBEYXRlUmFuZ2Ugb2YgRGF0ZSB8IFllYXJRdWFydGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVSYW5nZUl0ZW0oZm9ybUl0ZW06IEZvcm1JdGVtSW1wbDxEYXRlUmFuZ2U8RGF0ZSB8IFllYXJRdWFydGVyPj4pOiBGb3JtR3JvdXAge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPigpO1xuICBpZiAoZm9ybUl0ZW0ucmVxdWlyZWQpIHtcbiAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gIH1cbiAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKFxuICAgIHtcbiAgICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUgPyBmb3JtSXRlbS52YWx1ZS5zdGFydCA6IG51bGwpLFxuICAgICAgZW5kOiBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUgPyBmb3JtSXRlbS52YWx1ZS5lbmQgOiBudWxsKSxcbiAgICB9LFxuICAgIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKVxuICApO1xuICBpZiAoZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplWWVhclF1YXJ0ZXJSYW5nZUl0ZW0oZm9ybUl0ZW06IEZvcm1JdGVtSW1wbDxEYXRlUmFuZ2U8YW55Pj4pOiBGb3JtR3JvdXAge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPigpO1xuICBpZiAoZm9ybUl0ZW0ucmVxdWlyZWQpIHtcbiAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gIH1cblxuICBsZXQgc3RhcnRZZWFyID0gbmV3IEZvcm1Db250cm9sKG51bGwsIGZvcm1JdGVtLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGwpO1xuICBsZXQgc3RhcnRRdHIgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgZm9ybUl0ZW0ucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCk7XG4gIGlmIChmb3JtSXRlbS52YWx1ZSAmJiBmb3JtSXRlbS52YWx1ZS5zdGFydCkge1xuICAgIHN0YXJ0WWVhciA9IG5ldyBGb3JtQ29udHJvbChmb3JtSXRlbS52YWx1ZS5zdGFydC55ZWFyLCBmb3JtSXRlbS5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKTtcbiAgICBzdGFydFF0ciA9IG5ldyBGb3JtQ29udHJvbChmb3JtSXRlbS52YWx1ZS5zdGFydC5xdWFydGVyLCBmb3JtSXRlbS5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKTtcbiAgfVxuICBjb25zdCBzdGFydEdyb3VwID0gbmV3IEZvcm1Hcm91cCh7IHllYXI6IHN0YXJ0WWVhciwgcXVhcnRlcjogc3RhcnRRdHIgfSk7XG5cbiAgbGV0IGVuZFllYXIgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgZm9ybUl0ZW0ucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCk7XG4gIGxldCBlbmRRdHIgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgZm9ybUl0ZW0ucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCk7XG4gIGlmIChmb3JtSXRlbS52YWx1ZSAmJiBmb3JtSXRlbS52YWx1ZS5lbmQpIHtcbiAgICBlbmRZZWFyID0gbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlLmVuZC55ZWFyLCBmb3JtSXRlbS5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKTtcbiAgICBlbmRRdHIgPSBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUuZW5kLnF1YXJ0ZXIsIGZvcm1JdGVtLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGwpO1xuICB9XG4gIGNvbnN0IGVuZEdyb3VwID0gbmV3IEZvcm1Hcm91cCh7IHllYXI6IGVuZFllYXIsIHF1YXJ0ZXI6IGVuZFF0ciB9KTtcblxuICBjb25zdCBncm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBzdGFydEdyb3VwLFxuICAgIGVuZDogZW5kR3JvdXAsXG4gIH0pO1xuICBpZiAoZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBWYWxpZGF0b3Igd2l0aCBhIG51bWVyaWMgdmFsdWUgZm9yIGEgRm9ybUl0ZW07XG4gKiBSZXR1cm5zIGFzIGFuIGFycmF5IG9mIGxlbmd0aCAxIG9yIDBcbiAqIEBwYXJhbSBwYXJhbTAgYHR5cGVgIC0gdHlwZSBvZiB2YWxpZGF0b3IsIGUuZy4gJ21pbkxlbmd0aCc7XG4gKiBgdmFsdWVgIC0gcGFyYW1ldGVyIGZvciB0aGUgdmFsaWRhdG9yLCBlLmcuICdtaW5MZW5ndGgodmFsdWUpJ1xuICovXG5mdW5jdGlvbiBnZXROdW1lcmljVmFsaWRhdG9yKHR5cGU6IFZhbGlkYXRvcldpdGhOdW1iZXJUeXBlLCB2YWx1ZTogbnVtYmVyKTogVmFsaWRhdG9yRm5bXSB7XG4gIHJldHVybiAhaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpID8gW1ZhbGlkYXRvcnNbdHlwZV0odmFsdWUpXSA6IFtdO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIE10bmFGb3JtIHZhbHVlIGluc2VydGlvblxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgRm9ybWl0ZW1zIHdpdGggbmV3IHZhbHVlcyBpbnNlcnRlZC5cbiAqXG4gKiBAcGFyYW0gc2VjdGlvbiBUaGUgb2xkIEZvcm0gb3IgRm9ybSBTZWN0aW9uXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIEpTT04gdmFsdWVzXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQnVpbGRlciBmdW5jdGlvbiB0byBoYW5kbGUgY3VzdG9tIEZvcm1JdGVtc1xuICogQHJldHVybnMgbmV3IEZvcm1JdGVtIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRGb3JtSXRlbVZhbHVlcyhcbiAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSxcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IEFycmF5PEZvcm1JdGVtPiB7XG4gIHJldHVybiBzZWN0aW9uLml0ZW1zXG4gICAgLm1hcCgoaXRlbSkgPT5cbiAgICAgIGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIG5nRm9ybVZhbHVlW2l0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlcixcbiAgICAgICAgc2VjdGlvblxuICAgICAgKVxuICAgIClcbiAgICAuZmlsdGVyKGlzUHJlc2VudCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvcGllZCBUYWJsZUl0ZW0sIHdpdGggZWFjaCByb3cgRm9ybUl0ZW0gaGF2aW5nIG5ldyBpbnNlcnRlZCB2YWx1ZXMuXG4gKiBAcGFyYW0gaXRlbSBUYWJsZUl0ZW0gdG8gaW5zZXJ0IHZhbHVlc1xuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZSBvZiB0aGUgVGFibGVJdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSBjdXN0b20gRm9ybUl0ZW0gdmFsdWUgaW5zZXJ0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRUYWJsZUl0ZW1WYWx1ZXMoXG4gIGl0ZW06IFRhYmxlSXRlbSxcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IFRhYmxlSXRlbSB7XG4gIGNvbnN0IHRhYmxlUm93cyA9IGl0ZW0udGFibGVSb3dzLm1hcCgocm93OiBUYWJsZVJvd0l0ZW0pID0+ICh7XG4gICAgLi4ucm93LFxuICAgIGl0ZW1zOiByb3cuaXRlbXNcbiAgICAgIC5maWx0ZXIoaXNQcmVzZW50KVxuICAgICAgLm1hcCgoZm9ybUl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgICAgZm9ybUl0ZW0sXG4gICAgICAgICAgbmdGb3JtVmFsdWVbZm9ybUl0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoaXNQcmVzZW50KSxcbiAgfSkpO1xuICByZXR1cm4geyAuLi5pdGVtLCB0YWJsZVJvd3MsIGRpc2FibGVkOiBfaXNEaXNhYmxlZChpdGVtLCBkaXNhYmxlZFN0YXRlKSB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgRm9ybUl0ZW0gYWZ0ZXIgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIHVzZS5cbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgdmFsdWUgaW5zZXJ0aW9uXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIHZhbHVlXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBDb25kaXRpb25hbCBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIgVmFsdWUgaW5zZXJ0aW9uIGZ1bmN0aW9uIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGRpc2FibGVkU3RhdGUgTWFwIG9mIGl0ZW1zJyBkaXNhYmxlZCBzdGF0ZVxuICogQHBhcmFtIHBhcmVudCBQYXJlbnQgb2YgdGhlIEZvcm1JdGVtLCB1c2VkIHRvIHBhc3MgdG8gdGhlIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICBmb3JtSXRlbTogRm9ybUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiB1bmtub3duLFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGwsXG4gIHBhcmVudD86IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW1cbik6IEZvcm1JdGVtIHwgbnVsbCB7XG4gIGlmIChpc1NlY3Rpb24oZm9ybUl0ZW0pIHx8IGlzRm9ybUl0ZW1Hcm91cEltcGwoZm9ybUl0ZW0pIHx8IGlzUmVwZWF0YWJsZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgY29uc3QgaXRlbXMgPSBpbnNlcnRGb3JtSXRlbVZhbHVlcyhcbiAgICAgIGZvcm1JdGVtLFxuICAgICAgbmdGb3JtVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICk7XG4gICAgcmV0dXJuIHsgLi4uZm9ybUl0ZW0sIGl0ZW1zLCBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpIH0gYXMgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtO1xuICB9IGVsc2UgaWYgKGlzVGFibGVJdGVtKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBpbnNlcnRUYWJsZUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSxcbiAgICAgIG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICApO1xuICB9IGVsc2UgaWYgKGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwoZm9ybUl0ZW0pICYmICEhY3VzdG9tRm9ybUl0ZW1CdWlsZGVyKSB7XG4gICAgcmV0dXJuIGN1c3RvbUZvcm1JdGVtQnVpbGRlcihwYXJlbnQsIGZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZSwgZGlzYWJsZWRTdGF0ZSk7XG4gIH0gZWxzZSBpZiAoaGFzTmVzdGVkRm9ybUl0ZW1zKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBpbnNlcnROZXN0ZWRGb3JtSXRlbVZhbHVlcyhcbiAgICAgIGZvcm1JdGVtIGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICAgIG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICApO1xuICB9IGVsc2UgaWYgKGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbShmb3JtSXRlbSkgfHwgaXNZZWFyUXVhcnRlclJhbmdlSXRlbShmb3JtSXRlbSkpIHtcbiAgICBjb25zdCBzdGFydCA9IGlzVHlwZTx7IHN0YXJ0OiBZZWFyUXVhcnRlciB8IERhdGUgfT4obmdGb3JtVmFsdWUsICdzdGFydCcpID8gbmdGb3JtVmFsdWUuc3RhcnQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZW5kID0gaXNUeXBlPHsgZW5kOiBZZWFyUXVhcnRlciB8IERhdGUgfT4obmdGb3JtVmFsdWUsICdlbmQnKSA/IG5nRm9ybVZhbHVlLmVuZCA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyAuLi5mb3JtSXRlbSwgdmFsdWU6IHsgc3RhcnQsIGVuZCB9LCBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpIH0gYXMgRm9ybUl0ZW1JbXBsPFxuICAgICAgRGF0ZVJhbmdlPERhdGUgfCBZZWFyUXVhcnRlcj5cbiAgICA+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5mb3JtSXRlbSxcbiAgICAgIHZhbHVlOiBmaW5kSXRlbVZhbHVlKGZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZSksXG4gICAgICBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+LCBkaXNhYmxlZFN0YXRlKSxcbiAgICB9IGFzIEZvcm1JdGVtO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBuZ0Zvcm0gdmFsdWUgZm9yIGEgRm9ybUl0ZW0uXG4gKlxuICogQHBhcmFtIGZvcm1JdGVtIEZvcm1JdGVtIHJlcXVpcmluZyBhIHZhbHVlXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGZpbmRJdGVtVmFsdWUoZm9ybUl0ZW06IEZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBjb25zdCBpdGVtSWQgPSBmb3JtSXRlbS5pdGVtSWQuc3BsaXQoJy4nKS5wb3AoKTtcbiAgc3dpdGNoIChpdGVtSWQ/LnRvVXBwZXJDYXNlKCkpIHtcbiAgICAvLyBGSVhNRTogY2FuIHdlIHB1dCB0aGVzZSBJRHMgaW4gY29uc3RhbnRzIGFuZCByZWZlciB0byB0aGVtIGluc3RlYWQ/XG4gICAgY2FzZSAnREFURUlURU0nOlxuICAgICAgcmV0dXJuICEhbmdGb3JtVmFsdWUgJiYgdHlwZW9mIG5nRm9ybVZhbHVlICE9PSAnc3RyaW5nJyA/IChuZ0Zvcm1WYWx1ZSBhcyBNb21lbnQpLnRvSVNPU3RyaW5nKCkgOiAobmdGb3JtVmFsdWUgYXMgc3RyaW5nKTtcbiAgICBjYXNlICdDSEVDS0JPWElURU0nOlxuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChuZ0Zvcm1WYWx1ZSkgJiYgQXJyYXkuaXNBcnJheShuZ0Zvcm1WYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgYXJyID0gbmdGb3JtVmFsdWUgYXMgQXJyYXk8Ym9vbGVhbj47XG4gICAgICAgIHJldHVybiAoZm9ybUl0ZW0gYXMgQ2hlY2tib3hJdGVtKS5vcHRpb25zLmZpbHRlcigobywgaW5kZXgpID0+ICEhYXJyW2luZGV4XSkubWFwKChvKSA9PiBvLm9wdGlvbi5pZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgY2FzZSAnSU5URVJOQVRJT05BTElaRURQQVJBR1JBUEhBTlNXRVJJVEVNJzpcbiAgICBjYXNlICdJTlRFUk5BVElPTkFMSVpFRFNIT1JUQU5TV0VSSVRFTSc6IHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlcyA9XG4gICAgICAgIGl0ZW1JZD8udG9VcHBlckNhc2UoKSA9PT0gJ0lOVEVSTkFUSU9OQUxJWkVEUEFSQUdSQVBIQU5TV0VSSVRFTSdcbiAgICAgICAgICA/IChmb3JtSXRlbSBhcyBJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW0pLmxhbmd1YWdlVGFnc1xuICAgICAgICAgIDogKGZvcm1JdGVtIGFzIEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtKS5sYW5ndWFnZVRhZ3M7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gbGFuZ3VhZ2VzLnJlZHVjZSgodmFsdWU6IEludGVybmF0aW9uYWxpemVkU3RyaW5nW10sIGxhbmd1YWdlKSA9PiB7XG4gICAgICAgIGlmIChuZ0Zvcm1WYWx1ZSAmJiB0eXBlb2YgbmdGb3JtVmFsdWUgPT09ICdvYmplY3QnICYmIGxhbmd1YWdlIGluIG5nRm9ybVZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSAobmdGb3JtVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2xhbmd1YWdlXTtcbiAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHZhbHVlLnB1c2goeyB2YWx1ZTogaW5wdXQgYXMgc3RyaW5nLCBmYWNldElkOiBsYW5ndWFnZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSwgW10pO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5nRm9ybVZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE5lc3RlZEZvcm1JdGVtVmFsdWVzKFxuICBmb3JtSXRlbTogT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LFxuICBuZ0Zvcm1WYWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUZvcm1JdGVtQnVpbGRlcj86IChcbiAgICBzZWN0aW9uOiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtIHwgdW5kZWZpbmVkLFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIHJmVmFsdWU6IHVua25vd24sXG4gICAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9XG4gICkgPT4gVmFsdWVJdGVtPHVua25vd24+IHwgbnVsbFxuKTogRm9ybUl0ZW0ge1xuICBjb25zdCBvcHRpb25JdGVtTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IGlkIGluIGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXApIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXAsIGlkKSkge1xuICAgICAgY29uc3Qgc3ViSXRlbSA9IGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdO1xuICAgICAgb3B0aW9uSXRlbU1hcFtpZF0gPSBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICBzdWJJdGVtLFxuICAgICAgICBuZ0Zvcm1WYWx1ZVtzdWJJdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgLi4uZm9ybUl0ZW0sXG4gICAgb3B0aW9uSXRlbU1hcCxcbiAgICB2YWx1ZTogZmluZEl0ZW1WYWx1ZShmb3JtSXRlbSwgbmdGb3JtVmFsdWVbZm9ybUl0ZW0uaW5zdGFuY2VJZF0pLFxuICAgIGRpc2FibGVkOiBfaXNEaXNhYmxlZChmb3JtSXRlbSwgZGlzYWJsZWRTdGF0ZSksXG4gIH0gYXMgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+O1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgRm9ybUl0ZW0gaGFzIGFuIE9wdGlvbkl0ZW1NYXAgd2l0aCBhdCBsZWFzdCAxIGl0ZW0sIHdoaWNoIHJlcXVpcmUgdGhlaXIgb3duIEZvcm1Db250cm9sKHMpXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gdG8gY2hlY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc05lc3RlZEZvcm1JdGVtcyhmb3JtSXRlbTogdW5rbm93bik6IGZvcm1JdGVtIGlzIHsgb3B0aW9uSXRlbU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSB7XG4gIHJldHVybiAoXG4gICAgaXNUeXBlPHtcbiAgICAgIG9wdGlvbkl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIH0+KGZvcm1JdGVtLCAnb3B0aW9uSXRlbU1hcCcpICYmIE9iamVjdC5rZXlzKGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXApLmxlbmd0aCA+IDBcbiAgKTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBtaW4vbWF4IHNlbGVjdGlvbnMgbGltaXRzXG4gKiBAcGFyYW0gdHlwZUNoZWNrIFdoaWNoIGxpbWl0IHRvIHZhbGlkYXRlLiAnTUlOJyB8ICdNQVgnXG4gKiBAcGFyYW0gbGltaXQgdXBwZXIgb3IgbG93ZXIgbGltaXQgdG8gY2hlY2sgYWdhaW5zdFxuICovXG5mdW5jdGlvbiBudW1DaGVja2JveGVzVmFsaWRhdG9yKHR5cGVDaGVjazogJ01JTicgfCAnTUFYJywgbGltaXQgPSAxKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgIGxldCB0b3RhbFNlbGVjdGVkID0gMDtcbiAgICBpZiAoaXNGb3JtQXJyYXkoY29udHJvbCkpIHtcbiAgICAgIHRvdGFsU2VsZWN0ZWQgPSBjb250cm9sLmNvbnRyb2xzLm1hcCgoYykgPT4gYy52YWx1ZSkucmVkdWNlKCh0b3RhbCwgbmV4dCkgPT4gKG5leHQgPyB0b3RhbCArIG5leHQgOiB0b3RhbCksIDApO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZUNoZWNrKSB7XG4gICAgICBjYXNlICdNSU4nOlxuICAgICAgICByZXR1cm4gdG90YWxTZWxlY3RlZCA+PSBsaW1pdCA/IG51bGwgOiB7IG1pblNlbGVjdGVkOiAkbG9jYWxpemVgU2VsZWN0IGF0IGxlYXN0ICR7bGltaXR9YCB9O1xuICAgICAgY2FzZSAnTUFYJzpcbiAgICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPD0gbGltaXQgPyBudWxsIDogeyBtYXhTZWxlY3RlZDogJGxvY2FsaXplYFNlbGVjdCBubyBtb3JlIHRoYW4gJHtsaW1pdH1gIH07XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0Zvcm1BcnJheShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBjb250cm9sIGlzIEZvcm1BcnJheSB7XG4gIHJldHVybiBpc1R5cGU8Rm9ybUFycmF5Pihjb250cm9sLCAnY29udHJvbHMnKTtcbn1cblxuZnVuY3Rpb24gX2lzRGlzYWJsZWQoaXRlbTogQ29uZGl0aW9uYWxJdGVtLCBkaXNhYmxlZFN0YXRlOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbiB9KTogYm9vbGVhbiB7XG4gIGNvbnN0IGRpc2FibGVkID0gZGlzYWJsZWRTdGF0ZVtpdGVtLmluc3RhbmNlSWRdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZGlzYWJsZWQpID8gaXRlbS5kaXNhYmxlZCA6IGRpc2FibGVkO1xufVxuXG5mdW5jdGlvbiB3aG9sZU51bWJlclBhdHRlcm4oKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdob2xlTnVtYmVyLnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyB3aG9sZU51bWJlcjogdHJ1ZSB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBudW1lcmljYWxWYWx1ZUNoZWNrKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVtT25seVdpdGhvdXRDb21tYS50ZXN0KGNvbnRyb2wudmFsdWUpIHx8IG51bU9ubHlXaXRoQ29tbWEudGVzdChjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7IG5vbkRpZ2l0OiB0cnVlIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBvc2l0aXZlTnVtYmVyUGF0dGVybigpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHBvc09ubHkudGVzdChjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7IHBvc2l0aXZlOiB0cnVlIH07XG4gIH07XG59XG5cbi8qKlxuICogVGhpcyB3b3JrcyBhcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBhbmd1bGFyICdtaW4nLydtYXgnIFZhbGlkYXRvcnMuIFVzaW5nIHRoZSBidWlsdC1pbiB2YWxpZGF0b3JzXG4gKiBhcHBlYXJzIHRvIHRha2UgcHJlY2VkZW5jZSBvdmVyIGN1c3RvbSB2YWxpZGF0b3JzLCByZWdhcmRsZXNzIG9mIG9yZGVyIGluIHRoZSBhcnJheS4gVXNpbmcgdGhpcyBmdW5jdGlvblxuICogZW5zdXJlcyB2YWxpZGF0b3JzIHNldCBiZWZvcmUgdGhpcyBvbmUgbWFpbnRhaW4gcHJpb3JpdHkuIEZvciBpbnN0YW5jZSwgdGhlIGlucHV0IHZhbHVlIGZhaWxpbmcgbnVtZXJpY2FsIHZhbGlkYXRpb25cbiAqIGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gdGhlIHZhbHVlIGJlaW5nIHdpdGhpbiBtaW4tbWF4IHJhbmdlLlxuICovXG5mdW5jdGlvbiBudW1WYWx1ZUxpbWl0KHR5cGU6ICdtaW4nIHwgJ21heCcsIGxpbWl0OiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KGNvbnRyb2wudmFsdWUpO1xuICAgIHJldHVybiAhaXNOYU4odmFsdWUpICYmICh0eXBlID09PSAnbWluJyA/IHZhbHVlIDwgbGltaXQgOiB2YWx1ZSA+IGxpbWl0KVxuICAgICAgPyB7XG4gICAgICAgICAgW3R5cGVdOiB7XG4gICAgICAgICAgICBbdHlwZV06IGxpbWl0LFxuICAgICAgICAgICAgYWN0dWFsOiBjb250cm9sLnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eVN0cmluZyh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhdmFsdWUubGVuZ3RoO1xufVxuIl19
|
|
383
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy9zZXJpYWxpemVyLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBSWhCLHNCQUFzQixFQU10Qiw2QkFBNkIsRUFDN0IseUJBQXlCLEVBR3pCLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBR3RCLHdCQUF3QixFQUd4QixvQkFBb0IsRUFLcEIsMkJBQTJCLEdBRzVCLE1BQU0sbUJBQW1CLENBQUM7QUFJM0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU0zSCxnRkFBZ0Y7QUFDaEYsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxnR0FBZ0c7QUFDaEcsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RCw2RUFBNkU7QUFDN0UsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQzFCLDRGQUE0RjtBQUM1RixNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztBQUV2QyxnQ0FBZ0M7QUFFaEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtC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Q0FBQyxRQUFRLENBQUMsQ0FBQztLQUN0QztJQUVELElBQUksU0FBUyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RixJQUFJLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckYsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQzFDLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkcsUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMxRztJQUNELE1BQU0sVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUV6RSxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEYsSUFBSSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENB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IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEludGVybmF0aW9uYWxpemVkU3RyaW5nIH0gZnJvbSAnQG10bmEvY29yZS1pMThuLXRzJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkLCBpc1ByZXNlbnQsIGlzVHlwZSB9IGZyb20gJ0BtdG5hL2NvcmUtdHMnO1xuaW1wb3J0IHtcbiAgQ0hFQ0tCT1hfSVRFTV9JRCxcbiAgQ2hlY2tib3hJdGVtLFxuICBDb25kaXRpb25hbEl0ZW0sXG4gIERhdGVSYW5nZSxcbiAgREVDSU1BTF9BTlNXRVJfSVRFTV9JRCxcbiAgRGVjaW1hbEFuc3dlckl0ZW0sXG4gIEZvcm0gYXMgV2ViRm9ybSxcbiAgRm9ybUl0ZW0sXG4gIEZvcm1JdGVtR3JvdXAsXG4gIEZvcm1JdGVtSW1wbCxcbiAgSTE4Tl9QQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQsXG4gIEkxOE5fU0hPUlRfQU5TV0VSX0lURU1fSUQsXG4gIEludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSxcbiAgSW50ZXJuYXRpb25hbGl6ZWRTaG9ydEFuc3dlckl0ZW0sXG4gIGlzRm9ybSxcbiAgaXNGb3JtSXRlbUdyb3VwSW1wbCxcbiAgaXNPZmZzZXREYXRlUmFuZ2VJdGVtLFxuICBpc1Byb2dyZXNzaXZlRm9ybSxcbiAgaXNSZXBlYXRhYmxlSXRlbSxcbiAgaXNTZWN0aW9uLFxuICBpc1RhYmxlSXRlbSxcbiAgaXNXaG9sZU51bWJlckl0ZW0sXG4gIGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0sXG4gIE9wdGlvbixcbiAgT3B0aW9uR3JvdXBJdGVtSW1wbCxcbiAgUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lELFxuICBQYXJhZ3JhcGhBbnN3ZXJJdGVtLFxuICBSZXBlYXRhYmxlSXRlbSxcbiAgU0hPUlRfQU5TV0VSX0lURU1fSUQsXG4gIFNob3J0QW5zd2VySXRlbSxcbiAgVGFibGVJdGVtLFxuICBUYWJsZVJvd0l0ZW0sXG4gIFZhbHVlSXRlbSxcbiAgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lELFxuICBXaG9sZU51bWJlckFuc3dlckl0ZW0sXG4gIFllYXJRdWFydGVyLFxufSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBNdG5hV2ZNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm0tbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IHZhbGlkYXRpb25SZXN1bHRWYWxpZGF0b3IgfSBmcm9tICcuLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IG51bWVyaWNhbFZhbHVlQ2hlY2ssIG51bVZhbHVlTGltaXQsIHBvc2l0aXZlTnVtYmVyUGF0dGVybiwgd2hvbGVOdW1iZXJQYXR0ZXJuIH0gZnJvbSAnLi92YWxpZGF0b3ItZnVuY3Rpb25zLXV0aWwnO1xuXG4vKiogVHlwZXMgb2YgVmFsaWRhdG9ycyB0aGF0IGNhbiBiZSBzZXQgb24gYSBGb3JtQ29udHJvbCAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdG9yVHlwZSA9ICdyZXF1aXJlZCcgfCAncmVxdWlyZWRUcnVlJyB8ICdlbWFpbCc7XG5leHBvcnQgdHlwZSBWYWxpZGF0b3JXaXRoTnVtYmVyVHlwZSA9ICdtaW5MZW5ndGgnIHwgJ21heExlbmd0aCcgfCAnbWluJyB8ICdtYXgnO1xuXG4vKiogUmVnRXggdG8gdmFsaWRhdGUgbnVtYmVyIGl0ZW1zIGNvbnRhaW4gb25seSBuZWdhdGl2ZSwgZGlnaXRzLCBvciBkZWNpbWFscyAqL1xuY29uc3QgbnVtT25seVdpdGhvdXRDb21tYSA9IC9eLT9cXGQrKFxcLlxcZCopPyQvO1xuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlIG51bWJlciBpdGVtcyBjb250YWluIG9ubHkgbmVnYXRpdmUsIGRpZ2l0cywgb3IgZGVjaW1hbHMgaW4gY29tbWEgZm9ybWF0ICovXG5jb25zdCBudW1Pbmx5V2l0aENvbW1hID0gL14tP1xcZHsxLDN9KCxcXGR7M30pKihcXC5cXGQqKT8kLztcbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSAncG9zaXRpdmUgb25seScgaXRlbSBjb25haW5zIG5vbi1uZWdhdGl2ZSBjaGFyYWN0ZXJzICovXG5jb25zdCBwb3NPbmx5ID0gL15bXi1dKiQvO1xuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlICd3aG9sZSBudW1iZXInIGl0ZW0gY29udGFpbnMgb25seSBuZWdhdGl2ZSwgZGlnaXRzLCBvciBjb21tYSBmb3JtYXQgKi9cbmNvbnN0IHdob2xlTnVtYmVyID0gL14tP1xcZCsoLFxcZHszfSkqJC87XG5cbi8vI3JlZ2lvbiBGb3JtQ29udHJvbCBHZW5lcmF0aW9uXG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmV3IEZvcm1Hcm91cCB3aXRoIEZvcm1Db250cm9scyAmIHBvc3NpYmxlIG5lc3RlZCBGb3JtR3JvdXBzXG4gKiBAcGFyYW0gZm9ybUl0ZW0gV2ViRm9ybSwgU2VjdGlvbiwgR3JvdXAsIG9yIFJlcGVhdGFibGVJdGVtIHVzZWQgdG8gY3JlYXRlIGEgRm9ybUdyb3VwXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtc1xuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgRm9ybUNvbnRyb2wgZ2VuZXJhdG9yIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRm9ybUl0ZW1zKFxuICBmb3JtSXRlbTogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSxcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogRm9ybUdyb3VwIHtcbiAgY29uc3QgZm9ybTogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSA9IHt9O1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBmb3JtSXRlbS5pdGVtcykge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKFxuICAgICAgaXRlbSBhcyBGb3JtSXRlbUltcGw8dW5rbm93bj4sXG4gICAgICBtYW5hZ2VyU2VydmljZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Db250cm9sR2VuZXJhdG9yXG4gICAgKTtcbiAgICBpZiAoY29udHJvbCkge1xuICAgICAgZm9ybVtpdGVtLmluc3RhbmNlSWRdID0gY29udHJvbDtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVxdWlyZWQgPSBpc0Zvcm0oZm9ybUl0ZW0pID8gdHJ1ZSA6IGZvcm1JdGVtLnJlcXVpcmVkO1xuICBjb25zdCBncm91cCA9IHJlcXVpcmVkID8gbmV3IEZvcm1Hcm91cChmb3JtLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IG5ldyBGb3JtR3JvdXAoZm9ybSk7XG4gIGlmICgnZGlzYWJsZWQnIGluIGZvcm1JdGVtICYmIGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgdGFpbG9yZWQgRm9ybUNvbnRyb2wgd2l0aCB2YWxpZGF0b3JzIGZvciBhIEZvcm1JdGVtXG4gKiBAcGFyYW0gZm9ybUl0ZW0gVGhlIEZvcm1JdGVtIHJlcXVlc3RpbmcgYSB0YWlsb3JlZCBGb3JtQ29udHJvbFxuICogQGludGVybmFsIENyZWF0aW5nIHRoZSBmb3JtIGNvbnRyb2wgYW5kIHRoZW4gY2FsbGluZyBzZXRWYWxpZGF0b3JzIGZvcmNlIGEgdmFsaWRhdGlvbiBwYXNzLFxuICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE5NjIyI2lzc3VlY29tbWVudC0zNDE1NDc4ODRcbiAqIEJldHRlciB0byBnYXRoZXIgdGhlIHZhbGlkYXRvcnMgYW5kIHB1dCB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgZm9ybSBjb250cm9sLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRm9ybUl0ZW0oZm9ybUl0ZW06IEZvcm1JdGVtSW1wbDx1bmtub3duPiwgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlKTogQWJzdHJhY3RDb250cm9sIHtcbiAgY29uc3QgdmFsaWRhdG9ycyA9IG5ldyBBcnJheTxWYWxpZGF0b3JGbj4odmFsaWRhdGlvblJlc3VsdFZhbGlkYXRvcihmb3JtSXRlbS5pbnN0YW5jZUlkLCBtYW5hZ2VyU2VydmljZSkpO1xuICBpZiAoZm9ybUl0ZW0ucmVxdWlyZWQpIHtcbiAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gIH1cbiAgc3dpdGNoIChmb3JtSXRlbS5pdGVtSWQpIHtcbiAgICBjYXNlIENIRUNLQk9YX0lURU1fSUQ6IHtcbiAgICAgIGNvbnN0IGNoZWNrYm94SXRlbSA9IGZvcm1JdGVtIGFzIENoZWNrYm94SXRlbTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2hlY2tib3hJdGVtLnZhbHVlIHx8IFtdO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKG51bUNoZWNrYm94ZXNWYWxpZGF0b3IoJ01JTicsIGNoZWNrYm94SXRlbS5taW5TZWxlY3Rpb25zKSwgbnVtQ2hlY2tib3hlc1ZhbGlkYXRvcignTUFYJywgY2hlY2tib3hJdGVtLm1heFNlbGVjdGlvbnMpKTtcbiAgICAgIGNvbnN0IGFyciA9IG5ldyBGb3JtQXJyYXkoXG4gICAgICAgIGNoZWNrYm94SXRlbS5vcHRpb25zLm1hcChcbiAgICAgICAgICAobykgPT5cbiAgICAgICAgICAgIG5ldyBGb3JtQ29udHJvbCh7XG4gICAgICAgICAgICAgIHZhbHVlOiBvLnNlbGVjdGVkIHx8IHZhbHVlLnNvbWUoKHYpID0+IHYgPT09IG8ub3B0aW9uLmlkKSxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNoZWNrYm94SXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICAgIGNhc2UgREVDSU1BTF9BTlNXRVJfSVRFTV9JRDpcbiAgICBjYXNlIFdIT0xFX05VTUJFUl9BTlNXRVJfSVRFTV9JRDoge1xuICAgICAgY29uc3QgaXRlbSA9IGZvcm1JdGVtIGFzIERlY2ltYWxBbnN3ZXJJdGVtIHwgV2hvbGVOdW1iZXJBbnN3ZXJJdGVtO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKG51bWVyaWNhbFZhbHVlQ2hlY2soKSk7XG4gICAgICBpZiAoaXNXaG9sZU51bWJlckl0ZW0oaXRlbSkpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHdob2xlTnVtYmVyUGF0dGVybigpKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLnBvc2l0aXZlT25seSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2gocG9zaXRpdmVOdW1iZXJQYXR0ZXJuKCkpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVtLm1pblZhbHVlKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2gobnVtVmFsdWVMaW1pdCgnbWluJywgaXRlbS5taW5WYWx1ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVtLm1heFZhbHVlKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2gobnVtVmFsdWVMaW1pdCgnbWF4JywgaXRlbS5tYXhWYWx1ZSkpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lEOlxuICAgIGNhc2UgU0hPUlRfQU5TV0VSX0lURU1fSUQ6IHtcbiAgICAgIGNvbnN0IHNob3J0QW5zd2VySXRlbSA9IGZvcm1JdGVtIGFzIFNob3J0QW5zd2VySXRlbSB8IFBhcmFncmFwaEFuc3dlckl0ZW07XG4gICAgICB2YWxpZGF0b3JzLnB1c2goLi4uZ2V0TnVtZXJpY1ZhbGlkYXRvcignbWluTGVuZ3RoJywgc2hvcnRBbnN3ZXJJdGVtLm1pbkNoYXJDb3VudCkpO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKC4uLmdldE51bWVyaWNWYWxpZGF0b3IoJ21heExlbmd0aCcsIHNob3J0QW5zd2VySXRlbS5tYXhDaGFyQ291bnQpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEkxOE5fUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lEOlxuICAgIGNhc2UgSTE4Tl9TSE9SVF9BTlNXRVJfSVRFTV9JRDoge1xuICAgICAgY29uc3QgaTE4bkl0ZW0gPSBmb3JtSXRlbSBhcyBJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW0gfCBJbnRlcm5hdGlvbmFsaXplZFNob3J0QW5zd2VySXRlbTtcbiAgICAgIGNvbnN0IGdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSwgVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpKTtcbiAgICAgIGZvciAoY29uc3QgbGFuZ3VhZ2Ugb2YgaTE4bkl0ZW0ubGFuZ3VhZ2VUYWdzKSB7XG4gICAgICAgIC8vIEZJWE1FIGlmIHRoZXJlIGlzIG5vdGhpZ24gdGhlcmUgaW4gdGhlIHZhbHVlIHNob3VsZCBJIHNldCBhIG5ldyBpbnRlcm5hdGlvbmFsaXplZCBzdHJpbmc/XG4gICAgICAgIGdyb3VwLmNvbnRyb2xzW2xhbmd1YWdlXSA9IG5ldyBGb3JtQ29udHJvbChmb3JtSXRlbS52YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoaTE4bkl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBmb3JtSXRlbS52YWx1ZSwgZGlzYWJsZWQ6ICEhZm9ybUl0ZW0uZGlzYWJsZWQgfSwgVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgY29udHJvbHMgZm9yIGFueSBmb3JtIGl0ZW1zIG5lc3RlZCBpbnNpZGUgYSBwYXJlbnQgaXRlbXMgb3B0aW9uc1xuICogQHBhcmFtIGZvcm1JdGVtIFRoZSBGb3JtSXRlbSB3aXRoIGFuICdvcHRpb25zJyBwcm9wZXJ0eVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgY29uZGl0aW9uYWwgZnVuY3Rpb24gZnJvbSBwYXJlbnQgJ3NlcmlhbGl6ZUZvcm1JdGVtcycgZnVuY3Rpb25cbiAqIEBwYXJhbSBjdXN0b21Db250cm9sR2VuZXJhdG9yIEZvcm1Db250cm9sIGdlbmVyYXRvciBmcm9tIHBhcmVudCAnc2VyaWFsaXplRm9ybUl0ZW1zJyBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTmVzdGVkT3B0aW9uRm9ybUl0ZW1zKFxuICBmb3JtSXRlbTogT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBGb3JtR3JvdXAge1xuICBjb25zdCBjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSA9IHt9O1xuICBmb3IgKGNvbnN0IGlkIGluIGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXApIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXAsIGlkKSkge1xuICAgICAgY29uc3Qgc3ViSXRlbSA9IGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPjtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKHN1Ykl0ZW0sIG1hbmFnZXJTZXJ2aWNlLCBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLCBjdXN0b21Db250cm9sR2VuZXJhdG9yKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnRyb2xzW3N1Ykl0ZW0uaW5zdGFuY2VJZF0gPSBjb250cm9sO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnRyb2xzW2Zvcm1JdGVtLmluc3RhbmNlSWRdID0gc2VyaWFsaXplRm9ybUl0ZW0oZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlKTtcbiAgY29uc3QgZ3JvdXAgPSBmb3JtSXRlbS5yZXF1aXJlZCA/IG5ldyBGb3JtR3JvdXAoY29udHJvbHMsIFZhbGlkYXRvcnMucmVxdWlyZWQpIDogbmV3IEZvcm1Hcm91cChjb250cm9scyk7XG4gIGlmIChmb3JtSXRlbS5kaXNhYmxlZCkge1xuICAgIGdyb3VwLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogQnVpbGQgRm9ybUNvbnRyb2xzIGZvciBhIFRhYmxlSXRlbVxuICogQHBhcmFtIGl0ZW0gVGFibGVJdGVtIHJlcXVpcmluZyBGb3JtQ29udHJvbHNcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIENvbmRpdGlvbmFsIGZ1bmN0aW9uIGZvciBjdXN0b20gYW55IEZvcm1JdGVtc1xuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgRm9ybUNvbnRyb2wgZ2VuZXJhdG9yIGZvciBjdXN0b20gYW55IEZvcm1JdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplVGFibGVJdGVtKFxuICBpdGVtOiBUYWJsZUl0ZW0sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEZvcm1Hcm91cCB7XG4gIGNvbnN0IHRhYmxlQ29udHJvbDogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSA9IHt9O1xuICBmb3IgKGNvbnN0IHJvdyBvZiBpdGVtLnRhYmxlUm93cykge1xuICAgIGZvciAoY29uc3Qgcm93SXRlbSBvZiByb3cuaXRlbXMuZmlsdGVyKChpKSA9PiAhIWkpKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShcbiAgICAgICAgcm93SXRlbSBhcyBGb3JtSXRlbUltcGw8dW5rbm93bj4sXG4gICAgICAgIG1hbmFnZXJTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICBjdXN0b21Db250cm9sR2VuZXJhdG9yXG4gICAgICApO1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgdGFibGVDb250cm9sW3Jvd0l0ZW0uaW5zdGFuY2VJZF0gPSBjb250cm9sO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBncm91cCA9IGl0ZW0ucmVxdWlyZWQgPyBuZXcgRm9ybUdyb3VwKHRhYmxlQ29udHJvbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUdyb3VwKHRhYmxlQ29udHJvbCk7XG4gIGlmIChpdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiBmb3IgdGhlIGNhbGxlciB0byB1c2UuXG4gKlxuICogQHBhcmFtIGZvcm1JdGVtIEZvcm1JdGVtIHJlcXVpcmluZyBzZXJpYWxpemF0aW9uXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBDb25kaXRpb25hbCBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBjdXN0b21Db250cm9sR2VuZXJhdG9yIFNlcmlhbGl6ZXIgZm9yIGEgY3VzdG9tIEZvcm1JdGVtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKFxuICBmb3JtSXRlbTogRm9ybUl0ZW1JbXBsPHVua25vd24+IHwgV2ViRm9ybSxcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gIGlmIChcbiAgICBpc0Zvcm0oZm9ybUl0ZW0pIHx8XG4gICAgaXNQcm9ncmVzc2l2ZUZvcm0oZm9ybUl0ZW0pIHx8XG4gICAgaXNSZXBlYXRhYmxlSXRlbShmb3JtSXRlbSkgfHxcbiAgICBpc1NlY3Rpb24oZm9ybUl0ZW0pIHx8XG4gICAgaXNGb3JtSXRlbUdyb3VwSW1wbChmb3JtSXRlbSlcbiAgKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZUZvcm1JdGVtcyhmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICB9IGVsc2UgaWYgKGlzVGFibGVJdGVtKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBzZXJpYWxpemVUYWJsZUl0ZW0oZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlLCBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLCBjdXN0b21Db250cm9sR2VuZXJhdG9yKTtcbiAgfSBlbHNlIGlmIChjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsKGZvcm1JdGVtKSAmJiAhIWN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpIHtcbiAgICByZXR1cm4gY3VzdG9tQ29udHJvbEdlbmVyYXRvcihmb3JtSXRlbSk7XG4gIH0gZWxzZSBpZiAoaGFzTmVzdGVkRm9ybUl0ZW1zKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBzZXJpYWxpemVOZXN0ZWRPcHRpb25Gb3JtSXRlbXMoZm9ybUl0ZW0gYXMgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LCBtYW5hZ2VyU2VydmljZSk7XG4gIH0gZWxzZSBpZiAoaXNPZmZzZXREYXRlUmFuZ2VJdGVtKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBzZXJpYWxpemVSYW5nZUl0ZW0oZm9ybUl0ZW0pO1xuICB9IGVsc2UgaWYgKGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZVllYXJRdWFydGVyUmFuZ2VJdGVtKGZvcm1JdGVtKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2VyaWFsaXplRm9ybUl0ZW0oZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIEZvcm1Hcm91cCBmb3IgYSByYW5nZSBpdGVtXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gZm9yIGEgRGF0ZVJhbmdlIG9mIERhdGUgfCBZZWFyUXVhcnRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplUmFuZ2VJdGVtKGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8RGF0ZVJhbmdlPERhdGUgfCBZZWFyUXVhcnRlcj4+KTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdmFsaWRhdG9ycyA9IG5ldyBBcnJheTxWYWxpZGF0b3JGbj4oKTtcbiAgaWYgKGZvcm1JdGVtLnJlcXVpcmVkKSB7XG4gICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICB9XG4gIGNvbnN0IGdyb3VwID0gbmV3IEZvcm1Hcm91cChcbiAgICB7XG4gICAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlID8gZm9ybUl0ZW0udmFsdWUuc3RhcnQgOiBudWxsKSxcbiAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlID8gZm9ybUl0ZW0udmFsdWUuZW5kIDogbnVsbCksXG4gICAgfSxcbiAgICBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycylcbiAgKTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVllYXJRdWFydGVyUmFuZ2VJdGVtKGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8RGF0ZVJhbmdlPGFueT4+KTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdmFsaWRhdG9ycyA9IG5ldyBBcnJheTxWYWxpZGF0b3JGbj4oKTtcbiAgaWYgKGZvcm1JdGVtLnJlcXVpcmVkKSB7XG4gICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICB9XG5cbiAgbGV0IHN0YXJ0WWVhciA9IG5ldyBGb3JtQ29udHJvbChudWxsLCBmb3JtSXRlbS5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKTtcbiAgbGV0IHN0YXJ0UXRyID0gbmV3IEZvcm1Db250cm9sKG51bGwsIGZvcm1JdGVtLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGwpO1xuICBpZiAoZm9ybUl0ZW0udmFsdWUgJiYgZm9ybUl0ZW0udmFsdWUuc3RhcnQpIHtcbiAgICBzdGFydFllYXIgPSBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUuc3RhcnQueWVhciwgZm9ybUl0ZW0ucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCk7XG4gICAgc3RhcnRRdHIgPSBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUuc3RhcnQucXVhcnRlciwgZm9ybUl0ZW0ucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCk7XG4gIH1cbiAgY29uc3Qgc3RhcnRHcm91cCA9IG5ldyBGb3JtR3JvdXAoeyB5ZWFyOiBzdGFydFllYXIsIHF1YXJ0ZXI6IHN0YXJ0UXRyIH0pO1xuXG4gIGxldCBlbmRZZWFyID0gbmV3IEZvcm1Db250cm9sKG51bGwsIGZvcm1JdGVtLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGwpO1xuICBsZXQgZW5kUXRyID0gbmV3IEZvcm1Db250cm9sKG51bGwsIGZvcm1JdGVtLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGwpO1xuICBpZiAoZm9ybUl0ZW0udmFsdWUgJiYgZm9ybUl0ZW0udmFsdWUuZW5kKSB7XG4gICAgZW5kWWVhciA9IG5ldyBGb3JtQ29udHJvbChmb3JtSXRlbS52YWx1ZS5lbmQueWVhciwgZm9ybUl0ZW0ucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCk7XG4gICAgZW5kUXRyID0gbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlLmVuZC5xdWFydGVyLCBmb3JtSXRlbS5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKTtcbiAgfVxuICBjb25zdCBlbmRHcm91cCA9IG5ldyBGb3JtR3JvdXAoeyB5ZWFyOiBlbmRZZWFyLCBxdWFydGVyOiBlbmRRdHIgfSk7XG5cbiAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBzdGFydDogc3RhcnRHcm91cCxcbiAgICBlbmQ6IGVuZEdyb3VwLFxuICB9KTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgVmFsaWRhdG9yIHdpdGggYSBudW1lcmljIHZhbHVlIGZvciBhIEZvcm1JdGVtO1xuICogUmV0dXJucyBhcyBhbiBhcnJheSBvZiBsZW5ndGggMSBvciAwXG4gKiBAcGFyYW0gcGFyYW0wIGB0eXBlYCAtIHR5cGUgb2YgdmFsaWRhdG9yLCBlLmcuICdtaW5MZW5ndGgnO1xuICogYHZhbHVlYCAtIHBhcmFtZXRlciBmb3IgdGhlIHZhbGlkYXRvciwgZS5nLiAnbWluTGVuZ3RoKHZhbHVlKSdcbiAqL1xuZnVuY3Rpb24gZ2V0TnVtZXJpY1ZhbGlkYXRvcih0eXBlOiBWYWxpZGF0b3JXaXRoTnVtYmVyVHlwZSwgdmFsdWU6IG51bWJlcik6IFZhbGlkYXRvckZuW10ge1xuICByZXR1cm4gIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IFtWYWxpZGF0b3JzW3R5cGVdKHZhbHVlKV0gOiBbXTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiBNdG5hRm9ybSB2YWx1ZSBpbnNlcnRpb25cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIEZvcm1pdGVtcyB3aXRoIG5ldyB2YWx1ZXMgaW5zZXJ0ZWQuXG4gKlxuICogQHBhcmFtIHNlY3Rpb24gVGhlIG9sZCBGb3JtIG9yIEZvcm0gU2VjdGlvblxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSBKU09OIHZhbHVlc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbXNcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIgZnVuY3Rpb24gdG8gaGFuZGxlIGN1c3RvbSBGb3JtSXRlbXNcbiAqIEByZXR1cm5zIG5ldyBGb3JtSXRlbSBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBBcnJheTxGb3JtSXRlbT4ge1xuICByZXR1cm4gc2VjdGlvbi5pdGVtc1xuICAgIC5tYXAoKGl0ZW0pID0+XG4gICAgICBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICBpdGVtLFxuICAgICAgICBuZ0Zvcm1WYWx1ZVtpdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIsXG4gICAgICAgIHNlY3Rpb25cbiAgICAgIClcbiAgICApXG4gICAgLmZpbHRlcihpc1ByZXNlbnQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb3BpZWQgVGFibGVJdGVtLCB3aXRoIGVhY2ggcm93IEZvcm1JdGVtIGhhdmluZyBuZXcgaW5zZXJ0ZWQgdmFsdWVzLlxuICogQHBhcmFtIGl0ZW0gVGFibGVJdGVtIHRvIGluc2VydCB2YWx1ZXNcbiAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSBuZ0Zvcm0gdmFsdWUgb2YgdGhlIFRhYmxlSXRlbVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQnVpbGRlciBmdW5jdGlvbiB0byBoYW5kbGUgY3VzdG9tIEZvcm1JdGVtIHZhbHVlIGluc2VydGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0VGFibGVJdGVtVmFsdWVzKFxuICBpdGVtOiBUYWJsZUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBUYWJsZUl0ZW0ge1xuICBjb25zdCB0YWJsZVJvd3MgPSBpdGVtLnRhYmxlUm93cy5tYXAoKHJvdzogVGFibGVSb3dJdGVtKSA9PiAoe1xuICAgIC4uLnJvdyxcbiAgICBpdGVtczogcm93Lml0ZW1zXG4gICAgICAuZmlsdGVyKGlzUHJlc2VudClcbiAgICAgIC5tYXAoKGZvcm1JdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICAgIGZvcm1JdGVtLFxuICAgICAgICAgIG5nRm9ybVZhbHVlW2Zvcm1JdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGlzUHJlc2VudCksXG4gIH0pKTtcbiAgcmV0dXJuIHsgLi4uaXRlbSwgdGFibGVSb3dzLCBkaXNhYmxlZDogX2lzRGlzYWJsZWQoaXRlbSwgZGlzYWJsZWRTdGF0ZSkgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IEZvcm1JdGVtIGFmdGVyIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIHZhbHVlIGluc2VydGlvblxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZm9yIGEgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyIFZhbHVlIGluc2VydGlvbiBmdW5jdGlvbiBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBkaXNhYmxlZFN0YXRlIE1hcCBvZiBpdGVtcycgZGlzYWJsZWQgc3RhdGVcbiAqIEBwYXJhbSBwYXJlbnQgUGFyZW50IG9mIHRoZSBGb3JtSXRlbSwgdXNlZCB0byBwYXNzIHRvIHRoZSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lSW5zZXJ0RnVuY3Rpb25Ub1VzZShcbiAgZm9ybUl0ZW06IEZvcm1JdGVtLFxuICBuZ0Zvcm1WYWx1ZTogdW5rbm93bixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsLFxuICBwYXJlbnQ/OiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtXG4pOiBGb3JtSXRlbSB8IG51bGwge1xuICBpZiAoaXNTZWN0aW9uKGZvcm1JdGVtKSB8fCBpc0Zvcm1JdGVtR3JvdXBJbXBsKGZvcm1JdGVtKSB8fCBpc1JlcGVhdGFibGVJdGVtKGZvcm1JdGVtKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSxcbiAgICAgIG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICApO1xuICAgIHJldHVybiB7IC4uLmZvcm1JdGVtLCBpdGVtcywgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSB9IGFzIEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbTtcbiAgfSBlbHNlIGlmIChpc1RhYmxlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gaW5zZXJ0VGFibGVJdGVtVmFsdWVzKFxuICAgICAgZm9ybUl0ZW0sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgfSBlbHNlIGlmIChjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsKGZvcm1JdGVtKSAmJiAhIWN1c3RvbUZvcm1JdGVtQnVpbGRlcikge1xuICAgIHJldHVybiBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIocGFyZW50LCBmb3JtSXRlbSwgbmdGb3JtVmFsdWUsIGRpc2FibGVkU3RhdGUpO1xuICB9IGVsc2UgaWYgKGhhc05lc3RlZEZvcm1JdGVtcyhmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gaW5zZXJ0TmVzdGVkRm9ybUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSBhcyBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc09mZnNldERhdGVSYW5nZUl0ZW0oZm9ybUl0ZW0pIHx8IGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpc1R5cGU8eyBzdGFydDogWWVhclF1YXJ0ZXIgfCBEYXRlIH0+KG5nRm9ybVZhbHVlLCAnc3RhcnQnKSA/IG5nRm9ybVZhbHVlLnN0YXJ0IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVuZCA9IGlzVHlwZTx7IGVuZDogWWVhclF1YXJ0ZXIgfCBEYXRlIH0+KG5nRm9ybVZhbHVlLCAnZW5kJykgPyBuZ0Zvcm1WYWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgLi4uZm9ybUl0ZW0sIHZhbHVlOiB7IHN0YXJ0LCBlbmQgfSwgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSB9IGFzIEZvcm1JdGVtSW1wbDxcbiAgICAgIERhdGVSYW5nZTxEYXRlIHwgWWVhclF1YXJ0ZXI+XG4gICAgPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZm9ybUl0ZW0sXG4gICAgICB2YWx1ZTogZmluZEl0ZW1WYWx1ZShmb3JtSXRlbSwgbmdGb3JtVmFsdWUpLFxuICAgICAgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPiwgZGlzYWJsZWRTdGF0ZSksXG4gICAgfSBhcyBGb3JtSXRlbTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgbmdGb3JtIHZhbHVlIGZvciBhIEZvcm1JdGVtLlxuICpcbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgYSB2YWx1ZVxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZVxuICovXG5mdW5jdGlvbiBmaW5kSXRlbVZhbHVlKGZvcm1JdGVtOiBGb3JtSXRlbSwgbmdGb3JtVmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgY29uc3QgaXRlbUlkID0gZm9ybUl0ZW0uaXRlbUlkLnNwbGl0KCcuJykucG9wKCk7XG4gIHN3aXRjaCAoaXRlbUlkPy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgLy8gRklYTUU6IGNhbiB3ZSBwdXQgdGhlc2UgSURzIGluIGNvbnN0YW50cyBhbmQgcmVmZXIgdG8gdGhlbSBpbnN0ZWFkP1xuICAgIGNhc2UgJ0RBVEVJVEVNJzpcbiAgICAgIHJldHVybiAhIW5nRm9ybVZhbHVlICYmIHR5cGVvZiBuZ0Zvcm1WYWx1ZSAhPT0gJ3N0cmluZycgPyAobmdGb3JtVmFsdWUgYXMgTW9tZW50KS50b0lTT1N0cmluZygpIDogKG5nRm9ybVZhbHVlIGFzIHN0cmluZyk7XG4gICAgY2FzZSAnQ0hFQ0tCT1hJVEVNJzpcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQobmdGb3JtVmFsdWUpICYmIEFycmF5LmlzQXJyYXkobmdGb3JtVmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IG5nRm9ybVZhbHVlIGFzIEFycmF5PGJvb2xlYW4+O1xuICAgICAgICByZXR1cm4gKGZvcm1JdGVtIGFzIENoZWNrYm94SXRlbSkub3B0aW9ucy5maWx0ZXIoKG8sIGluZGV4KSA9PiAhIWFycltpbmRleF0pLm1hcCgobykgPT4gby5vcHRpb24uaWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIGNhc2UgJ0lOVEVSTkFUSU9OQUxJWkVEUEFSQUdSQVBIQU5TV0VSSVRFTSc6XG4gICAgY2FzZSAnSU5URVJOQVRJT05BTElaRURTSE9SVEFOU1dFUklURU0nOiB7XG4gICAgICBjb25zdCBsYW5ndWFnZXMgPVxuICAgICAgICBpdGVtSWQ/LnRvVXBwZXJDYXNlKCkgPT09ICdJTlRFUk5BVElPTkFMSVpFRFBBUkFHUkFQSEFOU1dFUklURU0nXG4gICAgICAgICAgPyAoZm9ybUl0ZW0gYXMgSW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXJJdGVtKS5sYW5ndWFnZVRhZ3NcbiAgICAgICAgICA6IChmb3JtSXRlbSBhcyBJbnRlcm5hdGlvbmFsaXplZFNob3J0QW5zd2VySXRlbSkubGFuZ3VhZ2VUYWdzO1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IGxhbmd1YWdlcy5yZWR1Y2UoKHZhbHVlOiBJbnRlcm5hdGlvbmFsaXplZFN0cmluZ1tdLCBsYW5ndWFnZSkgPT4ge1xuICAgICAgICBpZiAobmdGb3JtVmFsdWUgJiYgdHlwZW9mIG5nRm9ybVZhbHVlID09PSAnb2JqZWN0JyAmJiBsYW5ndWFnZSBpbiBuZ0Zvcm1WYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gKG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtsYW5ndWFnZV07XG4gICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICB2YWx1ZS5wdXNoKHsgdmFsdWU6IGlucHV0IGFzIHN0cmluZywgZmFjZXRJZDogbGFuZ3VhZ2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZ0Zvcm1WYWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROZXN0ZWRGb3JtSXRlbVZhbHVlcyhcbiAgZm9ybUl0ZW06IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IEZvcm1JdGVtIHtcbiAgY29uc3Qgb3B0aW9uSXRlbU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBpbiBmb3JtSXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmb3JtSXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBmb3JtSXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgIG9wdGlvbkl0ZW1NYXBbaWRdID0gZGV0ZXJtaW5lSW5zZXJ0RnVuY3Rpb25Ub1VzZShcbiAgICAgICAgc3ViSXRlbSxcbiAgICAgICAgbmdGb3JtVmFsdWVbc3ViSXRlbS5pbnN0YW5jZUlkXSxcbiAgICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmZvcm1JdGVtLFxuICAgIG9wdGlvbkl0ZW1NYXAsXG4gICAgdmFsdWU6IGZpbmRJdGVtVmFsdWUoZm9ybUl0ZW0sIG5nRm9ybVZhbHVlW2Zvcm1JdGVtLmluc3RhbmNlSWRdKSxcbiAgICBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpLFxuICB9IGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+Pjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIEZvcm1JdGVtIGhhcyBhbiBPcHRpb25JdGVtTWFwIHdpdGggYXQgbGVhc3QgMSBpdGVtLCB3aGljaCByZXF1aXJlIHRoZWlyIG93biBGb3JtQ29udHJvbChzKVxuICogQHBhcmFtIGZvcm1JdGVtIEZvcm1JdGVtIHRvIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRGb3JtSXRlbXMoZm9ybUl0ZW06IHVua25vd24pOiBmb3JtSXRlbSBpcyB7IG9wdGlvbkl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0ge1xuICByZXR1cm4gKFxuICAgIGlzVHlwZTx7XG4gICAgICBvcHRpb25JdGVtTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB9Pihmb3JtSXRlbSwgJ29wdGlvbkl0ZW1NYXAnKSAmJiBPYmplY3Qua2V5cyhmb3JtSXRlbS5vcHRpb25JdGVtTWFwKS5sZW5ndGggPiAwXG4gICk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcgbWluL21heCBzZWxlY3Rpb25zIGxpbWl0c1xuICogQHBhcmFtIHR5cGVDaGVjayBXaGljaCBsaW1pdCB0byB2YWxpZGF0ZS4gJ01JTicgfCAnTUFYJ1xuICogQHBhcmFtIGxpbWl0IHVwcGVyIG9yIGxvd2VyIGxpbWl0IHRvIGNoZWNrIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gbnVtQ2hlY2tib3hlc1ZhbGlkYXRvcih0eXBlQ2hlY2s6ICdNSU4nIHwgJ01BWCcsIGxpbWl0ID0gMSk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICBsZXQgdG90YWxTZWxlY3RlZCA9IDA7XG4gICAgaWYgKGlzRm9ybUFycmF5KGNvbnRyb2wpKSB7XG4gICAgICB0b3RhbFNlbGVjdGVkID0gY29udHJvbC5jb250cm9scy5tYXAoKGMpID0+IGMudmFsdWUpLnJlZHVjZSgodG90YWwsIG5leHQpID0+IChuZXh0ID8gdG90YWwgKyBuZXh0IDogdG90YWwpLCAwKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVDaGVjaykge1xuICAgICAgY2FzZSAnTUlOJzpcbiAgICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPj0gbGltaXQgPyBudWxsIDogeyBtaW5TZWxlY3RlZDogJGxvY2FsaXplYFNlbGVjdCBhdCBsZWFzdCAke2xpbWl0fWAgfTtcbiAgICAgIGNhc2UgJ01BWCc6XG4gICAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkIDw9IGxpbWl0ID8gbnVsbCA6IHsgbWF4U2VsZWN0ZWQ6ICRsb2NhbGl6ZWBTZWxlY3Qgbm8gbW9yZSB0aGFuICR7bGltaXR9YCB9O1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNGb3JtQXJyYXkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogY29udHJvbCBpcyBGb3JtQXJyYXkge1xuICByZXR1cm4gaXNUeXBlPEZvcm1BcnJheT4oY29udHJvbCwgJ2NvbnRyb2xzJyk7XG59XG5cbmZ1bmN0aW9uIF9pc0Rpc2FibGVkKGl0ZW06IENvbmRpdGlvbmFsSXRlbSwgZGlzYWJsZWRTdGF0ZTogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSk6IGJvb2xlYW4ge1xuICBjb25zdCBkaXNhYmxlZCA9IGRpc2FibGVkU3RhdGVbaXRlbS5pbnN0YW5jZUlkXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGRpc2FibGVkKSA/IGl0ZW0uZGlzYWJsZWQgOiBkaXNhYmxlZDtcbn1cbiJdfQ==
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { instanceOfModelDesignProperty } from '@mtna/designer-ts';
|
|
2
2
|
import { getItemMapperFromDesign, mapperItemToDesign } from '../models/design/design-mapper/mapping-logic-core';
|
|
3
3
|
import { getNewInitTemplateItem } from './new-base-designs.util';
|
|
4
|
+
// TEMPLATE ITEM UTILS
|
|
4
5
|
export function getNewTemplateItem(designBase, languageId, languageIds) {
|
|
5
6
|
return getNewInitTemplateItem(designBase, languageId, languageIds);
|
|
6
7
|
}
|
|
7
|
-
export function toTemplateItem(design, context) {
|
|
8
|
-
const model = getItemMapperFromDesign(design, context).getModel();
|
|
8
|
+
export function toTemplateItem(design, context, customParams) {
|
|
9
|
+
const model = getItemMapperFromDesign(design, context, customParams).getModel();
|
|
9
10
|
return model;
|
|
10
11
|
}
|
|
11
12
|
export function getTemplateItemPotentialDesigns(design, property) {
|
|
12
13
|
return getItemMapperFromDesign(design).getPotentialDesigns(property);
|
|
13
14
|
}
|
|
14
|
-
export function itemToDesign(item, languageId, parent, context) {
|
|
15
|
-
const design = mapperItemToDesign(item, languageId, parent, context);
|
|
15
|
+
export function itemToDesign(item, languageId, parent, context, customParams) {
|
|
16
|
+
const design = mapperItemToDesign(item, languageId, parent, context, customParams);
|
|
16
17
|
return Object.assign(Object.assign({}, design), { parent });
|
|
17
18
|
}
|
|
18
|
-
export function getTemplateItems(design, sectionId, propertyIds, context) {
|
|
19
|
+
export function getTemplateItems(design, sectionId, propertyIds, context, customParams) {
|
|
19
20
|
const values = {};
|
|
20
21
|
const section = design.sections.find((designSection) => designSection.display === sectionId);
|
|
21
22
|
if (section) {
|
|
@@ -24,11 +25,11 @@ export function getTemplateItems(design, sectionId, propertyIds, context) {
|
|
|
24
25
|
if (property && instanceOfModelDesignProperty(property)) {
|
|
25
26
|
values[propertyId] = [];
|
|
26
27
|
for (const value of property.values) {
|
|
27
|
-
values[propertyId].push(toTemplateItem(value, context));
|
|
28
|
+
values[propertyId].push(toTemplateItem(value, context, customParams));
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
return values;
|
|
33
34
|
}
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGVzaWduLWNvcmUtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi91dGlsaXRpZXMvdGVtcGxhdGUtZGVzaWduLWNvcmUtdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQStDLDZCQUE2QixFQUF5QixNQUFNLG1CQUFtQixDQUFDO0FBR3RJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2hILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWpFLHNCQUFzQjtBQUV0QixNQUFNLFVBQVUsa0JBQWtCLENBQUMsVUFBc0IsRUFBRSxVQUEwQixFQUFFLFdBQXFCO0lBQzFHLE9BQU8sc0JBQXNCLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFjLEVBQUUsT0FBaUIsRUFBRSxZQUFvQztJQUNwRyxNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hGLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSwrQkFBK0IsQ0FBQyxNQUFjLEVBQUUsUUFBd0I7SUFDdEYsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBa0IsRUFDbEIsVUFBMEIsRUFDMUIsTUFBbUIsRUFDbkIsT0FBaUIsRUFDakIsWUFBb0M7SUFFcEMsTUFBTSxNQUFNLEdBQVcsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzNGLHVDQUFZLE1BQU0sS0FBRSxNQUFNLElBQUc7QUFDL0IsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsTUFBYyxFQUNkLFNBQWlCLEVBQ2pCLFdBQXFCLEVBQ3JCLE9BQWlCLEVBQ2pCLFlBQW9DO0lBRXBDLE1BQU0sTUFBTSxHQUFzQyxFQUFFLENBQUM7SUFDckQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDN0YsSUFBSSxPQUFPLEVBQUU7UUFDWCxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRTtZQUNwQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsS0FBSyxVQUFVLENBQUMsQ0FBQztZQUNyRyxJQUFJLFFBQVEsSUFBSSw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDdkQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO29CQUNuQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFO2FBQ0Y7U0FDRjtLQUNGO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRleHQsIERlc2lnbiwgRGVzaWduQmFzZSwgRGVzaWduUHJvcGVydHksIGluc3RhbmNlT2ZNb2RlbERlc2lnblByb3BlcnR5LCBSZWZlcmVuY2VEZXNpZ25QYXJhbXMgfSBmcm9tICdAbXRuYS9kZXNpZ25lci10cyc7XG5pbXBvcnQgeyBUZW1wbGF0ZUl0ZW0gfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBNdG5hTGFuZ3VhZ2VJZCB9IGZyb20gJ0BtdG5hL2NvcmUtaTE4bi1hbmd1bGFyJztcbmltcG9ydCB7IGdldEl0ZW1NYXBwZXJGcm9tRGVzaWduLCBtYXBwZXJJdGVtVG9EZXNpZ24gfSBmcm9tICcuLi9tb2RlbHMvZGVzaWduL2Rlc2lnbi1tYXBwZXIvbWFwcGluZy1sb2dpYy1jb3JlJztcbmltcG9ydCB7IGdldE5ld0luaXRUZW1wbGF0ZUl0ZW0gfSBmcm9tICcuL25ldy1iYXNlLWRlc2lnbnMudXRpbCc7XG5cbi8vIFRFTVBMQVRFIElURU0gVVRJTFNcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld1RlbXBsYXRlSXRlbShkZXNpZ25CYXNlOiBEZXNpZ25CYXNlLCBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCwgbGFuZ3VhZ2VJZHM6IHN0cmluZ1tdKTogVGVtcGxhdGVJdGVtIHtcbiAgcmV0dXJuIGdldE5ld0luaXRUZW1wbGF0ZUl0ZW0oZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCwgbGFuZ3VhZ2VJZHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9UZW1wbGF0ZUl0ZW0oZGVzaWduOiBEZXNpZ24sIGNvbnRleHQ/OiBDb250ZXh0LCBjdXN0b21QYXJhbXM/OiBSZWZlcmVuY2VEZXNpZ25QYXJhbXMpOiBUZW1wbGF0ZUl0ZW0ge1xuICBjb25zdCBtb2RlbCA9IGdldEl0ZW1NYXBwZXJGcm9tRGVzaWduKGRlc2lnbiwgY29udGV4dCwgY3VzdG9tUGFyYW1zKS5nZXRNb2RlbCgpO1xuICByZXR1cm4gbW9kZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW1wbGF0ZUl0ZW1Qb3RlbnRpYWxEZXNpZ25zKGRlc2lnbjogRGVzaWduLCBwcm9wZXJ0eTogRGVzaWduUHJvcGVydHkpOiBEZXNpZ25CYXNlW10ge1xuICByZXR1cm4gZ2V0SXRlbU1hcHBlckZyb21EZXNpZ24oZGVzaWduKS5nZXRQb3RlbnRpYWxEZXNpZ25zKHByb3BlcnR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZW1Ub0Rlc2lnbihcbiAgaXRlbTogVGVtcGxhdGVJdGVtLFxuICBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCxcbiAgcGFyZW50PzogRGVzaWduQmFzZSxcbiAgY29udGV4dD86IENvbnRleHQsXG4gIGN1c3RvbVBhcmFtcz86IFJlZmVyZW5jZURlc2lnblBhcmFtc1xuKTogRGVzaWduIHtcbiAgY29uc3QgZGVzaWduOiBEZXNpZ24gPSBtYXBwZXJJdGVtVG9EZXNpZ24oaXRlbSwgbGFuZ3VhZ2VJZCwgcGFyZW50LCBjb250ZXh0LCBjdXN0b21QYXJhbXMpO1xuICByZXR1cm4geyAuLi5kZXNpZ24sIHBhcmVudCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcGxhdGVJdGVtcyhcbiAgZGVzaWduOiBEZXNpZ24sXG4gIHNlY3Rpb25JZDogc3RyaW5nLFxuICBwcm9wZXJ0eUlkczogc3RyaW5nW10sXG4gIGNvbnRleHQ/OiBDb250ZXh0LFxuICBjdXN0b21QYXJhbXM/OiBSZWZlcmVuY2VEZXNpZ25QYXJhbXNcbik6IHsgW2tleTogc3RyaW5nXTogVGVtcGxhdGVJdGVtW10gfSB7XG4gIGNvbnN0IHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBUZW1wbGF0ZUl0ZW1bXSB9ID0ge307XG4gIGNvbnN0IHNlY3Rpb24gPSBkZXNpZ24uc2VjdGlvbnMuZmluZCgoZGVzaWduU2VjdGlvbikgPT4gZGVzaWduU2VjdGlvbi5kaXNwbGF5ID09PSBzZWN0aW9uSWQpO1xuICBpZiAoc2VjdGlvbikge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlJZCBvZiBwcm9wZXJ0eUlkcykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBzZWN0aW9uLnByb3BlcnRpZXMuZmluZCgoZGVzaWduUHJvcGVydHkpID0+IGRlc2lnblByb3BlcnR5LnByb3BlcnR5ID09PSBwcm9wZXJ0eUlkKTtcbiAgICAgIGlmIChwcm9wZXJ0eSAmJiBpbnN0YW5jZU9mTW9kZWxEZXNpZ25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICAgICAgdmFsdWVzW3Byb3BlcnR5SWRdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgcHJvcGVydHkudmFsdWVzKSB7XG4gICAgICAgICAgdmFsdWVzW3Byb3BlcnR5SWRdLnB1c2godG9UZW1wbGF0ZUl0ZW0odmFsdWUsIGNvbnRleHQsIGN1c3RvbVBhcmFtcykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG4iXX0=
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BOOLEAN_ITEM_TEMPLATE_ID, BULLETED_LIST_ITEM_TEMPLATE_ID, CHECKBOX_GRID_TEMPLATE_ID, CHECKBOX_ITEM_TEMPLATE_ID, DATE_ITEM_TEMPLATE_ID, DECIMAL_ANSWER_ITEM_TEMPLATE_ID, DROPDOWN_ITEM_TEMPLATE_ID, FILE_UPLOAD_ITEM_TEMPLATE_ID, HIDDEN_REFERENCE_ITEM_TEMPLATE_ID, instanceOfBooleanItemTemplate, instanceOfBulletedListItemTemplate, instanceOfCheckboxGridTemplate, instanceOfCheckboxItemTemplate, instanceOfDateItemTemplate, instanceOfDecimalAnswerItemTemplate, instanceOfDropdownItemTemplate, instanceOfFileUploadItemTemplate, instanceOfHiddenReferenceItemTemplate, instanceOfInternationalizedParagraphAnswerItemTemplate, instanceOfInternationalizedShortAnswerItemTemplate, instanceOfLinearScaleItemTemplate, instanceOfMultipleChoiceGridItemTemplate, instanceOfMultipleChoiceItemTemplate, instanceOfNumberedListItemTemplate, instanceOfOffsetDateRangeTemplate, instanceOfParagraphAnswerItemTemplate, instanceOfRepeatableItemTemplate, instanceOfRequestIdItemTemplate, instanceOfShortAnswerItemTemplate, instanceOfTemplateItemGroupImpl, instanceOfTemplateSectionImpl, instanceOfTextItemTemplate, instanceOfTimeItemTemplate, instanceOfTitleItemTemplate, instanceOfWholeNumberAnswerItemTemplate, instanceOfYearQuarterRangeTemplate, INTERNATIONALIZED_PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID, INTERNATIONALIZED_SHORT_ANSWER_ITEM_TEMPLATE_ID, LINEAR_SCALE_ITEM_TEMPLATE_ID, MULTIPLE_CHOICE_GRID_ITEM_TEMPLATE_ID, MULTIPLE_CHOICE_ITEM_TEMPLATE_ID, NUMBERED_LIST_ITEM_TEMPLATE_ID, OFFSET_DATE_RANGE_ITEM_TEMPLATE_ID, PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID, REPEATABLE_ITEM_TEMPLATE_IMPL_ID, REQUEST_ID_ITEM_TEMPLATE_ID, SHORT_ANSWER_ITEM_TEMPLATE_ID, TEMPLATE_IMPL_ID, TEMPLATE_ITEM_GROUP_IMPL_ID, TEMPLATE_SECTION_IMPL_ID, TEXT_ITEM_TEMPLATE_ID, TIME_ITEM_TEMPLATE_ID, TITLE_ITEM_TEMPLATE_ID, WHOLE_NUMBER_ANSWER_ITEM_TEMPLATE_ID, YEAR_QUARTER_RANGE_ITEM_TEMPLATE_ID, } from '@mtna/web-form-ts';
|
|
2
1
|
import { getI18nString } from '@mtna/core-i18n-angular';
|
|
3
2
|
import { TemplateMapper } from '../models/design/design-mapper/template-mapper';
|
|
4
3
|
import { isPresent } from '@mtna/core-ts';
|
|
@@ -14,83 +13,17 @@ export function getNewTemplate(designBase) {
|
|
|
14
13
|
export function initializeDesign(designBase) {
|
|
15
14
|
return Object.assign(Object.assign({}, designBase), { sections: [] });
|
|
16
15
|
}
|
|
17
|
-
export function isTemplateDesign(design) {
|
|
18
|
-
return design.type === TEMPLATE_IMPL_ID;
|
|
19
|
-
}
|
|
20
|
-
export function isTemplateItemDesign(design) {
|
|
21
|
-
switch (design.type) {
|
|
22
|
-
case BOOLEAN_ITEM_TEMPLATE_ID:
|
|
23
|
-
case BULLETED_LIST_ITEM_TEMPLATE_ID:
|
|
24
|
-
case CHECKBOX_GRID_TEMPLATE_ID:
|
|
25
|
-
case CHECKBOX_ITEM_TEMPLATE_ID:
|
|
26
|
-
case DATE_ITEM_TEMPLATE_ID:
|
|
27
|
-
case DECIMAL_ANSWER_ITEM_TEMPLATE_ID:
|
|
28
|
-
case DROPDOWN_ITEM_TEMPLATE_ID:
|
|
29
|
-
case FILE_UPLOAD_ITEM_TEMPLATE_ID:
|
|
30
|
-
case HIDDEN_REFERENCE_ITEM_TEMPLATE_ID:
|
|
31
|
-
case INTERNATIONALIZED_PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID:
|
|
32
|
-
case INTERNATIONALIZED_SHORT_ANSWER_ITEM_TEMPLATE_ID:
|
|
33
|
-
case LINEAR_SCALE_ITEM_TEMPLATE_ID:
|
|
34
|
-
case MULTIPLE_CHOICE_GRID_ITEM_TEMPLATE_ID:
|
|
35
|
-
case MULTIPLE_CHOICE_ITEM_TEMPLATE_ID:
|
|
36
|
-
case NUMBERED_LIST_ITEM_TEMPLATE_ID:
|
|
37
|
-
case OFFSET_DATE_RANGE_ITEM_TEMPLATE_ID:
|
|
38
|
-
case PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID:
|
|
39
|
-
case REPEATABLE_ITEM_TEMPLATE_IMPL_ID:
|
|
40
|
-
case REQUEST_ID_ITEM_TEMPLATE_ID:
|
|
41
|
-
case SHORT_ANSWER_ITEM_TEMPLATE_ID:
|
|
42
|
-
case TEMPLATE_ITEM_GROUP_IMPL_ID:
|
|
43
|
-
case TEMPLATE_SECTION_IMPL_ID:
|
|
44
|
-
case TEXT_ITEM_TEMPLATE_ID:
|
|
45
|
-
case TIME_ITEM_TEMPLATE_ID:
|
|
46
|
-
case TITLE_ITEM_TEMPLATE_ID:
|
|
47
|
-
case WHOLE_NUMBER_ANSWER_ITEM_TEMPLATE_ID:
|
|
48
|
-
case YEAR_QUARTER_RANGE_ITEM_TEMPLATE_ID:
|
|
49
|
-
return true;
|
|
50
|
-
default:
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
export function isTemplateItem(something) {
|
|
55
|
-
return (instanceOfBooleanItemTemplate(something) ||
|
|
56
|
-
instanceOfBulletedListItemTemplate(something) ||
|
|
57
|
-
instanceOfCheckboxGridTemplate(something) ||
|
|
58
|
-
instanceOfCheckboxItemTemplate(something) ||
|
|
59
|
-
instanceOfDateItemTemplate(something) ||
|
|
60
|
-
instanceOfDecimalAnswerItemTemplate(something) ||
|
|
61
|
-
instanceOfDropdownItemTemplate(something) ||
|
|
62
|
-
instanceOfFileUploadItemTemplate(something) ||
|
|
63
|
-
instanceOfHiddenReferenceItemTemplate(something) ||
|
|
64
|
-
instanceOfInternationalizedParagraphAnswerItemTemplate(something) ||
|
|
65
|
-
instanceOfInternationalizedShortAnswerItemTemplate(something) ||
|
|
66
|
-
instanceOfLinearScaleItemTemplate(something) ||
|
|
67
|
-
instanceOfMultipleChoiceGridItemTemplate(something) ||
|
|
68
|
-
instanceOfMultipleChoiceItemTemplate(something) ||
|
|
69
|
-
instanceOfNumberedListItemTemplate(something) ||
|
|
70
|
-
instanceOfOffsetDateRangeTemplate(something) ||
|
|
71
|
-
instanceOfParagraphAnswerItemTemplate(something) ||
|
|
72
|
-
instanceOfRepeatableItemTemplate(something) ||
|
|
73
|
-
instanceOfRequestIdItemTemplate(something) ||
|
|
74
|
-
instanceOfShortAnswerItemTemplate(something) ||
|
|
75
|
-
instanceOfTemplateItemGroupImpl(something) ||
|
|
76
|
-
instanceOfTemplateSectionImpl(something) ||
|
|
77
|
-
instanceOfTextItemTemplate(something) ||
|
|
78
|
-
instanceOfTimeItemTemplate(something) ||
|
|
79
|
-
instanceOfTitleItemTemplate(something) ||
|
|
80
|
-
instanceOfWholeNumberAnswerItemTemplate(something) ||
|
|
81
|
-
instanceOfYearQuarterRangeTemplate(something));
|
|
82
|
-
}
|
|
83
16
|
export function getTemplatePotentialDesigns(design, property) {
|
|
84
17
|
return getTemplateMapperFromDesign(design).getPotentialDesigns(property);
|
|
85
18
|
}
|
|
86
|
-
export function templateToDesign(template, languageId, context) {
|
|
87
|
-
return new TemplateMapper({ model: template, languageId, context }).getDesign();
|
|
19
|
+
export function templateToDesign(template, languageId, context, customParams) {
|
|
20
|
+
return new TemplateMapper({ model: template, languageId, context, customParams }).getDesign();
|
|
88
21
|
}
|
|
89
|
-
export function toTemplate(design, context) {
|
|
90
|
-
return new TemplateMapper({ design, context }).getModel();
|
|
22
|
+
export function toTemplate(design, context, customParams) {
|
|
23
|
+
return new TemplateMapper({ design, context, customParams }).getModel();
|
|
91
24
|
}
|
|
92
|
-
function getTemplateMapperFromDesign(design) {
|
|
93
|
-
return new TemplateMapper({ design });
|
|
25
|
+
function getTemplateMapperFromDesign(design, customParams) {
|
|
26
|
+
return new TemplateMapper({ design, customParams });
|
|
94
27
|
}
|
|
95
28
|
export function getText(properties, key, i18n, languageId, fallback = '') {
|
|
96
29
|
var _a;
|
|
@@ -106,4 +39,4 @@ export function getText(properties, key, i18n, languageId, fallback = '') {
|
|
|
106
39
|
return fallback;
|
|
107
40
|
}
|
|
108
41
|
}
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGVzaWduLXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvdXRpbGl0aWVzL3RlbXBsYXRlLWRlc2lnbi11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLCtCQUErQixFQUMvQix5QkFBeUIsRUFDekIsNEJBQTRCLEVBQzVCLGlDQUFpQyxFQUNqQyw2QkFBNkIsRUFDN0Isa0NBQWtDLEVBQ2xDLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsMEJBQTBCLEVBQzFCLG1DQUFtQyxFQUNuQyw4QkFBOEIsRUFDOUIsZ0NBQWdDLEVBQ2hDLHFDQUFxQyxFQUNyQyxzREFBc0QsRUFDdEQsa0RBQWtELEVBQ2xELGlDQUFpQyxFQUNqQyx3Q0FBd0MsRUFDeEMsb0NBQW9DLEVBQ3BDLGtDQUFrQyxFQUNsQyxpQ0FBaUMsRUFDakMscUNBQXFDLEVBQ3JDLGdDQUFnQyxFQUNoQywrQkFBK0IsRUFDL0IsaUNBQWlDLEVBQ2pDLCtCQUErQixFQUMvQiw2QkFBNkIsRUFDN0IsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0IsdUNBQXVDLEVBQ3ZDLGtDQUFrQyxFQUNsQyxtREFBbUQsRUFDbkQsK0NBQStDLEVBQy9DLDZCQUE2QixFQUM3QixxQ0FBcUMsRUFDckMsZ0NBQWdDLEVBQ2hDLDhCQUE4QixFQUM5QixrQ0FBa0MsRUFDbEMsaUNBQWlDLEVBQ2pDLGdDQUFnQyxFQUNoQywyQkFBMkIsRUFDM0IsNkJBQTZCLEVBRTdCLGdCQUFnQixFQUNoQiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBRXhCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLG9DQUFvQyxFQUNw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LENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3hELElBQUksSUFBSSxFQUFFO1lBQ1IsT0FBTyxNQUFBLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxtQ0FBSSxFQUFFLENBQUM7U0FDL0Q7YUFBTTtZQUNMLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hCO0tBQ0Y7U0FBTTtRQUNMLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJPT0xFQU5fSVRFTV9URU1QTEFURV9JRCxcbiAgQlVMTEVURURfTElTVF9JVEVNX1RFTVBMQVRFX0lELFxuICBDSEVDS0JPWF9HUklEX1RFTVBMQVRFX0lELFxuICBDSEVDS0JPWF9JVEVNX1RFTVBMQVRFX0lELFxuICBEQVRFX0lURU1fVEVNUExBVEVfSUQsXG4gIERFQ0lNQUxfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQsXG4gIERST1BET1dOX0lURU1fVEVNUExBVEVfSUQsXG4gIEZJTEVfVVBMT0FEX0lURU1fVEVNUExBVEVfSUQsXG4gIEhJRERFTl9SRUZFUkVOQ0VfSVRFTV9URU1QTEFURV9JRCxcbiAgaW5zdGFuY2VPZkJvb2xlYW5JdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZCdWxsZXRlZExpc3RJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZDaGVja2JveEdyaWRUZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZkNoZWNrYm94SXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mRGF0ZUl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZkRlY2ltYWxBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZEcm9wZG93bkl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZkZpbGVVcGxvYWRJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZIaWRkZW5SZWZlcmVuY2VJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZkludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZMaW5lYXJTY2FsZUl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZk11bHRpcGxlQ2hvaWNlR3JpZEl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZk11bHRpcGxlQ2hvaWNlSXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mTnVtYmVyZWRMaXN0SXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mT2Zmc2V0RGF0ZVJhbmdlVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZQYXJhZ3JhcGhBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZSZXBlYXRhYmxlSXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mUmVxdWVzdElkSXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mU2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZUZW1wbGF0ZUl0ZW1Hcm91cEltcGwsXG4gIGluc3RhbmNlT2ZUZW1wbGF0ZVNlY3Rpb25JbXBsLFxuICBpbnN0YW5jZU9mVGV4dEl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZlRpbWVJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZUaXRsZUl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZldob2xlTnVtYmVyQW5zd2VySXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mWWVhclF1YXJ0ZXJSYW5nZVRlbXBsYXRlLFxuICBJTlRFUk5BVElPTkFMSVpFRF9QQVJBR1JBUEhfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQsXG4gIElOVEVSTkFUSU9OQUxJWkVEX1NIT1JUX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lELFxuICBMSU5FQVJfU0NBTEVfSVRFTV9URU1QTEFURV9JRCxcbiAgTVVMVElQTEVfQ0hPSUNFX0dSSURfSVRFTV9URU1QTEFURV9JRCxcbiAgTVVMVElQTEVfQ0hPSUNFX0lURU1fVEVNUExBVEVfSUQsXG4gIE5VTUJFUkVEX0xJU1RfSVRFTV9URU1QTEFURV9JRCxcbiAgT0ZGU0VUX0RBVEVfUkFOR0VfSVRFTV9URU1QTEFURV9JRCxcbiAgUEFSQUdSQVBIX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lELFxuICBSRVBFQVRBQkxFX0lURU1fVEVNUExBVEVfSU1QTF9JRCxcbiAgUkVRVUVTVF9JRF9JVEVNX1RFTVBMQVRFX0lELFxuICBTSE9SVF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRCxcbiAgVGVtcGxhdGUsXG4gIFRFTVBMQVRFX0lNUExfSUQsXG4gIFRFTVBMQVRFX0lURU1fR1JPVVBfSU1QTF9JRCxcbiAgVEVNUExBVEVfU0VDVElPTl9JTVBMX0lELFxuICBUZW1wbGF0ZUl0ZW0sXG4gIFRFWFRfSVRFTV9URU1QTEFURV9JRCxcbiAgVElNRV9JVEVNX1RFTVBMQVRFX0lELFxuICBUSVRMRV9JVEVNX1RFTVBMQVRFX0lELFxuICBXSE9MRV9OVU1CRVJfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQsXG4gIFlFQVJfUVVBUlRFUl9SQU5HRV9JVEVNX1RFTVBMQVRFX0lELFxufSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBDb250ZXh0LCBEZXNpZ24sIERlc2lnbkJhc2UsIERlc2lnblByb3BlcnR5IH0gZnJvbSAnQG10bmEvZGVzaWduZXItdHMnO1xuaW1wb3J0IHsgZ2V0STE4blN0cmluZywgTXRuYUxhbmd1YWdlSWQgfSBmcm9tICdAbXRuYS9jb3JlLWkxOG4tYW5ndWxhcic7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hcHBlciB9IGZyb20gJy4uL21vZGVscy9kZXNpZ24vZGVzaWduLW1hcHBlci90ZW1wbGF0ZS1tYXBwZXInO1xuaW1wb3J0IHsgaXNQcmVzZW50IH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdUZW1wbGF0ZShkZXNpZ25CYXNlOiBEZXNpZ25CYXNlKTogVGVtcGxhdGUge1xuICByZXR1cm4ge1xuICAgIGRlc2NyaXB0aXZlVGV4dDogW10sXG4gICAgaWQ6IGRlc2lnbkJhc2UuaWQsXG4gICAgaXRlbUlkOiBkZXNpZ25CYXNlLnR5cGUsXG4gICAgaXRlbXM6IFtdLFxuICAgIHRpdGxlOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVEZXNpZ24oZGVzaWduQmFzZTogRGVzaWduQmFzZSk6IERlc2lnbiB7XG4gIHJldHVybiB7IC4uLmRlc2lnbkJhc2UsIHNlY3Rpb25zOiBbXSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZURlc2lnbihkZXNpZ246IERlc2lnbkJhc2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIGRlc2lnbi50eXBlID09PSBURU1QTEFURV9JTVBMX0lEO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZUl0ZW1EZXNpZ24oZGVzaWduOiBEZXNpZ25CYXNlKTogYm9vbGVhbiB7XG4gIHN3aXRjaCAoZGVzaWduLnR5cGUpIHtcbiAgICBjYXNlIEJPT0xFQU5fSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIEJVTExFVEVEX0xJU1RfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIENIRUNLQk9YX0dSSURfVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBDSEVDS0JPWF9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgREFURV9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgREVDSU1BTF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIERST1BET1dOX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBGSUxFX1VQTE9BRF9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgSElEREVOX1JFRkVSRU5DRV9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgSU5URVJOQVRJT05BTElaRURfUEFSQUdSQVBIX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgSU5URVJOQVRJT05BTElaRURfU0hPUlRfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBMSU5FQVJfU0NBTEVfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIE1VTFRJUExFX0NIT0lDRV9HUklEX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBNVUxUSVBMRV9DSE9JQ0VfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIE5VTUJFUkVEX0xJU1RfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIE9GRlNFVF9EQVRFX1JBTkdFX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBQQVJBR1JBUEhfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBSRVBFQVRBQkxFX0lURU1fVEVNUExBVEVfSU1QTF9JRDpcbiAgICBjYXNlIFJFUVVFU1RfSURfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIFNIT1JUX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgVEVNUExBVEVfSVRFTV9HUk9VUF9JTVBMX0lEOlxuICAgIGNhc2UgVEVNUExBVEVfU0VDVElPTl9JTVBMX0lEOlxuICAgIGNhc2UgVEVYVF9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgVElNRV9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgVElUTEVfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIFdIT0xFX05VTUJFUl9BTlNXRVJfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIFlFQVJfUVVBUlRFUl9SQU5HRV9JVEVNX1RFTVBMQVRFX0lEOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZUl0ZW0oc29tZXRoaW5nOiB1bmtub3duKTogc29tZXRoaW5nIGlzIFRlbXBsYXRlSXRlbSB7XG4gIHJldHVybiAoXG4gICAgaW5zdGFuY2VPZkJvb2xlYW5JdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZCdWxsZXRlZExpc3RJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZDaGVja2JveEdyaWRUZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkNoZWNrYm94SXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mRGF0ZUl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkRlY2ltYWxBbnN3ZXJJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZEcm9wZG93bkl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkZpbGVVcGxvYWRJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZIaWRkZW5SZWZlcmVuY2VJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZMaW5lYXJTY2FsZUl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZk11bHRpcGxlQ2hvaWNlR3JpZEl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZk11bHRpcGxlQ2hvaWNlSXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mTnVtYmVyZWRMaXN0SXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mT2Zmc2V0RGF0ZVJhbmdlVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZQYXJhZ3JhcGhBbnN3ZXJJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZSZXBlYXRhYmxlSXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mUmVxdWVzdElkSXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mU2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZUZW1wbGF0ZUl0ZW1Hcm91cEltcGwoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZUZW1wbGF0ZVNlY3Rpb25JbXBsKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mVGV4dEl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZlRpbWVJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZUaXRsZUl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZldob2xlTnVtYmVyQW5zd2VySXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mWWVhclF1YXJ0ZXJSYW5nZVRlbXBsYXRlKHNvbWV0aGluZylcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBsYXRlUG90ZW50aWFsRGVzaWducyhkZXNpZ246IERlc2lnbiwgcHJvcGVydHk6IERlc2lnblByb3BlcnR5KTogRGVzaWduQmFzZVtdIHtcbiAgcmV0dXJuIGdldFRlbXBsYXRlTWFwcGVyRnJvbURlc2lnbihkZXNpZ24pLmdldFBvdGVudGlhbERlc2lnbnMocHJvcGVydHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVUb0Rlc2lnbih0ZW1wbGF0ZTogVGVtcGxhdGUsIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkLCBjb250ZXh0PzogQ29udGV4dCk6IERlc2lnbiB7XG4gIHJldHVybiBuZXcgVGVtcGxhdGVNYXBwZXIoeyBtb2RlbDogdGVtcGxhdGUsIGxhbmd1YWdlSWQsIGNvbnRleHQgfSkuZ2V0RGVzaWduKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RlbXBsYXRlKGRlc2lnbjogRGVzaWduLCBjb250ZXh0PzogQ29udGV4dCk6IFRlbXBsYXRlIHtcbiAgcmV0dXJuIG5ldyBUZW1wbGF0ZU1hcHBlcih7IGRlc2lnbiwgY29udGV4dCB9KS5nZXRNb2RlbCgpO1xufVxuXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZU1hcHBlckZyb21EZXNpZ24oZGVzaWduOiBEZXNpZ24pOiBUZW1wbGF0ZU1hcHBlciB7XG4gIHJldHVybiBuZXcgVGVtcGxhdGVNYXBwZXIoeyBkZXNpZ24gfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0KHByb3BlcnRpZXM6IHsgW3A6IHN0cmluZ106IGFueSB9LCBrZXk6IHN0cmluZywgaTE4bjogYm9vbGVhbiwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQsIGZhbGxiYWNrID0gJycpOiBzdHJpbmcge1xuICBpZiAoaXNQcmVzZW50KHByb3BlcnRpZXNba2V5XSkgJiYgcHJvcGVydGllc1trZXldICE9PSAnJykge1xuICAgIGlmIChpMThuKSB7XG4gICAgICByZXR1cm4gZ2V0STE4blN0cmluZyhwcm9wZXJ0aWVzW2tleV0sIGxhbmd1YWdlSWQsIHRydWUpID8/ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJvcGVydGllc1trZXldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cbn1cbiJdfQ==
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGVzaWduLXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvdXRpbGl0aWVzL3RlbXBsYXRlLWRlc2lnbi11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxhQUFhLEVBQWtCLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsTUFBTSxVQUFVLGNBQWMsQ0FBQyxVQUFzQjtJQUNuRCxPQUFPO1FBQ0wsZUFBZSxFQUFFLEVBQUU7UUFDbkIsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2pCLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSTtRQUN2QixLQUFLLEVBQUUsRUFBRTtRQUNULEtBQUssRUFBRSxFQUFFO0tBQ1YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsVUFBc0I7SUFDckQsdUNBQVksVUFBVSxLQUFFLFFBQVEsRUFBRSxFQUFFLElBQUc7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxNQUFjLEVBQUUsUUFBd0I7SUFDbEYsT0FBTywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixRQUFrQixFQUNsQixVQUEwQixFQUMxQixPQUFpQixFQUNqQixZQUFvQztJQUVwQyxPQUFPLElBQUksY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDaEcsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBYyxFQUFFLE9BQWlCLEVBQUUsWUFBb0M7SUFDaEcsT0FBTyxJQUFJLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMxRSxDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FBQyxNQUFjLEVBQUUsWUFBb0M7SUFDdkYsT0FBTyxJQUFJLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLFVBQWdDLEVBQUUsR0FBVyxFQUFFLElBQWEsRUFBRSxVQUEwQixFQUFFLFFBQVEsR0FBRyxFQUFFOztJQUM3SCxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3hELElBQUksSUFBSSxFQUFFO1lBQ1IsT0FBTyxNQUFBLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxtQ0FBSSxFQUFFLENBQUM7U0FDL0Q7YUFBTTtZQUNMLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hCO0tBQ0Y7U0FBTTtRQUNMLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgQ29udGV4dCwgRGVzaWduLCBEZXNpZ25CYXNlLCBEZXNpZ25Qcm9wZXJ0eSwgUmVmZXJlbmNlRGVzaWduUGFyYW1zIH0gZnJvbSAnQG10bmEvZGVzaWduZXItdHMnO1xuaW1wb3J0IHsgZ2V0STE4blN0cmluZywgTXRuYUxhbmd1YWdlSWQgfSBmcm9tICdAbXRuYS9jb3JlLWkxOG4tYW5ndWxhcic7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hcHBlciB9IGZyb20gJy4uL21vZGVscy9kZXNpZ24vZGVzaWduLW1hcHBlci90ZW1wbGF0ZS1tYXBwZXInO1xuaW1wb3J0IHsgaXNQcmVzZW50IH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdUZW1wbGF0ZShkZXNpZ25CYXNlOiBEZXNpZ25CYXNlKTogVGVtcGxhdGUge1xuICByZXR1cm4ge1xuICAgIGRlc2NyaXB0aXZlVGV4dDogW10sXG4gICAgaWQ6IGRlc2lnbkJhc2UuaWQsXG4gICAgaXRlbUlkOiBkZXNpZ25CYXNlLnR5cGUsXG4gICAgaXRlbXM6IFtdLFxuICAgIHRpdGxlOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVEZXNpZ24oZGVzaWduQmFzZTogRGVzaWduQmFzZSk6IERlc2lnbiB7XG4gIHJldHVybiB7IC4uLmRlc2lnbkJhc2UsIHNlY3Rpb25zOiBbXSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcGxhdGVQb3RlbnRpYWxEZXNpZ25zKGRlc2lnbjogRGVzaWduLCBwcm9wZXJ0eTogRGVzaWduUHJvcGVydHkpOiBEZXNpZ25CYXNlW10ge1xuICByZXR1cm4gZ2V0VGVtcGxhdGVNYXBwZXJGcm9tRGVzaWduKGRlc2lnbikuZ2V0UG90ZW50aWFsRGVzaWducyhwcm9wZXJ0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZVRvRGVzaWduKFxuICB0ZW1wbGF0ZTogVGVtcGxhdGUsXG4gIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkLFxuICBjb250ZXh0PzogQ29udGV4dCxcbiAgY3VzdG9tUGFyYW1zPzogUmVmZXJlbmNlRGVzaWduUGFyYW1zXG4pOiBEZXNpZ24ge1xuICByZXR1cm4gbmV3IFRlbXBsYXRlTWFwcGVyKHsgbW9kZWw6IHRlbXBsYXRlLCBsYW5ndWFnZUlkLCBjb250ZXh0LCBjdXN0b21QYXJhbXMgfSkuZ2V0RGVzaWduKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RlbXBsYXRlKGRlc2lnbjogRGVzaWduLCBjb250ZXh0PzogQ29udGV4dCwgY3VzdG9tUGFyYW1zPzogUmVmZXJlbmNlRGVzaWduUGFyYW1zKTogVGVtcGxhdGUge1xuICByZXR1cm4gbmV3IFRlbXBsYXRlTWFwcGVyKHsgZGVzaWduLCBjb250ZXh0LCBjdXN0b21QYXJhbXMgfSkuZ2V0TW9kZWwoKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGVtcGxhdGVNYXBwZXJGcm9tRGVzaWduKGRlc2lnbjogRGVzaWduLCBjdXN0b21QYXJhbXM/OiBSZWZlcmVuY2VEZXNpZ25QYXJhbXMpOiBUZW1wbGF0ZU1hcHBlciB7XG4gIHJldHVybiBuZXcgVGVtcGxhdGVNYXBwZXIoeyBkZXNpZ24sIGN1c3RvbVBhcmFtcyB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHQocHJvcGVydGllczogeyBbcDogc3RyaW5nXTogYW55IH0sIGtleTogc3RyaW5nLCBpMThuOiBib29sZWFuLCBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCwgZmFsbGJhY2sgPSAnJyk6IHN0cmluZyB7XG4gIGlmIChpc1ByZXNlbnQocHJvcGVydGllc1trZXldKSAmJiBwcm9wZXJ0aWVzW2tleV0gIT09ICcnKSB7XG4gICAgaWYgKGkxOG4pIHtcbiAgICAgIHJldHVybiBnZXRJMThuU3RyaW5nKHByb3BlcnRpZXNba2V5XSwgbGFuZ3VhZ2VJZCwgdHJ1ZSkgPz8gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzW2tleV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { instanceOfTemplateImpl } from '@mtna/web-form-ts';
|
|
2
|
+
import * as MtnaTemplateDesign from './template-design-util';
|
|
3
|
+
import * as IsTemplateUtil from './is-template-util';
|
|
4
|
+
import * as MtnaTemplateCoreDesign from './template-design-core-util';
|
|
5
|
+
import * as FormOptionDesign from './form-option-design-util';
|
|
6
|
+
export function getModelToDesign(model, languageId, contextSelected, references) {
|
|
7
|
+
if (instanceOfTemplateImpl(model)) {
|
|
8
|
+
return MtnaTemplateDesign.templateToDesign(model, languageId, contextSelected, {
|
|
9
|
+
references,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
else if (IsTemplateUtil.isTemplateItem(model)) {
|
|
13
|
+
return MtnaTemplateCoreDesign.itemToDesign(model, languageId, undefined, contextSelected, {
|
|
14
|
+
references,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
else if (FormOptionDesign.instanceOfFormOptionSelector(model)) {
|
|
18
|
+
return FormOptionDesign.optionSelectorToDesign(model, languageId, {}, references, undefined, contextSelected);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
throw new Error(`Cannot convert model to design. Model is not recognized. Supported types are instances of TEMPLATE, TEMPLATE_ITEM, and OPTION.`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tZGVzaWduLXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvdXRpbGl0aWVzL3RvLWRlc2lnbi11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0Isc0JBQXNCLEVBQWtDLE1BQU0sbUJBQW1CLENBQUM7QUFFL0csT0FBTyxLQUFLLGtCQUFrQixNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sS0FBSyxjQUFjLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxLQUFLLHNCQUFzQixNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSwyQkFBMkIsQ0FBQztBQUc5RCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLEtBQW9FLEVBQ3BFLFVBQTBCLEVBQzFCLGVBQW9DLEVBQ3BDLFVBQWdEO0lBRWhELElBQUksc0JBQXNCLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDakMsT0FBTyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRTtZQUM3RSxVQUFVO1NBQ1gsQ0FBQyxDQUFDO0tBQ0o7U0FBTSxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDL0MsT0FBTyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO1lBQ3hGLFVBQVU7U0FDWCxDQUFDLENBQUM7S0FDSjtTQUFNLElBQUksZ0JBQWdCLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDL0QsT0FBTyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBa0IsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztLQUNoSTtTQUFNO1FBQ0wsTUFBTSxJQUFJLEtBQUssQ0FDYixnSUFBZ0ksQ0FDakksQ0FBQztLQUNIO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1PcHRpb25TZWxlY3RvciwgaW5zdGFuY2VPZlRlbXBsYXRlSW1wbCwgT3B0aW9uLCBUZW1wbGF0ZSwgVGVtcGxhdGVJdGVtIH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgQ29udGV4dCwgRGVzaWduLCBSZWZlcmVuY2VEZXNpZ25WYWx1ZSB9IGZyb20gJ0BtdG5hL2Rlc2lnbmVyLXRzJztcbmltcG9ydCAqIGFzIE10bmFUZW1wbGF0ZURlc2lnbiBmcm9tICcuL3RlbXBsYXRlLWRlc2lnbi11dGlsJztcbmltcG9ydCAqIGFzIElzVGVtcGxhdGVVdGlsIGZyb20gJy4vaXMtdGVtcGxhdGUtdXRpbCc7XG5pbXBvcnQgKiBhcyBNdG5hVGVtcGxhdGVDb3JlRGVzaWduIGZyb20gJy4vdGVtcGxhdGUtZGVzaWduLWNvcmUtdXRpbCc7XG5pbXBvcnQgKiBhcyBGb3JtT3B0aW9uRGVzaWduIGZyb20gJy4vZm9ybS1vcHRpb24tZGVzaWduLXV0aWwnO1xuaW1wb3J0IHsgTXRuYUxhbmd1YWdlSWQgfSBmcm9tICdAbXRuYS9jb3JlLWkxOG4tYW5ndWxhcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbFRvRGVzaWduKFxuICBtb2RlbDogVGVtcGxhdGUgfCBUZW1wbGF0ZUl0ZW0gfCBGb3JtT3B0aW9uU2VsZWN0b3I8T3B0aW9uPHVua25vd24+PixcbiAgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQsXG4gIGNvbnRleHRTZWxlY3RlZDogQ29udGV4dCB8IHVuZGVmaW5lZCxcbiAgcmVmZXJlbmNlczogUmVjb3JkPHN0cmluZywgUmVmZXJlbmNlRGVzaWduVmFsdWU+XG4pOiBEZXNpZ24ge1xuICBpZiAoaW5zdGFuY2VPZlRlbXBsYXRlSW1wbChtb2RlbCkpIHtcbiAgICByZXR1cm4gTXRuYVRlbXBsYXRlRGVzaWduLnRlbXBsYXRlVG9EZXNpZ24obW9kZWwsIGxhbmd1YWdlSWQsIGNvbnRleHRTZWxlY3RlZCwge1xuICAgICAgcmVmZXJlbmNlcyxcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChJc1RlbXBsYXRlVXRpbC5pc1RlbXBsYXRlSXRlbShtb2RlbCkpIHtcbiAgICByZXR1cm4gTXRuYVRlbXBsYXRlQ29yZURlc2lnbi5pdGVtVG9EZXNpZ24obW9kZWwsIGxhbmd1YWdlSWQsIHVuZGVmaW5lZCwgY29udGV4dFNlbGVjdGVkLCB7XG4gICAgICByZWZlcmVuY2VzLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKEZvcm1PcHRpb25EZXNpZ24uaW5zdGFuY2VPZkZvcm1PcHRpb25TZWxlY3Rvcihtb2RlbCkpIHtcbiAgICByZXR1cm4gRm9ybU9wdGlvbkRlc2lnbi5vcHRpb25TZWxlY3RvclRvRGVzaWduPE9wdGlvbjx1bmtub3duPj4obW9kZWwsIGxhbmd1YWdlSWQsIHt9LCByZWZlcmVuY2VzLCB1bmRlZmluZWQsIGNvbnRleHRTZWxlY3RlZCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCBjb252ZXJ0IG1vZGVsIHRvIGRlc2lnbi4gTW9kZWwgaXMgbm90IHJlY29nbml6ZWQuIFN1cHBvcnRlZCB0eXBlcyBhcmUgaW5zdGFuY2VzIG9mIFRFTVBMQVRFLCBURU1QTEFURV9JVEVNLCBhbmQgT1BUSU9OLmBcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { isNullOrUndefined } from '@mtna/core-ts';
|
|
2
|
+
/** RegEx to validate number items contain only negative, digits, or decimals */
|
|
3
|
+
const numOnlyWithoutComma = /^-?\d+(\.\d*)?$/;
|
|
4
|
+
/** RegEx to validate number items contain only negative, digits, or decimals in comma format */
|
|
5
|
+
const numOnlyWithComma = /^-?\d{1,3}(,\d{3})*(\.\d*)?$/;
|
|
6
|
+
/** RegEx to validate 'positive only' item conains non-negative characters */
|
|
7
|
+
const posOnly = /^[^-]*$/;
|
|
8
|
+
/** RegEx to validate 'whole number' item contains only negative, digits, or comma format */
|
|
9
|
+
const wholeNumber = /^-?\d+(,\d{3})*$/;
|
|
10
|
+
export function wholeNumberPattern() {
|
|
11
|
+
return (control) => {
|
|
12
|
+
if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return wholeNumber.test(control.value) ? null : { wholeNumber: true };
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function numericalValueCheck() {
|
|
19
|
+
return (control) => {
|
|
20
|
+
if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return numOnlyWithoutComma.test(control.value) || numOnlyWithComma.test(control.value) ? null : { nonDigit: true };
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function positiveNumberPattern() {
|
|
27
|
+
return (control) => {
|
|
28
|
+
if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return posOnly.test(control.value) ? null : { positive: true };
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* This works as a combination of the angular 'min'/'max' Validators. Using the built-in validators
|
|
36
|
+
* appears to take precedence over custom validators, regardless of order in the array. Using this function
|
|
37
|
+
* ensures validators set before this one maintain priority. For instance, the input value failing numerical validation
|
|
38
|
+
* is more important than the value being within min-max range.
|
|
39
|
+
*/
|
|
40
|
+
export function numValueLimit(type, limit) {
|
|
41
|
+
return (control) => {
|
|
42
|
+
if (isNullOrUndefined(control.value) || isEmptyString(control.value)) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const value = parseFloat(control.value);
|
|
46
|
+
return !isNaN(value) && (type === 'min' ? value < limit : value > limit)
|
|
47
|
+
? {
|
|
48
|
+
[type]: {
|
|
49
|
+
[type]: limit,
|
|
50
|
+
actual: control.value,
|
|
51
|
+
},
|
|
52
|
+
}
|
|
53
|
+
: null;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function isEmptyString(value) {
|
|
57
|
+
return typeof value === 'string' && !value.length;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLWZ1bmN0aW9ucy11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy92YWxpZGF0b3ItZnVuY3Rpb25zLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxELGdGQUFnRjtBQUNoRixNQUFNLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDO0FBQzlDLGdHQUFnRztBQUNoRyxNQUFNLGdCQUFnQixHQUFHLDhCQUE4QixDQUFDO0FBQ3hELDZFQUE2RTtBQUM3RSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDMUIsNEZBQTRGO0FBQzVGLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDO0FBRXZDLE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7UUFDM0QsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwRSxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4RSxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtRQUMzRCxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNySCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtRQUMzRCxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2pFLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBbUIsRUFBRSxLQUFhO0lBQzlELE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1FBQzNELElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDdEUsQ0FBQyxDQUFDO2dCQUNFLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ04sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLO29CQUNiLE1BQU0sRUFBRSxPQUFPLENBQUMsS0FBSztpQkFDdEI7YUFDRjtZQUNILENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFjO0lBQzFDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5cbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSBudW1iZXIgaXRlbXMgY29udGFpbiBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGRlY2ltYWxzICovXG5jb25zdCBudW1Pbmx5V2l0aG91dENvbW1hID0gL14tP1xcZCsoXFwuXFxkKik/JC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgbnVtYmVyIGl0ZW1zIGNvbnRhaW4gb25seSBuZWdhdGl2ZSwgZGlnaXRzLCBvciBkZWNpbWFscyBpbiBjb21tYSBmb3JtYXQgKi9cbmNvbnN0IG51bU9ubHlXaXRoQ29tbWEgPSAvXi0/XFxkezEsM30oLFxcZHszfSkqKFxcLlxcZCopPyQvO1xuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlICdwb3NpdGl2ZSBvbmx5JyBpdGVtIGNvbmFpbnMgbm9uLW5lZ2F0aXZlIGNoYXJhY3RlcnMgKi9cbmNvbnN0IHBvc09ubHkgPSAvXlteLV0qJC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgJ3dob2xlIG51bWJlcicgaXRlbSBjb250YWlucyBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGNvbW1hIGZvcm1hdCAqL1xuY29uc3Qgd2hvbGVOdW1iZXIgPSAvXi0/XFxkKygsXFxkezN9KSokLztcblxuZXhwb3J0IGZ1bmN0aW9uIHdob2xlTnVtYmVyUGF0dGVybigpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gd2hvbGVOdW1iZXIudGVzdChjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7IHdob2xlTnVtYmVyOiB0cnVlIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBudW1lcmljYWxWYWx1ZUNoZWNrKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVtT25seVdpdGhvdXRDb21tYS50ZXN0KGNvbnRyb2wudmFsdWUpIHx8IG51bU9ubHlXaXRoQ29tbWEudGVzdChjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7IG5vbkRpZ2l0OiB0cnVlIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGl2ZU51bWJlclBhdHRlcm4oKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwb3NPbmx5LnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBwb3NpdGl2ZTogdHJ1ZSB9O1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgd29ya3MgYXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgYW5ndWxhciAnbWluJy8nbWF4JyBWYWxpZGF0b3JzLiBVc2luZyB0aGUgYnVpbHQtaW4gdmFsaWRhdG9yc1xuICogYXBwZWFycyB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlciBjdXN0b20gdmFsaWRhdG9ycywgcmVnYXJkbGVzcyBvZiBvcmRlciBpbiB0aGUgYXJyYXkuIFVzaW5nIHRoaXMgZnVuY3Rpb25cbiAqIGVuc3VyZXMgdmFsaWRhdG9ycyBzZXQgYmVmb3JlIHRoaXMgb25lIG1haW50YWluIHByaW9yaXR5LiBGb3IgaW5zdGFuY2UsIHRoZSBpbnB1dCB2YWx1ZSBmYWlsaW5nIG51bWVyaWNhbCB2YWxpZGF0aW9uXG4gKiBpcyBtb3JlIGltcG9ydGFudCB0aGFuIHRoZSB2YWx1ZSBiZWluZyB3aXRoaW4gbWluLW1heCByYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG51bVZhbHVlTGltaXQodHlwZTogJ21pbicgfCAnbWF4JywgbGltaXQ6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQoY29udHJvbC52YWx1ZSk7XG4gICAgcmV0dXJuICFpc05hTih2YWx1ZSkgJiYgKHR5cGUgPT09ICdtaW4nID8gdmFsdWUgPCBsaW1pdCA6IHZhbHVlID4gbGltaXQpXG4gICAgICA/IHtcbiAgICAgICAgICBbdHlwZV06IHtcbiAgICAgICAgICAgIFt0eXBlXTogbGltaXQsXG4gICAgICAgICAgICBhY3R1YWw6IGNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eVN0cmluZyh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhdmFsdWUubGVuZ3RoO1xufVxuIl19
|