dts-backoffice-util 16.0.0 → 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 (50) hide show
  1. package/README.md +143 -52
  2. package/esm2022/dts-backoffice-util.mjs +4 -4
  3. package/esm2022/lib/components/totvs-schedule-execution/totvs-schedule-execution.component.mjs +305 -272
  4. package/esm2022/lib/components/totvs-schedule-execution/totvs-schedule-execution.model.mjs +7 -7
  5. package/esm2022/lib/components/totvs-schedule-execution/totvs-schedule-execution.service.mjs +208 -183
  6. package/esm2022/lib/dts-backoffice-util.module.mjs +54 -54
  7. package/esm2022/lib/interfaces/filter-range.interface.mjs +1 -1
  8. package/esm2022/lib/interfaces/totvs-response.interface.mjs +1 -1
  9. package/esm2022/lib/model/session-info.model.mjs +67 -67
  10. package/esm2022/lib/pipes/dts-date-format.pipe.mjs +20 -20
  11. package/esm2022/lib/services/breadcrumb-control.service.mjs +99 -99
  12. package/esm2022/lib/services/cache-params.service.mjs +25 -25
  13. package/esm2022/lib/services/menu-datasul.service.mjs +118 -118
  14. package/esm2022/lib/services/profile.service.mjs +55 -55
  15. package/esm2022/lib/services/report.service.mjs +57 -57
  16. package/esm2022/lib/services/session-info.service.mjs +36 -36
  17. package/esm2022/lib/services/translate.service.mjs +23 -23
  18. package/esm2022/lib/utils/date.util.mjs +56 -56
  19. package/esm2022/lib/utils/disclaimer.util.mjs +490 -490
  20. package/esm2022/lib/utils/field-validation.util.mjs +179 -179
  21. package/esm2022/lib/utils/file.util.mjs +151 -151
  22. package/esm2022/lib/utils/filter-range.util.mjs +32 -32
  23. package/esm2022/lib/utils/generic-functions.utils.mjs +170 -170
  24. package/esm2022/public-api.mjs +33 -33
  25. package/fesm2022/dts-backoffice-util.mjs +2013 -1955
  26. package/fesm2022/dts-backoffice-util.mjs.map +1 -1
  27. package/index.d.ts +5 -5
  28. package/lib/components/totvs-schedule-execution/totvs-schedule-execution.component.d.ts +53 -49
  29. package/lib/components/totvs-schedule-execution/totvs-schedule-execution.model.d.ts +68 -60
  30. package/lib/components/totvs-schedule-execution/totvs-schedule-execution.service.d.ts +30 -30
  31. package/lib/dts-backoffice-util.module.d.ts +14 -14
  32. package/lib/interfaces/filter-range.interface.d.ts +18 -18
  33. package/lib/interfaces/totvs-response.interface.d.ts +4 -4
  34. package/lib/model/session-info.model.d.ts +40 -40
  35. package/lib/pipes/dts-date-format.pipe.d.ts +7 -7
  36. package/lib/services/breadcrumb-control.service.d.ts +18 -18
  37. package/lib/services/cache-params.service.d.ts +10 -10
  38. package/lib/services/menu-datasul.service.d.ts +27 -27
  39. package/lib/services/profile.service.d.ts +25 -25
  40. package/lib/services/report.service.d.ts +31 -31
  41. package/lib/services/session-info.service.d.ts +12 -12
  42. package/lib/services/translate.service.d.ts +8 -8
  43. package/lib/utils/date.util.d.ts +9 -9
  44. package/lib/utils/disclaimer.util.d.ts +40 -40
  45. package/lib/utils/field-validation.util.d.ts +21 -21
  46. package/lib/utils/file.util.d.ts +23 -23
  47. package/lib/utils/filter-range.util.d.ts +7 -7
  48. package/lib/utils/generic-functions.utils.d.ts +24 -24
  49. package/package.json +5 -5
  50. package/public-api.d.ts +20 -20
@@ -1,272 +1,305 @@
1
- import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core';
2
- import { ScheduleParameters } from './totvs-schedule-execution.model';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@po-ui/ng-components";
5
- import * as i2 from "./totvs-schedule-execution.service";
6
- import * as i3 from "@angular/common";
7
- import * as i4 from "@angular/forms";
8
- export class TotvsScheduleExecutionComponent {
9
- constructor(poI18nService, rpwService, poNotification) {
10
- this.poI18nService = poI18nService;
11
- this.rpwService = rpwService;
12
- this.poNotification = poNotification;
13
- this.programEMS5 = false;
14
- this.programVersion = '';
15
- this.disabledParams = false;
16
- this.loading = false;
17
- this.endExecution = new EventEmitter();
18
- this.jsonObject = {};
19
- this.literals = {};
20
- }
21
- ngOnInit() {
22
- /* VERIFICAR COMO FICARÁ A TRADUÇÃO
23
- forkJoin(
24
- this.poI18nService.getLiterals(),
25
- this.poI18nService.getLiterals({ context: 'generalRpw' })
26
- ).subscribe(literals => {
27
- literals.map(item => Object.assign(this.literals, item) );
28
- this.setupComponents();
29
- });*/
30
- this.setupComponents();
31
- }
32
- setupComponents() {
33
- this.executionTypeOptions = [
34
- { label: 'Executar Hoje', value: 1 },
35
- { label: 'Agendar Execução', value: 2 }
36
- ];
37
- this.frequencyOptions = [
38
- { label: 'Uma vez no dia', value: 'no' },
39
- { label: 'Várias vezes no dia', value: 'yes' }
40
- ];
41
- this.frequencyTypeOptions = [
42
- { label: 'Hora(s)', value: 'hour' },
43
- { label: 'Minuto(s)', value: 'minute' }
44
- ];
45
- this.weeklyOptions = [
46
- { label: 'Domingo', value: 'Sunday' },
47
- { label: 'Segunda', value: 'Monday' },
48
- { label: 'Terça', value: 'Tuesday' },
49
- { label: 'Quarta', value: 'Wednesday' },
50
- { label: 'Quinta', value: 'Thursday' },
51
- { label: 'Sexta', value: 'Friday' },
52
- { label: 'Sábado', value: 'Saturday' }
53
- ];
54
- this.zoomRpwServiceColumns = [
55
- { property: 'code', label: 'Servidor', type: 'string', width: '20%' },
56
- { property: 'name', label: 'Descrição', type: 'string', width: '80%' }
57
- ];
58
- this.model = new ScheduleParameters();
59
- this.model.executionType = 1;
60
- this.model.repeatType = 1;
61
- this.model.repeatExecution = false;
62
- }
63
- setScheduleParameters(schParam) {
64
- if (!schParam) {
65
- return;
66
- }
67
- this.model = schParam;
68
- }
69
- getScheduleParameters() {
70
- return this.model;
71
- }
72
- fieldRpwServiceFormat(value) {
73
- return `${value.code} - ${value.name}`;
74
- }
75
- isExecutionSchedule() {
76
- return (this.model.executionType === 2);
77
- }
78
- isRepeatExecution() {
79
- return this.model.repeatExecution;
80
- }
81
- isFrenquency() {
82
- return (this.model.frequency === 'yes');
83
- }
84
- changeRepeatExecution() {
85
- const date = new Date();
86
- if (!this.model.execAppointHourInit) {
87
- this.model.execAppointHourInit = `${this.addZero(date.getHours())}:${this.addZero(date.getMinutes())}`;
88
- }
89
- if (!this.model.execAppointHourFinal) {
90
- this.model.execAppointHourFinal = `${this.addZero(date.getHours())}:${this.addZero(date.getMinutes())}`;
91
- }
92
- this.model.selectWeeklys = [];
93
- this.model.dayOfMonth = 0;
94
- this.model.frequency = 'no';
95
- this.model.frequencyType = 'hour';
96
- this.model.frequencyValue = 0;
97
- }
98
- changeExecutionType() {
99
- const date = new Date();
100
- this.model.execAppointDate = date;
101
- this.model.execAppointHour = `${this.addZero(date.getHours())}:${this.addZero(date.getMinutes())}`;
102
- }
103
- changeTypeFrequency() {
104
- }
105
- getActiveTab(codTab) {
106
- return (this.model.repeatType === codTab);
107
- }
108
- setActiveTab(codTab) {
109
- this.model.repeatType = codTab;
110
- }
111
- addZero(num) {
112
- let str = `${num}`;
113
- if (num < 10) {
114
- str = `0${num}`;
115
- }
116
- return str;
117
- }
118
- executeSchedule() {
119
- if (this.disabledParams) {
120
- return;
121
- }
122
- if (!this.validate()) {
123
- return;
124
- }
125
- this.jsonObject = {};
126
- this.jsonObject.status = 'active';
127
- this.jsonObject.processID = this.programName;
128
- this.jsonObject.recurrent = this.model.repeatExecution;
129
- this.jsonObject.executionParameter = {};
130
- if (this.model.executionType === 1) {
131
- const date = new Date();
132
- this.jsonObject.firstExecution = `${date.getFullYear()}-${(date.getMonth() + 1)}-${date.getDate()}T${this.addZero(date.getHours())}:${this.addZero(date.getMinutes())}:00.000Z`;
133
- }
134
- if (this.model.executionType === 2) {
135
- this.jsonObject.firstExecution = `${this.model.execAppointDate}T${this.model.execAppointHour}:00.000Z`;
136
- }
137
- this.jsonObject.executionParameter.parametros = [];
138
- this.jsonObject.executionParameter.parametros[0] = { chave: 'rpwServer', valor: this.model.executionServer };
139
- this.jsonObject.executionParameter.parametros[1] = { chave: 'RPW_PROGRAM', valor: this.externalName };
140
- this.jsonObject.executionParameter.parametros[2] = { chave: 'RPW_PRG_EMS5', valor: this.programEMS5 ? 'yes' : 'no' };
141
- this.jsonObject.executionParameter.parametros[3] = { chave: 'RPW_PRG_VERS', valor: this.programVersion };
142
- this.jsonObject.executionParameter.parametros[4] = {};
143
- this.jsonObject.executionParameter.parametros[4].parametros_negocio = this.parameters;
144
- // Executa hoje ou agendada
145
- this.rpwService.createExecution(this.jsonObject, this.loading).subscribe(() => {
146
- this.poNotification.success('Agendamento realizado com sucesso !');
147
- });
148
- if (this.model.repeatExecution) {
149
- if (this.model.repeatType === 1) {
150
- this.jsonObject.daily = {
151
- hour: this.getHourOrMinute(this.model.execAppointHourInit, 'h'),
152
- minute: this.getHourOrMinute(this.model.execAppointHourInit, 'm')
153
- };
154
- }
155
- if (this.model.repeatType === 2) {
156
- this.jsonObject.weekly = {
157
- hour: this.getHourOrMinute(this.model.execAppointHourInit, 'h'),
158
- minute: this.getHourOrMinute(this.model.execAppointHourInit, 'm'),
159
- daysOfWeek: this.model.selectWeeklys
160
- };
161
- }
162
- if (this.model.repeatType === 3) {
163
- this.jsonObject.monthly = {
164
- hour: this.getHourOrMinute(this.model.execAppointHourInit, 'h'),
165
- minute: this.getHourOrMinute(this.model.execAppointHourInit, 'm'),
166
- day: this.model.dayOfMonth
167
- };
168
- }
169
- if (this.isFrenquency()) {
170
- this.jsonObject.rangeExecutions = {
171
- frequency: {
172
- type: this.model.frequencyType,
173
- value: this.model.frequencyValue
174
- },
175
- rangeLimit: {
176
- hour: this.getHourOrMinute(this.model.execAppointHourFinal, 'h'),
177
- minute: this.getHourOrMinute(this.model.execAppointHourFinal, 'm')
178
- }
179
- };
180
- }
181
- // Executa a diária, semanal ou mensal
182
- this.rpwService.createExecution(this.jsonObject, this.loading).subscribe(() => {
183
- });
184
- }
185
- this.endExecution.emit(this.model);
186
- }
187
- getHourOrMinute(value, type) {
188
- if (type === 'h') {
189
- return +value.substring(0, 2);
190
- }
191
- if (type === 'm') {
192
- return +value.substring(3, 6);
193
- }
194
- }
195
- compareHour(hourInit, hourFinal) {
196
- if (hourInit === hourFinal) {
197
- return false;
198
- }
199
- if (this.getHourOrMinute(hourInit, 'h') < this.getHourOrMinute(hourFinal, 'h')) {
200
- return true;
201
- }
202
- if (this.getHourOrMinute(hourInit, 'm') > this.getHourOrMinute(hourFinal, 'm')) {
203
- return false;
204
- }
205
- return true;
206
- }
207
- validate() {
208
- if (!this.scheduleExecutionForm.valid) {
209
- this.poNotification.error('Verifique as inconsistências em tela.');
210
- return false;
211
- }
212
- if (!this.model.executionServer) {
213
- this.poNotification.error('Servidor de Execução não foi informado.');
214
- return false;
215
- }
216
- if (this.isExecutionSchedule() && (!this.model.execAppointDate || !this.model.execAppointHour)) {
217
- this.poNotification.error('Informar a data e a hora para agendamento da execução.');
218
- return false;
219
- }
220
- if (this.model.repeatExecution) {
221
- if (!this.model.execAppointHourInit) {
222
- this.poNotification.error('Informar a hora de início para a execução.');
223
- return false;
224
- }
225
- if (this.model.repeatType === 2 && (this.model.selectWeeklys.length === 0)) {
226
- this.poNotification.error('Informar os dias da semana para a execução.');
227
- return false;
228
- }
229
- if (this.model.repeatType === 3 && (!this.model.dayOfMonth)) {
230
- this.poNotification.error('Informar o dia para a execução.');
231
- return false;
232
- }
233
- if (this.isFrenquency()) {
234
- if (!this.compareHour(this.model.execAppointHourInit, this.model.execAppointHourFinal)) {
235
- this.poNotification.error('Hora Fim deve ser maior que Hora Início.');
236
- return false;
237
- }
238
- if (this.model.frequencyValue === 0) {
239
- this.poNotification.error('Informar a frequência de execução (A cada hora/minuto).');
240
- return false;
241
- }
242
- }
243
- }
244
- return true;
245
- }
246
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TotvsScheduleExecutionComponent, deps: [{ token: i1.PoI18nService }, { token: i2.TotvsScheduleExecutionService }, { token: i1.PoNotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
247
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TotvsScheduleExecutionComponent, selector: "app-totvs-schedule-execution", inputs: { programName: "programName", externalName: "externalName", programEMS5: "programEMS5", programVersion: "programVersion", parameters: "parameters", disabledParams: "disabledParams", loading: "loading" }, outputs: { endExecution: "endExecution" }, viewQueries: [{ propertyName: "scheduleExecutionForm", first: true, predicate: ["scheduleExecutionForm"], descendants: true, static: true }], ngImport: i0, template: "<form #scheduleExecutionForm=\"ngForm\">\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"executionType\"\r\n p-label=\"Data de Execu\u00E7\u00E3o\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.executionType\"\r\n [p-options]=\"executionTypeOptions\"\r\n (p-change)=\"changeExecutionType()\">\r\n </po-radio-group>\r\n\r\n <po-datepicker *ngIf=isExecutionSchedule()\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"model.execAppointDate\"\r\n p-label=\"Agendar para\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointDate\">\r\n </po-datepicker>\r\n\r\n <po-input *ngIf=isExecutionSchedule()\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHour\"\r\n p-label=\"Hora\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHour\">\r\n </po-input>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-lookup\r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"executionServer\"\r\n p-label=\"Servidor de Execu\u00E7\u00E3o\"\r\n p-placeholder=\"Servidor de Execu\u00E7\u00E3o\"\r\n [p-columns]=\"zoomRpwServiceColumns\"\r\n [p-field-format]=\"fieldRpwServiceFormat\"\r\n [p-filter-service]=\"rpwService\"\r\n p-field-label=\"name\"\r\n p-field-value=\"code\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.executionServer\">\r\n </po-lookup>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-switch\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"repeatExecution\"\r\n p-label=\"Repetir ocorr\u00EAncia ?\"\r\n p-label-off=\"N\u00E3o\"\r\n p-label-on=\"Sim\"\r\n [(ngModel)]=\"model.repeatExecution\"\r\n [p-disabled]=\"disabledParams\"\r\n (click)=\"changeRepeatExecution()\">\r\n </po-switch>\r\n </div>\r\n\r\n <div class=\"po-row\" *ngIf=\"isRepeatExecution()\">\r\n \r\n <po-tabs>\r\n\r\n <po-tab \r\n p-label=\"Di\u00E1ria\" \r\n [p-active]=\"getActiveTab(1)\" \r\n (p-click)=\"setActiveTab(1)\">\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyDaily\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n \r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"> \r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitDaily\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n \r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalDaily\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n \r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueDaily\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n \r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeDaily\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n\r\n <po-tab \r\n p-label=\"Semanal\"\r\n [p-active]=\"getActiveTab(2)\"\r\n (p-click)=\"setActiveTab(2)\">\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-multiselect\r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"selectWeeklys\"\r\n p-label=\"Dias da Semana\"\r\n p-placeholder=\"Escolha os dias da semana\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.selectWeeklys\"\r\n [p-options]=\"weeklyOptions\">\r\n </po-multiselect>\r\n </div>\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyWeekly\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitWeekly\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n\r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalWeekly\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n\r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueWeekly\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n\r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeWeekly\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n\r\n <po-tab \r\n p-label=\"Mensal\" \r\n [p-active]=\"getActiveTab(3)\" \r\n (p-click)=\"setActiveTab(3)\">\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-number\r\n class=\"po-sm-3 po-md-3 po-lg-3 po-xl-3\"\r\n name=\"dayOfMonth\"\r\n p-label=\"Dia do m\u00EAs\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"2\"\r\n p-min=\"0\"\r\n p-max=\"31\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.dayOfMonth\">\r\n </po-number>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyMonthly\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitMonthly\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n\r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalWeekly\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n\r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueWeekly\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n\r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeWeekly\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n </po-tabs>\r\n </div>\r\n\r\n <div class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\" style=\"padding-top: 15px;\">\r\n <po-button\r\n style=\"float: right;\"\r\n p-label=\"Gerar Agendamento RPW\"\r\n [p-disabled]=\"disabledParams\"\r\n (click)=\"executeSchedule()\">\r\n </po-button>\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.PoButtonComponent, selector: "po-button" }, { kind: "component", type: i1.PoRadioGroupComponent, selector: "po-radio-group", inputs: ["p-label", "p-help"] }, { kind: "component", type: i1.PoDatepickerComponent, selector: "po-datepicker", inputs: ["p-label", "p-help"] }, { kind: "component", type: i1.PoInputComponent, selector: "po-input" }, { kind: "component", type: i1.PoLookupComponent, selector: "po-lookup" }, { kind: "component", type: i1.PoMultiselectComponent, selector: "po-multiselect" }, { kind: "component", type: i1.PoNumberComponent, selector: "po-number", inputs: ["p-step", "p-min", "p-max"] }, { kind: "component", type: i1.PoSelectComponent, selector: "po-select", inputs: ["p-readonly", "p-placeholder", "p-options", "p-field-label", "p-field-value"], outputs: ["ngModelChange"] }, { kind: "component", type: i1.PoSwitchComponent, selector: "po-switch", inputs: ["p-value", "p-format-model", "p-label-position", "p-label-off", "p-label-on"] }, { kind: "component", type: i1.PoTabComponent, selector: "po-tab" }, { kind: "component", type: i1.PoTabsComponent, selector: "po-tabs" }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
248
- }
249
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TotvsScheduleExecutionComponent, decorators: [{
250
- type: Component,
251
- args: [{ selector: 'app-totvs-schedule-execution', template: "<form #scheduleExecutionForm=\"ngForm\">\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"executionType\"\r\n p-label=\"Data de Execu\u00E7\u00E3o\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.executionType\"\r\n [p-options]=\"executionTypeOptions\"\r\n (p-change)=\"changeExecutionType()\">\r\n </po-radio-group>\r\n\r\n <po-datepicker *ngIf=isExecutionSchedule()\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"model.execAppointDate\"\r\n p-label=\"Agendar para\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointDate\">\r\n </po-datepicker>\r\n\r\n <po-input *ngIf=isExecutionSchedule()\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHour\"\r\n p-label=\"Hora\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHour\">\r\n </po-input>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-lookup\r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"executionServer\"\r\n p-label=\"Servidor de Execu\u00E7\u00E3o\"\r\n p-placeholder=\"Servidor de Execu\u00E7\u00E3o\"\r\n [p-columns]=\"zoomRpwServiceColumns\"\r\n [p-field-format]=\"fieldRpwServiceFormat\"\r\n [p-filter-service]=\"rpwService\"\r\n p-field-label=\"name\"\r\n p-field-value=\"code\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.executionServer\">\r\n </po-lookup>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-switch\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"repeatExecution\"\r\n p-label=\"Repetir ocorr\u00EAncia ?\"\r\n p-label-off=\"N\u00E3o\"\r\n p-label-on=\"Sim\"\r\n [(ngModel)]=\"model.repeatExecution\"\r\n [p-disabled]=\"disabledParams\"\r\n (click)=\"changeRepeatExecution()\">\r\n </po-switch>\r\n </div>\r\n\r\n <div class=\"po-row\" *ngIf=\"isRepeatExecution()\">\r\n \r\n <po-tabs>\r\n\r\n <po-tab \r\n p-label=\"Di\u00E1ria\" \r\n [p-active]=\"getActiveTab(1)\" \r\n (p-click)=\"setActiveTab(1)\">\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyDaily\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n \r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"> \r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitDaily\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n \r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalDaily\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n \r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueDaily\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n \r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeDaily\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n\r\n <po-tab \r\n p-label=\"Semanal\"\r\n [p-active]=\"getActiveTab(2)\"\r\n (p-click)=\"setActiveTab(2)\">\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-multiselect\r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"selectWeeklys\"\r\n p-label=\"Dias da Semana\"\r\n p-placeholder=\"Escolha os dias da semana\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.selectWeeklys\"\r\n [p-options]=\"weeklyOptions\">\r\n </po-multiselect>\r\n </div>\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyWeekly\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitWeekly\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n\r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalWeekly\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n\r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueWeekly\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n\r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeWeekly\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n\r\n <po-tab \r\n p-label=\"Mensal\" \r\n [p-active]=\"getActiveTab(3)\" \r\n (p-click)=\"setActiveTab(3)\">\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-number\r\n class=\"po-sm-3 po-md-3 po-lg-3 po-xl-3\"\r\n name=\"dayOfMonth\"\r\n p-label=\"Dia do m\u00EAs\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"2\"\r\n p-min=\"0\"\r\n p-max=\"31\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.dayOfMonth\">\r\n </po-number>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyMonthly\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitMonthly\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n\r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalWeekly\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n\r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueWeekly\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n\r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeWeekly\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n </po-tabs>\r\n </div>\r\n\r\n <div class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\" style=\"padding-top: 15px;\">\r\n <po-button\r\n style=\"float: right;\"\r\n p-label=\"Gerar Agendamento RPW\"\r\n [p-disabled]=\"disabledParams\"\r\n (click)=\"executeSchedule()\">\r\n </po-button>\r\n </div>\r\n</form>\r\n" }]
252
- }], ctorParameters: function () { return [{ type: i1.PoI18nService }, { type: i2.TotvsScheduleExecutionService }, { type: i1.PoNotificationService }]; }, propDecorators: { scheduleExecutionForm: [{
253
- type: ViewChild,
254
- args: ['scheduleExecutionForm', { static: true }]
255
- }], programName: [{
256
- type: Input
257
- }], externalName: [{
258
- type: Input
259
- }], programEMS5: [{
260
- type: Input
261
- }], programVersion: [{
262
- type: Input
263
- }], parameters: [{
264
- type: Input
265
- }], disabledParams: [{
266
- type: Input
267
- }], loading: [{
268
- type: Input
269
- }], endExecution: [{
270
- type: Output
271
- }] } });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG90dnMtc2NoZWR1bGUtZXhlY3V0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2R0cy1iYWNrb2ZmaWNlLXV0aWwvc3JjL2xpYi9jb21wb25lbnRzL3RvdHZzLXNjaGVkdWxlLWV4ZWN1dGlvbi90b3R2cy1zY2hlZHVsZS1leGVjdXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHRzLWJhY2tvZmZpY2UtdXRpbC9zcmMvbGliL2NvbXBvbmVudHMvdG90dnMtc2NoZWR1bGUtZXhlY3V0aW9uL3RvdHZzLXNjaGVkdWxlLWV4ZWN1dGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQXVCLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQVUzRixNQUFNLE9BQU8sK0JBQStCO0lBWXhDLFlBQ1csYUFBNEIsRUFDNUIsVUFBeUMsRUFDekMsY0FBcUM7UUFGckMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZUFBVSxHQUFWLFVBQVUsQ0FBK0I7UUFDekMsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBVnZDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXBCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDZixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFjcEMsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUU3QixhQUFRLEdBQVEsRUFBRSxDQUFDO0lBVm5CLENBQUM7SUFZRCxRQUFRO1FBQ0o7Ozs7Ozs7ZUFPTztRQUVQLElBQUksQ0FBQyxl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LG9CQUFvQixDQUFDLEVBQUU7b0JBQ3BGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7b0JBQ3RFLE9BQU8sS0FBSyxDQUFDO2lCQUNoQjtnQkFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLENBQUMsRUFBRTtvQkFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztvQkFDckYsT0FBTyxLQUFLLENBQUM7aUJBQ2hCO2FBQ0o7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7a0lBblJRLCtCQUErQjtzSEFBL0IsK0JBQStCLGlkQ1o1Qyxpd2JBNlNBOzs0RkRqU2EsK0JBQStCO2tCQU4zQyxTQUFTOytCQUNJLDhCQUE4QjtvTEFNYyxxQkFBcUI7c0JBQTFFLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUUzQyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQb1JhZGlvR3JvdXBPcHRpb24sIFBvSTE4blNlcnZpY2UsIFBvTm90aWZpY2F0aW9uU2VydmljZSwgUG9Mb29rdXBDb2x1bW4gfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XHJcbmltcG9ydCB7IElTY2hlZHVsZVBhcmFtZXRlcnMsIFNjaGVkdWxlUGFyYW1ldGVycyB9IGZyb20gJy4vdG90dnMtc2NoZWR1bGUtZXhlY3V0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUb3R2c1NjaGVkdWxlRXhlY3V0aW9uU2VydmljZSB9IGZyb20gJy4vdG90dnMtc2NoZWR1bGUtZXhlY3V0aW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC10b3R2cy1zY2hlZHVsZS1leGVjdXRpb24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RvdHZzLXNjaGVkdWxlLWV4ZWN1dGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi90b3R2cy1zY2hlZHVsZS1leGVjdXRpb24uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgVG90dnNTY2hlZHVsZUV4ZWN1dGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdzY2hlZHVsZUV4ZWN1dGlvbkZvcm0nLCB7IHN0YXRpYzogdHJ1ZSB9KSBzY2hlZHVsZUV4ZWN1dGlvbkZvcm06IE5nRm9ybTtcclxuXHJcbiAgICBASW5wdXQoKSBwcm9ncmFtTmFtZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZXh0ZXJuYWxOYW1lOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwcm9ncmFtRU1TNSA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcHJvZ3JhbVZlcnNpb24gPSAnJztcclxuICAgIEBJbnB1dCgpIHBhcmFtZXRlcnM6IFtdO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWRQYXJhbXMgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcclxuICAgIEBPdXRwdXQoKSBlbmRFeGVjdXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIHBvSTE4blNlcnZpY2U6IFBvSTE4blNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHJwd1NlcnZpY2U6IFRvdHZzU2NoZWR1bGVFeGVjdXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBwb05vdGlmaWNhdGlvbjogUG9Ob3RpZmljYXRpb25TZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZXhlY3V0aW9uVHlwZU9wdGlvbnM6IEFycmF5PFBvUmFkaW9Hcm91cE9wdGlvbj47XHJcbiAgICBmcmVxdWVuY3lPcHRpb25zOiBBcnJheTxQb1JhZGlvR3JvdXBPcHRpb24+O1xyXG4gICAgZnJlcXVlbmN5VHlwZU9wdGlvbnM6IEFycmF5PFBvUmFkaW9Hcm91cE9wdGlvbj47XHJcbiAgICB3ZWVrbHlPcHRpb25zOiBBcnJheTxQb1JhZGlvR3JvdXBPcHRpb24+O1xyXG4gICAgem9vbVJwd1NlcnZpY2VDb2x1bW5zOiBBcnJheTxQb0xvb2t1cENvbHVtbj47XHJcbiAgICBtb2RlbDogU2NoZWR1bGVQYXJhbWV0ZXJzO1xyXG4gICAgcHJpdmF0ZSBqc29uT2JqZWN0OiBhbnkgPSB7fTtcclxuXHJcbiAgICBsaXRlcmFsczogYW55ID0ge307XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgLyogVkVSSUZJQ0FSIENPTU8gRklDQVLDgSBBIFRSQURVw4fDg09cclxuICAgICAgICBmb3JrSm9pbihcclxuICAgICAgICAgICAgICB0aGlzLnBvSTE4blNlcnZpY2UuZ2V0TGl0ZXJhbHMoKSxcclxuICAgICAgICAgICAgICB0aGlzLnBvSTE4blNlcnZpY2UuZ2V0TGl0ZXJhbHMoeyBjb250ZXh0OiAnZ2VuZXJhbFJwdycgfSlcclxuICAgICAgICAgICkuc3Vic2NyaWJlKGxpdGVyYWxzID0+IHtcclxuICAgICAgICAgICAgICBsaXRlcmFscy5tYXAoaXRlbSA9PiBPYmplY3QuYXNzaWduKHRoaXMubGl0ZXJhbHMsIGl0ZW0pICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXR1cENvbXBvbmVudHMoKTtcclxuICAgICAgICAgIH0pOyovXHJcblxyXG4gICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXBDb21wb25lbnRzKCkge1xyXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uVHlwZU9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgIHsgbGFiZWw6ICdFeGVjdXRhciBIb2plJywgdmFsdWU6IDEgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogJ0FnZW5kYXIgRXhlY3XDp8OjbycsIHZhbHVlOiAyIH1cclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeU9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgIHsgbGFiZWw6ICdVbWEgdmV6IG5vIGRpYScsIHZhbHVlOiAnbm8nIH0sXHJcbiAgICAgICAgICAgIHsgbGFiZWw6ICdWw6FyaWFzIHZlemVzIG5vIGRpYScsIHZhbHVlOiAneWVzJyB9XHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lUeXBlT3B0aW9ucyA9IFtcclxuICAgICAgICAgICAgeyBsYWJlbDogJ0hvcmEocyknLCB2YWx1ZTogJ2hvdXInIH0sXHJcbiAgICAgICAgICAgIHsgbGFiZWw6ICdNaW51dG8ocyknLCB2YWx1ZTogJ21pbnV0ZScgfVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMud2Vla2x5T3B0aW9ucyA9IFtcclxuICAgICAgICAgICAgeyBsYWJlbDogJ0RvbWluZ28nLCB2YWx1ZTogJ1N1bmRheScgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogJ1NlZ3VuZGEnLCB2YWx1ZTogJ01vbmRheScgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogJ1RlcsOnYScsIHZhbHVlOiAnVHVlc2RheScgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogJ1F1YXJ0YScsIHZhbHVlOiAnV2VkbmVzZGF5JyB9LFxyXG4gICAgICAgICAgICB7IGxhYmVsOiAnUXVpbnRhJywgdmFsdWU6ICdUaHVyc2RheScgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogJ1NleHRhJywgdmFsdWU6ICdGcmlkYXknIH0sXHJcbiAgICAgICAgICAgIHsgbGFiZWw6ICdTw6FiYWRvJywgdmFsdWU6ICdTYXR1cmRheScgfVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMuem9vbVJwd1NlcnZpY2VDb2x1bW5zID0gW1xyXG4gICAgICAgICAgICB7IHByb3BlcnR5OiAnY29kZScsIGxhYmVsOiAnU2Vydmlkb3InLCB0eXBlOiAnc3RyaW5nJywgd2lkdGg6ICcyMCUnIH0sXHJcbiAgICAgICAgICAgIHsgcHJvcGVydHk6ICduYW1lJywgbGFiZWw6ICdEZXNjcmnDp8OjbycsIHR5cGU6ICdzdHJpbmcnLCB3aWR0aDogJzgwJScgfVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBuZXcgU2NoZWR1bGVQYXJhbWV0ZXJzKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5leGVjdXRpb25UeXBlID0gMTtcclxuICAgICAgICB0aGlzLm1vZGVsLnJlcGVhdFR5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMubW9kZWwucmVwZWF0RXhlY3V0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNjaGVkdWxlUGFyYW1ldGVycyhzY2hQYXJhbTogSVNjaGVkdWxlUGFyYW1ldGVycykge1xyXG4gICAgICAgIGlmICghc2NoUGFyYW0pIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IHNjaFBhcmFtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTY2hlZHVsZVBhcmFtZXRlcnMoKTogSVNjaGVkdWxlUGFyYW1ldGVycyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgZmllbGRScHdTZXJ2aWNlRm9ybWF0KHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmNvZGV9IC0gJHt2YWx1ZS5uYW1lfWA7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFeGVjdXRpb25TY2hlZHVsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubW9kZWwuZXhlY3V0aW9uVHlwZSA9PT0gMik7XHJcbiAgICB9XHJcblxyXG4gICAgaXNSZXBlYXRFeGVjdXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwucmVwZWF0RXhlY3V0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRnJlbnF1ZW5jeSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubW9kZWwuZnJlcXVlbmN5ID09PSAneWVzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlUmVwZWF0RXhlY3V0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdCkgeyB0aGlzLm1vZGVsLmV4ZWNBcHBvaW50SG91ckluaXQgPSBgJHt0aGlzLmFkZFplcm8oZGF0ZS5nZXRIb3VycygpKX06JHt0aGlzLmFkZFplcm8oZGF0ZS5nZXRNaW51dGVzKCkpfWA7IH1cclxuICAgICAgICBpZiAoIXRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VyRmluYWwpIHsgdGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXJGaW5hbCA9IGAke3RoaXMuYWRkWmVybyhkYXRlLmdldEhvdXJzKCkpfToke3RoaXMuYWRkWmVybyhkYXRlLmdldE1pbnV0ZXMoKSl9YDsgfVxyXG4gICAgICAgIHRoaXMubW9kZWwuc2VsZWN0V2Vla2x5cyA9IFtdO1xyXG4gICAgICAgIHRoaXMubW9kZWwuZGF5T2ZNb250aCA9IDA7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5mcmVxdWVuY3kgPSAnbm8nO1xyXG4gICAgICAgIHRoaXMubW9kZWwuZnJlcXVlbmN5VHlwZSA9ICdob3VyJztcclxuICAgICAgICB0aGlzLm1vZGVsLmZyZXF1ZW5jeVZhbHVlID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VFeGVjdXRpb25UeXBlKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGVsLmV4ZWNBcHBvaW50RGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXIgPSBgJHt0aGlzLmFkZFplcm8oZGF0ZS5nZXRIb3VycygpKX06JHt0aGlzLmFkZFplcm8oZGF0ZS5nZXRNaW51dGVzKCkpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVHlwZUZyZXF1ZW5jeSgpIHtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBY3RpdmVUYWIoY29kVGFiOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubW9kZWwucmVwZWF0VHlwZSA9PT0gY29kVGFiKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRBY3RpdmVUYWIoY29kVGFiOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLnJlcGVhdFR5cGUgPSBjb2RUYWI7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkWmVybyhudW06IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHN0ciA9IGAke251bX1gO1xyXG4gICAgICAgIGlmIChudW0gPCAxMCkgeyBzdHIgPSBgMCR7bnVtfWA7IH1cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIGV4ZWN1dGVTY2hlZHVsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZFBhcmFtcykgeyByZXR1cm47IH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGUoKSkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgICAgdGhpcy5qc29uT2JqZWN0ID0ge307XHJcbiAgICAgICAgdGhpcy5qc29uT2JqZWN0LnN0YXR1cyA9ICdhY3RpdmUnO1xyXG4gICAgICAgIHRoaXMuanNvbk9iamVjdC5wcm9jZXNzSUQgPSB0aGlzLnByb2dyYW1OYW1lO1xyXG4gICAgICAgIHRoaXMuanNvbk9iamVjdC5yZWN1cnJlbnQgPSB0aGlzLm1vZGVsLnJlcGVhdEV4ZWN1dGlvbjtcclxuICAgICAgICB0aGlzLmpzb25PYmplY3QuZXhlY3V0aW9uUGFyYW1ldGVyID0ge307XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmV4ZWN1dGlvblR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuanNvbk9iamVjdC5maXJzdEV4ZWN1dGlvbiA9IGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHsoZGF0ZS5nZXRNb250aCgpICsgMSl9LSR7ZGF0ZS5nZXREYXRlKCl9VCR7dGhpcy5hZGRaZXJvKGRhdGUuZ2V0SG91cnMoKSl9OiR7dGhpcy5hZGRaZXJvKGRhdGUuZ2V0TWludXRlcygpKX06MDAuMDAwWmA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmV4ZWN1dGlvblR5cGUgPT09IDIpIHtcclxuICAgICAgICAgICAgdGhpcy5qc29uT2JqZWN0LmZpcnN0RXhlY3V0aW9uID0gYCR7dGhpcy5tb2RlbC5leGVjQXBwb2ludERhdGV9VCR7dGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXJ9OjAwLjAwMFpgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5qc29uT2JqZWN0LmV4ZWN1dGlvblBhcmFtZXRlci5wYXJhbWV0cm9zID0gW107XHJcbiAgICAgICAgdGhpcy5qc29uT2JqZWN0LmV4ZWN1dGlvblBhcmFtZXRlci5wYXJhbWV0cm9zWzBdID0geyBjaGF2ZTogJ3Jwd1NlcnZlcicsIHZhbG9yOiB0aGlzLm1vZGVsLmV4ZWN1dGlvblNlcnZlciB9O1xyXG4gICAgICAgIHRoaXMuanNvbk9iamVjdC5leGVjdXRpb25QYXJhbWV0ZXIucGFyYW1ldHJvc1sxXSA9IHsgY2hhdmU6ICdSUFdfUFJPR1JBTScsIHZhbG9yOiB0aGlzLmV4dGVybmFsTmFtZSB9O1xyXG4gICAgICAgIHRoaXMuanNvbk9iamVjdC5leGVjdXRpb25QYXJhbWV0ZXIucGFyYW1ldHJvc1syXSA9IHsgY2hhdmU6ICdSUFdfUFJHX0VNUzUnLCB2YWxvcjogdGhpcy5wcm9ncmFtRU1TNSA/ICd5ZXMnIDogJ25vJyB9O1xyXG4gICAgICAgIHRoaXMuanNvbk9iamVjdC5leGVjdXRpb25QYXJhbWV0ZXIucGFyYW1ldHJvc1szXSA9IHsgY2hhdmU6ICdSUFdfUFJHX1ZFUlMnLCB2YWxvcjogdGhpcy5wcm9ncmFtVmVyc2lvbiB9O1xyXG5cclxuICAgICAgICB0aGlzLmpzb25PYmplY3QuZXhlY3V0aW9uUGFyYW1ldGVyLnBhcmFtZXRyb3NbNF0gPSB7fTtcclxuICAgICAgICB0aGlzLmpzb25PYmplY3QuZXhlY3V0aW9uUGFyYW1ldGVyLnBhcmFtZXRyb3NbNF0ucGFyYW1ldHJvc19uZWdvY2lvID0gdGhpcy5wYXJhbWV0ZXJzO1xyXG5cclxuICAgICAgICAvLyBFeGVjdXRhIGhvamUgb3UgYWdlbmRhZGFcclxuICAgICAgICB0aGlzLnJwd1NlcnZpY2UuY3JlYXRlRXhlY3V0aW9uKHRoaXMuanNvbk9iamVjdCwgdGhpcy5sb2FkaW5nKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLnN1Y2Nlc3MoJ0FnZW5kYW1lbnRvIHJlYWxpemFkbyBjb20gc3VjZXNzbyAhJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnJlcGVhdEV4ZWN1dGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5yZXBlYXRUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmpzb25PYmplY3QuZGFpbHkgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaG91cjogdGhpcy5nZXRIb3VyT3JNaW51dGUodGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXJJbml0LCAnaCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogdGhpcy5nZXRIb3VyT3JNaW51dGUodGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXJJbml0LCAnbScpXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5yZXBlYXRUeXBlID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmpzb25PYmplY3Qud2Vla2x5ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhvdXI6IHRoaXMuZ2V0SG91ck9yTWludXRlKHRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdCwgJ2gnKSxcclxuICAgICAgICAgICAgICAgICAgICBtaW51dGU6IHRoaXMuZ2V0SG91ck9yTWludXRlKHRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdCwgJ20nKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXlzT2ZXZWVrOiB0aGlzLm1vZGVsLnNlbGVjdFdlZWtseXNcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLnJlcGVhdFR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuanNvbk9iamVjdC5tb250aGx5ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhvdXI6IHRoaXMuZ2V0SG91ck9yTWludXRlKHRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdCwgJ2gnKSxcclxuICAgICAgICAgICAgICAgICAgICBtaW51dGU6IHRoaXMuZ2V0SG91ck9yTWludXRlKHRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdCwgJ20nKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXk6IHRoaXMubW9kZWwuZGF5T2ZNb250aFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNGcmVucXVlbmN5KCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuanNvbk9iamVjdC5yYW5nZUV4ZWN1dGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMubW9kZWwuZnJlcXVlbmN5VHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMubW9kZWwuZnJlcXVlbmN5VmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlTGltaXQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cjogdGhpcy5nZXRIb3VyT3JNaW51dGUodGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXJGaW5hbCwgJ2gnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlOiB0aGlzLmdldEhvdXJPck1pbnV0ZSh0aGlzLm1vZGVsLmV4ZWNBcHBvaW50SG91ckZpbmFsLCAnbScpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gRXhlY3V0YSBhIGRpw6FyaWEsIHNlbWFuYWwgb3UgbWVuc2FsXHJcbiAgICAgICAgICAgIHRoaXMucnB3U2VydmljZS5jcmVhdGVFeGVjdXRpb24odGhpcy5qc29uT2JqZWN0LCB0aGlzLmxvYWRpbmcpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbmRFeGVjdXRpb24uZW1pdCh0aGlzLm1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRIb3VyT3JNaW51dGUodmFsdWU6IHN0cmluZywgdHlwZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodHlwZSA9PT0gJ2gnKSB7IHJldHVybiArdmFsdWUuc3Vic3RyaW5nKDAsIDIpOyB9XHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdtJykgeyByZXR1cm4gK3ZhbHVlLnN1YnN0cmluZygzLCA2KTsgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBhcmVIb3VyKGhvdXJJbml0OiBzdHJpbmcsIGhvdXJGaW5hbDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKGhvdXJJbml0ID09PSBob3VyRmluYWwpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SG91ck9yTWludXRlKGhvdXJJbml0LCAnaCcpIDwgdGhpcy5nZXRIb3VyT3JNaW51dGUoaG91ckZpbmFsLCAnaCcpKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SG91ck9yTWludXRlKGhvdXJJbml0LCAnbScpID4gdGhpcy5nZXRIb3VyT3JNaW51dGUoaG91ckZpbmFsLCAnbScpKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2NoZWR1bGVFeGVjdXRpb25Gb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IoJ1ZlcmlmaXF1ZSBhcyBpbmNvbnNpc3TDqm5jaWFzIGVtIHRlbGEuJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5leGVjdXRpb25TZXJ2ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5lcnJvcignU2Vydmlkb3IgZGUgRXhlY3XDp8OjbyBuw6NvIGZvaSBpbmZvcm1hZG8uJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzRXhlY3V0aW9uU2NoZWR1bGUoKSAmJiAoIXRoaXMubW9kZWwuZXhlY0FwcG9pbnREYXRlIHx8ICF0aGlzLm1vZGVsLmV4ZWNBcHBvaW50SG91cikpIHtcclxuICAgICAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5lcnJvcignSW5mb3JtYXIgYSBkYXRhIGUgYSBob3JhIHBhcmEgYWdlbmRhbWVudG8gZGEgZXhlY3XDp8Ojby4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwucmVwZWF0RXhlY3V0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXJJbml0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLmVycm9yKCdJbmZvcm1hciBhIGhvcmEgZGUgaW7DrWNpbyBwYXJhIGEgZXhlY3XDp8Ojby4nKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwucmVwZWF0VHlwZSA9PT0gMiAmJiAodGhpcy5tb2RlbC5zZWxlY3RXZWVrbHlzLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IoJ0luZm9ybWFyIG9zIGRpYXMgZGEgc2VtYW5hIHBhcmEgYSBleGVjdcOnw6NvLicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5yZXBlYXRUeXBlID09PSAzICYmICghdGhpcy5tb2RlbC5kYXlPZk1vbnRoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5lcnJvcignSW5mb3JtYXIgbyBkaWEgcGFyYSBhIGV4ZWN1w6fDo28uJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRnJlbnF1ZW5jeSgpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29tcGFyZUhvdXIodGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXJJbml0LCB0aGlzLm1vZGVsLmV4ZWNBcHBvaW50SG91ckZpbmFsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IoJ0hvcmEgRmltIGRldmUgc2VyIG1haW9yIHF1ZSBIb3JhIEluw61jaW8uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmZyZXF1ZW5jeVZhbHVlID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5lcnJvcignSW5mb3JtYXIgYSBmcmVxdcOqbmNpYSBkZSBleGVjdcOnw6NvIChBIGNhZGEgaG9yYS9taW51dG8pLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuIiwiPGZvcm0gI3NjaGVkdWxlRXhlY3V0aW9uRm9ybT1cIm5nRm9ybVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBvLXJvdyBwby1zbS0xMiBwby1tZC0xMiBwby1sZy0xMiBwby14bC0xMlwiPlxyXG4gICAgICAgIDxwby1yYWRpby1ncm91cCBcclxuICAgICAgICAgICAgY2xhc3M9XCJwby1zbS0xMiBwby1tZC0xMiBwby1sZy0xMiBwby14bC0xMlwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJleGVjdXRpb25UeXBlXCJcclxuICAgICAgICAgICAgcC1sYWJlbD1cIkRhdGEgZGUgRXhlY3XDp8Ojb1wiXHJcbiAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5leGVjdXRpb25UeXBlXCJcclxuICAgICAgICAgICAgW3Atb3B0aW9uc109XCJleGVjdXRpb25UeXBlT3B0aW9uc1wiXHJcbiAgICAgICAgICAgIChwLWNoYW5nZSk9XCJjaGFuZ2VFeGVjdXRpb25UeXBlKClcIj5cclxuICAgICAgICA8L3BvLXJhZGlvLWdyb3VwPlxyXG5cclxuICAgICAgICA8cG8tZGF0ZXBpY2tlciAqbmdJZj1pc0V4ZWN1dGlvblNjaGVkdWxlKClcclxuICAgICAgICAgICAgY2xhc3M9XCJwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCJcclxuICAgICAgICAgICAgbmFtZT1cIm1vZGVsLmV4ZWNBcHBvaW50RGF0ZVwiXHJcbiAgICAgICAgICAgIHAtbGFiZWw9XCJBZ2VuZGFyIHBhcmFcIlxyXG4gICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZXhlY0FwcG9pbnREYXRlXCI+XHJcbiAgICAgICAgPC9wby1kYXRlcGlja2VyPlxyXG5cclxuICAgICAgICA8cG8taW5wdXQgKm5nSWY9aXNFeGVjdXRpb25TY2hlZHVsZSgpXHJcbiAgICAgICAgICAgIGNsYXNzPVwicG8tc20tNiBwby1tZC02IHBvLWxnLTYgcG8teGwtNlwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJleGVjQXBwb2ludEhvdXJcIlxyXG4gICAgICAgICAgICBwLWxhYmVsPVwiSG9yYVwiXHJcbiAgICAgICAgICAgIHAtbWFzaz1cIjk5Ojk5XCJcclxuICAgICAgICAgICAgcC1tYXNrLWZvcm1hdC1tb2RlbD1cInRydWVcIlxyXG4gICAgICAgICAgICBwLXBhdHRlcm49XCJeKFswLTldfDBbMC05XXwxWzAtOV18MlswLTNdKTpbMC01XVswLTldJFwiXHJcbiAgICAgICAgICAgIHAtZXJyb3ItcGF0dGVybj1cIkhvcmEgaW52w6FsaWRhXCJcclxuICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmV4ZWNBcHBvaW50SG91clwiPlxyXG4gICAgICAgIDwvcG8taW5wdXQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicG8tcm93IHBvLXNtLTEyIHBvLW1kLTEyIHBvLWxnLTEyIHBvLXhsLTEyXCI+XHJcbiAgICAgICAgPHBvLWxvb2t1cFxyXG4gICAgICAgICAgICBjbGFzcz1cInBvLXNtLTEyIHBvLW1kLTEyIHBvLWxnLTEyIHBvLXhsLTEyXCJcclxuICAgICAgICAgICAgbmFtZT1cImV4ZWN1dGlvblNlcnZlclwiXHJcbiAgICAgICAgICAgIHAtbGFiZWw9XCJTZXJ2aWRvciBkZSBFeGVjdcOnw6NvXCJcclxuICAgICAgICAgICAgcC1wbGFjZWhvbGRlcj1cIlNlcnZpZG9yIGRlIEV4ZWN1w6fDo29cIlxyXG4gICAgICAgICAgICBbcC1jb2x1bW5zXT1cInpvb21ScHdTZXJ2aWNlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgIFtwLWZpZWxkLWZvcm1hdF09XCJmaWVsZFJwd1NlcnZpY2VGb3JtYXRcIlxyXG4gICAgICAgICAgICBbcC1maWx0ZXItc2VydmljZV09XCJycHdTZXJ2aWNlXCJcclxuICAgICAgICAgICAgcC1maWVsZC1sYWJlbD1cIm5hbWVcIlxyXG4gICAgICAgICAgICBwLWZpZWxkLXZhbHVlPVwiY29kZVwiXHJcbiAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5leGVjdXRpb25TZXJ2ZXJcIj5cclxuICAgICAgICA8L3BvLWxvb2t1cD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwby1yb3cgcG8tc20tMTIgcG8tbWQtMTIgcG8tbGctMTIgcG8teGwtMTJcIj5cclxuICAgICAgICA8cG8tc3dpdGNoXHJcbiAgICAgICAgICAgIGNsYXNzPVwicG8tc20tNiBwby1tZC02IHBvLWxnLTYgcG8teGwtNlwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJyZXBlYXRFeGVjdXRpb25cIlxyXG4gICAgICAgICAgICBwLWxhYmVsPVwiUmVwZXRpciBvY29ycsOqbmNpYSA/XCJcclxuICAgICAgICAgICAgcC1sYWJlbC1vZmY9XCJOw6NvXCJcclxuICAgICAgICAgICAgcC1sYWJlbC1vbj1cIlNpbVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwucmVwZWF0RXhlY3V0aW9uXCJcclxuICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUmVwZWF0RXhlY3V0aW9uKClcIj5cclxuICAgICAgICA8L3BvLXN3aXRjaD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwby1yb3dcIiAqbmdJZj1cImlzUmVwZWF0RXhlY3V0aW9uKClcIj5cclxuICAgICBcclxuICAgICAgICA8cG8tdGFicz5cclxuXHJcbiAgICAgICAgICAgIDxwby10YWIgXHJcbiAgICAgICAgICAgICAgICBwLWxhYmVsPVwiRGnDoXJpYVwiIFxyXG4gICAgICAgICAgICAgICAgW3AtYWN0aXZlXT1cImdldEFjdGl2ZVRhYigxKVwiIFxyXG4gICAgICAgICAgICAgICAgKHAtY2xpY2spPVwic2V0QWN0aXZlVGFiKDEpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvLXNtLTYgcG8tbWQtNiBwby1sZy02IHBvLXhsLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cG8tcmFkaW8tZ3JvdXAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tc20tMTIgcG8tbWQtMTIgcG8tbGctMTIgcG8teGwtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZnJlcXVlbmN5RGFpbHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiRnJlcXXDqm5jaWFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWNvbHVtbnM9MVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmZyZXF1ZW5jeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Atb3B0aW9uc109XCJmcmVxdWVuY3lPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHAtY2hhbmdlKT1cImNoYW5nZVR5cGVGcmVxdWVuY3koKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcG8tcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCI+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxwby1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXNtLTYgcG8tbWQtNiBwby1sZy02IHBvLXhsLTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZXhlY0FwcG9pbnRIb3VySW5pdERhaWx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIkhvcmEgSW7DrWNpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWFzaz1cIjk5Ojk5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXNrLWZvcm1hdC1tb2RlbD1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLXBhdHRlcm49XCJeKFswLTldfDBbMC05XXwxWzAtOV18MlswLTNdKTpbMC01XVswLTldJFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtZXJyb3ItcGF0dGVybj1cIkhvcmEgaW52w6FsaWRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmV4ZWNBcHBvaW50SG91ckluaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLWlucHV0PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxwby1pbnB1dCAqbmdJZj1cImlzRnJlbnF1ZW5jeSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImV4ZWNBcHBvaW50SG91ckZpbmFsRGFpbHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiSG9yYSBGaW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1hc2s9XCI5OTo5OVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWFzay1mb3JtYXQtbW9kZWw9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1wYXR0ZXJuPVwiXihbMC05XXwwWzAtOV18MVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWVycm9yLXBhdHRlcm49XCJIb3JhIGludsOhbGlkYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5leGVjQXBwb2ludEhvdXJGaW5hbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcG8taW5wdXQ+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLW51bWJlciAqbmdJZj1cImlzRnJlbnF1ZW5jeSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1zbS01IHBvLW1kLTUgcG8tbGctNSBwby14bC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyZXF1ZW5jeVZhbHVlRGFpbHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiQSBjYWRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1taW5sZW5ndGg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXhsZW5ndGg9XCIzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1taW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXg9XCI5OTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZnJlcXVlbmN5VmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLW51bWJlcj5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8cG8tc2VsZWN0ICpuZ0lmPVwiaXNGcmVucXVlbmN5KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLW10LTMgcG8tc20tNyBwby1tZC03IHBvLWxnLTcgcG8teGwtN1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmcmVxdWVuY3lUeXBlRGFpbHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Atb3B0aW9uc109XCJmcmVxdWVuY3lUeXBlT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5mcmVxdWVuY3lUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wby1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9wby10YWI+XHJcblxyXG4gICAgICAgICAgICA8cG8tdGFiIFxyXG4gICAgICAgICAgICAgICAgcC1sYWJlbD1cIlNlbWFuYWxcIlxyXG4gICAgICAgICAgICAgICAgW3AtYWN0aXZlXT1cImdldEFjdGl2ZVRhYigyKVwiXHJcbiAgICAgICAgICAgICAgICAocC1jbGljayk9XCJzZXRBY3RpdmVUYWIoMilcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG8tcm93IHBvLXNtLTEyIHBvLW1kLTEyIHBvLWxnLTEyIHBvLXhsLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLW11bHRpc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tc20tMTIgcG8tbWQtMTIgcG8tbGctMTIgcG8teGwtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0V2Vla2x5c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbGFiZWw9XCJEaWFzIGRhIFNlbWFuYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtcGxhY2Vob2xkZXI9XCJFc2NvbGhhIG9zIGRpYXMgZGEgc2VtYW5hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLnNlbGVjdFdlZWtseXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1vcHRpb25zXT1cIndlZWtseU9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLW11bHRpc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvLXNtLTYgcG8tbWQtNiBwby1sZy02IHBvLXhsLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cG8tcmFkaW8tZ3JvdXAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tc20tMTIgcG8tbWQtMTIgcG8tbGctMTIgcG8teGwtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZnJlcXVlbmN5V2Vla2x5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIkZyZXF1w6puY2lhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1jb2x1bW5zPTFcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5mcmVxdWVuY3lcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLW9wdGlvbnNdPVwiZnJlcXVlbmN5T3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwLWNoYW5nZSk9XCJjaGFuZ2VUeXBlRnJlcXVlbmN5KClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvLXNtLTYgcG8tbWQtNiBwby1sZy02IHBvLXhsLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cG8taW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImV4ZWNBcHBvaW50SG91ckluaXRXZWVrbHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiSG9yYSBJbsOtY2lvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXNrPVwiOTk6OTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1hc2stZm9ybWF0LW1vZGVsPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtcGF0dGVybj1cIl4oWzAtOV18MFswLTldfDFbMC05XXwyWzAtM10pOlswLTVdWzAtOV0kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1lcnJvci1wYXR0ZXJuPVwiSG9yYSBpbnbDoWxpZGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcG8taW5wdXQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxwby1pbnB1dCAqbmdJZj1cImlzRnJlbnF1ZW5jeSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImV4ZWNBcHBvaW50SG91ckZpbmFsV2Vla2x5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIkhvcmEgRmltXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXNrPVwiOTk6OTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1hc2stZm9ybWF0LW1vZGVsPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtcGF0dGVybj1cIl4oWzAtOV18MFswLTldfDFbMC05XXwyWzAtM10pOlswLTVdWzAtOV0kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1lcnJvci1wYXR0ZXJuPVwiSG9yYSBpbnbDoWxpZGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZXhlY0FwcG9pbnRIb3VyRmluYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLWlucHV0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8cG8tbnVtYmVyICpuZ0lmPVwiaXNGcmVucXVlbmN5KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXNtLTUgcG8tbWQtNSBwby1sZy01IHBvLXhsLTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZnJlcXVlbmN5VmFsdWVXZWVrbHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiQSBjYWRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1taW5sZW5ndGg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXhsZW5ndGg9XCIzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1taW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXg9XCI5OTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZnJlcXVlbmN5VmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLW51bWJlcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLXNlbGVjdCAqbmdJZj1cImlzRnJlbnF1ZW5jeSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1tdC0zIHBvLXNtLTcgcG8tbWQtNyBwby1sZy03IHBvLXhsLTdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZnJlcXVlbmN5VHlwZVdlZWtseVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbGFiZWw9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1vcHRpb25zXT1cImZyZXF1ZW5jeVR5cGVPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmZyZXF1ZW5jeVR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3BvLXRhYj5cclxuXHJcbiAgICAgICAgICAgIDxwby10YWIgXHJcbiAgICAgICAgICAgICAgICBwLWxhYmVsPVwiTWVuc2FsXCIgXHJcbiAgICAgICAgICAgICAgICBbcC1hY3RpdmVdPVwiZ2V0QWN0aXZlVGFiKDMpXCIgXHJcbiAgICAgICAgICAgICAgICAocC1jbGljayk9XCJzZXRBY3RpdmVUYWIoMylcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG8tcm93IHBvLXNtLTEyIHBvLW1kLTEyIHBvLWxnLTEyIHBvLXhsLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLW51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXNtLTMgcG8tbWQtMyBwby1sZy0zIHBvLXhsLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZGF5T2ZNb250aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbGFiZWw9XCJEaWEgZG8gbcOqc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWlubGVuZ3RoPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWF4bGVuZ3RoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWF4PVwiMzFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZGF5T2ZNb250aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcG8tbnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvLXJvdyBwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLXJhZGlvLWdyb3VwIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXNtLTEyIHBvLW1kLTEyIHBvLWxnLTEyIHBvLXhsLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyZXF1ZW5jeU1vbnRobHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiRnJlcXXDqm5jaWFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWNvbHVtbnM9MVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmZyZXF1ZW5jeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Atb3B0aW9uc109XCJmcmVxdWVuY3lPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHAtY2hhbmdlKT1cImNoYW5nZVR5cGVGcmVxdWVuY3koKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcG8tcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvLXJvdyBwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tc20tNiBwby1tZC02IHBvLWxnLTYgcG8teGwtNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJleGVjQXBwb2ludEhvdXJJbml0TW9udGhseVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbGFiZWw9XCJIb3JhIEluw61jaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1hc2s9XCI5OTo5OVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWFzay1mb3JtYXQtbW9kZWw9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1wYXR0ZXJuPVwiXihbMC05XXwwWzAtOV18MVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWVycm9yLXBhdHRlcm49XCJIb3JhIGludsOhbGlkYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5leGVjQXBwb2ludEhvdXJJbml0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wby1pbnB1dD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLWlucHV0ICpuZ0lmPVwiaXNGcmVucXVlbmN5KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXNtLTYgcG8tbWQtNiBwby1sZy02IHBvLXhsLTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZXhlY0FwcG9pbnRIb3VyRmluYWxXZWVrbHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiSG9yYSBGaW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1hc2s9XCI5OTo5OVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWFzay1mb3JtYXQtbW9kZWw9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1wYXR0ZXJuPVwiXihbMC05XXwwWzAtOV18MVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWVycm9yLXBhdHRlcm49XCJIb3JhIGludsOhbGlkYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5leGVjQXBwb2ludEhvdXJGaW5hbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcG8taW5wdXQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxwby1udW1iZXIgKm5nSWY9XCJpc0ZyZW5xdWVuY3koKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tc20tNSBwby1tZC01IHBvLWxnLTUgcG8teGwtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmcmVxdWVuY3lWYWx1ZVdlZWtseVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbGFiZWw9XCJBIGNhZGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1pbmxlbmd0aD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1heGxlbmd0aD1cIjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1heD1cIjk5OVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5mcmVxdWVuY3lWYWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcG8tbnVtYmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8cG8tc2VsZWN0ICpuZ0lmPVwiaXNGcmVucXVlbmN5KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLW10LTMgcG8tc20tNyBwby1tZC03IHBvLWxnLTcgcG8teGwtN1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmcmVxdWVuY3lUeXBlV2Vla2x5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLW9wdGlvbnNdPVwiZnJlcXVlbmN5VHlwZU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZnJlcXVlbmN5VHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcG8tc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvcG8tdGFiPlxyXG4gICAgICAgIDwvcG8tdGFicz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwby1zbS0xMiBwby1tZC0xMiBwby1sZy0xMiBwby14bC0xMlwiIHN0eWxlPVwicGFkZGluZy10b3A6IDE1cHg7XCI+XHJcbiAgICAgICAgPHBvLWJ1dHRvblxyXG4gICAgICAgICAgICBzdHlsZT1cImZsb2F0OiByaWdodDtcIlxyXG4gICAgICAgICAgICBwLWxhYmVsPVwiR2VyYXIgQWdlbmRhbWVudG8gUlBXXCJcclxuICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0ZVNjaGVkdWxlKClcIj5cclxuICAgICAgICA8L3BvLWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
1
+ import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core';
2
+ import { ScheduleParameters } from './totvs-schedule-execution.model';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@po-ui/ng-components";
5
+ import * as i2 from "./totvs-schedule-execution.service";
6
+ import * as i3 from "@angular/common";
7
+ import * as i4 from "@angular/forms";
8
+ export class TotvsScheduleExecutionComponent {
9
+ constructor(poI18nService, rpwService, poNotification) {
10
+ this.poI18nService = poI18nService;
11
+ this.rpwService = rpwService;
12
+ this.poNotification = poNotification;
13
+ this.programEMS5 = false;
14
+ this.programStyle = 0;
15
+ this.programVersion = '';
16
+ this.paramDigitDef = [];
17
+ this.paramDigitData = [];
18
+ this.paramSelections = [];
19
+ this.disabledParams = false;
20
+ this.loading = false;
21
+ this.endExecution = new EventEmitter();
22
+ this.jsonObject = {};
23
+ this.literals = {};
24
+ }
25
+ ngOnInit() {
26
+ /* VERIFICAR COMO FICARÁ A TRADUÇÃO
27
+ forkJoin(
28
+ this.poI18nService.getLiterals(),
29
+ this.poI18nService.getLiterals({ context: 'generalRpw' })
30
+ ).subscribe(literals => {
31
+ literals.map(item => Object.assign(this.literals, item) );
32
+ this.setupComponents();
33
+ });*/
34
+ this.setupComponents();
35
+ }
36
+ setupComponents() {
37
+ this.executionTypeOptions = [
38
+ { label: 'Executar Hoje', value: 1 },
39
+ { label: 'Agendar Execução', value: 2 }
40
+ ];
41
+ this.frequencyOptions = [
42
+ { label: 'Uma vez no dia', value: 'no' },
43
+ { label: 'Várias vezes no dia', value: 'yes' }
44
+ ];
45
+ this.frequencyTypeOptions = [
46
+ { label: 'Hora(s)', value: 'hour' },
47
+ { label: 'Minuto(s)', value: 'minute' }
48
+ ];
49
+ this.weeklyOptions = [
50
+ { label: 'Domingo', value: 'Sunday' },
51
+ { label: 'Segunda', value: 'Monday' },
52
+ { label: 'Terça', value: 'Tuesday' },
53
+ { label: 'Quarta', value: 'Wednesday' },
54
+ { label: 'Quinta', value: 'Thursday' },
55
+ { label: 'Sexta', value: 'Friday' },
56
+ { label: 'Sábado', value: 'Saturday' }
57
+ ];
58
+ this.zoomRpwServiceColumns = [
59
+ { property: 'code', label: 'Servidor', type: 'string', width: '20%' },
60
+ { property: 'name', label: 'Descrição', type: 'string', width: '80%' }
61
+ ];
62
+ this.model = new ScheduleParameters();
63
+ this.model.executionType = 1;
64
+ this.model.repeatType = 1;
65
+ this.model.repeatExecution = false;
66
+ }
67
+ setScheduleParameters(schParam) {
68
+ if (!schParam) {
69
+ return;
70
+ }
71
+ this.model = schParam;
72
+ }
73
+ getScheduleParameters() {
74
+ return this.model;
75
+ }
76
+ fieldRpwServiceFormat(value) {
77
+ return `${value.code} - ${value.name}`;
78
+ }
79
+ isExecutionSchedule() {
80
+ return (this.model.executionType === 2);
81
+ }
82
+ isRepeatExecution() {
83
+ return this.model.repeatExecution;
84
+ }
85
+ isFrenquency() {
86
+ return (this.model.frequency === 'yes');
87
+ }
88
+ changeRepeatExecution() {
89
+ const date = new Date();
90
+ if (!this.model.execAppointHourInit) {
91
+ this.model.execAppointHourInit = `${this.addZero(date.getHours())}:${this.addZero(date.getMinutes())}`;
92
+ }
93
+ if (!this.model.execAppointHourFinal) {
94
+ this.model.execAppointHourFinal = `${this.addZero(date.getHours())}:${this.addZero(date.getMinutes())}`;
95
+ }
96
+ this.model.selectWeeklys = [];
97
+ this.model.dayOfMonth = 0;
98
+ this.model.frequency = 'no';
99
+ this.model.frequencyType = 'hour';
100
+ this.model.frequencyValue = 0;
101
+ }
102
+ changeExecutionType() {
103
+ const date = new Date();
104
+ this.model.execAppointDate = date;
105
+ this.model.execAppointHour = `${this.addZero(date.getHours())}:${this.addZero(date.getMinutes())}`;
106
+ }
107
+ changeTypeFrequency() {
108
+ }
109
+ getActiveTab(codTab) {
110
+ return (this.model.repeatType === codTab);
111
+ }
112
+ setActiveTab(codTab) {
113
+ this.model.repeatType = codTab;
114
+ }
115
+ addZero(num) {
116
+ let str = `${num}`;
117
+ if (num < 10) {
118
+ str = `0${num}`;
119
+ }
120
+ return str;
121
+ }
122
+ executeSchedule() {
123
+ if (this.disabledParams) {
124
+ return;
125
+ }
126
+ if (!this.validate()) {
127
+ return;
128
+ }
129
+ let idxParam;
130
+ this.jsonObject = {};
131
+ this.jsonObject.status = 'active';
132
+ this.jsonObject.processID = this.programName;
133
+ this.jsonObject.recurrent = this.model.repeatExecution;
134
+ this.jsonObject.executionParameter = {};
135
+ if (this.model.executionType === 1) {
136
+ const date = new Date();
137
+ this.jsonObject.firstExecution = `${date.getFullYear()}-${(date.getMonth() + 1)}-${date.getDate()}T${this.addZero(date.getHours())}:${this.addZero(date.getMinutes())}:00.000Z`;
138
+ }
139
+ if (this.model.executionType === 2) {
140
+ this.jsonObject.firstExecution = `${this.model.execAppointDate}T${this.model.execAppointHour}:00.000Z`;
141
+ }
142
+ this.jsonObject.executionParameter.parametros = [];
143
+ this.jsonObject.executionParameter.parametros[0] = { chave: 'rpwServer', valor: this.model.executionServer };
144
+ this.jsonObject.executionParameter.parametros[1] = { chave: 'RPW_PROGRAM', valor: this.externalName };
145
+ this.jsonObject.executionParameter.parametros[2] = { chave: 'RPW_PRG_EMS5', valor: this.programEMS5 ? 'yes' : 'no' };
146
+ this.jsonObject.executionParameter.parametros[3] = { chave: 'RPW_PRG_ESTILO', valor: this.programStyle };
147
+ this.jsonObject.executionParameter.parametros[4] = { chave: 'RPW_PRG_VERS', valor: this.programVersion };
148
+ idxParam = 4;
149
+ if (this.parameters && this.parameters.length > 0) {
150
+ idxParam++;
151
+ this.jsonObject.executionParameter.parametros[idxParam] = {};
152
+ this.jsonObject.executionParameter.parametros[idxParam].parametros_negocio = this.parameters;
153
+ }
154
+ if (this.paramDigitDef && this.paramDigitDef.length > 0) {
155
+ idxParam++;
156
+ this.jsonObject.executionParameter.parametros[idxParam] = {};
157
+ this.jsonObject.executionParameter.parametros[idxParam].param_digita_def = this.paramDigitDef;
158
+ }
159
+ if (this.paramDigitData && this.paramDigitData.length > 0) {
160
+ idxParam++;
161
+ this.jsonObject.executionParameter.parametros[idxParam] = {};
162
+ this.jsonObject.executionParameter.parametros[idxParam].param_digita_dados = this.paramDigitData;
163
+ }
164
+ if (this.paramSelections && this.paramSelections.length > 0) {
165
+ idxParam++;
166
+ this.jsonObject.executionParameter.parametros[idxParam] = {};
167
+ this.jsonObject.executionParameter.parametros[idxParam].selecoes = this.paramSelections;
168
+ }
169
+ // Executa hoje ou agendada
170
+ this.rpwService.createExecution(this.jsonObject, this.loading).subscribe(() => {
171
+ this.poNotification.success('Agendamento realizado com sucesso !');
172
+ });
173
+ if (this.model.repeatExecution) {
174
+ if (this.model.repeatType === 1) {
175
+ this.jsonObject.daily = {
176
+ hour: this.getHourOrMinute(this.model.execAppointHourInit, 'h'),
177
+ minute: this.getHourOrMinute(this.model.execAppointHourInit, 'm')
178
+ };
179
+ }
180
+ if (this.model.repeatType === 2) {
181
+ this.jsonObject.weekly = {
182
+ hour: this.getHourOrMinute(this.model.execAppointHourInit, 'h'),
183
+ minute: this.getHourOrMinute(this.model.execAppointHourInit, 'm'),
184
+ daysOfWeek: this.model.selectWeeklys
185
+ };
186
+ }
187
+ if (this.model.repeatType === 3) {
188
+ this.jsonObject.monthly = {
189
+ hour: this.getHourOrMinute(this.model.execAppointHourInit, 'h'),
190
+ minute: this.getHourOrMinute(this.model.execAppointHourInit, 'm'),
191
+ day: this.model.dayOfMonth
192
+ };
193
+ }
194
+ if (this.isFrenquency()) {
195
+ this.jsonObject.rangeExecutions = {
196
+ frequency: {
197
+ type: this.model.frequencyType,
198
+ value: this.model.frequencyValue
199
+ },
200
+ rangeLimit: {
201
+ hour: this.getHourOrMinute(this.model.execAppointHourFinal, 'h'),
202
+ minute: this.getHourOrMinute(this.model.execAppointHourFinal, 'm')
203
+ }
204
+ };
205
+ }
206
+ // Executa a diária, semanal ou mensal
207
+ this.rpwService.createExecution(this.jsonObject, this.loading).subscribe(() => {
208
+ });
209
+ }
210
+ this.endExecution.emit(this.model);
211
+ }
212
+ getHourOrMinute(value, type) {
213
+ if (type === 'h') {
214
+ return +value.substring(0, 2);
215
+ }
216
+ if (type === 'm') {
217
+ return +value.substring(3, 6);
218
+ }
219
+ }
220
+ compareHour(hourInit, hourFinal) {
221
+ if (hourInit === hourFinal) {
222
+ return false;
223
+ }
224
+ if (this.getHourOrMinute(hourInit, 'h') < this.getHourOrMinute(hourFinal, 'h')) {
225
+ return true;
226
+ }
227
+ if (this.getHourOrMinute(hourInit, 'm') > this.getHourOrMinute(hourFinal, 'm')) {
228
+ return false;
229
+ }
230
+ return true;
231
+ }
232
+ validate() {
233
+ if (!this.scheduleExecutionForm.valid) {
234
+ this.poNotification.error('Verifique as inconsistências em tela.');
235
+ return false;
236
+ }
237
+ if (!this.model.executionServer) {
238
+ this.poNotification.error('Servidor de Execução não foi informado.');
239
+ return false;
240
+ }
241
+ if (this.isExecutionSchedule() && (!this.model.execAppointDate || !this.model.execAppointHour)) {
242
+ this.poNotification.error('Informar a data e a hora para agendamento da execução.');
243
+ return false;
244
+ }
245
+ if (this.model.repeatExecution) {
246
+ if (!this.model.execAppointHourInit) {
247
+ this.poNotification.error('Informar a hora de início para a execução.');
248
+ return false;
249
+ }
250
+ if (this.model.repeatType === 2 && (this.model.selectWeeklys.length === 0)) {
251
+ this.poNotification.error('Informar os dias da semana para a execução.');
252
+ return false;
253
+ }
254
+ if (this.model.repeatType === 3 && (!this.model.dayOfMonth)) {
255
+ this.poNotification.error('Informar o dia para a execução.');
256
+ return false;
257
+ }
258
+ if (this.isFrenquency()) {
259
+ if (!this.compareHour(this.model.execAppointHourInit, this.model.execAppointHourFinal)) {
260
+ this.poNotification.error('Hora Fim deve ser maior que Hora Início.');
261
+ return false;
262
+ }
263
+ if (this.model.frequencyValue === 0) {
264
+ this.poNotification.error('Informar a frequência de execução (A cada hora/minuto).');
265
+ return false;
266
+ }
267
+ }
268
+ }
269
+ return true;
270
+ }
271
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TotvsScheduleExecutionComponent, deps: [{ token: i1.PoI18nService }, { token: i2.TotvsScheduleExecutionService }, { token: i1.PoNotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
272
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: TotvsScheduleExecutionComponent, selector: "app-totvs-schedule-execution", inputs: { programName: "programName", externalName: "externalName", programEMS5: "programEMS5", programStyle: "programStyle", programVersion: "programVersion", parameters: "parameters", paramDigitDef: "paramDigitDef", paramDigitData: "paramDigitData", paramSelections: "paramSelections", disabledParams: "disabledParams", loading: "loading" }, outputs: { endExecution: "endExecution" }, viewQueries: [{ propertyName: "scheduleExecutionForm", first: true, predicate: ["scheduleExecutionForm"], descendants: true, static: true }], ngImport: i0, template: "<form #scheduleExecutionForm=\"ngForm\">\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"executionType\"\r\n p-label=\"Data de Execu\u00E7\u00E3o\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.executionType\"\r\n [p-options]=\"executionTypeOptions\"\r\n (p-change)=\"changeExecutionType()\">\r\n </po-radio-group>\r\n\r\n <po-datepicker *ngIf=isExecutionSchedule()\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"model.execAppointDate\"\r\n p-label=\"Agendar para\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointDate\">\r\n </po-datepicker>\r\n\r\n <po-input *ngIf=isExecutionSchedule()\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHour\"\r\n p-label=\"Hora\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHour\">\r\n </po-input>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-lookup\r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"executionServer\"\r\n p-label=\"Servidor de Execu\u00E7\u00E3o\"\r\n p-placeholder=\"Servidor de Execu\u00E7\u00E3o\"\r\n [p-columns]=\"zoomRpwServiceColumns\"\r\n [p-field-format]=\"fieldRpwServiceFormat\"\r\n [p-filter-service]=\"rpwService\"\r\n p-field-label=\"name\"\r\n p-field-value=\"code\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.executionServer\">\r\n </po-lookup>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-switch\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"repeatExecution\"\r\n p-label=\"Repetir ocorr\u00EAncia ?\"\r\n p-label-off=\"N\u00E3o\"\r\n p-label-on=\"Sim\"\r\n [(ngModel)]=\"model.repeatExecution\"\r\n [p-disabled]=\"disabledParams\"\r\n (click)=\"changeRepeatExecution()\">\r\n </po-switch>\r\n </div>\r\n\r\n <div class=\"po-row\" *ngIf=\"isRepeatExecution()\">\r\n \r\n <po-tabs>\r\n\r\n <po-tab \r\n p-label=\"Di\u00E1ria\" \r\n [p-active]=\"getActiveTab(1)\" \r\n (p-click)=\"setActiveTab(1)\">\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyDaily\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n \r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"> \r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitDaily\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n \r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalDaily\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n \r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueDaily\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n \r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeDaily\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n\r\n <po-tab \r\n p-label=\"Semanal\"\r\n [p-active]=\"getActiveTab(2)\"\r\n (p-click)=\"setActiveTab(2)\">\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-multiselect\r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"selectWeeklys\"\r\n p-label=\"Dias da Semana\"\r\n p-placeholder=\"Escolha os dias da semana\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.selectWeeklys\"\r\n [p-options]=\"weeklyOptions\">\r\n </po-multiselect>\r\n </div>\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyWeekly\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitWeekly\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n\r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalWeekly\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n\r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueWeekly\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n\r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeWeekly\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n\r\n <po-tab \r\n p-label=\"Mensal\" \r\n [p-active]=\"getActiveTab(3)\" \r\n (p-click)=\"setActiveTab(3)\">\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-number\r\n class=\"po-sm-3 po-md-3 po-lg-3 po-xl-3\"\r\n name=\"dayOfMonth\"\r\n p-label=\"Dia do m\u00EAs\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"2\"\r\n p-min=\"0\"\r\n p-max=\"31\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.dayOfMonth\">\r\n </po-number>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyMonthly\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitMonthly\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n\r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalWeekly\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n\r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueWeekly\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n\r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeWeekly\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n </po-tabs>\r\n </div>\r\n\r\n <div class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\" style=\"padding-top: 15px;\">\r\n <po-button\r\n style=\"float: right;\"\r\n p-label=\"Gerar Agendamento RPW\"\r\n [p-disabled]=\"disabledParams\"\r\n (click)=\"executeSchedule()\">\r\n </po-button>\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.PoButtonComponent, selector: "po-button" }, { kind: "component", type: i1.PoRadioGroupComponent, selector: "po-radio-group", inputs: ["p-label", "p-help"] }, { kind: "component", type: i1.PoDatepickerComponent, selector: "po-datepicker", inputs: ["p-label", "p-help"] }, { kind: "component", type: i1.PoInputComponent, selector: "po-input" }, { kind: "component", type: i1.PoLookupComponent, selector: "po-lookup" }, { kind: "component", type: i1.PoMultiselectComponent, selector: "po-multiselect" }, { kind: "component", type: i1.PoNumberComponent, selector: "po-number", inputs: ["p-step", "p-min", "p-max"] }, { kind: "component", type: i1.PoSelectComponent, selector: "po-select", inputs: ["p-readonly", "p-placeholder", "p-options", "p-field-label", "p-field-value"], outputs: ["ngModelChange"] }, { kind: "component", type: i1.PoSwitchComponent, selector: "po-switch", inputs: ["p-value", "p-format-model", "p-label-position", "p-label-off", "p-label-on"] }, { kind: "component", type: i1.PoTabComponent, selector: "po-tab" }, { kind: "component", type: i1.PoTabsComponent, selector: "po-tabs" }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
273
+ }
274
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TotvsScheduleExecutionComponent, decorators: [{
275
+ type: Component,
276
+ args: [{ selector: 'app-totvs-schedule-execution', template: "<form #scheduleExecutionForm=\"ngForm\">\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"executionType\"\r\n p-label=\"Data de Execu\u00E7\u00E3o\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.executionType\"\r\n [p-options]=\"executionTypeOptions\"\r\n (p-change)=\"changeExecutionType()\">\r\n </po-radio-group>\r\n\r\n <po-datepicker *ngIf=isExecutionSchedule()\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"model.execAppointDate\"\r\n p-label=\"Agendar para\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointDate\">\r\n </po-datepicker>\r\n\r\n <po-input *ngIf=isExecutionSchedule()\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHour\"\r\n p-label=\"Hora\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHour\">\r\n </po-input>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-lookup\r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"executionServer\"\r\n p-label=\"Servidor de Execu\u00E7\u00E3o\"\r\n p-placeholder=\"Servidor de Execu\u00E7\u00E3o\"\r\n [p-columns]=\"zoomRpwServiceColumns\"\r\n [p-field-format]=\"fieldRpwServiceFormat\"\r\n [p-filter-service]=\"rpwService\"\r\n p-field-label=\"name\"\r\n p-field-value=\"code\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.executionServer\">\r\n </po-lookup>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-switch\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"repeatExecution\"\r\n p-label=\"Repetir ocorr\u00EAncia ?\"\r\n p-label-off=\"N\u00E3o\"\r\n p-label-on=\"Sim\"\r\n [(ngModel)]=\"model.repeatExecution\"\r\n [p-disabled]=\"disabledParams\"\r\n (click)=\"changeRepeatExecution()\">\r\n </po-switch>\r\n </div>\r\n\r\n <div class=\"po-row\" *ngIf=\"isRepeatExecution()\">\r\n \r\n <po-tabs>\r\n\r\n <po-tab \r\n p-label=\"Di\u00E1ria\" \r\n [p-active]=\"getActiveTab(1)\" \r\n (p-click)=\"setActiveTab(1)\">\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyDaily\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n \r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"> \r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitDaily\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n \r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalDaily\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n \r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueDaily\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n \r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeDaily\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n\r\n <po-tab \r\n p-label=\"Semanal\"\r\n [p-active]=\"getActiveTab(2)\"\r\n (p-click)=\"setActiveTab(2)\">\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-multiselect\r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"selectWeeklys\"\r\n p-label=\"Dias da Semana\"\r\n p-placeholder=\"Escolha os dias da semana\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.selectWeeklys\"\r\n [p-options]=\"weeklyOptions\">\r\n </po-multiselect>\r\n </div>\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyWeekly\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n\r\n <div class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitWeekly\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n\r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalWeekly\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n\r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueWeekly\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n\r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeWeekly\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n\r\n <po-tab \r\n p-label=\"Mensal\" \r\n [p-active]=\"getActiveTab(3)\" \r\n (p-click)=\"setActiveTab(3)\">\r\n\r\n <div class=\"po-row po-sm-12 po-md-12 po-lg-12 po-xl-12\">\r\n <po-number\r\n class=\"po-sm-3 po-md-3 po-lg-3 po-xl-3\"\r\n name=\"dayOfMonth\"\r\n p-label=\"Dia do m\u00EAs\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"2\"\r\n p-min=\"0\"\r\n p-max=\"31\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.dayOfMonth\">\r\n </po-number>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-radio-group \r\n class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\"\r\n name=\"frequencyMonthly\"\r\n p-label=\"Frequ\u00EAncia\"\r\n p-columns=1\r\n [(ngModel)]=\"model.frequency\"\r\n [p-disabled]=\"disabledParams\"\r\n [p-options]=\"frequencyOptions\"\r\n (p-change)=\"changeTypeFrequency()\">\r\n </po-radio-group>\r\n </div>\r\n\r\n <div class=\"po-row po-sm-6 po-md-6 po-lg-6 po-xl-6\">\r\n <po-input\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourInitMonthly\"\r\n p-label=\"Hora In\u00EDcio\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourInit\">\r\n </po-input>\r\n\r\n <po-input *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-6 po-md-6 po-lg-6 po-xl-6\"\r\n name=\"execAppointHourFinalWeekly\"\r\n p-label=\"Hora Fim\"\r\n p-mask=\"99:99\"\r\n p-mask-format-model=\"true\"\r\n p-pattern=\"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$\"\r\n p-error-pattern=\"Hora inv\u00E1lida\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.execAppointHourFinal\">\r\n </po-input>\r\n\r\n <po-number *ngIf=\"isFrenquency()\"\r\n class=\"po-sm-5 po-md-5 po-lg-5 po-xl-5\"\r\n name=\"frequencyValueWeekly\"\r\n p-label=\"A cada\"\r\n p-minlength=\"1\"\r\n p-maxlength=\"3\"\r\n p-min=\"0\"\r\n p-max=\"999\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyValue\">\r\n </po-number>\r\n\r\n <po-select *ngIf=\"isFrenquency()\"\r\n class=\"po-mt-3 po-sm-7 po-md-7 po-lg-7 po-xl-7\"\r\n name=\"frequencyTypeWeekly\"\r\n p-label=\"\"\r\n [p-options]=\"frequencyTypeOptions\"\r\n [p-disabled]=\"disabledParams\"\r\n [(ngModel)]=\"model.frequencyType\">\r\n </po-select>\r\n </div>\r\n </po-tab>\r\n </po-tabs>\r\n </div>\r\n\r\n <div class=\"po-sm-12 po-md-12 po-lg-12 po-xl-12\" style=\"padding-top: 15px;\">\r\n <po-button\r\n style=\"float: right;\"\r\n p-label=\"Gerar Agendamento RPW\"\r\n [p-disabled]=\"disabledParams\"\r\n (click)=\"executeSchedule()\">\r\n </po-button>\r\n </div>\r\n</form>\r\n" }]
277
+ }], ctorParameters: () => [{ type: i1.PoI18nService }, { type: i2.TotvsScheduleExecutionService }, { type: i1.PoNotificationService }], propDecorators: { scheduleExecutionForm: [{
278
+ type: ViewChild,
279
+ args: ['scheduleExecutionForm', { static: true }]
280
+ }], programName: [{
281
+ type: Input
282
+ }], externalName: [{
283
+ type: Input
284
+ }], programEMS5: [{
285
+ type: Input
286
+ }], programStyle: [{
287
+ type: Input
288
+ }], programVersion: [{
289
+ type: Input
290
+ }], parameters: [{
291
+ type: Input
292
+ }], paramDigitDef: [{
293
+ type: Input
294
+ }], paramDigitData: [{
295
+ type: Input
296
+ }], paramSelections: [{
297
+ type: Input
298
+ }], disabledParams: [{
299
+ type: Input
300
+ }], loading: [{
301
+ type: Input
302
+ }], endExecution: [{
303
+ type: Output
304
+ }] } });
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG90dnMtc2NoZWR1bGUtZXhlY3V0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2R0cy1iYWNrb2ZmaWNlLXV0aWwvc3JjL2xpYi9jb21wb25lbnRzL3RvdHZzLXNjaGVkdWxlLWV4ZWN1dGlvbi90b3R2cy1zY2hlZHVsZS1leGVjdXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHRzLWJhY2tvZmZpY2UtdXRpbC9zcmMvbGliL2NvbXBvbmVudHMvdG90dnMtc2NoZWR1bGUtZXhlY3V0aW9uL3RvdHZzLXNjaGVkdWxlLWV4ZWN1dGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQXVCLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQVUzRixNQUFNLE9BQU8sK0JBQStCO0lBZ0J4QyxZQUNXLGFBQTRCLEVBQzVCLFVBQXlDLEVBQ3pDLGNBQXFDO1FBRnJDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQStCO1FBQ3pDLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQWR2QyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUVwQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2YsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxD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d2JBNlNBOzsyRkRqU2EsK0JBQStCO2tCQU4zQyxTQUFTOytCQUNJLDhCQUE4QjtrS0FNYyxxQkFBcUI7c0JBQTFFLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUUzQyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBWaWV3Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBvUmFkaW9Hcm91cE9wdGlvbiwgUG9JMThuU2VydmljZSwgUG9Ob3RpZmljYXRpb25TZXJ2aWNlLCBQb0xvb2t1cENvbHVtbiB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcclxuaW1wb3J0IHsgSVNjaGVkdWxlUGFyYW1ldGVycywgU2NoZWR1bGVQYXJhbWV0ZXJzIH0gZnJvbSAnLi90b3R2cy1zY2hlZHVsZS1leGVjdXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRvdHZzU2NoZWR1bGVFeGVjdXRpb25TZXJ2aWNlIH0gZnJvbSAnLi90b3R2cy1zY2hlZHVsZS1leGVjdXRpb24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLXRvdHZzLXNjaGVkdWxlLWV4ZWN1dGlvbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdG90dnMtc2NoZWR1bGUtZXhlY3V0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3RvdHZzLXNjaGVkdWxlLWV4ZWN1dGlvbi5jb21wb25lbnQuY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBUb3R2c1NjaGVkdWxlRXhlY3V0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3NjaGVkdWxlRXhlY3V0aW9uRm9ybScsIHsgc3RhdGljOiB0cnVlIH0pIHNjaGVkdWxlRXhlY3V0aW9uRm9ybTogTmdGb3JtO1xyXG5cclxuICAgIEBJbnB1dCgpIHByb2dyYW1OYW1lOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBleHRlcm5hbE5hbWU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHByb2dyYW1FTVM1ID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBwcm9ncmFtU3R5bGUgPSAwO1xyXG4gICAgQElucHV0KCkgcHJvZ3JhbVZlcnNpb24gPSAnJztcclxuICAgIEBJbnB1dCgpIHBhcmFtZXRlcnM6IFtdO1xyXG4gICAgQElucHV0KCkgcGFyYW1EaWdpdERlZiA9IFtdO1xyXG4gICAgQElucHV0KCkgcGFyYW1EaWdpdERhdGEgPSBbXTtcclxuICAgIEBJbnB1dCgpIHBhcmFtU2VsZWN0aW9ucyA9IFtdO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWRQYXJhbXMgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcclxuICAgIEBPdXRwdXQoKSBlbmRFeGVjdXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIHBvSTE4blNlcnZpY2U6IFBvSTE4blNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHJwd1NlcnZpY2U6IFRvdHZzU2NoZWR1bGVFeGVjdXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBwb05vdGlmaWNhdGlvbjogUG9Ob3RpZmljYXRpb25TZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZXhlY3V0aW9uVHlwZU9wdGlvbnM6IEFycmF5PFBvUmFkaW9Hcm91cE9wdGlvbj47XHJcbiAgICBmcmVxdWVuY3lPcHRpb25zOiBBcnJheTxQb1JhZGlvR3JvdXBPcHRpb24+O1xyXG4gICAgZnJlcXVlbmN5VHlwZU9wdGlvbnM6IEFycmF5PFBvUmFkaW9Hcm91cE9wdGlvbj47XHJcbiAgICB3ZWVrbHlPcHRpb25zOiBBcnJheTxQb1JhZGlvR3JvdXBPcHRpb24+O1xyXG4gICAgem9vbVJwd1NlcnZpY2VDb2x1bW5zOiBBcnJheTxQb0xvb2t1cENvbHVtbj47XHJcbiAgICBtb2RlbDogU2NoZWR1bGVQYXJhbWV0ZXJzO1xyXG4gICAgcHJpdmF0ZSBqc29uT2JqZWN0OiBhbnkgPSB7fTtcclxuXHJcbiAgICBsaXRlcmFsczogYW55ID0ge307XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgLyogVkVSSUZJQ0FSIENPTU8gRklDQVLDgSBBIFRSQURVw4fDg09cclxuICAgICAgICBmb3JrSm9pbihcclxuICAgICAgICAgICAgICB0aGlzLnBvSTE4blNlcnZpY2UuZ2V0TGl0ZXJhbHMoKSxcclxuICAgICAgICAgICAgICB0aGlzLnBvSTE4blNlcnZpY2UuZ2V0TGl0ZXJhbHMoeyBjb250ZXh0OiAnZ2VuZXJhbFJwdycgfSlcclxuICAgICAgICAgICkuc3Vic2NyaWJlKGxpdGVyYWxzID0+IHtcclxuICAgICAgICAgICAgICBsaXRlcmFscy5tYXAoaXRlbSA9PiBPYmplY3QuYXNzaWduKHRoaXMubGl0ZXJhbHMsIGl0ZW0pICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXR1cENvbXBvbmVudHMoKTtcclxuICAgICAgICAgIH0pOyovXHJcblxyXG4gICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXBDb21wb25lbnRzKCkge1xyXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uVHlwZU9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgIHsgbGFiZWw6ICdFeGVjdXRhciBIb2plJywgdmFsdWU6IDEgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogJ0FnZW5kYXIgRXhlY3XDp8OjbycsIHZhbHVlOiAyIH1cclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeU9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgIHsgbGFiZWw6ICdVbWEgdmV6IG5vIGRpYScsIHZhbHVlOiAnbm8nIH0sXHJcbiAgICAgICAgICAgIHsgbGFiZWw6ICdWw6FyaWFzIHZlemVzIG5vIGRpYScsIHZhbHVlOiAneWVzJyB9XHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lUeXBlT3B0aW9ucyA9IFtcclxuICAgICAgICAgICAgeyBsYWJlbDogJ0hvcmEocyknLCB2YWx1ZTogJ2hvdXInIH0sXHJcbiAgICAgICAgICAgIHsgbGFiZWw6ICdNaW51dG8ocyknLCB2YWx1ZTogJ21pbnV0ZScgfVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMud2Vla2x5T3B0aW9ucyA9IFtcclxuICAgICAgICAgICAgeyBsYWJlbDogJ0RvbWluZ28nLCB2YWx1ZTogJ1N1bmRheScgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogJ1NlZ3VuZGEnLCB2YWx1ZTogJ01vbmRheScgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogJ1RlcsOnYScsIHZhbHVlOiAnVHVlc2RheScgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogJ1F1YXJ0YScsIHZhbHVlOiAnV2VkbmVzZGF5JyB9LFxyXG4gICAgICAgICAgICB7IGxhYmVsOiAnUXVpbnRhJywgdmFsdWU6ICdUaHVyc2RheScgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogJ1NleHRhJywgdmFsdWU6ICdGcmlkYXknIH0sXHJcbiAgICAgICAgICAgIHsgbGFiZWw6ICdTw6FiYWRvJywgdmFsdWU6ICdTYXR1cmRheScgfVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMuem9vbVJwd1NlcnZpY2VDb2x1bW5zID0gW1xyXG4gICAgICAgICAgICB7IHByb3BlcnR5OiAnY29kZScsIGxhYmVsOiAnU2Vydmlkb3InLCB0eXBlOiAnc3RyaW5nJywgd2lkdGg6ICcyMCUnIH0sXHJcbiAgICAgICAgICAgIHsgcHJvcGVydHk6ICduYW1lJywgbGFiZWw6ICdEZXNjcmnDp8OjbycsIHR5cGU6ICdzdHJpbmcnLCB3aWR0aDogJzgwJScgfVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBuZXcgU2NoZWR1bGVQYXJhbWV0ZXJzKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5leGVjdXRpb25UeXBlID0gMTtcclxuICAgICAgICB0aGlzLm1vZGVsLnJlcGVhdFR5cGUgPSAxO1xyXG4gICAgICAgIHRoaXMubW9kZWwucmVwZWF0RXhlY3V0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNjaGVkdWxlUGFyYW1ldGVycyhzY2hQYXJhbTogSVNjaGVkdWxlUGFyYW1ldGVycykge1xyXG4gICAgICAgIGlmICghc2NoUGFyYW0pIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IHNjaFBhcmFtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTY2hlZHVsZVBhcmFtZXRlcnMoKTogSVNjaGVkdWxlUGFyYW1ldGVycyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgZmllbGRScHdTZXJ2aWNlRm9ybWF0KHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmNvZGV9IC0gJHt2YWx1ZS5uYW1lfWA7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFeGVjdXRpb25TY2hlZHVsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubW9kZWwuZXhlY3V0aW9uVHlwZSA9PT0gMik7XHJcbiAgICB9XHJcblxyXG4gICAgaXNSZXBlYXRFeGVjdXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwucmVwZWF0RXhlY3V0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRnJlbnF1ZW5jeSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubW9kZWwuZnJlcXVlbmN5ID09PSAneWVzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlUmVwZWF0RXhlY3V0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdCkgeyB0aGlzLm1vZGVsLmV4ZWNBcHBvaW50SG91ckluaXQgPSBgJHt0aGlzLmFkZFplcm8oZGF0ZS5nZXRIb3VycygpKX06JHt0aGlzLmFkZFplcm8oZGF0ZS5nZXRNaW51dGVzKCkpfWA7IH1cclxuICAgICAgICBpZiAoIXRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VyRmluYWwpIHsgdGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXJGaW5hbCA9IGAke3RoaXMuYWRkWmVybyhkYXRlLmdldEhvdXJzKCkpfToke3RoaXMuYWRkWmVybyhkYXRlLmdldE1pbnV0ZXMoKSl9YDsgfVxyXG4gICAgICAgIHRoaXMubW9kZWwuc2VsZWN0V2Vla2x5cyA9IFtdO1xyXG4gICAgICAgIHRoaXMubW9kZWwuZGF5T2ZNb250aCA9IDA7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5mcmVxdWVuY3kgPSAnbm8nO1xyXG4gICAgICAgIHRoaXMubW9kZWwuZnJlcXVlbmN5VHlwZSA9ICdob3VyJztcclxuICAgICAgICB0aGlzLm1vZGVsLmZyZXF1ZW5jeVZhbHVlID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VFeGVjdXRpb25UeXBlKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGVsLmV4ZWNBcHBvaW50RGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXIgPSBgJHt0aGlzLmFkZFplcm8oZGF0ZS5nZXRIb3VycygpKX06JHt0aGlzLmFkZFplcm8oZGF0ZS5nZXRNaW51dGVzKCkpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVHlwZUZyZXF1ZW5jeSgpIHtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBY3RpdmVUYWIoY29kVGFiOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubW9kZWwucmVwZWF0VHlwZSA9PT0gY29kVGFiKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRBY3RpdmVUYWIoY29kVGFiOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLnJlcGVhdFR5cGUgPSBjb2RUYWI7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkWmVybyhudW06IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHN0ciA9IGAke251bX1gO1xyXG4gICAgICAgIGlmIChudW0gPCAxMCkgeyBzdHIgPSBgMCR7bnVtfWA7IH1cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIGV4ZWN1dGVTY2hlZHVsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZFBhcmFtcykgeyByZXR1cm47IH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGUoKSkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgICAgbGV0IGlkeFBhcmFtOiBudW1iZXI7XHJcblxyXG4gICAgICAgIHRoaXMuanNvbk9iamVjdCA9IHt9O1xyXG4gICAgICAgIHRoaXMuanNvbk9iamVjdC5zdGF0dXMgPSAnYWN0aXZlJztcclxuICAgICAgICB0aGlzLmpzb25PYmplY3QucHJvY2Vzc0lEID0gdGhpcy5wcm9ncmFtTmFtZTtcclxuICAgICAgICB0aGlzLmpzb25PYmplY3QucmVjdXJyZW50ID0gdGhpcy5tb2RlbC5yZXBlYXRFeGVjdXRpb247XHJcbiAgICAgICAgdGhpcy5qc29uT2JqZWN0LmV4ZWN1dGlvblBhcmFtZXRlciA9IHt9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5leGVjdXRpb25UeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmpzb25PYmplY3QuZmlyc3RFeGVjdXRpb24gPSBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7KGRhdGUuZ2V0TW9udGgoKSArIDEpfS0ke2RhdGUuZ2V0RGF0ZSgpfVQke3RoaXMuYWRkWmVybyhkYXRlLmdldEhvdXJzKCkpfToke3RoaXMuYWRkWmVybyhkYXRlLmdldE1pbnV0ZXMoKSl9OjAwLjAwMFpgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5leGVjdXRpb25UeXBlID09PSAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuanNvbk9iamVjdC5maXJzdEV4ZWN1dGlvbiA9IGAke3RoaXMubW9kZWwuZXhlY0FwcG9pbnREYXRlfVQke3RoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VyfTowMC4wMDBaYDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuanNvbk9iamVjdC5leGVjdXRpb25QYXJhbWV0ZXIucGFyYW1ldHJvcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmpzb25PYmplY3QuZXhlY3V0aW9uUGFyYW1ldGVyLnBhcmFtZXRyb3NbMF0gPSB7IGNoYXZlOiAncnB3U2VydmVyJywgdmFsb3I6IHRoaXMubW9kZWwuZXhlY3V0aW9uU2VydmVyIH07XHJcbiAgICAgICAgdGhpcy5qc29uT2JqZWN0LmV4ZWN1dGlvblBhcmFtZXRlci5wYXJhbWV0cm9zWzFdID0geyBjaGF2ZTogJ1JQV19QUk9HUkFNJywgdmFsb3I6IHRoaXMuZXh0ZXJuYWxOYW1lIH07XHJcbiAgICAgICAgdGhpcy5qc29uT2JqZWN0LmV4ZWN1dGlvblBhcmFtZXRlci5wYXJhbWV0cm9zWzJdID0geyBjaGF2ZTogJ1JQV19QUkdfRU1TNScsIHZhbG9yOiB0aGlzLnByb2dyYW1FTVM1ID8gJ3llcycgOiAnbm8nIH07XHJcbiAgICAgICAgdGhpcy5qc29uT2JqZWN0LmV4ZWN1dGlvblBhcmFtZXRlci5wYXJhbWV0cm9zWzNdID0geyBjaGF2ZTogJ1JQV19QUkdfRVNUSUxPJywgdmFsb3I6IHRoaXMucHJvZ3JhbVN0eWxlIH07XHJcbiAgICAgICAgdGhpcy5qc29uT2JqZWN0LmV4ZWN1dGlvblBhcmFtZXRlci5wYXJhbWV0cm9zWzRdID0geyBjaGF2ZTogJ1JQV19QUkdfVkVSUycsIHZhbG9yOiB0aGlzLnByb2dyYW1WZXJzaW9uIH07XHJcblxyXG4gICAgICAgIGlkeFBhcmFtID0gNDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGFyYW1ldGVycyAmJiB0aGlzLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZHhQYXJhbSsrO1xyXG4gICAgICAgICAgICB0aGlzLmpzb25PYmplY3QuZXhlY3V0aW9uUGFyYW1ldGVyLnBhcmFtZXRyb3NbaWR4UGFyYW1dID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuanNvbk9iamVjdC5leGVjdXRpb25QYXJhbWV0ZXIucGFyYW1ldHJvc1tpZHhQYXJhbV0ucGFyYW1ldHJvc19uZWdvY2lvID0gdGhpcy5wYXJhbWV0ZXJzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGFyYW1EaWdpdERlZiAmJiB0aGlzLnBhcmFtRGlnaXREZWYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZHhQYXJhbSsrO1xyXG4gICAgICAgICAgICB0aGlzLmpzb25PYmplY3QuZXhlY3V0aW9uUGFyYW1ldGVyLnBhcmFtZXRyb3NbaWR4UGFyYW1dID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuanNvbk9iamVjdC5leGVjdXRpb25QYXJhbWV0ZXIucGFyYW1ldHJvc1tpZHhQYXJhbV0ucGFyYW1fZGlnaXRhX2RlZiA9IHRoaXMucGFyYW1EaWdpdERlZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhcmFtRGlnaXREYXRhICYmIHRoaXMucGFyYW1EaWdpdERhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZHhQYXJhbSsrO1xyXG4gICAgICAgICAgICB0aGlzLmpzb25PYmplY3QuZXhlY3V0aW9uUGFyYW1ldGVyLnBhcmFtZXRyb3NbaWR4UGFyYW1dID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuanNvbk9iamVjdC5leGVjdXRpb25QYXJhbWV0ZXIucGFyYW1ldHJvc1tpZHhQYXJhbV0ucGFyYW1fZGlnaXRhX2RhZG9zID0gdGhpcy5wYXJhbURpZ2l0RGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhcmFtU2VsZWN0aW9ucyAmJiB0aGlzLnBhcmFtU2VsZWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlkeFBhcmFtKys7XHJcbiAgICAgICAgICAgIHRoaXMuanNvbk9iamVjdC5leGVjdXRpb25QYXJhbWV0ZXIucGFyYW1ldHJvc1tpZHhQYXJhbV0gPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5qc29uT2JqZWN0LmV4ZWN1dGlvblBhcmFtZXRlci5wYXJhbWV0cm9zW2lkeFBhcmFtXS5zZWxlY29lcyA9IHRoaXMucGFyYW1TZWxlY3Rpb25zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRXhlY3V0YSBob2plIG91IGFnZW5kYWRhXHJcbiAgICAgICAgdGhpcy5ycHdTZXJ2aWNlLmNyZWF0ZUV4ZWN1dGlvbih0aGlzLmpzb25PYmplY3QsIHRoaXMubG9hZGluZykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5zdWNjZXNzKCdBZ2VuZGFtZW50byByZWFsaXphZG8gY29tIHN1Y2Vzc28gIScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5yZXBlYXRFeGVjdXRpb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwucmVwZWF0VHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5qc29uT2JqZWN0LmRhaWx5ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhvdXI6IHRoaXMuZ2V0SG91ck9yTWludXRlKHRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdCwgJ2gnKSxcclxuICAgICAgICAgICAgICAgICAgICBtaW51dGU6IHRoaXMuZ2V0SG91ck9yTWludXRlKHRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdCwgJ20nKVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwucmVwZWF0VHlwZSA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5qc29uT2JqZWN0LndlZWtseSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBob3VyOiB0aGlzLmdldEhvdXJPck1pbnV0ZSh0aGlzLm1vZGVsLmV4ZWNBcHBvaW50SG91ckluaXQsICdoJyksXHJcbiAgICAgICAgICAgICAgICAgICAgbWludXRlOiB0aGlzLmdldEhvdXJPck1pbnV0ZSh0aGlzLm1vZGVsLmV4ZWNBcHBvaW50SG91ckluaXQsICdtJyksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF5c09mV2VlazogdGhpcy5tb2RlbC5zZWxlY3RXZWVrbHlzXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5yZXBlYXRUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmpzb25PYmplY3QubW9udGhseSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBob3VyOiB0aGlzLmdldEhvdXJPck1pbnV0ZSh0aGlzLm1vZGVsLmV4ZWNBcHBvaW50SG91ckluaXQsICdoJyksXHJcbiAgICAgICAgICAgICAgICAgICAgbWludXRlOiB0aGlzLmdldEhvdXJPck1pbnV0ZSh0aGlzLm1vZGVsLmV4ZWNBcHBvaW50SG91ckluaXQsICdtJyksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF5OiB0aGlzLm1vZGVsLmRheU9mTW9udGhcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRnJlbnF1ZW5jeSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmpzb25PYmplY3QucmFuZ2VFeGVjdXRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLm1vZGVsLmZyZXF1ZW5jeVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLm1vZGVsLmZyZXF1ZW5jeVZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByYW5nZUxpbWl0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXI6IHRoaXMuZ2V0SG91ck9yTWludXRlKHRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VyRmluYWwsICdoJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogdGhpcy5nZXRIb3VyT3JNaW51dGUodGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXJGaW5hbCwgJ20nKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEV4ZWN1dGEgYSBkacOhcmlhLCBzZW1hbmFsIG91IG1lbnNhbFxyXG4gICAgICAgICAgICB0aGlzLnJwd1NlcnZpY2UuY3JlYXRlRXhlY3V0aW9uKHRoaXMuanNvbk9iamVjdCwgdGhpcy5sb2FkaW5nKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW5kRXhlY3V0aW9uLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SG91ck9yTWludXRlKHZhbHVlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdoJykgeyByZXR1cm4gK3ZhbHVlLnN1YnN0cmluZygwLCAyKTsgfVxyXG4gICAgICAgIGlmICh0eXBlID09PSAnbScpIHsgcmV0dXJuICt2YWx1ZS5zdWJzdHJpbmcoMywgNik7IH1cclxuICAgIH1cclxuXHJcbiAgICBjb21wYXJlSG91cihob3VySW5pdDogc3RyaW5nLCBob3VyRmluYWw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChob3VySW5pdCA9PT0gaG91ckZpbmFsKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICAgIGlmICh0aGlzLmdldEhvdXJPck1pbnV0ZShob3VySW5pdCwgJ2gnKSA8IHRoaXMuZ2V0SG91ck9yTWludXRlKGhvdXJGaW5hbCwgJ2gnKSkgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gICAgICAgIGlmICh0aGlzLmdldEhvdXJPck1pbnV0ZShob3VySW5pdCwgJ20nKSA+IHRoaXMuZ2V0SG91ck9yTWludXRlKGhvdXJGaW5hbCwgJ20nKSkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNjaGVkdWxlRXhlY3V0aW9uRm9ybS52YWxpZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLmVycm9yKCdWZXJpZmlxdWUgYXMgaW5jb25zaXN0w6puY2lhcyBlbSB0ZWxhLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubW9kZWwuZXhlY3V0aW9uU2VydmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IoJ1NlcnZpZG9yIGRlIEV4ZWN1w6fDo28gbsOjbyBmb2kgaW5mb3JtYWRvLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0V4ZWN1dGlvblNjaGVkdWxlKCkgJiYgKCF0aGlzLm1vZGVsLmV4ZWNBcHBvaW50RGF0ZSB8fCAhdGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IoJ0luZm9ybWFyIGEgZGF0YSBlIGEgaG9yYSBwYXJhIGFnZW5kYW1lbnRvIGRhIGV4ZWN1w6fDo28uJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnJlcGVhdEV4ZWN1dGlvbikge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5lcnJvcignSW5mb3JtYXIgYSBob3JhIGRlIGluw61jaW8gcGFyYSBhIGV4ZWN1w6fDo28uJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLnJlcGVhdFR5cGUgPT09IDIgJiYgKHRoaXMubW9kZWwuc2VsZWN0V2Vla2x5cy5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLmVycm9yKCdJbmZvcm1hciBvcyBkaWFzIGRhIHNlbWFuYSBwYXJhIGEgZXhlY3XDp8Ojby4nKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwucmVwZWF0VHlwZSA9PT0gMyAmJiAoIXRoaXMubW9kZWwuZGF5T2ZNb250aCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IoJ0luZm9ybWFyIG8gZGlhIHBhcmEgYSBleGVjdcOnw6NvLicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZyZW5xdWVuY3koKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbXBhcmVIb3VyKHRoaXMubW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdCwgdGhpcy5tb2RlbC5leGVjQXBwb2ludEhvdXJGaW5hbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLmVycm9yKCdIb3JhIEZpbSBkZXZlIHNlciBtYWlvciBxdWUgSG9yYSBJbsOtY2lvLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5mcmVxdWVuY3lWYWx1ZSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IoJ0luZm9ybWFyIGEgZnJlcXXDqm5jaWEgZGUgZXhlY3XDp8OjbyAoQSBjYWRhIGhvcmEvbWludXRvKS4nKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcbiIsIjxmb3JtICNzY2hlZHVsZUV4ZWN1dGlvbkZvcm09XCJuZ0Zvcm1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwby1yb3cgcG8tc20tMTIgcG8tbWQtMTIgcG8tbGctMTIgcG8teGwtMTJcIj5cclxuICAgICAgICA8cG8tcmFkaW8tZ3JvdXAgXHJcbiAgICAgICAgICAgIGNsYXNzPVwicG8tc20tMTIgcG8tbWQtMTIgcG8tbGctMTIgcG8teGwtMTJcIlxyXG4gICAgICAgICAgICBuYW1lPVwiZXhlY3V0aW9uVHlwZVwiXHJcbiAgICAgICAgICAgIHAtbGFiZWw9XCJEYXRhIGRlIEV4ZWN1w6fDo29cIlxyXG4gICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZXhlY3V0aW9uVHlwZVwiXHJcbiAgICAgICAgICAgIFtwLW9wdGlvbnNdPVwiZXhlY3V0aW9uVHlwZU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAocC1jaGFuZ2UpPVwiY2hhbmdlRXhlY3V0aW9uVHlwZSgpXCI+XHJcbiAgICAgICAgPC9wby1yYWRpby1ncm91cD5cclxuXHJcbiAgICAgICAgPHBvLWRhdGVwaWNrZXIgKm5nSWY9aXNFeGVjdXRpb25TY2hlZHVsZSgpXHJcbiAgICAgICAgICAgIGNsYXNzPVwicG8tc20tNiBwby1tZC02IHBvLWxnLTYgcG8teGwtNlwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJtb2RlbC5leGVjQXBwb2ludERhdGVcIlxyXG4gICAgICAgICAgICBwLWxhYmVsPVwiQWdlbmRhciBwYXJhXCJcclxuICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmV4ZWNBcHBvaW50RGF0ZVwiPlxyXG4gICAgICAgIDwvcG8tZGF0ZXBpY2tlcj5cclxuXHJcbiAgICAgICAgPHBvLWlucHV0ICpuZ0lmPWlzRXhlY3V0aW9uU2NoZWR1bGUoKVxyXG4gICAgICAgICAgICBjbGFzcz1cInBvLXNtLTYgcG8tbWQtNiBwby1sZy02IHBvLXhsLTZcIlxyXG4gICAgICAgICAgICBuYW1lPVwiZXhlY0FwcG9pbnRIb3VyXCJcclxuICAgICAgICAgICAgcC1sYWJlbD1cIkhvcmFcIlxyXG4gICAgICAgICAgICBwLW1hc2s9XCI5OTo5OVwiXHJcbiAgICAgICAgICAgIHAtbWFzay1mb3JtYXQtbW9kZWw9XCJ0cnVlXCJcclxuICAgICAgICAgICAgcC1wYXR0ZXJuPVwiXihbMC05XXwwWzAtOV18MVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRcIlxyXG4gICAgICAgICAgICBwLWVycm9yLXBhdHRlcm49XCJIb3JhIGludsOhbGlkYVwiXHJcbiAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5leGVjQXBwb2ludEhvdXJcIj5cclxuICAgICAgICA8L3BvLWlucHV0PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInBvLXJvdyBwby1zbS0xMiBwby1tZC0xMiBwby1sZy0xMiBwby14bC0xMlwiPlxyXG4gICAgICAgIDxwby1sb29rdXBcclxuICAgICAgICAgICAgY2xhc3M9XCJwby1zbS0xMiBwby1tZC0xMiBwby1sZy0xMiBwby14bC0xMlwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJleGVjdXRpb25TZXJ2ZXJcIlxyXG4gICAgICAgICAgICBwLWxhYmVsPVwiU2Vydmlkb3IgZGUgRXhlY3XDp8Ojb1wiXHJcbiAgICAgICAgICAgIHAtcGxhY2Vob2xkZXI9XCJTZXJ2aWRvciBkZSBFeGVjdcOnw6NvXCJcclxuICAgICAgICAgICAgW3AtY29sdW1uc109XCJ6b29tUnB3U2VydmljZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICBbcC1maWVsZC1mb3JtYXRdPVwiZmllbGRScHdTZXJ2aWNlRm9ybWF0XCJcclxuICAgICAgICAgICAgW3AtZmlsdGVyLXNlcnZpY2VdPVwicnB3U2VydmljZVwiXHJcbiAgICAgICAgICAgIHAtZmllbGQtbGFiZWw9XCJuYW1lXCJcclxuICAgICAgICAgICAgcC1maWVsZC12YWx1ZT1cImNvZGVcIlxyXG4gICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZXhlY3V0aW9uU2VydmVyXCI+XHJcbiAgICAgICAgPC9wby1sb29rdXA+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicG8tcm93IHBvLXNtLTEyIHBvLW1kLTEyIHBvLWxnLTEyIHBvLXhsLTEyXCI+XHJcbiAgICAgICAgPHBvLXN3aXRjaFxyXG4gICAgICAgICAgICBjbGFzcz1cInBvLXNtLTYgcG8tbWQtNiBwby1sZy02IHBvLXhsLTZcIlxyXG4gICAgICAgICAgICBuYW1lPVwicmVwZWF0RXhlY3V0aW9uXCJcclxuICAgICAgICAgICAgcC1sYWJlbD1cIlJlcGV0aXIgb2NvcnLDqm5jaWEgP1wiXHJcbiAgICAgICAgICAgIHAtbGFiZWwtb2ZmPVwiTsOjb1wiXHJcbiAgICAgICAgICAgIHAtbGFiZWwtb249XCJTaW1cIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLnJlcGVhdEV4ZWN1dGlvblwiXHJcbiAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVJlcGVhdEV4ZWN1dGlvbigpXCI+XHJcbiAgICAgICAgPC9wby1zd2l0Y2g+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicG8tcm93XCIgKm5nSWY9XCJpc1JlcGVhdEV4ZWN1dGlvbigpXCI+XHJcbiAgICAgXHJcbiAgICAgICAgPHBvLXRhYnM+XHJcblxyXG4gICAgICAgICAgICA8cG8tdGFiIFxyXG4gICAgICAgICAgICAgICAgcC1sYWJlbD1cIkRpw6FyaWFcIiBcclxuICAgICAgICAgICAgICAgIFtwLWFjdGl2ZV09XCJnZXRBY3RpdmVUYWIoMSlcIiBcclxuICAgICAgICAgICAgICAgIChwLWNsaWNrKT1cInNldEFjdGl2ZVRhYigxKVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLXJhZGlvLWdyb3VwIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXNtLTEyIHBvLW1kLTEyIHBvLWxnLTEyIHBvLXhsLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyZXF1ZW5jeURhaWx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIkZyZXF1w6puY2lhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1jb2x1bW5zPTFcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5mcmVxdWVuY3lcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLW9wdGlvbnNdPVwiZnJlcXVlbmN5T3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwLWNoYW5nZSk9XCJjaGFuZ2VUeXBlRnJlcXVlbmN5KClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG8tc20tNiBwby1tZC02IHBvLWxnLTYgcG8teGwtNlwiPiAgICBcclxuICAgICAgICAgICAgICAgICAgICA8cG8taW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImV4ZWNBcHBvaW50SG91ckluaXREYWlseVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbGFiZWw9XCJIb3JhIEluw61jaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1hc2s9XCI5OTo5OVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWFzay1mb3JtYXQtbW9kZWw9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1wYXR0ZXJuPVwiXihbMC05XXwwWzAtOV18MVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWVycm9yLXBhdHRlcm49XCJIb3JhIGludsOhbGlkYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5leGVjQXBwb2ludEhvdXJJbml0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wby1pbnB1dD5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8cG8taW5wdXQgKm5nSWY9XCJpc0ZyZW5xdWVuY3koKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tc20tNiBwby1tZC02IHBvLWxnLTYgcG8teGwtNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJleGVjQXBwb2ludEhvdXJGaW5hbERhaWx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIkhvcmEgRmltXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXNrPVwiOTk6OTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1hc2stZm9ybWF0LW1vZGVsPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtcGF0dGVybj1cIl4oWzAtOV18MFswLTldfDFbMC05XXwyWzAtM10pOlswLTVdWzAtOV0kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1lcnJvci1wYXR0ZXJuPVwiSG9yYSBpbnbDoWxpZGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZXhlY0FwcG9pbnRIb3VyRmluYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLWlucHV0PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxwby1udW1iZXIgKm5nSWY9XCJpc0ZyZW5xdWVuY3koKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tc20tNSBwby1tZC01IHBvLWxnLTUgcG8teGwtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmcmVxdWVuY3lWYWx1ZURhaWx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIkEgY2FkYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWlubGVuZ3RoPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWF4bGVuZ3RoPVwiM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWF4PVwiOTk5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmZyZXF1ZW5jeVZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wby1udW1iZXI+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLXNlbGVjdCAqbmdJZj1cImlzRnJlbnF1ZW5jeSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1tdC0zIHBvLXNtLTcgcG8tbWQtNyBwby1sZy03IHBvLXhsLTdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZnJlcXVlbmN5VHlwZURhaWx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLW9wdGlvbnNdPVwiZnJlcXVlbmN5VHlwZU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZnJlcXVlbmN5VHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcG8tc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvcG8tdGFiPlxyXG5cclxuICAgICAgICAgICAgPHBvLXRhYiBcclxuICAgICAgICAgICAgICAgIHAtbGFiZWw9XCJTZW1hbmFsXCJcclxuICAgICAgICAgICAgICAgIFtwLWFjdGl2ZV09XCJnZXRBY3RpdmVUYWIoMilcIlxyXG4gICAgICAgICAgICAgICAgKHAtY2xpY2spPVwic2V0QWN0aXZlVGFiKDIpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvLXJvdyBwby1zbS0xMiBwby1tZC0xMiBwby1sZy0xMiBwby14bC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwby1tdWx0aXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXNtLTEyIHBvLW1kLTEyIHBvLWxnLTEyIHBvLXhsLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdFdlZWtseXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiRGlhcyBkYSBTZW1hbmFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLXBsYWNlaG9sZGVyPVwiRXNjb2xoYSBvcyBkaWFzIGRhIHNlbWFuYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5zZWxlY3RXZWVrbHlzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Atb3B0aW9uc109XCJ3ZWVrbHlPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wby1tdWx0aXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLXJhZGlvLWdyb3VwIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXNtLTEyIHBvLW1kLTEyIHBvLWxnLTEyIHBvLXhsLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyZXF1ZW5jeVdlZWtseVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbGFiZWw9XCJGcmVxdcOqbmNpYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtY29sdW1ucz0xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZnJlcXVlbmN5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1vcHRpb25zXT1cImZyZXF1ZW5jeU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocC1jaGFuZ2UpPVwiY2hhbmdlVHlwZUZyZXF1ZW5jeSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wby1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tc20tNiBwby1tZC02IHBvLWxnLTYgcG8teGwtNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJleGVjQXBwb2ludEhvdXJJbml0V2Vla2x5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIkhvcmEgSW7DrWNpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWFzaz1cIjk5Ojk5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXNrLWZvcm1hdC1tb2RlbD1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLXBhdHRlcm49XCJeKFswLTldfDBbMC05XXwxWzAtOV18MlswLTNdKTpbMC01XVswLTldJFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtZXJyb3ItcGF0dGVybj1cIkhvcmEgaW52w6FsaWRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmV4ZWNBcHBvaW50SG91ckluaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLWlucHV0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8cG8taW5wdXQgKm5nSWY9XCJpc0ZyZW5xdWVuY3koKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tc20tNiBwby1tZC02IHBvLWxnLTYgcG8teGwtNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJleGVjQXBwb2ludEhvdXJGaW5hbFdlZWtseVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbGFiZWw9XCJIb3JhIEZpbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWFzaz1cIjk5Ojk5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXNrLWZvcm1hdC1tb2RlbD1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLXBhdHRlcm49XCJeKFswLTldfDBbMC05XXwxWzAtOV18MlswLTNdKTpbMC01XVswLTldJFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtZXJyb3ItcGF0dGVybj1cIkhvcmEgaW52w6FsaWRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmV4ZWNBcHBvaW50SG91ckZpbmFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wby1pbnB1dD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLW51bWJlciAqbmdJZj1cImlzRnJlbnF1ZW5jeSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1zbS01IHBvLW1kLTUgcG8tbGctNSBwby14bC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyZXF1ZW5jeVZhbHVlV2Vla2x5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIkEgY2FkYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWlubGVuZ3RoPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWF4bGVuZ3RoPVwiM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbWF4PVwiOTk5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmZyZXF1ZW5jeVZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wby1udW1iZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxwby1zZWxlY3QgKm5nSWY9XCJpc0ZyZW5xdWVuY3koKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tbXQtMyBwby1zbS03IHBvLW1kLTcgcG8tbGctNyBwby14bC03XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyZXF1ZW5jeVR5cGVXZWVrbHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Atb3B0aW9uc109XCJmcmVxdWVuY3lUeXBlT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5mcmVxdWVuY3lUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wby1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9wby10YWI+XHJcblxyXG4gICAgICAgICAgICA8cG8tdGFiIFxyXG4gICAgICAgICAgICAgICAgcC1sYWJlbD1cIk1lbnNhbFwiIFxyXG4gICAgICAgICAgICAgICAgW3AtYWN0aXZlXT1cImdldEFjdGl2ZVRhYigzKVwiIFxyXG4gICAgICAgICAgICAgICAgKHAtY2xpY2spPVwic2V0QWN0aXZlVGFiKDMpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvLXJvdyBwby1zbS0xMiBwby1tZC0xMiBwby1sZy0xMiBwby14bC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwby1udW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1zbS0zIHBvLW1kLTMgcG8tbGctMyBwby14bC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRheU9mTW9udGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiRGlhIGRvIG3DqnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1pbmxlbmd0aD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1heGxlbmd0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1heD1cIjMxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmRheU9mTW9udGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLW51bWJlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwby1yb3cgcG8tc20tNiBwby1tZC02IHBvLWxnLTYgcG8teGwtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwby1yYWRpby1ncm91cCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1zbS0xMiBwby1tZC0xMiBwby1sZy0xMiBwby14bC0xMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmcmVxdWVuY3lNb250aGx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIkZyZXF1w6puY2lhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1jb2x1bW5zPTFcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5mcmVxdWVuY3lcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwLW9wdGlvbnNdPVwiZnJlcXVlbmN5T3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwLWNoYW5nZSk9XCJjaGFuZ2VUeXBlRnJlcXVlbmN5KClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwby1yb3cgcG8tc20tNiBwby1tZC02IHBvLWxnLTYgcG8teGwtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwby1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXNtLTYgcG8tbWQtNiBwby1sZy02IHBvLXhsLTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZXhlY0FwcG9pbnRIb3VySW5pdE1vbnRobHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiSG9yYSBJbsOtY2lvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXNrPVwiOTk6OTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1hc2stZm9ybWF0LW1vZGVsPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtcGF0dGVybj1cIl4oWzAtOV18MFswLTldfDFbMC05XXwyWzAtM10pOlswLTVdWzAtOV0kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1lcnJvci1wYXR0ZXJuPVwiSG9yYSBpbnbDoWxpZGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZXhlY0FwcG9pbnRIb3VySW5pdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcG8taW5wdXQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxwby1pbnB1dCAqbmdJZj1cImlzRnJlbnF1ZW5jeSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1zbS02IHBvLW1kLTYgcG8tbGctNiBwby14bC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImV4ZWNBcHBvaW50SG91ckZpbmFsV2Vla2x5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1sYWJlbD1cIkhvcmEgRmltXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXNrPVwiOTk6OTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLW1hc2stZm9ybWF0LW1vZGVsPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtcGF0dGVybj1cIl4oWzAtOV18MFswLTldfDFbMC05XXwyWzAtM10pOlswLTVdWzAtOV0kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1lcnJvci1wYXR0ZXJuPVwiSG9yYSBpbnbDoWxpZGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZXhlY0FwcG9pbnRIb3VyRmluYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLWlucHV0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8cG8tbnVtYmVyICpuZ0lmPVwiaXNGcmVucXVlbmN5KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXNtLTUgcG8tbWQtNSBwby1sZy01IHBvLXhsLTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZnJlcXVlbmN5VmFsdWVXZWVrbHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLWxhYmVsPVwiQSBjYWRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1taW5sZW5ndGg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXhsZW5ndGg9XCIzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1taW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcC1tYXg9XCI5OTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFBhcmFtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuZnJlcXVlbmN5VmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLW51bWJlcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHBvLXNlbGVjdCAqbmdJZj1cImlzRnJlbnF1ZW5jeSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwby1tdC0zIHBvLXNtLTcgcG8tbWQtNyBwby1sZy03IHBvLXhsLTdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZnJlcXVlbmN5VHlwZVdlZWtseVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAtbGFiZWw9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcC1vcHRpb25zXT1cImZyZXF1ZW5jeVR5cGVPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXJhbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLmZyZXF1ZW5jeVR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3BvLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3BvLXRhYj5cclxuICAgICAgICA8L3BvLXRhYnM+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicG8tc20tMTIgcG8tbWQtMTIgcG8tbGctMTIgcG8teGwtMTJcIiBzdHlsZT1cInBhZGRpbmctdG9wOiAxNXB4O1wiPlxyXG4gICAgICAgIDxwby1idXR0b25cclxuICAgICAgICAgICAgc3R5bGU9XCJmbG9hdDogcmlnaHQ7XCJcclxuICAgICAgICAgICAgcC1sYWJlbD1cIkdlcmFyIEFnZW5kYW1lbnRvIFJQV1wiXHJcbiAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkUGFyYW1zXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWN1dGVTY2hlZHVsZSgpXCI+XHJcbiAgICAgICAgPC9wby1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9mb3JtPlxyXG4iXX0=