@aztec/noir-protocol-circuits-types 0.24.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.
- package/README.md +1 -0
- package/dest/index.d.ts +69 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +268 -0
- package/dest/scripts/generate_ts_from_abi.d.ts +2 -0
- package/dest/scripts/generate_ts_from_abi.d.ts.map +1 -0
- package/dest/scripts/generate_ts_from_abi.js +180 -0
- package/dest/target/private_kernel_init.json +1 -0
- package/dest/target/private_kernel_init_simulated.json +1 -0
- package/dest/target/private_kernel_inner.json +1 -0
- package/dest/target/private_kernel_inner_simulated.json +1 -0
- package/dest/target/private_kernel_tail.json +1 -0
- package/dest/target/private_kernel_tail_simulated.json +1 -0
- package/dest/target/public_kernel_app_logic.json +1 -0
- package/dest/target/public_kernel_app_logic_simulated.json +1 -0
- package/dest/target/public_kernel_setup.json +1 -0
- package/dest/target/public_kernel_setup_simulated.json +1 -0
- package/dest/target/rollup_base.json +1 -0
- package/dest/target/rollup_base_simulated.json +1 -0
- package/dest/target/rollup_merge.json +1 -0
- package/dest/target/rollup_root.json +1 -0
- package/dest/type_conversion.d.ts +574 -0
- package/dest/type_conversion.d.ts.map +1 -0
- package/dest/type_conversion.js +1115 -0
- package/dest/types/private_kernel_init_types.d.ts +232 -0
- package/dest/types/private_kernel_init_types.d.ts.map +1 -0
- package/dest/types/private_kernel_init_types.js +3 -0
- package/dest/types/private_kernel_inner_types.d.ts +233 -0
- package/dest/types/private_kernel_inner_types.d.ts.map +1 -0
- package/dest/types/private_kernel_inner_types.js +3 -0
- package/dest/types/private_kernel_tail_types.d.ts +182 -0
- package/dest/types/private_kernel_tail_types.d.ts.map +1 -0
- package/dest/types/private_kernel_tail_types.js +3 -0
- package/dest/types/public_kernel_app_logic_types.d.ts +212 -0
- package/dest/types/public_kernel_app_logic_types.d.ts.map +1 -0
- package/dest/types/public_kernel_app_logic_types.js +3 -0
- package/dest/types/public_kernel_setup_types.d.ts +212 -0
- package/dest/types/public_kernel_setup_types.d.ts.map +1 -0
- package/dest/types/public_kernel_setup_types.js +3 -0
- package/dest/types/rollup_base_types.d.ts +220 -0
- package/dest/types/rollup_base_types.d.ts.map +1 -0
- package/dest/types/rollup_base_types.js +3 -0
- package/dest/types/rollup_merge_types.d.ts +71 -0
- package/dest/types/rollup_merge_types.d.ts.map +1 -0
- package/dest/types/rollup_merge_types.js +3 -0
- package/dest/types/rollup_root_types.d.ts +92 -0
- package/dest/types/rollup_root_types.d.ts.map +1 -0
- package/dest/types/rollup_root_types.js +3 -0
- package/package.json +60 -0
- package/src/fixtures/nested-call-private-kernel-init.hex +1 -0
- package/src/fixtures/nested-call-private-kernel-inner.hex +1 -0
- package/src/fixtures/nested-call-private-kernel-ordering.hex +1 -0
- package/src/index.ts +438 -0
- package/src/scripts/generate_ts_from_abi.ts +233 -0
- package/src/target/private_kernel_init.json +1 -0
- package/src/target/private_kernel_init_simulated.json +1 -0
- package/src/target/private_kernel_inner.json +1 -0
- package/src/target/private_kernel_inner_simulated.json +1 -0
- package/src/target/private_kernel_tail.json +1 -0
- package/src/target/private_kernel_tail_simulated.json +1 -0
- package/src/target/public_kernel_app_logic.json +1 -0
- package/src/target/public_kernel_app_logic_simulated.json +1 -0
- package/src/target/public_kernel_setup.json +1 -0
- package/src/target/public_kernel_setup_simulated.json +1 -0
- package/src/target/rollup_base.json +1 -0
- package/src/target/rollup_base_simulated.json +1 -0
- package/src/target/rollup_merge.json +1 -0
- package/src/target/rollup_root.json +1 -0
- package/src/type_conversion.ts +1673 -0
- package/src/types/private_kernel_init_types.ts +272 -0
- package/src/types/private_kernel_inner_types.ts +273 -0
- package/src/types/private_kernel_tail_types.ts +214 -0
- package/src/types/public_kernel_app_logic_types.ts +250 -0
- package/src/types/public_kernel_setup_types.ts +250 -0
- package/src/types/rollup_base_types.ts +259 -0
- package/src/types/rollup_merge_types.ts +85 -0
- package/src/types/rollup_root_types.ts +109 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Noir Private Kernel
|
package/dest/index.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { BaseOrMergeRollupPublicInputs, BaseRollupInputs, MergeRollupInputs, PrivateKernelInitCircuitPrivateInputs, PrivateKernelInnerCircuitPrivateInputs, PrivateKernelInnerCircuitPublicInputs, PrivateKernelTailCircuitPrivateInputs, PrivateKernelTailCircuitPublicInputs, PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, RootRollupInputs, RootRollupPublicInputs } from '@aztec/circuits.js';
|
|
2
|
+
import { NoirCompiledCircuit } from '@aztec/types/noir';
|
|
3
|
+
/**
|
|
4
|
+
* The decoded inputs from the circuit.
|
|
5
|
+
*/
|
|
6
|
+
export type DecodedInputs = {
|
|
7
|
+
/**
|
|
8
|
+
* The inputs to the circuit
|
|
9
|
+
*/
|
|
10
|
+
inputs: Record<string, any>;
|
|
11
|
+
/**
|
|
12
|
+
* The return value of the circuit
|
|
13
|
+
*/
|
|
14
|
+
return_value: any;
|
|
15
|
+
};
|
|
16
|
+
export declare const PrivateKernelInitArtifact: NoirCompiledCircuit;
|
|
17
|
+
export declare const PrivateKernelInnerArtifact: NoirCompiledCircuit;
|
|
18
|
+
export declare const PrivateKernelOrderingArtifact: NoirCompiledCircuit;
|
|
19
|
+
export declare const PublicKernelPrivatePreviousArtifact: NoirCompiledCircuit;
|
|
20
|
+
export declare const PublicKernelPublicPreviousArtifact: NoirCompiledCircuit;
|
|
21
|
+
/**
|
|
22
|
+
* Executes the init private kernel.
|
|
23
|
+
* @param privateKernelInitCircuitPrivateInputs - The private inputs to the initial private kernel.
|
|
24
|
+
* @returns The public inputs.
|
|
25
|
+
*/
|
|
26
|
+
export declare function executeInit(privateKernelInitCircuitPrivateInputs: PrivateKernelInitCircuitPrivateInputs): Promise<PrivateKernelInnerCircuitPublicInputs>;
|
|
27
|
+
/**
|
|
28
|
+
* Executes the inner private kernel.
|
|
29
|
+
* @param privateKernelInnerCircuitPrivateInputs - The private inputs to the inner private kernel.
|
|
30
|
+
* @returns The public inputs.
|
|
31
|
+
*/
|
|
32
|
+
export declare function executeInner(privateKernelInnerCircuitPrivateInputs: PrivateKernelInnerCircuitPrivateInputs): Promise<PrivateKernelInnerCircuitPublicInputs>;
|
|
33
|
+
/**
|
|
34
|
+
* Executes the tail private kernel.
|
|
35
|
+
* @param privateKernelInnerCircuitPrivateInputs - The private inputs to the tail private kernel.
|
|
36
|
+
* @returns The public inputs.
|
|
37
|
+
*/
|
|
38
|
+
export declare function executeTail(privateKernelInnerCircuitPrivateInputs: PrivateKernelTailCircuitPrivateInputs): Promise<PrivateKernelTailCircuitPublicInputs>;
|
|
39
|
+
/**
|
|
40
|
+
* Executes the public kernel in the setup phase.
|
|
41
|
+
* @param publicKernelPrivateInputs - The public kernel setup circuit private inputs.
|
|
42
|
+
* @returns The public inputs.
|
|
43
|
+
*/
|
|
44
|
+
export declare function executePublicKernelSetup(publicKernelPrivateInputs: PublicKernelCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
|
|
45
|
+
/**
|
|
46
|
+
* Executes the public kernel in the app logic phase.
|
|
47
|
+
* @param publicKernelPrivateInputs - The public kernel app logic circuit private inputs.
|
|
48
|
+
* @returns The public inputs.
|
|
49
|
+
*/
|
|
50
|
+
export declare function executePublicKernelAppLogic(publicKernelPrivateInputs: PublicKernelCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
|
|
51
|
+
/**
|
|
52
|
+
* Executes the root rollup.
|
|
53
|
+
* @param rootRollupInputs - The root rollup inputs.
|
|
54
|
+
* @returns The public inputs.
|
|
55
|
+
*/
|
|
56
|
+
export declare function executeRootRollup(rootRollupInputs: RootRollupInputs): Promise<RootRollupPublicInputs>;
|
|
57
|
+
/**
|
|
58
|
+
* Executes the merge rollup.
|
|
59
|
+
* @param mergeRollupInputs - The merge rollup inputs.
|
|
60
|
+
* @returns The public inputs.
|
|
61
|
+
*/
|
|
62
|
+
export declare function executeMergeRollup(mergeRollupInputs: MergeRollupInputs): Promise<BaseOrMergeRollupPublicInputs>;
|
|
63
|
+
/**
|
|
64
|
+
* Executes the base rollup.
|
|
65
|
+
* @param mergeRollupInputs - The merge rollup inputs.
|
|
66
|
+
* @returns The public inputs.
|
|
67
|
+
*/
|
|
68
|
+
export declare function executeBaseRollup(baseRollupInputs: BaseRollupInputs): Promise<BaseOrMergeRollupPublicInputs>;
|
|
69
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,EACjB,qCAAqC,EACrC,sCAAsC,EACtC,qCAAqC,EACrC,qCAAqC,EACrC,oCAAoC,EACpC,gCAAgC,EAChC,+BAA+B,EAC/B,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAgDxD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B;;OAEG;IACH,YAAY,EAAE,GAAG,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,yBAAyB,qBAA+C,CAAC;AAEtF,eAAO,MAAM,0BAA0B,qBAAgD,CAAC;AAExF,eAAO,MAAM,6BAA6B,qBAA+C,CAAC;AAE1F,eAAO,MAAM,mCAAmC,qBAAyD,CAAC;AAE1G,eAAO,MAAM,kCAAkC,qBAAwD,CAAC;AAExG;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,qCAAqC,EAAE,qCAAqC,GAC3E,OAAO,CAAC,qCAAqC,CAAC,CAQhD;AAWD;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,sCAAsC,EAAE,sCAAsC,GAC7E,OAAO,CAAC,qCAAqC,CAAC,CAQhD;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,sCAAsC,EAAE,qCAAqC,GAC5E,OAAO,CAAC,oCAAoC,CAAC,CAQ/C;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,yBAAyB,EAAE,gCAAgC,GAC1D,OAAO,CAAC,+BAA+B,CAAC,CAQ1C;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,yBAAyB,EAAE,gCAAgC,GAC1D,OAAO,CAAC,+BAA+B,CAAC,CAQ1C;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAQ3G;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAQrH;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAQlH"}
|
package/dest/index.js
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { createBlackBoxSolver, executeCircuitWithBlackBoxSolver } from '@noir-lang/acvm_js';
|
|
2
|
+
import { abiDecode, abiEncode } from '@noir-lang/noirc_abi';
|
|
3
|
+
import PrivateKernelInitJson from './target/private_kernel_init.json' assert { type: 'json' };
|
|
4
|
+
import PrivateKernelInitSimulatedJson from './target/private_kernel_init_simulated.json' assert { type: 'json' };
|
|
5
|
+
import PrivateKernelInnerJson from './target/private_kernel_inner.json' assert { type: 'json' };
|
|
6
|
+
import PrivateKernelInnerSimulatedJson from './target/private_kernel_inner_simulated.json' assert { type: 'json' };
|
|
7
|
+
import PrivateKernelTailJson from './target/private_kernel_tail.json' assert { type: 'json' };
|
|
8
|
+
import PrivateKernelTailSimulatedJson from './target/private_kernel_tail_simulated.json' assert { type: 'json' };
|
|
9
|
+
import PublicKernelPublicPreviousJson from './target/public_kernel_app_logic.json' assert { type: 'json' };
|
|
10
|
+
import PublicKernelPublicPreviousSimulatedJson from './target/public_kernel_app_logic_simulated.json' assert { type: 'json' };
|
|
11
|
+
import PublicKernelPrivatePreviousJson from './target/public_kernel_setup.json' assert { type: 'json' };
|
|
12
|
+
import PublicKernelPrivatePreviousSimulatedJson from './target/public_kernel_setup_simulated.json' assert { type: 'json' };
|
|
13
|
+
import BaseRollupSimulatedJson from './target/rollup_base_simulated.json' assert { type: 'json' };
|
|
14
|
+
import MergeRollupJson from './target/rollup_merge.json' assert { type: 'json' };
|
|
15
|
+
import RootRollupJson from './target/rollup_root.json' assert { type: 'json' };
|
|
16
|
+
import { mapBaseOrMergeRollupPublicInputsFromNoir, mapBaseRollupInputsToNoir, mapMergeRollupInputsToNoir, mapPrivateKernelInitCircuitPrivateInputsToNoir, mapPrivateKernelInnerCircuitPrivateInputsToNoir, mapPrivateKernelInnerCircuitPublicInputsFromNoir, mapPrivateKernelTailCircuitPrivateInputsToNoir, mapPrivateKernelTailCircuitPublicInputsFromNoir, mapPublicKernelCircuitPrivateInputsToNoir, mapPublicKernelCircuitPublicInputsFromNoir, mapRootRollupInputsToNoir, mapRootRollupPublicInputsFromNoir, } from './type_conversion.js';
|
|
17
|
+
export const PrivateKernelInitArtifact = PrivateKernelInitJson;
|
|
18
|
+
export const PrivateKernelInnerArtifact = PrivateKernelInnerJson;
|
|
19
|
+
export const PrivateKernelOrderingArtifact = PrivateKernelTailJson;
|
|
20
|
+
export const PublicKernelPrivatePreviousArtifact = PublicKernelPrivatePreviousJson;
|
|
21
|
+
export const PublicKernelPublicPreviousArtifact = PublicKernelPublicPreviousJson;
|
|
22
|
+
/**
|
|
23
|
+
* Executes the init private kernel.
|
|
24
|
+
* @param privateKernelInitCircuitPrivateInputs - The private inputs to the initial private kernel.
|
|
25
|
+
* @returns The public inputs.
|
|
26
|
+
*/
|
|
27
|
+
export async function executeInit(privateKernelInitCircuitPrivateInputs) {
|
|
28
|
+
const params = {
|
|
29
|
+
input: mapPrivateKernelInitCircuitPrivateInputsToNoir(privateKernelInitCircuitPrivateInputs),
|
|
30
|
+
};
|
|
31
|
+
const returnType = await executePrivateKernelInitWithACVM(params);
|
|
32
|
+
return mapPrivateKernelInnerCircuitPublicInputsFromNoir(returnType);
|
|
33
|
+
}
|
|
34
|
+
let solver;
|
|
35
|
+
const getSolver = () => {
|
|
36
|
+
if (!solver) {
|
|
37
|
+
solver = createBlackBoxSolver();
|
|
38
|
+
}
|
|
39
|
+
return solver;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Executes the inner private kernel.
|
|
43
|
+
* @param privateKernelInnerCircuitPrivateInputs - The private inputs to the inner private kernel.
|
|
44
|
+
* @returns The public inputs.
|
|
45
|
+
*/
|
|
46
|
+
export async function executeInner(privateKernelInnerCircuitPrivateInputs) {
|
|
47
|
+
const params = {
|
|
48
|
+
input: mapPrivateKernelInnerCircuitPrivateInputsToNoir(privateKernelInnerCircuitPrivateInputs),
|
|
49
|
+
};
|
|
50
|
+
const returnType = await executePrivateKernelInnerWithACVM(params);
|
|
51
|
+
return mapPrivateKernelInnerCircuitPublicInputsFromNoir(returnType);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Executes the tail private kernel.
|
|
55
|
+
* @param privateKernelInnerCircuitPrivateInputs - The private inputs to the tail private kernel.
|
|
56
|
+
* @returns The public inputs.
|
|
57
|
+
*/
|
|
58
|
+
export async function executeTail(privateKernelInnerCircuitPrivateInputs) {
|
|
59
|
+
const params = {
|
|
60
|
+
input: mapPrivateKernelTailCircuitPrivateInputsToNoir(privateKernelInnerCircuitPrivateInputs),
|
|
61
|
+
};
|
|
62
|
+
const returnType = await executePrivateKernelTailWithACVM(params);
|
|
63
|
+
return mapPrivateKernelTailCircuitPublicInputsFromNoir(returnType);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Executes the public kernel in the setup phase.
|
|
67
|
+
* @param publicKernelPrivateInputs - The public kernel setup circuit private inputs.
|
|
68
|
+
* @returns The public inputs.
|
|
69
|
+
*/
|
|
70
|
+
export async function executePublicKernelSetup(publicKernelPrivateInputs) {
|
|
71
|
+
const params = {
|
|
72
|
+
input: mapPublicKernelCircuitPrivateInputsToNoir(publicKernelPrivateInputs),
|
|
73
|
+
};
|
|
74
|
+
const returnType = await executePublicKernelSetupWithACVM(params);
|
|
75
|
+
return mapPublicKernelCircuitPublicInputsFromNoir(returnType);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Executes the public kernel in the app logic phase.
|
|
79
|
+
* @param publicKernelPrivateInputs - The public kernel app logic circuit private inputs.
|
|
80
|
+
* @returns The public inputs.
|
|
81
|
+
*/
|
|
82
|
+
export async function executePublicKernelAppLogic(publicKernelPrivateInputs) {
|
|
83
|
+
const params = {
|
|
84
|
+
input: mapPublicKernelCircuitPrivateInputsToNoir(publicKernelPrivateInputs),
|
|
85
|
+
};
|
|
86
|
+
const returnType = await executePublicKernelAppLogicWithACVM(params);
|
|
87
|
+
return mapPublicKernelCircuitPublicInputsFromNoir(returnType);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Executes the root rollup.
|
|
91
|
+
* @param rootRollupInputs - The root rollup inputs.
|
|
92
|
+
* @returns The public inputs.
|
|
93
|
+
*/
|
|
94
|
+
export async function executeRootRollup(rootRollupInputs) {
|
|
95
|
+
const params = {
|
|
96
|
+
inputs: mapRootRollupInputsToNoir(rootRollupInputs),
|
|
97
|
+
};
|
|
98
|
+
const returnType = await executeRootRollupWithACVM(params);
|
|
99
|
+
return mapRootRollupPublicInputsFromNoir(returnType);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Executes the merge rollup.
|
|
103
|
+
* @param mergeRollupInputs - The merge rollup inputs.
|
|
104
|
+
* @returns The public inputs.
|
|
105
|
+
*/
|
|
106
|
+
export async function executeMergeRollup(mergeRollupInputs) {
|
|
107
|
+
const params = {
|
|
108
|
+
inputs: mapMergeRollupInputsToNoir(mergeRollupInputs),
|
|
109
|
+
};
|
|
110
|
+
const returnType = await executeMergeRollupWithACVM(params);
|
|
111
|
+
return mapBaseOrMergeRollupPublicInputsFromNoir(returnType);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Executes the base rollup.
|
|
115
|
+
* @param mergeRollupInputs - The merge rollup inputs.
|
|
116
|
+
* @returns The public inputs.
|
|
117
|
+
*/
|
|
118
|
+
export async function executeBaseRollup(baseRollupInputs) {
|
|
119
|
+
const params = {
|
|
120
|
+
inputs: mapBaseRollupInputsToNoir(baseRollupInputs),
|
|
121
|
+
};
|
|
122
|
+
const returnType = await executeBaseRollupWithACVM(params);
|
|
123
|
+
return mapBaseOrMergeRollupPublicInputsFromNoir(returnType);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Executes the init private kernel with the given inputs using the acvm.
|
|
127
|
+
*
|
|
128
|
+
*/
|
|
129
|
+
async function executePrivateKernelInitWithACVM(input) {
|
|
130
|
+
const initialWitnessMap = abiEncode(PrivateKernelInitSimulatedJson.abi, input);
|
|
131
|
+
// Execute the circuit on those initial witness values
|
|
132
|
+
//
|
|
133
|
+
// Decode the bytecode from base64 since the acvm does not know about base64 encoding
|
|
134
|
+
const decodedBytecode = Buffer.from(PrivateKernelInitSimulatedJson.bytecode, 'base64');
|
|
135
|
+
//
|
|
136
|
+
// Execute the circuit
|
|
137
|
+
const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
|
|
138
|
+
throw Error('unexpected oracle during execution');
|
|
139
|
+
});
|
|
140
|
+
// Decode the witness map into two fields, the return values and the inputs
|
|
141
|
+
const decodedInputs = abiDecode(PrivateKernelInitSimulatedJson.abi, _witnessMap);
|
|
142
|
+
// Cast the inputs as the return type
|
|
143
|
+
return decodedInputs.return_value;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Executes the inner private kernel with the given inputs using the acvm.
|
|
147
|
+
*/
|
|
148
|
+
async function executePrivateKernelInnerWithACVM(input) {
|
|
149
|
+
const initialWitnessMap = abiEncode(PrivateKernelInnerSimulatedJson.abi, input);
|
|
150
|
+
// Execute the circuit on those initial witness values
|
|
151
|
+
//
|
|
152
|
+
// Decode the bytecode from base64 since the acvm does not know about base64 encoding
|
|
153
|
+
const decodedBytecode = Buffer.from(PrivateKernelInnerSimulatedJson.bytecode, 'base64');
|
|
154
|
+
//
|
|
155
|
+
// Execute the circuit
|
|
156
|
+
const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
|
|
157
|
+
throw Error('unexpected oracle during execution');
|
|
158
|
+
});
|
|
159
|
+
// Decode the witness map into two fields, the return values and the inputs
|
|
160
|
+
const decodedInputs = abiDecode(PrivateKernelInnerSimulatedJson.abi, _witnessMap);
|
|
161
|
+
// Cast the inputs as the return type
|
|
162
|
+
return decodedInputs.return_value;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Executes the ordering private kernel with the given inputs using the acvm.
|
|
166
|
+
*/
|
|
167
|
+
async function executePrivateKernelTailWithACVM(input) {
|
|
168
|
+
const initialWitnessMap = abiEncode(PrivateKernelTailSimulatedJson.abi, input);
|
|
169
|
+
// Execute the circuit on those initial witness values
|
|
170
|
+
//
|
|
171
|
+
// Decode the bytecode from base64 since the acvm does not know about base64 encoding
|
|
172
|
+
const decodedBytecode = Buffer.from(PrivateKernelTailSimulatedJson.bytecode, 'base64');
|
|
173
|
+
//
|
|
174
|
+
// Execute the circuit
|
|
175
|
+
const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
|
|
176
|
+
throw Error('unexpected oracle during execution');
|
|
177
|
+
});
|
|
178
|
+
// Decode the witness map into two fields, the return values and the inputs
|
|
179
|
+
const decodedInputs = abiDecode(PrivateKernelTailSimulatedJson.abi, _witnessMap);
|
|
180
|
+
// Cast the inputs as the return type
|
|
181
|
+
return decodedInputs.return_value;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Executes the public kernel with private previous kernel with the given inputs
|
|
185
|
+
*/
|
|
186
|
+
async function executePublicKernelSetupWithACVM(input) {
|
|
187
|
+
const initialWitnessMap = abiEncode(PublicKernelPrivatePreviousSimulatedJson.abi, input);
|
|
188
|
+
const decodedBytecode = Buffer.from(PublicKernelPrivatePreviousSimulatedJson.bytecode, 'base64');
|
|
189
|
+
// Execute the circuit
|
|
190
|
+
const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
|
|
191
|
+
throw Error('unexpected oracle during execution');
|
|
192
|
+
});
|
|
193
|
+
// Decode the witness map into two fields, the return values and the inputs
|
|
194
|
+
const decodedInputs = abiDecode(PublicKernelPrivatePreviousSimulatedJson.abi, _witnessMap);
|
|
195
|
+
// Cast the inputs as the return type
|
|
196
|
+
return decodedInputs.return_value;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Executes the ordering private kernel with the given inputs using the acvm.
|
|
200
|
+
*/
|
|
201
|
+
async function executePublicKernelAppLogicWithACVM(input) {
|
|
202
|
+
const initialWitnessMap = abiEncode(PublicKernelPublicPreviousSimulatedJson.abi, input);
|
|
203
|
+
const decodedBytecode = Buffer.from(PublicKernelPublicPreviousSimulatedJson.bytecode, 'base64');
|
|
204
|
+
// Execute the circuit
|
|
205
|
+
const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
|
|
206
|
+
throw Error('unexpected oracle during execution');
|
|
207
|
+
});
|
|
208
|
+
// Decode the witness map into two fields, the return values and the inputs
|
|
209
|
+
const decodedInputs = abiDecode(PublicKernelPublicPreviousSimulatedJson.abi, _witnessMap);
|
|
210
|
+
// Cast the inputs as the return type
|
|
211
|
+
return decodedInputs.return_value;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Executes the root rollup with the given inputs using the acvm.
|
|
215
|
+
*/
|
|
216
|
+
async function executeRootRollupWithACVM(input) {
|
|
217
|
+
const initialWitnessMap = abiEncode(RootRollupJson.abi, input);
|
|
218
|
+
// Execute the circuit on those initial witness values
|
|
219
|
+
//
|
|
220
|
+
// Decode the bytecode from base64 since the acvm does not know about base64 encoding
|
|
221
|
+
const decodedBytecode = Buffer.from(RootRollupJson.bytecode, 'base64');
|
|
222
|
+
//
|
|
223
|
+
// Execute the circuit
|
|
224
|
+
const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
|
|
225
|
+
throw Error('unexpected oracle during execution');
|
|
226
|
+
});
|
|
227
|
+
const decodedInputs = abiDecode(RootRollupJson.abi, _witnessMap);
|
|
228
|
+
// Cast the inputs as the return type
|
|
229
|
+
return decodedInputs.return_value;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Executes the merge rollup with the given inputs using the acvm.
|
|
233
|
+
*/
|
|
234
|
+
async function executeMergeRollupWithACVM(input) {
|
|
235
|
+
const initialWitnessMap = abiEncode(MergeRollupJson.abi, input);
|
|
236
|
+
// Execute the circuit on those initial witness values
|
|
237
|
+
//
|
|
238
|
+
// Decode the bytecode from base64 since the acvm does not know about base64 encoding
|
|
239
|
+
const decodedBytecode = Buffer.from(MergeRollupJson.bytecode, 'base64');
|
|
240
|
+
//
|
|
241
|
+
// Execute the circuit
|
|
242
|
+
const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
|
|
243
|
+
throw Error('unexpected oracle during execution');
|
|
244
|
+
});
|
|
245
|
+
const decodedInputs = abiDecode(MergeRollupJson.abi, _witnessMap);
|
|
246
|
+
// Cast the inputs as the return type
|
|
247
|
+
return decodedInputs.return_value;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Executes the base rollup with the given inputs using the acvm.
|
|
251
|
+
*/
|
|
252
|
+
async function executeBaseRollupWithACVM(input) {
|
|
253
|
+
const initialWitnessMap = abiEncode(BaseRollupSimulatedJson.abi, input);
|
|
254
|
+
// Execute the circuit on those initial witness values
|
|
255
|
+
//
|
|
256
|
+
// Decode the bytecode from base64 since the acvm does not know about base64 encoding
|
|
257
|
+
const decodedBytecode = Buffer.from(BaseRollupSimulatedJson.bytecode, 'base64');
|
|
258
|
+
//
|
|
259
|
+
// Execute the circuit
|
|
260
|
+
const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
|
|
261
|
+
throw Error('unexpected oracle during execution');
|
|
262
|
+
});
|
|
263
|
+
// Decode the witness map into two fields, the return values and the inputs
|
|
264
|
+
const decodedInputs = abiDecode(BaseRollupSimulatedJson.abi, _witnessMap);
|
|
265
|
+
// Cast the inputs as the return type
|
|
266
|
+
return decodedInputs.return_value;
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE9BQU8sRUFBOEIsb0JBQW9CLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4SCxPQUFPLEVBQU8sU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWpFLE9BQU8scUJBQXFCLE1BQU0sbUNBQW1DLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDOUYsT0FBTyw4QkFBOEIsTUFBTSw2Q0FBNkMsQ0FBQyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNqSCxPQUFPLHNCQUFzQixNQUFNLG9DQUFvQyxDQUFDLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2hHLE9BQU8sK0JBQStCLE1BQU0sOENBQThDLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbkgsT0FBTyxxQkFBcUIsTUFBTSxtQ0FBbUMsQ0FBQyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUM5RixPQUFPLDhCQUE4QixNQUFNLDZDQUE2QyxDQUFDLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2pILE9BQU8sOEJBQThCLE1BQU0sdUNBQXVDLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDM0csT0FBTyx1Q0FBdUMsTUFBTSxpREFBaUQsQ0FBQyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUM5SCxPQUFPLCtCQUErQixNQUFNLG1DQUFtQyxDQUFDLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ3hHLE9BQU8sd0NBQXdDLE1BQU0sNkNBQTZDLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDM0gsT0FBTyx1QkFBdUIsTUFBTSxxQ0FBcUMsQ0FBQyxTQUFT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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate_ts_from_abi.d.ts","sourceRoot":"","sources":["../../src/scripts/generate_ts_from_abi.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { createConsoleLogger } from '@aztec/foundation/log';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
const log = createConsoleLogger('aztec:noir-contracts');
|
|
4
|
+
const noirPrimitiveTypesToTsTypes = new Map();
|
|
5
|
+
/**
|
|
6
|
+
* Typescript does not allow us to check for equality of non-primitive types
|
|
7
|
+
* easily, so we create a addIfUnique function that will only add an item
|
|
8
|
+
* to the map if it is not already there by using JSON.stringify.
|
|
9
|
+
* @param item - The item to add to the map.
|
|
10
|
+
*/
|
|
11
|
+
function addIfUnique(item) {
|
|
12
|
+
const key = JSON.stringify(item);
|
|
13
|
+
if (!noirPrimitiveTypesToTsTypes.has(key)) {
|
|
14
|
+
noirPrimitiveTypesToTsTypes.set(key, item);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Converts an ABI type to a TypeScript type.
|
|
19
|
+
* @param type - The ABI type to convert.
|
|
20
|
+
* @returns The typescript code to define the type.
|
|
21
|
+
*/
|
|
22
|
+
function abiTypeToTs(type) {
|
|
23
|
+
switch (type.kind) {
|
|
24
|
+
case 'integer': {
|
|
25
|
+
let tsIntType = '';
|
|
26
|
+
if (type.sign === 'signed') {
|
|
27
|
+
tsIntType = `i${type.width}`;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
tsIntType = `u${type.width}`;
|
|
31
|
+
}
|
|
32
|
+
addIfUnique({ aliasName: tsIntType, tsType: 'string' });
|
|
33
|
+
return tsIntType;
|
|
34
|
+
}
|
|
35
|
+
case 'boolean':
|
|
36
|
+
return `boolean`;
|
|
37
|
+
case 'array':
|
|
38
|
+
return `FixedLengthArray<${abiTypeToTs(type.type)}, ${type.length}>`;
|
|
39
|
+
case 'struct':
|
|
40
|
+
return getLastComponentOfPath(type.path);
|
|
41
|
+
case 'field':
|
|
42
|
+
addIfUnique({ aliasName: 'Field', tsType: 'string' });
|
|
43
|
+
return 'Field';
|
|
44
|
+
default:
|
|
45
|
+
throw new Error(`Unknown ABI type ${type}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns the last component of a path, e.g. "foo::bar::baz" -\> "baz"
|
|
50
|
+
* Note: that if we have a path such as "Baz", we will return "Baz".
|
|
51
|
+
*
|
|
52
|
+
* Since these paths corresponds to structs, we can assume that we
|
|
53
|
+
* cannot have "foo::bar::".
|
|
54
|
+
*
|
|
55
|
+
* We also make the assumption that since these paths are coming from
|
|
56
|
+
* Noir, then we will not have two paths that look like this:
|
|
57
|
+
* - foo::bar::Baz
|
|
58
|
+
* - cat::dog::Baz
|
|
59
|
+
* ie the last component of the path (struct name) is enough to uniquely identify
|
|
60
|
+
* the whole path.
|
|
61
|
+
*
|
|
62
|
+
* TODO: We should double check this assumption when we use type aliases,
|
|
63
|
+
* I expect that `foo::bar::Baz as Dog` would effectively give `foo::bar::Dog`
|
|
64
|
+
* @param str - The path to get the last component of.
|
|
65
|
+
* @returns The last component of the path.
|
|
66
|
+
*/
|
|
67
|
+
function getLastComponentOfPath(str) {
|
|
68
|
+
const parts = str.split('::');
|
|
69
|
+
const lastPart = parts[parts.length - 1];
|
|
70
|
+
return lastPart;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Generates TypeScript interfaces for the structs used in the ABI.
|
|
74
|
+
* @param type - The ABI type to generate the interface for.
|
|
75
|
+
* @param output - The set of structs that we have already generated bindings for.
|
|
76
|
+
* @returns The TypeScript code to define the struct.
|
|
77
|
+
*/
|
|
78
|
+
function generateStructInterfaces(type, output) {
|
|
79
|
+
let result = '';
|
|
80
|
+
// Edge case to handle the array of structs case.
|
|
81
|
+
if (type.kind === 'array' &&
|
|
82
|
+
((type.type.kind === 'struct' && !output.has(getLastComponentOfPath(type.type.path))) || type.type.kind === 'array')) {
|
|
83
|
+
result += generateStructInterfaces(type.type, output);
|
|
84
|
+
}
|
|
85
|
+
if (type.kind !== 'struct') {
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
// List of structs encountered while viewing this type that we need to generate
|
|
89
|
+
// bindings for.
|
|
90
|
+
const typesEncountered = new Set();
|
|
91
|
+
// Codegen the struct and then its fields, so that the structs fields
|
|
92
|
+
// are defined before the struct itself.
|
|
93
|
+
let codeGeneratedStruct = '';
|
|
94
|
+
let codeGeneratedStructFields = '';
|
|
95
|
+
const structName = getLastComponentOfPath(type.path);
|
|
96
|
+
if (!output.has(structName)) {
|
|
97
|
+
codeGeneratedStruct += `export interface ${structName} {\n`;
|
|
98
|
+
for (const field of type.fields) {
|
|
99
|
+
codeGeneratedStruct += ` ${field.name}: ${abiTypeToTs(field.type)};\n`;
|
|
100
|
+
typesEncountered.add(field.type);
|
|
101
|
+
}
|
|
102
|
+
codeGeneratedStruct += `}\n\n`;
|
|
103
|
+
output.add(structName);
|
|
104
|
+
// Generate code for the encountered structs in the field above
|
|
105
|
+
for (const type of typesEncountered) {
|
|
106
|
+
codeGeneratedStructFields += generateStructInterfaces(type, output);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return codeGeneratedStructFields + '\n' + codeGeneratedStruct;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Generates a TypeScript interface for the ABI.
|
|
113
|
+
* @param abiObj - The ABI to generate the interface for.
|
|
114
|
+
* @returns The TypeScript code to define the interface.
|
|
115
|
+
*/
|
|
116
|
+
function generateTsInterface(abiObj) {
|
|
117
|
+
let result = ``;
|
|
118
|
+
const outputStructs = new Set();
|
|
119
|
+
// Define structs for composite types
|
|
120
|
+
for (const param of abiObj.parameters) {
|
|
121
|
+
result += generateStructInterfaces(param.type, outputStructs);
|
|
122
|
+
}
|
|
123
|
+
// Generating Return type, if it exists
|
|
124
|
+
//
|
|
125
|
+
if (abiObj.return_type != null) {
|
|
126
|
+
result += generateStructInterfaces(abiObj.return_type.abi_type, outputStructs);
|
|
127
|
+
result += `export type ReturnType = ${abiTypeToTs(abiObj.return_type.abi_type)};\n`;
|
|
128
|
+
}
|
|
129
|
+
// Generating Input type
|
|
130
|
+
result += '\nexport interface InputType {\n';
|
|
131
|
+
for (const param of abiObj.parameters) {
|
|
132
|
+
result += ` ${param.name}: ${abiTypeToTs(param.type)};\n`;
|
|
133
|
+
}
|
|
134
|
+
result += '}';
|
|
135
|
+
// Add the primitive Noir types that do not have a 1-1 mapping to TypeScript.
|
|
136
|
+
let primitiveTypeAliases = '';
|
|
137
|
+
for (const [, value] of noirPrimitiveTypesToTsTypes) {
|
|
138
|
+
primitiveTypeAliases += `\nexport type ${value.aliasName} = ${value.tsType};`;
|
|
139
|
+
}
|
|
140
|
+
const fixedLengthArray = '\nexport type FixedLengthArray<T, L extends number> = L extends 0 ? never[]: T[] & { length: L }';
|
|
141
|
+
return (`/* Autogenerated file, do not edit! */\n\n/* eslint-disable */\n` +
|
|
142
|
+
fixedLengthArray +
|
|
143
|
+
'\n' +
|
|
144
|
+
primitiveTypeAliases +
|
|
145
|
+
'\n' +
|
|
146
|
+
result);
|
|
147
|
+
}
|
|
148
|
+
const circuits = [
|
|
149
|
+
'private_kernel_init',
|
|
150
|
+
'private_kernel_inner',
|
|
151
|
+
'private_kernel_tail',
|
|
152
|
+
'public_kernel_setup',
|
|
153
|
+
'public_kernel_app_logic',
|
|
154
|
+
'rollup_base',
|
|
155
|
+
'rollup_merge',
|
|
156
|
+
'rollup_root',
|
|
157
|
+
];
|
|
158
|
+
const main = async () => {
|
|
159
|
+
try {
|
|
160
|
+
await fs.access('./src/types/');
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
await fs.mkdir('./src/types', { recursive: true });
|
|
164
|
+
}
|
|
165
|
+
for (const circuit of circuits) {
|
|
166
|
+
const rawData = await fs.readFile(`./src/target/${circuit}.json`, 'utf-8');
|
|
167
|
+
const abiObj = JSON.parse(rawData);
|
|
168
|
+
const generatedInterface = generateTsInterface(abiObj.abi);
|
|
169
|
+
const outputFile = `./src/types/${circuit}_types.ts`;
|
|
170
|
+
await fs.writeFile(outputFile, generatedInterface);
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
try {
|
|
174
|
+
await main();
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
log(`Error generating types ${err}`);
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVfdHNfZnJvbV9hYmkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9nZW5lcmF0ZV90c19mcm9tX2FiaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0IsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQTBCeEQsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztBQUUxRTs7Ozs7R0FLRztBQUNILFNBQVMsV0FBVyxDQUFDLElBQXdCO0lBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxXQUFXLENBQUMsSUFBYTtJQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMzQixTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDL0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixDQUFDO1lBQ0QsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFB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
|