UNPKG

dbweb-common

Version:

用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上

142 lines 20.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { moveItemInArray } from '@angular/cdk/drag-drop'; import { Component, HostBinding } from '@angular/core'; import { ThemeService } from '../../../services/theme.service'; import { ElementService } from '../../service/element.service'; import ace from 'ace-builds'; var ParamsRecordviewFetchSQLComponent = /** @class */ (function () { function ParamsRecordviewFetchSQLComponent(elementSvr, theme) { this.elementSvr = elementSvr; this.theme = theme; this.hostClass = true; this.svr = (/** @type {?} */ (this.elementSvr.data.recordview)); this.options = { maxLines: 12, printMargin: false }; this.dataColumns = true; this.startCheck = false; this.messageShow = false; } /** * @return {?} */ ParamsRecordviewFetchSQLComponent.prototype.ngOnInit = /** * @return {?} */ function () { ace.config.set('basePath', '/front/assets/ace-builds/src-min-noconflict'); }; /** * @return {?} */ ParamsRecordviewFetchSQLComponent.prototype.genSQL = /** * @return {?} */ function () { this.svr.Params.Sql = "<<if eq \"oci8\" .Driver>>\n\t\t<<if ge .Limit 0>>\n\t\tSELECT * FROM(\n\t\t<<end>>\n\t\t\tSELECT <<if .Columns>><<.Columns>><<else>>*<<end>>\n\t\t\tFROM " + this.svr.Params.TableName + "\n\t\t\t<<if .Where>>WHERE <<.Where>><<end>>\n\t\t\t<<if .OrderBy>>ORDER BY <<.OrderBy>><<end>>\n\t\t<<if ge .Limit 0>>\n\t\t)WHERE ROWNUM<=<<.Limit>>\n\t\t<<end>>\n\t<<else>>\n\t\tSELECT <<if .Columns>><<.Columns>><<else>>*<<end>>\n\t\tFROM " + this.svr.Params.TableName + "\n\t\t<<if .Where>>WHERE <<.Where>><<end>>\n\t\t<<if .OrderBy>>ORDER BY <<.OrderBy>><<end>>\n\t\t<<if ge .Limit 0>>LIMIT <<.Limit>><<end>>\n\t<<end>>"; }; /** * @return {?} */ ParamsRecordviewFetchSQLComponent.prototype.rebuildColumns = /** * @return {?} */ function () { var _this = this; this.elementSvr.back .checkSQL({ DB: this.svr.Params.DB, Table: this.svr.Params.TableName, ManualPage: this.svr.Params.ManualPage, SQL: this.svr.Params.Sql }) .subscribe((/** * @param {?} v * @return {?} */ function (v) { _this.svr.SQLCheckError = v.Error; if (!_this.svr.SQLCheckError) { _this.svr.Params.AllColumns = v.Columns; } })); }; /** * @param {?} event * @return {?} */ ParamsRecordviewFetchSQLComponent.prototype.drop = /** * @param {?} event * @return {?} */ function (event) { var _this = this; moveItemInArray(this.svr.Params.AllColumns, event.previousIndex, event.currentIndex); /** @type {?} */ var FieldChange = []; this.svr.Params.AllColumns.forEach((/** * @param {?} v * @return {?} */ function (v) { if (_this.svr.Params.UniqueField.includes(v.Name)) { FieldChange.push(v.Name); } })); this.svr.Params.UniqueField = FieldChange; }; /** * @return {?} */ ParamsRecordviewFetchSQLComponent.prototype.checkSQL = /** * @return {?} */ function () { var _this = this; this.startCheck = true; this.svr.checkSQL().subscribe((/** * @return {?} */ function () { _this.startCheck = false; _this.messageShow = true; })); }; ParamsRecordviewFetchSQLComponent.decorators = [ { type: Component, args: [{ selector: 'common-params-recordview-fetch-sql', template: "<div class=\"\u53D6\u6570SQl\">\r\n\t<div class=\"\u4E00\u7EA7\u6807\u9898 \u5B57\u4F53\u989C\u8272\">\u53D6\u6570SQL</div>\r\n\t<div class=\"\u6570\u636E\u5E93\">\r\n\t\t<div class=\"\u4E8C\u7EA7\u6807\u9898\">\u6570\u636E\u5E93</div>\r\n\t\t<mat-form-field appearance=\"outline\">\r\n\t\t\t<mat-select [(ngModel)]=\"svr.Params.DB\"\r\n\t\t\t\t(valueChange)=\"svr.refreshTables()\">\r\n\t\t\t\t<mat-option [value]=\"\"> (\u5F53\u524D\u6570\u636E\u5E93) </mat-option>\r\n\t\t\t\t<mat-option *ngFor=\"let db of svr.DBList\" [value]=\"db\">\r\n\t\t\t\t\t{{ db }}\r\n\t\t\t\t</mat-option>\r\n\t\t\t</mat-select>\r\n\t\t</mat-form-field>\r\n\t</div>\r\n\t<div class=\"\u8868\">\r\n\t\t<div class=\"\u4E8C\u7EA7\u6807\u9898\">\u8868</div>\r\n\t\t<mat-form-field appearance=\"outline\">\r\n\t\t\t<mat-select [(ngModel)]=\"svr.Params.TableName\"\r\n\t\t\t\t(selectionChange)=\"checkSQL()\">\r\n\t\t\t\t<mat-option [value]=\"\">(\u7A7A) </mat-option>\r\n\t\t\t\t<mat-option *ngFor=\"let tab of svr.Tables\"\r\n\t\t\t\t\t[value]=\"tab|uppercase\">\r\n\t\t\t\t\t{{ tab|uppercase }}\r\n\t\t\t\t</mat-option>\r\n\t\t\t</mat-select>\r\n\t\t</mat-form-field>\r\n\t</div>\r\n\t<div class=\"\u4E8C\u7EA7\u6807\u9898\">\u4E3B\u952E</div>\r\n\t<mat-form-field appearance=\"outline\">\r\n\t\t<mat-select [(ngModel)]=\"svr.Params.UniqueField\" multiple>\r\n\t\t\t<div cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n\t\t\t\t<span *ngFor=\"let col of svr.Params.AllColumns\" cdkDrag>\r\n\t\t\t\t\t<mat-option [value]=\"col.Name\">\r\n\t\t\t\t\t\t{{ col.Name }}\r\n\t\t\t\t\t</mat-option>\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t</mat-select>\r\n\t</mat-form-field>\r\n\t<div class=\"SQL\u8BBE\u7F6E\">\r\n\t\t<div class=\"SQL\u8BBE\u7F6E-\u6807\u9898 \u5B57\u4F53\u989C\u8272\">\r\n\t\t\t<span>SQL</span>\r\n\t\t\t<button class=\"\u6D6E\u52A8 \u751F\u6210SQL\" mat-raised-button\r\n\t\t\t\t(click)=\"genSQL()\">\u751F\u6210SQL</button>\r\n\t\t\t<mat-checkbox class=\"\u6D6E\u52A8\" [(ngModel)]=\"svr.Params.ManualPage\">\u624B\u5DE5\u5206\u9875\r\n\t\t\t</mat-checkbox>\r\n\t\t</div>\r\n\t\t<div class=\" SQL\u8BBE\u7F6E-\u5185\u5BB9 SQL\u8BBE\u7F6E-\u8FB9\u6846\">\r\n\t\t\t<div ace-editor [(text)]=\"svr.Params.Sql\" mode=\"sql\"\r\n\t\t\t\t[theme]=\"(theme.theme|async).model==='dark'?'tomorrow_night': 'eclipse'\"\r\n\t\t\t\t[options]=\"options\" [autoUpdateContent]=\"true\"\r\n\t\t\t\t[durationBeforeCallback]=\"1000\"\r\n\t\t\t\tstyle=\"min-height: 192px; width:100%; overflow: auto;\"></div>\r\n\t\t</div>\r\n\t\t<div class=\"check-toolbar\">\r\n\t\t\t<button class=\"\u9A8C\u8BC1SQL\" mat-stroked-button [disabled]=\"startCheck\"\r\n\t\t\t\t(click)=\"checkSQL()\">\r\n\t\t\t\t\u9A8C\u8BC1SQL\r\n\t\t\t</button>\r\n\t\t\t<div *ngIf=\"dataColumns\" class=\"\u6570\u636E\u5217\">\r\n\t\t\t\t<span class=\"\u663E\u793A\u6570\u636E\u5217\u6309\u94AE\" (click)=\"dataColumns = !dataColumns\">\r\n\t\t\t\t\t\u7ED3\u679C\u53CA\u6570\u636E\u5217\r\n\t\t\t\t\t<mat-icon svgIcon=\"expand_more\"></mat-icon>\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t\t<div *ngIf=\"!dataColumns\" class=\"\u6570\u636E\u5217\">\r\n\t\t\t\t<button class=\"\u91CD\u7F6E\" mat-button (click)=\"rebuildColumns()\">\r\n\t\t\t\t\t\u590D\u4F4D\r\n\t\t\t\t</button>\r\n\t\t\t\t<span class=\"\u663E\u793A\u6570\u636E\u5217\u6309\u94AE\" (click)=\"dataColumns = !dataColumns\">\r\n\t\t\t\t\t\u6536\u8D77\r\n\t\t\t\t\t<mat-icon svgIcon=\"expand_less\"></mat-icon>\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div *ngIf=\"!dataColumns\" class=\"\u4E3B\u952E\">\r\n\t\t\t<div class=\"\u4E3B\u952E\u7C7B\u578B\" *ngFor=\"let col of svr.Params.AllColumns\">\r\n\t\t\t\t<div class=\"\u4E8C\u7EA7\u6807\u9898 \u4E3B\u952E\u6807\u9898\">{{ col.Name }}</div>\r\n\t\t\t\t<mat-form-field class=\"\u9009\u62E9\u7C7B\u578B \u5B57\u4F53\u989C\u8272\" appearance=\"outline\">\r\n\t\t\t\t\t<mat-select [(ngModel)]=\"col.Type\">\r\n\t\t\t\t\t\t<mat-option value=\"STR\">\u5B57\u7B26\u4E32</mat-option>\r\n\t\t\t\t\t\t<mat-option value=\"FLOAT\">\u6570\u503C</mat-option>\r\n\t\t\t\t\t\t<mat-option value=\"INT\">\u6574\u578B</mat-option>\r\n\t\t\t\t\t\t<mat-option value=\"DATE\">\u65E5\u671F</mat-option>\r\n\t\t\t\t\t\t<mat-option value=\"BYTEA\">\u4E8C\u8FDB\u5236</mat-option>\r\n\t\t\t\t\t</mat-select>\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<ng-template #noError>\r\n\t\t\t<div *ngIf=\"messageShow\" class=\"\u6821\u9A8C\u6210\u529F\">\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<mat-icon svgIcon=\"check_circle\"></mat-icon>SQL\u6821\u9A8C\u6210\u529F\r\n\t\t\t\t</span>\r\n\t\t\t\t<mat-icon class=\"\u5220\u9664\" svgIcon=\"cancel\"\r\n\t\t\t\t\t(click)=\"messageShow=false\"></mat-icon>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t\t<div *ngIf=\"svr.SQLCheckError && messageShow;else noError\"\r\n\t\t\tclass=\"SQL\u8BBE\u7F6E-\u68C0\u9A8C\u5185\u5BB9 SQL\u8BBE\u7F6E-\u80CC\u666F\">\r\n\t\t\t<div class=\"\u6821\u9A8C\u5931\u8D25\">\r\n\t\t\t\t<mat-icon svgIcon=\"warning\"></mat-icon>\u4EE3\u7801\u62A5\u9519\uFF1A\r\n\t\t\t\t<mat-icon class=\"\u5220\u9664\" svgIcon=\"cancel\"\r\n\t\t\t\t\t(click)=\"messageShow=false\"></mat-icon>\r\n\t\t\t</div>\r\n\t\t\t<pre>\r\n\t\t\t{{ svr.SQLCheckError }}\r\n\t\t\t</pre>\r\n\t\t</div>\r\n\t</div>\r\n</div>", styles: ["@charset \"UTF-8\";.\u53D6\u6570SQl{max-width:808px;height:100%;padding:24px 24px 24px 48px;overflow-y:auto;box-sizing:border-box}.\u53D6\u6570SQl .\u6570\u636E\u5E93{display:inline-block;margin-right:48px}.\u53D6\u6570SQl .\u8868{display:inline-block}.\u53D6\u6570SQl .\u91CD\u7F6E{min-width:56px;height:24px;line-height:24px;color:#fff;font-size:12px}.\u53D6\u6570SQl ::ng-deep .mat-form-field-wrapper{margin:0;padding-bottom:10px}.\u53D6\u6570SQl ::ng-deep .mat-form-field-infix{border:0;padding:8px 0}.\u53D6\u6570SQl ::ng-deep .mat-select-arrow-wrapper{display:block}.\u53D6\u6570SQl .mat-form-field{width:340px;font-size:14px}.\u53D6\u6570SQl .SQL\u8BBE\u7F6E-\u6807\u9898{height:48px;line-height:48px;font-size:14px}.\u53D6\u6570SQl .\u751F\u6210SQL{color:#fff;margin:6px 0 6px 16px}.\u53D6\u6570SQl .\u9A8C\u8BC1SQL{margin:16px 0}.\u53D6\u6570SQl .SQL\u8BBE\u7F6E-\u5185\u5BB9{height:192px;border-radius:4px;box-sizing:border-box;vertical-align:top;overflow:hidden}.\u53D6\u6570SQl .SQL\u8BBE\u7F6E-\u68C0\u9A8C\u5185\u5BB9{border-radius:4px;padding:8px;box-sizing:border-box;overflow:auto;font-size:12px}.\u53D6\u6570SQl .\u6821\u9A8C\u6210\u529F{height:36px;line-height:20px;border-radius:4px;padding:8px;box-sizing:border-box;font-size:14px;font-weight:700;background-color:rgba(126,211,33,.1);color:#7ed321}.\u53D6\u6570SQl .\u6821\u9A8C\u6210\u529F .mat-icon{width:16px;height:16px;line-height:16px;vertical-align:middle;margin:2px 8px 2px 0}.\u53D6\u6570SQl .\u6821\u9A8C\u6210\u529F .\u5220\u9664{float:right;margin:2px 8px 2px 0}.\u53D6\u6570SQl .\u6821\u9A8C\u5931\u8D25{height:36px;line-height:20px;padding:0 0 8px 16px;box-sizing:border-box;font-size:14px;font-weight:700}.\u53D6\u6570SQl .\u6821\u9A8C\u5931\u8D25 .mat-icon{width:16px;height:16px;line-height:16px;vertical-align:middle;margin:2px 8px 2px 0}.\u53D6\u6570SQl .\u6821\u9A8C\u5931\u8D25 .\u5220\u9664{float:right;margin:2px 0}.\u53D6\u6570SQl .\u6570\u636E\u5217{height:32px;line-height:32px;font-size:14px;margin:18px 0}.\u53D6\u6570SQl .\u6570\u636E\u5217 .mat-icon{width:24px;height:24px;line-height:24px;vertical-align:middle}.\u53D6\u6570SQl .\u6570\u636E\u5217 .\u663E\u793A\u6570\u636E\u5217\u6309\u94AE{cursor:pointer}.\u53D6\u6570SQl .\u6D6E\u52A8{float:right;font-size:14px}.\u53D6\u6570SQl .\u4E3B\u952E{width:100%;display:flex;flex-wrap:wrap;justify-content:flex-start}.\u53D6\u6570SQl .\u4E3B\u952E .\u4E3B\u952E\u7C7B\u578B{margin-right:20px;margin-bottom:14px;position:relative}.\u53D6\u6570SQl .\u4E3B\u952E .\u4E3B\u952E\u7C7B\u578B .\u9009\u62E9{position:absolute;left:0;bottom:15px}.\u53D6\u6570SQl .\u4E3B\u952E .\u9009\u62E9\u7C7B\u578B{width:140px;font-size:14px}.\u53D6\u6570SQl .\u4E3B\u952E .\u4E3B\u952E\u6807\u9898{font-weight:700}.check-toolbar{display:flex;justify-content:space-between}.\u4E00\u7EA7\u6807\u9898{font-size:16px;font-weight:700;margin-bottom:16px}.\u4E8C\u7EA7\u6807\u9898{font-size:12px;margin-bottom:8px}"] }] } ]; /** @nocollapse */ ParamsRecordviewFetchSQLComponent.ctorParameters = function () { return [ { type: ElementService }, { type: ThemeService } ]; }; ParamsRecordviewFetchSQLComponent.propDecorators = { hostClass: [{ type: HostBinding, args: ['class.recordview-fetchSQL',] }] }; return ParamsRecordviewFetchSQLComponent; }()); export { ParamsRecordviewFetchSQLComponent }; if (false) { /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.hostClass; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.svr; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.options; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.dataColumns; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.startCheck; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.messageShow; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.elementSvr; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.theme; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLXJlY29yZHZpZXctZmV0Y2gtc3FsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Rid2ViLWNvbW1vbi8iLCJzb3VyY2VzIjpbImxpYi9lbGVtZW50L3NldC1wcm9wZXJ0eS1yZWNvcmR2aWV3L3BhcmFtcy1yZWNvcmR2aWV3LWZldGNoLXNxbC9wYXJhbXMtcmVjb3Jkdmlldy1mZXRjaC1zcWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBeUIsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEYsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDO0FBQzdCO0lBUUMsMkNBQW1CLFVBQTBCLEVBQVMsS0FBbUI7UUFBdEQsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBRi9CLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDcEQsUUFBRyxHQUFHLG1CQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBeUIsQ0FBQztRQUV0RSxZQUFPLEdBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNwRCxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBSndELENBQUM7Ozs7SUFLN0Usb0RBQVE7OztJQUFSO1FBQ0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLDZDQUE2QyxDQUFDLENBQUM7SUFDM0UsQ0FBQzs7OztJQUVELGtEQUFNOzs7SUFBTjtRQUNDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRywrSkFLZCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLDJQQVF6QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLDBKQUkxQixDQUFDO0lBQ1QsQ0FBQzs7OztJQUNELDBEQUFjOzs7SUFBZDtRQUFBLGlCQWNDO1FBYkEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJO2FBQ2xCLFFBQVEsQ0FBQztZQUNULEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQ2hDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQ3RDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHO1NBQ3hCLENBQUM7YUFDRCxTQUFTOzs7O1FBQUMsVUFBQSxDQUFDO1lBQ1gsS0FBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsS0FBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUU7Z0JBQzVCLEtBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO2FBQ3ZDO1FBQ0YsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7OztJQUNELGdEQUFJOzs7O0lBQUosVUFBSyxLQUE0QjtRQUFqQyxpQkFTQztRQVJBLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7O1lBQy9FLFdBQVcsR0FBRyxFQUFFO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQSxDQUFDO1lBQ25DLElBQUksS0FBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pELFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3pCO1FBQ0YsQ0FBQyxFQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQzNDLENBQUM7Ozs7SUFDRCxvREFBUTs7O0lBQVI7UUFBQSxpQkFNQztRQUxBLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUzs7O1FBQUM7WUFDN0IsS0FBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsS0FBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQyxFQUFDLENBQUM7SUFDSixDQUFDOztnQkFwRUQsU0FBUyxTQUFDO29CQUNWLFFBQVEsRUFBRSxvQ0FBb0M7b0JBQzlDLG9uS0FBMkQ7O2lCQUUzRDs7OztnQkFOK0IsY0FBYztnQkFEckMsWUFBWTs7OzRCQVNuQixXQUFXLFNBQUMsMkJBQTJCOztJQStEekMsd0NBQUM7Q0FBQSxBQXJFRCxJQXFFQztTQWhFWSxpQ0FBaUM7OztJQUM3QyxzREFBMkQ7O0lBQzNELGdEQUFzRTs7SUFFdEUsb0RBQW9EOztJQUNwRCx3REFBbUI7O0lBQ25CLHVEQUFtQjs7SUFDbkIsd0RBQW9COztJQUpSLHVEQUFpQzs7SUFBRSxrREFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWxlbWVudERhdGFSZWNvcmRWaWV3LCBFbGVtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvZWxlbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IGFjZSBmcm9tICdhY2UtYnVpbGRzJztcclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdjb21tb24tcGFyYW1zLXJlY29yZHZpZXctZmV0Y2gtc3FsJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vcGFyYW1zLXJlY29yZHZpZXctZmV0Y2gtc3FsLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9wYXJhbXMtcmVjb3Jkdmlldy1mZXRjaC1zcWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFyYW1zUmVjb3Jkdmlld0ZldGNoU1FMQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLnJlY29yZHZpZXctZmV0Y2hTUUwnKSBob3N0Q2xhc3MgPSB0cnVlO1xyXG5cdHB1YmxpYyBzdnIgPSB0aGlzLmVsZW1lbnRTdnIuZGF0YS5yZWNvcmR2aWV3IGFzIEVsZW1lbnREYXRhUmVjb3JkVmlldztcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudFN2cjogRWxlbWVudFNlcnZpY2UsIHB1YmxpYyB0aGVtZTogVGhlbWVTZXJ2aWNlKSB7fVxyXG5cdG9wdGlvbnM6IGFueSA9IHsgbWF4TGluZXM6IDEyLCBwcmludE1hcmdpbjogZmFsc2UgfTtcclxuXHRkYXRhQ29sdW1ucyA9IHRydWU7XHJcblx0c3RhcnRDaGVjayA9IGZhbHNlO1xyXG5cdG1lc3NhZ2VTaG93ID0gZmFsc2U7XHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHRhY2UuY29uZmlnLnNldCgnYmFzZVBhdGgnLCAnL2Zyb250L2Fzc2V0cy9hY2UtYnVpbGRzL3NyYy1taW4tbm9jb25mbGljdCcpO1xyXG5cdH1cclxuXHJcblx0Z2VuU1FMKCkge1xyXG5cdFx0dGhpcy5zdnIuUGFyYW1zLlNxbCA9IGA8PGlmIGVxIFwib2NpOFwiIC5Ecml2ZXI+PlxyXG5cdFx0PDxpZiBnZSAuTGltaXQgMD4+XHJcblx0XHRTRUxFQ1QgKiBGUk9NKFxyXG5cdFx0PDxlbmQ+PlxyXG5cdFx0XHRTRUxFQ1QgPDxpZiAuQ29sdW1ucz4+PDwuQ29sdW1ucz4+PDxlbHNlPj4qPDxlbmQ+PlxyXG5cdFx0XHRGUk9NICR7dGhpcy5zdnIuUGFyYW1zLlRhYmxlTmFtZX1cclxuXHRcdFx0PDxpZiAuV2hlcmU+PldIRVJFIDw8LldoZXJlPj48PGVuZD4+XHJcblx0XHRcdDw8aWYgLk9yZGVyQnk+Pk9SREVSIEJZIDw8Lk9yZGVyQnk+Pjw8ZW5kPj5cclxuXHRcdDw8aWYgZ2UgLkxpbWl0IDA+PlxyXG5cdFx0KVdIRVJFIFJPV05VTTw9PDwuTGltaXQ+PlxyXG5cdFx0PDxlbmQ+PlxyXG5cdDw8ZWxzZT4+XHJcblx0XHRTRUxFQ1QgPDxpZiAuQ29sdW1ucz4+PDwuQ29sdW1ucz4+PDxlbHNlPj4qPDxlbmQ+PlxyXG5cdFx0RlJPTSAgJHt0aGlzLnN2ci5QYXJhbXMuVGFibGVOYW1lfVxyXG5cdFx0PDxpZiAuV2hlcmU+PldIRVJFIDw8LldoZXJlPj48PGVuZD4+XHJcblx0XHQ8PGlmIC5PcmRlckJ5Pj5PUkRFUiBCWSA8PC5PcmRlckJ5Pj48PGVuZD4+XHJcblx0XHQ8PGlmIGdlIC5MaW1pdCAwPj5MSU1JVCA8PC5MaW1pdD4+PDxlbmQ+PlxyXG5cdDw8ZW5kPj5gO1xyXG5cdH1cclxuXHRyZWJ1aWxkQ29sdW1ucygpIHtcclxuXHRcdHRoaXMuZWxlbWVudFN2ci5iYWNrXHJcblx0XHRcdC5jaGVja1NRTCh7XHJcblx0XHRcdFx0REI6IHRoaXMuc3ZyLlBhcmFtcy5EQixcclxuXHRcdFx0XHRUYWJsZTogdGhpcy5zdnIuUGFyYW1zLlRhYmxlTmFtZSxcclxuXHRcdFx0XHRNYW51YWxQYWdlOiB0aGlzLnN2ci5QYXJhbXMuTWFudWFsUGFnZSxcclxuXHRcdFx0XHRTUUw6IHRoaXMuc3ZyLlBhcmFtcy5TcWxcclxuXHRcdFx0fSlcclxuXHRcdFx0LnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0XHR0aGlzLnN2ci5TUUxDaGVja0Vycm9yID0gdi5FcnJvcjtcclxuXHRcdFx0XHRpZiAoIXRoaXMuc3ZyLlNRTENoZWNrRXJyb3IpIHtcclxuXHRcdFx0XHRcdHRoaXMuc3ZyLlBhcmFtcy5BbGxDb2x1bW5zID0gdi5Db2x1bW5zO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cdGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xyXG5cdFx0bW92ZUl0ZW1JbkFycmF5KHRoaXMuc3ZyLlBhcmFtcy5BbGxDb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG5cdFx0Y29uc3QgRmllbGRDaGFuZ2UgPSBbXTtcclxuXHRcdHRoaXMuc3ZyLlBhcmFtcy5BbGxDb2x1bW5zLmZvckVhY2godiA9PiB7XHJcblx0XHRcdGlmICh0aGlzLnN2ci5QYXJhbXMuVW5pcXVlRmllbGQuaW5jbHVkZXModi5OYW1lKSkge1xyXG5cdFx0XHRcdEZpZWxkQ2hhbmdlLnB1c2godi5OYW1lKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnN2ci5QYXJhbXMuVW5pcXVlRmllbGQgPSBGaWVsZENoYW5nZTtcclxuXHR9XHJcblx0Y2hlY2tTUUwoKSB7XHJcblx0XHR0aGlzLnN0YXJ0Q2hlY2sgPSB0cnVlO1xyXG5cdFx0dGhpcy5zdnIuY2hlY2tTUUwoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLnN0YXJ0Q2hlY2sgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5tZXNzYWdlU2hvdyA9IHRydWU7XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19