/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { ModalDirective } from 'ngx-bootstrap'; import { AppConfigService } from '../app-config/app-config.service'; import { Request } from '../_services/request.service'; import { Common } from '../_services/common.service'; import { FormBuilder, Validators } from '@angular/forms'; import { CustomValidators } from 'ng2-validation'; import { UploadAttachmentComponent } from '../upload-attachment/upload-attachment.component'; import * as _ from 'lodash'; import { DateService } from '../_services/date.service'; class Options { } if (false) { /** * title ที่ต้องการแสดง * @type {?} */ Options.prototype.title; /** * data * @type {?} */ Options.prototype.data; /** @type {?} */ Options.prototype.mode; /** @type {?} */ Options.prototype.downloadToken; /** * name ที่ต้องการแสดง * @type {?} */ Options.prototype.config; } export class ModalAttachmentComponent extends Options { /** * @param {?} appConfigService * @param {?} request * @param {?} formBuilder * @param {?} common * @param {?} date */ constructor(appConfigService, request, formBuilder, common, date) { super(); this.appConfigService = appConfigService; this.request = request; this.formBuilder = formBuilder; this.common = common; this.date = date; this.isImage = false; this.onModalCreateSubmit = new EventEmitter(); this.onModalEditSubmit = new EventEmitter(); this.submitted = false; this.title = ''; this.selectList = []; this.modalConfig = { ignoreBackdropClick: true }; this.isMore = false; this.attachmentData = { doc_type: null }; this.tmpData = {}; this.filteredDepartments = []; this.departmentList = []; this.disabledForm = false; this.isOpen = false; this.isEnable = false; this.config = appConfigService.getConfig(); this.attachmentUrl = _.get(this.config, 'apiServers.alfresco.url') || "https://203.154.32.126:2585/api/mfec/Alfresco"; } /** * @return {?} */ ngOnInit() { this.th = this.common.fnLocalPCalendar('th'); this.registerForm = this.formBuilder.group({ name: [{ value: '', disabled: this.disabledForm }, Validators.required], doc_type: [{ value: '', disabled: this.disabledForm }], url: [{ value: '', disabled: this.disabledForm }], is_classifieds: [{ value: '', disabled: this.disabledForm }], is_image: [{ value: '', disabled: this.disabledForm }], keyword: [{ value: '', disabled: this.disabledForm }], book_no: [{ value: '', disabled: this.disabledForm }], amount: [{ value: '', disabled: this.disabledForm }], record_date: [{ value: '', disabled: this.disabledForm }], version: [{ value: '', disabled: this.disabledForm }], resolution: [{ value: '', disabled: this.disabledForm }], remark: [{ value: '', disabled: this.disabledForm }], moreField: this.formBuilder.array([]) }); } /** * @param {?=} options * @return {?} */ open(options) { return tslib_1.__awaiter(this, void 0, void 0, function* () { this.isEnable = false; console.log(options); this.attachmentData = {}; if (options) { this.mode = options.mode; this.title = options.title || ''; this.downloadToken = options.downloadToken; this.attachmentData = JSON.parse(JSON.stringify(options.data)); if (!this.attachmentData.doc_type) { this.attachmentData.doc_type = null; } // ต้องเปลี่ยนเป็นเรียก api this.selectList = yield this.request.getDropDown(options.data.system_id, "ประเภทเอกสาร"); } if (this.mode) { this.attachmentData.record_date = this.date.getNow(); } if (this.mode !== 'VIEW') { if (this.mode === 'EDIT') { this.isEnable = true; } this.uploadAttachment.clearValue(); this.disabledForm = false; } else { this.disabledForm = true; } if (this.attachmentData.system_id === 11) { this.attachmentData.is_classifieds = true; } this.modal.show(); }); } /** * @return {?} */ f() { return this.registerForm.controls; } /** * @return {?} */ closeModal() { this.submitted = false; this.selectList = []; this.isMore = false; this.moreField = []; this.attachmentData = {}; this.modal.hide(); } /** * @param {?} modal * @return {?} */ onYesClick(modal) { modal.hide(); } /** * @param {?} modal * @return {?} */ onNoClick(modal) { modal.hide(); } /** * @param {?} $event * @return {?} */ onHidden($event) { console.log('LOG MESSAGE: ModalConfirm -> onHidden -> $event', $event); } /** * @return {?} */ checkExtraField() { console.log(this.selectList.map(r => r.name).indexOf(this.attachmentData.name), this.attachmentData.name); if (!this.attachmentData.name || this.attachmentData.name == '' || (this.selectList.map(r => r.name).indexOf(this.attachmentData.name) > -1)) { this.attachmentData.name = this.attachmentData.doc_type; } this.moreField = []; if (this.attachmentData.system_id) { // this.addField(newField, +requireFlag); // this.moreField.push(newField); this.isMore = true; } else { this.isMore = false; } } /** * @param {?} e * @return {?} */ onCellPrepared(e) { if (e.rowType === 'data') { for (const i in e.component.columns) { if (e.column.dataField === e.component.columns[i]) { e.cellElement.accessKey = e.component.columns[i]; } } } } /** * @param {?} data * @param {?} required * @return {?} */ addField(data, required) { /** @type {?} */ const control = /** @type {?} */ (this.registerForm.controls['moreField']); /** @type {?} */ let newgroup; if (data.type === 'text') { if (required) { /** @type {?} */ const group = {}; group[data.field_name] = [{ value: '', disabled: this.disabledForm }]; newgroup = this.formBuilder.group(group); } else { /** @type {?} */ const group = {}; group[data.field_name] = [{ value: '', disabled: this.disabledForm }]; newgroup = this.formBuilder.group(group); } } else if (data.type === 'datetime') { if (required) { /** @type {?} */ const group = {}; group[data.field_name] = [Validators.required, CustomValidators.date]; newgroup = this.formBuilder.group(group); } else { /** @type {?} */ const group = {}; group[data.field_name] = [{ value: '', disabled: this.disabledForm }]; newgroup = this.formBuilder.group(group); } } else if (data.type === 'special') { if (required) { /** @type {?} */ const group = {}; group[data.field_name] = [{ value: '', disabled: this.disabledForm }]; newgroup = this.formBuilder.group(group); } else { /** @type {?} */ const group = {}; group[data.field_name] = [{ value: '', disabled: this.disabledForm }]; newgroup = this.formBuilder.group(group); } if (data.field_name === 'amount') { /** @type {?} */ const group = {}; group['amount_type'] = [{ value: '', disabled: this.disabledForm }]; control.push(this.formBuilder.group(group)); } } control.push(newgroup); } /** * @param {?} i * @param {?} field * @param {?=} validateType * @return {?} */ getValidateMoreField(i, field, validateType) { /** @type {?} */ let formMoreField = this.f['moreField']; if (validateType) { formMoreField = formMoreField.controls[i]; formMoreField = formMoreField.controls[field]; if (formMoreField.errors) { return formMoreField.errors[validateType]; } else { return formMoreField.errors; } } else { return formMoreField.errors; } } /** * @param {?} data * @return {?} */ getRowIndex(data) { if (!data.data) { return ''; } /** @type {?} */ const no = data.row.dataIndex + 1; return no; } /** * @return {?} */ onSubmit() { return tslib_1.__awaiter(this, void 0, void 0, function* () { this.submitted = true; // ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้ if (this.registerForm.invalid) { return; } // let postData = []; // await this.request.post("/db/rc_attachment",this.attachmentData); if (this.mode === 'CREATE') { this.attachmentData.created_at = this.date.getNow(); if (!this.attachmentData.doc_type || this.attachmentData.doc_type === 'null') { delete this.attachmentData['doc_type']; } this.onModalCreateSubmit.emit(_.cloneDeep(this.attachmentData)); } else { this.onModalEditSubmit.emit(_.cloneDeep(this.attachmentData)); } this.closeModal(); }); } /** * @param {?} data * @return {?} */ onUploaded(data) { console.log("data", data); if (data && data.uuid) { this.attachmentData.url = this.attachmentUrl + '/' + data.uuid; this.attachmentData.uuid = data.uuid; this.attachmentData.filename = data.fileName; this.isEnable = true; } else { this.isEnable = false; } } /** * @return {?} */ clickUrl() { return tslib_1.__awaiter(this, void 0, void 0, function* () { window.open(yield this.request.getAttachmentLinkToken(this.attachmentData.url)); }); } /** * @param {?} data * @return {?} */ getImageLink(data) { return data.url + "?downloadToken=" + this.downloadToken; } } ModalAttachmentComponent.decorators = [ { type: Component, args: [{ selector: 'modal-attachment', template: "
\n
\n
\n
\n

{{title}}

\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n
\n
\n
\n \n \n \n
\n
\n \n \n
\n
First Name is required
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E2B\u0E21\u0E32\u0E22\u0E40\u0E2B\u0E15\u0E38
\n
\n
\n
\n
\n
\n
\n \n \n \n
\n \n \n
\n
\n \n \n
\n {{attachmentData.url}}\n \n
\n
\n
\n
\n
\n \n \n \n
\n
\n \n \n \u0E08\u0E31\u0E14\u0E40\u0E02\u0E49\u0E32\u0E27\u0E32\u0E23\u0E30\n \n \n \n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n \n \n \u0E41\u0E1B\u0E25\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E20\u0E32\u0E1E\u0E41\u0E25\u0E49\u0E27\n \n \n \n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n \n \n \n \n
\n
\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E04\u0E33\u0E2A\u0E33\u0E04\u0E31\u0E0D
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n \n \n \n \n
\n
\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23
\n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n
\n
\n \n \n
\n
\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E08\u0E31\u0E14\u0E40\u0E01\u0E47\u0E1A
\n
\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E08\u0E31\u0E14\u0E40\u0E01\u0E47\u0E1A \u0E43\u0E2B\u0E49\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07
\n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
" }] } ]; /** @nocollapse */ ModalAttachmentComponent.ctorParameters = () => [ { type: AppConfigService }, { type: Request }, { type: FormBuilder }, { type: Common }, { type: DateService } ]; ModalAttachmentComponent.propDecorators = { isImage: [{ type: Input }], onModalCreateSubmit: [{ type: Output }], onModalEditSubmit: [{ type: Output }], modal: [{ type: ViewChild, args: ['modal',] }], uploadAttachment: [{ type: ViewChild, args: ['uploadAttachment',] }] }; if (false) { /** @type {?} */ ModalAttachmentComponent.prototype.isImage; /** @type {?} */ ModalAttachmentComponent.prototype.onModalCreateSubmit; /** @type {?} */ ModalAttachmentComponent.prototype.onModalEditSubmit; /** @type {?} */ ModalAttachmentComponent.prototype.modal; /** @type {?} */ ModalAttachmentComponent.prototype.uploadAttachment; /** @type {?} */ ModalAttachmentComponent.prototype.registerForm; /** @type {?} */ ModalAttachmentComponent.prototype.control; /** @type {?} */ ModalAttachmentComponent.prototype.submitted; /** @type {?} */ ModalAttachmentComponent.prototype.title; /** @type {?} */ ModalAttachmentComponent.prototype.selectList; /** @type {?} */ ModalAttachmentComponent.prototype.modalConfig; /** @type {?} */ ModalAttachmentComponent.prototype.th; /** @type {?} */ ModalAttachmentComponent.prototype.isMore; /** @type {?} */ ModalAttachmentComponent.prototype.moreField; /** @type {?} */ ModalAttachmentComponent.prototype.config; /** @type {?} */ ModalAttachmentComponent.prototype.attachmentData; /** @type {?} */ ModalAttachmentComponent.prototype.tmpData; /** @type {?} */ ModalAttachmentComponent.prototype.filteredDepartments; /** @type {?} */ ModalAttachmentComponent.prototype.departmentList; /** @type {?} */ ModalAttachmentComponent.prototype.attachmentUrl; /** @type {?} */ ModalAttachmentComponent.prototype.disabledForm; /** @type {?} */ ModalAttachmentComponent.prototype.isOpen; /** @type {?} */ ModalAttachmentComponent.prototype.isEnable; /** @type {?} */ ModalAttachmentComponent.prototype.appConfigService; /** @type {?} */ ModalAttachmentComponent.prototype.request; /** @type {?} */ ModalAttachmentComponent.prototype.formBuilder; /** @type {?} */ ModalAttachmentComponent.prototype.common; /** @type {?} */ ModalAttachmentComponent.prototype.date; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtYXR0YWNobWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zb2MtYXBwLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvbW9kYWwtYXR0YWNobWVudC9tb2RhbC1hdHRhY2htZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQWUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFdBQVcsRUFBd0IsVUFBVSxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR2hELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUV0RDtDQVNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUQsTUFBTSwrQkFBZ0MsU0FBUSxPQUFPOzs7Ozs7OztJQThCakQsWUFBb0IsZ0JBQWtDLEVBQVUsT0FBZ0IsRUFBVSxXQUF3QixFQUFTLE1BQWMsRUFBUyxJQUFpQjtRQUMvSixLQUFLLEVBQUUsQ0FBQztRQURRLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxXQUFN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TTtvQkFDTixTQUFTLFNBQUMsT0FBTzsrQkFDakIsU0FBUyxTQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNb2RhbE9wdGlvbnMsIE1vZGFsRGlyZWN0aXZlfSBmcm9tICduZ3gtYm9vdHN0cmFwJztcbmltcG9ydCB7QXBwQ29uZmlnU2VydmljZX0gZnJvbSAnLi4vYXBwLWNvbmZpZy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJy4uL19zZXJ2aWNlcy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHtDb21tb259IGZyb20gJy4uL19zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtQXJyYXksIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgQWJzdHJhY3RDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0N1c3RvbVZhbGlkYXRvcnN9IGZyb20gJ25nMi12YWxpZGF0aW9uJztcbmltcG9ydCB7RHhEYXRhR3JpZENvbXBvbmVudH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyJztcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XG5pbXBvcnQge1VwbG9hZEF0dGFjaG1lbnRDb21wb25lbnR9IGZyb20gJy4uL3VwbG9hZC1hdHRhY2htZW50L3VwbG9hZC1hdHRhY2htZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge0RhdGVTZXJ2aWNlfSBmcm9tICcuLi9fc2VydmljZXMvZGF0ZS5zZXJ2aWNlJztcblxuY2xhc3MgT3B0aW9ucyB7XG4gICAgLyoqIHRpdGxlIOC4l+C4teC5iOC4leC5ieC4reC4h+C4geC4suC4o+C5geC4quC4lOC4hyAqL1xuICAgIHRpdGxlPzogU3RyaW5nO1xuICAgIC8qKiBkYXRhICovXG4gICAgZGF0YTogYW55O1xuICAgIG1vZGU6IGFueTtcbiAgICBkb3dubG9hZFRva2VuOiBhbnk7XG4gICAgLyoqIG5hbWUg4LiX4Li14LmI4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4LmB4Liq4LiU4LiHICovXG4gICAgY29uZmlnOiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbW9kYWwtYXR0YWNobWVudCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLWF0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbEF0dGFjaG1lbnRDb21wb25lbnQgZXh0ZW5kcyBPcHRpb25zIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIEBJbnB1dCgpIGlzSW1hZ2UgOmJvb2xlYW4gPSBmYWxzZTtcbiAgICBAT3V0cHV0KCkgb25Nb2RhbENyZWF0ZVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25Nb2RhbEVkaXRTdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQFZpZXdDaGlsZCgnbW9kYWwnKSBtb2RhbDogTW9kYWxEaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgndXBsb2FkQXR0YWNobWVudCcpIHVwbG9hZEF0dGFjaG1lbnQ6IFVwbG9hZEF0dGFjaG1lbnRDb21wb25lbnQ7XG4gICAgcmVnaXN0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgIHRpdGxlOiBhbnkgPSAnJztcbiAgICBzZWxlY3RMaXN0OiBhbnkgPSBbXTtcbiAgICBtb2RhbENvbmZpZzogTW9kYWxPcHRpb25zID0ge1xuICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgfTtcbiAgICB0aDtcbiAgICBpc01vcmUgPSBmYWxzZTtcbiAgICBtb3JlRmllbGQ6IGFueTtcbiAgICBwdWJsaWMgY29uZmlnOiBhbnk7XG4gICAgYXR0YWNobWVudERhdGE6IGFueSA9IHtcbiAgICAgICAgZG9jX3R5cGU6bnVsbFxuICAgIH07XG4gICAgdG1wRGF0YTphbnkgPSB7fTtcbiAgICBmaWx0ZXJlZERlcGFydG1lbnRzOmFueSA9IFtdO1xuICAgIGRlcGFydG1lbnRMaXN0OmFueSA9IFtdO1xuICAgIGF0dGFjaG1lbnRVcmw7XG4gICAgZGlzYWJsZWRGb3JtID0gZmFsc2U7XG4gICAgaXNPcGVuID0gZmFsc2U7XG4gICAgaXNFbmFibGUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSwgcHJpdmF0ZSByZXF1ZXN0OiBSZXF1ZXN0LCBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHVibGljIGNvbW1vbjogQ29tbW9uLCBwdWJsaWMgZGF0ZTogRGF0ZVNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBhcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnRVcmwgPSBfLmdldCh0aGlzLmNvbmZpZywgJ2FwaVNlcnZlcnMuYWxmcmVzY28udXJsJykgfHwgXCJodHRwczovLzIwMy4xNTQuMzIuMTI2OjI1ODUvYXBpL21mZWMvQWxmcmVzY29cIjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcblxuICAgICAgICB0aGlzLnRoID0gdGhpcy5jb21tb24uZm5Mb2NhbFBDYWxlbmRhcigndGgnKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgZG9jX3R5cGU6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgdXJsOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XSxcbiAgICAgICAgICAgIGlzX2NsYXNzaWZpZWRzOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XSxcbiAgICAgICAgICAgIGlzX2ltYWdlOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XSxcbiAgICAgICAgICAgIGtleXdvcmQ6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgYm9va19ubzogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV0sXG4gICAgICAgICAgICBhbW91bnQ6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgcmVjb3JkX2RhdGU6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgdmVyc2lvbjogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV0sXG4gICAgICAgICAgICByZXNvbHV0aW9uOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XSxcbiAgICAgICAgICAgIHJlbWFyazogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV0sXG4gICAgICAgICAgICBtb3JlRmllbGQ6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIG9wZW4ob3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5pc0VuYWJsZSA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50RGF0YSA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlO1xuICAgICAgICAgICAgdGhpcy50aXRsZSA9IG9wdGlvbnMudGl0bGUgfHwgJyc7XG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkVG9rZW4gPSBvcHRpb25zLmRvd25sb2FkVG9rZW47XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEpKTtcbiAgICAgICAgICAgIGlmKCF0aGlzLmF0dGFjaG1lbnREYXRhLmRvY190eXBlKXtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnREYXRhLmRvY190eXBlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOC4leC5ieC4reC4h+C5gOC4m+C4peC4teC5iOC4ouC4meC5gOC4m+C5h+C4meC5gOC4o+C4teC4ouC4gSBhcGlcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TGlzdCA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXREcm9wRG93bihvcHRpb25zLmRhdGEuc3lzdGVtX2lkLFwi4Lib4Lij4Liw4LmA4Lig4LiX4LmA4Lit4LiB4Liq4Liy4LijXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMubW9kZSl7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnREYXRhLnJlY29yZF9kYXRlID0gdGhpcy5kYXRlLmdldE5vdygpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMubW9kZSAhPT0gJ1ZJRVcnKXtcbiAgICAgICAgICAgIGlmKHRoaXMubW9kZSA9PT0gJ0VESVQnKXtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW5hYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBsb2FkQXR0YWNobWVudC5jbGVhclZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkRm9ybSA9IGZhbHNlO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRGb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuYXR0YWNobWVudERhdGEuc3lzdGVtX2lkID09PSAxMSl7XG4gICAgICAgICAgdGhpcy5hdHRhY2htZW50RGF0YS5pc19jbGFzc2lmaWVkcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vZGFsLnNob3coKTtcbiAgICB9XG5cbiAgICBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RlckZvcm0uY29udHJvbHM7XG4gICAgfVxuXG4gICAgY2xvc2VNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RMaXN0ID0gW107XG4gICAgICAgIHRoaXMuaXNNb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubW9yZUZpZWxkID0gW107XG4gICAgICAgIHRoaXMuYXR0YWNobWVudERhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RhbC5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25ZZXNDbGljayhtb2RhbCkge1xuICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25Ob0NsaWNrKG1vZGFsKSB7XG4gICAgICAgIG1vZGFsLmhpZGUoKTtcbiAgICB9XG5cbiAgICBvbkhpZGRlbigkZXZlbnQ6IE1vZGFsRGlyZWN0aXZlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdMT0cgTUVTU0FHRTogTW9kYWxDb25maXJtIC0+IG9uSGlkZGVuIC0+ICRldmVudCcsICRldmVudCk7XG5cbiAgICB9XG5cbiAgICBjaGVja0V4dHJhRmllbGQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0TGlzdC5tYXAocj0+ci5uYW1lKS5pbmRleE9mKHRoaXMuYXR0YWNobWVudERhdGEubmFtZSksdGhpcy5hdHRhY2htZW50RGF0YS5uYW1lKVxuICAgICAgICBpZighdGhpcy5hdHRhY2htZW50RGF0YS5uYW1lIHx8IHRoaXMuYXR0YWNobWVudERhdGEubmFtZSA9PSAnJyB8fCAodGhpcy5zZWxlY3RMaXN0Lm1hcChyPT5yLm5hbWUpLmluZGV4T2YodGhpcy5hdHRhY2htZW50RGF0YS5uYW1lKSA+IC0xKSl7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnREYXRhLm5hbWUgPSB0aGlzLmF0dGFjaG1lbnREYXRhLmRvY190eXBlXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vcmVGaWVsZCA9IFtdO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2htZW50RGF0YS5zeXN0ZW1faWQgKSB7XG4gICAgICAgICAgICAvLyB0aGlzLmFkZEZpZWxkKG5ld0ZpZWxkLCArcmVxdWlyZUZsYWcpO1xuICAgICAgICAgICAgLy8gdGhpcy5tb3JlRmllbGQucHVzaChuZXdGaWVsZCk7XG4gICAgICAgICAgICB0aGlzLmlzTW9yZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzTW9yZSA9IGZhbHNlO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIG9uQ2VsbFByZXBhcmVkKGUpIHtcbiAgICAgICAgaWYgKGUucm93VHlwZSA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gZS5jb21wb25lbnQuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGlmIChlLmNvbHVtbi5kYXRhRmllbGQgPT09IGUuY29tcG9uZW50LmNvbHVtbnNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgZS5jZWxsRWxlbWVudC5hY2Nlc3NLZXkgPSBlLmNvbXBvbmVudC5jb2x1bW5zW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZEZpZWxkKGRhdGEsIHJlcXVpcmVkKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSA8Rm9ybUFycmF5PnRoaXMucmVnaXN0ZXJGb3JtLmNvbnRyb2xzWydtb3JlRmllbGQnXTtcbiAgICAgICAgbGV0IG5ld2dyb3VwO1xuICAgICAgICBpZiAoZGF0YS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV07XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQ3VzdG9tVmFsaWRhdG9ycy5kYXRlXTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dO1xuICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnc3BlY2lhbCcpe1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dO1xuICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmZpZWxkX25hbWUgPT09ICdhbW91bnQnKXtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbJ2Ftb3VudF90eXBlJ10gPSBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnB1c2godGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udHJvbC5wdXNoKG5ld2dyb3VwKTtcbiAgICB9XG5cbiAgICBnZXRWYWxpZGF0ZU1vcmVGaWVsZChpLCBmaWVsZCwgdmFsaWRhdGVUeXBlPykge1xuICAgICAgICBsZXQgZm9ybU1vcmVGaWVsZDogYW55ID0gdGhpcy5mWydtb3JlRmllbGQnXTtcbiAgICAgICAgaWYgKHZhbGlkYXRlVHlwZSkge1xuICAgICAgICAgICAgZm9ybU1vcmVGaWVsZCA9IGZvcm1Nb3JlRmllbGQuY29udHJvbHNbaV07XG4gICAgICAgICAgICBmb3JtTW9yZUZpZWxkID0gZm9ybU1vcmVGaWVsZC5jb250cm9sc1tmaWVsZF07XG4gICAgICAgICAgICBpZiAoZm9ybU1vcmVGaWVsZC5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybU1vcmVGaWVsZC5lcnJvcnNbdmFsaWRhdGVUeXBlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1Nb3JlRmllbGQuZXJyb3JzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1Nb3JlRmllbGQuZXJyb3JzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Um93SW5kZXgoZGF0YSkge1xuICAgICAgICBpZiAoIWRhdGEuZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vID0gZGF0YS5yb3cuZGF0YUluZGV4ICsgMTtcbiAgICAgICAgcmV0dXJuIG5vO1xuICAgIH1cblxuICAgIGFzeW5jIG9uU3VibWl0KCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIC8vIOC4luC5ieC4siBmb3JtIOC5hOC4oeC5iOC4hOC4o+C4muC4q+C4o+C4t+C4reC4nOC4tOC4lOC4leC4suC4oeC5gOC4h+C4t+C5iOC4reC4meC5hOC4guC4l+C4teC5iOC4leC4seC5ieC4h+C5hOC4p+C5ieC4iOC4sOC4iOC4muC4l+C4teC5iOC4leC4o+C4h+C4meC4teC5iVxuICAgICAgICBpZiAodGhpcy5yZWdpc3RlckZvcm0uaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGxldCBwb3N0RGF0YSA9IFtdO1xuICAgICAgICAvLyBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdChcIi9kYi9yY19hdHRhY2htZW50XCIsdGhpcy5hdHRhY2htZW50RGF0YSk7XG4gICAgICAgIGlmKHRoaXMubW9kZSA9PT0gJ0NSRUFURScpe1xuICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50RGF0YS5jcmVhdGVkX2F0ID0gdGhpcy5kYXRlLmdldE5vdygpO1xuICAgICAgICAgICAgaWYoIXRoaXMuYXR0YWNobWVudERhdGEuZG9jX3R5cGUgfHwgdGhpcy5hdHRhY2htZW50RGF0YS5kb2NfdHlwZSA9PT0gJ251bGwnKXtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5hdHRhY2htZW50RGF0YVsnZG9jX3R5cGUnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25Nb2RhbENyZWF0ZVN1Ym1pdC5lbWl0KF8uY2xvbmVEZWVwKHRoaXMuYXR0YWNobWVudERhdGEpKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLm9uTW9kYWxFZGl0U3VibWl0LmVtaXQoXy5jbG9uZURlZXAodGhpcy5hdHRhY2htZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICAgIH1cblxuICAgIG9uVXBsb2FkZWQoZGF0YSl7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGF0YVwiLGRhdGEpO1xuICAgICAgICBpZihkYXRhICYmIGRhdGEudXVpZCl7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnREYXRhLnVybCA9IHRoaXMuYXR0YWNobWVudFVybCsnLycrZGF0YS51dWlkO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50RGF0YS51dWlkID0gZGF0YS51dWlkO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50RGF0YS5maWxlbmFtZSA9IGRhdGEuZmlsZU5hbWU7XG4gICAgICAgICAgICB0aGlzLmlzRW5hYmxlID0gdHJ1ZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmlzRW5hYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBjbGlja1VybCgpe1xuICAgICAgICB3aW5kb3cub3Blbihhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0QXR0YWNobWVudExpbmtUb2tlbih0aGlzLmF0dGFjaG1lbnREYXRhLnVybCkpO1xuICAgIH1cblxuICAgIGdldEltYWdlTGluayhkYXRhKXtcbiAgICAgICAgcmV0dXJuIGRhdGEudXJsK1wiP2Rvd25sb2FkVG9rZW49XCIrdGhpcy5kb3dubG9hZFRva2VuO1xuICAgIH1cbn1cbiJdfQ==