UNPKG

acr-assist-simulator-module

Version:

This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.7.4.

152 lines (151 loc) 18.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Injectable } from '@angular/core'; import { ArrayCheckerService } from './array-checker.service'; import { DecisionPoint } from '../../../core/models/decisionpoint.model'; import { Branch } from '../../../core//models/branch.model'; import { EndPointRef } from '../../../core/models/endpointref.model'; import { DataElementRef } from '../../../core/models/dataelementref.model'; import { NotRelevantDataElements } from '../../../core/models/notrelevantdataelements.model'; import { ConditionsCreationService } from './conditions-creation.service'; import { ComputedValueCreationService } from './computed-value-creation.service'; export class DecisionPointsCreationService { /** * @param {?} arrayCheckerService * @param {?} conditionsCreationService * @param {?} computedValueCreationService */ constructor(arrayCheckerService, conditionsCreationService, computedValueCreationService) { this.arrayCheckerService = arrayCheckerService; this.conditionsCreationService = conditionsCreationService; this.computedValueCreationService = computedValueCreationService; } /** * @param {?} dataElementRefJSON * @return {?} */ createRelevantDataElementReferences(dataElementRefJSON) { const /** @type {?} */ dataElementRef = new DataElementRef(); dataElementRef.dataElementId = dataElementRefJSON.Attr.DataElementId; return dataElementRef; } /** * @param {?} branchJSON * @return {?} */ returnBranch(branchJSON) { const /** @type {?} */ branch = new Branch(); branch.label = branchJSON.Label; if (branchJSON.EndPointRef) { branch.endPointRef = new EndPointRef(); branch.endPointRef.endPointId = branchJSON.EndPointRef.Attr.EndPointId; } branch.condition = this.conditionsCreationService.returnCondition(branchJSON); branch.computedValue = this.computedValueCreationService.createComputedValue(branchJSON); if (this.conditionsCreationService.isComposite(branchJSON)) { branch.compositeCondition = this.conditionsCreationService.returnCompositeCondition(branchJSON); } if (branchJSON.NotRelevantDataElements) { const /** @type {?} */ notRelevantDataElements = new NotRelevantDataElements(); notRelevantDataElements.dataElementReferences = new Array(); const /** @type {?} */ dataElementRefs = branchJSON.NotRelevantDataElements.DataElementRef; if (this.arrayCheckerService.isArray(dataElementRefs)) { for (const /** @type {?} */ dataElementRefJSON of dataElementRefs) { notRelevantDataElements.dataElementReferences.push(this.createRelevantDataElementReferences(dataElementRefJSON)); } } else { notRelevantDataElements.dataElementReferences.push(this.createRelevantDataElementReferences(dataElementRefs)); } branch.notRelevantDataElements = notRelevantDataElements; } if (branchJSON.DecisionPoint) { branch.decisionPoints = new Array(); this.addDecisionPoints(branchJSON.DecisionPoint, branch.decisionPoints); } return branch; } /** * @param {?} decsionPointAsJSON * @param {?} decisionPoints * @return {?} */ addDecisionPoint(decsionPointAsJSON, decisionPoints) { const /** @type {?} */ decisionPoint = new DecisionPoint(); if (decsionPointAsJSON.Attr && decsionPointAsJSON.Attr.Id) { decisionPoint.id = decsionPointAsJSON.Attr.Id; } decisionPoint.label = decsionPointAsJSON.Label; const /** @type {?} */ branchesJSON = decsionPointAsJSON.Branch; if (branchesJSON !== undefined) { decisionPoint.branches = new Array(); if (this.arrayCheckerService.isArray(branchesJSON)) { for (const /** @type {?} */ branchJSON of branchesJSON) { decisionPoint.branches.push(this.returnBranch(branchJSON)); } } else { decisionPoint.branches.push(this.returnBranch(branchesJSON)); } const /** @type {?} */ defaultBranchJSON = decsionPointAsJSON.DefaultBranch; if (defaultBranchJSON !== undefined) { decisionPoint.defaultBranch = this.createDefaultBranch(defaultBranchJSON); } } decisionPoints.push(decisionPoint); } /** * @param {?} decsionPointsAsJSON * @param {?} decisionPoints * @return {?} */ addDecisionPoints(decsionPointsAsJSON, decisionPoints) { if (this.arrayCheckerService.isArray(decsionPointsAsJSON)) { for (const /** @type {?} */ decisionPoint of decsionPointsAsJSON) { this.addDecisionPoint(decisionPoint, decisionPoints); } } else { this.addDecisionPoint(decsionPointsAsJSON, decisionPoints); } } /** * @param {?} data * @return {?} */ createDecisionPoints(data) { const /** @type {?} */ decisionPoints = new Array(); this.addDecisionPoints(data, decisionPoints); return decisionPoints; } /** * @param {?} data * @return {?} */ createDefaultBranch(data) { const /** @type {?} */ defaultBranch = new Branch(); defaultBranch.label = 'Default Branch'; defaultBranch.computedValue = this.computedValueCreationService.createComputedValue(data); return defaultBranch; } } DecisionPointsCreationService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ DecisionPointsCreationService.ctorParameters = () => [ { type: ArrayCheckerService }, { type: ConditionsCreationService }, { type: ComputedValueCreationService } ]; function DecisionPointsCreationService_tsickle_Closure_declarations() { /** @type {?} */ DecisionPointsCreationService.prototype.arrayCheckerService; /** @type {?} */ DecisionPointsCreationService.prototype.conditionsCreationService; /** @type {?} */ DecisionPointsCreationService.prototype.computedValueCreationService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaXNpb24tcG9pbnRzLWNyZWF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hY3ItYXNzaXN0LXNpbXVsYXRvci1tb2R1bGUvIiwic291cmNlcyI6WyJzcmMvYXBwL21vZHVsZXMvYWNyLWFzc2lzdC1zaW11bGF0b3Ivc2hhcmVkL3NlcnZpY2VzL2RlY2lzaW9uLXBvaW50cy1jcmVhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM3RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUdqRixNQUFNOzs7Ozs7SUFFSixZQUFvQixtQkFBd0MsRUFDbEQsMkJBQ0Y7UUFGWSx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ2xELDhCQUF5QixHQUF6Qix5QkFBeUI7UUFDM0IsaUNBQTRCLEdBQTVCLDRCQUE0QjtLQUVuQzs7Ozs7SUFFTyxtQ0FBbUMsQ0FBQyxrQkFBa0I7UUFDMUQsdUJBQU0sY0FBYyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDNUMsY0FBYyxDQUFDLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3JFLE1B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Ozs7O0lBR0gsb0JBQW9CLENBQUMsSUFBUztRQUM1Qix1QkFBTSxjQUFjLEdBQUcsSUFBSSxLQUFLLEVBQWlCLENBQUM7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3ZCOzs7OztJQUdELG1CQUFtQixDQUFDLElBQVM7UUFDM0IsdUJBQU0sYUFBYSxHQUFZLElBQUksTUFBTSxFQUFFLENBQUM7UUFDNUMsYUFBYSxDQUFDLEtBQUssR0FBSSxnQkFBZ0IsQ0FBQztRQUN4QyxhQUFhLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRixNQUFNLENBQUMsYUFBYSxDQUFDO0tBQ3RCOzs7WUFoR0YsVUFBVTs7OztZQVRGLG1CQUFtQjtZQU1uQix5QkFBeUI7WUFDekIsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSdWxlcyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvcnVsZXMvbW9kZWxzL3J1bGVzLm1vZGVsJztcclxuaW1wb3J0IHsgQXJyYXlDaGVja2VyU2VydmljZSB9IGZyb20gJy4vYXJyYXktY2hlY2tlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGVjaXNpb25Qb2ludCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2RlY2lzaW9ucG9pbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBCcmFuY2ggfSBmcm9tICcuLi8uLi8uLi9jb3JlLy9tb2RlbHMvYnJhbmNoLm1vZGVsJztcclxuaW1wb3J0IHsgRW5kUG9pbnRSZWYgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9lbmRwb2ludHJlZi5tb2RlbCc7XHJcbmltcG9ydCB7IERhdGFFbGVtZW50UmVmIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvZGF0YWVsZW1lbnRyZWYubW9kZWwnO1xyXG5pbXBvcnQgeyBOb3RSZWxldmFudERhdGFFbGVtZW50cyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL25vdHJlbGV2YW50ZGF0YWVsZW1lbnRzLm1vZGVsJztcclxuaW1wb3J0IHsgQ29uZGl0aW9uc0NyZWF0aW9uU2VydmljZSB9IGZyb20gJy4vY29uZGl0aW9ucy1jcmVhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcHV0ZWRWYWx1ZUNyZWF0aW9uU2VydmljZSB9IGZyb20gJy4vY29tcHV0ZWQtdmFsdWUtY3JlYXRpb24uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEZWNpc2lvblBvaW50c0NyZWF0aW9uU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXJyYXlDaGVja2VyU2VydmljZTogQXJyYXlDaGVja2VyU2VydmljZSAsXHJcbiAgICBwcml2YXRlIGNvbmRpdGlvbnNDcmVhdGlvblNlcnZpY2U6IENvbmRpdGlvbnNDcmVhdGlvblNlcnZpY2UsXHJcbiAgcHJpdmF0ZSBjb21wdXRlZFZhbHVlQ3JlYXRpb25TZXJ2aWNlOiBDb21wdXRlZFZhbHVlQ3JlYXRpb25TZXJ2aWNlICkge1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlUmVsZXZhbnREYXRhRWxlbWVudFJlZmVyZW5jZXMoZGF0YUVsZW1lbnRSZWZKU09OKTogRGF0YUVsZW1lbnRSZWYgICAgIHtcclxuICAgICAgY29uc3QgZGF0YUVsZW1lbnRSZWYgPSBuZXcgRGF0YUVsZW1lbnRSZWYoKTtcclxuICAgICAgZGF0YUVsZW1lbnRSZWYuZGF0YUVsZW1lbnRJZCA9IGRhdGFFbGVtZW50UmVmSlNPTi5BdHRyLkRhdGFFbGVtZW50SWQ7XHJcbiAgICAgIHJldHVybiBkYXRhRWxlbWVudFJlZjtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlICByZXR1cm5CcmFuY2goYnJhbmNoSlNPTik6IEJyYW5jaCB7XHJcbiAgICBjb25zdCBicmFuY2ggPSBuZXcgQnJhbmNoKCk7XHJcbiAgICBicmFuY2gubGFiZWwgPSBicmFuY2hKU09OLkxhYmVsO1xyXG4gICAgaWYgKGJyYW5jaEpTT04uRW5kUG9pbnRSZWYpIHtcclxuICAgICAgYnJhbmNoLmVuZFBvaW50UmVmID0gbmV3IEVuZFBvaW50UmVmKCk7XHJcbiAgICAgIGJyYW5jaC5lbmRQb2ludFJlZi5lbmRQb2ludElkID0gYnJhbmNoSlNPTi5FbmRQb2ludFJlZi5BdHRyLkVuZFBvaW50SWQ7XHJcbiAgICB9XHJcbiAgICBicmFuY2guY29uZGl0aW9uID0gdGhpcy5jb25kaXRpb25zQ3JlYXRpb25TZXJ2aWNlLnJldHVybkNvbmRpdGlvbihicmFuY2hKU09OKTtcclxuICAgIGJyYW5jaC5jb21wdXRlZFZhbHVlID0gdGhpcy5jb21wdXRlZFZhbHVlQ3JlYXRpb25TZXJ2aWNlLmNyZWF0ZUNvbXB1dGVkVmFsdWUoYnJhbmNoSlNPTik7XHJcbiAgICBpZiAodGhpcy5jb25kaXRpb25zQ3JlYXRpb25TZXJ2aWNlLmlzQ29tcG9zaXRlKGJyYW5jaEpTT04pKSB7XHJcbiAgICAgICAgIGJyYW5jaC5jb21wb3NpdGVDb25kaXRpb24gPSB0aGlzLmNvbmRpdGlvbnNDcmVhdGlvblNlcnZpY2UucmV0dXJuQ29tcG9zaXRlQ29uZGl0aW9uKGJyYW5jaEpTT04pO1xyXG4gICAgfVxyXG4gICAgaWYgKGJyYW5jaEpTT04uTm90UmVsZXZhbnREYXRhRWxlbWVudHMpIHtcclxuICAgICAgICAgICBjb25zdCBub3RSZWxldmFudERhdGFFbGVtZW50cyA9IG5ldyBOb3RSZWxldmFudERhdGFFbGVtZW50cygpO1xyXG4gICAgICAgICAgbm90UmVsZXZhbnREYXRhRWxlbWVudHMuZGF0YUVsZW1lbnRSZWZlcmVuY2VzID0gbmV3IEFycmF5PERhdGFFbGVtZW50UmVmPigpO1xyXG4gICAgICAgICAgY29uc3QgZGF0YUVsZW1lbnRSZWZzID0gYnJhbmNoSlNPTi5Ob3RSZWxldmFudERhdGFFbGVtZW50cy5EYXRhRWxlbWVudFJlZjtcclxuICAgICAgICAgIGlmICh0aGlzLmFycmF5Q2hlY2tlclNlcnZpY2UuaXNBcnJheShkYXRhRWxlbWVudFJlZnMpKSB7XHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkYXRhRWxlbWVudFJlZkpTT04gb2YgIGRhdGFFbGVtZW50UmVmcykge1xyXG4gICAgICAgICAgICAgICAgbm90UmVsZXZhbnREYXRhRWxlbWVudHMuZGF0YUVsZW1lbnRSZWZlcmVuY2VzLnB1c2godGhpcy5jcmVhdGVSZWxldmFudERhdGFFbGVtZW50UmVmZXJlbmNlcyhkYXRhRWxlbWVudFJlZkpTT04pKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBub3RSZWxldmFudERhdGFFbGVtZW50cy5kYXRhRWxlbWVudFJlZmVyZW5jZXMucHVzaCh0aGlzLmNyZWF0ZVJlbGV2YW50RGF0YUVsZW1lbnRSZWZlcmVuY2VzKGRhdGFFbGVtZW50UmVmcykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJhbmNoLm5vdFJlbGV2YW50RGF0YUVsZW1lbnRzID0gbm90UmVsZXZhbnREYXRhRWxlbWVudHM7XHJcbiAgICB9XHJcbiAgICBpZiAoYnJhbmNoSlNPTi5EZWNpc2lvblBvaW50KSB7XHJcbiAgICAgICBicmFuY2guZGVjaXNpb25Qb2ludHMgPSBuZXcgQXJyYXk8RGVjaXNpb25Qb2ludD4oKTtcclxuICAgICAgIHRoaXMuYWRkRGVjaXNpb25Qb2ludHMoYnJhbmNoSlNPTi5EZWNpc2lvblBvaW50LCAgYnJhbmNoLmRlY2lzaW9uUG9pbnRzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBicmFuY2g7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBhZGREZWNpc2lvblBvaW50KGRlY3Npb25Qb2ludEFzSlNPTjogYW55ICwgZGVjaXNpb25Qb2ludHM6IERlY2lzaW9uUG9pbnRbXSkge1xyXG4gICAgIGNvbnN0IGRlY2lzaW9uUG9pbnQgPSBuZXcgRGVjaXNpb25Qb2ludCgpO1xyXG4gICAgICBpZiAoZGVjc2lvblBvaW50QXNKU09OLkF0dHIgJiYgZGVjc2lvblBvaW50QXNKU09OLkF0dHIuSWQpIHtcclxuICAgICAgICBkZWNpc2lvblBvaW50LmlkID0gZGVjc2lvblBvaW50QXNKU09OLkF0dHIuSWQ7XHJcbiAgICAgfVxyXG4gICAgIGRlY2lzaW9uUG9pbnQubGFiZWwgPSBkZWNzaW9uUG9pbnRBc0pTT04uTGFiZWw7XHJcbiAgICAgIGNvbnN0IGJyYW5jaGVzSlNPTiA9IGRlY3Npb25Qb2ludEFzSlNPTi5CcmFuY2g7XHJcbiAgICAgaWYgKGJyYW5jaGVzSlNPTiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGRlY2lzaW9uUG9pbnQuYnJhbmNoZXMgPSBuZXcgQXJyYXk8QnJhbmNoPigpO1xyXG4gICAgICBpZiAodGhpcy5hcnJheUNoZWNrZXJTZXJ2aWNlLmlzQXJyYXkoYnJhbmNoZXNKU09OKSkgIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGJyYW5jaEpTT04gb2YgYnJhbmNoZXNKU09OKSB7XHJcbiAgICAgICAgICBkZWNpc2lvblBvaW50LmJyYW5jaGVzLnB1c2godGhpcy5yZXR1cm5CcmFuY2goYnJhbmNoSlNPTikpO1xyXG4gICAgICAgIH1cclxuICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGVjaXNpb25Qb2ludC5icmFuY2hlcy5wdXNoKHRoaXMucmV0dXJuQnJhbmNoKGJyYW5jaGVzSlNPTikpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRlZmF1bHRCcmFuY2hKU09OID0gZGVjc2lvblBvaW50QXNKU09OLkRlZmF1bHRCcmFuY2g7XHJcbiAgICAgIGlmIChkZWZhdWx0QnJhbmNoSlNPTiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZGVjaXNpb25Qb2ludC5kZWZhdWx0QnJhbmNoID0gdGhpcy5jcmVhdGVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2hKU09OKTtcclxuICAgICAgfVxyXG5cclxuICAgICB9XHJcbiAgICAgZGVjaXNpb25Qb2ludHMucHVzaChkZWNpc2lvblBvaW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkRGVjaXNpb25Qb2ludHMoZGVjc2lvblBvaW50c0FzSlNPTjogYW55ICwgZGVjaXNpb25Qb2ludHM6IERlY2lzaW9uUG9pbnRbXSkge1xyXG4gICAgaWYgKHRoaXMuYXJyYXlDaGVja2VyU2VydmljZS5pc0FycmF5KGRlY3Npb25Qb2ludHNBc0pTT04pKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBkZWNpc2lvblBvaW50IG9mICBkZWNzaW9uUG9pbnRzQXNKU09OKXtcclxuICAgICAgICAgIHRoaXMuYWRkRGVjaXNpb25Qb2ludChkZWNpc2lvblBvaW50LCBkZWNpc2lvblBvaW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGREZWNpc2lvblBvaW50KGRlY3Npb25Qb2ludHNBc0pTT04sIGRlY2lzaW9uUG9pbnRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZURlY2lzaW9uUG9pbnRzKGRhdGE6IGFueSk6IERlY2lzaW9uUG9pbnRbXSB7XHJcbiAgICBjb25zdCBkZWNpc2lvblBvaW50cyA9IG5ldyBBcnJheTxEZWNpc2lvblBvaW50PigpO1xyXG4gICAgdGhpcy5hZGREZWNpc2lvblBvaW50cyhkYXRhLCBkZWNpc2lvblBvaW50cyk7XHJcbiAgICByZXR1cm4gZGVjaXNpb25Qb2ludHM7XHJcbiAgfVxyXG5cclxuXHJcbiAgY3JlYXRlRGVmYXVsdEJyYW5jaChkYXRhOiBhbnkpOiBCcmFuY2gge1xyXG4gICAgY29uc3QgZGVmYXVsdEJyYW5jaDogQnJhbmNoICA9IG5ldyBCcmFuY2goKTtcclxuICAgIGRlZmF1bHRCcmFuY2gubGFiZWwgPSAgJ0RlZmF1bHQgQnJhbmNoJztcclxuICAgIGRlZmF1bHRCcmFuY2guY29tcHV0ZWRWYWx1ZSA9IHRoaXMuY29tcHV0ZWRWYWx1ZUNyZWF0aW9uU2VydmljZS5jcmVhdGVDb21wdXRlZFZhbHVlKGRhdGEpO1xyXG4gICAgcmV0dXJuIGRlZmF1bHRCcmFuY2g7XHJcbiAgfVxyXG59XHJcbiJdfQ==