@gesslar/toolkit 2.2.1 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gesslar/toolkit",
3
- "version": "2.2.1",
3
+ "version": "2.3.1",
4
4
  "description": "A collection of utilities for Node.js and browser environments.",
5
5
  "main": "./src/index.js",
6
6
  "type": "module",
@@ -70,9 +70,13 @@ export default class Sass extends Error {
70
70
  * Optionally includes detailed stack trace information.
71
71
  *
72
72
  * @param {boolean} [nerdMode] - Whether to include detailed stack trace
73
+ * @param {boolean} [isNested] - Whether this is a nested error report
73
74
  */
74
- report(nerdMode=false) {
75
- console.error(
75
+ report(nerdMode=false, isNested=false) {
76
+ if(isNested)
77
+ console.error()
78
+
79
+ console.group(
76
80
  `[error] Something Went Wrong\n` +
77
81
  this.trace.join("\n")
78
82
  )
@@ -80,16 +84,33 @@ export default class Sass extends Error {
80
84
  if(nerdMode) {
81
85
  console.error(
82
86
  "\n" +
83
- `[error] Nerd Vittles\n` +
87
+ `[error] Nerd Victuals\n` +
84
88
  this.#fullBodyMassage(this.stack)
85
89
  )
90
+ }
86
91
 
87
- this.cause?.stack && console.error(
88
- "\n" +
89
- `[error] Rethrown From\n` +
90
- this.#fullBodyMassage(this.cause?.stack)
91
- )
92
+ if(this.cause) {
93
+ if(typeof this.cause.report === "function") {
94
+ if(nerdMode) {
95
+ console.error(
96
+ "\n" +
97
+ `[error] Caused By`
98
+ )
99
+ }
100
+
101
+ this.cause.report(nerdMode, true)
102
+ } else if(nerdMode && this.cause.stack) {
103
+ console.error()
104
+ console.group()
105
+ console.error(
106
+ `[error] Rethrown From\n` +
107
+ this.#fullBodyMassage(this.cause.stack)
108
+ )
109
+ console.groupEnd()
110
+ }
92
111
  }
112
+
113
+ console.groupEnd()
93
114
  }
94
115
 
95
116
  /**
@@ -138,7 +159,9 @@ export default class Sass extends Error {
138
159
  throw this.new("Sass.from must take an Error object.")
139
160
 
140
161
  const oldMessage = error.message
141
- const newError = new this(oldMessage, {cause: error}).addTrace(message)
162
+ const newError = new this(
163
+ oldMessage, {cause: error}
164
+ ).addTrace(message)
142
165
 
143
166
  return newError
144
167
  }
@@ -82,21 +82,25 @@ export default class Tantrum extends AggregateError {
82
82
  * Reports all aggregated errors to the console with formatted output.
83
83
  *
84
84
  * @param {boolean} [nerdMode] - Whether to include detailed stack traces
85
+ * @param {boolean} [isNested] - Whether this is a nested error report
85
86
  */
86
- report(nerdMode = false) {
87
- console.error(
88
- `[error] Tantrum Incoming (${this.errors.length} errors)\n` +
87
+ report(nerdMode = false, isNested = false) {
88
+ if(isNested)
89
+ console.error()
90
+
91
+ console.group(
92
+ `[Tantrum Incoming] x${this.errors.length}\n` +
89
93
  this.message
90
94
  )
91
95
 
92
- if(this.trace)
96
+ if(this.trace.length > 0)
93
97
  console.error(this.trace.join("\n"))
94
98
 
95
- console.error()
96
-
97
99
  this.errors.forEach(error => {
98
- error.report(nerdMode)
100
+ error.report(nerdMode, true)
99
101
  })
102
+
103
+ console.groupEnd()
100
104
  }
101
105
 
102
106
  /**
@@ -139,8 +139,8 @@ export default class Util {
139
139
  * @param {Array<object>} rejected - Array of rejected results.
140
140
  * @throws {Error} Throws a Tantrum error with rejection reasons.
141
141
  */
142
- static throwRejected(_message="GIGO", rejected) {
143
- throw Tantrum.new(this.rejectedReasons(rejected))
142
+ static throwRejected(message="GIGO", rejected) {
143
+ throw Tantrum.new(message, this.rejectedReasons(rejected))
144
144
  }
145
145
 
146
146
  /**
package/src/lib/Sass.js CHANGED
@@ -24,9 +24,13 @@ export default class Sass extends BrowserSass {
24
24
  * Optionally includes detailed stack trace information.
25
25
  *
26
26
  * @param {boolean} [nerdMode] - Whether to include detailed stack trace
27
+ * @param {boolean} [isNested] - Whether this is a nested error report
27
28
  */
28
- report(nerdMode=false) {
29
- Term.error(
29
+ report(nerdMode=false, isNested=false) {
30
+ if(isNested)
31
+ Term.error()
32
+
33
+ Term.group(
30
34
  `${Term.terminalBracket(["error", "Something Went Wrong"])}\n` +
31
35
  this.trace.join("\n")
32
36
  )
@@ -34,16 +38,33 @@ export default class Sass extends BrowserSass {
34
38
  if(nerdMode) {
35
39
  Term.error(
36
40
  "\n" +
37
- `${Term.terminalBracket(["error", "Nerd Vittles"])}\n` +
41
+ `${Term.terminalBracket(["error", "Nerd Victuals"])}\n` +
38
42
  this.#fullBodyMassage(this.stack)
39
43
  )
44
+ }
40
45
 
41
- this.cause?.stack && Term.error(
42
- "\n" +
43
- `${Term.terminalBracket(["error", "Rethrown From"])}\n` +
44
- this.#fullBodyMassage(this.cause?.stack)
45
- )
46
+ if(this.cause) {
47
+ if(typeof this.cause.report === "function") {
48
+ if(nerdMode) {
49
+ Term.error(
50
+ "\n" +
51
+ `${Term.terminalBracket(["error", "Caused By"])}`
52
+ )
53
+ }
54
+
55
+ this.cause.report(nerdMode, true)
56
+ } else if(nerdMode && this.cause.stack) {
57
+ Term.error()
58
+ Term.group()
59
+ Term.error(
60
+ `${Term.terminalBracket(["error", "Rethrown From"])}\n` +
61
+ this.#fullBodyMassage(this.cause.stack)
62
+ )
63
+ Term.groupEnd()
64
+ }
46
65
  }
66
+
67
+ Term.groupEnd()
47
68
  }
48
69
 
49
70
  /**
@@ -26,20 +26,24 @@ export default class Tantrum extends BrowserTantrum {
26
26
  * Reports all aggregated errors to the terminal with formatted output.
27
27
  *
28
28
  * @param {boolean} [nerdMode] - Whether to include detailed stack traces
29
+ * @param {boolean} [isNested] - Whether this is a nested error report
29
30
  */
30
- report(nerdMode = false) {
31
- Term.error(
32
- `${Term.terminalBracket(["error", "Tantrum Incoming"])} (${this.errors.length} errors)\n` +
31
+ report(nerdMode = false, isNested = false) {
32
+ if(isNested)
33
+ Term.error()
34
+
35
+ Term.group(
36
+ `${Term.terminalBracket(["error", "Tantrum Incoming"])} x${this.errors.length}\n` +
33
37
  this.message
34
38
  )
35
39
 
36
- if(this.trace)
40
+ if(this.trace.length > 0)
37
41
  Term.error(this.trace.join("\n"))
38
42
 
39
- Term.error()
40
-
41
43
  this.errors.forEach(error => {
42
- error.report(nerdMode)
44
+ error.report(nerdMode, true)
43
45
  })
46
+
47
+ Term.groupEnd()
44
48
  }
45
49
  }
package/src/lib/Term.js CHANGED
@@ -49,6 +49,22 @@ export default class Term {
49
49
  console.debug(...arg)
50
50
  }
51
51
 
52
+ /**
53
+ * Start a console group for indented output.
54
+ *
55
+ * @param {...unknown} [arg] - Optional group label.
56
+ */
57
+ static group(...arg) {
58
+ console.group(...arg)
59
+ }
60
+
61
+ /**
62
+ * End the current console group.
63
+ */
64
+ static groupEnd() {
65
+ console.groupEnd()
66
+ }
67
+
52
68
  /**
53
69
  * Emit a status line to the terminal.
54
70
  *
@@ -54,8 +54,9 @@ export default class Sass extends Error {
54
54
  * Optionally includes detailed stack trace information.
55
55
  *
56
56
  * @param {boolean} [nerdMode] - Whether to include detailed stack trace
57
+ * @param {boolean} [isNested] - Whether this is a nested error report
57
58
  */
58
- report(nerdMode?: boolean): void;
59
+ report(nerdMode?: boolean, isNested?: boolean): void;
59
60
  #private;
60
61
  }
61
62
  import Tantrum from "./Tantrum.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Sass.d.ts","sourceRoot":"","sources":["../../../browser/lib/Sass.js"],"names":[],"mappings":"AAeA;;;GAGG;AACH;IA2GE;;;;;;;;OAQG;IACH,mBALW,KAAK,WACL,MAAM,GACJ,IAAI,CAWhB;IAED;;;;;;;;OAQG;IACH,sBAJW,MAAM,UACN,KAAK,GAAC,IAAI,GAAC,OAAO,GAChB,IAAI,CAchB;IAhJD;;;;;OAKG;IACH,qBAHW,MAAM,WACH,OAAO,EAAA,EAMpB;IAWD;;;;OAIG;IACH,mBAFW,MAAM,EAIhB;IAhBD;;;;OAIG;IACH,aAFa,KAAK,CAAC,MAAM,CAAC,CAIzB;IAWD;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,IAAI,CAShB;IAED;;;;;OAKG;IACH,kBAFW,OAAO,QAqBjB;;CA2EF;oBA1JmB,cAAc"}
1
+ {"version":3,"file":"Sass.d.ts","sourceRoot":"","sources":["../../../browser/lib/Sass.js"],"names":[],"mappings":"AAeA;;;GAGG;AACH;IAgIE;;;;;;;;OAQG;IACH,mBALW,KAAK,WACL,MAAM,GACJ,IAAI,CAahB;IAED;;;;;;;;OAQG;IACH,sBAJW,MAAM,UACN,KAAK,GAAC,IAAI,GAAC,OAAO,GAChB,IAAI,CAchB;IAvKD;;;;;OAKG;IACH,qBAHW,MAAM,WACH,OAAO,EAAA,EAMpB;IAWD;;;;OAIG;IACH,mBAFW,MAAM,EAIhB;IAhBD;;;;OAIG;IACH,aAFa,KAAK,CAAC,MAAM,CAAC,CAIzB;IAWD;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,IAAI,CAShB;IAED;;;;;;OAMG;IACH,kBAHW,OAAO,aACP,OAAO,QAyCjB;;CA6EF;oBAjLmB,cAAc"}
@@ -43,8 +43,9 @@ export default class Tantrum extends AggregateError {
43
43
  * Reports all aggregated errors to the console with formatted output.
44
44
  *
45
45
  * @param {boolean} [nerdMode] - Whether to include detailed stack traces
46
+ * @param {boolean} [isNested] - Whether this is a nested error report
46
47
  */
47
- report(nerdMode?: boolean): void;
48
+ report(nerdMode?: boolean, isNested?: boolean): void;
48
49
  #private;
49
50
  }
50
51
  import Sass from "./Sass.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Tantrum.d.ts","sourceRoot":"","sources":["../../../browser/lib/Tantrum.js"],"names":[],"mappings":"AAaA;;;GAGG;AACH;IAoFE;;;;;;OAMG;IACH,sBAJW,MAAM,WACN,KAAK,CAAC,KAAK,GAAC,IAAI,CAAC,GACf,OAAO,CAOnB;IA5FD;;;;;;OAMG;IACH,qBAJW,MAAM,WACN,KAAK,CAAC,KAAK,GAAC,IAAI,CAAC,SACjB,IAAI,EAkBd;IAED;;;;;;OAMG;IACH,kBAJW,MAAM,WACN,KAAK,GAAC,IAAI,GACR,IAAI,CAShB;IAWD;;;;OAIG;IACH,mBAFW,MAAM,EAIhB;IAhBD;;;;OAIG;IACH,aAFa,KAAK,CAAC,MAAM,CAAC,CAIzB;IAWD;;;;OAIG;IACH,kBAFW,OAAO,QAgBjB;;CAeF;iBAvGgB,WAAW"}
1
+ {"version":3,"file":"Tantrum.d.ts","sourceRoot":"","sources":["../../../browser/lib/Tantrum.js"],"names":[],"mappings":"AAaA;;;GAGG;AACH;IAwFE;;;;;;OAMG;IACH,sBAJW,MAAM,WACN,KAAK,CAAC,KAAK,GAAC,IAAI,CAAC,GACf,OAAO,CAOnB;IAhGD;;;;;;OAMG;IACH,qBAJW,MAAM,WACN,KAAK,CAAC,KAAK,GAAC,IAAI,CAAC,SACjB,IAAI,EAkBd;IAED;;;;;;OAMG;IACH,kBAJW,MAAM,WACN,KAAK,GAAC,IAAI,GACR,IAAI,CAShB;IAWD;;;;OAIG;IACH,mBAFW,MAAM,EAIhB;IAhBD;;;;OAIG;IACH,aAFa,KAAK,CAAC,MAAM,CAAC,CAIzB;IAWD;;;;;OAKG;IACH,kBAHW,OAAO,aACP,OAAO,QAmBjB;;CAeF;iBA3GgB,WAAW"}
@@ -83,7 +83,7 @@ export default class Util {
83
83
  * @param {Array<object>} rejected - Array of rejected results.
84
84
  * @throws {Error} Throws a Tantrum error with rejection reasons.
85
85
  */
86
- static throwRejected(_message?: string, rejected: Array<object>): void;
86
+ static throwRejected(message: string, rejected: Array<object>): void;
87
87
  /**
88
88
  * Filters and returns all fulfilled results from a settled promise array.
89
89
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Util.d.ts","sourceRoot":"","sources":["../../../browser/lib/Util.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH;IACE;;;;;OAKG;IACH,wBAHW,MAAM,GACJ,MAAM,CAYlB;IAED;;;;;;OAMG;IACH,YAJa,CAAC,MACH,MAAM,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC;QAAC,MAAM,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAQ9C;IAED;;;;;;;OAOG;IACH,4BAJW,MAAM,GAAC,MAAM,UACb,MAAM,GACJ,MAAM,CAWlB;IAED;;;;;;;OAOG;IACH,6BAJW,MAAM,GAAC,MAAM,UACb,MAAM,GACJ,MAAM,CAalB;IAED;;;;;;OAMG;IACH,0BAHW,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GACrB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAInC;IAED;;;;;;OAMG;IACH,2BAHW,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GACrB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAIlC;IAED;;;;;OAKG;IACH,2BAHW,KAAK,CAAC,MAAM,CAAC,GACX,OAAO,CAInB;IAED;;;;;OAKG;IACH,kCAHW,KAAK,CAAC,MAAM,CAAC,GACX,KAAK,CAAC,MAAM,CAAC,CAIzB;IAED;;;;;OAKG;IACH,iCAHW,KAAK,CAAC,MAAM,CAAC,GACX,KAAK,CAAC,OAAO,CAAC,CAI1B;IAED;;;;;;OAMG;IACH,gCAJW,MAAM,YACN,KAAK,CAAC,MAAM,CAAC,QAKvB;IAED;;;;;OAKG;IACH,mCAHW,KAAK,CAAC,MAAM,CAAC,GACX,KAAK,CAAC,MAAM,CAAC,CAIzB;IAED;;;;;OAKG;IACH,+BAHW,KAAK,CAAC,MAAM,CAAC,GACX,KAAK,CAAC,OAAO,CAAC,CAI1B;IAED;;;;;;OAMG;IACH,sBAHW,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GACrB,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;;;;OAMG;IACH,8BAJW,MAAM,KACN,MAAM,GACJ,MAAM,CAsBlB;IAED;;;;;;;;OAQG;IACH,+BALW,MAAM,iBACN,KAAK,CAAC,MAAM,CAAC,cACb,MAAM,GACJ,MAAM,CAwBlB;IAED,mEAiBC;CACF"}
1
+ {"version":3,"file":"Util.d.ts","sourceRoot":"","sources":["../../../browser/lib/Util.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH;IACE;;;;;OAKG;IACH,wBAHW,MAAM,GACJ,MAAM,CAYlB;IAED;;;;;;OAMG;IACH,YAJa,CAAC,MACH,MAAM,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC;QAAC,MAAM,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAQ9C;IAED;;;;;;;OAOG;IACH,4BAJW,MAAM,GAAC,MAAM,UACb,MAAM,GACJ,MAAM,CAWlB;IAED;;;;;;;OAOG;IACH,6BAJW,MAAM,GAAC,MAAM,UACb,MAAM,GACJ,MAAM,CAalB;IAED;;;;;;OAMG;IACH,0BAHW,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GACrB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAInC;IAED;;;;;;OAMG;IACH,2BAHW,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GACrB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAIlC;IAED;;;;;OAKG;IACH,2BAHW,KAAK,CAAC,MAAM,CAAC,GACX,OAAO,CAInB;IAED;;;;;OAKG;IACH,kCAHW,KAAK,CAAC,MAAM,CAAC,GACX,KAAK,CAAC,MAAM,CAAC,CAIzB;IAED;;;;;OAKG;IACH,iCAHW,KAAK,CAAC,MAAM,CAAC,GACX,KAAK,CAAC,OAAO,CAAC,CAI1B;IAED;;;;;;OAMG;IACH,gDAHW,KAAK,CAAC,MAAM,CAAC,QAKvB;IAED;;;;;OAKG;IACH,mCAHW,KAAK,CAAC,MAAM,CAAC,GACX,KAAK,CAAC,MAAM,CAAC,CAIzB;IAED;;;;;OAKG;IACH,+BAHW,KAAK,CAAC,MAAM,CAAC,GACX,KAAK,CAAC,OAAO,CAAC,CAI1B;IAED;;;;;;OAMG;IACH,sBAHW,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GACrB,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;;;;OAMG;IACH,8BAJW,MAAM,KACN,MAAM,GACJ,MAAM,CAsBlB;IAED;;;;;;;;OAQG;IACH,+BALW,MAAM,iBACN,KAAK,CAAC,MAAM,CAAC,cACb,MAAM,GACJ,MAAM,CAwBlB;IAED,mEAiBC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"Sass.d.ts","sourceRoot":"","sources":["../../lib/Sass.js"],"names":[],"mappings":"AAgBA;;;GAGG;AACH;;CA2DC;oCAlEiC,qBAAqB"}
1
+ {"version":3,"file":"Sass.d.ts","sourceRoot":"","sources":["../../lib/Sass.js"],"names":[],"mappings":"AAgBA;;;GAGG;AACH;;CAgFC;oCAvFiC,qBAAqB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tantrum.d.ts","sourceRoot":"","sources":["../../lib/Tantrum.js"],"names":[],"mappings":"AAeA;;;GAGG;AACH;IACE,0CAEC;CAsBF;0CAjCuC,qBAAqB"}
1
+ {"version":3,"file":"Tantrum.d.ts","sourceRoot":"","sources":["../../lib/Tantrum.js"],"names":[],"mappings":"AAeA;;;GAGG;AACH;IACE,0CAEC;CA0BF;0CArCuC,qBAAqB"}
@@ -29,6 +29,16 @@ export default class Term {
29
29
  * @param {...unknown} [arg] - Values to log.
30
30
  */
31
31
  static debug(...arg?: unknown[]): void;
32
+ /**
33
+ * Start a console group for indented output.
34
+ *
35
+ * @param {...unknown} [arg] - Optional group label.
36
+ */
37
+ static group(...arg?: unknown[]): void;
38
+ /**
39
+ * End the current console group.
40
+ */
41
+ static groupEnd(): void;
32
42
  /**
33
43
  * Emit a status line to the terminal.
34
44
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Term.d.ts","sourceRoot":"","sources":["../../lib/Term.js"],"names":[],"mappings":"AAKA;IACE;;;;OAIG;IACH,oBAFc,OAAO,EAAA,QAIpB;IAED;;;;OAIG;IACH,qBAFc,OAAO,EAAA,QAIpB;IAED;;;;OAIG;IACH,qBAFc,OAAO,EAAA,QAIpB;IAED;;;;OAIG;IACH,sBAFc,OAAO,EAAA,QAIpB;IAED;;;;OAIG;IACH,sBAFc,OAAO,EAAA,QAIpB;IAED;;;;;;;;;;;;;;OAcG;IACH,oBALW,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,eAEjD;QAAyB,MAAM,EAAvB,OAAO;KACf,GAAU,IAAI,CAOhB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,gCAHW,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAClE,IAAI,CA4BhB;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,gDAJW,KAAK,CAAC,MAAM,CAAC,GACX,MAAM,CASlB;IAED,sCAGC;IAED,2CAEC;IAED,8CAIC;CACF"}
1
+ {"version":3,"file":"Term.d.ts","sourceRoot":"","sources":["../../lib/Term.js"],"names":[],"mappings":"AAKA;IACE;;;;OAIG;IACH,oBAFc,OAAO,EAAA,QAIpB;IAED;;;;OAIG;IACH,qBAFc,OAAO,EAAA,QAIpB;IAED;;;;OAIG;IACH,qBAFc,OAAO,EAAA,QAIpB;IAED;;;;OAIG;IACH,sBAFc,OAAO,EAAA,QAIpB;IAED;;;;OAIG;IACH,sBAFc,OAAO,EAAA,QAIpB;IAED;;;;OAIG;IACH,sBAFc,OAAO,EAAA,QAIpB;IAED;;OAEG;IACH,wBAEC;IAED;;;;;;;;;;;;;;OAcG;IACH,oBALW,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,eAEjD;QAAyB,MAAM,EAAvB,OAAO;KACf,GAAU,IAAI,CAOhB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,gCAHW,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAClE,IAAI,CA4BhB;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,gDAJW,KAAK,CAAC,MAAM,CAAC,GACX,MAAM,CASlB;IAED,sCAGC;IAED,2CAEC;IAED,8CAIC;CACF"}