@kepler.gl/constants 3.3.0-alpha.5 → 3.3.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/cjs/annotation.js +45 -0
  2. package/dist/cjs/color-palettes.js +461 -0
  3. package/dist/cjs/colors-by-theme.js +519 -0
  4. package/dist/cjs/dataset.js +82 -0
  5. package/dist/cjs/default-settings.js +1729 -0
  6. package/dist/cjs/gpu-parameters.js +125 -0
  7. package/dist/cjs/index.js +149 -0
  8. package/dist/cjs/keyevent.js +26 -0
  9. package/dist/cjs/layers.js +605 -0
  10. package/dist/{plot.js → cjs/plot.js} +1 -1
  11. package/dist/cjs/time.js +194 -0
  12. package/dist/cjs/tooltip.js +221 -0
  13. package/dist/cjs/user-feedbacks.js +15 -0
  14. package/dist/cjs/user-guides.js +19 -0
  15. package/dist/esm/annotation.js +38 -0
  16. package/dist/esm/color-palettes.js +453 -0
  17. package/dist/esm/colors-by-theme.js +513 -0
  18. package/dist/esm/dataset.js +80 -0
  19. package/dist/esm/default-settings.js +1723 -0
  20. package/dist/esm/gpu-parameters.js +119 -0
  21. package/dist/esm/index.js +18 -0
  22. package/dist/esm/keyevent.js +19 -0
  23. package/dist/esm/layers.js +598 -0
  24. package/dist/esm/plot.js +9 -0
  25. package/dist/esm/time.js +190 -0
  26. package/dist/esm/tooltip.js +215 -0
  27. package/dist/esm/user-feedbacks.js +9 -0
  28. package/dist/esm/user-guides.js +13 -0
  29. package/package.json +14 -5
  30. package/dist/annotation.js +0 -45
  31. package/dist/color-palettes.js +0 -461
  32. package/dist/colors-by-theme.js +0 -519
  33. package/dist/dataset.js +0 -82
  34. package/dist/default-settings.js +0 -1729
  35. package/dist/gpu-parameters.js +0 -125
  36. package/dist/index.js +0 -149
  37. package/dist/keyevent.js +0 -26
  38. package/dist/layers.js +0 -605
  39. package/dist/time.js +0 -194
  40. package/dist/tooltip.js +0 -221
  41. package/dist/user-feedbacks.js +0 -15
  42. package/dist/user-guides.js +0 -19
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.INITIAL_ANNOTATION_TEXT_WIDTH = exports.INITIAL_ANNOTATION_TEXT_HEIGHT = exports.INITIAL_ANNOTATION_LINE_WIDTH = exports.INITIAL_ANNOTATION_LINE_COLOR = exports.INITIAL_ANNOTATION_KIND = exports.INITIAL_ANNOTATION_ARM_LENGTH = exports.INITIAL_ANNOTATION_ANGLE = exports.AnnotationKind = exports.ANNOTATION_LINE_WIDTH_OPTIONS = exports.ANNOTATION_KINDS = void 0;
7
+ exports.isAnnotationKind = isAnnotationKind;
8
+ exports.isAnnotationWithArm = isAnnotationWithArm;
9
+ // SPDX-License-Identifier: MIT
10
+ // Copyright contributors to the kepler.gl project
11
+ var AnnotationKind = exports.AnnotationKind = /*#__PURE__*/function (AnnotationKind) {
12
+ AnnotationKind["TEXT"] = "TEXT";
13
+ AnnotationKind["ARROW"] = "ARROW";
14
+ AnnotationKind["POINT"] = "POINT";
15
+ AnnotationKind["CIRCLE"] = "CIRCLE";
16
+ return AnnotationKind;
17
+ }({});
18
+ function isAnnotationKind(kind) {
19
+ return Object.values(AnnotationKind).includes(kind);
20
+ }
21
+ function isAnnotationWithArm(anno) {
22
+ return isFinite(anno.armLength);
23
+ }
24
+ var INITIAL_ANNOTATION_KIND = exports.INITIAL_ANNOTATION_KIND = AnnotationKind.POINT;
25
+ var INITIAL_ANNOTATION_ANGLE = exports.INITIAL_ANNOTATION_ANGLE = -45;
26
+ var INITIAL_ANNOTATION_ARM_LENGTH = exports.INITIAL_ANNOTATION_ARM_LENGTH = 50;
27
+ var INITIAL_ANNOTATION_TEXT_WIDTH = exports.INITIAL_ANNOTATION_TEXT_WIDTH = 0;
28
+ var INITIAL_ANNOTATION_TEXT_HEIGHT = exports.INITIAL_ANNOTATION_TEXT_HEIGHT = 0;
29
+ var INITIAL_ANNOTATION_LINE_WIDTH = exports.INITIAL_ANNOTATION_LINE_WIDTH = 2;
30
+ var INITIAL_ANNOTATION_LINE_COLOR = exports.INITIAL_ANNOTATION_LINE_COLOR = '#FFFFFF';
31
+ var ANNOTATION_KINDS = exports.ANNOTATION_KINDS = [{
32
+ id: AnnotationKind.TEXT,
33
+ label: 'Text'
34
+ }, {
35
+ id: AnnotationKind.POINT,
36
+ label: 'Point'
37
+ }, {
38
+ id: AnnotationKind.ARROW,
39
+ label: 'Arrow'
40
+ }, {
41
+ id: AnnotationKind.CIRCLE,
42
+ label: 'Circle'
43
+ }];
44
+ var ANNOTATION_LINE_WIDTH_OPTIONS = exports.ANNOTATION_LINE_WIDTH_OPTIONS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
45
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBbm5vdGF0aW9uS2luZCIsImV4cG9ydHMiLCJpc0Fubm90YXRpb25LaW5kIiwia2luZCIsIk9iamVjdCIsInZhbHVlcyIsImluY2x1ZGVzIiwiaXNBbm5vdGF0aW9uV2l0aEFybSIsImFubm8iLCJpc0Zpbml0ZSIsImFybUxlbmd0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwiUE9JTlQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hUIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsIkFOTk9UQVRJT05fS0lORFMiLCJpZCIsIlRFWFQiLCJsYWJlbCIsIkFSUk9XIiwiQ0lSQ0xFIiwiQU5OT1RBVElPTl9MSU5FX1dJRFRIX09QVElPTlMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYW5ub3RhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5leHBvcnQgZW51bSBBbm5vdGF0aW9uS2luZCB7XG4gIFRFWFQgPSAnVEVYVCcsXG4gIEFSUk9XID0gJ0FSUk9XJyxcbiAgUE9JTlQgPSAnUE9JTlQnLFxuICBDSVJDTEUgPSAnQ0lSQ0xFJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBbm5vdGF0aW9uS2luZChraW5kOiBzdHJpbmcpOiBraW5kIGlzIEFubm90YXRpb25LaW5kIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoQW5ub3RhdGlvbktpbmQpLmluY2x1ZGVzKGtpbmQgYXMgQW5ub3RhdGlvbktpbmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBbm5vdGF0aW9uV2l0aEFybTxUIGV4dGVuZHMgb2JqZWN0PihcbiAgYW5ubzogVFxuKTogYW5ubyBpcyBUICYge2FybUxlbmd0aDogbnVtYmVyOyBhbmdsZTogbnVtYmVyfSB7XG4gIHJldHVybiBpc0Zpbml0ZSgoYW5ubyBhcyBhbnkpLmFybUxlbmd0aCk7XG59XG5cbmV4cG9ydCBjb25zdCBJTklUSUFMX0FOTk9UQVRJT05fS0lORCA9IEFubm90YXRpb25LaW5kLlBPSU5UO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSA9IC00NTtcbmV4cG9ydCBjb25zdCBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCA9IDUwO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIID0gMDtcbmV4cG9ydCBjb25zdCBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQgPSAwO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIID0gMjtcbmV4cG9ydCBjb25zdCBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiA9ICcjRkZGRkZGJztcblxuZXhwb3J0IGNvbnN0IEFOTk9UQVRJT05fS0lORFMgPSBbXG4gIHtpZDogQW5ub3RhdGlvbktpbmQuVEVYVCwgbGFiZWw6ICdUZXh0J30sXG4gIHtpZDogQW5ub3RhdGlvbktpbmQuUE9JTlQsIGxhYmVsOiAnUG9pbnQnfSxcbiAge2lkOiBBbm5vdGF0aW9uS2luZC5BUlJPVywgbGFiZWw6ICdBcnJvdyd9LFxuICB7aWQ6IEFubm90YXRpb25LaW5kLkNJUkNMRSwgbGFiZWw6ICdDaXJjbGUnfVxuXTtcblxuZXhwb3J0IGNvbnN0IEFOTk9UQVRJT05fTElORV9XSURUSF9PUFRJT05TID0gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQUEsSUFFWUEsY0FBYyxHQUFBQyxPQUFBLENBQUFELGNBQUEsMEJBQWRBLGNBQWM7RUFBZEEsY0FBYztFQUFkQSxjQUFjO0VBQWRBLGNBQWM7RUFBZEEsY0FBYztFQUFBLE9BQWRBLGNBQWM7QUFBQTtBQU9uQixTQUFTRSxnQkFBZ0JBLENBQUNDLElBQVksRUFBMEI7RUFDckUsT0FBT0MsTUFBTSxDQUFDQyxNQUFNLENBQUNMLGNBQWMsQ0FBQyxDQUFDTSxRQUFRLENBQUNILElBQXNCLENBQUM7QUFDdkU7QUFFTyxTQUFTSSxtQkFBbUJBLENBQ2pDQyxJQUFPLEVBQ3lDO0VBQ2hELE9BQU9DLFFBQVEsQ0FBRUQsSUFBSSxDQUFTRSxTQUFTLENBQUM7QUFDMUM7QUFFTyxJQUFNQyx1QkFBdUIsR0FBQVYsT0FBQSxDQUFBVSx1QkFBQSxHQUFHWCxjQUFjLENBQUNZLEtBQUs7QUFDcEQsSUFBTUMsd0JBQXdCLEdBQUFaLE9BQUEsQ0FBQVksd0JBQUEsR0FBRyxDQUFDLEVBQUU7QUFDcEMsSUFBTUMsNkJBQTZCLEdBQUFiLE9BQUEsQ0FBQWEsNkJBQUEsR0FBRyxFQUFFO0FBQ3hDLElBQU1DLDZCQUE2QixHQUFBZCxPQUFBLENBQUFjLDZCQUFBLEdBQUcsQ0FBQztBQUN2QyxJQUFNQyw4QkFBOEIsR0FBQWYsT0FBQSxDQUFBZSw4QkFBQSxHQUFHLENBQUM7QUFDeEMsSUFBTUMsNkJBQTZCLEdBQUFoQixPQUFBLENBQUFnQiw2QkFBQSxHQUFHLENBQUM7QUFDdkMsSUFBTUMsNkJBQTZCLEdBQUFqQixPQUFBLENBQUFpQiw2QkFBQSxHQUFHLFNBQVM7QUFFL0MsSUFBTUMsZ0JBQWdCLEdBQUFsQixPQUFBLENBQUFrQixnQkFBQSxHQUFHLENBQzlCO0VBQUNDLEVBQUUsRUFBRXBCLGNBQWMsQ0FBQ3FCLElBQUk7RUFBRUMsS0FBSyxFQUFFO0FBQU0sQ0FBQyxFQUN4QztFQUFDRixFQUFFLEVBQUVwQixjQUFjLENBQUNZLEtBQUs7RUFBRVUsS0FBSyxFQUFFO0FBQU8sQ0FBQyxFQUMxQztFQUFDRixFQUFFLEVBQUVwQixjQUFjLENBQUN1QixLQUFLO0VBQUVELEtBQUssRUFBRTtBQUFPLENBQUMsRUFDMUM7RUFBQ0YsRUFBRSxFQUFFcEIsY0FBYyxDQUFDd0IsTUFBTTtFQUFFRixLQUFLLEVBQUU7QUFBUSxDQUFDLENBQzdDO0FBRU0sSUFBTUcsNkJBQTZCLEdBQUF4QixPQUFBLENBQUF3Qiw2QkFBQSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,461 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.PALETTE_TYPES = exports.KEPLER_COLOR_PALETTES = exports.DataVizColors = exports.D3_COLOR_CHROMATIC_SCHEME = exports.COLORBREWER_SCHEME = exports.CATEGORIES = void 0;
9
+ exports.buildCategoricalPalette = buildCategoricalPalette;
10
+ exports.colorPaletteToColorRange = colorPaletteToColorRange;
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
+ var d3ScaleChromatic = _interopRequireWildcard(require("d3-scale-chromatic"));
15
+ var _d3Array = require("d3-array");
16
+ var _chromaJs = _interopRequireDefault(require("chroma-js"));
17
+ var _console = _interopRequireDefault(require("global/console"));
18
+ var _d3Color = require("d3-color");
19
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
20
+ 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; }
21
+ 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) { (0, _defineProperty2["default"])(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; } // SPDX-License-Identifier: MIT
22
+ // Copyright contributors to the kepler.gl project
23
+ // linear interpolator
24
+
25
+ var CATEGORIES = exports.CATEGORIES = {
26
+ COLORBREWER: 'ColorBrewer',
27
+ D3: 'D3',
28
+ UBER: 'Uber',
29
+ COLORBLIND: 'ColorBlind'
30
+ };
31
+ var PALETTE_TYPES = exports.PALETTE_TYPES = {
32
+ SEQ: 'sequential',
33
+ QUA: 'qualitative',
34
+ DIV: 'diverging',
35
+ CYC: 'cyclical'
36
+ };
37
+ var COLORBREWER_SCHEME = exports.COLORBREWER_SCHEME = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, PALETTE_TYPES.SEQ, ['BuGn', 'BuPu', 'GnBu', 'OrRd', 'PuBu', 'PuBuGn', 'PuRd', 'RdPu', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd', 'Blues', 'Greens', 'Greys', 'Oranges', 'Purples', 'Reds']), PALETTE_TYPES.DIV, ['BrBG', 'PiYG', 'PRGn', 'PuOr', 'RdBu', 'RdGy', 'RdYlBu', 'RdYlGn', 'Spectral']), PALETTE_TYPES.QUA, ['Accent', 'Dark2', 'Paired', 'Pastel1', 'Pastel2', 'Set1', 'Set2', 'Set3']);
38
+
39
+ // https://rdrr.io/cran/RColorBrewer/man/ColorBrewer.html
40
+ var COLOR_BLIND_SAFE_MAP = {
41
+ // colorbrewer
42
+ BrBG: true,
43
+ PiYG: true,
44
+ PRGn: true,
45
+ PuOr: true,
46
+ RdBu: true,
47
+ RdGy: false,
48
+ RdYlBu: true,
49
+ RdYlGn: false,
50
+ Spectral: false,
51
+ Accent: false,
52
+ Dark2: true,
53
+ Paired: true,
54
+ Pastel1: false,
55
+ Pastel2: false,
56
+ Set1: false,
57
+ Set2: true,
58
+ Set3: false,
59
+ Blues: true,
60
+ BuGn: true,
61
+ BuPu: true,
62
+ GnBu: true,
63
+ Greens: true,
64
+ Greys: true,
65
+ Oranges: true,
66
+ OrRd: true,
67
+ PuBu: true,
68
+ PuBuGn: true,
69
+ PuRd: true,
70
+ Purples: true,
71
+ RdPu: true,
72
+ Reds: true,
73
+ YlGn: true,
74
+ YlGnBu: true,
75
+ YlOrBr: true,
76
+ YlOrRd: true,
77
+ // d3 scale chromatic
78
+ Sinebow: true,
79
+ Rainbow: false,
80
+ Turbo: true,
81
+ Viridis: true,
82
+ Inferno: true,
83
+ Magma: true,
84
+ Plasma: true,
85
+ Cividis: true,
86
+ Warm: true,
87
+ Cool: false,
88
+ CubehelixDefault: true,
89
+ Tableau10: false
90
+ };
91
+ var D3_COLOR_CHROMATIC_SCHEME = exports.D3_COLOR_CHROMATIC_SCHEME = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, PALETTE_TYPES.CYC, ['Sinebow', 'Rainbow']), PALETTE_TYPES.SEQ, ['Turbo', 'Viridis', 'Inferno', 'Magma', 'Plasma', 'Cividis', 'Warm', 'Cool', 'CubehelixDefault']), PALETTE_TYPES.QUA, ['Tableau10']);
92
+ var DataVizColors = exports.DataVizColors = {
93
+ aqua: '#12939A',
94
+ tumbleweed: '#DDB27C',
95
+ mule_fawn: '#88572C',
96
+ tree_poppy: '#FF991F',
97
+ flame: '#F15C17',
98
+ sapphire: '#223F9A',
99
+ orchid: '#DA70BF',
100
+ chathams_blue: '#125C77',
101
+ med_aquamarine: '#4DC19C',
102
+ crocodile: '#776E57',
103
+ java: '#17B8BE',
104
+ chalky: '#F6D18A',
105
+ light_taupe: '#B7885E',
106
+ peach_orange: '#FFCB99',
107
+ apricot: '#F89570',
108
+ portage: '#829AE3',
109
+ light_orchid: '#E79FD5',
110
+ blue_green: '#1E96BE',
111
+ bermuda: '#89DAC1',
112
+ cloudy: '#B3AD9E'
113
+ };
114
+ var UberVizDiverging = {
115
+ name: 'Uber Viz Diverging',
116
+ category: CATEGORIES.UBER,
117
+ type: PALETTE_TYPES.DIV,
118
+ colors: ['#00939C', '#E6FAFA'],
119
+ colors2: ['#FEEEE8', '#C22E00'],
120
+ diverging: true,
121
+ correctLightness: false,
122
+ colorBlindSafe: true
123
+ };
124
+ var UberVizSequential = {
125
+ name: 'Uber Viz Sequential',
126
+ category: CATEGORIES.UBER,
127
+ type: PALETTE_TYPES.SEQ,
128
+ colors: ['#00939C', '#E6FAFA'],
129
+ colorBlindSafe: true
130
+ };
131
+ var UberPool = {
132
+ name: 'UberPool',
133
+ type: PALETTE_TYPES.DIV,
134
+ category: CATEGORIES.UBER,
135
+ colors: ['#223F9A', '#CF1750', '#FAE300'],
136
+ correctLightness: false,
137
+ colorBlindSafe: true
138
+ };
139
+ var IceAndFire = {
140
+ name: 'Ice And Fire',
141
+ type: PALETTE_TYPES.DIV,
142
+ category: CATEGORIES.UBER,
143
+ colors: ['#0198BD', '#FAFEB3'],
144
+ colors2: ['#FEEDB1', '#D50255'],
145
+ diverging: true,
146
+ colorBlindSafe: true
147
+ };
148
+ var GlobalWarming = {
149
+ name: 'Global Warming',
150
+ type: PALETTE_TYPES.SEQ,
151
+ category: CATEGORIES.UBER,
152
+ colors: ['#4C0035', '#AC1C17', '#FFC300'],
153
+ colorBlindSafe: true
154
+ };
155
+ var Sunrise = {
156
+ name: 'Sunrise',
157
+ type: PALETTE_TYPES.SEQ,
158
+ category: CATEGORIES.UBER,
159
+ colors: ['#355C7D', '#C06C84', '#F8B195'],
160
+ colorBlindSafe: true
161
+ };
162
+ var OceanGreen = {
163
+ name: 'Ocean Green',
164
+ type: PALETTE_TYPES.SEQ,
165
+ category: CATEGORIES.UBER,
166
+ colors: ['#37535E', '#3EACA8', '#E5EEC1'],
167
+ colorBlindSafe: true
168
+ };
169
+ var PinkWine = {
170
+ name: 'Pink Wine',
171
+ type: PALETTE_TYPES.SEQ,
172
+ category: CATEGORIES.UBER,
173
+ colors: ['#2C1E3D', '#956485', '#EDD1CA'],
174
+ colorBlindSafe: true
175
+ };
176
+ var PurpleBlueYellow = {
177
+ name: 'Purple Blue Yellow',
178
+ type: PALETTE_TYPES.SEQ,
179
+ category: CATEGORIES.UBER,
180
+ colors: ['#383C65', '#49838A', '#D6DEBF'],
181
+ mode: 'hsl',
182
+ colorBlindSafe: true
183
+ };
184
+ var ViovetOcean = {
185
+ name: 'ViovetOcean',
186
+ type: PALETTE_TYPES.SEQ,
187
+ category: CATEGORIES.UBER,
188
+ colors: ['#7400B8', '#5E60CE', '#4EA8DE', '#56CFE1', '#72EFDD'],
189
+ colorBlindSafe: false
190
+ };
191
+ var SummerSky = {
192
+ name: 'SummerSky',
193
+ type: PALETTE_TYPES.SEQ,
194
+ category: CATEGORIES.UBER,
195
+ colors: ['#184E77', '#168AAD', '#76C893', '#D9ED92'],
196
+ colorBlindSafe: false
197
+ };
198
+ var UberVizQualitative = {
199
+ name: 'Uber Viz Qualitative',
200
+ type: PALETTE_TYPES.QUA,
201
+ category: CATEGORIES.UBER,
202
+ colors: Object.values(DataVizColors),
203
+ colorBlindSafe: false
204
+ };
205
+
206
+ // https://personal.sron.nl/~pault/#sec:qualitative
207
+ // A set of Qualitative Colors designed by Paul Tol that are color blind friendly
208
+ var TolBright = {
209
+ name: 'Tol Bright',
210
+ type: PALETTE_TYPES.QUA,
211
+ category: CATEGORIES.COLORBLIND,
212
+ colors: ['#4477AA', '#EE6677', '#228833', '#CCBB44', '#66CCEE', '#AA3377', '#BBBBBB'],
213
+ colorBlindSafe: true
214
+ };
215
+ // Bad Data: #BBBBBB
216
+
217
+ var TolVibrant = {
218
+ name: 'Tol Vibrant',
219
+ type: PALETTE_TYPES.QUA,
220
+ category: CATEGORIES.COLORBLIND,
221
+ colors: ['#EE7733', '#0077BB', '#33BBEE', '#EE3377', '#CC3311', '#009988', '#BBBBBB'],
222
+ colorBlindSafe: true
223
+ };
224
+ // Bad Data: #BBBBBB
225
+
226
+ var TolMuted = {
227
+ name: 'Tol Muted',
228
+ type: PALETTE_TYPES.QUA,
229
+ category: CATEGORIES.COLORBLIND,
230
+ colors: ['#CC6677', '#332288', '#DDCC77', '#117733', '#88CCEE', '#882255', '#44AA99', '#999933', '#AA4499'],
231
+ colorBlindSafe: true
232
+ };
233
+ // Bad Data: #DDDDDD
234
+
235
+ var TolMediumContrast = {
236
+ name: 'Tol Medium Contrast',
237
+ type: PALETTE_TYPES.QUA,
238
+ category: CATEGORIES.COLORBLIND,
239
+ colors: ['#6699CC', '#004488', '#EECC66', '#994455', '#997700', '#EE99AA'],
240
+ colorBlindSafe: true
241
+ };
242
+ var TolLight = {
243
+ name: 'Tol Light',
244
+ type: PALETTE_TYPES.QUA,
245
+ category: CATEGORIES.COLORBLIND,
246
+ colors: ['#77AADD', '#EE8866', '#EEDD88', '#FFAABB', '#99DDFF', '#44BB99', '#BBCC33', '#AAAA00'],
247
+ colorBlindSafe: true
248
+ };
249
+
250
+ // https://jfly.uni-koeln.de/color/
251
+ var OkabeIto = {
252
+ name: 'Okabe Ito',
253
+ type: PALETTE_TYPES.QUA,
254
+ category: CATEGORIES.COLORBLIND,
255
+ colors: ['#E69F00', '#56B4E9', '#009E73', '#F0E442', '#0072B2', '#D55E00', '#CC79A7', '#000000'],
256
+ colorBlindSafe: true
257
+ };
258
+ // Bad Data: #DDDDDD
259
+
260
+ var FSQBrand = {
261
+ name: 'FSQ Brand',
262
+ type: PALETTE_TYPES.QUA,
263
+ category: CATEGORIES.COLORBLIND,
264
+ colors: ['#3333FF', '#6166EB', '#2ED9C3', '#82E8DB', '#FCCC0A', '#FFDAAF', '#30A5D9', '#97DAF8'],
265
+ colorBlindSafe: true
266
+ };
267
+ var FSQWarmTone = {
268
+ name: 'FSQ Warm Tone',
269
+ type: PALETTE_TYPES.QUA,
270
+ category: CATEGORIES.COLORBLIND,
271
+ colors: ['#C00B05', '#D150A5', '#E98ECA', '#FECE5A', '#FFDDBF', '#FFB4D3', '#EE5D86', '#D8D2D2'],
272
+ colorBlindSafe: true
273
+ };
274
+ var FSQCoolTone = {
275
+ name: 'FSQ Cool Tone',
276
+ type: PALETTE_TYPES.QUA,
277
+ category: CATEGORIES.COLORBLIND,
278
+ colors: ['#11439F', '#297EE8', '#95C6C9', '#FECE5A', '#FFDDBF', '#9FB1B7', '#5281B5', '#B9D0FB'],
279
+ colorBlindSafe: true
280
+ };
281
+
282
+ /**
283
+ * Build Categorical color palette
284
+ */
285
+ function buildCategoricalPalette(_ref) {
286
+ var name = _ref.name,
287
+ category = _ref.category,
288
+ colors = _ref.colors,
289
+ colorBlindSafe = _ref.colorBlindSafe;
290
+ var allColors;
291
+ // find d3 color scheme
292
+ var scheme = d3ScaleChromatic["scheme".concat(name)];
293
+ if (!scheme && !colors) {
294
+ _console["default"].warn("scheme".concat(name, " cant not be found in d3 scale chromatic, needs to provide colors"));
295
+ allColors = ['#DDDDDD'];
296
+ } else if (!scheme) {
297
+ // build from colors
298
+ allColors = colors;
299
+ } else {
300
+ allColors = scheme;
301
+ }
302
+ if (!allColors.length) {
303
+ _console["default"].warn('Needs to provide valid d3 color scheme name or an array of colors');
304
+ }
305
+ return {
306
+ name: name,
307
+ category: category,
308
+ type: PALETTE_TYPES.QUA,
309
+ colorBlindSafe: colorBlindSafe !== null && colorBlindSafe !== void 0 ? colorBlindSafe : COLOR_BLIND_SAFE_MAP[name],
310
+ maxStep: allColors.length,
311
+ colors: function colors(numColors) {
312
+ // if numColors > maxSteps, will return allColors
313
+ return allColors.slice(0, numColors).map(_colorToUppercase);
314
+ }
315
+ };
316
+ }
317
+ function _colorToUppercase(c) {
318
+ return (0, _d3Color.color)(c).formatHex().toUpperCase();
319
+ }
320
+ /**
321
+ * All sequantial palette is based on palette in d3-scale-chromatic
322
+ * https://github.com/d3/d3-scale-chromatic/blob/main/src/index.js
323
+ */
324
+ function buildSequentialPalette(_ref2) {
325
+ var name = _ref2.name,
326
+ type = _ref2.type,
327
+ category = _ref2.category;
328
+ if (!Object.prototype.hasOwnProperty.call(COLOR_BLIND_SAFE_MAP, name)) {
329
+ _console["default"].warn("".concat(name, " does not exists in COLOR_BLIND_SAFE_MAP"));
330
+ }
331
+ var interpolator = d3ScaleChromatic["interpolate".concat(name)];
332
+ return {
333
+ name: name,
334
+ type: type,
335
+ category: category,
336
+ colorBlindSafe: COLOR_BLIND_SAFE_MAP[name],
337
+ colors: function colors(numColors) {
338
+ return (0, _d3Array.range)(0, numColors, 1).map(function (d) {
339
+ return interpolator(d / (numColors - 1));
340
+ }).map(_colorToUppercase);
341
+ },
342
+ linear: function linear() {
343
+ return interpolator;
344
+ }
345
+ };
346
+ }
347
+ function buildCustomPalette(_ref3) {
348
+ var colors = _ref3.colors,
349
+ _ref3$colors = _ref3.colors2,
350
+ colors2 = _ref3$colors === void 0 ? [] : _ref3$colors,
351
+ _ref3$correctLightnes = _ref3.correctLightness,
352
+ correctLightness = _ref3$correctLightnes === void 0 ? true : _ref3$correctLightnes,
353
+ _ref3$bezier = _ref3.bezier,
354
+ bezier = _ref3$bezier === void 0 ? false : _ref3$bezier,
355
+ _ref3$diverging = _ref3.diverging,
356
+ diverging = _ref3$diverging === void 0 ? false : _ref3$diverging,
357
+ _ref3$mode = _ref3.mode,
358
+ mode = _ref3$mode === void 0 ? 'lch' : _ref3$mode,
359
+ name = _ref3.name,
360
+ type = _ref3.type,
361
+ category = _ref3.category,
362
+ colorBlindSafe = _ref3.colorBlindSafe;
363
+ var palette = {
364
+ name: name,
365
+ type: type,
366
+ category: category,
367
+ colorBlindSafe: colorBlindSafe,
368
+ colors: function colors() {
369
+ return [];
370
+ },
371
+ linear: function linear() {
372
+ return function () {
373
+ return '';
374
+ };
375
+ }
376
+ };
377
+ if (!colors.length) {
378
+ _console["default"].error('colors has to be an array of colors');
379
+ return;
380
+ }
381
+ var scaleLeft = _chromaJs["default"].scale(bezier && colors.length > 1 ? _chromaJs["default"].bezier(colors) : colors).mode(mode).correctLightness(correctLightness);
382
+ var scaleRight;
383
+ var scaleFull;
384
+ if (diverging) {
385
+ if (!colors.length) {
386
+ _console["default"].error('colors2 has to be an array of colors when diverging = true');
387
+ return;
388
+ }
389
+ scaleRight = _chromaJs["default"].scale(bezier && colors2.length > 1 ? _chromaJs["default"].bezier(colors2) : colors2).mode(mode).correctLightness(correctLightness);
390
+ scaleFull = _chromaJs["default"].scale(bezier ? _chromaJs["default"].bezier(colors.concat(colors2)) : colors.concat(colors2)).mode(mode).correctLightness(correctLightness);
391
+ }
392
+
393
+ // return numColors => (scaleLeft ? stepsLeft.colors(numColors) : []);
394
+
395
+ // given number of colors return color steps
396
+ palette.colors = function (numColors) {
397
+ if (diverging) {
398
+ var even = numColors % 2 === 0;
399
+ var numColorsLeft = Math.ceil(numColors / 2) + (even ? 1 : 0);
400
+ var numColorsRight = Math.ceil(numColors / 2) + (even ? 1 : 0);
401
+ var colorsLeft = scaleLeft ? scaleLeft.colors(numColorsLeft) : [];
402
+ var colorsRight = scaleRight ? scaleRight.colors(numColorsRight) : [];
403
+ var _steps = (even ? colorsLeft.slice(0, colorsLeft.length - 1) : colorsLeft).concat(colorsRight.slice(1)).map(_colorToUppercase);
404
+ return _steps;
405
+ }
406
+ return scaleLeft ? scaleLeft.colors(numColors).map(_colorToUppercase) : [];
407
+ };
408
+ palette.linear = function () {
409
+ return diverging ? scaleFull : scaleLeft;
410
+ };
411
+ return palette;
412
+ }
413
+ function buildPaletteBySchemeGroups(schemeGroups, category) {
414
+ return Object.entries(schemeGroups).reduce(function (accu, _ref4) {
415
+ var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
416
+ type = _ref5[0],
417
+ palettes = _ref5[1];
418
+ return [].concat((0, _toConsumableArray2["default"])(accu), (0, _toConsumableArray2["default"])(palettes.reduce(function (group, name) {
419
+ var colorPalette = type === PALETTE_TYPES.QUA ? buildCategoricalPalette({
420
+ name: name,
421
+ category: category
422
+ }) :
423
+ // @ts-ignore jsdoc cant figure out type of 'type'
424
+ buildSequentialPalette({
425
+ name: name,
426
+ type: type,
427
+ category: category
428
+ });
429
+ // @ts-ignore type is not assignable to never[]
430
+ group.push(colorPalette);
431
+ return group;
432
+ }, [])));
433
+ }, []);
434
+ }
435
+ var COLORBREWER_PALETTES = buildPaletteBySchemeGroups(COLORBREWER_SCHEME, CATEGORIES.COLORBREWER);
436
+ var D3_COLOR_PALETTES = buildPaletteBySchemeGroups(D3_COLOR_CHROMATIC_SCHEME, CATEGORIES.D3);
437
+ var BRANDED_PALETTES = [UberVizDiverging, UberVizSequential, UberPool, IceAndFire, GlobalWarming, Sunrise, OceanGreen, PinkWine, PurpleBlueYellow, ViovetOcean, SummerSky, UberVizQualitative, TolBright, TolVibrant, TolMuted, TolMediumContrast, TolLight, OkabeIto, FSQBrand, FSQWarmTone, FSQCoolTone].map(function (recipe) {
438
+ return recipe.type === PALETTE_TYPES.QUA ? buildCategoricalPalette(recipe) : buildCustomPalette(recipe);
439
+ }).filter(Boolean);
440
+ var KEPLER_COLOR_PALETTES = exports.KEPLER_COLOR_PALETTES = [].concat((0, _toConsumableArray2["default"])(BRANDED_PALETTES), (0, _toConsumableArray2["default"])(COLORBREWER_PALETTES), (0, _toConsumableArray2["default"])(D3_COLOR_PALETTES));
441
+
442
+ /**
443
+ * create color range from palette, with steps and reversed as config
444
+ */
445
+ function colorPaletteToColorRange(colorPalette, colorConfig) {
446
+ var steps = colorConfig.steps,
447
+ reversed = colorConfig.reversed;
448
+ var colors = colorPalette.colors(steps).slice();
449
+ if (reversed) {
450
+ colors.reverse();
451
+ }
452
+ return _objectSpread({
453
+ name: colorPalette.name,
454
+ type: colorPalette.type,
455
+ category: colorPalette.category,
456
+ colors: colors
457
+ }, reversed ? {
458
+ reversed: reversed
459
+ } : {});
460
+ }
461
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkM1NjYWxlQ2hyb21hdGljIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX2QzQXJyYXkiLCJfY2hyb21hSnMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NvbnNvbGUiLCJfZDNDb2xvciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJDQVRFR09SSUVTIiwiZXhwb3J0cyIsIkNPTE9SQlJFV0VSIiwiRDMiLCJVQkVSIiwiQ09MT1JCTElORCIsIlBBTEVUVEVfVFlQRVMiLCJTRVEiLCJRVUEiLCJESVYiLCJDWUMiLCJDT0xPUkJSRVdFUl9TQ0hFTUUiLCJDT0xPUl9CTElORF9TQUZFX01BUCIsIkJyQkciLCJQaVlHIiwiUFJHbiIsIlB1T3IiLCJSZEJ1IiwiUmRHeSIsIlJkWWxCdSIsIlJkWWxHbiIsIlNwZWN0cmFsIiwiQWNjZW50IiwiRGFyazIiLCJQYWlyZWQiLCJQYXN0ZWwxIiwiUGFzdGVsMiIsIlNldDEiLCJTZXQyIiwiU2V0MyIsIkJsdWVzIiwiQnVHbiIsIkJ1UHUiLCJHbkJ1IiwiR3JlZW5zIiwiR3JleXMiLCJPcmFuZ2VzIiwiT3JSZCIsIlB1QnUiLCJQdUJ1R24iLCJQdVJkIiwiUHVycGxlcyIsIlJkUHUiLCJSZWRzIiwiWWxHbiIsIllsR25CdSIsIllsT3JCciIsIllsT3JSZCIsIlNpbmVib3ciLCJSYWluYm93IiwiVHVyYm8iLCJWaXJpZGlzIiwiSW5mZXJubyIsIk1hZ21hIiwiUGxhc21hIiwiQ2l2aWRpcyIsIldhcm0iLCJDb29sIiwiQ3ViZWhlbGl4RGVmYXVsdCIsIlRhYmxlYXUxMCIsIkQzX0NPTE9SX0NIUk9NQVRJQ19TQ0hFTUUiLCJEYXRhVml6Q29sb3JzIiwiYXF1YSIsInR1bWJsZXdlZWQiLCJtdWxlX2Zhd24iLCJ0cmVlX3BvcHB5IiwiZmxhbWUiLCJzYXBwaGlyZSIsIm9yY2hpZCIsImNoYXRoYW1zX2JsdWUiLCJtZWRfYXF1YW1hcmluZSIsImNyb2NvZGlsZSIsImphdmEiLCJjaGFsa3kiLCJsaWdodF90YXVwZSIsInBlYWNoX29yYW5nZSIsImFwcmljb3QiLCJwb3J0YWdlIiwibGlnaHRfb3JjaGlkIiwiYmx1ZV9ncmVlbiIsImJlcm11ZGEiLCJjbG91ZHkiLCJVYmVyVml6RGl2ZXJnaW5nIiwibmFtZSIsImNhdGVnb3J5IiwidHlwZSIsImNvbG9ycyIsImNvbG9yczIiLCJkaXZlcmdpbmciLCJjb3JyZWN0TGlnaHRuZXNzIiwiY29sb3JCbGluZFNhZmUiLCJVYmVyVml6U2VxdWVudGlhbCIsIlViZXJQb29sIiwiSWNlQW5kRmlyZSIsIkdsb2JhbFdhcm1pbmciLCJTdW5yaXNlIiwiT2NlYW5HcmVlbiIsIlBpbmtXaW5lIiwiUHVycGxlQmx1ZVllbGxvdyIsIm1vZGUiLCJWaW92ZXRPY2VhbiIsIlN1bW1lclNreSIsIlViZXJWaXpRdWFsaXRhdGl2ZSIsInZhbHVlcyIsIlRvbEJyaWdodCIsIlRvbFZpYnJhbnQiLCJUb2xNdXRlZCIsIlRvbE1lZGl1bUNvbnRyYXN0IiwiVG9sTGlnaHQiLCJPa2FiZUl0byIsIkZTUUJyYW5kIiwiRlNRV2FybVRvbmUiLCJGU1FDb29sVG9uZSIsImJ1aWxkQ2F0ZWdvcmljYWxQYWxldHRlIiwiX3JlZiIsImFsbENvbG9ycyIsInNjaGVtZSIsImNvbmNhdCIsIkNvbnNvbGUiLCJ3YXJuIiwibWF4U3RlcCIsIm51bUNvbG9ycyIsInNsaWNlIiwibWFwIiwiX2NvbG9yVG9VcHBlcmNhc2UiLCJjIiwiZDNDb2xvciIsImZvcm1hdEhleCIsInRvVXBwZXJDYXNlIiwiYnVpbGRTZXF1ZW50aWFsUGFsZXR0ZSIsIl9yZWYyIiwicHJvdG90eXBlIiwiaW50ZXJwb2xhdG9yIiwicmFuZ2UiLCJkIiwibGluZWFyIiwiYnVpbGRDdXN0b21QYWxldHRlIiwiX3JlZjMiLCJfcmVmMyRjb2xvcnMiLCJfcmVmMyRjb3JyZWN0TGlnaHRuZXMiLCJfcmVmMyRiZXppZXIiLCJiZXppZXIiLCJfcmVmMyRkaXZlcmdpbmciLCJfcmVmMyRtb2RlIiwicGFsZXR0ZSIsImVycm9yIiwic2NhbGVMZWZ0IiwiY2hyb21hIiwic2NhbGUiLCJzY2FsZVJpZ2h0Iiwic2NhbGVGdWxsIiwiZXZlbiIsIm51bUNvbG9yc0xlZnQiLCJNYXRoIiwiY2VpbCIsIm51bUNvbG9yc1JpZ2h0IiwiY29sb3JzTGVmdCIsImNvbG9yc1JpZ2h0Iiwic3RlcHMiLCJidWlsZFBhbGV0dGVCeVNjaGVtZUdyb3VwcyIsInNjaGVtZUdyb3VwcyIsImVudHJpZXMiLCJyZWR1Y2UiLCJhY2N1IiwiX3JlZjQiLCJfcmVmNSIsIl9zbGljZWRUb0FycmF5MiIsInBhbGV0dGVzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImdyb3VwIiwiY29sb3JQYWxldHRlIiwiQ09MT1JCUkVXRVJfUEFMRVRURVMiLCJEM19DT0xPUl9QQUxFVFRFUyIsIkJSQU5ERURfUEFMRVRURVMiLCJyZWNpcGUiLCJCb29sZWFuIiwiS0VQTEVSX0NPTE9SX1BBTEVUVEVTIiwiY29sb3JQYWxldHRlVG9Db2xvclJhbmdlIiwiY29sb3JDb25maWciLCJyZXZlcnNlZCIsInJldmVyc2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sb3ItcGFsZXR0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0ICogYXMgZDNTY2FsZUNocm9tYXRpYyBmcm9tICdkMy1zY2FsZS1jaHJvbWF0aWMnO1xuaW1wb3J0IHtyYW5nZX0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHtjb2xvciBhcyBkM0NvbG9yfSBmcm9tICdkMy1jb2xvcic7XG5pbXBvcnQge0hleENvbG9yLCBNaW5pQ29sb3JSYW5nZSwgVmFsdWVPZn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbnR5cGUgR2V0Q29sb3JzID0gKHN0ZXBzOiBudW1iZXIpID0+IEhleENvbG9yW107XG4vLyBsaW5lYXIgaW50ZXJwb2xhdG9yXG50eXBlIEdldExpbmVhciA9ICgpID0+IChuOiBudW1iZXIpID0+IHN0cmluZztcblxuZXhwb3J0IHR5cGUgQ2F0ZWdvcmljYWxQYWxldHRlID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6ICdxdWFsaXRhdGl2ZSc7XG4gIGNhdGVnb3J5OiBWYWx1ZU9mPHR5cGVvZiBDQVRFR09SSUVTPjtcbiAgY29sb3JCbGluZFNhZmU6IGJvb2xlYW47XG5cbiAgY29sb3JzOiBHZXRDb2xvcnM7XG4gIC8vIGNhdGVnb3JpY2FsIHBhbGV0dGVcbiAgbWF4U3RlcDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgU2VxdWVudGlhbFBhbGV0dGUgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogJ3NlcXVlbnRpYWwnIHwgJ2RpdmVyZ2luZycgfCAnY3ljbGljYWwnO1xuICBjYXRlZ29yeTogVmFsdWVPZjx0eXBlb2YgQ0FURUdPUklFUz47XG4gIGNvbG9yQmxpbmRTYWZlOiBib29sZWFuO1xuICBjb2xvcnM6IEdldENvbG9ycztcbiAgLy8gc2VxdWVudGlhbCBwYWxldHRlXG4gIGxpbmVhcjogR2V0TGluZWFyO1xufTtcblxuZXhwb3J0IHR5cGUgQ29sb3JQYWxldHRlID0gQ2F0ZWdvcmljYWxQYWxldHRlIHwgU2VxdWVudGlhbFBhbGV0dGU7XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SSUVTID0ge1xuICBDT0xPUkJSRVdFUjogJ0NvbG9yQnJld2VyJyxcbiAgRDM6ICdEMycsXG4gIFVCRVI6ICdVYmVyJyxcbiAgQ09MT1JCTElORDogJ0NvbG9yQmxpbmQnXG59O1xuXG5leHBvcnQgY29uc3QgUEFMRVRURV9UWVBFUzoge1xuICBTRVE6ICdzZXF1ZW50aWFsJztcbiAgUVVBOiAncXVhbGl0YXRpdmUnO1xuICBESVY6ICdkaXZlcmdpbmcnO1xuICBDWUM6ICdjeWNsaWNhbCc7XG59ID0ge1xuICBTRVE6ICdzZXF1ZW50aWFsJyxcbiAgUVVBOiAncXVhbGl0YXRpdmUnLFxuICBESVY6ICdkaXZlcmdpbmcnLFxuICBDWUM6ICdjeWNsaWNhbCdcbn07XG5cbmV4cG9ydCBjb25zdCBDT0xPUkJSRVdFUl9TQ0hFTUUgPSB7XG4gIFtQQUxFVFRFX1RZUEVTLlNFUV06IFtcbiAgICAnQnVHbicsXG4gICAgJ0J1UHUnLFxuICAgICdHbkJ1JyxcbiAgICAnT3JSZCcsXG4gICAgJ1B1QnUnLFxuICAgICdQdUJ1R24nLFxuICAgICdQdVJkJyxcbiAgICAnUmRQdScsXG4gICAgJ1lsR24nLFxuICAgICdZbEduQnUnLFxuICAgICdZbE9yQnInLFxuICAgICdZbE9yUmQnLFxuICAgICdCbHVlcycsXG4gICAgJ0dyZWVucycsXG4gICAgJ0dyZXlzJyxcbiAgICAnT3JhbmdlcycsXG4gICAgJ1B1cnBsZXMnLFxuICAgICdSZWRzJ1xuICBdLCAvLyAxOCArIDkgKyA4XG4gIC8vIHNpbmdsZWh1ZTogWydCbHVlcycsICdHcmVlbnMnLCAnR3JleXMnLCAnT3JhbmdlcycsICdQdXJwbGVzJywgJ1JlZHMnXSxcbiAgW1BBTEVUVEVfVFlQRVMuRElWXTogW1xuICAgICdCckJHJyxcbiAgICAnUGlZRycsXG4gICAgJ1BSR24nLFxuICAgICdQdU9yJyxcbiAgICAnUmRCdScsXG4gICAgJ1JkR3knLFxuICAgICdSZFlsQnUnLFxuICAgICdSZFlsR24nLFxuICAgICdTcGVjdHJhbCdcbiAgXSxcbiAgW1BBTEVUVEVfVFlQRVMuUVVBXTogWydBY2NlbnQnLCAnRGFyazInLCAnUGFpcmVkJywgJ1Bhc3RlbDEnLCAnUGFzdGVsMicsICdTZXQxJywgJ1NldDInLCAnU2V0MyddXG59O1xuXG4vLyBodHRwczovL3JkcnIuaW8vY3Jhbi9SQ29sb3JCcmV3ZXIvbWFuL0NvbG9yQnJld2VyLmh0bWxcbmNvbnN0IENPTE9SX0JMSU5EX1NBRkVfTUFQID0ge1xuICAvLyBjb2xvcmJyZXdlclxuICBCckJHOiB0cnVlLFxuICBQaVlHOiB0cnVlLFxuICBQUkduOiB0cnVlLFxuICBQdU9yOiB0cnVlLFxuICBSZEJ1OiB0cnVlLFxuICBSZEd5OiBmYWxzZSxcbiAgUmRZbEJ1OiB0cnVlLFxuICBSZFlsR246IGZhbHNlLFxuICBTcGVjdHJhbDogZmFsc2UsXG4gIEFjY2VudDogZmFsc2UsXG4gIERhcmsyOiB0cnVlLFxuICBQYWlyZWQ6IHRydWUsXG4gIFBhc3RlbDE6IGZhbHNlLFxuICBQYXN0ZWwyOiBmYWxzZSxcbiAgU2V0MTogZmFsc2UsXG4gIFNldDI6IHRydWUsXG4gIFNldDM6IGZhbHNlLFxuICBCbHVlczogdHJ1ZSxcbiAgQnVHbjogdHJ1ZSxcbiAgQnVQdTogdHJ1ZSxcbiAgR25CdTogdHJ1ZSxcbiAgR3JlZW5zOiB0cnVlLFxuICBHcmV5czogdHJ1ZSxcbiAgT3JhbmdlczogdHJ1ZSxcbiAgT3JSZDogdHJ1ZSxcbiAgUHVCdTogdHJ1ZSxcbiAgUHVCdUduOiB0cnVlLFxuICBQdVJkOiB0cnVlLFxuICBQdXJwbGVzOiB0cnVlLFxuICBSZFB1OiB0cnVlLFxuICBSZWRzOiB0cnVlLFxuICBZbEduOiB0cnVlLFxuICBZbEduQnU6IHRydWUsXG4gIFlsT3JCcjogdHJ1ZSxcbiAgWWxPclJkOiB0cnVlLFxuXG4gIC8vIGQzIHNjYWxlIGNocm9tYXRpY1xuICBTaW5lYm93OiB0cnVlLFxuICBSYWluYm93OiBmYWxzZSxcbiAgVHVyYm86IHRydWUsXG4gIFZpcmlkaXM6IHRydWUsXG4gIEluZmVybm86IHRydWUsXG4gIE1hZ21hOiB0cnVlLFxuICBQbGFzbWE6IHRydWUsXG4gIENpdmlkaXM6IHRydWUsXG4gIFdhcm06IHRydWUsXG4gIENvb2w6IGZhbHNlLFxuICBDdWJlaGVsaXhEZWZhdWx0OiB0cnVlLFxuICBUYWJsZWF1MTA6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgRDNfQ09MT1JfQ0hST01BVElDX1NDSEVNRSA9IHtcbiAgW1BBTEVUVEVfVFlQRVMuQ1lDXTogWydTaW5lYm93JywgJ1JhaW5ib3cnXSxcbiAgW1BBTEVUVEVfVFlQRVMuU0VRXTogW1xuICAgICdUdXJibycsXG4gICAgJ1ZpcmlkaXMnLFxuICAgICdJbmZlcm5vJyxcbiAgICAnTWFnbWEnLFxuICAgICdQbGFzbWEnLFxuICAgICdDaXZpZGlzJyxcbiAgICAnV2FybScsXG4gICAgJ0Nvb2wnLFxuICAgICdDdWJlaGVsaXhEZWZhdWx0J1xuICBdLFxuICBbUEFMRVRURV9UWVBFUy5RVUFdOiBbJ1RhYmxlYXUxMCddXG59O1xuXG5leHBvcnQgY29uc3QgRGF0YVZpekNvbG9ycyA9IHtcbiAgYXF1YTogJyMxMjkzOUEnLFxuICB0dW1ibGV3ZWVkOiAnI0REQjI3QycsXG4gIG11bGVfZmF3bjogJyM4ODU3MkMnLFxuICB0cmVlX3BvcHB5OiAnI0ZGOTkxRicsXG4gIGZsYW1lOiAnI0YxNUMxNycsXG4gIHNhcHBoaXJlOiAnIzIyM0Y5QScsXG4gIG9yY2hpZDogJyNEQTcwQkYnLFxuICBjaGF0aGFtc19ibHVlOiAnIzEyNUM3NycsXG4gIG1lZF9hcXVhbWFyaW5lOiAnIzREQzE5QycsXG4gIGNyb2NvZGlsZTogJyM3NzZFNTcnLFxuICBqYXZhOiAnIzE3QjhCRScsXG4gIGNoYWxreTogJyNGNkQxOEEnLFxuICBsaWdodF90YXVwZTogJyNCNzg4NUUnLFxuICBwZWFjaF9vcmFuZ2U6ICcjRkZDQjk5JyxcbiAgYXByaWNvdDogJyNGODk1NzAnLFxuICBwb3J0YWdlOiAnIzgyOUFFMycsXG4gIGxpZ2h0X29yY2hpZDogJyNFNzlGRDUnLFxuICBibHVlX2dyZWVuOiAnIzFFOTZCRScsXG4gIGJlcm11ZGE6ICcjODlEQUMxJyxcbiAgY2xvdWR5OiAnI0IzQUQ5RSdcbn07XG5cbmNvbnN0IFViZXJWaXpEaXZlcmdpbmcgPSB7XG4gIG5hbWU6ICdVYmVyIFZpeiBEaXZlcmdpbmcnLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5VQkVSLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLkRJVixcbiAgY29sb3JzOiBbJyMwMDkzOUMnLCAnI0U2RkFGQSddLFxuICBjb2xvcnMyOiBbJyNGRUVFRTgnLCAnI0MyMkUwMCddLFxuICBkaXZlcmdpbmc6IHRydWUsXG4gIGNvcnJlY3RMaWdodG5lc3M6IGZhbHNlLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuY29uc3QgVWJlclZpelNlcXVlbnRpYWwgPSB7XG4gIG5hbWU6ICdVYmVyIFZpeiBTZXF1ZW50aWFsJyxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuVUJFUixcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5TRVEsXG4gIGNvbG9yczogWycjMDA5MzlDJywgJyNFNkZBRkEnXSxcbiAgY29sb3JCbGluZFNhZmU6IHRydWVcbn07XG5cbmNvbnN0IFViZXJQb29sID0ge1xuICBuYW1lOiAnVWJlclBvb2wnLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLkRJVixcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuVUJFUixcbiAgY29sb3JzOiBbJyMyMjNGOUEnLCAnI0NGMTc1MCcsICcjRkFFMzAwJ10sXG4gIGNvcnJlY3RMaWdodG5lc3M6IGZhbHNlLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuY29uc3QgSWNlQW5kRmlyZSA9IHtcbiAgbmFtZTogJ0ljZSBBbmQgRmlyZScsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuRElWLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5VQkVSLFxuICBjb2xvcnM6IFsnIzAxOThCRCcsICcjRkFGRUIzJ10sXG4gIGNvbG9yczI6IFsnI0ZFRURCMScsICcjRDUwMjU1J10sXG4gIGRpdmVyZ2luZzogdHJ1ZSxcbiAgY29sb3JCbGluZFNhZmU6IHRydWVcbn07XG5cbmNvbnN0IEdsb2JhbFdhcm1pbmcgPSB7XG4gIG5hbWU6ICdHbG9iYWwgV2FybWluZycsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuU0VRLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5VQkVSLFxuICBjb2xvcnM6IFsnIzRDMDAzNScsICcjQUMxQzE3JywgJyNGRkMzMDAnXSxcbiAgY29sb3JCbGluZFNhZmU6IHRydWVcbn07XG5cbmNvbnN0IFN1bnJpc2UgPSB7XG4gIG5hbWU6ICdTdW5yaXNlJyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5TRVEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLlVCRVIsXG4gIGNvbG9yczogWycjMzU1QzdEJywgJyNDMDZDODQnLCAnI0Y4QjE5NSddLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuY29uc3QgT2NlYW5HcmVlbiA9IHtcbiAgbmFtZTogJ09jZWFuIEdyZWVuJyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5TRVEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLlVCRVIsXG4gIGNvbG9yczogWycjMzc1MzVFJywgJyMzRUFDQTgnLCAnI0U1RUVDMSddLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuY29uc3QgUGlua1dpbmUgPSB7XG4gIG5hbWU6ICdQaW5rIFdpbmUnLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlNFUSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuVUJFUixcbiAgY29sb3JzOiBbJyMyQzFFM0QnLCAnIzk1NjQ4NScsICcjRUREMUNBJ10sXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuXG5jb25zdCBQdXJwbGVCbHVlWWVsbG93ID0ge1xuICBuYW1lOiAnUHVycGxlIEJsdWUgWWVsbG93JyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5TRVEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLlVCRVIsXG4gIGNvbG9yczogWycjMzgzQzY1JywgJyM0OTgzOEEnLCAnI0Q2REVCRiddLFxuICBtb2RlOiAnaHNsJyxcbiAgY29sb3JCbGluZFNhZmU6IHRydWVcbn07XG5cbmNvbnN0IFZpb3ZldE9jZWFuID0ge1xuICBuYW1lOiAnVmlvdmV0T2NlYW4nLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlNFUSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuVUJFUixcbiAgY29sb3JzOiBbJyM3NDAwQjgnLCAnIzVFNjBDRScsICcjNEVBOERFJywgJyM1NkNGRTEnLCAnIzcyRUZERCddLFxuICBjb2xvckJsaW5kU2FmZTogZmFsc2Vcbn07XG5cbmNvbnN0IFN1bW1lclNreSA9IHtcbiAgbmFtZTogJ1N1bW1lclNreScsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuU0VRLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5VQkVSLFxuICBjb2xvcnM6IFsnIzE4NEU3NycsICcjMTY4QUFEJywgJyM3NkM4OTMnLCAnI0Q5RUQ5MiddLFxuICBjb2xvckJsaW5kU2FmZTogZmFsc2Vcbn07XG5cbmNvbnN0IFViZXJWaXpRdWFsaXRhdGl2ZSA9IHtcbiAgbmFtZTogJ1ViZXIgVml6IFF1YWxpdGF0aXZlJyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5RVUEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLlVCRVIsXG4gIGNvbG9yczogT2JqZWN0LnZhbHVlcyhEYXRhVml6Q29sb3JzKSxcbiAgY29sb3JCbGluZFNhZmU6IGZhbHNlXG59O1xuXG4vLyBodHRwczovL3BlcnNvbmFsLnNyb24ubmwvfnBhdWx0LyNzZWM6cXVhbGl0YXRpdmVcbi8vIEEgc2V0IG9mIFF1YWxpdGF0aXZlIENvbG9ycyBkZXNpZ25lZCBieSBQYXVsIFRvbCB0aGF0IGFyZSBjb2xvciBibGluZCBmcmllbmRseVxuY29uc3QgVG9sQnJpZ2h0ID0ge1xuICBuYW1lOiAnVG9sIEJyaWdodCcsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuUVVBLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5DT0xPUkJMSU5ELFxuICBjb2xvcnM6IFsnIzQ0NzdBQScsICcjRUU2Njc3JywgJyMyMjg4MzMnLCAnI0NDQkI0NCcsICcjNjZDQ0VFJywgJyNBQTMzNzcnLCAnI0JCQkJCQiddLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcbi8vIEJhZCBEYXRhOiAjQkJCQkJCXG5cbmNvbnN0IFRvbFZpYnJhbnQgPSB7XG4gIG5hbWU6ICdUb2wgVmlicmFudCcsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuUVVBLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5DT0xPUkJMSU5ELFxuICBjb2xvcnM6IFsnI0VFNzczMycsICcjMDA3N0JCJywgJyMzM0JCRUUnLCAnI0VFMzM3NycsICcjQ0MzMzExJywgJyMwMDk5ODgnLCAnI0JCQkJCQiddLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcbi8vIEJhZCBEYXRhOiAjQkJCQkJCXG5cbmNvbnN0IFRvbE11dGVkID0ge1xuICBuYW1lOiAnVG9sIE11dGVkJyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5RVUEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLkNPTE9SQkxJTkQsXG4gIGNvbG9yczogW1xuICAgICcjQ0M2Njc3JyxcbiAgICAnIzMzMjI4OCcsXG4gICAgJyNERENDNzcnLFxuICAgICcjMTE3NzMzJyxcbiAgICAnIzg4Q0NFRScsXG4gICAgJyM4ODIyNTUnLFxuICAgICcjNDRBQTk5JyxcbiAgICAnIzk5OTkzMycsXG4gICAgJyNBQTQ0OTknXG4gIF0sXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuLy8gQmFkIERhdGE6ICNERERERERcblxuY29uc3QgVG9sTWVkaXVtQ29udHJhc3QgPSB7XG4gIG5hbWU6ICdUb2wgTWVkaXVtIENvbnRyYXN0JyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5RVUEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLkNPTE9SQkxJTkQsXG4gIGNvbG9yczogWycjNjY5OUNDJywgJyMwMDQ0ODgnLCAnI0VFQ0M2NicsICcjOTk0NDU1JywgJyM5OTc3MDAnLCAnI0VFOTlBQSddLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuY29uc3QgVG9sTGlnaHQgPSB7XG4gIG5hbWU6ICdUb2wgTGlnaHQnLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlFVQSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuQ09MT1JCTElORCxcbiAgY29sb3JzOiBbJyM3N0FBREQnLCAnI0VFODg2NicsICcjRUVERDg4JywgJyNGRkFBQkInLCAnIzk5RERGRicsICcjNDRCQjk5JywgJyNCQkNDMzMnLCAnI0FBQUEwMCddLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuLy8gaHR0cHM6Ly9qZmx5LnVuaS1rb2Vsbi5kZS9jb2xvci9cbmNvbnN0IE9rYWJlSXRvID0ge1xuICBuYW1lOiAnT2thYmUgSXRvJyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5RVUEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLkNPTE9SQkxJTkQsXG4gIGNvbG9yczogWycjRTY5RjAwJywgJyM1NkI0RTknLCAnIzAwOUU3MycsICcjRjBFNDQyJywgJyMwMDcyQjInLCAnI0Q1NUUwMCcsICcjQ0M3OUE3JywgJyMwMDAwMDAnXSxcbiAgY29sb3JCbGluZFNhZmU6IHRydWVcbn07XG4vLyBCYWQgRGF0YTogI0RERERERFxuXG5jb25zdCBGU1FCcmFuZCA9IHtcbiAgbmFtZTogJ0ZTUSBCcmFuZCcsXG4gIHR5cGU6IFBBTEVUVEVfVFlQRVMuUVVBLFxuICBjYXRlZ29yeTogQ0FURUdPUklFUy5DT0xPUkJMSU5ELFxuICBjb2xvcnM6IFsnIzMzMzNGRicsICcjNjE2NkVCJywgJyMyRUQ5QzMnLCAnIzgyRThEQicsICcjRkNDQzBBJywgJyNGRkRBQUYnLCAnIzMwQTVEOScsICcjOTdEQUY4J10sXG4gIGNvbG9yQmxpbmRTYWZlOiB0cnVlXG59O1xuXG5jb25zdCBGU1FXYXJtVG9uZSA9IHtcbiAgbmFtZTogJ0ZTUSBXYXJtIFRvbmUnLFxuICB0eXBlOiBQQUxFVFRFX1RZUEVTLlFVQSxcbiAgY2F0ZWdvcnk6IENBVEVHT1JJRVMuQ09MT1JCTElORCxcbiAgY29sb3JzOiBbJyNDMDBCMDUnLCAnI0QxNTBBNScsICcjRTk4RUNBJywgJyNGRUNFNUEnLCAnI0ZGRERCRicsICcjRkZCNEQzJywgJyNFRTVEODYnLCAnI0Q4RDJEMiddLFxuICBjb2xvckJsaW5kU2FmZTogdHJ1ZVxufTtcblxuY29uc3QgRlNRQ29vbFRvbmUgPSB7XG4gIG5hbWU6ICdGU1EgQ29vbCBUb25lJyxcbiAgdHlwZTogUEFMRVRURV9UWVBFUy5RVUEsXG4gIGNhdGVnb3J5OiBDQVRFR09SSUVTLkNPTE9SQkxJTkQsXG4gIGNvbG9yczogWycjMTE0MzlGJywgJyMyOTdFRTgnLCAnIzk1QzZDOScsICcjRkVDRTVBJywgJyNGRkREQkYnLCAnIzlGQjFCNycsICcjNTI4MUI1JywgJyNCOUQwRkInXSxcbiAgY29sb3JCbGluZFNhZmU6IHRydWVcbn07XG5cbi8qKlxuICogQnVpbGQgQ2F0ZWdvcmljYWwgY29sb3IgcGFsZXR0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDYXRlZ29yaWNhbFBhbGV0dGUoe1xuICBuYW1lLFxuICBjYXRlZ29yeSxcbiAgY29sb3JzLFxuICBjb2xvckJsaW5kU2FmZVxufToge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBWYWx1ZU9mPHR5cGVvZiBDQVRFR09SSUVTPjtcbiAgY29sb3JzPzogSGV4Q29sb3JbXTtcbiAgY29sb3JCbGluZFNhZmU/OiBib29sZWFuO1xufSk6IENhdGVnb3JpY2FsUGFsZXR0ZSB7XG4gIGxldCBhbGxDb2xvcnM7XG4gIC8vIGZpbmQgZDMgY29sb3Igc2NoZW1lXG4gIGNvbnN0IHNjaGVtZSA9IGQzU2NhbGVDaHJvbWF0aWNbYHNjaGVtZSR7bmFtZX1gXTtcblxuICBpZiAoIXNjaGVtZSAmJiAhY29sb3JzKSB7XG4gICAgQ29uc29sZS53YXJuKGBzY2hlbWUke25hbWV9IGNhbnQgbm90IGJlIGZvdW5kIGluIGQzIHNjYWxlIGNocm9tYXRpYywgbmVlZHMgdG8gcHJvdmlkZSBjb2xvcnNgKTtcbiAgICBhbGxDb2xvcnMgPSBbJyNEREREREQnXTtcbiAgfSBlbHNlIGlmICghc2NoZW1lKSB7XG4gICAgLy8gYnVpbGQgZnJvbSBjb2xvcnNcbiAgICBhbGxDb2xvcnMgPSBjb2xvcnM7XG4gIH0gZWxzZSB7XG4gICAgYWxsQ29sb3JzID0gc2NoZW1lO1xuICB9XG5cbiAgaWYgKCFhbGxDb2xvcnMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKCdOZWVkcyB0byBwcm92aWRlIHZhbGlkIGQzIGNvbG9yIHNjaGVtZSBuYW1lIG9yIGFuIGFycmF5IG9mIGNvbG9ycycpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lLFxuICAgIGNhdGVnb3J5LFxuICAgIHR5cGU6IFBBTEVUVEVfVFlQRVMuUVVBLFxuICAgIGNvbG9yQmxpbmRTYWZlOiBjb2xvckJsaW5kU2FmZSA/PyBDT0xPUl9CTElORF9TQUZFX01BUFtuYW1lXSxcbiAgICBtYXhTdGVwOiBhbGxDb2xvcnMubGVuZ3RoLFxuICAgIGNvbG9yczogbnVtQ29sb3JzID0+IHtcbiAgICAgIC8vIGlmIG51bUNvbG9ycyA+IG1heFN0ZXBzLCAgd2lsbCByZXR1cm4gYWxsQ29sb3JzXG4gICAgICByZXR1cm4gYWxsQ29sb3JzLnNsaWNlKDAsIG51bUNvbG9ycykubWFwKF9jb2xvclRvVXBwZXJjYXNlKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIF9jb2xvclRvVXBwZXJjYXNlKGMpIHtcbiAgcmV0dXJuIGQzQ29sb3IoYykuZm9ybWF0SGV4KCkudG9VcHBlckNhc2UoKTtcbn1cbi8qKlxuICogQWxsIHNlcXVhbnRpYWwgcGFsZXR0ZSBpcyBiYXNlZCBvbiBwYWxldHRlIGluIGQzLXNjYWxlLWNocm9tYXRpY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLXNjYWxlLWNocm9tYXRpYy9ibG9iL21haW4vc3JjL2luZGV4LmpzXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2VxdWVudGlhbFBhbGV0dGUoe25hbWUsIHR5cGUsIGNhdGVnb3J5fSkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChDT0xPUl9CTElORF9TQUZFX01BUCwgbmFtZSkpIHtcbiAgICBDb25zb2xlLndhcm4oYCR7bmFtZX0gZG9lcyBub3QgZXhpc3RzIGluIENPTE9SX0JMSU5EX1NBRkVfTUFQYCk7XG4gIH1cbiAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDNTY2FsZUNocm9tYXRpY1tgaW50ZXJwb2xhdGUke25hbWV9YF07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lLFxuICAgIHR5cGUsXG4gICAgY2F0ZWdvcnksXG4gICAgY29sb3JCbGluZFNhZmU6IENPTE9SX0JMSU5EX1NBRkVfTUFQW25hbWVdLFxuICAgIGNvbG9yczogbnVtQ29sb3JzID0+IHtcbiAgICAgIHJldHVybiByYW5nZSgwLCBudW1Db2xvcnMsIDEpXG4gICAgICAgIC5tYXAoZCA9PiBpbnRlcnBvbGF0b3IoZCAvIChudW1Db2xvcnMgLSAxKSkpXG4gICAgICAgIC5tYXAoX2NvbG9yVG9VcHBlcmNhc2UpO1xuICAgIH0sXG4gICAgbGluZWFyOiAoKSA9PiB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdG9yO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRDdXN0b21QYWxldHRlKHtcbiAgY29sb3JzLFxuICBjb2xvcnMyID0gW10sXG4gIGNvcnJlY3RMaWdodG5lc3MgPSB0cnVlLFxuICBiZXppZXIgPSBmYWxzZSxcbiAgZGl2ZXJnaW5nID0gZmFsc2UsXG4gIG1vZGUgPSAnbGNoJyxcbiAgbmFtZSxcbiAgdHlwZSxcbiAgY2F0ZWdvcnksXG4gIGNvbG9yQmxpbmRTYWZlXG59OiB7XG4gIGNvbG9yczogSGV4Q29sb3JbXTtcbiAgY29sb3JzMj86IEhleENvbG9yW107XG4gIGNvcnJlY3RMaWdodG5lc3M/OiBib29sZWFuO1xuICBiZXppZXI/OiBib29sZWFuO1xuICBkaXZlcmdpbmc/OiBib29sZWFuO1xuICBtb2RlPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFNlcXVlbnRpYWxQYWxldHRlWyd0eXBlJ107XG4gIGNhdGVnb3J5OiBWYWx1ZU9mPHR5cGVvZiBDQVRFR09SSUVTPjtcbiAgY29sb3JCbGluZFNhZmU6IGJvb2xlYW47XG59KTogU2VxdWVudGlhbFBhbGV0dGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYWxldHRlOiBTZXF1ZW50aWFsUGFsZXR0ZSA9IHtcbiAgICBuYW1lLFxuICAgIHR5cGUsXG4gICAgY2F0ZWdvcnksXG4gICAgY29sb3JCbGluZFNhZmUsXG4gICAgY29sb3JzOiAoKSA9PiBbXSxcbiAgICBsaW5lYXI6ICgpID0+ICgpID0+ICcnXG4gIH07XG5cbiAgaWYgKCFjb2xvcnMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS5lcnJvcignY29sb3JzIGhhcyB0byBiZSBhbiBhcnJheSBvZiBjb2xvcnMnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzY2FsZUxlZnQgPSBjaHJvbWFcbiAgICAuc2NhbGUoYmV6aWVyICYmIGNvbG9ycy5sZW5ndGggPiAxID8gY2hyb21hLmJlemllcihjb2xvcnMpIDogY29sb3JzKVxuICAgIC5tb2RlKG1vZGUpXG4gICAgLmNvcnJlY3RMaWdodG5lc3MoY29ycmVjdExpZ2h0bmVzcyk7XG4gIGxldCBzY2FsZVJpZ2h0O1xuICBsZXQgc2NhbGVGdWxsO1xuICBpZiAoZGl2ZXJnaW5nKSB7XG4gICAgaWYgKCFjb2xvcnMubGVuZ3RoKSB7XG4gICAgICBDb25zb2xlLmVycm9yKCdjb2xvcnMyIGhhcyB0byBiZSBhbiBhcnJheSBvZiBjb2xvcnMgd2hlbiBkaXZlcmdpbmcgPSB0cnVlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNjYWxlUmlnaHQgPSBjaHJvbWFcbiAgICAgIC5zY2FsZShiZXppZXIgJiYgY29sb3JzMi5sZW5ndGggPiAxID8gY2hyb21hLmJlemllcihjb2xvcnMyKSA6IGNvbG9yczIpXG4gICAgICAubW9kZShtb2RlKVxuICAgICAgLmNvcnJlY3RMaWdodG5lc3MoY29ycmVjdExpZ2h0bmVzcyk7XG5cbiAgICBzY2FsZUZ1bGwgPSBjaHJvbWFcbiAgICAgIC5zY2FsZShiZXppZXIgPyBjaHJvbWEuYmV6aWVyKGNvbG9ycy5jb25jYXQoY29sb3JzMikpIDogY29sb3JzLmNvbmNhdChjb2xvcnMyKSlcbiAgICAgIC5tb2RlKG1vZGUpXG4gICAgICAuY29ycmVjdExpZ2h0bmVzcyhjb3JyZWN0TGlnaHRuZXNzKTtcbiAgfVxuXG4gIC8vIHJldHVybiBudW1Db2xvcnMgPT4gKHNjYWxlTGVmdCA/IHN0ZXBzTGVmdC5jb2xvcnMobnVtQ29sb3JzKSA6IFtdKTtcblxuICAvLyBnaXZlbiBudW1iZXIgb2YgY29sb3JzIHJldHVybiBjb2xvciBzdGVwc1xuICBwYWxldHRlLmNvbG9ycyA9IG51bUNvbG9ycyA9PiB7XG4gICAgaWYgKGRpdmVyZ2luZykge1xuICAgICAgY29uc3QgZXZlbiA9IG51bUNvbG9ycyAlIDIgPT09IDA7XG5cbiAgICAgIGNvbnN0IG51bUNvbG9yc0xlZnQgPSBNYXRoLmNlaWwobnVtQ29sb3JzIC8gMikgKyAoZXZlbiA/IDEgOiAwKTtcbiAgICAgIGNvbnN0IG51bUNvbG9yc1JpZ2h0ID0gTWF0aC5jZWlsKG51bUNvbG9ycyAvIDIpICsgKGV2ZW4gPyAxIDogMCk7XG5cbiAgICAgIGNvbnN0IGNvbG9yc0xlZnQgPSBzY2FsZUxlZnQgPyBzY2FsZUxlZnQuY29sb3JzKG51bUNvbG9yc0xlZnQpIDogW107XG4gICAgICBjb25zdCBjb2xvcnNSaWdodCA9IHNjYWxlUmlnaHQgPyBzY2FsZVJpZ2h0LmNvbG9ycyhudW1Db2xvcnNSaWdodCkgOiBbXTtcbiAgICAgIGNvbnN0IHN0ZXBzID0gKGV2ZW4gPyBjb2xvcnNMZWZ0LnNsaWNlKDAsIGNvbG9yc0xlZnQubGVuZ3RoIC0gMSkgOiBjb2xvcnNMZWZ0KVxuICAgICAgICAuY29uY2F0KGNvbG9yc1JpZ2h0LnNsaWNlKDEpKVxuICAgICAgICAubWFwKF9jb2xvclRvVXBwZXJjYXNlKTtcblxuICAgICAgcmV0dXJuIHN0ZXBzO1xuICAgIH1cblxuICAgIHJldHVybiBzY2FsZUxlZnQgPyBzY2FsZUxlZnQuY29sb3JzKG51bUNvbG9ycykubWFwKF9jb2xvclRvVXBwZXJjYXNlKSA6IFtdO1xuICB9O1xuXG4gIHBhbGV0dGUubGluZWFyID0gKCkgPT4ge1xuICAgIHJldHVybiBkaXZlcmdpbmcgPyBzY2FsZUZ1bGwgOiBzY2FsZUxlZnQ7XG4gIH07XG5cbiAgcmV0dXJuIHBhbGV0dGU7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUGFsZXR0ZUJ5U2NoZW1lR3JvdXBzKFxuICBzY2hlbWVHcm91cHM6IHR5cGVvZiBDT0xPUkJSRVdFUl9TQ0hFTUUgfCB0eXBlb2YgRDNfQ09MT1JfQ0hST01BVElDX1NDSEVNRSxcbiAgY2F0ZWdvcnk6IFZhbHVlT2Y8dHlwZW9mIENBVEVHT1JJRVM+XG4pOiBDb2xvclBhbGV0dGVbXSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhzY2hlbWVHcm91cHMpLnJlZHVjZSgoYWNjdSwgW3R5cGUsIHBhbGV0dGVzXSkgPT4ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5hY2N1LFxuICAgICAgLi4ucGFsZXR0ZXMucmVkdWNlKChncm91cCwgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBjb2xvclBhbGV0dGUgPVxuICAgICAgICAgIHR5cGUgPT09IFBBTEVUVEVfVFlQRVMuUVVBXG4gICAgICAgICAgICA/IGJ1aWxkQ2F0ZWdvcmljYWxQYWxldHRlKHtuYW1lLCBjYXRlZ29yeX0pXG4gICAgICAgICAgICA6IC8vIEB0cy1pZ25vcmUganNkb2MgY2FudCBmaWd1cmUgb3V0IHR5cGUgb2YgJ3R5cGUnXG4gICAgICAgICAgICAgIGJ1aWxkU2VxdWVudGlhbFBhbGV0dGUoe25hbWUsIHR5cGUsIGNhdGVnb3J5fSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgdHlwZSBpcyBub3QgYXNzaWduYWJsZSB0byBuZXZlcltdXG4gICAgICAgIGdyb3VwLnB1c2goY29sb3JQYWxldHRlKTtcbiAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgfSwgW10pXG4gICAgXTtcbiAgfSwgW10pO1xufVxuXG5jb25zdCBDT0xPUkJSRVdFUl9QQUxFVFRFUyA9IGJ1aWxkUGFsZXR0ZUJ5U2NoZW1lR3JvdXBzKENPTE9SQlJFV0VSX1NDSEVNRSwgQ0FURUdPUklFUy5DT0xPUkJSRVdFUik7XG5jb25zdCBEM19DT0xPUl9QQUxFVFRFUyA9IGJ1aWxkUGFsZXR0ZUJ5U2NoZW1lR3JvdXBzKEQzX0NPTE9SX0NIUk9NQVRJQ19TQ0hFTUUsIENBVEVHT1JJRVMuRDMpO1xuY29uc3QgQlJBTkRFRF9QQUxFVFRFUzogQ29sb3JQYWxldHRlW10gPSBbXG4gIFViZXJWaXpEaXZlcmdpbmcsXG4gIFViZXJWaXpTZXF1ZW50aWFsLFxuICBVYmVyUG9vbCxcbiAgSWNlQW5kRmlyZSxcbiAgR2xvYmFsV2FybWluZyxcbiAgU3VucmlzZSxcbiAgT2NlYW5HcmVlbixcbiAgUGlua1dpbmUsXG4gIFB1cnBsZUJsdWVZZWxsb3csXG4gIFZpb3ZldE9jZWFuLFxuICBTdW1tZXJTa3ksXG4gIFViZXJWaXpRdWFsaXRhdGl2ZSxcbiAgVG9sQnJpZ2h0LFxuICBUb2xWaWJyYW50LFxuICBUb2xNdXRlZCxcbiAgVG9sTWVkaXVtQ29udHJhc3QsXG4gIFRvbExpZ2h0LFxuICBPa2FiZUl0byxcbiAgRlNRQnJhbmQsXG4gIEZTUVdhcm1Ub25lLFxuICBGU1FDb29sVG9uZVxuXVxuICAubWFwKHJlY2lwZSA9PlxuICAgIHJlY2lwZS50eXBlID09PSBQQUxFVFRFX1RZUEVTLlFVQSA/IGJ1aWxkQ2F0ZWdvcmljYWxQYWxldHRlKHJlY2lwZSkgOiBidWlsZEN1c3RvbVBhbGV0dGUocmVjaXBlKVxuICApXG4gIC5maWx0ZXIoQm9vbGVhbikgYXMgQ29sb3JQYWxldHRlW107XG5cbmV4cG9ydCBjb25zdCBLRVBMRVJfQ09MT1JfUEFMRVRURVM6IENvbG9yUGFsZXR0ZVtdID0gW1xuICAuLi5CUkFOREVEX1BBTEVUVEVTLFxuICAuLi5DT0xPUkJSRVdFUl9QQUxFVFRFUyxcbiAgLi4uRDNfQ09MT1JfUEFMRVRURVNcbl07XG5cbi8qKlxuICogY3JlYXRlIGNvbG9yIHJhbmdlIGZyb20gcGFsZXR0ZSwgd2l0aCBzdGVwcyBhbmQgcmV2ZXJzZWQgYXMgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvclBhbGV0dGVUb0NvbG9yUmFuZ2UoXG4gIGNvbG9yUGFsZXR0ZTogQ29sb3JQYWxldHRlLFxuICBjb2xvckNvbmZpZzoge1xuICAgIHJldmVyc2VkOiBib29sZWFuO1xuICAgIHN0ZXBzOiBudW1iZXI7XG4gIH1cbik6IE1pbmlDb2xvclJhbmdlIHtcbiAgY29uc3Qge3N0ZXBzLCByZXZlcnNlZH0gPSBjb2xvckNvbmZpZztcbiAgY29uc3QgY29sb3JzID0gY29sb3JQYWxldHRlLmNvbG9ycyhzdGVwcykuc2xpY2UoKTtcbiAgaWYgKHJldmVyc2VkKSB7XG4gICAgY29sb3JzLnJldmVyc2UoKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogY29sb3JQYWxldHRlLm5hbWUsXG4gICAgdHlwZTogY29sb3JQYWxldHRlLnR5cGUsXG4gICAgY2F0ZWdvcnk6IGNvbG9yUGFsZXR0ZS5jYXRlZ29yeSxcbiAgICBjb2xvcnMsXG4gICAgLi4uKHJldmVyc2VkID8ge3JldmVyc2VkfSA6IHt9KVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsZ0JBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFNBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNB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