@inovamobil/ic-databar-lib 2.1.2 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/inovamobil-ic-databar-lib.umd.js +1 -1
- package/bundles/inovamobil-ic-databar-lib.umd.js.map +1 -1
- package/bundles/inovamobil-ic-databar-lib.umd.min.js +1 -1
- package/bundles/inovamobil-ic-databar-lib.umd.min.js.map +1 -1
- package/esm2015/lib/ic-data-bar.component.js +2 -2
- package/fesm2015/inovamobil-ic-databar-lib.js +1 -1
- package/fesm2015/inovamobil-ic-databar-lib.js.map +1 -1
- package/inovamobil-ic-databar-lib.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../projects/ic-databar-lib/src/lib/enum/estatus.ts","../../../projects/ic-databar-lib/src/lib/contrato/OnInitDataBar.ts","../../../projects/ic-databar-lib/src/lib/enum/eeventoclick.ts","../../../projects/ic-databar-lib/src/lib/contrato/DataBarConfigBotoesService.ts","../../../projects/ic-databar-lib/src/lib/services/ic-databar-event-click.service.ts","../../../projects/ic-databar-lib/src/components/dialogs/error-dialog/error-dialog.component.ts","../../../projects/ic-databar-lib/src/components/dialogs/error-dialog/service/error-dialog.service.ts","../../../projects/ic-databar-lib/src/lib/services/ic-databar.service.ts","../../../projects/ic-databar-lib/src/lib/services/ic-databar-reverter.service.ts","../../../projects/ic-databar-lib/src/lib/ic-data-bar.component.ts","../../../projects/ic-databar-lib/src/components/dialogs/error-dialog/error-dialog.module.ts","../../../projects/ic-databar-lib/src/lib/ic-data-bar.module.ts"],"names":["EStatus","OnInitDataBar","this","prototype","ngOnInit","onInit","servicoDataBarBind","status","novaPesquisa","statusChanged","statusDataBar","onStatusChanged","Object","defineProperty","inserindo","editando","removendo","Directive","EEventoClick","DataBarConfigBotoesService","desabilitarBotaoNovaPesquisa","args","_i","arguments","length","desabilitarBotaoReverter","desabilitarBotaoPesquisar","desabilitarBotaoEditar","desabilitarBotaoAdicionar","desabilitarBotaoRemover","desabilitarBotaoSalvar","desabilitarBotaoPrimeiro","desabilitarBotaoAnterior","desabilitarBotaoProximo","desabilitarBotaoUltimo","desabilitarBotaoModoTabela","exibirBotaoModoTabela","DatabarEventClickService","onEvent","emitir","evento","ErrorDialogComponent","dialogRef","data","mensagem","titulo","close","Component","selector","template","MatDialogRef","Inject","MAT_DIALOG_DATA","ErrorDialogService","dialog","openDialog","dialogConfig","MatDialogConfig","disableClose","autoFocus","minWidth","open","closeDialog","Injectable","providedIn","MatDialog","DatabarService","desabilitarForm","form","disable","emitEvent","onlySelf","habilitarForm","enable","resetForm","entidadePaginada","reset","entidade","posicao","total","emitirEventoClick","servico","eventDatabar","definirProgresso","progresso","IcDatabarReverterService","_statusAnterior","setDadosAnteriores","formularo","_entidadePaginadaAnterior","quantidade","_dadosAnterioresFormulario","getRawValue","restaurarDadosAnteriores","formulario","patchValue","DataBarComponent","_dialog","_dialogErro","_elementRef","_databarService","_snackBarService","disabled","EventEmitter","emProgresso","_servicoReverter","validarPropertsObrigatorias","setProgresso","_submeterFormularioOnEnter","observarSetStatus","ngOnDestroy","servicoBind","onClickEnter","unsubscribe","$setStatus","fecharSidenav","event","nativeElement","contains","target","drawer","invalid","_a","servicoConfiguracaoBotoes","dadosCarregados","executarAcao","pesquisando","_b","inserindoOuEditando","onClickReverter","_exibirDialogConfirmacaoReverter","onClickModoTabela","_emitirEventoClick","onClickNovaPesquisa","afterClickNovaPesquisa","value","setStatus","pesquisar","_setDadosAnteriores","concat","_getEntidade","_paginar","inserir","onClickInserir","_clickInserir","afterClickInserir","editar","onClickEditar","_clickEditar","afterClickEditar","remover","onClickRemover","_clickRemover","afterClickRemover","proximo","anterior","ultimo","primeiro","salvar","onClickSalvar","_inserir","_editar","_this","salvando","criar","pipe","finalize","afterClickSalvar","subscribe","success","abrirSnackBarSucesso","retornarServicoReverter","_reverter","statusAnterior","afterClickReverter","_resetarContadorPaginacao","Error","emit","valid","markAllAsTouched","_exibirDialogConfirmacao","_acaoCloseDialogConfirmacao","acaoMensagem","acaoOk","acaoCancelar","acao","posicaoAnterior","listarPaginacao","error","console","IcConfirmaDialogService","ElementRef","IcmSnackBarService","Input","Output","ViewChild","static","HostListener","NgModule","declarations","imports","MatDialogModule","exports","entryComponents","CommonModule","MatToolbarModule","MatListModule","MatSidenavModule","MatIconModule","MatProgressSpinnerModule","MatDividerModule","MatButtonModule","MatTooltipModule","FlexLayoutModule","IcConfirmaDialogModule","ErrorDialogModule","IcmSnackBarModule","providers"],"mappings":"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","sourcesContent":["\r\nexport enum EStatus {\r\n novaPesquisa = 'Nova pesquisa',\r\n inserindo = 'Inserindo',\r\n editando = 'Editando',\r\n removendo = 'Removendo',\r\n dadosCarregados = 'Dados carregados',\r\n pesquisando = 'Pesquisando',\r\n executarAcao = 'Executar ação',\r\n salvando = 'Salvando'\r\n}\r\n","import { IDataBarBindComponent } from './IDataBarBind';\r\nimport { Component, Directive } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\nimport { IDataEntidadePaginada } from './IDataEntidadePaginada';\r\nimport { IDataBarBindService } from './IDataBarService';\r\nimport { EStatus } from '../enum/estatus';\r\n\r\n@Directive()\r\nexport abstract class OnInitDataBar<T> implements IDataBarBindComponent<T> {\r\n form: FormGroup;\r\n entidadePaginada: IDataEntidadePaginada<T>;\r\n statusDataBar: EStatus;\r\n servicoDataBarBind: IDataBarBindService<T>;\r\n EStatus: typeof EStatus = EStatus;\r\n\r\n abstract onStatusChanged(status: EStatus): void;\r\n\r\n abstract onInit(): void;\r\n\r\n ngOnInit(): void {\r\n this.onInit();\r\n this.servicoDataBarBind.status = EStatus.novaPesquisa;\r\n }\r\n\r\n statusChanged(status: EStatus): void {\r\n this.servicoDataBarBind.status = status;\r\n this.statusDataBar = status;\r\n this.onStatusChanged(status);\r\n }\r\n\r\n public get inserindoOuEditando(): boolean {\r\n return this.statusDataBar === EStatus.inserindo ||\r\n this.statusDataBar === EStatus.editando;\r\n }\r\n\r\n public get inserindo(): boolean {\r\n return this.statusDataBar === EStatus.inserindo;\r\n }\r\n\r\n public get editando(): boolean {\r\n return this.statusDataBar === EStatus.editando;\r\n }\r\n\r\n public get editandoOuRemovendo(): boolean {\r\n return (this.statusDataBar === EStatus.editando || this.statusDataBar === EStatus.removendo);\r\n }\r\n}\r\n","export enum EEventoClick {\r\n onClickInserir = 'onInserir',\r\n afterClickInserir = 'afterClickInserir',\r\n onClickReverter = \"onReverter\",\r\n afterClickReverter = \"afterClickReverter\",\r\n onClickNovaPesquisa = 'onNovaPesquisa',\r\n afterClickNovaPesquisa = 'afterClickNovaPesquisa',\r\n onClickEditar = 'onEditar',\r\n afterClickEditar = 'afterClickEditar',\r\n onClickRemover = 'onRemover',\r\n afterClickRemover = 'afterClickRemover',\r\n onClickSalvar = 'onClickSalvar',\r\n afterClickSalvar = 'afterClickSalvar',\r\n onClickModoTabela= 'onClickModoTabela'\r\n}\r\n\r\n","export abstract class DataBarConfigBotoesService {\r\n desabilitarBotaoNovaPesquisa(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoReverter(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoPesquisar(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoEditar(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoAdicionar(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoRemover(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoSalvar(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoPrimeiro(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoAnterior(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoProximo(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoUltimo(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoModoTabela(...args): boolean {\r\n return false;\r\n }\r\n\r\n exibirBotaoModoTabela(...args): boolean {\r\n return false;\r\n }\r\n}\r\n","import { EEventoClick } from '../enum/eeventoclick';\r\n\r\nexport class DatabarEventClickService {\r\n\r\n constructor(private onEvent: (event: EEventoClick) => void) {}\r\n \r\n emitir(evento: EEventoClick): void {\r\n this.onEvent(evento);\r\n }\r\n\r\n}\r\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { Inject, Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'confirma-dialog',\r\n templateUrl: './view/error-dialog.html',\r\n styleUrls: ['./view/error-dialog.scss']\r\n})\r\nexport class ErrorDialogComponent {\r\n\r\n mensagem: string;\r\n titulo: string;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef<ErrorDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) data) {\r\n\r\n this.mensagem = data.mensagem;\r\n this.titulo = data.titulo;\r\n }\r\n\r\n close(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n\r\n","import { MatDialogConfig, MatDialog } from '@angular/material/dialog';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { ErrorDialogComponent } from '../error-dialog.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport abstract class ErrorDialogService {\r\n\r\n dialogRef: any;\r\n\r\n constructor(private dialog: MatDialog) { }\r\n\r\n openDialog(titulo: string, mensagem: string): void {\r\n const dialogConfig = new MatDialogConfig();\r\n dialogConfig.disableClose = true;\r\n dialogConfig.autoFocus = true;\r\n\r\n dialogConfig.data = {\r\n titulo: titulo,\r\n mensagem: mensagem\r\n };\r\n\r\n dialogConfig.minWidth = '300px';\r\n\r\n this.dialogRef = this.dialog.open(ErrorDialogComponent, dialogConfig);\r\n\r\n }\r\n\r\n closeDialog(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\nimport { IDataEntidadePaginada } from '../contrato/IDataEntidadePaginada';\r\nimport { IDatabarBindOnClickService, EEventoClick } from '../../public-api';\r\n\r\n@Injectable()\r\nexport class DatabarService {\r\n\r\n\r\n constructor() { }\r\n\r\n public desabilitarForm(form: FormGroup): void {\r\n form.disable({ emitEvent: false, onlySelf: true });\r\n }\r\n\r\n public habilitarForm(form: FormGroup): void {\r\n form.enable({ emitEvent: false, onlySelf: true });\r\n }\r\n\r\n public resetForm(form: FormGroup, entidadePaginada: IDataEntidadePaginada<any>): void {\r\n form.reset({ emitEvent: false, onlySelf: true });\r\n entidadePaginada.entidade = null;\r\n entidadePaginada.posicao = 0;\r\n entidadePaginada.total = 0;\r\n }\r\n\r\n public emitirEventoClick<T>(servico: IDatabarBindOnClickService<T>, evento: EEventoClick): void {\r\n if (servico.eventDatabar) {\r\n servico.eventDatabar.emitir(evento);\r\n }\r\n }\r\n\r\n definirProgresso(form: FormGroup, progresso: boolean): boolean {\r\n if (!form)\r\n return;\r\n\r\n if (progresso)\r\n this.desabilitarForm(form);\r\n else\r\n this.habilitarForm(form);\r\n\r\n return progresso;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { EStatus } from '../enum/estatus';\r\nimport { IDataEntidadePaginada } from '../contrato/IDataEntidadePaginada';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { IDataBarReverterService } from '../contrato/IDataBarReverterService';\r\n\r\n@Injectable()\r\nexport class IcDatabarReverterService<T> implements IDataBarReverterService<T>{\r\n\r\n private _statusAnterior: EStatus;\r\n private _dadosAnterioresFormulario: T;\r\n private _entidadePaginadaAnterior: IDataEntidadePaginada<T>;\r\n\r\n get statusAnterior(): EStatus {\r\n return this._statusAnterior;\r\n }\r\n\r\n public setDadosAnteriores(status: EStatus, formularo: FormGroup, entidadePaginada: IDataEntidadePaginada<T>): void {\r\n this._entidadePaginadaAnterior = {\r\n entidade: entidadePaginada.entidade,\r\n posicao: entidadePaginada.posicao,\r\n quantidade: entidadePaginada.quantidade,\r\n total: entidadePaginada.total\r\n } as IDataEntidadePaginada<T>;\r\n\r\n this._dadosAnterioresFormulario = formularo.getRawValue();\r\n this._statusAnterior = status;\r\n }\r\n\r\n public restaurarDadosAnteriores(formulario: FormGroup): IDataEntidadePaginada<T> {\r\n formulario.patchValue(this._dadosAnterioresFormulario);\r\n return this._entidadePaginadaAnterior;\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n HostListener,\r\n ElementRef,\r\n ViewChild,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatDrawer } from '@angular/material/sidenav';\r\n\r\nimport { Subscription } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\nimport { IcConfirmaDialogService } from '@inovamobil/ic-confirma-dialog';\r\nimport { IcmSnackBarService } from '@inovamobil/icm-snackbar';\r\n\r\nimport { IDataEntidadePaginada } from './contrato/IDataEntidadePaginada';\r\nimport { IDataBarBindService } from './contrato/IDataBarService';\r\nimport { EStatus } from './enum/estatus';\r\nimport { EEventoClick } from './enum/eeventoclick';\r\nimport { IDatabarBindOnClickService } from './contrato/IDataBarBindOnClickService';\r\nimport { IDatabarBindStatusService } from '../public-api';\r\nimport { ErrorDialogService } from '../components/dialogs/error-dialog/service/error-dialog.service';\r\nimport { ACAO_PAGINACAO } from './constants/ic-databar.constants';\r\nimport { DatabarService } from './services/ic-databar.service';\r\nimport { IcDatabarReverterService } from './services/ic-databar-reverter.service';\r\nimport { IDataBarReverterService } from './contrato/IDataBarReverterService';\r\nimport { DataBarConfigBotoesService } from './contrato/DataBarConfigBotoesService';\r\n\r\n@Component({\r\n selector: 'ic-data-bar',\r\n templateUrl: './view/ic-data-bar.component.html',\r\n styleUrls: ['./view/ic-data-bar.component.scss'],\r\n})\r\nexport class DataBarComponent<T> implements OnInit, OnDestroy {\r\n @Input() servicoBind:\r\n | IDataBarBindService<T>\r\n | IDatabarBindStatusService<T>\r\n | IDatabarBindOnClickService<T>;\r\n @Input() form: FormGroup;\r\n @Input() entidadePaginada: IDataEntidadePaginada<T>;\r\n @Input() disabled = false;\r\n @Input() servicoConfiguracaoBotoes: DataBarConfigBotoesService;\r\n @Input() set servicoReverter(servico: IDataBarReverterService<T>) {\r\n this._servicoReverter = servico;\r\n }\r\n\r\n @Output() statusChanged = new EventEmitter<EStatus>();\r\n\r\n public status: EStatus;\r\n public EStatus = EStatus;\r\n public emProgresso = false;\r\n private _servicoReverter: IDataBarReverterService<T>;\r\n private $setStatus: Subscription;\r\n\r\n @ViewChild('drawer', { static: false }) drawer: MatDrawer;\r\n\r\n constructor(\r\n private _dialog: IcConfirmaDialogService,\r\n private _dialogErro: ErrorDialogService,\r\n private _elementRef: ElementRef,\r\n private _databarService: DatabarService,\r\n private _snackBarService: IcmSnackBarService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.validarPropertsObrigatorias();\r\n this.setProgresso(false);\r\n this.novaPesquisa();\r\n this._submeterFormularioOnEnter();\r\n this.observarSetStatus();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.servicoBind.onClickEnter) this.servicoBind.onClickEnter.unsubscribe();\r\n\r\n if (this.$setStatus) this.$setStatus.unsubscribe();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n fecharSidenav(event): void {\r\n if (this._elementRef.nativeElement.contains(event.target)) {\r\n return;\r\n }\r\n this.drawer.close();\r\n }\r\n\r\n get inserindoOuEditando(): boolean {\r\n return this.status === EStatus.inserindo || this.status === EStatus.editando;\r\n }\r\n\r\n get desabilitarBotaoModoTabela(): boolean {\r\n return (\r\n this.status == EStatus.inserindo ||\r\n this.status == EStatus.editando ||\r\n this.emProgresso ||\r\n this.form.invalid ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoModoTabela()\r\n );\r\n }\r\n\r\n get desabilitarBotaoPesquisar(): boolean {\r\n return (\r\n this.status == EStatus.inserindo ||\r\n this.status == EStatus.editando ||\r\n this.status == EStatus.dadosCarregados ||\r\n this.emProgresso ||\r\n this.form.invalid ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoPesquisar()\r\n );\r\n }\r\n\r\n get desabilitarBotaoReverter(): boolean {\r\n return (\r\n this.status == EStatus.novaPesquisa ||\r\n this.status == EStatus.executarAcao ||\r\n this.status == EStatus.dadosCarregados ||\r\n this.emProgresso ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoReverter()\r\n );\r\n }\r\n\r\n get desabilitarBotaoAdicionar(): boolean {\r\n return (\r\n this.status == EStatus.editando ||\r\n this.status == EStatus.inserindo ||\r\n this.emProgresso ||\r\n this.disabled ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoAdicionar()\r\n );\r\n }\r\n\r\n get desabilitarBotaoEditar(): boolean {\r\n return (\r\n this.status == EStatus.inserindo ||\r\n this.status == EStatus.novaPesquisa ||\r\n this.status == EStatus.executarAcao ||\r\n this.status == EStatus.pesquisando ||\r\n this.status == EStatus.editando ||\r\n this.emProgresso ||\r\n this.disabled ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoEditar()\r\n );\r\n }\r\n\r\n get desabilitarBotaoRemover(): boolean {\r\n return (\r\n !this.entidadePaginada?.entidade ||\r\n this.status != EStatus.dadosCarregados ||\r\n this.emProgresso ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoRemover()\r\n );\r\n }\r\n\r\n get desabilitarBotaoSalvar(): boolean {\r\n return (\r\n this.form?.invalid ||\r\n (this.status != EStatus.inserindo && this.status != EStatus.editando) ||\r\n this.emProgresso ||\r\n this.disabled ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoSalvar()\r\n );\r\n }\r\n\r\n get desabilitarBotoesPaginacaoRetroceder(): boolean {\r\n return (\r\n this.inserindoOuEditando ||\r\n this.entidadePaginada.posicao <= 1 ||\r\n this.emProgresso\r\n );\r\n }\r\n\r\n get desabilitarBotoesPaginacaoAvancar(): boolean {\r\n return (\r\n this.inserindoOuEditando ||\r\n this.entidadePaginada.posicao >= this.entidadePaginada.total ||\r\n this.emProgresso\r\n );\r\n }\r\n\r\n onClickReverter(): void {\r\n this._exibirDialogConfirmacaoReverter();\r\n }\r\n\r\n onClickModoTabela(): void {\r\n this._emitirEventoClick(EEventoClick.onClickModoTabela);\r\n }\r\n\r\n onClickNovaPesquisa(): void {\r\n this._emitirEventoClick(EEventoClick.onClickNovaPesquisa);\r\n this.novaPesquisa();\r\n this._emitirEventoClick(EEventoClick.afterClickNovaPesquisa);\r\n }\r\n\r\n novaPesquisa(): void {\r\n this._databarService.habilitarForm(this.form);\r\n this.form.reset({ emitEvent: false, onlySelf: true });\r\n this.entidadePaginada.entidade = this.form.value;\r\n this.entidadePaginada.posicao = 0;\r\n this.entidadePaginada.total = 0;\r\n this.setStatus(EStatus.novaPesquisa);\r\n }\r\n\r\n pesquisar(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n\r\n this._setDadosAnteriores();\r\n this.setStatus(EStatus.pesquisando);\r\n this.entidadePaginada.entidade = [].concat(this._getEntidade());\r\n this._paginar();\r\n this.drawer.close();\r\n }\r\n\r\n inserir(): void {\r\n this._emitirEventoClick(EEventoClick.onClickInserir);\r\n this._clickInserir();\r\n this._emitirEventoClick(EEventoClick.afterClickInserir);\r\n }\r\n\r\n editar(): void {\r\n this._emitirEventoClick(EEventoClick.onClickEditar);\r\n this._clickEditar();\r\n this._emitirEventoClick(EEventoClick.afterClickEditar);\r\n }\r\n\r\n remover(): void {\r\n this._emitirEventoClick(EEventoClick.onClickRemover);\r\n this._clickRemover();\r\n this._emitirEventoClick(EEventoClick.afterClickRemover);\r\n }\r\n\r\n proximo(): void {\r\n this._paginar('proximo');\r\n }\r\n\r\n anterior(): void {\r\n this._paginar('anterior');\r\n }\r\n\r\n ultimo(): void {\r\n this._paginar('ultimo');\r\n }\r\n\r\n primeiro(): void {\r\n this._paginar('primeiro');\r\n }\r\n\r\n salvar(): void {\r\n this._emitirEventoClick(EEventoClick.onClickSalvar);\r\n\r\n switch (this.status) {\r\n case EStatus.inserindo:\r\n this._inserir();\r\n break;\r\n\r\n case EStatus.editando:\r\n this._editar();\r\n break;\r\n }\r\n }\r\n\r\n private _inserir(): void {\r\n this.setStatus(EStatus.salvando);\r\n this.setProgresso(true);\r\n this.servicoBind\r\n .criar()\r\n .pipe(\r\n finalize(() => {\r\n this._emitirEventoClick(EEventoClick.afterClickSalvar);\r\n })\r\n )\r\n .subscribe(\r\n (success) => {\r\n this.setProgresso(false);\r\n\r\n this._snackBarService.abrirSnackBarSucesso(\r\n 'Registro salvo com sucesso!'\r\n );\r\n\r\n this.form.patchValue(success);\r\n\r\n this.setStatus(EStatus.dadosCarregados);\r\n\r\n this.drawer.close();\r\n\r\n this._databarService.desabilitarForm(this.form);\r\n },\r\n () => {\r\n this.setProgresso(false);\r\n this.setStatus(EStatus.inserindo);\r\n }\r\n );\r\n }\r\n\r\n private _editar(): void {\r\n this.setStatus(EStatus.salvando);\r\n this.setProgresso(true);\r\n this.servicoBind\r\n .editar()\r\n .pipe(\r\n finalize(() => {\r\n this._emitirEventoClick(EEventoClick.afterClickSalvar);\r\n })\r\n )\r\n .subscribe(\r\n (success) => {\r\n this._snackBarService.abrirSnackBarSucesso(\r\n 'Registro editado com sucesso!'\r\n );\r\n\r\n this.form.patchValue(success);\r\n\r\n this.setProgresso(false);\r\n\r\n this.setStatus(EStatus.dadosCarregados);\r\n\r\n this._databarService.desabilitarForm(this.form);\r\n\r\n this.drawer.close();\r\n },\r\n () => {\r\n this.setProgresso(false);\r\n this.setStatus(EStatus.editando);\r\n }\r\n );\r\n }\r\n\r\n private observarSetStatus(): void {\r\n if ((this.servicoBind as IDatabarBindStatusService<T>).setStatus) {\r\n this.$setStatus = (\r\n this.servicoBind as IDatabarBindStatusService<T>\r\n ).setStatus.subscribe((status) => {\r\n switch (status) {\r\n case EStatus.editando:\r\n this.editar();\r\n this.emProgresso = false;\r\n break;\r\n case EStatus.inserindo:\r\n this.inserir();\r\n this.emProgresso = false;\r\n break;\r\n case EStatus.pesquisando:\r\n this.pesquisar();\r\n break;\r\n case EStatus.novaPesquisa:\r\n this.novaPesquisa();\r\n break;\r\n case EStatus.removendo:\r\n this.remover();\r\n break;\r\n case EStatus.dadosCarregados:\r\n this.status = EStatus.dadosCarregados;\r\n this.emProgresso = false;\r\n break;\r\n }\r\n });\r\n }\r\n }\r\n\r\n private retornarServicoReverter(): IDataBarReverterService<T> {\r\n if (this._servicoReverter == null)\r\n this._servicoReverter = new IcDatabarReverterService();\r\n\r\n return this._servicoReverter;\r\n }\r\n\r\n private _setDadosAnteriores(): void {\r\n this.retornarServicoReverter().setDadosAnteriores(\r\n this.status,\r\n this.form,\r\n this.entidadePaginada\r\n );\r\n }\r\n\r\n private _reverter(): void {\r\n this._emitirEventoClick(EEventoClick.onClickReverter);\r\n this.entidadePaginada = this.retornarServicoReverter().restaurarDadosAnteriores(\r\n this.form\r\n );\r\n const statusAnterior = this.retornarServicoReverter().statusAnterior;\r\n\r\n if (statusAnterior == EStatus.dadosCarregados)\r\n this._databarService.desabilitarForm(this.form);\r\n else this._databarService.habilitarForm(this.form);\r\n\r\n this.setStatus(statusAnterior);\r\n this._emitirEventoClick(EEventoClick.afterClickReverter);\r\n }\r\n\r\n private _resetarContadorPaginacao(): void {\r\n this.entidadePaginada.posicao = 0;\r\n this.entidadePaginada.total = 0;\r\n }\r\n\r\n private validarPropertsObrigatorias(): any {\r\n if (this.servicoBind == null) {\r\n throw new Error('É obrigatório ter um serviço de bind vinculado.');\r\n }\r\n\r\n if (this.entidadePaginada == null) {\r\n throw new Error('É obrigatório ter uma entidade paginada vinculada.');\r\n }\r\n }\r\n\r\n private setStatus(status: EStatus): void {\r\n if (!status) {\r\n return;\r\n }\r\n this.status = status;\r\n this.statusChanged.emit(this.status);\r\n }\r\n\r\n private _getEntidade(): T {\r\n const result = this.form.getRawValue() as T;\r\n return result;\r\n }\r\n\r\n private _submeterFormularioOnEnter(): void {\r\n if (!this.servicoBind.onClickEnter) return;\r\n this.servicoBind.onClickEnter.subscribe(() => {\r\n if (this.status === EStatus.novaPesquisa && this.form.valid) {\r\n this.pesquisar();\r\n }\r\n });\r\n }\r\n\r\n private _clickInserir(): void {\r\n this._setDadosAnteriores();\r\n this._resetarContadorPaginacao();\r\n this._databarService.habilitarForm(this.form);\r\n this.form.reset({ emitEvent: false, onlySelf: true });\r\n this.form.markAllAsTouched();\r\n this.drawer.close();\r\n this.setStatus(EStatus.inserindo);\r\n }\r\n\r\n private _clickEditar(): void {\r\n this._setDadosAnteriores();\r\n this._databarService.habilitarForm(this.form);\r\n\r\n this.form.markAllAsTouched();\r\n this.drawer.close();\r\n this.setStatus(EStatus.editando);\r\n }\r\n\r\n private _clickRemover(): void {\r\n this.setStatus(EStatus.removendo);\r\n this._exibirDialogConfirmacao();\r\n this.drawer.close();\r\n }\r\n\r\n private _emitirEventoClick(evento: EEventoClick): void {\r\n return this._databarService.emitirEventoClick<T>(\r\n this.servicoBind as IDatabarBindOnClickService<T>,\r\n evento\r\n );\r\n }\r\n\r\n private _acaoCloseDialogConfirmacao(): void {\r\n this._dialog.emProgresso = false;\r\n this._dialog.closeDialog();\r\n this.setStatus(EStatus.dadosCarregados);\r\n }\r\n\r\n private _exibirDialogConfirmacao(): void {\r\n this._dialog.acaoMensagem = 'Removendo registro...';\r\n this._dialog.acaoOk = () =>\r\n this.servicoBind.remover().subscribe(\r\n () => {\r\n this._dialog.closeDialog();\r\n this.novaPesquisa();\r\n this._dialog.emProgresso = false;\r\n this._snackBarService.abrirSnackBarSucesso('Removido com sucesso!');\r\n },\r\n () => this._acaoCloseDialogConfirmacao()\r\n );\r\n this._dialog.acaoCancelar = () => {\r\n this._acaoCloseDialogConfirmacao();\r\n };\r\n\r\n this._dialog.openDialog(\r\n 'Atenção!',\r\n 'Você realmente deseja excluir este registro?'\r\n );\r\n }\r\n\r\n private _exibirDialogConfirmacaoReverter(): void {\r\n this._dialog.acaoOk = () => {\r\n this._reverter();\r\n this._dialog.emProgresso = false;\r\n this._dialog.closeDialog();\r\n };\r\n\r\n this._dialog.acaoCancelar = () => {\r\n this._dialog.closeDialog();\r\n };\r\n\r\n this._dialog.openDialog(\r\n 'Atenção!',\r\n 'As alterações realizadas serão perdidas. Deseja continuar?'\r\n );\r\n }\r\n\r\n private _paginar(acao?: ACAO_PAGINACAO): void {\r\n this.setStatus(EStatus.pesquisando);\r\n\r\n if (this.entidadePaginada.entidade == null) {\r\n this.entidadePaginada.entidade = [].concat(this._getEntidade());\r\n }\r\n\r\n const posicaoAnterior = this.entidadePaginada.posicao;\r\n\r\n switch (acao) {\r\n case 'primeiro':\r\n this.entidadePaginada.posicao = 1;\r\n break;\r\n case 'ultimo':\r\n this.entidadePaginada.posicao = this.entidadePaginada.total;\r\n break;\r\n case 'proximo':\r\n this.entidadePaginada.posicao++;\r\n break;\r\n case 'anterior':\r\n this.entidadePaginada.posicao--;\r\n break;\r\n default:\r\n this.entidadePaginada.posicao = 0;\r\n break;\r\n }\r\n\r\n this.setProgresso(true);\r\n\r\n this.servicoBind.listarPaginacao(this.entidadePaginada).subscribe(\r\n (success) => {\r\n this.setProgresso(false);\r\n\r\n if (success == null) {\r\n this._dialogErro.openDialog(\r\n 'Atenção!',\r\n 'Nenhum registro foi encontrado.'\r\n );\r\n this.setStatus(EStatus.novaPesquisa);\r\n return;\r\n }\r\n\r\n if (success.entidade == null) {\r\n this._databarService.resetForm(this.form, this.entidadePaginada);\r\n this.setStatus(EStatus.novaPesquisa);\r\n return;\r\n }\r\n\r\n this.setStatus(EStatus.dadosCarregados);\r\n\r\n if (!this.entidadePaginada.entidade) {\r\n this.entidadePaginada = success;\r\n } else {\r\n this.entidadePaginada.total = success.total;\r\n this.entidadePaginada.posicao = success.posicao;\r\n }\r\n\r\n this.form.patchValue(success.entidade[0]);\r\n\r\n this.setProgresso(false);\r\n\r\n this._databarService.desabilitarForm(this.form);\r\n },\r\n (error) => {\r\n console.error('erro paginação', error);\r\n this.setStatus(EStatus.dadosCarregados);\r\n this.entidadePaginada.posicao = posicaoAnterior;\r\n this.setProgresso(false);\r\n this._databarService.desabilitarForm(this.form);\r\n }\r\n );\r\n }\r\n\r\n private setProgresso(progresso: boolean): void {\r\n this.emProgresso = this._databarService.definirProgresso(this.form, progresso);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { ErrorDialogComponent } from './error-dialog.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [ErrorDialogComponent],\r\n imports: [\r\n MatDialogModule\r\n ],\r\n exports: [ErrorDialogComponent],\r\n entryComponents: [ErrorDialogComponent]\r\n})\r\nexport class ErrorDialogModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { IcConfirmaDialogModule } from '@inovamobil/ic-confirma-dialog';\r\nimport { DataBarComponent } from './ic-data-bar.component';\r\nimport { ErrorDialogModule } from '../components/dialogs/error-dialog/error-dialog.module';\r\nimport { DatabarService } from './services/ic-databar.service';\r\nimport { IcmSnackBarModule } from '@inovamobil/icm-snackbar';\r\n\r\n@NgModule({\r\n declarations: [DataBarComponent],\r\n imports: [\r\n CommonModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatSidenavModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatDividerModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n FlexLayoutModule,\r\n IcConfirmaDialogModule,\r\n ErrorDialogModule,\r\n IcmSnackBarModule\r\n ],\r\n exports: [DataBarComponent],\r\n providers: [DatabarService]\r\n})\r\nexport class DataBarModule { }\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../projects/ic-databar-lib/src/lib/enum/estatus.ts","../../../projects/ic-databar-lib/src/lib/contrato/OnInitDataBar.ts","../../../projects/ic-databar-lib/src/lib/enum/eeventoclick.ts","../../../projects/ic-databar-lib/src/lib/contrato/DataBarConfigBotoesService.ts","../../../projects/ic-databar-lib/src/lib/services/ic-databar-event-click.service.ts","../../../projects/ic-databar-lib/src/components/dialogs/error-dialog/error-dialog.component.ts","../../../projects/ic-databar-lib/src/components/dialogs/error-dialog/service/error-dialog.service.ts","../../../projects/ic-databar-lib/src/lib/services/ic-databar.service.ts","../../../projects/ic-databar-lib/src/lib/services/ic-databar-reverter.service.ts","../../../projects/ic-databar-lib/src/lib/ic-data-bar.component.ts","../../../projects/ic-databar-lib/src/components/dialogs/error-dialog/error-dialog.module.ts","../../../projects/ic-databar-lib/src/lib/ic-data-bar.module.ts"],"names":["EStatus","OnInitDataBar","this","prototype","ngOnInit","onInit","servicoDataBarBind","status","novaPesquisa","statusChanged","statusDataBar","onStatusChanged","Object","defineProperty","inserindo","editando","removendo","Directive","EEventoClick","DataBarConfigBotoesService","desabilitarBotaoNovaPesquisa","args","_i","arguments","length","desabilitarBotaoReverter","desabilitarBotaoPesquisar","desabilitarBotaoEditar","desabilitarBotaoAdicionar","desabilitarBotaoRemover","desabilitarBotaoSalvar","desabilitarBotaoPrimeiro","desabilitarBotaoAnterior","desabilitarBotaoProximo","desabilitarBotaoUltimo","desabilitarBotaoModoTabela","exibirBotaoModoTabela","DatabarEventClickService","onEvent","emitir","evento","ErrorDialogComponent","dialogRef","data","mensagem","titulo","close","Component","selector","template","MatDialogRef","Inject","MAT_DIALOG_DATA","ErrorDialogService","dialog","openDialog","dialogConfig","MatDialogConfig","disableClose","autoFocus","minWidth","open","closeDialog","Injectable","providedIn","MatDialog","DatabarService","desabilitarForm","form","disable","emitEvent","onlySelf","habilitarForm","enable","resetForm","entidadePaginada","reset","entidade","posicao","total","emitirEventoClick","servico","eventDatabar","definirProgresso","progresso","IcDatabarReverterService","_statusAnterior","setDadosAnteriores","formularo","_entidadePaginadaAnterior","quantidade","_dadosAnterioresFormulario","getRawValue","restaurarDadosAnteriores","formulario","patchValue","DataBarComponent","_dialog","_dialogErro","_elementRef","_databarService","_snackBarService","disabled","EventEmitter","emProgresso","_servicoReverter","validarPropertsObrigatorias","setProgresso","_submeterFormularioOnEnter","observarSetStatus","ngOnDestroy","servicoBind","onClickEnter","unsubscribe","$setStatus","fecharSidenav","event","nativeElement","contains","target","drawer","invalid","_a","servicoConfiguracaoBotoes","dadosCarregados","executarAcao","pesquisando","_b","inserindoOuEditando","onClickReverter","_exibirDialogConfirmacaoReverter","onClickModoTabela","_emitirEventoClick","onClickNovaPesquisa","afterClickNovaPesquisa","value","setStatus","pesquisar","_setDadosAnteriores","concat","_getEntidade","_paginar","inserir","onClickInserir","_clickInserir","afterClickInserir","editar","onClickEditar","_clickEditar","afterClickEditar","remover","onClickRemover","_clickRemover","afterClickRemover","proximo","anterior","ultimo","primeiro","salvar","onClickSalvar","_inserir","_editar","_this","salvando","criar","pipe","finalize","afterClickSalvar","subscribe","success","abrirSnackBarSucesso","retornarServicoReverter","_reverter","statusAnterior","afterClickReverter","_resetarContadorPaginacao","Error","emit","valid","markAllAsTouched","_exibirDialogConfirmacao","_acaoCloseDialogConfirmacao","acaoMensagem","acaoOk","acaoCancelar","acao","posicaoAnterior","listarPaginacao","error","console","IcConfirmaDialogService","ElementRef","IcmSnackBarService","Input","Output","ViewChild","static","HostListener","NgModule","declarations","imports","MatDialogModule","exports","entryComponents","CommonModule","MatToolbarModule","MatListModule","MatSidenavModule","MatIconModule","MatProgressSpinnerModule","MatDividerModule","MatButtonModule","MatTooltipModule","FlexLayoutModule","IcConfirmaDialogModule","ErrorDialogModule","IcmSnackBarModule","providers"],"mappings":"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","sourcesContent":["\r\nexport enum EStatus {\r\n novaPesquisa = 'Nova pesquisa',\r\n inserindo = 'Inserindo',\r\n editando = 'Editando',\r\n removendo = 'Removendo',\r\n dadosCarregados = 'Dados carregados',\r\n pesquisando = 'Pesquisando',\r\n executarAcao = 'Executar ação',\r\n salvando = 'Salvando'\r\n}\r\n","import { IDataBarBindComponent } from './IDataBarBind';\r\nimport { Component, Directive } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\nimport { IDataEntidadePaginada } from './IDataEntidadePaginada';\r\nimport { IDataBarBindService } from './IDataBarService';\r\nimport { EStatus } from '../enum/estatus';\r\n\r\n@Directive()\r\nexport abstract class OnInitDataBar<T> implements IDataBarBindComponent<T> {\r\n form: FormGroup;\r\n entidadePaginada: IDataEntidadePaginada<T>;\r\n statusDataBar: EStatus;\r\n servicoDataBarBind: IDataBarBindService<T>;\r\n EStatus: typeof EStatus = EStatus;\r\n\r\n abstract onStatusChanged(status: EStatus): void;\r\n\r\n abstract onInit(): void;\r\n\r\n ngOnInit(): void {\r\n this.onInit();\r\n this.servicoDataBarBind.status = EStatus.novaPesquisa;\r\n }\r\n\r\n statusChanged(status: EStatus): void {\r\n this.servicoDataBarBind.status = status;\r\n this.statusDataBar = status;\r\n this.onStatusChanged(status);\r\n }\r\n\r\n public get inserindoOuEditando(): boolean {\r\n return this.statusDataBar === EStatus.inserindo ||\r\n this.statusDataBar === EStatus.editando;\r\n }\r\n\r\n public get inserindo(): boolean {\r\n return this.statusDataBar === EStatus.inserindo;\r\n }\r\n\r\n public get editando(): boolean {\r\n return this.statusDataBar === EStatus.editando;\r\n }\r\n\r\n public get editandoOuRemovendo(): boolean {\r\n return (this.statusDataBar === EStatus.editando || this.statusDataBar === EStatus.removendo);\r\n }\r\n}\r\n","export enum EEventoClick {\r\n onClickInserir = 'onInserir',\r\n afterClickInserir = 'afterClickInserir',\r\n onClickReverter = \"onReverter\",\r\n afterClickReverter = \"afterClickReverter\",\r\n onClickNovaPesquisa = 'onNovaPesquisa',\r\n afterClickNovaPesquisa = 'afterClickNovaPesquisa',\r\n onClickEditar = 'onEditar',\r\n afterClickEditar = 'afterClickEditar',\r\n onClickRemover = 'onRemover',\r\n afterClickRemover = 'afterClickRemover',\r\n onClickSalvar = 'onClickSalvar',\r\n afterClickSalvar = 'afterClickSalvar',\r\n onClickModoTabela= 'onClickModoTabela'\r\n}\r\n\r\n","export abstract class DataBarConfigBotoesService {\r\n desabilitarBotaoNovaPesquisa(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoReverter(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoPesquisar(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoEditar(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoAdicionar(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoRemover(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoSalvar(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoPrimeiro(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoAnterior(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoProximo(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoUltimo(...args): boolean {\r\n return false;\r\n }\r\n\r\n desabilitarBotaoModoTabela(...args): boolean {\r\n return false;\r\n }\r\n\r\n exibirBotaoModoTabela(...args): boolean {\r\n return false;\r\n }\r\n}\r\n","import { EEventoClick } from '../enum/eeventoclick';\r\n\r\nexport class DatabarEventClickService {\r\n\r\n constructor(private onEvent: (event: EEventoClick) => void) {}\r\n \r\n emitir(evento: EEventoClick): void {\r\n this.onEvent(evento);\r\n }\r\n\r\n}\r\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { Inject, Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'confirma-dialog',\r\n templateUrl: './view/error-dialog.html',\r\n styleUrls: ['./view/error-dialog.scss']\r\n})\r\nexport class ErrorDialogComponent {\r\n\r\n mensagem: string;\r\n titulo: string;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef<ErrorDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) data) {\r\n\r\n this.mensagem = data.mensagem;\r\n this.titulo = data.titulo;\r\n }\r\n\r\n close(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n\r\n","import { MatDialogConfig, MatDialog } from '@angular/material/dialog';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { ErrorDialogComponent } from '../error-dialog.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport abstract class ErrorDialogService {\r\n\r\n dialogRef: any;\r\n\r\n constructor(private dialog: MatDialog) { }\r\n\r\n openDialog(titulo: string, mensagem: string): void {\r\n const dialogConfig = new MatDialogConfig();\r\n dialogConfig.disableClose = true;\r\n dialogConfig.autoFocus = true;\r\n\r\n dialogConfig.data = {\r\n titulo: titulo,\r\n mensagem: mensagem\r\n };\r\n\r\n dialogConfig.minWidth = '300px';\r\n\r\n this.dialogRef = this.dialog.open(ErrorDialogComponent, dialogConfig);\r\n\r\n }\r\n\r\n closeDialog(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\nimport { IDataEntidadePaginada } from '../contrato/IDataEntidadePaginada';\r\nimport { IDatabarBindOnClickService, EEventoClick } from '../../public-api';\r\n\r\n@Injectable()\r\nexport class DatabarService {\r\n\r\n\r\n constructor() { }\r\n\r\n public desabilitarForm(form: FormGroup): void {\r\n form.disable({ emitEvent: false, onlySelf: true });\r\n }\r\n\r\n public habilitarForm(form: FormGroup): void {\r\n form.enable({ emitEvent: false, onlySelf: true });\r\n }\r\n\r\n public resetForm(form: FormGroup, entidadePaginada: IDataEntidadePaginada<any>): void {\r\n form.reset({ emitEvent: false, onlySelf: true });\r\n entidadePaginada.entidade = null;\r\n entidadePaginada.posicao = 0;\r\n entidadePaginada.total = 0;\r\n }\r\n\r\n public emitirEventoClick<T>(servico: IDatabarBindOnClickService<T>, evento: EEventoClick): void {\r\n if (servico.eventDatabar) {\r\n servico.eventDatabar.emitir(evento);\r\n }\r\n }\r\n\r\n definirProgresso(form: FormGroup, progresso: boolean): boolean {\r\n if (!form)\r\n return;\r\n\r\n if (progresso)\r\n this.desabilitarForm(form);\r\n else\r\n this.habilitarForm(form);\r\n\r\n return progresso;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { EStatus } from '../enum/estatus';\r\nimport { IDataEntidadePaginada } from '../contrato/IDataEntidadePaginada';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { IDataBarReverterService } from '../contrato/IDataBarReverterService';\r\n\r\n@Injectable()\r\nexport class IcDatabarReverterService<T> implements IDataBarReverterService<T>{\r\n\r\n private _statusAnterior: EStatus;\r\n private _dadosAnterioresFormulario: T;\r\n private _entidadePaginadaAnterior: IDataEntidadePaginada<T>;\r\n\r\n get statusAnterior(): EStatus {\r\n return this._statusAnterior;\r\n }\r\n\r\n public setDadosAnteriores(status: EStatus, formularo: FormGroup, entidadePaginada: IDataEntidadePaginada<T>): void {\r\n this._entidadePaginadaAnterior = {\r\n entidade: entidadePaginada.entidade,\r\n posicao: entidadePaginada.posicao,\r\n quantidade: entidadePaginada.quantidade,\r\n total: entidadePaginada.total\r\n } as IDataEntidadePaginada<T>;\r\n\r\n this._dadosAnterioresFormulario = formularo.getRawValue();\r\n this._statusAnterior = status;\r\n }\r\n\r\n public restaurarDadosAnteriores(formulario: FormGroup): IDataEntidadePaginada<T> {\r\n formulario.patchValue(this._dadosAnterioresFormulario);\r\n return this._entidadePaginadaAnterior;\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n HostListener,\r\n ElementRef,\r\n ViewChild,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatDrawer } from '@angular/material/sidenav';\r\n\r\nimport { Subscription } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\nimport { IcConfirmaDialogService } from '@inovamobil/ic-confirma-dialog';\r\nimport { IcmSnackBarService } from '@inovamobil/icm-snackbar';\r\n\r\nimport { IDataEntidadePaginada } from './contrato/IDataEntidadePaginada';\r\nimport { IDataBarBindService } from './contrato/IDataBarService';\r\nimport { EStatus } from './enum/estatus';\r\nimport { EEventoClick } from './enum/eeventoclick';\r\nimport { IDatabarBindOnClickService } from './contrato/IDataBarBindOnClickService';\r\nimport { IDatabarBindStatusService } from '../public-api';\r\nimport { ErrorDialogService } from '../components/dialogs/error-dialog/service/error-dialog.service';\r\nimport { ACAO_PAGINACAO } from './constants/ic-databar.constants';\r\nimport { DatabarService } from './services/ic-databar.service';\r\nimport { IcDatabarReverterService } from './services/ic-databar-reverter.service';\r\nimport { IDataBarReverterService } from './contrato/IDataBarReverterService';\r\nimport { DataBarConfigBotoesService } from './contrato/DataBarConfigBotoesService';\r\n\r\n@Component({\r\n selector: 'ic-data-bar',\r\n templateUrl: './view/ic-data-bar.component.html',\r\n styleUrls: ['./view/ic-data-bar.component.scss'],\r\n})\r\nexport class DataBarComponent<T> implements OnInit, OnDestroy {\r\n @Input() servicoBind:\r\n | IDataBarBindService<T>\r\n | IDatabarBindStatusService<T>\r\n | IDatabarBindOnClickService<T>;\r\n @Input() form: FormGroup;\r\n @Input() entidadePaginada: IDataEntidadePaginada<T>;\r\n @Input() disabled = false;\r\n @Input() servicoConfiguracaoBotoes: DataBarConfigBotoesService;\r\n @Input() set servicoReverter(servico: IDataBarReverterService<T>) {\r\n this._servicoReverter = servico;\r\n }\r\n\r\n @Output() statusChanged = new EventEmitter<EStatus>();\r\n\r\n public status: EStatus;\r\n public EStatus = EStatus;\r\n public emProgresso = false;\r\n private _servicoReverter: IDataBarReverterService<T>;\r\n private $setStatus: Subscription;\r\n\r\n @ViewChild('drawer', { static: false }) drawer: MatDrawer;\r\n\r\n constructor(\r\n private _dialog: IcConfirmaDialogService,\r\n private _dialogErro: ErrorDialogService,\r\n private _elementRef: ElementRef,\r\n private _databarService: DatabarService,\r\n private _snackBarService: IcmSnackBarService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.validarPropertsObrigatorias();\r\n this.setProgresso(false);\r\n this.novaPesquisa();\r\n this._submeterFormularioOnEnter();\r\n this.observarSetStatus();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.servicoBind.onClickEnter) this.servicoBind.onClickEnter.unsubscribe();\r\n\r\n if (this.$setStatus) this.$setStatus.unsubscribe();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n fecharSidenav(event): void {\r\n if (this._elementRef.nativeElement.contains(event.target)) {\r\n return;\r\n }\r\n this.drawer.close();\r\n }\r\n\r\n get inserindoOuEditando(): boolean {\r\n return this.status === EStatus.inserindo || this.status === EStatus.editando;\r\n }\r\n\r\n get desabilitarBotaoModoTabela(): boolean {\r\n return (\r\n this.status == EStatus.inserindo ||\r\n this.status == EStatus.editando ||\r\n this.emProgresso ||\r\n this.form.invalid ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoModoTabela()\r\n );\r\n }\r\n\r\n get desabilitarBotaoPesquisar(): boolean {\r\n return (\r\n this.status == EStatus.inserindo ||\r\n this.status == EStatus.editando ||\r\n this.status == EStatus.dadosCarregados ||\r\n this.emProgresso ||\r\n this.form.invalid ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoPesquisar()\r\n );\r\n }\r\n\r\n get desabilitarBotaoReverter(): boolean {\r\n return (\r\n this.status == EStatus.novaPesquisa ||\r\n this.status == EStatus.executarAcao ||\r\n this.status == EStatus.dadosCarregados ||\r\n this.emProgresso ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoReverter()\r\n );\r\n }\r\n\r\n get desabilitarBotaoAdicionar(): boolean {\r\n return (\r\n this.status == EStatus.editando ||\r\n this.status == EStatus.inserindo ||\r\n this.emProgresso ||\r\n this.disabled ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoAdicionar()\r\n );\r\n }\r\n\r\n get desabilitarBotaoEditar(): boolean {\r\n return (\r\n this.status == EStatus.inserindo ||\r\n this.status == EStatus.novaPesquisa ||\r\n this.status == EStatus.executarAcao ||\r\n this.status == EStatus.pesquisando ||\r\n this.status == EStatus.editando ||\r\n this.emProgresso ||\r\n this.disabled ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoEditar()\r\n );\r\n }\r\n\r\n get desabilitarBotaoRemover(): boolean {\r\n return (\r\n !this.entidadePaginada?.entidade ||\r\n this.status != EStatus.dadosCarregados ||\r\n this.emProgresso ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoRemover()\r\n );\r\n }\r\n\r\n get desabilitarBotaoSalvar(): boolean {\r\n return (\r\n this.form?.invalid ||\r\n (this.status != EStatus.inserindo && this.status != EStatus.editando) ||\r\n this.emProgresso ||\r\n this.disabled ||\r\n this.servicoConfiguracaoBotoes?.desabilitarBotaoSalvar()\r\n );\r\n }\r\n\r\n get desabilitarBotoesPaginacaoRetroceder(): boolean {\r\n return (\r\n this.inserindoOuEditando ||\r\n this.entidadePaginada.posicao <= 1 ||\r\n this.emProgresso\r\n );\r\n }\r\n\r\n get desabilitarBotoesPaginacaoAvancar(): boolean {\r\n return (\r\n this.inserindoOuEditando ||\r\n this.entidadePaginada.posicao >= this.entidadePaginada.total ||\r\n this.emProgresso\r\n );\r\n }\r\n\r\n onClickReverter(): void {\r\n this._exibirDialogConfirmacaoReverter();\r\n }\r\n\r\n onClickModoTabela(): void {\r\n this._emitirEventoClick(EEventoClick.onClickModoTabela);\r\n }\r\n\r\n onClickNovaPesquisa(): void {\r\n this._emitirEventoClick(EEventoClick.onClickNovaPesquisa);\r\n this.novaPesquisa();\r\n this._emitirEventoClick(EEventoClick.afterClickNovaPesquisa);\r\n }\r\n\r\n novaPesquisa(): void {\r\n this._databarService.habilitarForm(this.form);\r\n this.form.reset({ emitEvent: false, onlySelf: true });\r\n this.entidadePaginada.entidade = this.form.value;\r\n this.entidadePaginada.posicao = 0;\r\n this.entidadePaginada.total = 0;\r\n this.setStatus(EStatus.novaPesquisa);\r\n }\r\n\r\n pesquisar(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n\r\n this._setDadosAnteriores();\r\n this.setStatus(EStatus.pesquisando);\r\n this.entidadePaginada.entidade = [].concat(this._getEntidade());\r\n this._paginar();\r\n this.drawer.close();\r\n }\r\n\r\n inserir(): void {\r\n this._emitirEventoClick(EEventoClick.onClickInserir);\r\n this._clickInserir();\r\n this._emitirEventoClick(EEventoClick.afterClickInserir);\r\n }\r\n\r\n editar(): void {\r\n this._emitirEventoClick(EEventoClick.onClickEditar);\r\n this._clickEditar();\r\n this._emitirEventoClick(EEventoClick.afterClickEditar);\r\n }\r\n\r\n remover(): void {\r\n this._emitirEventoClick(EEventoClick.onClickRemover);\r\n this._clickRemover();\r\n this._emitirEventoClick(EEventoClick.afterClickRemover);\r\n }\r\n\r\n proximo(): void {\r\n this._paginar('proximo');\r\n }\r\n\r\n anterior(): void {\r\n this._paginar('anterior');\r\n }\r\n\r\n ultimo(): void {\r\n this._paginar('ultimo');\r\n }\r\n\r\n primeiro(): void {\r\n this._paginar('primeiro');\r\n }\r\n\r\n salvar(): void {\r\n this._emitirEventoClick(EEventoClick.onClickSalvar);\r\n\r\n switch (this.status) {\r\n case EStatus.inserindo:\r\n this._inserir();\r\n break;\r\n\r\n case EStatus.editando:\r\n this._editar();\r\n break;\r\n }\r\n }\r\n\r\n private _inserir(): void {\r\n this.setStatus(EStatus.salvando);\r\n this.setProgresso(true);\r\n this.servicoBind\r\n .criar()\r\n .pipe(\r\n finalize(() => {\r\n this._emitirEventoClick(EEventoClick.afterClickSalvar);\r\n })\r\n )\r\n .subscribe(\r\n (success) => {\r\n this.setProgresso(false);\r\n\r\n this._snackBarService.abrirSnackBarSucesso(\r\n 'Registro salvo com sucesso!'\r\n );\r\n\r\n this.form.patchValue(success);\r\n\r\n this.setStatus(EStatus.dadosCarregados);\r\n\r\n this.drawer.close();\r\n\r\n this._databarService.desabilitarForm(this.form);\r\n },\r\n () => {\r\n this.setProgresso(false);\r\n this.setStatus(EStatus.inserindo);\r\n }\r\n );\r\n }\r\n\r\n private _editar(): void {\r\n this.setStatus(EStatus.salvando);\r\n this.setProgresso(true);\r\n this.servicoBind\r\n .editar()\r\n .pipe(\r\n finalize(() => {\r\n this._emitirEventoClick(EEventoClick.afterClickSalvar);\r\n })\r\n )\r\n .subscribe(\r\n (success) => {\r\n this._snackBarService.abrirSnackBarSucesso(\r\n 'Registro editado com sucesso!'\r\n );\r\n\r\n this.form.patchValue(success);\r\n\r\n this.setProgresso(false);\r\n\r\n this.setStatus(EStatus.dadosCarregados);\r\n\r\n this._databarService.desabilitarForm(this.form);\r\n\r\n this.drawer.close();\r\n },\r\n () => {\r\n this.setProgresso(false);\r\n this.setStatus(EStatus.editando);\r\n }\r\n );\r\n }\r\n\r\n private observarSetStatus(): void {\r\n if ((this.servicoBind as IDatabarBindStatusService<T>).setStatus) {\r\n this.$setStatus = (\r\n this.servicoBind as IDatabarBindStatusService<T>\r\n ).setStatus.subscribe((status) => {\r\n switch (status) {\r\n case EStatus.editando:\r\n this.editar();\r\n this.emProgresso = false;\r\n break;\r\n case EStatus.inserindo:\r\n this.inserir();\r\n this.emProgresso = false;\r\n break;\r\n case EStatus.pesquisando:\r\n this.pesquisar();\r\n break;\r\n case EStatus.novaPesquisa:\r\n this.novaPesquisa();\r\n break;\r\n case EStatus.removendo:\r\n this.remover();\r\n break;\r\n case EStatus.dadosCarregados:\r\n this.status = EStatus.dadosCarregados;\r\n this.emProgresso = false;\r\n break;\r\n }\r\n });\r\n }\r\n }\r\n\r\n private retornarServicoReverter(): IDataBarReverterService<T> {\r\n if (this._servicoReverter == null)\r\n this._servicoReverter = new IcDatabarReverterService();\r\n\r\n return this._servicoReverter;\r\n }\r\n\r\n private _setDadosAnteriores(): void {\r\n this.retornarServicoReverter().setDadosAnteriores(\r\n this.status,\r\n this.form,\r\n this.entidadePaginada\r\n );\r\n }\r\n\r\n private _reverter(): void {\r\n this._emitirEventoClick(EEventoClick.onClickReverter);\r\n this.entidadePaginada = this.retornarServicoReverter().restaurarDadosAnteriores(\r\n this.form\r\n );\r\n const statusAnterior = this.retornarServicoReverter().statusAnterior;\r\n\r\n if (statusAnterior == EStatus.dadosCarregados)\r\n this._databarService.desabilitarForm(this.form);\r\n else this._databarService.habilitarForm(this.form);\r\n\r\n this.setStatus(statusAnterior);\r\n this._emitirEventoClick(EEventoClick.afterClickReverter);\r\n }\r\n\r\n private _resetarContadorPaginacao(): void {\r\n this.entidadePaginada.posicao = 0;\r\n this.entidadePaginada.total = 0;\r\n }\r\n\r\n private validarPropertsObrigatorias(): any {\r\n if (this.servicoBind == null) {\r\n throw new Error('É obrigatório ter um serviço de bind vinculado.');\r\n }\r\n\r\n if (this.entidadePaginada == null) {\r\n throw new Error('É obrigatório ter uma entidade paginada vinculada.');\r\n }\r\n }\r\n\r\n private setStatus(status: EStatus): void {\r\n if (!status) {\r\n return;\r\n }\r\n this.status = status;\r\n this.statusChanged.emit(this.status);\r\n }\r\n\r\n private _getEntidade(): T {\r\n const result = this.form.getRawValue() as T;\r\n return result;\r\n }\r\n\r\n private _submeterFormularioOnEnter(): void {\r\n if (!this.servicoBind.onClickEnter) return;\r\n this.servicoBind.onClickEnter.subscribe(() => {\r\n if (this.status === EStatus.novaPesquisa && this.form.valid) {\r\n this.pesquisar();\r\n }\r\n });\r\n }\r\n\r\n private _clickInserir(): void {\r\n this._setDadosAnteriores();\r\n this._resetarContadorPaginacao();\r\n this._databarService.habilitarForm(this.form);\r\n this.form.reset({ emitEvent: false, onlySelf: true });\r\n this.form.markAllAsTouched();\r\n this.drawer.close();\r\n this.setStatus(EStatus.inserindo);\r\n }\r\n\r\n private _clickEditar(): void {\r\n this._setDadosAnteriores();\r\n this._databarService.habilitarForm(this.form);\r\n\r\n this.form.markAllAsTouched();\r\n this.drawer.close();\r\n this.setStatus(EStatus.editando);\r\n }\r\n\r\n private _clickRemover(): void {\r\n this.setStatus(EStatus.removendo);\r\n this._exibirDialogConfirmacao();\r\n this.drawer.close();\r\n }\r\n\r\n private _emitirEventoClick(evento: EEventoClick): void {\r\n return this._databarService.emitirEventoClick<T>(\r\n this.servicoBind as IDatabarBindOnClickService<T>,\r\n evento\r\n );\r\n }\r\n\r\n private _acaoCloseDialogConfirmacao(): void {\r\n this._dialog.emProgresso = false;\r\n this._dialog.closeDialog();\r\n this.setStatus(EStatus.dadosCarregados);\r\n }\r\n\r\n private _exibirDialogConfirmacao(): void {\r\n this._dialog.acaoMensagem = 'Removendo registro...';\r\n this._dialog.acaoOk = () =>\r\n this.servicoBind.remover().subscribe(\r\n () => {\r\n this._dialog.closeDialog();\r\n this.novaPesquisa();\r\n this._dialog.emProgresso = false;\r\n this._snackBarService.abrirSnackBarSucesso('Removido com sucesso!');\r\n },\r\n () => this._acaoCloseDialogConfirmacao()\r\n );\r\n this._dialog.acaoCancelar = () => {\r\n this._acaoCloseDialogConfirmacao();\r\n };\r\n\r\n this._dialog.openDialog(\r\n 'Atenção!',\r\n 'Você realmente deseja excluir este registro?'\r\n );\r\n }\r\n\r\n private _exibirDialogConfirmacaoReverter(): void {\r\n this._dialog.acaoOk = () => {\r\n this._reverter();\r\n this._dialog.emProgresso = false;\r\n this._dialog.closeDialog();\r\n };\r\n\r\n this._dialog.acaoCancelar = () => {\r\n this._dialog.closeDialog();\r\n };\r\n\r\n this._dialog.openDialog(\r\n 'Atenção!',\r\n 'As alterações realizadas serão perdidas. Deseja continuar?'\r\n );\r\n }\r\n\r\n private _paginar(acao?: ACAO_PAGINACAO): void {\r\n this.setStatus(EStatus.pesquisando);\r\n\r\n if (this.entidadePaginada.entidade == null) {\r\n this.entidadePaginada.entidade = [].concat(this._getEntidade());\r\n }\r\n\r\n const posicaoAnterior = this.entidadePaginada.posicao;\r\n\r\n switch (acao) {\r\n case 'primeiro':\r\n this.entidadePaginada.posicao = 1;\r\n break;\r\n case 'ultimo':\r\n this.entidadePaginada.posicao = this.entidadePaginada.total;\r\n break;\r\n case 'proximo':\r\n this.entidadePaginada.posicao++;\r\n break;\r\n case 'anterior':\r\n this.entidadePaginada.posicao--;\r\n break;\r\n default:\r\n this.entidadePaginada.posicao = 0;\r\n break;\r\n }\r\n\r\n this.setProgresso(true);\r\n\r\n this.servicoBind.listarPaginacao(this.entidadePaginada).subscribe(\r\n (success) => {\r\n this.setProgresso(false);\r\n\r\n if (success == null) {\r\n this._dialogErro.openDialog(\r\n 'Atenção!',\r\n 'Nenhum registro foi encontrado.'\r\n );\r\n this.setStatus(EStatus.novaPesquisa);\r\n return;\r\n }\r\n\r\n if (success.entidade == null) {\r\n this._databarService.resetForm(this.form, this.entidadePaginada);\r\n this.setStatus(EStatus.novaPesquisa);\r\n return;\r\n }\r\n\r\n this.setStatus(EStatus.dadosCarregados);\r\n\r\n if (!this.entidadePaginada.entidade) {\r\n this.entidadePaginada = success;\r\n } else {\r\n this.entidadePaginada.total = success.total;\r\n this.entidadePaginada.posicao = success.posicao;\r\n }\r\n\r\n this.form.patchValue(success.entidade[0]);\r\n\r\n this.setProgresso(false);\r\n\r\n this._databarService.desabilitarForm(this.form);\r\n },\r\n (error) => {\r\n console.error('erro paginação', error);\r\n this.setStatus(EStatus.dadosCarregados);\r\n this.entidadePaginada.posicao = posicaoAnterior;\r\n this.setProgresso(false);\r\n this._databarService.desabilitarForm(this.form);\r\n }\r\n );\r\n }\r\n\r\n private setProgresso(progresso: boolean): void {\r\n this.emProgresso = this._databarService.definirProgresso(this.form, progresso);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { ErrorDialogComponent } from './error-dialog.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [ErrorDialogComponent],\r\n imports: [\r\n MatDialogModule\r\n ],\r\n exports: [ErrorDialogComponent],\r\n entryComponents: [ErrorDialogComponent]\r\n})\r\nexport class ErrorDialogModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { IcConfirmaDialogModule } from '@inovamobil/ic-confirma-dialog';\r\nimport { DataBarComponent } from './ic-data-bar.component';\r\nimport { ErrorDialogModule } from '../components/dialogs/error-dialog/error-dialog.module';\r\nimport { DatabarService } from './services/ic-databar.service';\r\nimport { IcmSnackBarModule } from '@inovamobil/icm-snackbar';\r\n\r\n@NgModule({\r\n declarations: [DataBarComponent],\r\n imports: [\r\n CommonModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatSidenavModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatDividerModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n FlexLayoutModule,\r\n IcConfirmaDialogModule,\r\n ErrorDialogModule,\r\n IcmSnackBarModule\r\n ],\r\n exports: [DataBarComponent],\r\n providers: [DatabarService]\r\n})\r\nexport class DataBarModule { }\r\n"]}
|
|
@@ -408,7 +408,7 @@ export class DataBarComponent {
|
|
|
408
408
|
DataBarComponent.decorators = [
|
|
409
409
|
{ type: Component, args: [{
|
|
410
410
|
selector: 'ic-data-bar',
|
|
411
|
-
template: "<div fxFlex=\"1 0 auto\" fxFlexLayout=\"space-around center\" fxLayout=\"column\">\r\n <!-- DESKTOP -->\r\n <mat-toolbar class=\"px-0 mat-elevation-z4\">\r\n <div fxFlex=\"1 0 auto\" fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\r\n <!-- BOT\u00C3O EXIBIR DRAWER -->\r\n <mat-drawer-container fxFlex.sm fxHide.gt-sm>\r\n <button\r\n (click)=\"drawer.toggle()\"\r\n id=\"btn_exibir_databar_mobile\"\r\n mat-button\r\n type=\"button\"\r\n >\r\n <mat-icon>list</mat-icon>\r\n </button>\r\n </mat-drawer-container>\r\n <!-- /BOT\u00C3O EXIBIR DRAWER -->\r\n\r\n <!-- A\u00C7\u00D5ES -->\r\n <div\r\n fxFlex.sm\r\n fxHide\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"space-around center\"\r\n fxShow.gt-sm\r\n >\r\n <!-- BTN_NOVA_PESQUISA -->\r\n <button\r\n (click)=\"onClickNovaPesquisa()\"\r\n [disabled]=\"servicoConfiguracaoBotoes?.desabilitarBotaoNovaPesquisa()\"\r\n color=\"primary\"\r\n id=\"btn_nova_pesquisa\"\r\n mat-button\r\n matTooltip=\"Nova Pesquisa\"\r\n >\r\n <mat-icon>insert_drive_file</mat-icon>\r\n </button>\r\n <!-- BTN_NOVA_PESQUISA -->\r\n\r\n <!-- BTN_REVERTER -->\r\n <button\r\n (click)=\"onClickReverter()\"\r\n [disabled]=\"desabilitarBotaoReverter\"\r\n color=\"primary\"\r\n id=\"btn_reverter\"\r\n mat-button\r\n matTooltip=\"Reverter\"\r\n >\r\n <mat-icon>restore</mat-icon>\r\n </button>\r\n <!-- BTN_REVERTER -->\r\n\r\n <!-- BTN_PESQUISAR -->\r\n <button\r\n (click)=\"pesquisar()\"\r\n [disabled]=\"desabilitarBotaoPesquisar\"\r\n color=\"primary\"\r\n id=\"btn_pesquisar\"\r\n mat-button\r\n matTooltip=\"Pesquisar\"\r\n >\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <!-- BTN_PESQUISAR -->\r\n\r\n <!-- BTN_ADICIONAR -->\r\n <button\r\n (click)=\"inserir()\"\r\n [disabled]=\"desabilitarBotaoAdicionar\"\r\n color=\"primary\"\r\n id=\"btn_adicionar\"\r\n mat-button\r\n matTooltip=\"Adicionar\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n <!-- BTN_ADICIONAR -->\r\n\r\n <!-- BTN_EDITAR -->\r\n <button\r\n (click)=\"editar()\"\r\n [disabled]=\"desabilitarBotaoEditar\"\r\n color=\"primary\"\r\n id=\"btn_editar\"\r\n mat-button\r\n matTooltip=\"Editar\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <!-- BTN_EDITAR -->\r\n\r\n <!-- BTN_REMOVER -->\r\n <button\r\n (click)=\"remover()\"\r\n [disabled]=\"desabilitarBotaoRemover\"\r\n color=\"primary\"\r\n id=\"btn_remover\"\r\n mat-button\r\n matTooltip=\"Remover\"\r\n >\r\n <mat-icon>delete_forever</mat-icon>\r\n </button>\r\n <!-- BTN_REMOVER -->\r\n\r\n <!-- BTN_SALVAR -->\r\n <button\r\n (click)=\"salvar()\"\r\n [disabled]=\"desabilitarBotaoSalvar\"\r\n color=\"primary\"\r\n id=\"btn_salvar\"\r\n mat-button\r\n matTooltip=\"Salvar\"\r\n >\r\n <mat-icon>save</mat-icon>\r\n </button>\r\n <!-- BTN_SALVAR -->\r\n </div>\r\n <!-- /A\u00C7\u00D5ES -->\r\n\r\n <!-- STATUS -->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\r\n <!-- PROGRESS -->\r\n <mat-spinner *ngIf=\"emProgresso\" [diameter]=\"20\"></mat-spinner>\r\n <!-- PROGRESS -->\r\n\r\n <button\r\n color=\"primary\"\r\n fxHide.lt-sm\r\n id=\"btn_status\"\r\n mat-button\r\n matTooltip=\"A\u00E7\u00E3o no momento\"\r\n >\r\n {{ status }}\r\n </button>\r\n </div>\r\n <!-- STATUS -->\r\n\r\n <!-- PAGINA\u00C7\u00C3O -->\r\n <div fxFlex.sm fxLayout=\"row\" fxLayoutAlign=\"center center\">\r\n <!-- BTN_PRIMEIRO -->\r\n <button\r\n (click)=\"primeiro()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoRetroceder ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoPrimeiro()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n fxFlex.sm\r\n fxHide.lt-sm\r\n id=\"btn_primeiro\"\r\n mat-button\r\n matTooltip=\"Primeiro item\"\r\n >\r\n <mat-icon>first_page</mat-icon>\r\n </button>\r\n <!-- BTN_PRIMEIRO -->\r\n\r\n <!-- BTN_ANTERIOR -->\r\n <button\r\n (click)=\"anterior()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoRetroceder ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoAnterior()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n id=\"btn_anterior\"\r\n mat-button\r\n matTooltip=\"Anterior\"\r\n >\r\n <mat-icon>navigate_before</mat-icon>\r\n </button>\r\n <!-- BTN_ANTERIOR -->\r\n\r\n <div\r\n class=\"px-0 px-sm-12 contador-paginas\"\r\n id=\"contador_paginacao\"\r\n matTooltip=\"P\u00E1gina Atual\"\r\n >\r\n {{ entidadePaginada?.posicao }} de {{ entidadePaginada?.total }}\r\n </div>\r\n\r\n <!-- BTN_PROXIMO -->\r\n <button\r\n (click)=\"proximo()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoAvancar ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoProximo()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n id=\"btn_proximo\"\r\n mat-button\r\n matTooltip=\"Pr\u00F3ximo\"\r\n >\r\n <mat-icon>navigate_next</mat-icon>\r\n </button>\r\n <!-- BTN_PROXIMO -->\r\n\r\n <!-- BTN_ULTIMO -->\r\n <button\r\n (click)=\"ultimo()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoAvancar ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoUltimo()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n id=\"btn_ultimo\"\r\n fxFlex.sm\r\n fxHide.lt-sm\r\n mat-button\r\n matTooltip=\"\u00DAltimo\"\r\n >\r\n <mat-icon>last_page</mat-icon>\r\n </button>\r\n <!-- BTN_ULTIMO -->\r\n </div>\r\n <!-- /PAGINA\u00C7\u00C3O -->\r\n\r\n <div\r\n fxShow.gt-sm\r\n fxHide\r\n fxFlex.sm\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"center center\"\r\n >\r\n <!-- MODO_TABELA -->\r\n <button\r\n *ngIf=\"servicoConfiguracaoBotoes?.exibirBotaoModoTabela()\"\r\n (click)=\"onClickModoTabela()\"\r\n [disabled]=\"desabilitarBotaoModoTabela\"\r\n color=\"primary\"\r\n id=\"btn_modo_tabela\"\r\n mat-button\r\n matTooltip=\"Alterar exibi\u00E7\u00E3o para tabela\"\r\n >\r\n <mat-icon>list</mat-icon>\r\n </button>\r\n <!-- MODO_TABELA -->\r\n </div>\r\n </div>\r\n </mat-toolbar>\r\n <!-- /DESKTOP -->\r\n\r\n <!-- MOBILE -->\r\n <mat-drawer #drawer fxFlex fxLayoutAlign=\"column\" mode=\"over\">\r\n <!-- FECHAR SIDENAV -->\r\n <button\r\n (click)=\"drawer.toggle()\"\r\n class=\"btn-fechar-drawer\"\r\n id=\"btn_fechar_databar_mobile\"\r\n mat-icon-button\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <!-- /FECHAR SIDENAV -->\r\n\r\n <!-- STATUS -->\r\n <div class=\"pr-12\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <div fxFlex=\"100\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <h4 class=\"pl-12\">A\u00E7\u00F5es</h4>\r\n <p class=\"texto-status\" id=\"status_mobile\">{{ status }}</p>\r\n </div>\r\n </div>\r\n <!-- /STATUS -->\r\n\r\n <!-- OPCOES -->\r\n <div class=\"px-12 overflow\" fxLayout=\"column\" fxLayoutAlign=\"start start\">\r\n <mat-list>\r\n <!-- BTN_PRIMEIRO -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"primeiro()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoRetroceder ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoPrimeiro()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_primeiro_mobile\"\r\n matTooltip=\"Primeiro item\"\r\n >\r\n <mat-icon>first_page</mat-icon>\r\n Primeiro item\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_PRIMEIRO -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_ULTIMO -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"ultimo()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoAvancar ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoUltimo()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n id=\"btn_ultimo_mobile\"\r\n mat-button\r\n matTooltip=\"\u00DAltimo\"\r\n >\r\n <mat-icon>last_page</mat-icon>\r\n \u00DAltimo item\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_ULTIMO -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- MODO_TABELA -->\r\n <mat-list-item>\r\n <button\r\n *ngIf=\"servicoConfiguracaoBotoes?.exibirBotaoModoTabela()\"\r\n (click)=\"onClickModoTabela()\"\r\n [disabled]=\"desabilitarBotaoModoTabela\"\r\n color=\"primary\"\r\n id=\"btn_modo_tabela_mobile\"\r\n mat-button\r\n matTooltip=\"Alterar exibi\u00E7\u00E3o para tabela\"\r\n >\r\n <mat-icon>list</mat-icon>\r\n Modo tabela\r\n </button>\r\n </mat-list-item>\r\n <!-- MODO_TABELA -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_NOVA_PESQUISA -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"onClickNovaPesquisa()\"\r\n [disabled]=\"\r\n servicoConfiguracaoBotoes?.desabilitarBotaoNovaPesquisa()\r\n \"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_nova_pesquisa_mobile\"\r\n matTooltip=\"Nova Pesquisa\"\r\n >\r\n <mat-icon>restore_page</mat-icon>\r\n Nova Pesquisa\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_NOVA_PESQUISA -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_PESQUISAR -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"pesquisar()\"\r\n [disabled]=\"desabilitarBotaoPesquisar\"\r\n color=\"primary\"\r\n id=\"btn_pesquisar_mobile\"\r\n mat-button\r\n matTooltip=\"Pesquisar\"\r\n >\r\n <mat-icon>search</mat-icon>\r\n Pesquisar\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_PESQUISAR -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_ADICIONAR -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"inserir()\"\r\n [disabled]=\"desabilitarBotaoAdicionar\"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_adicionar_mobile\"\r\n matTooltip=\"Adicionar\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n Incluir\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_ADICIONAR -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_EDITAR -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"editar()\"\r\n [disabled]=\"desabilitarBotaoEditar\"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_editar_mobile\"\r\n matTooltip=\"Editar\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n Editar\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_EDITAR -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_REMOVER -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"remover()\"\r\n [disabled]=\"desabilitarBotaoRemover\"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_remover_mobile\"\r\n matTooltip=\"Remover\"\r\n >\r\n <mat-icon>delete_forever</mat-icon>\r\n Remover\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_REMOVER -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_SALVAR -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"salvar()\"\r\n [disabled]=\"desabilitarBotaoSalvar\"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_salvar_mobile\"\r\n matTooltip=\"Salvar\"\r\n >\r\n <mat-icon>save</mat-icon>\r\n Salvar\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_SALVAR -->\r\n\r\n <mat-divider></mat-divider>\r\n </mat-list>\r\n </div>\r\n <!-- /OPCOES -->\r\n </mat-drawer>\r\n <!-- /MOBILE -->\r\n</div>\r\n",
|
|
411
|
+
template: "<div fxFlex=\"1 0 auto\" fxFlexLayout=\"space-around center\" fxLayout=\"column\">\r\n <!-- DESKTOP -->\r\n <mat-toolbar class=\"px-0 mat-elevation-z4\">\r\n <div fxFlex=\"1 0 auto\" fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\r\n <!-- BOT\u00C3O EXIBIR DRAWER -->\r\n <mat-drawer-container fxFlex.sm fxHide.gt-sm>\r\n <button\r\n (click)=\"drawer.toggle()\"\r\n id=\"btn_exibir_databar_mobile\"\r\n mat-button\r\n type=\"button\"\r\n color=\"primary\"\r\n >\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n </mat-drawer-container>\r\n <!-- /BOT\u00C3O EXIBIR DRAWER -->\r\n\r\n <!-- A\u00C7\u00D5ES -->\r\n <div\r\n fxFlex.sm\r\n fxHide\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"space-around center\"\r\n fxShow.gt-sm\r\n >\r\n <!-- BTN_NOVA_PESQUISA -->\r\n <button\r\n (click)=\"onClickNovaPesquisa()\"\r\n [disabled]=\"servicoConfiguracaoBotoes?.desabilitarBotaoNovaPesquisa()\"\r\n color=\"primary\"\r\n id=\"btn_nova_pesquisa\"\r\n mat-button\r\n matTooltip=\"Nova Pesquisa\"\r\n >\r\n <mat-icon>insert_drive_file</mat-icon>\r\n </button>\r\n <!-- BTN_NOVA_PESQUISA -->\r\n\r\n <!-- BTN_REVERTER -->\r\n <button\r\n (click)=\"onClickReverter()\"\r\n [disabled]=\"desabilitarBotaoReverter\"\r\n color=\"primary\"\r\n id=\"btn_reverter\"\r\n mat-button\r\n matTooltip=\"Reverter\"\r\n >\r\n <mat-icon>restore</mat-icon>\r\n </button>\r\n <!-- BTN_REVERTER -->\r\n\r\n <!-- BTN_PESQUISAR -->\r\n <button\r\n (click)=\"pesquisar()\"\r\n [disabled]=\"desabilitarBotaoPesquisar\"\r\n color=\"primary\"\r\n id=\"btn_pesquisar\"\r\n mat-button\r\n matTooltip=\"Pesquisar\"\r\n >\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <!-- BTN_PESQUISAR -->\r\n\r\n <!-- BTN_ADICIONAR -->\r\n <button\r\n (click)=\"inserir()\"\r\n [disabled]=\"desabilitarBotaoAdicionar\"\r\n color=\"primary\"\r\n id=\"btn_adicionar\"\r\n mat-button\r\n matTooltip=\"Adicionar\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n <!-- BTN_ADICIONAR -->\r\n\r\n <!-- BTN_EDITAR -->\r\n <button\r\n (click)=\"editar()\"\r\n [disabled]=\"desabilitarBotaoEditar\"\r\n color=\"primary\"\r\n id=\"btn_editar\"\r\n mat-button\r\n matTooltip=\"Editar\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <!-- BTN_EDITAR -->\r\n\r\n <!-- BTN_REMOVER -->\r\n <button\r\n (click)=\"remover()\"\r\n [disabled]=\"desabilitarBotaoRemover\"\r\n color=\"primary\"\r\n id=\"btn_remover\"\r\n mat-button\r\n matTooltip=\"Remover\"\r\n >\r\n <mat-icon>delete_forever</mat-icon>\r\n </button>\r\n <!-- BTN_REMOVER -->\r\n\r\n <!-- BTN_SALVAR -->\r\n <button\r\n (click)=\"salvar()\"\r\n [disabled]=\"desabilitarBotaoSalvar\"\r\n color=\"primary\"\r\n id=\"btn_salvar\"\r\n mat-button\r\n matTooltip=\"Salvar\"\r\n >\r\n <mat-icon>save</mat-icon>\r\n </button>\r\n <!-- BTN_SALVAR -->\r\n </div>\r\n <!-- /A\u00C7\u00D5ES -->\r\n\r\n <!-- STATUS -->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\r\n <!-- PROGRESS -->\r\n <mat-spinner *ngIf=\"emProgresso\" [diameter]=\"20\"></mat-spinner>\r\n <!-- PROGRESS -->\r\n\r\n <button\r\n color=\"primary\"\r\n fxHide.lt-sm\r\n id=\"btn_status\"\r\n mat-button\r\n matTooltip=\"A\u00E7\u00E3o no momento\"\r\n >\r\n {{ status }}\r\n </button>\r\n </div>\r\n <!-- STATUS -->\r\n\r\n <!-- PAGINA\u00C7\u00C3O -->\r\n <div fxFlex.sm fxLayout=\"row\" fxLayoutAlign=\"center center\">\r\n <!-- BTN_PRIMEIRO -->\r\n <button\r\n (click)=\"primeiro()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoRetroceder ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoPrimeiro()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n fxFlex.sm\r\n fxHide.lt-sm\r\n id=\"btn_primeiro\"\r\n mat-button\r\n matTooltip=\"Primeiro item\"\r\n >\r\n <mat-icon>first_page</mat-icon>\r\n </button>\r\n <!-- BTN_PRIMEIRO -->\r\n\r\n <!-- BTN_ANTERIOR -->\r\n <button\r\n (click)=\"anterior()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoRetroceder ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoAnterior()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n id=\"btn_anterior\"\r\n mat-button\r\n matTooltip=\"Anterior\"\r\n >\r\n <mat-icon>navigate_before</mat-icon>\r\n </button>\r\n <!-- BTN_ANTERIOR -->\r\n\r\n <div\r\n class=\"px-0 px-sm-12 contador-paginas\"\r\n id=\"contador_paginacao\"\r\n matTooltip=\"P\u00E1gina Atual\"\r\n >\r\n {{ entidadePaginada?.posicao }} de {{ entidadePaginada?.total }}\r\n </div>\r\n\r\n <!-- BTN_PROXIMO -->\r\n <button\r\n (click)=\"proximo()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoAvancar ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoProximo()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n id=\"btn_proximo\"\r\n mat-button\r\n matTooltip=\"Pr\u00F3ximo\"\r\n >\r\n <mat-icon>navigate_next</mat-icon>\r\n </button>\r\n <!-- BTN_PROXIMO -->\r\n\r\n <!-- BTN_ULTIMO -->\r\n <button\r\n (click)=\"ultimo()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoAvancar ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoUltimo()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n id=\"btn_ultimo\"\r\n fxFlex.sm\r\n fxHide.lt-sm\r\n mat-button\r\n matTooltip=\"\u00DAltimo\"\r\n >\r\n <mat-icon>last_page</mat-icon>\r\n </button>\r\n <!-- BTN_ULTIMO -->\r\n </div>\r\n <!-- /PAGINA\u00C7\u00C3O -->\r\n\r\n <div\r\n fxShow.gt-sm\r\n fxHide\r\n fxFlex.sm\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"center center\"\r\n >\r\n <!-- MODO_TABELA -->\r\n <button\r\n *ngIf=\"servicoConfiguracaoBotoes?.exibirBotaoModoTabela()\"\r\n (click)=\"onClickModoTabela()\"\r\n [disabled]=\"desabilitarBotaoModoTabela\"\r\n color=\"primary\"\r\n id=\"btn_modo_tabela\"\r\n mat-button\r\n matTooltip=\"Alterar exibi\u00E7\u00E3o para tabela\"\r\n >\r\n <mat-icon>format_list_bulleted</mat-icon>\r\n </button>\r\n <!-- MODO_TABELA -->\r\n </div>\r\n </div>\r\n </mat-toolbar>\r\n <!-- /DESKTOP -->\r\n\r\n <!-- MOBILE -->\r\n <mat-drawer #drawer fxFlex fxLayoutAlign=\"column\" mode=\"over\">\r\n <!-- FECHAR SIDENAV -->\r\n <button\r\n (click)=\"drawer.toggle()\"\r\n class=\"btn-fechar-drawer\"\r\n id=\"btn_fechar_databar_mobile\"\r\n mat-icon-button\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <!-- /FECHAR SIDENAV -->\r\n\r\n <!-- STATUS -->\r\n <div class=\"pr-12\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <div fxFlex=\"100\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <h4 class=\"pl-12\">A\u00E7\u00F5es</h4>\r\n <p class=\"texto-status\" id=\"status_mobile\">{{ status }}</p>\r\n </div>\r\n </div>\r\n <!-- /STATUS -->\r\n\r\n <!-- OPCOES -->\r\n <div class=\"px-12 overflow\" fxLayout=\"column\" fxLayoutAlign=\"start start\">\r\n <mat-list>\r\n <!-- BTN_PRIMEIRO -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"primeiro()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoRetroceder ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoPrimeiro()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_primeiro_mobile\"\r\n matTooltip=\"Primeiro item\"\r\n >\r\n <mat-icon>first_page</mat-icon>\r\n Primeiro item\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_PRIMEIRO -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_ULTIMO -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"ultimo()\"\r\n [disabled]=\"\r\n desabilitarBotoesPaginacaoAvancar ||\r\n servicoConfiguracaoBotoes?.desabilitarBotaoUltimo()\r\n \"\r\n class=\"px-0 px-sm-12\"\r\n color=\"primary\"\r\n id=\"btn_ultimo_mobile\"\r\n mat-button\r\n matTooltip=\"\u00DAltimo\"\r\n >\r\n <mat-icon>last_page</mat-icon>\r\n \u00DAltimo item\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_ULTIMO -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- MODO_TABELA -->\r\n <mat-list-item>\r\n <button\r\n *ngIf=\"servicoConfiguracaoBotoes?.exibirBotaoModoTabela()\"\r\n (click)=\"onClickModoTabela()\"\r\n [disabled]=\"desabilitarBotaoModoTabela\"\r\n color=\"primary\"\r\n id=\"btn_modo_tabela_mobile\"\r\n mat-button\r\n matTooltip=\"Alterar exibi\u00E7\u00E3o para tabela\"\r\n >\r\n <mat-icon>list</mat-icon>\r\n Modo tabela\r\n </button>\r\n </mat-list-item>\r\n <!-- MODO_TABELA -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_NOVA_PESQUISA -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"onClickNovaPesquisa()\"\r\n [disabled]=\"\r\n servicoConfiguracaoBotoes?.desabilitarBotaoNovaPesquisa()\r\n \"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_nova_pesquisa_mobile\"\r\n matTooltip=\"Nova Pesquisa\"\r\n >\r\n <mat-icon>restore_page</mat-icon>\r\n Nova Pesquisa\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_NOVA_PESQUISA -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_PESQUISAR -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"pesquisar()\"\r\n [disabled]=\"desabilitarBotaoPesquisar\"\r\n color=\"primary\"\r\n id=\"btn_pesquisar_mobile\"\r\n mat-button\r\n matTooltip=\"Pesquisar\"\r\n >\r\n <mat-icon>search</mat-icon>\r\n Pesquisar\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_PESQUISAR -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_ADICIONAR -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"inserir()\"\r\n [disabled]=\"desabilitarBotaoAdicionar\"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_adicionar_mobile\"\r\n matTooltip=\"Adicionar\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n Incluir\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_ADICIONAR -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_EDITAR -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"editar()\"\r\n [disabled]=\"desabilitarBotaoEditar\"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_editar_mobile\"\r\n matTooltip=\"Editar\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n Editar\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_EDITAR -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_REMOVER -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"remover()\"\r\n [disabled]=\"desabilitarBotaoRemover\"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_remover_mobile\"\r\n matTooltip=\"Remover\"\r\n >\r\n <mat-icon>delete_forever</mat-icon>\r\n Remover\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_REMOVER -->\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <!-- BTN_SALVAR -->\r\n <mat-list-item>\r\n <button\r\n (click)=\"salvar()\"\r\n [disabled]=\"desabilitarBotaoSalvar\"\r\n color=\"primary\"\r\n mat-button\r\n id=\"btn_salvar_mobile\"\r\n matTooltip=\"Salvar\"\r\n >\r\n <mat-icon>save</mat-icon>\r\n Salvar\r\n </button>\r\n </mat-list-item>\r\n <!-- BTN_SALVAR -->\r\n\r\n <mat-divider></mat-divider>\r\n </mat-list>\r\n </div>\r\n <!-- /OPCOES -->\r\n </mat-drawer>\r\n <!-- /MOBILE -->\r\n</div>\r\n",
|
|
412
412
|
styles: ["::ng-deep .sucesso{background:#4caf50!important;color:#fff!important}::ng-deep .sucesso button{color:#1b5e20!important;font-weight:800!important}.contador-paginas{color:#039be5;font-size:14px}@media (max-width:959px){.contador-paginas{font-size:12px}}.btn-fechar-drawer{position:absolute;right:5px;top:5px}.texto-status{color:#039be5;text-align:center}mat-toolbar{background:#fff!important;width:100%}mat-drawer-container{background:transparent!important}mat-drawer{left:0;min-width:240px}.overflow,mat-drawer,mat-list{overflow-y:auto}:host{display:flex;flex:0 0 auto;z-index:99999}:host .mat-toolbar{background:inherit;border-bottom:1px solid #e6e6e6;color:inherit}:host .mat-toolbar .pagina{font-size:10px;margin:1vm;text-align:center}:host.above{position:relative;z-index:99999999}"]
|
|
413
413
|
},] }
|
|
414
414
|
];
|
|
@@ -430,4 +430,4 @@ DataBarComponent.propDecorators = {
|
|
|
430
430
|
drawer: [{ type: ViewChild, args: ['drawer', { static: false },] }],
|
|
431
431
|
fecharSidenav: [{ type: HostListener, args: ['document:click', ['$event'],] }]
|
|
432
432
|
};
|
|
433
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWMtZGF0YS1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L0FXUy9jb2RlY29taXQvYmlibGlvdGVjYS1hbmd1bGFyL3Byb2plY3RzL2ljLWRhdGFiYXItbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9pYy1kYXRhLWJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixZQUFZLEVBQ1osVUFBVSxFQUNWLFNBQVMsR0FFWixNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUVyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFTbEYsTUFBTSxPQUFPLGdCQUFnQjtJQXVCekIsWUFDWSxPQUFnQyxFQUNoQyxXQUErQixFQUMvQixXQUF1QixFQUN2QixlQUErQixFQUMvQixnQkFBb0M7UUFKcEMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBckJ2QyxhQUFRLEdBQUcsS0FBSyxD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RU8sWUFBWSxDQUFDLFNBQWtCO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7OztZQXZpQkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxhQUFhO2dCQUN2QiwycmlCQUFnRDs7YUFFbkQ7OztZQXBCUSx1QkFBdUI7WUFTdkIsa0JBQWtCO1lBbkJ2QixVQUFVO1lBcUJMLGNBQWM7WUFWZCxrQkFBa0I7OzswQkFxQnRCLEtBQUs7bUJBSUwsS0FBSzsrQkFDTCxLQUFLO3VCQUNMLEtBQUs7d0NBQ0wsS0FBSzs4QkFDTCxLQUFLOzRCQUlMLE1BQU07cUJBUU4sU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7NEJBd0JyQyxZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBPbkluaXQsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgT25EZXN0cm95LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERyYXdlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xyXG5cclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgSWNDb25maXJtYURpYWxvZ1NlcnZpY2UgfSBmcm9tICdAaW5vdmFtb2JpbC9pYy1jb25maXJtYS1kaWFsb2cnO1xyXG5pbXBvcnQgeyBJY21TbmFja0JhclNlcnZpY2UgfSBmcm9tICdAaW5vdmFtb2JpbC9pY20tc25hY2tiYXInO1xyXG5cclxuaW1wb3J0IHsgSURhdGFFbnRpZGFkZVBhZ2luYWRhIH0gZnJvbSAnLi9jb250cmF0by9JRGF0YUVudGlkYWRlUGFnaW5hZGEnO1xyXG5pbXBvcnQgeyBJRGF0YUJhckJpbmRTZXJ2aWNlIH0gZnJvbSAnLi9jb250cmF0by9JRGF0YUJhclNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFU3RhdHVzIH0gZnJvbSAnLi9lbnVtL2VzdGF0dXMnO1xyXG5pbXBvcnQgeyBFRXZlbnRvQ2xpY2sgfSBmcm9tICcuL2VudW0vZWV2ZW50b2NsaWNrJztcclxuaW1wb3J0IHsgSURhdGFiYXJCaW5kT25DbGlja1NlcnZpY2UgfSBmcm9tICcuL2NvbnRyYXRvL0lEYXRhQmFyQmluZE9uQ2xpY2tTZXJ2aWNlJztcclxuaW1wb3J0IHsgSURhdGFiYXJCaW5kU3RhdHVzU2VydmljZSB9IGZyb20gJy4uL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQgeyBFcnJvckRpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2RpYWxvZ3MvZXJyb3ItZGlhbG9nL3NlcnZpY2UvZXJyb3ItZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBQ0FPX1BBR0lOQUNBTyB9IGZyb20gJy4vY29uc3RhbnRzL2ljLWRhdGFiYXIuY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRGF0YWJhclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ljLWRhdGFiYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEljRGF0YWJhclJldmVydGVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaWMtZGF0YWJhci1yZXZlcnRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSURhdGFCYXJSZXZlcnRlclNlcnZpY2UgfSBmcm9tICcuL2NvbnRyYXRvL0lEYXRhQmFyUmV2ZXJ0ZXJTZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YUJhckNvbmZpZ0JvdG9lc1NlcnZpY2UgfSBmcm9tICcuL2NvbnRyYXRvL0RhdGFCYXJDb25maWdCb3RvZXNTZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdpYy1kYXRhLWJhcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdmlldy9pYy1kYXRhLWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi92aWV3L2ljLWRhdGEtYmFyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhQmFyQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCkgc2Vydmljb0JpbmQ6XHJcbiAgICAgICAgfCBJRGF0YUJhckJpbmRTZXJ2aWNlPFQ+XHJcbiAgICAgICAgfCBJRGF0YWJhckJpbmRTdGF0dXNTZXJ2aWNlPFQ+XHJcbiAgICAgICAgfCBJRGF0YWJhckJpbmRPbkNsaWNrU2VydmljZTxUPjtcclxuICAgIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuICAgIEBJbnB1dCgpIGVudGlkYWRlUGFnaW5hZGE6IElEYXRhRW50aWRhZGVQYWdpbmFkYTxUPjtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZXJ2aWNvQ29uZmlndXJhY2FvQm90b2VzOiBEYXRhQmFyQ29uZmlnQm90b2VzU2VydmljZTtcclxuICAgIEBJbnB1dCgpIHNldCBzZXJ2aWNvUmV2ZXJ0ZXIoc2VydmljbzogSURhdGFCYXJSZXZlcnRlclNlcnZpY2U8VD4pIHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNvUmV2ZXJ0ZXIgPSBzZXJ2aWNvO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBzdGF0dXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxFU3RhdHVzPigpO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0dXM6IEVTdGF0dXM7XHJcbiAgICBwdWJsaWMgRVN0YXR1cyA9IEVTdGF0dXM7XHJcbiAgICBwdWJsaWMgZW1Qcm9ncmVzc28gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX3NlcnZpY29SZXZlcnRlcjogSURhdGFCYXJSZXZlcnRlclNlcnZpY2U8VD47XHJcbiAgICBwcml2YXRlICRzZXRTdGF0dXM6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdkcmF3ZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZHJhd2VyOiBNYXREcmF3ZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfZGlhbG9nOiBJY0NvbmZpcm1hRGlhbG9nU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9kaWFsb2dFcnJvOiBFcnJvckRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIF9kYXRhYmFyU2VydmljZTogRGF0YWJhclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfc25hY2tCYXJTZXJ2aWNlOiBJY21TbmFja0JhclNlcnZpY2VcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXJQcm9wZXJ0c09icmlnYXRvcmlhcygpO1xyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3NvKGZhbHNlKTtcclxuICAgICAgICB0aGlzLm5vdmFQZXNxdWlzYSgpO1xyXG4gICAgICAgIHRoaXMuX3N1Ym1ldGVyRm9ybXVsYXJpb09uRW50ZXIoKTtcclxuICAgICAgICB0aGlzLm9ic2VydmFyU2V0U3RhdHVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2Vydmljb0JpbmQub25DbGlja0VudGVyKSB0aGlzLnNlcnZpY29CaW5kLm9uQ2xpY2tFbnRlci51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy4kc2V0U3RhdHVzKSB0aGlzLiRzZXRTdGF0dXMudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgICBmZWNoYXJTaWRlbmF2KGV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kcmF3ZXIuY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaW5zZXJpbmRvT3VFZGl0YW5kbygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IEVTdGF0dXMuaW5zZXJpbmRvIHx8IHRoaXMuc3RhdHVzID09PSBFU3RhdHVzLmVkaXRhbmRvO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXNhYmlsaXRhckJvdGFvTW9kb1RhYmVsYSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmluc2VyaW5kbyB8fFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmVkaXRhbmRvIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmludmFsaWQgfHxcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNvQ29uZmlndXJhY2FvQm90b2VzPy5kZXNhYmlsaXRhckJvdGFvTW9kb1RhYmVsYSgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVzYWJpbGl0YXJCb3Rhb1Blc3F1aXNhcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmluc2VyaW5kbyB8fFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmVkaXRhbmRvIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID09IEVTdGF0dXMuZGFkb3NDYXJyZWdhZG9zIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmludmFsaWQgfHxcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNvQ29uZmlndXJhY2FvQm90b2VzPy5kZXNhYmlsaXRhckJvdGFvUGVzcXVpc2FyKClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXNhYmlsaXRhckJvdGFvUmV2ZXJ0ZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5ub3ZhUGVzcXVpc2EgfHxcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5leGVjdXRhckFjYW8gfHxcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5kYWRvc0NhcnJlZ2Fkb3MgfHxcclxuICAgICAgICAgICAgdGhpcy5lbVByb2dyZXNzbyB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY29Db25maWd1cmFjYW9Cb3RvZXM/LmRlc2FiaWxpdGFyQm90YW9SZXZlcnRlcigpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVzYWJpbGl0YXJCb3Rhb0FkaWNpb25hcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmVkaXRhbmRvIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID09IEVTdGF0dXMuaW5zZXJpbmRvIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY29Db25maWd1cmFjYW9Cb3RvZXM/LmRlc2FiaWxpdGFyQm90YW9BZGljaW9uYXIoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRlc2FiaWxpdGFyQm90YW9FZGl0YXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5pbnNlcmluZG8gfHxcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5ub3ZhUGVzcXVpc2EgfHxcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5leGVjdXRhckFjYW8gfHxcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5wZXNxdWlzYW5kbyB8fFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmVkaXRhbmRvIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY29Db25maWd1cmFjYW9Cb3RvZXM/LmRlc2FiaWxpdGFyQm90YW9FZGl0YXIoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRlc2FiaWxpdGFyQm90YW9SZW1vdmVyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICF0aGlzLmVudGlkYWRlUGFnaW5hZGE/LmVudGlkYWRlIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzICE9IEVTdGF0dXMuZGFkb3NDYXJyZWdhZG9zIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNvQ29uZmlndXJhY2FvQm90b2VzPy5kZXNhYmlsaXRhckJvdGFvUmVtb3ZlcigpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVzYWJpbGl0YXJCb3Rhb1NhbHZhcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmZvcm0/LmludmFsaWQgfHxcclxuICAgICAgICAgICAgKHRoaXMuc3RhdHVzICE9IEVTdGF0dXMuaW5zZXJpbmRvICYmIHRoaXMuc3RhdHVzICE9IEVTdGF0dXMuZWRpdGFuZG8pIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY29Db25maWd1cmFjYW9Cb3RvZXM/LmRlc2FiaWxpdGFyQm90YW9TYWx2YXIoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRlc2FiaWxpdGFyQm90b2VzUGFnaW5hY2FvUmV0cm9jZWRlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmluc2VyaW5kb091RWRpdGFuZG8gfHxcclxuICAgICAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8gPD0gMSB8fFxyXG4gICAgICAgICAgICB0aGlzLmVtUHJvZ3Jlc3NvXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVzYWJpbGl0YXJCb3RvZXNQYWdpbmFjYW9BdmFuY2FyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJpbmRvT3VFZGl0YW5kbyB8fFxyXG4gICAgICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGEucG9zaWNhbyA+PSB0aGlzLmVudGlkYWRlUGFnaW5hZGEudG90YWwgfHxcclxuICAgICAgICAgICAgdGhpcy5lbVByb2dyZXNzb1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja1JldmVydGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2V4aWJpckRpYWxvZ0NvbmZpcm1hY2FvUmV2ZXJ0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrTW9kb1RhYmVsYSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9lbWl0aXJFdmVudG9DbGljayhFRXZlbnRvQ2xpY2sub25DbGlja01vZG9UYWJlbGEpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2tOb3ZhUGVzcXVpc2EoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLm9uQ2xpY2tOb3ZhUGVzcXVpc2EpO1xyXG4gICAgICAgIHRoaXMubm92YVBlc3F1aXNhKCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLmFmdGVyQ2xpY2tOb3ZhUGVzcXVpc2EpO1xyXG4gICAgfVxyXG5cclxuICAgIG5vdmFQZXNxdWlzYSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kYXRhYmFyU2VydmljZS5oYWJpbGl0YXJGb3JtKHRoaXMuZm9ybSk7XHJcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KHsgZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLmVudGlkYWRlID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS5wb3NpY2FvID0gMDtcclxuICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGEudG90YWwgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMubm92YVBlc3F1aXNhKTtcclxuICAgIH1cclxuXHJcbiAgICBwZXNxdWlzYXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldERhZG9zQW50ZXJpb3JlcygpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMucGVzcXVpc2FuZG8pO1xyXG4gICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS5lbnRpZGFkZSA9IFtdLmNvbmNhdCh0aGlzLl9nZXRFbnRpZGFkZSgpKTtcclxuICAgICAgICB0aGlzLl9wYWdpbmFyKCk7XHJcbiAgICAgICAgdGhpcy5kcmF3ZXIuY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcmlyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2VtaXRpckV2ZW50b0NsaWNrKEVFdmVudG9DbGljay5vbkNsaWNrSW5zZXJpcik7XHJcbiAgICAgICAgdGhpcy5fY2xpY2tJbnNlcmlyKCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLmFmdGVyQ2xpY2tJbnNlcmlyKTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0YXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLm9uQ2xpY2tFZGl0YXIpO1xyXG4gICAgICAgIHRoaXMuX2NsaWNrRWRpdGFyKCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLmFmdGVyQ2xpY2tFZGl0YXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLm9uQ2xpY2tSZW1vdmVyKTtcclxuICAgICAgICB0aGlzLl9jbGlja1JlbW92ZXIoKTtcclxuICAgICAgICB0aGlzLl9lbWl0aXJFdmVudG9DbGljayhFRXZlbnRvQ2xpY2suYWZ0ZXJDbGlja1JlbW92ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3hpbW8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcGFnaW5hcigncHJveGltbycpO1xyXG4gICAgfVxyXG5cclxuICAgIGFudGVyaW9yKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3BhZ2luYXIoJ2FudGVyaW9yJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdWx0aW1vKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3BhZ2luYXIoJ3VsdGltbycpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaW1laXJvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3BhZ2luYXIoJ3ByaW1laXJvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2FsdmFyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2VtaXRpckV2ZW50b0NsaWNrKEVFdmVudG9DbGljay5vbkNsaWNrU2FsdmFyKTtcclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnN0YXR1cykge1xyXG4gICAgICAgICAgICBjYXNlIEVTdGF0dXMuaW5zZXJpbmRvOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5zZXJpcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIEVTdGF0dXMuZWRpdGFuZG86XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0YXIoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9pbnNlcmlyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMuc2FsdmFuZG8pO1xyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3NvKHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2Vydmljb0JpbmRcclxuICAgICAgICAgICAgLmNyaWFyKClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLmFmdGVyQ2xpY2tTYWx2YXIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHN1Y2Nlc3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb2dyZXNzbyhmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyU2VydmljZS5hYnJpclNuYWNrQmFyU3VjZXNzbyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZ2lzdHJvIHNhbHZvIGNvbSBzdWNlc3NvISdcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShzdWNjZXNzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5kYWRvc0NhcnJlZ2Fkb3MpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhYmFyU2VydmljZS5kZXNhYmlsaXRhckZvcm0odGhpcy5mb3JtKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9ncmVzc28oZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMuaW5zZXJpbmRvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9lZGl0YXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5zYWx2YW5kbyk7XHJcbiAgICAgICAgdGhpcy5zZXRQcm9ncmVzc28odHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNvQmluZFxyXG4gICAgICAgICAgICAuZWRpdGFyKClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLmFmdGVyQ2xpY2tTYWx2YXIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHN1Y2Nlc3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zbmFja0JhclNlcnZpY2UuYWJyaXJTbmFja0JhclN1Y2Vzc28oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWdpc3RybyBlZGl0YWRvIGNvbSBzdWNlc3NvISdcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShzdWNjZXNzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9ncmVzc28oZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhFU3RhdHVzLmRhZG9zQ2FycmVnYWRvcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFiYXJTZXJ2aWNlLmRlc2FiaWxpdGFyRm9ybSh0aGlzLmZvcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdlci5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb2dyZXNzbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5lZGl0YW5kbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvYnNlcnZhclNldFN0YXR1cygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoKHRoaXMuc2Vydmljb0JpbmQgYXMgSURhdGFiYXJCaW5kU3RhdHVzU2VydmljZTxUPikuc2V0U3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNldFN0YXR1cyA9IChcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Vydmljb0JpbmQgYXMgSURhdGFiYXJCaW5kU3RhdHVzU2VydmljZTxUPlxyXG4gICAgICAgICAgICApLnNldFN0YXR1cy5zdWJzY3JpYmUoKHN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEVTdGF0dXMuZWRpdGFuZG86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdGFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFU3RhdHVzLmluc2VyaW5kbzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcmlyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFU3RhdHVzLnBlc3F1aXNhbmRvOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlc3F1aXNhcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEVTdGF0dXMubm92YVBlc3F1aXNhOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdmFQZXNxdWlzYSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEVTdGF0dXMucmVtb3ZlbmRvOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFU3RhdHVzLmRhZG9zQ2FycmVnYWRvczpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBFU3RhdHVzLmRhZG9zQ2FycmVnYWRvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbVByb2dyZXNzbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmV0b3JuYXJTZXJ2aWNvUmV2ZXJ0ZXIoKTogSURhdGFCYXJSZXZlcnRlclNlcnZpY2U8VD4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXJ2aWNvUmV2ZXJ0ZXIgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5fc2Vydmljb1JldmVydGVyID0gbmV3IEljRGF0YWJhclJldmVydGVyU2VydmljZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2Vydmljb1JldmVydGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldERhZG9zQW50ZXJpb3JlcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJldG9ybmFyU2Vydmljb1JldmVydGVyKCkuc2V0RGFkb3NBbnRlcmlvcmVzKFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyxcclxuICAgICAgICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGFcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3JldmVydGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2VtaXRpckV2ZW50b0NsaWNrKEVFdmVudG9DbGljay5vbkNsaWNrUmV2ZXJ0ZXIpO1xyXG4gICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYSA9IHRoaXMucmV0b3JuYXJTZXJ2aWNvUmV2ZXJ0ZXIoKS5yZXN0YXVyYXJEYWRvc0FudGVyaW9yZXMoXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzQW50ZXJpb3IgPSB0aGlzLnJldG9ybmFyU2Vydmljb1JldmVydGVyKCkuc3RhdHVzQW50ZXJpb3I7XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXNBbnRlcmlvciA9PSBFU3RhdHVzLmRhZG9zQ2FycmVnYWRvcylcclxuICAgICAgICAgICAgdGhpcy5fZGF0YWJhclNlcnZpY2UuZGVzYWJpbGl0YXJGb3JtKHRoaXMuZm9ybSk7XHJcbiAgICAgICAgZWxzZSB0aGlzLl9kYXRhYmFyU2VydmljZS5oYWJpbGl0YXJGb3JtKHRoaXMuZm9ybSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKHN0YXR1c0FudGVyaW9yKTtcclxuICAgICAgICB0aGlzLl9lbWl0aXJFdmVudG9DbGljayhFRXZlbnRvQ2xpY2suYWZ0ZXJDbGlja1JldmVydGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9yZXNldGFyQ29udGFkb3JQYWdpbmFjYW8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8gPSAwO1xyXG4gICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS50b3RhbCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGFyUHJvcGVydHNPYnJpZ2F0b3JpYXMoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5zZXJ2aWNvQmluZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignw4kgb2JyaWdhdMOzcmlvIHRlciB1bSBzZXJ2acOnbyBkZSBiaW5kIHZpbmN1bGFkby4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVudGlkYWRlUGFnaW5hZGEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ8OJIG9icmlnYXTDs3JpbyB0ZXIgdW1hIGVudGlkYWRlIHBhZ2luYWRhIHZpbmN1bGFkYS4nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRTdGF0dXMoc3RhdHVzOiBFU3RhdHVzKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcclxuICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZWQuZW1pdCh0aGlzLnN0YXR1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0RW50aWRhZGUoKTogVCB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkgYXMgVDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3N1Ym1ldGVyRm9ybXVsYXJpb09uRW50ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY29CaW5kLm9uQ2xpY2tFbnRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2Vydmljb0JpbmQub25DbGlja0VudGVyLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gRVN0YXR1cy5ub3ZhUGVzcXVpc2EgJiYgdGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlc3F1aXNhcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2xpY2tJbnNlcmlyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NldERhZG9zQW50ZXJpb3JlcygpO1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0YXJDb250YWRvclBhZ2luYWNhbygpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFiYXJTZXJ2aWNlLmhhYmlsaXRhckZvcm0odGhpcy5mb3JtKTtcclxuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICAgICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMuZHJhd2VyLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5pbnNlcmluZG8pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NsaWNrRWRpdGFyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NldERhZG9zQW50ZXJpb3JlcygpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFiYXJTZXJ2aWNlLmhhYmlsaXRhckZvcm0odGhpcy5mb3JtKTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLmRyYXdlci5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMuZWRpdGFuZG8pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NsaWNrUmVtb3ZlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldFN0YXR1cyhFU3RhdHVzLnJlbW92ZW5kbyk7XHJcbiAgICAgICAgdGhpcy5fZXhpYmlyRGlhbG9nQ29uZmlybWFjYW8oKTtcclxuICAgICAgICB0aGlzLmRyYXdlci5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2VtaXRpckV2ZW50b0NsaWNrKGV2ZW50bzogRUV2ZW50b0NsaWNrKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFiYXJTZXJ2aWNlLmVtaXRpckV2ZW50b0NsaWNrPFQ+KFxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY29CaW5kIGFzIElEYXRhYmFyQmluZE9uQ2xpY2tTZXJ2aWNlPFQ+LFxyXG4gICAgICAgICAgICBldmVudG9cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2FjYW9DbG9zZURpYWxvZ0NvbmZpcm1hY2FvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZy5lbVByb2dyZXNzbyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZy5jbG9zZURpYWxvZygpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMuZGFkb3NDYXJyZWdhZG9zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9leGliaXJEaWFsb2dDb25maXJtYWNhbygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kaWFsb2cuYWNhb01lbnNhZ2VtID0gJ1JlbW92ZW5kbyByZWdpc3Ryby4uLic7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nLmFjYW9PayA9ICgpID0+XHJcbiAgICAgICAgICAgIHRoaXMuc2Vydmljb0JpbmQucmVtb3ZlcigpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFsb2cuY2xvc2VEaWFsb2coKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdmFQZXNxdWlzYSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWxvZy5lbVByb2dyZXNzbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyU2VydmljZS5hYnJpclNuYWNrQmFyU3VjZXNzbygnUmVtb3ZpZG8gY29tIHN1Y2Vzc28hJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5fYWNhb0Nsb3NlRGlhbG9nQ29uZmlybWFjYW8oKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZy5hY2FvQ2FuY2VsYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjYW9DbG9zZURpYWxvZ0NvbmZpcm1hY2FvKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2coXHJcbiAgICAgICAgICAgICdBdGVuw6fDo28hJyxcclxuICAgICAgICAgICAgJ1ZvY8OqIHJlYWxtZW50ZSBkZXNlamEgZXhjbHVpciBlc3RlIHJlZ2lzdHJvPydcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2V4aWJpckRpYWxvZ0NvbmZpcm1hY2FvUmV2ZXJ0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nLmFjYW9PayA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmV2ZXJ0ZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nLmVtUHJvZ3Jlc3NvID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZy5jbG9zZURpYWxvZygpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpYWxvZy5hY2FvQ2FuY2VsYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZy5jbG9zZURpYWxvZygpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9nKFxyXG4gICAgICAgICAgICAnQXRlbsOnw6NvIScsXHJcbiAgICAgICAgICAgICdBcyBhbHRlcmHDp8O1ZXMgcmVhbGl6YWRhcyBzZXLDo28gcGVyZGlkYXMuIERlc2VqYSBjb250aW51YXI/J1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcGFnaW5hcihhY2FvPzogQUNBT19QQUdJTkFDQU8pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldFN0YXR1cyhFU3RhdHVzLnBlc3F1aXNhbmRvKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW50aWRhZGVQYWdpbmFkYS5lbnRpZGFkZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS5lbnRpZGFkZSA9IFtdLmNvbmNhdCh0aGlzLl9nZXRFbnRpZGFkZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBvc2ljYW9BbnRlcmlvciA9IHRoaXMuZW50aWRhZGVQYWdpbmFkYS5wb3NpY2FvO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGFjYW8pIHtcclxuICAgICAgICAgICAgY2FzZSAncHJpbWVpcm8nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8gPSAxO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3VsdGltbyc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGEucG9zaWNhbyA9IHRoaXMuZW50aWRhZGVQYWdpbmFkYS50b3RhbDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwcm94aW1vJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS5wb3NpY2FvKys7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYW50ZXJpb3InOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8tLTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8gPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzbyh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNvQmluZC5saXN0YXJQYWdpbmFjYW8odGhpcy5lbnRpZGFkZVBhZ2luYWRhKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIChzdWNjZXNzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByb2dyZXNzbyhmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWxvZ0Vycm8ub3BlbkRpYWxvZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F0ZW7Dp8OjbyEnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnTmVuaHVtIHJlZ2lzdHJvIGZvaSBlbmNvbnRyYWRvLidcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMubm92YVBlc3F1aXNhKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MuZW50aWRhZGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFiYXJTZXJ2aWNlLnJlc2V0Rm9ybSh0aGlzLmZvcm0sIHRoaXMuZW50aWRhZGVQYWdpbmFkYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5ub3ZhUGVzcXVpc2EpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhFU3RhdHVzLmRhZG9zQ2FycmVnYWRvcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVudGlkYWRlUGFnaW5hZGEuZW50aWRhZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGEgPSBzdWNjZXNzO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGEudG90YWwgPSBzdWNjZXNzLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS5wb3NpY2FvID0gc3VjY2Vzcy5wb3NpY2FvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHN1Y2Nlc3MuZW50aWRhZGVbMF0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3NvKGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhYmFyU2VydmljZS5kZXNhYmlsaXRhckZvcm0odGhpcy5mb3JtKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvIHBhZ2luYcOnw6NvJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5kYWRvc0NhcnJlZ2Fkb3MpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8gPSBwb3NpY2FvQW50ZXJpb3I7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByb2dyZXNzbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhYmFyU2VydmljZS5kZXNhYmlsaXRhckZvcm0odGhpcy5mb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRQcm9ncmVzc28ocHJvZ3Jlc3NvOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lbVByb2dyZXNzbyA9IHRoaXMuX2RhdGFiYXJTZXJ2aWNlLmRlZmluaXJQcm9ncmVzc28odGhpcy5mb3JtLCBwcm9ncmVzc28pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
433
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWMtZGF0YS1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L0FXUy9jb2RlY29taXQvYmlibGlvdGVjYS1hbmd1bGFyL3Byb2plY3RzL2ljLWRhdGFiYXItbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9pYy1kYXRhLWJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixZQUFZLEVBQ1osVUFBVSxFQUNWLFNBQVMsR0FFWixNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUVyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFTbEYsTUFBTSxPQUFPLGdCQUFnQjtJQXVCekIsWUFDWSxPQUFnQyxFQUNoQyxXQUErQixFQUMvQixXQUF1QixFQUN2QixlQUErQixFQUMvQixnQkFBb0M7UUFKcEMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBckJ2QyxhQUFRLEdBQUcsS0FBSyxD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RU8sWUFBWSxDQUFDLFNBQWtCO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7OztZQXZpQkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixvdmlCQUFnRDs7YUFFbkQ7OztZQXBCUSx1QkFBdUI7WUFTdkIsa0JBQWtCO1lBbkJ2QixVQUFVO1lBcUJMLGNBQWM7WUFWZCxrQkFBa0I7OzswQkFxQnRCLEtBQUs7bUJBSUwsS0FBSzsrQkFDTCxLQUFLO3VCQUNMLEtBQUs7d0NBQ0wsS0FBSzs4QkFDTCxLQUFLOzRCQUlMLE1BQU07cUJBUU4sU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7NEJBd0JyQyxZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBPbkluaXQsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgT25EZXN0cm95LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERyYXdlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xyXG5cclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgSWNDb25maXJtYURpYWxvZ1NlcnZpY2UgfSBmcm9tICdAaW5vdmFtb2JpbC9pYy1jb25maXJtYS1kaWFsb2cnO1xyXG5pbXBvcnQgeyBJY21TbmFja0JhclNlcnZpY2UgfSBmcm9tICdAaW5vdmFtb2JpbC9pY20tc25hY2tiYXInO1xyXG5cclxuaW1wb3J0IHsgSURhdGFFbnRpZGFkZVBhZ2luYWRhIH0gZnJvbSAnLi9jb250cmF0by9JRGF0YUVudGlkYWRlUGFnaW5hZGEnO1xyXG5pbXBvcnQgeyBJRGF0YUJhckJpbmRTZXJ2aWNlIH0gZnJvbSAnLi9jb250cmF0by9JRGF0YUJhclNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFU3RhdHVzIH0gZnJvbSAnLi9lbnVtL2VzdGF0dXMnO1xyXG5pbXBvcnQgeyBFRXZlbnRvQ2xpY2sgfSBmcm9tICcuL2VudW0vZWV2ZW50b2NsaWNrJztcclxuaW1wb3J0IHsgSURhdGFiYXJCaW5kT25DbGlja1NlcnZpY2UgfSBmcm9tICcuL2NvbnRyYXRvL0lEYXRhQmFyQmluZE9uQ2xpY2tTZXJ2aWNlJztcclxuaW1wb3J0IHsgSURhdGFiYXJCaW5kU3RhdHVzU2VydmljZSB9IGZyb20gJy4uL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQgeyBFcnJvckRpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2RpYWxvZ3MvZXJyb3ItZGlhbG9nL3NlcnZpY2UvZXJyb3ItZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBQ0FPX1BBR0lOQUNBTyB9IGZyb20gJy4vY29uc3RhbnRzL2ljLWRhdGFiYXIuY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRGF0YWJhclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ljLWRhdGFiYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEljRGF0YWJhclJldmVydGVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaWMtZGF0YWJhci1yZXZlcnRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSURhdGFCYXJSZXZlcnRlclNlcnZpY2UgfSBmcm9tICcuL2NvbnRyYXRvL0lEYXRhQmFyUmV2ZXJ0ZXJTZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YUJhckNvbmZpZ0JvdG9lc1NlcnZpY2UgfSBmcm9tICcuL2NvbnRyYXRvL0RhdGFCYXJDb25maWdCb3RvZXNTZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdpYy1kYXRhLWJhcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdmlldy9pYy1kYXRhLWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi92aWV3L2ljLWRhdGEtYmFyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhQmFyQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCkgc2Vydmljb0JpbmQ6XHJcbiAgICAgICAgfCBJRGF0YUJhckJpbmRTZXJ2aWNlPFQ+XHJcbiAgICAgICAgfCBJRGF0YWJhckJpbmRTdGF0dXNTZXJ2aWNlPFQ+XHJcbiAgICAgICAgfCBJRGF0YWJhckJpbmRPbkNsaWNrU2VydmljZTxUPjtcclxuICAgIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuICAgIEBJbnB1dCgpIGVudGlkYWRlUGFnaW5hZGE6IElEYXRhRW50aWRhZGVQYWdpbmFkYTxUPjtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZXJ2aWNvQ29uZmlndXJhY2FvQm90b2VzOiBEYXRhQmFyQ29uZmlnQm90b2VzU2VydmljZTtcclxuICAgIEBJbnB1dCgpIHNldCBzZXJ2aWNvUmV2ZXJ0ZXIoc2VydmljbzogSURhdGFCYXJSZXZlcnRlclNlcnZpY2U8VD4pIHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNvUmV2ZXJ0ZXIgPSBzZXJ2aWNvO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBzdGF0dXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxFU3RhdHVzPigpO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0dXM6IEVTdGF0dXM7XHJcbiAgICBwdWJsaWMgRVN0YXR1cyA9IEVTdGF0dXM7XHJcbiAgICBwdWJsaWMgZW1Qcm9ncmVzc28gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX3NlcnZpY29SZXZlcnRlcjogSURhdGFCYXJSZXZlcnRlclNlcnZpY2U8VD47XHJcbiAgICBwcml2YXRlICRzZXRTdGF0dXM6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdkcmF3ZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZHJhd2VyOiBNYXREcmF3ZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfZGlhbG9nOiBJY0NvbmZpcm1hRGlhbG9nU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9kaWFsb2dFcnJvOiBFcnJvckRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIF9kYXRhYmFyU2VydmljZTogRGF0YWJhclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfc25hY2tCYXJTZXJ2aWNlOiBJY21TbmFja0JhclNlcnZpY2VcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXJQcm9wZXJ0c09icmlnYXRvcmlhcygpO1xyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3NvKGZhbHNlKTtcclxuICAgICAgICB0aGlzLm5vdmFQZXNxdWlzYSgpO1xyXG4gICAgICAgIHRoaXMuX3N1Ym1ldGVyRm9ybXVsYXJpb09uRW50ZXIoKTtcclxuICAgICAgICB0aGlzLm9ic2VydmFyU2V0U3RhdHVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2Vydmljb0JpbmQub25DbGlja0VudGVyKSB0aGlzLnNlcnZpY29CaW5kLm9uQ2xpY2tFbnRlci51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy4kc2V0U3RhdHVzKSB0aGlzLiRzZXRTdGF0dXMudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgICBmZWNoYXJTaWRlbmF2KGV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kcmF3ZXIuY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaW5zZXJpbmRvT3VFZGl0YW5kbygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IEVTdGF0dXMuaW5zZXJpbmRvIHx8IHRoaXMuc3RhdHVzID09PSBFU3RhdHVzLmVkaXRhbmRvO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXNhYmlsaXRhckJvdGFvTW9kb1RhYmVsYSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmluc2VyaW5kbyB8fFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmVkaXRhbmRvIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmludmFsaWQgfHxcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNvQ29uZmlndXJhY2FvQm90b2VzPy5kZXNhYmlsaXRhckJvdGFvTW9kb1RhYmVsYSgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVzYWJpbGl0YXJCb3Rhb1Blc3F1aXNhcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmluc2VyaW5kbyB8fFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmVkaXRhbmRvIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID09IEVTdGF0dXMuZGFkb3NDYXJyZWdhZG9zIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmludmFsaWQgfHxcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNvQ29uZmlndXJhY2FvQm90b2VzPy5kZXNhYmlsaXRhckJvdGFvUGVzcXVpc2FyKClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXNhYmlsaXRhckJvdGFvUmV2ZXJ0ZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5ub3ZhUGVzcXVpc2EgfHxcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5leGVjdXRhckFjYW8gfHxcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5kYWRvc0NhcnJlZ2Fkb3MgfHxcclxuICAgICAgICAgICAgdGhpcy5lbVByb2dyZXNzbyB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY29Db25maWd1cmFjYW9Cb3RvZXM/LmRlc2FiaWxpdGFyQm90YW9SZXZlcnRlcigpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVzYWJpbGl0YXJCb3Rhb0FkaWNpb25hcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmVkaXRhbmRvIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID09IEVTdGF0dXMuaW5zZXJpbmRvIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY29Db25maWd1cmFjYW9Cb3RvZXM/LmRlc2FiaWxpdGFyQm90YW9BZGljaW9uYXIoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRlc2FiaWxpdGFyQm90YW9FZGl0YXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5pbnNlcmluZG8gfHxcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5ub3ZhUGVzcXVpc2EgfHxcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5leGVjdXRhckFjYW8gfHxcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT0gRVN0YXR1cy5wZXNxdWlzYW5kbyB8fFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PSBFU3RhdHVzLmVkaXRhbmRvIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY29Db25maWd1cmFjYW9Cb3RvZXM/LmRlc2FiaWxpdGFyQm90YW9FZGl0YXIoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRlc2FiaWxpdGFyQm90YW9SZW1vdmVyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICF0aGlzLmVudGlkYWRlUGFnaW5hZGE/LmVudGlkYWRlIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzICE9IEVTdGF0dXMuZGFkb3NDYXJyZWdhZG9zIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNvQ29uZmlndXJhY2FvQm90b2VzPy5kZXNhYmlsaXRhckJvdGFvUmVtb3ZlcigpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVzYWJpbGl0YXJCb3Rhb1NhbHZhcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmZvcm0/LmludmFsaWQgfHxcclxuICAgICAgICAgICAgKHRoaXMuc3RhdHVzICE9IEVTdGF0dXMuaW5zZXJpbmRvICYmIHRoaXMuc3RhdHVzICE9IEVTdGF0dXMuZWRpdGFuZG8pIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gfHxcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY29Db25maWd1cmFjYW9Cb3RvZXM/LmRlc2FiaWxpdGFyQm90YW9TYWx2YXIoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRlc2FiaWxpdGFyQm90b2VzUGFnaW5hY2FvUmV0cm9jZWRlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmluc2VyaW5kb091RWRpdGFuZG8gfHxcclxuICAgICAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8gPD0gMSB8fFxyXG4gICAgICAgICAgICB0aGlzLmVtUHJvZ3Jlc3NvXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVzYWJpbGl0YXJCb3RvZXNQYWdpbmFjYW9BdmFuY2FyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJpbmRvT3VFZGl0YW5kbyB8fFxyXG4gICAgICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGEucG9zaWNhbyA+PSB0aGlzLmVudGlkYWRlUGFnaW5hZGEudG90YWwgfHxcclxuICAgICAgICAgICAgdGhpcy5lbVByb2dyZXNzb1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja1JldmVydGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2V4aWJpckRpYWxvZ0NvbmZpcm1hY2FvUmV2ZXJ0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrTW9kb1RhYmVsYSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9lbWl0aXJFdmVudG9DbGljayhFRXZlbnRvQ2xpY2sub25DbGlja01vZG9UYWJlbGEpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2tOb3ZhUGVzcXVpc2EoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLm9uQ2xpY2tOb3ZhUGVzcXVpc2EpO1xyXG4gICAgICAgIHRoaXMubm92YVBlc3F1aXNhKCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLmFmdGVyQ2xpY2tOb3ZhUGVzcXVpc2EpO1xyXG4gICAgfVxyXG5cclxuICAgIG5vdmFQZXNxdWlzYSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kYXRhYmFyU2VydmljZS5oYWJpbGl0YXJGb3JtKHRoaXMuZm9ybSk7XHJcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KHsgZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLmVudGlkYWRlID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS5wb3NpY2FvID0gMDtcclxuICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGEudG90YWwgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMubm92YVBlc3F1aXNhKTtcclxuICAgIH1cclxuXHJcbiAgICBwZXNxdWlzYXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldERhZG9zQW50ZXJpb3JlcygpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMucGVzcXVpc2FuZG8pO1xyXG4gICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS5lbnRpZGFkZSA9IFtdLmNvbmNhdCh0aGlzLl9nZXRFbnRpZGFkZSgpKTtcclxuICAgICAgICB0aGlzLl9wYWdpbmFyKCk7XHJcbiAgICAgICAgdGhpcy5kcmF3ZXIuY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcmlyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2VtaXRpckV2ZW50b0NsaWNrKEVFdmVudG9DbGljay5vbkNsaWNrSW5zZXJpcik7XHJcbiAgICAgICAgdGhpcy5fY2xpY2tJbnNlcmlyKCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLmFmdGVyQ2xpY2tJbnNlcmlyKTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0YXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLm9uQ2xpY2tFZGl0YXIpO1xyXG4gICAgICAgIHRoaXMuX2NsaWNrRWRpdGFyKCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLmFmdGVyQ2xpY2tFZGl0YXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLm9uQ2xpY2tSZW1vdmVyKTtcclxuICAgICAgICB0aGlzLl9jbGlja1JlbW92ZXIoKTtcclxuICAgICAgICB0aGlzLl9lbWl0aXJFdmVudG9DbGljayhFRXZlbnRvQ2xpY2suYWZ0ZXJDbGlja1JlbW92ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3hpbW8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcGFnaW5hcigncHJveGltbycpO1xyXG4gICAgfVxyXG5cclxuICAgIGFudGVyaW9yKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3BhZ2luYXIoJ2FudGVyaW9yJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdWx0aW1vKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3BhZ2luYXIoJ3VsdGltbycpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaW1laXJvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3BhZ2luYXIoJ3ByaW1laXJvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2FsdmFyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2VtaXRpckV2ZW50b0NsaWNrKEVFdmVudG9DbGljay5vbkNsaWNrU2FsdmFyKTtcclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnN0YXR1cykge1xyXG4gICAgICAgICAgICBjYXNlIEVTdGF0dXMuaW5zZXJpbmRvOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5zZXJpcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIEVTdGF0dXMuZWRpdGFuZG86XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0YXIoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9pbnNlcmlyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMuc2FsdmFuZG8pO1xyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3NvKHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2Vydmljb0JpbmRcclxuICAgICAgICAgICAgLmNyaWFyKClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLmFmdGVyQ2xpY2tTYWx2YXIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHN1Y2Nlc3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb2dyZXNzbyhmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyU2VydmljZS5hYnJpclNuYWNrQmFyU3VjZXNzbyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZ2lzdHJvIHNhbHZvIGNvbSBzdWNlc3NvISdcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShzdWNjZXNzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5kYWRvc0NhcnJlZ2Fkb3MpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdlci5jbG9zZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhYmFyU2VydmljZS5kZXNhYmlsaXRhckZvcm0odGhpcy5mb3JtKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9ncmVzc28oZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMuaW5zZXJpbmRvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9lZGl0YXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5zYWx2YW5kbyk7XHJcbiAgICAgICAgdGhpcy5zZXRQcm9ncmVzc28odHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNvQmluZFxyXG4gICAgICAgICAgICAuZWRpdGFyKClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdGlyRXZlbnRvQ2xpY2soRUV2ZW50b0NsaWNrLmFmdGVyQ2xpY2tTYWx2YXIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHN1Y2Nlc3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zbmFja0JhclNlcnZpY2UuYWJyaXJTbmFja0JhclN1Y2Vzc28oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWdpc3RybyBlZGl0YWRvIGNvbSBzdWNlc3NvISdcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShzdWNjZXNzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9ncmVzc28oZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhFU3RhdHVzLmRhZG9zQ2FycmVnYWRvcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFiYXJTZXJ2aWNlLmRlc2FiaWxpdGFyRm9ybSh0aGlzLmZvcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdlci5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb2dyZXNzbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5lZGl0YW5kbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvYnNlcnZhclNldFN0YXR1cygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoKHRoaXMuc2Vydmljb0JpbmQgYXMgSURhdGFiYXJCaW5kU3RhdHVzU2VydmljZTxUPikuc2V0U3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNldFN0YXR1cyA9IChcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Vydmljb0JpbmQgYXMgSURhdGFiYXJCaW5kU3RhdHVzU2VydmljZTxUPlxyXG4gICAgICAgICAgICApLnNldFN0YXR1cy5zdWJzY3JpYmUoKHN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEVTdGF0dXMuZWRpdGFuZG86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdGFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFU3RhdHVzLmluc2VyaW5kbzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcmlyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1Qcm9ncmVzc28gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFU3RhdHVzLnBlc3F1aXNhbmRvOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlc3F1aXNhcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEVTdGF0dXMubm92YVBlc3F1aXNhOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdmFQZXNxdWlzYSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEVTdGF0dXMucmVtb3ZlbmRvOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFU3RhdHVzLmRhZG9zQ2FycmVnYWRvczpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBFU3RhdHVzLmRhZG9zQ2FycmVnYWRvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbVByb2dyZXNzbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmV0b3JuYXJTZXJ2aWNvUmV2ZXJ0ZXIoKTogSURhdGFCYXJSZXZlcnRlclNlcnZpY2U8VD4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXJ2aWNvUmV2ZXJ0ZXIgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5fc2Vydmljb1JldmVydGVyID0gbmV3IEljRGF0YWJhclJldmVydGVyU2VydmljZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2Vydmljb1JldmVydGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldERhZG9zQW50ZXJpb3JlcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJldG9ybmFyU2Vydmljb1JldmVydGVyKCkuc2V0RGFkb3NBbnRlcmlvcmVzKFxyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyxcclxuICAgICAgICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGFcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3JldmVydGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2VtaXRpckV2ZW50b0NsaWNrKEVFdmVudG9DbGljay5vbkNsaWNrUmV2ZXJ0ZXIpO1xyXG4gICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYSA9IHRoaXMucmV0b3JuYXJTZXJ2aWNvUmV2ZXJ0ZXIoKS5yZXN0YXVyYXJEYWRvc0FudGVyaW9yZXMoXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzQW50ZXJpb3IgPSB0aGlzLnJldG9ybmFyU2Vydmljb1JldmVydGVyKCkuc3RhdHVzQW50ZXJpb3I7XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXNBbnRlcmlvciA9PSBFU3RhdHVzLmRhZG9zQ2FycmVnYWRvcylcclxuICAgICAgICAgICAgdGhpcy5fZGF0YWJhclNlcnZpY2UuZGVzYWJpbGl0YXJGb3JtKHRoaXMuZm9ybSk7XHJcbiAgICAgICAgZWxzZSB0aGlzLl9kYXRhYmFyU2VydmljZS5oYWJpbGl0YXJGb3JtKHRoaXMuZm9ybSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKHN0YXR1c0FudGVyaW9yKTtcclxuICAgICAgICB0aGlzLl9lbWl0aXJFdmVudG9DbGljayhFRXZlbnRvQ2xpY2suYWZ0ZXJDbGlja1JldmVydGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9yZXNldGFyQ29udGFkb3JQYWdpbmFjYW8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8gPSAwO1xyXG4gICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS50b3RhbCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGFyUHJvcGVydHNPYnJpZ2F0b3JpYXMoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5zZXJ2aWNvQmluZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignw4kgb2JyaWdhdMOzcmlvIHRlciB1bSBzZXJ2acOnbyBkZSBiaW5kIHZpbmN1bGFkby4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVudGlkYWRlUGFnaW5hZGEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ8OJIG9icmlnYXTDs3JpbyB0ZXIgdW1hIGVudGlkYWRlIHBhZ2luYWRhIHZpbmN1bGFkYS4nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRTdGF0dXMoc3RhdHVzOiBFU3RhdHVzKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcclxuICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZWQuZW1pdCh0aGlzLnN0YXR1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0RW50aWRhZGUoKTogVCB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkgYXMgVDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3N1Ym1ldGVyRm9ybXVsYXJpb09uRW50ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY29CaW5kLm9uQ2xpY2tFbnRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2Vydmljb0JpbmQub25DbGlja0VudGVyLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gRVN0YXR1cy5ub3ZhUGVzcXVpc2EgJiYgdGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlc3F1aXNhcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2xpY2tJbnNlcmlyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NldERhZG9zQW50ZXJpb3JlcygpO1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0YXJDb250YWRvclBhZ2luYWNhbygpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFiYXJTZXJ2aWNlLmhhYmlsaXRhckZvcm0odGhpcy5mb3JtKTtcclxuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICAgICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMuZHJhd2VyLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5pbnNlcmluZG8pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NsaWNrRWRpdGFyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NldERhZG9zQW50ZXJpb3JlcygpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFiYXJTZXJ2aWNlLmhhYmlsaXRhckZvcm0odGhpcy5mb3JtKTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLmRyYXdlci5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMuZWRpdGFuZG8pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NsaWNrUmVtb3ZlcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldFN0YXR1cyhFU3RhdHVzLnJlbW92ZW5kbyk7XHJcbiAgICAgICAgdGhpcy5fZXhpYmlyRGlhbG9nQ29uZmlybWFjYW8oKTtcclxuICAgICAgICB0aGlzLmRyYXdlci5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2VtaXRpckV2ZW50b0NsaWNrKGV2ZW50bzogRUV2ZW50b0NsaWNrKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFiYXJTZXJ2aWNlLmVtaXRpckV2ZW50b0NsaWNrPFQ+KFxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY29CaW5kIGFzIElEYXRhYmFyQmluZE9uQ2xpY2tTZXJ2aWNlPFQ+LFxyXG4gICAgICAgICAgICBldmVudG9cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2FjYW9DbG9zZURpYWxvZ0NvbmZpcm1hY2FvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZy5lbVByb2dyZXNzbyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZy5jbG9zZURpYWxvZygpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMuZGFkb3NDYXJyZWdhZG9zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9leGliaXJEaWFsb2dDb25maXJtYWNhbygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kaWFsb2cuYWNhb01lbnNhZ2VtID0gJ1JlbW92ZW5kbyByZWdpc3Ryby4uLic7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nLmFjYW9PayA9ICgpID0+XHJcbiAgICAgICAgICAgIHRoaXMuc2Vydmljb0JpbmQucmVtb3ZlcigpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFsb2cuY2xvc2VEaWFsb2coKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdmFQZXNxdWlzYSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWxvZy5lbVByb2dyZXNzbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyU2VydmljZS5hYnJpclNuYWNrQmFyU3VjZXNzbygnUmVtb3ZpZG8gY29tIHN1Y2Vzc28hJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5fYWNhb0Nsb3NlRGlhbG9nQ29uZmlybWFjYW8oKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZy5hY2FvQ2FuY2VsYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjYW9DbG9zZURpYWxvZ0NvbmZpcm1hY2FvKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2coXHJcbiAgICAgICAgICAgICdBdGVuw6fDo28hJyxcclxuICAgICAgICAgICAgJ1ZvY8OqIHJlYWxtZW50ZSBkZXNlamEgZXhjbHVpciBlc3RlIHJlZ2lzdHJvPydcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2V4aWJpckRpYWxvZ0NvbmZpcm1hY2FvUmV2ZXJ0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nLmFjYW9PayA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmV2ZXJ0ZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nLmVtUHJvZ3Jlc3NvID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZy5jbG9zZURpYWxvZygpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpYWxvZy5hY2FvQ2FuY2VsYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZy5jbG9zZURpYWxvZygpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9nKFxyXG4gICAgICAgICAgICAnQXRlbsOnw6NvIScsXHJcbiAgICAgICAgICAgICdBcyBhbHRlcmHDp8O1ZXMgcmVhbGl6YWRhcyBzZXLDo28gcGVyZGlkYXMuIERlc2VqYSBjb250aW51YXI/J1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcGFnaW5hcihhY2FvPzogQUNBT19QQUdJTkFDQU8pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldFN0YXR1cyhFU3RhdHVzLnBlc3F1aXNhbmRvKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW50aWRhZGVQYWdpbmFkYS5lbnRpZGFkZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS5lbnRpZGFkZSA9IFtdLmNvbmNhdCh0aGlzLl9nZXRFbnRpZGFkZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBvc2ljYW9BbnRlcmlvciA9IHRoaXMuZW50aWRhZGVQYWdpbmFkYS5wb3NpY2FvO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGFjYW8pIHtcclxuICAgICAgICAgICAgY2FzZSAncHJpbWVpcm8nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8gPSAxO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3VsdGltbyc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGEucG9zaWNhbyA9IHRoaXMuZW50aWRhZGVQYWdpbmFkYS50b3RhbDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdwcm94aW1vJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS5wb3NpY2FvKys7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYW50ZXJpb3InOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8tLTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8gPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzbyh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNvQmluZC5saXN0YXJQYWdpbmFjYW8odGhpcy5lbnRpZGFkZVBhZ2luYWRhKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIChzdWNjZXNzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByb2dyZXNzbyhmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWxvZ0Vycm8ub3BlbkRpYWxvZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F0ZW7Dp8OjbyEnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnTmVuaHVtIHJlZ2lzdHJvIGZvaSBlbmNvbnRyYWRvLidcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKEVTdGF0dXMubm92YVBlc3F1aXNhKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MuZW50aWRhZGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFiYXJTZXJ2aWNlLnJlc2V0Rm9ybSh0aGlzLmZvcm0sIHRoaXMuZW50aWRhZGVQYWdpbmFkYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5ub3ZhUGVzcXVpc2EpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXR1cyhFU3RhdHVzLmRhZG9zQ2FycmVnYWRvcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVudGlkYWRlUGFnaW5hZGEuZW50aWRhZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGEgPSBzdWNjZXNzO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGlkYWRlUGFnaW5hZGEudG90YWwgPSBzdWNjZXNzLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aWRhZGVQYWdpbmFkYS5wb3NpY2FvID0gc3VjY2Vzcy5wb3NpY2FvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHN1Y2Nlc3MuZW50aWRhZGVbMF0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3NvKGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhYmFyU2VydmljZS5kZXNhYmlsaXRhckZvcm0odGhpcy5mb3JtKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvIHBhZ2luYcOnw6NvJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoRVN0YXR1cy5kYWRvc0NhcnJlZ2Fkb3MpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpZGFkZVBhZ2luYWRhLnBvc2ljYW8gPSBwb3NpY2FvQW50ZXJpb3I7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByb2dyZXNzbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhYmFyU2VydmljZS5kZXNhYmlsaXRhckZvcm0odGhpcy5mb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRQcm9ncmVzc28ocHJvZ3Jlc3NvOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lbVByb2dyZXNzbyA9IHRoaXMuX2RhdGFiYXJTZXJ2aWNlLmRlZmluaXJQcm9ncmVzc28odGhpcy5mb3JtLCBwcm9ncmVzc28pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|