@projectcor/maia-components 2.11.61-0 → 2.11.62-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,11 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
5
5
  import _typeof from "@babel/runtime/helpers/typeof";
6
- import _regeneratorRuntime from "@babel/runtime/regenerator";
7
6
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8
7
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
9
9
  import { useLazyQuery } from '@apollo/client';
10
10
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
11
11
  import { getRecentClients } from '../services/maia/RecentClients/getRecentClients';
@@ -18,6 +18,7 @@ import { USERS_DIRECTORY } from '../services/query/usersDirectoryQuery';
18
18
  import { SEARCH_QUERY_DEBOUNCE_MS } from '../constants/config';
19
19
  import { useDebounce } from './useDebounce';
20
20
  import { useT } from './useT';
21
+ import { fetchMaia } from '../services/maia/client';
21
22
  var normalizePositiveInt = function normalizePositiveInt(value, fallback) {
22
23
  var parsed = Number(value);
23
24
  if (!Number.isFinite(parsed)) return fallback;
@@ -295,6 +296,62 @@ var formatMcpPrimaryLabel = function formatMcpPrimaryLabel(slug) {
295
296
  return _char.toUpperCase();
296
297
  });
297
298
  };
299
+ var SKILLS_PAGE_LIMIT = 100;
300
+ var _fetchAllSkillPages = /*#__PURE__*/function () {
301
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(offset, accumulated) {
302
+ var _data$data;
303
+ var response, data, page, all, _data$next_offset;
304
+ return _regeneratorRuntime.wrap(function (_context) {
305
+ while (1) switch (_context.prev = _context.next) {
306
+ case 0:
307
+ _context.next = 1;
308
+ return fetchMaia({
309
+ path: "skills?limit=".concat(SKILLS_PAGE_LIMIT, "&offset=").concat(offset),
310
+ method: 'GET'
311
+ });
312
+ case 1:
313
+ response = _context.sent;
314
+ _context.next = 2;
315
+ return response.json();
316
+ case 2:
317
+ data = _context.sent;
318
+ page = (_data$data = data.data) !== null && _data$data !== void 0 ? _data$data : [];
319
+ all = [].concat(_toConsumableArray(accumulated), _toConsumableArray(page));
320
+ if (!(data.has_more && page.length >= SKILLS_PAGE_LIMIT)) {
321
+ _context.next = 3;
322
+ break;
323
+ }
324
+ return _context.abrupt("return", _fetchAllSkillPages((_data$next_offset = data.next_offset) !== null && _data$next_offset !== void 0 ? _data$next_offset : offset + SKILLS_PAGE_LIMIT, all));
325
+ case 3:
326
+ return _context.abrupt("return", all);
327
+ case 4:
328
+ case "end":
329
+ return _context.stop();
330
+ }
331
+ }, _callee);
332
+ }));
333
+ return function fetchAllSkillPages(_x, _x2) {
334
+ return _ref.apply(this, arguments);
335
+ };
336
+ }();
337
+ var mapSkillsToItems = function mapSkillsToItems(skills, searchValue) {
338
+ var q = searchValue.trim().toLowerCase();
339
+ var filtered = q ? skills.filter(function (s) {
340
+ return s.name.toLowerCase().includes(q);
341
+ }) : skills;
342
+ return filtered.map(function (skill) {
343
+ return {
344
+ id: skill.id,
345
+ type: 'skill',
346
+ primary: skill.name,
347
+ primaryHighlight: highlightRange(skill.name, searchValue),
348
+ raw: {
349
+ id: skill.id,
350
+ name: skill.name
351
+ }
352
+ };
353
+ });
354
+ };
298
355
  var mapMcpSlugsToItems = function mapMcpSlugsToItems(slugs, searchValue) {
299
356
  var q = searchValue.trim().toLowerCase();
300
357
  var filtered = slugs;
@@ -319,7 +376,7 @@ var mapMcpSlugsToItems = function mapMcpSlugsToItems(slugs, searchValue) {
319
376
  });
320
377
  };
321
378
  export var useEntitySearch = function useEntitySearch(type, scope) {
322
- var _scope$mcpSlugs, _stableScope$projectI, _stableScope$clientId, _stableScope$agentEnt;
379
+ var _scope$mcpSlugs, _scope$skills, _stableScope$projectI, _stableScope$clientId, _stableScope$agentEnt;
323
380
  var corUser = useUser();
324
381
  var _useT = useT(),
325
382
  t = _useT.t;
@@ -332,37 +389,44 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
332
389
  var debouncedSearchValue = useDebounce(searchValue, SEARCH_QUERY_DEBOUNCE_MS);
333
390
  var _useState3 = useState([]),
334
391
  _useState4 = _slicedToArray(_useState3, 2),
335
- items = _useState4[0],
336
- setItems = _useState4[1];
337
- var _useState5 = useState(false),
392
+ cachedSkills = _useState4[0],
393
+ setCachedSkills = _useState4[1];
394
+ var _useState5 = useState([]),
338
395
  _useState6 = _slicedToArray(_useState5, 2),
339
- loading = _useState6[0],
340
- setLoading = _useState6[1];
396
+ items = _useState6[0],
397
+ setItems = _useState6[1];
341
398
  var _useState7 = useState(false),
342
399
  _useState8 = _slicedToArray(_useState7, 2),
343
- error = _useState8[0],
344
- setError = _useState8[1];
400
+ loading = _useState8[0],
401
+ setLoading = _useState8[1];
345
402
  var _useState9 = useState(false),
346
403
  _useState0 = _slicedToArray(_useState9, 2),
347
- hideRecentsLabel = _useState0[0],
348
- setHideRecentsLabel = _useState0[1];
404
+ error = _useState0[0],
405
+ setError = _useState0[1];
349
406
  var _useState1 = useState(false),
350
407
  _useState10 = _slicedToArray(_useState1, 2),
351
- hasMore = _useState10[0],
352
- setHasMore = _useState10[1];
408
+ hideRecentsLabel = _useState10[0],
409
+ setHideRecentsLabel = _useState10[1];
353
410
  var _useState11 = useState(false),
354
411
  _useState12 = _slicedToArray(_useState11, 2),
355
- isLoadingMore = _useState12[0],
356
- setIsLoadingMore = _useState12[1];
357
- var _useState13 = useState(1),
412
+ hasMore = _useState12[0],
413
+ setHasMore = _useState12[1];
414
+ var _useState13 = useState(false),
358
415
  _useState14 = _slicedToArray(_useState13, 2),
359
- currentPage = _useState14[0],
360
- setCurrentPage = _useState14[1];
361
- var _useState15 = useState('none'),
416
+ isLoadingMore = _useState14[0],
417
+ setIsLoadingMore = _useState14[1];
418
+ var _useState15 = useState(1),
362
419
  _useState16 = _slicedToArray(_useState15, 2),
363
- activePaginationSource = _useState16[0],
364
- setActivePaginationSource = _useState16[1];
420
+ currentPage = _useState16[0],
421
+ setCurrentPage = _useState16[1];
422
+ var _useState17 = useState('none'),
423
+ _useState18 = _slicedToArray(_useState17, 2),
424
+ activePaginationSource = _useState18[0],
425
+ setActivePaginationSource = _useState18[1];
365
426
  var mcpSlugsKey = ((_scope$mcpSlugs = scope === null || scope === void 0 ? void 0 : scope.mcpSlugs) !== null && _scope$mcpSlugs !== void 0 ? _scope$mcpSlugs : []).join('|');
427
+ var skillsKey = ((_scope$skills = scope === null || scope === void 0 ? void 0 : scope.skills) !== null && _scope$skills !== void 0 ? _scope$skills : []).map(function (s) {
428
+ return s.id;
429
+ }).join('|');
366
430
  var showProjectNameInTaskRow = (scope === null || scope === void 0 ? void 0 : scope.agentEntity) !== 'project';
367
431
 
368
432
  // Estabilizamos el scope para no disparar fetchs por cambios de identidad de objeto.
@@ -372,9 +436,10 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
372
436
  clientId: (_scope$clientId = scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && _scope$clientId !== void 0 ? _scope$clientId : null,
373
437
  projectId: (_scope$projectId = scope === null || scope === void 0 ? void 0 : scope.projectId) !== null && _scope$projectId !== void 0 ? _scope$projectId : null,
374
438
  mcpSlugs: (_scope$mcpSlugs2 = scope === null || scope === void 0 ? void 0 : scope.mcpSlugs) !== null && _scope$mcpSlugs2 !== void 0 ? _scope$mcpSlugs2 : [],
439
+ skills: scope === null || scope === void 0 ? void 0 : scope.skills,
375
440
  agentEntity: (_scope$agentEntity = scope === null || scope === void 0 ? void 0 : scope.agentEntity) !== null && _scope$agentEntity !== void 0 ? _scope$agentEntity : null
376
441
  };
377
- }, [scope === null || scope === void 0 ? void 0 : scope.clientId, scope === null || scope === void 0 ? void 0 : scope.projectId, mcpSlugsKey, scope === null || scope === void 0 ? void 0 : scope.agentEntity]);
442
+ }, [scope === null || scope === void 0 ? void 0 : scope.clientId, scope === null || scope === void 0 ? void 0 : scope.projectId, mcpSlugsKey, skillsKey, scope === null || scope === void 0 ? void 0 : scope.agentEntity]);
378
443
 
379
444
  // --- Search: project | task (GraphQL: search) ---
380
445
  var _useLazyQuery = useLazyQuery(SEARCH_ENTITIES, {
@@ -451,15 +516,15 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
451
516
  }),
452
517
  _useLazyQuery0 = _slicedToArray(_useLazyQuery9, 1),
453
518
  fetchProjectsFallback = _useLazyQuery0[0];
454
- var fetchRecent = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
455
- var generation, _stableScope$mcpSlugs, slugs, data, mapped, _data, _mapped, _fallbackData$project, _fallbackData$project2, argumentsFilter, _yield$fetchProjectsF, fallbackData, fallbackMapped, recentTaskFilters, _data2, taskItems, _fallbackData$taskFam, _fallbackData$taskFam2, filter, _yield$fetchTaskFamil, _fallbackData, _data3$users$data, _data3$users, _yield$fetchUsersDire, _data3, _mapped2, meItem, withoutMe, _t;
456
- return _regeneratorRuntime.wrap(function (_context) {
457
- while (1) switch (_context.prev = _context.next) {
519
+ var fetchRecent = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
520
+ var generation, _stableScope$mcpSlugs, slugs, allSkills, data, mapped, _data, _mapped, _fallbackData$project, _fallbackData$project2, argumentsFilter, _yield$fetchProjectsF, fallbackData, fallbackMapped, recentTaskFilters, _data2, taskItems, _fallbackData$taskFam, _fallbackData$taskFam2, filter, _yield$fetchTaskFamil, _fallbackData, _data3$users$data, _data3$users, _yield$fetchUsersDire, _data3, _mapped2, meItem, withoutMe, _t, _t2;
521
+ return _regeneratorRuntime.wrap(function (_context2) {
522
+ while (1) switch (_context2.prev = _context2.next) {
458
523
  case 0:
459
524
  recentsFetchGenerationRef.current += 1;
460
525
  generation = recentsFetchGenerationRef.current;
461
526
  if (!(type === 'mcp')) {
462
- _context.next = 1;
527
+ _context2.next = 1;
463
528
  break;
464
529
  }
465
530
  slugs = (_stableScope$mcpSlugs = stableScope.mcpSlugs) !== null && _stableScope$mcpSlugs !== void 0 ? _stableScope$mcpSlugs : [];
@@ -469,57 +534,112 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
469
534
  setHideRecentsLabel(false);
470
535
  setActivePaginationSource('none');
471
536
  setHasMore(false);
472
- return _context.abrupt("return");
537
+ return _context2.abrupt("return");
473
538
  case 1:
539
+ if (!(type === 'skill')) {
540
+ _context2.next = 10;
541
+ break;
542
+ }
543
+ if (!stableScope.skills) {
544
+ _context2.next = 2;
545
+ break;
546
+ }
547
+ setCachedSkills(stableScope.skills);
548
+ setLoading(false);
549
+ setError(false);
550
+ setItems(mapSkillsToItems(stableScope.skills, ''));
551
+ setHideRecentsLabel(false);
552
+ setActivePaginationSource('none');
553
+ setHasMore(false);
554
+ return _context2.abrupt("return");
555
+ case 2:
556
+ setLoading(true);
557
+ setError(false);
558
+ _context2.prev = 3;
559
+ _context2.next = 4;
560
+ return _fetchAllSkillPages(0, []);
561
+ case 4:
562
+ allSkills = _context2.sent;
563
+ if (!(generation !== recentsFetchGenerationRef.current)) {
564
+ _context2.next = 5;
565
+ break;
566
+ }
567
+ return _context2.abrupt("return");
568
+ case 5:
569
+ setCachedSkills(allSkills);
570
+ setItems(mapSkillsToItems(allSkills, ''));
571
+ setHideRecentsLabel(false);
572
+ setActivePaginationSource('none');
573
+ setHasMore(false);
574
+ _context2.next = 8;
575
+ break;
576
+ case 6:
577
+ _context2.prev = 6;
578
+ _t = _context2["catch"](3);
579
+ if (!(generation !== recentsFetchGenerationRef.current)) {
580
+ _context2.next = 7;
581
+ break;
582
+ }
583
+ return _context2.abrupt("return");
584
+ case 7:
585
+ setError(true);
586
+ setItems([]);
587
+ case 8:
588
+ _context2.prev = 8;
589
+ if (generation === recentsFetchGenerationRef.current) setLoading(false);
590
+ return _context2.finish(8);
591
+ case 9:
592
+ return _context2.abrupt("return");
593
+ case 10:
474
594
  setLoading(true);
475
595
  setError(false);
476
- _context.prev = 2;
596
+ _context2.prev = 11;
477
597
  if (!(type === 'client')) {
478
- _context.next = 6;
598
+ _context2.next = 15;
479
599
  break;
480
600
  }
481
- _context.next = 3;
601
+ _context2.next = 12;
482
602
  return getRecentClients();
483
- case 3:
484
- data = _context.sent;
603
+ case 12:
604
+ data = _context2.sent;
485
605
  if (!(generation !== recentsFetchGenerationRef.current)) {
486
- _context.next = 4;
606
+ _context2.next = 13;
487
607
  break;
488
608
  }
489
- return _context.abrupt("return");
490
- case 4:
609
+ return _context2.abrupt("return");
610
+ case 13:
491
611
  mapped = (data !== null && data !== void 0 ? data : []).map(function (c) {
492
612
  return mapClientToItem(c, '');
493
613
  });
494
614
  if (!(generation !== recentsFetchGenerationRef.current)) {
495
- _context.next = 5;
615
+ _context2.next = 14;
496
616
  break;
497
617
  }
498
- return _context.abrupt("return");
499
- case 5:
618
+ return _context2.abrupt("return");
619
+ case 14:
500
620
  setItems(mapped);
501
621
  setHideRecentsLabel(false);
502
622
  setActivePaginationSource('none');
503
623
  setHasMore(false);
504
- _context.next = 28;
624
+ _context2.next = 37;
505
625
  break;
506
- case 6:
626
+ case 15:
507
627
  if (!(type === 'project')) {
508
- _context.next = 14;
628
+ _context2.next = 23;
509
629
  break;
510
630
  }
511
- _context.next = 7;
631
+ _context2.next = 16;
512
632
  return getRecentProjects(stableScope.clientId ? {
513
633
  clientId: stableScope.clientId
514
634
  } : undefined);
515
- case 7:
516
- _data = _context.sent;
635
+ case 16:
636
+ _data = _context2.sent;
517
637
  if (!(generation !== recentsFetchGenerationRef.current)) {
518
- _context.next = 8;
638
+ _context2.next = 17;
519
639
  break;
520
640
  }
521
- return _context.abrupt("return");
522
- case 8:
641
+ return _context2.abrupt("return");
642
+ case 17:
523
643
  _mapped = (Array.isArray(_data) ? _data : []).map(function (p) {
524
644
  return mapSearchToItem({
525
645
  id: p.id,
@@ -531,13 +651,13 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
531
651
  }, 'project', '');
532
652
  });
533
653
  if (!(_mapped.length === 0)) {
534
- _context.next = 11;
654
+ _context2.next = 20;
535
655
  break;
536
656
  }
537
657
  argumentsFilter = stableScope.clientId !== null && stableScope.clientId !== undefined && stableScope.clientId !== '' ? {
538
658
  client_id: [String(stableScope.clientId)]
539
659
  } : undefined;
540
- _context.next = 9;
660
+ _context2.next = 18;
541
661
  return fetchProjectsFallback({
542
662
  variables: _objectSpread(_objectSpread({}, argumentsFilter ? {
543
663
  arguments: argumentsFilter
@@ -546,15 +666,15 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
546
666
  perPage: 20
547
667
  })
548
668
  });
549
- case 9:
550
- _yield$fetchProjectsF = _context.sent;
669
+ case 18:
670
+ _yield$fetchProjectsF = _context2.sent;
551
671
  fallbackData = _yield$fetchProjectsF.data;
552
672
  if (!(generation !== recentsFetchGenerationRef.current)) {
553
- _context.next = 10;
673
+ _context2.next = 19;
554
674
  break;
555
675
  }
556
- return _context.abrupt("return");
557
- case 10:
676
+ return _context2.abrupt("return");
677
+ case 19:
558
678
  fallbackMapped = ((_fallbackData$project = fallbackData === null || fallbackData === void 0 || (_fallbackData$project2 = fallbackData.projects) === null || _fallbackData$project2 === void 0 ? void 0 : _fallbackData$project2.data) !== null && _fallbackData$project !== void 0 ? _fallbackData$project : []).map(normalizeProjectsFallbackRecord).filter(function (item) {
559
679
  return item !== null;
560
680
  }).map(function (item) {
@@ -564,25 +684,25 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
564
684
  setHideRecentsLabel(fallbackMapped.length > 0);
565
685
  setActivePaginationSource('project-fallback');
566
686
  syncProjectFallbackPagination(fallbackData);
567
- _context.next = 12;
687
+ _context2.next = 21;
568
688
  break;
569
- case 11:
689
+ case 20:
570
690
  setHideRecentsLabel(false);
571
691
  setActivePaginationSource('none');
572
692
  setHasMore(false);
573
- case 12:
693
+ case 21:
574
694
  if (!(generation !== recentsFetchGenerationRef.current)) {
575
- _context.next = 13;
695
+ _context2.next = 22;
576
696
  break;
577
697
  }
578
- return _context.abrupt("return");
579
- case 13:
698
+ return _context2.abrupt("return");
699
+ case 22:
580
700
  setItems(_mapped);
581
- _context.next = 28;
701
+ _context2.next = 37;
582
702
  break;
583
- case 14:
703
+ case 23:
584
704
  if (!(type === 'task')) {
585
- _context.next = 22;
705
+ _context2.next = 31;
586
706
  break;
587
707
  }
588
708
  if (stableScope.agentEntity === 'project') {
@@ -594,21 +714,21 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
594
714
  clientId: stableScope.clientId
595
715
  };
596
716
  }
597
- _context.next = 15;
717
+ _context2.next = 24;
598
718
  return getRecentTasks(recentTaskFilters);
599
- case 15:
600
- _data2 = _context.sent;
719
+ case 24:
720
+ _data2 = _context2.sent;
601
721
  if (!(generation !== recentsFetchGenerationRef.current)) {
602
- _context.next = 16;
722
+ _context2.next = 25;
603
723
  break;
604
724
  }
605
- return _context.abrupt("return");
606
- case 16:
725
+ return _context2.abrupt("return");
726
+ case 25:
607
727
  taskItems = (_data2 !== null && _data2 !== void 0 ? _data2 : []).map(function (task) {
608
728
  return mapRecentTaskToItem(task, '', showProjectNameInTaskRow);
609
729
  });
610
730
  if (!(taskItems.length === 0)) {
611
- _context.next = 19;
731
+ _context2.next = 28;
612
732
  break;
613
733
  }
614
734
  filter = {};
@@ -618,7 +738,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
618
738
  if (stableScope.clientId !== null && stableScope.clientId !== undefined && stableScope.clientId !== '') {
619
739
  filter.clientIds = [String(stableScope.clientId)];
620
740
  }
621
- _context.next = 17;
741
+ _context2.next = 26;
622
742
  return fetchTaskFamilyFallback({
623
743
  variables: {
624
744
  filter: _objectSpread({
@@ -630,15 +750,15 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
630
750
  }
631
751
  }
632
752
  });
633
- case 17:
634
- _yield$fetchTaskFamil = _context.sent;
753
+ case 26:
754
+ _yield$fetchTaskFamil = _context2.sent;
635
755
  _fallbackData = _yield$fetchTaskFamil.data;
636
756
  if (!(generation !== recentsFetchGenerationRef.current)) {
637
- _context.next = 18;
757
+ _context2.next = 27;
638
758
  break;
639
759
  }
640
- return _context.abrupt("return");
641
- case 18:
760
+ return _context2.abrupt("return");
761
+ case 27:
642
762
  taskItems = ((_fallbackData$taskFam = _fallbackData === null || _fallbackData === void 0 || (_fallbackData$taskFam2 = _fallbackData.taskFamily) === null || _fallbackData$taskFam2 === void 0 ? void 0 : _fallbackData$taskFam2.data) !== null && _fallbackData$taskFam !== void 0 ? _fallbackData$taskFam : []).map(normalizeTaskFamilyRecord).filter(function (item) {
643
763
  return item !== null;
644
764
  }).map(function (task) {
@@ -647,52 +767,52 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
647
767
  setHideRecentsLabel(taskItems.length > 0);
648
768
  setActivePaginationSource('task-fallback');
649
769
  syncTaskFallbackPagination(_fallbackData);
650
- _context.next = 20;
770
+ _context2.next = 29;
651
771
  break;
652
- case 19:
772
+ case 28:
653
773
  setHideRecentsLabel(false);
654
774
  setActivePaginationSource('none');
655
775
  setHasMore(false);
656
- case 20:
776
+ case 29:
657
777
  if (!(generation !== recentsFetchGenerationRef.current)) {
658
- _context.next = 21;
778
+ _context2.next = 30;
659
779
  break;
660
780
  }
661
- return _context.abrupt("return");
662
- case 21:
781
+ return _context2.abrupt("return");
782
+ case 30:
663
783
  setItems(taskItems);
664
- _context.next = 28;
784
+ _context2.next = 37;
665
785
  break;
666
- case 22:
786
+ case 31:
667
787
  if (!(type === 'user')) {
668
- _context.next = 26;
788
+ _context2.next = 35;
669
789
  break;
670
790
  }
671
- _context.next = 23;
791
+ _context2.next = 32;
672
792
  return fetchUsersDirectory({
673
793
  variables: {
674
794
  filters: buildUsersDirectoryFilters(''),
675
795
  page: 1
676
796
  }
677
797
  });
678
- case 23:
679
- _yield$fetchUsersDire = _context.sent;
798
+ case 32:
799
+ _yield$fetchUsersDire = _context2.sent;
680
800
  _data3 = _yield$fetchUsersDire.data;
681
801
  if (!(generation !== recentsFetchGenerationRef.current)) {
682
- _context.next = 24;
802
+ _context2.next = 33;
683
803
  break;
684
804
  }
685
- return _context.abrupt("return");
686
- case 24:
805
+ return _context2.abrupt("return");
806
+ case 33:
687
807
  _mapped2 = ((_data3$users$data = _data3 === null || _data3 === void 0 || (_data3$users = _data3.users) === null || _data3$users === void 0 ? void 0 : _data3$users.data) !== null && _data3$users$data !== void 0 ? _data3$users$data : []).map(function (u) {
688
808
  return mapUserToItem(u, '');
689
809
  });
690
810
  if (!(generation !== recentsFetchGenerationRef.current)) {
691
- _context.next = 25;
811
+ _context2.next = 34;
692
812
  break;
693
813
  }
694
- return _context.abrupt("return");
695
- case 25:
814
+ return _context2.abrupt("return");
815
+ case 34:
696
816
  meItem = mapCorUserToUserItem(corUser, '', t('contextMention.me'));
697
817
  withoutMe = _mapped2.filter(function (item) {
698
818
  return String(item.id) !== String(meItem.id);
@@ -701,46 +821,46 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
701
821
  syncUsersPagination(_data3);
702
822
  setHideRecentsLabel(false);
703
823
  setActivePaginationSource('users');
704
- _context.next = 28;
824
+ _context2.next = 37;
705
825
  break;
706
- case 26:
826
+ case 35:
707
827
  if (!(generation !== recentsFetchGenerationRef.current)) {
708
- _context.next = 27;
828
+ _context2.next = 36;
709
829
  break;
710
830
  }
711
- return _context.abrupt("return");
712
- case 27:
831
+ return _context2.abrupt("return");
832
+ case 36:
713
833
  setItems([]);
714
834
  setHideRecentsLabel(false);
715
835
  setActivePaginationSource('none');
716
836
  setHasMore(false);
717
837
  setCurrentPage(1);
718
- case 28:
719
- _context.next = 31;
838
+ case 37:
839
+ _context2.next = 40;
720
840
  break;
721
- case 29:
722
- _context.prev = 29;
723
- _t = _context["catch"](2);
841
+ case 38:
842
+ _context2.prev = 38;
843
+ _t2 = _context2["catch"](11);
724
844
  if (!(generation !== recentsFetchGenerationRef.current)) {
725
- _context.next = 30;
845
+ _context2.next = 39;
726
846
  break;
727
847
  }
728
- return _context.abrupt("return");
729
- case 30:
848
+ return _context2.abrupt("return");
849
+ case 39:
730
850
  setError(true);
731
851
  setItems([]);
732
852
  setHideRecentsLabel(false);
733
- case 31:
734
- _context.prev = 31;
853
+ case 40:
854
+ _context2.prev = 40;
735
855
  if (generation === recentsFetchGenerationRef.current) {
736
856
  setLoading(false);
737
857
  }
738
- return _context.finish(31);
739
- case 32:
858
+ return _context2.finish(40);
859
+ case 41:
740
860
  case "end":
741
- return _context.stop();
861
+ return _context2.stop();
742
862
  }
743
- }, _callee, null, [[2, 29, 31, 32]]);
863
+ }, _callee2, null, [[3, 6, 8, 9], [11, 38, 40, 41]]);
744
864
  })), [type, stableScope, fetchUsersDirectory, fetchTaskFamilyFallback, fetchProjectsFallback, syncUsersPagination, syncTaskFallbackPagination, syncProjectFallbackPagination, showProjectNameInTaskRow, corUser, t]);
745
865
 
746
866
  // Disparar search al cambiar debounced value
@@ -754,6 +874,12 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
754
874
  setItems(mapMcpSlugsToItems(slugs, q));
755
875
  return;
756
876
  }
877
+ if (type === 'skill') {
878
+ setLoading(false);
879
+ setError(false);
880
+ setItems(mapSkillsToItems(cachedSkills, q));
881
+ return;
882
+ }
757
883
  if (!q) return;
758
884
  if (type === 'client') {
759
885
  fetchSearchClients({
@@ -788,11 +914,12 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
788
914
  setActivePaginationSource('none');
789
915
  setHasMore(false);
790
916
  }
791
- }, [debouncedSearchValue, type, stableScope, fetchSearchEntities, fetchSearchClients, fetchUsersDirectory]);
917
+ }, [debouncedSearchValue, type, stableScope, fetchSearchEntities, fetchSearchClients, fetchUsersDirectory, cachedSkills]);
792
918
 
793
919
  // Sincronizar resultados de search
794
920
  useEffect(function () {
795
921
  if (type === 'mcp') return;
922
+ if (type === 'skill') return;
796
923
  var q = debouncedSearchValue.trim();
797
924
  if (!q) return;
798
925
  setHideRecentsLabel(false);
@@ -848,28 +975,28 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
848
975
  }
849
976
  }
850
977
  }, [searchData, clientsData, usersData, searchLoading, clientsLoading, usersLoading, searchError, clientsError, usersError, debouncedSearchValue, type, syncClientsPagination, syncUsersPagination, showProjectNameInTaskRow, corUser, t]);
851
- var loadMore = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
852
- var safeCurrentPage, nextPage, q, loadMoreBaselineGen, _data$users$data, _data$users, _yield$fetchUsersDire2, data, nextItems, _data4$clients$data, _data4$clients, _yield$fetchSearchCli, _data4, _nextItems, _data5$taskFamily$dat, _data5$taskFamily, filter, _yield$fetchTaskFamil2, _data5, _nextItems2, _data6$projects$data, _data6$projects, argumentsFilter, _yield$fetchProjectsF2, _data6, _nextItems3, _t2;
853
- return _regeneratorRuntime.wrap(function (_context2) {
854
- while (1) switch (_context2.prev = _context2.next) {
978
+ var loadMore = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
979
+ var safeCurrentPage, nextPage, q, loadMoreBaselineGen, _data$users$data, _data$users, _yield$fetchUsersDire2, data, nextItems, _data4$clients$data, _data4$clients, _yield$fetchSearchCli, _data4, _nextItems, _data5$taskFamily$dat, _data5$taskFamily, filter, _yield$fetchTaskFamil2, _data5, _nextItems2, _data6$projects$data, _data6$projects, argumentsFilter, _yield$fetchProjectsF2, _data6, _nextItems3, _t3;
980
+ return _regeneratorRuntime.wrap(function (_context3) {
981
+ while (1) switch (_context3.prev = _context3.next) {
855
982
  case 0:
856
983
  if (!(isLoadingMore || !hasMore || activePaginationSource === 'none')) {
857
- _context2.next = 1;
984
+ _context3.next = 1;
858
985
  break;
859
986
  }
860
- return _context2.abrupt("return");
987
+ return _context3.abrupt("return");
861
988
  case 1:
862
989
  safeCurrentPage = normalizePositiveInt(currentPage, 1);
863
990
  nextPage = safeCurrentPage + 1;
864
991
  q = debouncedSearchValue.trim();
865
992
  loadMoreBaselineGen = recentsFetchGenerationRef.current;
866
993
  setIsLoadingMore(true);
867
- _context2.prev = 2;
994
+ _context3.prev = 2;
868
995
  if (!(activePaginationSource === 'users')) {
869
- _context2.next = 5;
996
+ _context3.next = 5;
870
997
  break;
871
998
  }
872
- _context2.next = 3;
999
+ _context3.next = 3;
873
1000
  return fetchUsersDirectory({
874
1001
  variables: {
875
1002
  filters: buildUsersDirectoryFilters(q),
@@ -877,13 +1004,13 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
877
1004
  }
878
1005
  });
879
1006
  case 3:
880
- _yield$fetchUsersDire2 = _context2.sent;
1007
+ _yield$fetchUsersDire2 = _context3.sent;
881
1008
  data = _yield$fetchUsersDire2.data;
882
1009
  if (!(loadMoreBaselineGen !== recentsFetchGenerationRef.current)) {
883
- _context2.next = 4;
1010
+ _context3.next = 4;
884
1011
  break;
885
1012
  }
886
- return _context2.abrupt("return");
1013
+ return _context3.abrupt("return");
887
1014
  case 4:
888
1015
  nextItems = ((_data$users$data = data === null || data === void 0 || (_data$users = data.users) === null || _data$users === void 0 ? void 0 : _data$users.data) !== null && _data$users$data !== void 0 ? _data$users$data : []).map(function (u) {
889
1016
  return mapUserToItem(u, q);
@@ -912,14 +1039,14 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
912
1039
  return [].concat(_toConsumableArray(prev), _toConsumableArray(appended));
913
1040
  });
914
1041
  syncUsersPagination(data);
915
- _context2.next = 14;
1042
+ _context3.next = 14;
916
1043
  break;
917
1044
  case 5:
918
1045
  if (!(activePaginationSource === 'clients-search')) {
919
- _context2.next = 8;
1046
+ _context3.next = 8;
920
1047
  break;
921
1048
  }
922
- _context2.next = 6;
1049
+ _context3.next = 6;
923
1050
  return fetchSearchClients({
924
1051
  variables: {
925
1052
  filter: {
@@ -930,13 +1057,13 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
930
1057
  }
931
1058
  });
932
1059
  case 6:
933
- _yield$fetchSearchCli = _context2.sent;
1060
+ _yield$fetchSearchCli = _context3.sent;
934
1061
  _data4 = _yield$fetchSearchCli.data;
935
1062
  if (!(loadMoreBaselineGen !== recentsFetchGenerationRef.current)) {
936
- _context2.next = 7;
1063
+ _context3.next = 7;
937
1064
  break;
938
1065
  }
939
- return _context2.abrupt("return");
1066
+ return _context3.abrupt("return");
940
1067
  case 7:
941
1068
  _nextItems = ((_data4$clients$data = _data4 === null || _data4 === void 0 || (_data4$clients = _data4.clients) === null || _data4$clients === void 0 ? void 0 : _data4$clients.data) !== null && _data4$clients$data !== void 0 ? _data4$clients$data : []).map(function (c) {
942
1069
  return mapClientToItem(c, q);
@@ -951,11 +1078,11 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
951
1078
  return [].concat(_toConsumableArray(prev), _toConsumableArray(appended));
952
1079
  });
953
1080
  syncClientsPagination(_data4);
954
- _context2.next = 14;
1081
+ _context3.next = 14;
955
1082
  break;
956
1083
  case 8:
957
1084
  if (!(activePaginationSource === 'task-fallback')) {
958
- _context2.next = 11;
1085
+ _context3.next = 11;
959
1086
  break;
960
1087
  }
961
1088
  filter = {};
@@ -965,7 +1092,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
965
1092
  if (stableScope.clientId !== null && stableScope.clientId !== undefined && stableScope.clientId !== '') {
966
1093
  filter.clientIds = [String(stableScope.clientId)];
967
1094
  }
968
- _context2.next = 9;
1095
+ _context3.next = 9;
969
1096
  return fetchTaskFamilyFallback({
970
1097
  variables: {
971
1098
  filter: _objectSpread({
@@ -978,13 +1105,13 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
978
1105
  }
979
1106
  });
980
1107
  case 9:
981
- _yield$fetchTaskFamil2 = _context2.sent;
1108
+ _yield$fetchTaskFamil2 = _context3.sent;
982
1109
  _data5 = _yield$fetchTaskFamil2.data;
983
1110
  if (!(loadMoreBaselineGen !== recentsFetchGenerationRef.current)) {
984
- _context2.next = 10;
1111
+ _context3.next = 10;
985
1112
  break;
986
1113
  }
987
- return _context2.abrupt("return");
1114
+ return _context3.abrupt("return");
988
1115
  case 10:
989
1116
  _nextItems2 = ((_data5$taskFamily$dat = _data5 === null || _data5 === void 0 || (_data5$taskFamily = _data5.taskFamily) === null || _data5$taskFamily === void 0 ? void 0 : _data5$taskFamily.data) !== null && _data5$taskFamily$dat !== void 0 ? _data5$taskFamily$dat : []).map(normalizeTaskFamilyRecord).filter(function (item) {
990
1117
  return item !== null;
@@ -1001,17 +1128,17 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
1001
1128
  return [].concat(_toConsumableArray(prev), _toConsumableArray(appended));
1002
1129
  });
1003
1130
  syncTaskFallbackPagination(_data5);
1004
- _context2.next = 14;
1131
+ _context3.next = 14;
1005
1132
  break;
1006
1133
  case 11:
1007
1134
  if (!(activePaginationSource === 'project-fallback')) {
1008
- _context2.next = 14;
1135
+ _context3.next = 14;
1009
1136
  break;
1010
1137
  }
1011
1138
  argumentsFilter = stableScope.clientId !== null && stableScope.clientId !== undefined && stableScope.clientId !== '' ? {
1012
1139
  client_id: [String(stableScope.clientId)]
1013
1140
  } : undefined;
1014
- _context2.next = 12;
1141
+ _context3.next = 12;
1015
1142
  return fetchProjectsFallback({
1016
1143
  variables: _objectSpread(_objectSpread({}, argumentsFilter ? {
1017
1144
  arguments: argumentsFilter
@@ -1021,13 +1148,13 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
1021
1148
  })
1022
1149
  });
1023
1150
  case 12:
1024
- _yield$fetchProjectsF2 = _context2.sent;
1151
+ _yield$fetchProjectsF2 = _context3.sent;
1025
1152
  _data6 = _yield$fetchProjectsF2.data;
1026
1153
  if (!(loadMoreBaselineGen !== recentsFetchGenerationRef.current)) {
1027
- _context2.next = 13;
1154
+ _context3.next = 13;
1028
1155
  break;
1029
1156
  }
1030
- return _context2.abrupt("return");
1157
+ return _context3.abrupt("return");
1031
1158
  case 13:
1032
1159
  _nextItems3 = ((_data6$projects$data = _data6 === null || _data6 === void 0 || (_data6$projects = _data6.projects) === null || _data6$projects === void 0 ? void 0 : _data6$projects.data) !== null && _data6$projects$data !== void 0 ? _data6$projects$data : []).map(normalizeProjectsFallbackRecord).filter(function (item) {
1033
1160
  return item !== null;
@@ -1045,34 +1172,34 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
1045
1172
  });
1046
1173
  syncProjectFallbackPagination(_data6);
1047
1174
  case 14:
1048
- _context2.next = 17;
1175
+ _context3.next = 17;
1049
1176
  break;
1050
1177
  case 15:
1051
- _context2.prev = 15;
1052
- _t2 = _context2["catch"](2);
1178
+ _context3.prev = 15;
1179
+ _t3 = _context3["catch"](2);
1053
1180
  if (!(loadMoreBaselineGen !== recentsFetchGenerationRef.current)) {
1054
- _context2.next = 16;
1181
+ _context3.next = 16;
1055
1182
  break;
1056
1183
  }
1057
- return _context2.abrupt("return");
1184
+ return _context3.abrupt("return");
1058
1185
  case 16:
1059
1186
  console.error('[useEntitySearch] loadMore failed', {
1060
1187
  source: activePaginationSource,
1061
1188
  nextPage: nextPage,
1062
- error: _t2
1189
+ error: _t3
1063
1190
  });
1064
1191
  // Evita loop de reintentos automáticos por scroll cuando backend está caído (ej. 503).
1065
1192
  setError(true);
1066
1193
  setHasMore(false);
1067
1194
  case 17:
1068
- _context2.prev = 17;
1195
+ _context3.prev = 17;
1069
1196
  setIsLoadingMore(false);
1070
- return _context2.finish(17);
1197
+ return _context3.finish(17);
1071
1198
  case 18:
1072
1199
  case "end":
1073
- return _context2.stop();
1200
+ return _context3.stop();
1074
1201
  }
1075
- }, _callee2, null, [[2, 15, 17, 18]]);
1202
+ }, _callee3, null, [[2, 15, 17, 18]]);
1076
1203
  })), [isLoadingMore, hasMore, currentPage, activePaginationSource, debouncedSearchValue, fetchUsersDirectory, fetchSearchClients, fetchTaskFamilyFallback, fetchProjectsFallback, stableScope.projectId, stableScope.clientId, showProjectNameInTaskRow, corUser, t, syncClientsPagination, syncUsersPagination, syncTaskFallbackPagination, syncProjectFallbackPagination]);
1077
1204
 
1078
1205
  // Mantenemos una ref a la última fetchRecent para que el effect de recents no se
@@ -1084,7 +1211,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
1084
1211
 
1085
1212
  // Trigger de recents: los recents de user NO dependen del scope, así que cambiar
1086
1213
  // de proyecto/cliente no debe re-fetchearlos. Los tipos scopeados (project/task) sí.
1087
- var recentsTrigger = type === 'user' ? 'user' : "".concat(type, "|").concat((_stableScope$projectI = stableScope.projectId) !== null && _stableScope$projectI !== void 0 ? _stableScope$projectI : '', "|").concat((_stableScope$clientId = stableScope.clientId) !== null && _stableScope$clientId !== void 0 ? _stableScope$clientId : '', "|").concat((_stableScope$agentEnt = stableScope.agentEntity) !== null && _stableScope$agentEnt !== void 0 ? _stableScope$agentEnt : '', "|").concat(mcpSlugsKey);
1214
+ var recentsTrigger = type === 'user' || type === 'skill' ? type : "".concat(type, "|").concat((_stableScope$projectI = stableScope.projectId) !== null && _stableScope$projectI !== void 0 ? _stableScope$projectI : '', "|").concat((_stableScope$clientId = stableScope.clientId) !== null && _stableScope$clientId !== void 0 ? _stableScope$clientId : '', "|").concat((_stableScope$agentEnt = stableScope.agentEntity) !== null && _stableScope$agentEnt !== void 0 ? _stableScope$agentEnt : '', "|").concat(mcpSlugsKey);
1088
1215
 
1089
1216
  // Cuando se limpia el search, volver a recents
1090
1217
  useEffect(function () {
@@ -1105,4 +1232,4 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
1105
1232
  fetchRecent: fetchRecent
1106
1233
  };
1107
1234
  };
1108
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXp5UXVlcnkiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImdldFJlY2VudENsaWVudHMiLCJnZXRSZWNlbnRQcm9qZWN0cyIsImdldFJlY2VudFRhc2tzIiwidXNlVXNlciIsIlBST0pFQ1RTX0ZBTExCQUNLIiwiU0VBUkNIX0VOVElUSUVTIiwiVEFTS19GQU1JTFlfRkFMTEJBQ0siLCJTRUFSQ0hfQ0xJRU5UUyIsIlVTRVJTX0RJUkVDVE9SWSIsIlNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUyIsInVzZURlYm91bmNlIiwidXNlVCIsIm5vcm1hbGl6ZVBvc2l0aXZlSW50IiwidmFsdWUiLCJmYWxsYmFjayIsInBhcnNlZCIsIk51bWJlciIsImlzRmluaXRlIiwibm9ybWFsaXplZCIsIk1hdGgiLCJmbG9vciIsIkJBU0VfRklMVEVSU19CWV9UWVBFIiwicHJvamVjdCIsImFyY2hpdmVkIiwidGFzayIsImJ1aWxkVGFza1NlYXJjaEV4dHJhRW50cmllcyIsInNjb3BlIiwicmF3Q2xpZW50IiwiY2xpZW50SWQiLCJ1bmRlZmluZWQiLCJTdHJpbmciLCJyYXdQcm9qZWN0IiwicHJvamVjdElkIiwiYWdlbnRFbnRpdHkiLCJlbnRyaWVzIiwicHVzaENsaWVudCIsInB1c2giLCJwdXNoUHJvamVjdCIsImJ1aWxkVGFza1NlYXJjaEV4dHJhIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsImJ1aWxkUHJvamVjdFNlYXJjaEV4dHJhIiwiYnVpbGRTZWFyY2hFbnRpdGllc0V4dHJhIiwidHlwZSIsImJ1aWxkRmlsdGVyc0ZvclR5cGUiLCJidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyIsInEiLCJiYXNlIiwid2l0aFBvc2l0aW9uIiwid2l0aFRlYW1zIiwidHJpbW1lZFEiLCJ0cmltIiwic2VhcmNoSW5wdXQiLCJoaWdobGlnaHRSYW5nZSIsInRleHQiLCJzZWFyY2hWYWx1ZSIsImlkeCIsInRvTG93ZXJDYXNlIiwiaW5kZXhPZiIsInN0YXJ0IiwiZmlyc3REZWZpbmVkIiwiX2xlbiIsImFyZ3VtZW50cyIsInZhbHVlcyIsIkFycmF5IiwiX2tleSIsImZpbmQiLCJub3JtYWxpemVUcmltbWVkU3RyaW5nIiwiZ2V0VXNlclBvc2l0aW9uTmFtZSIsInVzZXJQb3NpdGlvbiIsIl90eXBlb2YiLCJuYW1lIiwibWFwQ2xpZW50VG9JdGVtIiwiYyIsIl9jJHRvdGFsUHJveWVjdG9zIiwiX2MkdG90YWxQcm95ZWN0b3MyIiwiaWQiLCJwcmltYXJ5IiwicHJpbWFyeUhpZ2hsaWdodCIsImJyZWFkY3J1bWIiLCJjb3VudCIsInRvdGFsUHJveWVjdG9zIiwiY291bnRMYWJlbCIsInJhdyIsIm1hcFVzZXJUb0l0ZW0iLCJ1IiwiX3UkZmlyc3ROYW1lIiwiX3UkbGFzdE5hbWUiLCJfdSRwaWN0dXJlIiwiX3UkdXNlclBvc2l0aW9uJG5hbWUiLCJfdSR1c2VyUG9zaXRpb24iLCJfdSRlbWFpbCIsImZ1bGxOYW1lIiwiY29uY2F0IiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJlbWFpbCIsInBpY3R1cmUiLCJwb3NpdGlvbk5hbWUiLCJtYXBDb3JVc2VyVG9Vc2VySXRlbSIsInVzZXIiLCJtZUxhYmVsIiwiX3VzZXIkZmlyc3ROYW1lIiwiX3VzZXIkbGFzdE5hbWUiLCJwb3NpdGlvbkxpbmUiLCJ1c2VyX3Bvc2l0aW9uIiwibWFwUmVjZW50VGFza1RvSXRlbSIsIl90YXNrJHByb2plY3ROYW1lIiwic2hvd1Byb2plY3ROYW1lSW5UYXNrUm93IiwidGl0bGUiLCJwcm9qZWN0TmFtZSIsInBhcmVudCIsIm5vcm1hbGl6ZVRhc2tGYW1pbHlSZWNvcmQiLCJyZWNvcmQiLCJfcmVjb3JkJHRpdGxlIiwiX2ZpcnN0RGVmaW5lZCIsIl9yZWNvcmQkcHJvamVjdCIsIl9yZWNvcmQkZmF0aGVyIiwiX3JlY29yZCRmYXRoZXIyIiwidGFza0ZhbWlseUlkIiwiX2lkIiwiZmF0aGVyIiwiaGFzRmF0aGVyIiwidGFza0ZhdGhlciIsIm5vcm1hbGl6ZVByb2plY3RzRmFsbGJhY2tSZWNvcmQiLCJfcmVjb3JkJG5hbWUiLCJfZmlyc3REZWZpbmVkMiIsIl9yZWNvcmQkY2xpZW50IiwiX3JlY29yZCRjbGllbnQkbmFtZSIsIl9yZWNvcmQkY2xpZW50MiIsImNsaWVudCIsImNsaWVudE5hbWUiLCJtYXBTZWFyY2hUb0l0ZW0iLCJyIiwiX3IkcHJvamVjdE5hbWUiLCJfciRwcm9qZWN0TmFtZTIiLCJfciRjbGllbnRJZCIsIl9yJGNsaWVudE5hbWUiLCJfciRmZWVJZCIsIl9mYXRoZXIkdGl0bGUiLCJ0YXNrUHJvamVjdE5hbWUiLCJmZWVJZCIsImZhdGhlcklkIiwiZmF0aGVyVGl0bGUiLCJmb3JtYXRNY3BQcmltYXJ5TGFiZWwiLCJzbHVnIiwicmVwbGFjZSIsImNoYXIiLCJ0b1VwcGVyQ2FzZSIsIm1hcE1jcFNsdWdzVG9JdGVtcyIsInNsdWdzIiwiZmlsdGVyZWQiLCJmaWx0ZXIiLCJzIiwiaW5jbHVkZXMiLCJtYXAiLCJ1c2VFbnRpdHlTZWFyY2giLCJfc2NvcGUkbWNwU2x1Z3MiLCJfc3RhYmxlU2NvcGUkcHJvamVjdEkiLCJfc3RhYmxlU2NvcGUkY2xpZW50SWQiLCJfc3RhYmxlU2NvcGUkYWdlbnRFbnQiLCJjb3JVc2VyIiwiX3VzZVQiLCJ0IiwicmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNldFNlYXJjaFZhbHVlIiwiZGVib3VuY2VkU2VhcmNoVmFsdWUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsIml0ZW1zIiwic2V0SXRlbXMiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJlcnJvciIsInNldEVycm9yIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJoaWRlUmVjZW50c0xhYmVsIiwic2V0SGlkZVJlY2VudHNMYWJlbCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImhhc01vcmUiLCJzZXRIYXNNb3JlIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsImlzTG9hZGluZ01vcmUiLCJzZXRJc0xvYWRpbmdNb3JlIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsImN1cnJlbnRQYWdlIiwic2V0Q3VycmVudFBhZ2UiLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiYWN0aXZlUGFnaW5hdGlvblNvdXJjZSIsInNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UiLCJtY3BTbHVnc0tleSIsIm1jcFNsdWdzIiwiam9pbiIsInN0YWJsZVNjb3BlIiwiX3Njb3BlJGNsaWVudElkIiwiX3Njb3BlJHByb2plY3RJZCIsIl9zY29wZSRtY3BTbHVnczIiLCJfc2NvcGUkYWdlbnRFbnRpdHkiLCJfdXNlTGF6eVF1ZXJ5IiwidmFyaWFibGVzIiwibGltaXQiLCJmZXRjaFBvbGljeSIsIl91c2VMYXp5UXVlcnkyIiwiZmV0Y2hTZWFyY2hFbnRpdGllcyIsIl91c2VMYXp5UXVlcnkyJCIsInNlYXJjaERhdGEiLCJkYXRhIiwic2VhcmNoTG9hZGluZyIsInNlYXJjaEVycm9yIiwiX3VzZUxhenlRdWVyeTMiLCJfdXNlTGF6eVF1ZXJ5NCIsImZldGNoU2VhcmNoQ2xpZW50cyIsIl91c2VMYXp5UXVlcnk0JCIsImNsaWVudHNEYXRhIiwiY2xpZW50c0xvYWRpbmciLCJjbGllbnRzRXJyb3IiLCJfdXNlTGF6eVF1ZXJ5NSIsIl91c2VMYXp5UXVlcnk2IiwiZmV0Y2hVc2Vyc0RpcmVjdG9yeSIsIl91c2VMYXp5UXVlcnk2JCIsInVzZXJzRGF0YSIsInVzZXJzTG9hZGluZyIsInVzZXJzRXJyb3IiLCJzeW5jVXNlcnNQYWdpbmF0aW9uIiwicGF5bG9hZCIsIl9wYXlsb2FkJHVzZXJzIiwiX3BheWxvYWQkdXNlcnMyIiwicGFnZSIsInVzZXJzIiwibGFzdFBhZ2UiLCJzeW5jQ2xpZW50c1BhZ2luYXRpb24iLCJfcGF5bG9hZCRjbGllbnRzIiwiX3BheWxvYWQkY2xpZW50czIiLCJjbGllbnRzIiwic3luY1Rhc2tGYWxsYmFja1BhZ2luYXRpb24iLCJfcGF5bG9hZCR0YXNrRmFtaWx5IiwiX3BheWxvYWQkdGFza0ZhbWlseTIiLCJyYXdQYWdlIiwidGFza0ZhbWlseSIsInN5bmNQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uIiwiX3BheWxvYWQkcHJvamVjdHMiLCJfcGF5bG9hZCRwcm9qZWN0czIiLCJwcm9qZWN0cyIsIl91c2VMYXp5UXVlcnk3IiwiX3VzZUxhenlRdWVyeTgiLCJmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayIsIl91c2VMYXp5UXVlcnk5IiwiX3VzZUxhenlRdWVyeTAiLCJmZXRjaFByb2plY3RzRmFsbGJhY2siLCJmZXRjaFJlY2VudCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZ2VuZXJhdGlvbiIsIl9zdGFibGVTY29wZSRtY3BTbHVncyIsIm1hcHBlZCIsIl9kYXRhIiwiX21hcHBlZCIsIl9mYWxsYmFja0RhdGEkcHJvamVjdCIsIl9mYWxsYmFja0RhdGEkcHJvamVjdDIiLCJhcmd1bWVudHNGaWx0ZXIiLCJfeWllbGQkZmV0Y2hQcm9qZWN0c0YiLCJmYWxsYmFja0RhdGEiLCJmYWxsYmFja01hcHBlZCIsInJlY2VudFRhc2tGaWx0ZXJzIiwiX2RhdGEyIiwidGFza0l0ZW1zIiwiX2ZhbGxiYWNrRGF0YSR0YXNrRmFtIiwiX2ZhbGxiYWNrRGF0YSR0YXNrRmFtMiIsIl95aWVsZCRmZXRjaFRhc2tGYW1pbCIsIl9mYWxsYmFja0RhdGEiLCJfZGF0YTMkdXNlcnMkZGF0YSIsIl9kYXRhMyR1c2VycyIsIl95aWVsZCRmZXRjaFVzZXJzRGlyZSIsIl9kYXRhMyIsIl9tYXBwZWQyIiwibWVJdGVtIiwid2l0aG91dE1lIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImN1cnJlbnQiLCJhYnJ1cHQiLCJzZW50IiwiaXNBcnJheSIsInAiLCJjbGllbnRfaWQiLCJfb2JqZWN0U3ByZWFkIiwicGVyUGFnZSIsIml0ZW0iLCJwcm9qZWN0SWRzIiwiY2xpZW50SWRzIiwicGFnaW5hdGlvbiIsIm9mZnNldCIsInNpemUiLCJmaWx0ZXJzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZmluaXNoIiwic3RvcCIsIl9zdGFibGVTY29wZSRtY3BTbHVnczIiLCJleHRyYSIsIl9jbGllbnRzRGF0YSRjbGllbnRzIiwiX3VzZXJzRGF0YSR1c2VycyIsIm1lSWQiLCJoYXNNZUluUmVzdWx0cyIsInNvbWUiLCJzZWFyY2giLCJsb2FkTW9yZSIsIl9jYWxsZWUyIiwic2FmZUN1cnJlbnRQYWdlIiwibmV4dFBhZ2UiLCJsb2FkTW9yZUJhc2VsaW5lR2VuIiwiX2RhdGEkdXNlcnMkZGF0YSIsIl9kYXRhJHVzZXJzIiwiX3lpZWxkJGZldGNoVXNlcnNEaXJlMiIsIm5leHRJdGVtcyIsIl9kYXRhNCRjbGllbnRzJGRhdGEiLCJfZGF0YTQkY2xpZW50cyIsIl95aWVsZCRmZXRjaFNlYXJjaENsaSIsIl9kYXRhNCIsIl9uZXh0SXRlbXMiLCJfZGF0YTUkdGFza0ZhbWlseSRkYXQiLCJfZGF0YTUkdGFza0ZhbWlseSIsIl95aWVsZCRmZXRjaFRhc2tGYW1pbDIiLCJfZGF0YTUiLCJfbmV4dEl0ZW1zMiIsIl9kYXRhNiRwcm9qZWN0cyRkYXRhIiwiX2RhdGE2JHByb2plY3RzIiwiX3lpZWxkJGZldGNoUHJvamVjdHNGMiIsIl9kYXRhNiIsIl9uZXh0SXRlbXMzIiwiX3QyIiwiX2NvbnRleHQyIiwiX3ByZXYkIiwiZXhpc3RpbmdJZHMiLCJTZXQiLCJhcHBlbmRlZCIsImhhcyIsImNvbnNvbGUiLCJzb3VyY2UiLCJmZXRjaFJlY2VudFJlZiIsInJlY2VudHNUcmlnZ2VyIiwidXBkYXRlU2VhcmNoVmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlRW50aXR5U2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUxhenlRdWVyeSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0UmVjZW50Q2xpZW50cyB9IGZyb20gJy4uL3NlcnZpY2VzL21haWEvUmVjZW50Q2xpZW50cy9nZXRSZWNlbnRDbGllbnRzJ1xuaW1wb3J0IHsgZ2V0UmVjZW50UHJvamVjdHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFByb2plY3RzL2dldFJlY2VudFByb2plY3RzJ1xuaW1wb3J0IHsgZ2V0UmVjZW50VGFza3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFRhc2tzL2dldFJlY2VudFRhc2tzJ1xuaW1wb3J0IHR5cGUgeyBSZWNlbnRUYXNrSXRlbSB9IGZyb20gJy4uL3NlcnZpY2VzL21haWEvUmVjZW50VGFza3MvZ2V0UmVjZW50VGFza3MnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IFBST0pFQ1RTX0ZBTExCQUNLLCBTRUFSQ0hfRU5USVRJRVMsIFRBU0tfRkFNSUxZX0ZBTExCQUNLIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvZW50aXR5U2VhcmNoUXVlcnknXG5pbXBvcnQgeyBTRUFSQ0hfQ0xJRU5UUyB9IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L0NsaWVudFNlYXJjaFF1ZXJ5J1xuaW1wb3J0IHsgVVNFUlNfRElSRUNUT1JZIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvdXNlcnNEaXJlY3RvcnlRdWVyeSdcbmltcG9ydCB7IFNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUyB9IGZyb20gJy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyB1c2VEZWJvdW5jZSB9IGZyb20gJy4vdXNlRGVib3VuY2UnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi91c2VUJ1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uSXRlbSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHR5cGUgeyBBZ2VudEVudGl0eSB9IGZyb20gJy4uL3R5cGVzL2FnZW50J1xuXG50eXBlIFJhd1NlYXJjaFJlc3VsdCA9IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlclxuICB0aXRsZTogc3RyaW5nXG4gIHR5cGU/OiBzdHJpbmdcbiAgY2xpZW50SWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsXG4gIGZlZUlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbFxuICBjbGllbnROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBwcm9qZWN0TmFtZT86IHN0cmluZyB8IG51bGxcbiAgZmF0aGVyPzogeyBpZDogc3RyaW5nIHwgbnVtYmVyOyB0aXRsZT86IHN0cmluZyB8IG51bGwgfSB8IG51bGxcbn1cblxudHlwZSBSYXdDbGllbnQgPSB7XG4gIGlkOiBudW1iZXIgfCBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHRvdGFsUHJveWVjdG9zPzogbnVtYmVyIHwgbnVsbFxufVxuXG50eXBlIFJhd0RpcmVjdG9yeVVzZXIgPSB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgZmlyc3ROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBsYXN0TmFtZT86IHN0cmluZyB8IG51bGxcbiAgZW1haWw/OiBzdHJpbmcgfCBudWxsXG4gIHBpY3R1cmU/OiBzdHJpbmcgfCBudWxsXG4gIHVzZXJQb3NpdGlvbj86IHsgbmFtZT86IHN0cmluZyB8IG51bGwgfSB8IG51bGxcbn1cblxudHlwZSBTZWFyY2hFbnRpdGllc0RhdGEgPSB7IHNlYXJjaDogUmF3U2VhcmNoUmVzdWx0W10gfCBudWxsIH1cbnR5cGUgU2VhcmNoQ2xpZW50c0RhdGEgPSB7XG4gIGNsaWVudHM6IHtcbiAgICB0b3RhbD86IG51bWJlciB8IG51bGxcbiAgICBwZXJQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIHBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgbGFzdFBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgZGF0YTogUmF3Q2xpZW50W11cbiAgfSB8IG51bGxcbn1cbnR5cGUgVXNlcnNEaXJlY3RvcnlEYXRhID0ge1xuICB1c2Vyczoge1xuICAgIHRvdGFsPzogbnVtYmVyIHwgbnVsbFxuICAgIHBlclBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgcGFnZT86IG51bWJlciB8IG51bGxcbiAgICBsYXN0UGFnZT86IG51bWJlciB8IG51bGxcbiAgICBkYXRhOiBSYXdEaXJlY3RvcnlVc2VyW10gfCBudWxsXG4gIH0gfCBudWxsXG59XG5cbnR5cGUgVGFza0ZhbWlseVJlY29yZCA9IHtcbiAgX2lkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICB0aXRsZT86IHN0cmluZyB8IG51bGxcbiAgcHJvamVjdElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICB0YXNrRmF0aGVyPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBmYXRoZXI/OiB7IGlkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbDsgdGl0bGU/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsXG4gIHByb2plY3Q/OiB7IGlkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbDsgbmFtZT86IHN0cmluZyB8IG51bGwgfSB8IG51bGxcbn1cblxudHlwZSBUYXNrRmFtaWx5RGF0YSA9IHtcbiAgdGFza0ZhbWlseT86IHtcbiAgICB0b3RhbD86IG51bWJlciB8IG51bGxcbiAgICBwZXJQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIHBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgbGFzdFBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgZGF0YT86IFRhc2tGYW1pbHlSZWNvcmRbXSB8IG51bGxcbiAgfSB8IG51bGxcbn1cblxudHlwZSBGYWxsYmFja1Byb2plY3RSZWNvcmQgPSB7XG4gIGlkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBuYW1lPzogc3RyaW5nIHwgbnVsbFxuICBjbGllbnRJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgY2xpZW50PzogeyBpZD86IHN0cmluZyB8IG51bWJlciB8IG51bGw7IG5hbWU/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsXG59XG5cbnR5cGUgUHJvamVjdHNGYWxsYmFja0RhdGEgPSB7XG4gIHByb2plY3RzPzoge1xuICAgIHRvdGFsPzogbnVtYmVyIHwgbnVsbFxuICAgIHBlclBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgcGFnZT86IG51bWJlciB8IG51bGxcbiAgICBsYXN0UGFnZT86IG51bWJlciB8IG51bGxcbiAgICBkYXRhPzogRmFsbGJhY2tQcm9qZWN0UmVjb3JkW10gfCBudWxsXG4gIH0gfCBudWxsXG59XG5cbnR5cGUgUGFnaW5hdGlvblNvdXJjZSA9ICdub25lJyB8ICd1c2VycycgfCAnY2xpZW50cy1zZWFyY2gnIHwgJ3Rhc2stZmFsbGJhY2snIHwgJ3Byb2plY3QtZmFsbGJhY2snXG5cbmNvbnN0IG5vcm1hbGl6ZVBvc2l0aXZlSW50ID0gKHZhbHVlOiB1bmtub3duLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKVxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYXJzZWQpKSByZXR1cm4gZmFsbGJhY2tcbiAgY29uc3Qgbm9ybWFsaXplZCA9IE1hdGguZmxvb3IocGFyc2VkKVxuICByZXR1cm4gbm9ybWFsaXplZCA+IDAgPyBub3JtYWxpemVkIDogZmFsbGJhY2tcbn1cblxuLyoqXG4gKiBSZXN0cmluZ2UgbG9zIHJlc3VsdGFkb3MgYWwgYGNsaWVudElkYC9gcHJvamVjdElkYCBkZWwgYWdlbnRlIGFjdGl2by5cbiAqIEN1YW5kbyBlbCBhZ2VudGUgZXN0w6Egc2NvcGVhZG8gYSB1biBjbGllbnQvcHJvamVjdCwgdGFudG8gbG9zIHJlY2VudHMgY29tb1xuICogZWwgc2VhcmNoIGRlYmVuIGZpbHRyYXIgcG9yIGVzZSBjb250ZXh0by4gU2kgZWwgYmFja2VuZCBubyBlbnRpZW5kZSBhbGfDum5cbiAqIGNhbXBvIGxvIGlnbm9yYSB5IHNlIGNhZSBhbCBjb21wb3J0YW1pZW50byBnbG9iYWwuXG4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eVNlYXJjaFNjb3BlID0ge1xuICBjbGllbnRJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgcHJvamVjdElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICAvKiogU2x1Z3MgZGVsIGNvbmVjdG9yIE1DUCBkZWwgYWdlbnRlIChsaXN0YWRvIGxvY2FsLCBzaW4gR3JhcGhRTCkuICovXG4gIG1jcFNsdWdzPzogc3RyaW5nW11cbiAgLyoqXG4gICAqIGBlbnRpdHlgIGRlbCBhZ2VudGUgYWN0aXZvLiBQYXJhIGVzcGVjaWFsaXN0YXM6XG4gICAqIC0gYHByb2plY3RgOiBiw7pzcXVlZGEgZGUgdGFyZWFzIGZ1ZXJ6YSBmaWx0cm8gcG9yIGBwcm9qZWN0SWRgIGRlbCBjb250ZXh0by5cbiAgICogLSBgY2xpZW50YDogYsO6c3F1ZWRhIGRlIHByb3llY3RvcyBwb3IgYGNsaWVudElkYDsgdGFyZWFzIHBvciBjbGllbnRlICh5IHByb3llY3RvIHNpIGFwbGljYSkuXG4gICAqL1xuICBhZ2VudEVudGl0eT86IEFnZW50RW50aXR5IHwgbnVsbFxufVxuXG50eXBlIFNlYXJjaEZpbHRlcmFibGVUeXBlID0gJ3Byb2plY3QnIHwgJ3Rhc2snXG5cbmNvbnN0IEJBU0VfRklMVEVSU19CWV9UWVBFOiBSZWNvcmQ8U2VhcmNoRmlsdGVyYWJsZVR5cGUsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge1xuICBwcm9qZWN0OiB7IHByb2plY3Q6ICd0cnVlJywgYXJjaGl2ZWQ6ICdhbGwnIH0sXG4gIHRhc2s6IHsgdGFzazogJ3RydWUnLCBhcmNoaXZlZDogJ2ZhbHNlJyB9LFxufVxuXG4vKipcbiAqIEVudHJhZGFzIHBhcmEgZWwgYXJndW1lbnRvIEdyYXBoUUwgYGV4dHJhYCAoSlNPTiBzdHJpbmcgZGUgYXJyYXkpIGFsIGJ1c2NhciB0YXJlYXMgY29uIGNvbnRleHRvLlxuICogRWouOiBbe1wicHJvamVjdElkXCI6XCI4ODE1NTJcIn1dXG4gKi9cbmNvbnN0IGJ1aWxkVGFza1NlYXJjaEV4dHJhRW50cmllcyA9IChzY29wZT86IEVudGl0eVNlYXJjaFNjb3BlKTogQXJyYXk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPT4ge1xuICBjb25zdCByYXdDbGllbnQgPVxuICAgIHNjb3BlPy5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHNjb3BlPy5jbGllbnRJZCAhPT0gbnVsbCAmJiBzY29wZT8uY2xpZW50SWQgIT09ICcnID8gU3RyaW5nKHNjb3BlLmNsaWVudElkKSA6IG51bGxcbiAgY29uc3QgcmF3UHJvamVjdCA9XG4gICAgc2NvcGU/LnByb2plY3RJZCAhPT0gdW5kZWZpbmVkICYmIHNjb3BlPy5wcm9qZWN0SWQgIT09IG51bGwgJiYgc2NvcGU/LnByb2plY3RJZCAhPT0gJydcbiAgICAgID8gU3RyaW5nKHNjb3BlLnByb2plY3RJZClcbiAgICAgIDogbnVsbFxuXG4gIGNvbnN0IGFnZW50RW50aXR5ID0gc2NvcGU/LmFnZW50RW50aXR5XG4gIGNvbnN0IGVudHJpZXM6IEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0gW11cblxuICBjb25zdCBwdXNoQ2xpZW50ID0gKCkgPT4ge1xuICAgIGlmIChyYXdDbGllbnQpIGVudHJpZXMucHVzaCh7IGNsaWVudElkOiByYXdDbGllbnQgfSlcbiAgfVxuICBjb25zdCBwdXNoUHJvamVjdCA9ICgpID0+IHtcbiAgICBpZiAocmF3UHJvamVjdCkgZW50cmllcy5wdXNoKHsgcHJvamVjdElkOiByYXdQcm9qZWN0IH0pXG4gIH1cblxuICBpZiAoYWdlbnRFbnRpdHkgPT09ICdwcm9qZWN0Jykge1xuICAgIGlmIChyYXdQcm9qZWN0KSB7XG4gICAgICBwdXNoUHJvamVjdCgpXG4gICAgfSBlbHNlIGlmIChyYXdDbGllbnQpIHtcbiAgICAgIHB1c2hDbGllbnQoKVxuICAgIH1cbiAgfSBlbHNlIGlmIChhZ2VudEVudGl0eSA9PT0gJ2NsaWVudCcpIHtcbiAgICBwdXNoQ2xpZW50KClcbiAgICBwdXNoUHJvamVjdCgpXG4gIH0gZWxzZSB7XG4gICAgcHVzaENsaWVudCgpXG4gICAgcHVzaFByb2plY3QoKVxuICB9XG5cbiAgcmV0dXJuIGVudHJpZXNcbn1cblxuY29uc3QgYnVpbGRUYXNrU2VhcmNoRXh0cmEgPSAoc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGVudHJpZXMgPSBidWlsZFRhc2tTZWFyY2hFeHRyYUVudHJpZXMoc2NvcGUpXG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZW50cmllcylcbn1cblxuLyoqXG4gKiBUYWIgcHJveWVjdG86IGNvbiBgY2xpZW50SWRgIGVuIGVsIHNjb3BlLCBgZXh0cmFgIGFjb3RhIGxhIGLDunNxdWVkYSBhIHByb3llY3RvcyBkZSBlc2UgY2xpZW50ZS5cbiAqIEVqLjogYFt7XCJjbGllbnRJZFwiOlwiNDcxMDVcIn1dYCBqdW50byBhIGBmaWx0ZXJzYCBge1wicHJvamVjdFwiOlwidHJ1ZVwiLFwiYXJjaGl2ZWRcIjpcImFsbFwifWAuXG4gKi9cbmNvbnN0IGJ1aWxkUHJvamVjdFNlYXJjaEV4dHJhID0gKHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCByYXdDbGllbnQgPVxuICAgIHNjb3BlPy5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHNjb3BlPy5jbGllbnRJZCAhPT0gbnVsbCAmJiBzY29wZT8uY2xpZW50SWQgIT09ICcnID8gU3RyaW5nKHNjb3BlLmNsaWVudElkKSA6IG51bGxcbiAgaWYgKCFyYXdDbGllbnQpIHJldHVybiB1bmRlZmluZWRcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFt7IGNsaWVudElkOiByYXdDbGllbnQgfV0pXG59XG5cbmNvbnN0IGJ1aWxkU2VhcmNoRW50aXRpZXNFeHRyYSA9ICh0eXBlOiBTZWFyY2hGaWx0ZXJhYmxlVHlwZSwgc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh0eXBlID09PSAndGFzaycpIHJldHVybiBidWlsZFRhc2tTZWFyY2hFeHRyYShzY29wZSlcbiAgaWYgKHR5cGUgPT09ICdwcm9qZWN0JykgcmV0dXJuIGJ1aWxkUHJvamVjdFNlYXJjaEV4dHJhKHNjb3BlKVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogVGFiIGB0YXNrYCAvIGBwcm9qZWN0YDogYGZpbHRlcnNgIHPDs2xvIHRpcG8gKyBhcmNoaXZlZCAodGFyZWFzOiBubyBhcmNoaXZhZGFzKTsgc2NvcGUgKGNsaWVudElkIC8gcHJvamVjdElkIGVuIHRhcmVhcykgZW4gYGV4dHJhYC5cbiAqL1xuY29uc3QgYnVpbGRGaWx0ZXJzRm9yVHlwZSA9ICh0eXBlOiBTZWFyY2hGaWx0ZXJhYmxlVHlwZSk6IHN0cmluZyA9PiB7XG4gIGlmICh0eXBlID09PSAncHJvamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoQkFTRV9GSUxURVJTX0JZX1RZUEUucHJvamVjdClcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoQkFTRV9GSUxURVJTX0JZX1RZUEUudGFzaylcbn1cblxuLyoqXG4gKiBGaWx0cm9zIHBhcmEgbGEgcXVlcnkgdXNlcnMuIEVsIGJhY2tlbmQgZXNwZXJhIHVuIEpTT04gc3RyaW5nIGNvblxuICogd2l0aFBvc2l0aW9uLCB3aXRoVGVhbXMgeSBzZWFyY2hJbnB1dC4gTGUgYWdyZWdhbW9zIGNsaWVudElkL3Byb2plY3RJZFxuICogZGVsIHNjb3BlIGVuIGNhc28gZGUgcXVlIGVsIGJhY2tlbmQgbG9zIGFwcm92ZWNoZSBwYXJhIGZpbHRyYXIgcG9yXG4gKiBjb250ZXh0byAoc2kgbm8gbG9zIGVudGllbmRlIGxvcyBpZ25vcmEpLlxuICovXG5jb25zdCBidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyA9IChxOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBiYXNlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICB3aXRoUG9zaXRpb246IHRydWUsXG4gICAgd2l0aFRlYW1zOiB0cnVlLFxuICB9XG4gIGNvbnN0IHRyaW1tZWRRID0gcS50cmltKClcbiAgaWYgKHRyaW1tZWRRKSB7XG4gICAgYmFzZS5zZWFyY2hJbnB1dCA9IHRyaW1tZWRRXG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGJhc2UpXG59XG5cbmNvbnN0IGhpZ2hsaWdodFJhbmdlID0gKHRleHQ6IHN0cmluZywgc2VhcmNoVmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAoIXNlYXJjaFZhbHVlKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGlkeCA9IHRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXG4gIGlmIChpZHggPCAwKSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiB7IHN0YXJ0OiBpZHgsIGxlbmd0aDogc2VhcmNoVmFsdWUubGVuZ3RoIH1cbn1cblxuY29uc3QgZmlyc3REZWZpbmVkID0gPFQ+KC4uLnZhbHVlczogQXJyYXk8VCB8IG51bGwgfCB1bmRlZmluZWQ+KTogVCB8IHVuZGVmaW5lZCA9PlxuICB2YWx1ZXMuZmluZCh2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKVxuXG5jb25zdCBub3JtYWxpemVUcmltbWVkU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAnJ1xuICByZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbmNvbnN0IGdldFVzZXJQb3NpdGlvbk5hbWUgPSAodXNlclBvc2l0aW9uOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VVc2VyPlsndXNlcl9wb3NpdGlvbiddKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiB1c2VyUG9zaXRpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gdXNlclBvc2l0aW9uLnRyaW0oKVxuICBpZiAodXNlclBvc2l0aW9uICYmIHR5cGVvZiB1c2VyUG9zaXRpb24gPT09ICdvYmplY3QnICYmICduYW1lJyBpbiB1c2VyUG9zaXRpb24pIHtcbiAgICByZXR1cm4gbm9ybWFsaXplVHJpbW1lZFN0cmluZyh1c2VyUG9zaXRpb24ubmFtZSlcbiAgfVxuICByZXR1cm4gJydcbn1cblxuY29uc3QgbWFwQ2xpZW50VG9JdGVtID0gKGM6IFJhd0NsaWVudCwgc2VhcmNoVmFsdWU6IHN0cmluZyk6IENvbnRleHRNZW50aW9uSXRlbSA9PiAoe1xuICBpZDogYy5pZCxcbiAgdHlwZTogJ2NsaWVudCcsXG4gIHByaW1hcnk6IGMubmFtZSxcbiAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UoYy5uYW1lLCBzZWFyY2hWYWx1ZSksXG4gIGJyZWFkY3J1bWI6IHtcbiAgICBjb3VudDogYy50b3RhbFByb3llY3RvcyA/PyB1bmRlZmluZWQsXG4gICAgY291bnRMYWJlbDogJ3Byb2plY3RzJyxcbiAgfSxcbiAgcmF3OiB7XG4gICAgaWQ6IGMuaWQsXG4gICAgbmFtZTogYy5uYW1lLFxuICAgIHRvdGFsUHJveWVjdG9zOiBjLnRvdGFsUHJveWVjdG9zID8/IG51bGwsXG4gIH0sXG59KVxuXG5jb25zdCBtYXBVc2VyVG9JdGVtID0gKHU6IFJhd0RpcmVjdG9yeVVzZXIsIHNlYXJjaFZhbHVlOiBzdHJpbmcpOiBDb250ZXh0TWVudGlvbkl0ZW0gPT4ge1xuICBjb25zdCBmdWxsTmFtZSA9IGAke3UuZmlyc3ROYW1lID8/ICcnfSAke3UubGFzdE5hbWUgPz8gJyd9YC50cmltKClcbiAgY29uc3QgcHJpbWFyeSA9IGZ1bGxOYW1lIHx8IHUuZW1haWwgfHwgU3RyaW5nKHUuaWQpXG5cbiAgcmV0dXJuIHtcbiAgICBpZDogdS5pZCxcbiAgICB0eXBlOiAndXNlcicsXG4gICAgcHJpbWFyeSxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgcmF3OiB7XG4gICAgICBpZDogdS5pZCxcbiAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICBwaWN0dXJlOiB1LnBpY3R1cmUgPz8gbnVsbCxcbiAgICAgIHBvc2l0aW9uTmFtZTogdS51c2VyUG9zaXRpb24/Lm5hbWUgPz8gbnVsbCxcbiAgICAgIGVtYWlsOiB1LmVtYWlsID8/IG51bGwsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBtYXBDb3JVc2VyVG9Vc2VySXRlbSA9IChcbiAgdXNlcjogUmV0dXJuVHlwZTx0eXBlb2YgdXNlVXNlcj4sXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmcsXG4gIG1lTGFiZWw6IHN0cmluZ1xuKTogQ29udGV4dE1lbnRpb25JdGVtID0+IHtcbiAgY29uc3QgZnVsbE5hbWUgPSBgJHt1c2VyLmZpcnN0TmFtZSA/PyAnJ30gJHt1c2VyLmxhc3ROYW1lID8/ICcnfWAudHJpbSgpXG4gIC8qKiBTb2xvIGNhcmdvIHJlYWw7IHNpbiBmYWxsYmFjayBhIGByb2xlYCAobGEgVUkgbXVlc3RyYSDigJxTaW4gcG9zaWNpw7Nu4oCdIHNpIGZhbHRhKS4gKi9cbiAgY29uc3QgcG9zaXRpb25MaW5lID0gZ2V0VXNlclBvc2l0aW9uTmFtZSh1c2VyLnVzZXJfcG9zaXRpb24pIHx8IG51bGxcbiAgY29uc3QgZW1haWwgPSBub3JtYWxpemVUcmltbWVkU3RyaW5nKHVzZXIuZW1haWwpIHx8IG51bGxcblxuICByZXR1cm4ge1xuICAgIGlkOiB1c2VyLmlkLFxuICAgIHR5cGU6ICd1c2VyJyxcbiAgICBwcmltYXJ5OiBtZUxhYmVsLFxuICAgIHByaW1hcnlIaWdobGlnaHQ6IGhpZ2hsaWdodFJhbmdlKG1lTGFiZWwsIHNlYXJjaFZhbHVlKSxcbiAgICByYXc6IHtcbiAgICAgIGlkOiB1c2VyLmlkLFxuICAgICAgbmFtZTogZnVsbE5hbWUgfHwgU3RyaW5nKHVzZXIuaWQpLFxuICAgICAgcGljdHVyZTogdXNlci5waWN0dXJlIHx8IG51bGwsXG4gICAgICBwb3NpdGlvbk5hbWU6IHBvc2l0aW9uTGluZSxcbiAgICAgIGVtYWlsLFxuICAgIH0sXG4gIH1cbn1cblxuY29uc3QgbWFwUmVjZW50VGFza1RvSXRlbSA9IChcbiAgdGFzazogUmVjZW50VGFza0l0ZW0sXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmcsXG4gIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyA9IHRydWVcbik6IENvbnRleHRNZW50aW9uSXRlbSA9PiB7XG4gIGNvbnN0IHByaW1hcnkgPSAodGFzay50aXRsZSAmJiB0YXNrLnRpdGxlLnRyaW0oKSkgfHwgU3RyaW5nKHRhc2suaWQpXG4gIGNvbnN0IHByb2plY3ROYW1lID0gc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93ID8gKHRhc2sucHJvamVjdE5hbWUgPz8gbnVsbCkgOiBudWxsXG4gIHJldHVybiB7XG4gICAgaWQ6IHRhc2suaWQsXG4gICAgdHlwZTogJ3Rhc2snLFxuICAgIHByaW1hcnksXG4gICAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UocHJpbWFyeSwgc2VhcmNoVmFsdWUpLFxuICAgIGJyZWFkY3J1bWI6IHByb2plY3ROYW1lID8geyBwYXJlbnQ6IHByb2plY3ROYW1lIH0gOiB1bmRlZmluZWQsXG4gICAgcmF3OiB7XG4gICAgICBpZDogdGFzay5pZCxcbiAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICBwcm9qZWN0TmFtZSxcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVRhc2tGYW1pbHlSZWNvcmQgPSAocmVjb3JkOiBUYXNrRmFtaWx5UmVjb3JkKTogUmVjZW50VGFza0l0ZW0gfCBudWxsID0+IHtcbiAgY29uc3QgeyBfaWQ6IHRhc2tGYW1pbHlJZCB9ID0gcmVjb3JkXG4gIGNvbnN0IGlkID0gdGFza0ZhbWlseUlkXG4gIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBudWxsIHx8IFN0cmluZyhpZCkgPT09ICcnKSByZXR1cm4gbnVsbFxuICBjb25zdCB0aXRsZSA9IChyZWNvcmQudGl0bGUgPz8gJycpLnRyaW0oKSB8fCBTdHJpbmcoaWQpXG4gIGNvbnN0IHByb2plY3ROYW1lID0gZmlyc3REZWZpbmVkKHJlY29yZC5wcm9qZWN0Py5uYW1lLCByZWNvcmQuZmF0aGVyPy50aXRsZSkgPz8gbnVsbFxuICBjb25zdCBoYXNGYXRoZXIgPSAhIWZpcnN0RGVmaW5lZChyZWNvcmQudGFza0ZhdGhlciwgcmVjb3JkLmZhdGhlcj8uaWQpXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgdGl0bGUsXG4gICAgdHlwZTogaGFzRmF0aGVyID8gJ3N1YnRhc2snIDogJ3Rhc2snLFxuICAgIHByb2plY3ROYW1lLFxuICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVByb2plY3RzRmFsbGJhY2tSZWNvcmQgPSAocmVjb3JkOiBGYWxsYmFja1Byb2plY3RSZWNvcmQpOiBSYXdTZWFyY2hSZXN1bHQgfCBudWxsID0+IHtcbiAgY29uc3QgeyBpZCB9ID0gcmVjb3JkXG4gIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBudWxsIHx8IFN0cmluZyhpZCkgPT09ICcnKSByZXR1cm4gbnVsbFxuICBjb25zdCB0aXRsZSA9IHJlY29yZC5uYW1lID8/ICcnXG4gIGNvbnN0IGNsaWVudElkID0gZmlyc3REZWZpbmVkKHJlY29yZC5jbGllbnRJZCwgcmVjb3JkLmNsaWVudD8uaWQpID8/IG51bGxcbiAgY29uc3QgY2xpZW50TmFtZSA9IHJlY29yZC5jbGllbnQ/Lm5hbWUgPz8gbnVsbFxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIHRpdGxlLFxuICAgIHR5cGU6ICdwcm9qZWN0JyxcbiAgICBjbGllbnRJZCxcbiAgICBjbGllbnROYW1lLFxuICB9XG59XG5cbmNvbnN0IG1hcFNlYXJjaFRvSXRlbSA9IChcbiAgcjogUmF3U2VhcmNoUmVzdWx0LFxuICB0eXBlOiBDb250ZXh0RW50aXR5VHlwZSxcbiAgc2VhcmNoVmFsdWU6IHN0cmluZyxcbiAgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93ID0gdHJ1ZVxuKTogQ29udGV4dE1lbnRpb25JdGVtID0+IHtcbiAgY29uc3QgcHJpbWFyeSA9IHIudGl0bGUgfHwgci5wcm9qZWN0TmFtZSB8fCAnJ1xuICBsZXQgcGFyZW50OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gIGlmICh0eXBlID09PSAncHJvamVjdCcpIHBhcmVudCA9IHIuY2xpZW50TmFtZVxuICBlbHNlIGlmICh0eXBlID09PSAndGFzaycpIHBhcmVudCA9IHVuZGVmaW5lZFxuICBlbHNlIHBhcmVudCA9IHIucHJvamVjdE5hbWUgPz8gci5jbGllbnROYW1lXG5cbiAgY29uc3QgZmF0aGVyID0gdHlwZSA9PT0gJ3Rhc2snID8gci5mYXRoZXIgOiBudWxsXG4gIGNvbnN0IGhhc0ZhdGhlciA9IHR5cGUgPT09ICd0YXNrJyAmJiBmYXRoZXIgIT0gbnVsbCAmJiBmYXRoZXIuaWQgIT0gbnVsbCAmJiBTdHJpbmcoZmF0aGVyLmlkKS5sZW5ndGggPiAwXG5cbiAgY29uc3QgdGFza1Byb2plY3ROYW1lID0gdHlwZSA9PT0gJ3Rhc2snICYmICFzaG93UHJvamVjdE5hbWVJblRhc2tSb3cgPyBudWxsIDogKHIucHJvamVjdE5hbWUgPz8gbnVsbClcblxuICByZXR1cm4ge1xuICAgIGlkOiByLmlkLFxuICAgIHR5cGUsXG4gICAgcHJpbWFyeSxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgYnJlYWRjcnVtYjogcGFyZW50ID8geyBwYXJlbnQgfSA6IHVuZGVmaW5lZCxcbiAgICByYXc6IHtcbiAgICAgIGlkOiByLmlkLFxuICAgICAgbmFtZTogcHJpbWFyeSxcbiAgICAgIGNsaWVudElkOiByLmNsaWVudElkID8/IG51bGwsXG4gICAgICBjbGllbnROYW1lOiByLmNsaWVudE5hbWUgPz8gbnVsbCxcbiAgICAgIHByb2plY3ROYW1lOiB0YXNrUHJvamVjdE5hbWUsXG4gICAgICBmZWVJZDogci5mZWVJZCA/PyBudWxsLFxuICAgICAgZmF0aGVySWQ6IGhhc0ZhdGhlciA/IGZhdGhlci5pZCA6IG51bGwsXG4gICAgICBmYXRoZXJUaXRsZTogaGFzRmF0aGVyID8gZmF0aGVyLnRpdGxlPy50cmltKCkgfHwgbnVsbCA6IG51bGwsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBmb3JtYXRNY3BQcmltYXJ5TGFiZWwgPSAoc2x1Zzogc3RyaW5nKTogc3RyaW5nID0+XG4gIHNsdWcucmVwbGFjZSgvXy9nLCAnICcpLnJlcGxhY2UoL1xcYlxcdy9nLCBjaGFyID0+IGNoYXIudG9VcHBlckNhc2UoKSlcblxuY29uc3QgbWFwTWNwU2x1Z3NUb0l0ZW1zID0gKHNsdWdzOiBzdHJpbmdbXSwgc2VhcmNoVmFsdWU6IHN0cmluZyk6IENvbnRleHRNZW50aW9uSXRlbVtdID0+IHtcbiAgY29uc3QgcSA9IHNlYXJjaFZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gIGxldCBmaWx0ZXJlZCA9IHNsdWdzXG4gIGlmIChxKSB7XG4gICAgZmlsdGVyZWQgPSBzbHVncy5maWx0ZXIocyA9PiB7XG4gICAgICBjb25zdCBwcmltYXJ5ID0gZm9ybWF0TWNwUHJpbWFyeUxhYmVsKHMpXG4gICAgICByZXR1cm4gcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpIHx8IHByaW1hcnkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGZpbHRlcmVkLm1hcChzbHVnID0+IHtcbiAgICBjb25zdCBwcmltYXJ5ID0gZm9ybWF0TWNwUHJpbWFyeUxhYmVsKHNsdWcpXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBzbHVnLFxuICAgICAgdHlwZTogJ21jcCcgYXMgY29uc3QsXG4gICAgICBwcmltYXJ5LFxuICAgICAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UocHJpbWFyeSwgc2VhcmNoVmFsdWUpLFxuICAgICAgcmF3OiB7XG4gICAgICAgIGlkOiBzbHVnLFxuICAgICAgICBuYW1lOiBwcmltYXJ5LFxuICAgICAgfSxcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBjb25zdCB1c2VFbnRpdHlTZWFyY2ggPSAodHlwZTogQ29udGV4dEVudGl0eVR5cGUsIHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpID0+IHtcbiAgY29uc3QgY29yVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICAvKiogRXZpdGEgYXBsaWNhciByZXN1bHRhZG9zIGRlIHVuIGBmZXRjaFJlY2VudGAgdmllam8gY3VhbmRvIGVsIHVzdWFyaW8geWEgY2FtYmnDsyBkZSB0YWIgKHJhY2UgYXN5bmMpLiAqL1xuICBjb25zdCByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IGRlYm91bmNlZFNlYXJjaFZhbHVlID0gdXNlRGVib3VuY2Uoc2VhcmNoVmFsdWUsIFNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUylcblxuICBjb25zdCBbaXRlbXMsIHNldEl0ZW1zXSA9IHVzZVN0YXRlPENvbnRleHRNZW50aW9uSXRlbVtdPihbXSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtoaWRlUmVjZW50c0xhYmVsLCBzZXRIaWRlUmVjZW50c0xhYmVsXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaGFzTW9yZSwgc2V0SGFzTW9yZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzTG9hZGluZ01vcmUsIHNldElzTG9hZGluZ01vcmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjdXJyZW50UGFnZSwgc2V0Q3VycmVudFBhZ2VdID0gdXNlU3RhdGUoMSlcbiAgY29uc3QgW2FjdGl2ZVBhZ2luYXRpb25Tb3VyY2UsIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2VdID0gdXNlU3RhdGU8UGFnaW5hdGlvblNvdXJjZT4oJ25vbmUnKVxuXG4gIGNvbnN0IG1jcFNsdWdzS2V5ID0gKHNjb3BlPy5tY3BTbHVncyA/PyBbXSkuam9pbignfCcpXG4gIGNvbnN0IHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyA9IHNjb3BlPy5hZ2VudEVudGl0eSAhPT0gJ3Byb2plY3QnXG5cbiAgLy8gRXN0YWJpbGl6YW1vcyBlbCBzY29wZSBwYXJhIG5vIGRpc3BhcmFyIGZldGNocyBwb3IgY2FtYmlvcyBkZSBpZGVudGlkYWQgZGUgb2JqZXRvLlxuICBjb25zdCBzdGFibGVTY29wZSA9IHVzZU1lbW88RW50aXR5U2VhcmNoU2NvcGU+KFxuICAgICgpID0+ICh7XG4gICAgICBjbGllbnRJZDogc2NvcGU/LmNsaWVudElkID8/IG51bGwsXG4gICAgICBwcm9qZWN0SWQ6IHNjb3BlPy5wcm9qZWN0SWQgPz8gbnVsbCxcbiAgICAgIG1jcFNsdWdzOiBzY29wZT8ubWNwU2x1Z3MgPz8gW10sXG4gICAgICBhZ2VudEVudGl0eTogc2NvcGU/LmFnZW50RW50aXR5ID8/IG51bGwsXG4gICAgfSksXG4gICAgW3Njb3BlPy5jbGllbnRJZCwgc2NvcGU/LnByb2plY3RJZCwgbWNwU2x1Z3NLZXksIHNjb3BlPy5hZ2VudEVudGl0eV1cbiAgKVxuXG4gIC8vIC0tLSBTZWFyY2g6IHByb2plY3QgfCB0YXNrIChHcmFwaFFMOiBzZWFyY2gpIC0tLVxuICBjb25zdCBbZmV0Y2hTZWFyY2hFbnRpdGllcywgeyBkYXRhOiBzZWFyY2hEYXRhLCBsb2FkaW5nOiBzZWFyY2hMb2FkaW5nLCBlcnJvcjogc2VhcmNoRXJyb3IgfV0gPVxuICAgIHVzZUxhenlRdWVyeTxTZWFyY2hFbnRpdGllc0RhdGE+KFNFQVJDSF9FTlRJVElFUywge1xuICAgICAgdmFyaWFibGVzOiB7IGxpbWl0OiAyMCB9LFxuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgIH0pXG5cbiAgLy8gLS0tIFNlYXJjaDogY2xpZW50IChHcmFwaFFMKSAtLS1cbiAgY29uc3QgW2ZldGNoU2VhcmNoQ2xpZW50cywgeyBkYXRhOiBjbGllbnRzRGF0YSwgbG9hZGluZzogY2xpZW50c0xvYWRpbmcsIGVycm9yOiBjbGllbnRzRXJyb3IgfV0gPVxuICAgIHVzZUxhenlRdWVyeTxTZWFyY2hDbGllbnRzRGF0YT4oU0VBUkNIX0NMSUVOVFMsIHtcbiAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICB9KVxuXG4gIC8vIC0tLSBTZWFyY2g6IHVzZXIgKEdyYXBoUUw6IHVzZXJzKSAtLS1cbiAgY29uc3QgW2ZldGNoVXNlcnNEaXJlY3RvcnksIHsgZGF0YTogdXNlcnNEYXRhLCBsb2FkaW5nOiB1c2Vyc0xvYWRpbmcsIGVycm9yOiB1c2Vyc0Vycm9yIH1dID1cbiAgICB1c2VMYXp5UXVlcnk8VXNlcnNEaXJlY3RvcnlEYXRhPihVU0VSU19ESVJFQ1RPUlksIHtcbiAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICB9KVxuXG4gIGNvbnN0IHN5bmNVc2Vyc1BhZ2luYXRpb24gPSB1c2VDYWxsYmFjaygocGF5bG9hZD86IFVzZXJzRGlyZWN0b3J5RGF0YSB8IG51bGwpID0+IHtcbiAgICBjb25zdCBwYWdlID0gbm9ybWFsaXplUG9zaXRpdmVJbnQocGF5bG9hZD8udXNlcnM/LnBhZ2UsIDEpXG4gICAgY29uc3QgbGFzdFBhZ2UgPSBub3JtYWxpemVQb3NpdGl2ZUludChwYXlsb2FkPy51c2Vycz8ubGFzdFBhZ2UsIHBhZ2UpXG4gICAgc2V0Q3VycmVudFBhZ2UocGFnZSlcbiAgICBzZXRIYXNNb3JlKHBhZ2UgPCBsYXN0UGFnZSlcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3luY0NsaWVudHNQYWdpbmF0aW9uID0gdXNlQ2FsbGJhY2soKHBheWxvYWQ/OiBTZWFyY2hDbGllbnRzRGF0YSB8IG51bGwpID0+IHtcbiAgICBjb25zdCBwYWdlID0gbm9ybWFsaXplUG9zaXRpdmVJbnQocGF5bG9hZD8uY2xpZW50cz8ucGFnZSwgMSlcbiAgICBjb25zdCBsYXN0UGFnZSA9IG5vcm1hbGl6ZVBvc2l0aXZlSW50KHBheWxvYWQ/LmNsaWVudHM/Lmxhc3RQYWdlLCBwYWdlKVxuICAgIHNldEN1cnJlbnRQYWdlKHBhZ2UpXG4gICAgc2V0SGFzTW9yZShwYWdlIDwgbGFzdFBhZ2UpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN5bmNUYXNrRmFsbGJhY2tQYWdpbmF0aW9uID0gdXNlQ2FsbGJhY2soKHBheWxvYWQ/OiBUYXNrRmFtaWx5RGF0YSB8IG51bGwpID0+IHtcbiAgICBjb25zdCByYXdQYWdlID0gTnVtYmVyKHBheWxvYWQ/LnRhc2tGYW1pbHk/LnBhZ2UpXG4gICAgLy8gdGFza0ZhbWlseSB1c2EgcMOhZ2luYXMgMC1iYXNlZDsgY29udmVydGltb3MgYSAxLWJhc2VkIHBhcmEgY29uc2lzdGVuY2lhIGNvbiBlbCByZXN0b1xuICAgIGNvbnN0IHBhZ2UgPSBOdW1iZXIuaXNGaW5pdGUocmF3UGFnZSkgJiYgcmF3UGFnZSA+PSAwID8gTWF0aC5mbG9vcihyYXdQYWdlKSArIDEgOiAxXG4gICAgY29uc3QgbGFzdFBhZ2UgPSBub3JtYWxpemVQb3NpdGl2ZUludChwYXlsb2FkPy50YXNrRmFtaWx5Py5sYXN0UGFnZSwgcGFnZSlcbiAgICBzZXRDdXJyZW50UGFnZShwYWdlKVxuICAgIHNldEhhc01vcmUocGFnZSA8IGxhc3RQYWdlKVxuICB9LCBbXSlcblxuICBjb25zdCBzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbiA9IHVzZUNhbGxiYWNrKChwYXlsb2FkPzogUHJvamVjdHNGYWxsYmFja0RhdGEgfCBudWxsKSA9PiB7XG4gICAgY29uc3QgcGFnZSA9IG5vcm1hbGl6ZVBvc2l0aXZlSW50KHBheWxvYWQ/LnByb2plY3RzPy5wYWdlLCAxKVxuICAgIGNvbnN0IGxhc3RQYWdlID0gbm9ybWFsaXplUG9zaXRpdmVJbnQocGF5bG9hZD8ucHJvamVjdHM/Lmxhc3RQYWdlLCBwYWdlKVxuICAgIHNldEN1cnJlbnRQYWdlKHBhZ2UpXG4gICAgc2V0SGFzTW9yZShwYWdlIDwgbGFzdFBhZ2UpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IFtmZXRjaFRhc2tGYW1pbHlGYWxsYmFja10gPSB1c2VMYXp5UXVlcnk8VGFza0ZhbWlseURhdGE+KFRBU0tfRkFNSUxZX0ZBTExCQUNLLCB7XG4gICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICB9KVxuXG4gIGNvbnN0IFtmZXRjaFByb2plY3RzRmFsbGJhY2tdID0gdXNlTGF6eVF1ZXJ5PFByb2plY3RzRmFsbGJhY2tEYXRhPihQUk9KRUNUU19GQUxMQkFDSywge1xuICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgfSlcblxuICBjb25zdCBmZXRjaFJlY2VudCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQgKz0gMVxuICAgIGNvbnN0IGdlbmVyYXRpb24gPSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnRcblxuICAgIGlmICh0eXBlID09PSAnbWNwJykge1xuICAgICAgY29uc3Qgc2x1Z3MgPSBzdGFibGVTY29wZS5tY3BTbHVncyA/PyBbXVxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgc2V0SXRlbXMobWFwTWNwU2x1Z3NUb0l0ZW1zKHNsdWdzLCAnJykpXG4gICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgnbm9uZScpXG4gICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0TG9hZGluZyh0cnVlKVxuICAgIHNldEVycm9yKGZhbHNlKVxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlY2VudENsaWVudHMoKVxuICAgICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgY29uc3QgbWFwcGVkID0gKGRhdGEgPz8gW10pLm1hcChjID0+IG1hcENsaWVudFRvSXRlbShjLCAnJykpXG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBzZXRJdGVtcyhtYXBwZWQpXG4gICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICAgIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UoJ25vbmUnKVxuICAgICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncHJvamVjdCcpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlY2VudFByb2plY3RzKHN0YWJsZVNjb3BlLmNsaWVudElkID8geyBjbGllbnRJZDogc3RhYmxlU2NvcGUuY2xpZW50SWQgfSA6IHVuZGVmaW5lZClcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGxldCBtYXBwZWQgPSAoQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbXSkubWFwKHAgPT5cbiAgICAgICAgICBtYXBTZWFyY2hUb0l0ZW0oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiBwLmlkLFxuICAgICAgICAgICAgICB0aXRsZTogcC50aXRsZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3Byb2plY3QnLFxuICAgICAgICAgICAgICBjbGllbnRJZDogcC5jbGllbnRJZCxcbiAgICAgICAgICAgICAgZmVlSWQ6IHAuZmVlSWQsXG4gICAgICAgICAgICAgIGNsaWVudE5hbWU6IHAuY2xpZW50TmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAncHJvamVjdCcsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGFyZ3VtZW50c0ZpbHRlciA9XG4gICAgICAgICAgICBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gbnVsbCAmJiBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSAnJ1xuICAgICAgICAgICAgICA/IHsgY2xpZW50X2lkOiBbU3RyaW5nKHN0YWJsZVNjb3BlLmNsaWVudElkKV0gfVxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgIGNvbnN0IHsgZGF0YTogZmFsbGJhY2tEYXRhIH0gPSBhd2FpdCBmZXRjaFByb2plY3RzRmFsbGJhY2soe1xuICAgICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICAgIC4uLihhcmd1bWVudHNGaWx0ZXIgPyB7IGFyZ3VtZW50czogYXJndW1lbnRzRmlsdGVyIH0gOiB7fSksXG4gICAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICAgIHBlclBhZ2U6IDIwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrTWFwcGVkID0gKGZhbGxiYWNrRGF0YT8ucHJvamVjdHM/LmRhdGEgPz8gW10pXG4gICAgICAgICAgICAubWFwKG5vcm1hbGl6ZVByb2plY3RzRmFsbGJhY2tSZWNvcmQpXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSYXdTZWFyY2hSZXN1bHQgPT4gaXRlbSAhPT0gbnVsbClcbiAgICAgICAgICAgIC5tYXAoaXRlbSA9PiBtYXBTZWFyY2hUb0l0ZW0oaXRlbSwgJ3Byb2plY3QnLCAnJykpXG4gICAgICAgICAgbWFwcGVkID0gZmFsbGJhY2tNYXBwZWRcbiAgICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbGxiYWNrTWFwcGVkLmxlbmd0aCA+IDApXG4gICAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgncHJvamVjdC1mYWxsYmFjaycpXG4gICAgICAgICAgc3luY1Byb2plY3RGYWxsYmFja1BhZ2luYXRpb24oZmFsbGJhY2tEYXRhKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgnbm9uZScpXG4gICAgICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgc2V0SXRlbXMobWFwcGVkKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndGFzaycpIHtcbiAgICAgICAgbGV0IHJlY2VudFRhc2tGaWx0ZXJzOiB7IHByb2plY3RJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGw7IGNsaWVudElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB9IHwgdW5kZWZpbmVkXG4gICAgICAgIGlmIChzdGFibGVTY29wZS5hZ2VudEVudGl0eSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgICAgICAgcmVjZW50VGFza0ZpbHRlcnMgPSB7IHByb2plY3RJZDogc3RhYmxlU2NvcGUucHJvamVjdElkIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGFibGVTY29wZS5hZ2VudEVudGl0eSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgICByZWNlbnRUYXNrRmlsdGVycyA9IHsgY2xpZW50SWQ6IHN0YWJsZVNjb3BlLmNsaWVudElkIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVjZW50VGFza3MocmVjZW50VGFza0ZpbHRlcnMpXG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBsZXQgdGFza0l0ZW1zID0gKGRhdGEgPz8gW10pLm1hcCh0YXNrID0+IG1hcFJlY2VudFRhc2tUb0l0ZW0odGFzaywgJycsIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdykpXG4gICAgICAgIGlmICh0YXNrSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fVxuICAgICAgICAgIGlmIChzdGFibGVTY29wZS5wcm9qZWN0SWQgIT09IG51bGwgJiYgc3RhYmxlU2NvcGUucHJvamVjdElkICE9PSB1bmRlZmluZWQgJiYgc3RhYmxlU2NvcGUucHJvamVjdElkICE9PSAnJykge1xuICAgICAgICAgICAgZmlsdGVyLnByb2plY3RJZHMgPSBbU3RyaW5nKHN0YWJsZVNjb3BlLnByb2plY3RJZCldXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gbnVsbCAmJiBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSAnJykge1xuICAgICAgICAgICAgZmlsdGVyLmNsaWVudElkcyA9IFtTdHJpbmcoc3RhYmxlU2NvcGUuY2xpZW50SWQpXVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IGRhdGE6IGZhbGxiYWNrRGF0YSB9ID0gYXdhaXQgZmV0Y2hUYXNrRmFtaWx5RmFsbGJhY2soe1xuICAgICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICAgIGZpbHRlcjogeyBhcmNoaXZlZDogZmFsc2UsIC4uLmZpbHRlciB9LFxuICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7IG9mZnNldDogMCwgc2l6ZTogMjAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgICB0YXNrSXRlbXMgPSAoZmFsbGJhY2tEYXRhPy50YXNrRmFtaWx5Py5kYXRhID8/IFtdKVxuICAgICAgICAgICAgLm1hcChub3JtYWxpemVUYXNrRmFtaWx5UmVjb3JkKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgUmVjZW50VGFza0l0ZW0gPT4gaXRlbSAhPT0gbnVsbClcbiAgICAgICAgICAgIC5tYXAodGFzayA9PiBtYXBSZWNlbnRUYXNrVG9JdGVtKHRhc2ssICcnLCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cpKVxuICAgICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwodGFza0l0ZW1zLmxlbmd0aCA+IDApXG4gICAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgndGFzay1mYWxsYmFjaycpXG4gICAgICAgICAgc3luY1Rhc2tGYWxsYmFja1BhZ2luYXRpb24oZmFsbGJhY2tEYXRhKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgnbm9uZScpXG4gICAgICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgc2V0SXRlbXModGFza0l0ZW1zKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndXNlcicpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFVzZXJzRGlyZWN0b3J5KHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGZpbHRlcnM6IGJ1aWxkVXNlcnNEaXJlY3RvcnlGaWx0ZXJzKCcnKSxcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IChkYXRhPy51c2Vycz8uZGF0YSA/PyBbXSkubWFwKHUgPT4gbWFwVXNlclRvSXRlbSh1LCAnJykpXG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBjb25zdCBtZUl0ZW0gPSBtYXBDb3JVc2VyVG9Vc2VySXRlbShjb3JVc2VyLCAnJywgdCgnY29udGV4dE1lbnRpb24ubWUnKSlcbiAgICAgICAgY29uc3Qgd2l0aG91dE1lID0gbWFwcGVkLmZpbHRlcihpdGVtID0+IFN0cmluZyhpdGVtLmlkKSAhPT0gU3RyaW5nKG1lSXRlbS5pZCkpXG4gICAgICAgIHNldEl0ZW1zKFttZUl0ZW0sIC4uLndpdGhvdXRNZV0pXG4gICAgICAgIHN5bmNVc2Vyc1BhZ2luYXRpb24oZGF0YSlcbiAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgndXNlcnMnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIHNldEl0ZW1zKFtdKVxuICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICAgICAgc2V0Q3VycmVudFBhZ2UoMSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgIHNldEl0ZW1zKFtdKVxuICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGdlbmVyYXRpb24gPT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIHR5cGUsXG4gICAgc3RhYmxlU2NvcGUsXG4gICAgZmV0Y2hVc2Vyc0RpcmVjdG9yeSxcbiAgICBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayxcbiAgICBmZXRjaFByb2plY3RzRmFsbGJhY2ssXG4gICAgc3luY1VzZXJzUGFnaW5hdGlvbixcbiAgICBzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbixcbiAgICBzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbixcbiAgICBzaG93UHJvamVjdE5hbWVJblRhc2tSb3csXG4gICAgY29yVXNlcixcbiAgICB0LFxuICBdKVxuXG4gIC8vIERpc3BhcmFyIHNlYXJjaCBhbCBjYW1iaWFyIGRlYm91bmNlZCB2YWx1ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHEgPSBkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKClcblxuICAgIGlmICh0eXBlID09PSAnbWNwJykge1xuICAgICAgY29uc3Qgc2x1Z3MgPSBzdGFibGVTY29wZS5tY3BTbHVncyA/PyBbXVxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgc2V0SXRlbXMobWFwTWNwU2x1Z3NUb0l0ZW1zKHNsdWdzLCBxKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcSkgcmV0dXJuXG5cbiAgICBpZiAodHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIGZldGNoU2VhcmNoQ2xpZW50cyh7XG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGZpbHRlcjogeyBuYW1lOiBxIH0sXG4gICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICBwZXJQYWdlOiAyMCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdjbGllbnRzLXNlYXJjaCcpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndXNlcicpIHtcbiAgICAgIGZldGNoVXNlcnNEaXJlY3Rvcnkoe1xuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBmaWx0ZXJzOiBidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyhxKSxcbiAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UoJ3VzZXJzJylcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlsdGVycyA9IGJ1aWxkRmlsdGVyc0ZvclR5cGUodHlwZSlcbiAgICAgIGNvbnN0IGV4dHJhID0gYnVpbGRTZWFyY2hFbnRpdGllc0V4dHJhKHR5cGUsIHN0YWJsZVNjb3BlKVxuICAgICAgZmV0Y2hTZWFyY2hFbnRpdGllcyh7XG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIHEsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAuLi4oZXh0cmEgIT09IHVuZGVmaW5lZCA/IHsgZXh0cmEgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgfVxuICB9LCBbZGVib3VuY2VkU2VhcmNoVmFsdWUsIHR5cGUsIHN0YWJsZVNjb3BlLCBmZXRjaFNlYXJjaEVudGl0aWVzLCBmZXRjaFNlYXJjaENsaWVudHMsIGZldGNoVXNlcnNEaXJlY3RvcnldKVxuXG4gIC8vIFNpbmNyb25pemFyIHJlc3VsdGFkb3MgZGUgc2VhcmNoXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGUgPT09ICdtY3AnKSByZXR1cm5cblxuICAgIGNvbnN0IHEgPSBkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKClcbiAgICBpZiAoIXEpIHJldHVyblxuICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG5cbiAgICBpZiAodHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIHNldExvYWRpbmcoY2xpZW50c0xvYWRpbmcpXG4gICAgICBpZiAoY2xpZW50c0Vycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGNsaWVudHNEYXRhPy5jbGllbnRzPy5kYXRhKSB7XG4gICAgICAgIHNldEl0ZW1zKGNsaWVudHNEYXRhLmNsaWVudHMuZGF0YS5tYXAoYyA9PiBtYXBDbGllbnRUb0l0ZW0oYywgcSkpKVxuICAgICAgICBzeW5jQ2xpZW50c1BhZ2luYXRpb24oY2xpZW50c0RhdGEpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICBzZXRMb2FkaW5nKHVzZXJzTG9hZGluZylcbiAgICAgIGlmICh1c2Vyc0Vycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHVzZXJzRGF0YT8udXNlcnM/LmRhdGEpIHtcbiAgICAgICAgY29uc3QgbWFwcGVkID0gdXNlcnNEYXRhLnVzZXJzLmRhdGEubWFwKHUgPT4gbWFwVXNlclRvSXRlbSh1LCBxKSlcbiAgICAgICAgY29uc3QgbWVJZCA9IFN0cmluZyhjb3JVc2VyLmlkKVxuICAgICAgICBjb25zdCBoYXNNZUluUmVzdWx0cyA9IG1hcHBlZC5zb21lKGl0ZW0gPT4gU3RyaW5nKGl0ZW0uaWQpID09PSBtZUlkKVxuICAgICAgICBjb25zdCB3aXRob3V0TWUgPSBtYXBwZWQuZmlsdGVyKGl0ZW0gPT4gU3RyaW5nKGl0ZW0uaWQpICE9PSBtZUlkKVxuICAgICAgICBjb25zdCBtZUl0ZW0gPSBtYXBDb3JVc2VyVG9Vc2VySXRlbShjb3JVc2VyLCBxLCB0KCdjb250ZXh0TWVudGlvbi5tZScpKVxuICAgICAgICBzZXRJdGVtcyhoYXNNZUluUmVzdWx0cyA/IFttZUl0ZW0sIC4uLndpdGhvdXRNZV0gOiBtYXBwZWQpXG4gICAgICAgIHN5bmNVc2Vyc1BhZ2luYXRpb24odXNlcnNEYXRhKVxuICAgICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2V0TG9hZGluZyhzZWFyY2hMb2FkaW5nKVxuICAgICAgaWYgKHNlYXJjaEVycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaERhdGE/LnNlYXJjaCkge1xuICAgICAgICBzZXRJdGVtcyhzZWFyY2hEYXRhLnNlYXJjaC5tYXAociA9PiBtYXBTZWFyY2hUb0l0ZW0ociwgdHlwZSwgcSwgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93KSkpXG4gICAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIHNlYXJjaERhdGEsXG4gICAgY2xpZW50c0RhdGEsXG4gICAgdXNlcnNEYXRhLFxuICAgIHNlYXJjaExvYWRpbmcsXG4gICAgY2xpZW50c0xvYWRpbmcsXG4gICAgdXNlcnNMb2FkaW5nLFxuICAgIHNlYXJjaEVycm9yLFxuICAgIGNsaWVudHNFcnJvcixcbiAgICB1c2Vyc0Vycm9yLFxuICAgIGRlYm91bmNlZFNlYXJjaFZhbHVlLFxuICAgIHR5cGUsXG4gICAgc3luY0NsaWVudHNQYWdpbmF0aW9uLFxuICAgIHN5bmNVc2Vyc1BhZ2luYXRpb24sXG4gICAgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93LFxuICAgIGNvclVzZXIsXG4gICAgdCxcbiAgXSlcblxuICBjb25zdCBsb2FkTW9yZSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nTW9yZSB8fCAhaGFzTW9yZSB8fCBhY3RpdmVQYWdpbmF0aW9uU291cmNlID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzYWZlQ3VycmVudFBhZ2UgPSBub3JtYWxpemVQb3NpdGl2ZUludChjdXJyZW50UGFnZSwgMSlcbiAgICBjb25zdCBuZXh0UGFnZSA9IHNhZmVDdXJyZW50UGFnZSArIDFcbiAgICBjb25zdCBxID0gZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpXG4gICAgY29uc3QgbG9hZE1vcmVCYXNlbGluZUdlbiA9IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudFxuICAgIHNldElzTG9hZGluZ01vcmUodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgaWYgKGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UgPT09ICd1c2VycycpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFVzZXJzRGlyZWN0b3J5KHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGZpbHRlcnM6IGJ1aWxkVXNlcnNEaXJlY3RvcnlGaWx0ZXJzKHEpLFxuICAgICAgICAgICAgcGFnZTogbmV4dFBhZ2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGxvYWRNb3JlQmFzZWxpbmVHZW4gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG5leHRJdGVtcyA9IChkYXRhPy51c2Vycz8uZGF0YSA/PyBbXSkubWFwKHUgPT4gbWFwVXNlclRvSXRlbSh1LCBxKSlcbiAgICAgICAgc2V0SXRlbXMocHJldiA9PiB7XG4gICAgICAgICAgaWYgKCFxKSB7XG4gICAgICAgICAgICBjb25zdCBtZUl0ZW0gPVxuICAgICAgICAgICAgICBwcmV2WzBdPy50eXBlID09PSAndXNlcicgPyBwcmV2WzBdIDogbWFwQ29yVXNlclRvVXNlckl0ZW0oY29yVXNlciwgJycsIHQoJ2NvbnRleHRNZW50aW9uLm1lJykpXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5tYXAoaXRlbSA9PiBTdHJpbmcoaXRlbS5pZCkpKVxuICAgICAgICAgICAgY29uc3QgYXBwZW5kZWQgPSBuZXh0SXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWV4aXN0aW5nSWRzLmhhcyhTdHJpbmcoaXRlbS5pZCkpKVxuICAgICAgICAgICAgY29uc3Qgd2l0aG91dE1lID0gcHJldi5maWx0ZXIoaXRlbSA9PiBTdHJpbmcoaXRlbS5pZCkgIT09IFN0cmluZyhtZUl0ZW0uaWQpKVxuICAgICAgICAgICAgcmV0dXJuIFttZUl0ZW0sIC4uLndpdGhvdXRNZSwgLi4uYXBwZW5kZWRdXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChwcmV2Lm1hcChpdGVtID0+IGAke2l0ZW0udHlwZX0tJHtpdGVtLmlkfWApKVxuICAgICAgICAgIGNvbnN0IGFwcGVuZGVkID0gbmV4dEl0ZW1zLmZpbHRlcihpdGVtID0+ICFleGlzdGluZ0lkcy5oYXMoYCR7aXRlbS50eXBlfS0ke2l0ZW0uaWR9YCkpXG4gICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCAuLi5hcHBlbmRlZF1cbiAgICAgICAgfSlcbiAgICAgICAgc3luY1VzZXJzUGFnaW5hdGlvbihkYXRhKVxuICAgICAgfSBlbHNlIGlmIChhY3RpdmVQYWdpbmF0aW9uU291cmNlID09PSAnY2xpZW50cy1zZWFyY2gnKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZmV0Y2hTZWFyY2hDbGllbnRzKHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGZpbHRlcjogeyBuYW1lOiBxIH0sXG4gICAgICAgICAgICBwYWdlOiBuZXh0UGFnZSxcbiAgICAgICAgICAgIHBlclBhZ2U6IDIwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChsb2FkTW9yZUJhc2VsaW5lR2VuICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBjb25zdCBuZXh0SXRlbXMgPSAoZGF0YT8uY2xpZW50cz8uZGF0YSA/PyBbXSkubWFwKGMgPT4gbWFwQ2xpZW50VG9JdGVtKGMsIHEpKVxuICAgICAgICBzZXRJdGVtcyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5tYXAoaXRlbSA9PiBgJHtpdGVtLnR5cGV9LSR7aXRlbS5pZH1gKSlcbiAgICAgICAgICBjb25zdCBhcHBlbmRlZCA9IG5leHRJdGVtcy5maWx0ZXIoaXRlbSA9PiAhZXhpc3RpbmdJZHMuaGFzKGAke2l0ZW0udHlwZX0tJHtpdGVtLmlkfWApKVxuICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgLi4uYXBwZW5kZWRdXG4gICAgICAgIH0pXG4gICAgICAgIHN5bmNDbGllbnRzUGFnaW5hdGlvbihkYXRhKVxuICAgICAgfSBlbHNlIGlmIChhY3RpdmVQYWdpbmF0aW9uU291cmNlID09PSAndGFzay1mYWxsYmFjaycpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fVxuICAgICAgICBpZiAoc3RhYmxlU2NvcGUucHJvamVjdElkICE9PSBudWxsICYmIHN0YWJsZVNjb3BlLnByb2plY3RJZCAhPT0gdW5kZWZpbmVkICYmIHN0YWJsZVNjb3BlLnByb2plY3RJZCAhPT0gJycpIHtcbiAgICAgICAgICBmaWx0ZXIucHJvamVjdElkcyA9IFtTdHJpbmcoc3RhYmxlU2NvcGUucHJvamVjdElkKV1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09IG51bGwgJiYgc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gJycpIHtcbiAgICAgICAgICBmaWx0ZXIuY2xpZW50SWRzID0gW1N0cmluZyhzdGFibGVTY29wZS5jbGllbnRJZCldXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayh7XG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBmaWx0ZXI6IHsgYXJjaGl2ZWQ6IGZhbHNlLCAuLi5maWx0ZXIgfSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHsgb2Zmc2V0OiAobmV4dFBhZ2UgLSAxKSAqIDIwLCBzaXplOiAyMCB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChsb2FkTW9yZUJhc2VsaW5lR2VuICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBjb25zdCBuZXh0SXRlbXMgPSAoZGF0YT8udGFza0ZhbWlseT8uZGF0YSA/PyBbXSlcbiAgICAgICAgICAubWFwKG5vcm1hbGl6ZVRhc2tGYW1pbHlSZWNvcmQpXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgUmVjZW50VGFza0l0ZW0gPT4gaXRlbSAhPT0gbnVsbClcbiAgICAgICAgICAubWFwKHRhc2sgPT4gbWFwUmVjZW50VGFza1RvSXRlbSh0YXNrLCAnJywgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93KSlcbiAgICAgICAgc2V0SXRlbXMocHJldiA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHByZXYubWFwKGl0ZW0gPT4gYCR7aXRlbS50eXBlfS0ke2l0ZW0uaWR9YCkpXG4gICAgICAgICAgY29uc3QgYXBwZW5kZWQgPSBuZXh0SXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWV4aXN0aW5nSWRzLmhhcyhgJHtpdGVtLnR5cGV9LSR7aXRlbS5pZH1gKSlcbiAgICAgICAgICByZXR1cm4gWy4uLnByZXYsIC4uLmFwcGVuZGVkXVxuICAgICAgICB9KVxuICAgICAgICBzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbihkYXRhKVxuICAgICAgfSBlbHNlIGlmIChhY3RpdmVQYWdpbmF0aW9uU291cmNlID09PSAncHJvamVjdC1mYWxsYmFjaycpIHtcbiAgICAgICAgY29uc3QgYXJndW1lbnRzRmlsdGVyID1cbiAgICAgICAgICBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gbnVsbCAmJiBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSAnJ1xuICAgICAgICAgICAgPyB7IGNsaWVudF9pZDogW1N0cmluZyhzdGFibGVTY29wZS5jbGllbnRJZCldIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZmV0Y2hQcm9qZWN0c0ZhbGxiYWNrKHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIC4uLihhcmd1bWVudHNGaWx0ZXIgPyB7IGFyZ3VtZW50czogYXJndW1lbnRzRmlsdGVyIH0gOiB7fSksXG4gICAgICAgICAgICBwYWdlOiBuZXh0UGFnZSxcbiAgICAgICAgICAgIHBlclBhZ2U6IDIwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChsb2FkTW9yZUJhc2VsaW5lR2VuICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBjb25zdCBuZXh0SXRlbXMgPSAoZGF0YT8ucHJvamVjdHM/LmRhdGEgPz8gW10pXG4gICAgICAgICAgLm1hcChub3JtYWxpemVQcm9qZWN0c0ZhbGxiYWNrUmVjb3JkKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIFJhd1NlYXJjaFJlc3VsdCA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAgIC5tYXAoaXRlbSA9PiBtYXBTZWFyY2hUb0l0ZW0oaXRlbSwgJ3Byb2plY3QnLCAnJykpXG4gICAgICAgIHNldEl0ZW1zKHByZXYgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChwcmV2Lm1hcChpdGVtID0+IGAke2l0ZW0udHlwZX0tJHtpdGVtLmlkfWApKVxuICAgICAgICAgIGNvbnN0IGFwcGVuZGVkID0gbmV4dEl0ZW1zLmZpbHRlcihpdGVtID0+ICFleGlzdGluZ0lkcy5oYXMoYCR7aXRlbS50eXBlfS0ke2l0ZW0uaWR9YCkpXG4gICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCAuLi5hcHBlbmRlZF1cbiAgICAgICAgfSlcbiAgICAgICAgc3luY1Byb2plY3RGYWxsYmFja1BhZ2luYXRpb24oZGF0YSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChsb2FkTW9yZUJhc2VsaW5lR2VuICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgY29uc29sZS5lcnJvcignW3VzZUVudGl0eVNlYXJjaF0gbG9hZE1vcmUgZmFpbGVkJywge1xuICAgICAgICBzb3VyY2U6IGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UsXG4gICAgICAgIG5leHRQYWdlLFxuICAgICAgICBlcnJvcjogZXJyLFxuICAgICAgfSlcbiAgICAgIC8vIEV2aXRhIGxvb3AgZGUgcmVpbnRlbnRvcyBhdXRvbcOhdGljb3MgcG9yIHNjcm9sbCBjdWFuZG8gYmFja2VuZCBlc3TDoSBjYcOtZG8gKGVqLiA1MDMpLlxuICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZ01vcmUoZmFsc2UpXG4gICAgfVxuICB9LCBbXG4gICAgaXNMb2FkaW5nTW9yZSxcbiAgICBoYXNNb3JlLFxuICAgIGN1cnJlbnRQYWdlLFxuICAgIGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UsXG4gICAgZGVib3VuY2VkU2VhcmNoVmFsdWUsXG4gICAgZmV0Y2hVc2Vyc0RpcmVjdG9yeSxcbiAgICBmZXRjaFNlYXJjaENsaWVudHMsXG4gICAgZmV0Y2hUYXNrRmFtaWx5RmFsbGJhY2ssXG4gICAgZmV0Y2hQcm9qZWN0c0ZhbGxiYWNrLFxuICAgIHN0YWJsZVNjb3BlLnByb2plY3RJZCxcbiAgICBzdGFibGVTY29wZS5jbGllbnRJZCxcbiAgICBzaG93UHJvamVjdE5hbWVJblRhc2tSb3csXG4gICAgY29yVXNlcixcbiAgICB0LFxuICAgIHN5bmNDbGllbnRzUGFnaW5hdGlvbixcbiAgICBzeW5jVXNlcnNQYWdpbmF0aW9uLFxuICAgIHN5bmNUYXNrRmFsbGJhY2tQYWdpbmF0aW9uLFxuICAgIHN5bmNQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uLFxuICBdKVxuXG4gIC8vIE1hbnRlbmVtb3MgdW5hIHJlZiBhIGxhIMO6bHRpbWEgZmV0Y2hSZWNlbnQgcGFyYSBxdWUgZWwgZWZmZWN0IGRlIHJlY2VudHMgbm8gc2VcbiAgLy8gcmUtZGlzcGFyZSBzb2xvIHBvcnF1ZSBjYW1iacOzIGxhIGlkZW50aWRhZCBkZSBmZXRjaFJlY2VudCAoc2NvcGUvY29yVXNlci90KS5cbiAgY29uc3QgZmV0Y2hSZWNlbnRSZWYgPSB1c2VSZWYoZmV0Y2hSZWNlbnQpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmV0Y2hSZWNlbnRSZWYuY3VycmVudCA9IGZldGNoUmVjZW50XG4gIH0sIFtmZXRjaFJlY2VudF0pXG5cbiAgLy8gVHJpZ2dlciBkZSByZWNlbnRzOiBsb3MgcmVjZW50cyBkZSB1c2VyIE5PIGRlcGVuZGVuIGRlbCBzY29wZSwgYXPDrSBxdWUgY2FtYmlhclxuICAvLyBkZSBwcm95ZWN0by9jbGllbnRlIG5vIGRlYmUgcmUtZmV0Y2hlYXJsb3MuIExvcyB0aXBvcyBzY29wZWFkb3MgKHByb2plY3QvdGFzaykgc8OtLlxuICBjb25zdCByZWNlbnRzVHJpZ2dlciA9XG4gICAgdHlwZSA9PT0gJ3VzZXInXG4gICAgICA/ICd1c2VyJ1xuICAgICAgOiBgJHt0eXBlfXwke3N0YWJsZVNjb3BlLnByb2plY3RJZCA/PyAnJ318JHtzdGFibGVTY29wZS5jbGllbnRJZCA/PyAnJ318JHtzdGFibGVTY29wZS5hZ2VudEVudGl0eSA/PyAnJ318JHttY3BTbHVnc0tleX1gXG5cbiAgLy8gQ3VhbmRvIHNlIGxpbXBpYSBlbCBzZWFyY2gsIHZvbHZlciBhIHJlY2VudHNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKSkge1xuICAgICAgZmV0Y2hSZWNlbnRSZWYuY3VycmVudCgpXG4gICAgfVxuICB9LCBbZGVib3VuY2VkU2VhcmNoVmFsdWUsIHJlY2VudHNUcmlnZ2VyXSlcblxuICByZXR1cm4ge1xuICAgIGl0ZW1zLFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgaGlkZVJlY2VudHNMYWJlbCxcbiAgICBoYXNNb3JlLFxuICAgIGlzTG9hZGluZ01vcmUsXG4gICAgbG9hZE1vcmUsXG4gICAgc2VhcmNoVmFsdWUsXG4gICAgdXBkYXRlU2VhcmNoVmFsdWU6IHNldFNlYXJjaFZhbHVlLFxuICAgIGZldGNoUmVjZW50LFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsU0FBU0EsWUFBWSxRQUFRLGdCQUFnQjtBQUM3QyxTQUFTQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ3pFLFNBQVNDLGdCQUFnQixRQUFRLGlEQUFpRDtBQUNsRixTQUFTQyxpQkFBaUIsUUFBUSxtREFBbUQ7QUFDckYsU0FBU0MsY0FBYyxRQUFRLDZDQUE2QztBQUU1RSxTQUFTQyxPQUFPLFFBQVEscUJBQXFCO0FBQzdDLFNBQVNDLGlCQUFpQixFQUFFQyxlQUFlLEVBQUVDLG9CQUFvQixRQUFRLHFDQUFxQztBQUM5RyxTQUFTQyxjQUFjLFFBQVEscUNBQXFDO0FBQ3BFLFNBQVNDLGVBQWUsUUFBUSx1Q0FBdUM7QUFDdkUsU0FBU0Msd0JBQXdCLFFBQVEscUJBQXFCO0FBQzlELFNBQVNDLFdBQVcsUUFBUSxlQUFlO0FBQzNDLFNBQVNDLElBQUksUUFBUSxRQUFRO0FBd0Y3QixJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJQyxLQUFjLEVBQUVDLFFBQWdCLEVBQWE7RUFDekUsSUFBTUMsTUFBTSxHQUFHQyxNQUFNLENBQUNILEtBQUssQ0FBQztFQUM1QixJQUFJLENBQUNHLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixNQUFNLENBQUMsRUFBRSxPQUFPRCxRQUFRO0VBQzdDLElBQU1JLFVBQVUsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNMLE1BQU0sQ0FBQztFQUNyQyxPQUFPRyxVQUFVLEdBQUcsQ0FBQyxHQUFHQSxVQUFVLEdBQUdKLFFBQVE7QUFDL0MsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBZ0JBLElBQU1PLG9CQUEwRSxHQUFHO0VBQ2pGQyxPQUFPLEVBQUU7SUFBRUEsT0FBTyxFQUFFLE1BQU07SUFBRUMsUUFBUSxFQUFFO0VBQU0sQ0FBQztFQUM3Q0MsSUFBSSxFQUFFO0lBQUVBLElBQUksRUFBRSxNQUFNO0lBQUVELFFBQVEsRUFBRTtFQUFRO0FBQzFDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNRSwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUFJQyxLQUF5QixFQUFvQztFQUNoRyxJQUFNQyxTQUFTLEdBQ2IsQ0FBQUQsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVFLFFBQVEsTUFBS0MsU0FBUyxJQUFJLENBQUFILEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFRSxRQUFRLE1BQUssSUFBSSxJQUFJLENBQUFGLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFRSxRQUFRLE1BQUssRUFBRSxHQUFHRSxNQUFNLENBQUNKLEtBQUssQ0FBQ0UsUUFBUSxDQUFDLEdBQUcsSUFBSTtFQUNySCxJQUFNRyxVQUFVLEdBQ2QsQ0FBQUwsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVNLFNBQVMsTUFBS0gsU0FBUyxJQUFJLENBQUFILEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFTSxTQUFTLE1BQUssSUFBSSxJQUFJLENBQUFOLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFTSxTQUFTLE1BQUssRUFBRSxHQUNsRkYsTUFBTSxDQUFDSixLQUFLLENBQUNNLFNBQVMsQ0FBQyxHQUN2QixJQUFJO0VBRVYsSUFBTUMsV0FBVyxHQUFHUCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRU8sV0FBVztFQUN0QyxJQUFNQyxPQUFzQyxHQUFHLEVBQUU7RUFFakQsSUFBTUMsVUFBVSxHQUFHLFNBQWJBLFVBQVVBLENBQUEsRUFBUztJQUN2QixJQUFJUixTQUFTLEVBQUVPLE9BQU8sQ0FBQ0UsSUFBSSxDQUFDO01BQUVSLFFBQVEsRUFBRUQ7SUFBVSxDQUFDLENBQUM7RUFDdEQsQ0FBQztFQUNELElBQU1VLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBLEVBQVM7SUFDeEIsSUFBSU4sVUFBVSxFQUFFRyxPQUFPLENBQUNFLElBQUksQ0FBQztNQUFFSixTQUFTLEVBQUVEO0lBQVcsQ0FBQyxDQUFDO0VBQ3pELENBQUM7RUFFRCxJQUFJRSxXQUFXLEtBQUssU0FBUyxFQUFFO0lBQzdCLElBQUlGLFVBQVUsRUFBRTtNQUNkTSxXQUFXLENBQUMsQ0FBQztJQUNmLENBQUMsTUFBTSxJQUFJVixTQUFTLEVBQUU7TUFDcEJRLFVBQVUsQ0FBQyxDQUFDO0lBQ2Q7RUFDRixDQUFDLE1BQU0sSUFBSUYsV0FBVyxLQUFLLFFBQVEsRUFBRTtJQUNuQ0UsVUFBVSxDQUFDLENBQUM7SUFDWkUsV0FBVyxDQUFDLENBQUM7RUFDZixDQUFDLE1BQU07SUFDTEYsVUFBVSxDQUFDLENBQUM7SUFDWkUsV0FBVyxDQUFDLENBQUM7RUFDZjtFQUVBLE9BQU9ILE9BQU87QUFDaEIsQ0FBQztBQUVELElBQU1JLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUlaLEtBQXlCLEVBQXlCO0VBQzlFLElBQU1RLE9BQU8sR0FBR1QsMkJBQTJCLENBQUNDLEtBQUssQ0FBQztFQUNsRCxJQUFJUSxPQUFPLENBQUNLLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBT1YsU0FBUztFQUMxQyxPQUFPVyxJQUFJLENBQUNDLFNBQVMsQ0FBQ1AsT0FBTyxDQUFDO0FBQ2hDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNUSx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUFJaEIsS0FBeUIsRUFBeUI7RUFDakYsSUFBTUMsU0FBUyxHQUNiLENBQUFELEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFRSxRQUFRLE1BQUtDLFNBQVMsSUFBSSxDQUFBSCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRUUsUUFBUSxNQUFLLElBQUksSUFBSSxDQUFBRixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRUUsUUFBUSxNQUFLLEVBQUUsR0FBR0UsTUFBTSxDQUFDSixLQUFLLENBQUNFLFFBQVEsQ0FBQyxHQUFHLElBQUk7RUFDckgsSUFBSSxDQUFDRCxTQUFTLEVBQUUsT0FBT0UsU0FBUztFQUNoQyxPQUFPVyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDO0lBQUViLFFBQVEsRUFBRUQ7RUFBVSxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsSUFBTWdCLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlDLElBQTBCLEVBQUVsQixLQUF5QixFQUF5QjtFQUM5RyxJQUFJa0IsSUFBSSxLQUFLLE1BQU0sRUFBRSxPQUFPTixvQkFBb0IsQ0FBQ1osS0FBSyxDQUFDO0VBQ3ZELElBQUlrQixJQUFJLEtBQUssU0FBUyxFQUFFLE9BQU9GLHVCQUF1QixDQUFDaEIsS0FBSyxDQUFDO0VBQzdELE9BQU9HLFNBQVM7QUFDbEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxJQUFNZ0IsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBSUQsSUFBMEIsRUFBYTtFQUNsRSxJQUFJQSxJQUFJLEtBQUssU0FBUyxFQUFFO0lBQ3RCLE9BQU9KLElBQUksQ0FBQ0MsU0FBUyxDQUFDcEIsb0JBQW9CLENBQUNDLE9BQU8sQ0FBQztFQUNyRDtFQUNBLE9BQU9rQixJQUFJLENBQUNDLFNBQVMsQ0FBQ3BCLG9CQUFvQixDQUFDRyxJQUFJLENBQUM7QUFDbEQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNc0IsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FBSUMsQ0FBUyxFQUFhO0VBQ3hELElBQU1DLElBQTZCLEdBQUc7SUFDcENDLFlBQVksRUFBRSxJQUFJO0lBQ2xCQyxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QsSUFBTUMsUUFBUSxHQUFHSixDQUFDLENBQUNLLElBQUksQ0FBQyxDQUFDO0VBQ3pCLElBQUlELFFBQVEsRUFBRTtJQUNaSCxJQUFJLENBQUNLLFdBQVcsR0FBR0YsUUFBUTtFQUM3QjtFQUNBLE9BQU9YLElBQUksQ0FBQ0MsU0FBUyxDQUFDTyxJQUFJLENBQUM7QUFDN0IsQ0FBQztBQUVELElBQU1NLGNBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBSUMsSUFBWSxFQUFFQyxXQUFtQixFQUFLO0VBQzVELElBQUksQ0FBQ0EsV0FBVyxFQUFFLE9BQU8zQixTQUFTO0VBQ2xDLElBQU00QixHQUFHLEdBQUdGLElBQUksQ0FBQ0csV0FBVyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDSCxXQUFXLENBQUNFLFdBQVcsQ0FBQyxDQUFDLENBQUM7RUFDakUsSUFBSUQsR0FBRyxHQUFHLENBQUMsRUFBRSxPQUFPNUIsU0FBUztFQUM3QixPQUFPO0lBQUUrQixLQUFLLEVBQUVILEdBQUc7SUFBRWxCLE1BQU0sRUFBRWlCLFdBQVcsQ0FBQ2pCO0VBQU8sQ0FBQztBQUNuRCxDQUFDO0FBRUQsSUFBTXNCLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFBO0VBQUEsU0FBQUMsSUFBQSxHQUFBQyxTQUFBLENBQUF4QixNQUFBLEVBQVV5QixNQUFNLE9BQUFDLEtBQUEsQ0FBQUgsSUFBQSxHQUFBSSxJQUFBLE1BQUFBLElBQUEsR0FBQUosSUFBQSxFQUFBSSxJQUFBO0lBQU5GLE1BQU0sQ0FBQUUsSUFBQSxJQUFBSCxTQUFBLENBQUFHLElBQUE7RUFBQTtFQUFBLE9BQ2hDRixNQUFNLENBQUNHLElBQUksQ0FBQyxVQUFBdEQsS0FBSztJQUFBLE9BQUlBLEtBQUssS0FBS2dCLFNBQVMsSUFBSWhCLEtBQUssS0FBSyxJQUFJO0VBQUEsRUFBQztBQUFBO0FBRTdELElBQU11RCxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFJdkQsS0FBYyxFQUFhO0VBQ3pELElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRSxPQUFPLEVBQUU7RUFDeEMsT0FBT0EsS0FBSyxDQUFDdUMsSUFBSSxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUVELElBQU1pQixtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJQyxZQUF5RCxFQUFhO0VBQ2pHLElBQUksT0FBT0EsWUFBWSxLQUFLLFFBQVEsRUFBRSxPQUFPQSxZQUFZLENBQUNsQixJQUFJLENBQUMsQ0FBQztFQUNoRSxJQUFJa0IsWUFBWSxJQUFJQyxPQUFBLENBQU9ELFlBQVksTUFBSyxRQUFRLElBQUksTUFBTSxJQUFJQSxZQUFZLEVBQUU7SUFDOUUsT0FBT0Ysc0JBQXNCLENBQUNFLFlBQVksQ0FBQ0UsSUFBSSxDQUFDO0VBQ2xEO0VBQ0EsT0FBTyxFQUFFO0FBQ1gsQ0FBQztBQUVELElBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBSUMsQ0FBWSxFQUFFbEIsV0FBbUI7RUFBQSxJQUFBbUIsaUJBQUEsRUFBQUMsa0JBQUE7RUFBQSxPQUEwQjtJQUNsRkMsRUFBRSxFQUFFSCxDQUFDLENBQUNHLEVBQUU7SUFDUmpDLElBQUksRUFBRSxRQUFRO0lBQ2RrQyxPQUFPLEVBQUVKLENBQUMsQ0FBQ0YsSUFBSTtJQUNmTyxnQkFBZ0IsRUFBRXpCLGNBQWMsQ0FBQ29CLENBQUMsQ0FBQ0YsSUFBSSxFQUFFaEIsV0FBVyxDQUFDO0lBQ3JEd0IsVUFBVSxFQUFFO01BQ1ZDLEtBQUssR0FBQU4saUJBQUEsR0FBRUQsQ0FBQyxDQUFDUSxjQUFjLGNBQUFQLGlCQUFBLGNBQUFBLGlCQUFBLEdBQUk5QyxTQUFTO01BQ3BDc0QsVUFBVSxFQUFFO0lBQ2QsQ0FBQztJQUNEQyxHQUFHLEVBQUU7TUFDSFAsRUFBRSxFQUFFSCxDQUFDLENBQUNHLEVBQUU7TUFDUkwsSUFBSSxFQUFFRSxDQUFDLENBQUNGLElBQUk7TUFDWlUsY0FBYyxHQUFBTixrQkFBQSxHQUFFRixDQUFDLENBQUNRLGNBQWMsY0FBQU4sa0JBQUEsY0FBQUEsa0JBQUEsR0FBSTtJQUN0QztFQUNGLENBQUM7QUFBQSxDQUFDO0FBRUYsSUFBTVMsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFJQyxDQUFtQixFQUFFOUIsV0FBbUIsRUFBeUI7RUFBQSxJQUFBK0IsWUFBQSxFQUFBQyxXQUFBLEVBQUFDLFVBQUEsRUFBQUMsb0JBQUEsRUFBQUMsZUFBQSxFQUFBQyxRQUFBO0VBQ3RGLElBQU1DLFFBQVEsR0FBRyxHQUFBQyxNQUFBLEVBQUFQLFlBQUEsR0FBR0QsQ0FBQyxDQUFDUyxTQUFTLGNBQUFSLFlBQUEsY0FBQUEsWUFBQSxHQUFJLEVBQUUsT0FBQU8sTUFBQSxFQUFBTixXQUFBLEdBQUlGLENBQUMsQ0FBQ1UsUUFBUSxjQUFBUixXQUFBLGNBQUFBLFdBQUEsR0FBSSxFQUFFLEVBQUdwQyxJQUFJLENBQUMsQ0FBQztFQUNsRSxJQUFNMEIsT0FBTyxHQUFHZSxRQUFRLElBQUlQLENBQUMsQ0FBQ1csS0FBSyxJQUFJbkUsTUFBTSxDQUFDd0QsQ0FBQyxDQUFDVCxFQUFFLENBQUM7RUFFbkQsT0FBTztJQUNMQSxFQUFFLEVBQUVTLENBQUMsQ0FBQ1QsRUFBRTtJQUNSakMsSUFBSSxFQUFFLE1BQU07SUFDWmtDLE9BQU8sRUFBUEEsT0FBTztJQUNQQyxnQkFBZ0IsRUFBRXpCLGNBQWMsQ0FBQ3dCLE9BQU8sRUFBRXRCLFdBQVcsQ0FBQztJQUN0RDRCLEdBQUcsRUFBRTtNQUNIUCxFQUFFLEVBQUVTLENBQUMsQ0FBQ1QsRUFBRTtNQUNSTCxJQUFJLEVBQUVNLE9BQU87TUFDYm9CLE9BQU8sR0FBQVQsVUFBQSxHQUFFSCxDQUFDLENBQUNZLE9BQU8sY0FBQVQsVUFBQSxjQUFBQSxVQUFBLEdBQUksSUFBSTtNQUMxQlUsWUFBWSxHQUFBVCxvQkFBQSxJQUFBQyxlQUFBLEdBQUVMLENBQUMsQ0FBQ2hCLFlBQVksY0FBQXFCLGVBQUEsdUJBQWRBLGVBQUEsQ0FBZ0JuQixJQUFJLGNBQUFrQixvQkFBQSxjQUFBQSxvQkFBQSxHQUFJLElBQUk7TUFDMUNPLEtBQUssR0FBQUwsUUFBQSxHQUFFTixDQUFDLENBQUNXLEtBQUssY0FBQUwsUUFBQSxjQUFBQSxRQUFBLEdBQUk7SUFDcEI7RUFDRixDQUFDO0FBQ0gsQ0FBQztBQUVELElBQU1RLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQ3hCQyxJQUFnQyxFQUNoQzdDLFdBQW1CLEVBQ25COEMsT0FBZSxFQUNRO0VBQUEsSUFBQUMsZUFBQSxFQUFBQyxjQUFBO0VBQ3ZCLElBQU1YLFFBQVEsR0FBRyxHQUFBQyxNQUFBLEVBQUFTLGVBQUEsR0FBR0YsSUFBSSxDQUFDTixTQUFTLGNBQUFRLGVBQUEsY0FBQUEsZUFBQSxHQUFJLEVBQUUsT0FBQVQsTUFBQSxFQUFBVSxjQUFBLEdBQUlILElBQUksQ0FBQ0wsUUFBUSxjQUFBUSxjQUFBLGNBQUFBLGNBQUEsR0FBSSxFQUFFLEVBQUdwRCxJQUFJLENBQUMsQ0FBQztFQUN4RTtFQUNBLElBQU1xRCxZQUFZLEdBQUdwQyxtQkFBbUIsQ0FBQ2dDLElBQUksQ0FBQ0ssYUFBYSxDQUFDLElBQUksSUFBSTtFQUNwRSxJQUFNVCxLQUFLLEdBQUc3QixzQkFBc0IsQ0FBQ2lDLElBQUksQ0FBQ0osS0FBSyxDQUFDLElBQUksSUFBSTtFQUV4RCxPQUFPO0lBQ0xwQixFQUFFLEVBQUV3QixJQUFJLENBQUN4QixFQUFFO0lBQ1hqQyxJQUFJLEVBQUUsTUFBTTtJQUNaa0MsT0FBTyxFQUFFd0IsT0FBTztJQUNoQnZCLGdCQUFnQixFQUFFekIsY0FBYyxDQUFDZ0QsT0FBTyxFQUFFOUMsV0FBVyxDQUFDO0lBQ3RENEIsR0FBRyxFQUFFO01BQ0hQLEVBQUUsRUFBRXdCLElBQUksQ0FBQ3hCLEVBQUU7TUFDWEwsSUFBSSxFQUFFcUIsUUFBUSxJQUFJL0QsTUFBTSxDQUFDdUUsSUFBSSxDQUFDeEIsRUFBRSxDQUFDO01BQ2pDcUIsT0FBTyxFQUFFRyxJQUFJLENBQUNILE9BQU8sSUFBSSxJQUFJO01BQzdCQyxZQUFZLEVBQUVNLFlBQVk7TUFDMUJSLEtBQUssRUFBTEE7SUFDRjtFQUNGLENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBTVUsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FDdkJuRixJQUFvQixFQUNwQmdDLFdBQW1CLEVBRUk7RUFBQSxJQUFBb0QsaUJBQUE7RUFBQSxJQUR2QkMsd0JBQXdCLEdBQUE5QyxTQUFBLENBQUF4QixNQUFBLFFBQUF3QixTQUFBLFFBQUFsQyxTQUFBLEdBQUFrQyxTQUFBLE1BQUcsSUFBSTtFQUUvQixJQUFNZSxPQUFPLEdBQUl0RCxJQUFJLENBQUNzRixLQUFLLElBQUl0RixJQUFJLENBQUNzRixLQUFLLENBQUMxRCxJQUFJLENBQUMsQ0FBQyxJQUFLdEIsTUFBTSxDQUFDTixJQUFJLENBQUNxRCxFQUFFLENBQUM7RUFDcEUsSUFBTWtDLFdBQVcsR0FBR0Ysd0JBQXdCLElBQUFELGlCQUFBLEdBQUlwRixJQUFJLENBQUN1RixXQUFXLGNBQUFILGlCQUFBLGNBQUFBLGlCQUFBLEdBQUksSUFBSSxHQUFJLElBQUk7RUFDaEYsT0FBTztJQUNML0IsRUFBRSxFQUFFckQsSUFBSSxDQUFDcUQsRUFBRTtJQUNYakMsSUFBSSxFQUFFLE1BQU07SUFDWmtDLE9BQU8sRUFBUEEsT0FBTztJQUNQQyxnQkFBZ0IsRUFBRXpCLGNBQWMsQ0FBQ3dCLE9BQU8sRUFBRXRCLFdBQVcsQ0FBQztJQUN0RHdCLFVBQVUsRUFBRStCLFdBQVcsR0FBRztNQUFFQyxNQUFNLEVBQUVEO0lBQVksQ0FBQyxHQUFHbEYsU0FBUztJQUM3RHVELEdBQUcsRUFBRTtNQUNIUCxFQUFFLEVBQUVyRCxJQUFJLENBQUNxRCxFQUFFO01BQ1hMLElBQUksRUFBRU0sT0FBTztNQUNiaUMsV0FBVyxFQUFYQTtJQUNGO0VBQ0YsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFNRSx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUFJQyxNQUF3QixFQUE0QjtFQUFBLElBQUFDLGFBQUEsRUFBQUMsYUFBQSxFQUFBQyxlQUFBLEVBQUFDLGNBQUEsRUFBQUMsZUFBQTtFQUNyRixJQUFhQyxZQUFZLEdBQUtOLE1BQU0sQ0FBNUJPLEdBQUc7RUFDWCxJQUFNNUMsRUFBRSxHQUFHMkMsWUFBWTtFQUN2QixJQUFJM0MsRUFBRSxLQUFLaEQsU0FBUyxJQUFJZ0QsRUFBRSxLQUFLLElBQUksSUFBSS9DLE1BQU0sQ0FBQytDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLElBQUk7RUFDckUsSUFBTWlDLEtBQUssR0FBRyxFQUFBSyxhQUFBLEdBQUNELE1BQU0sQ0FBQ0osS0FBSyxjQUFBSyxhQUFBLGNBQUFBLGFBQUEsR0FBSSxFQUFFLEVBQUUvRCxJQUFJLENBQUMsQ0FBQyxJQUFJdEIsTUFBTSxDQUFDK0MsRUFBRSxDQUFDO0VBQ3ZELElBQU1rQyxXQUFXLElBQUFLLGFBQUEsR0FBR3ZELFlBQVksRUFBQXdELGVBQUEsR0FBQ0gsTUFBTSxDQUFDNUYsT0FBTyxjQUFBK0YsZUFBQSx1QkFBZEEsZUFBQSxDQUFnQjdDLElBQUksR0FBQThDLGNBQUEsR0FBRUosTUFBTSxDQUFDUSxNQUFNLGNBQUFKLGNBQUEsdUJBQWJBLGNBQUEsQ0FBZVIsS0FBSyxDQUFDLGNBQUFNLGFBQUEsY0FBQUEsYUFBQSxHQUFJLElBQUk7RUFDcEYsSUFBTU8sU0FBUyxHQUFHLENBQUMsQ0FBQzlELFlBQVksQ0FBQ3FELE1BQU0sQ0FBQ1UsVUFBVSxHQUFBTCxlQUFBLEdBQUVMLE1BQU0sQ0FBQ1EsTUFBTSxjQUFBSCxlQUFBLHVCQUFiQSxlQUFBLENBQWUxQyxFQUFFLENBQUM7RUFDdEUsT0FBTztJQUNMQSxFQUFFLEVBQUZBLEVBQUU7SUFDRmlDLEtBQUssRUFBTEEsS0FBSztJQUNMbEUsSUFBSSxFQUFFK0UsU0FBUyxHQUFHLFNBQVMsR0FBRyxNQUFNO0lBQ3BDWixXQUFXLEVBQVhBO0VBQ0YsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFNYywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUFJWCxNQUE2QixFQUE2QjtFQUFBLElBQUFZLFlBQUEsRUFBQUMsY0FBQSxFQUFBQyxjQUFBLEVBQUFDLG1CQUFBLEVBQUFDLGVBQUE7RUFDakcsSUFBUXJELEVBQUUsR0FBS3FDLE1BQU0sQ0FBYnJDLEVBQUU7RUFDVixJQUFJQSxFQUFFLEtBQUtoRCxTQUFTLElBQUlnRCxFQUFFLEtBQUssSUFBSSxJQUFJL0MsTUFBTSxDQUFDK0MsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sSUFBSTtFQUNyRSxJQUFNaUMsS0FBSyxJQUFBZ0IsWUFBQSxHQUFHWixNQUFNLENBQUMxQyxJQUFJLGNBQUFzRCxZQUFBLGNBQUFBLFlBQUEsR0FBSSxFQUFFO0VBQy9CLElBQU1sRyxRQUFRLElBQUFtRyxjQUFBLEdBQUdsRSxZQUFZLENBQUNxRCxNQUFNLENBQUN0RixRQUFRLEdBQUFvRyxjQUFBLEdBQUVkLE1BQU0sQ0FBQ2lCLE1BQU0sY0FBQUgsY0FBQSx1QkFBYkEsY0FBQSxDQUFlbkQsRUFBRSxDQUFDLGNBQUFrRCxjQUFBLGNBQUFBLGNBQUEsR0FBSSxJQUFJO0VBQ3pFLElBQU1LLFVBQVUsSUFBQUgsbUJBQUEsSUFBQUMsZUFBQSxHQUFHaEIsTUFBTSxDQUFDaUIsTUFBTSxjQUFBRCxlQUFBLHVCQUFiQSxlQUFBLENBQWUxRCxJQUFJLGNBQUF5RCxtQkFBQSxjQUFBQSxtQkFBQSxHQUFJLElBQUk7RUFDOUMsT0FBTztJQUNMcEQsRUFBRSxFQUFGQSxFQUFFO0lBQ0ZpQyxLQUFLLEVBQUxBLEtBQUs7SUFDTGxFLElBQUksRUFBRSxTQUFTO0lBQ2ZoQixRQUFRLEVBQVJBLFFBQVE7SUFDUndHLFVBQVUsRUFBVkE7RUFDRixDQUFDO0FBQ0gsQ0FBQztBQUVELElBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FDbkJDLENBQWtCLEVBQ2xCMUYsSUFBdUIsRUFDdkJZLFdBQW1CLEVBRUk7RUFBQSxJQUFBK0UsY0FBQSxFQUFBQyxlQUFBLEVBQUFDLFdBQUEsRUFBQUMsYUFBQSxFQUFBQyxRQUFBLEVBQUFDLGFBQUE7RUFBQSxJQUR2Qi9CLHdCQUF3QixHQUFBOUMsU0FBQSxDQUFBeEIsTUFBQSxRQUFBd0IsU0FBQSxRQUFBbEMsU0FBQSxHQUFBa0MsU0FBQSxNQUFHLElBQUk7RUFFL0IsSUFBTWUsT0FBTyxHQUFHd0QsQ0FBQyxDQUFDeEIsS0FBSyxJQUFJd0IsQ0FBQyxDQUFDdkIsV0FBVyxJQUFJLEVBQUU7RUFDOUMsSUFBSUMsTUFBaUM7RUFDckMsSUFBSXBFLElBQUksS0FBSyxTQUFTLEVBQUVvRSxNQUFNLEdBQUdzQixDQUFDLENBQUNGLFVBQVUsTUFDeEMsSUFBSXhGLElBQUksS0FBSyxNQUFNLEVBQUVvRSxNQUFNLEdBQUduRixTQUFTLE1BQ3ZDbUYsTUFBTSxJQUFBdUIsY0FBQSxHQUFHRCxDQUFDLENBQUN2QixXQUFXLGNBQUF3QixjQUFBLGNBQUFBLGNBQUEsR0FBSUQsQ0FBQyxDQUFDRixVQUFVO0VBRTNDLElBQU1WLE1BQU0sR0FBRzlFLElBQUksS0FBSyxNQUFNLEdBQUcwRixDQUFDLENBQUNaLE1BQU0sR0FBRyxJQUFJO0VBQ2hELElBQU1DLFNBQVMsR0FBRy9FLElBQUksS0FBSyxNQUFNLElBQUk4RSxNQUFNLElBQUksSUFBSSxJQUFJQSxNQUFNLENBQUM3QyxFQUFFLElBQUksSUFBSSxJQUFJL0MsTUFBTSxDQUFDNEYsTUFBTSxDQUFDN0MsRUFBRSxDQUFDLENBQUN0QyxNQUFNLEdBQUcsQ0FBQztFQUV4RyxJQUFNc0csZUFBZSxHQUFHakcsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDaUUsd0JBQXdCLEdBQUcsSUFBSSxJQUFBMkIsZUFBQSxHQUFJRixDQUFDLENBQUN2QixXQUFXLGNBQUF5QixlQUFBLGNBQUFBLGVBQUEsR0FBSSxJQUFLO0VBRXJHLE9BQU87SUFDTDNELEVBQUUsRUFBRXlELENBQUMsQ0FBQ3pELEVBQUU7SUFDUmpDLElBQUksRUFBSkEsSUFBSTtJQUNKa0MsT0FBTyxFQUFQQSxPQUFPO0lBQ1BDLGdCQUFnQixFQUFFekIsY0FBYyxDQUFDd0IsT0FBTyxFQUFFdEIsV0FBVyxDQUFDO0lBQ3REd0IsVUFBVSxFQUFFZ0MsTUFBTSxHQUFHO01BQUVBLE1BQU0sRUFBTkE7SUFBTyxDQUFDLEdBQUduRixTQUFTO0lBQzNDdUQsR0FBRyxFQUFFO01BQ0hQLEVBQUUsRUFBRXlELENBQUMsQ0FBQ3pELEVBQUU7TUFDUkwsSUFBSSxFQUFFTSxPQUFPO01BQ2JsRCxRQUFRLEdBQUE2RyxXQUFBLEdBQUVILENBQUMsQ0FBQzFHLFFBQVEsY0FBQTZHLFdBQUEsY0FBQUEsV0FBQSxHQUFJLElBQUk7TUFDNUJMLFVBQVUsR0FBQU0sYUFBQSxHQUFFSixDQUFDLENBQUNGLFVBQVUsY0FBQU0sYUFBQSxjQUFBQSxhQUFBLEdBQUksSUFBSTtNQUNoQzNCLFdBQVcsRUFBRThCLGVBQWU7TUFDNUJDLEtBQUssR0FBQUgsUUFBQSxHQUFFTCxDQUFDLENBQUNRLEtBQUssY0FBQUgsUUFBQSxjQUFBQSxRQUFBLEdBQUksSUFBSTtNQUN0QkksUUFBUSxFQUFFcEIsU0FBUyxHQUFHRCxNQUFNLENBQUM3QyxFQUFFLEdBQUcsSUFBSTtNQUN0Q21FLFdBQVcsRUFBRXJCLFNBQVMsR0FBRyxFQUFBaUIsYUFBQSxHQUFBbEIsTUFBTSxDQUFDWixLQUFLLGNBQUE4QixhQUFBLHVCQUFaQSxhQUFBLENBQWN4RixJQUFJLENBQUMsQ0FBQyxLQUFJLElBQUksR0FBRztJQUMxRDtFQUNGLENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBTTZGLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLElBQVk7RUFBQSxPQUN6Q0EsSUFBSSxDQUFDQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDQSxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQUFDLEtBQUk7SUFBQSxPQUFJQSxLQUFJLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0VBQUEsRUFBQztBQUFBO0FBRXRFLElBQU1DLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUlDLEtBQWUsRUFBRS9GLFdBQW1CLEVBQTJCO0VBQ3pGLElBQU1ULENBQUMsR0FBR1MsV0FBVyxDQUFDSixJQUFJLENBQUMsQ0FBQyxDQUFDTSxXQUFXLENBQUMsQ0FBQztFQUMxQyxJQUFJOEYsUUFBUSxHQUFHRCxLQUFLO0VBQ3BCLElBQUl4RyxDQUFDLEVBQUU7SUFDTHlHLFFBQVEsR0FBR0QsS0FBSyxDQUFDRSxNQUFNLENBQUMsVUFBQUMsQ0FBQyxFQUFJO01BQzNCLElBQU01RSxPQUFPLEdBQUdtRSxxQkFBcUIsQ0FBQ1MsQ0FBQyxDQUFDO01BQ3hDLE9BQU9BLENBQUMsQ0FBQ2hHLFdBQVcsQ0FBQyxDQUFDLENBQUNpRyxRQUFRLENBQUM1RyxDQUFDLENBQUMsSUFBSStCLE9BQU8sQ0FBQ3BCLFdBQVcsQ0FBQyxDQUFDLENBQUNpRyxRQUFRLENBQUM1RyxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDO0VBQ0o7RUFDQSxPQUFPeUcsUUFBUSxDQUFDSSxHQUFHLENBQUMsVUFBQVYsSUFBSSxFQUFJO0lBQzFCLElBQU1wRSxPQUFPLEdBQUdtRSxxQkFBcUIsQ0FBQ0MsSUFBSSxDQUFDO0lBQzNDLE9BQU87TUFDTHJFLEVBQUUsRUFBRXFFLElBQUk7TUFDUnRHLElBQUksRUFBRSxLQUFjO01BQ3BCa0MsT0FBTyxFQUFQQSxPQUFPO01BQ1BDLGdCQUFnQixFQUFFekIsY0FBYyxDQUFDd0IsT0FBTyxFQUFFdEIsV0FBVyxDQUFDO01BQ3RENEIsR0FBRyxFQUFFO1FBQ0hQLEVBQUUsRUFBRXFFLElBQUk7UUFDUjFFLElBQUksRUFBRU07TUFDUjtJQUNGLENBQUM7RUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsT0FBTyxJQUFNK0UsZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJakgsSUFBdUIsRUFBRWxCLEtBQXlCLEVBQUs7RUFBQSxJQUFBb0ksZUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxxQkFBQTtFQUNyRixJQUFNQyxPQUFPLEdBQUcvSixPQUFPLENBQUMsQ0FBQztFQUN6QixJQUFBZ0ssS0FBQSxHQUFjeEosSUFBSSxDQUFDLENBQUM7SUFBWnlKLENBQUMsR0FBQUQsS0FBQSxDQUFEQyxDQUFDO0VBQ1Q7RUFDQSxJQUFNQyx5QkFBeUIsR0FBR3ZLLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDM0MsSUFBQXdLLFNBQUEsR0FBc0N2SyxRQUFRLENBQUMsRUFBRSxDQUFDO0lBQUF3SyxVQUFBLEdBQUFDLGNBQUEsQ0FBQUYsU0FBQTtJQUEzQzlHLFdBQVcsR0FBQStHLFVBQUE7SUFBRUUsY0FBYyxHQUFBRixVQUFBO0VBQ2xDLElBQU1HLG9CQUFvQixHQUFHaEssV0FBVyxDQUFDOEMsV0FBVyxFQUFFL0Msd0JBQXdCLENBQUM7RUFFL0UsSUFBQWtLLFVBQUEsR0FBMEI1SyxRQUFRLENBQXVCLEVBQUUsQ0FBQztJQUFBNkssVUFBQSxHQUFBSixjQUFBLENBQUFHLFVBQUE7SUFBckRFLEtBQUssR0FBQUQsVUFBQTtJQUFFRSxRQUFRLEdBQUFGLFVBQUE7RUFDdEIsSUFBQUcsVUFBQSxHQUE4QmhMLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQWlMLFVBQUEsR0FBQVIsY0FBQSxDQUFBTyxVQUFBO0lBQXRDRSxPQUFPLEdBQUFELFVBQUE7SUFBRUUsVUFBVSxHQUFBRixVQUFBO0VBQzFCLElBQUFHLFVBQUEsR0FBMEJwTCxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFxTCxVQUFBLEdBQUFaLGNBQUEsQ0FBQVcsVUFBQTtJQUFsQ0UsS0FBSyxHQUFBRCxVQUFBO0lBQUVFLFFBQVEsR0FBQUYsVUFBQTtFQUN0QixJQUFBRyxVQUFBLEdBQWdEeEwsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBeUwsVUFBQSxHQUFBaEIsY0FBQSxDQUFBZSxVQUFBO0lBQXhERSxnQkFBZ0IsR0FBQUQsVUFBQTtJQUFFRSxtQkFBbUIsR0FBQUYsVUFBQTtFQUM1QyxJQUFBRyxVQUFBLEdBQThCNUwsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBNkwsV0FBQSxHQUFBcEIsY0FBQSxDQUFBbUIsVUFBQTtJQUF0Q0UsT0FBTyxHQUFBRCxXQUFBO0lBQUVFLFVBQVUsR0FBQUYsV0FBQTtFQUMxQixJQUFBRyxXQUFBLEdBQTBDaE0sUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBaU0sV0FBQSxHQUFBeEIsY0FBQSxDQUFBdUIsV0FBQTtJQUFsREUsYUFBYSxHQUFBRCxXQUFBO0lBQUVFLGdCQUFnQixHQUFBRixXQUFBO0VBQ3RDLElBQUFHLFdBQUEsR0FBc0NwTSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQUFxTSxXQUFBLEdBQUE1QixjQUFBLENBQUEyQixXQUFBO0lBQTFDRSxXQUFXLEdBQUFELFdBQUE7SUFBRUUsY0FBYyxHQUFBRixXQUFBO0VBQ2xDLElBQUFHLFdBQUEsR0FBNER4TSxRQUFRLENBQW1CLE1BQU0sQ0FBQztJQUFBeU0sV0FBQSxHQUFBaEMsY0FBQSxDQUFBK0IsV0FBQTtJQUF2RkUsc0JBQXNCLEdBQUFELFdBQUE7SUFBRUUseUJBQXlCLEdBQUFGLFdBQUE7RUFFeEQsSUFBTUcsV0FBVyxHQUFHLEVBQUE3QyxlQUFBLEdBQUNwSSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWtMLFFBQVEsY0FBQTlDLGVBQUEsY0FBQUEsZUFBQSxHQUFJLEVBQUUsRUFBRStDLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDckQsSUFBTWhHLHdCQUF3QixHQUFHLENBQUFuRixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRU8sV0FBVyxNQUFLLFNBQVM7O0VBRWpFO0VBQ0EsSUFBTTZLLFdBQVcsR0FBR2pOLE9BQU8sQ0FDekI7SUFBQSxJQUFBa04sZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxrQkFBQTtJQUFBLE9BQU87TUFDTHRMLFFBQVEsR0FBQW1MLGVBQUEsR0FBRXJMLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFRSxRQUFRLGNBQUFtTCxlQUFBLGNBQUFBLGVBQUEsR0FBSSxJQUFJO01BQ2pDL0ssU0FBUyxHQUFBZ0wsZ0JBQUEsR0FBRXRMLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFTSxTQUFTLGNBQUFnTCxnQkFBQSxjQUFBQSxnQkFBQSxHQUFJLElBQUk7TUFDbkNKLFFBQVEsR0FBQUssZ0JBQUEsR0FBRXZMLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFa0wsUUFBUSxjQUFBSyxnQkFBQSxjQUFBQSxnQkFBQSxHQUFJLEVBQUU7TUFDL0JoTCxXQUFXLEdBQUFpTCxrQkFBQSxHQUFFeEwsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVPLFdBQVcsY0FBQWlMLGtCQUFBLGNBQUFBLGtCQUFBLEdBQUk7SUFDckMsQ0FBQztFQUFBLENBQUMsRUFDRixDQUFDeEwsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVFLFFBQVEsRUFBRUYsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVNLFNBQVMsRUFBRTJLLFdBQVcsRUFBRWpMLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFTyxXQUFXLENBQ3JFLENBQUM7O0VBRUQ7RUFDQSxJQUFBa0wsYUFBQSxHQUNFek4sWUFBWSxDQUFxQlcsZUFBZSxFQUFFO01BQ2hEK00sU0FBUyxFQUFFO1FBQUVDLEtBQUssRUFBRTtNQUFHLENBQUM7TUFDeEJDLFdBQVcsRUFBRTtJQUNmLENBQUMsQ0FBQztJQUFBQyxjQUFBLEdBQUEvQyxjQUFBLENBQUEyQyxhQUFBO0lBSkdLLG1CQUFtQixHQUFBRCxjQUFBO0lBQUFFLGVBQUEsR0FBQUYsY0FBQTtJQUFVRyxVQUFVLEdBQUFELGVBQUEsQ0FBaEJFLElBQUk7SUFBdUJDLGFBQWEsR0FBQUgsZUFBQSxDQUF0QnhDLE9BQU87SUFBd0I0QyxXQUFXLEdBQUFKLGVBQUEsQ0FBbEJwQyxLQUFLOztFQU03RTtFQUNBLElBQUF5QyxjQUFBLEdBQ0VwTyxZQUFZLENBQW9CYSxjQUFjLEVBQUU7TUFDOUMrTSxXQUFXLEVBQUU7SUFDZixDQUFDLENBQUM7SUFBQVMsY0FBQSxHQUFBdkQsY0FBQSxDQUFBc0QsY0FBQTtJQUhHRSxrQkFBa0IsR0FBQUQsY0FBQTtJQUFBRSxlQUFBLEdBQUFGLGNBQUE7SUFBVUcsV0FBVyxHQUFBRCxlQUFBLENBQWpCTixJQUFJO0lBQXdCUSxjQUFjLEdBQUFGLGVBQUEsQ0FBdkJoRCxPQUFPO0lBQXlCbUQsWUFBWSxHQUFBSCxlQUFBLENBQW5CNUMsS0FBSzs7RUFLOUU7RUFDQSxJQUFBZ0QsY0FBQSxHQUNFM08sWUFBWSxDQUFxQmMsZUFBZSxFQUFFO01BQ2hEOE0sV0FBVyxFQUFFO0lBQ2YsQ0FBQyxDQUFDO0lBQUFnQixjQUFBLEdBQUE5RCxjQUFBLENBQUE2RCxjQUFBO0lBSEdFLG1CQUFtQixHQUFBRCxjQUFBO0lBQUFFLGVBQUEsR0FBQUYsY0FBQTtJQUFVRyxTQUFTLEdBQUFELGVBQUEsQ0FBZmIsSUFBSTtJQUFzQmUsWUFBWSxHQUFBRixlQUFBLENBQXJCdkQsT0FBTztJQUF1QjBELFVBQVUsR0FBQUgsZUFBQSxDQUFqQm5ELEtBQUs7RUFLM0UsSUFBTXVELG1CQUFtQixHQUFHalAsV0FBVyxDQUFDLFVBQUNrUCxPQUFtQyxFQUFLO0lBQUEsSUFBQUMsY0FBQSxFQUFBQyxlQUFBO0lBQy9FLElBQU1DLElBQUksR0FBR3BPLG9CQUFvQixDQUFDaU8sT0FBTyxhQUFQQSxPQUFPLGdCQUFBQyxjQUFBLEdBQVBELE9BQU8sQ0FBRUksS0FBSyxjQUFBSCxjQUFBLHVCQUFkQSxjQUFBLENBQWdCRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFELElBQU1FLFFBQVEsR0FBR3RPLG9CQUFvQixDQUFDaU8sT0FBTyxhQUFQQSxPQUFPLGdCQUFBRSxlQUFBLEdBQVBGLE9BQU8sQ0FBRUksS0FBSyxjQUFBRixlQUFBLHVCQUFkQSxlQUFBLENBQWdCRyxRQUFRLEVBQUVGLElBQUksQ0FBQztJQUNyRTFDLGNBQWMsQ0FBQzBDLElBQUksQ0FBQztJQUNwQmxELFVBQVUsQ0FBQ2tELElBQUksR0FBR0UsUUFBUSxDQUFDO0VBQzdCLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNQyxxQkFBcUIsR0FBR3hQLFdBQVcsQ0FBQyxVQUFDa1AsT0FBa0MsRUFBSztJQUFBLElBQUFPLGdCQUFBLEVBQUFDLGlCQUFBO0lBQ2hGLElBQU1MLElBQUksR0FBR3BPLG9CQUFvQixDQUFDaU8sT0FBTyxhQUFQQSxPQUFPLGdCQUFBTyxnQkFBQSxHQUFQUCxPQUFPLENBQUVTLE9BQU8sY0FBQUYsZ0JBQUEsdUJBQWhCQSxnQkFBQSxDQUFrQkosSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1RCxJQUFNRSxRQUFRLEdBQUd0TyxvQkFBb0IsQ0FBQ2lPLE9BQU8sYUFBUEEsT0FBTyxnQkFBQVEsaUJBQUEsR0FBUFIsT0FBTyxDQUFFUyxPQUFPLGNBQUFELGlCQUFBLHVCQUFoQkEsaUJBQUEsQ0FBa0JILFFBQVEsRUFBRUYsSUFBSSxDQUFDO0lBQ3ZFMUMsY0FBYyxDQUFDMEMsSUFBSSxDQUFDO0lBQ3BCbEQsVUFBVSxDQUFDa0QsSUFBSSxHQUFHRSxRQUFRLENBQUM7RUFDN0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQU1LLDBCQUEwQixHQUFHNVAsV0FBVyxDQUFDLFVBQUNrUCxPQUErQixFQUFLO0lBQUEsSUFBQVcsbUJBQUEsRUFBQUMsb0JBQUE7SUFDbEYsSUFBTUMsT0FBTyxHQUFHMU8sTUFBTSxDQUFDNk4sT0FBTyxhQUFQQSxPQUFPLGdCQUFBVyxtQkFBQSxHQUFQWCxPQUFPLENBQUVjLFVBQVUsY0FBQUgsbUJBQUEsdUJBQW5CQSxtQkFBQSxDQUFxQlIsSUFBSSxDQUFDO0lBQ2pEO0lBQ0EsSUFBTUEsSUFBSSxHQUFHaE8sTUFBTSxDQUFDQyxRQUFRLENBQUN5TyxPQUFPLENBQUMsSUFBSUEsT0FBTyxJQUFJLENBQUMsR0FBR3ZPLElBQUksQ0FBQ0MsS0FBSyxDQUFDc08sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDbkYsSUFBTVIsUUFBUSxHQUFHdE8sb0JBQW9CLENBQUNpTyxPQUFPLGFBQVBBLE9BQU8sZ0JBQUFZLG9CQUFBLEdBQVBaLE9BQU8sQ0FBRWMsVUFBVSxjQUFBRixvQkFBQSx1QkFBbkJBLG9CQUFBLENBQXFCUCxRQUFRLEVBQUVGLElBQUksQ0FBQztJQUMxRTFDLGNBQWMsQ0FBQzBDLElBQUksQ0FBQztJQUNwQmxELFVBQVUsQ0FBQ2tELElBQUksR0FBR0UsUUFBUSxDQUFDO0VBQzdCLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNVSw2QkFBNkIsR0FBR2pRLFdBQVcsQ0FBQyxVQUFDa1AsT0FBcUMsRUFBSztJQUFBLElBQUFnQixpQkFBQSxFQUFBQyxrQkFBQTtJQUMzRixJQUFNZCxJQUFJLEdBQUdwTyxvQkFBb0IsQ0FBQ2lPLE9BQU8sYUFBUEEsT0FBTyxnQkFBQWdCLGlCQUFBLEdBQVBoQixPQUFPLENBQUVrQixRQUFRLGNBQUFGLGlCQUFBLHVCQUFqQkEsaUJBQUEsQ0FBbUJiLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0QsSUFBTUUsUUFBUSxHQUFHdE8sb0JBQW9CLENBQUNpTyxPQUFPLGFBQVBBLE9BQU8sZ0JBQUFpQixrQkFBQSxHQUFQakIsT0FBTyxDQUFFa0IsUUFBUSxjQUFBRCxrQkFBQSx1QkFBakJBLGtCQUFBLENBQW1CWixRQUFRLEVBQUVGLElBQUksQ0FBQztJQUN4RTFDLGNBQWMsQ0FBQzBDLElBQUksQ0FBQztJQUNwQmxELFVBQVUsQ0FBQ2tELElBQUksR0FBR0UsUUFBUSxDQUFDO0VBQzdCLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFBYyxjQUFBLEdBQWtDdFEsWUFBWSxDQUFpQlksb0JBQW9CLEVBQUU7TUFDbkZnTixXQUFXLEVBQUU7SUFDZixDQUFDLENBQUM7SUFBQTJDLGNBQUEsR0FBQXpGLGNBQUEsQ0FBQXdGLGNBQUE7SUFGS0UsdUJBQXVCLEdBQUFELGNBQUE7RUFJOUIsSUFBQUUsY0FBQSxHQUFnQ3pRLFlBQVksQ0FBdUJVLGlCQUFpQixFQUFFO01BQ3BGa04sV0FBVyxFQUFFO0lBQ2YsQ0FBQyxDQUFDO0lBQUE4QyxjQUFBLEdBQUE1RixjQUFBLENBQUEyRixjQUFBO0lBRktFLHFCQUFxQixHQUFBRCxjQUFBO0VBSTVCLElBQU1FLFdBQVcsR0FBRzNRLFdBQVcsY0FBQTRRLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBQyxTQUFBQyxRQUFBO0lBQUEsSUFBQUMsVUFBQSxFQUFBQyxxQkFBQSxFQUFBckgsS0FBQSxFQUFBb0UsSUFBQSxFQUFBa0QsTUFBQSxFQUFBQyxLQUFBLEVBQUFDLE9BQUEsRUFBQUMscUJBQUEsRUFBQUMsc0JBQUEsRUFBQUMsZUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxZQUFBLEVBQUFDLGNBQUEsRUFBQUMsaUJBQUEsRUFBQUMsTUFBQSxFQUFBQyxTQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFqSSxNQUFBLEVBQUFrSSxxQkFBQSxFQUFBQyxhQUFBLEVBQUFDLGlCQUFBLEVBQUFDLFlBQUEsRUFBQUMscUJBQUEsRUFBQUMsTUFBQSxFQUFBQyxRQUFBLEVBQUFDLE1BQUEsRUFBQUMsU0FBQSxFQUFBQyxFQUFBO0lBQUEsT0FBQTVCLG1CQUFBLENBQUE2QixJQUFBLFdBQUFDLFFBQUE7TUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtRQUFBO1VBQzlCbkkseUJBQXlCLENBQUNvSSxPQUFPLElBQUksQ0FBQztVQUNoQzlCLFVBQVUsR0FBR3RHLHlCQUF5QixDQUFDb0ksT0FBTztVQUFBLE1BRWhEN1AsSUFBSSxLQUFLLEtBQUs7WUFBQTBQLFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFDVmpKLEtBQUssSUFBQXFILHFCQUFBLEdBQUc5RCxXQUFXLENBQUNGLFFBQVEsY0FBQWdFLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRTtVQUN4QzFGLFVBQVUsQ0FBQyxLQUFLLENBQUM7VUFDakJJLFFBQVEsQ0FBQyxLQUFLLENBQUM7VUFDZlIsUUFBUSxDQUFDeEIsa0JBQWtCLENBQUNDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztVQUN2Q21DLG1CQUFtQixDQUFDLEtBQUssQ0FBQztVQUMxQmdCLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztVQUNqQ1osVUFBVSxDQUFDLEtBQUssQ0FBQztVQUFBLE9BQUF3RyxRQUFBLENBQUFJLE1BQUE7UUFBQTtVQUluQnhILFVBQVUsQ0FBQyxJQUFJLENBQUM7VUFDaEJJLFFBQVEsQ0FBQyxLQUFLLENBQUM7VUFBQWdILFFBQUEsQ0FBQUMsSUFBQTtVQUFBLE1BRVQzUCxJQUFJLEtBQUssUUFBUTtZQUFBMFAsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBRixRQUFBLENBQUFFLElBQUE7VUFBQSxPQUNBeFMsZ0JBQWdCLENBQUMsQ0FBQztRQUFBO1VBQS9CMk4sSUFBSSxHQUFBMkUsUUFBQSxDQUFBSyxJQUFBO1VBQUEsTUFDTmhDLFVBQVUsS0FBS3RHLHlCQUF5QixDQUFDb0ksT0FBTztZQUFBSCxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQUYsUUFBQSxDQUFBSSxNQUFBO1FBQUE7VUFDOUM3QixNQUFNLEdBQUcsQ0FBQ2xELElBQUksYUFBSkEsSUFBSSxjQUFKQSxJQUFJLEdBQUksRUFBRSxFQUFFL0QsR0FBRyxDQUFDLFVBQUFsRixDQUFDO1lBQUEsT0FBSUQsZUFBZSxDQUFDQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1VBQUEsRUFBQztVQUFBLE1BQ3hEaU0sVUFBVSxLQUFLdEcseUJBQXlCLENBQUNvSSxPQUFPO1lBQUFILFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBRixRQUFBLENBQUFJLE1BQUE7UUFBQTtVQUNwRDVILFFBQVEsQ0FBQytGLE1BQU0sQ0FBQztVQUNoQm5GLG1CQUFtQixDQUFDLEtBQUssQ0FBQztVQUMxQmdCLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztVQUNqQ1osVUFBVSxDQUFDLEtBQUssQ0FBQztVQUFBd0csUUFBQSxDQUFBRSxJQUFBO1VBQUE7UUFBQTtVQUFBLE1BQ1I1UCxJQUFJLEtBQUssU0FBUztZQUFBMFAsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBRixRQUFBLENBQUFFLElBQUE7VUFBQSxPQUNSdlMsaUJBQWlCLENBQUM2TSxXQUFXLENBQUNsTCxRQUFRLEdBQUc7WUFBRUEsUUFBUSxFQUFFa0wsV0FBVyxDQUFDbEw7VUFBUyxDQUFDLEdBQUdDLFNBQVMsQ0FBQztRQUFBO1VBQXJHOEwsS0FBSSxHQUFBMkUsUUFBQSxDQUFBSyxJQUFBO1VBQUEsTUFDTmhDLFVBQVUsS0FBS3RHLHlCQUF5QixDQUFDb0ksT0FBTztZQUFBSCxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQUYsUUFBQSxDQUFBSSxNQUFBO1FBQUE7VUFDaEQ3QixPQUFNLEdBQUcsQ0FBQzVNLEtBQUssQ0FBQzJPLE9BQU8sQ0FBQ2pGLEtBQUksQ0FBQyxHQUFHQSxLQUFJLEdBQUcsRUFBRSxFQUFFL0QsR0FBRyxDQUFDLFVBQUFpSixDQUFDO1lBQUEsT0FDbER4SyxlQUFlLENBQ2I7Y0FDRXhELEVBQUUsRUFBRWdPLENBQUMsQ0FBQ2hPLEVBQUU7Y0FDUmlDLEtBQUssRUFBRStMLENBQUMsQ0FBQy9MLEtBQUs7Y0FDZGxFLElBQUksRUFBRSxTQUFTO2NBQ2ZoQixRQUFRLEVBQUVpUixDQUFDLENBQUNqUixRQUFRO2NBQ3BCa0gsS0FBSyxFQUFFK0osQ0FBQyxDQUFDL0osS0FBSztjQUNkVixVQUFVLEVBQUV5SyxDQUFDLENBQUN6SztZQUNoQixDQUFDLEVBQ0QsU0FBUyxFQUNULEVBQ0YsQ0FBQztVQUFBLENBQ0gsQ0FBQztVQUFBLE1BQ0d5SSxPQUFNLENBQUN0TyxNQUFNLEtBQUssQ0FBQztZQUFBK1AsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUNmdEIsZUFBZSxHQUNuQnBFLFdBQVcsQ0FBQ2xMLFFBQVEsS0FBSyxJQUFJLElBQUlrTCxXQUFXLENBQUNsTCxRQUFRLEtBQUtDLFNBQVMsSUFBSWlMLFdBQVcsQ0FBQ2xMLFFBQVEsS0FBSyxFQUFFLEdBQzlGO1lBQUVrUixTQUFTLEVBQUUsQ0FBQ2hSLE1BQU0sQ0FBQ2dMLFdBQVcsQ0FBQ2xMLFFBQVEsQ0FBQztVQUFFLENBQUMsR0FDN0NDLFNBQVM7VUFBQXlRLFFBQUEsQ0FBQUUsSUFBQTtVQUFBLE9BQ3NCbkMscUJBQXFCLENBQUM7WUFDekRqRCxTQUFTLEVBQUEyRixhQUFBLENBQUFBLGFBQUEsS0FDSDdCLGVBQWUsR0FBRztjQUFFbk4sU0FBUyxFQUFFbU47WUFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztjQUN6RGxDLElBQUksRUFBRSxDQUFDO2NBQ1BnRSxPQUFPLEVBQUU7WUFBRTtVQUVmLENBQUMsQ0FBQztRQUFBO1VBQUE3QixxQkFBQSxHQUFBbUIsUUFBQSxDQUFBSyxJQUFBO1VBTll2QixZQUFZLEdBQUFELHFCQUFBLENBQWxCeEQsSUFBSTtVQUFBLE1BT1JnRCxVQUFVLEtBQUt0Ryx5QkFBeUIsQ0FBQ29JLE9BQU87WUFBQUgsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUFGLFFBQUEsQ0FBQUksTUFBQTtRQUFBO1VBQzlDckIsY0FBYyxHQUFHLEVBQUFMLHFCQUFBLEdBQUNJLFlBQVksYUFBWkEsWUFBWSxnQkFBQUgsc0JBQUEsR0FBWkcsWUFBWSxDQUFFckIsUUFBUSxjQUFBa0Isc0JBQUEsdUJBQXRCQSxzQkFBQSxDQUF3QnRELElBQUksY0FBQXFELHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRSxFQUN2RHBILEdBQUcsQ0FBQy9CLCtCQUErQixDQUFDLENBQ3BDNEIsTUFBTSxDQUFDLFVBQUN3SixJQUFJO1lBQUEsT0FBOEJBLElBQUksS0FBSyxJQUFJO1VBQUEsRUFBQyxDQUN4RHJKLEdBQUcsQ0FBQyxVQUFBcUosSUFBSTtZQUFBLE9BQUk1SyxlQUFlLENBQUM0SyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQztVQUFBLEVBQUM7VUFDcERwQyxPQUFNLEdBQUdRLGNBQWM7VUFDdkIzRixtQkFBbUIsQ0FBQzJGLGNBQWMsQ0FBQzlPLE1BQU0sR0FBRyxDQUFDLENBQUM7VUFDOUNtSyx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQztVQUM3Q2tELDZCQUE2QixDQUFDd0IsWUFBWSxDQUFDO1VBQUFrQixRQUFBLENBQUFFLElBQUE7VUFBQTtRQUFBO1VBRTNDOUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1VBQzFCZ0IseUJBQXlCLENBQUMsTUFBTSxDQUFDO1VBQ2pDWixVQUFVLENBQUMsS0FBSyxDQUFDO1FBQUE7VUFBQSxNQUVmNkUsVUFBVSxLQUFLdEcseUJBQXlCLENBQUNvSSxPQUFPO1lBQUFILFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBRixRQUFBLENBQUFJLE1BQUE7UUFBQTtVQUNwRDVILFFBQVEsQ0FBQytGLE9BQU0sQ0FBQztVQUFBeUIsUUFBQSxDQUFBRSxJQUFBO1VBQUE7UUFBQTtVQUFBLE1BQ1A1UCxJQUFJLEtBQUssTUFBTTtZQUFBMFAsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUV4QixJQUFJMUYsV0FBVyxDQUFDN0ssV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUN6Q3FQLGlCQUFpQixHQUFHO2NBQUV0UCxTQUFTLEVBQUU4SyxXQUFXLENBQUM5SztZQUFVLENBQUM7VUFDMUQsQ0FBQyxNQUFNLElBQUk4SyxXQUFXLENBQUM3SyxXQUFXLEtBQUssUUFBUSxFQUFFO1lBQy9DcVAsaUJBQWlCLEdBQUc7Y0FBRTFQLFFBQVEsRUFBRWtMLFdBQVcsQ0FBQ2xMO1lBQVMsQ0FBQztVQUN4RDtVQUFDMFEsUUFBQSxDQUFBRSxJQUFBO1VBQUEsT0FDa0J0UyxjQUFjLENBQUNvUixpQkFBaUIsQ0FBQztRQUFBO1VBQTlDM0QsTUFBSSxHQUFBMkUsUUFBQSxDQUFBSyxJQUFBO1VBQUEsTUFDTmhDLFVBQVUsS0FBS3RHLHlCQUF5QixDQUFDb0ksT0FBTztZQUFBSCxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQUYsUUFBQSxDQUFBSSxNQUFBO1FBQUE7VUFDaERsQixTQUFTLEdBQUcsQ0FBQzdELE1BQUksYUFBSkEsTUFBSSxjQUFKQSxNQUFJLEdBQUksRUFBRSxFQUFFL0QsR0FBRyxDQUFDLFVBQUFwSSxJQUFJO1lBQUEsT0FBSW1GLG1CQUFtQixDQUFDbkYsSUFBSSxFQUFFLEVBQUUsRUFBRXFGLHdCQUF3QixDQUFDO1VBQUEsRUFBQztVQUFBLE1BQzdGMkssU0FBUyxDQUFDalAsTUFBTSxLQUFLLENBQUM7WUFBQStQLFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFDbEIvSSxNQUFnQyxHQUFHLENBQUMsQ0FBQztVQUMzQyxJQUFJcUQsV0FBVyxDQUFDOUssU0FBUyxLQUFLLElBQUksSUFBSThLLFdBQVcsQ0FBQzlLLFNBQVMsS0FBS0gsU0FBUyxJQUFJaUwsV0FBVyxDQUFDOUssU0FBUyxLQUFLLEVBQUUsRUFBRTtZQUN6R3lILE1BQU0sQ0FBQ3lKLFVBQVUsR0FBRyxDQUFDcFIsTUFBTSxDQUFDZ0wsV0FBVyxDQUFDOUssU0FBUyxDQUFDLENBQUM7VUFDckQ7VUFDQSxJQUFJOEssV0FBVyxDQUFDbEwsUUFBUSxLQUFLLElBQUksSUFBSWtMLFdBQVcsQ0FBQ2xMLFFBQVEsS0FBS0MsU0FBUyxJQUFJaUwsV0FBVyxDQUFDbEwsUUFBUSxLQUFLLEVBQUUsRUFBRTtZQUN0RzZILE1BQU0sQ0FBQzBKLFNBQVMsR0FBRyxDQUFDclIsTUFBTSxDQUFDZ0wsV0FBVyxDQUFDbEwsUUFBUSxDQUFDLENBQUM7VUFDbkQ7VUFBQzBRLFFBQUEsQ0FBQUUsSUFBQTtVQUFBLE9BQ29DdEMsdUJBQXVCLENBQUM7WUFDM0Q5QyxTQUFTLEVBQUU7Y0FDVDNELE1BQU0sRUFBQXNKLGFBQUE7Z0JBQUl4UixRQUFRLEVBQUU7Y0FBSyxHQUFLa0ksTUFBTSxDQUFFO2NBQ3RDMkosVUFBVSxFQUFFO2dCQUFFQyxNQUFNLEVBQUUsQ0FBQztnQkFBRUMsSUFBSSxFQUFFO2NBQUc7WUFDcEM7VUFDRixDQUFDLENBQUM7UUFBQTtVQUFBM0IscUJBQUEsR0FBQVcsUUFBQSxDQUFBSyxJQUFBO1VBTFl2QixhQUFZLEdBQUFPLHFCQUFBLENBQWxCaEUsSUFBSTtVQUFBLE1BTVJnRCxVQUFVLEtBQUt0Ryx5QkFBeUIsQ0FBQ29JLE9BQU87WUFBQUgsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUFGLFFBQUEsQ0FBQUksTUFBQTtRQUFBO1VBQ3BEbEIsU0FBUyxHQUFHLEVBQUFDLHFCQUFBLEdBQUNMLGFBQVksYUFBWkEsYUFBWSxnQkFBQU0sc0JBQUEsR0FBWk4sYUFBWSxDQUFFekIsVUFBVSxjQUFBK0Isc0JBQUEsdUJBQXhCQSxzQkFBQSxDQUEwQi9ELElBQUksY0FBQThELHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRSxFQUM5QzdILEdBQUcsQ0FBQzNDLHlCQUF5QixDQUFDLENBQzlCd0MsTUFBTSxDQUFDLFVBQUN3SixJQUFJO1lBQUEsT0FBNkJBLElBQUksS0FBSyxJQUFJO1VBQUEsRUFBQyxDQUN2RHJKLEdBQUcsQ0FBQyxVQUFBcEksSUFBSTtZQUFBLE9BQUltRixtQkFBbUIsQ0FBQ25GLElBQUksRUFBRSxFQUFFLEVBQUVxRix3QkFBd0IsQ0FBQztVQUFBLEVBQUM7VUFDdkU2RSxtQkFBbUIsQ0FBQzhGLFNBQVMsQ0FBQ2pQLE1BQU0sR0FBRyxDQUFDLENBQUM7VUFDekNtSyx5QkFBeUIsQ0FBQyxlQUFlLENBQUM7VUFDMUM2QywwQkFBMEIsQ0FBQzZCLGFBQVksQ0FBQztVQUFBa0IsUUFBQSxDQUFBRSxJQUFBO1VBQUE7UUFBQTtVQUV4QzlHLG1CQUFtQixDQUFDLEtBQUssQ0FBQztVQUMxQmdCLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztVQUNqQ1osVUFBVSxDQUFDLEtBQUssQ0FBQztRQUFBO1VBQUEsTUFFZjZFLFVBQVUsS0FBS3RHLHlCQUF5QixDQUFDb0ksT0FBTztZQUFBSCxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQUYsUUFBQSxDQUFBSSxNQUFBO1FBQUE7VUFDcEQ1SCxRQUFRLENBQUMwRyxTQUFTLENBQUM7VUFBQWMsUUFBQSxDQUFBRSxJQUFBO1VBQUE7UUFBQTtVQUFBLE1BQ1Y1UCxJQUFJLEtBQUssTUFBTTtZQUFBMFAsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBRixRQUFBLENBQUFFLElBQUE7VUFBQSxPQUNEakUsbUJBQW1CLENBQUM7WUFDekNuQixTQUFTLEVBQUU7Y0FDVG1HLE9BQU8sRUFBRXpRLDBCQUEwQixDQUFDLEVBQUUsQ0FBQztjQUN2Q2tNLElBQUksRUFBRTtZQUNSO1VBQ0YsQ0FBQyxDQUFDO1FBQUE7VUFBQStDLHFCQUFBLEdBQUFPLFFBQUEsQ0FBQUssSUFBQTtVQUxNaEYsTUFBSSxHQUFBb0UscUJBQUEsQ0FBSnBFLElBQUk7VUFBQSxNQU1SZ0QsVUFBVSxLQUFLdEcseUJBQXlCLENBQUNvSSxPQUFPO1lBQUFILFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBRixRQUFBLENBQUFJLE1BQUE7UUFBQTtVQUM5QzdCLFFBQU0sR0FBRyxFQUFBZ0IsaUJBQUEsR0FBQ2xFLE1BQUksYUFBSkEsTUFBSSxnQkFBQW1FLFlBQUEsR0FBSm5FLE1BQUksQ0FBRXNCLEtBQUssY0FBQTZDLFlBQUEsdUJBQVhBLFlBQUEsQ0FBYW5FLElBQUksY0FBQWtFLGlCQUFBLGNBQUFBLGlCQUFBLEdBQUksRUFBRSxFQUFFakksR0FBRyxDQUFDLFVBQUF0RSxDQUFDO1lBQUEsT0FBSUQsYUFBYSxDQUFDQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1VBQUEsRUFBQztVQUFBLE1BQ25FcUwsVUFBVSxLQUFLdEcseUJBQXlCLENBQUNvSSxPQUFPO1lBQUFILFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBRixRQUFBLENBQUFJLE1BQUE7UUFBQTtVQUM5Q1IsTUFBTSxHQUFHOUwsb0JBQW9CLENBQUM4RCxPQUFPLEVBQUUsRUFBRSxFQUFFRSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztVQUNsRStILFNBQVMsR0FBR3RCLFFBQU0sQ0FBQ3BILE1BQU0sQ0FBQyxVQUFBd0osSUFBSTtZQUFBLE9BQUluUixNQUFNLENBQUNtUixJQUFJLENBQUNwTyxFQUFFLENBQUMsS0FBSy9DLE1BQU0sQ0FBQ29RLE1BQU0sQ0FBQ3JOLEVBQUUsQ0FBQztVQUFBLEVBQUM7VUFDOUVpRyxRQUFRLEVBQUVvSCxNQUFNLEVBQUFwTSxNQUFBLENBQUEwTixrQkFBQSxDQUFLckIsU0FBUyxFQUFDLENBQUM7VUFDaEN2RCxtQkFBbUIsQ0FBQ2pCLE1BQUksQ0FBQztVQUN6QmpDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztVQUMxQmdCLHlCQUF5QixDQUFDLE9BQU8sQ0FBQztVQUFBNEYsUUFBQSxDQUFBRSxJQUFBO1VBQUE7UUFBQTtVQUFBLE1BRTlCN0IsVUFBVSxLQUFLdEcseUJBQXlCLENBQUNvSSxPQUFPO1lBQUFILFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBRixRQUFBLENBQUFJLE1BQUE7UUFBQTtVQUNwRDVILFFBQVEsQ0FBQyxFQUFFLENBQUM7VUFDWlksbUJBQW1CLENBQUMsS0FBSyxDQUFDO1VBQzFCZ0IseUJBQXlCLENBQUMsTUFBTSxDQUFDO1VBQ2pDWixVQUFVLENBQUMsS0FBSyxDQUFDO1VBQ2pCUSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQUE7VUFBQWdHLFFBQUEsQ0FBQUUsSUFBQTtVQUFBO1FBQUE7VUFBQUYsUUFBQSxDQUFBQyxJQUFBO1VBQUFILEVBQUEsR0FBQUUsUUFBQTtVQUFBLE1BR2YzQixVQUFVLEtBQUt0Ryx5QkFBeUIsQ0FBQ29JLE9BQU87WUFBQUgsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUFGLFFBQUEsQ0FBQUksTUFBQTtRQUFBO1VBQ3BEcEgsUUFBUSxDQUFDLElBQUksQ0FBQztVQUNkUixRQUFRLENBQUMsRUFBRSxDQUFDO1VBQ1pZLG1CQUFtQixDQUFDLEtBQUssQ0FBQztRQUFBO1VBQUE0RyxRQUFBLENBQUFDLElBQUE7VUFFMUIsSUFBSTVCLFVBQVUsS0FBS3RHLHlCQUF5QixDQUFDb0ksT0FBTyxFQUFFO1lBQ3BEdkgsVUFBVSxDQUFDLEtBQUssQ0FBQztVQUNuQjtVQUFDLE9BQUFvSCxRQUFBLENBQUFtQixNQUFBO1FBQUE7UUFBQTtVQUFBLE9BQUFuQixRQUFBLENBQUFvQixJQUFBO01BQUE7SUFBQSxHQUFBaEQsT0FBQTtFQUFBLENBRUosSUFBRSxDQUNEOU4sSUFBSSxFQUNKa0ssV0FBVyxFQUNYeUIsbUJBQW1CLEVBQ25CMkIsdUJBQXVCLEVBQ3ZCRyxxQkFBcUIsRUFDckJ6QixtQkFBbUIsRUFDbkJXLDBCQUEwQixFQUMxQkssNkJBQTZCLEVBQzdCL0ksd0JBQXdCLEVBQ3hCcUQsT0FBTyxFQUNQRSxDQUFDLENBQ0YsQ0FBQzs7RUFFRjtFQUNBeEssU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNbUQsQ0FBQyxHQUFHMkgsb0JBQW9CLENBQUN0SCxJQUFJLENBQUMsQ0FBQztJQUVyQyxJQUFJUixJQUFJLEtBQUssS0FBSyxFQUFFO01BQUEsSUFBQStRLHNCQUFBO01BQ2xCLElBQU1wSyxLQUFLLElBQUFvSyxzQkFBQSxHQUFHN0csV0FBVyxDQUFDRixRQUFRLGNBQUErRyxzQkFBQSxjQUFBQSxzQkFBQSxHQUFJLEVBQUU7TUFDeEN6SSxVQUFVLENBQUMsS0FBSyxDQUFDO01BQ2pCSSxRQUFRLENBQUMsS0FBSyxDQUFDO01BQ2ZSLFFBQVEsQ0FBQ3hCLGtCQUFrQixDQUFDQyxLQUFLLEVBQUV4RyxDQUFDLENBQUMsQ0FBQztNQUN0QztJQUNGO0lBRUEsSUFBSSxDQUFDQSxDQUFDLEVBQUU7SUFFUixJQUFJSCxJQUFJLEtBQUssUUFBUSxFQUFFO01BQ3JCb0wsa0JBQWtCLENBQUM7UUFDakJaLFNBQVMsRUFBRTtVQUNUM0QsTUFBTSxFQUFFO1lBQUVqRixJQUFJLEVBQUV6QjtVQUFFLENBQUM7VUFDbkJpTSxJQUFJLEVBQUUsQ0FBQztVQUNQZ0UsT0FBTyxFQUFFO1FBQ1g7TUFDRixDQUFDLENBQUM7TUFDRnRHLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDO0lBQzdDLENBQUMsTUFBTSxJQUFJOUosSUFBSSxLQUFLLE1BQU0sRUFBRTtNQUMxQjJMLG1CQUFtQixDQUFDO1FBQ2xCbkIsU0FBUyxFQUFFO1VBQ1RtRyxPQUFPLEVBQUV6USwwQkFBMEIsQ0FBQ0MsQ0FBQyxDQUFDO1VBQ3RDaU0sSUFBSSxFQUFFO1FBQ1I7TUFDRixDQUFDLENBQUM7TUFDRnRDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQztJQUNwQyxDQUFDLE1BQU07TUFDTCxJQUFNNkcsT0FBTyxHQUFHMVEsbUJBQW1CLENBQUNELElBQUksQ0FBQztNQUN6QyxJQUFNZ1IsS0FBSyxHQUFHalIsd0JBQXdCLENBQUNDLElBQUksRUFBRWtLLFdBQVcsQ0FBQztNQUN6RFUsbUJBQW1CLENBQUM7UUFDbEJKLFNBQVMsRUFBQTJGLGFBQUE7VUFDUGhRLENBQUMsRUFBREEsQ0FBQztVQUNEd1EsT0FBTyxFQUFQQTtRQUFPLEdBQ0hLLEtBQUssS0FBSy9SLFNBQVMsR0FBRztVQUFFK1IsS0FBSyxFQUFMQTtRQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7TUFFNUMsQ0FBQyxDQUFDO01BQ0ZsSCx5QkFBeUIsQ0FBQyxNQUFNLENBQUM7TUFDakNaLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDbkI7RUFDRixDQUFDLEVBQUUsQ0FBQ3BCLG9CQUFvQixFQUFFOUgsSUFBSSxFQUFFa0ssV0FBVyxFQUFFVSxtQkFBbUIsRUFBRVEsa0JBQWtCLEVBQUVPLG1CQUFtQixDQUFDLENBQUM7O0VBRTNHO0VBQ0EzTyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUlnRCxJQUFJLEtBQUssS0FBSyxFQUFFO0lBRXBCLElBQU1HLENBQUMsR0FBRzJILG9CQUFvQixDQUFDdEgsSUFBSSxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDTCxDQUFDLEVBQUU7SUFDUjJJLG1CQUFtQixDQUFDLEtBQUssQ0FBQztJQUUxQixJQUFJOUksSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUFBLElBQUFpUixvQkFBQTtNQUNyQjNJLFVBQVUsQ0FBQ2lELGNBQWMsQ0FBQztNQUMxQixJQUFJQyxZQUFZLEVBQUU7UUFDaEI5QyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2Q7TUFDRjtNQUNBLElBQUk0QyxXQUFXLGFBQVhBLFdBQVcsZ0JBQUEyRixvQkFBQSxHQUFYM0YsV0FBVyxDQUFFb0IsT0FBTyxjQUFBdUUsb0JBQUEsZUFBcEJBLG9CQUFBLENBQXNCbEcsSUFBSSxFQUFFO1FBQzlCN0MsUUFBUSxDQUFDb0QsV0FBVyxDQUFDb0IsT0FBTyxDQUFDM0IsSUFBSSxDQUFDL0QsR0FBRyxDQUFDLFVBQUFsRixDQUFDO1VBQUEsT0FBSUQsZUFBZSxDQUFDQyxDQUFDLEVBQUUzQixDQUFDLENBQUM7UUFBQSxFQUFDLENBQUM7UUFDbEVvTSxxQkFBcUIsQ0FBQ2pCLFdBQVcsQ0FBQztRQUNsQzVDLFFBQVEsQ0FBQyxLQUFLLENBQUM7TUFDakI7SUFDRixDQUFDLE1BQU0sSUFBSTFJLElBQUksS0FBSyxNQUFNLEVBQUU7TUFBQSxJQUFBa1IsZ0JBQUE7TUFDMUI1SSxVQUFVLENBQUN3RCxZQUFZLENBQUM7TUFDeEIsSUFBSUMsVUFBVSxFQUFFO1FBQ2RyRCxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2Q7TUFDRjtNQUNBLElBQUltRCxTQUFTLGFBQVRBLFNBQVMsZ0JBQUFxRixnQkFBQSxHQUFUckYsU0FBUyxDQUFFUSxLQUFLLGNBQUE2RSxnQkFBQSxlQUFoQkEsZ0JBQUEsQ0FBa0JuRyxJQUFJLEVBQUU7UUFDMUIsSUFBTWtELE1BQU0sR0FBR3BDLFNBQVMsQ0FBQ1EsS0FBSyxDQUFDdEIsSUFBSSxDQUFDL0QsR0FBRyxDQUFDLFVBQUF0RSxDQUFDO1VBQUEsT0FBSUQsYUFBYSxDQUFDQyxDQUFDLEVBQUV2QyxDQUFDLENBQUM7UUFBQSxFQUFDO1FBQ2pFLElBQU1nUixJQUFJLEdBQUdqUyxNQUFNLENBQUNvSSxPQUFPLENBQUNyRixFQUFFLENBQUM7UUFDL0IsSUFBTW1QLGNBQWMsR0FBR25ELE1BQU0sQ0FBQ29ELElBQUksQ0FBQyxVQUFBaEIsSUFBSTtVQUFBLE9BQUluUixNQUFNLENBQUNtUixJQUFJLENBQUNwTyxFQUFFLENBQUMsS0FBS2tQLElBQUk7UUFBQSxFQUFDO1FBQ3BFLElBQU01QixTQUFTLEdBQUd0QixNQUFNLENBQUNwSCxNQUFNLENBQUMsVUFBQXdKLElBQUk7VUFBQSxPQUFJblIsTUFBTSxDQUFDbVIsSUFBSSxDQUFDcE8sRUFBRSxDQUFDLEtBQUtrUCxJQUFJO1FBQUEsRUFBQztRQUNqRSxJQUFNN0IsTUFBTSxHQUFHOUwsb0JBQW9CLENBQUM4RCxPQUFPLEVBQUVuSCxDQUFDLEVBQUVxSCxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2RVUsUUFBUSxDQUFDa0osY0FBYyxJQUFJOUIsTUFBTSxFQUFBcE0sTUFBQSxDQUFBME4sa0JBQUEsQ0FBS3JCLFNBQVMsS0FBSXRCLE1BQU0sQ0FBQztRQUMxRGpDLG1CQUFtQixDQUFDSCxTQUFTLENBQUM7UUFDOUJuRCxRQUFRLENBQUMsS0FBSyxDQUFDO01BQ2pCO0lBQ0YsQ0FBQyxNQUFNO01BQ0xKLFVBQVUsQ0FBQzBDLGFBQWEsQ0FBQztNQUN6QixJQUFJQyxXQUFXLEVBQUU7UUFDZnZDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDZDtNQUNGO01BQ0EsSUFBSW9DLFVBQVUsYUFBVkEsVUFBVSxlQUFWQSxVQUFVLENBQUV3RyxNQUFNLEVBQUU7UUFDdEJwSixRQUFRLENBQUM0QyxVQUFVLENBQUN3RyxNQUFNLENBQUN0SyxHQUFHLENBQUMsVUFBQXRCLENBQUM7VUFBQSxPQUFJRCxlQUFlLENBQUNDLENBQUMsRUFBRTFGLElBQUksRUFBRUcsQ0FBQyxFQUFFOEQsd0JBQXdCLENBQUM7UUFBQSxFQUFDLENBQUM7UUFDM0ZpRixVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ2pCUixRQUFRLENBQUMsS0FBSyxDQUFDO01BQ2pCO0lBQ0Y7RUFDRixDQUFDLEVBQUUsQ0FDRG9DLFVBQVUsRUFDVlEsV0FBVyxFQUNYTyxTQUFTLEVBQ1RiLGFBQWEsRUFDYk8sY0FBYyxFQUNkTyxZQUFZLEVBQ1piLFdBQVcsRUFDWE8sWUFBWSxFQUNaTyxVQUFVLEVBQ1ZqRSxvQkFBb0IsRUFDcEI5SCxJQUFJLEVBQ0p1TSxxQkFBcUIsRUFDckJQLG1CQUFtQixFQUNuQi9ILHdCQUF3QixFQUN4QnFELE9BQU8sRUFDUEUsQ0FBQyxDQUNGLENBQUM7RUFFRixJQUFNK0osUUFBUSxHQUFHeFUsV0FBVyxjQUFBNFEsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFDLFNBQUEyRCxTQUFBO0lBQUEsSUFBQUMsZUFBQSxFQUFBQyxRQUFBLEVBQUF2UixDQUFBLEVBQUF3UixtQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxXQUFBLEVBQUFDLHNCQUFBLEVBQUEvRyxJQUFBLEVBQUFnSCxTQUFBLEVBQUFDLG1CQUFBLEVBQUFDLGNBQUEsRUFBQUMscUJBQUEsRUFBQUMsTUFBQSxFQUFBQyxVQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGlCQUFBLEVBQUF6TCxNQUFBLEVBQUEwTCxzQkFBQSxFQUFBQyxNQUFBLEVBQUFDLFdBQUEsRUFBQUMsb0JBQUEsRUFBQUMsZUFBQSxFQUFBckUsZUFBQSxFQUFBc0Usc0JBQUEsRUFBQUMsTUFBQSxFQUFBQyxXQUFBLEVBQUFDLEdBQUE7SUFBQSxPQUFBbkYsbUJBQUEsQ0FBQTZCLElBQUEsV0FBQXVELFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBckQsSUFBQSxHQUFBcUQsU0FBQSxDQUFBcEQsSUFBQTtRQUFBO1VBQUEsTUFDdkJ2RyxhQUFhLElBQUksQ0FBQ0osT0FBTyxJQUFJWSxzQkFBc0IsS0FBSyxNQUFNO1lBQUFtSixTQUFBLENBQUFwRCxJQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUFvRCxTQUFBLENBQUFsRCxNQUFBO1FBQUE7VUFHNUQyQixlQUFlLEdBQUd6VCxvQkFBb0IsQ0FBQ3lMLFdBQVcsRUFBRSxDQUFDLENBQUM7VUFDdERpSSxRQUFRLEdBQUdELGVBQWUsR0FBRyxDQUFDO1VBQzlCdFIsQ0FBQyxHQUFHMkgsb0JBQW9CLENBQUN0SCxJQUFJLENBQUMsQ0FBQztVQUMvQm1SLG1CQUFtQixHQUFHbEsseUJBQXlCLENBQUNvSSxPQUFPO1VBQzdEdkcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1VBQUEwSixTQUFBLENBQUFyRCxJQUFBO1VBQUEsTUFFaEI5RixzQkFBc0IsS0FBSyxPQUFPO1lBQUFtSixTQUFBLENBQUFwRCxJQUFBO1lBQUE7VUFBQTtVQUFBb0QsU0FBQSxDQUFBcEQsSUFBQTtVQUFBLE9BQ2JqRSxtQkFBbUIsQ0FBQztZQUN6Q25CLFNBQVMsRUFBRTtjQUNUbUcsT0FBTyxFQUFFelEsMEJBQTBCLENBQUNDLENBQUMsQ0FBQztjQUN0Q2lNLElBQUksRUFBRXNGO1lBQ1I7VUFDRixDQUFDLENBQUM7UUFBQTtVQUFBSSxzQkFBQSxHQUFBa0IsU0FBQSxDQUFBakQsSUFBQTtVQUxNaEYsSUFBSSxHQUFBK0csc0JBQUEsQ0FBSi9HLElBQUk7VUFBQSxNQU1SNEcsbUJBQW1CLEtBQUtsSyx5QkFBeUIsQ0FBQ29JLE9BQU87WUFBQW1ELFNBQUEsQ0FBQXBELElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQW9ELFNBQUEsQ0FBQWxELE1BQUE7UUFBQTtVQUN2RGlDLFNBQVMsR0FBRyxFQUFBSCxnQkFBQSxHQUFDN0csSUFBSSxhQUFKQSxJQUFJLGdCQUFBOEcsV0FBQSxHQUFKOUcsSUFBSSxDQUFFc0IsS0FBSyxjQUFBd0YsV0FBQSx1QkFBWEEsV0FBQSxDQUFhOUcsSUFBSSxjQUFBNkcsZ0JBQUEsY0FBQUEsZ0JBQUEsR0FBSSxFQUFFLEVBQUU1SyxHQUFHLENBQUMsVUFBQXRFLENBQUM7WUFBQSxPQUFJRCxhQUFhLENBQUNDLENBQUMsRUFBRXZDLENBQUMsQ0FBQztVQUFBLEVBQUM7VUFDekUrSCxRQUFRLENBQUMsVUFBQXlILElBQUksRUFBSTtZQUNmLElBQUksQ0FBQ3hQLENBQUMsRUFBRTtjQUFBLElBQUE4UyxNQUFBO2NBQ04sSUFBTTNELE1BQU0sR0FDVixFQUFBMkQsTUFBQSxHQUFBdEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFBc0QsTUFBQSx1QkFBUEEsTUFBQSxDQUFTalQsSUFBSSxNQUFLLE1BQU0sR0FBRzJQLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBR25NLG9CQUFvQixDQUFDOEQsT0FBTyxFQUFFLEVBQUUsRUFBRUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Y0FDaEcsSUFBTTBMLFlBQVcsR0FBRyxJQUFJQyxHQUFHLENBQUN4RCxJQUFJLENBQUMzSSxHQUFHLENBQUMsVUFBQXFKLElBQUk7Z0JBQUEsT0FBSW5SLE1BQU0sQ0FBQ21SLElBQUksQ0FBQ3BPLEVBQUUsQ0FBQztjQUFBLEVBQUMsQ0FBQztjQUM5RCxJQUFNbVIsU0FBUSxHQUFHckIsU0FBUyxDQUFDbEwsTUFBTSxDQUFDLFVBQUF3SixJQUFJO2dCQUFBLE9BQUksQ0FBQzZDLFlBQVcsQ0FBQ0csR0FBRyxDQUFDblUsTUFBTSxDQUFDbVIsSUFBSSxDQUFDcE8sRUFBRSxDQUFDLENBQUM7Y0FBQSxFQUFDO2NBQzVFLElBQU1zTixTQUFTLEdBQUdJLElBQUksQ0FBQzlJLE1BQU0sQ0FBQyxVQUFBd0osSUFBSTtnQkFBQSxPQUFJblIsTUFBTSxDQUFDbVIsSUFBSSxDQUFDcE8sRUFBRSxDQUFDLEtBQUsvQyxNQUFNLENBQUNvUSxNQUFNLENBQUNyTixFQUFFLENBQUM7Y0FBQSxFQUFDO2NBQzVFLFFBQVFxTixNQUFNLEVBQUFwTSxNQUFBLENBQUEwTixrQkFBQSxDQUFLckIsU0FBUyxHQUFBcUIsa0JBQUEsQ0FBS3dDLFNBQVE7WUFDM0M7WUFDQSxJQUFNRixXQUFXLEdBQUcsSUFBSUMsR0FBRyxDQUFDeEQsSUFBSSxDQUFDM0ksR0FBRyxDQUFDLFVBQUFxSixJQUFJO2NBQUEsVUFBQW5OLE1BQUEsQ0FBT21OLElBQUksQ0FBQ3JRLElBQUksT0FBQWtELE1BQUEsQ0FBSW1OLElBQUksQ0FBQ3BPLEVBQUU7WUFBQSxDQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFNbVIsUUFBUSxHQUFHckIsU0FBUyxDQUFDbEwsTUFBTSxDQUFDLFVBQUF3SixJQUFJO2NBQUEsT0FBSSxDQUFDNkMsV0FBVyxDQUFDRyxHQUFHLElBQUFuUSxNQUFBLENBQUltTixJQUFJLENBQUNyUSxJQUFJLE9BQUFrRCxNQUFBLENBQUltTixJQUFJLENBQUNwTyxFQUFFLENBQUUsQ0FBQztZQUFBLEVBQUM7WUFDdEYsVUFBQWlCLE1BQUEsQ0FBQTBOLGtCQUFBLENBQVdqQixJQUFJLEdBQUFpQixrQkFBQSxDQUFLd0MsUUFBUTtVQUM5QixDQUFDLENBQUM7VUFDRnBILG1CQUFtQixDQUFDakIsSUFBSSxDQUFDO1VBQUFpSSxTQUFBLENBQUFwRCxJQUFBO1VBQUE7UUFBQTtVQUFBLE1BQ2hCL0Ysc0JBQXNCLEtBQUssZ0JBQWdCO1lBQUFtSixTQUFBLENBQUFwRCxJQUFBO1lBQUE7VUFBQTtVQUFBb0QsU0FBQSxDQUFBcEQsSUFBQTtVQUFBLE9BQzdCeEUsa0JBQWtCLENBQUM7WUFDeENaLFNBQVMsRUFBRTtjQUNUM0QsTUFBTSxFQUFFO2dCQUFFakYsSUFBSSxFQUFFekI7Y0FBRSxDQUFDO2NBQ25CaU0sSUFBSSxFQUFFc0YsUUFBUTtjQUNkdEIsT0FBTyxFQUFFO1lBQ1g7VUFDRixDQUFDLENBQUM7UUFBQTtVQUFBOEIscUJBQUEsR0FBQWMsU0FBQSxDQUFBakQsSUFBQTtVQU5NaEYsTUFBSSxHQUFBbUgscUJBQUEsQ0FBSm5ILElBQUk7VUFBQSxNQU9SNEcsbUJBQW1CLEtBQUtsSyx5QkFBeUIsQ0FBQ29JLE9BQU87WUFBQW1ELFNBQUEsQ0FBQXBELElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQW9ELFNBQUEsQ0FBQWxELE1BQUE7UUFBQTtVQUN2RGlDLFVBQVMsR0FBRyxFQUFBQyxtQkFBQSxHQUFDakgsTUFBSSxhQUFKQSxNQUFJLGdCQUFBa0gsY0FBQSxHQUFKbEgsTUFBSSxDQUFFMkIsT0FBTyxjQUFBdUYsY0FBQSx1QkFBYkEsY0FBQSxDQUFlbEgsSUFBSSxjQUFBaUgsbUJBQUEsY0FBQUEsbUJBQUEsR0FBSSxFQUFFLEVBQUVoTCxHQUFHLENBQUMsVUFBQWxGLENBQUM7WUFBQSxPQUFJRCxlQUFlLENBQUNDLENBQUMsRUFBRTNCLENBQUMsQ0FBQztVQUFBLEVBQUM7VUFDN0UrSCxRQUFRLENBQUMsVUFBQXlILElBQUksRUFBSTtZQUNmLElBQU11RCxXQUFXLEdBQUcsSUFBSUMsR0FBRyxDQUFDeEQsSUFBSSxDQUFDM0ksR0FBRyxDQUFDLFVBQUFxSixJQUFJO2NBQUEsVUFBQW5OLE1BQUEsQ0FBT21OLElBQUksQ0FBQ3JRLElBQUksT0FBQWtELE1BQUEsQ0FBSW1OLElBQUksQ0FBQ3BPLEVBQUU7WUFBQSxDQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFNbVIsUUFBUSxHQUFHckIsVUFBUyxDQUFDbEwsTUFBTSxDQUFDLFVBQUF3SixJQUFJO2NBQUEsT0FBSSxDQUFDNkMsV0FBVyxDQUFDRyxHQUFHLElBQUFuUSxNQUFBLENBQUltTixJQUFJLENBQUNyUSxJQUFJLE9BQUFrRCxNQUFBLENBQUltTixJQUFJLENBQUNwTyxFQUFFLENBQUUsQ0FBQztZQUFBLEVBQUM7WUFDdEYsVUFBQWlCLE1BQUEsQ0FBQTBOLGtCQUFBLENBQVdqQixJQUFJLEdBQUFpQixrQkFBQSxDQUFLd0MsUUFBUTtVQUM5QixDQUFDLENBQUM7VUFDRjdHLHFCQUFxQixDQUFDeEIsTUFBSSxDQUFDO1VBQUFpSSxTQUFBLENBQUFwRCxJQUFBO1VBQUE7UUFBQTtVQUFBLE1BQ2xCL0Ysc0JBQXNCLEtBQUssZUFBZTtZQUFBbUosU0FBQSxDQUFBcEQsSUFBQTtZQUFBO1VBQUE7VUFDN0MvSSxNQUFnQyxHQUFHLENBQUMsQ0FBQztVQUMzQyxJQUFJcUQsV0FBVyxDQUFDOUssU0FBUyxLQUFLLElBQUksSUFBSThLLFdBQVcsQ0FBQzlLLFNBQVMsS0FBS0gsU0FBUyxJQUFJaUwsV0FBVyxDQUFDOUssU0FBUyxLQUFLLEVBQUUsRUFBRTtZQUN6R3lILE1BQU0sQ0FBQ3lKLFVBQVUsR0FBRyxDQUFDcFIsTUFBTSxDQUFDZ0wsV0FBVyxDQUFDOUssU0FBUyxDQUFDLENBQUM7VUFDckQ7VUFDQSxJQUFJOEssV0FBVyxDQUFDbEwsUUFBUSxLQUFLLElBQUksSUFBSWtMLFdBQVcsQ0FBQ2xMLFFBQVEsS0FBS0MsU0FBUyxJQUFJaUwsV0FBVyxDQUFDbEwsUUFBUSxLQUFLLEVBQUUsRUFBRTtZQUN0RzZILE1BQU0sQ0FBQzBKLFNBQVMsR0FBRyxDQUFDclIsTUFBTSxDQUFDZ0wsV0FBVyxDQUFDbEwsUUFBUSxDQUFDLENBQUM7VUFDbkQ7VUFBQ2dVLFNBQUEsQ0FBQXBELElBQUE7VUFBQSxPQUNzQnRDLHVCQUF1QixDQUFDO1lBQzdDOUMsU0FBUyxFQUFFO2NBQ1QzRCxNQUFNLEVBQUFzSixhQUFBO2dCQUFJeFIsUUFBUSxFQUFFO2NBQUssR0FBS2tJLE1BQU0sQ0FBRTtjQUN0QzJKLFVBQVUsRUFBRTtnQkFBRUMsTUFBTSxFQUFFLENBQUNpQixRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQUVoQixJQUFJLEVBQUU7Y0FBRztZQUN0RDtVQUNGLENBQUMsQ0FBQztRQUFBO1VBQUE2QixzQkFBQSxHQUFBUyxTQUFBLENBQUFqRCxJQUFBO1VBTE1oRixNQUFJLEdBQUF3SCxzQkFBQSxDQUFKeEgsSUFBSTtVQUFBLE1BTVI0RyxtQkFBbUIsS0FBS2xLLHlCQUF5QixDQUFDb0ksT0FBTztZQUFBbUQsU0FBQSxDQUFBcEQsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBb0QsU0FBQSxDQUFBbEQsTUFBQTtRQUFBO1VBQ3ZEaUMsV0FBUyxHQUFHLEVBQUFNLHFCQUFBLEdBQUN0SCxNQUFJLGFBQUpBLE1BQUksZ0JBQUF1SCxpQkFBQSxHQUFKdkgsTUFBSSxDQUFFZ0MsVUFBVSxjQUFBdUYsaUJBQUEsdUJBQWhCQSxpQkFBQSxDQUFrQnZILElBQUksY0FBQXNILHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRSxFQUM1Q3JMLEdBQUcsQ0FBQzNDLHlCQUF5QixDQUFDLENBQzlCd0MsTUFBTSxDQUFDLFVBQUN3SixJQUFJO1lBQUEsT0FBNkJBLElBQUksS0FBSyxJQUFJO1VBQUEsRUFBQyxDQUN2RHJKLEdBQUcsQ0FBQyxVQUFBcEksSUFBSTtZQUFBLE9BQUltRixtQkFBbUIsQ0FBQ25GLElBQUksRUFBRSxFQUFFLEVBQUVxRix3QkFBd0IsQ0FBQztVQUFBLEVBQUM7VUFDdkVpRSxRQUFRLENBQUMsVUFBQXlILElBQUksRUFBSTtZQUNmLElBQU11RCxXQUFXLEdBQUcsSUFBSUMsR0FBRyxDQUFDeEQsSUFBSSxDQUFDM0ksR0FBRyxDQUFDLFVBQUFxSixJQUFJO2NBQUEsVUFBQW5OLE1BQUEsQ0FBT21OLElBQUksQ0FBQ3JRLElBQUksT0FBQWtELE1BQUEsQ0FBSW1OLElBQUksQ0FBQ3BPLEVBQUU7WUFBQSxDQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFNbVIsUUFBUSxHQUFHckIsV0FBUyxDQUFDbEwsTUFBTSxDQUFDLFVBQUF3SixJQUFJO2NBQUEsT0FBSSxDQUFDNkMsV0FBVyxDQUFDRyxHQUFHLElBQUFuUSxNQUFBLENBQUltTixJQUFJLENBQUNyUSxJQUFJLE9BQUFrRCxNQUFBLENBQUltTixJQUFJLENBQUNwTyxFQUFFLENBQUUsQ0FBQztZQUFBLEVBQUM7WUFDdEYsVUFBQWlCLE1BQUEsQ0FBQTBOLGtCQUFBLENBQVdqQixJQUFJLEdBQUFpQixrQkFBQSxDQUFLd0MsUUFBUTtVQUM5QixDQUFDLENBQUM7VUFDRnpHLDBCQUEwQixDQUFDNUIsTUFBSSxDQUFDO1VBQUFpSSxTQUFBLENBQUFwRCxJQUFBO1VBQUE7UUFBQTtVQUFBLE1BQ3ZCL0Ysc0JBQXNCLEtBQUssa0JBQWtCO1lBQUFtSixTQUFBLENBQUFwRCxJQUFBO1lBQUE7VUFBQTtVQUNoRHRCLGVBQWUsR0FDbkJwRSxXQUFXLENBQUNsTCxRQUFRLEtBQUssSUFBSSxJQUFJa0wsV0FBVyxDQUFDbEwsUUFBUSxLQUFLQyxTQUFTLElBQUlpTCxXQUFXLENBQUNsTCxRQUFRLEtBQUssRUFBRSxHQUM5RjtZQUFFa1IsU0FBUyxFQUFFLENBQUNoUixNQUFNLENBQUNnTCxXQUFXLENBQUNsTCxRQUFRLENBQUM7VUFBRSxDQUFDLEdBQzdDQyxTQUFTO1VBQUErVCxTQUFBLENBQUFwRCxJQUFBO1VBQUEsT0FDUW5DLHFCQUFxQixDQUFDO1lBQzNDakQsU0FBUyxFQUFBMkYsYUFBQSxDQUFBQSxhQUFBLEtBQ0g3QixlQUFlLEdBQUc7Y0FBRW5OLFNBQVMsRUFBRW1OO1lBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7Y0FDekRsQyxJQUFJLEVBQUVzRixRQUFRO2NBQ2R0QixPQUFPLEVBQUU7WUFBRTtVQUVmLENBQUMsQ0FBQztRQUFBO1VBQUF3QyxzQkFBQSxHQUFBSSxTQUFBLENBQUFqRCxJQUFBO1VBTk1oRixNQUFJLEdBQUE2SCxzQkFBQSxDQUFKN0gsSUFBSTtVQUFBLE1BT1I0RyxtQkFBbUIsS0FBS2xLLHlCQUF5QixDQUFDb0ksT0FBTztZQUFBbUQsU0FBQSxDQUFBcEQsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBb0QsU0FBQSxDQUFBbEQsTUFBQTtRQUFBO1VBQ3ZEaUMsV0FBUyxHQUFHLEVBQUFXLG9CQUFBLEdBQUMzSCxNQUFJLGFBQUpBLE1BQUksZ0JBQUE0SCxlQUFBLEdBQUo1SCxNQUFJLENBQUVvQyxRQUFRLGNBQUF3RixlQUFBLHVCQUFkQSxlQUFBLENBQWdCNUgsSUFBSSxjQUFBMkgsb0JBQUEsY0FBQUEsb0JBQUEsR0FBSSxFQUFFLEVBQzFDMUwsR0FBRyxDQUFDL0IsK0JBQStCLENBQUMsQ0FDcEM0QixNQUFNLENBQUMsVUFBQ3dKLElBQUk7WUFBQSxPQUE4QkEsSUFBSSxLQUFLLElBQUk7VUFBQSxFQUFDLENBQ3hEckosR0FBRyxDQUFDLFVBQUFxSixJQUFJO1lBQUEsT0FBSTVLLGVBQWUsQ0FBQzRLLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDO1VBQUEsRUFBQztVQUNwRG5JLFFBQVEsQ0FBQyxVQUFBeUgsSUFBSSxFQUFJO1lBQ2YsSUFBTXVELFdBQVcsR0FBRyxJQUFJQyxHQUFHLENBQUN4RCxJQUFJLENBQUMzSSxHQUFHLENBQUMsVUFBQXFKLElBQUk7Y0FBQSxVQUFBbk4sTUFBQSxDQUFPbU4sSUFBSSxDQUFDclEsSUFBSSxPQUFBa0QsTUFBQSxDQUFJbU4sSUFBSSxDQUFDcE8sRUFBRTtZQUFBLENBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQU1tUixRQUFRLEdBQUdyQixXQUFTLENBQUNsTCxNQUFNLENBQUMsVUFBQXdKLElBQUk7Y0FBQSxPQUFJLENBQUM2QyxXQUFXLENBQUNHLEdBQUcsSUFBQW5RLE1BQUEsQ0FBSW1OLElBQUksQ0FBQ3JRLElBQUksT0FBQWtELE1BQUEsQ0FBSW1OLElBQUksQ0FBQ3BPLEVBQUUsQ0FBRSxDQUFDO1lBQUEsRUFBQztZQUN0RixVQUFBaUIsTUFBQSxDQUFBME4sa0JBQUEsQ0FBV2pCLElBQUksR0FBQWlCLGtCQUFBLENBQUt3QyxRQUFRO1VBQzlCLENBQUMsQ0FBQztVQUNGcEcsNkJBQTZCLENBQUNqQyxNQUFJLENBQUM7UUFBQTtVQUFBaUksU0FBQSxDQUFBcEQsSUFBQTtVQUFBO1FBQUE7VUFBQW9ELFNBQUEsQ0FBQXJELElBQUE7VUFBQW9ELEdBQUEsR0FBQUMsU0FBQTtVQUFBLE1BR2pDckIsbUJBQW1CLEtBQUtsSyx5QkFBeUIsQ0FBQ29JLE9BQU87WUFBQW1ELFNBQUEsQ0FBQXBELElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQW9ELFNBQUEsQ0FBQWxELE1BQUE7UUFBQTtVQUM3RHdELE9BQU8sQ0FBQzdLLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRTtZQUNqRDhLLE1BQU0sRUFBRTFKLHNCQUFzQjtZQUM5QjZILFFBQVEsRUFBUkEsUUFBUTtZQUNSakosS0FBSyxFQUFBc0s7VUFDUCxDQUFDLENBQUM7VUFDRjtVQUNBckssUUFBUSxDQUFDLElBQUksQ0FBQztVQUNkUSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQUE7VUFBQThKLFNBQUEsQ0FBQXJELElBQUE7VUFFakJyRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7VUFBQSxPQUFBMEosU0FBQSxDQUFBbkMsTUFBQTtRQUFBO1FBQUE7VUFBQSxPQUFBbUMsU0FBQSxDQUFBbEMsSUFBQTtNQUFBO0lBQUEsR0FBQVUsUUFBQTtFQUFBLENBRTFCLElBQUUsQ0FDRG5JLGFBQWEsRUFDYkosT0FBTyxFQUNQUSxXQUFXLEVBQ1hJLHNCQUFzQixFQUN0Qi9CLG9CQUFvQixFQUNwQjZELG1CQUFtQixFQUNuQlAsa0JBQWtCLEVBQ2xCa0MsdUJBQXVCLEVBQ3ZCRyxxQkFBcUIsRUFDckJ2RCxXQUFXLENBQUM5SyxTQUFTLEVBQ3JCOEssV0FBVyxDQUFDbEwsUUFBUSxFQUNwQmlGLHdCQUF3QixFQUN4QnFELE9BQU8sRUFDUEUsQ0FBQyxFQUNEK0UscUJBQXFCLEVBQ3JCUCxtQkFBbUIsRUFDbkJXLDBCQUEwQixFQUMxQkssNkJBQTZCLENBQzlCLENBQUM7O0VBRUY7RUFDQTtFQUNBLElBQU13RyxjQUFjLEdBQUd0VyxNQUFNLENBQUN3USxXQUFXLENBQUM7RUFDMUMxUSxTQUFTLENBQUMsWUFBTTtJQUNkd1csY0FBYyxDQUFDM0QsT0FBTyxHQUFHbkMsV0FBVztFQUN0QyxDQUFDLEVBQUUsQ0FBQ0EsV0FBVyxDQUFDLENBQUM7O0VBRWpCO0VBQ0E7RUFDQSxJQUFNK0YsY0FBYyxHQUNsQnpULElBQUksS0FBSyxNQUFNLEdBQ1gsTUFBTSxNQUFBa0QsTUFBQSxDQUNIbEQsSUFBSSxPQUFBa0QsTUFBQSxFQUFBaUUscUJBQUEsR0FBSStDLFdBQVcsQ0FBQzlLLFNBQVMsY0FBQStILHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRSxPQUFBakUsTUFBQSxFQUFBa0UscUJBQUEsR0FBSThDLFdBQVcsQ0FBQ2xMLFFBQVEsY0FBQW9JLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRSxPQUFBbEUsTUFBQSxFQUFBbUUscUJBQUEsR0FBSTZDLFdBQVcsQ0FBQzdLLFdBQVcsY0FBQWdJLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRSxPQUFBbkUsTUFBQSxDQUFJNkcsV0FBVyxDQUFFOztFQUU1SDtFQUNBL00sU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJLENBQUM4SyxvQkFBb0IsQ0FBQ3RILElBQUksQ0FBQyxDQUFDLEVBQUU7TUFDaENnVCxjQUFjLENBQUMzRCxPQUFPLENBQUMsQ0FBQztJQUMxQjtFQUNGLENBQUMsRUFBRSxDQUFDL0gsb0JBQW9CLEVBQUUyTCxjQUFjLENBQUMsQ0FBQztFQUUxQyxPQUFPO0lBQ0x4TCxLQUFLLEVBQUxBLEtBQUs7SUFDTEksT0FBTyxFQUFQQSxPQUFPO0lBQ1BJLEtBQUssRUFBTEEsS0FBSztJQUNMSSxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtJQUNoQkksT0FBTyxFQUFQQSxPQUFPO0lBQ1BJLGFBQWEsRUFBYkEsYUFBYTtJQUNia0ksUUFBUSxFQUFSQSxRQUFRO0lBQ1IzUSxXQUFXLEVBQVhBLFdBQVc7SUFDWDhTLGlCQUFpQixFQUFFN0wsY0FBYztJQUNqQzZGLFdBQVcsRUFBWEE7RUFDRixDQUFDO0FBQ0gsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
1235
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXp5UXVlcnkiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImdldFJlY2VudENsaWVudHMiLCJnZXRSZWNlbnRQcm9qZWN0cyIsImdldFJlY2VudFRhc2tzIiwidXNlVXNlciIsIlBST0pFQ1RTX0ZBTExCQUNLIiwiU0VBUkNIX0VOVElUSUVTIiwiVEFTS19GQU1JTFlfRkFMTEJBQ0siLCJTRUFSQ0hfQ0xJRU5UUyIsIlVTRVJTX0RJUkVDVE9SWSIsIlNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUyIsInVzZURlYm91bmNlIiwidXNlVCIsImZldGNoTWFpYSIsIm5vcm1hbGl6ZVBvc2l0aXZlSW50IiwidmFsdWUiLCJmYWxsYmFjayIsInBhcnNlZCIsIk51bWJlciIsImlzRmluaXRlIiwibm9ybWFsaXplZCIsIk1hdGgiLCJmbG9vciIsIkJBU0VfRklMVEVSU19CWV9UWVBFIiwicHJvamVjdCIsImFyY2hpdmVkIiwidGFzayIsImJ1aWxkVGFza1NlYXJjaEV4dHJhRW50cmllcyIsInNjb3BlIiwicmF3Q2xpZW50IiwiY2xpZW50SWQiLCJ1bmRlZmluZWQiLCJTdHJpbmciLCJyYXdQcm9qZWN0IiwicHJvamVjdElkIiwiYWdlbnRFbnRpdHkiLCJlbnRyaWVzIiwicHVzaENsaWVudCIsInB1c2giLCJwdXNoUHJvamVjdCIsImJ1aWxkVGFza1NlYXJjaEV4dHJhIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsImJ1aWxkUHJvamVjdFNlYXJjaEV4dHJhIiwiYnVpbGRTZWFyY2hFbnRpdGllc0V4dHJhIiwidHlwZSIsImJ1aWxkRmlsdGVyc0ZvclR5cGUiLCJidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyIsInEiLCJiYXNlIiwid2l0aFBvc2l0aW9uIiwid2l0aFRlYW1zIiwidHJpbW1lZFEiLCJ0cmltIiwic2VhcmNoSW5wdXQiLCJoaWdobGlnaHRSYW5nZSIsInRleHQiLCJzZWFyY2hWYWx1ZSIsImlkeCIsInRvTG93ZXJDYXNlIiwiaW5kZXhPZiIsInN0YXJ0IiwiZmlyc3REZWZpbmVkIiwiX2xlbiIsImFyZ3VtZW50cyIsInZhbHVlcyIsIkFycmF5IiwiX2tleSIsImZpbmQiLCJub3JtYWxpemVUcmltbWVkU3RyaW5nIiwiZ2V0VXNlclBvc2l0aW9uTmFtZSIsInVzZXJQb3NpdGlvbiIsIl90eXBlb2YiLCJuYW1lIiwibWFwQ2xpZW50VG9JdGVtIiwiYyIsIl9jJHRvdGFsUHJveWVjdG9zIiwiX2MkdG90YWxQcm95ZWN0b3MyIiwiaWQiLCJwcmltYXJ5IiwicHJpbWFyeUhpZ2hsaWdodCIsImJyZWFkY3J1bWIiLCJjb3VudCIsInRvdGFsUHJveWVjdG9zIiwiY291bnRMYWJlbCIsInJhdyIsIm1hcFVzZXJUb0l0ZW0iLCJ1IiwiX3UkZmlyc3ROYW1lIiwiX3UkbGFzdE5hbWUiLCJfdSRwaWN0dXJlIiwiX3UkdXNlclBvc2l0aW9uJG5hbWUiLCJfdSR1c2VyUG9zaXRpb24iLCJfdSRlbWFpbCIsImZ1bGxOYW1lIiwiY29uY2F0IiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJlbWFpbCIsInBpY3R1cmUiLCJwb3NpdGlvbk5hbWUiLCJtYXBDb3JVc2VyVG9Vc2VySXRlbSIsInVzZXIiLCJtZUxhYmVsIiwiX3VzZXIkZmlyc3ROYW1lIiwiX3VzZXIkbGFzdE5hbWUiLCJwb3NpdGlvbkxpbmUiLCJ1c2VyX3Bvc2l0aW9uIiwibWFwUmVjZW50VGFza1RvSXRlbSIsIl90YXNrJHByb2plY3ROYW1lIiwic2hvd1Byb2plY3ROYW1lSW5UYXNrUm93IiwidGl0bGUiLCJwcm9qZWN0TmFtZSIsInBhcmVudCIsIm5vcm1hbGl6ZVRhc2tGYW1pbHlSZWNvcmQiLCJyZWNvcmQiLCJfcmVjb3JkJHRpdGxlIiwiX2ZpcnN0RGVmaW5lZCIsIl9yZWNvcmQkcHJvamVjdCIsIl9yZWNvcmQkZmF0aGVyIiwiX3JlY29yZCRmYXRoZXIyIiwidGFza0ZhbWlseUlkIiwiX2lkIiwiZmF0aGVyIiwiaGFzRmF0aGVyIiwidGFza0ZhdGhlciIsIm5vcm1hbGl6ZVByb2plY3RzRmFsbGJhY2tSZWNvcmQiLCJfcmVjb3JkJG5hbWUiLCJfZmlyc3REZWZpbmVkMiIsIl9yZWNvcmQkY2xpZW50IiwiX3JlY29yZCRjbGllbnQkbmFtZSIsIl9yZWNvcmQkY2xpZW50MiIsImNsaWVudCIsImNsaWVudE5hbWUiLCJtYXBTZWFyY2hUb0l0ZW0iLCJyIiwiX3IkcHJvamVjdE5hbWUiLCJfciRwcm9qZWN0TmFtZTIiLCJfciRjbGllbnRJZCIsIl9yJGNsaWVudE5hbWUiLCJfciRmZWVJZCIsIl9mYXRoZXIkdGl0bGUiLCJ0YXNrUHJvamVjdE5hbWUiLCJmZWVJZCIsImZhdGhlcklkIiwiZmF0aGVyVGl0bGUiLCJmb3JtYXRNY3BQcmltYXJ5TGFiZWwiLCJzbHVnIiwicmVwbGFjZSIsImNoYXIiLCJ0b1VwcGVyQ2FzZSIsIlNLSUxMU19QQUdFX0xJTUlUIiwiZmV0Y2hBbGxTa2lsbFBhZ2VzIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwib2Zmc2V0IiwiYWNjdW11bGF0ZWQiLCJfZGF0YSRkYXRhIiwicmVzcG9uc2UiLCJkYXRhIiwicGFnZSIsImFsbCIsIl9kYXRhJG5leHRfb2Zmc2V0Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJwYXRoIiwibWV0aG9kIiwic2VudCIsImpzb24iLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJoYXNfbW9yZSIsImFicnVwdCIsIm5leHRfb2Zmc2V0Iiwic3RvcCIsIl94IiwiX3gyIiwiYXBwbHkiLCJtYXBTa2lsbHNUb0l0ZW1zIiwic2tpbGxzIiwiZmlsdGVyZWQiLCJmaWx0ZXIiLCJzIiwiaW5jbHVkZXMiLCJtYXAiLCJza2lsbCIsIm1hcE1jcFNsdWdzVG9JdGVtcyIsInNsdWdzIiwidXNlRW50aXR5U2VhcmNoIiwiX3Njb3BlJG1jcFNsdWdzIiwiX3Njb3BlJHNraWxscyIsIl9zdGFibGVTY29wZSRwcm9qZWN0SSIsIl9zdGFibGVTY29wZSRjbGllbnRJZCIsIl9zdGFibGVTY29wZSRhZ2VudEVudCIsImNvclVzZXIiLCJfdXNlVCIsInQiLCJyZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2V0U2VhcmNoVmFsdWUiLCJkZWJvdW5jZWRTZWFyY2hWYWx1ZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiY2FjaGVkU2tpbGxzIiwic2V0Q2FjaGVkU2tpbGxzIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpdGVtcyIsInNldEl0ZW1zIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwiZXJyb3IiLCJzZXRFcnJvciIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImhpZGVSZWNlbnRzTGFiZWwiLCJzZXRIaWRlUmVjZW50c0xhYmVsIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsImhhc01vcmUiLCJzZXRIYXNNb3JlIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsImlzTG9hZGluZ01vcmUiLCJzZXRJc0xvYWRpbmdNb3JlIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImN1cnJlbnRQYWdlIiwic2V0Q3VycmVudFBhZ2UiLCJfdXNlU3RhdGUxNyIsIl91c2VTdGF0ZTE4IiwiYWN0aXZlUGFnaW5hdGlvblNvdXJjZSIsInNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UiLCJtY3BTbHVnc0tleSIsIm1jcFNsdWdzIiwiam9pbiIsInNraWxsc0tleSIsInN0YWJsZVNjb3BlIiwiX3Njb3BlJGNsaWVudElkIiwiX3Njb3BlJHByb2plY3RJZCIsIl9zY29wZSRtY3BTbHVnczIiLCJfc2NvcGUkYWdlbnRFbnRpdHkiLCJfdXNlTGF6eVF1ZXJ5IiwidmFyaWFibGVzIiwibGltaXQiLCJmZXRjaFBvbGljeSIsIl91c2VMYXp5UXVlcnkyIiwiZmV0Y2hTZWFyY2hFbnRpdGllcyIsIl91c2VMYXp5UXVlcnkyJCIsInNlYXJjaERhdGEiLCJzZWFyY2hMb2FkaW5nIiwic2VhcmNoRXJyb3IiLCJfdXNlTGF6eVF1ZXJ5MyIsIl91c2VMYXp5UXVlcnk0IiwiZmV0Y2hTZWFyY2hDbGllbnRzIiwiX3VzZUxhenlRdWVyeTQkIiwiY2xpZW50c0RhdGEiLCJjbGllbnRzTG9hZGluZyIsImNsaWVudHNFcnJvciIsIl91c2VMYXp5UXVlcnk1IiwiX3VzZUxhenlRdWVyeTYiLCJmZXRjaFVzZXJzRGlyZWN0b3J5IiwiX3VzZUxhenlRdWVyeTYkIiwidXNlcnNEYXRhIiwidXNlcnNMb2FkaW5nIiwidXNlcnNFcnJvciIsInN5bmNVc2Vyc1BhZ2luYXRpb24iLCJwYXlsb2FkIiwiX3BheWxvYWQkdXNlcnMiLCJfcGF5bG9hZCR1c2VyczIiLCJ1c2VycyIsImxhc3RQYWdlIiwic3luY0NsaWVudHNQYWdpbmF0aW9uIiwiX3BheWxvYWQkY2xpZW50cyIsIl9wYXlsb2FkJGNsaWVudHMyIiwiY2xpZW50cyIsInN5bmNUYXNrRmFsbGJhY2tQYWdpbmF0aW9uIiwiX3BheWxvYWQkdGFza0ZhbWlseSIsIl9wYXlsb2FkJHRhc2tGYW1pbHkyIiwicmF3UGFnZSIsInRhc2tGYW1pbHkiLCJzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbiIsIl9wYXlsb2FkJHByb2plY3RzIiwiX3BheWxvYWQkcHJvamVjdHMyIiwicHJvamVjdHMiLCJfdXNlTGF6eVF1ZXJ5NyIsIl91c2VMYXp5UXVlcnk4IiwiZmV0Y2hUYXNrRmFtaWx5RmFsbGJhY2siLCJfdXNlTGF6eVF1ZXJ5OSIsIl91c2VMYXp5UXVlcnkwIiwiZmV0Y2hQcm9qZWN0c0ZhbGxiYWNrIiwiZmV0Y2hSZWNlbnQiLCJfY2FsbGVlMiIsImdlbmVyYXRpb24iLCJfc3RhYmxlU2NvcGUkbWNwU2x1Z3MiLCJhbGxTa2lsbHMiLCJtYXBwZWQiLCJfZGF0YSIsIl9tYXBwZWQiLCJfZmFsbGJhY2tEYXRhJHByb2plY3QiLCJfZmFsbGJhY2tEYXRhJHByb2plY3QyIiwiYXJndW1lbnRzRmlsdGVyIiwiX3lpZWxkJGZldGNoUHJvamVjdHNGIiwiZmFsbGJhY2tEYXRhIiwiZmFsbGJhY2tNYXBwZWQiLCJyZWNlbnRUYXNrRmlsdGVycyIsIl9kYXRhMiIsInRhc2tJdGVtcyIsIl9mYWxsYmFja0RhdGEkdGFza0ZhbSIsIl9mYWxsYmFja0RhdGEkdGFza0ZhbTIiLCJfeWllbGQkZmV0Y2hUYXNrRmFtaWwiLCJfZmFsbGJhY2tEYXRhIiwiX2RhdGEzJHVzZXJzJGRhdGEiLCJfZGF0YTMkdXNlcnMiLCJfeWllbGQkZmV0Y2hVc2Vyc0RpcmUiLCJfZGF0YTMiLCJfbWFwcGVkMiIsIm1lSXRlbSIsIndpdGhvdXRNZSIsIl90IiwiX3QyIiwiX2NvbnRleHQyIiwiY3VycmVudCIsImZpbmlzaCIsImlzQXJyYXkiLCJwIiwiY2xpZW50X2lkIiwiX29iamVjdFNwcmVhZCIsInBlclBhZ2UiLCJpdGVtIiwicHJvamVjdElkcyIsImNsaWVudElkcyIsInBhZ2luYXRpb24iLCJzaXplIiwiZmlsdGVycyIsIl9zdGFibGVTY29wZSRtY3BTbHVnczIiLCJleHRyYSIsIl9jbGllbnRzRGF0YSRjbGllbnRzIiwiX3VzZXJzRGF0YSR1c2VycyIsIm1lSWQiLCJoYXNNZUluUmVzdWx0cyIsInNvbWUiLCJzZWFyY2giLCJsb2FkTW9yZSIsIl9jYWxsZWUzIiwic2FmZUN1cnJlbnRQYWdlIiwibmV4dFBhZ2UiLCJsb2FkTW9yZUJhc2VsaW5lR2VuIiwiX2RhdGEkdXNlcnMkZGF0YSIsIl9kYXRhJHVzZXJzIiwiX3lpZWxkJGZldGNoVXNlcnNEaXJlMiIsIm5leHRJdGVtcyIsIl9kYXRhNCRjbGllbnRzJGRhdGEiLCJfZGF0YTQkY2xpZW50cyIsIl95aWVsZCRmZXRjaFNlYXJjaENsaSIsIl9kYXRhNCIsIl9uZXh0SXRlbXMiLCJfZGF0YTUkdGFza0ZhbWlseSRkYXQiLCJfZGF0YTUkdGFza0ZhbWlseSIsIl95aWVsZCRmZXRjaFRhc2tGYW1pbDIiLCJfZGF0YTUiLCJfbmV4dEl0ZW1zMiIsIl9kYXRhNiRwcm9qZWN0cyRkYXRhIiwiX2RhdGE2JHByb2plY3RzIiwiX3lpZWxkJGZldGNoUHJvamVjdHNGMiIsIl9kYXRhNiIsIl9uZXh0SXRlbXMzIiwiX3QzIiwiX2NvbnRleHQzIiwiX3ByZXYkIiwiZXhpc3RpbmdJZHMiLCJTZXQiLCJhcHBlbmRlZCIsImhhcyIsImNvbnNvbGUiLCJzb3VyY2UiLCJmZXRjaFJlY2VudFJlZiIsInJlY2VudHNUcmlnZ2VyIiwidXBkYXRlU2VhcmNoVmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlRW50aXR5U2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUxhenlRdWVyeSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0UmVjZW50Q2xpZW50cyB9IGZyb20gJy4uL3NlcnZpY2VzL21haWEvUmVjZW50Q2xpZW50cy9nZXRSZWNlbnRDbGllbnRzJ1xuaW1wb3J0IHsgZ2V0UmVjZW50UHJvamVjdHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFByb2plY3RzL2dldFJlY2VudFByb2plY3RzJ1xuaW1wb3J0IHsgZ2V0UmVjZW50VGFza3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFRhc2tzL2dldFJlY2VudFRhc2tzJ1xuaW1wb3J0IHR5cGUgeyBSZWNlbnRUYXNrSXRlbSB9IGZyb20gJy4uL3NlcnZpY2VzL21haWEvUmVjZW50VGFza3MvZ2V0UmVjZW50VGFza3MnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IFBST0pFQ1RTX0ZBTExCQUNLLCBTRUFSQ0hfRU5USVRJRVMsIFRBU0tfRkFNSUxZX0ZBTExCQUNLIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvZW50aXR5U2VhcmNoUXVlcnknXG5pbXBvcnQgeyBTRUFSQ0hfQ0xJRU5UUyB9IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L0NsaWVudFNlYXJjaFF1ZXJ5J1xuaW1wb3J0IHsgVVNFUlNfRElSRUNUT1JZIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvdXNlcnNEaXJlY3RvcnlRdWVyeSdcbmltcG9ydCB7IFNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUyB9IGZyb20gJy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyB1c2VEZWJvdW5jZSB9IGZyb20gJy4vdXNlRGVib3VuY2UnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi91c2VUJ1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uSXRlbSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHR5cGUgeyBBZ2VudEVudGl0eSB9IGZyb20gJy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHR5cGUgeyBTa2lsbCB9IGZyb20gJy4uL3R5cGVzL3NraWxsJ1xuaW1wb3J0IHsgZmV0Y2hNYWlhIH0gZnJvbSAnLi4vc2VydmljZXMvbWFpYS9jbGllbnQnXG5cbnR5cGUgUmF3U2VhcmNoUmVzdWx0ID0ge1xuICBpZDogc3RyaW5nIHwgbnVtYmVyXG4gIHRpdGxlOiBzdHJpbmdcbiAgdHlwZT86IHN0cmluZ1xuICBjbGllbnRJZD86IG51bWJlciB8IHN0cmluZyB8IG51bGxcbiAgZmVlSWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsXG4gIGNsaWVudE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIHByb2plY3ROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBmYXRoZXI/OiB7IGlkOiBzdHJpbmcgfCBudW1iZXI7IHRpdGxlPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbFxufVxuXG50eXBlIFJhd0NsaWVudCA9IHtcbiAgaWQ6IG51bWJlciB8IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgdG90YWxQcm95ZWN0b3M/OiBudW1iZXIgfCBudWxsXG59XG5cbnR5cGUgUmF3RGlyZWN0b3J5VXNlciA9IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlclxuICBmaXJzdE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIGxhc3ROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBlbWFpbD86IHN0cmluZyB8IG51bGxcbiAgcGljdHVyZT86IHN0cmluZyB8IG51bGxcbiAgdXNlclBvc2l0aW9uPzogeyBuYW1lPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbFxufVxuXG50eXBlIFNlYXJjaEVudGl0aWVzRGF0YSA9IHsgc2VhcmNoOiBSYXdTZWFyY2hSZXN1bHRbXSB8IG51bGwgfVxudHlwZSBTZWFyY2hDbGllbnRzRGF0YSA9IHtcbiAgY2xpZW50czoge1xuICAgIHRvdGFsPzogbnVtYmVyIHwgbnVsbFxuICAgIHBlclBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgcGFnZT86IG51bWJlciB8IG51bGxcbiAgICBsYXN0UGFnZT86IG51bWJlciB8IG51bGxcbiAgICBkYXRhOiBSYXdDbGllbnRbXVxuICB9IHwgbnVsbFxufVxudHlwZSBVc2Vyc0RpcmVjdG9yeURhdGEgPSB7XG4gIHVzZXJzOiB7XG4gICAgdG90YWw/OiBudW1iZXIgfCBudWxsXG4gICAgcGVyUGFnZT86IG51bWJlciB8IG51bGxcbiAgICBwYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGxhc3RQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGRhdGE6IFJhd0RpcmVjdG9yeVVzZXJbXSB8IG51bGxcbiAgfSB8IG51bGxcbn1cblxudHlwZSBUYXNrRmFtaWx5UmVjb3JkID0ge1xuICBfaWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHRpdGxlPzogc3RyaW5nIHwgbnVsbFxuICBwcm9qZWN0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHRhc2tGYXRoZXI/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIGZhdGhlcj86IHsgaWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsOyB0aXRsZT86IHN0cmluZyB8IG51bGwgfSB8IG51bGxcbiAgcHJvamVjdD86IHsgaWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsOyBuYW1lPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbFxufVxuXG50eXBlIFRhc2tGYW1pbHlEYXRhID0ge1xuICB0YXNrRmFtaWx5Pzoge1xuICAgIHRvdGFsPzogbnVtYmVyIHwgbnVsbFxuICAgIHBlclBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgcGFnZT86IG51bWJlciB8IG51bGxcbiAgICBsYXN0UGFnZT86IG51bWJlciB8IG51bGxcbiAgICBkYXRhPzogVGFza0ZhbWlseVJlY29yZFtdIHwgbnVsbFxuICB9IHwgbnVsbFxufVxuXG50eXBlIEZhbGxiYWNrUHJvamVjdFJlY29yZCA9IHtcbiAgaWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIGNsaWVudElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBjbGllbnQ/OiB7IGlkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbDsgbmFtZT86IHN0cmluZyB8IG51bGwgfSB8IG51bGxcbn1cblxudHlwZSBQcm9qZWN0c0ZhbGxiYWNrRGF0YSA9IHtcbiAgcHJvamVjdHM/OiB7XG4gICAgdG90YWw/OiBudW1iZXIgfCBudWxsXG4gICAgcGVyUGFnZT86IG51bWJlciB8IG51bGxcbiAgICBwYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGxhc3RQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGRhdGE/OiBGYWxsYmFja1Byb2plY3RSZWNvcmRbXSB8IG51bGxcbiAgfSB8IG51bGxcbn1cblxudHlwZSBQYWdpbmF0aW9uU291cmNlID0gJ25vbmUnIHwgJ3VzZXJzJyB8ICdjbGllbnRzLXNlYXJjaCcgfCAndGFzay1mYWxsYmFjaycgfCAncHJvamVjdC1mYWxsYmFjaydcblxuY29uc3Qgbm9ybWFsaXplUG9zaXRpdmVJbnQgPSAodmFsdWU6IHVua25vd24sIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkpIHJldHVybiBmYWxsYmFja1xuICBjb25zdCBub3JtYWxpemVkID0gTWF0aC5mbG9vcihwYXJzZWQpXG4gIHJldHVybiBub3JtYWxpemVkID4gMCA/IG5vcm1hbGl6ZWQgOiBmYWxsYmFja1xufVxuXG4vKipcbiAqIFJlc3RyaW5nZSBsb3MgcmVzdWx0YWRvcyBhbCBgY2xpZW50SWRgL2Bwcm9qZWN0SWRgIGRlbCBhZ2VudGUgYWN0aXZvLlxuICogQ3VhbmRvIGVsIGFnZW50ZSBlc3TDoSBzY29wZWFkbyBhIHVuIGNsaWVudC9wcm9qZWN0LCB0YW50byBsb3MgcmVjZW50cyBjb21vXG4gKiBlbCBzZWFyY2ggZGViZW4gZmlsdHJhciBwb3IgZXNlIGNvbnRleHRvLiBTaSBlbCBiYWNrZW5kIG5vIGVudGllbmRlIGFsZ8O6blxuICogY2FtcG8gbG8gaWdub3JhIHkgc2UgY2FlIGFsIGNvbXBvcnRhbWllbnRvIGdsb2JhbC5cbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5U2VhcmNoU2NvcGUgPSB7XG4gIGNsaWVudElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBwcm9qZWN0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIC8qKiBTbHVncyBkZWwgY29uZWN0b3IgTUNQIGRlbCBhZ2VudGUgKGxpc3RhZG8gbG9jYWwsIHNpbiBHcmFwaFFMKS4gKi9cbiAgbWNwU2x1Z3M/OiBzdHJpbmdbXVxuICAvKipcbiAgICogU2tpbGxzIHByZWNhcmdhZGFzIChsaXN0YWRvIGxvY2FsLCBzaW4gUkVTVCkuIEN1YW5kbyBzZSBwcm92ZWVuLCBzZSB1c2FuIGRpcmVjdGFtZW50ZVxuICAgKiBlbiBsdWdhciBkZSBmZXRjaGVhciBkZXNkZSBsYSBBUEkuIMOadGlsIHBhcmEgZGV2L3Rlc3RpbmcgeSBwYXJhIFNTUi5cbiAgICovXG4gIHNraWxscz86IFNraWxsW11cbiAgLyoqXG4gICAqIGBlbnRpdHlgIGRlbCBhZ2VudGUgYWN0aXZvLiBQYXJhIGVzcGVjaWFsaXN0YXM6XG4gICAqIC0gYHByb2plY3RgOiBiw7pzcXVlZGEgZGUgdGFyZWFzIGZ1ZXJ6YSBmaWx0cm8gcG9yIGBwcm9qZWN0SWRgIGRlbCBjb250ZXh0by5cbiAgICogLSBgY2xpZW50YDogYsO6c3F1ZWRhIGRlIHByb3llY3RvcyBwb3IgYGNsaWVudElkYDsgdGFyZWFzIHBvciBjbGllbnRlICh5IHByb3llY3RvIHNpIGFwbGljYSkuXG4gICAqL1xuICBhZ2VudEVudGl0eT86IEFnZW50RW50aXR5IHwgbnVsbFxufVxuXG50eXBlIFNlYXJjaEZpbHRlcmFibGVUeXBlID0gJ3Byb2plY3QnIHwgJ3Rhc2snXG5cbmNvbnN0IEJBU0VfRklMVEVSU19CWV9UWVBFOiBSZWNvcmQ8U2VhcmNoRmlsdGVyYWJsZVR5cGUsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge1xuICBwcm9qZWN0OiB7IHByb2plY3Q6ICd0cnVlJywgYXJjaGl2ZWQ6ICdhbGwnIH0sXG4gIHRhc2s6IHsgdGFzazogJ3RydWUnLCBhcmNoaXZlZDogJ2ZhbHNlJyB9LFxufVxuXG4vKipcbiAqIEVudHJhZGFzIHBhcmEgZWwgYXJndW1lbnRvIEdyYXBoUUwgYGV4dHJhYCAoSlNPTiBzdHJpbmcgZGUgYXJyYXkpIGFsIGJ1c2NhciB0YXJlYXMgY29uIGNvbnRleHRvLlxuICogRWouOiBbe1wicHJvamVjdElkXCI6XCI4ODE1NTJcIn1dXG4gKi9cbmNvbnN0IGJ1aWxkVGFza1NlYXJjaEV4dHJhRW50cmllcyA9IChzY29wZT86IEVudGl0eVNlYXJjaFNjb3BlKTogQXJyYXk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPT4ge1xuICBjb25zdCByYXdDbGllbnQgPVxuICAgIHNjb3BlPy5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHNjb3BlPy5jbGllbnRJZCAhPT0gbnVsbCAmJiBzY29wZT8uY2xpZW50SWQgIT09ICcnID8gU3RyaW5nKHNjb3BlLmNsaWVudElkKSA6IG51bGxcbiAgY29uc3QgcmF3UHJvamVjdCA9XG4gICAgc2NvcGU/LnByb2plY3RJZCAhPT0gdW5kZWZpbmVkICYmIHNjb3BlPy5wcm9qZWN0SWQgIT09IG51bGwgJiYgc2NvcGU/LnByb2plY3RJZCAhPT0gJydcbiAgICAgID8gU3RyaW5nKHNjb3BlLnByb2plY3RJZClcbiAgICAgIDogbnVsbFxuXG4gIGNvbnN0IGFnZW50RW50aXR5ID0gc2NvcGU/LmFnZW50RW50aXR5XG4gIGNvbnN0IGVudHJpZXM6IEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0gW11cblxuICBjb25zdCBwdXNoQ2xpZW50ID0gKCkgPT4ge1xuICAgIGlmIChyYXdDbGllbnQpIGVudHJpZXMucHVzaCh7IGNsaWVudElkOiByYXdDbGllbnQgfSlcbiAgfVxuICBjb25zdCBwdXNoUHJvamVjdCA9ICgpID0+IHtcbiAgICBpZiAocmF3UHJvamVjdCkgZW50cmllcy5wdXNoKHsgcHJvamVjdElkOiByYXdQcm9qZWN0IH0pXG4gIH1cblxuICBpZiAoYWdlbnRFbnRpdHkgPT09ICdwcm9qZWN0Jykge1xuICAgIGlmIChyYXdQcm9qZWN0KSB7XG4gICAgICBwdXNoUHJvamVjdCgpXG4gICAgfSBlbHNlIGlmIChyYXdDbGllbnQpIHtcbiAgICAgIHB1c2hDbGllbnQoKVxuICAgIH1cbiAgfSBlbHNlIGlmIChhZ2VudEVudGl0eSA9PT0gJ2NsaWVudCcpIHtcbiAgICBwdXNoQ2xpZW50KClcbiAgICBwdXNoUHJvamVjdCgpXG4gIH0gZWxzZSB7XG4gICAgcHVzaENsaWVudCgpXG4gICAgcHVzaFByb2plY3QoKVxuICB9XG5cbiAgcmV0dXJuIGVudHJpZXNcbn1cblxuY29uc3QgYnVpbGRUYXNrU2VhcmNoRXh0cmEgPSAoc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGVudHJpZXMgPSBidWlsZFRhc2tTZWFyY2hFeHRyYUVudHJpZXMoc2NvcGUpXG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZW50cmllcylcbn1cblxuLyoqXG4gKiBUYWIgcHJveWVjdG86IGNvbiBgY2xpZW50SWRgIGVuIGVsIHNjb3BlLCBgZXh0cmFgIGFjb3RhIGxhIGLDunNxdWVkYSBhIHByb3llY3RvcyBkZSBlc2UgY2xpZW50ZS5cbiAqIEVqLjogYFt7XCJjbGllbnRJZFwiOlwiNDcxMDVcIn1dYCBqdW50byBhIGBmaWx0ZXJzYCBge1wicHJvamVjdFwiOlwidHJ1ZVwiLFwiYXJjaGl2ZWRcIjpcImFsbFwifWAuXG4gKi9cbmNvbnN0IGJ1aWxkUHJvamVjdFNlYXJjaEV4dHJhID0gKHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCByYXdDbGllbnQgPVxuICAgIHNjb3BlPy5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHNjb3BlPy5jbGllbnRJZCAhPT0gbnVsbCAmJiBzY29wZT8uY2xpZW50SWQgIT09ICcnID8gU3RyaW5nKHNjb3BlLmNsaWVudElkKSA6IG51bGxcbiAgaWYgKCFyYXdDbGllbnQpIHJldHVybiB1bmRlZmluZWRcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFt7IGNsaWVudElkOiByYXdDbGllbnQgfV0pXG59XG5cbmNvbnN0IGJ1aWxkU2VhcmNoRW50aXRpZXNFeHRyYSA9ICh0eXBlOiBTZWFyY2hGaWx0ZXJhYmxlVHlwZSwgc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh0eXBlID09PSAndGFzaycpIHJldHVybiBidWlsZFRhc2tTZWFyY2hFeHRyYShzY29wZSlcbiAgaWYgKHR5cGUgPT09ICdwcm9qZWN0JykgcmV0dXJuIGJ1aWxkUHJvamVjdFNlYXJjaEV4dHJhKHNjb3BlKVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogVGFiIGB0YXNrYCAvIGBwcm9qZWN0YDogYGZpbHRlcnNgIHPDs2xvIHRpcG8gKyBhcmNoaXZlZCAodGFyZWFzOiBubyBhcmNoaXZhZGFzKTsgc2NvcGUgKGNsaWVudElkIC8gcHJvamVjdElkIGVuIHRhcmVhcykgZW4gYGV4dHJhYC5cbiAqL1xuY29uc3QgYnVpbGRGaWx0ZXJzRm9yVHlwZSA9ICh0eXBlOiBTZWFyY2hGaWx0ZXJhYmxlVHlwZSk6IHN0cmluZyA9PiB7XG4gIGlmICh0eXBlID09PSAncHJvamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoQkFTRV9GSUxURVJTX0JZX1RZUEUucHJvamVjdClcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoQkFTRV9GSUxURVJTX0JZX1RZUEUudGFzaylcbn1cblxuLyoqXG4gKiBGaWx0cm9zIHBhcmEgbGEgcXVlcnkgdXNlcnMuIEVsIGJhY2tlbmQgZXNwZXJhIHVuIEpTT04gc3RyaW5nIGNvblxuICogd2l0aFBvc2l0aW9uLCB3aXRoVGVhbXMgeSBzZWFyY2hJbnB1dC4gTGUgYWdyZWdhbW9zIGNsaWVudElkL3Byb2plY3RJZFxuICogZGVsIHNjb3BlIGVuIGNhc28gZGUgcXVlIGVsIGJhY2tlbmQgbG9zIGFwcm92ZWNoZSBwYXJhIGZpbHRyYXIgcG9yXG4gKiBjb250ZXh0byAoc2kgbm8gbG9zIGVudGllbmRlIGxvcyBpZ25vcmEpLlxuICovXG5jb25zdCBidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyA9IChxOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBiYXNlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICB3aXRoUG9zaXRpb246IHRydWUsXG4gICAgd2l0aFRlYW1zOiB0cnVlLFxuICB9XG4gIGNvbnN0IHRyaW1tZWRRID0gcS50cmltKClcbiAgaWYgKHRyaW1tZWRRKSB7XG4gICAgYmFzZS5zZWFyY2hJbnB1dCA9IHRyaW1tZWRRXG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGJhc2UpXG59XG5cbmNvbnN0IGhpZ2hsaWdodFJhbmdlID0gKHRleHQ6IHN0cmluZywgc2VhcmNoVmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAoIXNlYXJjaFZhbHVlKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGlkeCA9IHRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXG4gIGlmIChpZHggPCAwKSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiB7IHN0YXJ0OiBpZHgsIGxlbmd0aDogc2VhcmNoVmFsdWUubGVuZ3RoIH1cbn1cblxuY29uc3QgZmlyc3REZWZpbmVkID0gPFQ+KC4uLnZhbHVlczogQXJyYXk8VCB8IG51bGwgfCB1bmRlZmluZWQ+KTogVCB8IHVuZGVmaW5lZCA9PlxuICB2YWx1ZXMuZmluZCh2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKVxuXG5jb25zdCBub3JtYWxpemVUcmltbWVkU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAnJ1xuICByZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbmNvbnN0IGdldFVzZXJQb3NpdGlvbk5hbWUgPSAodXNlclBvc2l0aW9uOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VVc2VyPlsndXNlcl9wb3NpdGlvbiddKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiB1c2VyUG9zaXRpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gdXNlclBvc2l0aW9uLnRyaW0oKVxuICBpZiAodXNlclBvc2l0aW9uICYmIHR5cGVvZiB1c2VyUG9zaXRpb24gPT09ICdvYmplY3QnICYmICduYW1lJyBpbiB1c2VyUG9zaXRpb24pIHtcbiAgICByZXR1cm4gbm9ybWFsaXplVHJpbW1lZFN0cmluZyh1c2VyUG9zaXRpb24ubmFtZSlcbiAgfVxuICByZXR1cm4gJydcbn1cblxuY29uc3QgbWFwQ2xpZW50VG9JdGVtID0gKGM6IFJhd0NsaWVudCwgc2VhcmNoVmFsdWU6IHN0cmluZyk6IENvbnRleHRNZW50aW9uSXRlbSA9PiAoe1xuICBpZDogYy5pZCxcbiAgdHlwZTogJ2NsaWVudCcsXG4gIHByaW1hcnk6IGMubmFtZSxcbiAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UoYy5uYW1lLCBzZWFyY2hWYWx1ZSksXG4gIGJyZWFkY3J1bWI6IHtcbiAgICBjb3VudDogYy50b3RhbFByb3llY3RvcyA/PyB1bmRlZmluZWQsXG4gICAgY291bnRMYWJlbDogJ3Byb2plY3RzJyxcbiAgfSxcbiAgcmF3OiB7XG4gICAgaWQ6IGMuaWQsXG4gICAgbmFtZTogYy5uYW1lLFxuICAgIHRvdGFsUHJveWVjdG9zOiBjLnRvdGFsUHJveWVjdG9zID8/IG51bGwsXG4gIH0sXG59KVxuXG5jb25zdCBtYXBVc2VyVG9JdGVtID0gKHU6IFJhd0RpcmVjdG9yeVVzZXIsIHNlYXJjaFZhbHVlOiBzdHJpbmcpOiBDb250ZXh0TWVudGlvbkl0ZW0gPT4ge1xuICBjb25zdCBmdWxsTmFtZSA9IGAke3UuZmlyc3ROYW1lID8/ICcnfSAke3UubGFzdE5hbWUgPz8gJyd9YC50cmltKClcbiAgY29uc3QgcHJpbWFyeSA9IGZ1bGxOYW1lIHx8IHUuZW1haWwgfHwgU3RyaW5nKHUuaWQpXG5cbiAgcmV0dXJuIHtcbiAgICBpZDogdS5pZCxcbiAgICB0eXBlOiAndXNlcicsXG4gICAgcHJpbWFyeSxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgcmF3OiB7XG4gICAgICBpZDogdS5pZCxcbiAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICBwaWN0dXJlOiB1LnBpY3R1cmUgPz8gbnVsbCxcbiAgICAgIHBvc2l0aW9uTmFtZTogdS51c2VyUG9zaXRpb24/Lm5hbWUgPz8gbnVsbCxcbiAgICAgIGVtYWlsOiB1LmVtYWlsID8/IG51bGwsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBtYXBDb3JVc2VyVG9Vc2VySXRlbSA9IChcbiAgdXNlcjogUmV0dXJuVHlwZTx0eXBlb2YgdXNlVXNlcj4sXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmcsXG4gIG1lTGFiZWw6IHN0cmluZ1xuKTogQ29udGV4dE1lbnRpb25JdGVtID0+IHtcbiAgY29uc3QgZnVsbE5hbWUgPSBgJHt1c2VyLmZpcnN0TmFtZSA/PyAnJ30gJHt1c2VyLmxhc3ROYW1lID8/ICcnfWAudHJpbSgpXG4gIC8qKiBTb2xvIGNhcmdvIHJlYWw7IHNpbiBmYWxsYmFjayBhIGByb2xlYCAobGEgVUkgbXVlc3RyYSDigJxTaW4gcG9zaWNpw7Nu4oCdIHNpIGZhbHRhKS4gKi9cbiAgY29uc3QgcG9zaXRpb25MaW5lID0gZ2V0VXNlclBvc2l0aW9uTmFtZSh1c2VyLnVzZXJfcG9zaXRpb24pIHx8IG51bGxcbiAgY29uc3QgZW1haWwgPSBub3JtYWxpemVUcmltbWVkU3RyaW5nKHVzZXIuZW1haWwpIHx8IG51bGxcblxuICByZXR1cm4ge1xuICAgIGlkOiB1c2VyLmlkLFxuICAgIHR5cGU6ICd1c2VyJyxcbiAgICBwcmltYXJ5OiBtZUxhYmVsLFxuICAgIHByaW1hcnlIaWdobGlnaHQ6IGhpZ2hsaWdodFJhbmdlKG1lTGFiZWwsIHNlYXJjaFZhbHVlKSxcbiAgICByYXc6IHtcbiAgICAgIGlkOiB1c2VyLmlkLFxuICAgICAgbmFtZTogZnVsbE5hbWUgfHwgU3RyaW5nKHVzZXIuaWQpLFxuICAgICAgcGljdHVyZTogdXNlci5waWN0dXJlIHx8IG51bGwsXG4gICAgICBwb3NpdGlvbk5hbWU6IHBvc2l0aW9uTGluZSxcbiAgICAgIGVtYWlsLFxuICAgIH0sXG4gIH1cbn1cblxuY29uc3QgbWFwUmVjZW50VGFza1RvSXRlbSA9IChcbiAgdGFzazogUmVjZW50VGFza0l0ZW0sXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmcsXG4gIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyA9IHRydWVcbik6IENvbnRleHRNZW50aW9uSXRlbSA9PiB7XG4gIGNvbnN0IHByaW1hcnkgPSAodGFzay50aXRsZSAmJiB0YXNrLnRpdGxlLnRyaW0oKSkgfHwgU3RyaW5nKHRhc2suaWQpXG4gIGNvbnN0IHByb2plY3ROYW1lID0gc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93ID8gKHRhc2sucHJvamVjdE5hbWUgPz8gbnVsbCkgOiBudWxsXG4gIHJldHVybiB7XG4gICAgaWQ6IHRhc2suaWQsXG4gICAgdHlwZTogJ3Rhc2snLFxuICAgIHByaW1hcnksXG4gICAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UocHJpbWFyeSwgc2VhcmNoVmFsdWUpLFxuICAgIGJyZWFkY3J1bWI6IHByb2plY3ROYW1lID8geyBwYXJlbnQ6IHByb2plY3ROYW1lIH0gOiB1bmRlZmluZWQsXG4gICAgcmF3OiB7XG4gICAgICBpZDogdGFzay5pZCxcbiAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICBwcm9qZWN0TmFtZSxcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVRhc2tGYW1pbHlSZWNvcmQgPSAocmVjb3JkOiBUYXNrRmFtaWx5UmVjb3JkKTogUmVjZW50VGFza0l0ZW0gfCBudWxsID0+IHtcbiAgY29uc3QgeyBfaWQ6IHRhc2tGYW1pbHlJZCB9ID0gcmVjb3JkXG4gIGNvbnN0IGlkID0gdGFza0ZhbWlseUlkXG4gIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBudWxsIHx8IFN0cmluZyhpZCkgPT09ICcnKSByZXR1cm4gbnVsbFxuICBjb25zdCB0aXRsZSA9IChyZWNvcmQudGl0bGUgPz8gJycpLnRyaW0oKSB8fCBTdHJpbmcoaWQpXG4gIGNvbnN0IHByb2plY3ROYW1lID0gZmlyc3REZWZpbmVkKHJlY29yZC5wcm9qZWN0Py5uYW1lLCByZWNvcmQuZmF0aGVyPy50aXRsZSkgPz8gbnVsbFxuICBjb25zdCBoYXNGYXRoZXIgPSAhIWZpcnN0RGVmaW5lZChyZWNvcmQudGFza0ZhdGhlciwgcmVjb3JkLmZhdGhlcj8uaWQpXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgdGl0bGUsXG4gICAgdHlwZTogaGFzRmF0aGVyID8gJ3N1YnRhc2snIDogJ3Rhc2snLFxuICAgIHByb2plY3ROYW1lLFxuICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVByb2plY3RzRmFsbGJhY2tSZWNvcmQgPSAocmVjb3JkOiBGYWxsYmFja1Byb2plY3RSZWNvcmQpOiBSYXdTZWFyY2hSZXN1bHQgfCBudWxsID0+IHtcbiAgY29uc3QgeyBpZCB9ID0gcmVjb3JkXG4gIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBudWxsIHx8IFN0cmluZyhpZCkgPT09ICcnKSByZXR1cm4gbnVsbFxuICBjb25zdCB0aXRsZSA9IHJlY29yZC5uYW1lID8/ICcnXG4gIGNvbnN0IGNsaWVudElkID0gZmlyc3REZWZpbmVkKHJlY29yZC5jbGllbnRJZCwgcmVjb3JkLmNsaWVudD8uaWQpID8/IG51bGxcbiAgY29uc3QgY2xpZW50TmFtZSA9IHJlY29yZC5jbGllbnQ/Lm5hbWUgPz8gbnVsbFxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIHRpdGxlLFxuICAgIHR5cGU6ICdwcm9qZWN0JyxcbiAgICBjbGllbnRJZCxcbiAgICBjbGllbnROYW1lLFxuICB9XG59XG5cbmNvbnN0IG1hcFNlYXJjaFRvSXRlbSA9IChcbiAgcjogUmF3U2VhcmNoUmVzdWx0LFxuICB0eXBlOiBDb250ZXh0RW50aXR5VHlwZSxcbiAgc2VhcmNoVmFsdWU6IHN0cmluZyxcbiAgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93ID0gdHJ1ZVxuKTogQ29udGV4dE1lbnRpb25JdGVtID0+IHtcbiAgY29uc3QgcHJpbWFyeSA9IHIudGl0bGUgfHwgci5wcm9qZWN0TmFtZSB8fCAnJ1xuICBsZXQgcGFyZW50OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gIGlmICh0eXBlID09PSAncHJvamVjdCcpIHBhcmVudCA9IHIuY2xpZW50TmFtZVxuICBlbHNlIGlmICh0eXBlID09PSAndGFzaycpIHBhcmVudCA9IHVuZGVmaW5lZFxuICBlbHNlIHBhcmVudCA9IHIucHJvamVjdE5hbWUgPz8gci5jbGllbnROYW1lXG5cbiAgY29uc3QgZmF0aGVyID0gdHlwZSA9PT0gJ3Rhc2snID8gci5mYXRoZXIgOiBudWxsXG4gIGNvbnN0IGhhc0ZhdGhlciA9IHR5cGUgPT09ICd0YXNrJyAmJiBmYXRoZXIgIT0gbnVsbCAmJiBmYXRoZXIuaWQgIT0gbnVsbCAmJiBTdHJpbmcoZmF0aGVyLmlkKS5sZW5ndGggPiAwXG5cbiAgY29uc3QgdGFza1Byb2plY3ROYW1lID0gdHlwZSA9PT0gJ3Rhc2snICYmICFzaG93UHJvamVjdE5hbWVJblRhc2tSb3cgPyBudWxsIDogKHIucHJvamVjdE5hbWUgPz8gbnVsbClcblxuICByZXR1cm4ge1xuICAgIGlkOiByLmlkLFxuICAgIHR5cGUsXG4gICAgcHJpbWFyeSxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgYnJlYWRjcnVtYjogcGFyZW50ID8geyBwYXJlbnQgfSA6IHVuZGVmaW5lZCxcbiAgICByYXc6IHtcbiAgICAgIGlkOiByLmlkLFxuICAgICAgbmFtZTogcHJpbWFyeSxcbiAgICAgIGNsaWVudElkOiByLmNsaWVudElkID8/IG51bGwsXG4gICAgICBjbGllbnROYW1lOiByLmNsaWVudE5hbWUgPz8gbnVsbCxcbiAgICAgIHByb2plY3ROYW1lOiB0YXNrUHJvamVjdE5hbWUsXG4gICAgICBmZWVJZDogci5mZWVJZCA/PyBudWxsLFxuICAgICAgZmF0aGVySWQ6IGhhc0ZhdGhlciA/IGZhdGhlci5pZCA6IG51bGwsXG4gICAgICBmYXRoZXJUaXRsZTogaGFzRmF0aGVyID8gZmF0aGVyLnRpdGxlPy50cmltKCkgfHwgbnVsbCA6IG51bGwsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBmb3JtYXRNY3BQcmltYXJ5TGFiZWwgPSAoc2x1Zzogc3RyaW5nKTogc3RyaW5nID0+XG4gIHNsdWcucmVwbGFjZSgvXy9nLCAnICcpLnJlcGxhY2UoL1xcYlxcdy9nLCBjaGFyID0+IGNoYXIudG9VcHBlckNhc2UoKSlcblxuY29uc3QgU0tJTExTX1BBR0VfTElNSVQgPSAxMDBcblxuY29uc3QgZmV0Y2hBbGxTa2lsbFBhZ2VzID0gYXN5bmMgKG9mZnNldDogbnVtYmVyLCBhY2N1bXVsYXRlZDogU2tpbGxbXSk6IFByb21pc2U8U2tpbGxbXT4gPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7IHBhdGg6IGBza2lsbHM/bGltaXQ9JHtTS0lMTFNfUEFHRV9MSU1JVH0mb2Zmc2V0PSR7b2Zmc2V0fWAsIG1ldGhvZDogJ0dFVCcgfSlcbiAgY29uc3QgZGF0YTogeyBkYXRhPzogU2tpbGxbXTsgaGFzX21vcmU/OiBib29sZWFuOyBuZXh0X29mZnNldD86IG51bWJlciB8IG51bGwgfSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICBjb25zdCBwYWdlOiBTa2lsbFtdID0gZGF0YS5kYXRhID8/IFtdXG4gIGNvbnN0IGFsbCA9IFsuLi5hY2N1bXVsYXRlZCwgLi4ucGFnZV1cbiAgaWYgKGRhdGEuaGFzX21vcmUgJiYgcGFnZS5sZW5ndGggPj0gU0tJTExTX1BBR0VfTElNSVQpIHtcbiAgICByZXR1cm4gZmV0Y2hBbGxTa2lsbFBhZ2VzKGRhdGEubmV4dF9vZmZzZXQgPz8gb2Zmc2V0ICsgU0tJTExTX1BBR0VfTElNSVQsIGFsbClcbiAgfVxuICByZXR1cm4gYWxsXG59XG5cbmNvbnN0IG1hcFNraWxsc1RvSXRlbXMgPSAoc2tpbGxzOiBTa2lsbFtdLCBzZWFyY2hWYWx1ZTogc3RyaW5nKTogQ29udGV4dE1lbnRpb25JdGVtW10gPT4ge1xuICBjb25zdCBxID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgY29uc3QgZmlsdGVyZWQgPSBxID8gc2tpbGxzLmZpbHRlcihzID0+IHMubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpKSA6IHNraWxsc1xuICByZXR1cm4gZmlsdGVyZWQubWFwKHNraWxsID0+ICh7XG4gICAgaWQ6IHNraWxsLmlkLFxuICAgIHR5cGU6ICdza2lsbCcgYXMgY29uc3QsXG4gICAgcHJpbWFyeTogc2tpbGwubmFtZSxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShza2lsbC5uYW1lLCBzZWFyY2hWYWx1ZSksXG4gICAgcmF3OiB7XG4gICAgICBpZDogc2tpbGwuaWQsXG4gICAgICBuYW1lOiBza2lsbC5uYW1lLFxuICAgIH0sXG4gIH0pKVxufVxuXG5jb25zdCBtYXBNY3BTbHVnc1RvSXRlbXMgPSAoc2x1Z3M6IHN0cmluZ1tdLCBzZWFyY2hWYWx1ZTogc3RyaW5nKTogQ29udGV4dE1lbnRpb25JdGVtW10gPT4ge1xuICBjb25zdCBxID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgbGV0IGZpbHRlcmVkID0gc2x1Z3NcbiAgaWYgKHEpIHtcbiAgICBmaWx0ZXJlZCA9IHNsdWdzLmZpbHRlcihzID0+IHtcbiAgICAgIGNvbnN0IHByaW1hcnkgPSBmb3JtYXRNY3BQcmltYXJ5TGFiZWwocylcbiAgICAgIHJldHVybiBzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSkgfHwgcHJpbWFyeS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpXG4gICAgfSlcbiAgfVxuICByZXR1cm4gZmlsdGVyZWQubWFwKHNsdWcgPT4ge1xuICAgIGNvbnN0IHByaW1hcnkgPSBmb3JtYXRNY3BQcmltYXJ5TGFiZWwoc2x1ZylcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNsdWcsXG4gICAgICB0eXBlOiAnbWNwJyBhcyBjb25zdCxcbiAgICAgIHByaW1hcnksXG4gICAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgICByYXc6IHtcbiAgICAgICAgaWQ6IHNsdWcsXG4gICAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICB9LFxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUVudGl0eVNlYXJjaCA9ICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSwgc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSkgPT4ge1xuICBjb25zdCBjb3JVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIC8qKiBFdml0YSBhcGxpY2FyIHJlc3VsdGFkb3MgZGUgdW4gYGZldGNoUmVjZW50YCB2aWVqbyBjdWFuZG8gZWwgdXN1YXJpbyB5YSBjYW1iacOzIGRlIHRhYiAocmFjZSBhc3luYykuICovXG4gIGNvbnN0IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoMClcbiAgY29uc3QgW3NlYXJjaFZhbHVlLCBzZXRTZWFyY2hWYWx1ZV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgZGVib3VuY2VkU2VhcmNoVmFsdWUgPSB1c2VEZWJvdW5jZShzZWFyY2hWYWx1ZSwgU0VBUkNIX1FVRVJZX0RFQk9VTkNFX01TKVxuICBjb25zdCBbY2FjaGVkU2tpbGxzLCBzZXRDYWNoZWRTa2lsbHNdID0gdXNlU3RhdGU8U2tpbGxbXT4oW10pXG5cbiAgY29uc3QgW2l0ZW1zLCBzZXRJdGVtc10gPSB1c2VTdGF0ZTxDb250ZXh0TWVudGlvbkl0ZW1bXT4oW10pXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaGlkZVJlY2VudHNMYWJlbCwgc2V0SGlkZVJlY2VudHNMYWJlbF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hhc01vcmUsIHNldEhhc01vcmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc0xvYWRpbmdNb3JlLCBzZXRJc0xvYWRpbmdNb3JlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY3VycmVudFBhZ2UsIHNldEN1cnJlbnRQYWdlXSA9IHVzZVN0YXRlKDEpXG4gIGNvbnN0IFthY3RpdmVQYWdpbmF0aW9uU291cmNlLCBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlXSA9IHVzZVN0YXRlPFBhZ2luYXRpb25Tb3VyY2U+KCdub25lJylcblxuICBjb25zdCBtY3BTbHVnc0tleSA9IChzY29wZT8ubWNwU2x1Z3MgPz8gW10pLmpvaW4oJ3wnKVxuICBjb25zdCBza2lsbHNLZXkgPSAoc2NvcGU/LnNraWxscyA/PyBbXSkubWFwKHMgPT4gcy5pZCkuam9pbignfCcpXG4gIGNvbnN0IHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyA9IHNjb3BlPy5hZ2VudEVudGl0eSAhPT0gJ3Byb2plY3QnXG5cbiAgLy8gRXN0YWJpbGl6YW1vcyBlbCBzY29wZSBwYXJhIG5vIGRpc3BhcmFyIGZldGNocyBwb3IgY2FtYmlvcyBkZSBpZGVudGlkYWQgZGUgb2JqZXRvLlxuICBjb25zdCBzdGFibGVTY29wZSA9IHVzZU1lbW88RW50aXR5U2VhcmNoU2NvcGU+KFxuICAgICgpID0+ICh7XG4gICAgICBjbGllbnRJZDogc2NvcGU/LmNsaWVudElkID8/IG51bGwsXG4gICAgICBwcm9qZWN0SWQ6IHNjb3BlPy5wcm9qZWN0SWQgPz8gbnVsbCxcbiAgICAgIG1jcFNsdWdzOiBzY29wZT8ubWNwU2x1Z3MgPz8gW10sXG4gICAgICBza2lsbHM6IHNjb3BlPy5za2lsbHMsXG4gICAgICBhZ2VudEVudGl0eTogc2NvcGU/LmFnZW50RW50aXR5ID8/IG51bGwsXG4gICAgfSksXG4gICAgW3Njb3BlPy5jbGllbnRJZCwgc2NvcGU/LnByb2plY3RJZCwgbWNwU2x1Z3NLZXksIHNraWxsc0tleSwgc2NvcGU/LmFnZW50RW50aXR5XVxuICApXG5cbiAgLy8gLS0tIFNlYXJjaDogcHJvamVjdCB8IHRhc2sgKEdyYXBoUUw6IHNlYXJjaCkgLS0tXG4gIGNvbnN0IFtmZXRjaFNlYXJjaEVudGl0aWVzLCB7IGRhdGE6IHNlYXJjaERhdGEsIGxvYWRpbmc6IHNlYXJjaExvYWRpbmcsIGVycm9yOiBzZWFyY2hFcnJvciB9XSA9XG4gICAgdXNlTGF6eVF1ZXJ5PFNlYXJjaEVudGl0aWVzRGF0YT4oU0VBUkNIX0VOVElUSUVTLCB7XG4gICAgICB2YXJpYWJsZXM6IHsgbGltaXQ6IDIwIH0sXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgfSlcblxuICAvLyAtLS0gU2VhcmNoOiBjbGllbnQgKEdyYXBoUUwpIC0tLVxuICBjb25zdCBbZmV0Y2hTZWFyY2hDbGllbnRzLCB7IGRhdGE6IGNsaWVudHNEYXRhLCBsb2FkaW5nOiBjbGllbnRzTG9hZGluZywgZXJyb3I6IGNsaWVudHNFcnJvciB9XSA9XG4gICAgdXNlTGF6eVF1ZXJ5PFNlYXJjaENsaWVudHNEYXRhPihTRUFSQ0hfQ0xJRU5UUywge1xuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgIH0pXG5cbiAgLy8gLS0tIFNlYXJjaDogdXNlciAoR3JhcGhRTDogdXNlcnMpIC0tLVxuICBjb25zdCBbZmV0Y2hVc2Vyc0RpcmVjdG9yeSwgeyBkYXRhOiB1c2Vyc0RhdGEsIGxvYWRpbmc6IHVzZXJzTG9hZGluZywgZXJyb3I6IHVzZXJzRXJyb3IgfV0gPVxuICAgIHVzZUxhenlRdWVyeTxVc2Vyc0RpcmVjdG9yeURhdGE+KFVTRVJTX0RJUkVDVE9SWSwge1xuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgIH0pXG5cbiAgY29uc3Qgc3luY1VzZXJzUGFnaW5hdGlvbiA9IHVzZUNhbGxiYWNrKChwYXlsb2FkPzogVXNlcnNEaXJlY3RvcnlEYXRhIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHBhZ2UgPSBub3JtYWxpemVQb3NpdGl2ZUludChwYXlsb2FkPy51c2Vycz8ucGFnZSwgMSlcbiAgICBjb25zdCBsYXN0UGFnZSA9IG5vcm1hbGl6ZVBvc2l0aXZlSW50KHBheWxvYWQ/LnVzZXJzPy5sYXN0UGFnZSwgcGFnZSlcbiAgICBzZXRDdXJyZW50UGFnZShwYWdlKVxuICAgIHNldEhhc01vcmUocGFnZSA8IGxhc3RQYWdlKVxuICB9LCBbXSlcblxuICBjb25zdCBzeW5jQ2xpZW50c1BhZ2luYXRpb24gPSB1c2VDYWxsYmFjaygocGF5bG9hZD86IFNlYXJjaENsaWVudHNEYXRhIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHBhZ2UgPSBub3JtYWxpemVQb3NpdGl2ZUludChwYXlsb2FkPy5jbGllbnRzPy5wYWdlLCAxKVxuICAgIGNvbnN0IGxhc3RQYWdlID0gbm9ybWFsaXplUG9zaXRpdmVJbnQocGF5bG9hZD8uY2xpZW50cz8ubGFzdFBhZ2UsIHBhZ2UpXG4gICAgc2V0Q3VycmVudFBhZ2UocGFnZSlcbiAgICBzZXRIYXNNb3JlKHBhZ2UgPCBsYXN0UGFnZSlcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3luY1Rhc2tGYWxsYmFja1BhZ2luYXRpb24gPSB1c2VDYWxsYmFjaygocGF5bG9hZD86IFRhc2tGYW1pbHlEYXRhIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHJhd1BhZ2UgPSBOdW1iZXIocGF5bG9hZD8udGFza0ZhbWlseT8ucGFnZSlcbiAgICAvLyB0YXNrRmFtaWx5IHVzYSBww6FnaW5hcyAwLWJhc2VkOyBjb252ZXJ0aW1vcyBhIDEtYmFzZWQgcGFyYSBjb25zaXN0ZW5jaWEgY29uIGVsIHJlc3RvXG4gICAgY29uc3QgcGFnZSA9IE51bWJlci5pc0Zpbml0ZShyYXdQYWdlKSAmJiByYXdQYWdlID49IDAgPyBNYXRoLmZsb29yKHJhd1BhZ2UpICsgMSA6IDFcbiAgICBjb25zdCBsYXN0UGFnZSA9IG5vcm1hbGl6ZVBvc2l0aXZlSW50KHBheWxvYWQ/LnRhc2tGYW1pbHk/Lmxhc3RQYWdlLCBwYWdlKVxuICAgIHNldEN1cnJlbnRQYWdlKHBhZ2UpXG4gICAgc2V0SGFzTW9yZShwYWdlIDwgbGFzdFBhZ2UpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN5bmNQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uID0gdXNlQ2FsbGJhY2soKHBheWxvYWQ/OiBQcm9qZWN0c0ZhbGxiYWNrRGF0YSB8IG51bGwpID0+IHtcbiAgICBjb25zdCBwYWdlID0gbm9ybWFsaXplUG9zaXRpdmVJbnQocGF5bG9hZD8ucHJvamVjdHM/LnBhZ2UsIDEpXG4gICAgY29uc3QgbGFzdFBhZ2UgPSBub3JtYWxpemVQb3NpdGl2ZUludChwYXlsb2FkPy5wcm9qZWN0cz8ubGFzdFBhZ2UsIHBhZ2UpXG4gICAgc2V0Q3VycmVudFBhZ2UocGFnZSlcbiAgICBzZXRIYXNNb3JlKHBhZ2UgPCBsYXN0UGFnZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgW2ZldGNoVGFza0ZhbWlseUZhbGxiYWNrXSA9IHVzZUxhenlRdWVyeTxUYXNrRmFtaWx5RGF0YT4oVEFTS19GQU1JTFlfRkFMTEJBQ0ssIHtcbiAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gIH0pXG5cbiAgY29uc3QgW2ZldGNoUHJvamVjdHNGYWxsYmFja10gPSB1c2VMYXp5UXVlcnk8UHJvamVjdHNGYWxsYmFja0RhdGE+KFBST0pFQ1RTX0ZBTExCQUNLLCB7XG4gICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICB9KVxuXG4gIGNvbnN0IGZldGNoUmVjZW50ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCArPSAxXG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudFxuXG4gICAgaWYgKHR5cGUgPT09ICdtY3AnKSB7XG4gICAgICBjb25zdCBzbHVncyA9IHN0YWJsZVNjb3BlLm1jcFNsdWdzID8/IFtdXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICBzZXRJdGVtcyhtYXBNY3BTbHVnc1RvSXRlbXMoc2x1Z3MsICcnKSlcbiAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3NraWxsJykge1xuICAgICAgLy8gU2kgZWwgc2NvcGUgeWEgcHJvdmVlIHNraWxscyAoZGV2L21vY2spLCB1c2FybGFzIGRpcmVjdGFtZW50ZSBzaW4gZmV0Y2guXG4gICAgICBpZiAoc3RhYmxlU2NvcGUuc2tpbGxzKSB7XG4gICAgICAgIHNldENhY2hlZFNraWxscyhzdGFibGVTY29wZS5za2lsbHMpXG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgICBzZXRJdGVtcyhtYXBTa2lsbHNUb0l0ZW1zKHN0YWJsZVNjb3BlLnNraWxscywgJycpKVxuICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGFsbFNraWxscyA9IGF3YWl0IGZldGNoQWxsU2tpbGxQYWdlcygwLCBbXSlcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIHNldENhY2hlZFNraWxscyhhbGxTa2lsbHMpXG4gICAgICAgIHNldEl0ZW1zKG1hcFNraWxsc1RvSXRlbXMoYWxsU2tpbGxzLCAnJykpXG4gICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICAgIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UoJ25vbmUnKVxuICAgICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgICBzZXRJdGVtcyhbXSlcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChnZW5lcmF0aW9uID09PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlID09PSAnY2xpZW50Jykge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVjZW50Q2xpZW50cygpXG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBjb25zdCBtYXBwZWQgPSAoZGF0YSA/PyBbXSkubWFwKGMgPT4gbWFwQ2xpZW50VG9JdGVtKGMsICcnKSlcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIHNldEl0ZW1zKG1hcHBlZClcbiAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgnbm9uZScpXG4gICAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwcm9qZWN0Jykge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVjZW50UHJvamVjdHMoc3RhYmxlU2NvcGUuY2xpZW50SWQgPyB7IGNsaWVudElkOiBzdGFibGVTY29wZS5jbGllbnRJZCB9IDogdW5kZWZpbmVkKVxuICAgICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgbGV0IG1hcHBlZCA9IChBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtdKS5tYXAocCA9PlxuICAgICAgICAgIG1hcFNlYXJjaFRvSXRlbShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgICAgIHRpdGxlOiBwLnRpdGxlLFxuICAgICAgICAgICAgICB0eXBlOiAncHJvamVjdCcsXG4gICAgICAgICAgICAgIGNsaWVudElkOiBwLmNsaWVudElkLFxuICAgICAgICAgICAgICBmZWVJZDogcC5mZWVJZCxcbiAgICAgICAgICAgICAgY2xpZW50TmFtZTogcC5jbGllbnROYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdwcm9qZWN0JyxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgYXJndW1lbnRzRmlsdGVyID1cbiAgICAgICAgICAgIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSBudWxsICYmIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09ICcnXG4gICAgICAgICAgICAgID8geyBjbGllbnRfaWQ6IFtTdHJpbmcoc3RhYmxlU2NvcGUuY2xpZW50SWQpXSB9XG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgY29uc3QgeyBkYXRhOiBmYWxsYmFja0RhdGEgfSA9IGF3YWl0IGZldGNoUHJvamVjdHNGYWxsYmFjayh7XG4gICAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgLi4uKGFyZ3VtZW50c0ZpbHRlciA/IHsgYXJndW1lbnRzOiBhcmd1bWVudHNGaWx0ZXIgfSA6IHt9KSxcbiAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgcGVyUGFnZTogMjAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgICAgY29uc3QgZmFsbGJhY2tNYXBwZWQgPSAoZmFsbGJhY2tEYXRhPy5wcm9qZWN0cz8uZGF0YSA/PyBbXSlcbiAgICAgICAgICAgIC5tYXAobm9ybWFsaXplUHJvamVjdHNGYWxsYmFja1JlY29yZClcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIFJhd1NlYXJjaFJlc3VsdCA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAgICAgLm1hcChpdGVtID0+IG1hcFNlYXJjaFRvSXRlbShpdGVtLCAncHJvamVjdCcsICcnKSlcbiAgICAgICAgICBtYXBwZWQgPSBmYWxsYmFja01hcHBlZFxuICAgICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsbGJhY2tNYXBwZWQubGVuZ3RoID4gMClcbiAgICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdwcm9qZWN0LWZhbGxiYWNrJylcbiAgICAgICAgICBzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbihmYWxsYmFja0RhdGEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBzZXRJdGVtcyhtYXBwZWQpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0YXNrJykge1xuICAgICAgICBsZXQgcmVjZW50VGFza0ZpbHRlcnM6IHsgcHJvamVjdElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbDsgY2xpZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIH0gfCB1bmRlZmluZWRcbiAgICAgICAgaWYgKHN0YWJsZVNjb3BlLmFnZW50RW50aXR5ID09PSAncHJvamVjdCcpIHtcbiAgICAgICAgICByZWNlbnRUYXNrRmlsdGVycyA9IHsgcHJvamVjdElkOiBzdGFibGVTY29wZS5wcm9qZWN0SWQgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YWJsZVNjb3BlLmFnZW50RW50aXR5ID09PSAnY2xpZW50Jykge1xuICAgICAgICAgIHJlY2VudFRhc2tGaWx0ZXJzID0geyBjbGllbnRJZDogc3RhYmxlU2NvcGUuY2xpZW50SWQgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZWNlbnRUYXNrcyhyZWNlbnRUYXNrRmlsdGVycylcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGxldCB0YXNrSXRlbXMgPSAoZGF0YSA/PyBbXSkubWFwKHRhc2sgPT4gbWFwUmVjZW50VGFza1RvSXRlbSh0YXNrLCAnJywgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93KSlcbiAgICAgICAgaWYgKHRhc2tJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9XG4gICAgICAgICAgaWYgKHN0YWJsZVNjb3BlLnByb2plY3RJZCAhPT0gbnVsbCAmJiBzdGFibGVTY29wZS5wcm9qZWN0SWQgIT09IHVuZGVmaW5lZCAmJiBzdGFibGVTY29wZS5wcm9qZWN0SWQgIT09ICcnKSB7XG4gICAgICAgICAgICBmaWx0ZXIucHJvamVjdElkcyA9IFtTdHJpbmcoc3RhYmxlU2NvcGUucHJvamVjdElkKV1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSBudWxsICYmIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09ICcnKSB7XG4gICAgICAgICAgICBmaWx0ZXIuY2xpZW50SWRzID0gW1N0cmluZyhzdGFibGVTY29wZS5jbGllbnRJZCldXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgZGF0YTogZmFsbGJhY2tEYXRhIH0gPSBhd2FpdCBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayh7XG4gICAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgZmlsdGVyOiB7IGFyY2hpdmVkOiBmYWxzZSwgLi4uZmlsdGVyIH0sXG4gICAgICAgICAgICAgIHBhZ2luYXRpb246IHsgb2Zmc2V0OiAwLCBzaXplOiAyMCB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICAgIHRhc2tJdGVtcyA9IChmYWxsYmFja0RhdGE/LnRhc2tGYW1pbHk/LmRhdGEgPz8gW10pXG4gICAgICAgICAgICAubWFwKG5vcm1hbGl6ZVRhc2tGYW1pbHlSZWNvcmQpXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSZWNlbnRUYXNrSXRlbSA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAgICAgLm1hcCh0YXNrID0+IG1hcFJlY2VudFRhc2tUb0l0ZW0odGFzaywgJycsIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdykpXG4gICAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbCh0YXNrSXRlbXMubGVuZ3RoID4gMClcbiAgICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCd0YXNrLWZhbGxiYWNrJylcbiAgICAgICAgICBzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbihmYWxsYmFja0RhdGEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBzZXRJdGVtcyh0YXNrSXRlbXMpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1c2VyJykge1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGZldGNoVXNlcnNEaXJlY3Rvcnkoe1xuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgZmlsdGVyczogYnVpbGRVc2Vyc0RpcmVjdG9yeUZpbHRlcnMoJycpLFxuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgY29uc3QgbWFwcGVkID0gKGRhdGE/LnVzZXJzPy5kYXRhID8/IFtdKS5tYXAodSA9PiBtYXBVc2VyVG9JdGVtKHUsICcnKSlcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG1lSXRlbSA9IG1hcENvclVzZXJUb1VzZXJJdGVtKGNvclVzZXIsICcnLCB0KCdjb250ZXh0TWVudGlvbi5tZScpKVxuICAgICAgICBjb25zdCB3aXRob3V0TWUgPSBtYXBwZWQuZmlsdGVyKGl0ZW0gPT4gU3RyaW5nKGl0ZW0uaWQpICE9PSBTdHJpbmcobWVJdGVtLmlkKSlcbiAgICAgICAgc2V0SXRlbXMoW21lSXRlbSwgLi4ud2l0aG91dE1lXSlcbiAgICAgICAgc3luY1VzZXJzUGFnaW5hdGlvbihkYXRhKVxuICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCd1c2VycycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgc2V0SXRlbXMoW10pXG4gICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICAgIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UoJ25vbmUnKVxuICAgICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgICAgICBzZXRDdXJyZW50UGFnZSgxKVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgc2V0SXRlbXMoW10pXG4gICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoZ2VuZXJhdGlvbiA9PT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9LCBbXG4gICAgdHlwZSxcbiAgICBzdGFibGVTY29wZSxcbiAgICBmZXRjaFVzZXJzRGlyZWN0b3J5LFxuICAgIGZldGNoVGFza0ZhbWlseUZhbGxiYWNrLFxuICAgIGZldGNoUHJvamVjdHNGYWxsYmFjayxcbiAgICBzeW5jVXNlcnNQYWdpbmF0aW9uLFxuICAgIHN5bmNUYXNrRmFsbGJhY2tQYWdpbmF0aW9uLFxuICAgIHN5bmNQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uLFxuICAgIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyxcbiAgICBjb3JVc2VyLFxuICAgIHQsXG4gIF0pXG5cbiAgLy8gRGlzcGFyYXIgc2VhcmNoIGFsIGNhbWJpYXIgZGVib3VuY2VkIHZhbHVlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcSA9IGRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKVxuXG4gICAgaWYgKHR5cGUgPT09ICdtY3AnKSB7XG4gICAgICBjb25zdCBzbHVncyA9IHN0YWJsZVNjb3BlLm1jcFNsdWdzID8/IFtdXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICBzZXRJdGVtcyhtYXBNY3BTbHVnc1RvSXRlbXMoc2x1Z3MsIHEpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdza2lsbCcpIHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIHNldEl0ZW1zKG1hcFNraWxsc1RvSXRlbXMoY2FjaGVkU2tpbGxzLCBxKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcSkgcmV0dXJuXG5cbiAgICBpZiAodHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIGZldGNoU2VhcmNoQ2xpZW50cyh7XG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGZpbHRlcjogeyBuYW1lOiBxIH0sXG4gICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICBwZXJQYWdlOiAyMCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdjbGllbnRzLXNlYXJjaCcpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndXNlcicpIHtcbiAgICAgIGZldGNoVXNlcnNEaXJlY3Rvcnkoe1xuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBmaWx0ZXJzOiBidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyhxKSxcbiAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UoJ3VzZXJzJylcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlsdGVycyA9IGJ1aWxkRmlsdGVyc0ZvclR5cGUodHlwZSlcbiAgICAgIGNvbnN0IGV4dHJhID0gYnVpbGRTZWFyY2hFbnRpdGllc0V4dHJhKHR5cGUsIHN0YWJsZVNjb3BlKVxuICAgICAgZmV0Y2hTZWFyY2hFbnRpdGllcyh7XG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIHEsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAuLi4oZXh0cmEgIT09IHVuZGVmaW5lZCA/IHsgZXh0cmEgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgfVxuICB9LCBbXG4gICAgZGVib3VuY2VkU2VhcmNoVmFsdWUsXG4gICAgdHlwZSxcbiAgICBzdGFibGVTY29wZSxcbiAgICBmZXRjaFNlYXJjaEVudGl0aWVzLFxuICAgIGZldGNoU2VhcmNoQ2xpZW50cyxcbiAgICBmZXRjaFVzZXJzRGlyZWN0b3J5LFxuICAgIGNhY2hlZFNraWxscyxcbiAgXSlcblxuICAvLyBTaW5jcm9uaXphciByZXN1bHRhZG9zIGRlIHNlYXJjaFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlID09PSAnbWNwJykgcmV0dXJuXG4gICAgaWYgKHR5cGUgPT09ICdza2lsbCcpIHJldHVyblxuXG4gICAgY29uc3QgcSA9IGRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKVxuICAgIGlmICghcSkgcmV0dXJuXG4gICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcblxuICAgIGlmICh0eXBlID09PSAnY2xpZW50Jykge1xuICAgICAgc2V0TG9hZGluZyhjbGllbnRzTG9hZGluZylcbiAgICAgIGlmIChjbGllbnRzRXJyb3IpIHtcbiAgICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoY2xpZW50c0RhdGE/LmNsaWVudHM/LmRhdGEpIHtcbiAgICAgICAgc2V0SXRlbXMoY2xpZW50c0RhdGEuY2xpZW50cy5kYXRhLm1hcChjID0+IG1hcENsaWVudFRvSXRlbShjLCBxKSkpXG4gICAgICAgIHN5bmNDbGllbnRzUGFnaW5hdGlvbihjbGllbnRzRGF0YSlcbiAgICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndXNlcicpIHtcbiAgICAgIHNldExvYWRpbmcodXNlcnNMb2FkaW5nKVxuICAgICAgaWYgKHVzZXJzRXJyb3IpIHtcbiAgICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAodXNlcnNEYXRhPy51c2Vycz8uZGF0YSkge1xuICAgICAgICBjb25zdCBtYXBwZWQgPSB1c2Vyc0RhdGEudXNlcnMuZGF0YS5tYXAodSA9PiBtYXBVc2VyVG9JdGVtKHUsIHEpKVxuICAgICAgICBjb25zdCBtZUlkID0gU3RyaW5nKGNvclVzZXIuaWQpXG4gICAgICAgIGNvbnN0IGhhc01lSW5SZXN1bHRzID0gbWFwcGVkLnNvbWUoaXRlbSA9PiBTdHJpbmcoaXRlbS5pZCkgPT09IG1lSWQpXG4gICAgICAgIGNvbnN0IHdpdGhvdXRNZSA9IG1hcHBlZC5maWx0ZXIoaXRlbSA9PiBTdHJpbmcoaXRlbS5pZCkgIT09IG1lSWQpXG4gICAgICAgIGNvbnN0IG1lSXRlbSA9IG1hcENvclVzZXJUb1VzZXJJdGVtKGNvclVzZXIsIHEsIHQoJ2NvbnRleHRNZW50aW9uLm1lJykpXG4gICAgICAgIHNldEl0ZW1zKGhhc01lSW5SZXN1bHRzID8gW21lSXRlbSwgLi4ud2l0aG91dE1lXSA6IG1hcHBlZClcbiAgICAgICAgc3luY1VzZXJzUGFnaW5hdGlvbih1c2Vyc0RhdGEpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRMb2FkaW5nKHNlYXJjaExvYWRpbmcpXG4gICAgICBpZiAoc2VhcmNoRXJyb3IpIHtcbiAgICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoc2VhcmNoRGF0YT8uc2VhcmNoKSB7XG4gICAgICAgIHNldEl0ZW1zKHNlYXJjaERhdGEuc2VhcmNoLm1hcChyID0+IG1hcFNlYXJjaFRvSXRlbShyLCB0eXBlLCBxLCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cpKSlcbiAgICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9LCBbXG4gICAgc2VhcmNoRGF0YSxcbiAgICBjbGllbnRzRGF0YSxcbiAgICB1c2Vyc0RhdGEsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBjbGllbnRzTG9hZGluZyxcbiAgICB1c2Vyc0xvYWRpbmcsXG4gICAgc2VhcmNoRXJyb3IsXG4gICAgY2xpZW50c0Vycm9yLFxuICAgIHVzZXJzRXJyb3IsXG4gICAgZGVib3VuY2VkU2VhcmNoVmFsdWUsXG4gICAgdHlwZSxcbiAgICBzeW5jQ2xpZW50c1BhZ2luYXRpb24sXG4gICAgc3luY1VzZXJzUGFnaW5hdGlvbixcbiAgICBzaG93UHJvamVjdE5hbWVJblRhc2tSb3csXG4gICAgY29yVXNlcixcbiAgICB0LFxuICBdKVxuXG4gIGNvbnN0IGxvYWRNb3JlID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmdNb3JlIHx8ICFoYXNNb3JlIHx8IGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNhZmVDdXJyZW50UGFnZSA9IG5vcm1hbGl6ZVBvc2l0aXZlSW50KGN1cnJlbnRQYWdlLCAxKVxuICAgIGNvbnN0IG5leHRQYWdlID0gc2FmZUN1cnJlbnRQYWdlICsgMVxuICAgIGNvbnN0IHEgPSBkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKClcbiAgICBjb25zdCBsb2FkTW9yZUJhc2VsaW5lR2VuID0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50XG4gICAgc2V0SXNMb2FkaW5nTW9yZSh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBpZiAoYWN0aXZlUGFnaW5hdGlvblNvdXJjZSA9PT0gJ3VzZXJzJykge1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGZldGNoVXNlcnNEaXJlY3Rvcnkoe1xuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgZmlsdGVyczogYnVpbGRVc2Vyc0RpcmVjdG9yeUZpbHRlcnMocSksXG4gICAgICAgICAgICBwYWdlOiBuZXh0UGFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBpZiAobG9hZE1vcmVCYXNlbGluZUdlbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgY29uc3QgbmV4dEl0ZW1zID0gKGRhdGE/LnVzZXJzPy5kYXRhID8/IFtdKS5tYXAodSA9PiBtYXBVc2VyVG9JdGVtKHUsIHEpKVxuICAgICAgICBzZXRJdGVtcyhwcmV2ID0+IHtcbiAgICAgICAgICBpZiAoIXEpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lSXRlbSA9XG4gICAgICAgICAgICAgIHByZXZbMF0/LnR5cGUgPT09ICd1c2VyJyA/IHByZXZbMF0gOiBtYXBDb3JVc2VyVG9Vc2VySXRlbShjb3JVc2VyLCAnJywgdCgnY29udGV4dE1lbnRpb24ubWUnKSlcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChwcmV2Lm1hcChpdGVtID0+IFN0cmluZyhpdGVtLmlkKSkpXG4gICAgICAgICAgICBjb25zdCBhcHBlbmRlZCA9IG5leHRJdGVtcy5maWx0ZXIoaXRlbSA9PiAhZXhpc3RpbmdJZHMuaGFzKFN0cmluZyhpdGVtLmlkKSkpXG4gICAgICAgICAgICBjb25zdCB3aXRob3V0TWUgPSBwcmV2LmZpbHRlcihpdGVtID0+IFN0cmluZyhpdGVtLmlkKSAhPT0gU3RyaW5nKG1lSXRlbS5pZCkpXG4gICAgICAgICAgICByZXR1cm4gW21lSXRlbSwgLi4ud2l0aG91dE1lLCAuLi5hcHBlbmRlZF1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHByZXYubWFwKGl0ZW0gPT4gYCR7aXRlbS50eXBlfS0ke2l0ZW0uaWR9YCkpXG4gICAgICAgICAgY29uc3QgYXBwZW5kZWQgPSBuZXh0SXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWV4aXN0aW5nSWRzLmhhcyhgJHtpdGVtLnR5cGV9LSR7aXRlbS5pZH1gKSlcbiAgICAgICAgICByZXR1cm4gWy4uLnByZXYsIC4uLmFwcGVuZGVkXVxuICAgICAgICB9KVxuICAgICAgICBzeW5jVXNlcnNQYWdpbmF0aW9uKGRhdGEpXG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UgPT09ICdjbGllbnRzLXNlYXJjaCcpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFNlYXJjaENsaWVudHMoe1xuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgZmlsdGVyOiB7IG5hbWU6IHEgfSxcbiAgICAgICAgICAgIHBhZ2U6IG5leHRQYWdlLFxuICAgICAgICAgICAgcGVyUGFnZTogMjAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGxvYWRNb3JlQmFzZWxpbmVHZW4gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG5leHRJdGVtcyA9IChkYXRhPy5jbGllbnRzPy5kYXRhID8/IFtdKS5tYXAoYyA9PiBtYXBDbGllbnRUb0l0ZW0oYywgcSkpXG4gICAgICAgIHNldEl0ZW1zKHByZXYgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChwcmV2Lm1hcChpdGVtID0+IGAke2l0ZW0udHlwZX0tJHtpdGVtLmlkfWApKVxuICAgICAgICAgIGNvbnN0IGFwcGVuZGVkID0gbmV4dEl0ZW1zLmZpbHRlcihpdGVtID0+ICFleGlzdGluZ0lkcy5oYXMoYCR7aXRlbS50eXBlfS0ke2l0ZW0uaWR9YCkpXG4gICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCAuLi5hcHBlbmRlZF1cbiAgICAgICAgfSlcbiAgICAgICAgc3luY0NsaWVudHNQYWdpbmF0aW9uKGRhdGEpXG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UgPT09ICd0YXNrLWZhbGxiYWNrJykge1xuICAgICAgICBjb25zdCBmaWx0ZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9XG4gICAgICAgIGlmIChzdGFibGVTY29wZS5wcm9qZWN0SWQgIT09IG51bGwgJiYgc3RhYmxlU2NvcGUucHJvamVjdElkICE9PSB1bmRlZmluZWQgJiYgc3RhYmxlU2NvcGUucHJvamVjdElkICE9PSAnJykge1xuICAgICAgICAgIGZpbHRlci5wcm9qZWN0SWRzID0gW1N0cmluZyhzdGFibGVTY29wZS5wcm9qZWN0SWQpXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gbnVsbCAmJiBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSAnJykge1xuICAgICAgICAgIGZpbHRlci5jbGllbnRJZHMgPSBbU3RyaW5nKHN0YWJsZVNjb3BlLmNsaWVudElkKV1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGZldGNoVGFza0ZhbWlseUZhbGxiYWNrKHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGZpbHRlcjogeyBhcmNoaXZlZDogZmFsc2UsIC4uLmZpbHRlciB9LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogeyBvZmZzZXQ6IChuZXh0UGFnZSAtIDEpICogMjAsIHNpemU6IDIwIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGxvYWRNb3JlQmFzZWxpbmVHZW4gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG5leHRJdGVtcyA9IChkYXRhPy50YXNrRmFtaWx5Py5kYXRhID8/IFtdKVxuICAgICAgICAgIC5tYXAobm9ybWFsaXplVGFza0ZhbWlseVJlY29yZClcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSZWNlbnRUYXNrSXRlbSA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAgIC5tYXAodGFzayA9PiBtYXBSZWNlbnRUYXNrVG9JdGVtKHRhc2ssICcnLCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cpKVxuICAgICAgICBzZXRJdGVtcyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5tYXAoaXRlbSA9PiBgJHtpdGVtLnR5cGV9LSR7aXRlbS5pZH1gKSlcbiAgICAgICAgICBjb25zdCBhcHBlbmRlZCA9IG5leHRJdGVtcy5maWx0ZXIoaXRlbSA9PiAhZXhpc3RpbmdJZHMuaGFzKGAke2l0ZW0udHlwZX0tJHtpdGVtLmlkfWApKVxuICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgLi4uYXBwZW5kZWRdXG4gICAgICAgIH0pXG4gICAgICAgIHN5bmNUYXNrRmFsbGJhY2tQYWdpbmF0aW9uKGRhdGEpXG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UgPT09ICdwcm9qZWN0LWZhbGxiYWNrJykge1xuICAgICAgICBjb25zdCBhcmd1bWVudHNGaWx0ZXIgPVxuICAgICAgICAgIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSBudWxsICYmIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09ICcnXG4gICAgICAgICAgICA/IHsgY2xpZW50X2lkOiBbU3RyaW5nKHN0YWJsZVNjb3BlLmNsaWVudElkKV0gfVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFByb2plY3RzRmFsbGJhY2soe1xuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgLi4uKGFyZ3VtZW50c0ZpbHRlciA/IHsgYXJndW1lbnRzOiBhcmd1bWVudHNGaWx0ZXIgfSA6IHt9KSxcbiAgICAgICAgICAgIHBhZ2U6IG5leHRQYWdlLFxuICAgICAgICAgICAgcGVyUGFnZTogMjAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGxvYWRNb3JlQmFzZWxpbmVHZW4gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG5leHRJdGVtcyA9IChkYXRhPy5wcm9qZWN0cz8uZGF0YSA/PyBbXSlcbiAgICAgICAgICAubWFwKG5vcm1hbGl6ZVByb2plY3RzRmFsbGJhY2tSZWNvcmQpXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgUmF3U2VhcmNoUmVzdWx0ID0+IGl0ZW0gIT09IG51bGwpXG4gICAgICAgICAgLm1hcChpdGVtID0+IG1hcFNlYXJjaFRvSXRlbShpdGVtLCAncHJvamVjdCcsICcnKSlcbiAgICAgICAgc2V0SXRlbXMocHJldiA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHByZXYubWFwKGl0ZW0gPT4gYCR7aXRlbS50eXBlfS0ke2l0ZW0uaWR9YCkpXG4gICAgICAgICAgY29uc3QgYXBwZW5kZWQgPSBuZXh0SXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWV4aXN0aW5nSWRzLmhhcyhgJHtpdGVtLnR5cGV9LSR7aXRlbS5pZH1gKSlcbiAgICAgICAgICByZXR1cm4gWy4uLnByZXYsIC4uLmFwcGVuZGVkXVxuICAgICAgICB9KVxuICAgICAgICBzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbihkYXRhKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGxvYWRNb3JlQmFzZWxpbmVHZW4gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICBjb25zb2xlLmVycm9yKCdbdXNlRW50aXR5U2VhcmNoXSBsb2FkTW9yZSBmYWlsZWQnLCB7XG4gICAgICAgIHNvdXJjZTogYWN0aXZlUGFnaW5hdGlvblNvdXJjZSxcbiAgICAgICAgbmV4dFBhZ2UsXG4gICAgICAgIGVycm9yOiBlcnIsXG4gICAgICB9KVxuICAgICAgLy8gRXZpdGEgbG9vcCBkZSByZWludGVudG9zIGF1dG9tw6F0aWNvcyBwb3Igc2Nyb2xsIGN1YW5kbyBiYWNrZW5kIGVzdMOhIGNhw61kbyAoZWouIDUwMykuXG4gICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nTW9yZShmYWxzZSlcbiAgICB9XG4gIH0sIFtcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIGhhc01vcmUsXG4gICAgY3VycmVudFBhZ2UsXG4gICAgYWN0aXZlUGFnaW5hdGlvblNvdXJjZSxcbiAgICBkZWJvdW5jZWRTZWFyY2hWYWx1ZSxcbiAgICBmZXRjaFVzZXJzRGlyZWN0b3J5LFxuICAgIGZldGNoU2VhcmNoQ2xpZW50cyxcbiAgICBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayxcbiAgICBmZXRjaFByb2plY3RzRmFsbGJhY2ssXG4gICAgc3RhYmxlU2NvcGUucHJvamVjdElkLFxuICAgIHN0YWJsZVNjb3BlLmNsaWVudElkLFxuICAgIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyxcbiAgICBjb3JVc2VyLFxuICAgIHQsXG4gICAgc3luY0NsaWVudHNQYWdpbmF0aW9uLFxuICAgIHN5bmNVc2Vyc1BhZ2luYXRpb24sXG4gICAgc3luY1Rhc2tGYWxsYmFja1BhZ2luYXRpb24sXG4gICAgc3luY1Byb2plY3RGYWxsYmFja1BhZ2luYXRpb24sXG4gIF0pXG5cbiAgLy8gTWFudGVuZW1vcyB1bmEgcmVmIGEgbGEgw7psdGltYSBmZXRjaFJlY2VudCBwYXJhIHF1ZSBlbCBlZmZlY3QgZGUgcmVjZW50cyBubyBzZVxuICAvLyByZS1kaXNwYXJlIHNvbG8gcG9ycXVlIGNhbWJpw7MgbGEgaWRlbnRpZGFkIGRlIGZldGNoUmVjZW50IChzY29wZS9jb3JVc2VyL3QpLlxuICBjb25zdCBmZXRjaFJlY2VudFJlZiA9IHVzZVJlZihmZXRjaFJlY2VudClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaFJlY2VudFJlZi5jdXJyZW50ID0gZmV0Y2hSZWNlbnRcbiAgfSwgW2ZldGNoUmVjZW50XSlcblxuICAvLyBUcmlnZ2VyIGRlIHJlY2VudHM6IGxvcyByZWNlbnRzIGRlIHVzZXIgTk8gZGVwZW5kZW4gZGVsIHNjb3BlLCBhc8OtIHF1ZSBjYW1iaWFyXG4gIC8vIGRlIHByb3llY3RvL2NsaWVudGUgbm8gZGViZSByZS1mZXRjaGVhcmxvcy4gTG9zIHRpcG9zIHNjb3BlYWRvcyAocHJvamVjdC90YXNrKSBzw60uXG4gIGNvbnN0IHJlY2VudHNUcmlnZ2VyID1cbiAgICB0eXBlID09PSAndXNlcicgfHwgdHlwZSA9PT0gJ3NraWxsJ1xuICAgICAgPyB0eXBlXG4gICAgICA6IGAke3R5cGV9fCR7c3RhYmxlU2NvcGUucHJvamVjdElkID8/ICcnfXwke3N0YWJsZVNjb3BlLmNsaWVudElkID8/ICcnfXwke3N0YWJsZVNjb3BlLmFnZW50RW50aXR5ID8/ICcnfXwke21jcFNsdWdzS2V5fWBcblxuICAvLyBDdWFuZG8gc2UgbGltcGlhIGVsIHNlYXJjaCwgdm9sdmVyIGEgcmVjZW50c1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpKSB7XG4gICAgICBmZXRjaFJlY2VudFJlZi5jdXJyZW50KClcbiAgICB9XG4gIH0sIFtkZWJvdW5jZWRTZWFyY2hWYWx1ZSwgcmVjZW50c1RyaWdnZXJdKVxuXG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgbG9hZGluZyxcbiAgICBlcnJvcixcbiAgICBoaWRlUmVjZW50c0xhYmVsLFxuICAgIGhhc01vcmUsXG4gICAgaXNMb2FkaW5nTW9yZSxcbiAgICBsb2FkTW9yZSxcbiAgICBzZWFyY2hWYWx1ZSxcbiAgICB1cGRhdGVTZWFyY2hWYWx1ZTogc2V0U2VhcmNoVmFsdWUsXG4gICAgZmV0Y2hSZWNlbnQsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxTQUFTQSxZQUFZLFFBQVEsZ0JBQWdCO0FBQzdDLFNBQVNDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDekUsU0FBU0MsZ0JBQWdCLFFBQVEsaURBQWlEO0FBQ2xGLFNBQVNDLGlCQUFpQixRQUFRLG1EQUFtRDtBQUNyRixTQUFTQyxjQUFjLFFBQVEsNkNBQTZDO0FBRTVFLFNBQVNDLE9BQU8sUUFBUSxxQkFBcUI7QUFDN0MsU0FBU0MsaUJBQWlCLEVBQUVDLGVBQWUsRUFBRUMsb0JBQW9CLFFBQVEscUNBQXFDO0FBQzlHLFNBQVNDLGNBQWMsUUFBUSxxQ0FBcUM7QUFDcEUsU0FBU0MsZUFBZSxRQUFRLHVDQUF1QztBQUN2RSxTQUFTQyx3QkFBd0IsUUFBUSxxQkFBcUI7QUFDOUQsU0FBU0MsV0FBVyxRQUFRLGVBQWU7QUFDM0MsU0FBU0MsSUFBSSxRQUFRLFFBQVE7QUFJN0IsU0FBU0MsU0FBUyxRQUFRLHlCQUF5QjtBQXNGbkQsSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSUMsS0FBYyxFQUFFQyxRQUFnQixFQUFhO0VBQ3pFLElBQU1DLE1BQU0sR0FBR0MsTUFBTSxDQUFDSCxLQUFLLENBQUM7RUFDNUIsSUFBSSxDQUFDRyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0YsTUFBTSxDQUFDLEVBQUUsT0FBT0QsUUFBUTtFQUM3QyxJQUFNSSxVQUFV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