acr-assist-simulator-module
Version:
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.7.4.
198 lines (197 loc) • 27.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Component, Input, Output, EventEmitter } from '@angular/core';
import { NumericDataElement } from '../../../core/elements/models/numeric-data-element.model';
import { NumericElement } 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';
import { SimulatorCommunicationService } from '../../shared/services/simulator-communication.service';
export class AssistNumericElementComponent {
/**
* @param {?} formBuilder
* @param {?} simulatorEngineService
* @param {?} simulatorCommunicationService
*/
constructor(formBuilder, simulatorEngineService, simulatorCommunicationService) {
this.formBuilder = formBuilder;
this.simulatorEngineService = simulatorEngineService;
this.returnNumericElement = new EventEmitter();
this.subscription = simulatorCommunicationService.simulatorSource$.subscribe(mission => {
this.UpdateFormValidator();
});
}
/**
* @return {?}
*/
ngOnDestroy() {
// prevent memory leak when component destroyed
this.subscription.unsubscribe();
}
/**
* @return {?}
*/
ngOnInit() {
this.createNumericElementForm();
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
// console.log('asda');
}
/**
* @return {?}
*/
ngAfterViewInit() {
if (this.numericDataElement.currentValue !== undefined && this.numericDataElement.currentValue !== 0) {
this.simulatorEngineService.addOrUpdateDataElement(this.numericDataElement.id, this.numericDataElement.currentValue, this.numericDataElement.currentValue);
this.numberValue = this.numericDataElement.currentValue;
this.loadedNumericValue(this.numericDataElement.id, this.numericDataElement.currentValue, this.numericDataElement.label);
}
else {
this.returnNumericElement.emit(undefined);
}
}
/**
* @param {?} id
* @param {?} value
* @param {?} selectedCondition
* @return {?}
*/
loadedNumericValue(id, value, selectedCondition) {
const /** @type {?} */ choiceElement = new NumericElement();
choiceElement.elementId = id;
choiceElement.selectedValue = value;
this.selectedCondition = new SelectedCondition();
this.selectedCondition.selectedConditionId = id;
this.selectedCondition.selectedCondition = selectedCondition;
this.selectedCondition.selectedValue = value;
this.returnNumericElement.emit({ receivedElement: choiceElement, selectedCondition: this.selectedCondition });
}
/**
* @param {?} element
* @param {?} selectedCondition
* @return {?}
*/
choiceSelected(element, selectedCondition) {
const /** @type {?} */ choiceElement = new NumericElement();
choiceElement.elementId = element.id;
choiceElement.selectedValue = element.value;
this.selectedCondition = new SelectedCondition();
this.selectedCondition.selectedConditionId = element.id;
this.selectedCondition.selectedCondition = selectedCondition;
this.selectedCondition.selectedValue = element.value;
this.returnNumericElement.emit({ receivedElement: choiceElement, selectedCondition: this.selectedCondition });
}
/**
* @param {?} event
* @return {?}
*/
onlyIntegerKey(event) {
return (event.charCode === 8 || event.charCode === 0) ? null : event.charCode >= 48 && event.charCode <= 57;
}
/**
* @return {?}
*/
createNumericElementForm() {
this.numericElementForm = this.formBuilder.group({
numericElement: ['', Validators.compose([Validators.required, Validators.min(+this.numericDataElement.minimum), Validators.max(+this.numericDataElement.maximum)])],
});
}
/**
* @return {?}
*/
UpdateFormValidator() {
this.numericElementForm.controls['numericElement'].setValidators([Validators.compose([Validators.required,
Validators.min(+this.numericDataElement.minimum), Validators.max(+this.numericDataElement.maximum)])]);
this.numericElementForm.controls['numericElement'].updateValueAndValidity();
}
}
AssistNumericElementComponent.decorators = [
{ type: Component, args: [{
selector: 'acr-assist-numeric-element',
template: `<form [formGroup]="numericElementForm" novalidate>
<div class="form-group">
<div class="col-sm-5 text-right">
<label class="control-label break-word">
{{numericDataElement.label}}
<span *ngIf="numericDataElement.unit != undefined && numericDataElement.unit != ''"> ({{numericDataElement.unit}})</span>
</label>
<ng-container *ngIf="numericDataElement.hint !== '' && numericDataElement.hint !== undefined">
<i class="fa fa-info-circle text-primary whitespace" title="{{numericDataElement.hint}}"></i>
</ng-container>
<ng-container *ngIf="numericDataElement.diagrams != undefined ">
<acr-hint-diagram [dataElement]="numericDataElement" [imagePath]="imagePath"></acr-hint-diagram>
</ng-container>
<ng-container *ngIf="this.numericDataElement.isRequired">
<span *ngIf="numericElementForm.controls['numericElement'].invalid">
<span *ngIf="numericElementForm.controls['numericElement'].errors.required" class="required-field" title="Required Field">
*
</span>
</span>
</ng-container>
<span *ngIf="numericElementForm.controls['numericElement'].invalid && numericElementForm.controls['numericElement'].errors.min"
class="required-field" title=" Minimum value is {{numericDataElement.minimum}}">
*
</span>
<span *ngIf="numericElementForm.controls['numericElement'].invalid && numericElementForm.controls['numericElement'].errors.max"
class="required-field" title=" Maximum value is {{numericDataElement.maximum}}">
*
</span>
</div>
<ng-container *ngIf="numericDataElement.dataElementType === 'NumericDataElement'">
<div class="col-sm-7">
<input [attr.disabled]="numericDataElement.isEditable == false ? 'disabled' : null" acrNumericOnly [(ngModel)]="numberValue" id="{{numericDataElement.id}}" type="text" class="form-control" formControlName="numericElement"
onpaste="return false;" (input)="choiceSelected($event.target, numericDataElement.label)"
min="{{numericDataElement.minimum}}" max="{{numericDataElement.maximum}}" required>
</div>
</ng-container>
<ng-container *ngIf="numericDataElement.dataElementType === 'IntegerDataElement'">
<div class="col-sm-7">
<input [attr.disabled]="numericDataElement.isEditable == false ? 'disabled' : null" [(ngModel)]="numberValue" id="{{numericDataElement.id}}" type="text" class="form-control" formControlName="numericElement"
(keypress)="onlyIntegerKey($event)" onpaste="return false;" (input)="choiceSelected($event.target, numericDataElement.label)"
min="{{numericDataElement.minimum}}" max="{{numericDataElement.maximum}}" required>
</div>
</ng-container>
</div>
</form>
`,
styles: [``, `.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} (min-width:768px){label.control-label{padding-left:20px}}.padding-5{padding:5px}`]
},] },
];
/** @nocollapse */
AssistNumericElementComponent.ctorParameters = () => [
{ type: FormBuilder },
{ type: SimulatorEngineService },
{ type: SimulatorCommunicationService }
];
AssistNumericElementComponent.propDecorators = {
numericDataElement: [{ type: Input }],
imagePath: [{ type: Input }],
returnNumericElement: [{ type: Output }]
};
function AssistNumericElementComponent_tsickle_Closure_declarations() {
/** @type {?} */
AssistNumericElementComponent.prototype.subscription;
/** @type {?} */
AssistNumericElementComponent.prototype.numericDataElement;
/** @type {?} */
AssistNumericElementComponent.prototype.imagePath;
/** @type {?} */
AssistNumericElementComponent.prototype.returnNumericElement;
/** @type {?} */
AssistNumericElementComponent.prototype.numericElementForm;
/** @type {?} */
AssistNumericElementComponent.prototype.selectedCondition;
/** @type {?} */
AssistNumericElementComponent.prototype.numberValue;
/** @type {?} */
AssistNumericElementComponent.prototype.formBuilder;
/** @type {?} */
AssistNumericElementComponent.prototype.simulatorEngineService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaXN0LW51bWVyaWMtZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hY3ItYXNzaXN0LXNpbXVsYXRvci1tb2R1bGUvIiwic291cmNlcyI6WyJzcmMvYXBwL21vZHVsZXMvYWNyLWFzc2lzdC1zaW11bGF0b3IvYXNzaXN0LWRhdGEtZWxlbWVudC9hc3Npc3QtbnVtZXJpYy1lbGVtZW50L2Fzc2lzdC1udW1lcmljLWVsZW1lbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE4QyxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFhLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQXNEdEcsTUFBTTs7Ozs7O0lBUUosWUFBb0IsV0FBd0IsRUFBVSxzQkFBOEMsRUFDbEcsNkJBQTREO1FBRDFDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtvQ0FKbkUsSUFBSSxZQUFZLEVBQUU7UUFNakQsSUFBSSxDQUFDLFlBQVksR0FBRyw2QkFBNkIsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQzFFLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUIsQ0FBQyxDQUFDO0tBQ047Ozs7SUFHRCxXQUFXOztRQUVULElB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Qiw2QkFBNkI7OztpQ0F3RG5DLEtBQUs7d0JBQ0wsS0FBSzttQ0FDTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQWZ0ZXJWaWV3SW5pdCwgU2ltcGxlQ2hhbmdlcywgU2ltcGxlQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE51bWVyaWNEYXRhRWxlbWVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZWxlbWVudHMvbW9kZWxzL251bWVyaWMtZGF0YS1lbGVtZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTnVtZXJpY0VsZW1lbnQgfSBmcm9tICcuLi9hc3Npc3QtZGF0YS1lbGVtZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNlbGVjdGVkQ29uZGl0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvZXhlY3V0ZWQtcmVzdWx0Lm1vZGVsJztcclxuaW1wb3J0IHsgU2ltdWxhdG9yRW5naW5lU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvc2ltdWxhdG9yLWVuZ2luZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2ltdWxhdG9yQ29tbXVuaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc2ltdWxhdG9yLWNvbW11bmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWNyLWFzc2lzdC1udW1lcmljLWVsZW1lbnQnLFxyXG4gIHRlbXBsYXRlOiBgPGZvcm0gW2Zvcm1Hcm91cF09XCJudW1lcmljRWxlbWVudEZvcm1cIiBub3ZhbGlkYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTUgdGV4dC1yaWdodFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsIGJyZWFrLXdvcmRcIj5cclxuICAgICAgICB7e251bWVyaWNEYXRhRWxlbWVudC5sYWJlbH19XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJudW1lcmljRGF0YUVsZW1lbnQudW5pdCAhPSB1bmRlZmluZWQgJiYgbnVtZXJpY0RhdGFFbGVtZW50LnVuaXQgIT0gJydcIj4gKHt7bnVtZXJpY0RhdGFFbGVtZW50LnVuaXR9fSk8L3NwYW4+XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJudW1lcmljRGF0YUVsZW1lbnQuaGludCAhPT0gJycgJiYgbnVtZXJpY0RhdGFFbGVtZW50LmhpbnQgIT09IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGUgdGV4dC1wcmltYXJ5IHdoaXRlc3BhY2VcIiB0aXRsZT1cInt7bnVtZXJpY0RhdGFFbGVtZW50LmhpbnR9fVwiPjwvaT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJudW1lcmljRGF0YUVsZW1lbnQuZGlhZ3JhbXMgIT0gdW5kZWZpbmVkIFwiPlxyXG4gICAgICAgIDxhY3ItaGludC1kaWFncmFtIFtkYXRhRWxlbWVudF09XCJudW1lcmljRGF0YUVsZW1lbnRcIiBbaW1hZ2VQYXRoXT1cImltYWdlUGF0aFwiPjwvYWNyLWhpbnQtZGlhZ3JhbT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aGlzLm51bWVyaWNEYXRhRWxlbWVudC5pc1JlcXVpcmVkXCI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJudW1lcmljRWxlbWVudEZvcm0uY29udHJvbHNbJ251bWVyaWNFbGVtZW50J10uaW52YWxpZFwiPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJudW1lcmljRWxlbWVudEZvcm0uY29udHJvbHNbJ251bWVyaWNFbGVtZW50J10uZXJyb3JzLnJlcXVpcmVkXCIgY2xhc3M9XCJyZXF1aXJlZC1maWVsZFwiIHRpdGxlPVwiUmVxdWlyZWQgRmllbGRcIj5cclxuICAgICAgICAgICAgKlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwibnVtZXJpY0VsZW1lbnRGb3JtLmNvbnRyb2xzWydudW1lcmljRWxlbWVudCddLmludmFsaWQgJiYgbnVtZXJpY0VsZW1lbnRGb3JtLmNvbnRyb2xzWydudW1lcmljRWxlbWVudCddLmVycm9ycy5taW5cIlxyXG4gICAgICAgIGNsYXNzPVwicmVxdWlyZWQtZmllbGRcIiB0aXRsZT1cIiBNaW5pbXVtIHZhbHVlIGlzIHt7bnVtZXJpY0RhdGFFbGVtZW50Lm1pbmltdW19fVwiPlxyXG4gICAgICAgICpcclxuICAgICAgPC9zcGFuPiAgICAgIFxyXG4gICAgICA8c3BhbiAqbmdJZj1cIm51bWVyaWNFbGVtZW50Rm9ybS5jb250cm9sc1snbnVtZXJpY0VsZW1lbnQnXS5pbnZhbGlkICYmIG51bWVyaWNFbGVtZW50Rm9ybS5jb250cm9sc1snbnVtZXJpY0VsZW1lbnQnXS5lcnJvcnMubWF4XCJcclxuICAgICAgICBjbGFzcz1cInJlcXVpcmVkLWZpZWxkXCIgdGl0bGU9XCIgTWF4aW11bSB2YWx1ZSBpcyB7e251bWVyaWNEYXRhRWxlbWVudC5tYXhpbXVtfX1cIj5cclxuICAgICAgICAqXHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm51bWVyaWNEYXRhRWxlbWVudC5kYXRhRWxlbWVudFR5cGUgPT09ICdOdW1lcmljRGF0YUVsZW1lbnQnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tN1wiPlxyXG4gICAgICAgIDxpbnB1dCBbYXR0ci5kaXNhYmxlZF09XCJudW1lcmljRGF0YUVsZW1lbnQuaXNFZGl0YWJsZSA9PSBmYWxzZSA/ICdkaXNhYmxlZCcgOiBudWxsXCIgYWNyTnVtZXJpY09ubHkgWyhuZ01vZGVsKV09XCJudW1iZXJWYWx1ZVwiIGlkPVwie3tudW1lcmljRGF0YUVsZW1lbnQuaWR9fVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJudW1lcmljRWxlbWVudFwiXHJcbiAgICAgICAgICBvbnBhc3RlPVwicmV0dXJuIGZhbHNlO1wiIChpbnB1dCk9XCJjaG9pY2VTZWxlY3RlZCgkZXZlbnQudGFyZ2V0LCBudW1lcmljRGF0YUVsZW1lbnQubGFiZWwpXCJcclxuICAgICAgICAgIG1pbj1cInt7bnVtZXJpY0RhdGFFbGVtZW50Lm1pbmltdW19fVwiIG1heD1cInt7bnVtZXJpY0RhdGFFbGVtZW50Lm1heGltdW19fVwiIHJlcXVpcmVkPiAgICAgICAgICBcclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJudW1lcmljRGF0YUVsZW1lbnQuZGF0YUVsZW1lbnRUeXBlID09PSAnSW50ZWdlckRhdGFFbGVtZW50J1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTdcIj5cclxuICAgICAgICA8aW5wdXQgW2F0dHIuZGlzYWJsZWRdPVwibnVtZXJpY0RhdGFFbGVtZW50LmlzRWRpdGFibGUgPT0gZmFsc2UgPyAnZGlzYWJsZWQnIDogbnVsbFwiIFsobmdNb2RlbCldPVwibnVtYmVyVmFsdWVcIiBpZD1cInt7bnVtZXJpY0RhdGFFbGVtZW50LmlkfX1cIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibnVtZXJpY0VsZW1lbnRcIlxyXG4gICAgICAgICAgKGtleXByZXNzKT1cIm9ubHlJbnRlZ2VyS2V5KCRldmVudClcIiBvbnBhc3RlPVwicmV0dXJuIGZhbHNlO1wiIChpbnB1dCk9XCJjaG9pY2VTZWxlY3RlZCgkZXZlbnQudGFyZ2V0LCBudW1lcmljRGF0YUVsZW1lbnQubGFiZWwpXCJcclxuICAgICAgICAgIG1pbj1cInt7bnVtZXJpY0RhdGFFbGVtZW50Lm1pbmltdW19fVwiIG1heD1cInt7bnVtZXJpY0RhdGFFbGVtZW50Lm1heGltdW19fVwiIHJlcXVpcmVkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbmAsXHJcbiAgc3R5bGVzOiBbYGAsIGAucmVxdWlyZWQtZmllbGR7Y29sb3I6cmVkfS5wYWRkaW5nLWwtNXtwYWRkaW5nLWxlZnQ6NXB4fS53aGl0ZXNwYWNle21hcmdpbi1sZWZ0OjVweH0ubWF4LXctaC0xMDB7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jYXJvdXNlbC1jb250cm9sPi5mYXtmb250LXNpemU6NDBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3otaW5kZXg6NTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOi0yMHB4fS5jYXJvdXNlbC1jb250cm9sLmxlZnR7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9LmNhcm91c2VsLWNvbnRyb2wubGVmdCwuY2Fyb3VzZWwtY29udHJvbC5yaWdodHtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LmNhcm91c2VsLWNvbnRyb2wucmlnaHR7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuMDAwMSkgMCxyZ2JhKDAsMCwwLC41KSAxMDAlKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0uc2Nyb2xse292ZXJmbG93LXk6c2Nyb2xsO292ZXJmbG93LXg6aGlkZGVufS5kaXYtc2ltdWxhdG9yLWZvcm0taGVpZ2h0e2hlaWdodDpjYWxjKDEwMHZoIC0gMTAwcHgpO292ZXJmbG93LXk6c2Nyb2xsO292ZXJmbG93LXg6aGlkZGVufS5kaXYtcmVwb3J0LXRleHQtc2Nyb2xse292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzttYXgtaGVpZ2h0OmNhbGMoMTAwdmggLSAzMDBweCl9LnBhZGRpbmctci0xMHtwYWRkaW5nLXJpZ2h0OjEwcHh9LnNsaWRlLWxlZnR7bGVmdDozMHB4fS5zbGlkZS1yaWdodHtyaWdodDozMHB4fWhye21hcmdpbi10b3A6MTBweDttYXJnaW4tYm90dG9tOjEwcHh9LndoaXRlLXNwYWNlLWxpbmV7d2hpdGUtc3BhY2U6cHJlLWxpbmU7d29yZC13cmFwOmJyZWFrLXdvcmR9cHttYXJnaW46MCAwIDEwcHh9LmZvcm0tY29udHJvbHtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JvcmRlci1jb2xvcjojZDJkNmRlfWg0Lm1vZGFsLXRpdGxlLmZsb2F0LWxlZnR7ZmxvYXQ6bGVmdH0ubWFyZ2luLWItMHttYXJnaW4tYm90dG9tOjB9LmZvbnQtd2VpZ2h0LTQwMHtmb250LXdlaWdodDo0MDB9LmN1c3RvbS1yYWRpby1zdHlsZXtmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDoxNXB4fS56b29te3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b30uem9vbSBpbWd7aGVpZ2h0OmF1dG87d2lkdGg6MTAwJTttaW4td2lkdGg6MTAwJTttYXgtd2lkdGg6aW5oZXJpdCFpbXBvcnRhbnR9LmJ0bi16b29te2JhY2tncm91bmQtY29sb3I6I2Y0ZjRmNDtjb2xvcjojNDQ0O2JvcmRlci1jb2xvcjojZGRkfS5idG4tem9vbS5ob3ZlciwuYnRuLXpvb206YWN0aXZlLC5idG4tem9vbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlN2U3ZTd9QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe2xhYmVsLmNvbnRyb2wtbGFiZWx7cGFkZGluZy1sZWZ0OjIwcHh9fS5wYWRkaW5nLTV7cGFkZGluZzo1cHh9YF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFzc2lzdE51bWVyaWNFbGVtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBASW5wdXQoKSBudW1lcmljRGF0YUVsZW1lbnQ6IE51bWVyaWNEYXRhRWxlbWVudDtcclxuICBASW5wdXQoKSBpbWFnZVBhdGg6IHN0cmluZztcclxuICBAT3V0cHV0KCkgcmV0dXJuTnVtZXJpY0VsZW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgbnVtZXJpY0VsZW1lbnRGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc2VsZWN0ZWRDb25kaXRpb246IFNlbGVjdGVkQ29uZGl0aW9uO1xyXG4gIG51bWJlclZhbHVlOiBudW1iZXI7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgc2ltdWxhdG9yRW5naW5lU2VydmljZTogU2ltdWxhdG9yRW5naW5lU2VydmljZSxcclxuICAgIHNpbXVsYXRvckNvbW11bmljYXRpb25TZXJ2aWNlOiBTaW11bGF0b3JDb21tdW5pY2F0aW9uU2VydmljZSkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSBzaW11bGF0b3JDb21tdW5pY2F0aW9uU2VydmljZS5zaW11bGF0b3JTb3VyY2UkLnN1YnNjcmliZShcclxuICAgICAgbWlzc2lvbiA9PiB7XHJcbiAgICAgICAgdGhpcy5VcGRhdGVGb3JtVmFsaWRhdG9yKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnVzZS1saWZlLWN5Y2xlLWludGVyZmFjZVxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgLy8gcHJldmVudCBtZW1vcnkgbGVhayB3aGVuIGNvbXBvbmVudCBkZXN0cm95ZWRcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY3JlYXRlTnVtZXJpY0VsZW1lbnRGb3JtKCk7XHJcbiAgfVxyXG5cclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dXNlLWxpZmUtY3ljbGUtaW50ZXJmYWNlXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbcHJvcEtleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdhc2RhJyk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5udW1lcmljRGF0YUVsZW1lbnQuY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5udW1lcmljRGF0YUVsZW1lbnQuY3VycmVudFZhbHVlICE9PSAwKSB7XHJcbiAgICAgIHRoaXMuc2ltdWxhdG9yRW5naW5lU2VydmljZS5hZGRPclVwZGF0ZURhdGFFbGVtZW50KHRoaXMubnVtZXJpY0RhdGFFbGVtZW50LmlkLCB0aGlzLm51bWVyaWNEYXRhRWxlbWVudC5jdXJyZW50VmFsdWUsXHJcbiAgICAgICAgdGhpcy5udW1lcmljRGF0YUVsZW1lbnQuY3VycmVudFZhbHVlKTtcclxuICAgICAgdGhpcy5udW1iZXJWYWx1ZSA9IHRoaXMubnVtZXJpY0RhdGFFbGVtZW50LmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy5sb2FkZWROdW1lcmljVmFsdWUodGhpcy5udW1lcmljRGF0YUVsZW1lbnQuaWQsIHRoaXMubnVtZXJpY0RhdGFFbGVtZW50LmN1cnJlbnRWYWx1ZSwgdGhpcy5udW1lcmljRGF0YUVsZW1lbnQubGFiZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZXR1cm5OdW1lcmljRWxlbWVudC5lbWl0KHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkZWROdW1lcmljVmFsdWUoaWQsIHZhbHVlLCBzZWxlY3RlZENvbmRpdGlvbikge1xyXG4gICAgY29uc3QgY2hvaWNlRWxlbWVudCA9IG5ldyBOdW1lcmljRWxlbWVudCgpO1xyXG4gICAgY2hvaWNlRWxlbWVudC5lbGVtZW50SWQgPSBpZDtcclxuICAgIGNob2ljZUVsZW1lbnQuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24gPSBuZXcgU2VsZWN0ZWRDb25kaXRpb24oKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29uZGl0aW9uLnNlbGVjdGVkQ29uZGl0aW9uSWQgPSBpZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24uc2VsZWN0ZWRDb25kaXRpb24gPSBzZWxlY3RlZENvbmRpdGlvbjtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24uc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5yZXR1cm5OdW1lcmljRWxlbWVudC5lbWl0KHsgcmVjZWl2ZWRFbGVtZW50OiBjaG9pY2VFbGVtZW50LCBzZWxlY3RlZENvbmRpdGlvbjogdGhpcy5zZWxlY3RlZENvbmRpdGlvbiB9KTtcclxuICB9XHJcblxyXG4gIGNob2ljZVNlbGVjdGVkKGVsZW1lbnQsIHNlbGVjdGVkQ29uZGl0aW9uKSB7XHJcbiAgICBjb25zdCBjaG9pY2VFbGVtZW50ID0gbmV3IE51bWVyaWNFbGVtZW50KCk7XHJcbiAgICBjaG9pY2VFbGVtZW50LmVsZW1lbnRJZCA9IGVsZW1lbnQuaWQ7XHJcbiAgICBjaG9pY2VFbGVtZW50LnNlbGVjdGVkVmFsdWUgPSBlbGVtZW50LnZhbHVlO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24gPSBuZXcgU2VsZWN0ZWRDb25kaXRpb24oKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29uZGl0aW9uLnNlbGVjdGVkQ29uZGl0aW9uSWQgPSBlbGVtZW50LmlkO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbmRpdGlvbi5zZWxlY3RlZENvbmRpdGlvbiA9IHNlbGVjdGVkQ29uZGl0aW9uO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbmRpdGlvbi5zZWxlY3RlZFZhbHVlID0gZWxlbWVudC52YWx1ZTtcclxuICAgIHRoaXMucmV0dXJuTnVtZXJpY0VsZW1lbnQuZW1pdCh7IHJlY2VpdmVkRWxlbWVudDogY2hvaWNlRWxlbWVudCwgc2VsZWN0ZWRDb25kaXRpb246IHRoaXMuc2VsZWN0ZWRDb25kaXRpb24gfSk7XHJcbiAgfVxyXG5cclxuICBvbmx5SW50ZWdlcktleShldmVudCkge1xyXG4gICAgcmV0dXJuIChldmVudC5jaGFyQ29kZSA9PT0gOCB8fCBldmVudC5jaGFyQ29kZSA9PT0gMCkgPyBudWxsIDogZXZlbnQuY2hhckNvZGUgPj0gNDggJiYgZXZlbnQuY2hhckNvZGUgPD0gNTc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU51bWVyaWNFbGVtZW50Rm9ybSgpIHtcclxuICAgIHRoaXMubnVtZXJpY0VsZW1lbnRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIG51bWVyaWNFbGVtZW50OiBbJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oK3RoaXMubnVtZXJpY0RhdGFFbGVtZW50Lm1pbmltdW0pLCBWYWxpZGF0b3JzLm1heCgrdGhpcy5udW1lcmljRGF0YUVsZW1lbnQubWF4aW11bSldKV0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIFVwZGF0ZUZvcm1WYWxpZGF0b3IoKSB7XHJcbiAgICB0aGlzLm51bWVyaWNFbGVtZW50Rm9ybS5jb250cm9sc1snbnVtZXJpY0VsZW1lbnQnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICBWYWxpZGF0b3JzLm1pbigrdGhpcy5udW1lcmljRGF0YUVsZW1lbnQubWluaW11bSksIFZhbGlkYXRvcnMubWF4KCt0aGlzLm51bWVyaWNEYXRhRWxlbWVudC5tYXhpbXVtKV0pXSk7XHJcbiAgICB0aGlzLm51bWVyaWNFbGVtZW50Rm9ybS5jb250cm9sc1snbnVtZXJpY0VsZW1lbnQnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==