brainloper-ui 15.0.1 → 17.0.0

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.
Files changed (94) hide show
  1. package/esm2022/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +314 -0
  2. package/esm2022/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +30 -0
  3. package/esm2022/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +23 -0
  4. package/esm2022/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +83 -0
  5. package/esm2022/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +42 -0
  6. package/esm2022/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +183 -0
  7. package/esm2022/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +746 -0
  8. package/esm2022/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +122 -0
  9. package/esm2022/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +205 -0
  10. package/esm2022/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +227 -0
  11. package/esm2022/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +89 -0
  12. package/esm2022/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.mjs +86 -0
  13. package/esm2022/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +117 -0
  14. package/esm2022/src/app/modules/directives/carousel-item.directive.mjs +20 -0
  15. package/esm2022/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +6 -0
  16. package/esm2022/src/app/modules/services/crypto.service.mjs +38 -0
  17. package/esm2022/src/app/modules/services/export-data.service.mjs +169 -0
  18. package/esm2022/src/app/modules/services/file-forms.service.mjs +24 -0
  19. package/esm2022/src/app/modules/services/fuel-order-pdf.service.mjs +346 -0
  20. package/esm2022/src/app/modules/services/functions.service.mjs +75 -0
  21. package/esm2022/src/app/modules/services/generate-pdf.service.mjs +93 -0
  22. package/esm2022/src/app/modules/services/http.service.mjs +142 -0
  23. package/esm2022/src/app/modules/services/loading/loading.component.mjs +30 -0
  24. package/esm2022/src/app/modules/services/local-storage.service.mjs +115 -0
  25. package/esm2022/src/app/modules/services/message.service.mjs +202 -0
  26. package/esm2022/src/app/modules/services/purchase-order-pdf.service.mjs +179 -0
  27. package/esm2022/src/app/modules/services/session.service.mjs +43 -0
  28. package/esm2022/src/app/modules/services/work-order-pdf.service.mjs +363 -0
  29. package/{fesm2020 → fesm2022}/brainloper-ui.mjs +541 -443
  30. package/{fesm2020 → fesm2022}/brainloper-ui.mjs.map +1 -1
  31. package/package.json +17 -23
  32. package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +1 -1
  33. package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +1 -1
  34. package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +1 -1
  35. package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +1 -1
  36. package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +1 -1
  37. package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +1 -1
  38. package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +1 -1
  39. package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +1 -1
  40. package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +1 -1
  41. package/src/app/modules/directives/carousel-item.directive.d.ts +1 -1
  42. package/esm2020/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +0 -306
  43. package/esm2020/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +0 -29
  44. package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +0 -23
  45. package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +0 -83
  46. package/esm2020/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +0 -40
  47. package/esm2020/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +0 -176
  48. package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +0 -728
  49. package/esm2020/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +0 -118
  50. package/esm2020/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +0 -187
  51. package/esm2020/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +0 -222
  52. package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +0 -84
  53. package/esm2020/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.mjs +0 -81
  54. package/esm2020/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +0 -108
  55. package/esm2020/src/app/modules/directives/carousel-item.directive.mjs +0 -18
  56. package/esm2020/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +0 -8
  57. package/esm2020/src/app/modules/services/crypto.service.mjs +0 -37
  58. package/esm2020/src/app/modules/services/export-data.service.mjs +0 -166
  59. package/esm2020/src/app/modules/services/file-forms.service.mjs +0 -24
  60. package/esm2020/src/app/modules/services/fuel-order-pdf.service.mjs +0 -346
  61. package/esm2020/src/app/modules/services/functions.service.mjs +0 -75
  62. package/esm2020/src/app/modules/services/generate-pdf.service.mjs +0 -89
  63. package/esm2020/src/app/modules/services/http.service.mjs +0 -140
  64. package/esm2020/src/app/modules/services/loading/loading.component.mjs +0 -28
  65. package/esm2020/src/app/modules/services/local-storage.service.mjs +0 -115
  66. package/esm2020/src/app/modules/services/message.service.mjs +0 -200
  67. package/esm2020/src/app/modules/services/purchase-order-pdf.service.mjs +0 -178
  68. package/esm2020/src/app/modules/services/session.service.mjs +0 -42
  69. package/esm2020/src/app/modules/services/work-order-pdf.service.mjs +0 -363
  70. package/fesm2015/brainloper-ui.mjs +0 -3914
  71. package/fesm2015/brainloper-ui.mjs.map +0 -1
  72. /package/{esm2020 → esm2022}/brainloper-ui.mjs +0 -0
  73. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  74. /package/{esm2020 → esm2022}/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.mjs +0 -0
  75. /package/{esm2020 → esm2022}/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.mjs +0 -0
  76. /package/{esm2020 → esm2022}/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.mjs +0 -0
  77. /package/{esm2020 → esm2022}/src/app/modules/interfaces/buttons/button-icon.mjs +0 -0
  78. /package/{esm2020 → esm2022}/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +0 -0
  79. /package/{esm2020 → esm2022}/src/app/modules/interfaces/combos/combos-configuration.mjs +0 -0
  80. /package/{esm2020 → esm2022}/src/app/modules/interfaces/data-table/params.mjs +0 -0
  81. /package/{esm2020 → esm2022}/src/app/modules/interfaces/data-table/rules.mjs +0 -0
  82. /package/{esm2020 → esm2022}/src/app/modules/interfaces/data-table/table-columns.mjs +0 -0
  83. /package/{esm2020 → esm2022}/src/app/modules/interfaces/data-table/table-configuration.mjs +0 -0
  84. /package/{esm2020 → esm2022}/src/app/modules/interfaces/enum/enumActions.mjs +0 -0
  85. /package/{esm2020 → esm2022}/src/app/modules/interfaces/enum/enumRules.mjs +0 -0
  86. /package/{esm2020 → esm2022}/src/app/modules/interfaces/enum/httpResponseType.mjs +0 -0
  87. /package/{esm2020 → esm2022}/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +0 -0
  88. /package/{esm2020 → esm2022}/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +0 -0
  89. /package/{esm2020 → esm2022}/src/app/modules/interfaces/filters/header-filters.mjs +0 -0
  90. /package/{esm2020 → esm2022}/src/app/modules/interfaces/report/template-pdf-base.mjs +0 -0
  91. /package/{esm2020 → esm2022}/src/app/modules/interfaces/report/template-pdf-ot.mjs +0 -0
  92. /package/{esm2020 → esm2022}/src/app/modules/interfaces/report/template-pdf-purchase-order.mjs +0 -0
  93. /package/{esm2020 → esm2022}/src/app/modules/interfaces/report/template-pfd-fo.mjs +0 -0
  94. /package/{esm2020 → esm2022}/src/app/modules/services/screen-size-util.mjs +0 -0
@@ -1,118 +0,0 @@
1
- import { Component, Inject } from '@angular/core';
2
- import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
- import { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';
4
- import { forkJoin } from 'rxjs';
5
- import { map } from 'rxjs/operators';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/material/dialog";
8
- import * as i2 from "@angular/forms";
9
- import * as i3 from "../../../../services/http.service";
10
- import * as i4 from "@angular/common";
11
- import * as i5 from "@angular/material/button";
12
- import * as i6 from "@angular/material/form-field";
13
- import * as i7 from "@angular/material/input";
14
- import * as i8 from "@angular/material/select";
15
- import * as i9 from "@angular/material/core";
16
- export class TableModalComponent {
17
- constructor(dialogRef, data, formBuilder, http) {
18
- this.dialogRef = dialogRef;
19
- this.data = data;
20
- this.formBuilder = formBuilder;
21
- this.http = http;
22
- this.modalForm = new UntypedFormGroup({});
23
- this.dataCombo = {};
24
- }
25
- onNoClick() {
26
- this.dialogRef.close();
27
- }
28
- ngOnInit() {
29
- let group = {};
30
- let httpRequests = [];
31
- this.data.columns.map((element) => {
32
- if (element.type === 'currency') {
33
- element.value = element.value ? element.value.replace(/\./g, '') : '';
34
- element.type = 'number';
35
- }
36
- if (!element.disregardForAdd) {
37
- if (element.type === 'combo') {
38
- this.dataCombo[element.paramsCombo.selectionField !== element.ID ? element.paramsCombo.selectionField : element.ID] = '';
39
- }
40
- let initialValue = this.data.action === 'edit' ? element.value : '';
41
- if (element.type === 'date' && element.value) {
42
- let s = element.value.split('/');
43
- initialValue = `${s[2]}-${s[1]}-${s[0]}`;
44
- }
45
- group[element.ID] = element.required ? new UntypedFormControl(initialValue, Validators.required) : new UntypedFormControl(initialValue);
46
- if (element.paramsCombo) {
47
- httpRequests.push(this.createHttpRequest(element, group));
48
- }
49
- }
50
- });
51
- if (httpRequests.length > 0) {
52
- forkJoin(httpRequests).subscribe(() => {
53
- this.modalForm = new UntypedFormGroup(group);
54
- });
55
- }
56
- else {
57
- this.modalForm = new UntypedFormGroup(group);
58
- }
59
- }
60
- // Extraemos la creación de la solicitud HTTP a su propia función para mejorar la legibilidad
61
- createHttpRequest(element, group) {
62
- return this.http
63
- .getData(element.paramsCombo.url, element.paramsCombo.urlParams)
64
- .pipe(map((res) => {
65
- if (res['code'] === 0) {
66
- element.identifierCombo = element.paramsCombo.selectionField !== element.ID ? element.paramsCombo.selectionField : element.ID;
67
- this.dataCombo[element.identifierCombo] = res['body'];
68
- if (this.data.action !== 'edit') {
69
- return;
70
- }
71
- this.dataCombo[element.identifierCombo].some((data) => {
72
- if (data[element.paramsCombo.selectionField] === element.value ||
73
- data[element.paramsCombo.visibleField] === element.value) {
74
- var value = data[element.paramsCombo.selectionField];
75
- element.value = value;
76
- group[element.ID].setValue(value);
77
- return true;
78
- }
79
- return false;
80
- });
81
- }
82
- }));
83
- }
84
- onSubmit() {
85
- if (this.modalForm.valid) {
86
- this.data.columns.map((element) => {
87
- if (element.paramsCombo && element.paramsCombo.returnDataSelect) {
88
- element.identifierCombo = element.paramsCombo.selectionField !== element.ID ? element.paramsCombo.selectionField : element.ID;
89
- let x = this.dataCombo[element.identifierCombo].find(x => x[element.identifierCombo] == this.modalForm.value[element.ID]);
90
- if (x) {
91
- this.modalForm.addControl(element.ID + 'Combo', new UntypedFormControl(x));
92
- }
93
- }
94
- });
95
- this.dialogRef.close(this.modalForm.value);
96
- }
97
- }
98
- onChange(id, $event, type) {
99
- switch (type) {
100
- case 'combo':
101
- this.modalForm.get(id).setValue($event.value);
102
- break;
103
- default:
104
- this.modalForm.get(id).setValue($event.target.value);
105
- break;
106
- }
107
- }
108
- }
109
- TableModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableModalComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.UntypedFormBuilder }, { token: i3.HttpService }], target: i0.ɵɵFactoryTarget.Component });
110
- TableModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TableModalComponent, selector: "app-table-modal", ngImport: i0, template: "<mat-dialog-content>\n <div style='display:flex; justify-content: space-between;'>\n <div>\n <strong>\n <h3 *ngIf='data.action==\"edit\"'> Editar </h3>\n <h3 *ngIf='data.action==\"add\"'> Agregar </h3>\n </strong>\n </div>\n <div mat-dialog-close>\n <i class=\"fa fa-times-circle\" style=\"font-size: 150%; position: relative;\"></i>\n </div>\n </div>\n\n <form [formGroup]=\"modalForm\">\n\n <div *ngFor='let input of data.columns'>\n\n\n\n <div *ngIf='data.action==\"edit\"; else Agregar'>\n <mat-form-field *ngIf=\"!input.disregardForEdit\">\n <mat-label>{{input.label}}</mat-label>\n <div *ngIf='input.type==\"combo\"; else otherInputEdit'>\n\n <mat-select [value]=\"input.value\" (selectionChange)='onChange(input.ID,$event, input.type)'\n placeholder='{{input.label}}' [required]=\"input.required\">\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\n [value]='data[input.paramsCombo.selectionField]'>\n {{data[input.paramsCombo.visibleField]}}</mat-option>\n </mat-select>\n </div>\n\n <ng-template #otherInputEdit>\n <input [type]='input.type' [name]='input.ID' [value]='input.value'\n (input)='onChange(input.ID,$event, input.type)' matInput [placeholder]='input.label'\n [required]=\"input.required\" />\n </ng-template>\n\n <mat-error>Campo Obligatorio</mat-error>\n </mat-form-field>\n\n </div>\n\n <ng-template #Agregar>\n <mat-form-field *ngIf=\"!input.disregardForAdd\">\n <mat-label>{{input.label}}</mat-label>\n <div *ngIf='input.type==\"combo\"; else otherInput'>\n\n <mat-select (selectionChange)='onChange(input.ID,$event, input.type)'\n placeholder='{{input.label}}' [required]=\"input.required\">\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\n [value]='data[input.paramsCombo.selectionField]'>\n {{data[input.paramsCombo.visibleField]}}</mat-option>\n </mat-select>\n\n </div>\n\n <ng-template #otherInput>\n <input [type]='input.type' [name]='input.ID' (input)='onChange(input.ID, $event, input.type)'\n matInput [placeholder]='input.label' [required]=\"input.required\" />\n\n </ng-template>\n <mat-error>Campo Obligatorio</mat-error>\n </mat-form-field>\n </ng-template>\n\n\n\n\n </div>\n\n <button *ngIf='data.action==\"add\" || data.action==\"edit\"' (click)='onSubmit()' color='primary' mat-raised-button\n [disabled]=\"!modalForm.valid\">Guardar</button>\n\n </form>\n</mat-dialog-content>", styles: ["button{width:100%}mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
111
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableModalComponent, decorators: [{
112
- type: Component,
113
- args: [{ selector: 'app-table-modal', template: "<mat-dialog-content>\n <div style='display:flex; justify-content: space-between;'>\n <div>\n <strong>\n <h3 *ngIf='data.action==\"edit\"'> Editar </h3>\n <h3 *ngIf='data.action==\"add\"'> Agregar </h3>\n </strong>\n </div>\n <div mat-dialog-close>\n <i class=\"fa fa-times-circle\" style=\"font-size: 150%; position: relative;\"></i>\n </div>\n </div>\n\n <form [formGroup]=\"modalForm\">\n\n <div *ngFor='let input of data.columns'>\n\n\n\n <div *ngIf='data.action==\"edit\"; else Agregar'>\n <mat-form-field *ngIf=\"!input.disregardForEdit\">\n <mat-label>{{input.label}}</mat-label>\n <div *ngIf='input.type==\"combo\"; else otherInputEdit'>\n\n <mat-select [value]=\"input.value\" (selectionChange)='onChange(input.ID,$event, input.type)'\n placeholder='{{input.label}}' [required]=\"input.required\">\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\n [value]='data[input.paramsCombo.selectionField]'>\n {{data[input.paramsCombo.visibleField]}}</mat-option>\n </mat-select>\n </div>\n\n <ng-template #otherInputEdit>\n <input [type]='input.type' [name]='input.ID' [value]='input.value'\n (input)='onChange(input.ID,$event, input.type)' matInput [placeholder]='input.label'\n [required]=\"input.required\" />\n </ng-template>\n\n <mat-error>Campo Obligatorio</mat-error>\n </mat-form-field>\n\n </div>\n\n <ng-template #Agregar>\n <mat-form-field *ngIf=\"!input.disregardForAdd\">\n <mat-label>{{input.label}}</mat-label>\n <div *ngIf='input.type==\"combo\"; else otherInput'>\n\n <mat-select (selectionChange)='onChange(input.ID,$event, input.type)'\n placeholder='{{input.label}}' [required]=\"input.required\">\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\n [value]='data[input.paramsCombo.selectionField]'>\n {{data[input.paramsCombo.visibleField]}}</mat-option>\n </mat-select>\n\n </div>\n\n <ng-template #otherInput>\n <input [type]='input.type' [name]='input.ID' (input)='onChange(input.ID, $event, input.type)'\n matInput [placeholder]='input.label' [required]=\"input.required\" />\n\n </ng-template>\n <mat-error>Campo Obligatorio</mat-error>\n </mat-form-field>\n </ng-template>\n\n\n\n\n </div>\n\n <button *ngIf='data.action==\"add\" || data.action==\"edit\"' (click)='onSubmit()' color='primary' mat-raised-button\n [disabled]=\"!modalForm.valid\">Guardar</button>\n\n </form>\n</mat-dialog-content>", styles: ["button{width:100%}mat-form-field{width:100%}\n"] }]
114
- }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
115
- type: Inject,
116
- args: [MAT_DIALOG_DATA]
117
- }] }, { type: i2.UntypedFormBuilder }, { type: i3.HttpService }]; } });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9kYXRhLXRhYmxlL3RhYmxlLW1vZGFsL3RhYmxlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvZGF0YS10YWJsZS90YWJsZS1tb2RhbC90YWJsZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBT3JDLE1BQU0sT0FBTyxtQkFBbUI7SUFLOUIsWUFDUyxTQUE0QyxFQUNuQixJQUFJLEVBQzVCLFdBQStCLEVBQy9CLElBQWlCO1FBSGxCLGNBQVMsR0FBVCxTQUFTLENBQW1DO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQUE7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFNBQUksR0FBSixJQUFJLENBQWE7UUFSM0IsY0FBUyxHQUFxQixJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELGNBQVMsR0FBRyxFQUFFLENBQUM7SUFRWixDQUFDO0lBRUosU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxF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QUFDO2dCQUNyRCxNQUFNO1NBQ1Q7SUFDSCxDQUFDOztpSEFuSFUsbUJBQW1CLDhDQU9wQixlQUFlO3FHQVBkLG1CQUFtQix1RENaaEMsZ3RHQTJFcUI7NEZEL0RSLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7OzBCQVd4QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10YWJsZS1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBtb2RhbEZvcm06IFVudHlwZWRGb3JtR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XG4gIGRhdGFDb21ibyA9IHt9O1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRhYmxlTW9kYWxDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZVxuICApIHt9XG5cbiAgb25Ob0NsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBsZXQgZ3JvdXAgPSB7fTtcbiAgICBsZXQgaHR0cFJlcXVlc3RzID0gW107XG5cbiAgICB0aGlzLmRhdGEuY29sdW1ucy5tYXAoKGVsZW1lbnQpID0+IHtcblxuICAgICAgaWYoZWxlbWVudC50eXBlID09PSAnY3VycmVuY3knKSB7XG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnZhbHVlID8gZWxlbWVudC52YWx1ZS5yZXBsYWNlKC9cXC4vZywgJycpIDogJyc7XG4gICAgICAgIGVsZW1lbnQudHlwZSA9ICdudW1iZXInXG4gICAgICB9XG5cbiAgICAgIGlmICghZWxlbWVudC5kaXNyZWdhcmRGb3JBZGQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2NvbWJvJykge1xuICAgICAgICAgIHRoaXMuZGF0YUNvbWJvW2VsZW1lbnQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGQgIT09IGVsZW1lbnQuSUQgPyBlbGVtZW50LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkIDogZWxlbWVudC5JRF0gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpbml0aWFsVmFsdWUgPSB0aGlzLmRhdGEuYWN0aW9uID09PSAnZWRpdCcgPyBlbGVtZW50LnZhbHVlIDogJyc7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdkYXRlJyAmJiBlbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgbGV0IHMgPSBlbGVtZW50LnZhbHVlLnNwbGl0KCcvJyk7XG4gICAgICAgICAgaW5pdGlhbFZhbHVlID0gYCR7c1syXX0tJHtzWzFdfS0ke3NbMF19YDtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgZ3JvdXBbZWxlbWVudC5JRF0gPSBlbGVtZW50LnJlcXVpcmVkID8gbmV3IFVudHlwZWRGb3JtQ29udHJvbChpbml0aWFsVmFsdWUsIFZhbGlkYXRvcnMucmVxdWlyZWQpIDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChpbml0aWFsVmFsdWUpO1xuXG4gICAgICAgIGlmIChlbGVtZW50LnBhcmFtc0NvbWJvKSB7XG4gICAgICAgICAgaHR0cFJlcXVlc3RzLnB1c2godGhpcy5jcmVhdGVIdHRwUmVxdWVzdChlbGVtZW50LCBncm91cCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaHR0cFJlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvcmtKb2luKGh0dHBSZXF1ZXN0cykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cChncm91cCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb2RhbEZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cChncm91cCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRXh0cmFlbW9zIGxhIGNyZWFjacOzbiBkZSBsYSBzb2xpY2l0dWQgSFRUUCBhIHN1IHByb3BpYSBmdW5jacOzbiBwYXJhIG1lam9yYXIgbGEgbGVnaWJpbGlkYWRcbiAgY3JlYXRlSHR0cFJlcXVlc3QoZWxlbWVudCwgZ3JvdXApIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0RGF0YShlbGVtZW50LnBhcmFtc0NvbWJvLnVybCwgZWxlbWVudC5wYXJhbXNDb21iby51cmxQYXJhbXMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzWydjb2RlJ10gPT09IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQuaWRlbnRpZmllckNvbWJvID0gZWxlbWVudC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZCAhPT0gZWxlbWVudC5JRCA/IGVsZW1lbnQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGQgOiBlbGVtZW50LklEO1xuICAgICAgICAgICAgdGhpcy5kYXRhQ29tYm9bZWxlbWVudC5pZGVudGlmaWVyQ29tYm9dID0gcmVzWydib2R5J107XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuYWN0aW9uICE9PSAnZWRpdCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRhdGFDb21ib1tlbGVtZW50LmlkZW50aWZpZXJDb21ib10uc29tZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YVtlbGVtZW50LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkXSA9PT0gZWxlbWVudC52YWx1ZSB8fFxuICAgICAgICAgICAgICAgIGRhdGFbZWxlbWVudC5wYXJhbXNDb21iby52aXNpYmxlRmllbGRdID09PSBlbGVtZW50LnZhbHVlXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFbZWxlbWVudC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZF1cbiAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgICAgICBncm91cFtlbGVtZW50LklEXS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cblxuICBvblN1Ym1pdCgpIHtcbiAgICBpZiAodGhpcy5tb2RhbEZvcm0udmFsaWQpIHtcblxuICAgICAgdGhpcy5kYXRhLmNvbHVtbnMubWFwKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LnBhcmFtc0NvbWJvICYmIGVsZW1lbnQucGFyYW1zQ29tYm8ucmV0dXJuRGF0YVNlbGVjdCkge1xuICAgICAgICAgIGVsZW1lbnQuaWRlbnRpZmllckNvbWJvID0gZWxlbWVudC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZCAhPT0gZWxlbWVudC5JRCA/IGVsZW1lbnQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGQgOiBlbGVtZW50LklEO1xuICAgICAgICAgIGxldCB4ID0gdGhpcy5kYXRhQ29tYm9bZWxlbWVudC5pZGVudGlmaWVyQ29tYm9dLmZpbmQoeCA9PiB4W2VsZW1lbnQuaWRlbnRpZmllckNvbWJvXSA9PSB0aGlzLm1vZGFsRm9ybS52YWx1ZVtlbGVtZW50LklEXSlcbiAgICAgICAgICBpZih4KXtcbiAgICAgICAgICAgIHRoaXMubW9kYWxGb3JtLmFkZENvbnRyb2woZWxlbWVudC5JRCArICdDb21ibycsIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5tb2RhbEZvcm0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlKGlkOiBhbnksICRldmVudCwgdHlwZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjb21ibyc6XG4gICAgICAgIHRoaXMubW9kYWxGb3JtLmdldChpZCkuc2V0VmFsdWUoJGV2ZW50LnZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMubW9kYWxGb3JtLmdldChpZCkuc2V0VmFsdWUoJGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IHN0eWxlPSdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsnPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgICA8aDMgKm5nSWY9J2RhdGEuYWN0aW9uPT1cImVkaXRcIic+IEVkaXRhciA8L2gzPlxuICAgICAgICAgICAgICAgIDxoMyAqbmdJZj0nZGF0YS5hY3Rpb249PVwiYWRkXCInPiBBZ3JlZ2FyIDwvaDM+XG4gICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgbWF0LWRpYWxvZy1jbG9zZT5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCIgc3R5bGU9XCJmb250LXNpemU6IDE1MCU7IHBvc2l0aW9uOiByZWxhdGl2ZTtcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJtb2RhbEZvcm1cIj5cblxuICAgICAgICA8ZGl2ICpuZ0Zvcj0nbGV0IGlucHV0IG9mIGRhdGEuY29sdW1ucyc+XG5cblxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSdkYXRhLmFjdGlvbj09XCJlZGl0XCI7IGVsc2UgQWdyZWdhcic+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiIWlucHV0LmRpc3JlZ2FyZEZvckVkaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2lucHV0LmxhYmVsfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0naW5wdXQudHlwZT09XCJjb21ib1wiOyBlbHNlIG90aGVySW5wdXRFZGl0Jz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cImlucHV0LnZhbHVlXCIgKHNlbGVjdGlvbkNoYW5nZSk9J29uQ2hhbmdlKGlucHV0LklELCRldmVudCwgaW5wdXQudHlwZSknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J3t7aW5wdXQubGFiZWx9fScgW3JlcXVpcmVkXT1cImlucHV0LnJlcXVpcmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSdsZXQgZGF0YSBvZiBkYXRhQ29tYm9baW5wdXQuaWRlbnRpZmllckNvbWJvXSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0nZGF0YVtpbnB1dC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZF0nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGFbaW5wdXQucGFyYW1zQ29tYm8udmlzaWJsZUZpZWxkXX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI290aGVySW5wdXRFZGl0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFt0eXBlXT0naW5wdXQudHlwZScgW25hbWVdPSdpbnB1dC5JRCcgW3ZhbHVlXT0naW5wdXQudmFsdWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT0nb25DaGFuZ2UoaW5wdXQuSUQsJGV2ZW50LCBpbnB1dC50eXBlKScgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT0naW5wdXQubGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlucHV0LnJlcXVpcmVkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkNhbXBvIE9ibGlnYXRvcmlvPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjQWdyZWdhcj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIhaW5wdXQuZGlzcmVnYXJkRm9yQWRkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tpbnB1dC5sYWJlbH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9J2lucHV0LnR5cGU9PVwiY29tYm9cIjsgZWxzZSBvdGhlcklucHV0Jz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9J29uQ2hhbmdlKGlucHV0LklELCRldmVudCwgaW5wdXQudHlwZSknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J3t7aW5wdXQubGFiZWx9fScgW3JlcXVpcmVkXT1cImlucHV0LnJlcXVpcmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSdsZXQgZGF0YSBvZiBkYXRhQ29tYm9baW5wdXQuaWRlbnRpZmllckNvbWJvXSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0nZGF0YVtpbnB1dC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZF0nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGFbaW5wdXQucGFyYW1zQ29tYm8udmlzaWJsZUZpZWxkXX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjb3RoZXJJbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbdHlwZV09J2lucHV0LnR5cGUnIFtuYW1lXT0naW5wdXQuSUQnIChpbnB1dCk9J29uQ2hhbmdlKGlucHV0LklELCAkZXZlbnQsIGlucHV0LnR5cGUpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IFtwbGFjZWhvbGRlcl09J2lucHV0LmxhYmVsJyBbcmVxdWlyZWRdPVwiaW5wdXQucmVxdWlyZWRcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+Q2FtcG8gT2JsaWdhdG9yaW88L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuXG5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uICpuZ0lmPSdkYXRhLmFjdGlvbj09XCJhZGRcIiB8fCBkYXRhLmFjdGlvbj09XCJlZGl0XCInIChjbGljayk9J29uU3VibWl0KCknIGNvbG9yPSdwcmltYXJ5JyBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFtb2RhbEZvcm0udmFsaWRcIj5HdWFyZGFyPC9idXR0b24+XG5cbiAgICA8L2Zvcm0+XG48L21hdC1kaWFsb2ctY29udGVudD4iXX0=
@@ -1,187 +0,0 @@
1
- import { Component, Input, EventEmitter, Output } from '@angular/core';
2
- import imagenPdf from '../../../brainloper-ui/components/file-input/imagenes/pdf';
3
- import imagenDoc from '../../../brainloper-ui/components/file-input/imagenes/doc';
4
- import imagenFondoTransparente from '../../../brainloper-ui/components/file-input/imagenes/fondoTransparente';
5
- import Compressor from 'compressorjs';
6
- import { UntypedFormControl, Validators } from '@angular/forms';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../../services/file-forms.service";
9
- import * as i2 from "../../../services/http.service";
10
- import * as i3 from "../../../services/message.service";
11
- import * as i4 from "@angular/forms";
12
- import * as i5 from "@angular/common";
13
- import * as i6 from "@angular/material/button";
14
- import * as i7 from "@angular/material/icon";
15
- import * as i8 from "@angular/material/form-field";
16
- import * as i9 from "@angular/material/input";
17
- export class FileInputComponent {
18
- constructor(fileForms, http, message, formBuilder) {
19
- this.fileForms = fileForms;
20
- this.http = http;
21
- this.message = message;
22
- this.formBuilder = formBuilder;
23
- this.color = 'primary';
24
- this.disabled = false;
25
- this.multiple = false;
26
- this.maxSize = 16;
27
- this.size = 100000; //tamaño a comprimir las imagenes en bites
28
- this.fileName = '';
29
- this.fileSave = new EventEmitter();
30
- this.file = null;
31
- this.icon = 'folder';
32
- this.formFile = this.formBuilder.group({
33
- requiredfile: []
34
- });
35
- this.fileControl = new UntypedFormControl(this.files, [
36
- Validators.required
37
- ]);
38
- }
39
- ngOnInit() {
40
- this.form = this.formBuilder.group({
41
- file: []
42
- });
43
- this.sizePicture = {
44
- width: `${this.params.style.width}`,
45
- height: this.params.style.height ? `${this.params.style.height}` : '200px',
46
- "border-radius": '5%',
47
- border: `${this.params.style.border}`,
48
- };
49
- if (this.params.edit == true) {
50
- this.edit = 'img';
51
- }
52
- else {
53
- this.edit = '';
54
- }
55
- let types = Array.isArray(this.params.typeFile) ? this.params.typeFile : [this.params.typeFile];
56
- this.typeFile = types;
57
- this.type = types.map(t => {
58
- if (t === 'imagen')
59
- return 'image/*';
60
- if (t === 'pdf')
61
- return '.pdf';
62
- if (t === 'doc')
63
- return '.doc,.docx';
64
- return '';
65
- }).join(',');
66
- this.functionTypeFile();
67
- }
68
- functionTypeFile() {
69
- if (this.params.style.shape == "circular") {
70
- this.sizePicture['border-radius'] = "50%";
71
- this.sizePicture.width = `${screen.width * (this.params.style.width.replace('%', '') / 100)}px`;
72
- this.sizePicture.height = this.sizePicture.width;
73
- }
74
- this.border = {
75
- "borderRadius": `${this.sizePicture['border-radius']}`
76
- };
77
- this.styleForm = {
78
- width: `${this.params.style.width}`,
79
- height: `${this.params.style.height}`
80
- };
81
- this.styleImg = {
82
- width: '100%',
83
- height: '100%',
84
- "border-radius": `${this.sizePicture['border-radius']}`,
85
- };
86
- if (this.typeFile.includes('imagen')) {
87
- this.imageSrc = this.params.imageSrc || imagenFondoTransparente;
88
- }
89
- else {
90
- this.imageSrc = imagenFondoTransparente;
91
- }
92
- }
93
- async fileChange($event) {
94
- const file = $event.target['files'][0];
95
- if (!file)
96
- return;
97
- this.fileName = file.name;
98
- if (file.size < 15000000) {
99
- this.file = file;
100
- const mime = file.type;
101
- const name = file.name.toLowerCase();
102
- // NUEVO: Detectar tipo según archivo subido y lo permitido
103
- if (mime.startsWith('image/') && this.typeFile.includes('imagen')) {
104
- // Imagen
105
- const reader = new FileReader();
106
- reader.onload = e => this.imageSrc = reader.result;
107
- reader.readAsDataURL(this.file);
108
- const r = await this.compressor();
109
- if (r === false) {
110
- this.fileSave.emit({ new: this.file });
111
- }
112
- else {
113
- this.fileSave.emit({ new: this.file, compressor: r });
114
- }
115
- }
116
- else if ((mime === 'application/pdf' || name.endsWith('.pdf')) && this.typeFile.includes('pdf')) {
117
- // PDF
118
- this.imageSrc = '';
119
- this.styleImg = {
120
- width: '100%',
121
- height: '100%',
122
- "border-radius": `${this.sizePicture['border-radius']}`,
123
- "background-image": `url(${imagenPdf})`,
124
- "background-position": "center",
125
- "background-size": "30% 65%",
126
- "background-repeat": "no-repeat"
127
- };
128
- this.fileSave.emit({ new: this.file });
129
- }
130
- else if ((mime === 'application/msword' ||
131
- mime === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||
132
- name.endsWith('.doc') || name.endsWith('.docx')) && this.typeFile.includes('doc')) {
133
- // DOC/DOCX
134
- this.imageSrc = '';
135
- this.styleImg = {
136
- width: '100%',
137
- height: '100%',
138
- "border-radius": `${this.sizePicture['border-radius']}`,
139
- "background-image": `url(${imagenDoc})`,
140
- "background-position": "center",
141
- "background-size": "30% 65%",
142
- "background-repeat": "no-repeat"
143
- };
144
- this.fileSave.emit({ new: this.file });
145
- }
146
- else {
147
- this.message.Error('Error', 'Tipo de archivo no soportado');
148
- }
149
- }
150
- else {
151
- this.message.Error('Error', 'Archivo muy pesado, tamaño mínimo 15 MB');
152
- }
153
- }
154
- compressor() {
155
- if (this.file.size > 500000 && this.file.size < 15000000) {
156
- let factor = (this.size * 100) / this.file.size;
157
- let y = ((factor ** 3) * (10 ** -6)) - (0.00059 * (factor ** 2)) + (0.0399 * factor);
158
- return new Promise((resolve, reject) => {
159
- new Compressor(this.file, {
160
- quality: y,
161
- success(result) {
162
- resolve(result);
163
- }
164
- });
165
- });
166
- }
167
- else {
168
- return (false);
169
- }
170
- }
171
- selectFile($event) {
172
- console.log($event);
173
- }
174
- }
175
- FileInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FileInputComponent, deps: [{ token: i1.FileFormsService }, { token: i2.HttpService }, { token: i3.MessageService }, { token: i4.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
176
- FileInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FileInputComponent, selector: "file-input", inputs: { params: "params", icon: "icon" }, outputs: { fileSave: "fileSave" }, ngImport: i0, template: "<div *ngIf=\"params.input == 'vista'\" [class]='edit' [ngStyle]=\"sizePicture\">\n \n <img *ngIf=\"imageSrc\" [ngStyle]=\"styleImg\" src=\"{{this.imageSrc}}\" />\n <div *ngIf=\"!imageSrc\" [ngStyle]=\"styleImg\"></div>\n\n\t<div *ngIf=\"params.edit == true\" class=\"entrada\" [ngStyle]=\"border\">\n\t\t<input id=\"input\" type=\"file\" title='Subir archivo' [accept]='type'\n\t\t\tstyle='width: 100%; height: 100%; opacity: 0; overflow: hidden; z-index: 1; cursor: pointer;'\n\t\t\t(change)='fileChange($event)'>\n\t</div>\n\n</div>\n<div *ngIf=\"params.input == 'formulario'\">\n <mat-form-field [ngStyle]=\"styleForm\" (click)=\"fileInput.click()\" style=\"cursor:pointer;\">\n <mat-label>{{params.label}}</mat-label>\n <input disabled type=\"text\" matInput [placeholder]=\"params.label\" [value]=\"fileName || ''\" readonly style=\"pointer-events:none; background:transparent;\">\n <button mat-icon-button matSuffix type=\"button\" tabindex=\"-1\" style=\"pointer-events:none;\">\n <mat-icon *ngIf=\"typeFile=='imagen'\">add_a_photo</mat-icon>\n <mat-icon *ngIf=\"typeFile=='pdf'\">picture_as_pdf</mat-icon>\n <mat-icon *ngIf=\"typeFile=='doc'\">insert_drive_file</mat-icon>\n </button>\n </mat-form-field>\n <input #fileInput id=\"input\" type=\"file\" title=\"Subir archivo\" [accept]=\"type\" style=\"display: none;\" (change)=\"fileChange($event)\">\n</div>\n", styles: ["p{font-family:Lato}.dropzone{min-height:400px;min-width:400px;display:table;width:100%;background-color:#eee;border:dotted 1px #aaa}.text-wrapper{display:table-cell;vertical-align:middle}.centered{font-family:sans-serif;font-size:1.3em;font-weight:700;text-align:center}.img :hover{background-image:url(data:image/png;base64,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);background-color:#cfd0d5;background-position:center;background-size:25%;background-repeat:no-repeat;transition:background-color 1s;cursor:pointer}.img{position:relative}.entrada{position:absolute;top:0;right:0;width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }] });
177
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FileInputComponent, decorators: [{
178
- type: Component,
179
- args: [{ selector: 'file-input', template: "<div *ngIf=\"params.input == 'vista'\" [class]='edit' [ngStyle]=\"sizePicture\">\n \n <img *ngIf=\"imageSrc\" [ngStyle]=\"styleImg\" src=\"{{this.imageSrc}}\" />\n <div *ngIf=\"!imageSrc\" [ngStyle]=\"styleImg\"></div>\n\n\t<div *ngIf=\"params.edit == true\" class=\"entrada\" [ngStyle]=\"border\">\n\t\t<input id=\"input\" type=\"file\" title='Subir archivo' [accept]='type'\n\t\t\tstyle='width: 100%; height: 100%; opacity: 0; overflow: hidden; z-index: 1; cursor: pointer;'\n\t\t\t(change)='fileChange($event)'>\n\t</div>\n\n</div>\n<div *ngIf=\"params.input == 'formulario'\">\n <mat-form-field [ngStyle]=\"styleForm\" (click)=\"fileInput.click()\" style=\"cursor:pointer;\">\n <mat-label>{{params.label}}</mat-label>\n <input disabled type=\"text\" matInput [placeholder]=\"params.label\" [value]=\"fileName || ''\" readonly style=\"pointer-events:none; background:transparent;\">\n <button mat-icon-button matSuffix type=\"button\" tabindex=\"-1\" style=\"pointer-events:none;\">\n <mat-icon *ngIf=\"typeFile=='imagen'\">add_a_photo</mat-icon>\n <mat-icon *ngIf=\"typeFile=='pdf'\">picture_as_pdf</mat-icon>\n <mat-icon *ngIf=\"typeFile=='doc'\">insert_drive_file</mat-icon>\n </button>\n </mat-form-field>\n <input #fileInput id=\"input\" type=\"file\" title=\"Subir archivo\" [accept]=\"type\" style=\"display: none;\" (change)=\"fileChange($event)\">\n</div>\n", styles: ["p{font-family:Lato}.dropzone{min-height:400px;min-width:400px;display:table;width:100%;background-color:#eee;border:dotted 1px #aaa}.text-wrapper{display:table-cell;vertical-align:middle}.centered{font-family:sans-serif;font-size:1.3em;font-weight:700;text-align:center}.img :hover{background-image:url(data:image/png;base64,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);background-color:#cfd0d5;background-position:center;background-size:25%;background-repeat:no-repeat;transition:background-color 1s;cursor:pointer}.img{position:relative}.entrada{position:absolute;top:0;right:0;width:100%;height:100%}\n"] }]
180
- }], ctorParameters: function () { return [{ type: i1.FileFormsService }, { type: i2.HttpService }, { type: i3.MessageService }, { type: i4.UntypedFormBuilder }]; }, propDecorators: { params: [{
181
- type: Input
182
- }], fileSave: [{
183
- type: Output
184
- }], icon: [{
185
- type: Input
186
- }] } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbGUtaW5wdXQvZmlsZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbGUtaW5wdXQvZmlsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9FLE9BQU8sU0FBUyxNQUFNLDJEQUEyRCxDQUFBO0FBQ2pGLE9BQU8sU0FBUyxNQUFNLDJEQUEyRCxDQUFBO0FBQ2pGLE9BQU8sdUJBQXVCLE1BQU0seUVBQXlFLENBQUE7QUFDN0csT0FBTyxVQUFVLE1BQU0sY0FBYyxDQUFDO0FBRXRDLE9BQU8sRUFBc0Isa0JBQWtCLEVBQW9CLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQU90RyxNQUFNLE9BQU8sa0JBQWtCO0lBOEI3QixZQUNVLFNBQTJCLEVBQzNCLElBQWtCLEVBQ2xCLE9BQXdCLEVBQ3hCLFdBQStCO1FBSC9CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLFNBQUksR0FBSixJQUFJLENBQWM7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFDeEIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBdkJ6QyxVQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ2xCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUkxQixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLDBDQUEwQztR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QUFJLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsRUFBQztZQUN0RCxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUMsR0FBRyxDQUFDLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7WUFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLEVBQUUsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxPQUFPLEdBQUMsQ0FBQyxNQUFNLElBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLE1BQU0sR0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNwRSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxFQUFFO2dCQUNuQyxJQUFJLFVBQVUsQ0FBRSxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUN2QixPQUFPLEVBQUUsQ0FBQztvQkFDVixPQUFPLENBQUMsTUFBTTt3QkFDWixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7b0JBQ2pCLENBQUM7aUJBQ0QsQ0FBQyxDQUFBO1lBRVAsQ0FBQyxDQUFDLENBQUE7U0FFSDthQUFJO1lBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ2Y7SUFFSCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQU07UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3JCLENBQUM7O2dIQWpNVSxrQkFBa0I7b0dBQWxCLGtCQUFrQixpSUNmL0IsODNDQXdCQTs0RkRUYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsWUFBWTsrTEEyQmIsTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBS0MsSUFBSTtzQkFBWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsZUZvcm1zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpbGUtZm9ybXMuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h0dHAuc2VydmljZSc7XG5pbXBvcnQgaW1hZ2VuUGRmIGZyb20gJy4uLy4uLy4uL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9maWxlLWlucHV0L2ltYWdlbmVzL3BkZidcbmltcG9ydCBpbWFnZW5Eb2MgZnJvbSAnLi4vLi4vLi4vYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbGUtaW5wdXQvaW1hZ2VuZXMvZG9jJ1xuaW1wb3J0IGltYWdlbkZvbmRvVHJhbnNwYXJlbnRlIGZyb20gJy4uLy4uLy4uL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9maWxlLWlucHV0L2ltYWdlbmVzL2ZvbmRvVHJhbnNwYXJlbnRlJ1xuaW1wb3J0IENvbXByZXNzb3IgZnJvbSAnY29tcHJlc3NvcmpzJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmaWxlLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWxlLWlucHV0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRmlsZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc3R5bGVJbWc7XG4gIHR5cGU7XG4gIGJvcmRlcjtcbiAgaW1hZ2VTcmM7XG4gIHN0eWxlRm9ybTtcbiAgc2l6ZVBpY3R1cmU7XG4gIGVkaXQ7XG5cbiAgZm9ybUZpbGU6IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgY29sb3IgPSAncHJpbWFyeSc7XG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XG4gIGFjY2VwdDogc3RyaW5nO1xuXG4gIGZpbGVDb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIG1heFNpemUgPSAxNjtcblxuICBzaXplID0gMTAwMDAwOyAvL3RhbWHDsW8gYSBjb21wcmltaXIgbGFzIGltYWdlbmVzIGVuIGJpdGVzXG5cbiAgZmlsZU5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIHBhcmFtcztcbiAgQE91dHB1dCgpIGZpbGVTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgdHlwZUZpbGVcbiAgcHVibGljIGZpbGVzO1xuICBmaWxlPW51bGxcbiAgQElucHV0KClpY29uID0gJ2ZvbGRlcidcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmaWxlRm9ybXM6IEZpbGVGb3Jtc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwIDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlIDogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHRoaXMuZm9ybUZpbGUgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHJlcXVpcmVkZmlsZTogW11cbiAgICB9KVxuXG4gICAgdGhpcy5maWxlQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodGhpcy5maWxlcywgW1xuICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgIF0pXG4gIH1cblxuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZmlsZTogW11cbiAgICB9KVxuXG4gICAgdGhpcy5zaXplUGljdHVyZT17XG4gICAgICB3aWR0aDpgJHt0aGlzLnBhcmFtcy5zdHlsZS53aWR0aH1gLFxuICAgICAgaGVpZ2h0OnRoaXMucGFyYW1zLnN0eWxlLmhlaWdodCA/IGAke3RoaXMucGFyYW1zLnN0eWxlLmhlaWdodH1gIDogJzIwMHB4JywgXG4gICAgICBcImJvcmRlci1yYWRpdXNcIjogJzUlJyxcbiAgICAgIGJvcmRlcjpgJHt0aGlzLnBhcmFtcy5zdHlsZS5ib3JkZXJ9YCxcbiAgICB9XG5cbiAgICBpZih0aGlzLnBhcmFtcy5lZGl0ID09IHRydWUpe1xuICAgICAgdGhpcy5lZGl0ID0gJ2ltZydcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuZWRpdCA9ICcnXG4gICAgfVxuXG4gICAgbGV0IHR5cGVzID0gQXJyYXkuaXNBcnJheSh0aGlzLnBhcmFtcy50eXBlRmlsZSkgPyB0aGlzLnBhcmFtcy50eXBlRmlsZSA6IFt0aGlzLnBhcmFtcy50eXBlRmlsZV07XG4gICAgdGhpcy50eXBlRmlsZSA9IHR5cGVzO1xuICAgIHRoaXMudHlwZSA9IHR5cGVzLm1hcCh0ID0+IHtcbiAgICAgIGlmICh0ID09PSAnaW1hZ2VuJykgcmV0dXJuICdpbWFnZS8qJztcbiAgICAgIGlmICh0ID09PSAncGRmJykgcmV0dXJuICcucGRmJztcbiAgICAgIGlmICh0ID09PSAnZG9jJykgcmV0dXJuICcuZG9jLC5kb2N4JztcbiAgICAgIHJldHVybiAnJztcbiAgICB9KS5qb2luKCcsJyk7XG5cbiAgICB0aGlzLmZ1bmN0aW9uVHlwZUZpbGUoKVxuICB9XG5cbiAgZnVuY3Rpb25UeXBlRmlsZSgpe1xuXG4gICAgaWYodGhpcy5wYXJhbXMuc3R5bGUuc2hhcGUgPT0gXCJjaXJjdWxhclwiKXtcblxuICAgICAgdGhpcy5zaXplUGljdHVyZVsnYm9yZGVyLXJhZGl1cyddPVwiNTAlXCJcbiAgICAgIHRoaXMuc2l6ZVBpY3R1cmUud2lkdGg9YCR7c2NyZWVuLndpZHRoKih0aGlzLnBhcmFtcy5zdHlsZS53aWR0aC5yZXBsYWNlKCclJywgJycpLzEwMCl9cHhgXG4gICAgICB0aGlzLnNpemVQaWN0dXJlLmhlaWdodCA9IHRoaXMuc2l6ZVBpY3R1cmUud2lkdGhcblxuICAgIH1cblxuICAgIHRoaXMuYm9yZGVyID17XG4gICAgICBcImJvcmRlclJhZGl1c1wiOmAke3RoaXMuc2l6ZVBpY3R1cmVbJ2JvcmRlci1yYWRpdXMnXX1gXG4gICAgfVxuXG4gICAgdGhpcy5zdHlsZUZvcm09e1xuICAgICAgd2lkdGg6YCR7dGhpcy5wYXJhbXMuc3R5bGUud2lkdGh9YCxcbiAgICAgIGhlaWdodDpgJHt0aGlzLnBhcmFtcy5zdHlsZS5oZWlnaHR9YFxuICAgIH1cblxuICAgIHRoaXMuc3R5bGVJbWcgPSB7XG4gICAgICB3aWR0aDonMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIFwiYm9yZGVyLXJhZGl1c1wiOmAke3RoaXMuc2l6ZVBpY3R1cmVbJ2JvcmRlci1yYWRpdXMnXX1gLFxuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGVGaWxlLmluY2x1ZGVzKCdpbWFnZW4nKSkge1xuICAgICAgdGhpcy5pbWFnZVNyYyA9IHRoaXMucGFyYW1zLmltYWdlU3JjIHx8IGltYWdlbkZvbmRvVHJhbnNwYXJlbnRlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmltYWdlU3JjID0gaW1hZ2VuRm9uZG9UcmFuc3BhcmVudGU7XG4gICAgfVxuXG4gICB9XG5cbiAgYXN5bmMgZmlsZUNoYW5nZSgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgZmlsZSA9ICRldmVudC50YXJnZXRbJ2ZpbGVzJ11bMF07XG4gICAgaWYgKCFmaWxlKSByZXR1cm47XG5cbiAgICB0aGlzLmZpbGVOYW1lID0gZmlsZS5uYW1lO1xuXG4gICAgaWYgKGZpbGUuc2l6ZSA8IDE1MDAwMDAwKSB7XG4gICAgICB0aGlzLmZpbGUgPSBmaWxlO1xuICAgICAgY29uc3QgbWltZSA9IGZpbGUudHlwZTtcbiAgICAgIGNvbnN0IG5hbWUgPSBmaWxlLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgLy8gTlVFVk86IERldGVjdGFyIHRpcG8gc2Vnw7puIGFyY2hpdm8gc3ViaWRvIHkgbG8gcGVybWl0aWRvXG4gICAgICBpZiAobWltZS5zdGFydHNXaXRoKCdpbWFnZS8nKSAmJiB0aGlzLnR5cGVGaWxlLmluY2x1ZGVzKCdpbWFnZW4nKSkge1xuICAgICAgICAvLyBJbWFnZW5cbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4gdGhpcy5pbWFnZVNyYyA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHRoaXMuZmlsZSk7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLmNvbXByZXNzb3IoKTtcbiAgICAgICAgaWYgKHIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5maWxlU2F2ZS5lbWl0KHsgbmV3OiB0aGlzLmZpbGUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5maWxlU2F2ZS5lbWl0KHsgbmV3OiB0aGlzLmZpbGUsIGNvbXByZXNzb3I6IHIgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKG1pbWUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8IG5hbWUuZW5kc1dpdGgoJy5wZGYnKSkgJiYgdGhpcy50eXBlRmlsZS5pbmNsdWRlcygncGRmJykpIHtcbiAgICAgICAgLy8gUERGXG4gICAgICAgIHRoaXMuaW1hZ2VTcmMgPSAnJztcbiAgICAgICAgdGhpcy5zdHlsZUltZyA9IHtcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgIFwiYm9yZGVyLXJhZGl1c1wiOiBgJHt0aGlzLnNpemVQaWN0dXJlWydib3JkZXItcmFkaXVzJ119YCxcbiAgICAgICAgICBcImJhY2tncm91bmQtaW1hZ2VcIjogYHVybCgke2ltYWdlblBkZn0pYCxcbiAgICAgICAgICBcImJhY2tncm91bmQtcG9zaXRpb25cIjogXCJjZW50ZXJcIixcbiAgICAgICAgICBcImJhY2tncm91bmQtc2l6ZVwiOiBcIjMwJSA2NSVcIixcbiAgICAgICAgICBcImJhY2tncm91bmQtcmVwZWF0XCI6IFwibm8tcmVwZWF0XCJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5maWxlU2F2ZS5lbWl0KHsgbmV3OiB0aGlzLmZpbGUgfSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAobWltZSA9PT0gJ2FwcGxpY2F0aW9uL21zd29yZCcgfHxcbiAgICAgICAgbWltZSA9PT0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JyB8fFxuICAgICAgICBuYW1lLmVuZHNXaXRoKCcuZG9jJykgfHwgbmFtZS5lbmRzV2l0aCgnLmRvY3gnKSkgJiYgdGhpcy50eXBlRmlsZS5pbmNsdWRlcygnZG9jJylcbiAgICAgICkge1xuICAgICAgICAvLyBET0MvRE9DWFxuICAgICAgICB0aGlzLmltYWdlU3JjID0gJyc7IFxuICAgICAgICB0aGlzLnN0eWxlSW1nID0ge1xuICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgXCJib3JkZXItcmFkaXVzXCI6IGAke3RoaXMuc2l6ZVBpY3R1cmVbJ2JvcmRlci1yYWRpdXMnXX1gLFxuICAgICAgICAgIFwiYmFja2dyb3VuZC1pbWFnZVwiOiBgdXJsKCR7aW1hZ2VuRG9jfSlgLFxuICAgICAgICAgIFwiYmFja2dyb3VuZC1wb3NpdGlvblwiOiBcImNlbnRlclwiLFxuICAgICAgICAgIFwiYmFja2dyb3VuZC1zaXplXCI6IFwiMzAlIDY1JVwiLFxuICAgICAgICAgIFwiYmFja2dyb3VuZC1yZXBlYXRcIjogXCJuby1yZXBlYXRcIlxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZpbGVTYXZlLmVtaXQoeyBuZXc6IHRoaXMuZmlsZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWVzc2FnZS5FcnJvcignRXJyb3InLCAnVGlwbyBkZSBhcmNoaXZvIG5vIHNvcG9ydGFkbycpO1xuICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgdGhpcy5tZXNzYWdlLkVycm9yKCdFcnJvcicsICdBcmNoaXZvIG11eSBwZXNhZG8sIHRhbWHDsW8gbcOtbmltbyAxNSBNQicpXG4gICAgfVxuICB9XG5cbiAgIGNvbXByZXNzb3IoKXtcbiAgICBpZih0aGlzLmZpbGUuc2l6ZSA+IDUwMDAwMCAmJiB0aGlzLmZpbGUuc2l6ZSA8IDE1MDAwMDAwKXtcbiAgICAgIGxldCBmYWN0b3IgPSAodGhpcy5zaXplKjEwMCkvdGhpcy5maWxlLnNpemVcbiAgICAgIGxldCB5ID0gKChmYWN0b3IqKjMpKigxMCoqLTYpKS0oMC4wMDA1OSooZmFjdG9yKioyKSkrKDAuMDM5OSpmYWN0b3IpXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUscmVqZWN0KT0+e1xuICAgICAgICBuZXcgQ29tcHJlc3NvciAodGhpcy5maWxlLCB7XG4gICAgICAgICAgICBxdWFsaXR5OiB5LFxuICAgICAgICAgICAgc3VjY2VzcyhyZXN1bHQpe1xuICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgfSlcblxuICAgICAgfSlcblxuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIChmYWxzZSlcbiAgICB9XG5cbiAgfVxuXG4gIHNlbGVjdEZpbGUoJGV2ZW50KXtcbiAgICBjb25zb2xlLmxvZygkZXZlbnQpXG4gIH1cblxufVxuIiwiPGRpdiAgKm5nSWY9XCJwYXJhbXMuaW5wdXQgPT0gJ3Zpc3RhJ1wiIFtjbGFzc109J2VkaXQnIFtuZ1N0eWxlXT1cInNpemVQaWN0dXJlXCI+XG4gIFxuICA8aW1nICpuZ0lmPVwiaW1hZ2VTcmNcIiBbbmdTdHlsZV09XCJzdHlsZUltZ1wiIHNyYz1cInt7dGhpcy5pbWFnZVNyY319XCIgLz5cbiAgPGRpdiAqbmdJZj1cIiFpbWFnZVNyY1wiIFtuZ1N0eWxlXT1cInN0eWxlSW1nXCI+PC9kaXY+XG5cblx0PGRpdiAgKm5nSWY9XCJwYXJhbXMuZWRpdCA9PSB0cnVlXCIgY2xhc3M9XCJlbnRyYWRhXCIgW25nU3R5bGVdPVwiYm9yZGVyXCI+XG5cdFx0PGlucHV0IGlkPVwiaW5wdXRcIiB0eXBlPVwiZmlsZVwiIHRpdGxlPSdTdWJpciBhcmNoaXZvJyBbYWNjZXB0XT0ndHlwZSdcblx0XHRcdHN0eWxlPSd3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvcGFjaXR5OiAwOyBvdmVyZmxvdzogaGlkZGVuOyB6LWluZGV4OiAxOyBjdXJzb3I6IHBvaW50ZXI7J1xuXHRcdFx0KGNoYW5nZSk9J2ZpbGVDaGFuZ2UoJGV2ZW50KSc+XG5cdDwvZGl2PlxuXG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJwYXJhbXMuaW5wdXQgPT0gJ2Zvcm11bGFyaW8nXCI+XG4gIDxtYXQtZm9ybS1maWVsZCBbbmdTdHlsZV09XCJzdHlsZUZvcm1cIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyO1wiPlxuICAgIDxtYXQtbGFiZWw+e3twYXJhbXMubGFiZWx9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBkaXNhYmxlZCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCJwYXJhbXMubGFiZWxcIiBbdmFsdWVdPVwiZmlsZU5hbWUgfHwgJydcIiByZWFkb25seSBzdHlsZT1cInBvaW50ZXItZXZlbnRzOm5vbmU7IGJhY2tncm91bmQ6dHJhbnNwYXJlbnQ7XCI+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgc3R5bGU9XCJwb2ludGVyLWV2ZW50czpub25lO1wiPlxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwidHlwZUZpbGU9PSdpbWFnZW4nXCI+YWRkX2FfcGhvdG88L21hdC1pY29uPlxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwidHlwZUZpbGU9PSdwZGYnXCI+cGljdHVyZV9hc19wZGY8L21hdC1pY29uPlxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwidHlwZUZpbGU9PSdkb2MnXCI+aW5zZXJ0X2RyaXZlX2ZpbGU8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8aW5wdXQgI2ZpbGVJbnB1dCBpZD1cImlucHV0XCIgdHlwZT1cImZpbGVcIiB0aXRsZT1cIlN1YmlyIGFyY2hpdm9cIiBbYWNjZXB0XT1cInR5cGVcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlKCRldmVudClcIj5cbjwvZGl2PlxuIl19