@helios-lang/contract-utils 0.2.52 → 0.2.54

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,44 +1,45 @@
1
1
  {
2
- "name": "@helios-lang/contract-utils",
3
- "version": "0.2.52",
4
- "description": "Convenience and type-safety utilities for using Helios validators from within Typescript",
5
- "main": "src/index.js",
6
- "types": "types/index.d.ts",
7
- "type": "module",
8
- "bin": {
9
- "hl2ts": "src/hl2ts.js"
10
- },
11
- "author": "Christian Schmitz",
12
- "license": "BSD-3-Clause",
13
- "devDependencies": {
14
- "@types/node": "^20.11.24",
15
- "prettier": "^3.1.0",
16
- "typescript": "^5.3.2"
17
- },
18
- "prettier": {
19
- "trailingComma": "none",
20
- "tabWidth": 4,
21
- "semi": false,
22
- "singleQuote": false
23
- },
24
- "peerDependencies": {
25
- "@helios-lang/compiler": "*"
26
- },
27
- "dependencies": {
28
- "@helios-lang/cli-utils": "^0.1.6",
29
- "@helios-lang/codec-utils": "^0.1.34",
30
- "@helios-lang/compiler-utils": "^0.1.25",
31
- "@helios-lang/ledger": "^0.4.9",
32
- "@helios-lang/type-utils": "^0.1.21",
33
- "@helios-lang/uplc": "^0.3.5"
34
- },
35
- "scripts": {
36
- "build": "pnpm run prettify && pnpm run build:types && pnpm run test:suite",
37
- "build:types": "tsc -p jsconfig.json --noEmit false --emitDeclarationOnly",
38
- "prettify": "prettier . --write",
39
- "test": "pnpm run test:pretty && pnpm run test:types && pnpm run test:suite",
40
- "test:pretty": "prettier . --check",
41
- "test:suite": "node --test",
42
- "test:types": "pnpm run build:types"
43
- }
44
- }
2
+ "name": "@helios-lang/contract-utils",
3
+ "version": "0.2.54",
4
+ "description": "Convenience and type-safety utilities for using Helios validators from within Typescript",
5
+ "main": "src/index.js",
6
+ "types": "types/index.d.ts",
7
+ "type": "module",
8
+ "bin": {
9
+ "hl2ts": "src/hl2ts.js"
10
+ },
11
+ "scripts": {
12
+ "build": "pnpm run prettify && pnpm run build:types && pnpm run test:suite",
13
+ "build:types": "tsc -p jsconfig.json --noEmit false --emitDeclarationOnly",
14
+ "prepack": "pnpm run build",
15
+ "prettify": "prettier . --write",
16
+ "test": "pnpm run test:pretty && pnpm run test:types && pnpm run test:suite",
17
+ "test:pretty": "prettier . --check",
18
+ "test:suite": "node --test",
19
+ "test:types": "pnpm run build:types"
20
+ },
21
+ "author": "Christian Schmitz",
22
+ "license": "BSD-3-Clause",
23
+ "devDependencies": {
24
+ "@types/node": "^20.11.24",
25
+ "prettier": "^3.1.0",
26
+ "typescript": "^5.3.2"
27
+ },
28
+ "prettier": {
29
+ "trailingComma": "none",
30
+ "tabWidth": 4,
31
+ "semi": false,
32
+ "singleQuote": false
33
+ },
34
+ "peerDependencies": {
35
+ "@helios-lang/compiler": "*"
36
+ },
37
+ "dependencies": {
38
+ "@helios-lang/cli-utils": "^0.1.6",
39
+ "@helios-lang/codec-utils": "^0.1.34",
40
+ "@helios-lang/compiler-utils": "^0.1.25",
41
+ "@helios-lang/ledger": "^0.4.10",
42
+ "@helios-lang/type-utils": "^0.1.21",
43
+ "@helios-lang/uplc": "^0.3.5"
44
+ }
45
+ }
package/src/cast/Cast.js CHANGED
@@ -60,7 +60,7 @@ import {
60
60
 
61
61
  /**
62
62
  * @template TStrict
63
- * @template TPermissive
63
+ * @template TPermissive=TStrict
64
64
  */
65
65
  export class Cast {
66
66
  /**
@@ -1,6 +1,6 @@
1
1
  import { bytesToHex } from "@helios-lang/codec-utils"
2
2
  import { expectSome, isLeft, isString } from "@helios-lang/type-utils"
3
- import { ConstrData, UplcDataValue } from "@helios-lang/uplc"
3
+ import { ConstrData, IntData, UplcDataValue } from "@helios-lang/uplc"
4
4
  import { Cast } from "./Cast.js"
5
5
 
6
6
  /**
@@ -21,6 +21,7 @@ import { Cast } from "./Cast.js"
21
21
  * name: string
22
22
  * type: TypeSchema
23
23
  * isOptional: boolean
24
+ * isIgnored?: boolean
24
25
  * }[]
25
26
  * returns: TypeSchema
26
27
  * validatorIndices?: Record<string, number>
@@ -60,6 +61,13 @@ export class UserFunc {
60
61
  this.props = props
61
62
  }
62
63
 
64
+ /**
65
+ * @type {string}
66
+ */
67
+ get name() {
68
+ return this.props.name
69
+ }
70
+
63
71
  /**
64
72
  * @param {ArgsT} namedArgs
65
73
  * @returns {RetT}
@@ -121,20 +129,43 @@ export class UserFunc {
121
129
  * @returns {CekResult}
122
130
  */
123
131
  profile(namedArgs) {
132
+ const isMain = this.name == "main"
133
+
124
134
  /**
125
135
  * @type {UplcData[]}
126
136
  */
127
- const args = this.props.arguments.map(({ name, type, isOptional }) => {
128
- if (isOptional) {
129
- if (name in namedArgs && namedArgs[name]) {
130
- return new ConstrData(0, [namedArgs[name]])
137
+ const args = []
138
+
139
+ this.props.arguments.forEach(
140
+ ({ name, type, isOptional, isIgnored }) => {
141
+ if (isMain) {
142
+ if (isOptional) {
143
+ // used for $datum in mixed script
144
+ if (name in namedArgs && namedArgs[name]) {
145
+ args.push(namedArgs[name])
146
+ }
147
+ } else if (isIgnored) {
148
+ if (name in namedArgs && namedArgs[name]) {
149
+ args.push(namedArgs[name])
150
+ } else {
151
+ args.push(new IntData(0))
152
+ }
153
+ } else {
154
+ args.push(expectSome(namedArgs[name]))
155
+ }
131
156
  } else {
132
- return new ConstrData(1, [])
157
+ if (isOptional) {
158
+ if (name in namedArgs && namedArgs[name]) {
159
+ args.push(new ConstrData(0, [namedArgs[name]]))
160
+ } else {
161
+ args.push(new ConstrData(1, []))
162
+ }
163
+ } else {
164
+ args.push(expectSome(namedArgs[name]))
165
+ }
133
166
  }
134
- } else {
135
- return expectSome(namedArgs[name])
136
167
  }
137
- })
168
+ )
138
169
 
139
170
  if (this.props.requiresScriptContext) {
140
171
  args.push(expectSome(namedArgs["$scriptContext"]))
@@ -403,8 +403,12 @@ function genFuncType(fn) {
403
403
  fields.push("$currentScript: string")
404
404
  }
405
405
 
406
- fn.arguments.forEach(({ name, type, isOptional }, i) => {
407
- fields.push(`${name}${isOptional ? "?" : ""}: ${genTypes(type)[1]}`)
406
+ fn.arguments.forEach(({ name, type, isOptional, isIgnored }, i) => {
407
+ if (isIgnored) {
408
+ fields.push(`${name}?: UplcData`)
409
+ } else {
410
+ fields.push(`${name}${isOptional ? "?" : ""}: ${genTypes(type)[1]}`)
411
+ }
408
412
  })
409
413
 
410
414
  const argsTypeStr = `{${fields.join(", ")}}`
@@ -13,6 +13,7 @@ export {}
13
13
  * name: string
14
14
  * type: TypeSchema
15
15
  * isOptional: boolean
16
+ * isIgnored?: boolean
16
17
  * }[]
17
18
  * returns: TypeSchema
18
19
  * }} TypeCheckedUserFunc
@@ -187,15 +187,32 @@ export class ContractContextBuilder {
187
187
  ),
188
188
  ...Object.fromEntries(
189
189
  Object.entries(validator.$functions).map(
190
- ([funcKey, userFunc]) => [
191
- funcKey,
192
- userFunc(
193
- expectSome(
194
- compiled.userFuncs[`${name}::${funcKey}`]
195
- ),
196
- castConfig
197
- )
198
- ]
190
+ ([funcKey, userFunc]) => {
191
+ if (funcKey == "main") {
192
+ return [
193
+ funcKey,
194
+ userFunc(
195
+ expectSome(
196
+ compiled.validators[name].context
197
+ .program
198
+ ),
199
+ castConfig
200
+ )
201
+ ]
202
+ } else {
203
+ return [
204
+ funcKey,
205
+ userFunc(
206
+ expectSome(
207
+ compiled.userFuncs[
208
+ `${name}::${funcKey}`
209
+ ]
210
+ ),
211
+ castConfig
212
+ )
213
+ ]
214
+ }
215
+ }
199
216
  )
200
217
  ),
201
218
  $hash: compiled.validators[name]
@@ -28,7 +28,7 @@ export function configureCast<TStrict, TPermissive>(cast: CastLike<TStrict, TPer
28
28
  */
29
29
  /**
30
30
  * @template TStrict
31
- * @template TPermissive
31
+ * @template TPermissive=TStrict
32
32
  */
33
33
  export class Cast<TStrict, TPermissive> {
34
34
  /**
@@ -15,6 +15,7 @@
15
15
  * name: string
16
16
  * type: TypeSchema
17
17
  * isOptional: boolean
18
+ * isIgnored?: boolean
18
19
  * }[]
19
20
  * returns: TypeSchema
20
21
  * validatorIndices?: Record<string, number>
@@ -48,6 +49,10 @@ export class UserFunc<ArgsT extends {
48
49
  * @type {UserFuncProps}
49
50
  */
50
51
  private readonly props;
52
+ /**
53
+ * @type {string}
54
+ */
55
+ get name(): string;
51
56
  /**
52
57
  * @param {ArgsT} namedArgs
53
58
  * @returns {RetT}
@@ -78,6 +83,7 @@ export type UserFuncProps = {
78
83
  name: string;
79
84
  type: TypeSchema;
80
85
  isOptional: boolean;
86
+ isIgnored?: boolean;
81
87
  }[];
82
88
  returns: TypeSchema;
83
89
  validatorIndices?: Record<string, number>;
@@ -1 +1 @@
1
- {"version":3,"file":"UserFunc.d.ts","sourceRoot":"","sources":["../../src/cast/UserFunc.js"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AAEH;;;GAGG;AACH,sBAHwC,KAAK,SAAhC;IAAE,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC1B,IAAI;IAgBb;;;OAGG;IACH,kBAHW,WAAW,SACX,aAAa,EAKvB;IApBD;;;OAGG;IACH,eAFU,WAAW,CAEjB;IAEJ;;;;OAIG;IACH,uBAAK;IAWL;;;OAGG;IACH,gBAHW,KAAK,GACH,IAAI,CAoChB;IAED;;;OAGG;IACH,sBAHW,WAAW,CAAC,KAAK,CAAC,GAChB,QAAQ,CAYpB;IAED;;;OAGG;IACH,mBAHW,WAAW,CAAC,KAAK,CAAC,GAChB,SAAS,CAkFrB;CACJ;yBArMY,OAAO,yBAAyB,EAAE,UAAU;wBAC5C,OAAO,mBAAmB,EAAE,SAAS;uBACrC,OAAO,mBAAmB,EAAE,QAAQ;0BACpC,OAAO,mBAAmB,EAAE,WAAW;wBACvC,OAAO,mBAAmB,EAAE,SAAS;yBACrC,OAAO,WAAW,EAAE,UAAU;4BAI9B;IACZ,IAAQ,EAAE,MAAM,CAAA;IAChB,qBAAyB,EAAE,OAAO,CAAA;IAClC,qBAAyB,EAAE,OAAO,CAAA;IAClC,SAAa,EAAE;QACf,IAAU,EAAE,MAAM,CAAA;QAClB,IAAU,EAAE,UAAU,CAAA;QACtB,UAAgB,EAAE,OAAO,CAAA;KACpB,EAAE,CAAA;IACP,OAAW,EAAE,UAAU,CAAA;IACvB,gBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,UAAc,EAAE,UAAU,CAAA;CACvB;wBAIS,KAAK,IACL,GAAE,CAAgB,IAAX,MAAM,KAAK,GAAG,CAAC,SAAS,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAC"}
1
+ {"version":3,"file":"UserFunc.d.ts","sourceRoot":"","sources":["../../src/cast/UserFunc.js"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;GAeG;AAEH;;;GAGG;AAEH;;;GAGG;AACH,sBAHwC,KAAK,SAAhC;IAAE,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC1B,IAAI;IAgBb;;;OAGG;IACH,kBAHW,WAAW,SACX,aAAa,EAKvB;IApBD;;;OAGG;IACH,eAFU,WAAW,CAEjB;IAEJ;;;;OAIG;IACH,uBAAK;IAWL;;OAEG;IACH,mBAEC;IAED;;;OAGG;IACH,gBAHW,KAAK,GACH,IAAI,CAoChB;IAED;;;OAGG;IACH,sBAHW,WAAW,CAAC,KAAK,CAAC,GAChB,QAAQ,CAYpB;IAED;;;OAGG;IACH,mBAHW,WAAW,CAAC,KAAK,CAAC,GAChB,SAAS,CAyGrB;CACJ;yBApOY,OAAO,yBAAyB,EAAE,UAAU;wBAC5C,OAAO,mBAAmB,EAAE,SAAS;uBACrC,OAAO,mBAAmB,EAAE,QAAQ;0BACpC,OAAO,mBAAmB,EAAE,WAAW;wBACvC,OAAO,mBAAmB,EAAE,SAAS;yBACrC,OAAO,WAAW,EAAE,UAAU;4BAI9B;IACZ,IAAQ,EAAE,MAAM,CAAA;IAChB,qBAAyB,EAAE,OAAO,CAAA;IAClC,qBAAyB,EAAE,OAAO,CAAA;IAClC,SAAa,EAAE;QACf,IAAU,EAAE,MAAM,CAAA;QAClB,IAAU,EAAE,UAAU,CAAA;QACtB,UAAgB,EAAE,OAAO,CAAA;QACzB,SAAe,CAAC,EAAE,OAAO,CAAA;KACpB,EAAE,CAAA;IACP,OAAW,EAAE,UAAU,CAAA;IACvB,gBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,UAAc,EAAE,UAAU,CAAA;CACvB;wBAIS,KAAK,IACL,GAAE,CAAgB,IAAX,MAAM,KAAK,GAAG,CAAC,SAAS,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAC"}
@@ -7,6 +7,7 @@ export type TypeCheckedUserFunc = {
7
7
  name: string;
8
8
  type: TypeSchema;
9
9
  isOptional: boolean;
10
+ isIgnored?: boolean;
10
11
  }[];
11
12
  returns: TypeSchema;
12
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"TypeCheckedModule.d.ts","sourceRoot":"","sources":["../../src/codegen/TypeCheckedModule.js"],"names":[],"mappings":"yBAGa,OAAO,iBAAiB,EAAE,UAAU;kCAIpC;IACZ,IAAQ,EAAE,MAAM,CAAA;IAChB,qBAAyB,EAAE,OAAO,CAAA;IAClC,qBAAyB,EAAE,OAAO,CAAA;IAClC,SAAa,EAAE;QACf,IAAU,EAAE,MAAM,CAAA;QAClB,IAAU,EAAE,UAAU,CAAA;QACtB,UAAgB,EAAE,OAAO,CAAA;KACpB,EAAE,CAAA;IACP,OAAW,EAAE,UAAU,CAAA;CACpB;gCAIS;IACZ,IAAQ,EAAE,MAAM,CAAA;IAChB,OAAW,EAAE,MAAM,CAAA;IACnB,UAAc,EAAE,MAAM,CAAA;IACtB,iBAAqB,EAAE,MAAM,EAAE,CAAA;IAC/B,KAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACrC,SAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CAChD"}
1
+ {"version":3,"file":"TypeCheckedModule.d.ts","sourceRoot":"","sources":["../../src/codegen/TypeCheckedModule.js"],"names":[],"mappings":"yBAGa,OAAO,iBAAiB,EAAE,UAAU;kCAIpC;IACZ,IAAQ,EAAE,MAAM,CAAA;IAChB,qBAAyB,EAAE,OAAO,CAAA;IAClC,qBAAyB,EAAE,OAAO,CAAA;IAClC,SAAa,EAAE;QACf,IAAU,EAAE,MAAM,CAAA;QAClB,IAAU,EAAE,UAAU,CAAA;QACtB,UAAgB,EAAE,OAAO,CAAA;QACzB,SAAe,CAAC,EAAE,OAAO,CAAA;KACpB,EAAE,CAAA;IACP,OAAW,EAAE,UAAU,CAAA;CACpB;gCAIS;IACZ,IAAQ,EAAE,MAAM,CAAA;IAChB,OAAW,EAAE,MAAM,CAAA;IACnB,UAAc,EAAE,MAAM,CAAA;IACtB,iBAAqB,EAAE,MAAM,EAAE,CAAA;IAC/B,KAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACrC,SAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CAChD"}
@@ -1 +1 @@
1
- {"version":3,"file":"ContractContextBuilder.d.ts","sourceRoot":"","sources":["../../src/context/ContractContextBuilder.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AAEH;;;GAGG;AAEH;;;;GAIG;AAEH;;;;;;;;GAQG;AAEH;;;GAGG;AACH,oCAHiD,EAAE,SAAtC;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,EACF,EAAE,SAAnC;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE;IA0BzC;;OAEG;IACH,gBAFa,sBAAsB,CAAC,EAAE,EAAE,EAAE,CAAC,CAI1C;IAfD;;;;OAIG;IACH,sBAGC;IArBD;;;;OAIG;IACH,4BAAU;IAEV;;;OAGG;IACH,kBAFU,EAAE,CAEL;IAmBP;;;;;;;OAOG;IACH,KAP+B,CAAC,SAAlB,eAAgB,aACnB,CAAC,GACC,sBAAsB,CAC9B,EAAE,GAAG,GAAE,CAAe,IAAV,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAC,EAC3B,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAC5B,CAeH;IAED;;;;;;;OAOG;IACH,WAP4B,CAAC,SAAf,YAAa,KAChB,CAAC,GACC,sBAAsB,CAC9B,EAAE,EACF,EAAE,GAAG,GAAE,CAAe,IAAV,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAC,CAC5B,CAUH;IAED;;;OAGG;IACH,aAHW,yBAAyB,GACvB,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,CA6FnC;CACJ;yBAvMY,OAAO,kBAAkB,EAAE,UAAU;2BACrC,OAAO,4BAA4B,EAAE,YAAY;8BACjD,OAAO,+BAA+B,EAAE,eAAe;0BACvD,OAAO,sBAAsB,EAAE,WAAW;gCAIxB,CAAC,SAAlB,eAAgB,IACjB,OAAO,+BAA+B,EAAE,mBAAmB,CAAC,CAAC,CAAC;4BAI1B,EAAE,SAAtC;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,EACF,EAAE,SAAnC;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,IAChC,OAAO,sBAAsB,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC;wCAItD;IACZ,SAAa,EAAE,OAAO,CAAA;IACtB,cAAkB,CAAC,EAAE;QAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAA;IAC7C,UAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACpC,UAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAS,CAAC,EAAE,OAAO,CAAA;CAChB"}
1
+ {"version":3,"file":"ContractContextBuilder.d.ts","sourceRoot":"","sources":["../../src/context/ContractContextBuilder.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AAEH;;;GAGG;AAEH;;;;GAIG;AAEH;;;;;;;;GAQG;AAEH;;;GAGG;AACH,oCAHiD,EAAE,SAAtC;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,EACF,EAAE,SAAnC;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE;IA0BzC;;OAEG;IACH,gBAFa,sBAAsB,CAAC,EAAE,EAAE,EAAE,CAAC,CAI1C;IAfD;;;;OAIG;IACH,sBAGC;IArBD;;;;OAIG;IACH,4BAAU;IAEV;;;OAGG;IACH,kBAFU,EAAE,CAEL;IAmBP;;;;;;;OAOG;IACH,KAP+B,CAAC,SAAlB,eAAgB,aACnB,CAAC,GACC,sBAAsB,CAC9B,EAAE,GAAG,GAAE,CAAe,IAAV,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAC,EAC3B,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAC5B,CAeH;IAED;;;;;;;OAOG;IACH,WAP4B,CAAC,SAAf,YAAa,KAChB,CAAC,GACC,sBAAsB,CAC9B,EAAE,EACF,EAAE,GAAG,GAAE,CAAe,IAAV,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAC,CAC5B,CAUH;IAED;;;OAGG;IACH,aAHW,yBAAyB,GACvB,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,CA8GnC;CACJ;yBAxNY,OAAO,kBAAkB,EAAE,UAAU;2BACrC,OAAO,4BAA4B,EAAE,YAAY;8BACjD,OAAO,+BAA+B,EAAE,eAAe;0BACvD,OAAO,sBAAsB,EAAE,WAAW;gCAIxB,CAAC,SAAlB,eAAgB,IACjB,OAAO,+BAA+B,EAAE,mBAAmB,CAAC,CAAC,CAAC;4BAI1B,EAAE,SAAtC;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,EACF,EAAE,SAAnC;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,IAChC,OAAO,sBAAsB,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC;wCAItD;IACZ,SAAa,EAAE,OAAO,CAAA;IACtB,cAAkB,CAAC,EAAE;QAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAA;IAC7C,UAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACpC,UAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAS,CAAC,EAAE,OAAO,CAAA;CAChB"}