@hitsoft/abp.kadooglu 1.0.10 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person-form/hit-carrier-person-form.component.mjs +4 -3
- package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.mjs +278 -109
- package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.mjs +56 -27
- package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry-form/hit-factory-entry-form.component.mjs +266 -24
- package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-form/hit-knt-item-esl-form.component.mjs +4 -4
- package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type-form/hit-vehicle-type-form.component.mjs +1 -1
- package/esm2020/lib/hit-proxy/hit-carrier-person/models.mjs +1 -1
- package/esm2020/lib/hit-proxy/hit-entry-weighing/hit-entry-weighing.service.mjs +5 -2
- package/esm2020/lib/hit-proxy/hit-entry-weighing/models.mjs +1 -1
- package/esm2020/lib/hit-proxy/hit-factory-entry/models.mjs +1 -1
- package/esm2020/lib/hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service.mjs +4 -1
- package/esm2020/lib/hit-proxy/hit-purchase-delivery-note/models.mjs +1 -1
- package/esm2020/lib/hit-proxy/hit-stock-transfer/hit-stock-transfer.service.mjs +4 -1
- package/esm2020/lib/hit-proxy/hit-stock-transfer/models.mjs +1 -1
- package/esm2020/lib/services/scale-signalr.service.mjs +4 -1
- package/esm2020/lib/shared/hit-modal/hit-modal.component.mjs +68 -16
- package/fesm2015/hitsoft-abp.kadooglu.mjs +725 -216
- package/fesm2015/hitsoft-abp.kadooglu.mjs.map +1 -1
- package/fesm2020/hitsoft-abp.kadooglu.mjs +707 -208
- package/fesm2020/hitsoft-abp.kadooglu.mjs.map +1 -1
- package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.d.ts +20 -7
- package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.d.ts +9 -1
- package/lib/hit-components/hit-factory-entry/hit-factory-entry-form/hit-factory-entry-form.component.d.ts +24 -1
- package/lib/hit-proxy/hit-carrier-person/models.d.ts +2 -0
- package/lib/hit-proxy/hit-entry-weighing/hit-entry-weighing.service.d.ts +3 -0
- package/lib/hit-proxy/hit-entry-weighing/models.d.ts +1 -0
- package/lib/hit-proxy/hit-factory-entry/models.d.ts +9 -4
- package/lib/hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service.d.ts +1 -0
- package/lib/hit-proxy/hit-purchase-delivery-note/models.d.ts +6 -0
- package/lib/hit-proxy/hit-stock-transfer/hit-stock-transfer.service.d.ts +1 -0
- package/lib/hit-proxy/hit-stock-transfer/models.d.ts +2 -0
- package/lib/services/scale-signalr.service.d.ts +2 -0
- package/lib/shared/hit-modal/hit-modal.component.d.ts +25 -2
- package/package.json +1 -1
|
@@ -4,18 +4,26 @@ import { switchMap } from 'rxjs/operators';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "../../../hit-proxy/hit-entry-weighing/hit-entry-weighing.service";
|
|
6
6
|
import * as i2 from "../../../hit-proxy/hit-stock-transfer/hit-stock-transfer.service";
|
|
7
|
-
import * as i3 from "
|
|
8
|
-
import * as i4 from "
|
|
9
|
-
import * as i5 from "
|
|
10
|
-
import * as i6 from "../../../
|
|
11
|
-
import * as i7 from "@
|
|
12
|
-
import * as i8 from "@
|
|
13
|
-
import * as i9 from "
|
|
14
|
-
import * as i10 from "
|
|
7
|
+
import * as i3 from "../../../hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service";
|
|
8
|
+
import * as i4 from "../../../hit-proxy/hit-carrier-person/hit-carrier-person.service";
|
|
9
|
+
import * as i5 from "../../../hit-proxy/hit-user-gate/hit-user-gate.service";
|
|
10
|
+
import * as i6 from "../../../hit-proxy/hit-gate/hit-gate.service";
|
|
11
|
+
import * as i7 from "@abp/ng.theme.shared";
|
|
12
|
+
import * as i8 from "@angular/router";
|
|
13
|
+
import * as i9 from "@abp/ng.core";
|
|
14
|
+
import * as i10 from "../../../services/scale-signalr.service";
|
|
15
|
+
import * as i11 from "@angular/common";
|
|
16
|
+
import * as i12 from "@abp/ng.components/page";
|
|
17
|
+
import * as i13 from "../../../shared/hit-modal/hit-modal.component";
|
|
18
|
+
import * as i14 from "devextreme-angular";
|
|
15
19
|
export class HitEntryWeighingFormComponent {
|
|
16
|
-
constructor(service, stockTransferService, confirmation, toaster, route, router, localizationService, scaleSignalRService) {
|
|
20
|
+
constructor(service, stockTransferService, purchaseDeliveryNoteService, carrierPersonService, userGateService, gateService, confirmation, toaster, route, router, localizationService, scaleSignalRService) {
|
|
17
21
|
this.service = service;
|
|
18
22
|
this.stockTransferService = stockTransferService;
|
|
23
|
+
this.purchaseDeliveryNoteService = purchaseDeliveryNoteService;
|
|
24
|
+
this.carrierPersonService = carrierPersonService;
|
|
25
|
+
this.userGateService = userGateService;
|
|
26
|
+
this.gateService = gateService;
|
|
19
27
|
this.confirmation = confirmation;
|
|
20
28
|
this.toaster = toaster;
|
|
21
29
|
this.route = route;
|
|
@@ -36,9 +44,7 @@ export class HitEntryWeighingFormComponent {
|
|
|
36
44
|
this.loadDrivers = () => this.service.getDrivers();
|
|
37
45
|
this.loadAccounts = () => this.service.getAccounts();
|
|
38
46
|
this.loadStockItems = () => this.service.getStockItems();
|
|
39
|
-
this.
|
|
40
|
-
this.waybillDefaultDateTo = new Date();
|
|
41
|
-
this.loadWaybills = (params) => this.stockTransferService.getList(params);
|
|
47
|
+
this.waybillTabs = [];
|
|
42
48
|
this.loadGates = () => this.service.getGates();
|
|
43
49
|
this.loadVehicleTypes = () => this.service.getVehicleTypes();
|
|
44
50
|
// Column configs
|
|
@@ -49,7 +55,6 @@ export class HitEntryWeighingFormComponent {
|
|
|
49
55
|
this.driverColumns = [];
|
|
50
56
|
this.accountColumns = [];
|
|
51
57
|
this.stockItemColumns = [];
|
|
52
|
-
this.waybillColumns = [];
|
|
53
58
|
this.gateColumns = [];
|
|
54
59
|
this.vehicleTypeColumns = [];
|
|
55
60
|
// Form fields
|
|
@@ -93,6 +98,7 @@ export class HitEntryWeighingFormComponent {
|
|
|
93
98
|
this.fixedScaleValue = null;
|
|
94
99
|
this.isSaving = false;
|
|
95
100
|
this.isWeighing = false;
|
|
101
|
+
this.isWaybillLoading = false;
|
|
96
102
|
this.entryTypeTrtmYpilck = false;
|
|
97
103
|
this.entryTypeMalGC = false;
|
|
98
104
|
this.isDoingGoodsMovement = false;
|
|
@@ -139,15 +145,46 @@ export class HitEntryWeighingFormComponent {
|
|
|
139
145
|
{ dataField: 'code', caption: l('Code'), width: 100 },
|
|
140
146
|
{ dataField: 'name', caption: l('StockName') },
|
|
141
147
|
];
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
{
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
const waybillDateFrom = (() => { const d = new Date(); d.setDate(d.getDate() - 3); return d; })();
|
|
149
|
+
const waybillDateTo = new Date();
|
|
150
|
+
this.waybillTabs = [
|
|
151
|
+
{
|
|
152
|
+
title: l('WaybillTab_StockTransfer'),
|
|
153
|
+
loadFn: (params) => this.stockTransferService.getList(params),
|
|
154
|
+
displayName: 'u_EFATNO',
|
|
155
|
+
keyExpr: 'docEntry',
|
|
156
|
+
showDateFilter: true,
|
|
157
|
+
defaultDateFrom: waybillDateFrom,
|
|
158
|
+
defaultDateTo: waybillDateTo,
|
|
159
|
+
columns: [
|
|
160
|
+
{ dataField: 'docNum', caption: l('DocumentNo'), width: 100 },
|
|
161
|
+
{ dataField: 'u_EFATNO', caption: l('WaybillNo'), width: 120 },
|
|
162
|
+
{ dataField: 'cardName', caption: l('CardName') },
|
|
163
|
+
{ dataField: 'fromWarehouse', caption: l('ExitWarehouse'), width: 140 },
|
|
164
|
+
{ dataField: 'u_AracPlakasi', caption: l('VehiclePlate'), width: 110 },
|
|
165
|
+
{ dataField: 'u_SoforAd', caption: l('DriverName') },
|
|
166
|
+
{ dataField: 'u_SoforSoyadi', caption: l('DriverSurname') },
|
|
167
|
+
{ dataField: 'comments', caption: l('Description') },
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
title: l('WaybillTab_PurchaseDelivery'),
|
|
172
|
+
loadFn: (params) => this.purchaseDeliveryNoteService.getList(params),
|
|
173
|
+
displayName: 'u_EFATNO',
|
|
174
|
+
keyExpr: 'docEntry',
|
|
175
|
+
showDateFilter: true,
|
|
176
|
+
defaultDateFrom: waybillDateFrom,
|
|
177
|
+
defaultDateTo: waybillDateTo,
|
|
178
|
+
columns: [
|
|
179
|
+
{ dataField: 'docNum', caption: l('DocumentNo'), width: 100 },
|
|
180
|
+
{ dataField: 'u_EFATNO', caption: l('WaybillNo'), width: 120 },
|
|
181
|
+
{ dataField: 'cardName', caption: l('CardName') },
|
|
182
|
+
{ dataField: 'u_AracPlakasi', caption: l('VehiclePlate'), width: 110 },
|
|
183
|
+
{ dataField: 'u_SoforAd', caption: l('DriverName') },
|
|
184
|
+
{ dataField: 'u_SoforSoyadi', caption: l('DriverSurname') },
|
|
185
|
+
{ dataField: 'comments', caption: l('Description') },
|
|
186
|
+
],
|
|
187
|
+
},
|
|
151
188
|
];
|
|
152
189
|
this.gateColumns = [
|
|
153
190
|
{ dataField: 'code', caption: l('Code'), width: 80 },
|
|
@@ -189,6 +226,12 @@ export class HitEntryWeighingFormComponent {
|
|
|
189
226
|
}
|
|
190
227
|
});
|
|
191
228
|
}
|
|
229
|
+
else {
|
|
230
|
+
// Yeni kayıt: varsayılan giriş tarihini şu anki tarih/saat olarak ayarla
|
|
231
|
+
this.setDefaultEntryDateTime();
|
|
232
|
+
// Yeni kayıt: kullanıcının varsayılan kapısını yükle
|
|
233
|
+
this.loadDefaultGate();
|
|
234
|
+
}
|
|
192
235
|
}
|
|
193
236
|
get weighingStep() {
|
|
194
237
|
const status = this.record?.u_Status;
|
|
@@ -267,7 +310,18 @@ export class HitEntryWeighingFormComponent {
|
|
|
267
310
|
this.entryTypeCode = r.u_EntryType ?? r.u_EntryType ?? '';
|
|
268
311
|
this.driverFullName = r.u_Driver ?? r.u_Driver ?? '';
|
|
269
312
|
this.tcNo = r.u_TcNo ?? r.u_TcNo ?? '';
|
|
270
|
-
|
|
313
|
+
// TC No veya DriverCode ile CarrierPerson kaydından isTcCitizen bilgisini çözümle
|
|
314
|
+
const carrierCode = this.tcNo || this.driverCode;
|
|
315
|
+
if (carrierCode) {
|
|
316
|
+
this.carrierPersonService.get(carrierCode).subscribe({
|
|
317
|
+
next: carrier => {
|
|
318
|
+
if (carrier) {
|
|
319
|
+
this.isTcCitizen = carrier.u_TcVtndsiMi !== 'N';
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
error: () => { },
|
|
323
|
+
});
|
|
324
|
+
}
|
|
271
325
|
// Lookup alanlarının görünen isimlerini çözümle
|
|
272
326
|
this.resolveDisplayNames();
|
|
273
327
|
}
|
|
@@ -287,9 +341,6 @@ export class HitEntryWeighingFormComponent {
|
|
|
287
341
|
if (this.accountCode) {
|
|
288
342
|
lookups['accounts'] = this.loadAccounts();
|
|
289
343
|
}
|
|
290
|
-
if (this.driverCode) {
|
|
291
|
-
lookups['drivers'] = this.loadDrivers();
|
|
292
|
-
}
|
|
293
344
|
if (this.stockCode) {
|
|
294
345
|
lookups['stockItems'] = this.loadStockItems();
|
|
295
346
|
}
|
|
@@ -320,11 +371,6 @@ export class HitEntryWeighingFormComponent {
|
|
|
320
371
|
if (account)
|
|
321
372
|
this.accountTitle = account.title;
|
|
322
373
|
}
|
|
323
|
-
if (results.drivers) {
|
|
324
|
-
const driver = results.drivers.find((d) => d.code === this.driverCode);
|
|
325
|
-
if (driver)
|
|
326
|
-
this.driverName = driver.name;
|
|
327
|
-
}
|
|
328
374
|
if (results.stockItems) {
|
|
329
375
|
const item = results.stockItems.find((i) => i.code === this.stockCode);
|
|
330
376
|
if (item)
|
|
@@ -367,6 +413,7 @@ export class HitEntryWeighingFormComponent {
|
|
|
367
413
|
return;
|
|
368
414
|
this.driverCode = e.code;
|
|
369
415
|
this.driverName = e.name;
|
|
416
|
+
this.isTcCitizen = e.u_TcVtndsiMi !== 'N';
|
|
370
417
|
}
|
|
371
418
|
onStockItemSelected(e) {
|
|
372
419
|
if (!e)
|
|
@@ -391,22 +438,82 @@ export class HitEntryWeighingFormComponent {
|
|
|
391
438
|
onWaybillSelected(e) {
|
|
392
439
|
if (!e)
|
|
393
440
|
return;
|
|
394
|
-
this.waybillNo = e.docNum
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
441
|
+
this.waybillNo = e.u_EFATNO?.toString() ?? e.docNum?.toString() ?? '';
|
|
442
|
+
// docEntry yoksa sadece waybillNo set et
|
|
443
|
+
if (!e.docEntry)
|
|
444
|
+
return;
|
|
445
|
+
// Kaynak tipi: StockTransfer'da 'fromWarehouse' alanı vardır, PurchaseDeliveryNote'da yoktur
|
|
446
|
+
const isStockTransfer = 'fromWarehouse' in e;
|
|
447
|
+
this.isWaybillLoading = true;
|
|
448
|
+
const onNext = (doc) => this.applyWaybillAutoFill(doc);
|
|
449
|
+
const onError = () => { this.isWaybillLoading = false; };
|
|
450
|
+
if (isStockTransfer) {
|
|
451
|
+
this.stockTransferService.get(e.docEntry).subscribe({ next: onNext, error: onError });
|
|
452
|
+
}
|
|
453
|
+
else {
|
|
454
|
+
this.purchaseDeliveryNoteService.get(e.docEntry).subscribe({ next: onNext, error: onError });
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
/** İrsaliye detayından Araç & Sürücü bilgilerini otomatik doldurur */
|
|
458
|
+
applyWaybillAutoFill(doc) {
|
|
459
|
+
this.isWaybillLoading = false;
|
|
460
|
+
if (!doc)
|
|
461
|
+
return;
|
|
462
|
+
// Cari hesap
|
|
463
|
+
if (doc.cardCode) {
|
|
464
|
+
this.accountCode = doc.cardCode;
|
|
465
|
+
this.accountTitle = doc.cardName ?? '';
|
|
466
|
+
}
|
|
467
|
+
// Çıkış yeri (sadece Stok Naklinde mevcut)
|
|
468
|
+
if (doc.fromWarehouse) {
|
|
469
|
+
this.departureLocation = doc.fromWarehouse;
|
|
470
|
+
}
|
|
471
|
+
// Açıklama
|
|
472
|
+
if (doc.comments) {
|
|
473
|
+
this.description = doc.comments;
|
|
474
|
+
}
|
|
475
|
+
// Araç plakası
|
|
476
|
+
const plate = doc.u_AracPlakasi?.trim() ?? '';
|
|
477
|
+
if (plate) {
|
|
478
|
+
this.truckPlateCode = plate;
|
|
479
|
+
this.truckPlateNo = plate;
|
|
398
480
|
}
|
|
399
|
-
|
|
400
|
-
|
|
481
|
+
// Dorse plakası
|
|
482
|
+
const dorsePlate = doc.u_DorsePlakalar?.trim() ?? '';
|
|
483
|
+
this.trailerPlateCode = dorsePlate;
|
|
484
|
+
this.trailerPlateNo = dorsePlate;
|
|
485
|
+
// Sürücü adı soyadı birleştirilerek driverFullName alanına basılır
|
|
486
|
+
const ad = doc.u_SoforAd?.trim() ?? '';
|
|
487
|
+
const soyad = doc.u_SoforSoyadi?.trim() ?? '';
|
|
488
|
+
const fullName = [ad, soyad].filter(Boolean).join(' ');
|
|
489
|
+
if (fullName) {
|
|
490
|
+
this.driverFullName = fullName;
|
|
401
491
|
}
|
|
402
|
-
|
|
403
|
-
|
|
492
|
+
// Sürücü TC kimlik no
|
|
493
|
+
const kimlik = doc.u_SoforKimlik?.trim() ?? '';
|
|
494
|
+
this.tcNo = kimlik;
|
|
495
|
+
this.isTcCitizen = this.validateTCKN(kimlik);
|
|
496
|
+
// TC No üzerinden CarrierPerson kaydından driverCode çözümle
|
|
497
|
+
if (kimlik) {
|
|
498
|
+
this.carrierPersonService.get(kimlik).subscribe({
|
|
499
|
+
next: carrier => {
|
|
500
|
+
if (carrier) {
|
|
501
|
+
this.driverCode = carrier.code;
|
|
502
|
+
this.isTcCitizen = carrier.u_TcVtndsiMi !== 'N';
|
|
503
|
+
}
|
|
504
|
+
},
|
|
505
|
+
error: () => { },
|
|
506
|
+
});
|
|
404
507
|
}
|
|
405
|
-
|
|
406
|
-
|
|
508
|
+
else {
|
|
509
|
+
this.driverCode = '';
|
|
510
|
+
}
|
|
511
|
+
// Stok kodu — satırlarda tekil kalem varsa doldur
|
|
512
|
+
const lines = doc.stockTransferLines ?? [];
|
|
513
|
+
const uniqueCodes = [...new Set(lines.map((l) => l.itemCode).filter((c) => !!c))];
|
|
407
514
|
if (uniqueCodes.length === 1) {
|
|
408
515
|
this.stockCode = uniqueCodes[0];
|
|
409
|
-
this.stockName = lines.find(l => l.itemCode === uniqueCodes[0])?.itemDescription ?? '';
|
|
516
|
+
this.stockName = lines.find((l) => l.itemCode === uniqueCodes[0])?.itemDescription ?? '';
|
|
410
517
|
}
|
|
411
518
|
else {
|
|
412
519
|
this.stockCode = '';
|
|
@@ -423,7 +530,7 @@ export class HitEntryWeighingFormComponent {
|
|
|
423
530
|
});
|
|
424
531
|
return;
|
|
425
532
|
}
|
|
426
|
-
if (this.
|
|
533
|
+
if (this.entryTypeMalGC && !this.stockCode) {
|
|
427
534
|
this.confirmation.warn(this.localizationService.instant('Kadooglu::StockCodeRequired'), '', {
|
|
428
535
|
hideYesBtn: true,
|
|
429
536
|
cancelText: this.localizationService.instant('Kadooglu::Cancel'),
|
|
@@ -451,67 +558,79 @@ export class HitEntryWeighingFormComponent {
|
|
|
451
558
|
});
|
|
452
559
|
return;
|
|
453
560
|
}
|
|
454
|
-
const
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
const
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
561
|
+
const confirmMsgKey = this.weighingMode === 'first'
|
|
562
|
+
? 'Kadooglu::FirstWeighingConfirmMessage'
|
|
563
|
+
: 'Kadooglu::LastWeighingConfirmMessage';
|
|
564
|
+
this.confirmation
|
|
565
|
+
.warn(this.localizationService.instant(confirmMsgKey, String(this.record?.u_Plate || this.record?.docNum || '')), '', {
|
|
566
|
+
yesText: this.localizationService.instant('Kadooglu::Yes'),
|
|
567
|
+
cancelText: this.localizationService.instant('Kadooglu::No'),
|
|
568
|
+
})
|
|
569
|
+
.subscribe(status => {
|
|
570
|
+
if (status !== 'confirm')
|
|
571
|
+
return;
|
|
572
|
+
const doWeigh$ = this.service.doWeighing(docEntry, {
|
|
573
|
+
weighingValue: this.fixedScaleValue,
|
|
574
|
+
operatorCode: ''
|
|
575
|
+
});
|
|
576
|
+
// İLK tartımda form alanlarını (stok kodu, irsaliye vb.) önce kaydet, sonra tartım yap.
|
|
577
|
+
// SON tartımda sadece tartım yap — diğer alanlar ilk tartımdan sonra değiştirilemez.
|
|
578
|
+
let obs$;
|
|
579
|
+
if (this.weighingMode === 'first') {
|
|
580
|
+
const now = new Date();
|
|
581
|
+
const currentDate = now.toISOString().split('T')[0];
|
|
582
|
+
const currentTime = now.toTimeString().split(' ')[0];
|
|
583
|
+
const dto = {
|
|
584
|
+
u_GateCode: this.gateCode || undefined,
|
|
585
|
+
u_EntryDate: this.entryDate || currentDate,
|
|
586
|
+
u_EntryTime: this.entryTime || currentTime,
|
|
587
|
+
u_ExitDate: this.exitDate || null,
|
|
588
|
+
u_ExitTime: this.exitTime || undefined,
|
|
589
|
+
u_Plate: this.truckPlateCode,
|
|
590
|
+
u_DorsePlate: this.trailerPlateCode || undefined,
|
|
591
|
+
u_EntryType: this.entryTypeCode || undefined,
|
|
592
|
+
u_Description: this.description || undefined,
|
|
593
|
+
u_Driver: this.driverFullName || undefined,
|
|
594
|
+
u_DriverCode: this.driverCode || undefined,
|
|
595
|
+
u_TcNo: this.tcNo || undefined,
|
|
596
|
+
u_CardCode: this.accountCode || undefined,
|
|
597
|
+
u_ScaleCode: this.scaleCode || undefined,
|
|
598
|
+
u_ItemCode: this.stockCode || undefined,
|
|
599
|
+
u_DespatchAdviceNo: this.waybillNo || undefined,
|
|
600
|
+
u_DespatchExist: 'N',
|
|
601
|
+
u_ShipTo: this.arrivalLocation || undefined,
|
|
602
|
+
u_ContainerNo: this.containerNo || undefined,
|
|
603
|
+
u_ShipPlace: this.departureLocation || undefined,
|
|
604
|
+
};
|
|
605
|
+
obs$ = this.service.update(docEntry, dto).pipe(switchMap(() => doWeigh$));
|
|
606
|
+
}
|
|
607
|
+
else {
|
|
608
|
+
obs$ = doWeigh$;
|
|
609
|
+
}
|
|
610
|
+
this.isSaving = true;
|
|
611
|
+
obs$.subscribe({
|
|
612
|
+
next: () => {
|
|
613
|
+
// Tartım değerlerini weighingMode'a göre güncelle
|
|
614
|
+
if (this.weighingMode === 'first') {
|
|
615
|
+
this.firstWeighingValue = this.fixedScaleValue;
|
|
616
|
+
}
|
|
617
|
+
else {
|
|
618
|
+
this.lastWeighingValue = this.fixedScaleValue;
|
|
619
|
+
}
|
|
620
|
+
this.isSaving = false;
|
|
621
|
+
this.toaster.success(this.weighingMode === 'first'
|
|
622
|
+
? this.localizationService.instant('Kadooglu::FirstWeighingSaved')
|
|
623
|
+
: this.localizationService.instant('Kadooglu::LastWeighingSaved'));
|
|
624
|
+
// Kısa bir gecikme ile listeye dön (kullanıcı progress bar değişimini görsün)
|
|
625
|
+
setTimeout(() => {
|
|
626
|
+
this.router.navigate(['/kadooglu/entry-weighing']);
|
|
627
|
+
}, this.weighingMode == 'last' ? 8000 : 1500);
|
|
628
|
+
},
|
|
629
|
+
error: () => {
|
|
630
|
+
this.isSaving = false;
|
|
631
|
+
this.toaster.error(this.localizationService.instant('Kadooglu::WeighingRecordError'));
|
|
632
|
+
},
|
|
633
|
+
});
|
|
515
634
|
});
|
|
516
635
|
return;
|
|
517
636
|
}
|
|
@@ -590,6 +709,26 @@ export class HitEntryWeighingFormComponent {
|
|
|
590
709
|
});
|
|
591
710
|
});
|
|
592
711
|
}
|
|
712
|
+
barkodYazdir() {
|
|
713
|
+
const docEntry = this.getDocEntry(this.record);
|
|
714
|
+
if (!docEntry)
|
|
715
|
+
return;
|
|
716
|
+
this.service.getWeighingSlip(docEntry).subscribe({
|
|
717
|
+
next: response => {
|
|
718
|
+
const byteChars = atob(response.base64);
|
|
719
|
+
const byteNumbers = new Array(byteChars.length);
|
|
720
|
+
for (let i = 0; i < byteChars.length; i++) {
|
|
721
|
+
byteNumbers[i] = byteChars.charCodeAt(i);
|
|
722
|
+
}
|
|
723
|
+
const blob = new Blob([new Uint8Array(byteNumbers)], { type: 'application/pdf' });
|
|
724
|
+
const url = URL.createObjectURL(blob);
|
|
725
|
+
window.open(url, '_blank');
|
|
726
|
+
},
|
|
727
|
+
error: () => {
|
|
728
|
+
alert('Barkod / kantar fişi oluşturulurken bir hata oluştu.');
|
|
729
|
+
},
|
|
730
|
+
});
|
|
731
|
+
}
|
|
593
732
|
sabitle() {
|
|
594
733
|
this.fixedScaleValue = this.currentScaleValue;
|
|
595
734
|
}
|
|
@@ -609,6 +748,9 @@ export class HitEntryWeighingFormComponent {
|
|
|
609
748
|
this.isScaleReconnecting = true;
|
|
610
749
|
this.currentScaleValue = null;
|
|
611
750
|
}));
|
|
751
|
+
this.scaleSub.add(this.scaleSignalRService.reconnected$.subscribe(() => {
|
|
752
|
+
this.isScaleReconnecting = false;
|
|
753
|
+
}));
|
|
612
754
|
this.scaleSub.add(this.scaleSignalRService.connectionLost$.subscribe(() => {
|
|
613
755
|
this.isScaleConnecting = false;
|
|
614
756
|
this.isScaleReconnecting = false;
|
|
@@ -634,6 +776,33 @@ export class HitEntryWeighingFormComponent {
|
|
|
634
776
|
this.scaleSignalRService.stop(this.scaleId)
|
|
635
777
|
.catch(e => console.error('SignalR kapatma hatası:', e));
|
|
636
778
|
}
|
|
779
|
+
/** Yeni kayıt için giriş tarihini şu anki tarih/saat ile doldurur */
|
|
780
|
+
setDefaultEntryDateTime() {
|
|
781
|
+
const now = new Date();
|
|
782
|
+
this.entryDate = now.toISOString().split('T')[0];
|
|
783
|
+
// buildDateTime sayısal format bekler: ör. 830 = 08:30, 1430 = 14:30
|
|
784
|
+
this.entryTime = String(now.getHours() * 100 + now.getMinutes());
|
|
785
|
+
}
|
|
786
|
+
/** Yeni kayıt için kullanıcının varsayılan kapısını yükler */
|
|
787
|
+
loadDefaultGate() {
|
|
788
|
+
this.userGateService.getMyDefaultGateCode().subscribe({
|
|
789
|
+
next: (defaultGateCode) => {
|
|
790
|
+
if (defaultGateCode) {
|
|
791
|
+
this.gateCode = defaultGateCode;
|
|
792
|
+
// Kapı adını çözümle
|
|
793
|
+
this.gateService.get(defaultGateCode).subscribe({
|
|
794
|
+
next: (gate) => {
|
|
795
|
+
if (gate) {
|
|
796
|
+
this.gateName = gate.name;
|
|
797
|
+
}
|
|
798
|
+
},
|
|
799
|
+
error: () => { },
|
|
800
|
+
});
|
|
801
|
+
}
|
|
802
|
+
},
|
|
803
|
+
error: () => { },
|
|
804
|
+
});
|
|
805
|
+
}
|
|
637
806
|
goBack() {
|
|
638
807
|
this.router.navigate(['/kadooglu/entry-weighing']);
|
|
639
808
|
}
|
|
@@ -653,10 +822,10 @@ export class HitEntryWeighingFormComponent {
|
|
|
653
822
|
return d11 === d[10];
|
|
654
823
|
}
|
|
655
824
|
}
|
|
656
|
-
HitEntryWeighingFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitEntryWeighingFormComponent, deps: [{ token: i1.HitEntryWeighingService }, { token: i2.HitStockTransferService }, { token: i3.ConfirmationService }, { token:
|
|
657
|
-
HitEntryWeighingFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitEntryWeighingFormComponent, selector: "lib-hit-entry-weighing-form", ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n [showDateFilter]=\"true\"\r\n [defaultDateFrom]=\"waybillDefaultDateFrom\"\r\n [defaultDateTo]=\"waybillDefaultDateTo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n\r\n <!-- Grup 1: Terazi -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary d-flex align-items-center justify-content-between\">\r\n <span>\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n </span>\r\n <span *ngIf=\"weighingMode\" class=\"badge\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"row g-3 align-items-stretch\">\r\n\r\n <!-- Sol: Canl\u0131 Tart\u0131m -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card bg-light h-100\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1 fw-semibold text-uppercase\">\r\n {{ 'Kadooglu::LiveWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"isScaleConnecting || isScaleReconnecting\" class=\"my-2\">\r\n <div class=\"spinner-border text-secondary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{ (isScaleReconnecting ? 'Kadooglu::Reconnecting' : 'Kadooglu::Connecting') | abpLocalization }}</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isScaleConnecting && !isScaleReconnecting && !scaleConnectionFailed\" style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div *ngIf=\"scaleConnectionFailed\" class=\"text-center py-1\">\r\n <i class=\"fa fa-chain-broken fa-2x text-secondary mb-2 d-block\"></i>\r\n <span class=\"text-secondary fw-semibold d-block\" style=\"font-size: 0.95rem; line-height: 1.5;\">\r\n {{ 'Kadooglu::ScaleConnectionFailedInline' | abpLocalization }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Orta: Ak\u0131\u015F oku -->\r\n <div class=\"col-md-2 d-flex align-items-center justify-content-center\">\r\n <i class=\"fa fa-arrow-right fa-2x text-muted\"></i>\r\n </div>\r\n\r\n <!-- Sa\u011F: Sabitlenmi\u015F De\u011Fer + Sabitle butonu -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card h-100\"\r\n [ngClass]=\"fixedScaleValue != null ? 'border-success' : 'bg-light'\"\r\n [style.background-color]=\"fixedScaleValue != null ? 'rgba(25,135,84,0.08)' : ''\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"small mb-1 fw-semibold text-uppercase\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : 'text-muted'\">\r\n {{ 'Kadooglu::FixedValue' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : ''\">\r\n {{ fixedScaleValue != null ? (fixedScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-success btn-lg w-100 mt-2\"\r\n [disabled]=\"currentScaleValue == null\"\r\n (click)=\"sabitle()\">\r\n <i class=\"fa fa-lock me-2\"></i>\r\n {{ 'Kadooglu::Fix' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Tart\u0131m Kay\u0131tlar\u0131 -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-history me-2\"></i>{{ 'Kadooglu::WeighingRecords' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #0d6efd; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::FirstWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #6f42c1; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::LastWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece weighingStep===3'te) -->\r\n <div class=\"col-md-4\" *ngIf=\"weighingStep === 3 && netWeight != null\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::NetWeight' | abpLocalization }}\r\n </div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Tam geni\u015Flik: Tart\u0131m Sonu\u00E7lar\u0131 -->\r\n <div class=\"col-12\">\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingResults' | abpLocalization }}\r\n </div>\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i8.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i8.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i9.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "showDateFilter", "defaultDateFrom", "defaultDateTo", "editingData"], outputs: ["selected"] }, { kind: "component", type: i10.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i10.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i10.DxTextAreaComponent, selector: "dx-text-area", inputs: ["accessKey", "activeStateEnabled", "autoResizeEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "maxHeight", "maxLength", "minHeight", "name", "placeholder", "readOnly", "rtlEnabled", "spellcheck", "stylingMode", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "autoResizeEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maxHeightChange", "maxLengthChange", "minHeightChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i10.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "enableThreeStateBehavior", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "enableThreeStateBehaviorChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] });
|
|
825
|
+
HitEntryWeighingFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitEntryWeighingFormComponent, deps: [{ token: i1.HitEntryWeighingService }, { token: i2.HitStockTransferService }, { token: i3.HitPurchaseDeliveryNoteService }, { token: i4.HitCarrierPersonService }, { token: i5.HitUserGateService }, { token: i6.HitGateService }, { token: i7.ConfirmationService }, { token: i7.ToasterService }, { token: i8.ActivatedRoute }, { token: i8.Router }, { token: i9.LocalizationService }, { token: i10.ScaleSignalRService }], target: i0.ɵɵFactoryTarget.Component });
|
|
826
|
+
HitEntryWeighingFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitEntryWeighingFormComponent, selector: "lib-hit-entry-weighing-form", ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::WaybillNumber' | abpLocalization }}\r\n <i *ngIf=\"isWaybillLoading\" class=\"fa fa-spinner fa-spin ms-1 text-primary\"></i>\r\n </label>\r\n <hit-lookup-select\r\n [tabs]=\"waybillTabs\"\r\n [editingData]=\"waybillNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button *ngIf=\"isUpdateMode\" class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n\r\n <!-- Grup 1: Terazi -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary d-flex align-items-center justify-content-between\">\r\n <span>\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n </span>\r\n <span *ngIf=\"weighingMode\" class=\"badge\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"row g-3 align-items-stretch\">\r\n\r\n <!-- Sol: Canl\u0131 Tart\u0131m -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card bg-light h-100\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1 fw-semibold text-uppercase\">\r\n {{ 'Kadooglu::LiveWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"isScaleConnecting || isScaleReconnecting\" class=\"my-2\">\r\n <div class=\"spinner-border text-secondary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{ (isScaleReconnecting ? 'Kadooglu::Reconnecting' : 'Kadooglu::Connecting') | abpLocalization }}</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isScaleConnecting && !isScaleReconnecting && !scaleConnectionFailed\" style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div *ngIf=\"scaleConnectionFailed\" class=\"text-center py-1\">\r\n <i class=\"fa fa-chain-broken fa-2x text-secondary mb-2 d-block\"></i>\r\n <span class=\"text-secondary fw-semibold d-block\" style=\"font-size: 0.95rem; line-height: 1.5;\">\r\n {{ 'Kadooglu::ScaleConnectionFailedInline' | abpLocalization }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Orta: Ak\u0131\u015F oku -->\r\n <div class=\"col-md-2 d-flex align-items-center justify-content-center\">\r\n <i class=\"fa fa-arrow-right fa-2x text-muted\"></i>\r\n </div>\r\n\r\n <!-- Sa\u011F: Sabitlenmi\u015F De\u011Fer + Sabitle butonu -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card h-100\"\r\n [ngClass]=\"fixedScaleValue != null ? 'border-success' : 'bg-light'\"\r\n [style.background-color]=\"fixedScaleValue != null ? 'rgba(25,135,84,0.08)' : ''\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"small mb-1 fw-semibold text-uppercase\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : 'text-muted'\">\r\n {{ 'Kadooglu::FixedValue' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : ''\">\r\n {{ fixedScaleValue != null ? (fixedScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-success btn-lg w-100 mt-2\"\r\n [disabled]=\"currentScaleValue == null\"\r\n (click)=\"sabitle()\">\r\n <i class=\"fa fa-lock me-2\"></i>\r\n {{ 'Kadooglu::Fix' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Tart\u0131m Kay\u0131tlar\u0131 -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-history me-2\"></i>{{ 'Kadooglu::WeighingRecords' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #0d6efd; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::FirstWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #6f42c1; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::LastWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece weighingStep===3'te) -->\r\n <div class=\"col-md-4\" *ngIf=\"weighingStep === 3 && netWeight != null\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::NetWeight' | abpLocalization }}\r\n </div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Tam geni\u015Flik: Tart\u0131m Sonu\u00E7lar\u0131 -->\r\n <div class=\"col-12\">\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingResults' | abpLocalization }}\r\n </div>\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <button\r\n *ngIf=\"record\"\r\n class=\"btn btn-info\"\r\n type=\"button\"\r\n (click)=\"barkodYazdir()\">\r\n <i class=\"fa fa-print me-1\" aria-hidden=\"true\"></i> Barkod Yazd\u0131r\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i12.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i12.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i13.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "showDateFilter", "defaultDateFrom", "defaultDateTo", "tabs", "editingData"], outputs: ["selected"] }, { kind: "component", type: i14.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i14.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i14.DxTextAreaComponent, selector: "dx-text-area", inputs: ["accessKey", "activeStateEnabled", "autoResizeEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "maxHeight", "maxLength", "minHeight", "name", "placeholder", "readOnly", "rtlEnabled", "spellcheck", "stylingMode", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "autoResizeEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maxHeightChange", "maxLengthChange", "minHeightChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i14.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "enableThreeStateBehavior", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "enableThreeStateBehaviorChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i11.DecimalPipe, name: "number" }, { kind: "pipe", type: i11.DatePipe, name: "date" }, { kind: "pipe", type: i9.LocalizationPipe, name: "abpLocalization" }] });
|
|
658
827
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitEntryWeighingFormComponent, decorators: [{
|
|
659
828
|
type: Component,
|
|
660
|
-
args: [{ selector: 'lib-hit-entry-weighing-form', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n [showDateFilter]=\"true\"\r\n [defaultDateFrom]=\"waybillDefaultDateFrom\"\r\n [defaultDateTo]=\"waybillDefaultDateTo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n\r\n <!-- Grup 1: Terazi -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary d-flex align-items-center justify-content-between\">\r\n <span>\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n </span>\r\n <span *ngIf=\"weighingMode\" class=\"badge\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"row g-3 align-items-stretch\">\r\n\r\n <!-- Sol: Canl\u0131 Tart\u0131m -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card bg-light h-100\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1 fw-semibold text-uppercase\">\r\n {{ 'Kadooglu::LiveWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"isScaleConnecting || isScaleReconnecting\" class=\"my-2\">\r\n <div class=\"spinner-border text-secondary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{ (isScaleReconnecting ? 'Kadooglu::Reconnecting' : 'Kadooglu::Connecting') | abpLocalization }}</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isScaleConnecting && !isScaleReconnecting && !scaleConnectionFailed\" style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div *ngIf=\"scaleConnectionFailed\" class=\"text-center py-1\">\r\n <i class=\"fa fa-chain-broken fa-2x text-secondary mb-2 d-block\"></i>\r\n <span class=\"text-secondary fw-semibold d-block\" style=\"font-size: 0.95rem; line-height: 1.5;\">\r\n {{ 'Kadooglu::ScaleConnectionFailedInline' | abpLocalization }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Orta: Ak\u0131\u015F oku -->\r\n <div class=\"col-md-2 d-flex align-items-center justify-content-center\">\r\n <i class=\"fa fa-arrow-right fa-2x text-muted\"></i>\r\n </div>\r\n\r\n <!-- Sa\u011F: Sabitlenmi\u015F De\u011Fer + Sabitle butonu -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card h-100\"\r\n [ngClass]=\"fixedScaleValue != null ? 'border-success' : 'bg-light'\"\r\n [style.background-color]=\"fixedScaleValue != null ? 'rgba(25,135,84,0.08)' : ''\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"small mb-1 fw-semibold text-uppercase\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : 'text-muted'\">\r\n {{ 'Kadooglu::FixedValue' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : ''\">\r\n {{ fixedScaleValue != null ? (fixedScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-success btn-lg w-100 mt-2\"\r\n [disabled]=\"currentScaleValue == null\"\r\n (click)=\"sabitle()\">\r\n <i class=\"fa fa-lock me-2\"></i>\r\n {{ 'Kadooglu::Fix' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Tart\u0131m Kay\u0131tlar\u0131 -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-history me-2\"></i>{{ 'Kadooglu::WeighingRecords' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #0d6efd; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::FirstWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #6f42c1; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::LastWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece weighingStep===3'te) -->\r\n <div class=\"col-md-4\" *ngIf=\"weighingStep === 3 && netWeight != null\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::NetWeight' | abpLocalization }}\r\n </div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Tam geni\u015Flik: Tart\u0131m Sonu\u00E7lar\u0131 -->\r\n <div class=\"col-12\">\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingResults' | abpLocalization }}\r\n </div>\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n" }]
|
|
661
|
-
}], ctorParameters: function () { return [{ type: i1.HitEntryWeighingService }, { type: i2.HitStockTransferService }, { type: i3.ConfirmationService }, { type:
|
|
662
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFJN0QsT0FBTyxFQUE0QixRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUF1QjNDLE1BQU0sT0FBTyw2QkFBNkI7SUFnR3hDLFlBQ1UsT0FBZ0MsRUFDaEMsb0JBQTZDLEVBQzdDLFlBQWlDLEVBQ2pDLE9BQXVCLEVBQ3ZCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxtQkFBd0MsRUFDeEMsbUJBQXdDO1FBUHhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUF2R2xE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QU8sS0FBSyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEYsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNELE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDOzswSEF4cUJVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLG1FQzVCMUMsa3ppQ0F3bkJBOzJGRDVsQmEsNkJBQTZCO2tCQUp6QyxTQUFTOytCQUNFLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFNjYWxlU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zY2FsZS1zaWduYWxyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIaXRFbnRyeVdlaWdoaW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIaXRTdG9ja1RyYW5zZmVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtc3RvY2stdHJhbnNmZXIvaGl0LXN0b2NrLXRyYW5zZmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9ja1RyYW5zZmVyIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1zdG9jay10cmFuc2Zlci9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIEVudHJ5V2VpZ2hpbmcsXHJcbiAgRW50cnlXZWlnaGluZ0FjY291bnQsXHJcbiAgRW50cnlXZWlnaGluZ0RvY3VtZW50LFxyXG4gIEVudHJ5V2VpZ2hpbmdEcml2ZXIsXHJcbiAgRW50cnlXZWlnaGluZ0dhdGUsXHJcbiAgRW50cnlXZWlnaGluZ1NjYWxlLFxyXG4gIEVudHJ5V2VpZ2hpbmdTdG9ja0l0ZW0sXHJcbiAgRW50cnlXZWlnaGluZ1RyYWlsZXJQbGF0ZSxcclxuICBFbnRyeVdlaWdoaW5nVHJ1Y2tQbGF0ZSxcclxuICBFbnRyeVdlaWdoaW5nVmVoaWNsZVR5cGUsXHJcbiAgU2F2ZUVudHJ5V2VpZ2hpbmdEdG8sXHJcbn0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1lbnRyeS13ZWlnaGluZy9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oaXQtZW50cnktd2VpZ2hpbmctZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIaXRFbnRyeVdlaWdoaW5nRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICByZWNvcmQ6IEVudHJ5V2VpZ2hpbmcgfCBudWxsID0gbnVsbDtcclxuICBpc1VwZGF0ZU1vZGUgPSBmYWxzZTtcclxuXHJcbiAgLy8gV2l6YXJkIHBoYXNlOiAxID0gQXJhw6cgJiBCZWxnZSwgMiA9IFRhcnTEsW0gUGFuZWxpXHJcbiAgZm9ybVBoYXNlOiAxIHwgMiA9IDE7XHJcbiAgLy8gV2VpZ2hpbmcgbW9kZSBmcm9tIHF1ZXJ5IHBhcmFtOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCAobnVsbCA9IG5vcm1hbCBuZXcvZWRpdClcclxuICB3ZWlnaGluZ01vZGU6ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gTG9va3VwIGxvYWRlciBmdW5jdGlvbnMgKGNhbGxlZCBsYXppbHkgd2hlbiBtb2RhbCBvcGVucylcclxuICBsb2FkRG9jdW1lbnRzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldERvY3VtZW50cygpO1xyXG4gIGxvYWRTY2FsZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0U2NhbGVzKCk7XHJcbiAgbG9hZFRydWNrUGxhdGVzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldFRydWNrUGxhdGVzKCk7XHJcbiAgbG9hZFRyYWlsZXJQbGF0ZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0VHJhaWxlclBsYXRlcygpO1xyXG4gIGxvYWREcml2ZXJzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldERyaXZlcnMoKTtcclxuICBsb2FkQWNjb3VudHMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0QWNjb3VudHMoKTtcclxuICBsb2FkU3RvY2tJdGVtcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRTdG9ja0l0ZW1zKCk7XHJcbiAgd2F5YmlsbERlZmF1bHREYXRlRnJvbTogRGF0ZSA9ICgoKSA9PiB7IGNvbnN0IGQgPSBuZXcgRGF0ZSgpOyBkLnNldERhdGUoZC5nZXREYXRlKCkgLSAzKTsgcmV0dXJuIGQ7IH0pKCk7XHJcbiAgd2F5YmlsbERlZmF1bHREYXRlVG86IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIGxvYWRXYXliaWxscyA9IChwYXJhbXM/OiBhbnkpID0+IHRoaXMuc3RvY2tUcmFuc2ZlclNlcnZpY2UuZ2V0TGlzdChwYXJhbXMpO1xyXG4gIGxvYWRHYXRlcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRHYXRlcygpO1xyXG4gIGxvYWRWZWhpY2xlVHlwZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0VmVoaWNsZVR5cGVzKCk7XHJcblxyXG4gIC8vIENvbHVtbiBjb25maWdzXHJcbiAgZG9jdW1lbnRDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIHNjYWxlQ29sdW1uczogYW55W10gPSBbXTtcclxuICB0cnVja1BsYXRlQ29sdW1uczogYW55W10gPSBbXTtcclxuICB0cmFpbGVyUGxhdGVDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIGRyaXZlckNvbHVtbnM6IGFueVtdID0gW107XHJcbiAgYWNjb3VudENvbHVtbnM6IGFueVtdID0gW107XHJcbiAgc3RvY2tJdGVtQ29sdW1uczogYW55W10gPSBbXTtcclxuICB3YXliaWxsQ29sdW1uczogYW55W10gPSBbXTtcclxuICBnYXRlQ29sdW1uczogYW55W10gPSBbXTtcclxuICB2ZWhpY2xlVHlwZUNvbHVtbnM6IGFueVtdID0gW107XHJcblxyXG4gIC8vIEZvcm0gZmllbGRzXHJcbiAgZG9jdW1lbnRDb2RlID0gJyc7XHJcbiAgZG9jdW1lbnROYW1lID0gJyc7XHJcbiAgc2NhbGVDb2RlID0gJzEnO1xyXG4gIHNjYWxlTmFtZSA9ICdLYW50YXIgMSc7XHJcbiAgYWNjb3VudENvZGUgPSAnJztcclxuICBhY2NvdW50VGl0bGUgPSAnJztcclxuICB0cnVja1BsYXRlQ29kZSA9ICcnO1xyXG4gIHRydWNrUGxhdGVObyA9ICcnO1xyXG4gIHRyYWlsZXJQbGF0ZUNvZGUgPSAnJztcclxuICB0cmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gIGRyaXZlckNvZGUgPSAnJztcclxuICBkcml2ZXJOYW1lID0gJyc7XHJcbiAgc3RvY2tDb2RlID0gJyc7XHJcbiAgc3RvY2tOYW1lID0gJyc7XHJcbiAgY29udGFpbmVyTm8gPSAnJztcclxuICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gIHdheWJpbGxObyA9ICcnO1xyXG4gIGRlcGFydHVyZUxvY2F0aW9uID0gJyc7XHJcbiAgYXJyaXZhbExvY2F0aW9uID0gJ0ZhYnJpa2EnO1xyXG5cclxuICAvLyBaWlpfVEVTVDIgeWVuaSBhbGFubGFyXHJcbiAgZ2F0ZUNvZGUgPSAnJztcclxuICBnYXRlTmFtZSA9ICcnO1xyXG4gIGVudHJ5RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgZW50cnlUaW1lID0gJyc7XHJcbiAgZXhpdERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIGV4aXRUaW1lID0gJyc7XHJcbiAgZW50cnlUeXBlQ29kZSA9ICcnO1xyXG4gIGVudHJ5VHlwZU5hbWUgPSAnJztcclxuICBkcml2ZXJGdWxsTmFtZSA9ICcnO1xyXG4gIHRjTm8gPSAnJztcclxuICBpc1RjQ2l0aXplbiA9IHRydWU7XHJcblxyXG4gIC8vIFRhcnTEsW0gYmlsZ2lsZXJpIChyZWFkb25seSlcclxuICBmaXJzdE9wZXJhdG9yQ29kZSA9ICcnO1xyXG4gIGZpcnN0V2VpZ2hpbmdWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgbGFzdE9wZXJhdG9yQ29kZSA9ICcnO1xyXG4gIGxhc3RXZWlnaGluZ1ZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBjdXJyZW50U2NhbGVWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgZml4ZWRTY2FsZVZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgaXNTYXZpbmcgPSBmYWxzZTtcclxuICBpc1dlaWdoaW5nID0gZmFsc2U7XHJcbiAgZW50cnlUeXBlVHJ0bVlwaWxjayA9IGZhbHNlO1xyXG4gIGVudHJ5VHlwZU1hbEdDID0gZmFsc2U7XHJcbiAgaXNEb2luZ0dvb2RzTW92ZW1lbnQgPSBmYWxzZTtcclxuXHJcbiAgaXNTY2FsZUNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICBpc1NjYWxlUmVjb25uZWN0aW5nID0gZmFsc2U7XHJcbiAgc2NhbGVDb25uZWN0aW9uRmFpbGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzY2FsZVN1YjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzY2FsZUFwaVVybCA9ICdodHRwOi8vMTkyLjE2OC4xMC45NTo1MTAwJztcclxuICBwcml2YXRlIHJlYWRvbmx5IHNjYWxlSWQgPSAnS0FOVEFSLTAxJztcclxuXHJcbiAgLyoqIFNBUCByZXNwb25zZSBjYW1lbENhc2UvUGFzY2FsQ2FzZSBmYXJrxLFuxLEgaGFuZGxlIGVkZXIgKi9cclxuICBwcml2YXRlIGdldERvY0VudHJ5KHJlYzogRW50cnlXZWlnaGluZyB8IG51bGwpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFyZWMpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gcmVjLmRvY0VudHJ5ID8/IChyZWMgYXMgYW55KS5kb2NFbnRyeTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBIaXRFbnRyeVdlaWdoaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvY2tUcmFuc2ZlclNlcnZpY2U6IEhpdFN0b2NrVHJhbnNmZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb246IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBsb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzY2FsZVNpZ25hbFJTZXJ2aWNlOiBTY2FsZVNpZ25hbFJTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGwgPSAoa2V5OiBzdHJpbmcpID0+IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6JyArIGtleSk7XHJcbiAgICB0aGlzLmRvY3VtZW50Q29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnRG9jdW1lbnRObycpLCB3aWR0aDogMTIwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246IGwoJ0NhcmROYW1lJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnNjYWxlQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogODAgfSxcclxuICAgICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogbCgnU2NhbGVOYW1lJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnRydWNrUGxhdGVDb2x1bW5zID0gW1xyXG4gICAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiBsKCdDb2RlJyksIHdpZHRoOiAxMDAgfSxcclxuICAgICAgeyBkYXRhRmllbGQ6ICdwbGF0ZU5vJywgY2FwdGlvbjogbCgnUGxhdGUnKSB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudHJhaWxlclBsYXRlQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogMTAwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAncGxhdGVObycsIGNhcHRpb246IGwoJ1BsYXRlJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLmRyaXZlckNvbHVtbnMgPSBbXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246IGwoJ0NvZGUnKSwgd2lkdGg6IDEwMCB9LFxyXG4gICAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiBsKCdGdWxsTmFtZScpIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy5hY2NvdW50Q29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogMTAwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAndGl0bGUnLCBjYXB0aW9uOiBsKCdBY2NvdW50VGl0bGUnKSB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMuc3RvY2tJdGVtQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogMTAwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246IGwoJ1N0b2NrTmFtZScpIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy53YXliaWxsQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdkb2NOdW0nLCBjYXB0aW9uOiBsKCdEb2N1bWVudE5vJyksIHdpZHRoOiAxMDAgfSxcclxuICAgICAgeyBkYXRhRmllbGQ6ICdVX0VGQVROTycsIGNhcHRpb246IGwoJ1dheWJpbGxObycpLCB3aWR0aDogMTIwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnY2FyZE5hbWUnLCBjYXB0aW9uOiBsKCdDYXJkTmFtZScpIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnZnJvbVdhcmVob3VzZScsIGNhcHRpb246IGwoJ0V4aXRXYXJlaG91c2UnKSwgd2lkdGg6IDE0MCB9LFxyXG4gICAgICB7IGRhdGFGaWVsZDogJ1VfQXJhY1BsYWthc2knLCBjYXB0aW9uOiBsKCdWZWhpY2xlUGxhdGUnKSwgd2lkdGg6IDExMCB9LFxyXG4gICAgICB7IGRhdGFGaWVsZDogJ1VfU29mb3JBZCcsIGNhcHRpb246IGwoJ0RyaXZlck5hbWUnKSB9LFxyXG4gICAgICB7IGRhdGFGaWVsZDogJ1VfU29mb3JTb3lhZGknLCBjYXB0aW9uOiBsKCdEcml2ZXJTdXJuYW1lJykgfSxcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb21tZW50cycsIGNhcHRpb246IGwoJ0Rlc2NyaXB0aW9uJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLmdhdGVDb2x1bW5zID0gW1xyXG4gICAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiBsKCdDb2RlJyksIHdpZHRoOiA4MCB9LFxyXG4gICAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiBsKCdHYXRlTmFtZScpIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy52ZWhpY2xlVHlwZUNvbHVtbnMgPSBbXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246IGwoJ0NvZGUnKSwgd2lkdGg6IDgwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246IGwoJ0VudHJ5VHlwZU5hbWUnKSB9LFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBSZWFkIHdlaWdoaW5nIG1vZGUgZnJvbSBxdWVyeSBwYXJhbXNcclxuICAgIGNvbnN0IG1vZGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCdtb2RlJyk7XHJcbiAgICBpZiAobW9kZSA9PT0gJ2ZpcnN0JyB8fCBtb2RlID09PSAnbGFzdCcpIHtcclxuICAgICAgdGhpcy53ZWlnaGluZ01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIMOWbmNlIHJvdXRlciBzdGF0ZSdkZW4gc2F0xLFyIHZlcmlzaW5pIG9rdSAobGlzdGUgZWtyYW7EsW5kYW4gYWt0YXLEsWxhbilcclxuICAgIGNvbnN0IHN0YXRlRGF0YSA9IGhpc3Rvcnkuc3RhdGU/LnJvd0RhdGE7XHJcbiAgICBjb25zdCBpZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpO1xyXG5cclxuICAgIGlmIChzdGF0ZURhdGEpIHtcclxuICAgICAgLy8gU3RhdGUnZGVuIGdlbGVuIHZlcml5aSBrdWxsYW4gKEFQSSDDp2HEn3LEsXPEsSBvbG1hZGFuKVxyXG4gICAgICB0aGlzLmlzVXBkYXRlTW9kZSA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gc3RhdGVEYXRhO1xyXG4gICAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgICAgIC8vIFNvbiB0YXJ0xLFtIG1vZHVuZGF5c2EgZGlyZWt0IHRhcnTEsW0gcGFuZWxpbmkgYcOnXHJcbiAgICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2xhc3QnKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtUGhhc2UgPSAyO1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0U2NhbGUoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpZCkge1xyXG4gICAgICAvLyBGYWxsYmFjazogc3RhdGUgeW9rc2EgQVBJJ2RlbiB5w7xrbGVcclxuICAgICAgdGhpcy5pc1VwZGF0ZU1vZGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZ2V0KCtpZCkuc3Vic2NyaWJlKHJlY29yZCA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQgPSByZWNvcmQ7XHJcbiAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAgIC8vIFNvbiB0YXJ0xLFtIG1vZHVuZGF5c2EgZGlyZWt0IHRhcnTEsW0gcGFuZWxpbmkgYcOnXHJcbiAgICAgICAgaWYgKHRoaXMud2VpZ2hpbmdNb2RlID09PSAnbGFzdCcpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybVBoYXNlID0gMjtcclxuICAgICAgICAgIHRoaXMuX3N0YXJ0U2NhbGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHdlaWdoaW5nU3RlcCgpOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc3RhdHVzID0gKHRoaXMucmVjb3JkIGFzIGFueSk/LnVfU3RhdHVzO1xyXG4gICAgaWYgKHRoaXMubGFzdFdlaWdoaW5nVmFsdWUgIT09IG51bGwgfHwgc3RhdHVzID09PSAnMicgfHwgc3RhdHVzID09PSAnMycgfHwgc3RhdHVzID09PSAnNCcpIHJldHVybiAzO1xyXG4gICAgaWYgKHRoaXMuZmlyc3RXZWlnaGluZ1ZhbHVlICE9PSBudWxsIHx8IHN0YXR1cyA9PT0gJzEnKSByZXR1cm4gMjtcclxuICAgIHJldHVybiAxO1xyXG4gIH1cclxuXHJcbiAgLyoqIMSwbGsgdGFydMSxbSB5YXDEsWxkxLF5c2EgKHN0ZXAgPj0gMikgZGV0YXkgYWxhbmxhcsSxbsSxIGtpbGl0bGUgKi9cclxuICBnZXQgaXNGb3JtTG9ja2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2VpZ2hpbmdTdGVwID49IDI7XHJcbiAgfVxyXG5cclxuICAvKiogSGVyIGlraSB0YXJ0xLFtIGRhIHRhbWFtbGFuZMSxeXNhIChzdGVwID09PSAzKSB0w7xtIGVrcmFuxLEga2lsaXRsZSAqL1xyXG4gIGdldCBpc0Z1bGx5Q29tcGxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2VpZ2hpbmdTdGVwID09PSAzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVudHJ5RGF0ZVRpbWUoKTogRGF0ZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuYnVpbGREYXRlVGltZSh0aGlzLmVudHJ5RGF0ZSwgdGhpcy5lbnRyeVRpbWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGV4aXREYXRlVGltZSgpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5idWlsZERhdGVUaW1lKHRoaXMuZXhpdERhdGUsIHRoaXMuZXhpdFRpbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRhcmloIHN0cmluZyArIHNhecSxc2FsIHNhYXQgKMO2ci4gODMwID0gMDg6MzApIGRlxJ9lcmluZGVuIERhdGUgb2x1xZ90dXJ1ciAqL1xyXG4gIHByaXZhdGUgYnVpbGREYXRlVGltZShkYXRlU3RyOiBzdHJpbmcgfCBudWxsLCB0aW1lVmFsOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsKTogRGF0ZSB8IG51bGwge1xyXG4gICAgaWYgKCFkYXRlU3RyKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlU3RyKTtcclxuICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdCA9IE51bWJlcih0aW1lVmFsKTtcclxuICAgIGlmICghaXNOYU4odCkpIHtcclxuICAgICAgZC5zZXRIb3VycyhNYXRoLmZsb29yKHQgLyAxMDApLCB0ICUgMTAwLCAwLCAwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5ldFdlaWdodCgpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSAtIHRoaXMubGFzdFdlaWdoaW5nVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXQgd2VpZ2hpbmdNb2RlTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0J1xyXG4gICAgICA/IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycpXHJcbiAgICAgIDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpMYXN0V2VpZ2hpbmcnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEZvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZWNvcmQpIHtcclxuICAgICAgY29uc3QgciA9IHRoaXMucmVjb3JkIGFzIGFueTsgLy8gU0FQIGNhbWVsQ2FzZSBmYWxsYmFja1xyXG4gICAgICB0aGlzLnNjYWxlQ29kZSA9IHIudV9TY2FsZUNvZGUgPz8gci51X1NjYWxlQ29kZSA/PyAnJztcclxuICAgICAgdGhpcy5hY2NvdW50Q29kZSA9IHIudV9DYXJkQ29kZSA/PyByLnVfQ2FyZENvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMudHJ1Y2tQbGF0ZUNvZGUgPSByLnVfUGxhdGUgPz8gci51X1BsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLnRydWNrUGxhdGVObyA9IHIudV9QbGF0ZSA/PyByLnVfUGxhdGUgPz8gJyc7XHJcbiAgICAgIHRoaXMudHJhaWxlclBsYXRlQ29kZSA9IHIudV9Eb3JzZVBsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLnRyYWlsZXJQbGF0ZU5vID0gci51X0RvcnNlUGxhdGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuZHJpdmVyQ29kZSA9IHIudV9Ecml2ZXJDb2RlID8/IHIudV9Ecml2ZXJDb2RlID8/ICcnO1xyXG4gICAgICB0aGlzLnN0b2NrQ29kZSA9IHIudV9JdGVtQ29kZSA/PyByLnVfSXRlbUNvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyTm8gPSByLnVfQ29udGFpbmVyTm8gPz8gci51X0NvbnRhaW5lck5vID8/ICcnO1xyXG4gICAgICB0aGlzLndheWJpbGxObyA9IHIudV9EZXNwYXRjaEFkdmljZU5vID8/IHIudV9EZXNwYXRjaEFkdmljZU5vID8/ICcnO1xyXG4gICAgICB0aGlzLmRlcGFydHVyZUxvY2F0aW9uID0gci51X1NoaXBQbGFjZSA/PyByLnVfU2hpcFBsYWNlID8/ICcnO1xyXG4gICAgICB0aGlzLmFycml2YWxMb2NhdGlvbiA9IHIudV9TaGlwVG8gPz8gci51X1NoaXBUbyA/PyAnRmFicmlrYSc7XHJcbiAgICAgIHRoaXMuZmlyc3RPcGVyYXRvckNvZGUgPSByLnVfRmlyc3RPcHQgPz8gci51X0ZpcnN0T3B0ID8/ICcnO1xyXG4gICAgICB0aGlzLmxhc3RPcGVyYXRvckNvZGUgPSByLnVfTGFzdE9wdCA/PyByLnVfTGFzdE9wdCA/PyAnJztcclxuICAgICAgY29uc3QgcmF3Rmlyc3QgPSByLnVfRmlyc3RXZWlnaGluZyA/PyByLnVfRmlyc3RXZWlnaGluZyA/PyBudWxsO1xyXG4gICAgICB0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSA9IChyYXdGaXJzdCAhPSBudWxsICYmIHJhd0ZpcnN0ICE9PSAwKSA/IHJhd0ZpcnN0IDogbnVsbDtcclxuICAgICAgY29uc3QgcmF3TGFzdCA9IHIudV9MYXN0V2VpZ2hpbmcgPz8gci51X0xhc3RXZWlnaGluZyA/PyBudWxsO1xyXG4gICAgICB0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlID0gKHJhd0xhc3QgIT0gbnVsbCAmJiByYXdMYXN0ICE9PSAwKSA/IHJhd0xhc3QgOiBudWxsO1xyXG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gci51X0Rlc2NyaXB0aW9uID8/IHIudV9EZXNjcmlwdGlvbiA/PyAnJztcclxuXHJcbiAgICAgIC8vIFpaWl9URVNUMiB5ZW5pIGFsYW5sYXJcclxuICAgICAgdGhpcy5nYXRlQ29kZSA9IHIudV9HYXRlQ29kZSA/PyByLnVfR2F0ZUNvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuZW50cnlEYXRlID0gci51X0VudHJ5RGF0ZSA/PyByLnVfRW50cnlEYXRlID8/IG51bGw7XHJcbiAgICAgIHRoaXMuZW50cnlUaW1lID0gci51X0VudHJ5VGltZSA/PyByLnVfRW50cnlUaW1lID8/ICcnO1xyXG4gICAgICB0aGlzLmV4aXREYXRlID0gci51X0V4aXREYXRlID8/IHIudV9FeGl0RGF0ZSA/PyBudWxsO1xyXG4gICAgICB0aGlzLmV4aXRUaW1lID0gci51X0V4aXRUaW1lID8/IHIudV9FeGl0VGltZSA/PyAnJztcclxuICAgICAgdGhpcy5lbnRyeVR5cGVDb2RlID0gci51X0VudHJ5VHlwZSA/PyByLnVfRW50cnlUeXBlID8/ICcnO1xyXG4gICAgICB0aGlzLmRyaXZlckZ1bGxOYW1lID0gci51X0RyaXZlciA/PyByLnVfRHJpdmVyID8/ICcnO1xyXG4gICAgICB0aGlzLnRjTm8gPSByLnVfVGNObyA/PyByLnVfVGNObyA/PyAnJztcclxuICAgICAgdGhpcy5pc1RjQ2l0aXplbiA9IHRydWU7XHJcblxyXG4gICAgICAvLyBMb29rdXAgYWxhbmxhcsSxbsSxbiBnw7Zyw7xuZW4gaXNpbWxlcmluaSDDp8O2esO8bWxlXHJcbiAgICAgIHRoaXMucmVzb2x2ZURpc3BsYXlOYW1lcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEthecSxdHRha2kga29kIGFsYW5sYXLEsW5hIGthcsWfxLFsxLFrIGdlbGVuIGfDtnLDvG5lbiBpc2ltbGVyaSBsb29rdXAgc2VydmlzbGVyaW5kZW4gw6fDtnrDvG1sZXIgKi9cclxuICBwcml2YXRlIHJlc29sdmVEaXNwbGF5TmFtZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBsb29rdXBzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcblxyXG4gICAgaWYgKHRoaXMuZ2F0ZUNvZGUpIHtcclxuICAgICAgbG9va3Vwc1snZ2F0ZXMnXSA9IHRoaXMubG9hZEdhdGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbnRyeVR5cGVDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ3ZlaGljbGVUeXBlcyddID0gdGhpcy5sb2FkVmVoaWNsZVR5cGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zY2FsZUNvZGUpIHtcclxuICAgICAgbG9va3Vwc1snc2NhbGVzJ10gPSB0aGlzLmxvYWRTY2FsZXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFjY291bnRDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ2FjY291bnRzJ10gPSB0aGlzLmxvYWRBY2NvdW50cygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZHJpdmVyQ29kZSkge1xyXG4gICAgICBsb29rdXBzWydkcml2ZXJzJ10gPSB0aGlzLmxvYWREcml2ZXJzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdG9ja0NvZGUpIHtcclxuICAgICAgbG9va3Vwc1snc3RvY2tJdGVtcyddID0gdGhpcy5sb2FkU3RvY2tJdGVtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhsb29rdXBzKTtcclxuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGZvcmtKb2luKGxvb2t1cHMpLnN1YnNjcmliZSgocmVzdWx0czogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHRzLmdhdGVzKSB7XHJcbiAgICAgICAgY29uc3QgZ2F0ZSA9IHJlc3VsdHMuZ2F0ZXMuZmluZCgoZzogYW55KSA9PiBnLmNvZGUgPT09IHRoaXMuZ2F0ZUNvZGUpO1xyXG4gICAgICAgIGlmIChnYXRlKSB0aGlzLmdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHRzLnZlaGljbGVUeXBlcykge1xyXG4gICAgICAgIGNvbnN0IHZ0ID0gcmVzdWx0cy52ZWhpY2xlVHlwZXMuZmluZCgodDogYW55KSA9PiB0LmNvZGUgPT09IHRoaXMuZW50cnlUeXBlQ29kZSk7XHJcbiAgICAgICAgaWYgKHZ0KSB7XHJcbiAgICAgICAgICB0aGlzLmVudHJ5VHlwZU5hbWUgPSB2dC5uYW1lO1xyXG4gICAgICAgICAgdGhpcy5lbnRyeVR5cGVUcnRtWXBpbGNrID0gdnQudV9UcnRtWXBpbGNrID09PSAnWSc7XHJcbiAgICAgICAgICB0aGlzLmVudHJ5VHlwZU1hbEdDID0gdnQudV9NYWxHQyA9PT0gJ1knO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy5zY2FsZXMpIHtcclxuICAgICAgICBjb25zdCBzY2FsZSA9IHJlc3VsdHMuc2NhbGVzLmZpbmQoKHM6IGFueSkgPT4gcy5jb2RlID09PSB0aGlzLnNjYWxlQ29kZSk7XHJcbiAgICAgICAgaWYgKHNjYWxlKSB0aGlzLnNjYWxlTmFtZSA9IHNjYWxlLm5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdHMuYWNjb3VudHMpIHtcclxuICAgICAgICBjb25zdCBhY2NvdW50ID0gcmVzdWx0cy5hY2NvdW50cy5maW5kKChhOiBhbnkpID0+IGEuY29kZSA9PT0gdGhpcy5hY2NvdW50Q29kZSk7XHJcbiAgICAgICAgaWYgKGFjY291bnQpIHRoaXMuYWNjb3VudFRpdGxlID0gYWNjb3VudC50aXRsZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy5kcml2ZXJzKSB7XHJcbiAgICAgICAgY29uc3QgZHJpdmVyID0gcmVzdWx0cy5kcml2ZXJzLmZpbmQoKGQ6IGFueSkgPT4gZC5jb2RlID09PSB0aGlzLmRyaXZlckNvZGUpO1xyXG4gICAgICAgIGlmIChkcml2ZXIpIHRoaXMuZHJpdmVyTmFtZSA9IGRyaXZlci5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHRzLnN0b2NrSXRlbXMpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gcmVzdWx0cy5zdG9ja0l0ZW1zLmZpbmQoKGk6IGFueSkgPT4gaS5jb2RlID09PSB0aGlzLnN0b2NrQ29kZSk7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHRoaXMuc3RvY2tOYW1lID0gaXRlbS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRG9jdW1lbnRTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nRG9jdW1lbnQpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5kb2N1bWVudENvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLmRvY3VtZW50TmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uU2NhbGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nU2NhbGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5zY2FsZUNvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLnNjYWxlTmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uQWNjb3VudFNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdBY2NvdW50KTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuYWNjb3VudENvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLmFjY291bnRUaXRsZSA9IGUudGl0bGU7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25UcnVja1BsYXRlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1RydWNrUGxhdGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy50cnVja1BsYXRlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMudHJ1Y2tQbGF0ZU5vID0gZS5wbGF0ZU5vO1xyXG4gIH1cclxuXHJcbiAgb25UcmFpbGVyUGxhdGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nVHJhaWxlclBsYXRlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMudHJhaWxlclBsYXRlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMudHJhaWxlclBsYXRlTm8gPSBlLnBsYXRlTm87XHJcbiAgfVxyXG5cclxuICBvbkRyaXZlclNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdEcml2ZXIpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5kcml2ZXJDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5kcml2ZXJOYW1lID0gZS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgb25TdG9ja0l0ZW1TZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nU3RvY2tJdGVtKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuc3RvY2tDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5zdG9ja05hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvbkdhdGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nR2F0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLmdhdGVDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5nYXRlTmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uVmVoaWNsZVR5cGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nVmVoaWNsZVR5cGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5lbnRyeVR5cGVDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5lbnRyeVR5cGVOYW1lID0gZS5uYW1lO1xyXG4gICAgdGhpcy5lbnRyeVR5cGVUcnRtWXBpbGNrID0gZS51X1RydG1ZcGlsY2sgPT09ICdZJztcclxuICAgIHRoaXMuZW50cnlUeXBlTWFsR0MgPSBlLnVfTWFsR0MgPT09ICdZJztcclxuICB9XHJcblxyXG4gIG9uV2F5YmlsbFNlbGVjdGVkKGU6IFN0b2NrVHJhbnNmZXIpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy53YXliaWxsTm8gPSBlLmRvY051bS50b1N0cmluZygpO1xyXG4gICAgaWYgKGUuY2FyZENvZGUpIHsgdGhpcy5hY2NvdW50Q29kZSA9IGUuY2FyZENvZGU7IHRoaXMuYWNjb3VudFRpdGxlID0gZS5jYXJkTmFtZTsgfVxyXG4gICAgaWYgKGUuZnJvbVdhcmVob3VzZSkgeyB0aGlzLmRlcGFydHVyZUxvY2F0aW9uID0gZS5mcm9tV2FyZWhvdXNlOyB9XHJcbiAgICBpZiAoZS5jb21tZW50cykgeyB0aGlzLmRlc2NyaXB0aW9uID0gZS5jb21tZW50czsgfVxyXG5cclxuICAgIGNvbnN0IGxpbmVzID0gZS5zdG9ja1RyYW5zZmVyTGluZXMgPz8gW107XHJcbiAgICBjb25zdCB1bmlxdWVDb2RlcyA9IFsuLi5uZXcgU2V0KGxpbmVzLm1hcChsID0+IGwuaXRlbUNvZGUpLmZpbHRlcihjID0+ICEhYykpXTtcclxuICAgIGlmICh1bmlxdWVDb2Rlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zdG9ja0NvZGUgPSB1bmlxdWVDb2Rlc1swXTtcclxuICAgICAgdGhpcy5zdG9ja05hbWUgPSBsaW5lcy5maW5kKGwgPT4gbC5pdGVtQ29kZSA9PT0gdW5pcXVlQ29kZXNbMF0pPy5pdGVtRGVzY3JpcHRpb24gPz8gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0b2NrQ29kZSA9ICcnO1xyXG4gICAgICB0aGlzLnN0b2NrTmFtZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFBoYXNlIDEg4oaSIFBoYXNlIDIgZ2XDp2nFn2kgKi9cclxuICBpbGVyaUdpdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50cnVja1BsYXRlQ29kZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6U2VsZWN0VHJ1Y2tQbGF0ZScpLCAnJywge1xyXG4gICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbnRyeVR5cGVUcnRtWXBpbGNrICYmICF0aGlzLnN0b2NrQ29kZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6U3RvY2tDb2RlUmVxdWlyZWQnKSwgJycsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtUGhhc2UgPSAyO1xyXG4gICAgdGhpcy5fc3RhcnRTY2FsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFBoYXNlIDIg4oaSIFBoYXNlIDEgZ2VyaSBkw7ZuICovXHJcbiAgZ2VyaUdpdFBoYXNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3RvcFNjYWxlKCk7XHJcbiAgICB0aGlzLmZvcm1QaGFzZSA9IDE7XHJcbiAgfVxyXG5cclxuICBzYXZlKCk6IHZvaWQge1xyXG4gICAgLy8gVGFydMSxbSBtb2R1bmRheXNhIGRvV2VpZ2hpbmcgQVBJIMOnYcSfxLFyXHJcbiAgICBjb25zdCBkb2NFbnRyeSA9IHRoaXMuZ2V0RG9jRW50cnkodGhpcy5yZWNvcmQpO1xyXG4gICAgaWYgKHRoaXMud2VpZ2hpbmdNb2RlICYmIGRvY0VudHJ5KSB7XHJcbiAgICAgIGlmICh0aGlzLmZpeGVkU2NhbGVWYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkRvRml4Rmlyc3QnKSwgJycsIHtcclxuICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZG9XZWlnaCQgPSB0aGlzLnNlcnZpY2UuZG9XZWlnaGluZyhkb2NFbnRyeSwge1xyXG4gICAgICAgIHdlaWdoaW5nVmFsdWU6IHRoaXMuZml4ZWRTY2FsZVZhbHVlISxcclxuICAgICAgICBvcGVyYXRvckNvZGU6ICcnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gxLBMSyB0YXJ0xLFtZGEgZm9ybSBhbGFubGFyxLFuxLEgKHN0b2sga29kdSwgaXJzYWxpeWUgdmIuKSDDtm5jZSBrYXlkZXQsIHNvbnJhIHRhcnTEsW0geWFwLlxyXG4gICAgICAvLyBTT04gdGFydMSxbWRhIHNhZGVjZSB0YXJ0xLFtIHlhcCDigJQgZGnEn2VyIGFsYW5sYXIgaWxrIHRhcnTEsW1kYW4gc29ucmEgZGXEn2nFn3RpcmlsZW1lei5cclxuICAgICAgbGV0IG9icyQ6IE9ic2VydmFibGU8RW50cnlXZWlnaGluZz47XHJcbiAgICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0Jykge1xyXG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBub3cudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbm93LnRvVGltZVN0cmluZygpLnNwbGl0KCcgJylbMF07XHJcbiAgICAgICAgY29uc3QgZHRvOiBTYXZlRW50cnlXZWlnaGluZ0R0byA9IHtcclxuICAgICAgICAgIHVfR2F0ZUNvZGU6IHRoaXMuZ2F0ZUNvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9FbnRyeURhdGU6IHRoaXMuZW50cnlEYXRlIHx8IGN1cnJlbnREYXRlLFxyXG4gICAgICAgICAgdV9FbnRyeVRpbWU6IHRoaXMuZW50cnlUaW1lIHx8IGN1cnJlbnRUaW1lLFxyXG4gICAgICAgICAgdV9FeGl0RGF0ZTogdGhpcy5leGl0RGF0ZSB8fCBudWxsLFxyXG4gICAgICAgICAgdV9FeGl0VGltZTogdGhpcy5leGl0VGltZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X1BsYXRlOiB0aGlzLnRydWNrUGxhdGVDb2RlLFxyXG4gICAgICAgICAgdV9Eb3JzZVBsYXRlOiB0aGlzLnRyYWlsZXJQbGF0ZUNvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9FbnRyeVR5cGU6IHRoaXMuZW50cnlUeXBlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0Rlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRHJpdmVyOiB0aGlzLmRyaXZlckZ1bGxOYW1lIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRHJpdmVyQ29kZTogdGhpcy5kcml2ZXJDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfVGNObzogdGhpcy50Y05vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfQ2FyZENvZGU6IHRoaXMuYWNjb3VudENvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9TY2FsZUNvZGU6IHRoaXMuc2NhbGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfSXRlbUNvZGU6IHRoaXMuc3RvY2tDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRGVzcGF0Y2hBZHZpY2VObzogdGhpcy53YXliaWxsTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9EZXNwYXRjaEV4aXN0OiAnTicsXHJcbiAgICAgICAgICB1X1NoaXBUbzogdGhpcy5hcnJpdmFsTG9jYXRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9Db250YWluZXJObzogdGhpcy5jb250YWluZXJObyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X1NoaXBQbGFjZTogdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBvYnMkID0gdGhpcy5zZXJ2aWNlLnVwZGF0ZShkb2NFbnRyeSwgZHRvKS5waXBlKHN3aXRjaE1hcCgoKSA9PiBkb1dlaWdoJCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9icyQgPSBkb1dlaWdoJDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgIG9icyQuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBUYXJ0xLFtIGRlxJ9lcmxlcmluaSB3ZWlnaGluZ01vZGUnYSBnw7ZyZSBnw7xuY2VsbGVcclxuICAgICAgICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0Jykge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSA9IHRoaXMuZml4ZWRTY2FsZVZhbHVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSA9IHRoaXMuZml4ZWRTY2FsZVZhbHVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0J1xyXG4gICAgICAgICAgICAgID8gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpGaXJzdFdlaWdoaW5nU2F2ZWQnKVxyXG4gICAgICAgICAgICAgIDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpMYXN0V2VpZ2hpbmdTYXZlZCcpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIEvEsXNhIGJpciBnZWNpa21lIGlsZSBsaXN0ZXllIGTDtm4gKGt1bGxhbsSxY8SxIHByb2dyZXNzIGJhciBkZcSfacWfaW1pbmkgZ8O2cnPDvG4pXHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycva2Fkb29nbHUvZW50cnktd2VpZ2hpbmcnXSk7XHJcbiAgICAgICAgICB9LCB0aGlzLndlaWdoaW5nTW9kZSA9PSAnbGFzdCcgPyA4MDAwIDogMTUwMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdGVyLmVycm9yKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6V2VpZ2hpbmdSZWNvcmRFcnJvcicpKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vcm1hbCBrYXnEsXQgbW9kdSAoeWVuaSBrYXnEsXQgdmV5YSBkw7x6ZW5sZW1lKVxyXG4gICAgaWYgKCF0aGlzLnRydWNrUGxhdGVDb2RlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTZWxlY3RUcnVja1BsYXRlJyksICcnLCB7XHJcbiAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgY3VycmVudERhdGUgPSBub3cudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBub3cudG9UaW1lU3RyaW5nKCkuc3BsaXQoJyAnKVswXTsgLy8gSEg6bW06c3NcclxuXHJcbiAgICBjb25zdCBkdG86IFNhdmVFbnRyeVdlaWdoaW5nRHRvID0ge1xyXG4gICAgICB1X0dhdGVDb2RlOiB0aGlzLmdhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9FbnRyeURhdGU6IHRoaXMuZW50cnlEYXRlIHx8IGN1cnJlbnREYXRlLFxyXG4gICAgICB1X0VudHJ5VGltZTogdGhpcy5lbnRyeVRpbWUgfHwgY3VycmVudFRpbWUsXHJcbiAgICAgIHVfRXhpdERhdGU6IHRoaXMuZXhpdERhdGUgfHwgbnVsbCxcclxuICAgICAgdV9FeGl0VGltZTogdGhpcy5leGl0VGltZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfUGxhdGU6IHRoaXMudHJ1Y2tQbGF0ZUNvZGUsXHJcbiAgICAgIHVfRG9yc2VQbGF0ZTogdGhpcy50cmFpbGVyUGxhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9FbnRyeVR5cGU6IHRoaXMuZW50cnlUeXBlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0RyaXZlcjogdGhpcy5kcml2ZXJGdWxsTmFtZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRHJpdmVyQ29kZTogdGhpcy5kcml2ZXJDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9UY05vOiB0aGlzLnRjTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0NhcmRDb2RlOiB0aGlzLmFjY291bnRDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9TY2FsZUNvZGU6IHRoaXMuc2NhbGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9JdGVtQ29kZTogdGhpcy5zdG9ja0NvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0Rlc3BhdGNoQWR2aWNlTm86IHRoaXMud2F5YmlsbE5vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9EZXNwYXRjaEV4aXN0OiAnTicsXHJcbiAgICAgIHVfU2hpcFRvOiB0aGlzLmFycml2YWxMb2NhdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfQ29udGFpbmVyTm86IHRoaXMuY29udGFpbmVyTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X1NoaXBQbGFjZTogdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9icyQgPSBkb2NFbnRyeVxyXG4gICAgICA/IHRoaXMuc2VydmljZS51cGRhdGUoZG9jRW50cnksIGR0bylcclxuICAgICAgOiB0aGlzLnNlcnZpY2UuY3JlYXRlKGR0byk7XHJcblxyXG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICBvYnMkLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpSZWNvcmRTYXZlZFN1Y2Nlc3MnKSk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycva2Fkb29nbHUvZW50cnktd2VpZ2hpbmcnXSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlJlY29yZFNhdmVFcnJvcicpKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZG9Hb29kc01vdmVtZW50KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZG9jRW50cnkgPSB0aGlzLmdldERvY0VudHJ5KHRoaXMucmVjb3JkKTtcclxuICAgIGlmICghZG9jRW50cnkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblxyXG4gICAgICAud2FybihcclxuICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6Ok1hbEdjQ29uZmlybU1lc3NhZ2UnLCBTdHJpbmcodGhpcy5yZWNvcmQ/LnVfUGxhdGUgfHwgZG9jRW50cnkpKSxcclxuICAgICAgICAnJyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB5ZXNUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlllcycpLFxyXG4gICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpObycpLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ2NvbmZpcm0nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmRvR29vZHNNb3ZlbWVudChkb2NFbnRyeSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IHVwZGF0ZWQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlY29yZCA9IHVwZGF0ZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb2luZ0dvb2RzTW92ZW1lbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpHb29kc01vdmVtZW50U3VjY2VzcycpKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzRG9pbmdHb29kc01vdmVtZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhYml0bGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpeGVkU2NhbGVWYWx1ZSA9IHRoaXMuY3VycmVudFNjYWxlVmFsdWU7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N0b3BTY2FsZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3RhcnRTY2FsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNTY2FsZUNvbm5lY3RpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zY2FsZUNvbm5lY3Rpb25GYWlsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2NhbGVTdWIgPSB0aGlzLnNjYWxlU2lnbmFsUlNlcnZpY2Uud2VpZ2h0JC5zdWJzY3JpYmUodyA9PiB7XHJcbiAgICAgIGlmICh3ICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5pc1NjYWxlUmVjb25uZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2NhbGVWYWx1ZSA9IHc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zY2FsZVN1Yi5hZGQoXHJcbiAgICAgIHRoaXMuc2NhbGVTaWduYWxSU2VydmljZS5yZWNvbm5lY3RpbmckLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NjYWxlUmVjb25uZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTY2FsZVZhbHVlID0gbnVsbDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnNjYWxlU3ViLmFkZChcclxuICAgICAgdGhpcy5zY2FsZVNpZ25hbFJTZXJ2aWNlLmNvbm5lY3Rpb25Mb3N0JC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTY2FsZUNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzU2NhbGVSZWNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNjYWxlQ29ubmVjdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb24uZXJyb3IoXHJcbiAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlNjYWxlQ29ubmVjdGlvbkZhaWxlZCcpLFxyXG4gICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTY2FsZUNvbm5lY3Rpb25GYWlsZWRUaXRsZScpLFxyXG4gICAgICAgICAgeyBoaWRlWWVzQnRuOiB0cnVlLCBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpIH1cclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuc2NhbGVTaWduYWxSU2VydmljZS5zdGFydCh0aGlzLnNjYWxlQXBpVXJsLCB0aGlzLnNjYWxlSWQpXHJcbiAgICAgIC50aGVuKCgpID0+IHsgdGhpcy5pc1NjYWxlQ29ubmVjdGluZyA9IGZhbHNlOyB9KVxyXG4gICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NjYWxlQ29ubmVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChlPy5tZXNzYWdlID09PSAnU2NhbGVDb25uZWN0aW9uTWF4UmV0cmllc1JlYWNoZWQnKSB7XHJcbiAgICAgICAgICB0aGlzLnNjYWxlQ29ubmVjdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTY2FsZUNvbm5lY3Rpb25GYWlsZWQnKSxcclxuICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTY2FsZUNvbm5lY3Rpb25GYWlsZWRUaXRsZScpLFxyXG4gICAgICAgICAgICB7IGhpZGVZZXNCdG46IHRydWUsIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJykgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignU2lnbmFsUiBiYcSfbGFudMSxIGhhdGFzxLE6JywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0b3BTY2FsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2NhbGVTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNjYWxlU3ViID0gbnVsbDtcclxuICAgIHRoaXMuc2NhbGVTaWduYWxSU2VydmljZS5zdG9wKHRoaXMuc2NhbGVJZClcclxuICAgICAgLmNhdGNoKGUgPT4gY29uc29sZS5lcnJvcignU2lnbmFsUiBrYXBhdG1hIGhhdGFzxLE6JywgZSkpO1xyXG4gIH1cclxuXHJcbiAgZ29CYWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycva2Fkb29nbHUvZW50cnktd2VpZ2hpbmcnXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlVENLTih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0YyA9IHZhbHVlPy50cmltKCk7XHJcbiAgICBpZiAoIXRjIHx8IHRjLmxlbmd0aCAhPT0gMTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghL15cXGR7MTF9JC8udGVzdCh0YykpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0Y1swXSA9PT0gJzAnKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBkID0gdGMuc3BsaXQoJycpLm1hcChOdW1iZXIpO1xyXG4gICAgY29uc3QgZDEwID0gKChkWzBdICsgZFsyXSArIGRbNF0gKyBkWzZdICsgZFs4XSkgKiA3IC0gKGRbMV0gKyBkWzNdICsgZFs1XSArIGRbN10pKSAlIDEwO1xyXG4gICAgaWYgKGQxMCAhPT0gZFs5XSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgZDExID0gZC5zbGljZSgwLCAxMCkucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgJSAxMDtcclxuICAgIHJldHVybiBkMTEgPT09IGRbMTBdO1xyXG4gIH1cclxufVxyXG4iLCI8YWJwLXBhZ2UgW2JyZWFkY3J1bWJdPVwiZmFsc2VcIj5cclxuICA8YWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXIgY2xhc3M9XCJjb2xcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJwYWdlLXRpdGxlXCI+XHJcbiAgICAgICAgICB7eyAnS2Fkb29nbHU6OkVudHJ5V2VpZ2hpbmdUaXRsZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdNb2RlXCIgY2xhc3M9XCJiYWRnZSBtcy0yIGZzLTZcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ2JnLXdhcm5pbmcgdGV4dC1kYXJrJzogd2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnLFxyXG4gICAgICAgICAgICAgICdiZy1wcmltYXJ5Jzogd2VpZ2hpbmdNb2RlID09PSAnbGFzdCdcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICB7eyB3ZWlnaGluZ01vZGVMYWJlbCB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhd2VpZ2hpbmdNb2RlXCIgY2xhc3M9XCJiYWRnZSBtcy0yIGZzLTZcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ2JnLXNlY29uZGFyeSc6IHdlaWdoaW5nU3RlcCA9PT0gMSxcclxuICAgICAgICAgICAgICAnYmctaW5mbyc6IHdlaWdoaW5nU3RlcCA9PT0gMixcclxuICAgICAgICAgICAgICAnYmctc3VjY2Vzcyc6IHdlaWdoaW5nU3RlcCA9PT0gM1xyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIHt7ICh3ZWlnaGluZ1N0ZXAgPT09IDEgPyAnS2Fkb29nbHU6OlJlY29yZFN0ZXAnIDogd2VpZ2hpbmdTdGVwID09PSAyID8gJ0thZG9vZ2x1OjpGaXJzdFdlaWdoaW5nJyA6ICdLYWRvb2dsdTo6Q29tcGxldGVkJykgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2gzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvYWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gU3RlcCBJbmRpY2F0b3IgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgbWItM1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuXHJcbiAgICAgICAgPCEtLSBTdGVwIDE6IEFyYcOnICYgQmVsZ2UgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZnctYm9sZCB0ZXh0LXdoaXRlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo0MHB4OyBoZWlnaHQ6NDBweDsgZm9udC1zaXplOjFyZW07XCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZm9ybVBoYXNlID4gMSB8fCBpc0Z1bGx5Q29tcGxldGVkID8gJyMxOTg3NTQnIDogKGZvcm1QaGFzZSA9PT0gMSA/ICcjMGQ2ZWZkJyA6ICcjNmM3NTdkJylcIj5cclxuICAgICAgICAgICAgPGkgKm5nSWY9XCJmb3JtUGhhc2UgPiAxIHx8IGlzRnVsbHlDb21wbGV0ZWRcIiBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1QaGFzZSA8PSAxICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+MTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwibXQtMSBmdy1zZW1pYm9sZFwiIFtjbGFzcy50ZXh0LXN1Y2Nlc3NdPVwiZm9ybVBoYXNlID4gMSB8fCBpc0Z1bGx5Q29tcGxldGVkXCIgW2NsYXNzLnRleHQtcHJpbWFyeV09XCJmb3JtUGhhc2UgPT09IDEgJiYgIWlzRnVsbHlDb21wbGV0ZWRcIj57eyAnS2Fkb29nbHU6OlZlaGljbGVBbmREb2N1bWVudCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbXgtMlwiIHN0eWxlPVwiaGVpZ2h0OjNweDsgbWF4LXdpZHRoOjEyMHB4O1wiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJmb3JtUGhhc2UgPiAxID8gJyMxOTg3NTQnIDogJyNkZWUyZTYnXCI+PC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU3RlcCAyOiBUYXJ0xLFtIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZ3LWJvbGQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NDBweDsgaGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZToxcmVtO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIndlaWdoaW5nU3RlcCA9PT0gMyA/ICcjMTk4NzU0JyA6IChmb3JtUGhhc2UgPT09IDIgPyAnIzBkNmVmZCcgOiAnIzZjNzU3ZCcpXCI+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3ZWlnaGluZ1N0ZXAgPCAzXCI+Mjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwibXQtMSBmdy1zZW1pYm9sZFwiIFtjbGFzcy50ZXh0LXN1Y2Nlc3NdPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgW2NsYXNzLnRleHQtcHJpbWFyeV09XCJmb3JtUGhhc2UgPT09IDIgJiYgd2VpZ2hpbmdTdGVwIDwgM1wiIFtjbGFzcy50ZXh0LW11dGVkXT1cImZvcm1QaGFzZSA8IDIgJiYgd2VpZ2hpbmdTdGVwIDwgM1wiPnt7ICdLYWRvb2dsdTo6V2VpZ2hpbmdTdGVwJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc21hbGw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBteC0yXCIgc3R5bGU9XCJoZWlnaHQ6M3B4OyBtYXgtd2lkdGg6MTIwcHg7XCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIndlaWdoaW5nU3RlcCA9PT0gMyA/ICcjMTk4NzU0JyA6ICcjZGVlMmU2J1wiPjwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFN0ZXAgMzogVGFtYW1sYW5kxLEgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZnctYm9sZCB0ZXh0LXdoaXRlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo0MHB4OyBoZWlnaHQ6NDBweDsgZm9udC1zaXplOjFyZW07XCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwid2VpZ2hpbmdTdGVwID09PSAzID8gJyMxOTg3NTQnIDogJyM2Yzc1N2QnXCI+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3ZWlnaGluZ1N0ZXAgPCAzXCI+Mzwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwibXQtMSBmdy1zZW1pYm9sZFwiIFtjbGFzcy50ZXh0LXN1Y2Nlc3NdPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgW2NsYXNzLnRleHQtbXV0ZWRdPVwid2VpZ2hpbmdTdGVwIDwgM1wiPnt7ICdLYWRvb2dsdTo6Q29tcGxldGVkJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc21hbGw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tID09PT09PT09PT0gUEhBU0UgMTogQXJhw6cgJiBCZWxnZSA9PT09PT09PT09IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJmb3JtUGhhc2UgPT09IDEgJiYgIWlzRnVsbHlDb21wbGV0ZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcbiAgICAgIDwhLS0gU29sIHPDvHR1bjogR2lyacWfL8OHxLFrxLHFnyArIEFyYcOnICYgU8O8csO8Y8O8IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuXHJcbiAgICAgICAgPCEtLSBHcnVwIDE6IEdpcmnFnyAvIMOHxLFrxLHFnyBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNpZ24taW4tYWx0IG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpFbnRyeUV4aXRJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkdhdGVTZWxlY3Rpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZEdhdGVzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImdhdGVDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwiZ2F0ZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzVXBkYXRlTW9kZVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25HYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+QXJhw6cgSGFyZWtldCBUw7xyw7w8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkVmVoaWNsZVR5cGVzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInZlaGljbGVUeXBlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cImVudHJ5VHlwZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzVXBkYXRlTW9kZVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25WZWhpY2xlVHlwZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RW50cnlEYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LWRhdGUtYm94XHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZW50cnlEYXRlVGltZVwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWVcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzVXBkYXRlTW9kZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LWRhdGUtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RXhpdERhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJleGl0RGF0ZVRpbWVcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCJkZC5NTS55eXl5IEhIOm1tXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC1kYXRlLWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBHcnVwIDI6IEFyYcOnICYgU8O8csO8Y8O8IEJpbGdpbGVyaSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJ1Y2sgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OlZlaGljbGVEcml2ZXJJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6VHJ1Y2tQbGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRUcnVja1BsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJ0cnVja1BsYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cInBsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInRydWNrUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblRydWNrUGxhdGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCIgKm5nSWY9XCJ0cmFpbGVyUGxhdGVOb1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpUcmFpbGVyUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFRyYWlsZXJQbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwidHJhaWxlclBsYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cInBsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInRyYWlsZXJQbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uVHJhaWxlclBsYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpEcml2ZXJOYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkcml2ZXJGdWxsTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlckRyaXZlck5hbWUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMCBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgaXNUY0NpdGl6ZW4gPyAoJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uKSA6ICdLaW1saWsgTm8nIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyh2YWx1ZSldPVwiaXNUY0NpdGl6ZW5cIiBbcmVhZE9ubHldPVwiaXNVcGRhdGVNb2RlXCIgdGV4dD1cIlQuQy4gVmF0YW5kYcWfxLFcIj48L2R4LWNoZWNrLWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cInRjTm9cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImlzVGNDaXRpemVuID8gKCdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbikgOiAnS2ltbGlrIE5vJ1wiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIFNhxJ8gc8O8dHVuOiBCZWxnZSAmIFnDvGsgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG5cclxuICAgICAgICA8IS0tIEdydXAgMzogQmVsZ2UgJiBZw7xrIEJpbGdpbGVyaSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1hbHQgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OkRvY3VtZW50Q2FyZ29JbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkJ1c2luZXNzUGFydG5lcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkQWNjb3VudHNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiYWNjb3VudENvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJ0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwiYWNjb3VudFRpdGxlXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uQWNjb3VudFNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6V2F5YmlsbE51bWJlcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkV2F5YmlsbHNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwid2F5YmlsbENvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJkb2NOdW1cIlxyXG4gICAgICAgICAgICAgICAga2V5RXhwcj1cImRvY0VudHJ5XCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJ3YXliaWxsTm9cIlxyXG4gICAgICAgICAgICAgICAgW3Nob3dEYXRlRmlsdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2RlZmF1bHREYXRlRnJvbV09XCJ3YXliaWxsRGVmYXVsdERhdGVGcm9tXCJcclxuICAgICAgICAgICAgICAgIFtkZWZhdWx0RGF0ZVRvXT1cIndheWJpbGxEZWZhdWx0RGF0ZVRvXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbldheWJpbGxTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6Okl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRTdG9ja0l0ZW1zXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInN0b2NrSXRlbUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzdG9ja05hbWVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uU3RvY2tJdGVtU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpDb250YWluZXJObycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiY29udGFpbmVyTm9cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6TWFudWFsRW50cnknIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlcGFydHVyZVBsYWNlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkZXBhcnR1cmVMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpBdXRvRmlsbGVkRnJvbVdheWJpbGwnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpBcnJpdmFsUGxhY2UnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cImFycml2YWxMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYXJlYVxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCI3MFwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1hcmVhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gUGhhc2UgMSBBbHQgQnV0b25sYXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTMgbWItM1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpCYWNrJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIiF3ZWlnaGluZ01vZGUgJiYgIWlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1zYXZlXCJcclxuICAgICAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgW2xvYWRpbmddPVwiaXNTYXZpbmdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYWJwLWJ1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImlsZXJpR2l0KClcIj5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TmV4dCcgfCBhYnBMb2NhbGl6YXRpb24gfX0gPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1yaWdodCBtcy0xXCI+PC9pPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tID09PT09PT09PT0gUEhBU0UgMjogVGFydMSxbSBQYW5lbGkgPT09PT09PT09PSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZm9ybVBoYXNlID09PSAyICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBHcnVwIDE6IFRlcmF6aSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnkgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFsYW5jZS1zY2FsZSBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6V2VpZ2hpbmdQYW5lbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdNb2RlXCIgY2xhc3M9XCJiYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0JyA/ICdiZy13YXJuaW5nIHRleHQtZGFyaycgOiAnYmctcHJpbWFyeSdcIj5cclxuICAgICAgICAgICAgICAgICAge3sgd2VpZ2hpbmdNb2RlTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTMgYWxpZ24taXRlbXMtc3RyZXRjaFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gU29sOiBDYW5sxLEgVGFydMSxbSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiIHN0eWxlPVwiZGlzcGxheTogZ3JpZDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgYmctbGlnaHQgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHRleHQtY2VudGVyIHB5LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG1iLTEgZnctc2VtaWJvbGQgdGV4dC11cHBlcmNhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpMaXZlV2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1NjYWxlQ29ubmVjdGluZyB8fCBpc1NjYWxlUmVjb25uZWN0aW5nXCIgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXNlY29uZGFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7IChpc1NjYWxlUmVjb25uZWN0aW5nID8gJ0thZG9vZ2x1OjpSZWNvbm5lY3RpbmcnIDogJ0thZG9vZ2x1OjpDb25uZWN0aW5nJykgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzU2NhbGVDb25uZWN0aW5nICYmICFpc1NjYWxlUmVjb25uZWN0aW5nICYmICFzY2FsZUNvbm5lY3Rpb25GYWlsZWRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMi41cmVtOyBmb250LXdlaWdodDogYm9sZDsgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudFNjYWxlVmFsdWUgIT0gbnVsbCA/IChjdXJyZW50U2NhbGVWYWx1ZSB8IG51bWJlcjonMS4wLTAnKSArICcga2cnIDogJ+KAlCBrZycgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNjYWxlQ29ubmVjdGlvbkZhaWxlZFwiIGNsYXNzPVwidGV4dC1jZW50ZXIgcHktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoYWluLWJyb2tlbiBmYS0yeCB0ZXh0LXNlY29uZGFyeSBtYi0yIGQtYmxvY2tcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgZnctc2VtaWJvbGQgZC1ibG9ja1wiIHN0eWxlPVwiZm9udC1zaXplOiAwLjk1cmVtOyBsaW5lLWhlaWdodDogMS41O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6U2NhbGVDb25uZWN0aW9uRmFpbGVkSW5saW5lJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIE9ydGE6IEFrxLHFnyBva3UgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctcmlnaHQgZmEtMnggdGV4dC1tdXRlZFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gU2HEnzogU2FiaXRsZW5tacWfIERlxJ9lciArIFNhYml0bGUgYnV0b251IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCIgc3R5bGU9XCJkaXNwbGF5OiBncmlkO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAnYm9yZGVyLXN1Y2Nlc3MnIDogJ2JnLWxpZ2h0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAncmdiYSgyNSwxMzUsODQsMC4wOCknIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHRleHQtY2VudGVyIHB5LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbCBtYi0xIGZ3LXNlbWlib2xkIHRleHQtdXBwZXJjYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAndGV4dC1zdWNjZXNzJyA6ICd0ZXh0LW11dGVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OkZpeGVkVmFsdWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDIuNXJlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAndGV4dC1zdWNjZXNzJyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpeGVkU2NhbGVWYWx1ZSAhPSBudWxsID8gKGZpeGVkU2NhbGVWYWx1ZSB8IG51bWJlcjonMS4wLTAnKSArICcga2cnIDogJ+KAlCBrZycgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzRnVsbHlDb21wbGV0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1sZyB3LTEwMCBtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFNjYWxlVmFsdWUgPT0gbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhYml0bGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbG9jayBtZS0yXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6Rml4JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEdydXAgMjogVGFydMSxbSBLYXnEsXRsYXLEsSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaGlzdG9yeSBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6V2VpZ2hpbmdSZWNvcmRzJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctM1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gxLBsayBUYXJ0xLFtIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCByb3VuZGVkIHB5LTMgcHgtNFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMGQ2ZWZkOyBiYWNrZ3JvdW5kOiAjZmZmO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlyc3RXZWlnaGluZ1ZhbHVlICE9IG51bGw7IGVsc2Ugbm9GaXJzdFdlaWdoaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmaXJzdFdlaWdoaW5nVmFsdWUgfCBudW1iZXI6JzEuMC0wJyB9fSBrZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6T3BlcmF0b3InIHwgYWJwTG9jYWxpemF0aW9uIH19OiB7eyBmaXJzdE9wZXJhdG9yQ29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ZpcnN0V2VpZ2hpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmc3QtaXRhbGljIG10LTJcIj57eyAnS2Fkb29nbHU6Ok5vdFlldERvbmUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFNvbiBUYXJ0xLFtIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCByb3VuZGVkIHB5LTMgcHgtNFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjNmY0MmMxOyBiYWNrZ3JvdW5kOiAjZmZmO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYXN0V2VpZ2hpbmdWYWx1ZSAhPSBudWxsOyBlbHNlIG5vTGFzdFdlaWdoaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsYXN0V2VpZ2hpbmdWYWx1ZSB8IG51bWJlcjonMS4wLTAnIH19IGtnXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpPcGVyYXRvcicgfCBhYnBMb2NhbGl6YXRpb24gfX06IHt7IGxhc3RPcGVyYXRvckNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9MYXN0V2VpZ2hpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmc3QtaXRhbGljIG10LTJcIj57eyAnS2Fkb29nbHU6Ok5vdFlldERvbmUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIE5ldCBZw7xrIChzYWRlY2Ugd2VpZ2hpbmdTdGVwPT09Myd0ZSkgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gMyAmJiBuZXRXZWlnaHQgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgcm91bmRlZCBweS0zIHB4LTRcIiBzdHlsZT1cImJvcmRlci1sZWZ0OiA0cHggc29saWQgIzE5ODc1NDsgYmFja2dyb3VuZDogcmdiYSgyNSwxMzUsODQsMC4wNik7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdXBwZXJjYXNlIHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGQgbWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpOZXRXZWlnaHQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMS43NXJlbTsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsgY29sb3I6ICMxOTg3NTQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBuZXRXZWlnaHQgfCBudW1iZXI6JzEuMC0wJyB9fSBrZ1xyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBQaGFzZSAyIEFsdCBCdXRvbmxhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMyBtYi0zXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJnZXJpR2l0UGhhc2UoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OkJhY2snIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YWJwLWJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiIWlzRnVsbHlDb21wbGV0ZWRcIlxyXG4gICAgICAgIGljb25DbGFzcz1cImZhIGZhLXNhdmVcIlxyXG4gICAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIFtsb2FkaW5nXT1cImlzU2F2aW5nXCJcclxuICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCI+XHJcbiAgICAgICAge3sgJ0thZG9vZ2x1OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2FicC1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSA9PT09PT09PT09IFNVTU1BUlk6IFRhbWFtbGFuZMSxIEfDtnLDvG7DvG3DvCA9PT09PT09PT09IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJpc0Z1bGx5Q29tcGxldGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgIDwhLS0gVGFtIGdlbmnFn2xpazogVGFydMSxbSBTb251w6dsYXLEsSAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFsYW5jZS1zY2FsZSBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6V2VpZ2hpbmdSZXN1bHRzJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSDEsGxrIFRhcnTEsW0gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHNoYWRvdy1zbSByb3VuZGVkIHB5LTMgcHgtNCBoLTEwMFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMGQ2ZWZkO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj57eyAnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMS43NXJlbTsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpcnN0V2VpZ2hpbmdWYWx1ZSAhPSBudWxsID8gKGZpcnN0V2VpZ2hpbmdWYWx1ZSB8IG51bWJlcjonMS4wLTAnKSArICcga2cnIDogJ+KAlCBrZycgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBtdC0xXCI+e3sgJ0thZG9vZ2x1OjpPcGVyYXRvcicgfCBhYnBMb2NhbGl6YXRpb24gfX06IHt7IGZpcnN0T3BlcmF0b3JDb2RlIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBTb24gVGFydMSxbSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgc2hhZG93LXNtIHJvdW5kZWQgcHktMyBweC00IGgtMTAwXCIgc3R5bGU9XCJib3JkZXItbGVmdDogNHB4IHNvbGlkICM2ZjQyYzE7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdXBwZXJjYXNlIHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGQgbWItMVwiPnt7ICdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNzVyZW07IGxldHRlci1zcGFjaW5nOiAwLjAyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBsYXN0V2VpZ2hpbmdWYWx1ZSAhPSBudWxsID8gKGxhc3RXZWlnaGluZ1ZhbHVlIHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIj57eyAnS2Fkb29nbHU6Ok9wZXJhdG9yJyB8IGFicExvY2FsaXphdGlvbiB9fToge3sgbGFzdE9wZXJhdG9yQ29kZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gTmV0IFnDvGsgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoYWRvdy1zbSByb3VuZGVkIHB5LTMgcHgtNCBoLTEwMFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMTk4NzU0OyBiYWNrZ3JvdW5kOiByZ2JhKDI1LDEzNSw4NCwwLjA2KTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC11cHBlcmNhc2UgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZCBtYi0xXCI+e3sgJ0thZG9vZ2x1OjpOZXRXZWlnaHQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMS43NXJlbTsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsgY29sb3I6ICMxOTg3NTQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBuZXRXZWlnaHQgIT0gbnVsbCA/IChuZXRXZWlnaHQgfCBudW1iZXI6JzEuMC0wJykgKyAnIGtnJyA6ICfigJQga2cnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gU29sIHPDvHR1bjogR2lyacWfL8OHxLFrxLHFnyArIEFyYcOnICYgU8O8csO8Y8O8IC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEdydXA6IEdpcmnFnyAvIMOHxLFrxLHFnyBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNpZ24taW4tYWx0IG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpFbnRyeUV4aXRJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpHYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGdhdGVOYW1lIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj5BcmHDpyBIYXJla2V0IFTDvHLDvDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGVudHJ5VHlwZU5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RW50cnlEYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGVudHJ5RGF0ZSA/IChlbnRyeURhdGUgfCBkYXRlOidkZC5NTS55eXl5JykgOiAn4oCUJyB9fSB7eyBlbnRyeVRpbWUgfHwgJycgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkV4aXREYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGV4aXREYXRlID8gKGV4aXREYXRlIHwgZGF0ZTonZGQuTU0ueXl5eScpIDogJ+KAlCcgfX0ge3sgZXhpdFRpbWUgfHwgJycgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEdydXA6IEFyYcOnICYgU8O8csO8Y8O8IEJpbGdpbGVyaSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJ1Y2sgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OlZlaGljbGVEcml2ZXJJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpUcnVja1BsYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHRydWNrUGxhdGVObyB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpUcmFpbGVyUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgdHJhaWxlclBsYXRlTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RHJpdmVyTmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBkcml2ZXJGdWxsTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHRjTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBTYcSfIHPDvHR1bjogQmVsZ2UgJiBZw7xrIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEdydXA6IEJlbGdlICYgWcO8ayBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGUtYWx0IG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpEb2N1bWVudENhcmdvSW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RHJpdmVyQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBkcml2ZXJOYW1lIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkJ1c2luZXNzUGFydG5lcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBhY2NvdW50VGl0bGUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6V2F5YmlsbE51bWJlcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyB3YXliaWxsTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6U2NhbGVDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHNjYWxlTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpJdGVtQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBzdG9ja05hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6Q29udGFpbmVyTm8nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgY29udGFpbmVyTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RGVwYXJ0dXJlVG9BcnJpdmFsJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IChkZXBhcnR1cmVMb2NhdGlvbiB8fCAn4oCUJykgKyAnIOKGkiAnICsgKGFycml2YWxMb2NhdGlvbiB8fCAn4oCUJykgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGRlc2NyaXB0aW9uIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFsdCBCdXRvbmxhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMyBtYi0zXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJnb0JhY2soKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OkJhY2tUb0xpc3QnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJlbnRyeVR5cGVNYWxHQyAmJiByZWNvcmQ/LnVfU3RhdHVzID09PSAnMidcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEb2luZ0dvb2RzTW92ZW1lbnRcIlxyXG4gICAgICAgIChjbGljayk9XCJkb0dvb2RzTW92ZW1lbnQoKVwiPlxyXG4gICAgICAgIDxpIFtjbGFzc109XCJpc0RvaW5nR29vZHNNb3ZlbWVudCA/ICdmYSBmYS1zcGlubmVyIGZhLXNwaW4gbWUtMScgOiAnZmEgZmEtZXhjaGFuZ2UgbWUtMSdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAge3sgJ0thZG9vZ2x1OjpNYWxHY1lhcCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwvYWJwLXBhZ2U+XHJcbiJdfQ==
|
|
829
|
+
args: [{ selector: 'lib-hit-entry-weighing-form', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::WaybillNumber' | abpLocalization }}\r\n <i *ngIf=\"isWaybillLoading\" class=\"fa fa-spinner fa-spin ms-1 text-primary\"></i>\r\n </label>\r\n <hit-lookup-select\r\n [tabs]=\"waybillTabs\"\r\n [editingData]=\"waybillNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button *ngIf=\"isUpdateMode\" class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n\r\n <!-- Grup 1: Terazi -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary d-flex align-items-center justify-content-between\">\r\n <span>\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n </span>\r\n <span *ngIf=\"weighingMode\" class=\"badge\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"row g-3 align-items-stretch\">\r\n\r\n <!-- Sol: Canl\u0131 Tart\u0131m -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card bg-light h-100\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1 fw-semibold text-uppercase\">\r\n {{ 'Kadooglu::LiveWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"isScaleConnecting || isScaleReconnecting\" class=\"my-2\">\r\n <div class=\"spinner-border text-secondary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{ (isScaleReconnecting ? 'Kadooglu::Reconnecting' : 'Kadooglu::Connecting') | abpLocalization }}</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isScaleConnecting && !isScaleReconnecting && !scaleConnectionFailed\" style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div *ngIf=\"scaleConnectionFailed\" class=\"text-center py-1\">\r\n <i class=\"fa fa-chain-broken fa-2x text-secondary mb-2 d-block\"></i>\r\n <span class=\"text-secondary fw-semibold d-block\" style=\"font-size: 0.95rem; line-height: 1.5;\">\r\n {{ 'Kadooglu::ScaleConnectionFailedInline' | abpLocalization }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Orta: Ak\u0131\u015F oku -->\r\n <div class=\"col-md-2 d-flex align-items-center justify-content-center\">\r\n <i class=\"fa fa-arrow-right fa-2x text-muted\"></i>\r\n </div>\r\n\r\n <!-- Sa\u011F: Sabitlenmi\u015F De\u011Fer + Sabitle butonu -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card h-100\"\r\n [ngClass]=\"fixedScaleValue != null ? 'border-success' : 'bg-light'\"\r\n [style.background-color]=\"fixedScaleValue != null ? 'rgba(25,135,84,0.08)' : ''\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"small mb-1 fw-semibold text-uppercase\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : 'text-muted'\">\r\n {{ 'Kadooglu::FixedValue' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : ''\">\r\n {{ fixedScaleValue != null ? (fixedScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-success btn-lg w-100 mt-2\"\r\n [disabled]=\"currentScaleValue == null\"\r\n (click)=\"sabitle()\">\r\n <i class=\"fa fa-lock me-2\"></i>\r\n {{ 'Kadooglu::Fix' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Tart\u0131m Kay\u0131tlar\u0131 -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-history me-2\"></i>{{ 'Kadooglu::WeighingRecords' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #0d6efd; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::FirstWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #6f42c1; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::LastWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece weighingStep===3'te) -->\r\n <div class=\"col-md-4\" *ngIf=\"weighingStep === 3 && netWeight != null\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::NetWeight' | abpLocalization }}\r\n </div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Tam geni\u015Flik: Tart\u0131m Sonu\u00E7lar\u0131 -->\r\n <div class=\"col-12\">\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingResults' | abpLocalization }}\r\n </div>\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <button\r\n *ngIf=\"record\"\r\n class=\"btn btn-info\"\r\n type=\"button\"\r\n (click)=\"barkodYazdir()\">\r\n <i class=\"fa fa-print me-1\" aria-hidden=\"true\"></i> Barkod Yazd\u0131r\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n" }]
|
|
830
|
+
}], ctorParameters: function () { return [{ type: i1.HitEntryWeighingService }, { type: i2.HitStockTransferService }, { type: i3.HitPurchaseDeliveryNoteService }, { type: i4.HitCarrierPersonService }, { type: i5.HitUserGateService }, { type: i6.HitGateService }, { type: i7.ConfirmationService }, { type: i7.ToasterService }, { type: i8.ActivatedRoute }, { type: i8.Router }, { type: i9.LocalizationService }, { type: i10.ScaleSignalRService }]; } });
|
|
831
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFJN0QsT0FBTyxFQUE0QixRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBNEIzQyxNQUFNLE9BQU8sNkJBQTZCO0lBOEZ4QyxZQUNVLE9BQWdDLEVBQ2hDLG9CQUE2QyxFQUM3QywyQkFBMkQsRUFDM0Qsb0JBQTZDLEVBQzdDLGVBQW1DLEVBQ25DLFdBQTJCLEVBQzNCLFlBQWlDLEVBQ2pDLE9BQXVCLEVBQ3ZCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxtQkFBd0MsRUFDeEMsbUJBQXdDO1FBWHhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUFnQztRQUMzRCx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzdDLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUNuQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFD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ampDQStuQkE7MkZEOWxCYSw2QkFBNkI7a0JBSnpDLFNBQVM7K0JBQ0UsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU2NhbGVTaWduYWxSU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NjYWxlLXNpZ25hbHIuc2VydmljZSc7XHJcbmltcG9ydCB7IEhpdEVudHJ5V2VpZ2hpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1lbnRyeS13ZWlnaGluZy9oaXQtZW50cnktd2VpZ2hpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IEhpdFN0b2NrVHJhbnNmZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1zdG9jay10cmFuc2Zlci9oaXQtc3RvY2stdHJhbnNmZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEhpdFB1cmNoYXNlRGVsaXZlcnlOb3RlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtcHVyY2hhc2UtZGVsaXZlcnktbm90ZS9oaXQtcHVyY2hhc2UtZGVsaXZlcnktbm90ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGl0Q2FycmllclBlcnNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWNhcnJpZXItcGVyc29uL2hpdC1jYXJyaWVyLXBlcnNvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGl0VXNlckdhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC11c2VyLWdhdGUvaGl0LXVzZXItZ2F0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGl0R2F0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWdhdGUvaGl0LWdhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IExvb2t1cFRhYiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9oaXQtbW9kYWwvaGl0LW1vZGFsLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEVudHJ5V2VpZ2hpbmcsXHJcbiAgRW50cnlXZWlnaGluZ0FjY291bnQsXHJcbiAgRW50cnlXZWlnaGluZ0RvY3VtZW50LFxyXG4gIEVudHJ5V2VpZ2hpbmdEcml2ZXIsXHJcbiAgRW50cnlXZWlnaGluZ0dhdGUsXHJcbiAgRW50cnlXZWlnaGluZ1NjYWxlLFxyXG4gIEVudHJ5V2VpZ2hpbmdTdG9ja0l0ZW0sXHJcbiAgRW50cnlXZWlnaGluZ1RyYWlsZXJQbGF0ZSxcclxuICBFbnRyeVdlaWdoaW5nVHJ1Y2tQbGF0ZSxcclxuICBFbnRyeVdlaWdoaW5nVmVoaWNsZVR5cGUsXHJcbiAgU2F2ZUVudHJ5V2VpZ2hpbmdEdG8sXHJcbn0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1lbnRyeS13ZWlnaGluZy9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oaXQtZW50cnktd2VpZ2hpbmctZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIaXRFbnRyeVdlaWdoaW5nRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICByZWNvcmQ6IEVudHJ5V2VpZ2hpbmcgfCBudWxsID0gbnVsbDtcclxuICBpc1VwZGF0ZU1vZGUgPSBmYWxzZTtcclxuXHJcbiAgLy8gV2l6YXJkIHBoYXNlOiAxID0gQXJhw6cgJiBCZWxnZSwgMiA9IFRhcnTEsW0gUGFuZWxpXHJcbiAgZm9ybVBoYXNlOiAxIHwgMiA9IDE7XHJcbiAgLy8gV2VpZ2hpbmcgbW9kZSBmcm9tIHF1ZXJ5IHBhcmFtOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCAobnVsbCA9IG5vcm1hbCBuZXcvZWRpdClcclxuICB3ZWlnaGluZ01vZGU6ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gTG9va3VwIGxvYWRlciBmdW5jdGlvbnMgKGNhbGxlZCBsYXppbHkgd2hlbiBtb2RhbCBvcGVucylcclxuICBsb2FkRG9jdW1lbnRzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldERvY3VtZW50cygpO1xyXG4gIGxvYWRTY2FsZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0U2NhbGVzKCk7XHJcbiAgbG9hZFRydWNrUGxhdGVzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldFRydWNrUGxhdGVzKCk7XHJcbiAgbG9hZFRyYWlsZXJQbGF0ZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0VHJhaWxlclBsYXRlcygpO1xyXG4gIGxvYWREcml2ZXJzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldERyaXZlcnMoKTtcclxuICBsb2FkQWNjb3VudHMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0QWNjb3VudHMoKTtcclxuICBsb2FkU3RvY2tJdGVtcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRTdG9ja0l0ZW1zKCk7XHJcbiAgd2F5YmlsbFRhYnM6IExvb2t1cFRhYltdID0gW107XHJcbiAgbG9hZEdhdGVzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldEdhdGVzKCk7XHJcbiAgbG9hZFZlaGljbGVUeXBlcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRWZWhpY2xlVHlwZXMoKTtcclxuXHJcbiAgLy8gQ29sdW1uIGNvbmZpZ3NcclxuICBkb2N1bWVudENvbHVtbnM6IGFueVtdID0gW107XHJcbiAgc2NhbGVDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIHRydWNrUGxhdGVDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIHRyYWlsZXJQbGF0ZUNvbHVtbnM6IGFueVtdID0gW107XHJcbiAgZHJpdmVyQ29sdW1uczogYW55W10gPSBbXTtcclxuICBhY2NvdW50Q29sdW1uczogYW55W10gPSBbXTtcclxuICBzdG9ja0l0ZW1Db2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIGdhdGVDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIHZlaGljbGVUeXBlQ29sdW1uczogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gRm9ybSBmaWVsZHNcclxuICBkb2N1bWVudENvZGUgPSAnJztcclxuICBkb2N1bWVudE5hbWUgPSAnJztcclxuICBzY2FsZUNvZGUgPSAnMSc7XHJcbiAgc2NhbGVOYW1lID0gJ0thbnRhciAxJztcclxuICBhY2NvdW50Q29kZSA9ICcnO1xyXG4gIGFjY291bnRUaXRsZSA9ICcnO1xyXG4gIHRydWNrUGxhdGVDb2RlID0gJyc7XHJcbiAgdHJ1Y2tQbGF0ZU5vID0gJyc7XHJcbiAgdHJhaWxlclBsYXRlQ29kZSA9ICcnO1xyXG4gIHRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgZHJpdmVyQ29kZSA9ICcnO1xyXG4gIGRyaXZlck5hbWUgPSAnJztcclxuICBzdG9ja0NvZGUgPSAnJztcclxuICBzdG9ja05hbWUgPSAnJztcclxuICBjb250YWluZXJObyA9ICcnO1xyXG4gIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgd2F5YmlsbE5vID0gJyc7XHJcbiAgZGVwYXJ0dXJlTG9jYXRpb24gPSAnJztcclxuICBhcnJpdmFsTG9jYXRpb24gPSAnRmFicmlrYSc7XHJcblxyXG4gIC8vIFpaWl9URVNUMiB5ZW5pIGFsYW5sYXJcclxuICBnYXRlQ29kZSA9ICcnO1xyXG4gIGdhdGVOYW1lID0gJyc7XHJcbiAgZW50cnlEYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBlbnRyeVRpbWUgPSAnJztcclxuICBleGl0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgZXhpdFRpbWUgPSAnJztcclxuICBlbnRyeVR5cGVDb2RlID0gJyc7XHJcbiAgZW50cnlUeXBlTmFtZSA9ICcnO1xyXG4gIGRyaXZlckZ1bGxOYW1lID0gJyc7XHJcbiAgdGNObyA9ICcnO1xyXG4gIGlzVGNDaXRpemVuID0gdHJ1ZTtcclxuXHJcbiAgLy8gVGFydMSxbSBiaWxnaWxlcmkgKHJlYWRvbmx5KVxyXG4gIGZpcnN0T3BlcmF0b3JDb2RlID0gJyc7XHJcbiAgZmlyc3RXZWlnaGluZ1ZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBsYXN0T3BlcmF0b3JDb2RlID0gJyc7XHJcbiAgbGFzdFdlaWdoaW5nVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIGN1cnJlbnRTY2FsZVZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBmaXhlZFNjYWxlVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBpc1NhdmluZyA9IGZhbHNlO1xyXG4gIGlzV2VpZ2hpbmcgPSBmYWxzZTtcclxuICBpc1dheWJpbGxMb2FkaW5nID0gZmFsc2U7XHJcbiAgZW50cnlUeXBlVHJ0bVlwaWxjayA9IGZhbHNlO1xyXG4gIGVudHJ5VHlwZU1hbEdDID0gZmFsc2U7XHJcbiAgaXNEb2luZ0dvb2RzTW92ZW1lbnQgPSBmYWxzZTtcclxuXHJcbiAgaXNTY2FsZUNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICBpc1NjYWxlUmVjb25uZWN0aW5nID0gZmFsc2U7XHJcbiAgc2NhbGVDb25uZWN0aW9uRmFpbGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzY2FsZVN1YjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzY2FsZUFwaVVybCA9ICdodHRwOi8vMTkyLjE2OC4xMC45NTo1MTAwJztcclxuICBwcml2YXRlIHJlYWRvbmx5IHNjYWxlSWQgPSAnS0FOVEFSLTAxJztcclxuXHJcbiAgLyoqIFNBUCByZXNwb25zZSBjYW1lbENhc2UvUGFzY2FsQ2FzZSBmYXJrxLFuxLEgaGFuZGxlIGVkZXIgKi9cclxuICBwcml2YXRlIGdldERvY0VudHJ5KHJlYzogRW50cnlXZWlnaGluZyB8IG51bGwpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFyZWMpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gcmVjLmRvY0VudHJ5ID8/IChyZWMgYXMgYW55KS5kb2NFbnRyeTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBIaXRFbnRyeVdlaWdoaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvY2tUcmFuc2ZlclNlcnZpY2U6IEhpdFN0b2NrVHJhbnNmZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwdXJjaGFzZURlbGl2ZXJ5Tm90ZVNlcnZpY2U6IEhpdFB1cmNoYXNlRGVsaXZlcnlOb3RlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2FycmllclBlcnNvblNlcnZpY2U6IEhpdENhcnJpZXJQZXJzb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyR2F0ZVNlcnZpY2U6IEhpdFVzZXJHYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgZ2F0ZVNlcnZpY2U6IEhpdEdhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb246IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBsb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzY2FsZVNpZ25hbFJTZXJ2aWNlOiBTY2FsZVNpZ25hbFJTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGwgPSAoa2V5OiBzdHJpbmcpID0+IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6JyArIGtleSk7XHJcbiAgICB0aGlzLmRvY3VtZW50Q29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnRG9jdW1lbnRObycpLCB3aWR0aDogMTIwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246IGwoJ0NhcmROYW1lJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnNjYWxlQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogODAgfSxcclxuICAgICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogbCgnU2NhbGVOYW1lJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnRydWNrUGxhdGVDb2x1bW5zID0gW1xyXG4gICAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiBsKCdDb2RlJyksIHdpZHRoOiAxMDAgfSxcclxuICAgICAgeyBkYXRhRmllbGQ6ICdwbGF0ZU5vJywgY2FwdGlvbjogbCgnUGxhdGUnKSB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudHJhaWxlclBsYXRlQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogMTAwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAncGxhdGVObycsIGNhcHRpb246IGwoJ1BsYXRlJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLmRyaXZlckNvbHVtbnMgPSBbXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246IGwoJ0NvZGUnKSwgd2lkdGg6IDEwMCB9LFxyXG4gICAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiBsKCdGdWxsTmFtZScpIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy5hY2NvdW50Q29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogMTAwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAndGl0bGUnLCBjYXB0aW9uOiBsKCdBY2NvdW50VGl0bGUnKSB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMuc3RvY2tJdGVtQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogMTAwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246IGwoJ1N0b2NrTmFtZScpIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgd2F5YmlsbERhdGVGcm9tID0gKCgpID0+IHsgY29uc3QgZCA9IG5ldyBEYXRlKCk7IGQuc2V0RGF0ZShkLmdldERhdGUoKSAtIDMpOyByZXR1cm4gZDsgfSkoKTtcclxuICAgIGNvbnN0IHdheWJpbGxEYXRlVG8gPSBuZXcgRGF0ZSgpO1xyXG4gICAgdGhpcy53YXliaWxsVGFicyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBsKCdXYXliaWxsVGFiX1N0b2NrVHJhbnNmZXInKSxcclxuICAgICAgICBsb2FkRm46IChwYXJhbXM/OiBhbnkpID0+IHRoaXMuc3RvY2tUcmFuc2ZlclNlcnZpY2UuZ2V0TGlzdChwYXJhbXMpLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiAndV9FRkFUTk8nLFxyXG4gICAgICAgIGtleUV4cHI6ICdkb2NFbnRyeScsXHJcbiAgICAgICAgc2hvd0RhdGVGaWx0ZXI6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdERhdGVGcm9tOiB3YXliaWxsRGF0ZUZyb20sXHJcbiAgICAgICAgZGVmYXVsdERhdGVUbzogd2F5YmlsbERhdGVUbyxcclxuICAgICAgICBjb2x1bW5zOiBbXHJcbiAgICAgICAgICB7IGRhdGFGaWVsZDogJ2RvY051bScsICAgICAgICBjYXB0aW9uOiBsKCdEb2N1bWVudE5vJyksICAgIHdpZHRoOiAxMDAgfSxcclxuICAgICAgICAgIHsgZGF0YUZpZWxkOiAndV9FRkFUTk8nLCAgICAgIGNhcHRpb246IGwoJ1dheWJpbGxObycpLCAgICAgd2lkdGg6IDEyMCB9LFxyXG4gICAgICAgICAgeyBkYXRhRmllbGQ6ICdjYXJkTmFtZScsICAgICAgY2FwdGlvbjogbCgnQ2FyZE5hbWUnKSB9LFxyXG4gICAgICAgICAgeyBkYXRhRmllbGQ6ICdmcm9tV2FyZWhvdXNlJywgY2FwdGlvbjogbCgnRXhpdFdhcmVob3VzZScpLCB3aWR0aDogMTQwIH0sXHJcbiAgICAgICAgICB7IGRhdGFGaWVsZDogJ3VfQXJhY1BsYWthc2knLCBjYXB0aW9uOiBsKCdWZWhpY2xlUGxhdGUnKSwgIHdpZHRoOiAxMTAgfSxcclxuICAgICAgICAgIHsgZGF0YUZpZWxkOiAndV9Tb2ZvckFkJywgICAgIGNhcHRpb246IGwoJ0RyaXZlck5hbWUnKSB9LFxyXG4gICAgICAgICAgeyBkYXRhRmllbGQ6ICd1X1NvZm9yU295YWRpJywgY2FwdGlvbjogbCgnRHJpdmVyU3VybmFtZScpIH0sXHJcbiAgICAgICAgICB7IGRhdGFGaWVsZDogJ2NvbW1lbnRzJywgICAgICBjYXB0aW9uOiBsKCdEZXNjcmlwdGlvbicpIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBsKCdXYXliaWxsVGFiX1B1cmNoYXNlRGVsaXZlcnknKSxcclxuICAgICAgICBsb2FkRm46IChwYXJhbXM/OiBhbnkpID0+IHRoaXMucHVyY2hhc2VEZWxpdmVyeU5vdGVTZXJ2aWNlLmdldExpc3QocGFyYW1zKSxcclxuICAgICAgICBkaXNwbGF5TmFtZTogJ3VfRUZBVE5PJyxcclxuICAgICAgICBrZXlFeHByOiAnZG9jRW50cnknLFxyXG4gICAgICAgIHNob3dEYXRlRmlsdGVyOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHREYXRlRnJvbTogd2F5YmlsbERhdGVGcm9tLFxyXG4gICAgICAgIGRlZmF1bHREYXRlVG86IHdheWJpbGxEYXRlVG8sXHJcbiAgICAgICAgY29sdW1uczogW1xyXG4gICAgICAgICAgeyBkYXRhRmllbGQ6ICdkb2NOdW0nLCAgICAgICAgY2FwdGlvbjogbCgnRG9jdW1lbnRObycpLCAgICB3aWR0aDogMTAwIH0sXHJcbiAgICAgICAgICB7IGRhdGFGaWVsZDogJ3VfRUZBVE5PJywgICAgICBjYXB0aW9uOiBsKCdXYXliaWxsTm8nKSwgICAgIHdpZHRoOiAxMjAgfSxcclxuICAgICAgICAgIHsgZGF0YUZpZWxkOiAnY2FyZE5hbWUnLCAgICAgIGNhcHRpb246IGwoJ0NhcmROYW1lJykgfSxcclxuICAgICAgICAgIHsgZGF0YUZpZWxkOiAndV9BcmFjUGxha2FzaScsIGNhcHRpb246IGwoJ1ZlaGljbGVQbGF0ZScpLCAgd2lkdGg6IDExMCB9LFxyXG4gICAgICAgICAgeyBkYXRhRmllbGQ6ICd1X1NvZm9yQWQnLCAgICAgY2FwdGlvbjogbCgnRHJpdmVyTmFtZScpIH0sXHJcbiAgICAgICAgICB7IGRhdGFGaWVsZDogJ3VfU29mb3JTb3lhZGknLCBjYXB0aW9uOiBsKCdEcml2ZXJTdXJuYW1lJykgfSxcclxuICAgICAgICAgIHsgZGF0YUZpZWxkOiAnY29tbWVudHMnLCAgICAgIGNhcHRpb246IGwoJ0Rlc2NyaXB0aW9uJykgfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMuZ2F0ZUNvbHVtbnMgPSBbXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246IGwoJ0NvZGUnKSwgd2lkdGg6IDgwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246IGwoJ0dhdGVOYW1lJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnZlaGljbGVUeXBlQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogODAgfSxcclxuICAgICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogbCgnRW50cnlUeXBlTmFtZScpIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIFJlYWQgd2VpZ2hpbmcgbW9kZSBmcm9tIHF1ZXJ5IHBhcmFtc1xyXG4gICAgY29uc3QgbW9kZSA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ21vZGUnKTtcclxuICAgIGlmIChtb2RlID09PSAnZmlyc3QnIHx8IG1vZGUgPT09ICdsYXN0Jykge1xyXG4gICAgICB0aGlzLndlaWdoaW5nTW9kZSA9IG1vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gw5ZuY2Ugcm91dGVyIHN0YXRlJ2RlbiBzYXTEsXIgdmVyaXNpbmkgb2t1IChsaXN0ZSBla3JhbsSxbmRhbiBha3RhcsSxbGFuKVxyXG4gICAgY29uc3Qgc3RhdGVEYXRhID0gaGlzdG9yeS5zdGF0ZT8ucm93RGF0YTtcclxuICAgIGNvbnN0IGlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJyk7XHJcblxyXG4gICAgaWYgKHN0YXRlRGF0YSkge1xyXG4gICAgICAvLyBTdGF0ZSdkZW4gZ2VsZW4gdmVyaXlpIGt1bGxhbiAoQVBJIMOnYcSfcsSxc8SxIG9sbWFkYW4pXHJcbiAgICAgIHRoaXMuaXNVcGRhdGVNb2RlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZWNvcmQgPSBzdGF0ZURhdGE7XHJcbiAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgICAgLy8gU29uIHRhcnTEsW0gbW9kdW5kYXlzYSBkaXJla3QgdGFydMSxbSBwYW5lbGluaSBhw6dcclxuICAgICAgaWYgKHRoaXMud2VpZ2hpbmdNb2RlID09PSAnbGFzdCcpIHtcclxuICAgICAgICB0aGlzLmZvcm1QaGFzZSA9IDI7XHJcbiAgICAgICAgdGhpcy5fc3RhcnRTY2FsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlkKSB7XHJcbiAgICAgIC8vIEZhbGxiYWNrOiBzdGF0ZSB5b2tzYSBBUEknZGVuIHnDvGtsZVxyXG4gICAgICB0aGlzLmlzVXBkYXRlTW9kZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VydmljZS5nZXQoK2lkKS5zdWJzY3JpYmUocmVjb3JkID0+IHtcclxuICAgICAgICB0aGlzLnJlY29yZCA9IHJlY29yZDtcclxuICAgICAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgICAgICAgLy8gU29uIHRhcnTEsW0gbW9kdW5kYXlzYSBkaXJla3QgdGFydMSxbSBwYW5lbGluaSBhw6dcclxuICAgICAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgPT09ICdsYXN0Jykge1xyXG4gICAgICAgICAgdGhpcy5mb3JtUGhhc2UgPSAyO1xyXG4gICAgICAgICAgdGhpcy5fc3RhcnRTY2FsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBZZW5pIGthecSxdDogdmFyc2F5xLFsYW4gZ2lyacWfIHRhcmloaW5pIMWfdSBhbmtpIHRhcmloL3NhYXQgb2xhcmFrIGF5YXJsYVxyXG4gICAgICB0aGlzLnNldERlZmF1bHRFbnRyeURhdGVUaW1lKCk7XHJcbiAgICAgIC8vIFllbmkga2F5xLF0OiBrdWxsYW7EsWPEsW7EsW4gdmFyc2F5xLFsYW4ga2FwxLFzxLFuxLEgecO8a2xlXHJcbiAgICAgIHRoaXMubG9hZERlZmF1bHRHYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgd2VpZ2hpbmdTdGVwKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBzdGF0dXMgPSAodGhpcy5yZWNvcmQgYXMgYW55KT8udV9TdGF0dXM7XHJcbiAgICBpZiAodGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSAhPT0gbnVsbCB8fCBzdGF0dXMgPT09ICcyJyB8fCBzdGF0dXMgPT09ICczJyB8fCBzdGF0dXMgPT09ICc0JykgcmV0dXJuIDM7XHJcbiAgICBpZiAodGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgIT09IG51bGwgfHwgc3RhdHVzID09PSAnMScpIHJldHVybiAyO1xyXG4gICAgcmV0dXJuIDE7XHJcbiAgfVxyXG5cclxuICAvKiogxLBsayB0YXJ0xLFtIHlhcMSxbGTEsXlzYSAoc3RlcCA+PSAyKSBkZXRheSBhbGFubGFyxLFuxLEga2lsaXRsZSAqL1xyXG4gIGdldCBpc0Zvcm1Mb2NrZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWlnaGluZ1N0ZXAgPj0gMjtcclxuICB9XHJcblxyXG4gIC8qKiBIZXIgaWtpIHRhcnTEsW0gZGEgdGFtYW1sYW5kxLF5c2EgKHN0ZXAgPT09IDMpIHTDvG0gZWtyYW7EsSBraWxpdGxlICovXHJcbiAgZ2V0IGlzRnVsbHlDb21wbGV0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWlnaGluZ1N0ZXAgPT09IDM7XHJcbiAgfVxyXG5cclxuICBnZXQgZW50cnlEYXRlVGltZSgpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5idWlsZERhdGVUaW1lKHRoaXMuZW50cnlEYXRlLCB0aGlzLmVudHJ5VGltZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZXhpdERhdGVUaW1lKCk6IERhdGUgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmJ1aWxkRGF0ZVRpbWUodGhpcy5leGl0RGF0ZSwgdGhpcy5leGl0VGltZSk7XHJcbiAgfVxyXG5cclxuICAvKiogVGFyaWggc3RyaW5nICsgc2F5xLFzYWwgc2FhdCAow7ZyLiA4MzAgPSAwODozMCkgZGXEn2VyaW5kZW4gRGF0ZSBvbHXFn3R1cnVyICovXHJcbiAgcHJpdmF0ZSBidWlsZERhdGVUaW1lKGRhdGVTdHI6IHN0cmluZyB8IG51bGwsIHRpbWVWYWw6IHN0cmluZyB8IG51bWJlciB8IG51bGwpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICBpZiAoIWRhdGVTdHIpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGVTdHIpO1xyXG4gICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB0ID0gTnVtYmVyKHRpbWVWYWwpO1xyXG4gICAgaWYgKCFpc05hTih0KSkge1xyXG4gICAgICBkLnNldEhvdXJzKE1hdGguZmxvb3IodCAvIDEwMCksIHQgJSAxMDAsIDAsIDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGQ7XHJcbiAgfVxyXG5cclxuICBnZXQgbmV0V2VpZ2h0KCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuZmlyc3RXZWlnaGluZ1ZhbHVlICE9PSBudWxsICYmIHRoaXMubGFzdFdlaWdoaW5nVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuZmlyc3RXZWlnaGluZ1ZhbHVlIC0gdGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCB3ZWlnaGluZ01vZGVMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMud2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnXHJcbiAgICAgID8gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpGaXJzdFdlaWdoaW5nJylcclxuICAgICAgOiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6Okxhc3RXZWlnaGluZycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Rm9ybSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlY29yZCkge1xyXG4gICAgICBjb25zdCByID0gdGhpcy5yZWNvcmQgYXMgYW55OyAvLyBTQVAgY2FtZWxDYXNlIGZhbGxiYWNrXHJcbiAgICAgIHRoaXMuc2NhbGVDb2RlID0gci51X1NjYWxlQ29kZSA/PyByLnVfU2NhbGVDb2RlID8/ICcnO1xyXG4gICAgICB0aGlzLmFjY291bnRDb2RlID0gci51X0NhcmRDb2RlID8/IHIudV9DYXJkQ29kZSA/PyAnJztcclxuICAgICAgdGhpcy50cnVja1BsYXRlQ29kZSA9IHIudV9QbGF0ZSA/PyByLnVfUGxhdGUgPz8gJyc7XHJcbiAgICAgIHRoaXMudHJ1Y2tQbGF0ZU5vID0gci51X1BsYXRlID8/IHIudV9QbGF0ZSA/PyAnJztcclxuICAgICAgdGhpcy50cmFpbGVyUGxhdGVDb2RlID0gci51X0RvcnNlUGxhdGUgPz8gJyc7XHJcbiAgICAgIHRoaXMudHJhaWxlclBsYXRlTm8gPSByLnVfRG9yc2VQbGF0ZSA/PyAnJztcclxuICAgICAgdGhpcy5kcml2ZXJDb2RlID0gci51X0RyaXZlckNvZGUgPz8gci51X0RyaXZlckNvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuc3RvY2tDb2RlID0gci51X0l0ZW1Db2RlID8/IHIudV9JdGVtQ29kZSA/PyAnJztcclxuICAgICAgdGhpcy5jb250YWluZXJObyA9IHIudV9Db250YWluZXJObyA/PyByLnVfQ29udGFpbmVyTm8gPz8gJyc7XHJcbiAgICAgIHRoaXMud2F5YmlsbE5vID0gci51X0Rlc3BhdGNoQWR2aWNlTm8gPz8gci51X0Rlc3BhdGNoQWR2aWNlTm8gPz8gJyc7XHJcbiAgICAgIHRoaXMuZGVwYXJ0dXJlTG9jYXRpb24gPSByLnVfU2hpcFBsYWNlID8/IHIudV9TaGlwUGxhY2UgPz8gJyc7XHJcbiAgICAgIHRoaXMuYXJyaXZhbExvY2F0aW9uID0gci51X1NoaXBUbyA/PyByLnVfU2hpcFRvID8/ICdGYWJyaWthJztcclxuICAgICAgdGhpcy5maXJzdE9wZXJhdG9yQ29kZSA9IHIudV9GaXJzdE9wdCA/PyByLnVfRmlyc3RPcHQgPz8gJyc7XHJcbiAgICAgIHRoaXMubGFzdE9wZXJhdG9yQ29kZSA9IHIudV9MYXN0T3B0ID8/IHIudV9MYXN0T3B0ID8/ICcnO1xyXG4gICAgICBjb25zdCByYXdGaXJzdCA9IHIudV9GaXJzdFdlaWdoaW5nID8/IHIudV9GaXJzdFdlaWdoaW5nID8/IG51bGw7XHJcbiAgICAgIHRoaXMuZmlyc3RXZWlnaGluZ1ZhbHVlID0gKHJhd0ZpcnN0ICE9IG51bGwgJiYgcmF3Rmlyc3QgIT09IDApID8gcmF3Rmlyc3QgOiBudWxsO1xyXG4gICAgICBjb25zdCByYXdMYXN0ID0gci51X0xhc3RXZWlnaGluZyA/PyByLnVfTGFzdFdlaWdoaW5nID8/IG51bGw7XHJcbiAgICAgIHRoaXMubGFzdFdlaWdoaW5nVmFsdWUgPSAocmF3TGFzdCAhPSBudWxsICYmIHJhd0xhc3QgIT09IDApID8gcmF3TGFzdCA6IG51bGw7XHJcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSByLnVfRGVzY3JpcHRpb24gPz8gci51X0Rlc2NyaXB0aW9uID8/ICcnO1xyXG5cclxuICAgICAgLy8gWlpaX1RFU1QyIHllbmkgYWxhbmxhclxyXG4gICAgICB0aGlzLmdhdGVDb2RlID0gci51X0dhdGVDb2RlID8/IHIudV9HYXRlQ29kZSA/PyAnJztcclxuICAgICAgdGhpcy5lbnRyeURhdGUgPSByLnVfRW50cnlEYXRlID8/IHIudV9FbnRyeURhdGUgPz8gbnVsbDtcclxuICAgICAgdGhpcy5lbnRyeVRpbWUgPSByLnVfRW50cnlUaW1lID8/IHIudV9FbnRyeVRpbWUgPz8gJyc7XHJcbiAgICAgIHRoaXMuZXhpdERhdGUgPSByLnVfRXhpdERhdGUgPz8gci51X0V4aXREYXRlID8/IG51bGw7XHJcbiAgICAgIHRoaXMuZXhpdFRpbWUgPSByLnVfRXhpdFRpbWUgPz8gci51X0V4aXRUaW1lID8/ICcnO1xyXG4gICAgICB0aGlzLmVudHJ5VHlwZUNvZGUgPSByLnVfRW50cnlUeXBlID8/IHIudV9FbnRyeVR5cGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuZHJpdmVyRnVsbE5hbWUgPSByLnVfRHJpdmVyID8/IHIudV9Ecml2ZXIgPz8gJyc7XHJcbiAgICAgIHRoaXMudGNObyA9IHIudV9UY05vID8/IHIudV9UY05vID8/ICcnO1xyXG5cclxuICAgICAgLy8gVEMgTm8gdmV5YSBEcml2ZXJDb2RlIGlsZSBDYXJyaWVyUGVyc29uIGtheWTEsW5kYW4gaXNUY0NpdGl6ZW4gYmlsZ2lzaW5pIMOnw7Z6w7xtbGVcclxuICAgICAgY29uc3QgY2FycmllckNvZGUgPSB0aGlzLnRjTm8gfHwgdGhpcy5kcml2ZXJDb2RlO1xyXG4gICAgICBpZiAoY2FycmllckNvZGUpIHtcclxuICAgICAgICB0aGlzLmNhcnJpZXJQZXJzb25TZXJ2aWNlLmdldChjYXJyaWVyQ29kZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGNhcnJpZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2Fycmllcikge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSBjYXJyaWVyLnVfVGNWdG5kc2lNaSAhPT0gJ04nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHsgLyogQ2FycmllciBidWx1bmFtYXpzYSB2YXJzYXnEsWxhbiB0cnVlIGthbMSxciAqLyB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBMb29rdXAgYWxhbmxhcsSxbsSxbiBnw7Zyw7xuZW4gaXNpbWxlcmluaSDDp8O2esO8bWxlXHJcbiAgICAgIHRoaXMucmVzb2x2ZURpc3BsYXlOYW1lcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEthecSxdHRha2kga29kIGFsYW5sYXLEsW5hIGthcsWfxLFsxLFrIGdlbGVuIGfDtnLDvG5lbiBpc2ltbGVyaSBsb29rdXAgc2VydmlzbGVyaW5kZW4gw6fDtnrDvG1sZXIgKi9cclxuICBwcml2YXRlIHJlc29sdmVEaXNwbGF5TmFtZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBsb29rdXBzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcblxyXG4gICAgaWYgKHRoaXMuZ2F0ZUNvZGUpIHtcclxuICAgICAgbG9va3Vwc1snZ2F0ZXMnXSA9IHRoaXMubG9hZEdhdGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbnRyeVR5cGVDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ3ZlaGljbGVUeXBlcyddID0gdGhpcy5sb2FkVmVoaWNsZVR5cGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zY2FsZUNvZGUpIHtcclxuICAgICAgbG9va3Vwc1snc2NhbGVzJ10gPSB0aGlzLmxvYWRTY2FsZXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFjY291bnRDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ2FjY291bnRzJ10gPSB0aGlzLmxvYWRBY2NvdW50cygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3RvY2tDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ3N0b2NrSXRlbXMnXSA9IHRoaXMubG9hZFN0b2NrSXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobG9va3Vwcyk7XHJcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBmb3JrSm9pbihsb29rdXBzKS5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0cy5nYXRlcykge1xyXG4gICAgICAgIGNvbnN0IGdhdGUgPSByZXN1bHRzLmdhdGVzLmZpbmQoKGc6IGFueSkgPT4gZy5jb2RlID09PSB0aGlzLmdhdGVDb2RlKTtcclxuICAgICAgICBpZiAoZ2F0ZSkgdGhpcy5nYXRlTmFtZSA9IGdhdGUubmFtZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy52ZWhpY2xlVHlwZXMpIHtcclxuICAgICAgICBjb25zdCB2dCA9IHJlc3VsdHMudmVoaWNsZVR5cGVzLmZpbmQoKHQ6IGFueSkgPT4gdC5jb2RlID09PSB0aGlzLmVudHJ5VHlwZUNvZGUpO1xyXG4gICAgICAgIGlmICh2dCkge1xyXG4gICAgICAgICAgdGhpcy5lbnRyeVR5cGVOYW1lID0gdnQubmFtZTtcclxuICAgICAgICAgIHRoaXMuZW50cnlUeXBlVHJ0bVlwaWxjayA9IHZ0LnVfVHJ0bVlwaWxjayA9PT0gJ1knO1xyXG4gICAgICAgICAgdGhpcy5lbnRyeVR5cGVNYWxHQyA9IHZ0LnVfTWFsR0MgPT09ICdZJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdHMuc2NhbGVzKSB7XHJcbiAgICAgICAgY29uc3Qgc2NhbGUgPSByZXN1bHRzLnNjYWxlcy5maW5kKChzOiBhbnkpID0+IHMuY29kZSA9PT0gdGhpcy5zY2FsZUNvZGUpO1xyXG4gICAgICAgIGlmIChzY2FsZSkgdGhpcy5zY2FsZU5hbWUgPSBzY2FsZS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHRzLmFjY291bnRzKSB7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHJlc3VsdHMuYWNjb3VudHMuZmluZCgoYTogYW55KSA9PiBhLmNvZGUgPT09IHRoaXMuYWNjb3VudENvZGUpO1xyXG4gICAgICAgIGlmIChhY2NvdW50KSB0aGlzLmFjY291bnRUaXRsZSA9IGFjY291bnQudGl0bGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdHMuc3RvY2tJdGVtcykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSByZXN1bHRzLnN0b2NrSXRlbXMuZmluZCgoaTogYW55KSA9PiBpLmNvZGUgPT09IHRoaXMuc3RvY2tDb2RlKTtcclxuICAgICAgICBpZiAoaXRlbSkgdGhpcy5zdG9ja05hbWUgPSBpdGVtLm5hbWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Eb2N1bWVudFNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdEb2N1bWVudCk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLmRvY3VtZW50Q29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZG9jdW1lbnROYW1lID0gZS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgb25TY2FsZVNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdTY2FsZSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLnNjYWxlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuc2NhbGVOYW1lID0gZS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgb25BY2NvdW50U2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ0FjY291bnQpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5hY2NvdW50Q29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuYWNjb3VudFRpdGxlID0gZS50aXRsZTtcclxuICB9XHJcblxyXG5cclxuICBvblRydWNrUGxhdGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nVHJ1Y2tQbGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLnRydWNrUGxhdGVDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy50cnVja1BsYXRlTm8gPSBlLnBsYXRlTm87XHJcbiAgfVxyXG5cclxuICBvblRyYWlsZXJQbGF0ZVNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdUcmFpbGVyUGxhdGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy50cmFpbGVyUGxhdGVDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy50cmFpbGVyUGxhdGVObyA9IGUucGxhdGVObztcclxuICB9XHJcblxyXG4gIG9uRHJpdmVyU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ0RyaXZlcik6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLmRyaXZlckNvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLmRyaXZlck5hbWUgPSBlLm5hbWU7XHJcbiAgICB0aGlzLmlzVGNDaXRpemVuID0gZS51X1RjVnRuZHNpTWkgIT09ICdOJztcclxuICB9XHJcblxyXG4gIG9uU3RvY2tJdGVtU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1N0b2NrSXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLnN0b2NrQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuc3RvY2tOYW1lID0gZS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgb25HYXRlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ0dhdGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5nYXRlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZ2F0ZU5hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvblZlaGljbGVUeXBlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1ZlaGljbGVUeXBlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuZW50cnlUeXBlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZW50cnlUeXBlTmFtZSA9IGUubmFtZTtcclxuICAgIHRoaXMuZW50cnlUeXBlVHJ0bVlwaWxjayA9IGUudV9UcnRtWXBpbGNrID09PSAnWSc7XHJcbiAgICB0aGlzLmVudHJ5VHlwZU1hbEdDID0gZS51X01hbEdDID09PSAnWSc7XHJcbiAgfVxyXG5cclxuICBvbldheWJpbGxTZWxlY3RlZChlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy53YXliaWxsTm8gPSBlLnVfRUZBVE5PPy50b1N0cmluZygpID8/IGUuZG9jTnVtPy50b1N0cmluZygpID8/ICcnO1xyXG5cclxuICAgIC8vIGRvY0VudHJ5IHlva3NhIHNhZGVjZSB3YXliaWxsTm8gc2V0IGV0XHJcbiAgICBpZiAoIWUuZG9jRW50cnkpIHJldHVybjtcclxuXHJcbiAgICAvLyBLYXluYWsgdGlwaTogU3RvY2tUcmFuc2ZlcidkYSAnZnJvbVdhcmVob3VzZScgYWxhbsSxIHZhcmTEsXIsIFB1cmNoYXNlRGVsaXZlcnlOb3RlJ2RhIHlva3R1clxyXG4gICAgY29uc3QgaXNTdG9ja1RyYW5zZmVyID0gJ2Zyb21XYXJlaG91c2UnIGluIGU7XHJcblxyXG4gICAgdGhpcy5pc1dheWJpbGxMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IG9uTmV4dCA9IChkb2M6IGFueSkgPT4gdGhpcy5hcHBseVdheWJpbGxBdXRvRmlsbChkb2MpO1xyXG4gICAgY29uc3Qgb25FcnJvciA9ICgpID0+IHsgdGhpcy5pc1dheWJpbGxMb2FkaW5nID0gZmFsc2U7IH07XHJcblxyXG4gICAgaWYgKGlzU3RvY2tUcmFuc2Zlcikge1xyXG4gICAgICB0aGlzLnN0b2NrVHJhbnNmZXJTZXJ2aWNlLmdldChlLmRvY0VudHJ5KS5zdWJzY3JpYmUoeyBuZXh0OiBvbk5leHQsIGVycm9yOiBvbkVycm9yIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wdXJjaGFzZURlbGl2ZXJ5Tm90ZVNlcnZpY2UuZ2V0KGUuZG9jRW50cnkpLnN1YnNjcmliZSh7IG5leHQ6IG9uTmV4dCwgZXJyb3I6IG9uRXJyb3IgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogxLByc2FsaXllIGRldGF5xLFuZGFuIEFyYcOnICYgU8O8csO8Y8O8IGJpbGdpbGVyaW5pIG90b21hdGlrIGRvbGR1cnVyICovXHJcbiAgcHJpdmF0ZSBhcHBseVdheWJpbGxBdXRvRmlsbChkb2M6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1dheWJpbGxMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBpZiAoIWRvYykgcmV0dXJuO1xyXG5cclxuICAgIC8vIENhcmkgaGVzYXBcclxuICAgIGlmIChkb2MuY2FyZENvZGUpIHtcclxuICAgICAgdGhpcy5hY2NvdW50Q29kZSA9IGRvYy5jYXJkQ29kZTtcclxuICAgICAgdGhpcy5hY2NvdW50VGl0bGUgPSBkb2MuY2FyZE5hbWUgPz8gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gw4fEsWvEscWfIHllcmkgKHNhZGVjZSBTdG9rIE5ha2xpbmRlIG1ldmN1dClcclxuICAgIGlmIChkb2MuZnJvbVdhcmVob3VzZSkge1xyXG4gICAgICB0aGlzLmRlcGFydHVyZUxvY2F0aW9uID0gZG9jLmZyb21XYXJlaG91c2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQcOnxLFrbGFtYVxyXG4gICAgaWYgKGRvYy5jb21tZW50cykge1xyXG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZG9jLmNvbW1lbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFyYcOnIHBsYWthc8SxXHJcbiAgICBjb25zdCBwbGF0ZSA9IGRvYy51X0FyYWNQbGFrYXNpPy50cmltKCkgPz8gJyc7XHJcbiAgICBpZiAocGxhdGUpIHtcclxuICAgICAgdGhpcy50cnVja1BsYXRlQ29kZSA9IHBsYXRlO1xyXG4gICAgICB0aGlzLnRydWNrUGxhdGVObyA9IHBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERvcnNlIHBsYWthc8SxXHJcbiAgICBjb25zdCBkb3JzZVBsYXRlID0gZG9jLnVfRG9yc2VQbGFrYWxhcj8udHJpbSgpID8/ICcnO1xyXG4gICAgdGhpcy50cmFpbGVyUGxhdGVDb2RlID0gZG9yc2VQbGF0ZTtcclxuICAgIHRoaXMudHJhaWxlclBsYXRlTm8gPSBkb3JzZVBsYXRlO1xyXG5cclxuICAgIC8vIFPDvHLDvGPDvCBhZMSxIHNveWFkxLEgYmlybGXFn3RpcmlsZXJlayBkcml2ZXJGdWxsTmFtZSBhbGFuxLFuYSBiYXPEsWzEsXJcclxuICAgIGNvbnN0IGFkID0gZG9jLnVfU29mb3JBZD8udHJpbSgpID8/ICcnO1xyXG4gICAgY29uc3Qgc295YWQgPSBkb2MudV9Tb2ZvclNveWFkaT8udHJpbSgpID8/ICcnO1xyXG4gICAgY29uc3QgZnVsbE5hbWUgPSBbYWQsIHNveWFkXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xyXG4gICAgaWYgKGZ1bGxOYW1lKSB7XHJcbiAgICAgIHRoaXMuZHJpdmVyRnVsbE5hbWUgPSBmdWxsTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTw7xyw7xjw7wgVEMga2ltbGlrIG5vXHJcbiAgICBjb25zdCBraW1saWsgPSBkb2MudV9Tb2ZvcktpbWxpaz8udHJpbSgpID8/ICcnO1xyXG4gICAgdGhpcy50Y05vID0ga2ltbGlrO1xyXG4gICAgdGhpcy5pc1RjQ2l0aXplbiA9IHRoaXMudmFsaWRhdGVUQ0tOKGtpbWxpayk7XHJcblxyXG4gICAgLy8gVEMgTm8gw7x6ZXJpbmRlbiBDYXJyaWVyUGVyc29uIGtheWTEsW5kYW4gZHJpdmVyQ29kZSDDp8O2esO8bWxlXHJcbiAgICBpZiAoa2ltbGlrKSB7XHJcbiAgICAgIHRoaXMuY2FycmllclBlcnNvblNlcnZpY2UuZ2V0KGtpbWxpaykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBjYXJyaWVyID0+IHtcclxuICAgICAgICAgIGlmIChjYXJyaWVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyQ29kZSA9IGNhcnJpZXIuY29kZTtcclxuICAgICAgICAgICAgdGhpcy5pc1RjQ2l0aXplbiA9IGNhcnJpZXIudV9UY1Z0bmRzaU1pICE9PSAnTic7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4geyAvKiBDYXJyaWVyIGJ1bHVuYW1henNhIGRyaXZlckNvZGUgYm/FnyBrYWzEsXIgKi8gfSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRyaXZlckNvZGUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdG9rIGtvZHUg4oCUIHNhdMSxcmxhcmRhIHRla2lsIGthbGVtIHZhcnNhIGRvbGR1clxyXG4gICAgY29uc3QgbGluZXMgPSBkb2Muc3RvY2tUcmFuc2ZlckxpbmVzID8/IFtdO1xyXG4gICAgY29uc3QgdW5pcXVlQ29kZXMgPSBbLi4ubmV3IFNldChsaW5lcy5tYXAoKGw6IGFueSkgPT4gbC5pdGVtQ29kZSkuZmlsdGVyKChjOiBhbnkpID0+ICEhYykpXTtcclxuICAgIGlmICh1bmlxdWVDb2Rlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zdG9ja0NvZGUgPSB1bmlxdWVDb2Rlc1swXSBhcyBzdHJpbmc7XHJcbiAgICAgIHRoaXMuc3RvY2tOYW1lID0gbGluZXMuZmluZCgobDogYW55KSA9PiBsLml0ZW1Db2RlID09PSB1bmlxdWVDb2Rlc1swXSk/Lml0ZW1EZXNjcmlwdGlvbiA/PyAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvY2tDb2RlID0gJyc7XHJcbiAgICAgIHRoaXMuc3RvY2tOYW1lID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogUGhhc2UgMSDihpIgUGhhc2UgMiBnZcOnacWfaSAqL1xyXG4gIGlsZXJpR2l0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRydWNrUGxhdGVDb2RlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTZWxlY3RUcnVja1BsYXRlJyksICcnLCB7XHJcbiAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVudHJ5VHlwZU1hbEdDICYmICF0aGlzLnN0b2NrQ29kZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6U3RvY2tDb2RlUmVxdWlyZWQnKSwgJycsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtUGhhc2UgPSAyO1xyXG4gICAgdGhpcy5fc3RhcnRTY2FsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFBoYXNlIDIg4oaSIFBoYXNlIDEgZ2VyaSBkw7ZuICovXHJcbiAgZ2VyaUdpdFBoYXNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3RvcFNjYWxlKCk7XHJcbiAgICB0aGlzLmZvcm1QaGFzZSA9IDE7XHJcbiAgfVxyXG5cclxuICBzYXZlKCk6IHZvaWQge1xyXG4gICAgLy8gVGFydMSxbSBtb2R1bmRheXNhIGRvV2VpZ2hpbmcgQVBJIMOnYcSfxLFyXHJcbiAgICBjb25zdCBkb2NFbnRyeSA9IHRoaXMuZ2V0RG9jRW50cnkodGhpcy5yZWNvcmQpO1xyXG4gICAgaWYgKHRoaXMud2VpZ2hpbmdNb2RlICYmIGRvY0VudHJ5KSB7XHJcbiAgICAgIGlmICh0aGlzLmZpeGVkU2NhbGVWYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkRvRml4Rmlyc3QnKSwgJycsIHtcclxuICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29uZmlybU1zZ0tleSA9IHRoaXMud2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnXHJcbiAgICAgICAgPyAnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmdDb25maXJtTWVzc2FnZSdcclxuICAgICAgICA6ICdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nQ29uZmlybU1lc3NhZ2UnO1xyXG5cclxuICAgICAgdGhpcy5jb25maXJtYXRpb25cclxuICAgICAgICAud2FybihcclxuICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGNvbmZpcm1Nc2dLZXksIFN0cmluZyh0aGlzLnJlY29yZD8udV9QbGF0ZSB8fCB0aGlzLnJlY29yZD8uZG9jTnVtIHx8ICcnKSksXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgeWVzVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpZZXMnKSxcclxuICAgICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpObycpLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnY29uZmlybScpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBjb25zdCBkb1dlaWdoJCA9IHRoaXMuc2VydmljZS5kb1dlaWdoaW5nKGRvY0VudHJ5LCB7XHJcbiAgICAgICAgICAgIHdlaWdoaW5nVmFsdWU6IHRoaXMuZml4ZWRTY2FsZVZhbHVlISxcclxuICAgICAgICAgICAgb3BlcmF0b3JDb2RlOiAnJ1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gxLBMSyB0YXJ0xLFtZGEgZm9ybSBhbGFubGFyxLFuxLEgKHN0b2sga29kdSwgaXJzYWxpeWUgdmIuKSDDtm5jZSBrYXlkZXQsIHNvbnJhIHRhcnTEsW0geWFwLlxyXG4gICAgICAgICAgLy8gU09OIHRhcnTEsW1kYSBzYWRlY2UgdGFydMSxbSB5YXAg4oCUIGRpxJ9lciBhbGFubGFyIGlsayB0YXJ0xLFtZGFuIHNvbnJhIGRlxJ9pxZ90aXJpbGVtZXouXHJcbiAgICAgICAgICBsZXQgb2JzJDogT2JzZXJ2YWJsZTxFbnRyeVdlaWdoaW5nPjtcclxuICAgICAgICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0Jykge1xyXG4gICAgICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5vdy50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbm93LnRvVGltZVN0cmluZygpLnNwbGl0KCcgJylbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGR0bzogU2F2ZUVudHJ5V2VpZ2hpbmdEdG8gPSB7XHJcbiAgICAgICAgICAgICAgdV9HYXRlQ29kZTogdGhpcy5nYXRlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdV9FbnRyeURhdGU6IHRoaXMuZW50cnlEYXRlIHx8IGN1cnJlbnREYXRlLFxyXG4gICAgICAgICAgICAgIHVfRW50cnlUaW1lOiB0aGlzLmVudHJ5VGltZSB8fCBjdXJyZW50VGltZSxcclxuICAgICAgICAgICAgICB1X0V4aXREYXRlOiB0aGlzLmV4aXREYXRlIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgdV9FeGl0VGltZTogdGhpcy5leGl0VGltZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdV9QbGF0ZTogdGhpcy50cnVja1BsYXRlQ29kZSxcclxuICAgICAgICAgICAgICB1X0RvcnNlUGxhdGU6IHRoaXMudHJhaWxlclBsYXRlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdV9FbnRyeVR5cGU6IHRoaXMuZW50cnlUeXBlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdV9EZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdV9Ecml2ZXI6IHRoaXMuZHJpdmVyRnVsbE5hbWUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIHVfRHJpdmVyQ29kZTogdGhpcy5kcml2ZXJDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB1X1RjTm86IHRoaXMudGNObyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdV9DYXJkQ29kZTogdGhpcy5hY2NvdW50Q29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdV9TY2FsZUNvZGU6IHRoaXMuc2NhbGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB1X0l0ZW1Db2RlOiB0aGlzLnN0b2NrQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdV9EZXNwYXRjaEFkdmljZU5vOiB0aGlzLndheWJpbGxObyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdV9EZXNwYXRjaEV4aXN0OiAnTicsXHJcbiAgICAgICAgICAgICAgdV9TaGlwVG86IHRoaXMuYXJyaXZhbExvY2F0aW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB1X0NvbnRhaW5lck5vOiB0aGlzLmNvbnRhaW5lck5vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB1X1NoaXBQbGFjZTogdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIG9icyQgPSB0aGlzLnNlcnZpY2UudXBkYXRlKGRvY0VudHJ5LCBkdG8pLnBpcGUoc3dpdGNoTWFwKCgpID0+IGRvV2VpZ2gkKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYnMkID0gZG9XZWlnaCQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgICAgICBvYnMkLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAvLyBUYXJ0xLFtIGRlxJ9lcmxlcmluaSB3ZWlnaGluZ01vZGUnYSBnw7ZyZSBnw7xuY2VsbGVcclxuICAgICAgICAgICAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RXZWlnaGluZ1ZhbHVlID0gdGhpcy5maXhlZFNjYWxlVmFsdWU7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdFdlaWdoaW5nVmFsdWUgPSB0aGlzLmZpeGVkU2NhbGVWYWx1ZTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgIHRoaXMud2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpGaXJzdFdlaWdoaW5nU2F2ZWQnKVxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nU2F2ZWQnKVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEvEsXNhIGJpciBnZWNpa21lIGlsZSBsaXN0ZXllIGTDtm4gKGt1bGxhbsSxY8SxIHByb2dyZXNzIGJhciBkZcSfacWfaW1pbmkgZ8O2cnPDvG4pXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9rYWRvb2dsdS9lbnRyeS13ZWlnaGluZyddKTtcclxuICAgICAgICAgICAgICB9LCB0aGlzLndlaWdoaW5nTW9kZSA9PSAnbGFzdCcgPyA4MDAwIDogMTUwMCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OldlaWdoaW5nUmVjb3JkRXJyb3InKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vcm1hbCBrYXnEsXQgbW9kdSAoeWVuaSBrYXnEsXQgdmV5YSBkw7x6ZW5sZW1lKVxyXG4gICAgaWYgKCF0aGlzLnRydWNrUGxhdGVDb2RlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTZWxlY3RUcnVja1BsYXRlJyksICcnLCB7XHJcbiAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgY3VycmVudERhdGUgPSBub3cudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBub3cudG9UaW1lU3RyaW5nKCkuc3BsaXQoJyAnKVswXTsgLy8gSEg6bW06c3NcclxuXHJcbiAgICBjb25zdCBkdG86IFNhdmVFbnRyeVdlaWdoaW5nRHRvID0ge1xyXG4gICAgICB1X0dhdGVDb2RlOiB0aGlzLmdhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9FbnRyeURhdGU6IHRoaXMuZW50cnlEYXRlIHx8IGN1cnJlbnREYXRlLFxyXG4gICAgICB1X0VudHJ5VGltZTogdGhpcy5lbnRyeVRpbWUgfHwgY3VycmVudFRpbWUsXHJcbiAgICAgIHVfRXhpdERhdGU6IHRoaXMuZXhpdERhdGUgfHwgbnVsbCxcclxuICAgICAgdV9FeGl0VGltZTogdGhpcy5leGl0VGltZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfUGxhdGU6IHRoaXMudHJ1Y2tQbGF0ZUNvZGUsXHJcbiAgICAgIHVfRG9yc2VQbGF0ZTogdGhpcy50cmFpbGVyUGxhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9FbnRyeVR5cGU6IHRoaXMuZW50cnlUeXBlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0RyaXZlcjogdGhpcy5kcml2ZXJGdWxsTmFtZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRHJpdmVyQ29kZTogdGhpcy5kcml2ZXJDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9UY05vOiB0aGlzLnRjTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0NhcmRDb2RlOiB0aGlzLmFjY291bnRDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9TY2FsZUNvZGU6IHRoaXMuc2NhbGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9JdGVtQ29kZTogdGhpcy5zdG9ja0NvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0Rlc3BhdGNoQWR2aWNlTm86IHRoaXMud2F5YmlsbE5vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9EZXNwYXRjaEV4aXN0OiAnTicsXHJcbiAgICAgIHVfU2hpcFRvOiB0aGlzLmFycml2YWxMb2NhdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfQ29udGFpbmVyTm86IHRoaXMuY29udGFpbmVyTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X1NoaXBQbGFjZTogdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9icyQgPSBkb2NFbnRyeVxyXG4gICAgICA/IHRoaXMuc2VydmljZS51cGRhdGUoZG9jRW50cnksIGR0bylcclxuICAgICAgOiB0aGlzLnNlcnZpY2UuY3JlYXRlKGR0byk7XHJcblxyXG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICBvYnMkLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpSZWNvcmRTYXZlZFN1Y2Nlc3MnKSk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycva2Fkb29nbHUvZW50cnktd2VpZ2hpbmcnXSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlJlY29yZFNhdmVFcnJvcicpKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZG9Hb29kc01vdmVtZW50KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZG9jRW50cnkgPSB0aGlzLmdldERvY0VudHJ5KHRoaXMucmVjb3JkKTtcclxuICAgIGlmICghZG9jRW50cnkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblxyXG4gICAgICAud2FybihcclxuICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6Ok1hbEdjQ29uZmlybU1lc3NhZ2UnLCBTdHJpbmcodGhpcy5yZWNvcmQ/LnVfUGxhdGUgfHwgZG9jRW50cnkpKSxcclxuICAgICAgICAnJyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB5ZXNUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlllcycpLFxyXG4gICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpObycpLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ2NvbmZpcm0nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmRvR29vZHNNb3ZlbWVudChkb2NFbnRyeSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IHVwZGF0ZWQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlY29yZCA9IHVwZGF0ZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb2luZ0dvb2RzTW92ZW1lbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpHb29kc01vdmVtZW50U3VjY2VzcycpKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzRG9pbmdHb29kc01vdmVtZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGJhcmtvZFlhemRpcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRvY0VudHJ5ID0gdGhpcy5nZXREb2NFbnRyeSh0aGlzLnJlY29yZCk7XHJcbiAgICBpZiAoIWRvY0VudHJ5KSByZXR1cm47XHJcbiAgICB0aGlzLnNlcnZpY2UuZ2V0V2VpZ2hpbmdTbGlwKGRvY0VudHJ5KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgY29uc3QgYnl0ZUNoYXJzID0gYXRvYihyZXNwb25zZS5iYXNlNjQpO1xyXG4gICAgICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KGJ5dGVDaGFycy5sZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBieXRlTnVtYmVyc1tpXSA9IGJ5dGVDaGFycy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW25ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XHJcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICBhbGVydCgnQmFya29kIC8ga2FudGFyIGZpxZ9pIG9sdcWfdHVydWx1cmtlbiBiaXIgaGF0YSBvbHXFn3R1LicpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYWJpdGxlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maXhlZFNjYWxlVmFsdWUgPSB0aGlzLmN1cnJlbnRTY2FsZVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdG9wU2NhbGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0U2NhbGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzU2NhbGVDb25uZWN0aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2NhbGVDb25uZWN0aW9uRmFpbGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnNjYWxlU3ViID0gdGhpcy5zY2FsZVNpZ25hbFJTZXJ2aWNlLndlaWdodCQuc3Vic2NyaWJlKHcgPT4ge1xyXG4gICAgICBpZiAodyAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuaXNTY2FsZVJlY29ubmVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNjYWxlVmFsdWUgPSB3O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2NhbGVTdWIuYWRkKFxyXG4gICAgICB0aGlzLnNjYWxlU2lnbmFsUlNlcnZpY2UucmVjb25uZWN0aW5nJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTY2FsZVJlY29ubmVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2NhbGVWYWx1ZSA9IG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5zY2FsZVN1Yi5hZGQoXHJcbiAgICAgIHRoaXMuc2NhbGVTaWduYWxSU2VydmljZS5yZWNvbm5lY3RlZCQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmlzU2NhbGVSZWNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnNjYWxlU3ViLmFkZChcclxuICAgICAgdGhpcy5zY2FsZVNpZ25hbFJTZXJ2aWNlLmNvbm5lY3Rpb25Mb3N0JC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTY2FsZUNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzU2NhbGVSZWNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNjYWxlQ29ubmVjdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb24uZXJyb3IoXHJcbiAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlNjYWxlQ29ubmVjdGlvbkZhaWxlZCcpLFxyXG4gICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTY2FsZUNvbm5lY3Rpb25GYWlsZWRUaXRsZScpLFxyXG4gICAgICAgICAgeyBoaWRlWWVzQnRuOiB0cnVlLCBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpIH1cclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuc2NhbGVTaWduYWxSU2VydmljZS5zdGFydCh0aGlzLnNjYWxlQXBpVXJsLCB0aGlzLnNjYWxlSWQpXHJcbiAgICAgIC50aGVuKCgpID0+IHsgdGhpcy5pc1NjYWxlQ29ubmVjdGluZyA9IGZhbHNlOyB9KVxyXG4gICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NjYWxlQ29ubmVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChlPy5tZXNzYWdlID09PSAnU2NhbGVDb25uZWN0aW9uTWF4UmV0cmllc1JlYWNoZWQnKSB7XHJcbiAgICAgICAgICB0aGlzLnNjYWxlQ29ubmVjdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTY2FsZUNvbm5lY3Rpb25GYWlsZWQnKSxcclxuICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTY2FsZUNvbm5lY3Rpb25GYWlsZWRUaXRsZScpLFxyXG4gICAgICAgICAgICB7IGhpZGVZZXNCdG46IHRydWUsIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJykgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignU2lnbmFsUiBiYcSfbGFudMSxIGhhdGFzxLE6JywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0b3BTY2FsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2NhbGVTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNjYWxlU3ViID0gbnVsbDtcclxuICAgIHRoaXMuc2NhbGVTaWduYWxSU2VydmljZS5zdG9wKHRoaXMuc2NhbGVJZClcclxuICAgICAgLmNhdGNoKGUgPT4gY29uc29sZS5lcnJvcignU2lnbmFsUiBrYXBhdG1hIGhhdGFzxLE6JywgZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFllbmkga2F5xLF0IGnDp2luIGdpcmnFnyB0YXJpaGluaSDFn3UgYW5raSB0YXJpaC9zYWF0IGlsZSBkb2xkdXJ1ciAqL1xyXG4gIHByaXZhdGUgc2V0RGVmYXVsdEVudHJ5RGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgdGhpcy5lbnRyeURhdGUgPSBub3cudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgLy8gYnVpbGREYXRlVGltZSBzYXnEsXNhbCBmb3JtYXQgYmVrbGVyOiDDtnIuIDgzMCA9IDA4OjMwLCAxNDMwID0gMTQ6MzBcclxuICAgIHRoaXMuZW50cnlUaW1lID0gU3RyaW5nKG5vdy5nZXRIb3VycygpICogMTAwICsgbm93LmdldE1pbnV0ZXMoKSk7XHJcbiAgfVxyXG5cclxuICAvKiogWWVuaSBrYXnEsXQgacOnaW4ga3VsbGFuxLFjxLFuxLFuIHZhcnNhecSxbGFuIGthcMSxc8SxbsSxIHnDvGtsZXIgKi9cclxuICBwcml2YXRlIGxvYWREZWZhdWx0R2F0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlckdhdGVTZXJ2aWNlLmdldE15RGVmYXVsdEdhdGVDb2RlKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRlZmF1bHRHYXRlQ29kZSkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZhdWx0R2F0ZUNvZGUpIHtcclxuICAgICAgICAgIHRoaXMuZ2F0ZUNvZGUgPSBkZWZhdWx0R2F0ZUNvZGU7XHJcbiAgICAgICAgICAvLyBLYXDEsSBhZMSxbsSxIMOnw7Z6w7xtbGVcclxuICAgICAgICAgIHRoaXMuZ2F0ZVNlcnZpY2UuZ2V0KGRlZmF1bHRHYXRlQ29kZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGdhdGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZ2F0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYXRlTmFtZSA9IGdhdGUubmFtZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7IC8qIEthcMSxIGJpbGdpc2kgYWzEsW5hbWF6c2Egc2Vzc2l6Y2UgZ2XDpyAqLyB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4geyAvKiBWYXJzYXnEsWxhbiBrYXDEsSBidWx1bmFtYXpzYSBzZXNzaXpjZSBnZcOnICovIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdvQmFjaygpOiB2b2lkIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2thZG9vZ2x1L2VudHJ5LXdlaWdoaW5nJ10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVRDS04odmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGMgPSB2YWx1ZT8udHJpbSgpO1xyXG4gICAgaWYgKCF0YyB8fCB0Yy5sZW5ndGggIT09IDExKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoIS9eXFxkezExfSQvLnRlc3QodGMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGNbMF0gPT09ICcwJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgZCA9IHRjLnNwbGl0KCcnKS5tYXAoTnVtYmVyKTtcclxuICAgIGNvbnN0IGQxMCA9ICgoZFswXSArIGRbMl0gKyBkWzRdICsgZFs2XSArIGRbOF0pICogNyAtIChkWzFdICsgZFszXSArIGRbNV0gKyBkWzddKSkgJSAxMDtcclxuICAgIGlmIChkMTAgIT09IGRbOV0pIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGQxMSA9IGQuc2xpY2UoMCwgMTApLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApICUgMTA7XHJcbiAgICByZXR1cm4gZDExID09PSBkWzEwXTtcclxuICB9XHJcbn1cclxuIiwiPGFicC1wYWdlIFticmVhZGNydW1iXT1cImZhbHNlXCI+XHJcbiAgPGFicC1wYWdlLXRvb2xiYXItY29udGFpbmVyIGNsYXNzPVwiY29sXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwicGFnZS10aXRsZVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpFbnRyeVdlaWdoaW5nVGl0bGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIndlaWdoaW5nTW9kZVwiIGNsYXNzPVwiYmFkZ2UgbXMtMiBmcy02XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdiZy13YXJuaW5nIHRleHQtZGFyayc6IHdlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0JyxcclxuICAgICAgICAgICAgICAnYmctcHJpbWFyeSc6IHdlaWdoaW5nTW9kZSA9PT0gJ2xhc3QnXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAge3sgd2VpZ2hpbmdNb2RlTGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXdlaWdoaW5nTW9kZVwiIGNsYXNzPVwiYmFkZ2UgbXMtMiBmcy02XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdiZy1zZWNvbmRhcnknOiB3ZWlnaGluZ1N0ZXAgPT09IDEsXHJcbiAgICAgICAgICAgICAgJ2JnLWluZm8nOiB3ZWlnaGluZ1N0ZXAgPT09IDIsXHJcbiAgICAgICAgICAgICAgJ2JnLXN1Y2Nlc3MnOiB3ZWlnaGluZ1N0ZXAgPT09IDNcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICB7eyAod2VpZ2hpbmdTdGVwID09PSAxID8gJ0thZG9vZ2x1OjpSZWNvcmRTdGVwJyA6IHdlaWdoaW5nU3RlcCA9PT0gMiA/ICdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycgOiAnS2Fkb29nbHU6OkNvbXBsZXRlZCcpIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2FicC1wYWdlLXRvb2xiYXItY29udGFpbmVyPlxyXG5cclxuICA8IS0tIFN0ZXAgSW5kaWNhdG9yIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcblxyXG4gICAgICAgIDwhLS0gU3RlcCAxOiBBcmHDpyAmIEJlbGdlIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZ3LWJvbGQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NDBweDsgaGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZToxcmVtO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImZvcm1QaGFzZSA+IDEgfHwgaXNGdWxseUNvbXBsZXRlZCA/ICcjMTk4NzU0JyA6IChmb3JtUGhhc2UgPT09IDEgPyAnIzBkNmVmZCcgOiAnIzZjNzU3ZCcpXCI+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwiZm9ybVBoYXNlID4gMSB8fCBpc0Z1bGx5Q29tcGxldGVkXCIgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtUGhhc2UgPD0gMSAmJiAhaXNGdWxseUNvbXBsZXRlZFwiPjE8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cImZvcm1QaGFzZSA+IDEgfHwgaXNGdWxseUNvbXBsZXRlZFwiIFtjbGFzcy50ZXh0LXByaW1hcnldPVwiZm9ybVBoYXNlID09PSAxICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+e3sgJ0thZG9vZ2x1OjpWZWhpY2xlQW5kRG9jdW1lbnQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9zbWFsbD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG14LTJcIiBzdHlsZT1cImhlaWdodDozcHg7IG1heC13aWR0aDoxMjBweDtcIlxyXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZm9ybVBoYXNlID4gMSA/ICcjMTk4NzU0JyA6ICcjZGVlMmU2J1wiPjwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFN0ZXAgMjogVGFydMSxbSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmdy1ib2xkIHRleHQtd2hpdGVcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjQwcHg7IGhlaWdodDo0MHB4OyBmb250LXNpemU6MXJlbTtcIlxyXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3ZWlnaGluZ1N0ZXAgPT09IDMgPyAnIzE5ODc1NCcgOiAoZm9ybVBoYXNlID09PSAyID8gJyMwZDZlZmQnIDogJyM2Yzc1N2QnKVwiPlxyXG4gICAgICAgICAgICA8aSAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdTdGVwIDwgM1wiPjI8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIFtjbGFzcy50ZXh0LXByaW1hcnldPVwiZm9ybVBoYXNlID09PSAyICYmIHdlaWdoaW5nU3RlcCA8IDNcIiBbY2xhc3MudGV4dC1tdXRlZF09XCJmb3JtUGhhc2UgPCAyICYmIHdlaWdoaW5nU3RlcCA8IDNcIj57eyAnS2Fkb29nbHU6OldlaWdoaW5nU3RlcCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbXgtMlwiIHN0eWxlPVwiaGVpZ2h0OjNweDsgbWF4LXdpZHRoOjEyMHB4O1wiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3ZWlnaGluZ1N0ZXAgPT09IDMgPyAnIzE5ODc1NCcgOiAnI2RlZTJlNidcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTdGVwIDM6IFRhbWFtbGFuZMSxIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZ3LWJvbGQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NDBweDsgaGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZToxcmVtO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIndlaWdoaW5nU3RlcCA9PT0gMyA/ICcjMTk4NzU0JyA6ICcjNmM3NTdkJ1wiPlxyXG4gICAgICAgICAgICA8aSAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdTdGVwIDwgM1wiPjM8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIFtjbGFzcy50ZXh0LW11dGVkXT1cIndlaWdoaW5nU3RlcCA8IDNcIj57eyAnS2Fkb29nbHU6OkNvbXBsZXRlZCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSA9PT09PT09PT09IFBIQVNFIDE6IEFyYcOnICYgQmVsZ2UgPT09PT09PT09PSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZm9ybVBoYXNlID09PSAxICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcblxyXG4gICAgICA8IS0tIFNvbCBzw7x0dW46IEdpcmnFny/Dh8Sxa8SxxZ8gKyBBcmHDpyAmIFPDvHLDvGPDvCAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcblxyXG4gICAgICAgIDwhLS0gR3J1cCAxOiBHaXJpxZ8gLyDDh8Sxa8SxxZ8gQmlsZ2lsZXJpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItM1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zaWduLWluLWFsdCBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RW50cnlFeGl0SW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpHYXRlU2VsZWN0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRHYXRlc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJnYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cImdhdGVOYW1lXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uR2F0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPkFyYcOnIEhhcmVrZXQgVMO8csO8PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFZlaGljbGVUeXBlc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJ2ZWhpY2xlVHlwZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJlbnRyeVR5cGVOYW1lXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uVmVoaWNsZVR5cGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkVudHJ5RGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC1kYXRlLWJveFxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImVudHJ5RGF0ZVRpbWVcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCJkZC5NTS55eXl5IEhIOm1tXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC1kYXRlLWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkV4aXREYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LWRhdGUtYm94XHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZXhpdERhdGVUaW1lXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZVwiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PVwiZGQuTU0ueXl5eSBISDptbVwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNVcGRhdGVNb2RlXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gR3J1cCAyOiBBcmHDpyAmIFPDvHLDvGPDvCBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRydWNrIG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpWZWhpY2xlRHJpdmVySW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OlRydWNrUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkVHJ1Y2tQbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwidHJ1Y2tQbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJwbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJ0cnVja1BsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25UcnVja1BsYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiICpuZ0lmPVwidHJhaWxlclBsYXRlTm9cIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6VHJhaWxlclBsYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRUcmFpbGVyUGxhdGVzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInRyYWlsZXJQbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJwbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJ0cmFpbGVyUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblRyYWlsZXJQbGF0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RHJpdmVyTmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiZHJpdmVyRnVsbE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6RW50ZXJEcml2ZXJOYW1lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMCBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgaXNUY0NpdGl6ZW4gPyAoJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uKSA6ICdLaW1saWsgTm8nIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyh2YWx1ZSldPVwiaXNUY0NpdGl6ZW5cIiBbcmVhZE9ubHldPVwiaXNVcGRhdGVNb2RlXCIgdGV4dD1cIlQuQy4gVmF0YW5kYcWfxLFcIj48L2R4LWNoZWNrLWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cInRjTm9cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImlzVGNDaXRpemVuID8gKCdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbikgOiAnS2ltbGlrIE5vJ1wiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gU2HEnyBzw7x0dW46IEJlbGdlICYgWcO8ayAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcblxyXG4gICAgICAgIDwhLS0gR3J1cCAzOiBCZWxnZSAmIFnDvGsgQmlsZ2lsZXJpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItM1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWFsdCBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RG9jdW1lbnRDYXJnb0luZm8nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6QnVzaW5lc3NQYXJ0bmVyJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRBY2NvdW50c1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJhY2NvdW50Q29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cInRpdGxlXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJhY2NvdW50VGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25BY2NvdW50U2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OldheWJpbGxOdW1iZXInIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImlzV2F5YmlsbExvYWRpbmdcIiBjbGFzcz1cImZhIGZhLXNwaW5uZXIgZmEtc3BpbiBtcy0xIHRleHQtcHJpbWFyeVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW3RhYnNdPVwid2F5YmlsbFRhYnNcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cIndheWJpbGxOb1wiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbldheWJpbGxTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6Okl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRTdG9ja0l0ZW1zXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInN0b2NrSXRlbUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzdG9ja05hbWVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uU3RvY2tJdGVtU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpDb250YWluZXJObycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiY29udGFpbmVyTm9cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6TWFudWFsRW50cnknIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlcGFydHVyZVBsYWNlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkZXBhcnR1cmVMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpBdXRvRmlsbGVkRnJvbVdheWJpbGwnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpBcnJpdmFsUGxhY2UnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cImFycml2YWxMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYXJlYVxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCI3MFwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1hcmVhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gUGhhc2UgMSBBbHQgQnV0b25sYXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTMgbWItM1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpCYWNrJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIiF3ZWlnaGluZ01vZGUgJiYgIWlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1zYXZlXCJcclxuICAgICAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgW2xvYWRpbmddPVwiaXNTYXZpbmdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYWJwLWJ1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNVcGRhdGVNb2RlXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiaWxlcmlHaXQoKVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpOZXh0JyB8IGFicExvY2FsaXphdGlvbiB9fSA8aSBjbGFzcz1cImZhIGZhLWFycm93LXJpZ2h0IG1zLTFcIj48L2k+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gPT09PT09PT09PSBQSEFTRSAyOiBUYXJ0xLFtIFBhbmVsaSA9PT09PT09PT09IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJmb3JtUGhhc2UgPT09IDIgJiYgIWlzRnVsbHlDb21wbGV0ZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEdydXAgMTogVGVyYXppIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYWxhbmNlLXNjYWxlIG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpXZWlnaGluZ1BhbmVsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3ZWlnaGluZ01vZGVcIiBjbGFzcz1cImJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnID8gJ2JnLXdhcm5pbmcgdGV4dC1kYXJrJyA6ICdiZy1wcmltYXJ5J1wiPlxyXG4gICAgICAgICAgICAgICAgICB7eyB3ZWlnaGluZ01vZGVMYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctMyBhbGlnbi1pdGVtcy1zdHJldGNoXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBTb2w6IENhbmzEsSBUYXJ0xLFtIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCIgc3R5bGU9XCJkaXNwbGF5OiBncmlkO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBiZy1saWdodCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgdGV4dC1jZW50ZXIgcHktNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbWItMSBmdy1zZW1pYm9sZCB0ZXh0LXVwcGVyY2FzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OkxpdmVXZWlnaGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU2NhbGVDb25uZWN0aW5nIHx8IGlzU2NhbGVSZWNvbm5lY3RpbmdcIiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtc2Vjb25kYXJ5XCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3sgKGlzU2NhbGVSZWNvbm5lY3RpbmcgPyAnS2Fkb29nbHU6OlJlY29ubmVjdGluZycgOiAnS2Fkb29nbHU6OkNvbm5lY3RpbmcnKSB8IGFicExvY2FsaXphdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNTY2FsZUNvbm5lY3RpbmcgJiYgIWlzU2NhbGVSZWNvbm5lY3RpbmcgJiYgIXNjYWxlQ29ubmVjdGlvbkZhaWxlZFwiIHN0eWxlPVwiZm9udC1zaXplOiAyLjVyZW07IGZvbnQtd2VpZ2h0OiBib2xkOyBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50U2NhbGVWYWx1ZSAhPSBudWxsID8gKGN1cnJlbnRTY2FsZVZhbHVlIHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2NhbGVDb25uZWN0aW9uRmFpbGVkXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hhaW4tYnJva2VuIGZhLTJ4IHRleHQtc2Vjb25kYXJ5IG1iLTIgZC1ibG9ja1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBmdy1zZW1pYm9sZCBkLWJsb2NrXCIgc3R5bGU9XCJmb250LXNpemU6IDAuOTVyZW07IGxpbmUtaGVpZ2h0OiAxLjU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpTY2FsZUNvbm5lY3Rpb25GYWlsZWRJbmxpbmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gT3J0YTogQWvEscWfIG9rdSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1yaWdodCBmYS0yeCB0ZXh0LW11dGVkXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBTYcSfOiBTYWJpdGxlbm1pxZ8gRGXEn2VyICsgU2FiaXRsZSBidXRvbnUgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIiBzdHlsZT1cImRpc3BsYXk6IGdyaWQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmaXhlZFNjYWxlVmFsdWUgIT0gbnVsbCA/ICdib3JkZXItc3VjY2VzcycgOiAnYmctbGlnaHQnXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJmaXhlZFNjYWxlVmFsdWUgIT0gbnVsbCA/ICdyZ2JhKDI1LDEzNSw4NCwwLjA4KScgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgdGV4dC1jZW50ZXIgcHktNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsIG1iLTEgZnctc2VtaWJvbGQgdGV4dC11cHBlcmNhc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmaXhlZFNjYWxlVmFsdWUgIT0gbnVsbCA/ICd0ZXh0LXN1Y2Nlc3MnIDogJ3RleHQtbXV0ZWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6Rml4ZWRWYWx1ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMi41cmVtOyBmb250LXdlaWdodDogYm9sZDsgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmaXhlZFNjYWxlVmFsdWUgIT0gbnVsbCA/ICd0ZXh0LXN1Y2Nlc3MnIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAoZml4ZWRTY2FsZVZhbHVlIHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNGdWxseUNvbXBsZXRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLWxnIHctMTAwIG10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50U2NhbGVWYWx1ZSA9PSBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2FiaXRsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1sb2NrIG1lLTJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpGaXgnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gR3J1cCAyOiBUYXJ0xLFtIEthecSxdGxhcsSxIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1oaXN0b3J5IG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpXZWlnaGluZ1JlY29yZHMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSDEsGxrIFRhcnTEsW0gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIHJvdW5kZWQgcHktMyBweC00XCIgc3R5bGU9XCJib3JkZXItbGVmdDogNHB4IHNvbGlkICMwZDZlZmQ7IGJhY2tncm91bmQ6ICNmZmY7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdXBwZXJjYXNlIHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGQgbWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpGaXJzdFdlaWdoaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaXJzdFdlaWdoaW5nVmFsdWUgIT0gbnVsbDsgZWxzZSBub0ZpcnN0V2VpZ2hpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNzVyZW07IGxldHRlci1zcGFjaW5nOiAwLjAyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpcnN0V2VpZ2hpbmdWYWx1ZSB8IG51bWJlcjonMS4wLTAnIH19IGtnXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpPcGVyYXRvcicgfCBhYnBMb2NhbGl6YXRpb24gfX06IHt7IGZpcnN0T3BlcmF0b3JDb2RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vRmlyc3RXZWlnaGluZz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZzdC1pdGFsaWMgbXQtMlwiPnt7ICdLYWRvb2dsdTo6Tm90WWV0RG9uZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gU29uIFRhcnTEsW0gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIHJvdW5kZWQgcHktMyBweC00XCIgc3R5bGU9XCJib3JkZXItbGVmdDogNHB4IHNvbGlkICM2ZjQyYzE7IGJhY2tncm91bmQ6ICNmZmY7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdXBwZXJjYXNlIHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGQgbWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpMYXN0V2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxhc3RXZWlnaGluZ1ZhbHVlICE9IG51bGw7IGVsc2Ugbm9MYXN0V2VpZ2hpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNzVyZW07IGxldHRlci1zcGFjaW5nOiAwLjAyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxhc3RXZWlnaGluZ1ZhbHVlIHwgbnVtYmVyOicxLjAtMCcgfX0ga2dcclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6Ok9wZXJhdG9yJyB8IGFicExvY2FsaXphdGlvbiB9fToge3sgbGFzdE9wZXJhdG9yQ29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0xhc3RXZWlnaGluZz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZzdC1pdGFsaWMgbXQtMlwiPnt7ICdLYWRvb2dsdTo6Tm90WWV0RG9uZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gTmV0IFnDvGsgKHNhZGVjZSB3ZWlnaGluZ1N0ZXA9PT0zJ3RlKSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiICpuZ0lmPVwid2VpZ2hpbmdTdGVwID09PSAzICYmIG5ldFdlaWdodCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCByb3VuZGVkIHB5LTMgcHgtNFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMTk4NzU0OyBiYWNrZ3JvdW5kOiByZ2JhKDI1LDEzNSw4NCwwLjA2KTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC11cHBlcmNhc2UgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZCBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6Ok5ldFdlaWdodCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtOyBjb2xvcjogIzE5ODc1NDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IG5ldFdlaWdodCB8IG51bWJlcjonMS4wLTAnIH19IGtnXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFBoYXNlIDIgQWx0IEJ1dG9ubGFyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0zIG1iLTNcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImdlcmlHaXRQaGFzZSgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1sZWZ0IG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6QmFjaycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCIhaXNGdWxseUNvbXBsZXRlZFwiXHJcbiAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtc2F2ZVwiXHJcbiAgICAgICAgYnV0dG9uVHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgW2xvYWRpbmddPVwiaXNTYXZpbmdcIlxyXG4gICAgICAgIChjbGljayk9XCJzYXZlKClcIj5cclxuICAgICAgICB7eyAnS2Fkb29nbHU6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYWJwLWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tID09PT09PT09PT0gU1VNTUFSWTogVGFtYW1sYW5kxLEgR8O2csO8bsO8bcO8ID09PT09PT09PT0gLS0+XHJcbiAgPGRpdiAqbmdJZj1cImlzRnVsbHlDb21wbGV0ZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcblxyXG4gICAgICAgICAgPCEtLSBUYW0gZ2VuacWfbGlrOiBUYXJ0xLFtIFNvbnXDp2xhcsSxIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYWxhbmNlLXNjYWxlIG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpXZWlnaGluZ1Jlc3VsdHMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIMSwbGsgVGFydMSxbSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgc2hhZG93LXNtIHJvdW5kZWQgcHktMyBweC00IGgtMTAwXCIgc3R5bGU9XCJib3JkZXItbGVmdDogNHB4IHNvbGlkICMwZDZlZmQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdXBwZXJjYXNlIHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGQgbWItMVwiPnt7ICdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZmlyc3RXZWlnaGluZ1ZhbHVlICE9IG51bGwgPyAoZmlyc3RXZWlnaGluZ1ZhbHVlIHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIj57eyAnS2Fkb29nbHU6Ok9wZXJhdG9yJyB8IGFicExvY2FsaXphdGlvbiB9fToge3sgZmlyc3RPcGVyYXRvckNvZGUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFNvbiBUYXJ0xLFtIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBzaGFkb3ctc20gcm91bmRlZCBweS0zIHB4LTQgaC0xMDBcIiBzdHlsZT1cImJvcmRlci1sZWZ0OiA0cHggc29saWQgIzZmNDJjMTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC11cHBlcmNhc2UgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZCBtYi0xXCI+e3sgJ0thZG9vZ2x1OjpMYXN0V2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMS43NXJlbTsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGxhc3RXZWlnaGluZ1ZhbHVlICE9IG51bGwgPyAobGFzdFdlaWdoaW5nVmFsdWUgfCBudW1iZXI6JzEuMC0wJykgKyAnIGtnJyA6ICfigJQga2cnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMVwiPnt7ICdLYWRvb2dsdTo6T3BlcmF0b3InIHwgYWJwTG9jYWxpemF0aW9uIH19OiB7eyBsYXN0T3BlcmF0b3JDb2RlIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBOZXQgWcO8ayAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hhZG93LXNtIHJvdW5kZWQgcHktMyBweC00IGgtMTAwXCIgc3R5bGU9XCJib3JkZXItbGVmdDogNHB4IHNvbGlkICMxOTg3NTQ7IGJhY2tncm91bmQ6IHJnYmEoMjUsMTM1LDg0LDAuMDYpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj57eyAnS2Fkb29nbHU6Ok5ldFdlaWdodCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtOyBjb2xvcjogIzE5ODc1NDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IG5ldFdlaWdodCAhPSBudWxsID8gKG5ldFdlaWdodCB8IG51bWJlcjonMS4wLTAnKSArICcga2cnIDogJ+KAlCBrZycgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBTb2wgc8O8dHVuOiBHaXJpxZ8vw4fEsWvEscWfICsgQXJhw6cgJiBTw7xyw7xjw7wgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gR3J1cDogR2lyacWfIC8gw4fEsWvEscWfIEJpbGdpbGVyaSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2lnbi1pbi1hbHQgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OkVudHJ5RXhpdEluZm8nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkdhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZ2F0ZU5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPkFyYcOnIEhhcmVrZXQgVMO8csO8PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZW50cnlUeXBlTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpFbnRyeURhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZW50cnlEYXRlID8gKGVudHJ5RGF0ZSB8IGRhdGU6J2RkLk1NLnl5eXknKSA6ICfigJQnIH19IHt7IGVudHJ5VGltZSB8fCAnJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RXhpdERhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZXhpdERhdGUgPyAoZXhpdERhdGUgfCBkYXRlOidkZC5NTS55eXl5JykgOiAn4oCUJyB9fSB7eyBleGl0VGltZSB8fCAnJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gR3J1cDogQXJhw6cgJiBTw7xyw7xjw7wgQmlsZ2lsZXJpIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cnVjayBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6VmVoaWNsZURyaXZlckluZm8nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OlRydWNrUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgdHJ1Y2tQbGF0ZU5vIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OlRyYWlsZXJQbGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyB0cmFpbGVyUGxhdGVObyB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpEcml2ZXJOYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGRyaXZlckZ1bGxOYW1lIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgdGNObyB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFNhxJ8gc8O8dHVuOiBCZWxnZSAmIFnDvGsgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gR3J1cDogQmVsZ2UgJiBZw7xrIEJpbGdpbGVyaSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1hbHQgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OkRvY3VtZW50Q2FyZ29JbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpEcml2ZXJDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGRyaXZlck5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6QnVzaW5lc3NQYXJ0bmVyJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGFjY291bnRUaXRsZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpXYXliaWxsTnVtYmVyJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHdheWJpbGxObyB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpTY2FsZUNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgc2NhbGVOYW1lIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6Okl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHN0b2NrTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpDb250YWluZXJObycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBjb250YWluZXJObyB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpEZXBhcnR1cmVUb0Fycml2YWwnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgKGRlcGFydHVyZUxvY2F0aW9uIHx8ICfigJQnKSArICcg4oaSICcgKyAoYXJyaXZhbExvY2F0aW9uIHx8ICfigJQnKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RGVzY3JpcHRpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZGVzY3JpcHRpb24gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQWx0IEJ1dG9ubGFyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0zIG1iLTNcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1sZWZ0IG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6QmFja1RvTGlzdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cInJlY29yZFwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4taW5mb1wiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJiYXJrb2RZYXpkaXIoKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wcmludCBtZS0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBCYXJrb2QgWWF6ZMSxclxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwiZW50cnlUeXBlTWFsR0MgJiYgcmVjb3JkPy51X1N0YXR1cyA9PT0gJzInXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzRG9pbmdHb29kc01vdmVtZW50XCJcclxuICAgICAgICAgIChjbGljayk9XCJkb0dvb2RzTW92ZW1lbnQoKVwiPlxyXG4gICAgICAgICAgPGkgW2NsYXNzXT1cImlzRG9pbmdHb29kc01vdmVtZW50ID8gJ2ZhIGZhLXNwaW5uZXIgZmEtc3BpbiBtZS0xJyA6ICdmYSBmYS1leGNoYW5nZSBtZS0xJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TWFsR2NZYXAnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG48L2FicC1wYWdlPlxyXG4iXX0=
|