UNPKG

@kre-form/ant

Version:

338 lines 40.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, } from "@angular/core"; import { FieldArrayType, FormGlobalService } from "@kre-form/core"; import * as _ from "lodash"; import { KreFormAntService } from "../../tools/service"; export class KreFormFieldRepeat extends FieldArrayType { /** * @param {?} dyService * @param {?} globalService */ constructor(dyService, globalService) { super(); this.globalService = globalService; this.titles = []; this.showXScroll = true; this.screenTableWidth = window.screen.width - 162; this.tableWidth = 0; this.length = 0; this.chartresize = (/** * @return {?} */ () => { this.changeWidth(); }); this.service = dyService; } /** * @return {?} */ ngAfterContentChecked() { if (_.isEmpty(this.field.fieldGroup)) { this.showXScroll = false; } else { this.showXScroll = true; } } /** * @return {?} */ ngOnInit() { if (this.formControl) { this.formControl.valueChanges.subscribe((/** * @param {?} res * @return {?} */ (res) => { if (res.length !== this.length) { this.length = res.length; if ((/** @type {?} */ (this.to)).enableInterface) { this.globalService.notifyDataChanged("repeatLengthChange", { rdm: Math.random(), config: this.field, }); } } })); } if ((/** @type {?} */ (this.field)).fieldGroup) { this.length = (/** @type {?} */ ((/** @type {?} */ (this.field)).fieldGroup)).length; } if (!!((/** @type {?} */ (this.field)))["repeatRole"]) { Object.keys(((/** @type {?} */ (this.field)))["repeatRole"]).forEach((/** * @param {?} repeatKeyIndex * @return {?} */ (repeatKeyIndex) => { /** @type {?} */ let index = Number(repeatKeyIndex.substr(repeatKeyIndex.lastIndexOf("$") + 1)); if (!!this.field.fieldGroup) { this.field.fieldGroup.forEach((/** * @param {?} field * @param {?} ind * @return {?} */ (field, ind) => { if (index === ind) { field.fieldGroup.forEach((/** * @param {?} repeatField * @return {?} */ (repeatField) => { if (!!((/** @type {?} */ (this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]) { if (repeatField.templateOptions === undefined || repeatField.templateOptions === null) { repeatField.templateOptions = {}; } if (repeatField.editProperty === undefined || repeatField.editProperty === null) { repeatField.editProperty = {}; } repeatField.templateOptions = Object.assign(repeatField.templateOptions, ((/** @type {?} */ (this.field)))["repeatRole"][repeatKeyIndex][repeatField.key].templateOptions); if (((/** @type {?} */ (this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["editor"] === false || ((/** @type {?} */ (this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["editor"] === true) { repeatField.editor = ((/** @type {?} */ (this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["editor"]; } if (((/** @type {?} */ (this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["show"] === false || ((/** @type {?} */ (this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["show"] === true) { repeatField.show = ((/** @type {?} */ (this.field)))["repeatRole"][repeatKeyIndex][repeatField.key]["show"]; } repeatField.editProperty = Object.assign(repeatField.editProperty, ((/** @type {?} */ (this.field)))["repeatRole"][repeatKeyIndex][repeatField.key].editProperty); } })); } })); } })); } if (!!this.field["show"]) { this.field.hide = !this.field["show"]; } this.changeWidth(); window.addEventListener("resize", this.chartresize, true); } /** * @return {?} */ ngOnDestroy() { window.removeEventListener("resize", this.chartresize, true); } /** * @param {?} sign * @return {?} */ fieldOperational(sign) { this.service.fieldOperational(sign, this.field); } /** * @param {?} type * @return {?} */ groupOperational(type) { this.service.groupOperational(type, this.field); } /** * @param {?} i * @return {?} */ delete(i) { if (this.field.fieldGroup && this.field.fieldGroup.length > 1) { this.remove(i); } else { } } /** * @return {?} */ changeWidth() { /** @type {?} */ let width = 300; if (this.field != undefined && this.field != null && this.field.fieldArray != undefined && this.field.fieldArray != null && this.field.fieldArray.fieldGroup != undefined && this.field.fieldArray.fieldGroup != null // && !_.isEmpty(this.field.fieldGroup) ) { /** @type {?} */ let length = (/** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ (this.field)).fieldArray)).fieldGroup)).filter((/** * @param {?} title * @return {?} */ (title) => this.checkFieldShow(title))).length; width = length * 245 + 120; } this.tableWidth = width; if (_.isEmpty(this.field.fieldGroup)) { this.showXScroll = false; } else { // this.showXScroll = true; } } /** * @return {?} */ addIndex() { this.showXScroll = true; ((/** @type {?} */ (this.field.fieldGroup))).forEach((/** * @param {?} el * @param {?} index * @return {?} */ (el, index) => { el.fieldGroup.forEach((/** * @param {?} ele * @return {?} */ (ele) => { ele.templateOptions.index = index; if (this.field && this.field.templateOptions && (!!this.field.templateOptions.index || this.field.templateOptions.index === 0)) { ele.templateOptions.pIndex = this.field.templateOptions.index; } })); })); } /** * @param {?} f * @return {?} */ isRemoved(f) { /** @type {?} */ let result = true; if (this.editor === false) { result = false; } if ((/** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ (f)).fieldGroup)).filter((/** * @param {?} el * @return {?} */ (el) => el.type !== "line" && el.type !== "htmlcontent")))).every((/** * @param {?} el * @return {?} */ (el) => !!(/** @type {?} */ (el)).editProperty && !!(/** @type {?} */ ((/** @type {?} */ (el)).editProperty)).delete))) { result = false; } return result; } /** * @param {?} i * @param {?} isRemove * @return {?} */ removed(i, isRemove) { if (!isRemove) { return; } this.remove(i); if (!!this.operationProperty && !!this.operationProperty.deleteEvent) { this.globalService.notifyDataChanged("FieldWrapperClick", { rdm: Math.random(), config: this.field, type: "repeat", }); } this.globalService.notifyDataChanged("repeatDelete", { rdm: Math.random(), index: i, config: this.field, }); this.addIndex(); if (_.isEmpty(this.field.fieldGroup)) { this.showXScroll = false; } } /** * @return {?} */ showErrors() { /** @type {?} */ let that = this; return that.showError; } /** * @param {?} i * @return {?} */ newRowId(i) { return `${this.field.id}_${i}`; } /** * @return {?} */ newRepeatClass() { return `${this.field.id}_repeat`; } /** * @param {?} field * @return {?} */ checkFieldShow(field) { /** @type {?} */ let result = true; if ((!field || !field.type || field.type === "line" || field.type === "htmlcontent") && field.show === undefined) { field.show = true; field.hide = false; } if (this.formStatus === 0) { if (field && field.hasOwnProperty("show")) { result = (/** @type {?} */ ((field.show || false))); } } if (field.show === false) { field.hide = true; } return result; } } KreFormFieldRepeat.decorators = [ { type: Component, args: [{ selector: "kreform-repeat", template: "<ng-container *ngIf=\"formStatus !== 0\">\n <div class=\"fieldOperational\">\n <div\n class=\"reportControl\"\n [class.hide-header]=\"!(field?.editProperty?.config !== false) \"\n >\n <div class=\"report-header\" *ngIf=\"field?.editProperty?.config !== false \">\n <div class=\"left\">\n <ul>\n <li>\n <label\n nz-checkbox\n [(ngModel)]=\"field.checked\"\n [nzDisabled]=\"\n !!field.editProperty &&\n field.editProperty.canMove !== undefined &&\n field.editProperty.canMove === false\n \"\n ></label>\n </li>\n <li (click)=\"groupOperational('item')\">\n <i class=\"icon-TianJiaZiDuan\"></i>\u6DFB\u52A0\u5B57\u6BB5\n </li>\n <li (click)=\"groupOperational('remark')\">\n <i class=\"icon-other-WenBen\"></i>\u6DFB\u52A0\u6587\u672C\n </li>\n <li (click)=\"groupOperational('line')\">\n <i class=\"icon-FenGeXian\"></i>\u6DFB\u52A0\u5206\u5272\u7EBF\n </li>\n </ul>\n </div>\n <div class=\"right\">\n <ul>\n <li (click)=\"groupOperational('edit')\">\n <i class=\"icon-Edit03\"></i>\u7F16\u8F91\n </li>\n <li (click)=\"groupOperational('delete')\">\n <i class=\"icon-N_delete2\"></i>\u5220\u9664\n </li>\n <li (click)=\"groupOperational('up')\">\n <i class=\"icon-ShangYi\"></i>\u4E0A\u79FB\n </li>\n <li (click)=\"groupOperational('down')\">\n <i class=\"icon-XiaYi\"></i>\u4E0B\u79FB\n </li>\n <ng-container\n *ngIf=\"to && to.isButintin && to.isButintin==true;else tdDelete\"\n >\n <li></li>\n </ng-container>\n <ng-template #tdDelete>\n <li (click)=\"fieldOperational('delete')\">\n <button class=\"btnDel\">\n <i class=\"icon-KT-Close\"></i>\n </button>\n </li>\n </ng-template>\n </ul>\n </div>\n </div>\n <div class=\"report-body\">\n <ng-container\n *ngIf=\"field.fieldGroup?.length && field.fieldArray?.fieldGroup?.length ; else fieldWarp\"\n >\n <ng-container *ngFor=\"let field of field.fieldGroup; let i = index\">\n <kreform-field class=\"col\" [field]=\"field\"></kreform-field>\n </ng-container>\n </ng-container>\n <ng-template #fieldWarp>\n <div class=\"img-box\"></div>\n <p class=\"ant-empty-description\">\u6682\u65E0\u6570\u636E</p>\n </ng-template>\n </div>\n </div>\n <div class=\"field-hide\" *ngIf=\"field.hide == true\">\n <div class=\"field-hide-content\">\u5DF2\u9690\u85CF</div>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"formStatus === 0\">\n <ng-container *ngIf=\"to.type=='table';else cardTmp\">\n <div class=\"mb-2 add-box\">\n <div *ngIf=\"isAdd\" class=\"flex-h new-flex-1 flex-justify-end\">\n <span class=\"add-button w-5\" (click)=\"add();addIndex()\">\n <i class=\"icon-tianjin\"></i>\n \u65B0\u589E\n </span>\n </div>\n </div>\n <div class=\"w-100\">\n <nz-table\n #basicTable\n nzShowPagination=\"false\"\n nzSize=\"small\"\n [nzData]=\"field.fieldGroup\"\n [nzScroll]=\"{\n x: showXScroll ? tableWidth + 'px' : null,y:'210px'\n }\"\n [nzPageSize]=\"field?.fieldGroup?.length\"\n [class.showScroll]=\"showXScroll\"\n >\n <thead>\n <tr>\n <th nzWidth=\"50px\" class=\"select-box td\" nzLeft=\"0px\">\u5E8F\u53F7</th>\n <ng-container *ngFor=\"let title of field?.fieldArray?.fieldGroup\">\n <!-- *ngIf=\"title && title.type!==undefined && title.type!==null && (title.type!=='line' && title.type!=='htmlcontent') && title.hide !=true\" -->\n <th *ngIf=\"checkFieldShow(title)\">\n <div class=\"new-flex-1 repeat-table-title\">\n <ng-container\n *ngIf=\"title && title.templateOptions!==undefined && title.templateOptions!==null\"\n >\n <span\n *ngIf=\"title.templateOptions.required\"\n class=\"required\"\n >*</span\n >\n {{ title.templateOptions.label }}\n </ng-container>\n </div>\n </th>\n </ng-container>\n <th nzRight=\"0px\" class=\"select-box td td-th\" *ngIf=\"isDelete\">\n <span class=\"\">\u64CD\u4F5C </span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let field of basicTable.data; let i = index\" class=\"tr\">\n <td nzLeft=\"0px\" class=\"td-bg\">\n <span class=\"serial\">{{ i + 1 }}</span>\n </td>\n <ng-container *ngFor=\"let f of field.fieldGroup\">\n <!-- *ngIf=\"f && f.type!==undefined && f.type!==null &&(f.type!=='line' && f.type!=='htmlcontent') && f.hide!=true\" -->\n <td class=\"w-100-td\" *ngIf=\"checkFieldShow(f)\">\n <kreform-field [field]=\"f\"></kreform-field>\n </td>\n </ng-container>\n <td\n *ngIf=\"isDelete\"\n nzRight=\"0px\"\n class=\"select-box td\"\n [class.isRemoved]=\"!isRemoved(field)\"\n (click)=\"removed(i , isRemoved(field))\"\n >\n <span class=\"select\">\u5220\u9664</span>\n </td>\n </tr>\n </tbody>\n </nz-table>\n </div>\n </ng-container>\n <ng-template #cardTmp>\n <ng-container\n *ngIf=\"field.fieldGroup!==undefined && field.fieldGroup!==null && field.fieldGroup.length>0;else cardEmpty\"\n >\n <div\n *ngFor=\"let field of field.fieldGroup; let i = index\"\n class=\"row {{ newRepeatClass() }} \"\n [id]=\"newRowId(i)\"\n >\n <ng-container *ngIf=\"field.hide!=true\">\n <kreform-field class=\"col\" [field]=\"field\"></kreform-field>\n </ng-container>\n <span\n (click)=\"removed(i , isRemoved(field))\"\n class=\"del\"\n *ngIf=\"isRemoved(field) && isDelete\"\n >\u5220\u9664</span\n >\n\n <div class=\"tips\"></div>\n </div>\n </ng-container>\n <ng-template #cardEmpty>\n <div class=\"repeat-card-empty\">\n <div class=\"repeat-empty-image\"></div>\n <p class=\"ant-empty-description\">\u6682\u65E0\u6570\u636E</p>\n </div>\n </ng-template>\n <div class=\"add\" *ngIf=\"isAdd\">\n <span (click)=\"add();addIndex()\">\u65B0\u589E</span>\n </div>\n </ng-template>\n</ng-container>\n", host: { "[class]": 'field.className || ""', cdkDrag: "", } }] } ]; /** @nocollapse */ KreFormFieldRepeat.ctorParameters = () => [ { type: KreFormAntService }, { type: FormGlobalService } ]; if (false) { /** @type {?} */ KreFormFieldRepeat.prototype.service; /** @type {?} */ KreFormFieldRepeat.prototype.titles; /** @type {?} */ KreFormFieldRepeat.prototype.showXScroll; /** @type {?} */ KreFormFieldRepeat.prototype.screenTableWidth; /** @type {?} */ KreFormFieldRepeat.prototype.tableWidth; /** @type {?} */ KreFormFieldRepeat.prototype.length; /** @type {?} */ KreFormFieldRepeat.prototype.chartresize; /** * @type {?} * @private */ KreFormFieldRepeat.prototype.globalService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa3JlLWZvcm0vYW50LyIsInNvdXJjZXMiOlsibGliL3RlbXBsYXRlcy9yZXBlYXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEdBSVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT25FLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVXhELE1BQU0sT0FBTyxrQkFDWCxTQUFRLGNBQWM7Ozs7O0lBVXRCLFlBQ0UsU0FBNEIsRUFDcEIsYUFBZ0M7UUFFeEMsS0FBSyxFQUFFLENBQUM7UUFGQSxrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFSMUMsV0FBTSxHQUE2QixFQUFFLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQzdDLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBcUlYLGdCQUFXOzs7UUFBRyxHQUFHLEVBQUU7WUFDakIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsRUFBQztRQWhJQSxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztJQUMzQixDQUFDOzs7O0lBQ0QscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QjtJQUNILENBQUM7Ozs7SUFDRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVM7Ozs7WUFBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM5QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO29CQUN6QixJQUFJLG1CQUFBLElBQUksQ0FBQyxFQUFFLEVBQUMsQ0FBQyxlQUFlLEVBQUU7d0JBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUU7NEJBQ3pELEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFOzRCQUNsQixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUs7eUJBQ25CLENBQUMsQ0FBQztxQkFDSjtpQkFDRjtZQUNILENBQUMsRUFBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLG1CQUFBLElBQUksQ0FBQyxLQUFLLEVBQUMsQ0FBQyxVQUFVLEVBQUU7WUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxtQkFBQSxtQkFBQSxJQUFJLENBQUMsS0FBSyxFQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsTUFBTSxDQUFDO1NBQzlDO1FBRUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBQSxJQUFJLENBQUMsS0FBSyxFQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsbUJBQUEsSUFBSSxDQUFDLEtBQUssRUFBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPOzs7O1lBQ3BELENBQUMsY0FBc0IsRUFBRSxFQUFFOztvQkFDckIsS0FBSyxHQUFXLE1BQU0sQ0FDeEIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUMzRDtnQkFFRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTzs7Ozs7b0JBQUMsQ0FBQyxLQUFVLEVBQUUsR0FBVyxFQUFFLEVBQUU7d0JBQ3hELElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTs0QkFDakIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPOzs7OzRCQUFDLENBQUMsV0FBZ0IsRUFBRSxFQUFFO2dDQUM1QyxJQUNFLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksQ0FBQyxLQUFLLEVBQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUNqRCxXQUFXLENBQUMsR0FBRyxDQUNoQixFQUNEO29DQUNBLElBQ0UsV0FBVyxDQUFDLGVBQWUsS0FBSyxTQUFTO3dDQUN6QyxXQUFXLENBQUMsZUFBZSxLQUFLLElBQUksRUFDcEM7d0NBQ0EsV0FBVyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7cUNBQ2xDO29DQUNELElBQ0UsV0FBVyxDQUFDLFlBQVksS0FBSyxTQUFTO3dDQUN0QyxXQUFXLENBQUMsWUFBWSxLQUFLLElBQUksRUFDakM7d0NBQ0EsV0FBVyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7cUNBQy9CO29DQUNELFdBQVcsQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDekMsV0FBVyxDQUFDLGVBQWUsRUFDM0IsQ0FBQyxtQkFBQSxJQUFJLENBQUMsS0FBSyxFQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FDL0MsV0FBVyxDQUFDLEdBQUcsQ0FDaEIsQ0FBQyxlQUFlLENBQ2xCLENBQUM7b0NBQ0YsSUFDRSxDQUFDLG1CQUFBLElBQUksQ0FBQyxLQUFLLEVBQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUMvQyxXQUFXLENBQUMsR0FBRyxDQUNoQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUs7d0NBQ3JCLENBQUMsbUJBQUEsSUFBSSxDQUFDLEtBQUssRUFBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQy9DLFdBQVcsQ0FBQyxHQUFHLENBQ2hCLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUNwQjt3Q0FDQSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsbUJBQUEsSUFBSSxDQUFDLEtBQUssRUFBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQ3BELGNBQWMsQ0FDZixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztxQ0FDOUI7b0NBRUQsSUFDRSxDQUFDLG1CQUFBLElBQUksQ0FBQyxLQUFLLEVBQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUMvQyxXQUFXLENBQUMsR0FBRyxDQUNoQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUs7d0NBQ25CLENBQUMsbUJBQUEsSUFBSSxDQUFDLEtBQUssRUFBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQy9DLFdBQVcsQ0FBQyxHQUFHLENBQ2hCLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUNsQjt3Q0FDQSxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsbUJBQUEsSUFBSSxDQUFDLEtBQUssRUFBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQ2xELGNBQWMsQ0FDZixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztxQ0FDNUI7b0NBRUQsV0FBVyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUN0QyxXQUFXLENBQUMsWUFBWSxFQUN4QixDQUFDLG1CQUFBLElBQUksQ0FBQyxLQUFLLEVBQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUMvQyxXQUFXLENBQUMsR0FBRyxDQUNoQixDQUFDLFlBQVksQ0FDZixDQUFDO2lDQUNIOzRCQUNILENBQUMsRUFBQyxDQUFDO3lCQUNKO29CQUNILENBQUMsRUFBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxFQUNGLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDOzs7O0lBQ0QsV0FBVztRQUNULE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDOzs7OztJQUNELGdCQUFnQixDQUFDLElBQVk7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7Ozs7O0lBRUQsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7Ozs7SUFFRCxNQUFNLENBQUMsQ0FBTTtRQUNYLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hCO2FBQU07U0FDTjtJQUNILENBQUM7Ozs7SUFLRCxXQUFXOztZQUNMLEtBQUssR0FBRyxHQUFHO1FBQ2YsSUFDRSxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVM7WUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLFNBQVM7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSTtZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksU0FBUztZQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksSUFBSTtRQUN4Qyx1Q0FBdUM7VUFDdkM7O2dCQUNJLE1BQU0sR0FBRyxtQkFBQSxtQkFBQSxtQkFBQSxJQUFJLENBQUMsS0FBSyxFQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsTUFBTTs7OztZQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDaEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFDM0IsQ0FBQyxNQUFNO1lBQ1IsS0FBSyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFeEIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDMUI7YUFBTTtZQUNMLDJCQUEyQjtTQUM1QjtJQUNILENBQUM7Ozs7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQyxtQkFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBUyxDQUFDLENBQUMsT0FBTzs7Ozs7UUFBQyxDQUFDLEVBQU8sRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNsRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU87Ozs7WUFBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQyxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLElBQ0UsSUFBSSxDQUFDLEtBQUs7b0JBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlO29CQUMxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLO3dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQ3pDO29CQUNBLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztpQkFDL0Q7WUFDSCxDQUFDLEVBQUMsQ0FBQztRQUNMLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7SUFDRCxTQUFTLENBQUMsQ0FBcUI7O1lBQ3pCLE1BQU0sR0FBRyxJQUFJO1FBQ2pCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUU7WUFDekIsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUNoQjtRQUVELElBQ0UsbUJBQUEsbUJBQUEsbUJBQUEsQ0FBQyxFQUFDLENBQ0MsVUFBVSxFQUFDLENBQUMsTUFBTTs7OztRQUNqQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxhQUFhLEVBQ3hELEVBQUMsQ0FDRCxLQUFLOzs7O1FBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxtQkFBQSxFQUFFLEVBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLG1CQUFBLG1CQUFBLEVBQUUsRUFBQyxDQUFDLFlBQVksRUFBQyxDQUFDLE1BQU0sRUFBQyxFQUN2RTtZQUNBLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzs7Ozs7SUFDRCxPQUFPLENBQUMsQ0FBUyxFQUFFLFFBQWlCO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3hELEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNsQixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2xCLElBQUksRUFBRSxRQUFRO2FBQ2YsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsRUFBRTtZQUNuRCxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNsQixLQUFLLEVBQUUsQ0FBQztZQUNSLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSztTQUNuQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDMUI7SUFDSCxDQUFDOzs7O0lBQ0QsVUFBVTs7WUFDSixJQUFJLEdBQUcsSUFBSTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDOzs7OztJQUNELFFBQVEsQ0FBQyxDQUFTO1FBQ2hCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQyxDQUFDOzs7O0lBQ0QsY0FBYztRQUNaLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDO0lBQ25DLENBQUM7Ozs7O0lBRUQsY0FBYyxDQUFDLEtBQXlCOztZQUNsQyxNQUFNLEdBQVksSUFBSTtRQUMxQixJQUNFLENBQUMsQ0FBQyxLQUFLO1lBQ0wsQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUNYLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTTtZQUNyQixLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQztZQUMvQixLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFDeEI7WUFDQSxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNsQixLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNwQjtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7WUFDekIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDekMsTUFBTSxHQUFHLG1CQUFBLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBVyxDQUFDO2FBQzNDO1NBQ0Y7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQ3hCLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ25CO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7O1lBM1FGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixnN05BQTJCO2dCQUMzQixJQUFJLEVBQUU7b0JBQ0osU0FBUyxFQUFFLHVCQUF1QjtvQkFDbEMsT0FBTyxFQUFFLEVBQUU7aUJBQ1o7YUFDRjs7OztZQVRRLGlCQUFpQjtZQVJELGlCQUFpQjs7OztJQXNCeEMscUNBQWE7O0lBQ2Isb0NBQXNDOztJQUN0Qyx5Q0FBbUI7O0lBQ25CLDhDQUE2Qzs7SUFDN0Msd0NBQWU7O0lBQ2Ysb0NBQVc7O0lBcUlYLHlDQUVFOzs7OztJQW5JQSwyQ0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRmllbGRBcnJheVR5cGUsIEZvcm1HbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIkBrcmUtZm9ybS9jb3JlXCI7XG5pbXBvcnQge1xuICBLcmVGb3JtQ29tbW9uU2VydmljZSxcbiAgS3JlRm9ybVRlbXBsYXRlT3B0aW9ucyxcbiAgS3JlRm9ybUZpZWxkQ29uZmlnLFxufSBmcm9tIFwiQGtyZS1mb3JtL2NvcmVcIjtcblxuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgeyBLcmVGb3JtQW50U2VydmljZSB9IGZyb20gXCIuLi8uLi90b29scy9zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJrcmVmb3JtLXJlcGVhdFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4Lmh0bWxcIixcbiAgaG9zdDoge1xuICAgIFwiW2NsYXNzXVwiOiAnZmllbGQuY2xhc3NOYW1lIHx8IFwiXCInLFxuICAgIGNka0RyYWc6IFwiXCIsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEtyZUZvcm1GaWVsZFJlcGVhdFxuICBleHRlbmRzIEZpZWxkQXJyYXlUeXBlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudENoZWNrZWRcbntcbiAgc2VydmljZTogYW55O1xuICB0aXRsZXM6IEtyZUZvcm1UZW1wbGF0ZU9wdGlvbnNbXSA9IFtdO1xuICBzaG93WFNjcm9sbCA9IHRydWU7XG4gIHNjcmVlblRhYmxlV2lkdGggPSB3aW5kb3cuc2NyZWVuLndpZHRoIC0gMTYyO1xuICB0YWJsZVdpZHRoID0gMDtcbiAgbGVuZ3RoID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBkeVNlcnZpY2U6IEtyZUZvcm1BbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2xvYmFsU2VydmljZTogRm9ybUdsb2JhbFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNlcnZpY2UgPSBkeVNlcnZpY2U7XG4gIH1cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5maWVsZC5maWVsZEdyb3VwKSkge1xuICAgICAgdGhpcy5zaG93WFNjcm9sbCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dYU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXMubGVuZ3RoICE9PSB0aGlzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubGVuZ3RoID0gcmVzLmxlbmd0aDtcbiAgICAgICAgICBpZiAodGhpcy50byEuZW5hYmxlSW50ZXJmYWNlKSB7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uubm90aWZ5RGF0YUNoYW5nZWQoXCJyZXBlYXRMZW5ndGhDaGFuZ2VcIiwge1xuICAgICAgICAgICAgICByZG06IE1hdGgucmFuZG9tKCksXG4gICAgICAgICAgICAgIGNvbmZpZzogdGhpcy5maWVsZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpZWxkIS5maWVsZEdyb3VwKSB7XG4gICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuZmllbGQhLmZpZWxkR3JvdXAhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBpZiAoISEodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXSkge1xuICAgICAgT2JqZWN0LmtleXMoKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl0pLmZvckVhY2goXG4gICAgICAgIChyZXBlYXRLZXlJbmRleDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBOdW1iZXIoXG4gICAgICAgICAgICByZXBlYXRLZXlJbmRleC5zdWJzdHIocmVwZWF0S2V5SW5kZXgubGFzdEluZGV4T2YoXCIkXCIpICsgMSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCEhdGhpcy5maWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLmZpZWxkR3JvdXAuZm9yRWFjaCgoZmllbGQ6IGFueSwgaW5kOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBpbmQpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwLmZvckVhY2goKHJlcGVhdEZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgISEodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQua2V5XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQudGVtcGxhdGVPcHRpb25zID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC50ZW1wbGF0ZU9wdGlvbnMgPT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQudGVtcGxhdGVPcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmVkaXRQcm9wZXJ0eSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQuZWRpdFByb3BlcnR5ID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmVkaXRQcm9wZXJ0eSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLnRlbXBsYXRlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQudGVtcGxhdGVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIGFueSlbXCJyZXBlYXRSb2xlXCJdW3JlcGVhdEtleUluZGV4XVtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmtleVxuICAgICAgICAgICAgICAgICAgICAgIF0udGVtcGxhdGVPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICBdW1wiZWRpdG9yXCJdID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmZpZWxkIGFzIGFueSlbXCJyZXBlYXRSb2xlXCJdW3JlcGVhdEtleUluZGV4XVtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmtleVxuICAgICAgICAgICAgICAgICAgICAgIF1bXCJlZGl0b3JcIl0gPT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVwZWF0RmllbGQuZWRpdG9yID0gKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRLZXlJbmRleFxuICAgICAgICAgICAgICAgICAgICAgIF1bcmVwZWF0RmllbGQua2V5XVtcImVkaXRvclwiXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICBdW1wic2hvd1wiXSA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICBdW1wic2hvd1wiXSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5zaG93ID0gKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRLZXlJbmRleFxuICAgICAgICAgICAgICAgICAgICAgIF1bcmVwZWF0RmllbGQua2V5XVtcInNob3dcIl07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5lZGl0UHJvcGVydHkgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdEZpZWxkLmVkaXRQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXVtyZXBlYXRLZXlJbmRleF1bXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRGaWVsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICBdLmVkaXRQcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCEhdGhpcy5maWVsZFtcInNob3dcIl0pIHtcbiAgICAgIHRoaXMuZmllbGQuaGlkZSA9ICF0aGlzLmZpZWxkW1wic2hvd1wiXTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VXaWR0aCgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMuY2hhcnRyZXNpemUsIHRydWUpO1xuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMuY2hhcnRyZXNpemUsIHRydWUpO1xuICB9XG4gIGZpZWxkT3BlcmF0aW9uYWwoc2lnbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmZpZWxkT3BlcmF0aW9uYWwoc2lnbiwgdGhpcy5maWVsZCk7XG4gIH1cblxuICBncm91cE9wZXJhdGlvbmFsKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuc2VydmljZS5ncm91cE9wZXJhdGlvbmFsKHR5cGUsIHRoaXMuZmllbGQpO1xuICB9XG5cbiAgZGVsZXRlKGk6IGFueSkge1xuICAgIGlmICh0aGlzLmZpZWxkLmZpZWxkR3JvdXAgJiYgdGhpcy5maWVsZC5maWVsZEdyb3VwLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGkpO1xuICAgIH0gZWxzZSB7XG4gICAgfVxuICB9XG5cbiAgY2hhcnRyZXNpemUgPSAoKSA9PiB7XG4gICAgdGhpcy5jaGFuZ2VXaWR0aCgpO1xuICB9O1xuICBjaGFuZ2VXaWR0aCgpIHtcbiAgICBsZXQgd2lkdGggPSAzMDA7XG4gICAgaWYgKFxuICAgICAgdGhpcy5maWVsZCAhPSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZmllbGQgIT0gbnVsbCAmJlxuICAgICAgdGhpcy5maWVsZC5maWVsZEFycmF5ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5maWVsZC5maWVsZEFycmF5ICE9IG51bGwgJiZcbiAgICAgIHRoaXMuZmllbGQuZmllbGRBcnJheS5maWVsZEdyb3VwICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5maWVsZC5maWVsZEFycmF5LmZpZWxkR3JvdXAgIT0gbnVsbFxuICAgICAgLy8gJiYgIV8uaXNFbXB0eSh0aGlzLmZpZWxkLmZpZWxkR3JvdXApXG4gICAgKSB7XG4gICAgICBsZXQgbGVuZ3RoID0gdGhpcy5maWVsZCEuZmllbGRBcnJheSEuZmllbGRHcm91cCEuZmlsdGVyKCh0aXRsZSkgPT5cbiAgICAgICAgdGhpcy5jaGVja0ZpZWxkU2hvdyh0aXRsZSlcbiAgICAgICkubGVuZ3RoO1xuICAgICAgd2lkdGggPSBsZW5ndGggKiAyNDUgKyAxMjA7XG4gICAgfVxuICAgIHRoaXMudGFibGVXaWR0aCA9IHdpZHRoO1xuXG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLmZpZWxkLmZpZWxkR3JvdXApKSB7XG4gICAgICB0aGlzLnNob3dYU2Nyb2xsID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMuc2hvd1hTY3JvbGwgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBhZGRJbmRleCgpIHtcbiAgICB0aGlzLnNob3dYU2Nyb2xsID0gdHJ1ZTtcbiAgICAodGhpcy5maWVsZC5maWVsZEdyb3VwIGFzIGFueVtdKS5mb3JFYWNoKChlbDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBlbC5maWVsZEdyb3VwLmZvckVhY2goKGVsZTogYW55KSA9PiB7XG4gICAgICAgIGVsZS50ZW1wbGF0ZU9wdGlvbnMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuZmllbGQgJiZcbiAgICAgICAgICB0aGlzLmZpZWxkLnRlbXBsYXRlT3B0aW9ucyAmJlxuICAgICAgICAgICghIXRoaXMuZmllbGQudGVtcGxhdGVPcHRpb25zLmluZGV4IHx8XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRlbXBsYXRlT3B0aW9ucy5pbmRleCA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZWxlLnRlbXBsYXRlT3B0aW9ucy5wSW5kZXggPSB0aGlzLmZpZWxkLnRlbXBsYXRlT3B0aW9ucy5pbmRleDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgaXNSZW1vdmVkKGY6IEtyZUZvcm1GaWVsZENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGlmICh0aGlzLmVkaXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGYhXG4gICAgICAgIC5maWVsZEdyb3VwIS5maWx0ZXIoXG4gICAgICAgICAgKGVsKSA9PiBlbC50eXBlICE9PSBcImxpbmVcIiAmJiBlbC50eXBlICE9PSBcImh0bWxjb250ZW50XCJcbiAgICAgICAgKSFcbiAgICAgICAgLmV2ZXJ5KChlbDogYW55KSA9PiAhIWVsIS5lZGl0UHJvcGVydHkgJiYgISFlbCEuZWRpdFByb3BlcnR5IS5kZWxldGUpXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZW1vdmVkKGk6IG51bWJlciwgaXNSZW1vdmU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIWlzUmVtb3ZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlKGkpO1xuICAgIGlmICghIXRoaXMub3BlcmF0aW9uUHJvcGVydHkgJiYgISF0aGlzLm9wZXJhdGlvblByb3BlcnR5LmRlbGV0ZUV2ZW50KSB7XG4gICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uubm90aWZ5RGF0YUNoYW5nZWQoXCJGaWVsZFdyYXBwZXJDbGlja1wiLCB7XG4gICAgICAgIHJkbTogTWF0aC5yYW5kb20oKSxcbiAgICAgICAgY29uZmlnOiB0aGlzLmZpZWxkLFxuICAgICAgICB0eXBlOiBcInJlcGVhdFwiLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5nbG9iYWxTZXJ2aWNlLm5vdGlmeURhdGFDaGFuZ2VkKFwicmVwZWF0RGVsZXRlXCIsIHtcbiAgICAgIHJkbTogTWF0aC5yYW5kb20oKSxcbiAgICAgIGluZGV4OiBpLFxuICAgICAgY29uZmlnOiB0aGlzLmZpZWxkLFxuICAgIH0pO1xuICAgIHRoaXMuYWRkSW5kZXgoKTtcblxuICAgIGlmIChfLmlzRW1wdHkodGhpcy5maWVsZC5maWVsZEdyb3VwKSkge1xuICAgICAgdGhpcy5zaG93WFNjcm9sbCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzaG93RXJyb3JzKCkge1xuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdC5zaG93RXJyb3I7XG4gIH1cbiAgbmV3Um93SWQoaTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5maWVsZC5pZH1fJHtpfWA7XG4gIH1cbiAgbmV3UmVwZWF0Q2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5maWVsZC5pZH1fcmVwZWF0YDtcbiAgfVxuXG4gIGNoZWNrRmllbGRTaG93KGZpZWxkOiBLcmVGb3JtRmllbGRDb25maWcpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcbiAgICBpZiAoXG4gICAgICAoIWZpZWxkIHx8XG4gICAgICAgICFmaWVsZC50eXBlIHx8XG4gICAgICAgIGZpZWxkLnR5cGUgPT09IFwibGluZVwiIHx8XG4gICAgICAgIGZpZWxkLnR5cGUgPT09IFwiaHRtbGNvbnRlbnRcIikgJiZcbiAgICAgIGZpZWxkLnNob3cgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgZmllbGQuc2hvdyA9IHRydWU7XG4gICAgICBmaWVsZC5oaWRlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm1TdGF0dXMgPT09IDApIHtcbiAgICAgIGlmIChmaWVsZCAmJiBmaWVsZC5oYXNPd25Qcm9wZXJ0eShcInNob3dcIikpIHtcbiAgICAgICAgcmVzdWx0ID0gKGZpZWxkLnNob3cgfHwgZmFsc2UpIGFzIGJvb2xlYW47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaWVsZC5zaG93ID09PSBmYWxzZSkge1xuICAgICAgZmllbGQuaGlkZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19