UNPKG

@mescius/inputman.comment.angular

Version:

このパッケージには、Angular用の[InputManJS](https://developer.mescius.jp/inputmanjs)コンポーネントが含まれます。

270 lines 35.7 kB
import { ElementRef, Input, Output, EventEmitter, Component, } from "@angular/core"; import { GC } from "../inputman"; import { MethodType, isEmpty, getMethodPrefix, IMCommentCtrl, } from "./common"; import * as i0 from "@angular/core"; export class GcCommentComponent { constructor(ref) { this.editorCreated = new EventEmitter(); this.preprocessError = new EventEmitter(); this.beforeExecuteCommand = new EventEmitter(); this.afterExecuteCommand = new EventEmitter(); this.beforeFirstLoad = new EventEmitter(); this.afterFirstLoad = new EventEmitter(); this.onInitialized = new EventEmitter(); this._container = ref.nativeElement; } ngOnChanges(changes) { if (!this._imGcComment) { return; } Object.keys(changes).forEach((key) => { let currentValue = changes[key].currentValue; this.setValueToIMControl(key, currentValue); }); } setValueToIMControl(key, value) { if (value === undefined) { return; } if (this.isSetAccessor(key)) { this._imGcComment[key] = value; return; } let setter = this.tryGetPropertyOperator(key, MethodType.setter); if (this.hasRealMethod(setter)) { if (this.propDic && this.propDic[key] && this.propDic[key].isPramArr === true) { this._imGcComment[setter].apply(this._imGcComment, value); } else { this._imGcComment[setter](value); } } } hasRealMethod(methodName) { return (this._imGcComment && typeof this._imGcComment[methodName] === "function"); } isSetAccessor(key) { let descriptor = Object.getOwnPropertyDescriptor(this._imGcComment.constructor.prototype, key); if (descriptor && descriptor.set) { return true; } return false; } tryGetPropertyOperator(propertyName, methodType) { let method = ""; if (this.propDic && this.propDic[propertyName]) { method = methodType === MethodType.getter ? this.propDic[propertyName].getter : this.propDic[propertyName].setter; if (!isEmpty(method)) { return method; } } return (getMethodPrefix(methodType) + propertyName[0].toUpperCase() + propertyName.slice(1)); } ngAfterContentInit() { this.initGcComment(); this.bindEvent(); if (this.propDic) { var unSupportWithinConfigProps = Object.keys(this.propDic).filter((p) => this.propDic[p] && this.propDic[p].supportWithinConfig === false); unSupportWithinConfigProps.sort((p1, p2) => { return this.propDic[p1].order - this.propDic[p2].order; }); unSupportWithinConfigProps.forEach((p) => { this.setValueToIMControl(p, this[p]); }); } this._container[IMCommentCtrl] = this._imGcComment; } bindEvent() { if (!this._imGcComment) { return; } this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.EditorCreated, (e) => { this.editorCreated.emit(e); }); this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.PreprocessError, (e) => { this.preprocessError.emit(e); }); this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.BeforeExecuteCommand, (e) => { this.beforeExecuteCommand.emit(e); }); this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.AfterExecuteCommand, (e) => { this.afterExecuteCommand.emit(e); }); this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.BeforeFirstLoad, () => { this.beforeFirstLoad.emit(); }); this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.AfterFirstLoad, () => { this.afterFirstLoad.emit(); }); } ngOnDestroy() { if (this._container != null) { this._container.remove(); this._imGcComment?.destroy?.(); this._imGcComment = null; } } initGcComment() { let element = document.createElement('div'); this.createTemplate(element); this._imGcComment = new GC.InputMan.GcComment(element, this); if (Array.isArray(this.comments)) { this._imGcComment.comments = this.comments; } if (this.stickedComment) { this._imGcComment.stickedComment = this.stickedComment; } this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.CreateEditor, this.createEditor); this.onInitialized.emit(this._imGcComment); } createTemplate(element) { this._container.innerHTML = ""; this._container.appendChild(element); } getNestedIMControl() { return this._imGcComment; } } GcCommentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcCommentComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); GcCommentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GcCommentComponent, selector: "gc-comment", inputs: { userInfo: "userInfo", candidateReactionList: "candidateReactionList", candidateReactionListColumns: "candidateReactionListColumns", postTimeFormatter: "postTimeFormatter", updateTimeFormatter: "updateTimeFormatter", showIcon: "showIcon", addCommentEditorPosition: "addCommentEditorPosition", commentMode: "commentMode", header: "header", footer: "footer", headerFooterItems: "headerFooterItems", commentAction: "commentAction", commentInfoAction: "commentInfoAction", commentActionItem: "commentActionItem", commentInfoActionItem: "commentInfoActionItem", commentActionButtonType: "commentActionButtonType", pageSize: "pageSize", loadOnDemand: "loadOnDemand", allowAnonymous: "allowAnonymous", anonymousUserInfo: "anonymousUserInfo", warningMessage: "warningMessage", watermark: "watermark", commentFormatter: "commentFormatter", editorConfig: "editorConfig", avatarType: "avatarType", loadUsersInfoHandler: "loadUsersInfoHandler", loadComments: "loadComments", addNewCommentTo: "addNewCommentTo", keepDraft: "keepDraft", dataSource: "dataSource", loadCommentCount: "loadCommentCount", commentCountFormatter: "commentCountFormatter", loadReactionCount: "loadReactionCount", reactionCountFormatter: "reactionCountFormatter", sortInfo: "sortInfo", createEditor: "createEditor", loadRepliesOnDemand: "loadRepliesOnDemand", replyLevel: "replyLevel", collapseRepliesMode: "collapseRepliesMode", showCurrentUserName: "showCurrentUserName", contextToolbar: "contextToolbar", contextToolbarItem: "contextToolbarItem", loadCommentReplies: "loadCommentReplies", comments: "comments", stickedComment: "stickedComment", copiedLinkDisplayTextFormatter: "copiedLinkDisplayTextFormatter", copiedLinkFormatter: "copiedLinkFormatter", copiedLinkSearchParams: "copiedLinkSearchParams", pastedLinkType: "pastedLinkType", showLinkTypeContextToolbar: "showLinkTypeContextToolbar", loadCommentByLink: "loadCommentByLink", openLinkMode: "openLinkMode", loadStickedComment: "loadStickedComment", showZeroReaction: "showZeroReaction", showOpenReactionListButton: "showOpenReactionListButton" }, outputs: { editorCreated: "editorCreated", preprocessError: "preprocessError", beforeExecuteCommand: "beforeExecuteCommand", afterExecuteCommand: "afterExecuteCommand", beforeFirstLoad: "beforeFirstLoad", afterFirstLoad: "afterFirstLoad", onInitialized: "onInitialized" }, usesOnChanges: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcCommentComponent, decorators: [{ type: Component, args: [{ selector: "gc-comment", template: `<ng-content></ng-content>`, }] }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { userInfo: [{ type: Input }], candidateReactionList: [{ type: Input }], candidateReactionListColumns: [{ type: Input }], postTimeFormatter: [{ type: Input }], updateTimeFormatter: [{ type: Input }], showIcon: [{ type: Input }], addCommentEditorPosition: [{ type: Input }], commentMode: [{ type: Input }], header: [{ type: Input }], footer: [{ type: Input }], headerFooterItems: [{ type: Input }], commentAction: [{ type: Input }], commentInfoAction: [{ type: Input }], commentActionItem: [{ type: Input }], commentInfoActionItem: [{ type: Input }], commentActionButtonType: [{ type: Input }], pageSize: [{ type: Input }], loadOnDemand: [{ type: Input }], allowAnonymous: [{ type: Input }], anonymousUserInfo: [{ type: Input }], warningMessage: [{ type: Input }], watermark: [{ type: Input }], commentFormatter: [{ type: Input }], editorConfig: [{ type: Input }], avatarType: [{ type: Input }], loadUsersInfoHandler: [{ type: Input }], loadComments: [{ type: Input }], addNewCommentTo: [{ type: Input }], keepDraft: [{ type: Input }], dataSource: [{ type: Input }], loadCommentCount: [{ type: Input }], commentCountFormatter: [{ type: Input }], loadReactionCount: [{ type: Input }], reactionCountFormatter: [{ type: Input }], sortInfo: [{ type: Input }], createEditor: [{ type: Input }], loadRepliesOnDemand: [{ type: Input }], replyLevel: [{ type: Input }], collapseRepliesMode: [{ type: Input }], showCurrentUserName: [{ type: Input }], contextToolbar: [{ type: Input }], contextToolbarItem: [{ type: Input }], loadCommentReplies: [{ type: Input }], comments: [{ type: Input }], stickedComment: [{ type: Input }], copiedLinkDisplayTextFormatter: [{ type: Input }], copiedLinkFormatter: [{ type: Input }], copiedLinkSearchParams: [{ type: Input }], pastedLinkType: [{ type: Input }], showLinkTypeContextToolbar: [{ type: Input }], loadCommentByLink: [{ type: Input }], openLinkMode: [{ type: Input }], loadStickedComment: [{ type: Input }], showZeroReaction: [{ type: Input }], showOpenReactionListButton: [{ type: Input }], editorCreated: [{ type: Output }], preprocessError: [{ type: Output }], beforeExecuteCommand: [{ type: Output }], afterExecuteCommand: [{ type: Output }], beforeFirstLoad: [{ type: Output }], afterFirstLoad: [{ type: Output }], onInitialized: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2NDb21tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tbWVudC9HY0NvbW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILFVBQVUsRUFFVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQ0gsVUFBVSxFQUNWLE9BQU8sRUFDUCxlQUFlLEVBRWYsYUFBYSxHQUNoQixNQUFNLFVBQVUsQ0FBQzs7QUFNbEIsTUFBTSxPQUFPLGtCQUFrQjtJQU8zQixZQUFZLEdBQWU7UUE4UnBCLGtCQUFhLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekQsb0JBQWUsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUzRCx5QkFBb0IsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRSx3QkFBbUIsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUvRCxvQkFBZSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTNELG1CQUFjLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUQsa0JBQWEsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQXpTNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsT0FBTztTQUNWO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQzdDLElBQUksQ0FBQyxtQkFBbUIs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QkFEYixLQUFLO2dCQUdOLDhCQUE4QjtzQkFEN0IsS0FBSztnQkFHTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBR04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUdOLGNBQWM7c0JBRGIsS0FBSztnQkFHTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBR04saUJBQWlCO3NCQURoQixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFHTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBR04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBR04sMEJBQTBCO3NCQUR6QixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLE1BQU07Z0JBR0EsZUFBZTtzQkFEckIsTUFBTTtnQkFHQSxvQkFBb0I7c0JBRDFCLE1BQU07Z0JBR0EsbUJBQW1CO3NCQUR6QixNQUFNO2dCQUdBLGVBQWU7c0JBRHJCLE1BQU07Z0JBR0EsY0FBYztzQkFEcEIsTUFBTTtnQkFHQSxhQUFhO3NCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgRWxlbWVudFJlZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ29tcG9uZW50LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgR0MgfSBmcm9tIFwiLi4vaW5wdXRtYW5cIjtcbmltcG9ydCB7XG4gICAgTWV0aG9kVHlwZSxcbiAgICBpc0VtcHR5LFxuICAgIGdldE1ldGhvZFByZWZpeCxcbiAgICBQcm9wZXJ0eURpY3Rpb25hcnksXG4gICAgSU1Db21tZW50Q3RybCxcbn0gZnJvbSBcIi4vY29tbW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcImdjLWNvbW1lbnRcIixcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxufSlcbmV4cG9ydCBjbGFzcyBHY0NvbW1lbnRDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95XG57XG4gICAgcHJvdGVjdGVkIF9jb250YWluZXI6IEVsZW1lbnQ7XG4gICAgcHJvdGVjdGVkIF9pbUdjQ29tbWVudDogR0MuSW5wdXRNYW4uR2NDb21tZW50O1xuICAgIHByb3RlY3RlZCBwcm9wRGljOiBQcm9wZXJ0eURpY3Rpb25hcnk7XG5cbiAgICBjb25zdHJ1Y3RvcihyZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gcmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbUdjQ29tbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBjaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZVRvSU1Db250cm9sKGtleSwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldFZhbHVlVG9JTUNvbnRyb2woa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzU2V0QWNjZXNzb3Ioa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNldHRlciA9IHRoaXMudHJ5R2V0UHJvcGVydHlPcGVyYXRvcihrZXksIE1ldGhvZFR5cGUuc2V0dGVyKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzUmVhbE1ldGhvZChzZXR0ZXIpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wRGljICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wRGljW2tleV0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BEaWNba2V5XS5pc1ByYW1BcnIgPT09IHRydWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50W3NldHRlcl0uYXBwbHkodGhpcy5faW1HY0NvbW1lbnQsIHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnRbc2V0dGVyXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1JlYWxNZXRob2QobWV0aG9kTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9pbUdjQ29tbWVudCAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuX2ltR2NDb21tZW50W21ldGhvZE5hbWVdID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2V0QWNjZXNzb3Ioa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQuY29uc3RydWN0b3IucHJvdG90eXBlLFxuICAgICAgICAgICAga2V5XG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cnlHZXRQcm9wZXJ0eU9wZXJhdG9yKFxuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICAgICAgbWV0aG9kVHlwZTogTWV0aG9kVHlwZVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGxldCBtZXRob2Q6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLnByb3BEaWMgJiYgdGhpcy5wcm9wRGljW3Byb3BlcnR5TmFtZV0pIHtcbiAgICAgICAgICAgIG1ldGhvZCA9XG4gICAgICAgICAgICAgICAgbWV0aG9kVHlwZSA9PT0gTWV0aG9kVHlwZS5nZXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb3BEaWNbcHJvcGVydHlOYW1lXS5nZXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnByb3BEaWNbcHJvcGVydHlOYW1lXS5zZXR0ZXI7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkobWV0aG9kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldE1ldGhvZFByZWZpeChtZXRob2RUeXBlKSArXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWVbMF0udG9VcHBlckNhc2UoKSArXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUuc2xpY2UoMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRHY0NvbW1lbnQoKTtcbiAgICAgICAgdGhpcy5iaW5kRXZlbnQoKTtcbiAgICAgICAgaWYgKHRoaXMucHJvcERpYykge1xuICAgICAgICAgICAgdmFyIHVuU3VwcG9ydFdpdGhpbkNvbmZpZ1Byb3BzID0gT2JqZWN0LmtleXModGhpcy5wcm9wRGljKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcERpY1twXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BEaWNbcF0uc3VwcG9ydFdpdGhpbkNvbmZpZyA9PT0gZmFsc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB1blN1cHBvcnRXaXRoaW5Db25maWdQcm9wcy5zb3J0KChwMSwgcDIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wRGljW3AxXS5vcmRlciAtIHRoaXMucHJvcERpY1twMl0ub3JkZXI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdW5TdXBwb3J0V2l0aGluQ29uZmlnUHJvcHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVUb0lNQ29udHJvbChwLCB0aGlzW3BdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lcltJTUNvbW1lbnRDdHJsXSA9IHRoaXMuX2ltR2NDb21tZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBiaW5kRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5faW1HY0NvbW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuRWRpdG9yQ3JlYXRlZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JDcmVhdGVkLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5QcmVwcm9jZXNzRXJyb3IsXG4gICAgICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc0Vycm9yLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5CZWZvcmVFeGVjdXRlQ29tbWFuZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVFeGVjdXRlQ29tbWFuZC5lbWl0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuQWZ0ZXJFeGVjdXRlQ29tbWFuZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckV4ZWN1dGVDb21tYW5kLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5CZWZvcmVGaXJzdExvYWQsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVGaXJzdExvYWQuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuQWZ0ZXJGaXJzdExvYWQsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckZpcnN0TG9hZC5lbWl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50Py5kZXN0cm95Py4oKTtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEdjQ29tbWVudCgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUZW1wbGF0ZShlbGVtZW50KTtcbiAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQgPSBuZXcgR0MuSW5wdXRNYW4uR2NDb21tZW50KGVsZW1lbnQsIHRoaXMgYXMgYW55KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb21tZW50cykpIHtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmNvbW1lbnRzID0gdGhpcy5jb21tZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGlja2VkQ29tbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQuc3RpY2tlZENvbW1lbnQgPSB0aGlzLnN0aWNrZWRDb21tZW50O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5DcmVhdGVFZGl0b3IsXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUVkaXRvclxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9uSW5pdGlhbGl6ZWQuZW1pdCh0aGlzLl9pbUdjQ29tbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUZW1wbGF0ZShlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROZXN0ZWRJTUNvbnRyb2woKTogR0MuSW5wdXRNYW4uR2NDb21tZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltR2NDb21tZW50O1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgdXNlckluZm8/OiBHQy5JbnB1dE1hbi5Vc2VySW5mbztcbiAgICBASW5wdXQoKVxuICAgIGNhbmRpZGF0ZVJlYWN0aW9uTGlzdD86IHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpXG4gICAgY2FuZGlkYXRlUmVhY3Rpb25MaXN0Q29sdW1ucz86IG51bWJlcjtcbiAgICBASW5wdXQoKVxuICAgIHBvc3RUaW1lRm9ybWF0dGVyPzogR0MuSW5wdXRNYW4uRGF0ZUZvcm1hdHRlcjtcbiAgICBASW5wdXQoKVxuICAgIHVwZGF0ZVRpbWVGb3JtYXR0ZXI/OiBHQy5JbnB1dE1hbi5EYXRlRm9ybWF0dGVyO1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0ljb24/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgYWRkQ29tbWVudEVkaXRvclBvc2l0aW9uPzogR0MuSW5wdXRNYW4uR2NDb21tZW50RWRpdG9yUG9zaXRpb247XG4gICAgQElucHV0KClcbiAgICBjb21tZW50TW9kZT86IEdDLklucHV0TWFuLkdjQ29tbWVudE1vZGU7XG4gICAgQElucHV0KClcbiAgICBoZWFkZXI/OiAoc3RyaW5nIHwgR0MuSW5wdXRNYW4uR2NDb21tZW50SGVhZGVyRm9vdGVySXRlbSlbXTtcbiAgICBASW5wdXQoKVxuICAgIGZvb3Rlcj86IChzdHJpbmcgfCBHQy5JbnB1dE1hbi5HY0NvbW1lbnRIZWFkZXJGb290ZXJJdGVtKVtdO1xuICAgIEBJbnB1dCgpXG4gICAgaGVhZGVyRm9vdGVySXRlbXM/OiB7IFtrZXk6IHN0cmluZ106IChnY0NvbW1lbnQ6IEdDLklucHV0TWFuLkdjQ29tbWVudCkgPT4gR0MuSW5wdXRNYW4uSUhlYWRlckZvb3Rlckl0ZW0gfTtcbiAgICBASW5wdXQoKVxuICAgIGNvbW1lbnRBY3Rpb24/OiAoc3RyaW5nIHwgR0MuSW5wdXRNYW4uR2NDb21tZW50Q29tbWVudEFjdGlvbkl0ZW0pW107XG4gICAgQElucHV0KClcbiAgICBjb21tZW50SW5mb0FjdGlvbj86IChzdHJpbmcgfCBHQy5JbnB1dE1hbi5HY0NvbW1lbnRDb21tZW50SW5mb0FjdGlvbkl0ZW0pW107XG4gICAgQElucHV0KClcbiAgICBjb21tZW50QWN0aW9uSXRlbT86IHsgW2tleTogc3RyaW5nXTogR0MuSW5wdXRNYW4uSUNvbW1lbnRBY3Rpb25JdGVtIH07XG4gICAgQElucHV0KClcbiAgICBjb21tZW50SW5mb0FjdGlvbkl0ZW0/OiB7IFtrZXk6IHN0cmluZ106IEdDLklucHV0TWFuLklDb21tZW50SW5mb0FjdGlvbkl0ZW0gfTtcbiAgICBASW5wdXQoKVxuICAgIGNvbW1lbnRBY3Rpb25CdXR0b25UeXBlPzogR0MuSW5wdXRNYW4uR2NDb21tZW50QWN0aW9uQnV0dG9uVHlwZTtcbiAgICBASW5wdXQoKVxuICAgIHBhZ2VTaXplPzogbnVtYmVyO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZE9uRGVtYW5kPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIGFsbG93QW5vbnltb3VzPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIGFub255bW91c1VzZXJJbmZvPzogR0MuSW5wdXRNYW4uVXNlckluZm87XG4gICAgQElucHV0KClcbiAgICB3YXJuaW5nTWVzc2FnZT86IEdDLklucHV0TWFuLklXYXJuaW5nTWVzc2FnZTtcbiAgICBASW5wdXQoKVxuICAgIHdhdGVybWFyaz86IEdDLklucHV0TWFuLklXYXRlck1hcms7XG4gICAgQElucHV0KClcbiAgICBjb21tZW50Rm9ybWF0dGVyPzogR0MuSW5wdXRNYW4uQ29tbWVudEZvcm1hdHRlcjtcbiAgICBASW5wdXQoKVxuICAgIGVkaXRvckNvbmZpZz86IEdDLklucHV0TWFuLkVkaXRvckNvbmZpZztcbiAgICBASW5wdXQoKVxuICAgIGF2YXRhclR5cGU/OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnRVc2VySWNvblR5cGU7XG4gICAgQElucHV0KClcbiAgICBsb2FkVXNlcnNJbmZvSGFuZGxlcj86IEdDLklucHV0TWFuLkxvYWRVc2Vyc0NhbGxiYWNrO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZENvbW1lbnRzPzogKGFyZ3M6IEdDLklucHV0TWFuLkxvYWRNb3JlQ29tbWVudHNJbmZvKSA9PiBHQy5JbnB1dE1hbi5Mb2FkQ29tbWVudHNSZXN1bHQ7XG4gICAgQElucHV0KClcbiAgICBhZGROZXdDb21tZW50VG8/OiBHQy5JbnB1dE1hbi5BZGROZXdDb21tZW50UG9zaXRpb247XG4gICAgQElucHV0KClcbiAgICBrZWVwRHJhZnQ/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgZGF0YVNvdXJjZT86IEdDLklucHV0TWFuLklHY0NvbW1lbnREYXRhU291cmNlO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZENvbW1lbnRDb3VudD86ICgpID0+IG51bWJlciB8IFByb21pc2U8bnVtYmVyPjtcbiAgICBASW5wdXQoKVxuICAgIGNvbW1lbnRDb3VudEZvcm1hdHRlcj86IChuOiBudW1iZXIpID0+IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFJlYWN0aW9uQ291bnQ/OiAoKSA9PiBudW1iZXIgfCBQcm9taXNlPG51bWJlcj47XG4gICAgQElucHV0KClcbiAgICByZWFjdGlvbkNvdW50Rm9ybWF0dGVyPzogKG46IG51bWJlcikgPT4gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KClcbiAgICBzb3J0SW5mbz86IEdDLklucHV0TWFuLlNvcnRJbmZvO1xuICAgIEBJbnB1dCgpXG4gICAgY3JlYXRlRWRpdG9yPzogKGFyZ3M6IEdDLklucHV0TWFuLkNyZWF0ZUVkaXRvckFyZ3MpID0+IEdDLklucHV0TWFuLklDb21tZW50RWRpdG9yO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFJlcGxpZXNPbkRlbWFuZD86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICByZXBseUxldmVsPzogbnVtYmVyO1xuICAgIEBJbnB1dCgpXG4gICAgY29sbGFwc2VSZXBsaWVzTW9kZT86IEdDLklucHV0TWFuLkdjQ29tbWVudENvbGxhcHNlUmVwbGllc01vZGU7XG4gICAgQElucHV0KClcbiAgICBzaG93Q3VycmVudFVzZXJOYW1lPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIGNvbnRleHRUb29sYmFyPzogKHN0cmluZyB8IEdDLklucHV0TWFuLkdjQ29tbWVudENvbnRleHRUb29sYmFyIHwgR0MuSW5wdXRNYW4uQ29udGV4dFRvb2xiYXJPcHRpb24pW107XG4gICAgQElucHV0KClcbiAgICBjb250ZXh0VG9vbGJhckl0ZW0/OiB7IFtrZXk6IHN0cmluZ106IEdDLklucHV0TWFuLklDb21tZW50Q29udGV4dFRvb2xiYXJJdGVtIH07XG4gICAgQElucHV0KClcbiAgICBsb2FkQ29tbWVudFJlcGxpZXM/OiAoY29tbWVudDogR0MuSW5wdXRNYW4uSUNvbW1lbnQsIGxvYWRlZENvdW50OiBudW1iZXIpID0+IEdDLklucHV0TWFuLkxvYWRDb21tZW50c1Jlc3VsdDtcbiAgICBASW5wdXQoKVxuICAgIGNvbW1lbnRzPzogR0MuSW5wdXRNYW4uSUNvbW1lbnRbXTtcbiAgICBASW5wdXQoKVxuICAgIHN0aWNrZWRDb21tZW50PzogR0MuSW5wdXRNYW4uSUNvbW1lbnQ7XG4gICAgQElucHV0KClcbiAgICBjb3BpZWRMaW5rRGlzcGxheVRleHRGb3JtYXR0ZXI/OiAoY29tbWVudDogR0MuSW5wdXRNYW4uSUNvbW1lbnQpID0+IEdDLklucHV0TWFuLklDb3BpZWRMaW5rRGlzcGxheVRleHRDb25maWc7XG4gICAgQElucHV0KClcbiAgICBjb3BpZWRMaW5rRm9ybWF0dGVyPzogKGNvbW1lbnQ6IEdDLklucHV0TWFuLklDb21tZW50KSA9PiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBjb3BpZWRMaW5rU2VhcmNoUGFyYW1zPzogKEdDLklucHV0TWFuLkdjQ29tbWVudExpbmtTZWFyY2hQYXJhbXMgfCBHQy5JbnB1dE1hbi5DdXN0b21MaW5rU2VhcmNoUGFyYW0pW107XG4gICAgQElucHV0KClcbiAgICBwYXN0ZWRMaW5rVHlwZT86IEdDLklucHV0TWFuLkdjQ29tbWVudFBhc3RlTGlua1R5cGU7XG4gICAgQElucHV0KClcbiAgICBzaG93TGlua1R5cGVDb250ZXh0VG9vbGJhcj86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBsb2FkQ29tbWVudEJ5TGluaz86IChsaW5rOiBzdHJpbmcpID0+IFByb21pc2U8R0MuSW5wdXRNYW4uTG9hZENvbW1lbnRCeUxpbmtSZXN1bHQ+O1xuICAgIEBJbnB1dCgpXG4gICAgb3BlbkxpbmtNb2RlPzogR0MuSW5wdXRNYW4uT3BlbkxpbmtNb2RlO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFN0aWNrZWRDb21tZW50PzogKCkgPT4gR0MuSW5wdXRNYW4uSUNvbW1lbnQgfCBudWxsO1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1plcm9SZWFjdGlvbj86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBzaG93T3BlblJlYWN0aW9uTGlzdEJ1dHRvbj86IGJvb2xlYW47XG4gICAgXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGVkaXRvckNyZWF0ZWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwcmVwcm9jZXNzRXJyb3I6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBiZWZvcmVFeGVjdXRlQ29tbWFuZDogRXZlbnRFbWl0dGVyPG9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGFmdGVyRXhlY3V0ZUNvbW1hbmQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBiZWZvcmVGaXJzdExvYWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBhZnRlckZpcnN0TG9hZDogRXZlbnRFbWl0dGVyPG9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uSW5pdGlhbGl6ZWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xufVxuIl19