@libs-ui/services-grid-layout 0.2.357-19 → 0.2.357-21

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.
@@ -34,6 +34,7 @@ export class LibsUiGridLayoutService {
34
34
  editMode = signal(false);
35
35
  /** tăng mỗi lần cây đổi — component con đọc để biết phải tính lại */
36
36
  version = signal(0);
37
+ zoomLevel = signal(1);
37
38
  /**
38
39
  * Signal chỉ đọc để nơi dùng theo dõi.
39
40
  *
@@ -45,6 +46,7 @@ export class LibsUiGridLayoutService {
45
46
  IsEditMode = this.editMode.asReadonly();
46
47
  /** tăng mỗi lần cây hoặc cấu hình đổi */
47
48
  Version = this.version.asReadonly();
49
+ Zoom = this.zoomLevel.asReadonly();
48
50
  /**
49
51
  * trần số cấp container lồng nhau — canvas đọc để biết có cho chuyển thành container không */
50
52
  maxContainerDepth() {
@@ -59,6 +61,11 @@ export class LibsUiGridLayoutService {
59
61
  init(config) {
60
62
  this.destroy();
61
63
  this.config = config;
64
+ // 🔴 Bố cục ĐÃ LƯU không đi qua luật chặn nào của giao diện: bản lưu cũ (sinh trước khi có trần,
65
+ // hoặc do thao tác lỗi) vẫn mang container lồng container. Trần `maxContainerDepth` chỉ ẩn NÚT
66
+ // trên canvas — nó không sửa dữ liệu, nên thiếu dòng này là vẽ ra đúng cây quá sâu đó.
67
+ // Nơi dùng KHÔNG tự gọi được: `LibsUiGridLayoutTreeService` cố ý không xuất.
68
+ this.treeService.flattenOverDepthContainers(config.data, this.maxContainerDepth());
62
69
  this.assignOverlapLayers(config.data);
63
70
  // 🔴 Nhân bản như `refresh()`: `init()` lại (đổi chế độ, bật/tắt chồng khối) trên CÙNG object cây
64
71
  // thì `@for` không dựng lại `gridster-item`, nên `layerIndex` vừa gán không tới `$item` và khối
@@ -66,6 +73,24 @@ export class LibsUiGridLayoutService {
66
73
  // toàn `undefined`).
67
74
  this.rootNode.set(this.shallowCloneTree(config.data));
68
75
  this.editMode.set(config.isEditMode ?? false);
76
+ let initialZoom = config.initialZoom ?? 1;
77
+ if (config.storageKey && typeof localStorage !== 'undefined') {
78
+ try {
79
+ const saved = localStorage.getItem(config.storageKey);
80
+ if (saved) {
81
+ const parsed = parseFloat(saved);
82
+ const min = config.zoomMin ?? 0.4;
83
+ const max = config.zoomMax ?? 1.5;
84
+ if (!isNaN(parsed) && parsed >= min && parsed <= max) {
85
+ initialZoom = parsed;
86
+ }
87
+ }
88
+ }
89
+ catch {
90
+ // ignore localStorage access error
91
+ }
92
+ }
93
+ this.zoomLevel.set(initialZoom);
69
94
  this.version.update((v) => v + 1);
70
95
  }
71
96
  setEditMode(value) {
@@ -117,6 +142,7 @@ export class LibsUiGridLayoutService {
117
142
  const canOverlap = isFreeMode || (config.allowOverlap ?? false);
118
143
  return {
119
144
  ...base,
145
+ scale: this.zoomLevel(),
120
146
  ...(config.cols ? { minCols: config.cols, maxCols: config.cols, maxItemCols: config.cols } : {}),
121
147
  ...(config.rowHeight && depth === 0 ? { fixedRowHeight: config.rowHeight } : {}),
122
148
  // Khe và chiều cao hàng khác nhau theo cấp: lưới trang thoáng, lưới lồng khít.
@@ -344,6 +370,32 @@ export class LibsUiGridLayoutService {
344
370
  }
345
371
  return added;
346
372
  }
373
+ /**
374
+ * Thêm một khối tại toạ độ (col, row) cụ thể và tự động đẩy các khối va chạm xuống dưới.
375
+ */
376
+ insertBlockWithCollision(item, targetCol = 0, targetRow = 0, parentId) {
377
+ const root = this.rootNode();
378
+ const added = root
379
+ ? this.treeService.insertWithCollision(root, parentId ?? root.id, item, targetCol, targetRow)
380
+ : undefined;
381
+ if (added) {
382
+ this.refresh();
383
+ }
384
+ return added;
385
+ }
386
+ activeDragPayload = signal(undefined);
387
+ /** Đặt payload khi bắt đầu kéo từ bên ngoài vào (ví dụ: palette, drawer) */
388
+ setDragPayload(payload) {
389
+ this.activeDragPayload.set(payload);
390
+ }
391
+ /** Lấy payload đang kéo */
392
+ getDragPayload() {
393
+ return this.activeDragPayload();
394
+ }
395
+ /** Xoá payload khi kết thúc kéo */
396
+ clearDragPayload() {
397
+ this.activeDragPayload.set(undefined);
398
+ }
347
399
  /** Xoá một khối. Xoá container là xoá cả ruột. Trả `false` khi không xoá được (vd khối gốc). */
348
400
  removeBlock(id) {
349
401
  const root = this.rootNode();
@@ -353,10 +405,13 @@ export class LibsUiGridLayoutService {
353
405
  }
354
406
  return done;
355
407
  }
408
+ get totalColumns() {
409
+ return this.config?.cols ?? 24;
410
+ }
356
411
  /** Biến khối đơn thành CONTAINER — nội dung cũ thành khối con đầu tiên, không mất dữ liệu. */
357
412
  toContainer(id) {
358
413
  const root = this.rootNode();
359
- const done = root ? this.treeService.toContainer(root, id, this.config?.cols ?? 12) : false;
414
+ const done = root ? this.treeService.toContainer(root, id, this.totalColumns) : false;
360
415
  if (done) {
361
416
  this.refresh();
362
417
  }
@@ -377,7 +432,7 @@ export class LibsUiGridLayoutService {
377
432
  if (!root) {
378
433
  return;
379
434
  }
380
- this.treeService.compact(root, this.config?.cols ?? 12);
435
+ this.treeService.compact(root, this.totalColumns);
381
436
  this.refresh();
382
437
  }
383
438
  /**
@@ -402,6 +457,63 @@ export class LibsUiGridLayoutService {
402
457
  const root = this.rootNode();
403
458
  return root ? this.treeService.findParent(root, id) : undefined;
404
459
  }
460
+ /**
461
+ * Đặt tỷ lệ thu phóng của canvas (kẹp giữa min và max).
462
+ *
463
+ * @param value Tỷ lệ (0.4 = 40%, 1.0 = 100%, 1.5 = 150%)
464
+ * @param persistKey Khóa localStorage để lưu lại (bỏ trống thì lấy từ config)
465
+ */
466
+ setZoom(value, persistKey) {
467
+ const min = this.config?.zoomMin ?? 0.4;
468
+ const max = this.config?.zoomMax ?? 1.5;
469
+ const clamped = Math.min(max, Math.max(min, Math.round(value * 100) / 100));
470
+ this.zoomLevel.set(clamped);
471
+ const storageKey = persistKey ?? this.config?.storageKey;
472
+ if (storageKey && typeof localStorage !== 'undefined') {
473
+ try {
474
+ localStorage.setItem(storageKey, String(clamped));
475
+ }
476
+ catch {
477
+ // ignore localStorage access error
478
+ }
479
+ }
480
+ this.version.update((v) => v + 1);
481
+ }
482
+ /** Phóng to thêm một bước (mặc định 0.05 tức 5%) */
483
+ zoomIn(step, persistKey) {
484
+ const s = step ?? this.config?.zoomStep ?? 0.05;
485
+ this.setZoom(this.zoomLevel() + s, persistKey);
486
+ }
487
+ /** Thu nhỏ bớt một bước (mặc định 0.05 tức 5%) */
488
+ zoomOut(step, persistKey) {
489
+ const s = step ?? this.config?.zoomStep ?? 0.05;
490
+ this.setZoom(this.zoomLevel() - s, persistKey);
491
+ }
492
+ /** Đặt lại tỷ lệ thu phóng gốc 100% (1.0) */
493
+ resetZoom(persistKey) {
494
+ this.setZoom(1.0, persistKey);
495
+ }
496
+ /**
497
+ * Tự động tính toán và đặt tỷ lệ thu phóng để canvas vừa vặn với chiều rộng container.
498
+ *
499
+ * @param containerWidth Chiều rộng container đo được (px)
500
+ * @param stageWidth Chiều rộng chuẩn của canvas (mặc định 1668px)
501
+ * @param padding Khoảng cách lề hai bên (mặc định 48px)
502
+ * @param persistKey Khóa localStorage
503
+ * @returns Tỷ lệ thu phóng vừa tính
504
+ */
505
+ fitToScreen(containerWidth, stageWidth, padding = 48, persistKey) {
506
+ const targetWidth = stageWidth ?? this.config?.stageWidth ?? 1668;
507
+ const min = this.config?.zoomMin ?? 0.4;
508
+ const max = 1.25;
509
+ const ratio = Math.min(max, Math.max(min, Math.round(((containerWidth - padding) / targetWidth) * 100) / 100));
510
+ this.setZoom(ratio, persistKey);
511
+ return ratio;
512
+ }
513
+ /** Kiểm tra tính năng thu phóng có được cấu hình bật không */
514
+ isZoomConfigured() {
515
+ return Boolean(this.config?.enableZoom);
516
+ }
405
517
  /**
406
518
  * Cổng DUY NHẤT cho canvas của thư viện. Nơi dùng KHÔNG gọi tới đây.
407
519
  *
@@ -413,6 +525,13 @@ export class LibsUiGridLayoutService {
413
525
  return {
414
526
  maxContainerDepth: () => this.maxContainerDepth(),
415
527
  containerPadding: () => this.containerPadding(),
528
+ isZoomEnabled: () => this.isZoomConfigured(),
529
+ zoom: () => this.zoomLevel(),
530
+ setZoom: (v, key) => this.setZoom(v, key),
531
+ zoomIn: (step, key) => this.zoomIn(step, key),
532
+ zoomOut: (step, key) => this.zoomOut(step, key),
533
+ resetZoom: (key) => this.resetZoom(key),
534
+ fitToScreen: (cW, sW, pad, key) => this.fitToScreen(cW, sW, pad, key),
416
535
  gridsterOptions: (depth, cb) => this.buildGridsterOptions(depth, cb),
417
536
  attachNode: (node, depth, host) => this.attachNode(node, depth, host),
418
537
  detachNode: (nodeId) => this.detachNode(nodeId),
@@ -430,4 +549,4 @@ export class LibsUiGridLayoutService {
430
549
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiGridLayoutService, decorators: [{
431
550
  type: Injectable
432
551
  }], ctorParameters: () => [] });
433
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZ3JpZC1sYXlvdXQvc3JjL2dyaWQtbGF5b3V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsVUFBVSxFQUFvQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQWdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFTN0Q7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsNkZBQTZGO0lBQzdGLHdGQUF3RjtJQUN4RixtRkFBbUY7SUFDbEUsV0FBVyxHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQztJQUNqRSxvRkFBb0Y7SUFDbkUsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBRWhFO1FBQ0UsK0ZBQStGO1FBQy9GLHlGQUF5RjtRQUN6RiwrRkFBK0Y7UUFDL0YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sTUFBTSxDQUF1QjtJQUNwQixhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFFekQsUUFBUSxHQUFHLE1BQU0sQ0FBZ0MsU0FBUyxDQUFDLENBQUM7SUFDNUQsUUFBUSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNuRCxxRUFBcUU7SUFDcEQsT0FBTyxH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QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMvQyxlQUFlLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN6RixVQUFVLEVBQUUsQ0FBQyxJQUF1QixFQUFFLEtBQWEsRUFBRSxJQUFzQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO1lBQ2xILFVBQVUsRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7U0FDeEQsQ0FBQztJQUNKLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBMEIsRUFBRSxJQUF1QixFQUFFLEtBQWE7UUFDcEYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7d0dBbmZVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBEZXN0cm95UmVmLCBJbmplY3RhYmxlLCBWaWV3Q29udGFpbmVyUmVmLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZHN0ZXJDb25maWcsIEdyaWRzdGVySXRlbSB9IGZyb20gJ2dyaWRzdGVyMTgnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBncmlkTGF5b3V0TmVzdGVkQ29uZmlnLCBncmlkTGF5b3V0Um9vdENvbmZpZyB9IGZyb20gJy4vZGVmaW5lcy9ncmlkc3Rlci1jb25maWcuZGVmaW5lJztcbmltcG9ydCB7IExpYnNVaUdyaWRMYXlvdXRUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEVfZ3JpZExheW91dF9tb2RlX3N0cmluZyxcbiAgVF9ncmlkTGF5b3V0X2NoYW5nZUV2ZW50LFxuICBUX2dyaWRMYXlvdXRfbmV3Tm9kZSxcbiAgVF9ncmlkTGF5b3V0X2NvbmZpZyxcbiAgVF9ncmlkTGF5b3V0X25vZGUsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEThu7FuZyBt4buZdCBt4bq3dCBwaOG6s25nIGvDqW8gdGjhuqMgdsOgIHThu7EgZ+G6r24gY29tcG9uZW50IGPhu6dhIG7GoWkgZMO5bmcgbMOqbiB04burbmcga2jhu5FpLlxuICpcbiAqIE7GoWkgZMO5bmcgY2jhu4kgY+G6p24gxJHGsGEgdsOgbzogbG/huqFpIGNvbXBvbmVudCBtdeG7kW4gZOG7sW5nXG4gKiAoYG5vZGVDb21wb25lbnRUeXBlYCkgdsOgIGPDonkgZOG7ryBsaeG7h3UgKGBkYXRhYCkuIFRvw6BuIGLhu5kgdmnhu4djIHbhur0gbMaw4bubaSwga8OpbyB0aOG6oywgxJHhu5VpIGvDrWNoIHRoxrDhu5tjLFxuICogbOG7k25nIGNvbnRhaW5lciB2w6AgZOG7jW4gZOG6uXAgZG8gdGjGsCB2aeG7h24gbG8uXG4gKlxuICog8J+UtCDEkMOieSBsw6Agc2VydmljZSB0aGVvIFThu6pORyBt4bq3dCBwaOG6s25nLCBLSMOUTkcgYHByb3ZpZGVkSW46ICdyb290J2AuIEtoYWkgdHJvbmcgYHByb3ZpZGVyc2AgY+G7p2FcbiAqIGNvbXBvbmVudCBkw7luZyBuw7M7IGhhaSBt4bq3dCBwaOG6s25nIHRyw6puIGPDuW5nIG3hu5l0IG3DoG4gcGjhuqNpIGzDoCBoYWkgdGjhu7FjIHRo4buDIHJpw6puZywgZMO5bmcgY2h1bmcgdGjDrFxuICogYGNvbXBvbmVudFJlZnNgIGPhu6dhIG3hurd0IHBo4bqzbmcgbsOgeSBi4buLIG3hurd0IHBo4bqzbmcga2lhIGThu41uIG3huqV0LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTGlic1VpR3JpZExheW91dFNlcnZpY2Uge1xuICAvLyDwn5S0IFThu7AgVOG6oE8sIGtow7RuZyBgaW5qZWN0YC4gTsahaSBkw7luZyBjaOG7iSBwaOG6o2kgdmnhur90IGBwcm92aWRlcnM6IFtMaWJzVWlHcmlkTGF5b3V0U2VydmljZV1gIOKAlFxuICAvLyBraMO0bmcgcGjhuqNpIGJp4bq/dCBiw6puIHRyb25nIHRoxrAgdmnhu4duIGPDsm4gc2VydmljZSBuw6BvIGtow6FjIChuZ8aw4budaSBkw7luZyBjaOG7kXQgMjgvMDgvMjAyNikuXG4gIC8vIGBUcmVlU2VydmljZWAga2jDtG5nIGdp4buvIHRy4bqhbmcgdGjDoWkgZMO5bmcgY2h1bmcgbsOqbiBt4buXaSBt4bq3dCBwaOG6s25nIG3hu5l0IGLhuqNuIGzDoCDEkcO6bmcuXG4gIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2UgPSBuZXcgTGlic1VpR3JpZExheW91dFRyZWVTZXJ2aWNlKCk7XG4gIC8qKiBMxrDhu6N0IHThuqNpIGNvbXBvbmVudCDEkWFuZyBjaOG7nSwgdGhlbyBpZCBraOG7kWkg4oCUIMSR4buDIGh14bu3IGtoaSBraOG7kWkgYuG7iyBn4buhIGdp4buvYSBjaOG7q25nLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmdMb2FkcyA9IG5ldyBNYXA8c3RyaW5nLCBTdWJzY3JpcHRpb24+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8g8J+UtCBTZXJ2aWNlIGtoYWkgdHJvbmcgYHByb3ZpZGVyc2AgY+G7p2EgY29tcG9uZW50IG7Dqm4gQW5ndWxhciBodeG7tyBuw7MgY8O5bmcgY29tcG9uZW50IOKAlCB0aMawIHZp4buHblxuICAgIC8vIHThu7EgZOG7jW4g4bufIMSRw6J5LCBuxqFpIGTDuW5nIEtIw5RORyBwaOG6o2kgZ+G7jWkgYGRlc3Ryb3koKWAgdHJvbmcgYG5nT25EZXN0cm95YCAobmfGsOG7nWkgZMO5bmcgY2jhu5F0XG4gICAgLy8gMjgvMDgvMjAyNikuIELhuq90IG5o4bubIG3hu5l0IGLGsOG7m2MgZOG7jW4gZOG6uXAgbMOgIGtp4buDdSBBUEkgZOG7hSBxdcOqbiwgdsOgIHF1w6puIHRow6wgcsOyIHLhu4kgYuG7mSBuaOG7myBpbSBs4bq3bmcuXG4gICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB0aGlzLmRlc3Ryb3koKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZz86IFRfZ3JpZExheW91dF9jb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50UmVmcyA9IG5ldyBNYXA8c3RyaW5nLCBDb21wb25lbnRSZWY8dW5rbm93bj4+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByb290Tm9kZSA9IHNpZ25hbDxUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlZGl0TW9kZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiB0xINuZyBt4buXaSBs4bqnbiBjw6J5IMSR4buVaSDigJQgY29tcG9uZW50IGNvbiDEkeG7jWMgxJHhu4MgYmnhur90IHBo4bqjaSB0w61uaCBs4bqhaSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHZlcnNpb24gPSBzaWduYWw8bnVtYmVyPigwKTtcblxuICAvKipcbiAgICogU2lnbmFsIGNo4buJIMSR4buNYyDEkeG7gyBuxqFpIGTDuW5nIHRoZW8gZMO1aS5cbiAgICpcbiAgICog8J+UtCBMw6AgVEhV4buYQyBUw41OSCwga2jDtG5nIHBo4bqjaSBnZXR0ZXIuIEdldHRlciB0cuG6oyBzaWduYWwgdGjDrCBjaOG7lyDEkeG7jWMgcGjhuqNpIHZp4bq/dCBgVmVyc2lvbigpKClgIOKAlFxuICAgKiBxdcOqbiBj4bq3cCBuZ2/hurdjIHRo4bupIGhhaSBsw6AgY29tcHV0ZWQgS0jDlE5HIHBo4bulIHRodeG7mWMgdsOgbyBuw7MsIGPDonkgxJHhu5VpIG3DoCBsxrDhu5tpIMSR4bupbmcgaW0sIHbDoFxuICAgKiBUeXBlU2NyaXB0IGtow7RuZyBo4buBIGLDoW8gbOG7l2kgKMSRbyAyOC8wOC8yMDI2OiB0aMOqbSBraOG7kWkga2jDtG5nIGhp4buHbiwgc+G6r3AgZ+G7jW4ga2jDtG5nIG5ow7pjIG5ow61jaCkuXG4gICAqL1xuICByZWFkb25seSBSb290ID0gdGhpcy5yb290Tm9kZS5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IElzRWRpdE1vZGUgPSB0aGlzLmVkaXRNb2RlLmFzUmVhZG9ubHkoKTtcbiAgLyoqIHTEg25nIG3hu5dpIGzhuqduIGPDonkgaG/hurdjIGPhuqV1IGjDrG5oIMSR4buVaSAqL1xuICByZWFkb25seSBWZXJzaW9uID0gdGhpcy52ZXJzaW9uLmFzUmVhZG9ubHkoKTtcblxuICAvKipcbiAgICogdHLhuqduIHPhu5EgY+G6pXAgY29udGFpbmVyIGzhu5NuZyBuaGF1IOKAlCBjYW52YXMgxJHhu41jIMSR4buDIGJp4bq/dCBjw7MgY2hvIGNodXnhu4NuIHRow6BuaCBjb250YWluZXIga2jDtG5nICovXG4gIHByaXZhdGUgbWF4Q29udGFpbmVyRGVwdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/Lm1heENvbnRhaW5lckRlcHRoID8/IDE7XG4gIH1cblxuICAvKipcbiAgICogbOG7gSB0cm9uZyBj4bunYSBjb250YWluZXIsIHB4IOKAlCBjYW52YXMgxJHhu41jIMSR4buDIMSR4bq3dCBwYWRkaW5nIGzDqm4gduG7jyBjb250YWluZXIgKi9cbiAgcHJpdmF0ZSBjb250YWluZXJQYWRkaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5jb250YWluZXJQYWRkaW5nID8/IDEyO1xuICB9XG5cbiAgLyoqIEto4bufaSB04bqhbyBt4bq3dCBwaOG6s25nLiBH4buNaSBs4bqhaSBz4bq9IGThu41uIHPhuqFjaCBjb21wb25lbnQgY8WpIHLhu5NpIGThu7FuZyBs4bqhaSB04burIMSR4bqndS4gKi9cbiAgaW5pdChjb25maWc6IFRfZ3JpZExheW91dF9jb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmFzc2lnbk92ZXJsYXBMYXllcnMoY29uZmlnLmRhdGEpO1xuICAgIC8vIPCflLQgTmjDom4gYuG6o24gbmjGsCBgcmVmcmVzaCgpYDogYGluaXQoKWAgbOG6oWkgKMSR4buVaSBjaOG6vyDEkeG7mSwgYuG6rXQvdOG6r3QgY2jhu5NuZyBraOG7kWkpIHRyw6puIEPDmU5HIG9iamVjdCBjw6J5XG4gICAgLy8gdGjDrCBgQGZvcmAga2jDtG5nIGThu7FuZyBs4bqhaSBgZ3JpZHN0ZXItaXRlbWAsIG7Dqm4gYGxheWVySW5kZXhgIHbhu6thIGfDoW4ga2jDtG5nIHThu5tpIGAkaXRlbWAgdsOgIGto4buRaVxuICAgIC8vIHbhuqtuIGtow7RuZyDEkcOoIG5oYXUgxJHGsOG7o2MgKMSRbyAyOC8wOC8yMDI2OiBgaXRlbS5sYXllckluZGV4YCA9IDF8MnwzfDR8NyBtw6AgYCRpdGVtLmxheWVySW5kZXhgXG4gICAgLy8gdG/DoG4gYHVuZGVmaW5lZGApLlxuICAgIHRoaXMucm9vdE5vZGUuc2V0KHRoaXMuc2hhbGxvd0Nsb25lVHJlZShjb25maWcuZGF0YSkpO1xuICAgIHRoaXMuZWRpdE1vZGUuc2V0KGNvbmZpZy5pc0VkaXRNb2RlID8/IGZhbHNlKTtcbiAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gIH1cblxuICBzZXRFZGl0TW9kZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZWRpdE1vZGUuc2V0KHZhbHVlKTtcbiAgICAvLyDwn5S0IFBI4bqiSSBixqFtIGB2ZXJzaW9uYDogYGdyaWRzdGVyT3B0aW9ucygpYCDEkeG7jWMgYGVkaXRNb2RlYCDEkeG7gyBi4bqtdC904bqvdCBrw6lv4oCTdGjhuqMsIG3DoCBjb21wdXRlZFxuICAgIC8vIGBncmlkT3B0aW9uc2AgYsOqbiBjYW52YXMgY2jhu4kgY2jhuqF5IGzhuqFpIGtoaSBgVmVyc2lvbmAgxJHhu5VpLiBUaGnhur91IGTDsm5nIG7DoHkgdGjDrCDEkeG7lWkgY2jhur8gxJHhu5kgeG9uZ1xuICAgIC8vIGdyaWRzdGVyIHbhuqtuIGdp4buvIG9wdGlvbnMgY8WpIOKAlCBjaHV54buDbiBzYW5nIFhFTSBtw6Aga2jhu5FpIHbhuqtuIGvDqW8gxJHGsOG7o2MuXG4gICAgdGhpcy52ZXJzaW9uLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIELhuq10L3Thuq90IGNobyBraOG7kWkgY2jhu5NuZyBsw6puIG5oYXUg4oCUIEtIw5RORyBk4buxbmcgbOG6oWkgbeG6t3QgcGjhurNuZy5cbiAgICpcbiAgICogVHLGsOG7m2MgxJHDonkgbsahaSBkw7luZyBwaOG6o2kgZ+G7jWkgYGluaXQoKWAgbOG6oWkgxJHhu4MgxJHhu5VpIGPhu50gbsOgeSwgbcOgIGBpbml0KClgIGh14bu3IHPhuqFjaCBy4buTaSBk4buxbmcgbOG6oWkgbeG7jWlcbiAgICogY29tcG9uZW50IG7hu5lpIGR1bmcg4oCUIGzDo25nIHBow60sIHbDoCBuZ8aw4budaSBkw7luZyB0aOG6pXkgbcOgbiBjaOG7m3AgKG5nxrDhu51pIGTDuW5nIGNo4buRdCAyOC8wOC8yMDI2KS5cbiAgICovXG4gIHNldEFsbG93T3ZlcmxhcCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIGFsbG93T3ZlcmxhcDogdmFsdWUgfTtcblxuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG5cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDwn5S0IEfDoW4gbOG7m3AgdsOgbyBDw4JZIMSQQU5HIFbhurwgKGByb290Tm9kZWApLCBLSMOUTkcgcGjhuqNpIGBjb25maWcuZGF0YWAuXG4gICAgLy8gYGluaXQoKWAgxJHDoyBjbG9uZSBgY29uZmlnLmRhdGFgIHNhbmcgYHJvb3ROb2RlYCBuw6puIGhhaSBvYmplY3QgS0jDgUMgbmhhdTsgZ8OhbiB2w6BvIGBjb25maWcuZGF0YWBcbiAgICAvLyB0aMOsIGByZWZyZXNoKClgIGNsb25lIGzhuqFpIHThu6sgYHJvb3ROb2RlYCDigJQgbOG7m3AgduG7q2EgZ8OhbiBraMO0bmcgdOG7m2kgYGdyaWRzdGVyLWl0ZW1gIG7DoG8sIGB6LWluZGV4YFxuICAgIC8vIGPhu6dhIG3hu41pIGto4buRaSDEkeG7qW5nIOG7nyBgMWAgdsOgIGto4buRaSBuw6BvIHbhur0gc2F1IHRow6wgbuG6sW0gdHLDqm46IGNo4buTbmcga2jhu5FpIFwibMO6YyDEkcaw4bujYyBsw7pjIGtow7RuZ1wiXG4gICAgLy8gKMSRbyAwNC8wOS8yMDI2OiBgaXRlbS5sYXllckluZGV4YCB1bmRlZmluZWQsIGBnZXRMYXllckluZGV4KClgID0gMCBjaG8gY+G6oyA4IGto4buRaSkuXG4gICAgdGhpcy5hc3NpZ25PdmVybGFwTGF5ZXJzKHJvb3QpO1xuICAgIC8vIFRoYXkgdGhhbSBjaGnhur91IGPDonkgxJHhu4MgYGxheWVySW5kZXhgIHbhu6thIGfDoW4gdOG7m2kgxJHGsOG7o2MgYCRpdGVtYCBj4bunYSBncmlkc3RlcjsgY29tcG9uZW50IG7hu5lpIGR1bmdcbiAgICAvLyBLSMOUTkcgYuG7iyBk4buxbmcgbOG6oWkgdsOsIGBhdHRhY2hOb2RlYCBuaOG6rW4gcmEgaWQgY8WpIHbDoCBjaOG7iSBgc2V0SW5wdXRgLlxuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEPhuqV1IGjDrG5oIGdyaWRzdGVyIGNobyBt4buZdCBj4bqlcCBsxrDhu5tpLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwdGggMCA9IGzGsOG7m2kgY+G6pXAgdHJhbmcsIOKJpSAxID0gbMaw4bubaSBs4buTbmcgdHJvbmcgY29udGFpbmVyXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkR3JpZHN0ZXJPcHRpb25zKGRlcHRoOiBudW1iZXIsIGl0ZW1DaGFuZ2VDYWxsYmFjaz86ICgpID0+IHZvaWQpOiBHcmlkc3RlckNvbmZpZyB7XG4gICAgY29uc3QgYmFzZSA9IGRlcHRoID09PSAwID8gZ3JpZExheW91dFJvb3RDb25maWcoKSA6IGdyaWRMYXlvdXROZXN0ZWRDb25maWcoKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0ZyZWVNb2RlID0gY29uZmlnLm1vZGUgPT09IEVfZ3JpZExheW91dF9tb2RlX3N0cmluZy5mcmVlO1xuICAgIGNvbnN0IGNhbkVkaXQgPSB0aGlzLmVkaXRNb2RlKCk7XG4gICAgY29uc3QgY2FuT3ZlcmxhcCA9IGlzRnJlZU1vZGUgfHwgKGNvbmZpZy5hbGxvd092ZXJsYXAgPz8gZmFsc2UpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICAuLi4oY29uZmlnLmNvbHMgPyB7IG1pbkNvbHM6IGNvbmZpZy5jb2xzLCBtYXhDb2xzOiBjb25maWcuY29scywgbWF4SXRlbUNvbHM6IGNvbmZpZy5jb2xzIH0gOiB7fSksXG4gICAgICAuLi4oY29uZmlnLnJvd0hlaWdodCAmJiBkZXB0aCA9PT0gMCA/IHsgZml4ZWRSb3dIZWlnaHQ6IGNvbmZpZy5yb3dIZWlnaHQgfSA6IHt9KSxcbiAgICAgIC8vIEtoZSB2w6AgY2hp4buBdSBjYW8gaMOgbmcga2jDoWMgbmhhdSB0aGVvIGPhuqVwOiBsxrDhu5tpIHRyYW5nIHRob8OhbmcsIGzGsOG7m2kgbOG7k25nIGtow610LlxuICAgICAgLi4uKGRlcHRoID09PSAwICYmIGNvbmZpZy5tYXJnaW4gIT09IHVuZGVmaW5lZCA/IHsgbWFyZ2luOiBjb25maWcubWFyZ2luIH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPiAwICYmIGNvbmZpZy5uZXN0ZWRNYXJnaW4gIT09IHVuZGVmaW5lZCA/IHsgbWFyZ2luOiBjb25maWcubmVzdGVkTWFyZ2luIH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPiAwICYmIGNvbmZpZy5uZXN0ZWRSb3dIZWlnaHQgIT09IHVuZGVmaW5lZCA/IHsgZml4ZWRSb3dIZWlnaHQ6IGNvbmZpZy5uZXN0ZWRSb3dIZWlnaHQgfSA6IHt9KSxcbiAgICAgIC4uLihkZXB0aCA9PT0gMCAmJiBjb25maWcub3V0ZXJNYXJnaW4gIT09IHVuZGVmaW5lZCA/IHsgb3V0ZXJNYXJnaW46IGNvbmZpZy5vdXRlck1hcmdpbiB9IDoge30pLFxuICAgICAgLi4uKGRlcHRoID09PSAwICYmIGNvbmZpZy5vdXRlck1hcmdpbkJvdHRvbSAhPT0gdW5kZWZpbmVkID8geyBvdXRlck1hcmdpbkJvdHRvbTogY29uZmlnLm91dGVyTWFyZ2luQm90dG9tIH0gOiB7fSksXG4gICAgICAuLi4oY29uZmlnLm1pbkl0ZW1Sb3dzICE9PSB1bmRlZmluZWQgPyB7IG1pbkl0ZW1Sb3dzOiBjb25maWcubWluSXRlbVJvd3MgfSA6IHt9KSxcbiAgICAgIC4uLihjb25maWcuZGVmYXVsdEl0ZW1Db2xzICE9PSB1bmRlZmluZWQgPyB7IGRlZmF1bHRJdGVtQ29sczogY29uZmlnLmRlZmF1bHRJdGVtQ29scyB9IDoge30pLFxuICAgICAgLi4uKGNvbmZpZy5kZWZhdWx0SXRlbVJvd3MgIT09IHVuZGVmaW5lZCA/IHsgZGVmYXVsdEl0ZW1Sb3dzOiBjb25maWcuZGVmYXVsdEl0ZW1Sb3dzIH0gOiB7fSksXG5cbiAgICAgIC8vIPCflLQgQ2jhur8gxJHhu5kgWEVNIHBo4bqjaSBU4bquVCBo4bqzbiBrw6lvIHbDoCDEkeG7lWkga8OtY2ggdGjGsOG7m2MuXG4gICAgICAvLyBgYmFzZWAgbHXDtG4gxJHhu4MgYGVuYWJsZWQ6IHRydWVgOyBraMO0bmcgZ2hpIMSRw6ggdGhlbyBgZWRpdE1vZGVgIHRow6wgbmfGsOG7nWkgeGVtIHbhuqtuIGvDqW8gxJHGsOG7o2Mga2jhu5FpXG4gICAgICAvLyB2w6AgxJHhu5VpIGLhu5EgY+G7pWMgY+G7p2EgbmfGsOG7nWkga2jDoWMgKG5nxrDhu51pIGTDuW5nIGLDoW8gMjgvMDgvMjAyNjogXCLEkWFuZyB4ZW0gbcOgIHbhuqtuIGvDqW8gdGjhuqMgdGhheSDEkeG7lWlcbiAgICAgIC8vIHbhu4sgdHLDrSB2w6AgdGjDqm0ga2jhu5FpIMSRxrDhu6NjXCIpLlxuICAgICAgZHJhZ2dhYmxlOiB7IC4uLmJhc2UuZHJhZ2dhYmxlLCBlbmFibGVkOiBjYW5FZGl0IH0sXG4gICAgICByZXNpemFibGU6IHsgLi4uYmFzZS5yZXNpemFibGUsIGVuYWJsZWQ6IGNhbkVkaXQgfSxcblxuICAgICAgLy8gQ2jhur8gxJHhu5kgdOG7sSBkbyBMVcOUTiBjaG8gY2jhu5NuZzsgY2jhur8gxJHhu5kgbMaw4bubaSB0aMOsIHRoZW8gY+G7nSBj4bunYSBuxqFpIGTDuW5nLlxuICAgICAgYWxsb3dNdWx0aUxheWVyOiBjYW5PdmVybGFwLFxuICAgICAgLy8g8J+UtCBC4bqtdCBgYWxsb3dNdWx0aUxheWVyYCBN4buYVCBNw4xOSCBraMO0bmcgxJHhu6cuIE3DoyBsaWIgc28gYGxheWVySW5kZXhgIGPhu6dhIGhhaSBraOG7kWk6IEtIw4FDIG5oYXVcbiAgICAgIC8vIHRow6wgY2hvIMSRw6gsIEdJ4buQTkcgbmhhdSB24bqrbiBiw6FvIHZhIGNo4bqhbS4gS2jhu5FpIGtow7RuZyBraGFpIGBsYXllckluZGV4YCDEkeG7gXUgcsahaSB24buBXG4gICAgICAvLyBgZGVmYXVsdExheWVySW5kZXhgIOKAlCB04bupYyBjw7luZyBs4bubcCwgdsOgIHbhuqtuIGLhu4sgxJHhuql5IG5oYXUgbmjGsCBsxrDhu5tpIHRoxrDhu51uZyAobmfGsOG7nWkgZMO5bmcgYsOhb1xuICAgICAgLy8gMjgvMDgvMjAyNjogXCJi4bqtdCBjaOG7k25nIGto4buRaSBuaMawbmcga2hpIGvDqW8gdGjDrCBjw6FjIGto4buRaSB24bqrbiBkaSBjaHV54buDbiB0aGVvXCIpLlxuICAgICAgLy8gQ2hvIGNo4buTbmcgdGjDrCBwaOG6o2kgVOG6rlQgxJHhuql5IGto4buRaSwgbuG6v3Uga2jDtG5nIGto4buRaSBi4buLIGThuqF0IMSRaSB0csaw4bubYyBraGkga+G7i3AgxJHDqCBsw6puIG5oYXUuXG4gICAgICAuLi4oY2FuT3ZlcmxhcCA/IHsgcHVzaEl0ZW1zOiBmYWxzZSwgcHVzaFJlc2l6ZUl0ZW1zOiBmYWxzZSwgc3dhcDogZmFsc2UsIHN3YXBXaGlsZURyYWdnaW5nOiBmYWxzZSB9IDoge30pLFxuXG4gICAgICBpdGVtQ2hhbmdlQ2FsbGJhY2s6IChpdGVtOiBHcmlkc3Rlckl0ZW0pID0+IHtcbiAgICAgICAgLy8g8J+UtCBLaOG7kWkgduG7q2EgdGhhbyB0w6FjIHBo4bqjaSBsw6puIEzhu5pQIFRSw4pOIEPDmU5HLlxuICAgICAgICAvLyBgbGF5ZXJJbmRleGAgZ8OhbiBt4buZdCBs4bqnbiB0aGVvIHRo4bupIHThu7EgY8OieSBsw7pjIGto4bufaSB04bqhbywgbsOqbiBraOG7kWkga8OpbyBsw6puIGNo4buJIG7hu5VpIFRST05HIEzDmkNcbiAgICAgICAgLy8ga8OpbyAobmjhu50gYHotaW5kZXg6IDMwYCBj4bunYSBs4bubcCBgZ3JpZHN0ZXItaXRlbS1tb3ZpbmdgKTsgdGjhuqMgdGF5IHJhIGzDoCB24buBIGzhu5twIGPFqSB2w6AgYuG7iyBraOG7kWlcbiAgICAgICAgLy8gxJHhu6luZyBzYXUgdHJvbmcgY8OieSDEkcOoIG5nxrDhu6NjIGzDqm4gKG5nxrDhu51pIGTDuW5nIGLDoW8gMjgvMDgvMjAyNiwgxJFvIMSRxrDhu6NjOiBrw6lvIHo9MzAsIHRo4bqjIHbhu4FcbiAgICAgICAgLy8gej0xMCB0cm9uZyBraGkgaGFpIGto4buRaSBr4bq/IGLDqm4gxJFhbmcgej0xMSB2w6Agej0xMikuXG4gICAgICAgIGlmIChjYW5PdmVybGFwKSB7XG4gICAgICAgICAgdGhpcy5yYWlzZVRvVG9wTGF5ZXIoaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gICAgICAgIGl0ZW1DaGFuZ2VDYWxsYmFjaz8uKCk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogR+G6r24gY29tcG9uZW50IGPhu6dhIG7GoWkgZMO5bmcgbMOqbiBt4buZdCBraOG7kWkuXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IGNo4buXIGfhuq9uIFJJw4pORyBj4bunYSDDtCDEkcOzIOKAlCBt4buXaSBraOG7kWkgbeG7mXQgYFZpZXdDb250YWluZXJSZWZgLCBkw7luZyBjaHVuZyBt4buZdCBjw6FpIHRow6xcbiAgICogICBt4buNaSBjb21wb25lbnQgYuG7iyBk4buTbiBo4bq/dCB2w6BvIG3hu5l0IMO0LlxuICAgKi9cbiAgcHJpdmF0ZSBhdHRhY2hOb2RlKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlLCBkZXB0aDogbnVtYmVyLCBob3N0OiBWaWV3Q29udGFpbmVyUmVmKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5jb21wb25lbnRSZWZzLmdldChub2RlLmlkKTtcblxuICAgIGlmIChleGlzdGluZykge1xuICAgICAgdGhpcy5hcHBseUlucHV0cyhleGlzdGluZywgbm9kZSwgZGVwdGgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gS2jhu5FpIHThu7Ega2hhaSB0aMOsIGjhu49pIG7Dszsga2jDtG5nIHRow6wgaOG7j2kgaMOgbSBwaMOibiBnaeG6o2kgY2h1bmcuIEPhuqMgaGFpIMSR4buBdSBuaOG6rW4gYG5vZGVgIMSR4buDIMSR4buNY1xuICAgIC8vIMSRxrDhu6NjIGBkYXRhLnR5cGVgIG3DoCBxdXnhur90IMSR4buLbmggdHLhuqMgY29tcG9uZW50IG7DoG8uXG4gICAgY29uc3Qgc3RyZWFtID0gKG5vZGUuZ2V0Q29tcG9uZW50T3V0bGV0ID8/IGNvbmZpZy5nZXRDb21wb25lbnRPdXRsZXQpPy4obm9kZSk7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIPCflLQgSHXhu7cgbMaw4bujdCB04bqjaSBDxaggY+G7p2EgxJHDum5nIGto4buRaSBuw6B5IHRyxrDhu5tjIGtoaSBt4bufIGzGsOG7o3QgbeG7m2kuXG4gICAgLy8gS2jhu5FpIGLhu4sgZ+G7oSBy4buTaSBn4bqvbiBs4bqhaSAoxJHhu5VpIGLhu5EgY+G7pWMsIHPhuq9wIGfhu41uKSB0cm9uZyBsw7pjIGBpbXBvcnQoKWAgY2jGsGEgeG9uZyB0aMOsIGzGsOG7o3QgY8WpIHbhuqtuXG4gICAgLy8gY2jhuqF5IHRp4bq/cCB2w6AgZOG7sW5nIGNvbXBvbmVudCB2w6BvIG3hu5l0IGBWaWV3Q29udGFpbmVyUmVmYCDEkcOjIGNo4bq/dC5cbiAgICB0aGlzLnBlbmRpbmdMb2Fkcy5nZXQobm9kZS5pZCk/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBzdWIgPSBzdHJlYW0ucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGNvbXBvbmVudFR5cGUpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZ0xvYWRzLmRlbGV0ZShub2RlLmlkKTtcblxuICAgICAgLy8gS2jhu5FpIGPDsyB0aOG7gyDEkcOjIGLhu4sgeG/DoSB0cm9uZyBsw7pjIGNo4budIHThuqNpIOKAlCBk4buxbmcgdsOgbyDEkcOieSBsw6AgcsOyIHLhu4kuXG4gICAgICBpZiAoIXRoaXMudHJlZVNlcnZpY2UuZmluZEJ5SWQodGhpcy5yb290Tm9kZSgpID8/IG5vZGUsIG5vZGUuaWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVmID0gaG9zdC5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG5cbiAgICAgIHRoaXMuYXBwbHlJbnB1dHMocmVmLCBub2RlLCBkZXB0aCk7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZnMuc2V0KG5vZGUuaWQsIHJlZik7XG4gICAgfSk7XG5cbiAgICB0aGlzLnBlbmRpbmdMb2Fkcy5zZXQobm9kZS5pZCwgc3ViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBH4buhIGNvbXBvbmVudCBj4bunYSBt4buZdCBraOG7kWkgdsOgIGh14bu3IG7Dsy4gKi9cbiAgcHJpdmF0ZSBkZXRhY2hOb2RlKG5vZGVJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gS2jhu5FpIGLhu4sgZ+G7oSBraGkgY29tcG9uZW50IGPhu6dhIG7DsyBjw7JuIMSRYW5nIHThuqNpIOKAlCBwaOG6o2kgaHXhu7cgbMaw4bujdCB04bqjaSwga2jDtG5nIHRow6wgbsOzIGThu7FuZyB2w6BvIG3hu5l0XG4gICAgLy8gYFZpZXdDb250YWluZXJSZWZgIMSRw6MgY2jhur90LlxuICAgIHRoaXMucGVuZGluZ0xvYWRzLmdldChub2RlSWQpPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucGVuZGluZ0xvYWRzLmRlbGV0ZShub2RlSWQpO1xuXG4gICAgY29uc3QgcmVmID0gdGhpcy5jb21wb25lbnRSZWZzLmdldChub2RlSWQpO1xuXG4gICAgaWYgKCFyZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZWYuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmcy5kZWxldGUobm9kZUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN1YiBvZiB0aGlzLnBlbmRpbmdMb2Fkcy52YWx1ZXMoKSkge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpcy5jb21wb25lbnRSZWZzLnZhbHVlcygpKSB7XG4gICAgICByZWYuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0xvYWRzLmNsZWFyKCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmNsZWFyKCk7XG4gICAgdGhpcy5jb25maWcgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gTmjDs20gaMOgbSBjaG8gbsahaSBkw7luZyBDSOG7piDEkOG7mE5HIGfhu41pIOKAlCBraMO0bmcgcGjhuqNpIGNo4budIG5nxrDhu51pIGTDuW5nIGLhuqVtIG7DunQgdHLDqm4ga2jhu5FpLlxuICAvLyBT4butYSBjw6J5IHRow6wgZMO5bmcgdGjhurNuZyBgVHJlZVNlcnZpY2VgIHLhu5NpIGfhu41pIGByZWZyZXNoKClgIOKAlCB4ZW0gZGVtbyB0cm9uZyBjb3JlLXVpLlxuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQsOhbyBjaG8gc2VydmljZSBiaeG6v3QgY8OieSB24burYSDEkeG7lWkgdOG7qyBiw6puIG5nb8OgaSAodGjDqm0veG/DoSBraOG7kWksIHPhuq9wIGfhu41uLCBu4bqhcCBi4buRIGPhu6VjIGtow6FjKS5cbiAgICpcbiAgICog8J+UtCBQSOG6okkgdGhheSBUSEFNIENISeG6vlUgY+G7p2Egbm9kZSBn4buRYywga2jDtG5nIGNo4buJIGLGoW0gYHZlcnNpb25gLlxuICAgKiBgQGZvciDigKYgdHJhY2sgaXRlbS5pZGAgZ2nhu68gbmd1ecOqbiBvYmplY3Qga2hpIGlkIGtow7RuZyDEkeG7lWksIG7Dqm4gYDxncmlkc3Rlci1pdGVtIFtpdGVtXT1cIuKAplwiPmAgduG6q25cbiAgICogbmjhuq1uIMSRw7puZyBvYmplY3QgY8WpIHbDoCBncmlkc3RlciBraMO0bmcgaOG7gSBiaeG6v3QgYHgveS9jb2xzL3Jvd3MvbGF5ZXJJbmRleGAgduG7q2EgYuG7iyBz4butYS4gQsahbSBt4buXaVxuICAgKiBgdmVyc2lvbmAgdGjDrCBjb21wdXRlZCBjaOG6oXkgbOG6oWkgbmjGsG5nIHRy4bqjIHbhu4EgQ8OZTkcgbeG6o25nIGPFqSDigJQgbMaw4bubaSDEkeG7qW5nIGltICjEkW8gMjgvMDgvMjAyNjogYuG6pW1cbiAgICogXCJT4bqvcCBn4buNblwiIGPDonkgxJHDoyBk4buTbiBraMOtdCBtw6AgbcOgbiBow6xuaCBraMO0bmcgbmjDumMgbmjDrWNoOyBi4bqtdCBjaOG7k25nIGto4buRaSBtw6AgYCRpdGVtLmxheWVySW5kZXhgXG4gICAqIHbhuqtuIHRy4buRbmcpLlxuICAgKlxuICAgKiBOaMOibiBi4bqjbiBOw5RORyBj4bqjIG5vZGUgZ+G7kWMgdsOgIGRhbmggc8OhY2ggY29uIGzDoCDEkeG7pzogbeG6o25nIG3hu5tpIOKGkiBgQGZvcmAgZOG7sW5nIGzhuqFpIGl0ZW0sIG9iamVjdCBjb25cbiAgICogbeG7m2kg4oaSIGdyaWRzdGVyIMSR4buNYyBs4bqhaSB0b8OgbiBi4buZIHRv4bqhIMSR4buZLlxuICAgKi9cbiAgcmVmcmVzaChldmVudD86IFRfZ3JpZExheW91dF9jaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHJvb3QgPSBldmVudD8ucm9vdCA/PyB0aGlzLnJvb3ROb2RlKCk7XG5cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHRoaXMudmVyc2lvbi51cGRhdGUoKHYpID0+IHYgKyAxKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuY29uZmlnLCBkYXRhOiByb290IH07XG4gICAgfVxuXG4gICAgdGhpcy5yb290Tm9kZS5zZXQodGhpcy5zaGFsbG93Q2xvbmVUcmVlKHJvb3QpKTtcbiAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gIH1cblxuICAvKiogTmjDom4gYuG6o24gbsO0bmcgdGhlbyBj4bqjIGNoaeG7gXUgc8OidTogbeG7l2kgbm9kZSB2w6AgbeG6o25nIGBjaGlsZHJlbmAgdGjDoG5oIHRoYW0gY2hp4bq/dSBt4bubaS4gKi9cbiAgLyoqXG4gICAqIE5ow6JuIGLhuqNuIFPDglUgY+G6oyBjw6J5IOKAlCBkw7luZyBjaG8gYGV4cG9ydExheW91dCgpYC5cbiAgICpcbiAgICog8J+UtCBC4buOIGBnZXRDb21wb25lbnRPdXRsZXRgIGto4buPaSBi4bqjbiBzYW86IG7DsyBsw6AgbeG7mXQgSMOATSwga2jDtG5nIHR14bqnbiB04buxIGhvw6EgxJHGsOG7o2MgbsOqbiBn4butaSB4deG7kW5nXG4gICAqIGJhY2tlbmQgbMOgIGjhu49uZyAoYEpTT04uc3RyaW5naWZ5YCBudeG7kXQgbeG6pXQsIGBzdHJ1Y3R1cmVkQ2xvbmVgIG7DqW0gbOG7l2kpLiBO4bqhcCBs4bqhaSB0aMOsIGjDoG0gcGjDom5cbiAgICogZ2nhuqNpIGNodW5nIGPhu6dhIGPhuqV1IGjDrG5oIGxvIOKAlCBjb21wb25lbnQgc3V5IHJhIHThu6sgYGRhdGEudHlwZWAsIGtow7RuZyBj4bqnbiBsxrB1LlxuICAgKi9cbiAgcHJpdmF0ZSBkZWVwQ2xvbmVUcmVlKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogVF9ncmlkTGF5b3V0X25vZGUge1xuICAgIGNvbnN0IGNvcHk6IFRfZ3JpZExheW91dF9ub2RlID0geyAuLi5ub2RlIH07XG5cbiAgICAvLyBD4bqvdCBow6BtIHBow6JuIGdp4bqjaSDigJQgeGVtIGNow7ogdGjDrWNoIHRyw6puLlxuICAgIGRlbGV0ZSBjb3B5LmdldENvbXBvbmVudE91dGxldDtcblxuICAgIGNvbnN0IHsgY2hpbGRyZW4sIGRhdGEsIC4uLnJlc3QgfSA9IGNvcHk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzdCxcbiAgICAgIC4uLihkYXRhID09PSB1bmRlZmluZWQgPyB7fSA6IHsgZGF0YTogY2xvbmVEZWVwKGRhdGEpIH0pLFxuICAgICAgLi4uKGNoaWxkcmVuID8geyBjaGlsZHJlbjogY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gdGhpcy5kZWVwQ2xvbmVUcmVlKGNoaWxkKSkgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzaGFsbG93Q2xvbmVUcmVlKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogVF9ncmlkTGF5b3V0X25vZGUge1xuICAgIGlmICghbm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4geyAuLi5ub2RlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4ubm9kZSwgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gdGhpcy5zaGFsbG93Q2xvbmVUcmVlKGNoaWxkKSkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHw6FuIGBsYXllckluZGV4YCBraMOhYyBuaGF1IGNobyB04burbmcga2jhu5FpIGtoaSBi4bqtdCBjaOG7k25nIGto4buRaS5cbiAgICpcbiAgICog8J+UtCBgYWxsb3dNdWx0aUxheWVyOiB0cnVlYCBN4buYVCBNw4xOSCBraMO0bmcgY2hvIGto4buRaSDEkcOoIG5oYXUuIE3DoyBsaWIgc28gYGxheWVySW5kZXhgIGPhu6dhIGhhaSBraOG7kWk6XG4gICAqIEtIw4FDIG5oYXUgdGjDrCBjaG8gxJHDqCwgR0nhu5BORyBuaGF1IHbhuqtuIGLDoW8gdmEgY2jhuqFtLiBLaOG7kWkga2jDtG5nIGtoYWkgYGxheWVySW5kZXhgIMSR4buBdSByxqFpIHbhu4FcbiAgICogYGRlZmF1bHRMYXllckluZGV4YCDigJQgdOG7qWMgQ8OZTkcgbOG7m3AsIG7Dqm4ga8OpbyB2w6BvIG5oYXUgbMOgIGLhu4sgY2jhurduIHkgbmjGsCBsxrDhu5tpIHRoxrDhu51uZyAobmfGsOG7nWkgZMO5bmdcbiAgICogYsOhbyAyOC8wOC8yMDI2OiBcImLhuq10IGNo4buTbmcga2jhu5FpIG5oxrBuZyBraGkga8OpbyB0aMOsIGPDoWMga2jhu5FpIHbhuqtuIGRpIGNodXnhu4NuIHRoZW9cIikuXG4gICAqXG4gICAqIE7GoWkgZMO5bmcgdOG7sSBraGFpIGBsYXllckluZGV4YCB0aMOsIGdp4buvIG5ndXnDqm47IGFpIGtow7RuZyBraGFpIHRow6wgdGjGsCB2aeG7h24geOG6v3AgbeG7l2kga2jhu5FpIG3hu5l0IGzhu5twXG4gICAqIHRoZW8gdGjhu6kgdOG7sSwgxJHhu6cgxJHhu4MgbeG7jWkgY+G6t3AgxJHhu4F1IGtow6FjIGzhu5twLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3NpZ25PdmVybGFwTGF5ZXJzKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY2FuT3ZlcmxhcCA9IGNvbmZpZz8ubW9kZSA9PT0gRV9ncmlkTGF5b3V0X21vZGVfc3RyaW5nLmZyZWUgfHwgKGNvbmZpZz8uYWxsb3dPdmVybGFwID8/IGZhbHNlKTtcblxuICAgIGlmICghY2FuT3ZlcmxhcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBsYXllciA9IDA7XG4gICAgY29uc3Qgd2FsayA9IChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IHZvaWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuID8/IFtdKSB7XG4gICAgICAgIGlmIChjaGlsZC5sYXllckluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsYXllciArPSAxO1xuICAgICAgICAgIGNoaWxkLmxheWVySW5kZXggPSBsYXllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHdhbGsoY2hpbGQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YWxrKHJvb3QpO1xuXG4gIH1cblxuICAvKiogxJDGsGEgbeG7mXQga2jhu5FpIGzDqm4gdHLDqm4gdOG6pXQgY+G6ozogbOG7m3AgY+G7p2EgbsOzID0gbOG7m3AgbOG7m24gbmjhuqV0IMSRYW5nIGPDsyArIDEuICovXG4gIHByaXZhdGUgcmFpc2VUb1RvcExheWVyKGl0ZW06IEdyaWRzdGVySXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG5cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgdG9wTGF5ZXIgPSAwO1xuICAgIGNvbnN0IHdhbGsgPSAobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgICB0b3BMYXllciA9IE1hdGgubWF4KHRvcExheWVyLCBjaGlsZC5sYXllckluZGV4ID8/IDApO1xuICAgICAgICB3YWxrKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2Fsayhyb290KTtcblxuICAgIC8vIGBpdGVtYCBncmlkc3RlciB0cuG6oyB24buBIENIw41OSCBsw6Agb2JqZWN0IG5vZGUgY+G7p2EgY8OieSAodHJ1eeG7gW4gdGjhurNuZyBxdWEgYFtpdGVtXWApLCBuw6puIGfDoW4gdsOgb1xuICAgIC8vIMSRw6J5IGzDoCBjw6J5IGPFqW5nIMSR4buVaSB0aGVvLlxuICAgIGNvbnN0IG5vZGUgPSBpdGVtIGFzIHVua25vd24gYXMgVF9ncmlkTGF5b3V0X25vZGU7XG5cbiAgICBpZiAobm9kZS5sYXllckluZGV4ID09PSB0b3BMYXllcikge1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5sYXllckluZGV4ID0gdG9wTGF5ZXIgKyAxO1xuICB9XG5cbiAgLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIFPhu6xBIEPDglkg4oCUIHRoxrAgdmnhu4duIMSRw6MgZ2nhu68gY8OieSBuw6puIGLhuqFuIEtIw5RORyBwaOG6o2kgdHJ1eeG7gW4gbsOzIHbDoG8uXG4gIC8vIE3hu41pIGjDoG0gZMaw4bubaSDEkcOieSB04buxIHbhur0gbOG6oWk7IGtow7RuZyBj4bqnbiBn4buNaSBgcmVmcmVzaCgpYC5cbiAgLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFRow6ptIG3hu5l0IGto4buRaS5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW0ga2jhu5FpIG3hu5tpIOKAlCBLSMOUTkcgY+G6p24gYGlkYCAodGjGsCB2aeG7h24gc2luaCkgdsOgIGB4YC9geWAgKHThu7EgxJHhurd0IHh14buRbmcgaMOgbmcgdHLhu5FuZykuXG4gICAqIEBwYXJhbSBwYXJlbnRJZCBjb250YWluZXIgbXXhu5FuIHRow6ptIHbDoG87IGLhu48gdHLhu5FuZyB0aMOsIHRow6ptIHbDoG8gbeG6t3QgcGjhurNuZyBn4buRYy5cbiAgICogQHJldHVybnMga2jhu5FpIHbhu6thIHThuqFvIChrw6htIGBpZGAgduG7q2Egc2luaCksIGhv4bq3YyBgdW5kZWZpbmVkYCBraGkga2jDtG5nIHTDrG0gdGjhuqV5IGNvbnRhaW5lci5cbiAgICovXG4gIGFkZEJsb2NrKGl0ZW06IFRfZ3JpZExheW91dF9uZXdOb2RlLCBwYXJlbnRJZD86IHN0cmluZyk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuICAgIGNvbnN0IGFkZGVkID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UuYWRkQ2hpbGQocm9vdCwgcGFyZW50SWQgPz8gcm9vdC5pZCwgaXRlbSkgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoYWRkZWQpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRlZDtcbiAgfVxuXG4gIC8qKiBYb8OhIG3hu5l0IGto4buRaS4gWG/DoSBjb250YWluZXIgbMOgIHhvw6EgY+G6oyBydeG7mXQuIFRy4bqjIGBmYWxzZWAga2hpIGtow7RuZyB4b8OhIMSRxrDhu6NjICh2ZCBraOG7kWkgZ+G7kWMpLiAqL1xuICByZW1vdmVCbG9jayhpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UucmVtb3ZlQnlJZChyb290LCBpZCkgOiBmYWxzZTtcblxuICAgIGlmIChkb25lKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZG9uZTtcbiAgfVxuXG4gIC8qKiBCaeG6v24ga2jhu5FpIMSRxqFuIHRow6BuaCBDT05UQUlORVIg4oCUIG7hu5lpIGR1bmcgY8WpIHRow6BuaCBraOG7kWkgY29uIMSR4bqndSB0acOqbiwga2jDtG5nIG3huqV0IGThu68gbGnhu4d1LiAqL1xuICB0b0NvbnRhaW5lcihpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UudG9Db250YWluZXIocm9vdCwgaWQsIHRoaXMuY29uZmlnPy5jb2xzID8/IDEyKSA6IGZhbHNlO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgLyoqIMSQxrBhIENPTlRBSU5FUiB24buBIGto4buRaSDEkcahbiDigJQga2jhu5FpIGNvbiDEkcaw4bujYyBuw6JuZyBsw6puIGPhuqVwIHRyw6puLCBraMO0bmcgYuG7iyB4b8OhLiAqL1xuICB0b1NpbmdsZShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UudG9TaW5nbGUocm9vdCwgaWQpIDogZmFsc2U7XG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvbmU7XG4gIH1cblxuICAvKiogROG7k24ga2jhu5FpIGtow610IGzDqm4gdHLDqm4sIGzhuqVwIGjhur90IGNo4buXIHRy4buRbmcuIMSQ4buHIHF1eSB2w6BvIGNvbnRhaW5lci4gKi9cbiAgY29tcGFjdCgpOiB2b2lkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmVlU2VydmljZS5jb21wYWN0KHJvb3QsIHRoaXMuY29uZmlnPy5jb2xzID8/IDEyKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBC4buRIGPhu6VjIEhJ4buGTiBU4bqgSSwgxJHDoyBj4bqvdCBt4buNaSB0aGFtIGNoaeG6v3Ug4oCUIGfhu61pIHRo4bqzbmcgeHXhu5FuZyBiYWNrZW5kIMSRxrDhu6NjLlxuICAgKlxuICAgKiBEw7luZyBraGkgYuG6pW0gbsO6dCBMxrB1LiBLaMOhYyBgUm9vdCgpYCDhu58gY2jhu5cgxJHDonkgbMOgIGLhuqNuIFNBTzogbsahaSBkw7luZyBjw7Mgc+G7rWEgZ8OsIHRyw6puIGvhur90IHF14bqjIGPFqW5nXG4gICAqIGtow7RuZyDEkeG7pW5nIHThu5tpIGPDonkgbcOgIHRoxrAgdmnhu4duIMSRYW5nIHbhur0uXG4gICAqXG4gICAqIEByZXR1cm5zIGB1bmRlZmluZWRgIGtoaSBt4bq3dCBwaOG6s25nIGNoxrBhIGBpbml0KClgLlxuICAgKi9cbiAgZXhwb3J0TGF5b3V0KCk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHJvb3QgPyB0aGlzLmRlZXBDbG9uZVRyZWUocm9vdCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVMOsbSBt4buZdCBraOG7kWkgdGhlbyBpZC4gKi9cbiAgZmluZEJsb2NrKGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIHJldHVybiByb290ID8gdGhpcy50cmVlU2VydmljZS5maW5kQnlJZChyb290LCBpZCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVMOsbSBraOG7kWkgY2hhIHRy4buxYyB0aeG6v3AgY+G7p2EgbeG7mXQga2jhu5FpLiAqL1xuICBmaW5kUGFyZW50QmxvY2soaWQ6IHN0cmluZyk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHJvb3QgPyB0aGlzLnRyZWVTZXJ2aWNlLmZpbmRQYXJlbnQocm9vdCwgaWQpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEPhu5VuZyBEVVkgTkjhuqRUIGNobyBjYW52YXMgY+G7p2EgdGjGsCB2aeG7h24uIE7GoWkgZMO5bmcgS0jDlE5HIGfhu41pIHThu5tpIMSRw6J5LlxuICAgKlxuICAgKiBN4buNaSB0aOG7qSBjYW52YXMgY+G6p24gxJHhu4F1IGzDoCBgcHJpdmF0ZWAgxJHhu4Mga2jDtG5nIGzhu410IHJhIEFQSSBjw7RuZyBraGFpOyBnb20gdsOgbyBt4buZdCBnZXR0ZXIgdGhlbyDEkcO6bmdcbiAgICoga2h1w7RuIGBGdW5jdGlvbnNDb250cm9sYCBj4bunYSBi4buZIHF1eSDGsOG7m2MsIHRoYXkgdsOsIMSR4buDIHLhuqNpIHLDoWMgaMOgbSBwdWJsaWMgbcOgIG5nxrDhu51pIG5nb8OgaSB0xrDhu59uZ1xuICAgKiBtw6xuaCBwaOG6o2kgZ+G7jWkgKG5nxrDhu51pIGTDuW5nIGNo4buRdCAyOC8wOC8yMDI2KS5cbiAgICovXG4gIGdldCBGdW5jdGlvbnNDb250cm9sKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXhDb250YWluZXJEZXB0aDogKCkgPT4gdGhpcy5tYXhDb250YWluZXJEZXB0aCgpLFxuICAgICAgY29udGFpbmVyUGFkZGluZzogKCkgPT4gdGhpcy5jb250YWluZXJQYWRkaW5nKCksXG4gICAgICBncmlkc3Rlck9wdGlvbnM6IChkZXB0aDogbnVtYmVyLCBjYj86ICgpID0+IHZvaWQpID0+IHRoaXMuYnVpbGRHcmlkc3Rlck9wdGlvbnMoZGVwdGgsIGNiKSxcbiAgICAgIGF0dGFjaE5vZGU6IChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgZGVwdGg6IG51bWJlciwgaG9zdDogVmlld0NvbnRhaW5lclJlZikgPT4gdGhpcy5hdHRhY2hOb2RlKG5vZGUsIGRlcHRoLCBob3N0KSxcbiAgICAgIGRldGFjaE5vZGU6IChub2RlSWQ6IHN0cmluZykgPT4gdGhpcy5kZXRhY2hOb2RlKG5vZGVJZCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJbnB1dHMocmVmOiBDb21wb25lbnRSZWY8dW5rbm93bj4sIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlLCBkZXB0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgcmVmLnNldElucHV0KCdkYXRhJywgbm9kZS5kYXRhKTtcbiAgICByZWYuc2V0SW5wdXQoJ25vZGUnLCBub2RlKTtcbiAgICByZWYuc2V0SW5wdXQoJ2lzRWRpdE1vZGUnLCB0aGlzLmVkaXRNb2RlKCkpO1xuICAgIHJlZi5zZXRJbnB1dCgnZGVwdGgnLCBkZXB0aCk7XG4gIH1cbn1cbiJdfQ==
552
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZ3JpZC1sYXlvdXQvc3JjL2dyaWQtbGF5b3V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsVUFBVSxFQUFvQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQWdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFTN0Q7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsNkZBQTZGO0lBQzdGLHdGQUF3RjtJQUN4RixtRkFBbUY7SUFDbEUsV0FBVyxHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQztJQUNqRSxvRkFBb0Y7SUFDbkUsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBRWhFO1FBQ0UsK0ZBQStGO1FBQy9GLHlGQUF5RjtRQUN6RiwrRkFBK0Y7UUFDL0YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sTUFBTSxDQUF1QjtJQUNwQixhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFFekQsUUFBUSxHQUFHLE1BQU0sQ0FBZ0MsU0FBUyxDQUFDLENBQUM7SUFDNUQsUUFBUSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNuRCxxRUFBcUU7SUFDcEQsT0FBTyxH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SUFBSSxDQUFDLENBQUM7UUFDM0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDNUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzt3R0EvbkJVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBEZXN0cm95UmVmLCBJbmplY3RhYmxlLCBWaWV3Q29udGFpbmVyUmVmLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZHN0ZXJDb25maWcsIEdyaWRzdGVySXRlbSB9IGZyb20gJ2dyaWRzdGVyMTgnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBncmlkTGF5b3V0TmVzdGVkQ29uZmlnLCBncmlkTGF5b3V0Um9vdENvbmZpZyB9IGZyb20gJy4vZGVmaW5lcy9ncmlkc3Rlci1jb25maWcuZGVmaW5lJztcbmltcG9ydCB7IExpYnNVaUdyaWRMYXlvdXRUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEVfZ3JpZExheW91dF9tb2RlX3N0cmluZyxcbiAgVF9ncmlkTGF5b3V0X2NoYW5nZUV2ZW50LFxuICBUX2dyaWRMYXlvdXRfbmV3Tm9kZSxcbiAgVF9ncmlkTGF5b3V0X2NvbmZpZyxcbiAgVF9ncmlkTGF5b3V0X25vZGUsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEThu7FuZyBt4buZdCBt4bq3dCBwaOG6s25nIGvDqW8gdGjhuqMgdsOgIHThu7EgZ+G6r24gY29tcG9uZW50IGPhu6dhIG7GoWkgZMO5bmcgbMOqbiB04burbmcga2jhu5FpLlxuICpcbiAqIE7GoWkgZMO5bmcgY2jhu4kgY+G6p24gxJHGsGEgdsOgbzogbG/huqFpIGNvbXBvbmVudCBtdeG7kW4gZOG7sW5nXG4gKiAoYG5vZGVDb21wb25lbnRUeXBlYCkgdsOgIGPDonkgZOG7ryBsaeG7h3UgKGBkYXRhYCkuIFRvw6BuIGLhu5kgdmnhu4djIHbhur0gbMaw4bubaSwga8OpbyB0aOG6oywgxJHhu5VpIGvDrWNoIHRoxrDhu5tjLFxuICogbOG7k25nIGNvbnRhaW5lciB2w6AgZOG7jW4gZOG6uXAgZG8gdGjGsCB2aeG7h24gbG8uXG4gKlxuICog8J+UtCDEkMOieSBsw6Agc2VydmljZSB0aGVvIFThu6pORyBt4bq3dCBwaOG6s25nLCBLSMOUTkcgYHByb3ZpZGVkSW46ICdyb290J2AuIEtoYWkgdHJvbmcgYHByb3ZpZGVyc2AgY+G7p2FcbiAqIGNvbXBvbmVudCBkw7luZyBuw7M7IGhhaSBt4bq3dCBwaOG6s25nIHRyw6puIGPDuW5nIG3hu5l0IG3DoG4gcGjhuqNpIGzDoCBoYWkgdGjhu7FjIHRo4buDIHJpw6puZywgZMO5bmcgY2h1bmcgdGjDrFxuICogYGNvbXBvbmVudFJlZnNgIGPhu6dhIG3hurd0IHBo4bqzbmcgbsOgeSBi4buLIG3hurd0IHBo4bqzbmcga2lhIGThu41uIG3huqV0LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTGlic1VpR3JpZExheW91dFNlcnZpY2Uge1xuICAvLyDwn5S0IFThu7AgVOG6oE8sIGtow7RuZyBgaW5qZWN0YC4gTsahaSBkw7luZyBjaOG7iSBwaOG6o2kgdmnhur90IGBwcm92aWRlcnM6IFtMaWJzVWlHcmlkTGF5b3V0U2VydmljZV1gIOKAlFxuICAvLyBraMO0bmcgcGjhuqNpIGJp4bq/dCBiw6puIHRyb25nIHRoxrAgdmnhu4duIGPDsm4gc2VydmljZSBuw6BvIGtow6FjIChuZ8aw4budaSBkw7luZyBjaOG7kXQgMjgvMDgvMjAyNikuXG4gIC8vIGBUcmVlU2VydmljZWAga2jDtG5nIGdp4buvIHRy4bqhbmcgdGjDoWkgZMO5bmcgY2h1bmcgbsOqbiBt4buXaSBt4bq3dCBwaOG6s25nIG3hu5l0IGLhuqNuIGzDoCDEkcO6bmcuXG4gIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2UgPSBuZXcgTGlic1VpR3JpZExheW91dFRyZWVTZXJ2aWNlKCk7XG4gIC8qKiBMxrDhu6N0IHThuqNpIGNvbXBvbmVudCDEkWFuZyBjaOG7nSwgdGhlbyBpZCBraOG7kWkg4oCUIMSR4buDIGh14bu3IGtoaSBraOG7kWkgYuG7iyBn4buhIGdp4buvYSBjaOG7q25nLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmdMb2FkcyA9IG5ldyBNYXA8c3RyaW5nLCBTdWJzY3JpcHRpb24+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8g8J+UtCBTZXJ2aWNlIGtoYWkgdHJvbmcgYHByb3ZpZGVyc2AgY+G7p2EgY29tcG9uZW50IG7Dqm4gQW5ndWxhciBodeG7tyBuw7MgY8O5bmcgY29tcG9uZW50IOKAlCB0aMawIHZp4buHblxuICAgIC8vIHThu7EgZOG7jW4g4bufIMSRw6J5LCBuxqFpIGTDuW5nIEtIw5RORyBwaOG6o2kgZ+G7jWkgYGRlc3Ryb3koKWAgdHJvbmcgYG5nT25EZXN0cm95YCAobmfGsOG7nWkgZMO5bmcgY2jhu5F0XG4gICAgLy8gMjgvMDgvMjAyNikuIELhuq90IG5o4bubIG3hu5l0IGLGsOG7m2MgZOG7jW4gZOG6uXAgbMOgIGtp4buDdSBBUEkgZOG7hSBxdcOqbiwgdsOgIHF1w6puIHRow6wgcsOyIHLhu4kgYuG7mSBuaOG7myBpbSBs4bq3bmcuXG4gICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB0aGlzLmRlc3Ryb3koKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZz86IFRfZ3JpZExheW91dF9jb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50UmVmcyA9IG5ldyBNYXA8c3RyaW5nLCBDb21wb25lbnRSZWY8dW5rbm93bj4+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByb290Tm9kZSA9IHNpZ25hbDxUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlZGl0TW9kZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiB0xINuZyBt4buXaSBs4bqnbiBjw6J5IMSR4buVaSDigJQgY29tcG9uZW50IGNvbiDEkeG7jWMgxJHhu4MgYmnhur90IHBo4bqjaSB0w61uaCBs4bqhaSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHZlcnNpb24gPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b29tTGV2ZWwgPSBzaWduYWw8bnVtYmVyPigxKTtcblxuICAvKipcbiAgICogU2lnbmFsIGNo4buJIMSR4buNYyDEkeG7gyBuxqFpIGTDuW5nIHRoZW8gZMO1aS5cbiAgICpcbiAgICog8J+UtCBMw6AgVEhV4buYQyBUw41OSCwga2jDtG5nIHBo4bqjaSBnZXR0ZXIuIEdldHRlciB0cuG6oyBzaWduYWwgdGjDrCBjaOG7lyDEkeG7jWMgcGjhuqNpIHZp4bq/dCBgVmVyc2lvbigpKClgIOKAlFxuICAgKiBxdcOqbiBj4bq3cCBuZ2/hurdjIHRo4bupIGhhaSBsw6AgY29tcHV0ZWQgS0jDlE5HIHBo4bulIHRodeG7mWMgdsOgbyBuw7MsIGPDonkgxJHhu5VpIG3DoCBsxrDhu5tpIMSR4bupbmcgaW0sIHbDoFxuICAgKiBUeXBlU2NyaXB0IGtow7RuZyBo4buBIGLDoW8gbOG7l2kgKMSRbyAyOC8wOC8yMDI2OiB0aMOqbSBraOG7kWkga2jDtG5nIGhp4buHbiwgc+G6r3AgZ+G7jW4ga2jDtG5nIG5ow7pjIG5ow61jaCkuXG4gICAqL1xuICByZWFkb25seSBSb290ID0gdGhpcy5yb290Tm9kZS5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IElzRWRpdE1vZGUgPSB0aGlzLmVkaXRNb2RlLmFzUmVhZG9ubHkoKTtcbiAgLyoqIHTEg25nIG3hu5dpIGzhuqduIGPDonkgaG/hurdjIGPhuqV1IGjDrG5oIMSR4buVaSAqL1xuICByZWFkb25seSBWZXJzaW9uID0gdGhpcy52ZXJzaW9uLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgWm9vbSA9IHRoaXMuem9vbUxldmVsLmFzUmVhZG9ubHkoKTtcblxuICAvKipcbiAgICogdHLhuqduIHPhu5EgY+G6pXAgY29udGFpbmVyIGzhu5NuZyBuaGF1IOKAlCBjYW52YXMgxJHhu41jIMSR4buDIGJp4bq/dCBjw7MgY2hvIGNodXnhu4NuIHRow6BuaCBjb250YWluZXIga2jDtG5nICovXG4gIHByaXZhdGUgbWF4Q29udGFpbmVyRGVwdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/Lm1heENvbnRhaW5lckRlcHRoID8/IDE7XG4gIH1cblxuICAvKipcbiAgICogbOG7gSB0cm9uZyBj4bunYSBjb250YWluZXIsIHB4IOKAlCBjYW52YXMgxJHhu41jIMSR4buDIMSR4bq3dCBwYWRkaW5nIGzDqm4gduG7jyBjb250YWluZXIgKi9cbiAgcHJpdmF0ZSBjb250YWluZXJQYWRkaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5jb250YWluZXJQYWRkaW5nID8/IDEyO1xuICB9XG5cbiAgLyoqIEto4bufaSB04bqhbyBt4bq3dCBwaOG6s25nLiBH4buNaSBs4bqhaSBz4bq9IGThu41uIHPhuqFjaCBjb21wb25lbnQgY8WpIHLhu5NpIGThu7FuZyBs4bqhaSB04burIMSR4bqndS4gKi9cbiAgaW5pdChjb25maWc6IFRfZ3JpZExheW91dF9jb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAvLyDwn5S0IELhu5EgY+G7pWMgxJDDgyBMxq9VIGtow7RuZyDEkWkgcXVhIGx14bqtdCBjaOG6t24gbsOgbyBj4bunYSBnaWFvIGRp4buHbjogYuG6o24gbMawdSBjxakgKHNpbmggdHLGsOG7m2Mga2hpIGPDsyB0cuG6p24sXG4gICAgLy8gaG/hurdjIGRvIHRoYW8gdMOhYyBs4buXaSkgduG6q24gbWFuZyBjb250YWluZXIgbOG7k25nIGNvbnRhaW5lci4gVHLhuqduIGBtYXhDb250YWluZXJEZXB0aGAgY2jhu4kg4bqpbiBOw5pUXG4gICAgLy8gdHLDqm4gY2FudmFzIOKAlCBuw7Mga2jDtG5nIHPhu61hIGThu68gbGnhu4d1LCBuw6puIHRoaeG6v3UgZMOybmcgbsOgeSBsw6AgduG6vSByYSDEkcO6bmcgY8OieSBxdcOhIHPDonUgxJHDsy5cbiAgICAvLyBOxqFpIGTDuW5nIEtIw5RORyB04buxIGfhu41pIMSRxrDhu6NjOiBgTGlic1VpR3JpZExheW91dFRyZWVTZXJ2aWNlYCBj4buRIMO9IGtow7RuZyB4deG6pXQuXG4gICAgdGhpcy50cmVlU2VydmljZS5mbGF0dGVuT3ZlckRlcHRoQ29udGFpbmVycyhjb25maWcuZGF0YSwgdGhpcy5tYXhDb250YWluZXJEZXB0aCgpKTtcbiAgICB0aGlzLmFzc2lnbk92ZXJsYXBMYXllcnMoY29uZmlnLmRhdGEpO1xuICAgIC8vIPCflLQgTmjDom4gYuG6o24gbmjGsCBgcmVmcmVzaCgpYDogYGluaXQoKWAgbOG6oWkgKMSR4buVaSBjaOG6vyDEkeG7mSwgYuG6rXQvdOG6r3QgY2jhu5NuZyBraOG7kWkpIHRyw6puIEPDmU5HIG9iamVjdCBjw6J5XG4gICAgLy8gdGjDrCBgQGZvcmAga2jDtG5nIGThu7FuZyBs4bqhaSBgZ3JpZHN0ZXItaXRlbWAsIG7Dqm4gYGxheWVySW5kZXhgIHbhu6thIGfDoW4ga2jDtG5nIHThu5tpIGAkaXRlbWAgdsOgIGto4buRaVxuICAgIC8vIHbhuqtuIGtow7RuZyDEkcOoIG5oYXUgxJHGsOG7o2MgKMSRbyAyOC8wOC8yMDI2OiBgaXRlbS5sYXllckluZGV4YCA9IDF8MnwzfDR8NyBtw6AgYCRpdGVtLmxheWVySW5kZXhgXG4gICAgLy8gdG/DoG4gYHVuZGVmaW5lZGApLlxuICAgIHRoaXMucm9vdE5vZGUuc2V0KHRoaXMuc2hhbGxvd0Nsb25lVHJlZShjb25maWcuZGF0YSkpO1xuICAgIHRoaXMuZWRpdE1vZGUuc2V0KGNvbmZpZy5pc0VkaXRNb2RlID8/IGZhbHNlKTtcblxuICAgIGxldCBpbml0aWFsWm9vbSA9IGNvbmZpZy5pbml0aWFsWm9vbSA/PyAxO1xuICAgIGlmIChjb25maWcuc3RvcmFnZUtleSAmJiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShjb25maWcuc3RvcmFnZUtleSk7XG4gICAgICAgIGlmIChzYXZlZCkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQoc2F2ZWQpO1xuICAgICAgICAgIGNvbnN0IG1pbiA9IGNvbmZpZy56b29tTWluID8/IDAuNDtcbiAgICAgICAgICBjb25zdCBtYXggPSBjb25maWcuem9vbU1heCA/PyAxLjU7XG4gICAgICAgICAgaWYgKCFpc05hTihwYXJzZWQpICYmIHBhcnNlZCA+PSBtaW4gJiYgcGFyc2VkIDw9IG1heCkge1xuICAgICAgICAgICAgaW5pdGlhbFpvb20gPSBwYXJzZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlIGxvY2FsU3RvcmFnZSBhY2Nlc3MgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy56b29tTGV2ZWwuc2V0KGluaXRpYWxab29tKTtcblxuICAgIHRoaXMudmVyc2lvbi51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgfVxuXG4gIHNldEVkaXRNb2RlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0TW9kZS5zZXQodmFsdWUpO1xuICAgIC8vIPCflLQgUEjhuqJJIGLGoW0gYHZlcnNpb25gOiBgZ3JpZHN0ZXJPcHRpb25zKClgIMSR4buNYyBgZWRpdE1vZGVgIMSR4buDIGLhuq10L3Thuq90IGvDqW/igJN0aOG6oywgbcOgIGNvbXB1dGVkXG4gICAgLy8gYGdyaWRPcHRpb25zYCBiw6puIGNhbnZhcyBjaOG7iSBjaOG6oXkgbOG6oWkga2hpIGBWZXJzaW9uYCDEkeG7lWkuIFRoaeG6v3UgZMOybmcgbsOgeSB0aMOsIMSR4buVaSBjaOG6vyDEkeG7mSB4b25nXG4gICAgLy8gZ3JpZHN0ZXIgduG6q24gZ2nhu68gb3B0aW9ucyBjxakg4oCUIGNodXnhu4NuIHNhbmcgWEVNIG3DoCBraOG7kWkgduG6q24ga8OpbyDEkcaw4bujYy5cbiAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gIH1cblxuICAvKipcbiAgICogQuG6rXQvdOG6r3QgY2hvIGto4buRaSBjaOG7k25nIGzDqm4gbmhhdSDigJQgS0jDlE5HIGThu7FuZyBs4bqhaSBt4bq3dCBwaOG6s25nLlxuICAgKlxuICAgKiBUcsaw4bubYyDEkcOieSBuxqFpIGTDuW5nIHBo4bqjaSBn4buNaSBgaW5pdCgpYCBs4bqhaSDEkeG7gyDEkeG7lWkgY+G7nSBuw6B5LCBtw6AgYGluaXQoKWAgaHXhu7cgc+G6oWNoIHLhu5NpIGThu7FuZyBs4bqhaSBt4buNaVxuICAgKiBjb21wb25lbnQgbuG7mWkgZHVuZyDigJQgbMOjbmcgcGjDrSwgdsOgIG5nxrDhu51pIGTDuW5nIHRo4bqleSBtw6BuIGNo4bubcCAobmfGsOG7nWkgZMO5bmcgY2jhu5F0IDI4LzA4LzIwMjYpLlxuICAgKi9cbiAgc2V0QWxsb3dPdmVybGFwKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgYWxsb3dPdmVybGFwOiB2YWx1ZSB9O1xuXG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIPCflLQgR8OhbiBs4bubcCB2w6BvIEPDglkgxJBBTkcgVuG6vCAoYHJvb3ROb2RlYCksIEtIw5RORyBwaOG6o2kgYGNvbmZpZy5kYXRhYC5cbiAgICAvLyBgaW5pdCgpYCDEkcOjIGNsb25lIGBjb25maWcuZGF0YWAgc2FuZyBgcm9vdE5vZGVgIG7Dqm4gaGFpIG9iamVjdCBLSMOBQyBuaGF1OyBnw6FuIHbDoG8gYGNvbmZpZy5kYXRhYFxuICAgIC8vIHRow6wgYHJlZnJlc2goKWAgY2xvbmUgbOG6oWkgdOG7qyBgcm9vdE5vZGVgIOKAlCBs4bubcCB24burYSBnw6FuIGtow7RuZyB04bubaSBgZ3JpZHN0ZXItaXRlbWAgbsOgbywgYHotaW5kZXhgXG4gICAgLy8gY+G7p2EgbeG7jWkga2jhu5FpIMSR4bupbmcg4bufIGAxYCB2w6Aga2jhu5FpIG7DoG8gduG6vSBzYXUgdGjDrCBu4bqxbSB0csOqbjogY2jhu5NuZyBraOG7kWkgXCJsw7pjIMSRxrDhu6NjIGzDumMga2jDtG5nXCJcbiAgICAvLyAoxJFvIDA0LzA5LzIwMjY6IGBpdGVtLmxheWVySW5kZXhgIHVuZGVmaW5lZCwgYGdldExheWVySW5kZXgoKWAgPSAwIGNobyBj4bqjIDgga2jhu5FpKS5cbiAgICB0aGlzLmFzc2lnbk92ZXJsYXBMYXllcnMocm9vdCk7XG4gICAgLy8gVGhheSB0aGFtIGNoaeG6v3UgY8OieSDEkeG7gyBgbGF5ZXJJbmRleGAgduG7q2EgZ8OhbiB04bubaSDEkcaw4bujYyBgJGl0ZW1gIGPhu6dhIGdyaWRzdGVyOyBjb21wb25lbnQgbuG7mWkgZHVuZ1xuICAgIC8vIEtIw5RORyBi4buLIGThu7FuZyBs4bqhaSB2w6wgYGF0dGFjaE5vZGVgIG5o4bqtbiByYSBpZCBjxakgdsOgIGNo4buJIGBzZXRJbnB1dGAuXG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQ+G6pXUgaMOsbmggZ3JpZHN0ZXIgY2hvIG3hu5l0IGPhuqVwIGzGsOG7m2kuXG4gICAqXG4gICAqIEBwYXJhbSBkZXB0aCAwID0gbMaw4bubaSBj4bqlcCB0cmFuZywg4omlIDEgPSBsxrDhu5tpIGzhu5NuZyB0cm9uZyBjb250YWluZXJcbiAgICovXG4gIHByaXZhdGUgYnVpbGRHcmlkc3Rlck9wdGlvbnMoZGVwdGg6IG51bWJlciwgaXRlbUNoYW5nZUNhbGxiYWNrPzogKCkgPT4gdm9pZCk6IEdyaWRzdGVyQ29uZmlnIHtcbiAgICBjb25zdCBiYXNlID0gZGVwdGggPT09IDAgPyBncmlkTGF5b3V0Um9vdENvbmZpZygpIDogZ3JpZExheW91dE5lc3RlZENvbmZpZygpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRnJlZU1vZGUgPSBjb25maWcubW9kZSA9PT0gRV9ncmlkTGF5b3V0X21vZGVfc3RyaW5nLmZyZWU7XG4gICAgY29uc3QgY2FuRWRpdCA9IHRoaXMuZWRpdE1vZGUoKTtcbiAgICBjb25zdCBjYW5PdmVybGFwID0gaXNGcmVlTW9kZSB8fCAoY29uZmlnLmFsbG93T3ZlcmxhcCA/PyBmYWxzZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZSxcbiAgICAgIHNjYWxlOiB0aGlzLnpvb21MZXZlbCgpLFxuICAgICAgLi4uKGNvbmZpZy5jb2xzID8geyBtaW5Db2xzOiBjb25maWcuY29scywgbWF4Q29sczogY29uZmlnLmNvbHMsIG1heEl0ZW1Db2xzOiBjb25maWcuY29scyB9IDoge30pLFxuICAgICAgLi4uKGNvbmZpZy5yb3dIZWlnaHQgJiYgZGVwdGggPT09IDAgPyB7IGZpeGVkUm93SGVpZ2h0OiBjb25maWcucm93SGVpZ2h0IH0gOiB7fSksXG4gICAgICAvLyBLaGUgdsOgIGNoaeG7gXUgY2FvIGjDoG5nIGtow6FjIG5oYXUgdGhlbyBj4bqlcDogbMaw4bubaSB0cmFuZyB0aG/DoW5nLCBsxrDhu5tpIGzhu5NuZyBraMOtdC5cbiAgICAgIC4uLihkZXB0aCA9PT0gMCAmJiBjb25maWcubWFyZ2luICE9PSB1bmRlZmluZWQgPyB7IG1hcmdpbjogY29uZmlnLm1hcmdpbiB9IDoge30pLFxuICAgICAgLi4uKGRlcHRoID4gMCAmJiBjb25maWcubmVzdGVkTWFyZ2luICE9PSB1bmRlZmluZWQgPyB7IG1hcmdpbjogY29uZmlnLm5lc3RlZE1hcmdpbiB9IDoge30pLFxuICAgICAgLi4uKGRlcHRoID4gMCAmJiBjb25maWcubmVzdGVkUm93SGVpZ2h0ICE9PSB1bmRlZmluZWQgPyB7IGZpeGVkUm93SGVpZ2h0OiBjb25maWcubmVzdGVkUm93SGVpZ2h0IH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPT09IDAgJiYgY29uZmlnLm91dGVyTWFyZ2luICE9PSB1bmRlZmluZWQgPyB7IG91dGVyTWFyZ2luOiBjb25maWcub3V0ZXJNYXJnaW4gfSA6IHt9KSxcbiAgICAgIC4uLihkZXB0aCA9PT0gMCAmJiBjb25maWcub3V0ZXJNYXJnaW5Cb3R0b20gIT09IHVuZGVmaW5lZCA/IHsgb3V0ZXJNYXJnaW5Cb3R0b206IGNvbmZpZy5vdXRlck1hcmdpbkJvdHRvbSB9IDoge30pLFxuICAgICAgLi4uKGNvbmZpZy5taW5JdGVtUm93cyAhPT0gdW5kZWZpbmVkID8geyBtaW5JdGVtUm93czogY29uZmlnLm1pbkl0ZW1Sb3dzIH0gOiB7fSksXG4gICAgICAuLi4oY29uZmlnLmRlZmF1bHRJdGVtQ29scyAhPT0gdW5kZWZpbmVkID8geyBkZWZhdWx0SXRlbUNvbHM6IGNvbmZpZy5kZWZhdWx0SXRlbUNvbHMgfSA6IHt9KSxcbiAgICAgIC4uLihjb25maWcuZGVmYXVsdEl0ZW1Sb3dzICE9PSB1bmRlZmluZWQgPyB7IGRlZmF1bHRJdGVtUm93czogY29uZmlnLmRlZmF1bHRJdGVtUm93cyB9IDoge30pLFxuXG4gICAgICAvLyDwn5S0IENo4bq/IMSR4buZIFhFTSBwaOG6o2kgVOG6rlQgaOG6s24ga8OpbyB2w6AgxJHhu5VpIGvDrWNoIHRoxrDhu5tjLlxuICAgICAgLy8gYGJhc2VgIGx1w7RuIMSR4buDIGBlbmFibGVkOiB0cnVlYDsga2jDtG5nIGdoaSDEkcOoIHRoZW8gYGVkaXRNb2RlYCB0aMOsIG5nxrDhu51pIHhlbSB24bqrbiBrw6lvIMSRxrDhu6NjIGto4buRaVxuICAgICAgLy8gdsOgIMSR4buVaSBi4buRIGPhu6VjIGPhu6dhIG5nxrDhu51pIGtow6FjIChuZ8aw4budaSBkw7luZyBiw6FvIDI4LzA4LzIwMjY6IFwixJFhbmcgeGVtIG3DoCB24bqrbiBrw6lvIHRo4bqjIHRoYXkgxJHhu5VpXG4gICAgICAvLyB24buLIHRyw60gdsOgIHRow6ptIGto4buRaSDEkcaw4bujY1wiKS5cbiAgICAgIGRyYWdnYWJsZTogeyAuLi5iYXNlLmRyYWdnYWJsZSwgZW5hYmxlZDogY2FuRWRpdCB9LFxuICAgICAgcmVzaXphYmxlOiB7IC4uLmJhc2UucmVzaXphYmxlLCBlbmFibGVkOiBjYW5FZGl0IH0sXG5cbiAgICAgIC8vIENo4bq/IMSR4buZIHThu7EgZG8gTFXDlE4gY2hvIGNo4buTbmc7IGNo4bq/IMSR4buZIGzGsOG7m2kgdGjDrCB0aGVvIGPhu50gY+G7p2EgbsahaSBkw7luZy5cbiAgICAgIGFsbG93TXVsdGlMYXllcjogY2FuT3ZlcmxhcCxcbiAgICAgIC8vIPCflLQgQuG6rXQgYGFsbG93TXVsdGlMYXllcmAgTeG7mFQgTcOMTkgga2jDtG5nIMSR4bunLiBNw6MgbGliIHNvIGBsYXllckluZGV4YCBj4bunYSBoYWkga2jhu5FpOiBLSMOBQyBuaGF1XG4gICAgICAvLyB0aMOsIGNobyDEkcOoLCBHSeG7kE5HIG5oYXUgduG6q24gYsOhbyB2YSBjaOG6oW0uIEto4buRaSBraMO0bmcga2hhaSBgbGF5ZXJJbmRleGAgxJHhu4F1IHLGoWkgduG7gVxuICAgICAgLy8gYGRlZmF1bHRMYXllckluZGV4YCDigJQgdOG7qWMgY8O5bmcgbOG7m3AsIHbDoCB24bqrbiBi4buLIMSR4bqpeSBuaGF1IG5oxrAgbMaw4bubaSB0aMaw4budbmcgKG5nxrDhu51pIGTDuW5nIGLDoW9cbiAgICAgIC8vIDI4LzA4LzIwMjY6IFwiYuG6rXQgY2jhu5NuZyBraOG7kWkgbmjGsG5nIGtoaSBrw6lvIHRow6wgY8OhYyBraOG7kWkgduG6q24gZGkgY2h1eeG7g24gdGhlb1wiKS5cbiAgICAgIC8vIENobyBjaOG7k25nIHRow6wgcGjhuqNpIFThuq5UIMSR4bqpeSBraOG7kWksIG7hur91IGtow7RuZyBraOG7kWkgYuG7iyBk4bqhdCDEkWkgdHLGsOG7m2Mga2hpIGvhu4twIMSRw6ggbMOqbiBuaGF1LlxuICAgICAgLi4uKGNhbk92ZXJsYXAgPyB7IHB1c2hJdGVtczogZmFsc2UsIHB1c2hSZXNpemVJdGVtczogZmFsc2UsIHN3YXA6IGZhbHNlLCBzd2FwV2hpbGVEcmFnZ2luZzogZmFsc2UgfSA6IHt9KSxcblxuICAgICAgaXRlbUNoYW5nZUNhbGxiYWNrOiAoaXRlbTogR3JpZHN0ZXJJdGVtKSA9PiB7XG4gICAgICAgIC8vIPCflLQgS2jhu5FpIHbhu6thIHRoYW8gdMOhYyBwaOG6o2kgbMOqbiBM4buaUCBUUsOKTiBDw5lORy5cbiAgICAgICAgLy8gYGxheWVySW5kZXhgIGfDoW4gbeG7mXQgbOG6p24gdGhlbyB0aOG7qSB04buxIGPDonkgbMO6YyBraOG7n2kgdOG6oW8sIG7Dqm4ga2jhu5FpIGvDqW8gbMOqbiBjaOG7iSBu4buVaSBUUk9ORyBMw5pDXG4gICAgICAgIC8vIGvDqW8gKG5o4budIGB6LWluZGV4OiAzMGAgY+G7p2EgbOG7m3AgYGdyaWRzdGVyLWl0ZW0tbW92aW5nYCk7IHRo4bqjIHRheSByYSBsw6AgduG7gSBs4bubcCBjxakgdsOgIGLhu4sga2jhu5FpXG4gICAgICAgIC8vIMSR4bupbmcgc2F1IHRyb25nIGPDonkgxJHDqCBuZ8aw4bujYyBsw6puIChuZ8aw4budaSBkw7luZyBiw6FvIDI4LzA4LzIwMjYsIMSRbyDEkcaw4bujYzoga8OpbyB6PTMwLCB0aOG6oyB24buBXG4gICAgICAgIC8vIHo9MTAgdHJvbmcga2hpIGhhaSBraOG7kWkga+G6vyBiw6puIMSRYW5nIHo9MTEgdsOgIHo9MTIpLlxuICAgICAgICBpZiAoY2FuT3ZlcmxhcCkge1xuICAgICAgICAgIHRoaXMucmFpc2VUb1RvcExheWVyKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52ZXJzaW9uLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuICAgICAgICBpdGVtQ2hhbmdlQ2FsbGJhY2s/LigpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEfhuq9uIGNvbXBvbmVudCBj4bunYSBuxqFpIGTDuW5nIGzDqm4gbeG7mXQga2jhu5FpLlxuICAgKlxuICAgKiBAcGFyYW0gaG9zdCBjaOG7lyBn4bqvbiBSScOKTkcgY+G7p2Egw7QgxJHDsyDigJQgbeG7l2kga2jhu5FpIG3hu5l0IGBWaWV3Q29udGFpbmVyUmVmYCwgZMO5bmcgY2h1bmcgbeG7mXQgY8OhaSB0aMOsXG4gICAqICAgbeG7jWkgY29tcG9uZW50IGLhu4sgZOG7k24gaOG6v3QgdsOgbyBt4buZdCDDtC5cbiAgICovXG4gIHByaXZhdGUgYXR0YWNoTm9kZShub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgZGVwdGg6IG51bWJlciwgaG9zdDogVmlld0NvbnRhaW5lclJlZik6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuY29tcG9uZW50UmVmcy5nZXQobm9kZS5pZCk7XG5cbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHRoaXMuYXBwbHlJbnB1dHMoZXhpc3RpbmcsIG5vZGUsIGRlcHRoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEto4buRaSB04buxIGtoYWkgdGjDrCBo4buPaSBuw7M7IGtow7RuZyB0aMOsIGjhu49pIGjDoG0gcGjDom4gZ2nhuqNpIGNodW5nLiBD4bqjIGhhaSDEkeG7gXUgbmjhuq1uIGBub2RlYCDEkeG7gyDEkeG7jWNcbiAgICAvLyDEkcaw4bujYyBgZGF0YS50eXBlYCBtw6AgcXV54bq/dCDEkeG7i25oIHRy4bqjIGNvbXBvbmVudCBuw6BvLlxuICAgIGNvbnN0IHN0cmVhbSA9IChub2RlLmdldENvbXBvbmVudE91dGxldCA/PyBjb25maWcuZ2V0Q29tcG9uZW50T3V0bGV0KT8uKG5vZGUpO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDwn5S0IEh14bu3IGzGsOG7o3QgdOG6o2kgQ8WoIGPhu6dhIMSRw7puZyBraOG7kWkgbsOgeSB0csaw4bubYyBraGkgbeG7nyBsxrDhu6N0IG3hu5tpLlxuICAgIC8vIEto4buRaSBi4buLIGfhu6EgcuG7k2kgZ+G6r24gbOG6oWkgKMSR4buVaSBi4buRIGPhu6VjLCBz4bqvcCBn4buNbikgdHJvbmcgbMO6YyBgaW1wb3J0KClgIGNoxrBhIHhvbmcgdGjDrCBsxrDhu6N0IGPFqSB24bqrblxuICAgIC8vIGNo4bqheSB0aeG6v3AgdsOgIGThu7FuZyBjb21wb25lbnQgdsOgbyBt4buZdCBgVmlld0NvbnRhaW5lclJlZmAgxJHDoyBjaOG6v3QuXG4gICAgdGhpcy5wZW5kaW5nTG9hZHMuZ2V0KG5vZGUuaWQpPy51bnN1YnNjcmliZSgpO1xuXG4gICAgY29uc3Qgc3ViID0gc3RyZWFtLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjb21wb25lbnRUeXBlKSA9PiB7XG4gICAgICB0aGlzLnBlbmRpbmdMb2Fkcy5kZWxldGUobm9kZS5pZCk7XG5cbiAgICAgIC8vIEto4buRaSBjw7MgdGjhu4MgxJHDoyBi4buLIHhvw6EgdHJvbmcgbMO6YyBjaOG7nSB04bqjaSDigJQgZOG7sW5nIHbDoG8gxJHDonkgbMOgIHLDsiBy4buJLlxuICAgICAgaWYgKCF0aGlzLnRyZWVTZXJ2aWNlLmZpbmRCeUlkKHRoaXMucm9vdE5vZGUoKSA/PyBub2RlLCBub2RlLmlkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZiA9IGhvc3QuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xuXG4gICAgICB0aGlzLmFwcGx5SW5wdXRzKHJlZiwgbm9kZSwgZGVwdGgpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWZzLnNldChub2RlLmlkLCByZWYpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wZW5kaW5nTG9hZHMuc2V0KG5vZGUuaWQsIHN1Yik7XG4gIH1cblxuICAvKipcbiAgICogR+G7oSBjb21wb25lbnQgY+G7p2EgbeG7mXQga2jhu5FpIHbDoCBodeG7tyBuw7MuICovXG4gIHByaXZhdGUgZGV0YWNoTm9kZShub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEto4buRaSBi4buLIGfhu6Ega2hpIGNvbXBvbmVudCBj4bunYSBuw7MgY8OybiDEkWFuZyB04bqjaSDigJQgcGjhuqNpIGh14bu3IGzGsOG7o3QgdOG6o2ksIGtow7RuZyB0aMOsIG7DsyBk4buxbmcgdsOgbyBt4buZdFxuICAgIC8vIGBWaWV3Q29udGFpbmVyUmVmYCDEkcOjIGNo4bq/dC5cbiAgICB0aGlzLnBlbmRpbmdMb2Fkcy5nZXQobm9kZUlkKT8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnBlbmRpbmdMb2Fkcy5kZWxldGUobm9kZUlkKTtcblxuICAgIGNvbnN0IHJlZiA9IHRoaXMuY29tcG9uZW50UmVmcy5nZXQobm9kZUlkKTtcblxuICAgIGlmICghcmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVmLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuZGVsZXRlKG5vZGVJZCk7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5wZW5kaW5nTG9hZHMudmFsdWVzKCkpIHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXMuY29tcG9uZW50UmVmcy52YWx1ZXMoKSkge1xuICAgICAgcmVmLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdMb2Fkcy5jbGVhcigpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmcy5jbGVhcigpO1xuICAgIHRoaXMuY29uZmlnID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIE5ow7NtIGjDoG0gY2hvIG7GoWkgZMO5bmcgQ0jhu6YgxJDhu5hORyBn4buNaSDigJQga2jDtG5nIHBo4bqjaSBjaOG7nSBuZ8aw4budaSBkw7luZyBi4bqlbSBuw7p0IHRyw6puIGto4buRaS5cbiAgLy8gU+G7rWEgY8OieSB0aMOsIGTDuW5nIHRo4bqzbmcgYFRyZWVTZXJ2aWNlYCBy4buTaSBn4buNaSBgcmVmcmVzaCgpYCDigJQgeGVtIGRlbW8gdHJvbmcgY29yZS11aS5cbiAgLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIELDoW8gY2hvIHNlcnZpY2UgYmnhur90IGPDonkgduG7q2EgxJHhu5VpIHThu6sgYsOqbiBuZ2/DoGkgKHRow6ptL3hvw6Ega2jhu5FpLCBz4bqvcCBn4buNbiwgbuG6oXAgYuG7kSBj4bulYyBraMOhYykuXG4gICAqXG4gICAqIPCflLQgUEjhuqJJIHRoYXkgVEhBTSBDSEnhur5VIGPhu6dhIG5vZGUgZ+G7kWMsIGtow7RuZyBjaOG7iSBixqFtIGB2ZXJzaW9uYC5cbiAgICogYEBmb3Ig4oCmIHRyYWNrIGl0ZW0uaWRgIGdp4buvIG5ndXnDqm4gb2JqZWN0IGtoaSBpZCBraMO0bmcgxJHhu5VpLCBuw6puIGA8Z3JpZHN0ZXItaXRlbSBbaXRlbV09XCLigKZcIj5gIHbhuqtuXG4gICAqIG5o4bqtbiDEkcO6bmcgb2JqZWN0IGPFqSB2w6AgZ3JpZHN0ZXIga2jDtG5nIGjhu4EgYmnhur90IGB4L3kvY29scy9yb3dzL2xheWVySW5kZXhgIHbhu6thIGLhu4sgc+G7rWEuIELGoW0gbeG7l2lcbiAgICogYHZlcnNpb25gIHRow6wgY29tcHV0ZWQgY2jhuqF5IGzhuqFpIG5oxrBuZyB0cuG6oyB24buBIEPDmU5HIG3huqNuZyBjxakg4oCUIGzGsOG7m2kgxJHhu6luZyBpbSAoxJFvIDI4LzA4LzIwMjY6IGLhuqVtXG4gICAqIFwiU+G6r3AgZ+G7jW5cIiBjw6J5IMSRw6MgZOG7k24ga2jDrXQgbcOgIG3DoG4gaMOsbmgga2jDtG5nIG5ow7pjIG5ow61jaDsgYuG6rXQgY2jhu5NuZyBraOG7kWkgbcOgIGAkaXRlbS5sYXllckluZGV4YFxuICAgKiB24bqrbiB0cuG7kW5nKS5cbiAgICpcbiAgICogTmjDom4gYuG6o24gTsOUTkcgY+G6oyBub2RlIGfhu5FjIHbDoCBkYW5oIHPDoWNoIGNvbiBsw6AgxJHhu6c6IG3huqNuZyBt4bubaSDihpIgYEBmb3JgIGThu7FuZyBs4bqhaSBpdGVtLCBvYmplY3QgY29uXG4gICAqIG3hu5tpIOKGkiBncmlkc3RlciDEkeG7jWMgbOG6oWkgdG/DoG4gYuG7mSB0b+G6oSDEkeG7mS5cbiAgICovXG4gIHJlZnJlc2goZXZlbnQ/OiBUX2dyaWRMYXlvdXRfY2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCByb290ID0gZXZlbnQ/LnJvb3QgPz8gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgaWYgKCFyb290KSB7XG4gICAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgZGF0YTogcm9vdCB9O1xuICAgIH1cblxuICAgIHRoaXMucm9vdE5vZGUuc2V0KHRoaXMuc2hhbGxvd0Nsb25lVHJlZShyb290KSk7XG4gICAgdGhpcy52ZXJzaW9uLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuICB9XG5cbiAgLyoqIE5ow6JuIGLhuqNuIG7DtG5nIHRoZW8gY+G6oyBjaGnhu4F1IHPDonU6IG3hu5dpIG5vZGUgdsOgIG3huqNuZyBgY2hpbGRyZW5gIHRow6BuaCB0aGFtIGNoaeG6v3UgbeG7m2kuICovXG4gIC8qKlxuICAgKiBOaMOibiBi4bqjbiBTw4JVIGPhuqMgY8OieSDigJQgZMO5bmcgY2hvIGBleHBvcnRMYXlvdXQoKWAuXG4gICAqXG4gICAqIPCflLQgQuG7jiBgZ2V0Q29tcG9uZW50T3V0bGV0YCBraOG7j2kgYuG6o24gc2FvOiBuw7MgbMOgIG3hu5l0IEjDgE0sIGtow7RuZyB0deG6p24gdOG7sSBob8OhIMSRxrDhu6NjIG7Dqm4gZ+G7rWkgeHXhu5FuZ1xuICAgKiBiYWNrZW5kIGzDoCBo4buPbmcgKGBKU09OLnN0cmluZ2lmeWAgbnXhu5F0IG3huqV0LCBgc3RydWN0dXJlZENsb25lYCBuw6ltIGzhu5dpKS4gTuG6oXAgbOG6oWkgdGjDrCBow6BtIHBow6JuXG4gICAqIGdp4bqjaSBjaHVuZyBj4bunYSBj4bqldSBow6xuaCBsbyDigJQgY29tcG9uZW50IHN1eSByYSB04burIGBkYXRhLnR5cGVgLCBraMO0bmcgY+G6p24gbMawdS5cbiAgICovXG4gIHByaXZhdGUgZGVlcENsb25lVHJlZShub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IFRfZ3JpZExheW91dF9ub2RlIHtcbiAgICBjb25zdCBjb3B5OiBUX2dyaWRMYXlvdXRfbm9kZSA9IHsgLi4ubm9kZSB9O1xuXG4gICAgLy8gQ+G6r3QgaMOgbSBwaMOibiBnaeG6o2kg4oCUIHhlbSBjaMO6IHRow61jaCB0csOqbi5cbiAgICBkZWxldGUgY29weS5nZXRDb21wb25lbnRPdXRsZXQ7XG5cbiAgICBjb25zdCB7IGNoaWxkcmVuLCBkYXRhLCAuLi5yZXN0IH0gPSBjb3B5O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3QsXG4gICAgICAuLi4oZGF0YSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGRhdGE6IGNsb25lRGVlcChkYXRhKSB9KSxcbiAgICAgIC4uLihjaGlsZHJlbiA/IHsgY2hpbGRyZW46IGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHRoaXMuZGVlcENsb25lVHJlZShjaGlsZCkpIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2hhbGxvd0Nsb25lVHJlZShub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IFRfZ3JpZExheW91dF9ub2RlIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHsgLi4ubm9kZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IC4uLm5vZGUsIGNoaWxkcmVuOiBub2RlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHRoaXMuc2hhbGxvd0Nsb25lVHJlZShjaGlsZCkpIH07XG4gIH1cblxuICAvKipcbiAgICogR8OhbiBgbGF5ZXJJbmRleGAga2jDoWMgbmhhdSBjaG8gdOG7q25nIGto4buRaSBraGkgYuG6rXQgY2jhu5NuZyBraOG7kWkuXG4gICAqXG4gICAqIPCflLQgYGFsbG93TXVsdGlMYXllcjogdHJ1ZWAgTeG7mFQgTcOMTkgga2jDtG5nIGNobyBraOG7kWkgxJHDqCBuaGF1LiBNw6MgbGliIHNvIGBsYXllckluZGV4YCBj4bunYSBoYWkga2jhu5FpOlxuICAgKiBLSMOBQyBuaGF1IHRow6wgY2hvIMSRw6gsIEdJ4buQTkcgbmhhdSB24bqrbiBiw6FvIHZhIGNo4bqhbS4gS2jhu5FpIGtow7RuZyBraGFpIGBsYXllckluZGV4YCDEkeG7gXUgcsahaSB24buBXG4gICAqIGBkZWZhdWx0TGF5ZXJJbmRleGAg4oCUIHThu6ljIEPDmU5HIGzhu5twLCBuw6puIGvDqW8gdsOgbyBuaGF1IGzDoCBi4buLIGNo4bq3biB5IG5oxrAgbMaw4bubaSB0aMaw4budbmcgKG5nxrDhu51pIGTDuW5nXG4gICAqIGLDoW8gMjgvMDgvMjAyNjogXCJi4bqtdCBjaOG7k25nIGto4buRaSBuaMawbmcga2hpIGvDqW8gdGjDrCBjw6FjIGto4buRaSB24bqrbiBkaSBjaHV54buDbiB0aGVvXCIpLlxuICAgKlxuICAgKiBOxqFpIGTDuW5nIHThu7Ega2hhaSBgbGF5ZXJJbmRleGAgdGjDrCBnaeG7ryBuZ3V5w6puOyBhaSBraMO0bmcga2hhaSB0aMOsIHRoxrAgdmnhu4duIHjhur9wIG3hu5dpIGto4buRaSBt4buZdCBs4bubcFxuICAgKiB0aGVvIHRo4bupIHThu7EsIMSR4bunIMSR4buDIG3hu41pIGPhurdwIMSR4buBdSBraMOhYyBs4bubcC5cbiAgICovXG4gIHByaXZhdGUgYXNzaWduT3ZlcmxhcExheWVycyhyb290OiBUX2dyaWRMYXlvdXRfbm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IGNhbk92ZXJsYXAgPSBjb25maWc/Lm1vZGUgPT09IEVfZ3JpZExheW91dF9tb2RlX3N0cmluZy5mcmVlIHx8IChjb25maWc/LmFsbG93T3ZlcmxhcCA/PyBmYWxzZSk7XG5cbiAgICBpZiAoIWNhbk92ZXJsYXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbGF5ZXIgPSAwO1xuICAgIGNvbnN0IHdhbGsgPSAobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgICBpZiAoY2hpbGQubGF5ZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGF5ZXIgKz0gMTtcbiAgICAgICAgICBjaGlsZC5sYXllckluZGV4ID0gbGF5ZXI7XG4gICAgICAgIH1cblxuICAgICAgICB3YWxrKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2Fsayhyb290KTtcblxuICB9XG5cbiAgLyoqIMSQxrBhIG3hu5l0IGto4buRaSBsw6puIHRyw6puIHThuqV0IGPhuqM6IGzhu5twIGPhu6dhIG7DsyA9IGzhu5twIGzhu5tuIG5o4bqldCDEkWFuZyBjw7MgKyAxLiAqL1xuICBwcml2YXRlIHJhaXNlVG9Ub3BMYXllcihpdGVtOiBHcmlkc3Rlckl0ZW0pOiB2b2lkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHRvcExheWVyID0gMDtcbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgICAgdG9wTGF5ZXIgPSBNYXRoLm1heCh0b3BMYXllciwgY2hpbGQubGF5ZXJJbmRleCA/PyAwKTtcbiAgICAgICAgd2FsayhjaGlsZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhbGsocm9vdCk7XG5cbiAgICAvLyBgaXRlbWAgZ3JpZHN0ZXIgdHLhuqMgduG7gSBDSMONTkggbMOgIG9iamVjdCBub2RlIGPhu6dhIGPDonkgKHRydXnhu4FuIHRo4bqzbmcgcXVhIGBbaXRlbV1gKSwgbsOqbiBnw6FuIHbDoG9cbiAgICAvLyDEkcOieSBsw6AgY8OieSBjxaluZyDEkeG7lWkgdGhlby5cbiAgICBjb25zdCBub2RlID0gaXRlbSBhcyB1bmtub3duIGFzIFRfZ3JpZExheW91dF9ub2RlO1xuXG4gICAgaWYgKG5vZGUubGF5ZXJJbmRleCA9PT0gdG9wTGF5ZXIpIHtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUubGF5ZXJJbmRleCA9IHRvcExheWVyICsgMTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBT4busQSBDw4JZIOKAlCB0aMawIHZp4buHbiDEkcOjIGdp4buvIGPDonkgbsOqbiBi4bqhbiBLSMOUTkcgcGjhuqNpIHRydXnhu4FuIG7DsyB2w6BvLlxuICAvLyBN4buNaSBow6BtIGTGsOG7m2kgxJHDonkgdOG7sSB24bq9IGzhuqFpOyBraMO0bmcgY+G6p24gZ+G7jWkgYHJlZnJlc2goKWAuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBUaMOqbSBt4buZdCBraOG7kWkuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIGto4buRaSBt4bubaSDigJQgS0jDlE5HIGPhuqduIGBpZGAgKHRoxrAgdmnhu4duIHNpbmgpIHbDoCBgeGAvYHlgICh04buxIMSR4bq3dCB4deG7kW5nIGjDoG5nIHRy4buRbmcpLlxuICAgKiBAcGFyYW0gcGFyZW50SWQgY29udGFpbmVyIG114buRbiB0aMOqbSB2w6BvOyBi4buPIHRy4buRbmcgdGjDrCB0aMOqbSB2w6BvIG3hurd0IHBo4bqzbmcgZ+G7kWMuXG4gICAqIEByZXR1cm5zIGto4buRaSB24burYSB04bqhbyAoa8OobSBgaWRgIHbhu6thIHNpbmgpLCBob+G6t2MgYHVuZGVmaW5lZGAga2hpIGtow7RuZyB0w6xtIHRo4bqleSBjb250YWluZXIuXG4gICAqL1xuICBhZGRCbG9jayhpdGVtOiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSwgcGFyZW50SWQ/OiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBhZGRlZCA9IHJvb3QgPyB0aGlzLnRyZWVTZXJ2aWNlLmFkZENoaWxkKHJvb3QsIHBhcmVudElkID8/IHJvb3QuaWQsIGl0ZW0pIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGFkZGVkKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGjDqm0gbeG7mXQga2jhu5FpIHThuqFpIHRv4bqhIMSR4buZIChjb2wsIHJvdykgY+G7pSB0aOG7gyB2w6AgdOG7sSDEkeG7mW5nIMSR4bqpeSBjw6FjIGto4buRaSB2YSBjaOG6oW0geHXhu5FuZyBkxrDhu5tpLlxuICAgKi9cbiAgaW5zZXJ0QmxvY2tXaXRoQ29sbGlzaW9uKFxuICAgIGl0ZW06IFRfZ3JpZExheW91dF9uZXdOb2RlLFxuICAgIHRhcmdldENvbCA9IDAsXG4gICAgdGFyZ2V0Um93ID0gMCxcbiAgICBwYXJlbnRJZD86IHN0cmluZyxcbiAgKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG4gICAgY29uc3QgYWRkZWQgPSByb290XG4gICAgICA/IHRoaXMudHJlZVNlcnZpY2UuaW5zZXJ0V2l0aENvbGxpc2lvbihyb290LCBwYXJlbnRJZCA/PyByb290LmlkLCBpdGVtLCB0YXJnZXRDb2wsIHRhcmdldFJvdylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGFkZGVkKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkZWQ7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZURyYWdQYXlsb2FkID0gc2lnbmFsPHVua25vd24gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqIMSQ4bq3dCBwYXlsb2FkIGtoaSBi4bqvdCDEkeG6p3Uga8OpbyB04burIGLDqm4gbmdvw6BpIHbDoG8gKHbDrSBk4bulOiBwYWxldHRlLCBkcmF3ZXIpICovXG4gIHNldERyYWdQYXlsb2FkKHBheWxvYWQ6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZURyYWdQYXlsb2FkLnNldChwYXlsb2FkKTtcbiAgfVxuXG4gIC8qKiBM4bqleSBwYXlsb2FkIMSRYW5nIGvDqW8gKi9cbiAgZ2V0RHJhZ1BheWxvYWQoKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRHJhZ1BheWxvYWQoKTtcbiAgfVxuXG4gIC8qKiBYb8OhIHBheWxvYWQga2hpIGvhur90IHRow7pjIGvDqW8gKi9cbiAgY2xlYXJEcmFnUGF5bG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZURyYWdQYXlsb2FkLnNldCh1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqIFhvw6EgbeG7mXQga2jhu5FpLiBYb8OhIGNvbnRhaW5lciBsw6AgeG/DoSBj4bqjIHJ14buZdC4gVHLhuqMgYGZhbHNlYCBraGkga2jDtG5nIHhvw6EgxJHGsOG7o2MgKHZkIGto4buRaSBn4buRYykuICovXG4gIHJlbW92ZUJsb2NrKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuICAgIGNvbnN0IGRvbmUgPSByb290ID8gdGhpcy50cmVlU2VydmljZS5yZW1vdmVCeUlkKHJvb3QsIGlkKSA6IGZhbHNlO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgZ2V0IHRvdGFsQ29sdW1ucygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uY29scyA/PyAyNDtcbiAgfVxuXG4gIC8qKiBCaeG6v24ga2jhu5FpIMSRxqFuIHRow6BuaCBDT05UQUlORVIg4oCUIG7hu5lpIGR1bmcgY8WpIHRow6BuaCBraOG7kWkgY29uIMSR4bqndSB0acOqbiwga2jDtG5nIG3huqV0IGThu68gbGnhu4d1LiAqL1xuICB0b0NvbnRhaW5lcihpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UudG9Db250YWluZXIocm9vdCwgaWQsIHRoaXMudG90YWxDb2x1bW5zKSA6IGZhbHNlO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgLyoqIMSQxrBhIENPTlRBSU5FUiB24buBIGto4buRaSDEkcahbiDigJQga2jhu5FpIGNvbiDEkcaw4bujYyBuw6JuZyBsw6puIGPhuqVwIHRyw6puLCBraMO0bmcgYuG7iyB4b8OhLiAqL1xuICB0b1NpbmdsZShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UudG9TaW5nbGUocm9vdCwgaWQpIDogZmFsc2U7XG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvbmU7XG4gIH1cblxuICAvKiogROG7k24ga2jhu5FpIGtow610IGzDqm4gdHLDqm4sIGzhuqVwIGjhur90IGNo4buXIHRy4buRbmcuIMSQ4buHIHF1eSB2w6BvIGNvbnRhaW5lci4gKi9cbiAgY29tcGFjdCgpOiB2b2lkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmVlU2VydmljZS5jb21wYWN0KHJvb3QsIHRoaXMudG90YWxDb2x1bW5zKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBC4buRIGPhu6VjIEhJ4buGTiBU4bqgSSwgxJHDoyBj4bqvdCBt4buNaSB0aGFtIGNoaeG6v3Ug4oCUIGfhu61pIHRo4bqzbmcgeHXhu5FuZyBiYWNrZW5kIMSRxrDhu6NjLlxuICAgKlxuICAgKiBEw7luZyBraGkgYuG6pW0gbsO6dCBMxrB1LiBLaMOhYyBgUm9vdCgpYCDhu58gY2jhu5cgxJHDonkgbMOgIGLhuqNuIFNBTzogbsahaSBkw7luZyBjw7Mgc+G7rWEgZ8OsIHRyw6puIGvhur90IHF14bqjIGPFqW5nXG4gICAqIGtow7RuZyDEkeG7pW5nIHThu5tpIGPDonkgbcOgIHRoxrAgdmnhu4duIMSRYW5nIHbhur0uXG4gICAqXG4gICAqIEByZXR1cm5zIGB1bmRlZmluZWRgIGtoaSBt4bq3dCBwaOG6s25nIGNoxrBhIGBpbml0KClgLlxuICAgKi9cbiAgZXhwb3J0TGF5b3V0KCk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHJvb3QgPyB0aGlzLmRlZXBDbG9uZVRyZWUocm9vdCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVMOsbSBt4buZdCBraOG7kWkgdGhlbyBpZC4gKi9cbiAgZmluZEJsb2NrKGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIHJldHVybiByb290ID8gdGhpcy50cmVlU2VydmljZS5maW5kQnlJZChyb290LCBpZCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVMOsbSBraOG7kWkgY2hhIHRy4buxYyB0aeG6v3AgY+G7p2EgbeG7mXQga2jhu5FpLiAqL1xuICBmaW5kUGFyZW50QmxvY2soaWQ6IHN0cmluZyk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHJvb3QgPyB0aGlzLnRyZWVTZXJ2aWNlLmZpbmRQYXJlbnQocm9vdCwgaWQpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIMSQ4bq3dCB04bu3IGzhu4cgdGh1IHBow7NuZyBj4bunYSBjYW52YXMgKGvhurlwIGdp4buvYSBtaW4gdsOgIG1heCkuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBU4bu3IGzhu4cgKDAuNCA9IDQwJSwgMS4wID0gMTAwJSwgMS41ID0gMTUwJSlcbiAgICogQHBhcmFtIHBlcnNpc3RLZXkgS2jDs2EgbG9jYWxTdG9yYWdlIMSR4buDIGzGsHUgbOG6oWkgKGLhu48gdHLhu5FuZyB0aMOsIGzhuqV5IHThu6sgY29uZmlnKVxuICAgKi9cbiAgc2V0Wm9vbSh2YWx1ZTogbnVtYmVyLCBwZXJzaXN0S2V5Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWluID0gdGhpcy5jb25maWc/Lnpvb21NaW4gPz8gMC40O1xuICAgIGNvbnN0IG1heCA9IHRoaXMuY29uZmlnPy56b29tTWF4ID8/IDEuNTtcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIE1hdGgucm91bmQodmFsdWUgKiAxMDApIC8gMTAwKSk7XG4gICAgdGhpcy56b29tTGV2ZWwuc2V0KGNsYW1wZWQpO1xuXG4gICAgY29uc3Qgc3RvcmFnZUtleSA9IHBlcnNpc3RLZXkgPz8gdGhpcy5jb25maWc/LnN0b3JhZ2VLZXk7XG4gICAgaWYgKHN0b3JhZ2VLZXkgJiYgdHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHN0b3JhZ2VLZXksIFN0cmluZyhjbGFtcGVkKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlIGxvY2FsU3RvcmFnZSBhY2Nlc3MgZXJyb3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gIH1cblxuICAvKiogUGjDs25nIHRvIHRow6ptIG3hu5l0IGLGsOG7m2MgKG3hurdjIMSR4buLbmggMC4wNSB04bupYyA1JSkgKi9cbiAgem9vbUluKHN0ZXA/OiBudW1iZXIsIHBlcnNpc3RLZXk/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzID0gc3RlcCA/PyB0aGlzLmNvbmZpZz8uem9vbVN0ZXAgPz8gMC4wNTtcbiAgICB0aGlzLnNldFpvb20odGhpcy56b29tTGV2ZWwoKSArIHMsIHBlcnNpc3RLZXkpO1xuICB9XG5cbiAgLyoqIFRodSBuaOG7jyBi4bubdCBt4buZdCBixrDhu5tjICht4bq3YyDEkeG7i25oIDAuMDUgdOG7qWMgNSUpICovXG4gIHpvb21PdXQoc3RlcD86IG51bWJlciwgcGVyc2lzdEtleT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSBzdGVwID8/IHRoaXMuY29uZmlnPy56b29tU3RlcCA/PyAwLjA1O1xuICAgIHRoaXMuc2V0Wm9vbSh0aGlzLnpvb21MZXZlbCgpIC0gcywgcGVyc2lzdEtleSk7XG4gIH1cblxuICAvKiogxJDhurd0IGzhuqFpIHThu7cgbOG7hyB0aHUgcGjDs25nIGfhu5FjIDEwMCUgKDEuMCkgKi9cbiAgcmVzZXRab29tKHBlcnNpc3RLZXk/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFpvb20oMS4wLCBwZXJzaXN0S2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBU4buxIMSR4buZbmcgdMOtbmggdG/DoW4gdsOgIMSR4bq3dCB04bu3IGzhu4cgdGh1IHBow7NuZyDEkeG7gyBjYW52YXMgduG7q2EgduG6t24gduG7m2kgY2hp4buBdSBy4buZbmcgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyV2lkdGggQ2hp4buBdSBy4buZbmcgY29udGFpbmVyIMSRbyDEkcaw4bujYyAocHgpXG4gICAqIEBwYXJhbSBzdGFnZVdpZHRoIENoaeG7gXUgcuG7mW5nIGNodeG6qW4gY+G7p2EgY2FudmFzICht4bq3YyDEkeG7i25oIDE2NjhweClcbiAgICogQHBhcmFtIHBhZGRpbmcgS2hv4bqjbmcgY8OhY2ggbOG7gSBoYWkgYsOqbiAobeG6t2MgxJHhu4tuaCA0OHB4KVxuICAgKiBAcGFyYW0gcGVyc2lzdEtleSBLaMOzYSBsb2NhbFN0b3JhZ2VcbiAgICogQHJldHVybnMgVOG7tyBs4buHIHRodSBwaMOzbmcgduG7q2EgdMOtbmhcbiAgICovXG4gIGZpdFRvU2NyZWVuKGNvbnRhaW5lcldpZHRoOiBudW1iZXIsIHN0YWdlV2lkdGg/OiBudW1iZXIsIHBhZGRpbmcgPSA0OCwgcGVyc2lzdEtleT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgdGFyZ2V0V2lkdGggPSBzdGFnZVdpZHRoID8/IHRoaXMuY29uZmlnPy5zdGFnZVdpZHRoID8/IDE2Njg7XG4gICAgY29uc3QgbWluID0gdGhpcy5jb25maWc/Lnpvb21NaW4gPz8gMC40O1xuICAgIGNvbnN0IG1heCA9IDEuMjU7XG4gICAgY29uc3QgcmF0aW8gPSBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgTWF0aC5yb3VuZCgoKGNvbnRhaW5lcldpZHRoIC0gcGFkZGluZykgLyB0YXJnZXRXaWR0aCkgKiAxMDApIC8gMTAwKSk7XG4gICAgdGhpcy5zZXRab29tKHJhdGlvLCBwZXJzaXN0S2V5KTtcbiAgICByZXR1cm4gcmF0aW87XG4gIH1cblxuICAvKiogS2nhu4NtIHRyYSB0w61uaCBuxINuZyB0aHUgcGjDs25nIGPDsyDEkcaw4bujYyBj4bqldSBow6xuaCBi4bqtdCBraMO0bmcgKi9cbiAgaXNab29tQ29uZmlndXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmNvbmZpZz8uZW5hYmxlWm9vbSk7XG4gIH1cblxuICAvKipcbiAgICogQ+G7lW5nIERVWSBOSOG6pFQgY2hvIGNhbnZhcyBj4bunYSB0aMawIHZp4buHbi4gTsahaSBkw7luZyBLSMOUTkcgZ+G7jWkgdOG7m2kgxJHDonkuXG4gICAqXG4gICAqIE3hu41pIHRo4bupIGNhbnZhcyBj4bqnbiDEkeG7gXUgbMOgIGBwcml2YXRlYCDEkeG7gyBraMO0bmcgbOG7jXQgcmEgQVBJIGPDtG5nIGtoYWk7IGdvbSB2w6BvIG3hu5l0IGdldHRlciB0aGVvIMSRw7puZ1xuICAgKiBraHXDtG4gYEZ1bmN0aW9uc0NvbnRyb2xgIGPhu6dhIGLhu5kgcXV5IMaw4bubYywgdGhheSB2w6wgxJHhu4MgcuG6o2kgcsOhYyBow6BtIHB1YmxpYyBtw6AgbmfGsOG7nWkgbmdvw6BpIHTGsOG7n25nXG4gICAqIG3DrG5oIHBo4bqjaSBn4buNaSAobmfGsOG7nWkgZMO5bmcgY2jhu5F0IDI4LzA4LzIwMjYpLlxuICAgKi9cbiAgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1heENvbnRhaW5lckRlcHRoOiAoKSA9PiB0aGlzLm1heENvbnRhaW5lckRlcHRoKCksXG4gICAgICBjb250YWluZXJQYWRkaW5nOiAoKSA9PiB0aGlzLmNvbnRhaW5lclBhZGRpbmcoKSxcbiAgICAgIGlzWm9vbUVuYWJsZWQ6ICgpID0+IHRoaXMuaXNab29tQ29uZmlndXJlZCgpLFxuICAgICAgem9vbTogKCkgPT4gdGhpcy56b29tTGV2ZWwoKSxcbiAgICAgIHNldFpvb206ICh2OiBudW1iZXIsIGtleT86IHN0cmluZykgPT4gdGhpcy5zZXRab29tKHYsIGtleSksXG4gICAgICB6b29tSW46IChzdGVwPzogbnVtYmVyLCBrZXk/OiBzdHJpbmcpID0+IHRoaXMuem9vbUluKHN0ZXAsIGtleSksXG4gICAgICB6b29tT3V0OiAoc3RlcD86IG51bWJlciwga2V5Pzogc3RyaW5nKSA9PiB0aGlzLnpvb21PdXQoc3RlcCwga2V5KSxcbiAgICAgIHJlc2V0Wm9vbTogKGtleT86IHN0cmluZykgPT4gdGhpcy5yZXNldFpvb20oa2V5KSxcbiAgICAgIGZpdFRvU2NyZWVuOiAoY1c6IG51bWJlciwgc1c/OiBudW1iZXIsIHBhZD86IG51bWJlciwga2V5Pzogc3RyaW5nKSA9PiB0aGlzLmZpdFRvU2NyZWVuKGNXLCBzVywgcGFkLCBrZXkpLFxuICAgICAgZ3JpZHN0ZXJPcHRpb25zOiAoZGVwdGg6IG51bWJlciwgY2I/OiAoKSA9PiB2b2lkKSA9PiB0aGlzLmJ1aWxkR3JpZHN0ZXJPcHRpb25zKGRlcHRoLCBjYiksXG4gICAgICBhdHRhY2hOb2RlOiAobm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGRlcHRoOiBudW1iZXIsIGhvc3Q6IFZpZXdDb250YWluZXJSZWYpID0+IHRoaXMuYXR0YWNoTm9kZShub2RlLCBkZXB0aCwgaG9zdCksXG4gICAgICBkZXRhY2hOb2RlOiAobm9kZUlkOiBzdHJpbmcpID0+IHRoaXMuZGV0YWNoTm9kZShub2RlSWQpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SW5wdXRzKHJlZjogQ29tcG9uZW50UmVmPHVua25vd24+LCBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgZGVwdGg6IG51bWJlcik6IHZvaWQge1xuICAgIHJlZi5zZXRJbnB1dCgnZGF0YScsIG5vZGUuZGF0YSk7XG4gICAgcmVmLnNldElucHV0KCdub2RlJywgbm9kZSk7XG4gICAgcmVmLnNldElucHV0KCdpc0VkaXRNb2RlJywgdGhpcy5lZGl0TW9kZSgpKTtcbiAgICByZWYuc2V0SW5wdXQoJ2RlcHRoJywgZGVwdGgpO1xuICB9XG59XG4iXX0=
package/esm2022/index.mjs CHANGED
@@ -7,4 +7,5 @@
7
7
  export * from './grid-layout.service';
8
8
  export * from './canvas/grid-layout-canvas.component';
9
9
  export * from './interfaces/grid-layout.interface';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2dyaWQtbGF5b3V0L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3REFBd0Q7QUFDeEQsRUFBRTtBQUNGLHNGQUFzRjtBQUN0RixrR0FBa0c7QUFDbEcsb0dBQW9HO0FBQ3BHLDJEQUEyRDtBQUMzRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxvQ0FBb0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIELhu4EgbeG6t3QgQ8OUTkcgS0hBSSDigJQgY2jhu4kgbmjhu69uZyBnw6wgbsahaSBkw7luZyB0aOG6rXQgc+G7sSBj4bqnbi5cbi8vXG4vLyBgTGlic1VpR3JpZExheW91dFRyZWVTZXJ2aWNlYCBD4buQIMOdIGtow7RuZyB4deG6pXQ6IG3hu41pIHRoYW8gdMOhYyB0csOqbiBjw6J5IMSRw6MgY8OzIG3hurd0IHRyw6puXG4vLyBgTGlic1VpR3JpZExheW91dFNlcnZpY2VgIHbhu5tpIGNo4buvIGvDvSBn4buNbiBoxqFuIChraMO0bmcgcGjhuqNpIHRydXnhu4FuIGByb290YCDigJQgdGjGsCB2aeG7h24gxJFhbmcgZ2nhu68gbsOzKS5cbi8vIEPhuqV1IGjDrG5oIGdyaWRzdGVyIGPFqW5nIGtow7RuZyB4deG6pXQ6IG7DsyDEkcOjIMSRxrDhu6NjIHbDoSB0aGVvIGjDoG5nIGNo4bulYyBs4buXaSDEkW8gdHLDqm4gc+G6o24gcGjhuqltIHRo4bqtdCwgxJHhu4MgbsahaVxuLy8gZMO5bmcgc+G7rWEgbOG6oWkgbMOgIG3hu58gxJHGsOG7nW5nIGNobyBjaMOtbmggbmjhu69uZyBs4buXaSDEkcOzIHF1YXkgduG7gS5cbmV4cG9ydCAqIGZyb20gJy4vZ3JpZC1sYXlvdXQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2NhbnZhcy9ncmlkLWxheW91dC1jYW52YXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UnO1xuIl19
10
+ export * from './defines/collision.define';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2dyaWQtbGF5b3V0L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3REFBd0Q7QUFDeEQsRUFBRTtBQUNGLHNGQUFzRjtBQUN0RixrR0FBa0c7QUFDbEcsb0dBQW9HO0FBQ3BHLDJEQUEyRDtBQUMzRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQuG7gSBt4bq3dCBDw5RORyBLSEFJIOKAlCBjaOG7iSBuaOG7r25nIGfDrCBuxqFpIGTDuW5nIHRo4bqtdCBz4buxIGPhuqduLlxuLy9cbi8vIGBMaWJzVWlHcmlkTGF5b3V0VHJlZVNlcnZpY2VgIEPhu5Agw50ga2jDtG5nIHh14bqldDogbeG7jWkgdGhhbyB0w6FjIHRyw6puIGPDonkgxJHDoyBjw7MgbeG6t3QgdHLDqm5cbi8vIGBMaWJzVWlHcmlkTGF5b3V0U2VydmljZWAgduG7m2kgY2jhu68ga8O9IGfhu41uIGjGoW4gKGtow7RuZyBwaOG6o2kgdHJ1eeG7gW4gYHJvb3RgIOKAlCB0aMawIHZp4buHbiDEkWFuZyBnaeG7ryBuw7MpLlxuLy8gQ+G6pXUgaMOsbmggZ3JpZHN0ZXIgY8Wpbmcga2jDtG5nIHh14bqldDogbsOzIMSRw6MgxJHGsOG7o2MgdsOhIHRoZW8gaMOgbmcgY2jhu6VjIGzhu5dpIMSRbyB0csOqbiBz4bqjbiBwaOG6qW0gdGjhuq10LCDEkeG7gyBuxqFpXG4vLyBkw7luZyBz4butYSBs4bqhaSBsw6AgbeG7nyDEkcaw4budbmcgY2hvIGNow61uaCBuaOG7r25nIGzhu5dpIMSRw7MgcXVheSB24buBLlxuZXhwb3J0ICogZnJvbSAnLi9ncmlkLWxheW91dC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY2FudmFzL2dyaWQtbGF5b3V0LWNhbnZhcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2dyaWQtbGF5b3V0LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2RlZmluZXMvY29sbGlzaW9uLmRlZmluZSc7XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqIENo4bq/IMSR4buZIHPhuq9wIHjhur9wIGto4buRaSB0csOqbiBt4bq3dCBwaOG6s25nICovXG5leHBvcnQgY29uc3QgZW51bSBFX2dyaWRMYXlvdXRfbW9kZV9zdHJpbmcge1xuICAvKiogQsOhbSBsxrDhu5tpOiBraOG7kWkgdGjhurNuZyBow6BuZywgdOG7sSDEkeG6qXkgbmhhdSwgc+G6r3AgZ+G7jW4gxJHGsOG7o2MgKi9cbiAgZ3JpZCA9ICdncmlkJyxcbiAgLyoqIFThu7EgZG86IGto4buRaSDEkeG6t3Qg4bufIHRv4bqhIMSR4buZIGLhuqV0IGvhu7MsIGNo4buTbmcgbMOqbiBuaGF1IHRob+G6o2kgbcOhaSAqL1xuICBmcmVlID0gJ2ZyZWUnLFxufVxuXG4vKiogTeG7mXQga2jhu5FpIHRyw6puIG3hurd0IHBo4bqzbmcuIGBjaGlsZHJlbmAga2jDoWMgcuG7l25nIHRow6wga2jhu5FpIGzDoCBDT05UQUlORVIsIHJ14buZdCBuw7MgbMOgIG3hu5l0IGzGsOG7m2kgY29uLiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X25vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBj4buZdCBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBYIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB4OiBudW1iZXI7XG4gIC8qKiBow6BuZyBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBZIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB5OiBudW1iZXI7XG4gIC8qKiBz4buRIGPhu5l0IGNoaeG6v20gKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCBjaGnhu4F1IHLhu5luZyAoY2jhur8gxJHhu5kgdOG7sSBkbykgKi9cbiAgY29sczogbnVtYmVyO1xuICAvKiogc+G7kSBow6BuZyBjaGnhur9tIChjaOG6vyDEkeG7mSBsxrDhu5tpKSDigJQgcHggY2hp4buBdSBjYW8gKGNo4bq/IMSR4buZIHThu7EgZG8pICovXG4gIHJvd3M6IG51bWJlcjtcbiAgLyoqXG4gICAqIEzhu5twIGNo4buTbmcuIEhhaSBraOG7kWkgQ0jhu5JORyBuaGF1IMSRxrDhu6NjIGtoaSBraMOhYyBgbGF5ZXJJbmRleGAgdsOgIGBhbGxvd092ZXJsYXBgIGLhuq10LlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4buNaSBraOG7kWkgY8O5bmcgbOG7m3AgMCDigJQgY2jhu5NuZyBuaGF1IGLhu4sgY2jhurduIG5oxrAgbMaw4bubaSB0aMaw4budbmcuXG4gICAqL1xuICBsYXllckluZGV4PzogbnVtYmVyO1xuICAvKioga2jhu5FpIGNvbjsga2jDoWMgcuG7l25nIHRow6wgxJHDonkgbMOgIGNvbnRhaW5lciAqL1xuICBjaGlsZHJlbj86IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPjtcbiAgLyoqXG4gICAqIENvbXBvbmVudCB24bq9IFJJw4pORyBjaG8ga2jhu5FpIG7DoHksIHRy4bqjIHbhu4EgZOG6oW5nIE9ic2VydmFibGUgxJHhu4MgTEFaWSBMT0FEIHRo4bqtdCBz4buxLlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4bq3dCBwaOG6s25nIGjhu49pIGBnZXRDb21wb25lbnRPdXRsZXRgIGNodW5nIGPhu6dhIGPhuqV1IGjDrG5oLlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBnZXRDb21wb25lbnRPdXRsZXQ6IChub2RlKSA9PiBmcm9tKGltcG9ydCgnLi9jaGFydC1jYXJkLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQ2hhcnRDYXJkQ29tcG9uZW50KSlcbiAgICogYGBgXG4gICAqL1xuICBnZXRDb21wb25lbnRPdXRsZXQ/OiAobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpID0+IE9ic2VydmFibGU8VHlwZTx1bmtub3duPj47XG4gIC8qKiBk4buvIGxp4buHdSByacOqbmcgY+G7p2EgbsahaSBkw7luZyDigJQgdGjGsCB2aeG7h24gS0jDlE5HIMSR4buNYywgY2h1eeG7g24gbmd1ecOqbiB2w6BvIGlucHV0IGBkYXRhYCBj4bunYSBjb21wb25lbnQgKi9cbiAgZGF0YT86IHVua25vd247XG59O1xuXG4vKipcbiAqIMSQaSBrw6htIHPhu7Ega2nhu4duIGPhu6dhIG3hu5l0IE7DmlQgYnVpbHQtaW4gdHLDqm4ga2jhu5FpLlxuICpcbiAqIFRoxrAgdmnhu4duIENIxq9BIGzDoG0gZ8OsIGtoaSBi4bqvbiDigJQgbsOzIGNo4buJIGLDoW8gXCJuZ8aw4budaSBkw7luZyB24burYSBi4bqlbSBuw7p0IG7DoHlcIi4gTsahaSBkw7luZyBxdXnhur90IMSR4buLbmg6XG4gKiAtIGPhuqduIGjhu49pIHRyxrDhu5tjIChtb2RhbCB4w6FjIG5o4bqtbiwgZ+G7jWkgQVBJIGtp4buDbSB0cmEpIOKGkiBo4buPaSB4b25nIHLhu5NpIGfhu41pIGBjb25maXJtKClgO1xuICogLSBraMO0bmcgY+G6p24gaOG7j2kg4oaSIGfhu41pIGBjb25maXJtKClgIG5nYXk7XG4gKiAtIGtow7RuZyBjaG8gcGjDqXAg4oaSIGtow7RuZyBn4buNaSBnw6wgY+G6oy5cbiAqXG4gKiBgYGB0c1xuICogcHJvdGVjdGVkIGhhbmRsZXJSZW1vdmUoZXZlbnQ6IFRfZ3JpZExheW91dF9hY3Rpb25FdmVudCk6IHZvaWQge1xuICogICB0aGlzLmRpYWxvZy5jb25maXJtKCdYb8OhIGto4buRaSBuw6B5PycpLnN1YnNjcmliZSgoZG9uZ1kpID0+IGRvbmdZICYmIGV2ZW50LmNvbmZpcm0oKSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2FjdGlvbkV2ZW50ID0ge1xuICAvKioga2jhu5FpIG5nxrDhu51pIGTDuW5nIHbhu6thIGLhuqVtIG7DunQgKi9cbiAgbm9kZUlkOiBzdHJpbmc7XG4gIC8qKiBraOG7kWkgxJHDsywga2hpIGLhuqFuIGPhuqduIMSR4buNYyBgZGF0YWAgxJHhu4MgcXV54bq/dCDEkeG7i25oICh2ZCBraOG7kWkgxJFhbmcgY8OzIGThu68gbGnhu4d1IHRow6wgbeG7m2kgaOG7j2kpICovXG4gIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKipcbiAgICogR+G7jWkgxJHhu4MgdGjGsCB2aeG7h24gdGjhu7FjIGhp4buHbiB0aGFvIHTDoWMuIEtow7RuZyBn4buNaSA9IGtow7RuZyBsw6BtIGfDrC5cbiAgICpcbiAgICogQHJldHVybnMgYGZhbHNlYCBraGkgdGhhbyB0w6FjIGtow7RuZyB0aOG7sWMgaGnhu4duIMSRxrDhu6NjIChraOG7kWkgxJHDoyBi4buLIHhvw6EsIGNo4bqhbSB0cuG6p24gbOG7k25nIGPhuqVw4oCmKS5cbiAgICovXG4gIGNvbmZpcm06ICgpID0+IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEto4buRaSBN4buaSSB0cnV54buBbiB2w6BvIGBhZGRDaGlsZGAuIEtow6FjIGBUX2dyaWRMYXlvdXRfbm9kZWAg4bufIGJhIGNo4buXIGRvIHRoxrAgdmnhu4duIHThu7EgbG86XG4gKiAtIGBpZGAgdOG7sSBzaW5oIChtw6MgbcOheSBkw7luZyDEkeG7gyB0cmEgY+G7qXUsIGtow7RuZyBwaOG6o2kgdGjhu6kgbmfGsOG7nWkgZMO5bmcgbmdoxKkgcmEpLFxuICogLSBgeGAgwrcgYHlgIHThu7EgxJHhurd0IHh14buRbmcgaMOgbmcgdHLhu5FuZyBr4bq/IHRp4bq/cC5cbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X25ld05vZGUgPSBPbWl0PFRfZ3JpZExheW91dF9ub2RlLCAnaWQnIHwgJ3gnIHwgJ3knPiAmIHtcbiAgLyoqIMSR4buDIHRy4buRbmcgdGjDrCB0aMawIHZp4buHbiBzaW5oOyBjaOG7iSB0cnV54buBbiBraGkgYuG6oW4gQ+G6pk4gbeG7mXQgaWQgY+G7kSDEkeG7i25oICh2ZCBraMO0aSBwaOG7pWMgdOG7qyBi4bqjbiBsxrB1KSAqL1xuICBpZD86IHN0cmluZztcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbn07XG5cbi8qKlxuICogxJBpIGvDqG0gc+G7sSBraeG7h24gYuG6pW0gbsO6dCBUSMOKTSB0csOqbiBt4buZdCBjb250YWluZXIuXG4gKlxuICogS2jDoWMgYFRfZ3JpZExheW91dF9hY3Rpb25FdmVudGAg4bufIGNo4buXIGBjb25maXJtYCBuaOG6rW4ga2jhu5FpIG114buRbiB0aMOqbTogdGjGsCB2aeG7h24ga2jDtG5nIGJp4bq/dCBz4bqjbiBwaOG6qW1cbiAqIGPhu6dhIGLhuqFuIGPDsyBuaOG7r25nIGxv4bqhaSBraOG7kWkgbsOgbywgbsOqbiBi4bqhbiBt4bufIG1lbnUgY2jhu41uIGxv4bqhaSBy4buTaSB0cnV54buBbiBraOG7kWkgxJHDoyBk4buxbmcgdsOgbyDEkcOieS5cbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2FkZEV2ZW50ID0ge1xuICAvKiogY29udGFpbmVyIG5nxrDhu51pIGTDuW5nIG114buRbiB0aMOqbSBraOG7kWkgdsOgbyAqL1xuICBub2RlSWQ6IHN0cmluZztcbiAgbm9kZTogVF9ncmlkTGF5b3V0X25vZGU7XG4gIC8qKiBAcmV0dXJucyBraOG7kWkgduG7q2EgdOG6oW8gKGvDqG0gYGlkYCB0aMawIHZp4buHbiBzaW5oKSwgaG/hurdjIGB1bmRlZmluZWRgIG7hur91IGtow7RuZyB0aMOqbSDEkcaw4bujYyAqL1xuICBjb25maXJtOiAoaXRlbTogVF9ncmlkTGF5b3V0X25ld05vZGUpID0+IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiDEkOG6p3UgdsOgbyBtw6AgdGjGsCB2aeG7h24gdHJ1eeG7gW4gY2hvIGNvbXBvbmVudCBj4bunYSBuxqFpIGTDuW5nLlxuICogQ29tcG9uZW50IELhuq5UIEJV4buYQyBraGFpIMSR4bunIGJhIGlucHV0IG7DoHkgKGTDuW5nIGBpbnB1dCgpYCksIHRoaeG6v3UgY8OhaSBuw6BvIHRow6wgYHNldElucHV0YCBuw6ltIGzhu5dpLlxuICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfbm9kZUlucHV0czxURGF0YSA9IHVua25vd24+ID0ge1xuICAvKiogxJHDum5nIGBub2RlLmRhdGFgIGPhu6dhIGto4buRaSDigJQgdGjhu6kgbsahaSBkw7luZyBj4bqnbiBuaOG6pXQsIG7Dqm4gxJHhu4MgxJHhuqd1ICovXG4gIGRhdGE6IFREYXRhO1xuICAvKiogY+G6oyBraOG7kWksIGtoaSBj4bqnbiBiaeG6v3QgaWQgwrcga8OtY2ggdGjGsOG7m2MgwrcgY8OzIHBo4bqjaSBjb250YWluZXIga2jDtG5nICovXG4gIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKiogxJFhbmcg4bufIGNo4bq/IMSR4buZIHPhu61hIGhheSBjaOG7iSB4ZW0gKi9cbiAgaXNFZGl0TW9kZTogYm9vbGVhbjtcbiAgLyoqIMSR4buZIHPDonU6IDAgPSBn4buRYywgMSA9IGto4buRaSBj4bqlcCB0cmFuZywgMiA9IGto4buRaSB0cm9uZyBjb250YWluZXIgKi9cbiAgZGVwdGg6IG51bWJlcjtcbn07XG5cbi8qKiBD4bqldSBow6xuaCBraOG7n2kgdOG6oW8gbeG7mXQgbeG6t3QgcGjhurNuZyBrw6lvIHRo4bqjICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfY29uZmlnID0ge1xuICAvKipcbiAgICogSMOgbSBQSMOCTiBHSeG6okkgY29tcG9uZW50IGNobyBt4buZdCBraOG7kWkg4oCUIGNo4buXIGLhuqFuIG1hcCB04burIGThu68gbGnhu4d1IHNlcnZlciBzYW5nIGdpYW8gZGnhu4duLlxuICAgKlxuICAgKiBN4bq3dCBwaOG6s25nIGfhu41pIGjDoG0gbsOgeSBjaG8gTeG7lkkga2jhu5FpIGtow7RuZyB04buxIGtoYWkgYGdldENvbXBvbmVudE91dGxldGAuIFRy4bqjIGBPYnNlcnZhYmxlYCBuw6puXG4gICAqIGBpbXBvcnQoKWAgxJHhu5luZyBjaOG6oXkgxJHGsOG7o2M6IGLDsyBtw6MgY+G7p2EgdOG7q25nIGxv4bqhaSBraOG7kWkgY2jhu4kgdOG6o2kga2hpIG3DoG4gdGjhuq10IHPhu7EgY8OzIGto4buRaSBsb+G6oWkgxJHDsy5cbiAgICpcbiAgICogYGBgdHNcbiAgICogZ2V0Q29tcG9uZW50T3V0bGV0OiAobm9kZSkgPT4ge1xuICAgKiAgIGNvbnN0IHsgdHlwZSB9ID0gbm9kZS5kYXRhIGFzIHsgdHlwZTogc3RyaW5nIH07XG4gICAqXG4gICAqICAgaWYgKHR5cGUgPT09ICdjaGFydCcpIHtcbiAgICogICAgIHJldHVybiBmcm9tKGltcG9ydCgnLi9jaGFydC1jYXJkLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQ2hhcnRDYXJkQ29tcG9uZW50KSk7XG4gICAqICAgfVxuICAgKlxuICAgKiAgIHJldHVybiBmcm9tKGltcG9ydCgnLi90ZXh0LWNhcmQuY29tcG9uZW50JykudGhlbigoYykgPT4gYy5UZXh0Q2FyZENvbXBvbmVudCkpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKSA9PiBPYnNlcnZhYmxlPFR5cGU8dW5rbm93bj4+O1xuICAvKiogY8OieSBraOG7kWkgYmFuIMSR4bqndSAqL1xuICBkYXRhOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgbW9kZT86IEVfZ3JpZExheW91dF9tb2RlX3N0cmluZztcbiAgaXNFZGl0TW9kZT86IGJvb2xlYW47XG4gIC8qKiBz4buRIGPhu5l0IGPhu6dhIGzGsOG7m2kgKGNo4bq/IMSR4buZIGzGsOG7m2kpLiBN4bq3YyDEkeG7i25oIDEyICovXG4gIGNvbHM/OiBudW1iZXI7XG4gIC8qKiBjaGnhu4F1IGNhbyBt4buZdCBow6BuZywgcHggKGNo4bq/IMSR4buZIGzGsOG7m2kpLiBN4bq3YyDEkeG7i25oIDU2ICovXG4gIHJvd0hlaWdodD86IG51bWJlcjtcbiAgLyoqIGtoZSBnaeG7r2EgaGFpIGto4buRaSDhu58gbMaw4bubaSBD4bqkUCBUUkFORywgcHguIE3hurdjIMSR4buLbmggMTIgKi9cbiAgbWFyZ2luPzogbnVtYmVyO1xuICAvKioga2hlIGdp4buvYSBoYWkga2jhu5FpIGLDqm4gVFJPTkcgY29udGFpbmVyLCBweC4gTeG6t2MgxJHhu4tuaCAyIOKAlCBraOG7kWkgY29uIGzDoCBkw7JuZyB0aMO0bmcgdGluIGPhu6dhIGPDuW5nXG4gICAqICBt4buZdCBjYXJkLCBraGUgcuG7mW5nIGzDoG0gY2jDum5nIHRyw7RuZyBuaMawIGNhcmQgcuG7nWkgbmhhdSAqL1xuICBuZXN0ZWRNYXJnaW4/OiBudW1iZXI7XG4gIC8qKiBjaGnhu4F1IGNhbyBt4buZdCBow6BuZyBiw6puIFRST05HIGNvbnRhaW5lciwgcHguIE3hurdjIMSR4buLbmggMTYg4oCUIGjDoG5nIG5o4buPIGNobyBixrDhu5tjIGvDqW8gbeG7i24gKi9cbiAgbmVzdGVkUm93SGVpZ2h0PzogbnVtYmVyO1xuICAvKipcbiAgICogTOG7gSB0cm9uZyBj4bunYSBDT05UQUlORVIsIHB4IOKAlCDDoXAgxJHhu4F1IGLhu5FuIGNoaeG7gXUuIE3hurdjIMSR4buLbmggMTIuXG4gICAqXG4gICAqIENo4buJIGNvbnRhaW5lciBjw7MgbOG7gSBuw6B5OyBraOG7kWkgxJHGoW4ga2jDtG5nIGPDsywgdsOsIG7DsyBraMO0bmcgY2jhu6lhIGfDrCBiw6puIHRyb25nLlxuICAgKlxuICAgKiDwn5S0IEtIw5RORyBuw6puIMSR4buDIDA6IHRheSBj4bqnbSDEkeG7lWkga8OtY2ggdGjGsOG7m2MgY+G7p2Ega2jhu5FpIGNvbiBu4bqxbSBzw6F0IGJpw6puIGNvbnRhaW5lciwga2jDtG5nIGNo4burYSBs4buBXG4gICAqIHRow6wgY2h14buZdCBraMO0bmcgdHLDum5nIMSRxrDhu6NjIG7DsyB2w6Aga2jhu5FpIGNvbiBt4bqldCBsdcO0biBraOG6oyBuxINuZyByZXNpemUuXG4gICAqL1xuICBjb250YWluZXJQYWRkaW5nPzogbnVtYmVyO1xuICAvKiogdmnhu4FuIG5nb8OgaSBxdWFuaCBsxrDhu5tpIGPhuqVwIHRyYW5nLiBN4bq3YyDEkeG7i25oIGLhuq10ICovXG4gIG91dGVyTWFyZ2luPzogYm9vbGVhbjtcbiAgLyoqIGNo4burYSB0aMOqbSBiYW8gbmhpw6p1IHB4IGTGsOG7m2kgxJHDoXkgbMaw4bubaSBj4bqlcCB0cmFuZy4gTeG6t2MgxJHhu4tuaCA0MCAqL1xuICBvdXRlck1hcmdpbkJvdHRvbT86IG51bWJlcjtcbiAgLyoqIHPhu5EgaMOgbmcgdOG7kWkgdGhp4buDdSBt4buZdCBraOG7kWkgxJHGsOG7o2MgY28gbOG6oWkuIE3hurdjIMSR4buLbmggMiAqL1xuICBtaW5JdGVtUm93cz86IG51bWJlcjtcbiAgLyoqIGvDrWNoIHRoxrDhu5tjIG3hurdjIMSR4buLbmggY+G7p2Ega2jhu5FpIG3hu5tpLCB0w61uaCB0aGVvIMO0IGzGsOG7m2kuIE3hurdjIMSR4buLbmggMyBj4buZdCDDlyAyIGjDoG5nICovXG4gIGRlZmF1bHRJdGVtQ29scz86IG51bWJlcjtcbiAgZGVmYXVsdEl0ZW1Sb3dzPzogbnVtYmVyO1xuICAvKipcbiAgICogQ2hvIHBow6lwIGhhaSBraOG7kWkgS0jDgUMgYGxheWVySW5kZXhgIG7hurFtIGNo4buTbmcgbmhhdS5cbiAgICogQ2jhur8gxJHhu5kgYHR1RG9gIGx1w7RuIGLhuq10LCBraMO0bmcgxJHhu41jIGPhu50gbsOgeS5cbiAgICovXG4gIGFsbG93T3ZlcmxhcD86IGJvb2xlYW47XG4gIC8qKiB0cuG6p24gc+G7kSBj4bqlcCBjb250YWluZXIgbOG7k25nIG5oYXUuIE3hurdjIMSR4buLbmggMSAoY29udGFpbmVyIGtow7RuZyBjaOG7qWEgY29udGFpbmVyKSAqL1xuICBtYXhDb250YWluZXJEZXB0aD86IG51bWJlcjtcbn07XG5cbi8qKiBT4buxIGtp4buHbiB0aMawIHZp4buHbiBi4bqvbiByYSBraGkgYuG7kSBj4bulYyDEkeG7lWkgKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF9jaGFuZ2VFdmVudCA9IHtcbiAgcm9vdDogVF9ncmlkTGF5b3V0X25vZGU7XG4gIC8qKiBraOG7kWkgduG7q2EgYuG7iyB0w6FjIMSR4buZbmc7IGLhu48gdHLhu5FuZyBraGkgxJHhu5VpIGRp4buHbiBy4buZbmcgKHPhuq9wIGfhu41uLCBu4bqhcCBs4bqhaSkgKi9cbiAgbm9kZUlkPzogc3RyaW5nO1xufTtcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqIENo4bq/IMSR4buZIHPhuq9wIHjhur9wIGto4buRaSB0csOqbiBt4bq3dCBwaOG6s25nICovXG5leHBvcnQgY29uc3QgZW51bSBFX2dyaWRMYXlvdXRfbW9kZV9zdHJpbmcge1xuICAvKiogQsOhbSBsxrDhu5tpOiBraOG7kWkgdGjhurNuZyBow6BuZywgdOG7sSDEkeG6qXkgbmhhdSwgc+G6r3AgZ+G7jW4gxJHGsOG7o2MgKi9cbiAgZ3JpZCA9ICdncmlkJyxcbiAgLyoqIFThu7EgZG86IGto4buRaSDEkeG6t3Qg4bufIHRv4bqhIMSR4buZIGLhuqV0IGvhu7MsIGNo4buTbmcgbMOqbiBuaGF1IHRob+G6o2kgbcOhaSAqL1xuICBmcmVlID0gJ2ZyZWUnLFxufVxuXG4vKiogTeG7mXQga2jhu5FpIHRyw6puIG3hurd0IHBo4bqzbmcuIGBjaGlsZHJlbmAga2jDoWMgcuG7l25nIHRow6wga2jhu5FpIGzDoCBDT05UQUlORVIsIHJ14buZdCBuw7MgbMOgIG3hu5l0IGzGsOG7m2kgY29uLiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X25vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBj4buZdCBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBYIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB4OiBudW1iZXI7XG4gIC8qKiBow6BuZyBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBZIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB5OiBudW1iZXI7XG4gIC8qKiBz4buRIGPhu5l0IGNoaeG6v20gKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCBjaGnhu4F1IHLhu5luZyAoY2jhur8gxJHhu5kgdOG7sSBkbykgKi9cbiAgY29sczogbnVtYmVyO1xuICAvKiogc+G7kSBow6BuZyBjaGnhur9tIChjaOG6vyDEkeG7mSBsxrDhu5tpKSDigJQgcHggY2hp4buBdSBjYW8gKGNo4bq/IMSR4buZIHThu7EgZG8pICovXG4gIHJvd3M6IG51bWJlcjtcbiAgLyoqXG4gICAqIEzhu5twIGNo4buTbmcuIEhhaSBraOG7kWkgQ0jhu5JORyBuaGF1IMSRxrDhu6NjIGtoaSBraMOhYyBgbGF5ZXJJbmRleGAgdsOgIGBhbGxvd092ZXJsYXBgIGLhuq10LlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4buNaSBraOG7kWkgY8O5bmcgbOG7m3AgMCDigJQgY2jhu5NuZyBuaGF1IGLhu4sgY2jhurduIG5oxrAgbMaw4bubaSB0aMaw4budbmcuXG4gICAqL1xuICBsYXllckluZGV4PzogbnVtYmVyO1xuICAvKioga2jhu5FpIGNvbjsga2jDoWMgcuG7l25nIHRow6wgxJHDonkgbMOgIGNvbnRhaW5lciAqL1xuICBjaGlsZHJlbj86IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPjtcbiAgLyoqXG4gICAqIENvbXBvbmVudCB24bq9IFJJw4pORyBjaG8ga2jhu5FpIG7DoHksIHRy4bqjIHbhu4EgZOG6oW5nIE9ic2VydmFibGUgxJHhu4MgTEFaWSBMT0FEIHRo4bqtdCBz4buxLlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4bq3dCBwaOG6s25nIGjhu49pIGBnZXRDb21wb25lbnRPdXRsZXRgIGNodW5nIGPhu6dhIGPhuqV1IGjDrG5oLlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBnZXRDb21wb25lbnRPdXRsZXQ6IChub2RlKSA9PiBmcm9tKGltcG9ydCgnLi9jaGFydC1jYXJkLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQ2hhcnRDYXJkQ29tcG9uZW50KSlcbiAgICogYGBgXG4gICAqL1xuICBnZXRDb21wb25lbnRPdXRsZXQ/OiAobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpID0+IE9ic2VydmFibGU8VHlwZTx1bmtub3duPj47XG4gIC8qKiBk4buvIGxp4buHdSByacOqbmcgY+G7p2EgbsahaSBkw7luZyDigJQgdGjGsCB2aeG7h24gS0jDlE5HIMSR4buNYywgY2h1eeG7g24gbmd1ecOqbiB2w6BvIGlucHV0IGBkYXRhYCBj4bunYSBjb21wb25lbnQgKi9cbiAgZGF0YT86IHVua25vd247XG59O1xuXG4vKipcbiAqIMSQaSBrw6htIHPhu7Ega2nhu4duIGPhu6dhIG3hu5l0IE7DmlQgYnVpbHQtaW4gdHLDqm4ga2jhu5FpLlxuICpcbiAqIFRoxrAgdmnhu4duIENIxq9BIGzDoG0gZ8OsIGtoaSBi4bqvbiDigJQgbsOzIGNo4buJIGLDoW8gXCJuZ8aw4budaSBkw7luZyB24burYSBi4bqlbSBuw7p0IG7DoHlcIi4gTsahaSBkw7luZyBxdXnhur90IMSR4buLbmg6XG4gKiAtIGPhuqduIGjhu49pIHRyxrDhu5tjIChtb2RhbCB4w6FjIG5o4bqtbiwgZ+G7jWkgQVBJIGtp4buDbSB0cmEpIOKGkiBo4buPaSB4b25nIHLhu5NpIGfhu41pIGBjb25maXJtKClgO1xuICogLSBraMO0bmcgY+G6p24gaOG7j2kg4oaSIGfhu41pIGBjb25maXJtKClgIG5nYXk7XG4gKiAtIGtow7RuZyBjaG8gcGjDqXAg4oaSIGtow7RuZyBn4buNaSBnw6wgY+G6oy5cbiAqXG4gKiBgYGB0c1xuICogcHJvdGVjdGVkIGhhbmRsZXJSZW1vdmUoZXZlbnQ6IFRfZ3JpZExheW91dF9hY3Rpb25FdmVudCk6IHZvaWQge1xuICogICB0aGlzLmRpYWxvZy5jb25maXJtKCdYb8OhIGto4buRaSBuw6B5PycpLnN1YnNjcmliZSgoZG9uZ1kpID0+IGRvbmdZICYmIGV2ZW50LmNvbmZpcm0oKSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2FjdGlvbkV2ZW50ID0ge1xuICAvKioga2jhu5FpIG5nxrDhu51pIGTDuW5nIHbhu6thIGLhuqVtIG7DunQgKi9cbiAgbm9kZUlkOiBzdHJpbmc7XG4gIC8qKiBraOG7kWkgxJHDsywga2hpIGLhuqFuIGPhuqduIMSR4buNYyBgZGF0YWAgxJHhu4MgcXV54bq/dCDEkeG7i25oICh2ZCBraOG7kWkgxJFhbmcgY8OzIGThu68gbGnhu4d1IHRow6wgbeG7m2kgaOG7j2kpICovXG4gIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKipcbiAgICogR+G7jWkgxJHhu4MgdGjGsCB2aeG7h24gdGjhu7FjIGhp4buHbiB0aGFvIHTDoWMuIEtow7RuZyBn4buNaSA9IGtow7RuZyBsw6BtIGfDrC5cbiAgICpcbiAgICogQHJldHVybnMgYGZhbHNlYCBraGkgdGhhbyB0w6FjIGtow7RuZyB0aOG7sWMgaGnhu4duIMSRxrDhu6NjIChraOG7kWkgxJHDoyBi4buLIHhvw6EsIGNo4bqhbSB0cuG6p24gbOG7k25nIGPhuqVw4oCmKS5cbiAgICovXG4gIGNvbmZpcm06ICgpID0+IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEto4buRaSBN4buaSSB0cnV54buBbiB2w6BvIGBhZGRDaGlsZGAuIEtow6FjIGBUX2dyaWRMYXlvdXRfbm9kZWAg4bufIGJhIGNo4buXIGRvIHRoxrAgdmnhu4duIHThu7EgbG86XG4gKiAtIGBpZGAgdOG7sSBzaW5oIChtw6MgbcOheSBkw7luZyDEkeG7gyB0cmEgY+G7qXUsIGtow7RuZyBwaOG6o2kgdGjhu6kgbmfGsOG7nWkgZMO5bmcgbmdoxKkgcmEpLFxuICogLSBgeGAgwrcgYHlgIHThu7EgxJHhurd0IHh14buRbmcgaMOgbmcgdHLhu5FuZyBr4bq/IHRp4bq/cC5cbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X25ld05vZGUgPSBPbWl0PFRfZ3JpZExheW91dF9ub2RlLCAnaWQnIHwgJ3gnIHwgJ3knPiAmIHtcbiAgLyoqIMSR4buDIHRy4buRbmcgdGjDrCB0aMawIHZp4buHbiBzaW5oOyBjaOG7iSB0cnV54buBbiBraGkgYuG6oW4gQ+G6pk4gbeG7mXQgaWQgY+G7kSDEkeG7i25oICh2ZCBraMO0aSBwaOG7pWMgdOG7qyBi4bqjbiBsxrB1KSAqL1xuICBpZD86IHN0cmluZztcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbn07XG5cbi8qKlxuICogxJBpIGvDqG0gc+G7sSBraeG7h24gYuG6pW0gbsO6dCBUSMOKTSB0csOqbiBt4buZdCBjb250YWluZXIuXG4gKlxuICogS2jDoWMgYFRfZ3JpZExheW91dF9hY3Rpb25FdmVudGAg4bufIGNo4buXIGBjb25maXJtYCBuaOG6rW4ga2jhu5FpIG114buRbiB0aMOqbTogdGjGsCB2aeG7h24ga2jDtG5nIGJp4bq/dCBz4bqjbiBwaOG6qW1cbiAqIGPhu6dhIGLhuqFuIGPDsyBuaOG7r25nIGxv4bqhaSBraOG7kWkgbsOgbywgbsOqbiBi4bqhbiBt4bufIG1lbnUgY2jhu41uIGxv4bqhaSBy4buTaSB0cnV54buBbiBraOG7kWkgxJHDoyBk4buxbmcgdsOgbyDEkcOieS5cbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2FkZEV2ZW50ID0ge1xuICAvKiogY29udGFpbmVyIG5nxrDhu51pIGTDuW5nIG114buRbiB0aMOqbSBraOG7kWkgdsOgbyAqL1xuICBub2RlSWQ6IHN0cmluZztcbiAgbm9kZTogVF9ncmlkTGF5b3V0X25vZGU7XG4gIC8qKiBAcmV0dXJucyBraOG7kWkgduG7q2EgdOG6oW8gKGvDqG0gYGlkYCB0aMawIHZp4buHbiBzaW5oKSwgaG/hurdjIGB1bmRlZmluZWRgIG7hur91IGtow7RuZyB0aMOqbSDEkcaw4bujYyAqL1xuICBjb25maXJtOiAoaXRlbTogVF9ncmlkTGF5b3V0X25ld05vZGUpID0+IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiDEkOG6p3UgdsOgbyBtw6AgdGjGsCB2aeG7h24gdHJ1eeG7gW4gY2hvIGNvbXBvbmVudCBj4bunYSBuxqFpIGTDuW5nLlxuICogQ29tcG9uZW50IELhuq5UIEJV4buYQyBraGFpIMSR4bunIGJhIGlucHV0IG7DoHkgKGTDuW5nIGBpbnB1dCgpYCksIHRoaeG6v3UgY8OhaSBuw6BvIHRow6wgYHNldElucHV0YCBuw6ltIGzhu5dpLlxuICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfbm9kZUlucHV0czxURGF0YSA9IHVua25vd24+ID0ge1xuICAvKiogxJHDum5nIGBub2RlLmRhdGFgIGPhu6dhIGto4buRaSDigJQgdGjhu6kgbsahaSBkw7luZyBj4bqnbiBuaOG6pXQsIG7Dqm4gxJHhu4MgxJHhuqd1ICovXG4gIGRhdGE6IFREYXRhO1xuICAvKiogY+G6oyBraOG7kWksIGtoaSBj4bqnbiBiaeG6v3QgaWQgwrcga8OtY2ggdGjGsOG7m2MgwrcgY8OzIHBo4bqjaSBjb250YWluZXIga2jDtG5nICovXG4gIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKiogxJFhbmcg4bufIGNo4bq/IMSR4buZIHPhu61hIGhheSBjaOG7iSB4ZW0gKi9cbiAgaXNFZGl0TW9kZTogYm9vbGVhbjtcbiAgLyoqIMSR4buZIHPDonU6IDAgPSBn4buRYywgMSA9IGto4buRaSBj4bqlcCB0cmFuZywgMiA9IGto4buRaSB0cm9uZyBjb250YWluZXIgKi9cbiAgZGVwdGg6IG51bWJlcjtcbn07XG5cbi8qKiBD4bqldSBow6xuaCBraOG7n2kgdOG6oW8gbeG7mXQgbeG6t3QgcGjhurNuZyBrw6lvIHRo4bqjICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfY29uZmlnID0ge1xuICAvKipcbiAgICogSMOgbSBQSMOCTiBHSeG6okkgY29tcG9uZW50IGNobyBt4buZdCBraOG7kWkg4oCUIGNo4buXIGLhuqFuIG1hcCB04burIGThu68gbGnhu4d1IHNlcnZlciBzYW5nIGdpYW8gZGnhu4duLlxuICAgKlxuICAgKiBN4bq3dCBwaOG6s25nIGfhu41pIGjDoG0gbsOgeSBjaG8gTeG7lkkga2jhu5FpIGtow7RuZyB04buxIGtoYWkgYGdldENvbXBvbmVudE91dGxldGAuIFRy4bqjIGBPYnNlcnZhYmxlYCBuw6puXG4gICAqIGBpbXBvcnQoKWAgxJHhu5luZyBjaOG6oXkgxJHGsOG7o2M6IGLDsyBtw6MgY+G7p2EgdOG7q25nIGxv4bqhaSBraOG7kWkgY2jhu4kgdOG6o2kga2hpIG3DoG4gdGjhuq10IHPhu7EgY8OzIGto4buRaSBsb+G6oWkgxJHDsy5cbiAgICpcbiAgICogYGBgdHNcbiAgICogZ2V0Q29tcG9uZW50T3V0bGV0OiAobm9kZSkgPT4ge1xuICAgKiAgIGNvbnN0IHsgdHlwZSB9ID0gbm9kZS5kYXRhIGFzIHsgdHlwZTogc3RyaW5nIH07XG4gICAqXG4gICAqICAgaWYgKHR5cGUgPT09ICdjaGFydCcpIHtcbiAgICogICAgIHJldHVybiBmcm9tKGltcG9ydCgnLi9jaGFydC1jYXJkLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQ2hhcnRDYXJkQ29tcG9uZW50KSk7XG4gICAqICAgfVxuICAgKlxuICAgKiAgIHJldHVybiBmcm9tKGltcG9ydCgnLi90ZXh0LWNhcmQuY29tcG9uZW50JykudGhlbigoYykgPT4gYy5UZXh0Q2FyZENvbXBvbmVudCkpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKSA9PiBPYnNlcnZhYmxlPFR5cGU8dW5rbm93bj4+O1xuICAvKiogY8OieSBraOG7kWkgYmFuIMSR4bqndSAqL1xuICBkYXRhOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgbW9kZT86IEVfZ3JpZExheW91dF9tb2RlX3N0cmluZztcbiAgaXNFZGl0TW9kZT86IGJvb2xlYW47XG4gIC8qKiBz4buRIGPhu5l0IGPhu6dhIGzGsOG7m2kgKGNo4bq/IMSR4buZIGzGsOG7m2kpLiBN4bq3YyDEkeG7i25oIDEyICovXG4gIGNvbHM/OiBudW1iZXI7XG4gIC8qKiBjaGnhu4F1IGNhbyBt4buZdCBow6BuZywgcHggKGNo4bq/IMSR4buZIGzGsOG7m2kpLiBN4bq3YyDEkeG7i25oIDU2ICovXG4gIHJvd0hlaWdodD86IG51bWJlcjtcbiAgLyoqIGtoZSBnaeG7r2EgaGFpIGto4buRaSDhu58gbMaw4bubaSBD4bqkUCBUUkFORywgcHguIE3hurdjIMSR4buLbmggMTIgKi9cbiAgbWFyZ2luPzogbnVtYmVyO1xuICAvKioga2hlIGdp4buvYSBoYWkga2jhu5FpIGLDqm4gVFJPTkcgY29udGFpbmVyLCBweC4gTeG6t2MgxJHhu4tuaCAyIOKAlCBraOG7kWkgY29uIGzDoCBkw7JuZyB0aMO0bmcgdGluIGPhu6dhIGPDuW5nXG4gICAqICBt4buZdCBjYXJkLCBraGUgcuG7mW5nIGzDoG0gY2jDum5nIHRyw7RuZyBuaMawIGNhcmQgcuG7nWkgbmhhdSAqL1xuICBuZXN0ZWRNYXJnaW4/OiBudW1iZXI7XG4gIC8qKiBjaGnhu4F1IGNhbyBt4buZdCBow6BuZyBiw6puIFRST05HIGNvbnRhaW5lciwgcHguIE3hurdjIMSR4buLbmggMTYg4oCUIGjDoG5nIG5o4buPIGNobyBixrDhu5tjIGvDqW8gbeG7i24gKi9cbiAgbmVzdGVkUm93SGVpZ2h0PzogbnVtYmVyO1xuICAvKipcbiAgICogTOG7gSB0cm9uZyBj4bunYSBDT05UQUlORVIsIHB4IOKAlCDDoXAgxJHhu4F1IGLhu5FuIGNoaeG7gXUuIE3hurdjIMSR4buLbmggMTIuXG4gICAqXG4gICAqIENo4buJIGNvbnRhaW5lciBjw7MgbOG7gSBuw6B5OyBraOG7kWkgxJHGoW4ga2jDtG5nIGPDsywgdsOsIG7DsyBraMO0bmcgY2jhu6lhIGfDrCBiw6puIHRyb25nLlxuICAgKlxuICAgKiDwn5S0IEtIw5RORyBuw6puIMSR4buDIDA6IHRheSBj4bqnbSDEkeG7lWkga8OtY2ggdGjGsOG7m2MgY+G7p2Ega2jhu5FpIGNvbiBu4bqxbSBzw6F0IGJpw6puIGNvbnRhaW5lciwga2jDtG5nIGNo4burYSBs4buBXG4gICAqIHRow6wgY2h14buZdCBraMO0bmcgdHLDum5nIMSRxrDhu6NjIG7DsyB2w6Aga2jhu5FpIGNvbiBt4bqldCBsdcO0biBraOG6oyBuxINuZyByZXNpemUuXG4gICAqL1xuICBjb250YWluZXJQYWRkaW5nPzogbnVtYmVyO1xuICAvKiogdmnhu4FuIG5nb8OgaSBxdWFuaCBsxrDhu5tpIGPhuqVwIHRyYW5nLiBN4bq3YyDEkeG7i25oIGLhuq10ICovXG4gIG91dGVyTWFyZ2luPzogYm9vbGVhbjtcbiAgLyoqIGNo4burYSB0aMOqbSBiYW8gbmhpw6p1IHB4IGTGsOG7m2kgxJHDoXkgbMaw4bubaSBj4bqlcCB0cmFuZy4gTeG6t2MgxJHhu4tuaCA0MCAqL1xuICBvdXRlck1hcmdpbkJvdHRvbT86IG51bWJlcjtcbiAgLyoqIHPhu5EgaMOgbmcgdOG7kWkgdGhp4buDdSBt4buZdCBraOG7kWkgxJHGsOG7o2MgY28gbOG6oWkuIE3hurdjIMSR4buLbmggMiAqL1xuICBtaW5JdGVtUm93cz86IG51bWJlcjtcbiAgLyoqIGvDrWNoIHRoxrDhu5tjIG3hurdjIMSR4buLbmggY+G7p2Ega2jhu5FpIG3hu5tpLCB0w61uaCB0aGVvIMO0IGzGsOG7m2kuIE3hurdjIMSR4buLbmggMyBj4buZdCDDlyAyIGjDoG5nICovXG4gIGRlZmF1bHRJdGVtQ29scz86IG51bWJlcjtcbiAgZGVmYXVsdEl0ZW1Sb3dzPzogbnVtYmVyO1xuICAvKipcbiAgICogQ2hvIHBow6lwIGhhaSBraOG7kWkgS0jDgUMgYGxheWVySW5kZXhgIG7hurFtIGNo4buTbmcgbmhhdS5cbiAgICogQ2jhur8gxJHhu5kgYHR1RG9gIGx1w7RuIGLhuq10LCBraMO0bmcgxJHhu41jIGPhu50gbsOgeS5cbiAgICovXG4gIGFsbG93T3ZlcmxhcD86IGJvb2xlYW47XG4gIC8qKiB0cuG6p24gc+G7kSBj4bqlcCBjb250YWluZXIgbOG7k25nIG5oYXUuIE3hurdjIMSR4buLbmggMSAoY29udGFpbmVyIGtow7RuZyBjaOG7qWEgY29udGFpbmVyKSAqL1xuICBtYXhDb250YWluZXJEZXB0aD86IG51bWJlcjtcbiAgLyoqIELhuq10IHTDrW5oIG7Eg25nIHRodSBwaMOzbmcgKHpvb20pIGNhbnZhcy4gTeG6t2MgxJHhu4tuaCBmYWxzZSAqL1xuICBlbmFibGVab29tPzogYm9vbGVhbjtcbiAgLyoqIFThu7cgbOG7hyB0aHUgcGjDs25nIGJhbiDEkeG6p3UuIE3hurdjIMSR4buLbmggMSAoMTAwJSkgKi9cbiAgaW5pdGlhbFpvb20/OiBudW1iZXI7XG4gIC8qKiBHaeG7m2kgaOG6oW4gdGh1IHBow7NuZyB04buRaSB0aGnhu4N1LiBN4bq3YyDEkeG7i25oIDAuNCAoNDAlKSAqL1xuICB6b29tTWluPzogbnVtYmVyO1xuICAvKiogR2nhu5tpIGjhuqFuIHRodSBwaMOzbmcgdOG7kWkgxJFhLiBN4bq3YyDEkeG7i25oIDEuNSAoMTUwJSkgKi9cbiAgem9vbU1heD86IG51bWJlcjtcbiAgLyoqIELGsOG7m2MgbmjhuqN5IG3hu5dpIGzhuqduIHTEg25nL2dp4bqjbSB0aHUgcGjDs25nLiBN4bq3YyDEkeG7i25oIDAuMDUgKDUlKSAqL1xuICB6b29tU3RlcD86IG51bWJlcjtcbiAgLyoqIENoaeG7gXUgcuG7mW5nIGNodeG6qW4gY+G7p2EgY2FudmFzIHN0YWdlLCBweC4gTeG6t2MgxJHhu4tuaCAxNjY4ICovXG4gIHN0YWdlV2lkdGg/OiBudW1iZXI7XG4gIC8qKiBDaGnhu4F1IGNhbyB04buRaSB0aGnhu4N1IGPhu6dhIGNhbnZhcyBzdGFnZSwgcHguIE3hurdjIMSR4buLbmggOTM3ICovXG4gIHN0YWdlTWluSGVpZ2h0PzogbnVtYmVyO1xuICAvKiogS2jDs2EgbMawdSB04bu3IGzhu4cgdGh1IHBow7NuZyB2w6BvIGxvY2FsU3RvcmFnZSAodmQgJ29jYl9iaV9jYW52YXNfem9vbScpICovXG4gIHN0b3JhZ2VLZXk/OiBzdHJpbmc7XG4gIC8qKiBU4buxIMSR4buZbmcgduG7q2EgbcOgbiBow6xuaCBraGkgdOG6o2kgdHJhbmcgbOG6p24gxJHhuqd1IG7hur91IGtodW5nIG5ow6xuIG5o4buPIGjGoW4gc3RhZ2UuIE3hurdjIMSR4buLbmggdHJ1ZSAqL1xuICBhdXRvRml0T25Mb2FkPzogYm9vbGVhbjtcbn07XG5cbi8qKiBM4buxYSBjaOG7jW4gdOG7tyBs4buHIHRodSBwaMOzbmcgdHLDqm4gbWVudSBkcm9wZG93biAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X3pvb21QcmVzZXQgPSB7XG4gIC8qKiBLaG/DoSBpMThuLCBLSMOUTkcgcGjhuqNpIGNo4buvIGhp4buDbiB0aOG7iyDigJQgdGVtcGxhdGUgZOG7i2NoIHF1YSBgdHJhbnNsYXRlYCBwaXBlLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufTtcblxuLyoqIFPhu7Ega2nhu4duIHRoxrAgdmnhu4duIGLhuq9uIHJhIGtoaSBi4buRIGPhu6VjIMSR4buVaSAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2NoYW5nZUV2ZW50ID0ge1xuICByb290OiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgLyoqIGto4buRaSB24burYSBi4buLIHTDoWMgxJHhu5luZzsgYuG7jyB0cuG7kW5nIGtoaSDEkeG7lWkgZGnhu4duIHLhu5luZyAoc+G6r3AgZ+G7jW4sIG7huqFwIGzhuqFpKSAqL1xuICBub2RlSWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIELhu5FpIGPhuqNuaCB0cnV54buBbiB2w6BvIGB0ZW1wbGF0ZVRvb2xiYXJgIOKAlCB0ZW1wbGF0ZSB04buxIHbhur0gdGhhbmggY8O0bmcgY+G7pSB0aGF5IGLhu5kgbsO6dCBt4bq3YyDEkeG7i25oLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxuZy10ZW1wbGF0ZSAjdG9vbGJhciBsZXQtbm9kZSBsZXQtY3R4PVwiY3R4XCI+XG4gKiAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAqICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJlbW92ZSdcIlxuICogICAgIChvdXRDbGljayk9XCJjdHgucmVtb3ZlKClcIiAvPlxuICogPC9uZy10ZW1wbGF0ZT5cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfdG9vbGJhckNvbnRleHQgPSB7XG4gIC8qKiBraOG7kWkgxJFhbmcgduG6vSDigJQgZMO5bmcgYGxldC1ub2RlYCB0cm9uZyB0ZW1wbGF0ZSAqL1xuICAkaW1wbGljaXQ6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKioga2jhu5FpIG7DoHkgbMOgIGNvbnRhaW5lciAoY8OzIHJ14buZdCkgaGF5IGto4buRaSDEkcahbiAqL1xuICBpc0NvbnRhaW5lcjogYm9vbGVhbjtcbiAgLyoqIGPDsm4gdGjDqm0gxJHGsOG7o2Mga2jhu5FpIHbDoG8gdHJvbmcga2jDtG5nIChjaMawYSBjaOG6oW0gdHLhuqduIGzhu5NuZyBj4bqlcCkgKi9cbiAgY2FuQWRkSW5zaWRlOiBib29sZWFuO1xuICAvKiogxJHhu5VpIMSRxrDhu6NjIGdp4buvYSBraOG7kWkgxJHGoW4g4oaUIGto4buRaSBnaMOpcCBraMO0bmcgKi9cbiAgY2FuVG9nZ2xlVHlwZTogYm9vbGVhbjtcbiAgLyoqIGfhu41pIMSR4buDIHRoxrAgdmnhu4duIHBow6F0IGBvdXRSZW1vdmVOb2RlYCBuaMawIGtoaSBi4bqlbSBuw7p0IHhvw6EgbeG6t2MgxJHhu4tuaCAqL1xuICByZW1vdmU6ICgpID0+IHZvaWQ7XG4gIC8qKiBn4buNaSDEkeG7gyB0aMawIHZp4buHbiBwaMOhdCBgb3V0QWRkQmxvY2tJbnNpZGVgICovXG4gIGFkZEluc2lkZTogKCkgPT4gdm9pZDtcbiAgLyoqIGfhu41pIMSR4buDIHRoxrAgdmnhu4duIHBow6F0IGBvdXRUb2dnbGVUeXBlYCAqL1xuICB0b2dnbGVUeXBlOiAoKSA9PiB2b2lkO1xufTtcblxuLyoqIEtodW5nIHhlbSB0csaw4bubYyAoZ2hvc3QgcHJldmlldykga2hpIGvDqW8gdGjhursgdOG7qyBiw6puIG5nb8OgaSB2w6BvIGNhbnZhcyAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2Ryb3BHaG9zdCA9IHtcbiAgY29sOiBudW1iZXI7XG4gIHJvdzogbnVtYmVyO1xuICBjb2xzOiBudW1iZXI7XG4gIHJvd3M6IG51bWJlcjtcbiAgcGl4ZWxMZWZ0OiBudW1iZXI7XG4gIHBpeGVsVG9wOiBudW1iZXI7XG4gIHBpeGVsV2lkdGg6IG51bWJlcjtcbiAgcGl4ZWxIZWlnaHQ6IG51bWJlcjtcbiAgaXNJbnNpZGVHcm91cDogYm9vbGVhbjtcbiAgdGFyZ2V0UGFyZW50SWQ/OiBzdHJpbmc7XG4gIGdyb3VwVGl0bGU/OiBzdHJpbmc7XG4gIGNhcmRUaXRsZTogc3RyaW5nO1xuICBjYXJkSWNvblRleHQ/OiBzdHJpbmc7XG4gIGNhcmRJY29uQ2xhc3M/OiBzdHJpbmc7XG4gIGhvdmVyZWRHcmlkc3Rlcj86IEhUTUxFbGVtZW50O1xufTtcblxuLyoqIFPhu7Ega2nhu4duIHBow6F0IHJhIGtoaSB0aOG6oyBt4buZdCB0aOG6uyBt4bubaSB04burIGLDqm4gbmdvw6BpIHbDoG8gY2FudmFzICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfZHJvcEV2ZW50ID0ge1xuICBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIGNvbDogbnVtYmVyO1xuICByb3c6IG51bWJlcjtcbiAgY29sczogbnVtYmVyO1xuICByb3dzOiBudW1iZXI7XG4gIHJhd0V2ZW50OiBEcmFnRXZlbnQ7XG4gIHBheWxvYWQ/OiB1bmtub3duO1xufTtcblxuLyoqIEThu68gbGnhu4d1IGPhu6dhIHRo4bq7IGvDqW8gdOG7qyBiw6puIG5nb8OgaSB2w6BvIGNhbnZhcyAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2V4dGVybmFsRHJhZ1BheWxvYWQgPSB7XG4gIGtpbmQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjb2xzPzogbnVtYmVyO1xuICByb3dzPzogbnVtYmVyO1xuICBpY29uVGV4dD86IHN0cmluZztcbiAgaWNvbkNsYXNzPzogc3RyaW5nO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG4iXX0=