UNPKG

acr-assist-simulator-module

Version:

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

236 lines (235 loc) 34.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, Output, EventEmitter } from '@angular/core'; import { MultiChoiceDataElement } from '../../../core/elements/models/multi-choice-data-element'; import { MultiChoiceElement } from '../assist-data-element.component'; import { FormBuilder, Validators } from '@angular/forms'; import { SelectedCondition } from '../../../core/models/executed-result.model'; import { SimulatorEngineService } from '../../../core/services/simulator-engine.service'; var /** @type {?} */ $ = require('jquery'); var AssistMultiChoiceElementComponent = /** @class */ (function () { function AssistMultiChoiceElementComponent(formBuilder, simulatorEngineService) { this.formBuilder = formBuilder; this.simulatorEngineService = simulatorEngineService; this.returnMultiChoice = new EventEmitter(); this.multiElements = []; this.multiChoiceValues = []; this.multiChoiceComaprisonValues = []; this.choiceValue = []; } /** * @return {?} */ AssistMultiChoiceElementComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.createMultiChoiceElementForm(); }; /** * @return {?} */ AssistMultiChoiceElementComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { if (this.multiChoiceElement.currentValue !== undefined) { var /** @type {?} */ values = []; var /** @type {?} */ labels = []; for (var /** @type {?} */ choice in this.multiChoiceElement.choiceInfo) { if (Array.isArray(this.multiChoiceElement.currentValue)) { try { for (var _a = tslib_1.__values(this.multiChoiceElement.currentValue), _b = _a.next(); !_b.done; _b = _a.next()) { var currValue = _b.value; if (currValue === this.multiChoiceElement.choiceInfo[choice].value && this.multiChoiceElement.choiceInfo[choice].value !== undefined) { this.choiceValue = this.multiChoiceElement.currentValue; $('#' + this.multiChoiceElement.id + '_' + this.multiChoiceElement.choiceInfo[choice].value).prop('checked', true); values.push(currValue); labels.push(this.multiChoiceElement.choiceInfo[choice].label); break; } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_b && !_b.done && (_c = _a.return)) _c.call(_a); } finally { if (e_1) throw e_1.error; } } } else { if (this.multiChoiceElement.currentValue === this.multiChoiceElement.choiceInfo[choice].value && this.multiChoiceElement.choiceInfo[choice].value !== undefined) { this.choiceValue = this.multiChoiceElement.currentValue; $('#' + this.multiChoiceElement.id + '_' + this.multiChoiceElement.currentValue).prop('checked', true); values.push(this.multiChoiceElement.currentValue); labels.push(this.multiChoiceElement.choiceInfo[choice].label); } } } this.selectedMultiChoice(this.multiChoiceElement.id, this.multiChoiceElement.label, values, labels); } else { this.returnMultiChoice.emit(undefined); } var e_1, _c; }; /** * @param {?} elementId * @param {?} selectedCondition * @param {?} choiceValue * @param {?} choiceLabel * @return {?} */ AssistMultiChoiceElementComponent.prototype.selectedMultiChoice = /** * @param {?} elementId * @param {?} selectedCondition * @param {?} choiceValue * @param {?} choiceLabel * @return {?} */ function (elementId, selectedCondition, choiceValue, choiceLabel) { var /** @type {?} */ multiElement = new MultiChoiceElement(); if ($('#' + elementId + '_' + choiceValue).is(':checked')) { this.multiChoiceValues = choiceLabel; this.multiChoiceComaprisonValues = choiceValue; } else { var /** @type {?} */ index = this.multiChoiceValues.indexOf(choiceLabel); var /** @type {?} */ comparisonIndex = this.multiChoiceComaprisonValues.indexOf(choiceValue); if (index > -1) { this.multiChoiceValues.splice(index, 1); } if (comparisonIndex > -1) { this.multiChoiceComaprisonValues.splice(comparisonIndex, 1); } } multiElement.elementId = elementId; multiElement.selectedValues = this.multiChoiceValues; multiElement.selectedComparisonValues = this.multiChoiceComaprisonValues; this.selectedCondition = new SelectedCondition(); this.selectedCondition.selectedConditionId = elementId; this.selectedCondition.selectedCondition = selectedCondition; this.selectedCondition.selectedValue = this.multiChoiceValues; this.returnMultiChoice.emit({ receivedElement: multiElement, selectedCondition: this.selectedCondition }); }; /** * @param {?} elementId * @param {?} selectedCondition * @param {?} value * @param {?} event * @return {?} */ AssistMultiChoiceElementComponent.prototype.updateMultiChoice = /** * @param {?} elementId * @param {?} selectedCondition * @param {?} value * @param {?} event * @return {?} */ function (elementId, selectedCondition, value, event) { var /** @type {?} */ multiElement = new MultiChoiceElement(); if (event.currentTarget.checked) { this.multiChoiceValues.push(value); this.multiChoiceComaprisonValues.push(event.currentTarget.value); } else { var /** @type {?} */ index = this.multiChoiceValues.indexOf(value); var /** @type {?} */ comparisonIndex = this.multiChoiceComaprisonValues.indexOf(event.currentTarget.value); if (index > -1) { this.multiChoiceValues.splice(index, 1); } if (comparisonIndex > -1) { this.multiChoiceComaprisonValues.splice(comparisonIndex, 1); } } multiElement.elementId = elementId; multiElement.selectedValues = this.multiChoiceValues; multiElement.selectedComparisonValues = this.multiChoiceComaprisonValues; this.selectedCondition = new SelectedCondition(); this.selectedCondition.selectedConditionId = elementId; this.selectedCondition.selectedCondition = selectedCondition; this.selectedCondition.selectedValue = this.multiChoiceValues; this.returnMultiChoice.emit({ receivedElement: multiElement, selectedCondition: this.selectedCondition }); }; /** * @return {?} */ AssistMultiChoiceElementComponent.prototype.createMultiChoiceElementForm = /** * @return {?} */ function () { this.multiChoiceElementForm = this.formBuilder.group({ multiCheckBox: ['', Validators.required], }, { validator: this.specificValueInsideRange('multiCheckBox') }); }; /** * @param {?} checkBoxKey * @return {?} */ AssistMultiChoiceElementComponent.prototype.specificValueInsideRange = /** * @param {?} checkBoxKey * @return {?} */ function (checkBoxKey) { var _this = this; return function (group) { var /** @type {?} */ choiceControl = group.controls[checkBoxKey]; if (_this.multiChoiceElement.isRequired) { return choiceControl.setErrors({ notEquivalent: true }); } else { return choiceControl.setErrors(null); } }; }; AssistMultiChoiceElementComponent.decorators = [ { type: Component, args: [{ selector: 'acr-assist-multi-choice-element', template: "<form [formGroup]=\"multiChoiceElementForm\" novalidate>\n <div class=\"form-group\">\n <div class=\"col-sm-5 text-right\">\n <label class=\"control-label break-word\">{{multiChoiceElement.label}} <span *ngIf=\"multiChoiceElement.unit != undefined && multiChoiceElement.unit != ''\"> ({{multiChoiceElement.unit}})</span>\n </label>\n <ng-container *ngIf=\"multiChoiceElement.hint !== '' && multiChoiceElement.hint !== undefined\">\n <i class=\"fa fa-info-circle text-primary whitespace\" title=\"{{multiChoiceElement.hint}}\"></i>\n </ng-container>\n <ng-container *ngIf=\"multiChoiceElement.diagrams != undefined \">\n <acr-hint-diagram [dataElement]=\"multiChoiceElement\" [imagePath]=\"imagePath\"></acr-hint-diagram>\n </ng-container>\n <ng-container *ngIf=\"multiChoiceElement.isRequired\">\n <span *ngIf=\"multiChoiceElementForm.controls['multiCheckBox'].invalid && !multiChoiceValues.length\" class=\"required-field\"\n title=\"Required Field\">\n *\n </span>\n </ng-container>\n </div>\n <div class=\"col-sm-7\" [ngClass]=\"multiChoiceElement.isEditable == false ? 'disabled-element' : ''\">\n <div *ngFor=\"let choice of multiChoiceElement.choiceInfo\" class=\"checkbox checkboxCustomized\" title=\"{{choice.hint}}\">\n <label [hidden]=\"multiChoiceElement.ChoiceNotRelevant != undefined ? \n multiChoiceElement.ChoiceNotRelevant.indexOf(choice.value) > -1 ? true: null\n : null\">\n <input type=\"checkbox\" id=\"{{multiChoiceElement.id}}_{{choice.value}}\" [checked]=\"false\" formControlName=\"multiCheckBox\"\n value=\"{{choice.value}}\" (change)=\"updateMultiChoice(multiChoiceElement.id, multiChoiceElement.label, (choice.reportText !== undefined) ? choice.reportText : choice.label, $event)\">\n {{choice.label}}\n </label>\n </div>\n </div>\n </div>\n</form>", styles: [".checkboxCustomized{min-height:0!important;padding-top:0!important}.disabled-element{cursor:not-allowed}.disabled-element:before{content:\"\";z-index:1;position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgba(255,255,255,.8)}", ".required-field{color:red}.padding-l-5{padding-left:5px}.whitespace{margin-left:5px}.max-w-h-100{max-width:100%;max-height:100%}.carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px}.carousel-control.left{background-repeat:repeat-x}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control.right{background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x}.scroll{overflow-y:scroll;overflow-x:hidden}.div-simulator-form-height{height:calc(100vh - 100px);overflow-y:scroll;overflow-x:hidden}.div-report-text-scroll{overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - 300px)}.padding-r-10{padding-right:10px}.slide-left{left:30px}.slide-right{right:30px}hr{margin-top:10px;margin-bottom:10px}.white-space-line{white-space:pre-line;word-wrap:break-word}p{margin:0 0 10px}.form-control{border-radius:0;box-shadow:none;border-color:#d2d6de}h4.modal-title.float-left{float:left}.margin-b-0{margin-bottom:0}.font-weight-400{font-weight:400}.custom-radio-style{float:left;margin-right:15px}.zoom{width:100%;overflow:auto}.zoom img{height:auto;width:100%;min-width:100%;max-width:inherit!important}.btn-zoom{background-color:#f4f4f4;color:#444;border-color:#ddd}.btn-zoom.hover,.btn-zoom:active,.btn-zoom:hover{background-color:#e7e7e7}@media (min-width:768px){label.control-label{padding-left:20px}}.padding-5{padding:5px}"] },] }, ]; /** @nocollapse */ AssistMultiChoiceElementComponent.ctorParameters = function () { return [ { type: FormBuilder }, { type: SimulatorEngineService } ]; }; AssistMultiChoiceElementComponent.propDecorators = { multiChoiceElement: [{ type: Input }], imagePath: [{ type: Input }], returnMultiChoice: [{ type: Output }] }; return AssistMultiChoiceElementComponent; }()); export { AssistMultiChoiceElementComponent }; function AssistMultiChoiceElementComponent_tsickle_Closure_declarations() { /** @type {?} */ AssistMultiChoiceElementComponent.prototype.multiChoiceElement; /** @type {?} */ AssistMultiChoiceElementComponent.prototype.imagePath; /** @type {?} */ AssistMultiChoiceElementComponent.prototype.returnMultiChoice; /** @type {?} */ AssistMultiChoiceElementComponent.prototype.multiElements; /** @type {?} */ AssistMultiChoiceElementComponent.prototype.multiChoiceValues; /** @type {?} */ AssistMultiChoiceElementComponent.prototype.multiChoiceComaprisonValues; /** @type {?} */ AssistMultiChoiceElementComponent.prototype.multiChoiceElementForm; /** @type {?} */ AssistMultiChoiceElementComponent.prototype.selectedCondition; /** @type {?} */ AssistMultiChoiceElementComponent.prototype.choiceValue; /** @type {?} */ AssistMultiChoiceElementComponent.prototype.formBuilder; /** @type {?} */ AssistMultiChoiceElementComponent.prototype.simulatorEngineService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaXN0LW11bHRpLWNob2ljZS1lbGVtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Fjci1hc3Npc3Qtc2ltdWxhdG9yLW1vZHVsZS8iLCJzb3VyY2VzIjpbInNyYy9hcHAvbW9kdWxlcy9hY3ItYXNzaXN0LXNpbXVsYXRvci9hc3Npc3QtZGF0YS1lbGVtZW50L2Fzc2lzdC1tdWx0aS1jaG9pY2UtZWxlbWVudC9hc3Npc3QtbXVsdGktY2hvaWNlLWVsZW1lbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDakcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFhLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN6RixxQkFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztJQWdEMUIsMkNBQW9CLFdBQXdCLEVBQVUsc0JBQThDO1FBQWhGLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtpQ0FSdEUsSUFBSSxZQUFZLEVBQUU7NkJBQ1YsRUFBRTtpQ0FDVixFQUFFOzJDQUNRLEVBQUU7MkJBR2xCLEVBQUU7S0FFK0U7Ozs7SUFFekcsb0RBQVE7OztJQUFSO1FBQ0UsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7S0FDckM7Ozs7SUFDRCwyREFBZTs7O0lBQWY7UUFFRSxFQUFFLENBQUMsQ0FBQyxJQUFJ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dkMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUN6RDtZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RDO1NBQ0YsQ0FBQzs7O2dCQXhKTCxTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGlDQUFpQztvQkFDM0MsUUFBUSxFQUFFLDg0REE4Qko7b0JBQ04sTUFBTSxFQUFFLENBQUMsZ1BBQThPLEVBQUUsazdDQUFrN0MsQ0FBQztpQkFDN3FEOzs7O2dCQXZDbUIsV0FBVztnQkFFdEIsc0JBQXNCOzs7cUNBdUM1QixLQUFLOzRCQUNMLEtBQUs7b0NBQ0wsTUFBTTs7NENBOUNUOztTQTJDYSxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE11bHRpQ2hvaWNlRGF0YUVsZW1lbnQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VsZW1lbnRzL21vZGVscy9tdWx0aS1jaG9pY2UtZGF0YS1lbGVtZW50JztcclxuaW1wb3J0IHsgTXVsdGlDaG9pY2VFbGVtZW50IH0gZnJvbSAnLi4vYXNzaXN0LWRhdGEtZWxlbWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZENvbmRpdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2V4ZWN1dGVkLXJlc3VsdC5tb2RlbCc7XHJcbmltcG9ydCB7IFNpbXVsYXRvckVuZ2luZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3NpbXVsYXRvci1lbmdpbmUuc2VydmljZSc7XHJcbmNvbnN0ICQgPSByZXF1aXJlKCdqcXVlcnknKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWNyLWFzc2lzdC1tdWx0aS1jaG9pY2UtZWxlbWVudCcsXHJcbiAgdGVtcGxhdGU6IGA8Zm9ybSBbZm9ybUdyb3VwXT1cIm11bHRpQ2hvaWNlRWxlbWVudEZvcm1cIiBub3ZhbGlkYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTUgdGV4dC1yaWdodFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsIGJyZWFrLXdvcmRcIj57e211bHRpQ2hvaWNlRWxlbWVudC5sYWJlbH19IDxzcGFuICpuZ0lmPVwibXVsdGlDaG9pY2VFbGVtZW50LnVuaXQgIT0gdW5kZWZpbmVkICYmIG11bHRpQ2hvaWNlRWxlbWVudC51bml0ICE9ICcnXCI+ICh7e211bHRpQ2hvaWNlRWxlbWVudC51bml0fX0pPC9zcGFuPlxyXG4gICAgICA8L2xhYmVsPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibXVsdGlDaG9pY2VFbGVtZW50LmhpbnQgIT09ICcnICYmIG11bHRpQ2hvaWNlRWxlbWVudC5oaW50ICE9PSB1bmRlZmluZWRcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWluZm8tY2lyY2xlIHRleHQtcHJpbWFyeSB3aGl0ZXNwYWNlXCIgdGl0bGU9XCJ7e211bHRpQ2hvaWNlRWxlbWVudC5oaW50fX1cIj48L2k+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibXVsdGlDaG9pY2VFbGVtZW50LmRpYWdyYW1zICE9IHVuZGVmaW5lZCBcIj5cclxuICAgICAgICA8YWNyLWhpbnQtZGlhZ3JhbSBbZGF0YUVsZW1lbnRdPVwibXVsdGlDaG9pY2VFbGVtZW50XCIgW2ltYWdlUGF0aF09XCJpbWFnZVBhdGhcIj48L2Fjci1oaW50LWRpYWdyYW0+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibXVsdGlDaG9pY2VFbGVtZW50LmlzUmVxdWlyZWRcIj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJtdWx0aUNob2ljZUVsZW1lbnRGb3JtLmNvbnRyb2xzWydtdWx0aUNoZWNrQm94J10uaW52YWxpZCAmJiAhbXVsdGlDaG9pY2VWYWx1ZXMubGVuZ3RoXCIgY2xhc3M9XCJyZXF1aXJlZC1maWVsZFwiXHJcbiAgICAgICAgdGl0bGU9XCJSZXF1aXJlZCBGaWVsZFwiPlxyXG4gICAgICAgICpcclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tN1wiIFtuZ0NsYXNzXT1cIm11bHRpQ2hvaWNlRWxlbWVudC5pc0VkaXRhYmxlID09IGZhbHNlID8gJ2Rpc2FibGVkLWVsZW1lbnQnIDogJydcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2hvaWNlIG9mIG11bHRpQ2hvaWNlRWxlbWVudC5jaG9pY2VJbmZvXCIgY2xhc3M9XCJjaGVja2JveCBjaGVja2JveEN1c3RvbWl6ZWRcIiB0aXRsZT1cInt7Y2hvaWNlLmhpbnR9fVwiPlxyXG4gICAgICAgIDxsYWJlbCBbaGlkZGVuXT1cIm11bHRpQ2hvaWNlRWxlbWVudC5DaG9pY2VOb3RSZWxldmFudCAhPSB1bmRlZmluZWQgPyBcclxuICAgICAgICBtdWx0aUNob2ljZUVsZW1lbnQuQ2hvaWNlTm90UmVsZXZhbnQuaW5kZXhPZihjaG9pY2UudmFsdWUpID4gLTEgPyB0cnVlOiBudWxsXHJcbiAgICAgICAgOiBudWxsXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJ7e211bHRpQ2hvaWNlRWxlbWVudC5pZH19X3t7Y2hvaWNlLnZhbHVlfX1cIiBbY2hlY2tlZF09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cIm11bHRpQ2hlY2tCb3hcIlxyXG4gICAgICAgICAgICB2YWx1ZT1cInt7Y2hvaWNlLnZhbHVlfX1cIiAoY2hhbmdlKT1cInVwZGF0ZU11bHRpQ2hvaWNlKG11bHRpQ2hvaWNlRWxlbWVudC5pZCwgbXVsdGlDaG9pY2VFbGVtZW50LmxhYmVsLCAoY2hvaWNlLnJlcG9ydFRleHQgIT09IHVuZGVmaW5lZCkgPyBjaG9pY2UucmVwb3J0VGV4dCA6IGNob2ljZS5sYWJlbCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAge3tjaG9pY2UubGFiZWx9fVxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5gLFxyXG4gIHN0eWxlczogW2AuY2hlY2tib3hDdXN0b21pemVke21pbi1oZWlnaHQ6MCFpbXBvcnRhbnQ7cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9LmRpc2FibGVkLWVsZW1lbnR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZC1lbGVtZW50OmJlZm9yZXtjb250ZW50OlwiXCI7ei1pbmRleDoxO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOCl9YCwgYC5yZXF1aXJlZC1maWVsZHtjb2xvcjpyZWR9LnBhZGRpbmctbC01e3BhZGRpbmctbGVmdDo1cHh9LndoaXRlc3BhY2V7bWFyZ2luLWxlZnQ6NXB4fS5tYXgtdy1oLTEwMHttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNhcm91c2VsLWNvbnRyb2w+LmZhe2ZvbnQtc2l6ZTo0MHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7ei1pbmRleDo1O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6LTIwcHh9LmNhcm91c2VsLWNvbnRyb2wubGVmdHtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0uY2Fyb3VzZWwtY29udHJvbC5sZWZ0LC5jYXJvdXNlbC1jb250cm9sLnJpZ2h0e2JhY2tncm91bmQtaW1hZ2U6bm9uZX0uY2Fyb3VzZWwtY29udHJvbC5yaWdodHtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC4wMDAxKSAwLHJnYmEoMCwwLDAsLjUpIDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5zY3JvbGx7b3ZlcmZsb3cteTpzY3JvbGw7b3ZlcmZsb3cteDpoaWRkZW59LmRpdi1zaW11bGF0b3ItZm9ybS1oZWlnaHR7aGVpZ2h0OmNhbGMoMTAwdmggLSAxMDBweCk7b3ZlcmZsb3cteTpzY3JvbGw7b3ZlcmZsb3cteDpoaWRkZW59LmRpdi1yZXBvcnQtdGV4dC1zY3JvbGx7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDMwMHB4KX0ucGFkZGluZy1yLTEwe3BhZGRpbmctcmlnaHQ6MTBweH0uc2xpZGUtbGVmdHtsZWZ0OjMwcHh9LnNsaWRlLXJpZ2h0e3JpZ2h0OjMwcHh9aHJ7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweH0ud2hpdGUtc3BhY2UtbGluZXt3aGl0ZS1zcGFjZTpwcmUtbGluZTt3b3JkLXdyYXA6YnJlYWstd29yZH1we21hcmdpbjowIDAgMTBweH0uZm9ybS1jb250cm9se2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7Ym9yZGVyLWNvbG9yOiNkMmQ2ZGV9aDQubW9kYWwtdGl0bGUuZmxvYXQtbGVmdHtmbG9hdDpsZWZ0fS5tYXJnaW4tYi0we21hcmdpbi1ib3R0b206MH0uZm9udC13ZWlnaHQtNDAwe2ZvbnQtd2VpZ2h0OjQwMH0uY3VzdG9tLXJhZGlvLXN0eWxle2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjE1cHh9Lnpvb217d2lkdGg6MTAwJTtvdmVyZmxvdzphdXRvfS56b29tIGltZ3toZWlnaHQ6YXV0bzt3aWR0aDoxMDAlO21pbi13aWR0aDoxMDAlO21heC13aWR0aDppbmhlcml0IWltcG9ydGFudH0uYnRuLXpvb217YmFja2dyb3VuZC1jb2xvcjojZjRmNGY0O2NvbG9yOiM0NDQ7Ym9yZGVyLWNvbG9yOiNkZGR9LmJ0bi16b29tLmhvdmVyLC5idG4tem9vbTphY3RpdmUsLmJ0bi16b29tOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U3ZTdlN31AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7bGFiZWwuY29udHJvbC1sYWJlbHtwYWRkaW5nLWxlZnQ6MjBweH19LnBhZGRpbmctNXtwYWRkaW5nOjVweH1gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXNzaXN0TXVsdGlDaG9pY2VFbGVtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSBtdWx0aUNob2ljZUVsZW1lbnQ6IE11bHRpQ2hvaWNlRGF0YUVsZW1lbnQ7XHJcbiAgQElucHV0KCkgaW1hZ2VQYXRoOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHJldHVybk11bHRpQ2hvaWNlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIG11bHRpRWxlbWVudHM6IE11bHRpQ2hvaWNlRWxlbWVudFtdID0gW107XHJcbiAgbXVsdGlDaG9pY2VWYWx1ZXM6IHN0cmluZ1tdID0gW107XHJcbiAgbXVsdGlDaG9pY2VDb21hcHJpc29uVmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIG11bHRpQ2hvaWNlRWxlbWVudEZvcm06IEZvcm1Hcm91cDtcclxuICBzZWxlY3RlZENvbmRpdGlvbjogU2VsZWN0ZWRDb25kaXRpb247XHJcbiAgY2hvaWNlVmFsdWU6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIHNpbXVsYXRvckVuZ2luZVNlcnZpY2U6IFNpbXVsYXRvckVuZ2luZVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY3JlYXRlTXVsdGlDaG9pY2VFbGVtZW50Rm9ybSgpO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMubXVsdGlDaG9pY2VFbGVtZW50LmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlczogYW55ID0gW107XHJcbiAgICAgIGNvbnN0IGxhYmVsczogYW55ID0gW107XHJcbiAgICAgIGZvciAoY29uc3QgY2hvaWNlIGluIHRoaXMubXVsdGlDaG9pY2VFbGVtZW50LmNob2ljZUluZm8pIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm11bHRpQ2hvaWNlRWxlbWVudC5jdXJyZW50VmFsdWUpKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJWYWx1ZSBvZiB0aGlzLm11bHRpQ2hvaWNlRWxlbWVudC5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSA9PT0gdGhpcy5tdWx0aUNob2ljZUVsZW1lbnQuY2hvaWNlSW5mb1tjaG9pY2VdLnZhbHVlICYmIHRoaXMubXVsdGlDaG9pY2VFbGVtZW50LmNob2ljZUluZm9bY2hvaWNlXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaG9pY2VWYWx1ZSA9IHRoaXMubXVsdGlDaG9pY2VFbGVtZW50LmN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAkKCcjJyArIHRoaXMubXVsdGlDaG9pY2VFbGVtZW50LmlkICsgJ18nICsgdGhpcy5tdWx0aUNob2ljZUVsZW1lbnQuY2hvaWNlSW5mb1tjaG9pY2VdLnZhbHVlKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdmFsdWVzLnB1c2goY3VyclZhbHVlKTtcclxuICAgICAgICAgICAgICBsYWJlbHMucHVzaCh0aGlzLm11bHRpQ2hvaWNlRWxlbWVudC5jaG9pY2VJbmZvW2Nob2ljZV0ubGFiZWwpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLm11bHRpQ2hvaWNlRWxlbWVudC5jdXJyZW50VmFsdWUgPT09IHRoaXMubXVsdGlDaG9pY2VFbGVtZW50LmNob2ljZUluZm9bY2hvaWNlXS52YWx1ZSAmJiB0aGlzLm11bHRpQ2hvaWNlRWxlbWVudC5jaG9pY2VJbmZvW2Nob2ljZV0udmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNob2ljZVZhbHVlID0gdGhpcy5tdWx0aUNob2ljZUVsZW1lbnQuY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgICAkKCcjJyArIHRoaXMubXVsdGlDaG9pY2VFbGVtZW50LmlkICsgJ18nICsgdGhpcy5tdWx0aUNob2ljZUVsZW1lbnQuY3VycmVudFZhbHVlKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMubXVsdGlDaG9pY2VFbGVtZW50LmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGxhYmVscy5wdXNoKHRoaXMubXVsdGlDaG9pY2VFbGVtZW50LmNob2ljZUluZm9bY2hvaWNlXS5sYWJlbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aUNob2ljZSh0aGlzLm11bHRpQ2hvaWNlRWxlbWVudC5pZCwgdGhpcy5tdWx0aUNob2ljZUVsZW1lbnQubGFiZWwsIHZhbHVlcywgbGFiZWxzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmV0dXJuTXVsdGlDaG9pY2UuZW1pdCh1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRNdWx0aUNob2ljZShlbGVtZW50SWQ6IHN0cmluZywgc2VsZWN0ZWRDb25kaXRpb246IHN0cmluZywgY2hvaWNlVmFsdWU6IGFueSwgY2hvaWNlTGFiZWw6IGFueSkge1xyXG4gICAgY29uc3QgbXVsdGlFbGVtZW50ID0gbmV3IE11bHRpQ2hvaWNlRWxlbWVudCgpO1xyXG4gICAgaWYgKCQoJyMnICsgZWxlbWVudElkICsgJ18nICsgY2hvaWNlVmFsdWUpLmlzKCc6Y2hlY2tlZCcpKSB7XHJcbiAgICAgIHRoaXMubXVsdGlDaG9pY2VWYWx1ZXMgPSBjaG9pY2VMYWJlbDtcclxuICAgICAgdGhpcy5tdWx0aUNob2ljZUNvbWFwcmlzb25WYWx1ZXMgPSBjaG9pY2VWYWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tdWx0aUNob2ljZVZhbHVlcy5pbmRleE9mKGNob2ljZUxhYmVsKTtcclxuICAgICAgY29uc3QgY29tcGFyaXNvbkluZGV4ID0gdGhpcy5tdWx0aUNob2ljZUNvbWFwcmlzb25WYWx1ZXMuaW5kZXhPZihjaG9pY2VWYWx1ZSk7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5tdWx0aUNob2ljZVZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb21wYXJpc29uSW5kZXggPiAtMSkge1xyXG4gICAgICAgIHRoaXMubXVsdGlDaG9pY2VDb21hcHJpc29uVmFsdWVzLnNwbGljZShjb21wYXJpc29uSW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBtdWx0aUVsZW1lbnQuZWxlbWVudElkID0gZWxlbWVudElkO1xyXG4gICAgbXVsdGlFbGVtZW50LnNlbGVjdGVkVmFsdWVzID0gdGhpcy5tdWx0aUNob2ljZVZhbHVlcztcclxuICAgIG11bHRpRWxlbWVudC5zZWxlY3RlZENvbXBhcmlzb25WYWx1ZXMgPSB0aGlzLm11bHRpQ2hvaWNlQ29tYXByaXNvblZhbHVlcztcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29uZGl0aW9uID0gbmV3IFNlbGVjdGVkQ29uZGl0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbmRpdGlvbi5zZWxlY3RlZENvbmRpdGlvbklkID0gZWxlbWVudElkO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbmRpdGlvbi5zZWxlY3RlZENvbmRpdGlvbiA9IHNlbGVjdGVkQ29uZGl0aW9uO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbmRpdGlvbi5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aUNob2ljZVZhbHVlcztcclxuICAgIHRoaXMucmV0dXJuTXVsdGlDaG9pY2UuZW1pdCh7IHJlY2VpdmVkRWxlbWVudDogbXVsdGlFbGVtZW50LCBzZWxlY3RlZENvbmRpdGlvbjogdGhpcy5zZWxlY3RlZENvbmRpdGlvbiB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU11bHRpQ2hvaWNlKGVsZW1lbnRJZDogc3RyaW5nLCBzZWxlY3RlZENvbmRpdGlvbjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBldmVudCkge1xyXG4gICAgY29uc3QgbXVsdGlFbGVtZW50ID0gbmV3IE11bHRpQ2hvaWNlRWxlbWVudCgpO1xyXG4gICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLm11bHRpQ2hvaWNlVmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICB0aGlzLm11bHRpQ2hvaWNlQ29tYXByaXNvblZhbHVlcy5wdXNoKGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm11bHRpQ2hvaWNlVmFsdWVzLmluZGV4T2YodmFsdWUpO1xyXG4gICAgICBjb25zdCBjb21wYXJpc29uSW5kZXggPSB0aGlzLm11bHRpQ2hvaWNlQ29tYXByaXNvblZhbHVlcy5pbmRleE9mKGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUpO1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIHRoaXMubXVsdGlDaG9pY2VWYWx1ZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29tcGFyaXNvbkluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLm11bHRpQ2hvaWNlQ29tYXByaXNvblZhbHVlcy5zcGxpY2UoY29tcGFyaXNvbkluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbXVsdGlFbGVtZW50LmVsZW1lbnRJZCA9IGVsZW1lbnRJZDtcclxuICAgIG11bHRpRWxlbWVudC5zZWxlY3RlZFZhbHVlcyA9IHRoaXMubXVsdGlDaG9pY2VWYWx1ZXM7XHJcbiAgICBtdWx0aUVsZW1lbnQuc2VsZWN0ZWRDb21wYXJpc29uVmFsdWVzID0gdGhpcy5tdWx0aUNob2ljZUNvbWFwcmlzb25WYWx1ZXM7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbmRpdGlvbiA9IG5ldyBTZWxlY3RlZENvbmRpdGlvbigpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24uc2VsZWN0ZWRDb25kaXRpb25JZCA9IGVsZW1lbnRJZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24uc2VsZWN0ZWRDb25kaXRpb24gPSBzZWxlY3RlZENvbmRpdGlvbjtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24uc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlDaG9pY2VWYWx1ZXM7XHJcbiAgICB0aGlzLnJldHVybk11bHRpQ2hvaWNlLmVtaXQoeyByZWNlaXZlZEVsZW1lbnQ6IG11bHRpRWxlbWVudCwgc2VsZWN0ZWRDb25kaXRpb246IHRoaXMuc2VsZWN0ZWRDb25kaXRpb24gfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU11bHRpQ2hvaWNlRWxlbWVudEZvcm0oKSB7XHJcbiAgICB0aGlzLm11bHRpQ2hvaWNlRWxlbWVudEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgbXVsdGlDaGVja0JveDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0sIHtcclxuICAgICAgICB2YWxpZGF0b3I6IHRoaXMuc3BlY2lmaWNWYWx1ZUluc2lkZVJhbmdlKCdtdWx0aUNoZWNrQm94JylcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNwZWNpZmljVmFsdWVJbnNpZGVSYW5nZShjaGVja0JveEtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApID0+IHtcclxuICAgICAgY29uc3QgY2hvaWNlQ29udHJvbCA9IGdyb3VwLmNvbnRyb2xzW2NoZWNrQm94S2V5XTtcclxuICAgICAgaWYgKHRoaXMubXVsdGlDaG9pY2VFbGVtZW50LmlzUmVxdWlyZWQpIHtcclxuICAgICAgICByZXR1cm4gY2hvaWNlQ29udHJvbC5zZXRFcnJvcnMoeyBub3RFcXVpdmFsZW50OiB0cnVlIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBjaG9pY2VDb250cm9sLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19