css-to-tailwind-react 0.2.2 → 0.3.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.
@@ -39,9 +39,12 @@ export declare class CSSParser {
39
39
  private mapper;
40
40
  private breakpoints;
41
41
  private sourceOrderCounter;
42
+ private variableRegistry;
42
43
  constructor(mapper: TailwindMapper, screens?: Record<string, string | [string, string]>);
43
44
  private resetSourceOrder;
44
45
  private getNextSourceOrder;
46
+ private collectVariables;
47
+ private resolveDeclarationValue;
45
48
  private convertDeclarations;
46
49
  private processSimpleRule;
47
50
  private processDescendantRule;
package/dist/cssParser.js CHANGED
@@ -12,6 +12,7 @@ const pseudoSelectorResolver_1 = require("./utils/pseudoSelectorResolver");
12
12
  const descendantSelectorResolver_1 = require("./utils/descendantSelectorResolver");
13
13
  const variantAssembler_1 = require("./utils/variantAssembler");
14
14
  const specificityCalculator_1 = require("./utils/specificityCalculator");
15
+ const variableRegistry_1 = require("./utils/variableRegistry");
15
16
  class CSSParser {
16
17
  constructor(mapper, screens) {
17
18
  this.sourceOrderCounter = 0;
@@ -19,22 +20,91 @@ class CSSParser {
19
20
  this.breakpoints = screens
20
21
  ? (0, breakpointResolver_1.resolveBreakpointsFromConfig)(screens)
21
22
  : (0, breakpointResolver_1.getBreakpoints)();
23
+ this.variableRegistry = new variableRegistry_1.VariableRegistry();
22
24
  }
23
25
  resetSourceOrder() {
24
26
  this.sourceOrderCounter = 0;
27
+ this.variableRegistry.clear();
25
28
  }
26
29
  getNextSourceOrder() {
27
30
  return ++this.sourceOrderCounter;
28
31
  }
29
- convertDeclarations(declarations, specificity, sourceOrder) {
32
+ collectVariables(node, additionalVariants = []) {
33
+ let sourceOrder = 0;
34
+ node.walkRules((rule) => {
35
+ const selector = rule.selector;
36
+ const isRootSelector = selector === ':root';
37
+ let scope;
38
+ let specificity;
39
+ if (isRootSelector) {
40
+ scope = (0, variableRegistry_1.createGlobalScope)();
41
+ specificity = { inline: 0, id: 0, class: 0, element: 0 };
42
+ }
43
+ else {
44
+ const parsed = (0, descendantSelectorResolver_1.parseDescendantSelector)(selector);
45
+ if (parsed.isComplex) {
46
+ return;
47
+ }
48
+ if (parsed.parent) {
49
+ scope = (0, variableRegistry_1.createSelectorScope)(selector, parsed.parent.type);
50
+ specificity = (0, specificityCalculator_1.calculateDescendantSpecificity)(parsed.parent.type, parsed.parent.name, parsed.target.type, parsed.target.name);
51
+ }
52
+ else {
53
+ const selectorType = selector.startsWith('.') ? 'class' : 'element';
54
+ scope = (0, variableRegistry_1.createSelectorScope)(selector, selectorType);
55
+ specificity = (0, specificityCalculator_1.calculateSelectorSpecificity)(selector);
56
+ }
57
+ }
58
+ rule.walkDecls((decl) => {
59
+ if (!(0, variableRegistry_1.isCssVariable)(decl.prop)) {
60
+ return;
61
+ }
62
+ const varDef = {
63
+ name: decl.prop,
64
+ value: decl.value,
65
+ scope,
66
+ specificity,
67
+ sourceOrder: ++sourceOrder,
68
+ variants: additionalVariants
69
+ };
70
+ this.variableRegistry.register(varDef);
71
+ logger_1.logger.verbose(`Registered CSS variable: ${decl.prop} = ${decl.value} (scope: ${scope.type})`);
72
+ });
73
+ });
74
+ }
75
+ resolveDeclarationValue(value, selector, specificity, variants) {
76
+ if (!(0, variableRegistry_1.isVarExpression)(value)) {
77
+ return { resolvedValue: value, hasUnresolved: false };
78
+ }
79
+ const context = {
80
+ selector,
81
+ specificity,
82
+ variants
83
+ };
84
+ const result = this.variableRegistry.resolveValue(value, context);
85
+ return { resolvedValue: result.value, hasUnresolved: result.hasUnresolved };
86
+ }
87
+ convertDeclarations(declarations, specificity, sourceOrder, selector = '', variants = []) {
30
88
  const conversionResults = [];
31
89
  const conversionWarnings = [];
32
90
  declarations.forEach(decl => {
33
- const result = this.mapper.convertProperty(decl.property, decl.value);
91
+ const valueToConvert = this.resolveDeclarationValue(decl.value, selector, specificity, variants);
92
+ if (valueToConvert.hasUnresolved) {
93
+ conversionResults.push({
94
+ declaration: decl,
95
+ converted: false,
96
+ className: null,
97
+ resolvedValue: valueToConvert.resolvedValue
98
+ });
99
+ conversionWarnings.push(`Could not fully resolve var() in: ${decl.property}: ${decl.value}`);
100
+ return;
101
+ }
102
+ const result = this.mapper.convertProperty(decl.property, valueToConvert.resolvedValue);
34
103
  conversionResults.push({
35
104
  declaration: decl,
36
105
  converted: !result.skipped && result.className !== null,
37
- className: result.className
106
+ className: result.className,
107
+ resolvedValue: valueToConvert.resolvedValue
38
108
  });
39
109
  if (result.skipped && result.reason) {
40
110
  conversionWarnings.push(result.reason);
@@ -87,9 +157,9 @@ class CSSParser {
87
157
  class: specificity.class + pseudoCount,
88
158
  element: specificity.element
89
159
  };
90
- const { utilities, conversionResults, conversionWarnings } = this.convertDeclarations(declarations, specificityWithPseudo, sourceOrder);
91
160
  const pseudoVariants = parsed.pseudos || [];
92
161
  const allVariants = (0, variantAssembler_1.normalizeVariantOrder)([...pseudoVariants, ...additionalVariants]);
162
+ const { utilities, conversionResults, conversionWarnings } = this.convertDeclarations(declarations, specificityWithPseudo, sourceOrder, selector, allVariants);
93
163
  const utilitiesForSelector = utilities.map(u => ({
94
164
  ...u,
95
165
  variants: allVariants
@@ -139,7 +209,7 @@ class CSSParser {
139
209
  }
140
210
  const sourceOrder = this.getNextSourceOrder();
141
211
  const specificity = (0, specificityCalculator_1.calculateDescendantSpecificity)(parsed.parent.type, parsed.parent.name, parsed.target.type, parsed.target.name);
142
- const { utilities, conversionResults, conversionWarnings } = this.convertDeclarations(declarations, specificity, sourceOrder);
212
+ const { utilities, conversionResults, conversionWarnings } = this.convertDeclarations(declarations, specificity, sourceOrder, selector, additionalVariants);
143
213
  const utilitiesWithVariants = utilities.map(u => ({
144
214
  ...u,
145
215
  variants: (0, variantAssembler_1.normalizeVariantOrder)([...u.variants, ...additionalVariants])
@@ -175,6 +245,7 @@ class CSSParser {
175
245
  parser: postcss_safe_parser_1.default,
176
246
  from: filePath
177
247
  }).then(result => result.root);
248
+ this.collectVariables(root, []);
178
249
  root.walkAtRules((atRule) => {
179
250
  if (atRule.name !== 'media') {
180
251
  return;
@@ -185,6 +256,7 @@ class CSSParser {
185
256
  return;
186
257
  }
187
258
  const responsiveVariant = mediaResult.breakpoint;
259
+ this.collectVariables(atRule, [responsiveVariant]);
188
260
  const nestedRules = [];
189
261
  atRule.walkRules((rule) => {
190
262
  nestedRules.push(rule);
@@ -410,4 +482,4 @@ class CSSParser {
410
482
  }
411
483
  }
412
484
  exports.CSSParser = CSSParser;
413
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nzc1BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBbUU7QUFDbkUsOEVBQTZDO0FBRTdDLDJDQUF3QztBQUN4QyxtRUFLb0M7QUFDcEMsMkVBSXdDO0FBQ3hDLG1GQU00QztBQUM1QywrREFNa0M7QUFDbEMseUVBS3VDO0FBMkN2QyxNQUFhLFNBQVM7SUFLcEIsWUFBWSxNQUFzQixFQUFFLE9BQW1EO1FBRi9FLHVCQUFrQixHQUFXLENBQUMsQ0FBQztRQUdyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU87WUFDeEIsQ0FBQyxDQUFDLElBQUEsaURBQTRCLEVBQUMsT0FBTyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxJQUFBLG1DQUFjLEdBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsWUFBMkIsRUFDM0IsV0FBd0IsRUFDeEIsV0FBbUI7UUFNbkIsTUFBTSxpQkFBaUIsR0FJbEIsRUFBRSxDQUFDO1FBQ1IsTUFBTSxrQkFBa0IsR0FBYSxFQUFFLENBQUM7UUFFeEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RSxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixTQUFTLEVBQUUsQ0FBQyxNQUFNLENB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RCw4QkFpZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBvc3Rjc3MsIHsgUm9vdCwgUnVsZSwgRGVjbGFyYXRpb24sIEF0UnVsZSB9IGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHNhZmVQYXJzZXIgZnJvbSAncG9zdGNzcy1zYWZlLXBhcnNlcic7XG5pbXBvcnQgeyBUYWlsd2luZE1hcHBlciwgQ1NTUHJvcGVydHkgfSBmcm9tICcuL3RhaWx3aW5kTWFwcGVyJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IFxuICBCcmVha3BvaW50LCBcbiAgZ2V0QnJlYWtwb2ludHMsIFxuICByZXNvbHZlQnJlYWtwb2ludHNGcm9tQ29uZmlnLFxuICBwcm9jZXNzTWVkaWFRdWVyeSBcbn0gZnJvbSAnLi91dGlscy9icmVha3BvaW50UmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1BzZXVkb1NlbGVjdG9yLFxuICBwYXJzZU11bHRpcGxlU2VsZWN0b3JzLFxuICBQYXJzZWRTZWxlY3RvclxufSBmcm9tICcuL3V0aWxzL3BzZXVkb1NlbGVjdG9yUmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgcGFyc2VEZXNjZW5kYW50U2VsZWN0b3IsXG4gIHByb2Nlc3NEZXNjZW5kYW50U2VsZWN0b3IsXG4gIERlc2NlbmRhbnRTZWxlY3RvcixcbiAgU2VsZWN0b3JQYXJ0LFxuICBpc0h0bWxFbGVtZW50XG59IGZyb20gJy4vdXRpbHMvZGVzY2VuZGFudFNlbGVjdG9yUmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgYXNzZW1ibGVVdGlsaXR5LFxuICBhc3NlbWJsZVV0aWxpdGllcyxcbiAgTWVyZ2VkVXRpbGl0eSxcbiAgbWVyZ2VVdGlsaXRpZXMsXG4gIG5vcm1hbGl6ZVZhcmlhbnRPcmRlclxufSBmcm9tICcuL3V0aWxzL3ZhcmlhbnRBc3NlbWJsZXInO1xuaW1wb3J0IHtcbiAgU3BlY2lmaWNpdHksXG4gIGNhbGN1bGF0ZVNlbGVjdG9yU3BlY2lmaWNpdHksXG4gIGNhbGN1bGF0ZURlc2NlbmRhbnRTcGVjaWZpY2l0eSxcbiAgWkVST19TUEVDSUZJQ0lUWVxufSBmcm9tICcuL3V0aWxzL3NwZWNpZmljaXR5Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUZvclV0aWxpdHkgfSBmcm9tICcuL3V0aWxzL3Byb3BlcnR5TWFwcGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBVdGlsaXR5V2l0aFZhcmlhbnQge1xuICB2YWx1ZTogc3RyaW5nO1xuICB2YXJpYW50czogc3RyaW5nW107XG4gIGNzc1Byb3BlcnR5OiBzdHJpbmc7XG4gIHNwZWNpZmljaXR5OiBTcGVjaWZpY2l0eTtcbiAgc291cmNlT3JkZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RvclRhcmdldCB7XG4gIHR5cGU6ICdjbGFzcycgfCAnZWxlbWVudCc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU1NSdWxlIHtcbiAgc2VsZWN0b3I6IHN0cmluZztcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXTtcbiAgY29udmVydGVkQ2xhc3Nlczogc3RyaW5nW107XG4gIHV0aWxpdGllczogVXRpbGl0eVdpdGhWYXJpYW50W107XG4gIHNraXBwZWQ6IGJvb2xlYW47XG4gIGZ1bGx5Q29udmVydGVkOiBib29sZWFuO1xuICBwYXJ0aWFsQ29udmVyc2lvbjogYm9vbGVhbjtcbiAgcmVhc29uPzogc3RyaW5nO1xuICBpc0Rlc2NlbmRhbnQ6IGJvb2xlYW47XG4gIHBhcmVudFNlbGVjdG9yPzogU2VsZWN0b3JUYXJnZXQ7XG4gIHRhcmdldFNlbGVjdG9yPzogU2VsZWN0b3JUYXJnZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTUGFyc2VSZXN1bHQge1xuICBjc3M6IHN0cmluZztcbiAgcnVsZXM6IENTU1J1bGVbXTtcbiAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgY2FuRGVsZXRlOiBib29sZWFuO1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTVXNhZ2VNYXAge1xuICBbY2xhc3NOYW1lOiBzdHJpbmddOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIENTU1BhcnNlciB7XG4gIHByaXZhdGUgbWFwcGVyOiBUYWlsd2luZE1hcHBlcjtcbiAgcHJpdmF0ZSBicmVha3BvaW50czogQnJlYWtwb2ludFtdO1xuICBwcml2YXRlIHNvdXJjZU9yZGVyQ291bnRlcjogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihtYXBwZXI6IFRhaWx3aW5kTWFwcGVyLCBzY3JlZW5zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXT4pIHtcbiAgICB0aGlzLm1hcHBlciA9IG1hcHBlcjtcbiAgICB0aGlzLmJyZWFrcG9pbnRzID0gc2NyZWVucyBcbiAgICAgID8gcmVzb2x2ZUJyZWFrcG9pbnRzRnJvbUNvbmZpZyhzY3JlZW5zKSBcbiAgICAgIDogZ2V0QnJlYWtwb2ludHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRTb3VyY2VPcmRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNvdXJjZU9yZGVyQ291bnRlciA9IDA7XG4gIH1cblxuICBwcml2YXRlIGdldE5leHRTb3VyY2VPcmRlcigpOiBudW1iZXIge1xuICAgIHJldHVybiArK3RoaXMuc291cmNlT3JkZXJDb3VudGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGVjbGFyYXRpb25zKFxuICAgIGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXSxcbiAgICBzcGVjaWZpY2l0eTogU3BlY2lmaWNpdHksXG4gICAgc291cmNlT3JkZXI6IG51bWJlclxuICApOiB7XG4gICAgdXRpbGl0aWVzOiBVdGlsaXR5V2l0aFZhcmlhbnRbXTtcbiAgICBjb252ZXJzaW9uUmVzdWx0czogQXJyYXk8eyBkZWNsYXJhdGlvbjogQ1NTUHJvcGVydHk7IGNvbnZlcnRlZDogYm9vbGVhbjsgY2xhc3NOYW1lOiBzdHJpbmcgfCBudWxsIH0+O1xuICAgIGNvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW107XG4gIH0ge1xuICAgIGNvbnN0IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7XG4gICAgICBkZWNsYXJhdGlvbjogQ1NTUHJvcGVydHk7XG4gICAgICBjb252ZXJ0ZWQ6IGJvb2xlYW47XG4gICAgICBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgfT4gPSBbXTtcbiAgICBjb25zdCBjb252ZXJzaW9uV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBkZWNsYXJhdGlvbnMuZm9yRWFjaChkZWNsID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWFwcGVyLmNvbnZlcnRQcm9wZXJ0eShkZWNsLnByb3BlcnR5LCBkZWNsLnZhbHVlKTtcbiAgICAgIGNvbnZlcnNpb25SZXN1bHRzLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbjogZGVjbCxcbiAgICAgICAgY29udmVydGVkOiAhcmVzdWx0LnNraXBwZWQgJiYgcmVzdWx0LmNsYXNzTmFtZSAhPT0gbnVsbCxcbiAgICAgICAgY2xhc3NOYW1lOiByZXN1bHQuY2xhc3NOYW1lXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuc2tpcHBlZCAmJiByZXN1bHQucmVhc29uKSB7XG4gICAgICAgIGNvbnZlcnNpb25XYXJuaW5ncy5wdXNoKHJlc3VsdC5yZWFzb24pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdXRpbGl0aWVzOiBVdGlsaXR5V2l0aFZhcmlhbnRbXSA9IGNvbnZlcnNpb25SZXN1bHRzXG4gICAgICAuZmlsdGVyKHIgPT4gci5jb252ZXJ0ZWQgJiYgci5jbGFzc05hbWUpXG4gICAgICAubWFwKHIgPT4gKHtcbiAgICAgICAgdmFsdWU6IHIuY2xhc3NOYW1lISxcbiAgICAgICAgdmFyaWFudHM6IFtdLFxuICAgICAgICBjc3NQcm9wZXJ0eTogci5kZWNsYXJhdGlvbi5wcm9wZXJ0eSxcbiAgICAgICAgc3BlY2lmaWNpdHksXG4gICAgICAgIHNvdXJjZU9yZGVyXG4gICAgICB9KSk7XG5cbiAgICByZXR1cm4geyB1dGlsaXRpZXMsIGNvbnZlcnNpb25SZXN1bHRzLCBjb252ZXJzaW9uV2FybmluZ3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1NpbXBsZVJ1bGUoXG4gICAgcnVsZTogUnVsZSxcbiAgICBhZGRpdGlvbmFsVmFyaWFudHM6IHN0cmluZ1tdID0gW11cbiAgKTogeyBjc3NSdWxlczogQ1NTUnVsZVtdOyBjb252ZXJzaW9uUmVzdWx0czogQXJyYXk8eyBkZWNsYXJhdGlvbjogQ1NTUHJvcGVydHk7IGNvbnZlcnRlZDogYm9vbGVhbjsgY2xhc3NOYW1lOiBzdHJpbmcgfCBudWxsIH0+W107IGNvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW10gfSB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gcnVsZS5zZWxlY3RvcjtcbiAgICBjb25zdCBwYXJzZWRTZWxlY3RvcnMgPSBwYXJzZU11bHRpcGxlU2VsZWN0b3JzKHNlbGVjdG9yKTtcbiAgICBcbiAgICBjb25zdCB2YWxpZFNlbGVjdG9ycyA9IHBhcnNlZFNlbGVjdG9ycy5maWx0ZXIocyA9PiAhcy5pc0NvbXBsZXggJiYgcy5iYXNlQ2xhc3MpO1xuICAgIFxuICAgIGlmICh2YWxpZFNlbGVjdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXSA9IFtdO1xuXG4gICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgIGlmIChkZWNsLnByb3Auc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWNsLnZhbHVlLmluY2x1ZGVzKCdjYWxjKCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVjbGFyYXRpb25zLnB1c2goe1xuICAgICAgICBwcm9wZXJ0eTogZGVjbC5wcm9wLFxuICAgICAgICB2YWx1ZTogZGVjbC52YWx1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY3NzUnVsZXM6IENTU1J1bGVbXSA9IFtdO1xuICAgIGNvbnN0IGFsbENvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGwgfT5bXSA9IFtdO1xuICAgIGNvbnN0IGFsbENvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgcGFyc2VkIG9mIHZhbGlkU2VsZWN0b3JzKSB7XG4gICAgICBjb25zdCBzb3VyY2VPcmRlciA9IHRoaXMuZ2V0TmV4dFNvdXJjZU9yZGVyKCk7XG4gICAgICBjb25zdCBzcGVjaWZpY2l0eSA9IGNhbGN1bGF0ZVNlbGVjdG9yU3BlY2lmaWNpdHkoc2VsZWN0b3IpO1xuICAgICAgY29uc3QgcHNldWRvQ291bnQgPSAocGFyc2VkLnBzZXVkb3MgfHwgW10pLmxlbmd0aDtcbiAgICAgIGNvbnN0IHNwZWNpZmljaXR5V2l0aFBzZXVkbyA9IHtcbiAgICAgICAgaW5saW5lOiBzcGVjaWZpY2l0eS5pbmxpbmUsXG4gICAgICAgIGlkOiBzcGVjaWZpY2l0eS5pZCxcbiAgICAgICAgY2xhc3M6IHNwZWNpZmljaXR5LmNsYXNzICsgcHNldWRvQ291bnQsXG4gICAgICAgIGVsZW1lbnQ6IHNwZWNpZmljaXR5LmVsZW1lbnRcbiAgICAgIH07XG4gICAgICBcbiAgICAgIGNvbnN0IHsgdXRpbGl0aWVzLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH0gPSB0aGlzLmNvbnZlcnREZWNsYXJhdGlvbnMoXG4gICAgICAgIGRlY2xhcmF0aW9ucyxcbiAgICAgICAgc3BlY2lmaWNpdHlXaXRoUHNldWRvLFxuICAgICAgICBzb3VyY2VPcmRlclxuICAgICAgKTtcbiAgICAgIFxuICAgICAgY29uc3QgcHNldWRvVmFyaWFudHMgPSBwYXJzZWQucHNldWRvcyB8fCBbXTtcbiAgICAgIGNvbnN0IGFsbFZhcmlhbnRzID0gbm9ybWFsaXplVmFyaWFudE9yZGVyKFsuLi5wc2V1ZG9WYXJpYW50cywgLi4uYWRkaXRpb25hbFZhcmlhbnRzXSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHV0aWxpdGllc0ZvclNlbGVjdG9yID0gdXRpbGl0aWVzLm1hcCh1ID0+ICh7XG4gICAgICAgIC4uLnUsXG4gICAgICAgIHZhcmlhbnRzOiBhbGxWYXJpYW50c1xuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCBjb252ZXJ0ZWRDbGFzc2VzID0gYXNzZW1ibGVVdGlsaXRpZXModXRpbGl0aWVzRm9yU2VsZWN0b3IpO1xuXG4gICAgICBjb25zdCBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJzaW9uUmVzdWx0cy5ldmVyeShyID0+IHIuY29udmVydGVkKTtcbiAgICAgIGNvbnN0IHNvbWVEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDA7XG5cbiAgICAgIGNvbnN0IGNzc1J1bGU6IENTU1J1bGUgPSB7XG4gICAgICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICAgICAgY2xhc3NOYW1lOiBwYXJzZWQuYmFzZUNsYXNzLFxuICAgICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnZlcnRlZENsYXNzZXMsXG4gICAgICAgIHV0aWxpdGllczogdXRpbGl0aWVzRm9yU2VsZWN0b3IsXG4gICAgICAgIHNraXBwZWQ6ICFzb21lRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgICBmdWxseUNvbnZlcnRlZDogYWxsRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgICBwYXJ0aWFsQ29udmVyc2lvbjogc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCAmJiAhYWxsRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgICByZWFzb246ICFzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID8gJ05vIGNvbnZlcnRpYmxlIGRlY2xhcmF0aW9ucycgOiB1bmRlZmluZWQsXG4gICAgICAgIGlzRGVzY2VuZGFudDogZmFsc2VcbiAgICAgIH07XG5cbiAgICAgIGNzc1J1bGVzLnB1c2goY3NzUnVsZSk7XG4gICAgICBhbGxDb252ZXJzaW9uUmVzdWx0cy5wdXNoKGNvbnZlcnNpb25SZXN1bHRzKTtcbiAgICAgIGFsbENvbnZlcnNpb25XYXJuaW5ncy5wdXNoKC4uLmNvbnZlcnNpb25XYXJuaW5ncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY3NzUnVsZXMsIGNvbnZlcnNpb25SZXN1bHRzOiBhbGxDb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzOiBhbGxDb252ZXJzaW9uV2FybmluZ3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0Rlc2NlbmRhbnRSdWxlKFxuICAgIHJ1bGU6IFJ1bGUsXG4gICAgYWRkaXRpb25hbFZhcmlhbnRzOiBzdHJpbmdbXSA9IFtdXG4gICk6IHsgY3NzUnVsZTogQ1NTUnVsZTsgY29udmVyc2lvblJlc3VsdHM6IEFycmF5PHsgZGVjbGFyYXRpb246IENTU1Byb3BlcnR5OyBjb252ZXJ0ZWQ6IGJvb2xlYW47IGNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbCB9PjsgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBydWxlLnNlbGVjdG9yO1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICBcbiAgICBpZiAocGFyc2VkLmlzQ29tcGxleCB8fCAhcGFyc2VkLnBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zOiBDU1NQcm9wZXJ0eVtdID0gW107XG5cbiAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgaWYgKGRlY2wucHJvcC5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlY2wudmFsdWUuaW5jbHVkZXMoJ2NhbGMoJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWNsYXJhdGlvbnMucHVzaCh7XG4gICAgICAgIHByb3BlcnR5OiBkZWNsLnByb3AsXG4gICAgICAgIHZhbHVlOiBkZWNsLnZhbHVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VPcmRlciA9IHRoaXMuZ2V0TmV4dFNvdXJjZU9yZGVyKCk7XG4gICAgY29uc3Qgc3BlY2lmaWNpdHkgPSBjYWxjdWxhdGVEZXNjZW5kYW50U3BlY2lmaWNpdHkoXG4gICAgICBwYXJzZWQucGFyZW50LnR5cGUsXG4gICAgICBwYXJzZWQucGFyZW50Lm5hbWUsXG4gICAgICBwYXJzZWQudGFyZ2V0LnR5cGUsXG4gICAgICBwYXJzZWQudGFyZ2V0Lm5hbWVcbiAgICApO1xuXG4gICAgY29uc3QgeyB1dGlsaXRpZXMsIGNvbnZlcnNpb25SZXN1bHRzLCBjb252ZXJzaW9uV2FybmluZ3MgfSA9IHRoaXMuY29udmVydERlY2xhcmF0aW9ucyhcbiAgICAgIGRlY2xhcmF0aW9ucyxcbiAgICAgIHNwZWNpZmljaXR5LFxuICAgICAgc291cmNlT3JkZXJcbiAgICApO1xuICAgIFxuICAgIGNvbnN0IHV0aWxpdGllc1dpdGhWYXJpYW50cyA9IHV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgLi4udSxcbiAgICAgIHZhcmlhbnRzOiBub3JtYWxpemVWYXJpYW50T3JkZXIoWy4uLnUudmFyaWFudHMsIC4uLmFkZGl0aW9uYWxWYXJpYW50c10pXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29udmVydGVkQ2xhc3NlcyA9IGFzc2VtYmxlVXRpbGl0aWVzKHV0aWxpdGllc1dpdGhWYXJpYW50cyk7XG5cbiAgICBjb25zdCBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJzaW9uUmVzdWx0cy5ldmVyeShyID0+IHIuY29udmVydGVkKTtcbiAgICBjb25zdCBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gcGFyc2VkLnBhcmVudC50eXBlID09PSAnY2xhc3MnID8gcGFyc2VkLnBhcmVudC5uYW1lIDogJyc7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHBhcnNlZC50YXJnZXQudHlwZSA9PT0gJ2NsYXNzJyA/IGAuJHtwYXJzZWQudGFyZ2V0Lm5hbWV9YCA6IHBhcnNlZC50YXJnZXQubmFtZTtcblxuICAgIGNvbnN0IGNzc1J1bGU6IENTU1J1bGUgPSB7XG4gICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBjb252ZXJ0ZWRDbGFzc2VzLFxuICAgICAgdXRpbGl0aWVzOiB1dGlsaXRpZXNXaXRoVmFyaWFudHMsXG4gICAgICBza2lwcGVkOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgIGZ1bGx5Q29udmVydGVkOiBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQsXG4gICAgICBwYXJ0aWFsQ29udmVyc2lvbjogc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCAmJiAhYWxsRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgcmVhc29uOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA/ICdObyBjb252ZXJ0aWJsZSBkZWNsYXJhdGlvbnMnIDogdW5kZWZpbmVkLFxuICAgICAgaXNEZXNjZW5kYW50OiB0cnVlLFxuICAgICAgcGFyZW50U2VsZWN0b3I6IHBhcnNlZC5wYXJlbnQsXG4gICAgICB0YXJnZXRTZWxlY3RvcjogcGFyc2VkLnRhcmdldFxuICAgIH07XG5cbiAgICByZXR1cm4geyBjc3NSdWxlLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH07XG4gIH1cblxuICBhc3luYyBwYXJzZShjc3M6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8Q1NTUGFyc2VSZXN1bHQ+IHtcbiAgICB0aGlzLnJlc2V0U291cmNlT3JkZXIoKTtcbiAgICBjb25zdCBydWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByb290ID0gYXdhaXQgcG9zdGNzcygpLnByb2Nlc3MoY3NzLCB7XG4gICAgICAgIHBhcnNlcjogc2FmZVBhcnNlcixcbiAgICAgICAgZnJvbTogZmlsZVBhdGhcbiAgICAgIH0pLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5yb290KTtcblxuICAgICAgcm9vdC53YWxrQXRSdWxlcygoYXRSdWxlKSA9PiB7XG4gICAgICAgIGlmIChhdFJ1bGUubmFtZSAhPT0gJ21lZGlhJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lZGlhUmVzdWx0ID0gcHJvY2Vzc01lZGlhUXVlcnkoYXRSdWxlLnBhcmFtcywgdGhpcy5icmVha3BvaW50cyk7XG5cbiAgICAgICAgaWYgKG1lZGlhUmVzdWx0LnNraXBwZWQpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKG1lZGlhUmVzdWx0LnJlYXNvbiB8fCBgU2tpcHBlZCBtZWRpYSBxdWVyeTogJHthdFJ1bGUucGFyYW1zfWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNpdmVWYXJpYW50ID0gbWVkaWFSZXN1bHQuYnJlYWtwb2ludCE7XG5cbiAgICAgICAgY29uc3QgbmVzdGVkUnVsZXM6IFJ1bGVbXSA9IFtdO1xuICAgICAgICBhdFJ1bGUud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICAgICAgbmVzdGVkUnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIG5lc3RlZFJ1bGVzKSB7XG4gICAgICAgICAgY29uc3QgZGVzY2VuZGFudFJlc3VsdCA9IHRoaXMucHJvY2Vzc0Rlc2NlbmRhbnRSdWxlKHJ1bGUsIFtyZXNwb25zaXZlVmFyaWFudF0pO1xuICAgICAgICAgIGlmIChkZXNjZW5kYW50UmVzdWx0KSB7XG4gICAgICAgICAgICBydWxlcy5wdXNoKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZSk7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLmRlc2NlbmRhbnRSZXN1bHQuY29udmVyc2lvbldhcm5pbmdzKTtcblxuICAgICAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZS5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZS5mdWxseUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgIHJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgZGVzY2VuZGFudCBydWxlICR7cnVsZS5zZWxlY3Rvcn0gaW4gQG1lZGlhIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2YgZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uUmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgaWYgKGNyLmNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gb2YgZGVzY2VuZGFudCBydWxlIGluIEBtZWRpYSDihpIgJHtyZXNwb25zaXZlVmFyaWFudH1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc2ltcGxlUmVzdWx0ID0gdGhpcy5wcm9jZXNzU2ltcGxlUnVsZShydWxlLCBbcmVzcG9uc2l2ZVZhcmlhbnRdKTtcbiAgICAgICAgICBpZiAoc2ltcGxlUmVzdWx0KSB7XG4gICAgICAgICAgICBydWxlcy5wdXNoKC4uLnNpbXBsZVJlc3VsdC5jc3NSdWxlcyk7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnNpbXBsZVJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgICAgICBjb25zdCBhbnlDb252ZXJ0ZWQgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMuc29tZShyID0+IHIuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgIGlmIChhbnlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgY29uc3QgYWxsRnVsbHlDb252ZXJ0ZWQgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMuZXZlcnkociA9PiByLmZ1bGx5Q29udmVydGVkKTtcbiAgICAgICAgICAgICAgaWYgKGFsbEZ1bGx5Q29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gc2ltcGxlUmVzdWx0LmNzc1J1bGVzLm1hcChyID0+IHIuY2xhc3NOYW1lKS5qb2luKCcsIC4nKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVtb3ZlZCBydWxlIC4ke2NsYXNzTmFtZXN9IGluIEBtZWRpYSAobWluLXdpZHRoKSDihpIgJHtyZXNwb25zaXZlVmFyaWFudH1gKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNyIG9mIHNpbXBsZVJlc3VsdC5jb252ZXJzaW9uUmVzdWx0cy5mbGF0KCkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjci5jb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5wcm9wID09PSBjci5kZWNsYXJhdGlvbi5wcm9wZXJ0eSAmJiBkZWNsLnZhbHVlID09PSBjci5kZWNsYXJhdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUGFydGlhbCBjb252ZXJzaW9uIGluIEBtZWRpYSDihpIgJHtyZXNwb25zaXZlVmFyaWFudH1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBTa2lwcGVkIHJ1bGUgaW4gQG1lZGlhOiAke3J1bGUuc2VsZWN0b3J9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF0UnVsZS5ub2RlcyAmJiBhdFJ1bGUubm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYXRSdWxlLnJlbW92ZSgpO1xuICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZW1vdmVkIGVtcHR5IEBtZWRpYSBydWxlYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByb290LndhbGtSdWxlcygocnVsZSkgPT4ge1xuICAgICAgICBpZiAocnVsZS5wYXJlbnQgJiYgcnVsZS5wYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXNjZW5kYW50UmVzdWx0ID0gdGhpcy5wcm9jZXNzRGVzY2VuZGFudFJ1bGUocnVsZSk7XG4gICAgICAgIGlmIChkZXNjZW5kYW50UmVzdWx0KSB7XG4gICAgICAgICAgcnVsZXMucHVzaChkZXNjZW5kYW50UmVzdWx0LmNzc1J1bGUpO1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4uZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZS5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmZ1bGx5Q29udmVydGVkKSB7XG4gICAgICAgICAgICAgIHJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZW1vdmVkIGRlc2NlbmRhbnQgcnVsZSAke3J1bGUuc2VsZWN0b3J9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNyIG9mIGRlc2NlbmRhbnRSZXN1bHQuY29udmVyc2lvblJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5wcm9wID09PSBjci5kZWNsYXJhdGlvbi5wcm9wZXJ0eSAmJiBkZWNsLnZhbHVlID09PSBjci5kZWNsYXJhdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUGFydGlhbCBjb252ZXJzaW9uIG9mIGRlc2NlbmRhbnQgcnVsZWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaW1wbGVSZXN1bHQgPSB0aGlzLnByb2Nlc3NTaW1wbGVSdWxlKHJ1bGUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFzaW1wbGVSZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NlbmRhbnRTZWxlY3RvcihydWxlLnNlbGVjdG9yKTtcbiAgICAgICAgICBpZiAocGFyc2VkLmlzQ29tcGxleCkge1xuICAgICAgICAgICAgd2FybmluZ3MucHVzaChwYXJzZWQucmVhc29uIHx8IGBTa2lwcGVkIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBTa2lwcGluZyBjb21wbGV4IHNlbGVjdG9yOiAke3J1bGUuc2VsZWN0b3J9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFNlbGVjdG9ycyA9IHBhcnNlTXVsdGlwbGVTZWxlY3RvcnMocnVsZS5zZWxlY3Rvcik7XG4gICAgICAgICAgICBjb25zdCBhbGxDb21wbGV4ID0gcGFyc2VkU2VsZWN0b3JzLmV2ZXJ5KHMgPT4gcy5pc0NvbXBsZXgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoYWxsQ29tcGxleCkge1xuICAgICAgICAgICAgICBjb25zdCByZWFzb25zID0gcGFyc2VkU2VsZWN0b3JzLm1hcChzID0+IHMucmVhc29uKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4ucmVhc29ucyBhcyBzdHJpbmdbXSk7XG4gICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBTa2lwcGluZyBjb21wbGV4IHNlbGVjdG9yOiAke3J1bGUuc2VsZWN0b3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bGVzLnB1c2goLi4uc2ltcGxlUmVzdWx0LmNzc1J1bGVzKTtcbiAgICAgICAgd2FybmluZ3MucHVzaCguLi5zaW1wbGVSZXN1bHQuY29udmVyc2lvbldhcm5pbmdzKTtcblxuICAgICAgICBjb25zdCBhbnlDb252ZXJ0ZWQgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMuc29tZShyID0+IHIuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwKTtcbiAgICAgICAgaWYgKGFueUNvbnZlcnRlZCkge1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgY29uc3QgYWxsRnVsbHlDb252ZXJ0ZWQgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMuZXZlcnkociA9PiByLmZ1bGx5Q29udmVydGVkKTtcbiAgICAgICAgICBpZiAoYWxsRnVsbHlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgIHJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gc2ltcGxlUmVzdWx0LmNzc1J1bGVzLm1hcChyID0+IHIuY2xhc3NOYW1lKS5qb2luKCcsIC4nKTtcbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZW1vdmVkIHJ1bGUgLiR7Y2xhc3NOYW1lc30gKGFsbCBkZWNsYXJhdGlvbnMgY29udmVydGVkKWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNyIG9mIHNpbXBsZVJlc3VsdC5jb252ZXJzaW9uUmVzdWx0cy5mbGF0KCkpIHtcbiAgICAgICAgICAgICAgaWYgKGNyLmNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGVjbC5wcm9wID09PSBjci5kZWNsYXJhdGlvbi5wcm9wZXJ0eSAmJiBkZWNsLnZhbHVlID09PSBjci5kZWNsYXJhdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBkZWNsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUGFydGlhbCBjb252ZXJzaW9uIG9mIHJ1bGVgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByb290LndhbGtBdFJ1bGVzKChhdFJ1bGUpID0+IHtcbiAgICAgICAgaWYgKGF0UnVsZS5ub2RlcyAmJiBhdFJ1bGUubm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYXRSdWxlLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2FuRGVsZXRlID0gcm9vdC5ub2Rlcy5sZW5ndGggPT09IDA7XG4gICAgICBjb25zdCBuZXdDc3MgPSByb290LnRvU3RyaW5nKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNzczogbmV3Q3NzLFxuICAgICAgICBydWxlcyxcbiAgICAgICAgaGFzQ2hhbmdlcyxcbiAgICAgICAgY2FuRGVsZXRlLFxuICAgICAgICB3YXJuaW5nc1xuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBwYXJzZSBDU1MgJHtmaWxlUGF0aH06YCwgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDU1MgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VJbnRlcm5hbFN0eWxlKGh0bWw6IHN0cmluZyk6IHsgXG4gICAgc3R5bGVzOiBBcnJheTx7IGNvbnRlbnQ6IHN0cmluZzsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfT47XG4gICAgd2FybmluZ3M6IHN0cmluZ1tdO1xuICB9IHtcbiAgICBjb25zdCBzdHlsZXM6IEFycmF5PHsgY29udGVudDogc3RyaW5nOyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PiA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgY29uc3Qgc3R5bGVSZWdleCA9IC88c3R5bGVbXj5dKj4oW1xcc1xcU10qPyk8XFwvc3R5bGU+L2dpO1xuICAgIGxldCBtYXRjaDtcblxuICAgIHdoaWxlICgobWF0Y2ggPSBzdHlsZVJlZ2V4LmV4ZWMoaHRtbCkpICE9PSBudWxsKSB7XG4gICAgICBzdHlsZXMucHVzaCh7XG4gICAgICAgIGNvbnRlbnQ6IG1hdGNoWzFdLnRyaW0oKSxcbiAgICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgICBlbmQ6IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdHlsZXMsIHdhcm5pbmdzIH07XG4gIH1cblxuICBhc3luYyBwYXJzZUludGVybmFsQ1NTKGh0bWw6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8e1xuICAgIGh0bWw6IHN0cmluZztcbiAgICBydWxlczogQ1NTUnVsZVtdO1xuICAgIGhhc0NoYW5nZXM6IGJvb2xlYW47XG4gICAgd2FybmluZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgY29uc3QgYWxsUnVsZXM6IENTU1J1bGVbXSA9IFtdO1xuICAgIGNvbnN0IGFsbFdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBtb2RpZmllZEh0bWwgPSBodG1sO1xuICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICBjb25zdCB7IHN0eWxlcyB9ID0gdGhpcy5wYXJzZUludGVybmFsU3R5bGUoaHRtbCk7XG5cbiAgICBmb3IgKGxldCBpID0gc3R5bGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IHN0eWxlc1tpXTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wYXJzZShzdHlsZS5jb250ZW50LCBmaWxlUGF0aCk7XG4gICAgICAgIFxuICAgICAgICBhbGxSdWxlcy5wdXNoKC4uLnJlc3VsdC5ydWxlcyk7XG4gICAgICAgIGFsbFdhcm5pbmdzLnB1c2goLi4ucmVzdWx0Lndhcm5pbmdzKTtcblxuICAgICAgICBpZiAocmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuY2FuRGVsZXRlIHx8IHJlc3VsdC5jc3MudHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgbW9kaWZpZWRIdG1sID0gbW9kaWZpZWRIdG1sLnNsaWNlKDAsIHN0eWxlLnN0YXJ0KSArIG1vZGlmaWVkSHRtbC5zbGljZShzdHlsZS5lbmQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmUgPSBtb2RpZmllZEh0bWwuc2xpY2UoMCwgc3R5bGUuc3RhcnQpO1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBtb2RpZmllZEh0bWwuc2xpY2Uoc3R5bGUuZW5kKTtcbiAgICAgICAgICAgIGNvbnN0IHRhZ1N0YXJ0ID0gaHRtbC5zbGljZShzdHlsZS5zdGFydCkubWF0Y2goLzxzdHlsZVtePl0qPi8pPy5bMF0gfHwgJzxzdHlsZT4nO1xuICAgICAgICAgICAgY29uc3QgdGFnRW5kID0gJzwvc3R5bGU+JztcbiAgICAgICAgICAgIG1vZGlmaWVkSHRtbCA9IGJlZm9yZSArIHRhZ1N0YXJ0ICsgJ1xcbicgKyByZXN1bHQuY3NzICsgJ1xcbicgKyB0YWdFbmQgKyBhZnRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gcGFyc2UgaW50ZXJuYWwgc3R5bGUgYmxvY2s6ICR7ZXJyb3J9YCk7XG4gICAgICAgIGFsbFdhcm5pbmdzLnB1c2goYEZhaWxlZCB0byBwYXJzZSBpbnRlcm5hbCBzdHlsZTogJHtlcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaHRtbDogbW9kaWZpZWRIdG1sLFxuICAgICAgcnVsZXM6IGFsbFJ1bGVzLFxuICAgICAgaGFzQ2hhbmdlcyxcbiAgICAgIHdhcm5pbmdzOiBhbGxXYXJuaW5nc1xuICAgIH07XG4gIH1cblxuICBleHRyYWN0SW1wb3J0UGF0aHMoY29kZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGltcG9ydHM6IHN0cmluZ1tdID0gW107XG4gICAgXG4gICAgY29uc3QgaW1wb3J0UmVnZXggPSAvaW1wb3J0XFxzK1snXCJdKFteJ1wiXStcXC5jc3MpWydcIl07Py9nO1xuICAgIGxldCBtYXRjaDtcbiAgICBcbiAgICB3aGlsZSAoKG1hdGNoID0gaW1wb3J0UmVnZXguZXhlYyhjb2RlKSkgIT09IG51bGwpIHtcbiAgICAgIGltcG9ydHMucHVzaChtYXRjaFsxXSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWlyZVJlZ2V4ID0gL3JlcXVpcmVcXHMqXFwoXFxzKlsnXCJdKFteJ1wiXStcXC5jc3MpWydcIl1cXHMqXFwpL2c7XG4gICAgd2hpbGUgKChtYXRjaCA9IHJlcXVpcmVSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgICAgaW1wb3J0cy5wdXNoKG1hdGNoWzFdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1wb3J0cztcbiAgfVxufSJdfQ==
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nzc1BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBbUU7QUFDbkUsOEVBQTZDO0FBRTdDLDJDQUF3QztBQUN4QyxtRUFLb0M7QUFDcEMsMkVBSXdDO0FBQ3hDLG1GQU00QztBQUM1QywrREFNa0M7QUFDbEMseUVBS3VDO0FBRXZDLCtEQVNrQztBQTBDbEMsTUFBYSxTQUFTO0lBTXBCLFlBQVksTUFBc0IsRUFBRSxPQUFtRDtRQUgvRSx1QkFBa0IsR0FBVyxDQUFDLENBQUM7UUFJckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPO1lBQ3hCLENBQUMsQ0FBQyxJQUFBLGlEQUE0QixFQUFDLE9BQU8sQ0FBQztZQUN2QyxDQUFDLENBQUMsSUFBQSxtQ0FBYyxHQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksbUNBQWdCLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLElBQW1CLEVBQ25CLHFCQUErQixFQUFFO1FBRWpDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztRQUVwQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQixNQUFNLGNBQWMsR0FBRyxRQUFRLEtBQUssT0FBTyxDQUFDO1lBRTVDLElBQUksS0FBb0IsQ0FBQztZ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akIsQ0FBQztDQUNGO0FBL21CRCw4QkErbUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBvc3Rjc3MsIHsgUm9vdCwgUnVsZSwgRGVjbGFyYXRpb24sIEF0UnVsZSB9IGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHNhZmVQYXJzZXIgZnJvbSAncG9zdGNzcy1zYWZlLXBhcnNlcic7XG5pbXBvcnQgeyBUYWlsd2luZE1hcHBlciwgQ1NTUHJvcGVydHkgfSBmcm9tICcuL3RhaWx3aW5kTWFwcGVyJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IFxuICBCcmVha3BvaW50LCBcbiAgZ2V0QnJlYWtwb2ludHMsIFxuICByZXNvbHZlQnJlYWtwb2ludHNGcm9tQ29uZmlnLFxuICBwcm9jZXNzTWVkaWFRdWVyeSBcbn0gZnJvbSAnLi91dGlscy9icmVha3BvaW50UmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1BzZXVkb1NlbGVjdG9yLFxuICBwYXJzZU11bHRpcGxlU2VsZWN0b3JzLFxuICBQYXJzZWRTZWxlY3RvclxufSBmcm9tICcuL3V0aWxzL3BzZXVkb1NlbGVjdG9yUmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgcGFyc2VEZXNjZW5kYW50U2VsZWN0b3IsXG4gIHByb2Nlc3NEZXNjZW5kYW50U2VsZWN0b3IsXG4gIERlc2NlbmRhbnRTZWxlY3RvcixcbiAgU2VsZWN0b3JQYXJ0LFxuICBpc0h0bWxFbGVtZW50XG59IGZyb20gJy4vdXRpbHMvZGVzY2VuZGFudFNlbGVjdG9yUmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgYXNzZW1ibGVVdGlsaXR5LFxuICBhc3NlbWJsZVV0aWxpdGllcyxcbiAgTWVyZ2VkVXRpbGl0eSxcbiAgbWVyZ2VVdGlsaXRpZXMsXG4gIG5vcm1hbGl6ZVZhcmlhbnRPcmRlclxufSBmcm9tICcuL3V0aWxzL3ZhcmlhbnRBc3NlbWJsZXInO1xuaW1wb3J0IHtcbiAgU3BlY2lmaWNpdHksXG4gIGNhbGN1bGF0ZVNlbGVjdG9yU3BlY2lmaWNpdHksXG4gIGNhbGN1bGF0ZURlc2NlbmRhbnRTcGVjaWZpY2l0eSxcbiAgWkVST19TUEVDSUZJQ0lUWVxufSBmcm9tICcuL3V0aWxzL3NwZWNpZmljaXR5Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUZvclV0aWxpdHkgfSBmcm9tICcuL3V0aWxzL3Byb3BlcnR5TWFwcGVyJztcbmltcG9ydCB7XG4gIFZhcmlhYmxlUmVnaXN0cnksXG4gIFZhcmlhYmxlRGVmaW5pdGlvbixcbiAgVmFyaWFibGVTY29wZSxcbiAgUmVzb2x1dGlvbkNvbnRleHQsXG4gIGlzQ3NzVmFyaWFibGUsXG4gIGlzVmFyRXhwcmVzc2lvbixcbiAgY3JlYXRlR2xvYmFsU2NvcGUsXG4gIGNyZWF0ZVNlbGVjdG9yU2NvcGVcbn0gZnJvbSAnLi91dGlscy92YXJpYWJsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IGludGVyZmFjZSBVdGlsaXR5V2l0aFZhcmlhbnQge1xuICB2YWx1ZTogc3RyaW5nO1xuICB2YXJpYW50czogc3RyaW5nW107XG4gIGNzc1Byb3BlcnR5OiBzdHJpbmc7XG4gIHNwZWNpZmljaXR5OiBTcGVjaWZpY2l0eTtcbiAgc291cmNlT3JkZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RvclRhcmdldCB7XG4gIHR5cGU6ICdjbGFzcycgfCAnZWxlbWVudCc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU1NSdWxlIHtcbiAgc2VsZWN0b3I6IHN0cmluZztcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXTtcbiAgY29udmVydGVkQ2xhc3Nlczogc3RyaW5nW107XG4gIHV0aWxpdGllczogVXRpbGl0eVdpdGhWYXJpYW50W107XG4gIHNraXBwZWQ6IGJvb2xlYW47XG4gIGZ1bGx5Q29udmVydGVkOiBib29sZWFuO1xuICBwYXJ0aWFsQ29udmVyc2lvbjogYm9vbGVhbjtcbiAgcmVhc29uPzogc3RyaW5nO1xuICBpc0Rlc2NlbmRhbnQ6IGJvb2xlYW47XG4gIHBhcmVudFNlbGVjdG9yPzogU2VsZWN0b3JUYXJnZXQ7XG4gIHRhcmdldFNlbGVjdG9yPzogU2VsZWN0b3JUYXJnZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTUGFyc2VSZXN1bHQge1xuICBjc3M6IHN0cmluZztcbiAgcnVsZXM6IENTU1J1bGVbXTtcbiAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgY2FuRGVsZXRlOiBib29sZWFuO1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTVXNhZ2VNYXAge1xuICBbY2xhc3NOYW1lOiBzdHJpbmddOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIENTU1BhcnNlciB7XG4gIHByaXZhdGUgbWFwcGVyOiBUYWlsd2luZE1hcHBlcjtcbiAgcHJpdmF0ZSBicmVha3BvaW50czogQnJlYWtwb2ludFtdO1xuICBwcml2YXRlIHNvdXJjZU9yZGVyQ291bnRlcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSB2YXJpYWJsZVJlZ2lzdHJ5OiBWYXJpYWJsZVJlZ2lzdHJ5O1xuXG4gIGNvbnN0cnVjdG9yKG1hcHBlcjogVGFpbHdpbmRNYXBwZXIsIHNjcmVlbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddPikge1xuICAgIHRoaXMubWFwcGVyID0gbWFwcGVyO1xuICAgIHRoaXMuYnJlYWtwb2ludHMgPSBzY3JlZW5zIFxuICAgICAgPyByZXNvbHZlQnJlYWtwb2ludHNGcm9tQ29uZmlnKHNjcmVlbnMpIFxuICAgICAgOiBnZXRCcmVha3BvaW50cygpO1xuICAgIHRoaXMudmFyaWFibGVSZWdpc3RyeSA9IG5ldyBWYXJpYWJsZVJlZ2lzdHJ5KCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0U291cmNlT3JkZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zb3VyY2VPcmRlckNvdW50ZXIgPSAwO1xuICAgIHRoaXMudmFyaWFibGVSZWdpc3RyeS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROZXh0U291cmNlT3JkZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKyt0aGlzLnNvdXJjZU9yZGVyQ291bnRlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFZhcmlhYmxlcyhcbiAgICBub2RlOiBSb290IHwgQXRSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB2b2lkIHtcbiAgICBsZXQgc291cmNlT3JkZXIgPSAwO1xuICAgIFxuICAgIG5vZGUud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IHJ1bGUuc2VsZWN0b3I7XG4gICAgICBjb25zdCBpc1Jvb3RTZWxlY3RvciA9IHNlbGVjdG9yID09PSAnOnJvb3QnO1xuICAgICAgXG4gICAgICBsZXQgc2NvcGU6IFZhcmlhYmxlU2NvcGU7XG4gICAgICBsZXQgc3BlY2lmaWNpdHk6IFNwZWNpZmljaXR5O1xuICAgICAgXG4gICAgICBpZiAoaXNSb290U2VsZWN0b3IpIHtcbiAgICAgICAgc2NvcGUgPSBjcmVhdGVHbG9iYWxTY29wZSgpO1xuICAgICAgICBzcGVjaWZpY2l0eSA9IHsgaW5saW5lOiAwLCBpZDogMCwgY2xhc3M6IDAsIGVsZW1lbnQ6IDAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgaWYgKHBhcnNlZC5pc0NvbXBsZXgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChwYXJzZWQucGFyZW50KSB7XG4gICAgICAgICAgc2NvcGUgPSBjcmVhdGVTZWxlY3RvclNjb3BlKHNlbGVjdG9yLCBwYXJzZWQucGFyZW50LnR5cGUpO1xuICAgICAgICAgIHNwZWNpZmljaXR5ID0gY2FsY3VsYXRlRGVzY2VuZGFudFNwZWNpZmljaXR5KFxuICAgICAgICAgICAgcGFyc2VkLnBhcmVudC50eXBlLFxuICAgICAgICAgICAgcGFyc2VkLnBhcmVudC5uYW1lLFxuICAgICAgICAgICAgcGFyc2VkLnRhcmdldC50eXBlLFxuICAgICAgICAgICAgcGFyc2VkLnRhcmdldC5uYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RvclR5cGUgPSBzZWxlY3Rvci5zdGFydHNXaXRoKCcuJykgPyAnY2xhc3MnIDogJ2VsZW1lbnQnO1xuICAgICAgICAgIHNjb3BlID0gY3JlYXRlU2VsZWN0b3JTY29wZShzZWxlY3Rvciwgc2VsZWN0b3JUeXBlKTtcbiAgICAgICAgICBzcGVjaWZpY2l0eSA9IGNhbGN1bGF0ZVNlbGVjdG9yU3BlY2lmaWNpdHkoc2VsZWN0b3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgIGlmICghaXNDc3NWYXJpYWJsZShkZWNsLnByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCB2YXJEZWY6IFZhcmlhYmxlRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiBkZWNsLnByb3AsXG4gICAgICAgICAgdmFsdWU6IGRlY2wudmFsdWUsXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgc3BlY2lmaWNpdHksXG4gICAgICAgICAgc291cmNlT3JkZXI6ICsrc291cmNlT3JkZXIsXG4gICAgICAgICAgdmFyaWFudHM6IGFkZGl0aW9uYWxWYXJpYW50c1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy52YXJpYWJsZVJlZ2lzdHJ5LnJlZ2lzdGVyKHZhckRlZik7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZWdpc3RlcmVkIENTUyB2YXJpYWJsZTogJHtkZWNsLnByb3B9ID0gJHtkZWNsLnZhbHVlfSAoc2NvcGU6ICR7c2NvcGUudHlwZX0pYCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURlY2xhcmF0aW9uVmFsdWUoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBzZWxlY3Rvcjogc3RyaW5nLFxuICAgIHNwZWNpZmljaXR5OiBTcGVjaWZpY2l0eSxcbiAgICB2YXJpYW50czogc3RyaW5nW11cbiAgKTogeyByZXNvbHZlZFZhbHVlOiBzdHJpbmc7IGhhc1VucmVzb2x2ZWQ6IGJvb2xlYW4gfSB7XG4gICAgaWYgKCFpc1ZhckV4cHJlc3Npb24odmFsdWUpKSB7XG4gICAgICByZXR1cm4geyByZXNvbHZlZFZhbHVlOiB2YWx1ZSwgaGFzVW5yZXNvbHZlZDogZmFsc2UgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY29udGV4dDogUmVzb2x1dGlvbkNvbnRleHQgPSB7XG4gICAgICBzZWxlY3RvcixcbiAgICAgIHNwZWNpZmljaXR5LFxuICAgICAgdmFyaWFudHNcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudmFyaWFibGVSZWdpc3RyeS5yZXNvbHZlVmFsdWUodmFsdWUsIGNvbnRleHQpO1xuICAgIHJldHVybiB7IHJlc29sdmVkVmFsdWU6IHJlc3VsdC52YWx1ZSwgaGFzVW5yZXNvbHZlZDogcmVzdWx0Lmhhc1VucmVzb2x2ZWQgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERlY2xhcmF0aW9ucyhcbiAgICBkZWNsYXJhdGlvbnM6IENTU1Byb3BlcnR5W10sXG4gICAgc3BlY2lmaWNpdHk6IFNwZWNpZmljaXR5LFxuICAgIHNvdXJjZU9yZGVyOiBudW1iZXIsXG4gICAgc2VsZWN0b3I6IHN0cmluZyA9ICcnLFxuICAgIHZhcmlhbnRzOiBzdHJpbmdbXSA9IFtdXG4gICk6IHtcbiAgICB1dGlsaXRpZXM6IFV0aWxpdHlXaXRoVmFyaWFudFtdO1xuICAgIGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7IHJlc29sdmVkVmFsdWU/OiBzdHJpbmcgfT47XG4gICAgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXTtcbiAgfSB7XG4gICAgY29uc3QgY29udmVyc2lvblJlc3VsdHM6IEFycmF5PHtcbiAgICAgIGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTtcbiAgICAgIGNvbnZlcnRlZDogYm9vbGVhbjtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHJlc29sdmVkVmFsdWU/OiBzdHJpbmc7XG4gICAgfT4gPSBbXTtcbiAgICBjb25zdCBjb252ZXJzaW9uV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBkZWNsYXJhdGlvbnMuZm9yRWFjaChkZWNsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlVG9Db252ZXJ0ID0gdGhpcy5yZXNvbHZlRGVjbGFyYXRpb25WYWx1ZShcbiAgICAgICAgZGVjbC52YWx1ZSxcbiAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgIHNwZWNpZmljaXR5LFxuICAgICAgICB2YXJpYW50c1xuICAgICAgKTtcbiAgICAgIFxuICAgICAgaWYgKHZhbHVlVG9Db252ZXJ0Lmhhc1VucmVzb2x2ZWQpIHtcbiAgICAgICAgY29udmVyc2lvblJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgZGVjbGFyYXRpb246IGRlY2wsXG4gICAgICAgICAgY29udmVydGVkOiBmYWxzZSxcbiAgICAgICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZWRWYWx1ZTogdmFsdWVUb0NvbnZlcnQucmVzb2x2ZWRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29udmVyc2lvbldhcm5pbmdzLnB1c2goYENvdWxkIG5vdCBmdWxseSByZXNvbHZlIHZhcigpIGluOiAke2RlY2wucHJvcGVydHl9OiAke2RlY2wudmFsdWV9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tYXBwZXIuY29udmVydFByb3BlcnR5KGRlY2wucHJvcGVydHksIHZhbHVlVG9Db252ZXJ0LnJlc29sdmVkVmFsdWUpO1xuICAgICAgY29udmVyc2lvblJlc3VsdHMucHVzaCh7XG4gICAgICAgIGRlY2xhcmF0aW9uOiBkZWNsLFxuICAgICAgICBjb252ZXJ0ZWQ6ICFyZXN1bHQuc2tpcHBlZCAmJiByZXN1bHQuY2xhc3NOYW1lICE9PSBudWxsLFxuICAgICAgICBjbGFzc05hbWU6IHJlc3VsdC5jbGFzc05hbWUsXG4gICAgICAgIHJlc29sdmVkVmFsdWU6IHZhbHVlVG9Db252ZXJ0LnJlc29sdmVkVmFsdWVcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5za2lwcGVkICYmIHJlc3VsdC5yZWFzb24pIHtcbiAgICAgICAgY29udmVyc2lvbldhcm5pbmdzLnB1c2gocmVzdWx0LnJlYXNvbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB1dGlsaXRpZXM6IFV0aWxpdHlXaXRoVmFyaWFudFtdID0gY29udmVyc2lvblJlc3VsdHNcbiAgICAgIC5maWx0ZXIociA9PiByLmNvbnZlcnRlZCAmJiByLmNsYXNzTmFtZSlcbiAgICAgIC5tYXAociA9PiAoe1xuICAgICAgICB2YWx1ZTogci5jbGFzc05hbWUhLFxuICAgICAgICB2YXJpYW50czogW10sXG4gICAgICAgIGNzc1Byb3BlcnR5OiByLmRlY2xhcmF0aW9uLnByb3BlcnR5LFxuICAgICAgICBzcGVjaWZpY2l0eSxcbiAgICAgICAgc291cmNlT3JkZXJcbiAgICAgIH0pKTtcblxuICAgIHJldHVybiB7IHV0aWxpdGllcywgY29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5ncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU2ltcGxlUnVsZShcbiAgICBydWxlOiBSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB7IGNzc1J1bGVzOiBDU1NSdWxlW107IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7IHJlc29sdmVkVmFsdWU/OiBzdHJpbmcgfT5bXTsgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBydWxlLnNlbGVjdG9yO1xuICAgIGNvbnN0IHBhcnNlZFNlbGVjdG9ycyA9IHBhcnNlTXVsdGlwbGVTZWxlY3RvcnMoc2VsZWN0b3IpO1xuICAgIFxuICAgIGNvbnN0IHZhbGlkU2VsZWN0b3JzID0gcGFyc2VkU2VsZWN0b3JzLmZpbHRlcihzID0+ICFzLmlzQ29tcGxleCAmJiBzLmJhc2VDbGFzcyk7XG4gICAgXG4gICAgaWYgKHZhbGlkU2VsZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zOiBDU1NQcm9wZXJ0eVtdID0gW107XG5cbiAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgaWYgKGRlY2wucHJvcC5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlY2wudmFsdWUuaW5jbHVkZXMoJ2NhbGMoJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWNsYXJhdGlvbnMucHVzaCh7XG4gICAgICAgIHByb3BlcnR5OiBkZWNsLnByb3AsXG4gICAgICAgIHZhbHVlOiBkZWNsLnZhbHVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjc3NSdWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3QgYWxsQ29udmVyc2lvblJlc3VsdHM6IEFycmF5PHsgZGVjbGFyYXRpb246IENTU1Byb3BlcnR5OyBjb252ZXJ0ZWQ6IGJvb2xlYW47IGNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbDsgcmVzb2x2ZWRWYWx1ZT86IHN0cmluZyB9PltdID0gW107XG4gICAgY29uc3QgYWxsQ29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJzZWQgb2YgdmFsaWRTZWxlY3RvcnMpIHtcbiAgICAgIGNvbnN0IHNvdXJjZU9yZGVyID0gdGhpcy5nZXROZXh0U291cmNlT3JkZXIoKTtcbiAgICAgIGNvbnN0IHNwZWNpZmljaXR5ID0gY2FsY3VsYXRlU2VsZWN0b3JTcGVjaWZpY2l0eShzZWxlY3Rvcik7XG4gICAgICBjb25zdCBwc2V1ZG9Db3VudCA9IChwYXJzZWQucHNldWRvcyB8fCBbXSkubGVuZ3RoO1xuICAgICAgY29uc3Qgc3BlY2lmaWNpdHlXaXRoUHNldWRvID0ge1xuICAgICAgICBpbmxpbmU6IHNwZWNpZmljaXR5LmlubGluZSxcbiAgICAgICAgaWQ6IHNwZWNpZmljaXR5LmlkLFxuICAgICAgICBjbGFzczogc3BlY2lmaWNpdHkuY2xhc3MgKyBwc2V1ZG9Db3VudCxcbiAgICAgICAgZWxlbWVudDogc3BlY2lmaWNpdHkuZWxlbWVudFxuICAgICAgfTtcbiAgICAgIFxuICAgICAgY29uc3QgcHNldWRvVmFyaWFudHMgPSBwYXJzZWQucHNldWRvcyB8fCBbXTtcbiAgICAgIGNvbnN0IGFsbFZhcmlhbnRzID0gbm9ybWFsaXplVmFyaWFudE9yZGVyKFsuLi5wc2V1ZG9WYXJpYW50cywgLi4uYWRkaXRpb25hbFZhcmlhbnRzXSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHsgdXRpbGl0aWVzLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH0gPSB0aGlzLmNvbnZlcnREZWNsYXJhdGlvbnMoXG4gICAgICAgIGRlY2xhcmF0aW9ucyxcbiAgICAgICAgc3BlY2lmaWNpdHlXaXRoUHNldWRvLFxuICAgICAgICBzb3VyY2VPcmRlcixcbiAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgIGFsbFZhcmlhbnRzXG4gICAgICApO1xuICAgICAgXG4gICAgICBjb25zdCB1dGlsaXRpZXNGb3JTZWxlY3RvciA9IHV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICB2YXJpYW50czogYWxsVmFyaWFudHNcbiAgICAgIH0pKTtcblxuICAgICAgY29uc3QgY29udmVydGVkQ2xhc3NlcyA9IGFzc2VtYmxlVXRpbGl0aWVzKHV0aWxpdGllc0ZvclNlbGVjdG9yKTtcblxuICAgICAgY29uc3QgYWxsRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVyc2lvblJlc3VsdHMuZXZlcnkociA9PiByLmNvbnZlcnRlZCk7XG4gICAgICBjb25zdCBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwO1xuXG4gICAgICBjb25zdCBjc3NSdWxlOiBDU1NSdWxlID0ge1xuICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICAgIGNsYXNzTmFtZTogcGFyc2VkLmJhc2VDbGFzcyxcbiAgICAgICAgZGVjbGFyYXRpb25zLFxuICAgICAgICBjb252ZXJ0ZWRDbGFzc2VzLFxuICAgICAgICB1dGlsaXRpZXM6IHV0aWxpdGllc0ZvclNlbGVjdG9yLFxuICAgICAgICBza2lwcGVkOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgZnVsbHlDb252ZXJ0ZWQ6IGFsbERlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgcGFydGlhbENvbnZlcnNpb246IHNvbWVEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgJiYgIWFsbERlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgcmVhc29uOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA/ICdObyBjb252ZXJ0aWJsZSBkZWNsYXJhdGlvbnMnIDogdW5kZWZpbmVkLFxuICAgICAgICBpc0Rlc2NlbmRhbnQ6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICBjc3NSdWxlcy5wdXNoKGNzc1J1bGUpO1xuICAgICAgYWxsQ29udmVyc2lvblJlc3VsdHMucHVzaChjb252ZXJzaW9uUmVzdWx0cyk7XG4gICAgICBhbGxDb252ZXJzaW9uV2FybmluZ3MucHVzaCguLi5jb252ZXJzaW9uV2FybmluZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNzc1J1bGVzLCBjb252ZXJzaW9uUmVzdWx0czogYWxsQ29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5nczogYWxsQ29udmVyc2lvbldhcm5pbmdzIH07XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEZXNjZW5kYW50UnVsZShcbiAgICBydWxlOiBSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB7IGNzc1J1bGU6IENTU1J1bGU7IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7IHJlc29sdmVkVmFsdWU/OiBzdHJpbmcgfT47IGNvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW10gfSB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gcnVsZS5zZWxlY3RvcjtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgXG4gICAgaWYgKHBhcnNlZC5pc0NvbXBsZXggfHwgIXBhcnNlZC5wYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXSA9IFtdO1xuXG4gICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgIGlmIChkZWNsLnByb3Auc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWNsLnZhbHVlLmluY2x1ZGVzKCdjYWxjKCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVjbGFyYXRpb25zLnB1c2goe1xuICAgICAgICBwcm9wZXJ0eTogZGVjbC5wcm9wLFxuICAgICAgICB2YWx1ZTogZGVjbC52YWx1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlT3JkZXIgPSB0aGlzLmdldE5leHRTb3VyY2VPcmRlcigpO1xuICAgIGNvbnN0IHNwZWNpZmljaXR5ID0gY2FsY3VsYXRlRGVzY2VuZGFudFNwZWNpZmljaXR5KFxuICAgICAgcGFyc2VkLnBhcmVudC50eXBlLFxuICAgICAgcGFyc2VkLnBhcmVudC5uYW1lLFxuICAgICAgcGFyc2VkLnRhcmdldC50eXBlLFxuICAgICAgcGFyc2VkLnRhcmdldC5uYW1lXG4gICAgKTtcblxuICAgIGNvbnN0IHsgdXRpbGl0aWVzLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH0gPSB0aGlzLmNvbnZlcnREZWNsYXJhdGlvbnMoXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBzcGVjaWZpY2l0eSxcbiAgICAgIHNvdXJjZU9yZGVyLFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBhZGRpdGlvbmFsVmFyaWFudHNcbiAgICApO1xuICAgIFxuICAgIGNvbnN0IHV0aWxpdGllc1dpdGhWYXJpYW50cyA9IHV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgLi4udSxcbiAgICAgIHZhcmlhbnRzOiBub3JtYWxpemVWYXJpYW50T3JkZXIoWy4uLnUudmFyaWFudHMsIC4uLmFkZGl0aW9uYWxWYXJpYW50c10pXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29udmVydGVkQ2xhc3NlcyA9IGFzc2VtYmxlVXRpbGl0aWVzKHV0aWxpdGllc1dpdGhWYXJpYW50cyk7XG5cbiAgICBjb25zdCBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJzaW9uUmVzdWx0cy5ldmVyeShyID0+IHIuY29udmVydGVkKTtcbiAgICBjb25zdCBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gcGFyc2VkLnBhcmVudC50eXBlID09PSAnY2xhc3MnID8gcGFyc2VkLnBhcmVudC5uYW1lIDogJyc7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHBhcnNlZC50YXJnZXQudHlwZSA9PT0gJ2NsYXNzJyA/IGAuJHtwYXJzZWQudGFyZ2V0Lm5hbWV9YCA6IHBhcnNlZC50YXJnZXQubmFtZTtcblxuICAgIGNvbnN0IGNzc1J1bGU6IENTU1J1bGUgPSB7XG4gICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBjb252ZXJ0ZWRDbGFzc2VzLFxuICAgICAgdXRpbGl0aWVzOiB1dGlsaXRpZXNXaXRoVmFyaWFudHMsXG4gICAgICBza2lwcGVkOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgIGZ1bGx5Q29udmVydGVkOiBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQsXG4gICAgICBwYXJ0aWFsQ29udmVyc2lvbjogc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCAmJiAhYWxsRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgcmVhc29uOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA/ICdObyBjb252ZXJ0aWJsZSBkZWNsYXJhdGlvbnMnIDogdW5kZWZpbmVkLFxuICAgICAgaXNEZXNjZW5kYW50OiB0cnVlLFxuICAgICAgcGFyZW50U2VsZWN0b3I6IHBhcnNlZC5wYXJlbnQsXG4gICAgICB0YXJnZXRTZWxlY3RvcjogcGFyc2VkLnRhcmdldFxuICAgIH07XG5cbiAgICByZXR1cm4geyBjc3NSdWxlLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH07XG4gIH1cblxuICBhc3luYyBwYXJzZShjc3M6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8Q1NTUGFyc2VSZXN1bHQ+IHtcbiAgICB0aGlzLnJlc2V0U291cmNlT3JkZXIoKTtcbiAgICBjb25zdCBydWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByb290ID0gYXdhaXQgcG9zdGNzcygpLnByb2Nlc3MoY3NzLCB7XG4gICAgICAgIHBhcnNlcjogc2FmZVBhcnNlcixcbiAgICAgICAgZnJvbTogZmlsZVBhdGhcbiAgICAgIH0pLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5yb290KTtcblxuICAgICAgdGhpcy5jb2xsZWN0VmFyaWFibGVzKHJvb3QsIFtdKTtcblxuICAgICAgcm9vdC53YWxrQXRSdWxlcygoYXRSdWxlKSA9PiB7XG4gICAgICAgIGlmIChhdFJ1bGUubmFtZSAhPT0gJ21lZGlhJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lZGlhUmVzdWx0ID0gcHJvY2Vzc01lZGlhUXVlcnkoYXRSdWxlLnBhcmFtcywgdGhpcy5icmVha3BvaW50cyk7XG5cbiAgICAgICAgaWYgKG1lZGlhUmVzdWx0LnNraXBwZWQpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKG1lZGlhUmVzdWx0LnJlYXNvbiB8fCBgU2tpcHBlZCBtZWRpYSBxdWVyeTogJHthdFJ1bGUucGFyYW1zfWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNpdmVWYXJpYW50ID0gbWVkaWFSZXN1bHQuYnJlYWtwb2ludCE7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNvbGxlY3RWYXJpYWJsZXMoYXRSdWxlLCBbcmVzcG9uc2l2ZVZhcmlhbnRdKTtcblxuICAgICAgICBjb25zdCBuZXN0ZWRSdWxlczogUnVsZVtdID0gW107XG4gICAgICAgIGF0UnVsZS53YWxrUnVsZXMoKHJ1bGUpID0+IHtcbiAgICAgICAgICBuZXN0ZWRSdWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgbmVzdGVkUnVsZXMpIHtcbiAgICAgICAgICBjb25zdCBkZXNjZW5kYW50UmVzdWx0ID0gdGhpcy5wcm9jZXNzRGVzY2VuZGFudFJ1bGUocnVsZSwgW3Jlc3BvbnNpdmVWYXJpYW50XSk7XG4gICAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlKTtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4uZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmZ1bGx5Q29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVtb3ZlZCBkZXNjZW5kYW50IHJ1bGUgJHtydWxlLnNlbGVjdG9yfSBpbiBAbWVkaWEg4oaSICR7cmVzcG9uc2l2ZVZhcmlhbnR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjciBvZiBkZXNjZW5kYW50UmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wucHJvcCA9PT0gY3IuZGVjbGFyYXRpb24ucHJvcGVydHkgJiYgZGVjbC52YWx1ZSA9PT0gY3IuZGVjbGFyYXRpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFBhcnRpYWwgY29udmVyc2lvbiBvZiBkZXNjZW5kYW50IHJ1bGUgaW4gQG1lZGlhIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzaW1wbGVSZXN1bHQgPSB0aGlzLnByb2Nlc3NTaW1wbGVSdWxlKHJ1bGUsIFtyZXNwb25zaXZlVmFyaWFudF0pO1xuICAgICAgICAgIGlmIChzaW1wbGVSZXN1bHQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goLi4uc2ltcGxlUmVzdWx0LmNzc1J1bGVzKTtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4uc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25XYXJuaW5ncyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFueUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5zb21lKHIgPT4gci5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgaWYgKGFueUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBjb25zdCBhbGxGdWxseUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5ldmVyeShyID0+IHIuZnVsbHlDb252ZXJ0ZWQpO1xuICAgICAgICAgICAgICBpZiAoYWxsRnVsbHlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBydWxlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMubWFwKHIgPT4gci5jbGFzc05hbWUpLmpvaW4oJywgLicpO1xuICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZW1vdmVkIHJ1bGUgLiR7Y2xhc3NOYW1lc30gaW4gQG1lZGlhIChtaW4td2lkdGgpIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2Ygc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzLmZsYXQoKSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGNyLmNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gaW4gQG1lZGlhIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFNraXBwZWQgcnVsZSBpbiBAbWVkaWE6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgZW1wdHkgQG1lZGlhIHJ1bGVgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJvb3Qud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICAgIGlmIChydWxlLnBhcmVudCAmJiBydWxlLnBhcmVudC50eXBlID09PSAnYXRydWxlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRSZXN1bHQgPSB0aGlzLnByb2Nlc3NEZXNjZW5kYW50UnVsZShydWxlKTtcbiAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQpIHtcbiAgICAgICAgICBydWxlcy5wdXNoKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZSk7XG4gICAgICAgICAgd2FybmluZ3MucHVzaCguLi5kZXNjZW5kYW50UmVzdWx0LmNvbnZlcnNpb25XYXJuaW5ncyk7XG5cbiAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChkZXNjZW5kYW50UmVzdWx0LmNzc1J1bGUuZnVsbHlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgZGVzY2VuZGFudCBydWxlICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2YgZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uUmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmIChjci5jb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVjbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gb2YgZGVzY2VuZGFudCBydWxlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpbXBsZVJlc3VsdCA9IHRoaXMucHJvY2Vzc1NpbXBsZVJ1bGUocnVsZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXNpbXBsZVJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yKHJ1bGUuc2VsZWN0b3IpO1xuICAgICAgICAgIGlmIChwYXJzZWQuaXNDb21wbGV4KSB7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKHBhcnNlZC5yZWFzb24gfHwgYFNraXBwZWQgY29tcGxleCBzZWxlY3RvcjogJHtydWxlLnNlbGVjdG9yfWApO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFNraXBwaW5nIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkU2VsZWN0b3JzID0gcGFyc2VNdWx0aXBsZVNlbGVjdG9ycyhydWxlLnNlbGVjdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGFsbENvbXBsZXggPSBwYXJzZWRTZWxlY3RvcnMuZXZlcnkocyA9PiBzLmlzQ29tcGxleCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChhbGxDb21wbGV4KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlYXNvbnMgPSBwYXJzZWRTZWxlY3RvcnMubWFwKHMgPT4gcy5yZWFzb24pLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgd2FybmluZ3MucHVzaCguLi5yZWFzb25zIGFzIHN0cmluZ1tdKTtcbiAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFNraXBwaW5nIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVsZXMucHVzaCguLi5zaW1wbGVSZXN1bHQuY3NzUnVsZXMpO1xuICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnNpbXBsZVJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgIGNvbnN0IGFueUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5zb21lKHIgPT4gci5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApO1xuICAgICAgICBpZiAoYW55Q29udmVydGVkKSB7XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICBjb25zdCBhbGxGdWxseUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5ldmVyeShyID0+IHIuZnVsbHlDb252ZXJ0ZWQpO1xuICAgICAgICAgIGlmIChhbGxGdWxseUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMubWFwKHIgPT4gci5jbGFzc05hbWUpLmpvaW4oJywgLicpO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgcnVsZSAuJHtjbGFzc05hbWVzfSAoYWxsIGRlY2xhcmF0aW9ucyBjb252ZXJ0ZWQpYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2Ygc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzLmZsYXQoKSkge1xuICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gb2YgcnVsZWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJvb3Qud2Fsa0F0UnVsZXMoKGF0UnVsZSkgPT4ge1xuICAgICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjYW5EZWxldGUgPSByb290Lm5vZGVzLmxlbmd0aCA9PT0gMDtcbiAgICAgIGNvbnN0IG5ld0NzcyA9IHJvb3QudG9TdHJpbmcoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3NzOiBuZXdDc3MsXG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBoYXNDaGFuZ2VzLFxuICAgICAgICBjYW5EZWxldGUsXG4gICAgICAgIHdhcm5pbmdzXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIENTUyAke2ZpbGVQYXRofTpgLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENTUyBwYXJzaW5nIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZUludGVybmFsU3R5bGUoaHRtbDogc3RyaW5nKTogeyBcbiAgICBzdHlsZXM6IEFycmF5PHsgY29udGVudDogc3RyaW5nOyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PjtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gIH0ge1xuICAgIGNvbnN0IHN0eWxlczogQXJyYXk8eyBjb250ZW50OiBzdHJpbmc7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+ID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdCBzdHlsZVJlZ2V4ID0gLzxzdHlsZVtePl0qPihbXFxzXFxTXSo/KTxcXC9zdHlsZT4vZ2k7XG4gICAgbGV0IG1hdGNoO1xuXG4gICAgd2hpbGUgKChtYXRjaCA9IHN0eWxlUmVnZXguZXhlYyhodG1sKSkgIT09IG51bGwpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHtcbiAgICAgICAgY29udGVudDogbWF0Y2hbMV0udHJpbSgpLFxuICAgICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICAgIGVuZDogbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7IHN0eWxlcywgd2FybmluZ3MgfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlSW50ZXJuYWxDU1MoaHRtbDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx7XG4gICAgaHRtbDogc3RyaW5nO1xuICAgIHJ1bGVzOiBDU1NSdWxlW107XG4gICAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gIH0+IHtcbiAgICBjb25zdCBhbGxSdWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3QgYWxsV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IG1vZGlmaWVkSHRtbCA9IGh0bWw7XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHsgc3R5bGVzIH0gPSB0aGlzLnBhcnNlSW50ZXJuYWxTdHlsZShodG1sKTtcblxuICAgIGZvciAobGV0IGkgPSBzdHlsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gc3R5bGVzW2ldO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBhcnNlKHN0eWxlLmNvbnRlbnQsIGZpbGVQYXRoKTtcbiAgICAgICAgXG4gICAgICAgIGFsbFJ1bGVzLnB1c2goLi4ucmVzdWx0LnJ1bGVzKTtcbiAgICAgICAgYWxsV2FybmluZ3MucHVzaCguLi5yZXN1bHQud2FybmluZ3MpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHJlc3VsdC5jYW5EZWxldGUgfHwgcmVzdWx0LmNzcy50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICBtb2RpZmllZEh0bWwgPSBtb2RpZmllZEh0bWwuc2xpY2UoMCwgc3R5bGUuc3RhcnQpICsgbW9kaWZpZWRIdG1sLnNsaWNlKHN0eWxlLmVuZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IG1vZGlmaWVkSHRtbC5zbGljZSgwLCBzdHlsZS5zdGFydCk7XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IG1vZGlmaWVkSHRtbC5zbGljZShzdHlsZS5lbmQpO1xuICAgICAgICAgICAgY29uc3QgdGFnU3RhcnQgPSBodG1sLnNsaWNlKHN0eWxlLnN0YXJ0KS5tYXRjaCgvPHN0eWxlW14+XSo+Lyk/LlswXSB8fCAnPHN0eWxlPic7XG4gICAgICAgICAgICBjb25zdCB0YWdFbmQgPSAnPC9zdHlsZT4nO1xuICAgICAgICAgICAgbW9kaWZpZWRIdG1sID0gYmVmb3JlICsgdGFnU3RhcnQgKyAnXFxuJyArIHJlc3VsdC5jc3MgKyAnXFxuJyArIHRhZ0VuZCArIGFmdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBpbnRlcm5hbCBzdHlsZSBibG9jazogJHtlcnJvcn1gKTtcbiAgICAgICAgYWxsV2FybmluZ3MucHVzaChgRmFpbGVkIHRvIHBhcnNlIGludGVybmFsIHN0eWxlOiAke2Vycm9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBodG1sOiBtb2RpZmllZEh0bWwsXG4gICAgICBydWxlczogYWxsUnVsZXMsXG4gICAgICBoYXNDaGFuZ2VzLFxuICAgICAgd2FybmluZ3M6IGFsbFdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG4gIGV4dHJhY3RJbXBvcnRQYXRocyhjb2RlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXTtcbiAgICBcbiAgICBjb25zdCBpbXBvcnRSZWdleCA9IC9pbXBvcnRcXHMrWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXTs/L2c7XG4gICAgbGV0IG1hdGNoO1xuICAgIFxuICAgIHdoaWxlICgobWF0Y2ggPSBpbXBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgICAgaW1wb3J0cy5wdXNoKG1hdGNoWzFdKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1aXJlUmVnZXggPSAvcmVxdWlyZVxccypcXChcXHMqWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXVxccypcXCkvZztcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVxdWlyZVJlZ2V4LmV4ZWMoY29kZSkpICE9PSBudWxsKSB7XG4gICAgICBpbXBvcnRzLnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBvcnRzO1xuICB9XG59Il19
@@ -143,13 +143,6 @@ class TailwindMapper {
143
143
  }
144
144
  convertMargin(prop, value) {
145
145
  const px = this.extractPx(value);
146
- if (px === null) {
147
- return { className: null, skipped: true, reason: `Non-pixel margin value: ${value}` };
148
- }
149
- const spacing = this.pxToSpacing(px);
150
- if (!spacing) {
151
- return { className: null, skipped: true, reason: `No matching spacing for: ${value}` };
152
- }
153
146
  const sideMap = {
154
147
  'margin': 'm',
155
148
  'margin-top': 'mt',
@@ -160,17 +153,20 @@ class TailwindMapper {
160
153
  'margin-y': 'my'
161
154
  };
162
155
  const prefix = sideMap[prop] || 'm';
163
- return { className: `${prefix}-${spacing}`, skipped: false };
164
- }
165
- convertPadding(prop, value) {
166
- const px = this.extractPx(value);
167
156
  if (px === null) {
168
- return { className: null, skipped: true, reason: `Non-pixel padding value: ${value}` };
157
+ if (/^-?\d+(\.\d+)?(px|rem|em)?$/.test(value)) {
158
+ return { className: `${prefix}-[${value}]`, skipped: false };
159
+ }
160
+ return { className: null, skipped: true, reason: `Non-pixel margin value: ${value}` };
169
161
  }
170
162
  const spacing = this.pxToSpacing(px);
171
163
  if (!spacing) {
172
- return { className: null, skipped: true, reason: `No matching spacing for: ${value}` };
164
+ return { className: `${prefix}-[${value}]`, skipped: false };
173
165
  }
166
+ return { className: `${prefix}-${spacing}`, skipped: false };
167
+ }
168
+ convertPadding(prop, value) {
169
+ const px = this.extractPx(value);
174
170
  const sideMap = {
175
171
  'padding': 'p',
176
172
  'padding-top': 'pt',
@@ -181,6 +177,16 @@ class TailwindMapper {
181
177
  'padding-y': 'py'
182
178
  };
183
179
  const prefix = sideMap[prop] || 'p';
180
+ if (px === null) {
181
+ if (/^-?\d+(\.\d+)?(px|rem|em)?$/.test(value)) {
182
+ return { className: `${prefix}-[${value}]`, skipped: false };
183
+ }
184
+ return { className: null, skipped: true, reason: `Non-pixel padding value: ${value}` };
185
+ }
186
+ const spacing = this.pxToSpacing(px);
187
+ if (!spacing) {
188
+ return { className: `${prefix}-[${value}]`, skipped: false };
189
+ }
184
190
  return { className: `${prefix}-${spacing}`, skipped: false };
185
191
  }
186
192
  convertFontWeight(value) {
@@ -223,6 +229,10 @@ class TailwindMapper {
223
229
  if (Math.abs(closest - px) / px < 0.15) {
224
230
  return { className: sizeMap[closest], skipped: false };
225
231
  }
232
+ return { className: `text-[${value}]`, skipped: false };
233
+ }
234
+ if (/^\d+(\.\d+)?(px|rem|em)?$/.test(value)) {
235
+ return { className: `text-[${value}]`, skipped: false };
226
236
  }
227
237
  return { className: null, skipped: true, reason: `Non-standard font-size: ${value}` };
228
238
  }
@@ -425,4 +435,4 @@ class TailwindMapper {
425
435
  }
426
436
  }
427
437
  exports.TailwindMapper = TailwindMapper;
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFpbHdpbmRNYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGFpbHdpbmRNYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQXdDO0FBYXhDLE1BQWEsY0FBYztJQUl6QixZQUFZLE1BQXNCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO1FBRWpELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUMvQyw4REFBOEQ7WUFDOUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1QyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzVDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBRUQsMkJBQTJCO1lBQzNCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFD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Q3RCLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUF5QjtRQUN2QyxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBRTlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXJELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksWUFBWSxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDakUsZUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLFFBQVEsS0FBSyxLQUFLLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdEUsQ0FBQztpQkFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQy9CLGVBQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxRQUFRLEtBQUssS0FBSyxNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBNWZELHdDQTRmQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhaWx3aW5kQ29uZmlnIH0gZnJvbSAnLi91dGlscy9jb25maWcnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi91dGlscy9sb2dnZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIENTU1Byb3BlcnR5IHtcbiAgcHJvcGVydHk6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzaW9uUmVzdWx0IHtcbiAgY2xhc3NOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBza2lwcGVkOiBib29sZWFuO1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWlsd2luZE1hcHBlciB7XG4gIHByaXZhdGUgY29uZmlnOiBUYWlsd2luZENvbmZpZztcbiAgcHJpdmF0ZSBzcGFjaW5nU2NhbGU6IE1hcDxudW1iZXIsIHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBUYWlsd2luZENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuc3BhY2luZ1NjYWxlID0gdGhpcy5idWlsZFNwYWNpbmdTY2FsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNwYWNpbmdTY2FsZSgpOiBNYXA8bnVtYmVyLCBzdHJpbmc+IHtcbiAgICBjb25zdCBzY2FsZSA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG4gICAgY29uc3Qgc3BhY2luZyA9IHRoaXMuY29uZmlnLnRoZW1lPy5zcGFjaW5nIHx8IHt9O1xuXG4gICAgT2JqZWN0LmVudHJpZXMoc3BhY2luZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAvLyBDb252ZXJ0IHJlbSB0byBwaXhlbHMgZm9yIGNvbXBhcmlzb24gKGFzc3VtaW5nIDFyZW0gPSAxNnB4KVxuICAgICAgY29uc3QgcmVtTWF0Y2ggPSB2YWx1ZS5tYXRjaCgvKFtcXGQuXSspcmVtLyk7XG4gICAgICBpZiAocmVtTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcGl4ZWxzID0gcGFyc2VGbG9hdChyZW1NYXRjaFsxXSkgKiAxNjtcbiAgICAgICAgc2NhbGUuc2V0KE1hdGgucm91bmQocGl4ZWxzKSwga2V5KTtcbiAgICAgIH1cblxuICAgICAgLy8gQWxzbyBoYW5kbGUgcGl4ZWwgdmFsdWVzXG4gICAgICBjb25zdCBweE1hdGNoID0gdmFsdWUubWF0Y2goLyhbXFxkLl0rKXB4Lyk7XG4gICAgICBpZiAocHhNYXRjaCkge1xuICAgICAgICBzY2FsZS5zZXQoTWF0aC5yb3VuZChwYXJzZUZsb2F0KHB4TWF0Y2hbMV0pKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIHByaXZhdGUgcHhUb1NwYWNpbmcocHg6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgIC8vIFRyeSBleGFjdCBtYXRjaCBmaXJzdFxuICAgIGlmICh0aGlzLnNwYWNpbmdTY2FsZS5oYXMocHgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcGFjaW5nU2NhbGUuZ2V0KHB4KSE7XG4gICAgfVxuXG4gICAgLy8gRmluZCBjbG9zZXN0IG1hdGNoXG4gICAgbGV0IGNsb3Nlc3RLZXk6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGxldCBjbG9zZXN0RGlmZjogbnVtYmVyID0gSW5maW5pdHk7XG4gICAgXG4gICAgdGhpcy5zcGFjaW5nU2NhbGUuZm9yRWFjaCgoXywga2V5KSA9PiB7XG4gICAgICBjb25zdCBkaWZmID0gTWF0aC5hYnMoa2V5IC0gcHgpO1xuICAgICAgaWYgKGRpZmYgPCBjbG9zZXN0RGlmZikge1xuICAgICAgICBjbG9zZXN0S2V5ID0ga2V5O1xuICAgICAgICBjbG9zZXN0RGlmZiA9IGRpZmY7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBPbmx5IGFjY2VwdCBpZiB3aXRoaW4gcmVhc29uYWJsZSB0b2xlcmFuY2UgKDIwJSlcbiAgICBpZiAoY2xvc2VzdEtleSAhPT0gbnVsbCAmJiBjbG9zZXN0RGlmZiAvIHB4IDwgMC4yKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcGFjaW5nU2NhbGUuZ2V0KGNsb3Nlc3RLZXkpIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RQeCh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3QgcHhNYXRjaCA9IHZhbHVlLm1hdGNoKC9eKFtcXGQuXSspcHgkLyk7XG4gICAgaWYgKHB4TWF0Y2gpIHtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHB4TWF0Y2hbMV0pO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSByZW0gdmFsdWVzXG4gICAgY29uc3QgcmVtTWF0Y2ggPSB2YWx1ZS5tYXRjaCgvXihbXFxkLl0rKXJlbSQvKTtcbiAgICBpZiAocmVtTWF0Y2gpIHtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlbU1hdGNoWzFdKSAqIDE2O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29udmVydFByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBDb252ZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCBub3JtYWxpemVkUHJvcCA9IHByb3BlcnR5LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgbG9nZ2VyLnZlcmJvc2UoYENvbnZlcnRpbmc6ICR7bm9ybWFsaXplZFByb3B9OiAke25vcm1hbGl6ZWRWYWx1ZX1gKTtcblxuICAgIC8vIERpc3BsYXkgcHJvcGVydGllc1xuICAgIGlmIChub3JtYWxpemVkUHJvcCA9PT0gJ2Rpc3BsYXknKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RGlzcGxheShub3JtYWxpemVkVmFsdWUpO1xuICAgIH1cblxuICAgIC8vIFBvc2l0aW9uIHByb3BlcnRpZXNcbiAgICBpZiAobm9ybWFsaXplZFByb3AgPT09ICdwb3NpdGlvbicpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogbm9ybWFsaXplZFZhbHVlLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIC8vIE1hcmdpbiBwcm9wZXJ0aWVzXG4gICAgaWYgKG5vcm1hbGl6ZWRQcm9wLnN0YXJ0c1dpdGgoJ21hcmdpbicpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0TWFyZ2luKG5vcm1hbGl6ZWRQcm9wLCBub3JtYWxpemVkVmFsdWUpO1xuICAgIH1cblxuICAgIC8vIFBhZGRpbmcgcHJvcGVydGllc1xuICAgIGlmIChub3JtYWxpemVkUHJvcC5zdGFydHNXaXRoKCdwYWRkaW5nJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRQYWRkaW5nKG5vcm1hbGl6ZWRQcm9wLCBub3JtYWxpemVkVmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEZvbnQgcHJvcGVydGllc1xuICAgIGlmIChub3JtYWxpemVkUHJvcCA9PT0gJ2ZvbnQtd2VpZ2h0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydEZvbnRXZWlnaHQobm9ybWFsaXplZFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAobm9ybWFsaXplZFByb3AgPT09ICdmb250LXNpemUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0Rm9udFNpemUobm9ybWFsaXplZFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBUZXh0IHByb3BlcnRpZXNcbiAgICBpZiAobm9ybWFsaXplZFByb3AgPT09ICd0ZXh0LWFsaWduJykge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgdGV4dC0ke25vcm1hbGl6ZWRWYWx1ZX1gLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIC8vIEZsZXhib3ggcHJvcGVydGllc1xuICAgIGlmIChub3JtYWxpemVkUHJvcC5zdGFydHNXaXRoKCdmbGV4JykgfHwgXG4gICAgICAgIG5vcm1hbGl6ZWRQcm9wLnN0YXJ0c1dpdGgoJ2p1c3RpZnknKSB8fCBcbiAgICAgICAgbm9ybWFsaXplZFByb3Auc3RhcnRzV2l0aCgnYWxpZ24nKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydEZsZXhib3gobm9ybWFsaXplZFByb3AsIG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gR2FwIHByb3BlcnRpZXNcbiAgICBpZiAobm9ybWFsaXplZFByb3AgPT09ICdnYXAnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0R2FwKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gV2lkdGggYW5kIEhlaWdodFxuICAgIGlmIChub3JtYWxpemVkUHJvcCA9PT0gJ3dpZHRoJykge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFdpZHRoKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRQcm9wID09PSAnaGVpZ2h0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydEhlaWdodChub3JtYWxpemVkVmFsdWUpO1xuICAgIH1cblxuICAgIC8vIENvbG9yc1xuICAgIGlmIChub3JtYWxpemVkUHJvcCA9PT0gJ2JhY2tncm91bmQtY29sb3InKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0QmFja2dyb3VuZENvbG9yKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRQcm9wID09PSAnY29sb3InKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0VGV4dENvbG9yKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQm9yZGVyIHJhZGl1c1xuICAgIGlmIChub3JtYWxpemVkUHJvcCA9PT0gJ2JvcmRlci1yYWRpdXMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0Qm9yZGVyUmFkaXVzKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gVW5zdXBwb3J0ZWQgcHJvcGVydGllc1xuICAgIHJldHVybiB7XG4gICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgICBza2lwcGVkOiB0cnVlLFxuICAgICAgcmVhc29uOiBgVW5zdXBwb3J0ZWQgcHJvcGVydHk6ICR7cHJvcGVydHl9YFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREaXNwbGF5KHZhbHVlOiBzdHJpbmcpOiBDb252ZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCBkaXNwbGF5TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ2ZsZXgnOiAnZmxleCcsXG4gICAgICAnYmxvY2snOiAnYmxvY2snLFxuICAgICAgJ2lubGluZSc6ICdpbmxpbmUnLFxuICAgICAgJ2lubGluZS1ibG9jayc6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgJ2dyaWQnOiAnZ3JpZCcsXG4gICAgICAnbm9uZSc6ICdoaWRkZW4nLFxuICAgICAgJ2NvbnRlbnRzJzogJ2NvbnRlbnRzJyxcbiAgICAgICd0YWJsZSc6ICd0YWJsZScsXG4gICAgICAndGFibGUtY2VsbCc6ICd0YWJsZS1jZWxsJ1xuICAgIH07XG5cbiAgICBpZiAoZGlzcGxheU1hcFt2YWx1ZV0pIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogZGlzcGxheU1hcFt2YWx1ZV0sIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBudWxsLCBza2lwcGVkOiB0cnVlLCByZWFzb246IGBVbmtub3duIGRpc3BsYXkgdmFsdWU6ICR7dmFsdWV9YCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0TWFyZ2luKHByb3A6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IENvbnZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IHB4ID0gdGhpcy5leHRyYWN0UHgodmFsdWUpO1xuICAgIGlmIChweCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBudWxsLCBza2lwcGVkOiB0cnVlLCByZWFzb246IGBOb24tcGl4ZWwgbWFyZ2luIHZhbHVlOiAke3ZhbHVlfWAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5weFRvU3BhY2luZyhweCk7XG4gICAgaWYgKCFzcGFjaW5nKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYE5vIG1hdGNoaW5nIHNwYWNpbmcgZm9yOiAke3ZhbHVlfWAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWRlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ21hcmdpbic6ICdtJyxcbiAgICAgICdtYXJnaW4tdG9wJzogJ210JyxcbiAgICAgICdtYXJnaW4tcmlnaHQnOiAnbXInLFxuICAgICAgJ21hcmdpbi1ib3R0b20nOiAnbWInLFxuICAgICAgJ21hcmdpbi1sZWZ0JzogJ21sJyxcbiAgICAgICdtYXJnaW4teCc6ICdteCcsXG4gICAgICAnbWFyZ2luLXknOiAnbXknXG4gICAgfTtcblxuICAgIGNvbnN0IHByZWZpeCA9IHNpZGVNYXBbcHJvcF0gfHwgJ20nO1xuICAgIHJldHVybiB7IGNsYXNzTmFtZTogYCR7cHJlZml4fS0ke3NwYWNpbmd9YCwgc2tpcHBlZDogZmFsc2UgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFBhZGRpbmcocHJvcDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogQ29udmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcHggPSB0aGlzLmV4dHJhY3RQeCh2YWx1ZSk7XG4gICAgaWYgKHB4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYE5vbi1waXhlbCBwYWRkaW5nIHZhbHVlOiAke3ZhbHVlfWAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5weFRvU3BhY2luZyhweCk7XG4gICAgaWYgKCFzcGFjaW5nKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYE5vIG1hdGNoaW5nIHNwYWNpbmcgZm9yOiAke3ZhbHVlfWAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWRlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3BhZGRpbmcnOiAncCcsXG4gICAgICAncGFkZGluZy10b3AnOiAncHQnLFxuICAgICAgJ3BhZGRpbmctcmlnaHQnOiAncHInLFxuICAgICAgJ3BhZGRpbmctYm90dG9tJzogJ3BiJyxcbiAgICAgICdwYWRkaW5nLWxlZnQnOiAncGwnLFxuICAgICAgJ3BhZGRpbmcteCc6ICdweCcsXG4gICAgICAncGFkZGluZy15JzogJ3B5J1xuICAgIH07XG5cbiAgICBjb25zdCBwcmVmaXggPSBzaWRlTWFwW3Byb3BdIHx8ICdwJztcbiAgICByZXR1cm4geyBjbGFzc05hbWU6IGAke3ByZWZpeH0tJHtzcGFjaW5nfWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRGb250V2VpZ2h0KHZhbHVlOiBzdHJpbmcpOiBDb252ZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCB3ZWlnaHRNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnMTAwJzogJ2ZvbnQtdGhpbicsXG4gICAgICAnMjAwJzogJ2ZvbnQtZXh0cmFsaWdodCcsXG4gICAgICAnMzAwJzogJ2ZvbnQtbGlnaHQnLFxuICAgICAgJzQwMCc6ICdmb250LW5vcm1hbCcsXG4gICAgICAnNTAwJzogJ2ZvbnQtbWVkaXVtJyxcbiAgICAgICc2MDAnOiAnZm9udC1zZW1pYm9sZCcsXG4gICAgICAnNzAwJzogJ2ZvbnQtYm9sZCcsXG4gICAgICAnODAwJzogJ2ZvbnQtZXh0cmFib2xkJyxcbiAgICAgICc5MDAnOiAnZm9udC1ibGFjaycsXG4gICAgICAnbm9ybWFsJzogJ2ZvbnQtbm9ybWFsJyxcbiAgICAgICdib2xkJzogJ2ZvbnQtYm9sZCdcbiAgICB9O1xuXG4gICAgaWYgKHdlaWdodE1hcFt2YWx1ZV0pIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogd2VpZ2h0TWFwW3ZhbHVlXSwgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYFVua25vd24gZm9udC13ZWlnaHQ6ICR7dmFsdWV9YCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0Rm9udFNpemUodmFsdWU6IHN0cmluZyk6IENvbnZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IHB4ID0gdGhpcy5leHRyYWN0UHgodmFsdWUpO1xuICAgIGlmIChweCAhPT0gbnVsbCkge1xuICAgICAgLy8gTWFwIGNvbW1vbiBmb250IHNpemVzXG4gICAgICBjb25zdCBzaXplTWFwOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xuICAgICAgICAxMjogJ3RleHQteHMnLFxuICAgICAgICAxNDogJ3RleHQtc20nLFxuICAgICAgICAxNjogJ3RleHQtYmFzZScsXG4gICAgICAgIDE4OiAndGV4dC1sZycsXG4gICAgICAgIDIwOiAndGV4dC14bCcsXG4gICAgICAgIDI0OiAndGV4dC0yeGwnLFxuICAgICAgICAzMDogJ3RleHQtM3hsJyxcbiAgICAgICAgMzY6ICd0ZXh0LTR4bCcsXG4gICAgICAgIDQ4OiAndGV4dC01eGwnXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjbG9zZXN0ID0gT2JqZWN0LmtleXMoc2l6ZU1hcClcbiAgICAgICAgLm1hcChOdW1iZXIpXG4gICAgICAgIC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IFxuICAgICAgICAgIE1hdGguYWJzKGN1cnIgLSBweCkgPCBNYXRoLmFicyhwcmV2IC0gcHgpID8gY3VyciA6IHByZXZcbiAgICAgICAgKTtcblxuICAgICAgaWYgKE1hdGguYWJzKGNsb3Nlc3QgLSBweCkgLyBweCA8IDAuMTUpIHtcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBzaXplTWFwW2Nsb3Nlc3RdLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGNsYXNzTmFtZTogbnVsbCwgc2tpcHBlZDogdHJ1ZSwgcmVhc29uOiBgTm9uLXN0YW5kYXJkIGZvbnQtc2l6ZTogJHt2YWx1ZX1gIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRGbGV4Ym94KHByb3A6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IENvbnZlcnNpb25SZXN1bHQge1xuICAgIC8vIEZsZXggZGlyZWN0aW9uXG4gICAgaWYgKHByb3AgPT09ICdmbGV4LWRpcmVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGRpck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ3Jvdyc6ICdmbGV4LXJvdycsXG4gICAgICAgICdyb3ctcmV2ZXJzZSc6ICdmbGV4LXJvdy1yZXZlcnNlJyxcbiAgICAgICAgJ2NvbHVtbic6ICdmbGV4LWNvbCcsXG4gICAgICAgICdjb2x1bW4tcmV2ZXJzZSc6ICdmbGV4LWNvbC1yZXZlcnNlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogZGlyTWFwW3ZhbHVlXSB8fCBudWxsLCBza2lwcGVkOiAhZGlyTWFwW3ZhbHVlXSB9O1xuICAgIH1cblxuICAgIC8vIEZsZXggd3JhcFxuICAgIGlmIChwcm9wID09PSAnZmxleC13cmFwJykge1xuICAgICAgY29uc3Qgd3JhcE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ3dyYXAnOiAnZmxleC13cmFwJyxcbiAgICAgICAgJ25vd3JhcCc6ICdmbGV4LW5vd3JhcCcsXG4gICAgICAgICd3cmFwLXJldmVyc2UnOiAnZmxleC13cmFwLXJldmVyc2UnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiB3cmFwTWFwW3ZhbHVlXSB8fCBudWxsLCBza2lwcGVkOiAhd3JhcE1hcFt2YWx1ZV0gfTtcbiAgICB9XG5cbiAgICAvLyBKdXN0aWZ5IGNvbnRlbnRcbiAgICBpZiAocHJvcCA9PT0gJ2p1c3RpZnktY29udGVudCcpIHtcbiAgICAgIGNvbnN0IGp1c3RpZnlNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICdmbGV4LXN0YXJ0JzogJ2p1c3RpZnktc3RhcnQnLFxuICAgICAgICAnZmxleC1lbmQnOiAnanVzdGlmeS1lbmQnLFxuICAgICAgICAnY2VudGVyJzogJ2p1c3RpZnktY2VudGVyJyxcbiAgICAgICAgJ3NwYWNlLWJldHdlZW4nOiAnanVzdGlmeS1iZXR3ZWVuJyxcbiAgICAgICAgJ3NwYWNlLWFyb3VuZCc6ICdqdXN0aWZ5LWFyb3VuZCcsXG4gICAgICAgICdzcGFjZS1ldmVubHknOiAnanVzdGlmeS1ldmVubHknXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBqdXN0aWZ5TWFwW3ZhbHVlXSB8fCBudWxsLCBza2lwcGVkOiAhanVzdGlmeU1hcFt2YWx1ZV0gfTtcbiAgICB9XG5cbiAgICAvLyBBbGlnbiBpdGVtc1xuICAgIGlmIChwcm9wID09PSAnYWxpZ24taXRlbXMnKSB7XG4gICAgICBjb25zdCBhbGlnbk1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ2ZsZXgtc3RhcnQnOiAnaXRlbXMtc3RhcnQnLFxuICAgICAgICAnZmxleC1lbmQnOiAnaXRlbXMtZW5kJyxcbiAgICAgICAgJ2NlbnRlcic6ICdpdGVtcy1jZW50ZXInLFxuICAgICAgICAnYmFzZWxpbmUnOiAnaXRlbXMtYmFzZWxpbmUnLFxuICAgICAgICAnc3RyZXRjaCc6ICdpdGVtcy1zdHJldGNoJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogYWxpZ25NYXBbdmFsdWVdIHx8IG51bGwsIHNraXBwZWQ6ICFhbGlnbk1hcFt2YWx1ZV0gfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYFVuc3VwcG9ydGVkIGZsZXhib3ggcHJvcGVydHk6ICR7cHJvcH1gIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRHYXAodmFsdWU6IHN0cmluZyk6IENvbnZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IHB4ID0gdGhpcy5leHRyYWN0UHgodmFsdWUpO1xuICAgIGlmIChweCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBudWxsLCBza2lwcGVkOiB0cnVlLCByZWFzb246IGBOb24tcGl4ZWwgZ2FwIHZhbHVlOiAke3ZhbHVlfWAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5weFRvU3BhY2luZyhweCk7XG4gICAgaWYgKCFzcGFjaW5nKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYE5vIG1hdGNoaW5nIHNwYWNpbmcgZm9yOiAke3ZhbHVlfWAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjbGFzc05hbWU6IGBnYXAtJHtzcGFjaW5nfWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRXaWR0aCh2YWx1ZTogc3RyaW5nKTogQ29udmVyc2lvblJlc3VsdCB7XG4gICAgLy8gSGFuZGxlIHBlcmNlbnRhZ2UgdmFsdWVzXG4gICAgaWYgKHZhbHVlID09PSAnMTAwJScpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogJ3ctZnVsbCcsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJzUwJScpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogJ3ctMS8yJywgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnMzMuMzMzJScgfHwgdmFsdWUgPT09ICczMy4zMyUnKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6ICd3LTEvMycsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJzY2LjY2NiUnIHx8IHZhbHVlID09PSAnNjYuNjclJykge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiAndy0yLzMnLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICcyNSUnKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6ICd3LTEvNCcsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJzc1JScpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogJ3ctMy80Jywgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcGl4ZWwgdmFsdWVzXG4gICAgY29uc3QgcHggPSB0aGlzLmV4dHJhY3RQeCh2YWx1ZSk7XG4gICAgaWYgKHB4ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5weFRvU3BhY2luZyhweCk7XG4gICAgICBpZiAoc3BhY2luZykge1xuICAgICAgICByZXR1cm4geyBjbGFzc05hbWU6IGB3LSR7c3BhY2luZ31gLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICAgLy8gVHJ5IGFyYml0cmFyeSB2YWx1ZXMgZm9yIGxhcmdlciBzaXplc1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgdy1bJHt2YWx1ZX1dYCwgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYENvbXBsZXggd2lkdGggdmFsdWU6ICR7dmFsdWV9YCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SGVpZ2h0KHZhbHVlOiBzdHJpbmcpOiBDb252ZXJzaW9uUmVzdWx0IHtcbiAgICAvLyBIYW5kbGUgcGVyY2VudGFnZSB2YWx1ZXNcbiAgICBpZiAodmFsdWUgPT09ICcxMDAlJykge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiAnaC1mdWxsJywgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnNTAlJykge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiAnaC0xLzInLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwaXhlbCB2YWx1ZXNcbiAgICBjb25zdCBweCA9IHRoaXMuZXh0cmFjdFB4KHZhbHVlKTtcbiAgICBpZiAocHggIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNwYWNpbmcgPSB0aGlzLnB4VG9TcGFjaW5nKHB4KTtcbiAgICAgIGlmIChzcGFjaW5nKSB7XG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogYGgtJHtzcGFjaW5nfWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IGBoLVske3ZhbHVlfV1gLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGNsYXNzTmFtZTogbnVsbCwgc2tpcHBlZDogdHJ1ZSwgcmVhc29uOiBgQ29tcGxleCBoZWlnaHQgdmFsdWU6ICR7dmFsdWV9YCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0QmFja2dyb3VuZENvbG9yKHZhbHVlOiBzdHJpbmcpOiBDb252ZXJzaW9uUmVzdWx0IHtcbiAgICAvLyBIYW5kbGUgbmFtZWQgY29sb3JzIGFuZCBoZXhcbiAgICBjb25zdCBjb2xvck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICd0cmFuc3BhcmVudCc6ICdiZy10cmFuc3BhcmVudCcsXG4gICAgICAnd2hpdGUnOiAnYmctd2hpdGUnLFxuICAgICAgJ2JsYWNrJzogJ2JnLWJsYWNrJyxcbiAgICAgICdyZWQnOiAnYmctcmVkLTUwMCcsXG4gICAgICAnYmx1ZSc6ICdiZy1ibHVlLTUwMCcsXG4gICAgICAnZ3JlZW4nOiAnYmctZ3JlZW4tNTAwJyxcbiAgICAgICdncmF5JzogJ2JnLWdyYXktNTAwJ1xuICAgIH07XG5cbiAgICBpZiAoY29sb3JNYXBbdmFsdWVdKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IGNvbG9yTWFwW3ZhbHVlXSwgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgaGV4IGNvbG9ycyAtIHVzZSBhcmJpdHJhcnkgdmFsdWVzXG4gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgYmctWyR7dmFsdWV9XWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHJnYi9yZ2JhXG4gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ3JnYicpKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IGBiZy1bJHt2YWx1ZX1dYCwgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYENvbXBsZXggYmFja2dyb3VuZC1jb2xvcjogJHt2YWx1ZX1gIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUZXh0Q29sb3IodmFsdWU6IHN0cmluZyk6IENvbnZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IGNvbG9yTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3RyYW5zcGFyZW50JzogJ3RleHQtdHJhbnNwYXJlbnQnLFxuICAgICAgJ3doaXRlJzogJ3RleHQtd2hpdGUnLFxuICAgICAgJ2JsYWNrJzogJ3RleHQtYmxhY2snLFxuICAgICAgJ3JlZCc6ICd0ZXh0LXJlZC01MDAnLFxuICAgICAgJ2JsdWUnOiAndGV4dC1ibHVlLTUwMCcsXG4gICAgICAnZ3JlZW4nOiAndGV4dC1ncmVlbi01MDAnLFxuICAgICAgJ2dyYXknOiAndGV4dC1ncmF5LTUwMCdcbiAgICB9O1xuXG4gICAgaWYgKGNvbG9yTWFwW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBjb2xvck1hcFt2YWx1ZV0sIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgdGV4dC1bJHt2YWx1ZX1dYCwgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgncmdiJykpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogYHRleHQtWyR7dmFsdWV9XWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBudWxsLCBza2lwcGVkOiB0cnVlLCByZWFzb246IGBDb21wbGV4IGNvbG9yOiAke3ZhbHVlfWAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEJvcmRlclJhZGl1cyh2YWx1ZTogc3RyaW5nKTogQ29udmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcHggPSB0aGlzLmV4dHJhY3RQeCh2YWx1ZSk7XG4gICAgXG4gICAgaWYgKHB4ID09PSBudWxsKSB7XG4gICAgICAvLyBIYW5kbGUgbmFtZWQgdmFsdWVzXG4gICAgICBpZiAodmFsdWUgPT09ICc1MCUnKSB7XG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogJ3JvdW5kZWQtZnVsbCcsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYENvbXBsZXggYm9yZGVyLXJhZGl1czogJHt2YWx1ZX1gIH07XG4gICAgfVxuXG4gICAgLy8gTWFwIHRvIFRhaWx3aW5kIHJhZGl1cyBzY2FsZVxuICAgIGNvbnN0IHJhZGl1c01hcDogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHtcbiAgICAgIDA6ICdyb3VuZGVkLW5vbmUnLFxuICAgICAgMjogJ3JvdW5kZWQtc20nLFxuICAgICAgNDogJ3JvdW5kZWQnLFxuICAgICAgNjogJ3JvdW5kZWQtbWQnLFxuICAgICAgODogJ3JvdW5kZWQtbGcnLFxuICAgICAgMTI6ICdyb3VuZGVkLXhsJyxcbiAgICAgIDE2OiAncm91bmRlZC0yeGwnLFxuICAgICAgMjQ6ICdyb3VuZGVkLTN4bCdcbiAgICB9O1xuXG4gICAgY29uc3QgY2xvc2VzdCA9IE9iamVjdC5rZXlzKHJhZGl1c01hcClcbiAgICAgIC5tYXAoTnVtYmVyKVxuICAgICAgLnJlZHVjZSgocHJldiwgY3VycikgPT4gXG4gICAgICAgIE1hdGguYWJzKGN1cnIgLSBweCkgPCBNYXRoLmFicyhwcmV2IC0gcHgpID8gY3VyciA6IHByZXZcbiAgICAgICk7XG5cbiAgICBpZiAoTWF0aC5hYnMoY2xvc2VzdCAtIHB4KSAvIChweCB8fCAxKSA8IDAuMikge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiByYWRpdXNNYXBbY2xvc2VzdF0sIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8gVXNlIGFyYml0cmFyeSB2YWx1ZVxuICAgIHJldHVybiB7IGNsYXNzTmFtZTogYHJvdW5kZWQtWyR7dmFsdWV9XWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb252ZXJ0TXVsdGlwbGUocHJvcGVydGllczogQ1NTUHJvcGVydHlbXSk6IHsgY2xhc3Nlczogc3RyaW5nW107IHdhcm5pbmdzOiBzdHJpbmdbXSB9IHtcbiAgICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcHJvcGVydGllcy5mb3JFYWNoKCh7IHByb3BlcnR5LCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbnZlcnRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgXG4gICAgICBpZiAocmVzdWx0LnNraXBwZWQpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChyZXN1bHQucmVhc29uIHx8IGBTa2lwcGVkOiAke3Byb3BlcnR5fTogJHt2YWx1ZX1gKTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFNraXBwZWQ6ICR7cHJvcGVydHl9OiAke3ZhbHVlfSAtICR7cmVzdWx0LnJlYXNvbn1gKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmNsYXNzTmFtZSkge1xuICAgICAgICBjbGFzc2VzLnB1c2gocmVzdWx0LmNsYXNzTmFtZSk7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBDb252ZXJ0ZWQ6ICR7cHJvcGVydHl9OiAke3ZhbHVlfSDihpIgJHtyZXN1bHQuY2xhc3NOYW1lfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgY2xhc3Nlcywgd2FybmluZ3MgfTtcbiAgfVxufVxuIl19
438
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFpbHdpbmRNYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGFpbHdpbmRNYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQXdDO0FBYXhDLE1BQWEsY0FBYztJQUl6QixZQUFZLE1BQXNCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO1FBRWpELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUMvQyw4REFBOEQ7WUFDOUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1QyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzVDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBRUQsMkJBQTJCO1lBQzNCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFD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LE9BQU8sQ0FBQyxZQUFZLFFBQVEsS0FBSyxLQUFLLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdEUsQ0FBQztpQkFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQy9CLGVBQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxRQUFRLEtBQUssS0FBSyxNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBMWdCRCx3Q0EwZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFpbHdpbmRDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTUHJvcGVydHkge1xuICBwcm9wZXJ0eTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNpb25SZXN1bHQge1xuICBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7XG4gIHNraXBwZWQ6IGJvb2xlYW47XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFRhaWx3aW5kTWFwcGVyIHtcbiAgcHJpdmF0ZSBjb25maWc6IFRhaWx3aW5kQ29uZmlnO1xuICBwcml2YXRlIHNwYWNpbmdTY2FsZTogTWFwPG51bWJlciwgc3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFRhaWx3aW5kQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5zcGFjaW5nU2NhbGUgPSB0aGlzLmJ1aWxkU3BhY2luZ1NjYWxlKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3BhY2luZ1NjYWxlKCk6IE1hcDxudW1iZXIsIHN0cmluZz4ge1xuICAgIGNvbnN0IHNjYWxlID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcbiAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5jb25maWcudGhlbWU/LnNwYWNpbmcgfHwge307XG5cbiAgICBPYmplY3QuZW50cmllcyhzcGFjaW5nKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIC8vIENvbnZlcnQgcmVtIHRvIHBpeGVscyBmb3IgY29tcGFyaXNvbiAoYXNzdW1pbmcgMXJlbSA9IDE2cHgpXG4gICAgICBjb25zdCByZW1NYXRjaCA9IHZhbHVlLm1hdGNoKC8oW1xcZC5dKylyZW0vKTtcbiAgICAgIGlmIChyZW1NYXRjaCkge1xuICAgICAgICBjb25zdCBwaXhlbHMgPSBwYXJzZUZsb2F0KHJlbU1hdGNoWzFdKSAqIDE2O1xuICAgICAgICBzY2FsZS5zZXQoTWF0aC5yb3VuZChwaXhlbHMpLCBrZXkpO1xuICAgICAgfVxuXG4gICAgICAvLyBBbHNvIGhhbmRsZSBwaXhlbCB2YWx1ZXNcbiAgICAgIGNvbnN0IHB4TWF0Y2ggPSB2YWx1ZS5tYXRjaCgvKFtcXGQuXSspcHgvKTtcbiAgICAgIGlmIChweE1hdGNoKSB7XG4gICAgICAgIHNjYWxlLnNldChNYXRoLnJvdW5kKHBhcnNlRmxvYXQocHhNYXRjaFsxXSkpLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBweFRvU3BhY2luZyhweDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gVHJ5IGV4YWN0IG1hdGNoIGZpcnN0XG4gICAgaWYgKHRoaXMuc3BhY2luZ1NjYWxlLmhhcyhweCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNwYWNpbmdTY2FsZS5nZXQocHgpITtcbiAgICB9XG5cbiAgICAvLyBGaW5kIGNsb3Nlc3QgbWF0Y2hcbiAgICBsZXQgY2xvc2VzdEtleTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGNsb3Nlc3REaWZmOiBudW1iZXIgPSBJbmZpbml0eTtcbiAgICBcbiAgICB0aGlzLnNwYWNpbmdTY2FsZS5mb3JFYWNoKChfLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhrZXkgLSBweCk7XG4gICAgICBpZiAoZGlmZiA8IGNsb3Nlc3REaWZmKSB7XG4gICAgICAgIGNsb3Nlc3RLZXkgPSBrZXk7XG4gICAgICAgIGNsb3Nlc3REaWZmID0gZGlmZjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIE9ubHkgYWNjZXB0IGlmIHdpdGhpbiByZWFzb25hYmxlIHRvbGVyYW5jZSAoMjAlKVxuICAgIGlmIChjbG9zZXN0S2V5ICE9PSBudWxsICYmIGNsb3Nlc3REaWZmIC8gcHggPCAwLjIpIHtcbiAgICAgIHJldHVybiB0aGlzLnNwYWNpbmdTY2FsZS5nZXQoY2xvc2VzdEtleSkgfHwgbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFB4KHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgICBjb25zdCBweE1hdGNoID0gdmFsdWUubWF0Y2goL14oW1xcZC5dKylweCQvKTtcbiAgICBpZiAocHhNYXRjaCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocHhNYXRjaFsxXSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHJlbSB2YWx1ZXNcbiAgICBjb25zdCByZW1NYXRjaCA9IHZhbHVlLm1hdGNoKC9eKFtcXGQuXSspcmVtJC8pO1xuICAgIGlmIChyZW1NYXRjaCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVtTWF0Y2hbMV0pICogMTY7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb252ZXJ0UHJvcGVydHkocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IENvbnZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9wID0gcHJvcGVydHkudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICBsb2dnZXIudmVyYm9zZShgQ29udmVydGluZzogJHtub3JtYWxpemVkUHJvcH06ICR7bm9ybWFsaXplZFZhbHVlfWApO1xuXG4gICAgLy8gRGlzcGxheSBwcm9wZXJ0aWVzXG4gICAgaWYgKG5vcm1hbGl6ZWRQcm9wID09PSAnZGlzcGxheScpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnREaXNwbGF5KG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gUG9zaXRpb24gcHJvcGVydGllc1xuICAgIGlmIChub3JtYWxpemVkUHJvcCA9PT0gJ3Bvc2l0aW9uJykge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBub3JtYWxpemVkVmFsdWUsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8gTWFyZ2luIHByb3BlcnRpZXNcbiAgICBpZiAobm9ybWFsaXplZFByb3Auc3RhcnRzV2l0aCgnbWFyZ2luJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRNYXJnaW4obm9ybWFsaXplZFByb3AsIG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZyBwcm9wZXJ0aWVzXG4gICAgaWYgKG5vcm1hbGl6ZWRQcm9wLnN0YXJ0c1dpdGgoJ3BhZGRpbmcnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFBhZGRpbmcobm9ybWFsaXplZFByb3AsIG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gRm9udCBwcm9wZXJ0aWVzXG4gICAgaWYgKG5vcm1hbGl6ZWRQcm9wID09PSAnZm9udC13ZWlnaHQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0Rm9udFdlaWdodChub3JtYWxpemVkVmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChub3JtYWxpemVkUHJvcCA9PT0gJ2ZvbnQtc2l6ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRGb250U2l6ZShub3JtYWxpemVkVmFsdWUpO1xuICAgIH1cblxuICAgIC8vIFRleHQgcHJvcGVydGllc1xuICAgIGlmIChub3JtYWxpemVkUHJvcCA9PT0gJ3RleHQtYWxpZ24nKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IGB0ZXh0LSR7bm9ybWFsaXplZFZhbHVlfWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8gRmxleGJveCBwcm9wZXJ0aWVzXG4gICAgaWYgKG5vcm1hbGl6ZWRQcm9wLnN0YXJ0c1dpdGgoJ2ZsZXgnKSB8fCBcbiAgICAgICAgbm9ybWFsaXplZFByb3Auc3RhcnRzV2l0aCgnanVzdGlmeScpIHx8IFxuICAgICAgICBub3JtYWxpemVkUHJvcC5zdGFydHNXaXRoKCdhbGlnbicpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RmxleGJveChub3JtYWxpemVkUHJvcCwgbm9ybWFsaXplZFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBHYXAgcHJvcGVydGllc1xuICAgIGlmIChub3JtYWxpemVkUHJvcCA9PT0gJ2dhcCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRHYXAobm9ybWFsaXplZFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBXaWR0aCBhbmQgSGVpZ2h0XG4gICAgaWYgKG5vcm1hbGl6ZWRQcm9wID09PSAnd2lkdGgnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0V2lkdGgobm9ybWFsaXplZFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAobm9ybWFsaXplZFByb3AgPT09ICdoZWlnaHQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0SGVpZ2h0KG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQ29sb3JzXG4gICAgaWYgKG5vcm1hbGl6ZWRQcm9wID09PSAnYmFja2dyb3VuZC1jb2xvcicpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRCYWNrZ3JvdW5kQ29sb3Iobm9ybWFsaXplZFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAobm9ybWFsaXplZFByb3AgPT09ICdjb2xvcicpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUZXh0Q29sb3Iobm9ybWFsaXplZFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBCb3JkZXIgcmFkaXVzXG4gICAgaWYgKG5vcm1hbGl6ZWRQcm9wID09PSAnYm9yZGVyLXJhZGl1cycpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRCb3JkZXJSYWRpdXMobm9ybWFsaXplZFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBVbnN1cHBvcnRlZCBwcm9wZXJ0aWVzXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgIHNraXBwZWQ6IHRydWUsXG4gICAgICByZWFzb246IGBVbnN1cHBvcnRlZCBwcm9wZXJ0eTogJHtwcm9wZXJ0eX1gXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERpc3BsYXkodmFsdWU6IHN0cmluZyk6IENvbnZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IGRpc3BsYXlNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnZmxleCc6ICdmbGV4JyxcbiAgICAgICdibG9jayc6ICdibG9jaycsXG4gICAgICAnaW5saW5lJzogJ2lubGluZScsXG4gICAgICAnaW5saW5lLWJsb2NrJzogJ2lubGluZS1ibG9jaycsXG4gICAgICAnZ3JpZCc6ICdncmlkJyxcbiAgICAgICdub25lJzogJ2hpZGRlbicsXG4gICAgICAnY29udGVudHMnOiAnY29udGVudHMnLFxuICAgICAgJ3RhYmxlJzogJ3RhYmxlJyxcbiAgICAgICd0YWJsZS1jZWxsJzogJ3RhYmxlLWNlbGwnXG4gICAgfTtcblxuICAgIGlmIChkaXNwbGF5TWFwW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBkaXNwbGF5TWFwW3ZhbHVlXSwgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYFVua25vd24gZGlzcGxheSB2YWx1ZTogJHt2YWx1ZX1gIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRNYXJnaW4ocHJvcDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogQ29udmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcHggPSB0aGlzLmV4dHJhY3RQeCh2YWx1ZSk7XG4gICAgXG4gICAgY29uc3Qgc2lkZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdtYXJnaW4nOiAnbScsXG4gICAgICAnbWFyZ2luLXRvcCc6ICdtdCcsXG4gICAgICAnbWFyZ2luLXJpZ2h0JzogJ21yJyxcbiAgICAgICdtYXJnaW4tYm90dG9tJzogJ21iJyxcbiAgICAgICdtYXJnaW4tbGVmdCc6ICdtbCcsXG4gICAgICAnbWFyZ2luLXgnOiAnbXgnLFxuICAgICAgJ21hcmdpbi15JzogJ215J1xuICAgIH07XG4gICAgY29uc3QgcHJlZml4ID0gc2lkZU1hcFtwcm9wXSB8fCAnbSc7XG4gICAgXG4gICAgaWYgKHB4ID09PSBudWxsKSB7XG4gICAgICBpZiAoL14tP1xcZCsoXFwuXFxkKyk/KHB4fHJlbXxlbSk/JC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgJHtwcmVmaXh9LVske3ZhbHVlfV1gLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBudWxsLCBza2lwcGVkOiB0cnVlLCByZWFzb246IGBOb24tcGl4ZWwgbWFyZ2luIHZhbHVlOiAke3ZhbHVlfWAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5weFRvU3BhY2luZyhweCk7XG4gICAgaWYgKCFzcGFjaW5nKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IGAke3ByZWZpeH0tWyR7dmFsdWV9XWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgJHtwcmVmaXh9LSR7c3BhY2luZ31gLCBza2lwcGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UGFkZGluZyhwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBDb252ZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCBweCA9IHRoaXMuZXh0cmFjdFB4KHZhbHVlKTtcbiAgICBcbiAgICBjb25zdCBzaWRlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3BhZGRpbmcnOiAncCcsXG4gICAgICAncGFkZGluZy10b3AnOiAncHQnLFxuICAgICAgJ3BhZGRpbmctcmlnaHQnOiAncHInLFxuICAgICAgJ3BhZGRpbmctYm90dG9tJzogJ3BiJyxcbiAgICAgICdwYWRkaW5nLWxlZnQnOiAncGwnLFxuICAgICAgJ3BhZGRpbmcteCc6ICdweCcsXG4gICAgICAncGFkZGluZy15JzogJ3B5J1xuICAgIH07XG4gICAgY29uc3QgcHJlZml4ID0gc2lkZU1hcFtwcm9wXSB8fCAncCc7XG4gICAgXG4gICAgaWYgKHB4ID09PSBudWxsKSB7XG4gICAgICBpZiAoL14tP1xcZCsoXFwuXFxkKyk/KHB4fHJlbXxlbSk/JC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgJHtwcmVmaXh9LVske3ZhbHVlfV1gLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBudWxsLCBza2lwcGVkOiB0cnVlLCByZWFzb246IGBOb24tcGl4ZWwgcGFkZGluZyB2YWx1ZTogJHt2YWx1ZX1gIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3BhY2luZyA9IHRoaXMucHhUb1NwYWNpbmcocHgpO1xuICAgIGlmICghc3BhY2luZykge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgJHtwcmVmaXh9LVske3ZhbHVlfV1gLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGNsYXNzTmFtZTogYCR7cHJlZml4fS0ke3NwYWNpbmd9YCwgc2tpcHBlZDogZmFsc2UgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEZvbnRXZWlnaHQodmFsdWU6IHN0cmluZyk6IENvbnZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IHdlaWdodE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICcxMDAnOiAnZm9udC10aGluJyxcbiAgICAgICcyMDAnOiAnZm9udC1leHRyYWxpZ2h0JyxcbiAgICAgICczMDAnOiAnZm9udC1saWdodCcsXG4gICAgICAnNDAwJzogJ2ZvbnQtbm9ybWFsJyxcbiAgICAgICc1MDAnOiAnZm9udC1tZWRpdW0nLFxuICAgICAgJzYwMCc6ICdmb250LXNlbWlib2xkJyxcbiAgICAgICc3MDAnOiAnZm9udC1ib2xkJyxcbiAgICAgICc4MDAnOiAnZm9udC1leHRyYWJvbGQnLFxuICAgICAgJzkwMCc6ICdmb250LWJsYWNrJyxcbiAgICAgICdub3JtYWwnOiAnZm9udC1ub3JtYWwnLFxuICAgICAgJ2JvbGQnOiAnZm9udC1ib2xkJ1xuICAgIH07XG5cbiAgICBpZiAod2VpZ2h0TWFwW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiB3ZWlnaHRNYXBbdmFsdWVdLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGNsYXNzTmFtZTogbnVsbCwgc2tpcHBlZDogdHJ1ZSwgcmVhc29uOiBgVW5rbm93biBmb250LXdlaWdodDogJHt2YWx1ZX1gIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRGb250U2l6ZSh2YWx1ZTogc3RyaW5nKTogQ29udmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcHggPSB0aGlzLmV4dHJhY3RQeCh2YWx1ZSk7XG4gICAgaWYgKHB4ICE9PSBudWxsKSB7XG4gICAgICAvLyBNYXAgY29tbW9uIGZvbnQgc2l6ZXNcbiAgICAgIGNvbnN0IHNpemVNYXA6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgICAgIDEyOiAndGV4dC14cycsXG4gICAgICAgIDE0OiAndGV4dC1zbScsXG4gICAgICAgIDE2OiAndGV4dC1iYXNlJyxcbiAgICAgICAgMTg6ICd0ZXh0LWxnJyxcbiAgICAgICAgMjA6ICd0ZXh0LXhsJyxcbiAgICAgICAgMjQ6ICd0ZXh0LTJ4bCcsXG4gICAgICAgIDMwOiAndGV4dC0zeGwnLFxuICAgICAgICAzNjogJ3RleHQtNHhsJyxcbiAgICAgICAgNDg6ICd0ZXh0LTV4bCdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNsb3Nlc3QgPSBPYmplY3Qua2V5cyhzaXplTWFwKVxuICAgICAgICAubWFwKE51bWJlcilcbiAgICAgICAgLnJlZHVjZSgocHJldiwgY3VycikgPT4gXG4gICAgICAgICAgTWF0aC5hYnMoY3VyciAtIHB4KSA8IE1hdGguYWJzKHByZXYgLSBweCkgPyBjdXJyIDogcHJldlxuICAgICAgICApO1xuXG4gICAgICBpZiAoTWF0aC5hYnMoY2xvc2VzdCAtIHB4KSAvIHB4IDwgMC4xNSkge1xuICAgICAgICByZXR1cm4geyBjbGFzc05hbWU6IHNpemVNYXBbY2xvc2VzdF0sIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogYHRleHQtWyR7dmFsdWV9XWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgaWYgKC9eXFxkKyhcXC5cXGQrKT8ocHh8cmVtfGVtKT8kLy50ZXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgdGV4dC1bJHt2YWx1ZX1dYCwgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYE5vbi1zdGFuZGFyZCBmb250LXNpemU6ICR7dmFsdWV9YCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RmxleGJveChwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBDb252ZXJzaW9uUmVzdWx0IHtcbiAgICAvLyBGbGV4IGRpcmVjdGlvblxuICAgIGlmIChwcm9wID09PSAnZmxleC1kaXJlY3Rpb24nKSB7XG4gICAgICBjb25zdCBkaXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICdyb3cnOiAnZmxleC1yb3cnLFxuICAgICAgICAncm93LXJldmVyc2UnOiAnZmxleC1yb3ctcmV2ZXJzZScsXG4gICAgICAgICdjb2x1bW4nOiAnZmxleC1jb2wnLFxuICAgICAgICAnY29sdW1uLXJldmVyc2UnOiAnZmxleC1jb2wtcmV2ZXJzZSdcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IGRpck1hcFt2YWx1ZV0gfHwgbnVsbCwgc2tpcHBlZDogIWRpck1hcFt2YWx1ZV0gfTtcbiAgICB9XG5cbiAgICAvLyBGbGV4IHdyYXBcbiAgICBpZiAocHJvcCA9PT0gJ2ZsZXgtd3JhcCcpIHtcbiAgICAgIGNvbnN0IHdyYXBNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICd3cmFwJzogJ2ZsZXgtd3JhcCcsXG4gICAgICAgICdub3dyYXAnOiAnZmxleC1ub3dyYXAnLFxuICAgICAgICAnd3JhcC1yZXZlcnNlJzogJ2ZsZXgtd3JhcC1yZXZlcnNlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogd3JhcE1hcFt2YWx1ZV0gfHwgbnVsbCwgc2tpcHBlZDogIXdyYXBNYXBbdmFsdWVdIH07XG4gICAgfVxuXG4gICAgLy8gSnVzdGlmeSBjb250ZW50XG4gICAgaWYgKHByb3AgPT09ICdqdXN0aWZ5LWNvbnRlbnQnKSB7XG4gICAgICBjb25zdCBqdXN0aWZ5TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAnZmxleC1zdGFydCc6ICdqdXN0aWZ5LXN0YXJ0JyxcbiAgICAgICAgJ2ZsZXgtZW5kJzogJ2p1c3RpZnktZW5kJyxcbiAgICAgICAgJ2NlbnRlcic6ICdqdXN0aWZ5LWNlbnRlcicsXG4gICAgICAgICdzcGFjZS1iZXR3ZWVuJzogJ2p1c3RpZnktYmV0d2VlbicsXG4gICAgICAgICdzcGFjZS1hcm91bmQnOiAnanVzdGlmeS1hcm91bmQnLFxuICAgICAgICAnc3BhY2UtZXZlbmx5JzogJ2p1c3RpZnktZXZlbmx5J1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZToganVzdGlmeU1hcFt2YWx1ZV0gfHwgbnVsbCwgc2tpcHBlZDogIWp1c3RpZnlNYXBbdmFsdWVdIH07XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gaXRlbXNcbiAgICBpZiAocHJvcCA9PT0gJ2FsaWduLWl0ZW1zJykge1xuICAgICAgY29uc3QgYWxpZ25NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICdmbGV4LXN0YXJ0JzogJ2l0ZW1zLXN0YXJ0JyxcbiAgICAgICAgJ2ZsZXgtZW5kJzogJ2l0ZW1zLWVuZCcsXG4gICAgICAgICdjZW50ZXInOiAnaXRlbXMtY2VudGVyJyxcbiAgICAgICAgJ2Jhc2VsaW5lJzogJ2l0ZW1zLWJhc2VsaW5lJyxcbiAgICAgICAgJ3N0cmV0Y2gnOiAnaXRlbXMtc3RyZXRjaCdcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IGFsaWduTWFwW3ZhbHVlXSB8fCBudWxsLCBza2lwcGVkOiAhYWxpZ25NYXBbdmFsdWVdIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBudWxsLCBza2lwcGVkOiB0cnVlLCByZWFzb246IGBVbnN1cHBvcnRlZCBmbGV4Ym94IHByb3BlcnR5OiAke3Byb3B9YCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0R2FwKHZhbHVlOiBzdHJpbmcpOiBDb252ZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCBweCA9IHRoaXMuZXh0cmFjdFB4KHZhbHVlKTtcbiAgICBpZiAocHggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogbnVsbCwgc2tpcHBlZDogdHJ1ZSwgcmVhc29uOiBgTm9uLXBpeGVsIGdhcCB2YWx1ZTogJHt2YWx1ZX1gIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3BhY2luZyA9IHRoaXMucHhUb1NwYWNpbmcocHgpO1xuICAgIGlmICghc3BhY2luZykge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBudWxsLCBza2lwcGVkOiB0cnVlLCByZWFzb246IGBObyBtYXRjaGluZyBzcGFjaW5nIGZvcjogJHt2YWx1ZX1gIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgZ2FwLSR7c3BhY2luZ31gLCBza2lwcGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0V2lkdGgodmFsdWU6IHN0cmluZyk6IENvbnZlcnNpb25SZXN1bHQge1xuICAgIC8vIEhhbmRsZSBwZXJjZW50YWdlIHZhbHVlc1xuICAgIGlmICh2YWx1ZSA9PT0gJzEwMCUnKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6ICd3LWZ1bGwnLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICc1MCUnKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6ICd3LTEvMicsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJzMzLjMzMyUnIHx8IHZhbHVlID09PSAnMzMuMzMlJykge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiAndy0xLzMnLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICc2Ni42NjYlJyB8fCB2YWx1ZSA9PT0gJzY2LjY3JScpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogJ3ctMi8zJywgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnMjUlJykge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiAndy0xLzQnLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICc3NSUnKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6ICd3LTMvNCcsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHBpeGVsIHZhbHVlc1xuICAgIGNvbnN0IHB4ID0gdGhpcy5leHRyYWN0UHgodmFsdWUpO1xuICAgIGlmIChweCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3BhY2luZyA9IHRoaXMucHhUb1NwYWNpbmcocHgpO1xuICAgICAgaWYgKHNwYWNpbmcpIHtcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgdy0ke3NwYWNpbmd9YCwgc2tpcHBlZDogZmFsc2UgfTtcbiAgICAgIH1cbiAgICAgIC8vIFRyeSBhcmJpdHJhcnkgdmFsdWVzIGZvciBsYXJnZXIgc2l6ZXNcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogYHctWyR7dmFsdWV9XWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBudWxsLCBza2lwcGVkOiB0cnVlLCByZWFzb246IGBDb21wbGV4IHdpZHRoIHZhbHVlOiAke3ZhbHVlfWAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEhlaWdodCh2YWx1ZTogc3RyaW5nKTogQ29udmVyc2lvblJlc3VsdCB7XG4gICAgLy8gSGFuZGxlIHBlcmNlbnRhZ2UgdmFsdWVzXG4gICAgaWYgKHZhbHVlID09PSAnMTAwJScpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogJ2gtZnVsbCcsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJzUwJScpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogJ2gtMS8yJywgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcGl4ZWwgdmFsdWVzXG4gICAgY29uc3QgcHggPSB0aGlzLmV4dHJhY3RQeCh2YWx1ZSk7XG4gICAgaWYgKHB4ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5weFRvU3BhY2luZyhweCk7XG4gICAgICBpZiAoc3BhY2luZykge1xuICAgICAgICByZXR1cm4geyBjbGFzc05hbWU6IGBoLSR7c3BhY2luZ31gLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgaC1bJHt2YWx1ZX1dYCwgc2tpcHBlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjbGFzc05hbWU6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogYENvbXBsZXggaGVpZ2h0IHZhbHVlOiAke3ZhbHVlfWAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEJhY2tncm91bmRDb2xvcih2YWx1ZTogc3RyaW5nKTogQ29udmVyc2lvblJlc3VsdCB7XG4gICAgLy8gSGFuZGxlIG5hbWVkIGNvbG9ycyBhbmQgaGV4XG4gICAgY29uc3QgY29sb3JNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAndHJhbnNwYXJlbnQnOiAnYmctdHJhbnNwYXJlbnQnLFxuICAgICAgJ3doaXRlJzogJ2JnLXdoaXRlJyxcbiAgICAgICdibGFjayc6ICdiZy1ibGFjaycsXG4gICAgICAncmVkJzogJ2JnLXJlZC01MDAnLFxuICAgICAgJ2JsdWUnOiAnYmctYmx1ZS01MDAnLFxuICAgICAgJ2dyZWVuJzogJ2JnLWdyZWVuLTUwMCcsXG4gICAgICAnZ3JheSc6ICdiZy1ncmF5LTUwMCdcbiAgICB9O1xuXG4gICAgaWYgKGNvbG9yTWFwW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBjb2xvck1hcFt2YWx1ZV0sIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGhleCBjb2xvcnMgLSB1c2UgYXJiaXRyYXJ5IHZhbHVlc1xuICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogYGJnLVske3ZhbHVlfV1gLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSByZ2IvcmdiYVxuICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdyZ2InKSkge1xuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgYmctWyR7dmFsdWV9XWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBudWxsLCBza2lwcGVkOiB0cnVlLCByZWFzb246IGBDb21wbGV4IGJhY2tncm91bmQtY29sb3I6ICR7dmFsdWV9YCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VGV4dENvbG9yKHZhbHVlOiBzdHJpbmcpOiBDb252ZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCBjb2xvck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICd0cmFuc3BhcmVudCc6ICd0ZXh0LXRyYW5zcGFyZW50JyxcbiAgICAgICd3aGl0ZSc6ICd0ZXh0LXdoaXRlJyxcbiAgICAgICdibGFjayc6ICd0ZXh0LWJsYWNrJyxcbiAgICAgICdyZWQnOiAndGV4dC1yZWQtNTAwJyxcbiAgICAgICdibHVlJzogJ3RleHQtYmx1ZS01MDAnLFxuICAgICAgJ2dyZWVuJzogJ3RleHQtZ3JlZW4tNTAwJyxcbiAgICAgICdncmF5JzogJ3RleHQtZ3JheS01MDAnXG4gICAgfTtcblxuICAgIGlmIChjb2xvck1hcFt2YWx1ZV0pIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogY29sb3JNYXBbdmFsdWVdLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogYHRleHQtWyR7dmFsdWV9XWAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ3JnYicpKSB7XG4gICAgICByZXR1cm4geyBjbGFzc05hbWU6IGB0ZXh0LVske3ZhbHVlfV1gLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGNsYXNzTmFtZTogbnVsbCwgc2tpcHBlZDogdHJ1ZSwgcmVhc29uOiBgQ29tcGxleCBjb2xvcjogJHt2YWx1ZX1gIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRCb3JkZXJSYWRpdXModmFsdWU6IHN0cmluZyk6IENvbnZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IHB4ID0gdGhpcy5leHRyYWN0UHgodmFsdWUpO1xuICAgIFxuICAgIGlmIChweCA9PT0gbnVsbCkge1xuICAgICAgLy8gSGFuZGxlIG5hbWVkIHZhbHVlc1xuICAgICAgaWYgKHZhbHVlID09PSAnNTAlJykge1xuICAgICAgICByZXR1cm4geyBjbGFzc05hbWU6ICdyb3VuZGVkLWZ1bGwnLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBudWxsLCBza2lwcGVkOiB0cnVlLCByZWFzb246IGBDb21wbGV4IGJvcmRlci1yYWRpdXM6ICR7dmFsdWV9YCB9O1xuICAgIH1cblxuICAgIC8vIE1hcCB0byBUYWlsd2luZCByYWRpdXMgc2NhbGVcbiAgICBjb25zdCByYWRpdXNNYXA6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgICAwOiAncm91bmRlZC1ub25lJyxcbiAgICAgIDI6ICdyb3VuZGVkLXNtJyxcbiAgICAgIDQ6ICdyb3VuZGVkJyxcbiAgICAgIDY6ICdyb3VuZGVkLW1kJyxcbiAgICAgIDg6ICdyb3VuZGVkLWxnJyxcbiAgICAgIDEyOiAncm91bmRlZC14bCcsXG4gICAgICAxNjogJ3JvdW5kZWQtMnhsJyxcbiAgICAgIDI0OiAncm91bmRlZC0zeGwnXG4gICAgfTtcblxuICAgIGNvbnN0IGNsb3Nlc3QgPSBPYmplY3Qua2V5cyhyYWRpdXNNYXApXG4gICAgICAubWFwKE51bWJlcilcbiAgICAgIC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IFxuICAgICAgICBNYXRoLmFicyhjdXJyIC0gcHgpIDwgTWF0aC5hYnMocHJldiAtIHB4KSA/IGN1cnIgOiBwcmV2XG4gICAgICApO1xuXG4gICAgaWYgKE1hdGguYWJzKGNsb3Nlc3QgLSBweCkgLyAocHggfHwgMSkgPCAwLjIpIHtcbiAgICAgIHJldHVybiB7IGNsYXNzTmFtZTogcmFkaXVzTWFwW2Nsb3Nlc3RdLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIC8vIFVzZSBhcmJpdHJhcnkgdmFsdWVcbiAgICByZXR1cm4geyBjbGFzc05hbWU6IGByb3VuZGVkLVske3ZhbHVlfV1gLCBza2lwcGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29udmVydE11bHRpcGxlKHByb3BlcnRpZXM6IENTU1Byb3BlcnR5W10pOiB7IGNsYXNzZXM6IHN0cmluZ1tdOyB3YXJuaW5nczogc3RyaW5nW10gfSB7XG4gICAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAgIHByb3BlcnRpZXMuZm9yRWFjaCgoeyBwcm9wZXJ0eSwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb252ZXJ0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKTtcbiAgICAgIFxuICAgICAgaWYgKHJlc3VsdC5za2lwcGVkKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2gocmVzdWx0LnJlYXNvbiB8fCBgU2tpcHBlZDogJHtwcm9wZXJ0eX06ICR7dmFsdWV9YCk7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBTa2lwcGVkOiAke3Byb3BlcnR5fTogJHt2YWx1ZX0gLSAke3Jlc3VsdC5yZWFzb259YCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5jbGFzc05hbWUpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKHJlc3VsdC5jbGFzc05hbWUpO1xuICAgICAgICBsb2dnZXIudmVyYm9zZShgQ29udmVydGVkOiAke3Byb3BlcnR5fTogJHt2YWx1ZX0g4oaSICR7cmVzdWx0LmNsYXNzTmFtZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7IGNsYXNzZXMsIHdhcm5pbmdzIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,52 @@
1
+ import { Specificity } from './specificityCalculator';
2
+ export interface VariableDefinition {
3
+ name: string;
4
+ value: string;
5
+ scope: VariableScope;
6
+ specificity: Specificity;
7
+ sourceOrder: number;
8
+ variants: string[];
9
+ }
10
+ export interface VariableScope {
11
+ type: 'global' | 'selector';
12
+ selector?: string;
13
+ selectorType?: 'class' | 'element' | 'root';
14
+ }
15
+ export interface ResolutionContext {
16
+ selector: string;
17
+ specificity: Specificity;
18
+ variants: string[];
19
+ }
20
+ export declare class VariableRegistry {
21
+ private variables;
22
+ private resolutionCache;
23
+ private resolutionStack;
24
+ register(variable: VariableDefinition): void;
25
+ resolve(varName: string, context: ResolutionContext, fallback?: string): {
26
+ value: string;
27
+ resolved: boolean;
28
+ source: string;
29
+ };
30
+ resolveValue(value: string, context: ResolutionContext): {
31
+ value: string;
32
+ hasUnresolved: boolean;
33
+ isCircular?: boolean;
34
+ };
35
+ private isApplicable;
36
+ private variantsMatch;
37
+ private selectorContains;
38
+ hasVariable(name: string): boolean;
39
+ getVariableDefinitions(name: string): VariableDefinition[];
40
+ clear(): void;
41
+ getRegisteredVariables(): string[];
42
+ }
43
+ export declare function parseVarExpression(value: string): {
44
+ hasVar: boolean;
45
+ varName?: string;
46
+ fallback?: string;
47
+ rawValue: string;
48
+ };
49
+ export declare function isCssVariable(property: string): boolean;
50
+ export declare function isVarExpression(value: string): boolean;
51
+ export declare function createGlobalScope(): VariableScope;
52
+ export declare function createSelectorScope(selector: string, selectorType?: 'class' | 'element' | 'root'): VariableScope;
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VariableRegistry = void 0;
4
+ exports.parseVarExpression = parseVarExpression;
5
+ exports.isCssVariable = isCssVariable;
6
+ exports.isVarExpression = isVarExpression;
7
+ exports.createGlobalScope = createGlobalScope;
8
+ exports.createSelectorScope = createSelectorScope;
9
+ const specificityCalculator_1 = require("./specificityCalculator");
10
+ const logger_1 = require("./logger");
11
+ function createScopeKey(scope) {
12
+ if (scope.type === 'global') {
13
+ return ':root';
14
+ }
15
+ return scope.selector || '';
16
+ }
17
+ class VariableRegistry {
18
+ constructor() {
19
+ this.variables = new Map();
20
+ this.resolutionCache = new Map();
21
+ this.resolutionStack = new Set();
22
+ }
23
+ register(variable) {
24
+ const key = variable.name;
25
+ if (!this.variables.has(key)) {
26
+ this.variables.set(key, []);
27
+ }
28
+ const definitions = this.variables.get(key);
29
+ definitions.push(variable);
30
+ definitions.sort((a, b) => {
31
+ const specCompare = (0, specificityCalculator_1.compareSpecificity)(b.specificity, a.specificity);
32
+ if (specCompare !== 0)
33
+ return specCompare;
34
+ return b.sourceOrder - a.sourceOrder;
35
+ });
36
+ this.resolutionCache.clear();
37
+ }
38
+ resolve(varName, context, fallback) {
39
+ const cacheKey = `${varName}:${context.selector}:${context.variants.join(',')}`;
40
+ if (this.resolutionCache.has(cacheKey)) {
41
+ return { value: this.resolutionCache.get(cacheKey), resolved: true, source: 'cache' };
42
+ }
43
+ if (this.resolutionStack.has(varName)) {
44
+ logger_1.logger.warn(`Circular reference detected for variable: ${varName}`);
45
+ return { value: fallback || '', resolved: false, source: 'circular' };
46
+ }
47
+ this.resolutionStack.add(varName);
48
+ try {
49
+ const definitions = this.variables.get(varName);
50
+ if (!definitions || definitions.length === 0) {
51
+ if (fallback !== undefined) {
52
+ const resolvedFallback = this.resolveValue(fallback, context);
53
+ return { value: resolvedFallback.value, resolved: true, source: 'fallback' };
54
+ }
55
+ logger_1.logger.warn(`Undefined CSS variable: ${varName}`);
56
+ return { value: '', resolved: false, source: 'undefined' };
57
+ }
58
+ const applicableDefs = definitions.filter(def => this.isApplicable(def, context));
59
+ if (applicableDefs.length === 0) {
60
+ if (fallback !== undefined) {
61
+ const resolvedFallback = this.resolveValue(fallback, context);
62
+ return { value: resolvedFallback.value, resolved: true, source: 'fallback' };
63
+ }
64
+ logger_1.logger.warn(`No applicable definition for variable: ${varName} in context: ${context.selector}`);
65
+ return { value: '', resolved: false, source: 'no-match' };
66
+ }
67
+ const bestMatch = applicableDefs[0];
68
+ const resolvedValue = this.resolveValue(bestMatch.value, context);
69
+ if (resolvedValue.isCircular) {
70
+ return {
71
+ value: resolvedValue.value,
72
+ resolved: false,
73
+ source: 'circular'
74
+ };
75
+ }
76
+ const result = {
77
+ value: resolvedValue.value,
78
+ resolved: !resolvedValue.hasUnresolved,
79
+ source: resolvedValue.hasUnresolved ? 'unresolved' : 'resolved'
80
+ };
81
+ this.resolutionCache.set(cacheKey, result.value);
82
+ return result;
83
+ }
84
+ finally {
85
+ this.resolutionStack.delete(varName);
86
+ }
87
+ }
88
+ resolveValue(value, context) {
89
+ const varPattern = /var\s*\(\s*(--[a-zA-Z0-9_-]+)\s*(?:,\s*([^)]+))?\s*\)/g;
90
+ let result = value;
91
+ let hasUnresolved = false;
92
+ let isCircular = false;
93
+ let match;
94
+ let iterations = 0;
95
+ const maxIterations = 10;
96
+ while ((match = varPattern.exec(result)) !== null) {
97
+ if (++iterations > maxIterations) {
98
+ logger_1.logger.warn(`Max variable resolution depth reached for: ${value}`);
99
+ hasUnresolved = true;
100
+ break;
101
+ }
102
+ const fullMatch = match[0];
103
+ const varName = match[1];
104
+ const fallback = match[2]?.trim();
105
+ const resolved = this.resolve(varName, context, fallback);
106
+ if (resolved.source === 'circular') {
107
+ isCircular = true;
108
+ hasUnresolved = true;
109
+ result = resolved.value || '';
110
+ break;
111
+ }
112
+ if (!resolved.resolved) {
113
+ hasUnresolved = true;
114
+ result = resolved.value;
115
+ }
116
+ else {
117
+ result = result.replace(fullMatch, resolved.value);
118
+ }
119
+ varPattern.lastIndex = 0;
120
+ }
121
+ return { value: result, hasUnresolved, isCircular };
122
+ }
123
+ isApplicable(def, context) {
124
+ if (def.scope.type === 'global') {
125
+ if (def.variants.length === 0) {
126
+ return true;
127
+ }
128
+ return this.variantsMatch(def.variants, context.variants);
129
+ }
130
+ const scopeSelector = def.scope.selector || '';
131
+ const contextSelector = context.selector;
132
+ if (scopeSelector === contextSelector) {
133
+ return this.variantsMatch(def.variants, context.variants);
134
+ }
135
+ if (this.selectorContains(contextSelector, scopeSelector)) {
136
+ return this.variantsMatch(def.variants, context.variants);
137
+ }
138
+ return false;
139
+ }
140
+ variantsMatch(defVariants, contextVariants) {
141
+ if (defVariants.length === 0) {
142
+ return true;
143
+ }
144
+ if (contextVariants.length === 0) {
145
+ return false;
146
+ }
147
+ return defVariants.every(v => contextVariants.includes(v));
148
+ }
149
+ selectorContains(outer, inner) {
150
+ const innerClasses = inner.match(/\.[a-zA-Z_-][a-zA-Z0-9_-]*/g) || [];
151
+ const outerClasses = outer.match(/\.[a-zA-Z_-][a-zA-Z0-9_-]*/g) || [];
152
+ return innerClasses.every(cls => outerClasses.includes(cls));
153
+ }
154
+ hasVariable(name) {
155
+ return this.variables.has(name);
156
+ }
157
+ getVariableDefinitions(name) {
158
+ return this.variables.get(name) || [];
159
+ }
160
+ clear() {
161
+ this.variables.clear();
162
+ this.resolutionCache.clear();
163
+ this.resolutionStack.clear();
164
+ }
165
+ getRegisteredVariables() {
166
+ return Array.from(this.variables.keys());
167
+ }
168
+ }
169
+ exports.VariableRegistry = VariableRegistry;
170
+ function parseVarExpression(value) {
171
+ const varPattern = /^var\s*\(\s*(--[a-zA-Z0-9_-]+)\s*(?:,\s*(.+)\s*)?\)$/;
172
+ const match = value.match(varPattern);
173
+ if (match) {
174
+ const fallback = match[2]?.trim();
175
+ return {
176
+ hasVar: true,
177
+ varName: match[1],
178
+ fallback: fallback && fallback.length > 0 ? fallback : undefined,
179
+ rawValue: value
180
+ };
181
+ }
182
+ return { hasVar: false, rawValue: value };
183
+ }
184
+ function isCssVariable(property) {
185
+ return property.startsWith('--');
186
+ }
187
+ function isVarExpression(value) {
188
+ return /var\s*\(\s*--[a-zA-Z0-9_-]+\s*(?:,[^)]+)?\s*\)/.test(value);
189
+ }
190
+ function createGlobalScope() {
191
+ return { type: 'global' };
192
+ }
193
+ function createSelectorScope(selector, selectorType = 'class') {
194
+ return { type: 'selector', selector, selectorType };
195
+ }
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVSZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy92YXJpYWJsZVJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXFPQSxnREFvQkM7QUFFRCxzQ0FFQztBQUVELDBDQUVDO0FBRUQsOENBRUM7QUFFRCxrREFFQztBQXpRRCxtRUFBNEY7QUFDNUYscUNBQWtDO0FBNEJsQyxTQUFTLGNBQWMsQ0FBQyxLQUFvQjtJQUMxQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQWEsZ0JBQWdCO0lBQTdCO1FBQ1UsY0FBUyxHQUFzQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3pELG9CQUFlLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsb0JBQWUsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQTRMbkQsQ0FBQztJQTFMQyxRQUFRLENBQUMsUUFBNEI7UUFDbkMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUUxQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDO1FBQzdDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixNQUFNLFdBQVcs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Q0FBQztJQUMxRSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbEMsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJO1lBQ1osT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDakIsUUFBUSxFQUFFLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ2hFLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzVDLENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsUUFBZ0I7SUFDNUMsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQUMsS0FBYTtJQUMzQyxPQUFPLGdEQUFnRCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCO0lBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDNUIsQ0FBQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsZUFBNkMsT0FBTztJQUN4RyxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNwZWNpZmljaXR5LCBaRVJPX1NQRUNJRklDSVRZLCBjb21wYXJlU3BlY2lmaWNpdHkgfSBmcm9tICcuL3NwZWNpZmljaXR5Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVEZWZpbml0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzY29wZTogVmFyaWFibGVTY29wZTtcbiAgc3BlY2lmaWNpdHk6IFNwZWNpZmljaXR5O1xuICBzb3VyY2VPcmRlcjogbnVtYmVyO1xuICB2YXJpYW50czogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVTY29wZSB7XG4gIHR5cGU6ICdnbG9iYWwnIHwgJ3NlbGVjdG9yJztcbiAgc2VsZWN0b3I/OiBzdHJpbmc7XG4gIHNlbGVjdG9yVHlwZT86ICdjbGFzcycgfCAnZWxlbWVudCcgfCAncm9vdCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x1dGlvbkNvbnRleHQge1xuICBzZWxlY3Rvcjogc3RyaW5nO1xuICBzcGVjaWZpY2l0eTogU3BlY2lmaWNpdHk7XG4gIHZhcmlhbnRzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIFZhcmlhYmxlS2V5IHtcbiAgbmFtZTogc3RyaW5nO1xuICBzY29wZUtleTogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTY29wZUtleShzY29wZTogVmFyaWFibGVTY29wZSk6IHN0cmluZyB7XG4gIGlmIChzY29wZS50eXBlID09PSAnZ2xvYmFsJykge1xuICAgIHJldHVybiAnOnJvb3QnO1xuICB9XG4gIHJldHVybiBzY29wZS5zZWxlY3RvciB8fCAnJztcbn1cblxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlUmVnaXN0cnkge1xuICBwcml2YXRlIHZhcmlhYmxlczogTWFwPHN0cmluZywgVmFyaWFibGVEZWZpbml0aW9uW10+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlc29sdXRpb25DYWNoZTogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZXNvbHV0aW9uU3RhY2s6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gIHJlZ2lzdGVyKHZhcmlhYmxlOiBWYXJpYWJsZURlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB2YXJpYWJsZS5uYW1lO1xuICAgIFxuICAgIGlmICghdGhpcy52YXJpYWJsZXMuaGFzKGtleSkpIHtcbiAgICAgIHRoaXMudmFyaWFibGVzLnNldChrZXksIFtdKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPSB0aGlzLnZhcmlhYmxlcy5nZXQoa2V5KSE7XG4gICAgZGVmaW5pdGlvbnMucHVzaCh2YXJpYWJsZSk7XG4gICAgXG4gICAgZGVmaW5pdGlvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3Qgc3BlY0NvbXBhcmUgPSBjb21wYXJlU3BlY2lmaWNpdHkoYi5zcGVjaWZpY2l0eSwgYS5zcGVjaWZpY2l0eSk7XG4gICAgICBpZiAoc3BlY0NvbXBhcmUgIT09IDApIHJldHVybiBzcGVjQ29tcGFyZTtcbiAgICAgIHJldHVybiBiLnNvdXJjZU9yZGVyIC0gYS5zb3VyY2VPcmRlcjtcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLnJlc29sdXRpb25DYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgcmVzb2x2ZShcbiAgICB2YXJOYW1lOiBzdHJpbmcsXG4gICAgY29udGV4dDogUmVzb2x1dGlvbkNvbnRleHQsXG4gICAgZmFsbGJhY2s/OiBzdHJpbmdcbiAgKTogeyB2YWx1ZTogc3RyaW5nOyByZXNvbHZlZDogYm9vbGVhbjsgc291cmNlOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBgJHt2YXJOYW1lfToke2NvbnRleHQuc2VsZWN0b3J9OiR7Y29udGV4dC52YXJpYW50cy5qb2luKCcsJyl9YDtcbiAgICBcbiAgICBpZiAodGhpcy5yZXNvbHV0aW9uQ2FjaGUuaGFzKGNhY2hlS2V5KSkge1xuICAgICAgcmV0dXJuIHsgdmFsdWU6IHRoaXMucmVzb2x1dGlvbkNhY2hlLmdldChjYWNoZUtleSkhLCByZXNvbHZlZDogdHJ1ZSwgc291cmNlOiAnY2FjaGUnIH07XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLnJlc29sdXRpb25TdGFjay5oYXModmFyTmFtZSkpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgZm9yIHZhcmlhYmxlOiAke3Zhck5hbWV9YCk7XG4gICAgICByZXR1cm4geyB2YWx1ZTogZmFsbGJhY2sgfHwgJycsIHJlc29sdmVkOiBmYWxzZSwgc291cmNlOiAnY2lyY3VsYXInIH07XG4gICAgfVxuICAgIFxuICAgIHRoaXMucmVzb2x1dGlvblN0YWNrLmFkZCh2YXJOYW1lKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbnMgPSB0aGlzLnZhcmlhYmxlcy5nZXQodmFyTmFtZSk7XG4gICAgICBcbiAgICAgIGlmICghZGVmaW5pdGlvbnMgfHwgZGVmaW5pdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChmYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRGYWxsYmFjayA9IHRoaXMucmVzb2x2ZVZhbHVlKGZhbGxiYWNrLCBjb250ZXh0KTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogcmVzb2x2ZWRGYWxsYmFjay52YWx1ZSwgcmVzb2x2ZWQ6IHRydWUsIHNvdXJjZTogJ2ZhbGxiYWNrJyB9O1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci53YXJuKGBVbmRlZmluZWQgQ1NTIHZhcmlhYmxlOiAke3Zhck5hbWV9YCk7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiAnJywgcmVzb2x2ZWQ6IGZhbHNlLCBzb3VyY2U6ICd1bmRlZmluZWQnIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGFwcGxpY2FibGVEZWZzID0gZGVmaW5pdGlvbnMuZmlsdGVyKGRlZiA9PiBcbiAgICAgICAgdGhpcy5pc0FwcGxpY2FibGUoZGVmLCBjb250ZXh0KVxuICAgICAgKTtcbiAgICAgIFxuICAgICAgaWYgKGFwcGxpY2FibGVEZWZzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkRmFsbGJhY2sgPSB0aGlzLnJlc29sdmVWYWx1ZShmYWxsYmFjaywgY29udGV4dCk7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHJlc29sdmVkRmFsbGJhY2sudmFsdWUsIHJlc29sdmVkOiB0cnVlLCBzb3VyY2U6ICdmYWxsYmFjaycgfTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIud2FybihgTm8gYXBwbGljYWJsZSBkZWZpbml0aW9uIGZvciB2YXJpYWJsZTogJHt2YXJOYW1lfSBpbiBjb250ZXh0OiAke2NvbnRleHQuc2VsZWN0b3J9YCk7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiAnJywgcmVzb2x2ZWQ6IGZhbHNlLCBzb3VyY2U6ICduby1tYXRjaCcgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgYmVzdE1hdGNoID0gYXBwbGljYWJsZURlZnNbMF07XG4gICAgICBjb25zdCByZXNvbHZlZFZhbHVlID0gdGhpcy5yZXNvbHZlVmFsdWUoYmVzdE1hdGNoLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIFxuICAgICAgaWYgKHJlc29sdmVkVmFsdWUuaXNDaXJjdWxhcikge1xuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICB2YWx1ZTogcmVzb2x2ZWRWYWx1ZS52YWx1ZSwgXG4gICAgICAgICAgcmVzb2x2ZWQ6IGZhbHNlLCBcbiAgICAgICAgICBzb3VyY2U6ICdjaXJjdWxhcicgXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHsgXG4gICAgICAgIHZhbHVlOiByZXNvbHZlZFZhbHVlLnZhbHVlLCBcbiAgICAgICAgcmVzb2x2ZWQ6ICFyZXNvbHZlZFZhbHVlLmhhc1VucmVzb2x2ZWQsIFxuICAgICAgICBzb3VyY2U6IHJlc29sdmVkVmFsdWUuaGFzVW5yZXNvbHZlZCA/ICd1bnJlc29sdmVkJyA6ICdyZXNvbHZlZCcgXG4gICAgICB9O1xuICAgICAgXG4gICAgICB0aGlzLnJlc29sdXRpb25DYWNoZS5zZXQoY2FjaGVLZXksIHJlc3VsdC52YWx1ZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmVzb2x1dGlvblN0YWNrLmRlbGV0ZSh2YXJOYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlVmFsdWUodmFsdWU6IHN0cmluZywgY29udGV4dDogUmVzb2x1dGlvbkNvbnRleHQpOiB7IHZhbHVlOiBzdHJpbmc7IGhhc1VucmVzb2x2ZWQ6IGJvb2xlYW47IGlzQ2lyY3VsYXI/OiBib29sZWFuIH0ge1xuICAgIGNvbnN0IHZhclBhdHRlcm4gPSAvdmFyXFxzKlxcKFxccyooLS1bYS16QS1aMC05Xy1dKylcXHMqKD86LFxccyooW14pXSspKT9cXHMqXFwpL2c7XG4gICAgbGV0IHJlc3VsdCA9IHZhbHVlO1xuICAgIGxldCBoYXNVbnJlc29sdmVkID0gZmFsc2U7XG4gICAgbGV0IGlzQ2lyY3VsYXIgPSBmYWxzZTtcbiAgICBsZXQgbWF0Y2g7XG4gICAgbGV0IGl0ZXJhdGlvbnMgPSAwO1xuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDtcbiAgICBcbiAgICB3aGlsZSAoKG1hdGNoID0gdmFyUGF0dGVybi5leGVjKHJlc3VsdCkpICE9PSBudWxsKSB7XG4gICAgICBpZiAoKytpdGVyYXRpb25zID4gbWF4SXRlcmF0aW9ucykge1xuICAgICAgICBsb2dnZXIud2FybihgTWF4IHZhcmlhYmxlIHJlc29sdXRpb24gZGVwdGggcmVhY2hlZCBmb3I6ICR7dmFsdWV9YCk7XG4gICAgICAgIGhhc1VucmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgZnVsbE1hdGNoID0gbWF0Y2hbMF07XG4gICAgICBjb25zdCB2YXJOYW1lID0gbWF0Y2hbMV07XG4gICAgICBjb25zdCBmYWxsYmFjayA9IG1hdGNoWzJdPy50cmltKCk7XG4gICAgICBcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlKHZhck5hbWUsIGNvbnRleHQsIGZhbGxiYWNrKTtcbiAgICAgIFxuICAgICAgaWYgKHJlc29sdmVkLnNvdXJjZSA9PT0gJ2NpcmN1bGFyJykge1xuICAgICAgICBpc0NpcmN1bGFyID0gdHJ1ZTtcbiAgICAgICAgaGFzVW5yZXNvbHZlZCA9IHRydWU7XG4gICAgICAgIHJlc3VsdCA9IHJlc29sdmVkLnZhbHVlIHx8ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKCFyZXNvbHZlZC5yZXNvbHZlZCkge1xuICAgICAgICBoYXNVbnJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0ID0gcmVzb2x2ZWQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShmdWxsTWF0Y2gsIHJlc29sdmVkLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHZhclBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHsgdmFsdWU6IHJlc3VsdCwgaGFzVW5yZXNvbHZlZCwgaXNDaXJjdWxhciB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FwcGxpY2FibGUoZGVmOiBWYXJpYWJsZURlZmluaXRpb24sIGNvbnRleHQ6IFJlc29sdXRpb25Db250ZXh0KTogYm9vbGVhbiB7XG4gICAgaWYgKGRlZi5zY29wZS50eXBlID09PSAnZ2xvYmFsJykge1xuICAgICAgaWYgKGRlZi52YXJpYW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy52YXJpYW50c01hdGNoKGRlZi52YXJpYW50cywgY29udGV4dC52YXJpYW50cyk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHNjb3BlU2VsZWN0b3IgPSBkZWYuc2NvcGUuc2VsZWN0b3IgfHwgJyc7XG4gICAgY29uc3QgY29udGV4dFNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjtcbiAgICBcbiAgICBpZiAoc2NvcGVTZWxlY3RvciA9PT0gY29udGV4dFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy52YXJpYW50c01hdGNoKGRlZi52YXJpYW50cywgY29udGV4dC52YXJpYW50cyk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLnNlbGVjdG9yQ29udGFpbnMoY29udGV4dFNlbGVjdG9yLCBzY29wZVNlbGVjdG9yKSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFyaWFudHNNYXRjaChkZWYudmFyaWFudHMsIGNvbnRleHQudmFyaWFudHMpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHZhcmlhbnRzTWF0Y2goZGVmVmFyaWFudHM6IHN0cmluZ1tdLCBjb250ZXh0VmFyaWFudHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgaWYgKGRlZlZhcmlhbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIGlmIChjb250ZXh0VmFyaWFudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBkZWZWYXJpYW50cy5ldmVyeSh2ID0+IGNvbnRleHRWYXJpYW50cy5pbmNsdWRlcyh2KSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdG9yQ29udGFpbnMob3V0ZXI6IHN0cmluZywgaW5uZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlubmVyQ2xhc3Nlczogc3RyaW5nW10gPSBpbm5lci5tYXRjaCgvXFwuW2EtekEtWl8tXVthLXpBLVowLTlfLV0qL2cpIHx8IFtdO1xuICAgIGNvbnN0IG91dGVyQ2xhc3Nlczogc3RyaW5nW10gPSBvdXRlci5tYXRjaCgvXFwuW2EtekEtWl8tXVthLXpBLVowLTlfLV0qL2cpIHx8IFtdO1xuICAgIFxuICAgIHJldHVybiBpbm5lckNsYXNzZXMuZXZlcnkoY2xzID0+IG91dGVyQ2xhc3Nlcy5pbmNsdWRlcyhjbHMpKTtcbiAgfVxuXG4gIGhhc1ZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhcmlhYmxlcy5oYXMobmFtZSk7XG4gIH1cblxuICBnZXRWYXJpYWJsZURlZmluaXRpb25zKG5hbWU6IHN0cmluZyk6IFZhcmlhYmxlRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy52YXJpYWJsZXMuZ2V0KG5hbWUpIHx8IFtdO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy52YXJpYWJsZXMuY2xlYXIoKTtcbiAgICB0aGlzLnJlc29sdXRpb25DYWNoZS5jbGVhcigpO1xuICAgIHRoaXMucmVzb2x1dGlvblN0YWNrLmNsZWFyKCk7XG4gIH1cblxuICBnZXRSZWdpc3RlcmVkVmFyaWFibGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnZhcmlhYmxlcy5rZXlzKCkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZhckV4cHJlc3Npb24odmFsdWU6IHN0cmluZyk6IHsgXG4gIGhhc1ZhcjogYm9vbGVhbjsgXG4gIHZhck5hbWU/OiBzdHJpbmc7IFxuICBmYWxsYmFjaz86IHN0cmluZztcbiAgcmF3VmFsdWU6IHN0cmluZztcbn0ge1xuICBjb25zdCB2YXJQYXR0ZXJuID0gL152YXJcXHMqXFwoXFxzKigtLVthLXpBLVowLTlfLV0rKVxccyooPzosXFxzKiguKylcXHMqKT9cXCkkLztcbiAgY29uc3QgbWF0Y2ggPSB2YWx1ZS5tYXRjaCh2YXJQYXR0ZXJuKTtcbiAgXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IGZhbGxiYWNrID0gbWF0Y2hbMl0/LnRyaW0oKTtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzVmFyOiB0cnVlLFxuICAgICAgdmFyTmFtZTogbWF0Y2hbMV0sXG4gICAgICBmYWxsYmFjazogZmFsbGJhY2sgJiYgZmFsbGJhY2subGVuZ3RoID4gMCA/IGZhbGxiYWNrIDogdW5kZWZpbmVkLFxuICAgICAgcmF3VmFsdWU6IHZhbHVlXG4gICAgfTtcbiAgfVxuICBcbiAgcmV0dXJuIHsgaGFzVmFyOiBmYWxzZSwgcmF3VmFsdWU6IHZhbHVlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Nzc1ZhcmlhYmxlKHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHByb3BlcnR5LnN0YXJ0c1dpdGgoJy0tJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhckV4cHJlc3Npb24odmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL3ZhclxccypcXChcXHMqLS1bYS16QS1aMC05Xy1dK1xccyooPzosW14pXSspP1xccypcXCkvLnRlc3QodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2xvYmFsU2NvcGUoKTogVmFyaWFibGVTY29wZSB7XG4gIHJldHVybiB7IHR5cGU6ICdnbG9iYWwnIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZWxlY3RvclNjb3BlKHNlbGVjdG9yOiBzdHJpbmcsIHNlbGVjdG9yVHlwZTogJ2NsYXNzJyB8ICdlbGVtZW50JyB8ICdyb290JyA9ICdjbGFzcycpOiBWYXJpYWJsZVNjb3BlIHtcbiAgcmV0dXJuIHsgdHlwZTogJ3NlbGVjdG9yJywgc2VsZWN0b3IsIHNlbGVjdG9yVHlwZSB9O1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "css-to-tailwind-react",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "description": "Convert traditional CSS (inline, internal, and external) into Tailwind CSS utility classes for React-based frameworks",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",