@typeberry/lib 0.2.0-5746fdc → 0.2.0-661fe38
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/index.cjs +656 -451
- package/index.d.ts +1339 -1118
- package/index.js +628 -424
- package/package.json +1 -1
package/index.cjs
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
var assert = require('node:assert');
|
|
4
4
|
var fs = require('node:fs');
|
|
5
5
|
var os = require('node:os');
|
|
6
|
-
var node_url = require('node:url');
|
|
7
6
|
|
|
8
7
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
9
8
|
var GpVersion;
|
|
@@ -11,44 +10,40 @@ var GpVersion;
|
|
|
11
10
|
GpVersion["V0_6_7"] = "0.6.7";
|
|
12
11
|
GpVersion["V0_7_0"] = "0.7.0";
|
|
13
12
|
GpVersion["V0_7_1"] = "0.7.1";
|
|
14
|
-
GpVersion["V0_7_2"] = "0.7.2
|
|
13
|
+
GpVersion["V0_7_2"] = "0.7.2";
|
|
15
14
|
})(GpVersion || (GpVersion = {}));
|
|
16
15
|
var TestSuite;
|
|
17
16
|
(function (TestSuite) {
|
|
18
17
|
TestSuite["W3F_DAVXY"] = "w3f-davxy";
|
|
19
18
|
TestSuite["JAMDUNA"] = "jamduna";
|
|
20
19
|
})(TestSuite || (TestSuite = {}));
|
|
20
|
+
const ALL_VERSIONS_IN_ORDER = [GpVersion.V0_6_7, GpVersion.V0_7_0, GpVersion.V0_7_1, GpVersion.V0_7_2];
|
|
21
21
|
const DEFAULT_SUITE = TestSuite.W3F_DAVXY;
|
|
22
|
-
const DEFAULT_VERSION = GpVersion.
|
|
22
|
+
const DEFAULT_VERSION = GpVersion.V0_7_2;
|
|
23
23
|
const env$1 = typeof process === "undefined" ? {} : process.env;
|
|
24
24
|
let CURRENT_VERSION = parseCurrentVersion(env$1.GP_VERSION) ?? DEFAULT_VERSION;
|
|
25
25
|
let CURRENT_SUITE = parseCurrentSuite(env$1.TEST_SUITE) ?? DEFAULT_SUITE;
|
|
26
|
-
const ALL_VERSIONS_IN_ORDER = [GpVersion.V0_6_7, GpVersion.V0_7_0, GpVersion.V0_7_1, GpVersion.V0_7_2];
|
|
27
26
|
function parseCurrentVersion(env) {
|
|
28
27
|
if (env === undefined) {
|
|
29
28
|
return undefined;
|
|
30
29
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
case GpVersion.V0_7_2:
|
|
36
|
-
return env;
|
|
37
|
-
default:
|
|
38
|
-
throw new Error(`Configured environment variable GP_VERSION is unknown: '${env}'. Use one of: ${ALL_VERSIONS_IN_ORDER}`);
|
|
30
|
+
for (const v of Object.values(GpVersion)) {
|
|
31
|
+
if (env === v) {
|
|
32
|
+
return v;
|
|
33
|
+
}
|
|
39
34
|
}
|
|
35
|
+
throw new Error(`Configured environment variable GP_VERSION is unknown: '${env}'. Use one of: ${ALL_VERSIONS_IN_ORDER}`);
|
|
40
36
|
}
|
|
41
37
|
function parseCurrentSuite(env) {
|
|
42
38
|
if (env === undefined) {
|
|
43
39
|
return undefined;
|
|
44
40
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
default:
|
|
50
|
-
throw new Error(`Configured environment variable TEST_SUITE is unknown: '${env}'. Use one of: ${Object.values(TestSuite)}`);
|
|
41
|
+
for (const s of Object.values(TestSuite)) {
|
|
42
|
+
if (env === s) {
|
|
43
|
+
return s;
|
|
44
|
+
}
|
|
51
45
|
}
|
|
46
|
+
throw new Error(`Configured environment variable TEST_SUITE is unknown: '${env}'. Use one of: ${Object.values(TestSuite)}`);
|
|
52
47
|
}
|
|
53
48
|
class Compatibility {
|
|
54
49
|
static override(version) {
|
|
@@ -208,6 +203,13 @@ class WithDebug {
|
|
|
208
203
|
return inspect(this);
|
|
209
204
|
}
|
|
210
205
|
}
|
|
206
|
+
function lazyInspect(obj) {
|
|
207
|
+
return {
|
|
208
|
+
toString() {
|
|
209
|
+
return inspect(obj);
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
211
213
|
|
|
212
214
|
const env = typeof process === "undefined" ? {} : process.env;
|
|
213
215
|
/**
|
|
@@ -580,7 +582,7 @@ function isResult(x) {
|
|
|
580
582
|
* as an afterthought.
|
|
581
583
|
*/
|
|
582
584
|
|
|
583
|
-
var index$
|
|
585
|
+
var index$v = /*#__PURE__*/Object.freeze({
|
|
584
586
|
__proto__: null,
|
|
585
587
|
get CURRENT_SUITE () { return CURRENT_SUITE; },
|
|
586
588
|
get CURRENT_VERSION () { return CURRENT_VERSION; },
|
|
@@ -602,6 +604,7 @@ var index$u = /*#__PURE__*/Object.freeze({
|
|
|
602
604
|
deepEqual: deepEqual,
|
|
603
605
|
inspect: inspect,
|
|
604
606
|
isBrowser: isBrowser,
|
|
607
|
+
lazyInspect: lazyInspect,
|
|
605
608
|
measure: measure,
|
|
606
609
|
resultToString: resultToString,
|
|
607
610
|
safeAllocUint8Array: safeAllocUint8Array,
|
|
@@ -736,7 +739,7 @@ class Ordering {
|
|
|
736
739
|
}
|
|
737
740
|
}
|
|
738
741
|
|
|
739
|
-
var index$
|
|
742
|
+
var index$u = /*#__PURE__*/Object.freeze({
|
|
740
743
|
__proto__: null,
|
|
741
744
|
Ordering: Ordering
|
|
742
745
|
});
|
|
@@ -987,7 +990,7 @@ function u8ArraySameLengthEqual(self, other) {
|
|
|
987
990
|
}
|
|
988
991
|
const bytesBlobComparator = (a, b) => a.compare(b);
|
|
989
992
|
|
|
990
|
-
var index$
|
|
993
|
+
var index$t = /*#__PURE__*/Object.freeze({
|
|
991
994
|
__proto__: null,
|
|
992
995
|
BitVec: BitVec,
|
|
993
996
|
Bytes: Bytes,
|
|
@@ -1089,7 +1092,7 @@ const minU64 = (a, ...values) => values.reduce((min, value) => (value > min ? mi
|
|
|
1089
1092
|
/** Get the biggest value between U64 a and values given as input parameters. */
|
|
1090
1093
|
const maxU64 = (a, ...values) => values.reduce((max, value) => (value < max ? max : value), a);
|
|
1091
1094
|
|
|
1092
|
-
var index$
|
|
1095
|
+
var index$s = /*#__PURE__*/Object.freeze({
|
|
1093
1096
|
__proto__: null,
|
|
1094
1097
|
isU16: isU16,
|
|
1095
1098
|
isU32: isU32,
|
|
@@ -2528,7 +2531,7 @@ function sequenceViewFixLen(type, { fixedLength }) {
|
|
|
2528
2531
|
}, skipper);
|
|
2529
2532
|
}
|
|
2530
2533
|
|
|
2531
|
-
var index$
|
|
2534
|
+
var index$r = /*#__PURE__*/Object.freeze({
|
|
2532
2535
|
__proto__: null,
|
|
2533
2536
|
Decoder: Decoder,
|
|
2534
2537
|
Descriptor: Descriptor,
|
|
@@ -3729,7 +3732,7 @@ var keyDerivation = /*#__PURE__*/Object.freeze({
|
|
|
3729
3732
|
trivialSeed: trivialSeed
|
|
3730
3733
|
});
|
|
3731
3734
|
|
|
3732
|
-
var index$
|
|
3735
|
+
var index$q = /*#__PURE__*/Object.freeze({
|
|
3733
3736
|
__proto__: null,
|
|
3734
3737
|
BANDERSNATCH_KEY_BYTES: BANDERSNATCH_KEY_BYTES,
|
|
3735
3738
|
BANDERSNATCH_PROOF_BYTES: BANDERSNATCH_PROOF_BYTES,
|
|
@@ -4367,7 +4370,7 @@ var keccak = /*#__PURE__*/Object.freeze({
|
|
|
4367
4370
|
// TODO [ToDr] (#213) this should most likely be moved to a separate
|
|
4368
4371
|
// package to avoid pulling in unnecessary deps.
|
|
4369
4372
|
|
|
4370
|
-
var index$
|
|
4373
|
+
var index$p = /*#__PURE__*/Object.freeze({
|
|
4371
4374
|
__proto__: null,
|
|
4372
4375
|
Blake2b: Blake2b,
|
|
4373
4376
|
HASH_SIZE: HASH_SIZE,
|
|
@@ -5004,7 +5007,7 @@ class TruncatedHashDictionary {
|
|
|
5004
5007
|
}
|
|
5005
5008
|
}
|
|
5006
5009
|
|
|
5007
|
-
var index$
|
|
5010
|
+
var index$o = /*#__PURE__*/Object.freeze({
|
|
5008
5011
|
__proto__: null,
|
|
5009
5012
|
ArrayView: ArrayView,
|
|
5010
5013
|
FixedSizeArray: FixedSizeArray,
|
|
@@ -5053,6 +5056,8 @@ const EC_SEGMENT_SIZE = 4104;
|
|
|
5053
5056
|
* Additional data that has to be passed to the codec to correctly parse incoming bytes.
|
|
5054
5057
|
*/
|
|
5055
5058
|
class ChainSpec extends WithDebug {
|
|
5059
|
+
/** Human-readable name of the chain spec. */
|
|
5060
|
+
name;
|
|
5056
5061
|
/** Number of validators. */
|
|
5057
5062
|
validatorsCount;
|
|
5058
5063
|
/** 1/3 of number of validators */
|
|
@@ -5095,6 +5100,7 @@ class ChainSpec extends WithDebug {
|
|
|
5095
5100
|
maxLookupAnchorAge;
|
|
5096
5101
|
constructor(data) {
|
|
5097
5102
|
super();
|
|
5103
|
+
this.name = data.name;
|
|
5098
5104
|
this.validatorsCount = data.validatorsCount;
|
|
5099
5105
|
this.thirdOfValidators = tryAsU16(Math.floor(data.validatorsCount / 3));
|
|
5100
5106
|
this.validatorsSuperMajority = tryAsU16(Math.floor(data.validatorsCount / 3) * 2 + 1);
|
|
@@ -5115,6 +5121,7 @@ class ChainSpec extends WithDebug {
|
|
|
5115
5121
|
}
|
|
5116
5122
|
/** Set of values for "tiny" chain as defined in JAM test vectors. */
|
|
5117
5123
|
const tinyChainSpec = new ChainSpec({
|
|
5124
|
+
name: "tiny",
|
|
5118
5125
|
validatorsCount: tryAsU16(6),
|
|
5119
5126
|
coresCount: tryAsU16(2),
|
|
5120
5127
|
epochLength: tryAsU32(12),
|
|
@@ -5136,6 +5143,7 @@ const tinyChainSpec = new ChainSpec({
|
|
|
5136
5143
|
* Please note that only validatorsCount and epochLength are "full", the rest is copied from "tiny".
|
|
5137
5144
|
*/
|
|
5138
5145
|
const fullChainSpec = new ChainSpec({
|
|
5146
|
+
name: "full",
|
|
5139
5147
|
validatorsCount: tryAsU16(1023),
|
|
5140
5148
|
coresCount: tryAsU16(341),
|
|
5141
5149
|
epochLength: tryAsU32(600),
|
|
@@ -5186,7 +5194,7 @@ var PvmBackend;
|
|
|
5186
5194
|
PvmBackend[PvmBackend["Ananas"] = 1] = "Ananas";
|
|
5187
5195
|
})(PvmBackend || (PvmBackend = {}));
|
|
5188
5196
|
|
|
5189
|
-
var index$
|
|
5197
|
+
var index$n = /*#__PURE__*/Object.freeze({
|
|
5190
5198
|
__proto__: null,
|
|
5191
5199
|
Bootnode: Bootnode,
|
|
5192
5200
|
ChainSpec: ChainSpec,
|
|
@@ -6693,7 +6701,7 @@ function reencodeAsView(codec, object, chainSpec) {
|
|
|
6693
6701
|
return Decoder.decodeObject(codec.View, encoded, chainSpec);
|
|
6694
6702
|
}
|
|
6695
6703
|
|
|
6696
|
-
var index$
|
|
6704
|
+
var index$m = /*#__PURE__*/Object.freeze({
|
|
6697
6705
|
__proto__: null,
|
|
6698
6706
|
Block: Block,
|
|
6699
6707
|
EpochMarker: EpochMarker,
|
|
@@ -6950,7 +6958,7 @@ var json;
|
|
|
6950
6958
|
json.object = object;
|
|
6951
6959
|
})(json || (json = {}));
|
|
6952
6960
|
|
|
6953
|
-
var index$
|
|
6961
|
+
var index$l = /*#__PURE__*/Object.freeze({
|
|
6954
6962
|
__proto__: null,
|
|
6955
6963
|
get json () { return json; },
|
|
6956
6964
|
parseFromJson: parseFromJson
|
|
@@ -7220,7 +7228,7 @@ const blockFromJson = (spec) => json.object({
|
|
|
7220
7228
|
extrinsic: getExtrinsicFromJson(spec),
|
|
7221
7229
|
}, ({ header, extrinsic }) => Block.create({ header, extrinsic }));
|
|
7222
7230
|
|
|
7223
|
-
var index$
|
|
7231
|
+
var index$k = /*#__PURE__*/Object.freeze({
|
|
7224
7232
|
__proto__: null,
|
|
7225
7233
|
blockFromJson: blockFromJson,
|
|
7226
7234
|
disputesExtrinsicFromJson: disputesExtrinsicFromJson,
|
|
@@ -7714,7 +7722,7 @@ class Logger {
|
|
|
7714
7722
|
}
|
|
7715
7723
|
}
|
|
7716
7724
|
|
|
7717
|
-
var index$
|
|
7725
|
+
var index$j = /*#__PURE__*/Object.freeze({
|
|
7718
7726
|
__proto__: null,
|
|
7719
7727
|
get Level () { return Level; },
|
|
7720
7728
|
Logger: Logger,
|
|
@@ -7744,8 +7752,8 @@ const DEV_CONFIG = "dev";
|
|
|
7744
7752
|
const DEFAULT_CONFIG = "default";
|
|
7745
7753
|
const NODE_DEFAULTS = {
|
|
7746
7754
|
name: isBrowser() ? "browser" : os.hostname(),
|
|
7747
|
-
config: DEFAULT_CONFIG,
|
|
7748
|
-
pvm: PvmBackend.
|
|
7755
|
+
config: [DEFAULT_CONFIG],
|
|
7756
|
+
pvm: PvmBackend.Ananas,
|
|
7749
7757
|
};
|
|
7750
7758
|
/** Chain spec chooser. */
|
|
7751
7759
|
var KnownChainSpec;
|
|
@@ -7797,27 +7805,139 @@ class NodeConfiguration {
|
|
|
7797
7805
|
this.authorship = authorship;
|
|
7798
7806
|
}
|
|
7799
7807
|
}
|
|
7800
|
-
function loadConfig(
|
|
7801
|
-
|
|
7802
|
-
|
|
7803
|
-
|
|
7804
|
-
|
|
7805
|
-
|
|
7806
|
-
|
|
7807
|
-
|
|
7808
|
+
function loadConfig(config, withRelPath) {
|
|
7809
|
+
logger$5.log `🔧 Loading config`;
|
|
7810
|
+
let mergedJson = {};
|
|
7811
|
+
for (const entry of config) {
|
|
7812
|
+
logger$5.log `🔧 Applying '${entry}'`;
|
|
7813
|
+
if (entry === DEV_CONFIG) {
|
|
7814
|
+
mergedJson = structuredClone(configs.dev); // clone to avoid mutating the original config. not doing a merge since dev and default should theoretically replace all properties.
|
|
7815
|
+
continue;
|
|
7816
|
+
}
|
|
7817
|
+
if (entry === DEFAULT_CONFIG) {
|
|
7818
|
+
mergedJson = structuredClone(configs.default);
|
|
7819
|
+
continue;
|
|
7820
|
+
}
|
|
7821
|
+
// try to parse as JSON
|
|
7822
|
+
try {
|
|
7823
|
+
const parsed = JSON.parse(entry);
|
|
7824
|
+
deepMerge(mergedJson, parsed);
|
|
7825
|
+
continue;
|
|
7826
|
+
}
|
|
7827
|
+
catch { }
|
|
7828
|
+
// if not, try to load as file
|
|
7829
|
+
if (entry.indexOf("=") === -1 && entry.endsWith(".json")) {
|
|
7830
|
+
try {
|
|
7831
|
+
const configFile = fs.readFileSync(withRelPath(entry), "utf8");
|
|
7832
|
+
const parsed = JSON.parse(configFile);
|
|
7833
|
+
deepMerge(mergedJson, parsed);
|
|
7834
|
+
}
|
|
7835
|
+
catch (e) {
|
|
7836
|
+
throw new Error(`Unable to load config from ${entry}: ${e}`);
|
|
7837
|
+
}
|
|
7838
|
+
}
|
|
7839
|
+
else {
|
|
7840
|
+
// finally try to process as a pseudo-jq query
|
|
7841
|
+
try {
|
|
7842
|
+
processQuery(mergedJson, entry, withRelPath);
|
|
7843
|
+
}
|
|
7844
|
+
catch (e) {
|
|
7845
|
+
throw new Error(`Error while processing '${entry}': ${e}`);
|
|
7846
|
+
}
|
|
7847
|
+
}
|
|
7808
7848
|
}
|
|
7809
7849
|
try {
|
|
7810
|
-
|
|
7811
|
-
|
|
7812
|
-
|
|
7813
|
-
return parseFromJson(parsed, NodeConfiguration.fromJson);
|
|
7850
|
+
const parsed = parseFromJson(mergedJson, NodeConfiguration.fromJson);
|
|
7851
|
+
logger$5.log `🔧 Config ready`;
|
|
7852
|
+
return parsed;
|
|
7814
7853
|
}
|
|
7815
7854
|
catch (e) {
|
|
7816
|
-
throw new Error(`Unable to
|
|
7855
|
+
throw new Error(`Unable to parse config: ${e}`);
|
|
7856
|
+
}
|
|
7857
|
+
}
|
|
7858
|
+
function deepMerge(target, source) {
|
|
7859
|
+
if (!isJsonObject(source)) {
|
|
7860
|
+
throw new Error(`Expected object, got ${source}`);
|
|
7861
|
+
}
|
|
7862
|
+
for (const key in source) {
|
|
7863
|
+
if (isJsonObject(source[key])) {
|
|
7864
|
+
if (!isJsonObject(target[key])) {
|
|
7865
|
+
target[key] = {};
|
|
7866
|
+
}
|
|
7867
|
+
deepMerge(target[key], source[key]);
|
|
7868
|
+
}
|
|
7869
|
+
else {
|
|
7870
|
+
target[key] = source[key];
|
|
7871
|
+
}
|
|
7872
|
+
}
|
|
7873
|
+
}
|
|
7874
|
+
/**
|
|
7875
|
+
* Caution: updates input directly.
|
|
7876
|
+
* Processes a pseudo-jq query. Syntax:
|
|
7877
|
+
* .path.to.value = { ... } - updates value with the specified object by replacement
|
|
7878
|
+
* .path.to.value += { ... } - updates value with the specified object by merging
|
|
7879
|
+
* .path.to.value = file.json - updates value with the contents of file.json
|
|
7880
|
+
* .path.to.value += file.json - merges the contents of file.json onto value
|
|
7881
|
+
*/
|
|
7882
|
+
function processQuery(input, query, withRelPath) {
|
|
7883
|
+
const queryParts = query.split("=");
|
|
7884
|
+
if (queryParts.length === 2) {
|
|
7885
|
+
let [path, value] = queryParts.map((part) => part.trim());
|
|
7886
|
+
let merge = false;
|
|
7887
|
+
// detect += syntax
|
|
7888
|
+
if (path.endsWith("+")) {
|
|
7889
|
+
merge = true;
|
|
7890
|
+
path = path.slice(0, -1);
|
|
7891
|
+
}
|
|
7892
|
+
let parsedValue;
|
|
7893
|
+
if (value.endsWith(".json")) {
|
|
7894
|
+
try {
|
|
7895
|
+
const configFile = fs.readFileSync(withRelPath(value), "utf8");
|
|
7896
|
+
const parsed = JSON.parse(configFile);
|
|
7897
|
+
parsedValue = parsed;
|
|
7898
|
+
}
|
|
7899
|
+
catch (e) {
|
|
7900
|
+
throw new Error(`Unable to load config from ${value}: ${e}`);
|
|
7901
|
+
}
|
|
7902
|
+
}
|
|
7903
|
+
else {
|
|
7904
|
+
try {
|
|
7905
|
+
parsedValue = JSON.parse(value);
|
|
7906
|
+
}
|
|
7907
|
+
catch (e) {
|
|
7908
|
+
throw new Error(`Unrecognized syntax '${value}': ${e}`);
|
|
7909
|
+
}
|
|
7910
|
+
}
|
|
7911
|
+
let pathParts = path.split(".");
|
|
7912
|
+
// allow leading dot in path
|
|
7913
|
+
if (pathParts[0] === "") {
|
|
7914
|
+
pathParts = pathParts.slice(1);
|
|
7915
|
+
}
|
|
7916
|
+
let target = input;
|
|
7917
|
+
for (let i = 0; i < pathParts.length; i++) {
|
|
7918
|
+
const part = pathParts[i];
|
|
7919
|
+
if (!isJsonObject(target[part])) {
|
|
7920
|
+
target[part] = {};
|
|
7921
|
+
}
|
|
7922
|
+
if (i === pathParts.length - 1) {
|
|
7923
|
+
if (merge) {
|
|
7924
|
+
deepMerge(target[part], parsedValue);
|
|
7925
|
+
}
|
|
7926
|
+
else {
|
|
7927
|
+
target[part] = parsedValue;
|
|
7928
|
+
}
|
|
7929
|
+
return;
|
|
7930
|
+
}
|
|
7931
|
+
target = target[part];
|
|
7932
|
+
}
|
|
7817
7933
|
}
|
|
7934
|
+
throw new Error("Unrecognized syntax.");
|
|
7935
|
+
}
|
|
7936
|
+
function isJsonObject(value) {
|
|
7937
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
7818
7938
|
}
|
|
7819
7939
|
|
|
7820
|
-
var index$
|
|
7940
|
+
var index$i = /*#__PURE__*/Object.freeze({
|
|
7821
7941
|
__proto__: null,
|
|
7822
7942
|
DEFAULT_CONFIG: DEFAULT_CONFIG,
|
|
7823
7943
|
DEV_CONFIG: DEV_CONFIG,
|
|
@@ -8061,7 +8181,7 @@ function accumulationOutputComparator(a, b) {
|
|
|
8061
8181
|
if (result > 0) {
|
|
8062
8182
|
return Ordering.Greater;
|
|
8063
8183
|
}
|
|
8064
|
-
return
|
|
8184
|
+
return a.output.compare(b.output);
|
|
8065
8185
|
}
|
|
8066
8186
|
|
|
8067
8187
|
/** `O`: Maximum number of items in the authorizations pool. */
|
|
@@ -8958,26 +9078,6 @@ class InMemoryStateView {
|
|
|
8958
9078
|
}
|
|
8959
9079
|
}
|
|
8960
9080
|
|
|
8961
|
-
/** Dictionary entry of services that auto-accumulate every block. */
|
|
8962
|
-
class AutoAccumulate {
|
|
8963
|
-
service;
|
|
8964
|
-
gasLimit;
|
|
8965
|
-
static Codec = codec$1.Class(AutoAccumulate, {
|
|
8966
|
-
service: codec$1.u32.asOpaque(),
|
|
8967
|
-
gasLimit: codec$1.u64.asOpaque(),
|
|
8968
|
-
});
|
|
8969
|
-
static create({ service, gasLimit }) {
|
|
8970
|
-
return new AutoAccumulate(service, gasLimit);
|
|
8971
|
-
}
|
|
8972
|
-
constructor(
|
|
8973
|
-
/** Service id that auto-accumulates. */
|
|
8974
|
-
service,
|
|
8975
|
-
/** Gas limit for auto-accumulation. */
|
|
8976
|
-
gasLimit) {
|
|
8977
|
-
this.service = service;
|
|
8978
|
-
this.gasLimit = gasLimit;
|
|
8979
|
-
}
|
|
8980
|
-
}
|
|
8981
9081
|
/**
|
|
8982
9082
|
* https://graypaper.fluffylabs.dev/#/ab2cdbd/114402114402?v=0.7.2
|
|
8983
9083
|
*/
|
|
@@ -8995,7 +9095,9 @@ class PrivilegedServices {
|
|
|
8995
9095
|
registrar: Compatibility.isGreaterOrEqual(GpVersion.V0_7_1)
|
|
8996
9096
|
? codec$1.u32.asOpaque()
|
|
8997
9097
|
: ignoreValueWithDefault(tryAsServiceId(2 ** 32 - 1)),
|
|
8998
|
-
autoAccumulateServices:
|
|
9098
|
+
autoAccumulateServices: codec$1.dictionary(codec$1.u32.asOpaque(), codec$1.u64.asOpaque(), {
|
|
9099
|
+
sortKeys: (a, b) => a - b,
|
|
9100
|
+
}),
|
|
8999
9101
|
});
|
|
9000
9102
|
static create(a) {
|
|
9001
9103
|
return new PrivilegedServices(a.manager, a.delegator, a.registrar, a.assigners, a.autoAccumulateServices);
|
|
@@ -9230,6 +9332,15 @@ class InMemoryService extends WithDebug {
|
|
|
9230
9332
|
}),
|
|
9231
9333
|
};
|
|
9232
9334
|
}
|
|
9335
|
+
/** Return identical `InMemoryService` which does not share any references. */
|
|
9336
|
+
clone() {
|
|
9337
|
+
return new InMemoryService(this.serviceId, {
|
|
9338
|
+
info: ServiceAccountInfo.create(this.data.info),
|
|
9339
|
+
preimages: HashDictionary.fromEntries(Array.from(this.data.preimages.entries())),
|
|
9340
|
+
lookupHistory: HashDictionary.fromEntries(Array.from(this.data.lookupHistory.entries()).map(([k, v]) => [k, v.slice()])),
|
|
9341
|
+
storage: new Map(this.data.storage.entries()),
|
|
9342
|
+
});
|
|
9343
|
+
}
|
|
9233
9344
|
/**
|
|
9234
9345
|
* Create a new in-memory service from another state service
|
|
9235
9346
|
* by copying all given entries.
|
|
@@ -9600,7 +9711,7 @@ class InMemoryState extends WithDebug {
|
|
|
9600
9711
|
assigners: tryAsPerCore(new Array(spec.coresCount).fill(tryAsServiceId(0)), spec),
|
|
9601
9712
|
delegator: tryAsServiceId(0),
|
|
9602
9713
|
registrar: tryAsServiceId(MAX_VALUE),
|
|
9603
|
-
autoAccumulateServices:
|
|
9714
|
+
autoAccumulateServices: new Map(),
|
|
9604
9715
|
}),
|
|
9605
9716
|
accumulationOutputLog: SortedArray.fromArray(accumulationOutputComparator, []),
|
|
9606
9717
|
services: new Map(),
|
|
@@ -9619,11 +9730,10 @@ const serviceDataCodec = codec$1.dictionary(codec$1.u32.asOpaque(), serviceEntri
|
|
|
9619
9730
|
sortKeys: (a, b) => a - b,
|
|
9620
9731
|
});
|
|
9621
9732
|
|
|
9622
|
-
var index$
|
|
9733
|
+
var index$h = /*#__PURE__*/Object.freeze({
|
|
9623
9734
|
__proto__: null,
|
|
9624
9735
|
AUTHORIZATION_QUEUE_SIZE: AUTHORIZATION_QUEUE_SIZE,
|
|
9625
9736
|
AccumulationOutput: AccumulationOutput,
|
|
9626
|
-
AutoAccumulate: AutoAccumulate,
|
|
9627
9737
|
AvailabilityAssignment: AvailabilityAssignment,
|
|
9628
9738
|
BASE_SERVICE_BALANCE: BASE_SERVICE_BALANCE,
|
|
9629
9739
|
BlockState: BlockState,
|
|
@@ -10694,7 +10804,7 @@ const bitLookup = [
|
|
|
10694
10804
|
[0b00000000, 8],
|
|
10695
10805
|
];
|
|
10696
10806
|
|
|
10697
|
-
var index$
|
|
10807
|
+
var index$g = /*#__PURE__*/Object.freeze({
|
|
10698
10808
|
__proto__: null,
|
|
10699
10809
|
BranchNode: BranchNode,
|
|
10700
10810
|
InMemoryTrie: InMemoryTrie,
|
|
@@ -10744,7 +10854,6 @@ function* serializeRemovedServices(servicesRemoved) {
|
|
|
10744
10854
|
return;
|
|
10745
10855
|
}
|
|
10746
10856
|
for (const serviceId of servicesRemoved) {
|
|
10747
|
-
// TODO [ToDr] what about all data associated with a service?
|
|
10748
10857
|
const codec = serialize.serviceData(serviceId);
|
|
10749
10858
|
yield [StateEntryUpdateAction.Remove, codec.key, EMPTY_BLOB];
|
|
10750
10859
|
}
|
|
@@ -11062,7 +11171,7 @@ function loadState(spec, blake2b, entries) {
|
|
|
11062
11171
|
* hashmap of `key -> value` entries.
|
|
11063
11172
|
*/
|
|
11064
11173
|
|
|
11065
|
-
var index$
|
|
11174
|
+
var index$f = /*#__PURE__*/Object.freeze({
|
|
11066
11175
|
__proto__: null,
|
|
11067
11176
|
SerializedService: SerializedService,
|
|
11068
11177
|
SerializedState: SerializedState,
|
|
@@ -11307,7 +11416,7 @@ class InMemoryStates {
|
|
|
11307
11416
|
async close() { }
|
|
11308
11417
|
}
|
|
11309
11418
|
|
|
11310
|
-
var index$
|
|
11419
|
+
var index$e = /*#__PURE__*/Object.freeze({
|
|
11311
11420
|
__proto__: null,
|
|
11312
11421
|
InMemoryBlocks: InMemoryBlocks,
|
|
11313
11422
|
InMemorySerializedStates: InMemorySerializedStates,
|
|
@@ -11671,7 +11780,7 @@ const initEc = async () => {
|
|
|
11671
11780
|
await init.reedSolomon();
|
|
11672
11781
|
};
|
|
11673
11782
|
|
|
11674
|
-
var index$
|
|
11783
|
+
var index$d = /*#__PURE__*/Object.freeze({
|
|
11675
11784
|
__proto__: null,
|
|
11676
11785
|
N_CHUNKS_REDUNDANCY: N_CHUNKS_REDUNDANCY,
|
|
11677
11786
|
N_CHUNKS_REQUIRED: N_CHUNKS_REQUIRED,
|
|
@@ -12105,7 +12214,7 @@ class FuzzTarget {
|
|
|
12105
12214
|
}
|
|
12106
12215
|
}
|
|
12107
12216
|
|
|
12108
|
-
var index$
|
|
12217
|
+
var index$c = /*#__PURE__*/Object.freeze({
|
|
12109
12218
|
__proto__: null,
|
|
12110
12219
|
AncestryItem: AncestryItem,
|
|
12111
12220
|
ErrorMessage: ErrorMessage,
|
|
@@ -12123,9 +12232,9 @@ var index$b = /*#__PURE__*/Object.freeze({
|
|
|
12123
12232
|
stateRootCodec: stateRootCodec
|
|
12124
12233
|
});
|
|
12125
12234
|
|
|
12126
|
-
var index$
|
|
12235
|
+
var index$b = /*#__PURE__*/Object.freeze({
|
|
12127
12236
|
__proto__: null,
|
|
12128
|
-
v1: index$
|
|
12237
|
+
v1: index$c
|
|
12129
12238
|
});
|
|
12130
12239
|
|
|
12131
12240
|
/** Size of the transfer memo. */
|
|
@@ -12196,13 +12305,6 @@ var ForgetPreimageError;
|
|
|
12196
12305
|
})(ForgetPreimageError || (ForgetPreimageError = {}));
|
|
12197
12306
|
/**
|
|
12198
12307
|
* Errors that may occur when the transfer is invoked.
|
|
12199
|
-
*
|
|
12200
|
-
* TODO [ToDr] Since I don't fully understand yet which of these
|
|
12201
|
-
* could be checked directly in the host call (i.e. if we will
|
|
12202
|
-
* have access to the service account state there) for now I keep
|
|
12203
|
-
* them safely in the `AccumulationPartialState` implementation.
|
|
12204
|
-
* However, if possible, these should be moved directly to the
|
|
12205
|
-
* host call implementation.
|
|
12206
12308
|
*/
|
|
12207
12309
|
var TransferError;
|
|
12208
12310
|
(function (TransferError) {
|
|
@@ -12412,7 +12514,7 @@ function deepCloneMapWithArray(map) {
|
|
|
12412
12514
|
class AccumulationStateUpdate {
|
|
12413
12515
|
services;
|
|
12414
12516
|
transfers;
|
|
12415
|
-
|
|
12517
|
+
yieldedRoot;
|
|
12416
12518
|
/** Updated authorization queues for cores. */
|
|
12417
12519
|
authorizationQueues = new Map();
|
|
12418
12520
|
/** New validators data. */
|
|
@@ -12425,10 +12527,10 @@ class AccumulationStateUpdate {
|
|
|
12425
12527
|
/** Pending transfers. */
|
|
12426
12528
|
transfers,
|
|
12427
12529
|
/** Yielded accumulation root. */
|
|
12428
|
-
|
|
12530
|
+
yieldedRoot = null) {
|
|
12429
12531
|
this.services = services;
|
|
12430
12532
|
this.transfers = transfers;
|
|
12431
|
-
this.
|
|
12533
|
+
this.yieldedRoot = yieldedRoot;
|
|
12432
12534
|
}
|
|
12433
12535
|
/** Create new empty state update. */
|
|
12434
12536
|
static empty() {
|
|
@@ -12458,7 +12560,7 @@ class AccumulationStateUpdate {
|
|
|
12458
12560
|
storage: deepCloneMapWithArray(from.services.storage),
|
|
12459
12561
|
};
|
|
12460
12562
|
const transfers = [...from.transfers];
|
|
12461
|
-
const update = new AccumulationStateUpdate(serviceUpdates, transfers,
|
|
12563
|
+
const update = new AccumulationStateUpdate(serviceUpdates, transfers, from.yieldedRoot);
|
|
12462
12564
|
// update entries
|
|
12463
12565
|
for (const [k, v] of from.authorizationQueues) {
|
|
12464
12566
|
update.authorizationQueues.set(k, v);
|
|
@@ -12480,6 +12582,12 @@ class AccumulationStateUpdate {
|
|
|
12480
12582
|
this.transfers = [];
|
|
12481
12583
|
return transfers;
|
|
12482
12584
|
}
|
|
12585
|
+
/** Retrieve and clear yielded root. */
|
|
12586
|
+
takeYieldedRoot() {
|
|
12587
|
+
const yieldedRoot = this.yieldedRoot;
|
|
12588
|
+
this.yieldedRoot = null;
|
|
12589
|
+
return yieldedRoot;
|
|
12590
|
+
}
|
|
12483
12591
|
}
|
|
12484
12592
|
class PartiallyUpdatedState {
|
|
12485
12593
|
state;
|
|
@@ -12557,6 +12665,16 @@ class PartiallyUpdatedState {
|
|
|
12557
12665
|
}
|
|
12558
12666
|
/** Get status of a preimage of current service taking into account any updates. */
|
|
12559
12667
|
getLookupHistory(currentTimeslot, serviceId, hash, length) {
|
|
12668
|
+
const updatedService = this.stateUpdate.services.updated.get(serviceId);
|
|
12669
|
+
/** Return lookup history item for newly created service */
|
|
12670
|
+
if (updatedService !== undefined && updatedService.action.kind === UpdateServiceKind.Create) {
|
|
12671
|
+
const lookupHistoryItem = updatedService.action.lookupHistory;
|
|
12672
|
+
if (lookupHistoryItem !== null &&
|
|
12673
|
+
hash.isEqualTo(lookupHistoryItem.hash) &&
|
|
12674
|
+
length === BigInt(lookupHistoryItem.length)) {
|
|
12675
|
+
return lookupHistoryItem;
|
|
12676
|
+
}
|
|
12677
|
+
}
|
|
12560
12678
|
const preimages = this.stateUpdate.services.preimages.get(serviceId) ?? [];
|
|
12561
12679
|
// TODO [ToDr] This is most likely wrong. We may have `provide` and `remove` within
|
|
12562
12680
|
// the same state update. We should however switch to proper "updated state"
|
|
@@ -12672,304 +12790,87 @@ function preimageLenAsU32(length) {
|
|
|
12672
12790
|
return length >= 2n ** 32n ? null : tryAsU32(Number(length));
|
|
12673
12791
|
}
|
|
12674
12792
|
|
|
12675
|
-
|
|
12676
|
-
|
|
12677
|
-
|
|
12678
|
-
|
|
12679
|
-
*/
|
|
12680
|
-
const HostCallResult = {
|
|
12681
|
-
/** The return value indicating an item does not exist. */
|
|
12682
|
-
NONE: tryAsU64(0xffffffffffffffffn), // 2**64 - 1
|
|
12683
|
-
/** Name unknown. */
|
|
12684
|
-
WHAT: tryAsU64(0xfffffffffffffffen), // 2**64 - 2
|
|
12685
|
-
/** The inner PVM memory index provided for reading/writing is not accessible. */
|
|
12686
|
-
OOB: tryAsU64(0xfffffffffffffffdn), // 2**64 - 3
|
|
12687
|
-
/** Index unknown. */
|
|
12688
|
-
WHO: tryAsU64(0xfffffffffffffffcn), // 2**64 - 4
|
|
12689
|
-
/** Storage full or resource already allocated. */
|
|
12690
|
-
FULL: tryAsU64(0xfffffffffffffffbn), // 2**64 - 5
|
|
12691
|
-
/** Core index unknown. */
|
|
12692
|
-
CORE: tryAsU64(0xfffffffffffffffan), // 2**64 - 6
|
|
12693
|
-
/** Insufficient funds. */
|
|
12694
|
-
CASH: tryAsU64(0xfffffffffffffff9n), // 2**64 - 7
|
|
12695
|
-
/** Gas limit too low. */
|
|
12696
|
-
LOW: tryAsU64(0xfffffffffffffff8n), // 2**64 - 8
|
|
12697
|
-
/** The item is already solicited, cannot be forgotten or the operation is invalid due to privilege level. */
|
|
12698
|
-
HUH: tryAsU64(0xfffffffffffffff7n), // 2**64 - 9
|
|
12699
|
-
/** The return value indicating general success. */
|
|
12700
|
-
OK: tryAsU64(0n),
|
|
12793
|
+
const REGISTER_SIZE_SHIFT = 3; // x << 3 === x * 8
|
|
12794
|
+
const tryAsRegisterIndex = (index) => {
|
|
12795
|
+
check `${index >= 0 && index < NO_OF_REGISTERS$1} Incorrect register index: ${index}!`;
|
|
12796
|
+
return asOpaqueType(index);
|
|
12701
12797
|
};
|
|
12702
|
-
|
|
12703
|
-
|
|
12704
|
-
|
|
12705
|
-
|
|
12706
|
-
|
|
12707
|
-
|
|
12708
|
-
|
|
12709
|
-
|
|
12710
|
-
|
|
12798
|
+
class Registers {
|
|
12799
|
+
bytes;
|
|
12800
|
+
asSigned;
|
|
12801
|
+
asUnsigned;
|
|
12802
|
+
constructor(bytes = safeAllocUint8Array(NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT)) {
|
|
12803
|
+
this.bytes = bytes;
|
|
12804
|
+
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12805
|
+
this.asSigned = new BigInt64Array(bytes.buffer, bytes.byteOffset);
|
|
12806
|
+
this.asUnsigned = new BigUint64Array(bytes.buffer, bytes.byteOffset);
|
|
12711
12807
|
}
|
|
12712
|
-
|
|
12713
|
-
|
|
12714
|
-
|
|
12715
|
-
|
|
12716
|
-
|
|
12717
|
-
|
|
12808
|
+
getAllEncoded() {
|
|
12809
|
+
return this.bytes;
|
|
12810
|
+
}
|
|
12811
|
+
setAllEncoded(bytes) {
|
|
12812
|
+
check `${bytes.length === this.bytes.length} Incorrect size of input registers. Got: ${bytes.length}, need: ${this.bytes.length}`;
|
|
12813
|
+
this.bytes.set(bytes, 0);
|
|
12814
|
+
}
|
|
12815
|
+
static fromBytes(bytes) {
|
|
12816
|
+
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12817
|
+
return new Registers(bytes);
|
|
12818
|
+
}
|
|
12819
|
+
getBytesAsLittleEndian(index, len) {
|
|
12820
|
+
const offset = index << REGISTER_SIZE_SHIFT;
|
|
12821
|
+
return this.bytes.subarray(offset, offset + len);
|
|
12822
|
+
}
|
|
12823
|
+
copyFrom(regs) {
|
|
12824
|
+
const array = regs instanceof BigUint64Array ? regs : regs.asUnsigned;
|
|
12825
|
+
this.asUnsigned.set(array);
|
|
12826
|
+
}
|
|
12827
|
+
reset() {
|
|
12828
|
+
for (let i = 0; i < NO_OF_REGISTERS$1; i++) {
|
|
12829
|
+
this.asUnsigned[i] = 0n;
|
|
12830
|
+
}
|
|
12831
|
+
}
|
|
12832
|
+
getLowerU32(registerIndex) {
|
|
12833
|
+
return Number(this.asUnsigned[registerIndex] & 0xffffffffn);
|
|
12834
|
+
}
|
|
12835
|
+
getLowerI32(registerIndex) {
|
|
12836
|
+
return Number(this.getLowerU32(registerIndex)) >> 0;
|
|
12837
|
+
}
|
|
12838
|
+
setU32(registerIndex, value) {
|
|
12839
|
+
this.asUnsigned[registerIndex] = signExtend32To64(value);
|
|
12840
|
+
}
|
|
12841
|
+
setI32(registerIndex, value) {
|
|
12842
|
+
this.asSigned[registerIndex] = signExtend32To64(value);
|
|
12843
|
+
}
|
|
12844
|
+
getU64(registerIndex) {
|
|
12845
|
+
return this.asUnsigned[registerIndex];
|
|
12846
|
+
}
|
|
12847
|
+
getI64(registerIndex) {
|
|
12848
|
+
return this.asSigned[registerIndex];
|
|
12849
|
+
}
|
|
12850
|
+
setU64(registerIndex, value) {
|
|
12851
|
+
this.asUnsigned[registerIndex] = value;
|
|
12852
|
+
}
|
|
12853
|
+
setI64(registerIndex, value) {
|
|
12854
|
+
this.asSigned[registerIndex] = value;
|
|
12855
|
+
}
|
|
12856
|
+
getAllU64() {
|
|
12857
|
+
return this.asUnsigned;
|
|
12718
12858
|
}
|
|
12719
|
-
return null;
|
|
12720
|
-
}
|
|
12721
|
-
function writeServiceIdAsLeBytes(serviceId, destination) {
|
|
12722
|
-
check `${destination.length >= SERVICE_ID_BYTES} Not enough space in the destination.`;
|
|
12723
|
-
destination.set(u32AsLeBytes(serviceId));
|
|
12724
|
-
}
|
|
12725
|
-
/** Clamp a U64 to the maximum value of a 32-bit unsigned integer. */
|
|
12726
|
-
function clampU64ToU32(value) {
|
|
12727
|
-
return value > MAX_U32_BIG_INT ? MAX_U32 : tryAsU32(Number(value));
|
|
12728
12859
|
}
|
|
12729
|
-
function
|
|
12730
|
-
|
|
12731
|
-
|
|
12732
|
-
|
|
12733
|
-
|
|
12734
|
-
|
|
12735
|
-
|
|
12736
|
-
|
|
12737
|
-
|
|
12738
|
-
|
|
12739
|
-
|
|
12740
|
-
|
|
12741
|
-
|
|
12742
|
-
|
|
12743
|
-
get NewServiceError () { return NewServiceError; },
|
|
12744
|
-
NoMachineError: NoMachineError,
|
|
12745
|
-
get PagesError () { return PagesError; },
|
|
12746
|
-
PartiallyUpdatedState: PartiallyUpdatedState,
|
|
12747
|
-
get PeekPokeError () { return PeekPokeError; },
|
|
12748
|
-
PendingTransfer: PendingTransfer,
|
|
12749
|
-
get PreimageStatusKind () { return PreimageStatusKind; },
|
|
12750
|
-
get ProvidePreimageError () { return ProvidePreimageError; },
|
|
12751
|
-
get RequestPreimageError () { return RequestPreimageError; },
|
|
12752
|
-
SERVICE_ID_BYTES: SERVICE_ID_BYTES,
|
|
12753
|
-
SegmentExportError: SegmentExportError,
|
|
12754
|
-
TRANSFER_MEMO_BYTES: TRANSFER_MEMO_BYTES,
|
|
12755
|
-
get TransferError () { return TransferError; },
|
|
12756
|
-
UnprivilegedError: UnprivilegedError,
|
|
12757
|
-
get UpdatePrivilegesError () { return UpdatePrivilegesError; },
|
|
12758
|
-
get ZeroVoidError () { return ZeroVoidError; },
|
|
12759
|
-
clampU64ToU32: clampU64ToU32,
|
|
12760
|
-
emptyRegistersBuffer: emptyRegistersBuffer,
|
|
12761
|
-
getServiceId: getServiceId,
|
|
12762
|
-
getServiceIdOrCurrent: getServiceIdOrCurrent,
|
|
12763
|
-
slotsToPreimageStatus: slotsToPreimageStatus,
|
|
12764
|
-
toMemoryOperation: toMemoryOperation,
|
|
12765
|
-
tryAsMachineId: tryAsMachineId,
|
|
12766
|
-
tryAsProgramCounter: tryAsProgramCounter,
|
|
12767
|
-
writeServiceIdAsLeBytes: writeServiceIdAsLeBytes
|
|
12768
|
-
});
|
|
12769
|
-
|
|
12770
|
-
const SUPER_PEAK_STRING = BytesBlob.blobFromString("peak");
|
|
12771
|
-
/**
|
|
12772
|
-
* Merkle Mountain Range.
|
|
12773
|
-
*
|
|
12774
|
-
* https://graypaper.fluffylabs.dev/#/5f542d7/3aa0023aa002?v=0.6.2
|
|
12775
|
-
*/
|
|
12776
|
-
class MerkleMountainRange {
|
|
12777
|
-
hasher;
|
|
12778
|
-
mountains;
|
|
12779
|
-
/** Construct an empty MMR. */
|
|
12780
|
-
static empty(hasher) {
|
|
12781
|
-
return new MerkleMountainRange(hasher);
|
|
12782
|
-
}
|
|
12783
|
-
/** Construct a new MMR from existing peaks. */
|
|
12784
|
-
static fromPeaks(hasher, mmr) {
|
|
12785
|
-
return new MerkleMountainRange(hasher, mmr.peaks
|
|
12786
|
-
.reduce((acc, peak, index) => {
|
|
12787
|
-
if (peak !== null) {
|
|
12788
|
-
acc.push(Mountain.fromPeak(peak, 2 ** index));
|
|
12789
|
-
}
|
|
12790
|
-
return acc;
|
|
12791
|
-
}, [])
|
|
12792
|
-
.reverse());
|
|
12793
|
-
}
|
|
12794
|
-
constructor(hasher,
|
|
12795
|
-
/** Store non-empty merkle tries (mountains) ordered by descending size. */
|
|
12796
|
-
mountains = []) {
|
|
12797
|
-
this.hasher = hasher;
|
|
12798
|
-
this.mountains = mountains;
|
|
12799
|
-
}
|
|
12800
|
-
/**
|
|
12801
|
-
* Append a new hash to the MMR structure.
|
|
12802
|
-
*
|
|
12803
|
-
* https://graypaper.fluffylabs.dev/#/5f542d7/3b11003b1100?v=0.6.2
|
|
12804
|
-
*/
|
|
12805
|
-
append(hash) {
|
|
12806
|
-
let newMountain = Mountain.fromPeak(hash, 1);
|
|
12807
|
-
for (;;) {
|
|
12808
|
-
const last = this.mountains.pop();
|
|
12809
|
-
if (last === undefined) {
|
|
12810
|
-
this.mountains.push(newMountain);
|
|
12811
|
-
return;
|
|
12812
|
-
}
|
|
12813
|
-
if (last.size !== newMountain.size) {
|
|
12814
|
-
this.mountains.push(last);
|
|
12815
|
-
this.mountains.push(newMountain);
|
|
12816
|
-
return;
|
|
12817
|
-
}
|
|
12818
|
-
newMountain = last.mergeWith(this.hasher, newMountain);
|
|
12819
|
-
}
|
|
12820
|
-
}
|
|
12821
|
-
/**
|
|
12822
|
-
* Root of the entire structure.
|
|
12823
|
-
*
|
|
12824
|
-
* https://graypaper.fluffylabs.dev/#/5f542d7/3b20013b2001?v=0.6.2
|
|
12825
|
-
*/
|
|
12826
|
-
getSuperPeakHash() {
|
|
12827
|
-
if (this.mountains.length === 0) {
|
|
12828
|
-
return Bytes.zero(HASH_SIZE).asOpaque();
|
|
12829
|
-
}
|
|
12830
|
-
const revMountains = this.mountains.slice().reverse();
|
|
12831
|
-
const length = revMountains.length;
|
|
12832
|
-
let lastHash = revMountains[0].peak;
|
|
12833
|
-
for (let i = 1; i < length; i++) {
|
|
12834
|
-
const mountain = revMountains[i];
|
|
12835
|
-
lastHash = this.hasher.hashConcatPrepend(SUPER_PEAK_STRING, lastHash, mountain.peak);
|
|
12836
|
-
}
|
|
12837
|
-
return lastHash;
|
|
12838
|
-
}
|
|
12839
|
-
/** Get current peaks. */
|
|
12840
|
-
getPeaks() {
|
|
12841
|
-
const peaks = [];
|
|
12842
|
-
const mountains = this.mountains;
|
|
12843
|
-
// always 2**index
|
|
12844
|
-
let currentSize = 1;
|
|
12845
|
-
let currentIdx = mountains.length - 1;
|
|
12846
|
-
while (currentIdx >= 0) {
|
|
12847
|
-
const currentItem = mountains[currentIdx];
|
|
12848
|
-
if (currentItem.size >= currentSize && currentItem.size < 2 * currentSize) {
|
|
12849
|
-
peaks.push(currentItem.peak);
|
|
12850
|
-
currentIdx -= 1;
|
|
12851
|
-
}
|
|
12852
|
-
else {
|
|
12853
|
-
peaks.push(null);
|
|
12854
|
-
}
|
|
12855
|
-
// move to the next index.
|
|
12856
|
-
currentSize = currentSize << 1;
|
|
12857
|
-
}
|
|
12858
|
-
return { peaks };
|
|
12859
|
-
}
|
|
12860
|
-
}
|
|
12861
|
-
/** An internal helper structure to represent a merkle trie for MMR. */
|
|
12862
|
-
class Mountain {
|
|
12863
|
-
peak;
|
|
12864
|
-
size;
|
|
12865
|
-
constructor(peak, size) {
|
|
12866
|
-
this.peak = peak;
|
|
12867
|
-
this.size = size;
|
|
12868
|
-
}
|
|
12869
|
-
static fromPeak(peak, size) {
|
|
12870
|
-
return new Mountain(peak, size);
|
|
12871
|
-
}
|
|
12872
|
-
static fromChildren(hasher, children) {
|
|
12873
|
-
const [left, right] = children;
|
|
12874
|
-
const peak = hasher.hashConcat(left.peak, right.peak);
|
|
12875
|
-
const size = left.size + right.size;
|
|
12876
|
-
return new Mountain(peak, size);
|
|
12877
|
-
}
|
|
12878
|
-
/** Merge with another montain of the same size. */
|
|
12879
|
-
mergeWith(hasher, other) {
|
|
12880
|
-
return Mountain.fromChildren(hasher, [this, other]);
|
|
12881
|
-
}
|
|
12882
|
-
toString() {
|
|
12883
|
-
return `${this.size} @ ${this.peak}`;
|
|
12884
|
-
}
|
|
12885
|
-
}
|
|
12886
|
-
|
|
12887
|
-
var index$8 = /*#__PURE__*/Object.freeze({
|
|
12888
|
-
__proto__: null,
|
|
12889
|
-
MerkleMountainRange: MerkleMountainRange
|
|
12890
|
-
});
|
|
12891
|
-
|
|
12892
|
-
const REGISTER_SIZE_SHIFT = 3; // x << 3 === x * 8
|
|
12893
|
-
const tryAsRegisterIndex = (index) => {
|
|
12894
|
-
check `${index >= 0 && index < NO_OF_REGISTERS$1} Incorrect register index: ${index}!`;
|
|
12895
|
-
return asOpaqueType(index);
|
|
12896
|
-
};
|
|
12897
|
-
class Registers {
|
|
12898
|
-
bytes;
|
|
12899
|
-
asSigned;
|
|
12900
|
-
asUnsigned;
|
|
12901
|
-
constructor(bytes = safeAllocUint8Array(NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT)) {
|
|
12902
|
-
this.bytes = bytes;
|
|
12903
|
-
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12904
|
-
this.asSigned = new BigInt64Array(bytes.buffer, bytes.byteOffset);
|
|
12905
|
-
this.asUnsigned = new BigUint64Array(bytes.buffer, bytes.byteOffset);
|
|
12906
|
-
}
|
|
12907
|
-
getAllEncoded() {
|
|
12908
|
-
return this.bytes;
|
|
12909
|
-
}
|
|
12910
|
-
setAllEncoded(bytes) {
|
|
12911
|
-
check `${bytes.length === this.bytes.length} Incorrect size of input registers. Got: ${bytes.length}, need: ${this.bytes.length}`;
|
|
12912
|
-
this.bytes.set(bytes, 0);
|
|
12913
|
-
}
|
|
12914
|
-
static fromBytes(bytes) {
|
|
12915
|
-
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12916
|
-
return new Registers(bytes);
|
|
12917
|
-
}
|
|
12918
|
-
getBytesAsLittleEndian(index, len) {
|
|
12919
|
-
const offset = index << REGISTER_SIZE_SHIFT;
|
|
12920
|
-
return this.bytes.subarray(offset, offset + len);
|
|
12921
|
-
}
|
|
12922
|
-
copyFrom(regs) {
|
|
12923
|
-
const array = regs instanceof BigUint64Array ? regs : regs.asUnsigned;
|
|
12924
|
-
this.asUnsigned.set(array);
|
|
12925
|
-
}
|
|
12926
|
-
reset() {
|
|
12927
|
-
for (let i = 0; i < NO_OF_REGISTERS$1; i++) {
|
|
12928
|
-
this.asUnsigned[i] = 0n;
|
|
12929
|
-
}
|
|
12930
|
-
}
|
|
12931
|
-
getLowerU32(registerIndex) {
|
|
12932
|
-
return Number(this.asUnsigned[registerIndex] & 0xffffffffn);
|
|
12933
|
-
}
|
|
12934
|
-
getLowerI32(registerIndex) {
|
|
12935
|
-
return Number(this.getLowerU32(registerIndex)) >> 0;
|
|
12936
|
-
}
|
|
12937
|
-
setU32(registerIndex, value) {
|
|
12938
|
-
this.asUnsigned[registerIndex] = signExtend32To64(value);
|
|
12939
|
-
}
|
|
12940
|
-
setI32(registerIndex, value) {
|
|
12941
|
-
this.asSigned[registerIndex] = signExtend32To64(value);
|
|
12942
|
-
}
|
|
12943
|
-
getU64(registerIndex) {
|
|
12944
|
-
return this.asUnsigned[registerIndex];
|
|
12945
|
-
}
|
|
12946
|
-
getI64(registerIndex) {
|
|
12947
|
-
return this.asSigned[registerIndex];
|
|
12948
|
-
}
|
|
12949
|
-
setU64(registerIndex, value) {
|
|
12950
|
-
this.asUnsigned[registerIndex] = value;
|
|
12951
|
-
}
|
|
12952
|
-
setI64(registerIndex, value) {
|
|
12953
|
-
this.asSigned[registerIndex] = value;
|
|
12954
|
-
}
|
|
12955
|
-
getAllU64() {
|
|
12956
|
-
return this.asUnsigned;
|
|
12957
|
-
}
|
|
12958
|
-
}
|
|
12959
|
-
function signExtend32To64(value) {
|
|
12960
|
-
// Convert to BigInt if the value is a number
|
|
12961
|
-
const bigValue = typeof value === "number" ? BigInt(value) : value;
|
|
12962
|
-
// Ensure the value is treated as a 32-bit integer
|
|
12963
|
-
const mask32 = BigInt(0xffffffff);
|
|
12964
|
-
const signBit = BigInt(0x80000000);
|
|
12965
|
-
const maskedValue = bigValue & mask32;
|
|
12966
|
-
// Check the sign bit and extend the sign if necessary
|
|
12967
|
-
if ((maskedValue & signBit) !== BigInt(0)) {
|
|
12968
|
-
// If the sign bit is set, extend with ones
|
|
12969
|
-
return maskedValue | ~mask32;
|
|
12970
|
-
}
|
|
12971
|
-
// If the sign bit is not set, return as is
|
|
12972
|
-
return maskedValue;
|
|
12860
|
+
function signExtend32To64(value) {
|
|
12861
|
+
// Convert to BigInt if the value is a number
|
|
12862
|
+
const bigValue = typeof value === "number" ? BigInt(value) : value;
|
|
12863
|
+
// Ensure the value is treated as a 32-bit integer
|
|
12864
|
+
const mask32 = BigInt(0xffffffff);
|
|
12865
|
+
const signBit = BigInt(0x80000000);
|
|
12866
|
+
const maskedValue = bigValue & mask32;
|
|
12867
|
+
// Check the sign bit and extend the sign if necessary
|
|
12868
|
+
if ((maskedValue & signBit) !== BigInt(0)) {
|
|
12869
|
+
// If the sign bit is set, extend with ones
|
|
12870
|
+
return maskedValue | ~mask32;
|
|
12871
|
+
}
|
|
12872
|
+
// If the sign bit is not set, return as is
|
|
12873
|
+
return maskedValue;
|
|
12973
12874
|
}
|
|
12974
12875
|
|
|
12975
12876
|
/** Attempt to convert a number into `HostCallIndex`. */
|
|
@@ -13954,7 +13855,7 @@ function getRegisters(argsLength) {
|
|
|
13954
13855
|
return regs;
|
|
13955
13856
|
}
|
|
13956
13857
|
|
|
13957
|
-
var index$
|
|
13858
|
+
var index$a = /*#__PURE__*/Object.freeze({
|
|
13958
13859
|
__proto__: null,
|
|
13959
13860
|
MemorySegment: MemorySegment,
|
|
13960
13861
|
SpiMemory: SpiMemory,
|
|
@@ -14013,7 +13914,7 @@ function extractCodeAndMetadata(blobWithMetadata) {
|
|
|
14013
13914
|
return { metadata, code };
|
|
14014
13915
|
}
|
|
14015
13916
|
|
|
14016
|
-
var index$
|
|
13917
|
+
var index$9 = /*#__PURE__*/Object.freeze({
|
|
14017
13918
|
__proto__: null,
|
|
14018
13919
|
Program: Program,
|
|
14019
13920
|
extractCodeAndMetadata: extractCodeAndMetadata
|
|
@@ -16885,7 +16786,7 @@ class Interpreter {
|
|
|
16885
16786
|
}
|
|
16886
16787
|
}
|
|
16887
16788
|
|
|
16888
|
-
var index$
|
|
16789
|
+
var index$8 = /*#__PURE__*/Object.freeze({
|
|
16889
16790
|
__proto__: null,
|
|
16890
16791
|
Interpreter: Interpreter,
|
|
16891
16792
|
Memory: Memory,
|
|
@@ -16896,7 +16797,7 @@ var index$5 = /*#__PURE__*/Object.freeze({
|
|
|
16896
16797
|
tryAsSbrkIndex: tryAsSbrkIndex
|
|
16897
16798
|
});
|
|
16898
16799
|
|
|
16899
|
-
async function instantiate(module, imports = {}) {
|
|
16800
|
+
async function instantiate$1(module, imports = {}) {
|
|
16900
16801
|
const adaptedImports = {
|
|
16901
16802
|
env: Object.setPrototypeOf({
|
|
16902
16803
|
abort(message, fileName, lineNumber, columnNumber) {
|
|
@@ -17273,9 +17174,28 @@ async function instantiate(module, imports = {}) {
|
|
|
17273
17174
|
return adaptedExports;
|
|
17274
17175
|
}
|
|
17275
17176
|
|
|
17276
|
-
//
|
|
17277
|
-
|
|
17278
|
-
|
|
17177
|
+
// Auto-generated inline WASM module
|
|
17178
|
+
// Target: release-stub
|
|
17179
|
+
// Source: build/release-stub.wasm
|
|
17180
|
+
|
|
17181
|
+
|
|
17182
|
+
const wasmBase64 = "AGFzbQEAAAABzAEeYAR/f39/AX9gAX8Bf2ACf38Bf2ADf39/AX9gAAF/YAF/AGADf39/AGACf38AYAR/f39/AGAAAGADf39/AX5gA35/fwF/YAV/f39/fwBgBn9/f39/fwBgBH9/f38BfmAFf39/fn8AYAR/fn9/AGAFf39/f38Bf2ADf35/AGACfn8Bf2AFf3x+f38AYAR/f35/AGAGf39/f35/AGAAAX5gAX4AYAd/f39/f39/AX9gAn9+AX9gAX4Bf2AGf39/f39/AX9gBX9+f39/AX8CHwIDZW52BWFib3J0AAgDZW52C2NvbnNvbGUubG9nAAUD+gH4AQAAAAAAAAAAAAAAAQMCAAgGCQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAACDAENDgAACgAACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAEEAgYQAQIDAQYRAQMCBwESEwEHBwECAQEBAQEBBAMIBgIDAgMHBRQHFQQDFgIEAQQFBAQXGAQFAQICGQMAAxoCCwIbHAECHQEFCQUJBAcBcAGeAZ4BBQMBAAEGUxB/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38BQQALfwBBAAt/AEEBC38AQQALfwBBAQt/AEGQowELB/gDIQtnZXRBc3NlbWJseQC4AQ13cmFwQXNQcm9ncmFtAL8BCHJlc2V0SkFNANQBDHJlc2V0R2VuZXJpYwDWARZyZXNldEdlbmVyaWNXaXRoTWVtb3J5ANkBCG5leHRTdGVwANsBBm5TdGVwcwDcARFnZXRQcm9ncmFtQ291bnRlcgDdARVzZXROZXh0UHJvZ3JhbUNvdW50ZXIA3gEJZ2V0U3RhdHVzAN8BCmdldEV4aXRBcmcA4AEKZ2V0R2FzTGVmdADhAQpzZXRHYXNMZWZ0AOIBDGdldFJlZ2lzdGVycwDjAQxzZXRSZWdpc3RlcnMA5AELZ2V0UGFnZUR1bXAA5QEJZ2V0TWVtb3J5AOYBCXNldE1lbW9yeQDnARFJbnB1dEtpbmQuR2VuZXJpYwMLDUlucHV0S2luZC5TUEkDDA9IYXNNZXRhZGF0YS5ZZXMDDQ5IYXNNZXRhZGF0YS5ObwMOC2dldEdhc0Nvc3RzAOkBC2Rpc2Fzc2VtYmxlAOsBDnByZXBhcmVQcm9ncmFtAOgBCnJ1blByb2dyYW0A9AEFX19uZXcADwVfX3BpbgD1AQdfX3VucGluAPYBCV9fY29sbGVjdAD3AQtfX3J0dGlfYmFzZQMPBm1lbW9yeQIAFF9fc2V0QXJndW1lbnRzTGVuZ3RoAPgBCAL5AQnUAQEAQQELnQECAwUDBgcICAkKCgsMFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyNDU7PD4/QUJERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BwcXJ2d3h5ent8fX5/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0B6gHuAe4BDAKiBgqMrQL4ASAAIABBADYCACAAQQA2AgQgAEEANgIIIABBADYCDCAAC6ABAQJ/IAAhBEEAIQAgBCACIANJBH9BBCADIAJrIgMgA0EETxshAwNAIAMgBUsEQCAAIAEoAgQgAiAFamotAAAgBUEDdHRyIQAgBUEBaiEFDAELCyABKAIEIAIgA2pBAWtqLQAAQYABcUEARyADQQRJcQR/IABBfyADQQN0dHIFIAALBUEACzYCACAEQQA2AgQgBEEANgIIIARBADYCDCAEC8gCAQV/IAIgASIEKAIEIAJqLQAAQQ9xuEQAAAAAAAAQQKT8AkEBamohBUEAIQEgAkEBaiICIAVJBH9BBCAFIAJrIgggCEEETxshCANAIAYgCEkEQCABIAQoAgQgAiAGamotAAAgBkEDdHRyIQEgBkEBaiEGDAELCyAEKAIEIAIgCGpBAWtqLQAAQYABcUEARyAIQQRJcQR/IAFBfyAIQQN0dHIFIAELBUEACyECQQAhASADIAVLBH9BBCADIAVrIgMgA0EETxshAwNAIAMgB0sEQCABIAQoAgQgBSAHamotAAAgB0EDdHRyIQEgB0EBaiEHDAELCyAEKAIEIAMgBWpBAWtqLQAAQYABcUEARyADQQRJcQR/IAFBfyADQQN0dHIFIAELBUEACyEBIAAgAjYCACAAIAE2AgQgAEEANgIIIABBADYCDCAACwwAIAAgASACIAMQBAu5AQEDfyABKAIEIAJqLQAAQQ9xIQYgASEEQQAhASACQQFqIgIgA0kEf0EEIAMgAmsiAyADQQRPGyEDA0AgAyAFSwRAIAEgBCgCBCACIAVqai0AACAFQQN0dHIhASAFQQFqIQUMAQsLIAQoAgQgAiADakEBa2otAABBgAFxQQBHIANBBElxBH8gAUF/IANBA3R0cgUgAQsFQQALIQEgACAGNgIAIAAgATYCBCAAQQA2AgggAEEANgIMIAALqAEBAX8gASgCBCIDIAJBAWoiAWotAAAgAUEBaiADai0AAEEIdHIgAUECaiADai0AAEEQdHIgAUEDaiADai0AAEEYdHIhASACQQVqIgQgA2otAAAgBEEBaiADai0AAEEIdHIgBEECaiADai0AAEEQdHIgBEEDaiADai0AAEEYdHIhBCAAIAIgA2otAABBD3E2AgAgACABNgIEIAAgBDYCCCAAQQA2AgwgAAvRAgEGfyABKAIEIAJqLQAAIghBD3EhByABIQRBACEBIAIgCEEEdrhEAAAAAAAAEECk/AJBAWpqIgggAkEBaiICSwR/QQQgCCACayIJIAlBBE8bIQkDQCAFIAlJBEAgASAEKAIEIAIgBWpqLQAAIAVBA3R0ciEBIAVBAWohBQwBCwsgBCgCBCACIAlqQQFrai0AAEGAAXFBAEcgCUEESXEEfyABQX8gCUEDdHRyBSABCwVBAAshAkEAIQEgAyAISwR/QQQgAyAIayIDIANBBE8bIQMDQCADIAZLBEAgASAEKAIEIAYgCGpqLQAAIAZBA3R0ciEBIAZBAWohBgwBCwsgBCgCBCADIAhqQQFrai0AAEGAAXFBAEcgA0EESXEEfyABQX8gA0EDdHRyBSABCwVBAAshASAAIAc2AgAgACACNgIEIAAgATYCCCAAQQA2AgwgAAsxACAAIAEoAgQgAmotAAAiAUEEdjYCACAAIAFBD3E2AgQgAEEANgIIIABBADYCDCAAC74BAQR/IAEoAgQgAmotAAAiBkEEdiEHIAEhBEEAIQEgAkEBaiICIANJBH9BBCADIAJrIgMgA0EETxshAwNAIAMgBUsEQCABIAQoAgQgAiAFamotAAAgBUEDdHRyIQEgBUEBaiEFDAELCyAEKAIEIAIgA2pBAWtqLQAAQYABcUEARyADQQRJcQR/IAFBfyADQQN0dHIFIAELBUEACyEBIAAgBzYCACAAIAZBD3E2AgQgACABNgIIIABBADYCDCAAC1ABAX8gASgCBCACai0AACEEIAAgASACQQFqIAMQBCIBKAIAIQIgASgCBCEBIAAgBEEEdjYCACAAIARBD3E2AgQgACACNgIIIAAgATYCDCAAC0UAIAEoAgQiASACai0AACEDIAJBAWogAWotAABBD3EhASAAIANBBHY2AgAgACADQQ9xNgIEIAAgATYCCCAAQQA2AgwgAAuDAQEFfyAAQfz///8DSwRAQfAOQbAPQSFBHRAAAAsjACMAQQRqIgIgAEETakFwcUEEayIAaiIDPwAiBEEQdEEPakFwcSIFSwRAIAQgAyAFa0H//wNqQYCAfHFBEHYiBSAEIAVKG0AAQQBIBEAgBUAAQQBIBEAACwsLIAMkACAANgIAIAILQgEBf0EREA0iA0EANgIAIANBADYCBCADQgA3AwggA0EAOgAQIAMgADYCACADIAE2AgQgA0IBNwMIIAMgAjoAECADC0sBAn8gAEHs////A0sEQEHwDkGwD0HWAEEeEAAACyAAQRBqEA0iA0EEayICQQA2AgQgAkEANgIIIAIgATYCDCACIAA2AhAgA0EQagtEAQF/IAAgAXQiBEEBEA8hASADBEAgASADIAT8CgAAC0EQIAIQDyICIAE2AgAgAiABNgIEIAIgBDYCCCACIAA2AgwgAgugAwEGfyABIAAoAggiBCACdksEQCABQfz///8DIAJ2SwRAQeDFAEGwxQBBE0EwEAAAC0EIIAEgAUEITRsgAnQhASAAKAIAIQUgAwRAQfz///8DIARBAXQiAiACQfz///8DTxsiAiABIAEgAkkbIQELIAFB7P///wNLBEBB8A5BsA9B4wBBHhAAAAsgBUEQayICQQRrIgYoAgAhByMAIAIgB2pGIQggAUEQaiIJQRNqQXBxQQRrIQMgByAJSQRAIAgEQCAJQfz///8DSwRAQfAOQbAPQTRBIRAAAAsgAiADaiIHPwAiCEEQdEEPakFwcSIJSwRAIAggByAJa0H//wNqQYCAfHFBEHYiCSAIIAlKG0AAQQBIBEAgCUAAQQBIBEAACwsLIAckACAGIAM2AgAFIAMgB0EBdCIGIAMgBksbEA0iAyACIAf8CgAAIAMhAgsFIAgEQCACIANqJAAgBiADNgIACwsgAkEEayABNgIQIAJBEGoiAiAEakEAIAEgBGv8CwAgAiAFRwRAIAAgAjYCACAAIAI2AgQLIAAgATYCCAsLTQEBfyABIAAoAgxPBEAgAUEASARAQfDEAEGwxQBBggFBFhAAAAsgACABQQFqIgNBAkEBEBEgACADNgIMCyAAKAIEIAFBAnRqIAI2AgAL4xcBAX9BjKUBJABBwA5BAEEAEA4kAUHwD0EIQQAQDiQCQecBQQJBCUEAEBAiAEEAQZAQQQBBARAOEBIgAEEBQbAQQQBBARAOEBIgAEECIwEQEiAAQQMjARASIABBBCMBEBIgAEEFIwEQEiAAQQYjARASIABBByMBEBIgAEEIIwEQEiAAQQkjARASIABBCkHgEEEBQQAQDhASIABBCyMBEBIgAEEMIwEQEiAAQQ0jARASIABBDiMBEBIgAEEPIwEQEiAAQRAjARASIABBESMBEBIgAEESIwEQEiAAQRMjARASIABBFEGAEUEFQQAQDhASIABBFSMBEBIgAEEWIwEQEiAAQRcjARASIABBGCMBEBIgAEEZIwEQEiAAQRojARASIABBGyMBEBIgAEEcIwEQEiAAQR0jARASIABBHkGwEUECQQAQDhASIABBH0HgEUECQQAQDhASIABBIEGQEkECQQAQDhASIABBIUHAEkECQQAQDhASIABBIiMBEBIgAEEjIwEQEiAAQSQjARASIABBJSMBEBIgAEEmIwEQEiAAQScjARASIABBKEHwEkEDQQEQDhASIABBKSMBEBIgAEEqIwEQEiAAQSsjARASIABBLCMBEBIgAEEtIwEQEiAAQS4jARASIABBLyMBEBIgAEEwIwEQEiAAQTEjARASIABBMkGQE0EEQQEQDhASIABBM0HAE0EEQQAQDhASIABBNEHwE0EEQQAQDhASIABBNUGgFEEEQQAQDhASIABBNkHQFEEEQQAQDhASIABBN0GAFUEEQQAQDhASIABBOEGwFUEEQQAQDhASIABBOUHgFUEEQQAQDhASIABBOkGQFkEEQQAQDhASIABBO0HAFkEEQQAQDhASIABBPEHwFkEEQQAQDhASIABBPUGgF0EEQQAQDhASIABBPkHQF0EE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QQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnZ603AwAgAEEANgIAIABBADYCCCAAC0cBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAHo3AwAgAEEANgIAIABBADYCCCAAC0kBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKdorTcDACAAQQA2AgAgAEEANgIIIAALSQEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp8CsNwMAIABBADYCACAAQQA2AgggAAtJAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnwaw3AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKdB//8Dca03AwAgAEEANgIAIABBADYCCCAAC4cBAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAiBEIIiEL/gfyH8J/A/wCDIARC/4H8h/CfwP8Ag0IIhoQiBEIQiEL//4OA8P8/gyAEQv//g4Dw/z+DQhCGhEIgijcDACAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFEEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRSBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEVARAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFgEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRaBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEVgRAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFMEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRXBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEWQRAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFUEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAFEEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAFIEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFQEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFMEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikD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QQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgiENwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAgzcDACAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIU3AwAgAEEANgIAIABBADYCCCAAC2ABAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCENwMAIABBADYCACAAQQA2AgggAAtjAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQn+FgzcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAEJ/hYQ3AwAgAEEANgIAIABBADYCCCAAC2MBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCFQn+FNwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCCHzENwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATUCCH7ENwMAIABBADYCACAAQQA2AgggAAtUAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNQIIQoCAgIAQhCACQQwgATUCACIEpyAEQg1aG0EDdGopAwB9xDcDACAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0Agh8NwMAIABBADYCACAAQQA2AgggAAtMAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCCH43AwAgAEEANgIAIABBADYCCCAAC0wBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAfTcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyACQQwgATUCBCIEpyAEQg1aG0EDdGopAwCnaqw3AwAgAEEANgIAIABBADYCCCAAC2oBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDAEKAgICAEHwgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp619xDcDACAAQQA2AgAgAEEANgIIIAALYQEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAH7ENwMAIABBADYCACAAQQA2AgggAAuGAQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIgMEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMApyADbqw3AwAFIAJBDCABNQIIIgSnIARCDVobQQN0akJ/NwMACyAAQQA2AgAgAEEANgIIIAALuAEBA34gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAxCEEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDAMQiBVAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCfzcDAAUgBEKAgICAeFEgBUJ/UXEEQCACQQwgATUCCCIFpyAFQg1aG0EDdGogBDcDAAUgAkEMIAE1AggiBqcgBkINWhtBA3RqIAQgBX83AwALCyAAQQA2AgAgAEEANgIIIAALjQECAX4BfyACQQwgATUCBCIEpyAEQg1aG0EDdGopAwCnIQMgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyIFBEAgAkEMIAE1AggiBKcgBEINWhtBA3RqIAMgBXCsNwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogA6w3AwALIABBADYCACAAQQA2AgggAAu8AQIBfgF/IAJBDCABNQIEIgSnIARCDVobQQN0aikDAKchAyACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIgUEQCADQYCAgIB4RiAFQX9GcQRAIAJBDCABNQIIIgSnIARCDVobQQN0akIANwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogA6wgBayBNwMACwUgAkEMIAE1AggiBKcgBEINWhtBA3RqIAOsNwMACyAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAHw3AwAgAEEANgIAIABBADYCCCAAC2ABAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwB9NwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAfjcDACAAQQA2AgAgAEEANgIIIAALmQEBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAUARAIAJBDCABNQIIIgSnIARCDVobQQN0akJ/NwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIA3AwALIABBADYCACAAQQA2AgggAAu7AQEDfiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAhBCACQQwgATUCACIFpyAFQg1aG0EDdGopAwAiBVAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCfzcDAAUgBEKAgICAgICAgIB/USAFQn9RcQRAIAJBDCABNQIIIgWnIAVCDVobQQN0aiAENwMABSACQQwgATUCCCIGpyAGQg1aG0EDdGogBCAFfzcDAAsLIABBADYCACAAQQA2AgggAAuwAQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwBQBEAgAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDADcDAAUgAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCCNwMACyAAQQA2AgAgAEEANgIIIAALuwEBA34gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIQQgAkEMIAE1AgAiBacgBUINWhtBA3RqKQMAIgVQBEAgAkEMIAE1AggiBacgBUINWhtBA3RqIAQ3AwAFIARCgICAgICAgICAf1EgBUJ/UXEEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCADcDAAUgAkEMIAE1AggiBqcgBkINWhtBA3RqIAQgBYE3AwALCyAAQQA2AgAgAEEANgIIIAAL2wIBCH4gAkEMIAE1AggiBKcgBEINWhtBA3RqAn4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIQQgAkEMIAE1AgQiBacgBUINWhtBA3RqKQMAIgVCAFMEfyAFQn+FQgF8IQVBAQVBAAshASAEQgBTBH8gBEJ/hUIBfCEEIAFFBSABCwRAIARCIIgiCCAFQv////8PgyIJfiEGIAVCIIgiByAEQv////8PgyIKfiELIAQgBX5QrSAHIAh+IAZCIIh8IAtCIIh8IAZC/////w+DIAkgCn5CIIh8IAtC/////w+DfEIgiHxCf4V8DAELIARCIIgiBiAFQv////8PgyIHfiEIIAVCIIgiBSAEQv////8PgyIEfiEJIAUgBn4gCEIgiHwgCUIgiHwgCEL/////D4MgBCAHfkIgiHwgCUL/////D4N8QiCIfAs3AwAgAEEANgIAIABBADYCCCAAC7oBAQZ+IAJBDCABNQIEIgSnIARCDVobQQN0aikDACIFQiCIIQQgBUL/////D4MiBSACQQwgATUCACIGpyAGQg1aG0EDdGopAwAiBkIgiCIHfiEIIAJBDCABNQIIIgmnIAlCDVobQQN0aiAEIAd+IAhCIIh8IAZC/////w+DIgYgBH4iBEIgiHwgCEL/////D4MgBSAGfkIgiHwgBEL/////D4N8QiCIfDcDACAAQQA2AgAgAEEANgIIIAALtwIBCH4gAkEMIAE1AggiBKcgBEINWhtBA3RqAn4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIQYgAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIgRCAFMEQCAEQn+FQgF8IgdC/////w+DIgggBkIgiCIJfiEEIAdCIIgiBSAGQv////8PgyIKfiELIAYgB35QrSAFIAl+IARCIIh8IAtCIIh8IARC/////w+DIAggCn5CIIh8IAtC/////w+DfEIgiHxCf4V8DAELIARC/////w+DIgUgBkIgiCIHfiEIIARCIIgiBCAGQv////8PgyIGfiEJIAQgB34gCEIgiHwgCUIgiHwgCEL/////D4MgBSAGfkIgiHwgCUL/////D4N8QiCIfAs3AwAgAEEANgIAIABBADYCCCAAC2kBAn4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACIEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDACIFIAQgBVUbNwMAIABBADYCACAAQQA2AgggAAtpAQJ+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAiBCACQQwgATUCACIFpyAFQg1aG0EDdGopAwAiBSAEIAVWGzcDACAAQQA2AgAgAEEANgIIIAALaQECfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIgQgAkEMIAE1AgAiBacgBUINWhtBA3RqKQMAIgUgBCAFUxs3AwAgAEEANgIAIABBADYCCCAAC2kBAn4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACIEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDACIFIAQgBVQbNwMAIABBADYCACAAQQA2AgggAAsSACAAQQM2AgAgAEEANgIMIAALEgAgAEEANgIAIABBADYCCCAACyAAIAEoAgAhASAAQQM2AgAgAEEDNgIMIAAgATYCECAAC6IBAQJ/IAAoAgAiASgCDCICQQBKBEAgAkEATARAQYDdAEGwxQBBjwJBEhAAAAsgASgCBCACQQFrIgBBAnRqKAIAIAEgADYCDA8LIAAoAghBDHQiASAAKAIERgRAQbDdABABCyABQYCAgIACSQR/QYAgEBQFQQALIQEgACAAKAIIQQFqNgIIIAAoAgghAEEIQQwQDyICIAA2AgAgAiABNgIEIAILMAEBfyAAQfz///8DSwRAQeDFAEGQxgBBNEErEAAACyAAQQEQDyIBQQAgAPwLACABC5YEAQl/IAAoAgAgASIDQb3cypV8bEG1z9myAWpBEXdBr9bTvgJsIgFBD3YgAXNB95Svr3hsIgFBDXYgAXNBvdzKlXxsIgFBEHYgAXMiCCAAKAIEcUECdGooAgAhAQJAA0AgAQRAIAEoAggiBEEBcQR/QQAFIAEoAgAgA0YLDQIgBEF+cSEBDAELC0EAIQELIAEEQCABIAI2AgQFIAAoAgwiASAAKAIQRgRAIAAoAhQgAUEDbEEEbUgEfyAAKAIEBSAAKAIEQQF0QQFyCyIGQQFqIgFBAnQQdCEHIAFBA3RBA20iCUEMbBB0IQQgACgCCCIFIAAoAhBBDGxqIQogBCEBA0AgBSAKRwRAIAUoAghBAXFFBEAgASAFKAIAIgs2AgAgASAFKAIENgIEIAEgByALQb3cypV8bEG1z9myAWpBEXdBr9bTvgJsIgsgC0EPdnNB95Svr3hsIgsgC0ENdnNBvdzKlXxsIgsgC0EQdnMgBnFBAnRqIgsoAgA2AgggCyABNgIAIAFBDGohAQsgBUEMaiEFDAELCyAAIAc2AgAgACAGNgIEIAAgBDYCCCAAIAk2AgwgACAAKAIUNgIQCyAAKAIIIAAgACgCECIEQQFqNgIQIARBDGxqIgEgAzYCACABIAI2AgQgACAAKAIUQQFqNgIUIAEgACgCACAIIAAoAgRxQQJ0aiIAKAIANgIIIAAgATYCAAsLsAICBn8CfgJ+IwghBCADKAIUIQUgAkEMIAE1AgAiCqcgCkINWhtBA3RqKQMApyIGRQRAIARBADoAACAFrQwBCyADNQIUIAatfCIKQoCAgIAQWgRAIARBAToAACAFrQwBCyADIAo+AhQgBa0gAygCACIEIApCAX1CDIenIghGDQAaIARBAWohBANAIAQgCEwEQCADKAIMEHMhBiADKAIQQQhBCxAPIglBAjYCACAJIAY2AgQgBCAJEHUgBEEBaiEEDAELCyADIAg2AgAgBa0LIQojCC0AAARAIwgiAS0AAARAIABBAzYCACAAQQJBASABLQABGzYCDCAAIAEoAgQ2AhALIAAPCyACQQwgATUCBCILpyALQg1aG0EDdGogCjcDACAAQQA2AgAgAEEANgIIIAALRgEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMANwMAIABBADYCACAAQQA2AgggAAtPAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDAFAEQCACQQwgATUCBCIEpyAEQg1aG0EDdGogATQCCDcDAAsgAEEANgIAIABBADYCCCAAC1EBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQgBSBEAgAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0Agg3AwALIABBADYCACAAQQA2AgggAAtjAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDAFAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMANwMACyAAQQA2AgAgAEEANgIIIAALZQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwBCAFIEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMANwMACyAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgiKNwMAIABBADYCACAAQQA2AgggAAtMAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIo3AwAgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKcgASgCCHisNwMAIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABKAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKd4rDcDACAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIk3AwAgAEEANgIAIABBADYCCCAAC2MBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDAKcgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp3esNwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAijcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMApyACQQwgATUCACIEpyAEQg1aG0EDdGopAwCneKw3AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVK03AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIU603AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVq03AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVa03AwAgAEEANgIAIABBADYCCCAAC2EBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwBUrTcDACAAQQA2AgAgAEEANgIIIAALYQEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFOtNwMAIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIAEoAgh0rDcDACAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyABKAIIdqw3AwAgAEEANgIAIABBADYCCCAAC1EBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAMQgASgCCEEfca2HNwMAIABBADYCACAAQQA2AgggAAtRAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABKAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAEIfg6d0rDcDACAAQQA2AgAgAEEANgIIIAALUQEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogASgCCCACQQwgATUCACIEpyAEQg1aG0EDdGopAwBCH4Ondqw3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQh+Dh8Q3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYY3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYg3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYc3AwAgAEEANgIAIABBADYCCCAAC0wBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAhjcDACAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogATQCCCACQQwgATUCACIEpyAEQg1aG0EDdGopAwCINwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIfENwMAIABBADYCACAAQQA2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IAAgARDBASAAKAIAIAAoAgQiAiABIAJqELkBIAAgACgCBCABajYCBAtdAQN/QQhBKBAPIgEgADYCACABQQA2AgQgASABEMIBEMMBIQIgASgCACABKAIEQQEkBxC6ASEAIAEgASgCBCAAKAIIajYCBEEIQScQDyIBIAA2AgAgASACNgIEIAELSAECfyAAQQMQwQEgACgCBCIBIAAoAgAoAgQiAmotAAAgAUEBaiACai0AAEEIdHIgAUECaiACai0AAEEQdHIgACABQQNqNgIEC1cBAn8gAEEEEMEBIAAoAgQiASAAKAIAKAIEIgJqLQAAIAFBAWogAmotAABBCHRyIAFBAmogAmotAABBEHRyIAFBA2ogAmotAABBGHRyIAAgAUEEajYCBAsoAQJ/IABBARDBASAAKAIEIgEgACgCACgCBGotAAAgACABQQFqNgIECzQBAX8gAEH///8/SwRAQeDFAEHAhgFBM0E8EAAACyAAQQN0IgBBDhAPIgFBACAA/AsAIAELxAYCDH8DfkEIQSgQDyICIAA2AgAgAkEANgIEIAIQwgEhACACEMcBIQYgAhDCASEHIAIgACAGbBDDASEIIAIgBxDDASIAKAIIELUBIQMDQCABIAAoAghIBEAgAyABIAEgACgCBGotAAAQtgEgAUEBaiEBDAELCyACIAdBB2pBA3YQwwEhCkEEQRsQDyIJQQA2AgACQCAHQf////8ASw0AIAdBAnQiAEEcEA8iAUEAIAD8CwAgCSABNgIAIAooAghBAWshAQNAIAFBAE4EQCABIAooAgRqLQAAIQIgAUEDdCELQQchAANAIABBAE4EQCACQYABcSEMIAJBAXQhAiAAIAtqIgUgB0gEQCAJKAIAIAVBAnRqQRlBACAEQQFqIAwbIgQgBEEZTxs2AgALIABBAWshAAwBCwsgAUEBayEBDAELC0EEQR0QDyICQQA2AgAgBkH/AXEiAAR/IAgoAgggAG0FQQALEMgBIQRBACEAA0AgACAIKAIISARAQgAhDSAGQQFrQf8BcSEBA0AgAUEATgRAQn8gDUIIhiIOIAgoAgQgACABamoxAAB8Ig8gDSAPViANIA5WchshDSABQQFrIQEMAQsLIAQgACAGQf8BcSIBbUEDdGogDTcDACAAIAFqIQAMAQsLIAIgBDYCAEEAIQFBBEEeEA8iAEEANgIAIAMoAgwiBEH/////AEsNACAEQQJ0IgVBHxAPIgZBACAF/AsAIARBAEoEQCAGQQI2AgALA0AgASAESARAIAkoAgBBFGsoAhBBAnasIAGtWAR/QQEFIAkoAgAgAUECdGooAgALRQRAAn8gAUEBaiIFIAkoAgAiB0EUaygCEEECdkkEQCAHIAVBAnRqKAIADAELQQALIQUgASADKAIEai0AACMDKAIMQf8BcU8EfyMBBSMDKAIEIAEgAygCBGotAABBAnRqKAIACy0AEARAIAFBAWogBWoiBSAESARAIAYgBUECdGpBAjYCAAsgBiABQQJ0aiIFIAUoAgBBBHI2AgALCyABQQFqIQEMAQsLIAAgBjYCAEEQQRoQDyIBIAM2AgAgASAJNgIEIAEgAjYCCCABIAA2AgwgAQ8LQeDFAEHAhgFBM0E8EAAAC+oCAQh/QQhBKxAPIgBFBEBBAEEAEA8hAAtBGEEUEA8iAkEQEHQ2AgAgAkEDNgIEIAJBMBB0NgIIIAJBBDYCDCACQQA2AhAgAkEANgIUIAAgAjYCAEEMQRIQDyIDQQA2AgAgA0EANgIEIANBADYCCCADQYCAIDYCBCADQQBBAkETQdCQARAQNgIAIANBgAE2AgggAygCBBB0IQIDQCABQYABSARAIAMoAgAhBSABQQx0IgQgAkEUaygCECIGSwRAQfDEAEGQigFBxA5BBRAAAAsgBEGAIGogBkoEQEHgxQBBkIoBQdIOQQcQAAALQQxBChAPIgYgAjYCACAGQYAgNgIIIAYgAiAEajYCBEEIQQwQDyIEIAE2AgAgBCAGNgIEIAUgBSgCDEEBaiIGQQJBARARIAUoAgQiB0EEaiAHIAZBAWtBAnT8CgAAIAcgBDYCACAFIAY2AgwgAUEBaiEBDAELCyAAIAM2AgQgAAvtAQEDfyACQQx2IgNBEEkEQEHwkAEgA0EKELMBEK8BQdCRAUHKAEEHEAAACyAAKAIAIgIoAgAgAigCBCADQb3cypV8bEG1z9myAWpBEXdBr9bTvgJsIgJBD3YgAnNB95Svr3hsIgJBDXYgAnNBvdzKlXxsIgJBEHYgAnNxQQJ0aigCACECAkADQCACBEAgAigCCCIEQQFxBH9BAAUgAigCACADRgsNAiAEQX5xIQIMAQsLQQAhAgsgAkUEQCAAKAIEEHMhBCAAKAIAQQhBCxAPIgIgATYCACACIAQ2AgQgAyACEHULIAAoAgAgAxA2C5cBAQV/A0AgAygCCEEASgRAIAAgASACEMsBQYAgIAJB/x9xIgVrIgQgAygCCEsEQCADKAIIIQQLKAIEEDghByADQQAgBBC5ASIGKAIIIQggBygCCCAFIAhqSARAQfDEAEGQigFB7g5BBRAAAAsgBSAHKAIEaiAGKAIEIAj8CgAAIAIgBGohAkEBJAcgAyAEELoBIQMMAQsLCygAIAEgAmohAgNAIAEgAkkEQCAAQQIgARDLARogAUGAIGohAQwBCwsLzAIBA38gACgCBCEDIAAoAgAhBEEYQQ8QDyICIAM2AgwgAiAENgIQIAIgATYCFCACQQA2AgBBCEEQEA8iAEUEQEEAQQAQDyEACyAAIwU2AgAgAEEANgIEIAIgADYCBEEQQREQDyIARQRAQQBBABAPIQALIAAjBDYCACAAQQA2AgQgACMENgIIIABBADYCDCACIAA2AgggAUEMdiIBQRBJBEBBkJIBQdCRAUHmAEEHEAAACyABQQFrIQMgBCgCACAEKAIEIAFBvdzKlXxsQbXP2bIBakERd0Gv1tO+AmwiAEEPdiAAc0H3lK+veGwiAEENdiAAc0G93MqVfGwiAEEQdiAAc3FBAnRqKAIAIQACQANAIAAEQCAAKAIIIgRBAXEEf0EABSAAKAIAIAFGCw0CIARBfnEhAAwBCwtBACEACyACIAEgAyAAGzYCACACCzgBAX9BHEEqEA8iAyAANgIQIAMgATYCFCADIAI2AhggA0EAEBQ2AgAgA0EANgIEIANCADcDCCADC98DAQx/IAEoAggiAkGAgIAISwRAIAJBChCzASEAQYCAgAhBChCzASEBQeSOASAANgIAQeyOASABNgIAQeCOAUHcjgEoAgBBAnZB8PQAELQBQZCPAUESQQUQAAALQQhBKBAPIgMgADYCACADQQA2AgQgAxDFASEGIAMQxQEhACADQQIQwQEgAygCBCIEIAMoAgAoAgQiBWotAAAgBSAEQQFqai0AAEEIdHIgAyAEQQJqNgIEIAMQxQEhByADIAYQwwEhCCADIAAQwwEhCSADIAMQxgEQwwEgAygCACgCCCIKIAMoAgRKBEBB0I8BIAogAygCBGsQsgEQrwFB0IkBQR9BBxAAAAsQyQEhChDKASELQQx0IgMgBkH//wNqQYCAfHFBgIAIaiIEIABB/x9qQYBgcWoiDGohDUGAgPh3IAdB/x9qQYBgcSIHayEFIAYEQCALQQFBgIAEIAgQzAELIAIEQCALQQFBgID8dyABEMwBCyAABEAgC0ECIAQgCRDMAQsgAwRAIAsgDCADEM0BCyAHBEAgCyAFIAcQzQELIAsgDRDOASEAQQ0QyAEiAUKAgPz/DzcDACABQoCA+PcPNwMIIAFCgID89w83AzggAUFAayACrTcDACAKIAAgARDPAQuvAgECf0E0QRkQDyIEQQA2AgAgBEEANgIEIARBADYCCCAEQQA2AgwgBEEANgIQIARBADYCFCAEQQA2AhggBEEANgIcIARBADoAIEEIQSEQDyIDRQRAQQBBABAPIQMLIANBADYCACADQQA2AgQgBCADNgIkIAQQrgE2AihBFEENEA8iA0UEQEEAQQAQDyEDCyADQQA2AgAgA0EANgIEIANBADYCCCADQQA2AgwgA0EANgIQIAQgAzYCLEEIQSIQDyIDRQRAQQBBABAPIQMLIANBADoAACADQQA2AgQgBCADNgIwIAQgADYCACAEIAE2AgQgBCACNgIIQQhBLBAPIgBCADcDACAEIAA2AgwgBEEANgIQIARBfzYCFCAEQQA2AhggBEEANgIcIARBADoAICAECy8BAn8gACAAKAIMIgJBAWoiA0ECQQEQESAAKAIEIAJBAnRqIAE2AgAgACADNgIMC8ICAQd/IAAoAhAiBCgCCCEDIAQoAhAhBkEQQS0QDyIEQQA2AgAgBEEANgIEIARBADYCCCAEQQA2AgwgBkH/////AEsEQEHgxQBBsMUAQcYAQTwQAAALQQggBiAGQQhNG0ECdCIFQQEQDyIHQQAgBfwLACAEIAc2AgAgBCAHNgIEIAQgBTYCCCAEIAY2AgwDQCACIAZIBEAgAyACQQxsaiIFKAIIQQFxRQRAIAQgASAFKAIEEBIgAUEBaiEBCyACQQFqIQIMAQsLIAQgAUECQQAQESAEIAE2AgxBACEBA0AgASAEKAIMSARAIAAoAgwoAgAgBCgCBCABQQJ0aigCACgCBBDSASABQQFqIQEMAQsLIAAoAhAiAEEQEHQ2AgAgAEEDNgIEIABBMBB0NgIIIABBBDYCDCAAQQA2AhAgAEEANgIUC6cBAAJAAkACQCMHQQRrDgIBAgALAAtBACEECyAEBEAgACgCDBAUIgQgABDAASAEEMQBKAIAIQQFIAAoAgwQFCIEIAAQwAELIAMoAgwQFCIAIAMQwAEgBCAAENABIgAoAhAgACgCGCAAKAIUENEBIgAgAfwDNgIcAkAgACgCDCIDQQhrKAIAQSxGBEAgAyACNwMADAELAAsjCgRAIwooAggQ0wELIAAkCgvGAQIDfwF+IABBFGsoAhBBeHEiAiABKAIMIgRHBEAgBBCyASEAIAIQsgEhAUGUlAEgADYCAEGclAEgATYCAEGQlAFBjJQBKAIAQQJ2QfD0ABC0AUHAlAFB7wFBBRAAAAsDQCADIABBFGsoAhBBA3ZIBEBCACEFQQAhAgNAIAJBCEkEQCAFIAEoAgQgA0EDdCACamoxAAAgAkEDdEH/AXGthoQhBSACQQFqIQIMAQsLIAAgA0EDdGogBTcDACADQQFqIQMMAQsLC50BAAJAAkACQCMHQQNrDgIBAgALAAtBACEDCyADBEAgACgCDBAUIgMgABDAASADEMQBKAIAIQMFIAAoAgwQFCIDIAAQwAELIAMQyQEhAEENEMgBIgMgARDVAUECJAcCQCAAIAMQygFBABDOARDRASIAKAIMIgFBCGsoAgBBLEYEQCABIAI3AwAMAQsACyMKBEAjCigCCBDTAQsgACQKCzIBAX9BCEEwEA8iAEUEQEEAQQAQDyEACyAAQQA2AgAgAEEAQQBBBkHQlQEQEDYCBCAAC9wBAQR/QYCABCEDA0AgBCABKAIMSARAIAAgASgCBCAEQQJ0aigCACIGKAIIIAYoAgAgBigCBBAUEMwBIAYoAghBAkYEQCADIAYoAgBNBEAgBigCACEDCwsgBEEBaiEEDAELCwNAIAUgAigCDEgEQCACKAIEIAVBAnRqKAIAIgQoAgQoAgwQFCEGQQAhAQNAIAEgBigCCEgEQCABIAYoAgRqIAEgBCgCBCgCBGotAAA6AAAgAUEBaiEBDAELCyAAQQAgBCgCACAGEMwBIAVBAWohBQwBCwsgACADEM4BC6gDAQV/AkACQAJAIwdBBWsOAgECAAsAC0EAIQULIAAhBiAFBEAgACgCDBAUIgUgABDAASAFEMQBKAIAIQAFIAYoAgwQFCIAIAYQwAELIAAQyQEhBkENEMgBIgUgARDVARDKASEHQQBBAkEvQZCVARAQIQFBCEEoEA8iCCACNgIAIAhBADYCBANAIAgoAgQgCCgCACgCCEgEQEEMQS4QDyIARQRAQQBBABAPIQALIABBADYCACAAQQA2AgQgAEEANgIIIAAgCBDGATYCACAAIAgQxgE2AgQgAEECQQEgCBDHARs2AgggASAAENIBDAELC0EAQQJBMUGwlQEQECEIQQhBKBAPIgIgAzYCACACQQA2AgQDQCACKAIEIAIoAgAoAghIBEAQ1wEiCSACEMYBNgIAIAIgAhDGASIDEMMBIQpBACEAA0AgACADSQRAIAkoAgQgACAKKAIEai0AABC7ASAAQQFqIQAMAQsLIAggCRDSAQwBCwsCQCAGIAUgByABIAgQ2AEQ0QEiACgCDCIBQQhrKAIAQSxGBEAgASAENwMADAELAAsgACQKC6IKAgF+DH8gACgCFEEDRgRAIABBfzYCFCAAIAAoAhw2AhAgAEF/NgIcCwJAIAAoAhRBf0cNACAAKAIcIgNBf0cEQCAAIAM2AhAgAEF/NgIcQQEPCyAAKAIAIggoAgAhBSAIKAIEIQMgACgCKCEHIAAoAiwhBAJAA0AgASAGSwRAIABBADYCGCAEQQA2AgwgBEEANgIAIAMoAgBBFGsoAhBBAnasIAAoAhAiCa1YBH9BAQUgAygCACAJQQJ0aigCAAsEQCMBKQMIIQICQCAAKAIMIgFBCGsoAgBBLEYEQAJ/IAEgASkDACACfTcDACABKQMAQgBTBEAgAUIANwMAQQEMAQtBAAshAQwBCwALIAEEQCAAQQQ2AhQFIABBATYCFAsMBAsgCSAFKAIEai0AACIKIwMoAgxIBH8jAygCBCAKQQJ0aigCAAUjAQsiCykDCCECAkAgACgCDCIMQQhrKAIAQSxGBEACfyAMIAwpAwAgAn03AwAgDCkDAEIAUwRAIAxCADcDAEEBDAELQQALIQwMAQsACyAMBEAgAEEENgIUDAQLIAsjAUYNAiALKAIEIQwCfyAJQQFqIg0gAygCACIOQRRrKAIQQQJ2SQRAIA4gDUECdGooAgAMAQtBAAshDiAHIAwgBSANIA4QtwEhDCALIwJGBH8gAC0AIAVBAAsEQCAAKAIEQQwgDDUCACICpyACQg1aG0EDdGopAwCnrUL/H3xCDIhCBIYhAgJAIAAoAgwiC0EIaygCAEEsRgRAAn8gCyALKQMAIAJ9NwMAIAspAwBCAFMEQCALQgA3AwBBAQwBC0EACyELDAELAAsgCwRAIABBBDYCFAwFCwtBhPMAKAIAIApBAnRqKAIAIQogACgCBCELIAAoAgghDUEEJAcCQAJAAkACQAJAIAQgDCALIA0gCigCABEAACIKKAIADgQDAQACBAsgACgCJCEJIAgoAgghCwJAIAooAggiCkGAgHxGBEAgCUEBNgIADAELIApBAXFBASAKGwRAIAlBAjYCAAwBCyAKQQF2QQFrIgogCygCAEEUaygCEEEDdk8EQCAJQQI2AgAMAQsgCygCACAKQQN0aikDACICQoCAgIAQWgRAIAlBAjYCAAwBCyAJQQA2AgAgCSACPgIECyAJKAIAQQFGBEAgAEEANgIUDAgLIAkoAgBBAkYNBiAAKAIwIQoCfyAJKAIEIgkgCCgCDCgCACILQRRrKAIQQQJ2SQRAIAsgCUECdGooAgBBAnFBAEcMAQtBAAsEQCAKQQE6AAAgCiAJNgIEBSAKQQA6AAAgCkEANgIECyAKLQAARQ0GIAAgCigCBDYCEAwDCyAAKAIwIQsCfyAKKAIEIAlqIgkgCCgCDCgCACIKQRRrKAIQQQJ2SQRAIAogCUECdGooAgBBAnFBAEcMAQtBAAsEQCALQQE6AAAgCyAJNgIEBSALQQA6AAAgC0EANgIECyALLQAARQ0FIAAgCygCBDYCEAwCCyAKKAIMQQNGBEAgAEEDNgIUIAAgCigCEDYCGCAAIAAoAhBBAWogDmo2AhwMBgsgCigCDEEBRgRAIAooAhBBgIAESQRAIABBATYCFAUgAEECNgIUIAAgCigCEDYCGAsMBgsgCigCDCIBQQJGDQQgAUUEQCAAQQE2AhQgACAKKAIQNgIYDAYLQfCVAUGglgFBugFBCxAAAAsgACAAKAIQIA5BAWpqNgIQCyAGQQFqIQYMAQsLQQEPCyAAQQE2AhQLQQALEQAjCgRAIwpBARDaAQ8LQQALEQAjCgRAIwogABDaAQ8LQQALEAAjCkUEQEEADwsjCigCEAsQACMKRQRADwsjCiAANgIcCxQAIwpFBEBBAQ8LIwooAhRB/wFxCxAAIwpFBEBBAA8LIwooAhgLMQIBfwF+IwpFBEBCAA8LAkAjCigCDCIAQQhrKAIAQSxGBEAgACkDACEBDAELAAsgAQspAQF/IwoEQAJAIwooAgwiAUEIaygCAEEsRgRAIAEgADcDAAwBCwALCwu0AQIFfwF+QegAEBQhAUEBJAcgASgCBCEDIAEoAggiBEEAIARBAEwbIQAgACAESARAIAAgA2pBACAEIABr/AsACyMKRQRAIAEPCyMKIQMDQCACIAMoAgQiAEEUaygCEEEDdkgEQCAAIAJBA3RqKQMAIQVBACEAA0AgAEEISARAIAEoAgQgAkEDdCAAamogBUL/AYM8AAAgBUIIiCEFIABBAWohAAwBCwsgAkEBaiECDAELCyABCxMAIwpFBEAPCyMKKAIEIAAQ1QEL9gEBA38CQCMKRQ0AIwooAggiAigCECIBKAIAIAEoAgQgAEG93MqVfGxBtc/ZsgFqQRF3Qa/W074CbCIBQQ92IAFzQfeUr694bCIBQQ12IAFzQb3cypV8bCIBQRB2IAFzcUECdGooAgAhAQJAA0AgAQRAIAEoAggiA0EBcQR/QQAFIAEoAgAgAEYLDQIgA0F+cSEBDAELC0EAIQELIAEEfyACKAIQIAAQNigCBBA4BUEACyIARQ0AIAAPC0GAIBAUIQBBASQHIAAoAgQhASAAKAIIIgJBACACQQBMGyEDIAIgA0oEQCABIANqQQAgAiADa/wLAAsgAAuhAgEHfyMKRQRAQQAPCyMKIQIQMyEEAn8gAigCCCEFIAEiAgRAIAAhASACrUL/H3xCDIinIQcDQCADIAdIBEAgBSAEIAUoAgRBASABEDdBACAELQAADQMaIAFBgCBqIQEgA0EBaiEDDAELCwsgAhAUIQcDQCAHKAIIIgEgBkoEQAJAIAEgBmshAiAFIAQgBSgCBCIIQQEgABA3IAQtAAANACACIAgoAgQiAWpBgCBPBEBBgCAgAWshAgsgASACaiEDIAgoAgAoAgQQOCEIA0AgASADSQRAIAYgBygCBGogASAIKAIEai0AADoAACAGQQFqIQYgAUEBaiEBDAELCyAAIAJqIQAMAgsLC0EAIAQtAAANABogBwsgBC0AAARAQQAPCwtgAQR/IwpFBEBBAA8LIwohBCAAIAEoAghqIQUQMyEDIAAhAgNAIAIgBUkEQCAEKAIIIAMgAiABKAIEIAIgAGtqMQAAQQEQnAEgAy0AAARAQQAPCyACQQFqIQIMAQsLQQEL0gEBAX8gAigCDBAUIgcgAhDAASAHIQJBABAUIQcgAUUEQCACEMQBIgEoAgAhAiABKAIEIQcLIABFBEAgAhDJARDKASAEIAUQ2AFBDRDIASEEQQAhAANAIAAgAygCDEgEQCAAQQN0IgUgBGogAygCBCAFaikDADcDACAAQQFqIQAMAQsLIAQQzwEiACAHNgIAIAAPCyAAQQFGBEAgBigCDBAUIgAgBhDAASACIAAQ0AEiACAHNgIAIAAPC0HwlwEgABCyARCvAUGgmAFB0QBBAxAAAAucBQEEfyABIAIgAEEAQQNBNEHwlgEQEEEAQQJBL0GQlwEQEEEAQQJBMUGwlwEQEEEAQQBBBkHQlwEQEBDoASgCECIAKAIAKAIMIQFBGEE1EA8iAkEQEHQ2AgAgAkEDNgIEIAJBMBB0NgIIIAJBBDYCDCACQQA2AhAgAkEANgIUA0AgASAESgRAIAAoAgQiBSgCAEEUaygCEEECdqwgBK1YBH9BAQUgBSgCACAEQQJ0aigCAAsEQEGQ9QBB4JgBQRBBBxAAAAsgBCAAKAIAKAIEai0AACIFIwMoAgxB/wFxTwR/IwEFIwMoAgQgBUECdGooAgALIQUCfyAEIAAoAgwoAgAiBkEUaygCEEECdkkEQCAEQQJ0IAZqKAIAQQJxQQBHDAELQQALBEAgAwRAIAIgAygCACADEHULQRBBMhAPIgNFBEBBAEEAEA8hAwsgA0EANgIAIANCADcDCCADIAQ2AgALIAMEQCADIAMpAwggBSkDCHw3AwgLAn8gBEEBaiIFIAAoAgQoAgAiBkEUaygCEEECdkkEQCAFQQJ0IAZqKAIADAELQQALIARqQQFqIQQMAQsLIAMEQCACIAMoAgAgAxB1CyACKAIIIQEgAigCECEDQRBBMxAPIgRBADYCACAEQQA2AgQgBEEANgIIIARBADYCDCADQf////8ASwRAQeDFAEGwxQBBxgBBPBAAAAtBCCADIANBCE0bQQJ0IgBBARAPIgJBACAA/AsAIAQgAjYCACAEIAI2AgQgBCAANgIIIAQgAzYCDEEAIQBBACECA0AgAiADSARAIAEgAkEMbGoiBSgCCEEBcUUEQCAEIAAgBSgCBBASIABBAWohAAsgAkEBaiECDAELCyAEIABBAkEAEBEgBCAANgIMIAQLrwEBBH8gAUH/AXFBEBCzASIBQRRrKAIQQX5xIQYgAEGs+AAoAgBBfnEiAEUgBkEES3IEfyABBUEEQQIQDyECQQQgBmsiBSAASwRAIAUgBUECayAAbiAAbCIHayEDA0AgBCAHSQRAIAIgBGpBsPgAIAD8CgAAIAAgBGohBAwBCwsgAiAHakGw+AAgA/wKAAAFIAJBsPgAIAX8CgAACyACIAVqIAEgBvwKAAAgAgsQrwELvgEBBX8gASACIABBAEEDQTRBoJkBEBBBAEECQS9BwJkBEBBBAEECQTFB4JkBEBBBAEEAQQZBgJoBEBAQ6AEhAyACBH9B8PQABUGgmgFB0JoBEK8BQfD0ACEBIAMoAgAiBigCBCECQQAhACAGKAIIIQQDQCAAIARIBEAgACACai0AACEFQQQkByABIAUgACAGQfCaASgCABEAACEBIABBAWohAAwBCwsgARCvAUGQmwEQrwELIAMoAhAQuAEQrwELqgIBAn8gACECIAFCClQEQCAAIAFCMIQ9AQBBAQ8LIAFC/////w9YBEAgAaciA0GgjQZJBH8gA0HkAEkEfyADQQpPQQFqBSADQZDOAE9BA2ogA0HoB09qCwUgA0GAreIESQR/IANBwIQ9T0EGagUgA0GAlOvcA09BCGogA0GAwtcvT2oLCyEAIAIgAyAAELABBSACIAEgAUKAgJqm6q/jAVQEfyABQoCglKWNHVQEfyABQoDQ28P0AlpBCmogAUKAyK+gJVpqBSABQoCA6YOx3hZaQQ1qIAFCgMDK84SjAlpqCwUgAUKAgKjsha/RsQFUBH8gAUKAgIT+pt7hEVpBEGoFIAFCgICgz8jgyOOKf1pBEmogAUKAgJC7utat8A1aagsLIgAQvQELIAALsAIBBX8gAUEBayIFQQBIBEBB8PQADwsgBUUEQCAAKQMAQQoQvgEPC0H8hQEoAgBBAXYiBEEUaiAFbEEUaiIGQQF0QQIQDyEBA0AgAyAFSARAIAEgAkEBdGogACADQQN0aikDABDsASACaiECIAQEQCABIAJBAXRqQYCGASAEQQF0/AoAACACIARqIQILIANBAWohAwwBCwsgBiABIAJBAXRqIAAgBUEDdGopAwAQ7AEgAmoiAEoEQCAAQQAgAEEAShsiACABQRRrKAIQQQF2IgIgACACSBsiA0EAIANBAEwbQQF0IQRB8PQAIQACQCADQQAgA0EAThtBAXQiAyAEayIFRQ0AIAEhACAERSADIAJBAXRGcQ0AIAVBAhAPIgAgASAEaiAF/AoAAAsgAA8LIAELEABB0JoBIABBEBC+ARCvAQtiAgR/AX4gAEEUaygCEEEDdiIDQQJBOUEAEBAiBCgCBCEFA0AgAiADSARAIAAgAkEDdGopAwAhBkEDJAcgBSACQQJ0aiAGIAIgACABKAIAEQsANgIAIAJBAWohAgwBCwsgBAvXAgEEfyAAUARAQbD4AA8LQgAgAH0gACAAQj+Ip0EBdCIBGyIAQv////8PWARAIACnIgRBoI0GSQR/IARB5ABJBH8gBEEKT0EBagUgBEGQzgBPQQNqIARB6AdPagsFIARBgK3iBEkEfyAEQcCEPU9BBmoFIARBgJTr3ANPQQhqIARBgMLXL09qCwsiA0EBdCABakECEA8iAiABaiAEIAMQsAEFIABCgICapuqv4wFUBH8gAEKAoJSljR1UBH8gAEKA0NvD9AJaQQpqIABCgMivoCVaagUgAEKAgOmDsd4WWkENaiAAQoDAyvOEowJaagsFIABCgICo7IWv0bEBVAR/IABCgICE/qbe4RFaQRBqBSAAQoCAoM/I4Mjjin9aQRJqIABCgICQu7rWrfANWmoLCyIDQQF0IAFqQQIQDyICIAFqIAAgAxC9AQsgAQRAIAJBLTsBAAsgAgv/BAEBfiAAIAEgAiADIAQQtwEiAkUEQEEADwtBJEE7EA8iAEUEQEEAQQAQDyEACyAAQgA3AwAgAEIANwMIIABCADcDECAAQgA3AxggABCuATYCICAAIAI2AiACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDg0MBwAHAQIJCQMKCgQFBgsgACACNAIANwMADAcLIAAgBUEMIAI1AgAiBqcgBkINWhtBA3RqKQMANwMADAYLIAAgBUEMIAI1AgAiBqcgBkINWhtBA3RqKQMANwMAIAAgAjUCBCACNQIAQiCGfDcDCAwJCyAAIAVBDCACNQIAIganIAZCDVobQQN0aikDADcDACAAIAVBDCACNQIEIganIAZCDVobQQN0aikDADcDCAwICyAAIAVBDCACNQIAIganIAZCDVobQQN0aikDADcDACAAIAVBDCACNQIEIganIAZCDVobQQN0aikDADcDCCAAIAI0Agg3AxAgACACNAIMNwMYDAcLIAAgBUEMIAI1AgAiBqcgBkINWhtBA3RqKQMANwMAIAAgBUEMIAI1AgQiBqcgBkINWhtBA3RqKQMANwMIIAAgBUEMIAI1AggiBqcgBkINWhtBA3RqKQMANwMQDAYLQYCHASABELIBEK8BQfCfAUHQAkEHEAAACyAAIAI0AgA3AwAMBAsgACACNAIENwMIDAMLIAAgBUEMIAI1AgAiBqcgBkINWhtBA3RqKQMANwMAIAAgAjQCBDcDCAwBCyAAIAVBDCACNQIAIganIAZCDVobQQN0aikDADcDACAAIAVBDCACNQIEIganIAZCDVobQQN0aikDADcDCAsgACACNAIINwMQCyAAC7UDAQl/QQBBAkExQYCjARAQIQQgACgCECICKAIIIQYgAigCECECQRBBJBAPIgVBADYCACAFQQA2AgQgBUEANgIIIAVBADYCDCACQf////8ASwRAQeDFAEGwxQBBxgBBPBAAAAtBCCACIAJBCE0bQQJ0IgdBARAPIghBACAH/AsAIAUgCDYCACAFIAg2AgQgBSAHNgIIIAUgAjYCDANAIAIgA0oEQCAGIANBDGxqIgcoAghBAXFFBEAgBSABIAcoAgAQEiABQQFqIQELIANBAWohAwwBCwsgBSABQQJBABARIAUgATYCDEEAIQFBACEDA0AgAyAFKAIMSARAIAAoAhAgBSgCBCADQQJ0aigCACIHEDYiCCgCBCgCBARAQQAhAgNAIAIgCCgCBBA4KAIISARAIAIgCCgCBBA4KAIEai0AACIGBEAgAQRAIAEoAgQgBhC7AQUQ1wEiASAHQQx0IAJqNgIAQQFBAEEGQQAQECIJQQAgBhC2ASABIAk2AgQLBSABBEAgBCABENIBQQAhAQsLIAJBAWohAgwBCwsLIANBAWohAwwBCwsgAQRAIAQgARDSAQsgBAvZCAINfwF+QQEhAhCuASEJA0ACQCACRQRAIAEEQEGUnAEgACgCBCICIAJBFGsoAhBBA3YQ7QE2AgBBkJwBQYycASgCAEECdkHw9AAQtAEQAQsgAQRAQbScASAAKAIEQdCcARDvASICKAIEIAIoAgxBgIYBELQBNgIAQbCcAUGsnAEoAgBBAnZB8PQAELQBEAELIAEEQEHwnAEgACgCFBCyARCvARABCyABBEBBsJ0BIAAoAhhBChCzARCvARABCwwBCyABBEBB4J0BIAAoAhBBChCzARCvARABCyABBEACQCAAKAIMIgJBCGsoAgBBLEYEQCACKQMA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LABBmBcLGQIAAAASAAAAUwBUAE8AUgBFAF8AVQAzADIAQbwXCwEsAEHIFwsZAgAAABIAAABTAFQATwBSAEUAXwBVADYANABB7BcLATwAQfgXCycCAAAAIAAAAFMAVABPAFIARQBfAEkATQBNAF8ASQBOAEQAXwBVADgAQawYCwE8AEG4GAspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQAxADYAQewYCwE8AEH4GAspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQAzADIAQawZCwE8AEG4GQspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQA2ADQAQewZCwEsAEH4GQshAgAAABoAAABMAE8AQQBEAF8ASQBNAE0AXwBKAFUATQBQAEGcGgsBLABBqBoLIQIAAAAaAAAAQgBSAEEATgBDAEgAXwBFAFEAXwBJAE0ATQBBzBoLASwAQdgaCyECAAAAGgAAAEIAUgBBAE4AQwBIAF8ATgBFAF8ASQBNAE0AQfwaCwE8AEGIGwslAgAAAB4AAABCAFIAQQBOAEMASABfAEwAVABfAFUAXwBJAE0ATQBBvBsLATwAQcgbCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ATABFAF8AVQBfAEkATQBNAEH8GwsBPABBiBwLJQIAAAAeAAAAQgBSAEEATgBDAEgAXwBHAEUAXwBVAF8ASQBNAE0AQbwcCwE8AEHIHAslAgAAAB4AAABCAFIAQQBOAEMASABfAEcAVABfAFUAXwBJAE0ATQBB/BwLATwAQYgdCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ATABUAF8AUwBfAEkATQBNAEG8HQsBPABByB0LJQIAAAAeAAAAQgBSAEEATgBDAEgAXwBMAEUAXwBTAF8ASQBNAE0AQfwdCwE8AEGIHgslAgAAAB4AAABCAFIAQQBOAEMASABfAEcARQBfAFMAXwBJAE0ATQBBvB4LATwAQcgeCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ARwBUAF8AUwBfAEkATQBNAEH8HgsBLABBiB8LFwIAAAAQAAAATQBPAFYARQBfAFIARQBHAEGsHwsBPABBuB8LKQIAAAAiAAAAQwBPAFUATgBUAF8AUwBFAFQAXwBCAEkAVABTAF8ANgA0AEHsHwsBPABB+B8LKQIAAAAiAAAAQwBPAFUATgBUAF8AUwBFAFQAXwBCAEkAVABTAF8AMwAyAEGsIAsBPABBuCALLwIAAAAoAAAATABFAEEARABJAE4ARwBfAFoARQBSAE8AXwBCAEkAVABTAF8ANgA0AEHsIAsBPABB+CALLwIAAAAoAAAATABFAEEARABJAE4ARwBfAFoARQBSAE8AXwBCAEkAVABTAF8AMwAyAEGsIQsBPABBuCELMQIAAAAqAAAAVABSAEEASQBMAEkATgBHAF8AWgBFAFIATwBfAEIASQBUAFMAXwA2ADQAQewhCwE8AEH4IQsxAgAAACoAAABUAFIAQQBJAEwASQBOAEcAXwBaAEUAUgBPAF8AQgBJAFQAUwBfADMAMgBBrCILASwAQbgiCyECAAAAGgAAAFMASQBHAE4AXwBFAFgAVABFAE4ARABfADgAQdwiCwEsAEHoIgsjAgAAABwAAABTAEkARwBOAF8ARQBYAFQARQBOAEQAXwAxADYAQYwjCwEsAEGYIwsjAgAAABwAAABaAEUAUgBPAF8ARQBYAFQARQBOAEQAXwAxADYAQbwjCwEsAEHIIwshAgAAABoAAABSAEUAVgBFAFIAUwBFAF8AQgBZAFQARQBTAEHsIwsBLABB+CMLHwIAAAAYAAAAUwBUAE8AUgBFAF8ASQBOAEQAXwBVADgAQZwkCwEsAEGoJAshAgAAABoAAABTAFQATwBSAEUAXwBJAE4ARABfAFUAMQA2AEHMJAsBLABB2CQLIQIAAAAaAAAAUwBUAE8AUgBFAF8ASQBOAEQAXwBVADMAMgBB/CQLASwAQYglCyECAAAAGgAAAFMAVABPAFIARQBfAEkATgBEAF8AVQA2ADQAQawlCwEsAEG4JQsdAgAAABYAAABMAE8AQQBEAF8ASQBOAEQAXwBVADgAQdwlCwEsAEHoJQsdAgAAABYAAABMAE8AQQBEAF8ASQBOAEQAXwBJADgAQYwmCwEsAEGYJgsfAgAAABgAAABMAE8AQQBEAF8ASQBOAEQAXwBVADEANgBBvCYLASwAQcgmCx8CAAAAGAAAAEwATwBBAEQAXwBJAE4ARABfAEkAMQA2AEHsJgsBLABB+CYLHwIAAAAYAAAATABPAEEARABfAEkATgBEAF8AVQAzADIAQZwnCwEsAEGoJwsfAgAAABgAAABMAE8AQQBEAF8ASQBOAEQAXwBJADMAMgBBzCcLASwAQdgnCx8CAAAAGAAAAEwATwBBAEQAXwBJAE4ARABfAFUANgA0AEH8JwsBLABBiCgLGwIAAAAUAAAAQQBEAEQAXwBJAE0ATQBfADMAMgBBrCgLASwAQbgoCxUCAAAADgAAAEEATgBEAF8ASQBNAE0AQdwoCwEsAEHoKAsVAgAAAA4AAABYAE8AUgBfAEkATQBNAEGMKQsBHABBmCkLEwIAAAAMAAAATwBSAF8ASQBNAE0AQawpCwEsAEG4KQsbAgAAABQAAABNAFUATABfAEkATQBNAF8AMwAyAEHcKQsBLABB6CkLHwIAAAAYAAAAUwBFAFQAXwBMAFQAXwBVAF8ASQBNAE0AQYwqCwEsAEGYKgsfAgAAABgAAABTAEUAVABfAEwAVABfAFMAXwBJAE0ATQBBvCoLASwAQcgqCyECAAAAGgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwAzADIAQewqCwEsAEH4KgshAgAAABoAAABTAEgATABPAF8AUgBfAEkATQBNAF8AMwAyAEGcKwsBLABBqCsLIQIAAAAaAAAAUwBIAEEAUgBfAFIAXwBJAE0ATQBfADMAMgBBzCsLASwAQdgrCyMCAAAAHAAAAE4ARQBHAF8AQQBEAEQAXwBJAE0ATQBfADMAMgBB/CsLASwAQYgsCx8CAAAAGAAAAFMARQBUAF8ARwBUAF8AVQBfAEkATQBNAEGsLAsBLABBuCwLHwIAAAAYAAAAUwBFAFQAXwBHAFQAXwBTAF8ASQBNAE0AQdwsCwE8AEHoLAspAgAAACIAAABTAEgATABPAF8ATABfAEkATQBNAF8AQQBMAFQAXwAzADIAQZwtCwE8AEGoLQspAgAAACIAAABTAEgATABPAF8AUgBfAEkATQBNAF8AQQBMAFQAXwAzADIAQdwtCwE8AEHoLQspAgAAACIAAABTAEgAQQBSAF8AUgBfAEkATQBNAF8AQQBMAFQAXwAzADIAQZwuCwEsAEGoLgsdAgAAABYAAABDAE0ATwBWAF8ASQBaAF8ASQBNAE0AQcwuCwEsAEHYLgsdAgAAABYAAABDAE0ATwBWAF8ATgBaAF8ASQBNAE0AQfwuCwEsAEGILwsbAgAAABQAAABBAEQARABfAEkATQBNAF8ANgA0AEGsLwsBLABBuC8LGwIAAAAUAAAATQBVAEwAXwBJAE0ATQBfADYANABB3C8LASwAQegvCyECAAAAGgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwA2ADQAQYwwCwEsAEGYMAshAgAAABoAAABTAEgATABPAF8AUgBfAEkATQBNAF8ANgA0AEG8MAsBLABByDALIQIAAAAaAAAAUwBIAEEAUgBfAFIAXwBJAE0ATQBfADYANABB7DALASwAQfgwCyMCAAAAHAAAAE4ARQBHAF8AQQBEAEQAXwBJAE0ATQBfADYANABBnDELATwAQagxCykCAAAAIgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwBBAEwAVABfADYANABB3DELATwAQegxCykCAAAAIgAAAFMASABMAE8AXwBSAF8ASQBNAE0AXwBBAEwAVABfADYANABBnDILATwAQagyCykCAAAAIgAAAFMASABBAFIAXwBSAF8ASQBNAE0AXwBBAEwAVABfADYANABB3DILASwAQegyCx8CAAAAGAAAAFIATwBUAF8AUgBfADYANABfAEkATQBNAEGMMwsBPABBmDMLJwIAAAAgAAAAUgBPAFQAXwBSAF8ANgA0AF8ASQBNAE0AXwBBAEwAVABBzDMLASwAQdgzCx8CAAAAGAAAAFIATwBUAF8AUgBfADMAMgBfAEkATQBNAEH8MwsBPABBiDQLJwIAAAAgAAAAUgBPAFQAXwBSAF8AMwAyAF8ASQBNAE0AXwBBAEwAVABBvDQLASwAQcg0CxkCAAAAEgAAAEIAUgBBAE4AQwBIAF8ARQBRAEHsNAsBLABB+DQLGQIAAAASAAAAQgBSAEEATgBDAEgAXwBOAEUAQZw1CwEsAEGoNQsdAgAAABYAAABCAFIAQQBOAEMASABfAEwAVABfAFUAQcw1CwEsAEHYNQsdAgAAABYAAABCAFIAQQBOAEMASABfAEwAVABfAFMAQfw1CwEsAEGINgsdAgAAABYAAABCAFIAQQBOAEMASABfAEcARQBfAFUAQaw2CwEsAEG4NgsdAgAAABYAAABCAFIAQQBOAEMASABfAEcARQBfAFMAQdw2CwE8AEHoNgspAgAAACIAAABMAE8AQQBEAF8ASQBNAE0AXwBKAFUATQBQAF8ASQBOAEQAQZw3CwEcAEGoNwsTAgAAAAwAAABBAEQARABfADMAMgBBvDcLARwAQcg3CxMCAAAADAAAAFMAVQBCAF8AMwAyAEHcNwsBHABB6DcLEwIAAAAMAAAATQBVAEwAXwAzADIAQfw3CwEsAEGIOAsXAgAAABAAAABEAEkAVgBfAFUAXwAzADIAQaw4CwEsAEG4OAsXAgAAABAAAABEAEkAVgBfAFMAXwAzADIAQdw4CwEsAEHoOAsXAgAAABAAAABSAEUATQBfAFUAXwAzADIAQYw5CwEsAEGYOQsXAgAAABAAAABSAEUATQBfAFMAXwAzADIAQbw5CwEsAEHIOQsZAgAAABIAAABTAEgATABPAF8ATABfADMAMgBB7DkLASwAQfg5CxkCAAAAEgAAAFMASABMAE8AXwBSAF8AMwAyAEGcOgsBLABBqDoLGQIAAAASAAAAUwBIAEEAUgBfAFIAXwAzADIAQcw6CwEcAEHYOgsTAgAAAAwAAABBAEQARABfADYANABB7DoLARwAQfg6CxMCAAAADAAAAFMAVQBCAF8ANgA0AEGMOwsBHABBmDsLEwIAAAAMAAAATQBVAEwAXwA2ADQAQaw7CwEsAEG4OwsXAgAAABAAAABEAEkAVgBfAFUAXwA2ADQAQdw7CwEsAEHoOwsXAgAAABAAAABEAEkAVgBfAFMAXwA2ADQAQYw8CwEsAEGYPAsXAgAAABAAAABSAEUATQBfAFUAXwA2ADQAQbw8CwEsAEHIPAsXAgAAABAAAABSAEUATQBfAFMAXwA2ADQAQew8CwEsAEH4PAsZAgAAABIAAABTAEgATABPAF8ATABfADYANABBnD0LASwAQag9CxkCAAAAEgAAAFMASABMAE8AXwBSAF8ANgA0AEHMPQsBLABB2D0LGQIAAAASAAAAUwBIAEEAUgBfAFIAXwA2ADQAQfw9CwEcAEGIPgsNAgAAAAYAAABBAE4ARABBnD4LARwAQag+Cw0CAAAABgAAAFgATwBSAEG8PgsBHABByD4LCwIAAAAEAAAATwBSAEHcPgsBLABB6D4LIQIAAAAaAAAATQBVAEwAXwBVAFAAUABFAFIAXwBTAF8AUwBBjD8LASwAQZg/CyECAAAAGgAAAE0AVQBMAF8AVQBQAFAARQBSAF8AVQBfAFUAQbw/CwEsAEHIPwshAgAAABoAAABNAFUATABfAFUAUABQAEUAUgBfAFMAXwBVAEHsPwsBLABB+D8LFwIAAAAQAAAAUwBFAFQAXwBMAFQAXwBVAEGcwAALASwAQajAAAsXAgAAABAAAABTAEUAVABfAEwAVABfAFMAQczAAAsBLABB2MAACxUCAAAADgAAAEMATQBPAFYAXwBJAFoAQfzAAAsBLABBiMEACxUCAAAADgAAAEMATQBPAFYAXwBOAFoAQazBAAsBLABBuMEACxcCAAAAEAAAAFIATwBUAF8ATABfADYANABB3MEACwEsAEHowQALFwIAAAAQAAAAUgBPAFQAXwBMAF8AMwAyAEGMwgALASwAQZjCAAsXAgAAABAAAABSAE8AVABfAFIAXwA2ADQAQbzCAAsBLABByMIACxcCAAAAEAAAAFIATwBUAF8AUgBfADMAMgBB7MIACwEsAEH4wgALFQIAAAAOAAAAQQBOAEQAXwBJAE4AVgBBnMMACwEcAEGowwALEwIAAAAMAAAATwBSAF8ASQBOAFYAQbzDAAsBHABByMMACw8CAAAACAAAAFgATgBPAFIAQdzDAAsBHABB6MMACw0CAAAABgAAAE0AQQBYAEH8wwALARwAQYjEAAsRAgAAAAoAAABNAEEAWABfAFUAQZzEAAsBHABBqMQACw0CAAAABgAAAE0ASQBOAEG8xAALARwAQcjEAAsRAgAAAAoAAABNAEkATgBfAFUAQdzEAAsBPABB6MQACysCAAAAJAAAAEkAbgBkAGUAeAAgAG8AdQB0ACAAbwBmACAAcgBhAG4AZwBlAEGcxQALASwAQajFAAshAgAAABoAAAB+AGwAaQBiAC8AYQByAHIAYQB5AC4AdABzAEHMxQALASwAQdjFAAsjAgAAABwAAABJAG4AdgBhAGwAaQBkACAAbABlAG4AZwB0AGgAQfzFAAsBPABBiMYACy0CAAAAJgAAAH4AbABpAGIALwBhAHIAcgBhAHkAYgB1AGYAZgBlAHIALgB0AHMAQbzGAAsBHABByMYACwkVAAAACAAAAA4AQdzGAAsBHABB6MYACwkVAAAACAAAAA8AQfzGAAsBHABBiMcACwkVAAAACAAAABAAQZzHAAsBHABBqMcACwkVAAAACAAAABEAQbzHAAsBHABByMcACwkVAAAACAAAABIAQdzHAAsBHABB6McACwkVAAAACAAAABMAQfzHAAsBHABBiMgACwkVAAAACAAAABQAQZzIAAsBHABBqMgACwkVAAAACAAAABUAQbzIAAsBHABByMgACwkVAAAACAAAABYAQdzIAAsBHABB6MgACwkVAAAACAAAABcAQfzIAAsBHABBiMkACwkVAAAACAAAABgAQZzJAAsBHABBqMkACwkVAAAACAAAABkAQbzJAAsBHABByMkACwkVAAAACAAAABoAQdzJAAsBHABB6MkACwkVAAAACAAAABsAQfzJAAsBHABBiMoACwkVAAAACAAAABwAQZzKAAsBHABBqMoACwkVAAAACAAAAB0AQbzKAAsBHABByMoACwkVAAAACAAAAB4AQdzKAAsBHABB6MoACwkVAAAACAAAAB8AQfzKAAsBHABBiMsACwkVAAAACAAAACAAQZzLAAsBHABBqMsACwkVAAAACAAAACEAQbzLAAsBHABByMsACwkVAAAACAAAACIAQdzLAAsBHABB6MsACwkVAAAACAAAACMAQfzLAAsBHABBiMwACwkVAAAACAAAACQAQZzMAAsBHABBqMwACwkVAAAACAAAACUAQbzMAAsBHABByMwACwkVAAAACAAAACYAQdzMAAsBHABB6MwACwkVAAAACAAAACcAQfzMAAsBHABBiM0ACwkVAAAACAAAACgAQZzNAAsBHABBqM0ACwkVAAAACAAAACkAQbzNAAsBHABByM0ACwkVAAAACAAAACoAQdzNAAsBHABB6M0ACwkVAAAACAAAACsAQfzNAAsBHABBiM4ACwkVAAAACAAAACwAQZzOAAsBHABBqM4ACwkVAAAACAAAAC0AQbzOAAsBPABByM4ACysCAAAAJAAAAEsAZQB5ACAAZABvAGUAcwAgAG4AbwB0ACAAZQB4AGkAcwB0AEH8zgALASwAQYjPAAsdAgAAABYAAAB+AGwAaQBiAC8AbQBhAHAALgB0AHMAQazPAAsBHABBuM8ACwkVAAAACAAAAC4AQczPAAsBHABB2M8ACwkVAAAACAAAAC8AQezPAAsBHABB+M8ACwkVAAAACAAAADAAQYzQAAsBHABBmNAACwkVAAAACAAAADEAQazQAAsBHABBuNAACwkVAAAACAAAADIAQczQAAsBHABB2NAACwkVAAAACAAAADMAQezQAAsBHABB+NAACwkVAAAACAAAADQAQYzRAAsBHABBmNEACwkVAAAACAAAADUAQazRAAsBHABBuNEACwkVAAAACAAAADYAQczRAAsBHABB2NEACwkVAAAACAAAADcAQezRAAsBHABB+NEACwkVAAAACAAAADgAQYzSAAsBHABBmNIACwkVAAAACAAAADkAQazSAAsBHABBuNIACwkVAAAACAAAADoAQczSAAsBHABB2NIACwkVAAAACAAAADsAQezSAAsBHABB+NIACwkVAAAACAAAADwAQYzTAAsBHABBmNMACwkVAAAACAAAAD0AQazTAAsBHABBuNMACwkVAAAACAAAAD4AQczTAAsBHABB2NMACwkVAAAACAAAAD8AQezTAAsBHABB+NMACwkVAAAACAAAAEAAQYzUAAsBHABBmNQACwkVAAAACAAAAEEAQazUAAsBHABBuNQACwkVAAAACAAAAEIAQczUAAsBHABB2NQACwkVAAAACAAAAEMAQezUAAsBHABB+NQACwkVAAAACAAAAEQAQYzVAAsBHABBmNUACwkVAAAACAAAAEUAQazVAAsBHABBuNUACwkVAAAACAAAAEYAQczVAAsBHABB2NUACwkVAAAACAAAAEcAQezVAAsBHABB+NUACwkVAAAACAAAAEgAQYzWAAsBHABBmNYACwkVAAAACAAAAEkAQazWAAsBHABBuNYACwkVAAAACAAAAEoAQczWAAsBHABB2NYACwkVAAAACAAAAEsAQezWAAsBHABB+NYACwkVAAAACAAAAEwAQYzXAAsBHABBmNcACwkVAAAACAAAAE0AQazXAAsBHABBuNcACwkVAAAACAAAAE4AQczXAAsBHABB2NcACwkVAAAACAAAAE8AQezXAAsBHABB+NcACwkVAAAACAAAAFAAQYzYAAsBHABBmNgACwkVAAAACAAAAFEAQazYAAsBHABBuNgACwkVAAAACAAAAFIAQczYAAsBHABB2NgACwkVAAAACAAAAFMAQezYAAsBHABB+NgACwkVAAAACAAAAFQAQYzZAAsBHABBmNkACwkVAAAACAAAAFUAQazZAAsBHABBuNkACwkVAAAACAAAAFYAQczZAAsBHABB2NkACwkVAAAACAAAAFcAQezZAAsBHABB+NkACwkVAAAACAAAAFgAQYzaAAsBHABBmNoACwkVAAAACAAAAFkAQazaAAsBHABBuNoACwkVAAAACAAAAFoAQczaAAsBHABB2NoACwkVAAAACAAAAFsAQezaAAsBHABB+NoACwkVAAAACAAAAFwAQYzbAAsBHABBmNsACwkVAAAACAAAAF0AQazbAAsBHABBuNsACwkVAAAACAAAAF4AQczbAAsBHABB2NsACwkVAAAACAAAAF8AQezbAAsBHABB+NsACwkVAAAACAAAAGAAQYzcAAsBHABBmNwACwkVAAAACAAAAGEAQazcAAsBHABBuNwACwkVAAAACAAAAGIAQczcAAsBHABB2NwACwkVAAAACAAAAGMAQezcAAsBLABB+NwACyMCAAAAHAAAAEEAcgByAGEAeQAgAGkAcwAgAGUAbQBwAHQAeQBBnN0ACwFcAEGo3QALUwIAAABMAAAAVwBhAHIAbgBpAG4AZwA6ACAAUgB1AG4AIABvAHUAdAAgAG8AZgAgAHAAYQBnAGUAcwAhACAAQQBsAGwAbwBjAGEAdABpAG4AZwAuAEH83QALARwAQYjeAAsJFQAAAAgAAABkAEGc3gALARwAQajeAAsJFQAAAAgAAABlAEG83gALARwAQcjeAAsJFQAAAAgAAABmAEHc3gALARwAQejeAAsJFQAAAAgAAABnAEH83gALARwAQYjfAAsJFQAAAAgAAABoAEGc3wALARwAQajfAAsJFQAAAAgAAABpAEG83wALARwAQcjfAAsJFQAAAAgAAABqAEHc3wALARwAQejfAAsJFQAAAAgAAABrAEH83wALARwAQYjgAAsJFQAAAAgAAABsAEGc4AALARwAQajgAAsJFQAAAAgAAABtAEG84AALARwAQcjgAAsJFQAAAAgAAABuAEHc4AALARwAQejgAAsJFQAAAAgAAABvAEH84AALARwAQYjhAAsJFQAAAAgAAABwAEGc4QALARwAQajhAAsJFQAAAAgAAABxAEG84QALARwAQcjhAAsJFQAAAAgAAAByAEHc4QALARwAQejhAAsJFQAAAAgAAABzAEH84QALARwAQYjiAAsJFQAAAAgAAAB0AEGc4gALARwAQajiAAsJFQAAAAgAAAB1AEG84gALARwAQcjiAAsJFQAAAAgAAAB2AEHc4gALARwAQejiAAsJFQAAAAgAAAB3AEH84gALARwAQYjjAAsJFQAAAAgAAAB4AEGc4wALARwAQajjAAsJFQAAAAgAAAB5AEG84wALARwAQcjjAAsJFQAAAAgAAAB6AEHc4wALARwAQejjAAsJFQAAAAgAAAB7AEH84wALARwAQYjkAAsJFQAAAAgAAAB8AEGc5AALARwAQajkAAsJFQAAAAgAAAB9AEG85AALARwAQcjkAAsJFQAAAAgAAAB+AEHc5AALARwAQejkAAsJFQAAAAgAAAB/AEH85AALARwAQYjlAAsJFQAAAAgAAACAAEGc5QALARwAQajlAAsJFQAAAAgAAACBAEG85QALARwAQcjlAAsJFQAAAAgAAACCAEHc5QALARwAQejlAAsJFQAAAAgAAACDAEH85QALARwAQYjmAAsJFQAAAAgAAACEAEGc5gALARwAQajmAAsJFQAAAAgAAACFAEG85gALARwAQcjmAAsJFQAAAAgAAACGAEHc5gALARwAQejmAAsJFQAAAAgAAACHAEH85gALARwAQYjnAAsJFQAAAAgAAACIAEGc5wALARwAQajnAAsJFQAAAAgAAACJAEG85wALARwAQcjnAAsJFQAAAAgAAACKAEHc5wALARwAQejnAAsJFQAAAAgAAACLAEH85wALARwAQYjoAAsJFQAAAAgAAACMAEGc6AALARwAQajoAAsJFQAAAAgAAACNAEG86AALARwAQcjoAAsJFQAAAAgAAACOAEHc6AALARwAQejoAAsJFQAAAAgAAACPAEH86AALARwAQYjpAAsJFQAAAAgAAACQAEGc6QALARwAQajpAAsJFQAAAAgAAACRAEG86QALARwAQcjpAAsJFQAAAAgAAACSAEHc6QALARwAQejpAAsJFQAAAAgAAACTAEH86QALARwAQYjqAAsJFQAAAAgAAACUAEGc6gALARwAQajqAAsJFQAAAAgAAACVAEG86gALARwAQcjqAAsJFQAAAAgAAACWAEHc6gALARwAQejqAAsJFQAAAAgAAACXAEH86gALARwAQYjrAAsJFQAAAAgAAACYAEGc6wALARwAQajrAAsJFQAAAAgAAACZAEG86wALAqwDAEHI6wALogcBAAAAnAMAACAuAABALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAABgLgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAECcAAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4A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MAA5ADEAOQAyADkAMwA5ADQAOQA1ADkANgA5ADcAOQA4ADkAOQBBzPsACwIcBABB2PsAC4cIAgAAAAAEAAAwADAAMAAxADAAMgAwADMAMAA0ADAANQAwADYAMAA3ADAAOAAwADkAMABhADAAYgAwAGMAMABkADAAZQAwAGYAMQAwADEAMQAxADIAMQAzADEANAAxADUAMQA2ADEANwAxADgAMQA5ADEAYQAxAGIAMQBjADEAZAAxAGUAMQBmADIAMAAyADEAMgAyADIAMwAyADQAMgA1ADIANgAyADcAMgA4ADIAOQAyAGEAMgBiADIAYwAyAGQAMgBlADIAZgAzADAAMwAxADMAMgAzADMAMwA0ADMANQAzADYAMwA3ADMAOAAzADkAMwBhADMAYgAzAGMAMwBkADMAZQAzAGYANAAwADQAMQA0ADIANAAzADQANAA0ADUANAA2ADQANwA0ADgANAA5ADQAYQA0AGIANABjADQAZAA0AGUANABmADUAMAA1ADEANQAyADUAMwA1ADQANQA1ADUANgA1ADcANQA4ADUAOQA1AGEANQBiADUAYwA1AGQANQBlADUAZgA2ADAANgAxADYAMgA2ADMANgA0ADYANQA2ADYANgA3ADYAOAA2ADkANgBhADYAYgA2AGMANgBkADYAZQA2AGYANwAwADcAMQA3ADIANwAzADcANAA3ADUANwA2ADcANwA3ADgANwA5ADcAYQA3AGIANwBjADcAZAA3AGUANwBmADgAMAA4ADEAOAAyADgAMwA4ADQAOAA1ADgANgA4ADcAOAA4ADgAOQA4AGEAOABiADgAYwA4AGQAOABlADgAZgA5ADAAOQAxADkAMgA5ADMAOQA0ADkANQA5ADYAOQA3ADkAOAA5ADkAOQBhADkAYgA5AGMAOQBkADkAZQA5AGYAYQAwAGEAMQBhADIAYQAzAGEANABhADUAYQA2AGEANwBhADgAYQA5AGEAYQBhAGIAYQBjAGEAZABhAGUAYQBmAGIAMABiADEAYgAyAGIAMwBiADQAYgA1AGIANgBiADcAYgA4AGIAOQBiAGEAYgBiAGIAYwBiAGQAYgBlAGIAZgBjADAAYwAxAGMAMgBjADMAYwA0AGMANQBjADYAYwA3AGMAOABjADkAYwBhAGMAYgBjAGMAYwBkAGMAZQBjAGYAZAAwAGQA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";
|
|
17183
|
+
let compiledModulePromise = null;
|
|
17184
|
+
|
|
17185
|
+
// Helper function to decode and instantiate the module
|
|
17186
|
+
async function instantiate(imports) {
|
|
17187
|
+
if (compiledModulePromise === null) {
|
|
17188
|
+
compiledModulePromise = WebAssembly.compile(getWasmBytes());
|
|
17189
|
+
}
|
|
17190
|
+
const module = await compiledModulePromise;
|
|
17191
|
+
return instantiate$1(module, imports);
|
|
17192
|
+
}
|
|
17193
|
+
|
|
17194
|
+
// Helper function to just get the bytes
|
|
17195
|
+
function getWasmBytes() {
|
|
17196
|
+
return Uint8Array.from(atob(wasmBase64), c => c.charCodeAt(0));
|
|
17197
|
+
}
|
|
17198
|
+
|
|
17279
17199
|
// Max u32 value
|
|
17280
17200
|
const INF_STEPS = 2 ** 32 - 1;
|
|
17281
17201
|
class AnanasRegisters {
|
|
@@ -17361,8 +17281,7 @@ class AnanasInterpreter {
|
|
|
17361
17281
|
this.gas = new AnanasGasCounter(instance);
|
|
17362
17282
|
}
|
|
17363
17283
|
static async new() {
|
|
17364
|
-
const
|
|
17365
|
-
const instance = await instantiate(wasmModule, {
|
|
17284
|
+
const instance = await instantiate({
|
|
17366
17285
|
env: {
|
|
17367
17286
|
abort: () => {
|
|
17368
17287
|
throw new Error("Abort called from WASM");
|
|
@@ -17458,7 +17377,7 @@ class InterpreterInstanceManager {
|
|
|
17458
17377
|
}
|
|
17459
17378
|
}
|
|
17460
17379
|
|
|
17461
|
-
var index$
|
|
17380
|
+
var index$7 = /*#__PURE__*/Object.freeze({
|
|
17462
17381
|
__proto__: null,
|
|
17463
17382
|
HostCallMemory: HostCallMemory,
|
|
17464
17383
|
HostCallRegisters: HostCallRegisters,
|
|
@@ -17470,15 +17389,252 @@ var index$4 = /*#__PURE__*/Object.freeze({
|
|
|
17470
17389
|
tryAsHostCallIndex: tryAsHostCallIndex
|
|
17471
17390
|
});
|
|
17472
17391
|
|
|
17392
|
+
/**
|
|
17393
|
+
* Host call result constants.
|
|
17394
|
+
*
|
|
17395
|
+
* https://graypaper.fluffylabs.dev/#/85129da/2c7c022c7c02?v=0.6.3
|
|
17396
|
+
*/
|
|
17397
|
+
const HostCallResult = {
|
|
17398
|
+
/** The return value indicating an item does not exist. */
|
|
17399
|
+
NONE: tryAsU64(0xffffffffffffffffn), // 2**64 - 1
|
|
17400
|
+
/** Name unknown. */
|
|
17401
|
+
WHAT: tryAsU64(0xfffffffffffffffen), // 2**64 - 2
|
|
17402
|
+
/** The inner PVM memory index provided for reading/writing is not accessible. */
|
|
17403
|
+
OOB: tryAsU64(0xfffffffffffffffdn), // 2**64 - 3
|
|
17404
|
+
/** Index unknown. */
|
|
17405
|
+
WHO: tryAsU64(0xfffffffffffffffcn), // 2**64 - 4
|
|
17406
|
+
/** Storage full or resource already allocated. */
|
|
17407
|
+
FULL: tryAsU64(0xfffffffffffffffbn), // 2**64 - 5
|
|
17408
|
+
/** Core index unknown. */
|
|
17409
|
+
CORE: tryAsU64(0xfffffffffffffffan), // 2**64 - 6
|
|
17410
|
+
/** Insufficient funds. */
|
|
17411
|
+
CASH: tryAsU64(0xfffffffffffffff9n), // 2**64 - 7
|
|
17412
|
+
/** Gas limit too low. */
|
|
17413
|
+
LOW: tryAsU64(0xfffffffffffffff8n), // 2**64 - 8
|
|
17414
|
+
/** The item is already solicited, cannot be forgotten or the operation is invalid due to privilege level. */
|
|
17415
|
+
HUH: tryAsU64(0xfffffffffffffff7n), // 2**64 - 9
|
|
17416
|
+
/** The return value indicating general success. */
|
|
17417
|
+
OK: tryAsU64(0n),
|
|
17418
|
+
};
|
|
17419
|
+
|
|
17420
|
+
const MAX_U32 = tryAsU32(2 ** 32 - 1);
|
|
17421
|
+
const MAX_U32_BIG_INT = tryAsU64(MAX_U32);
|
|
17422
|
+
const SERVICE_ID_BYTES = 4;
|
|
17423
|
+
const CURRENT_SERVICE_ID = tryAsServiceId(2 ** 32 - 1);
|
|
17424
|
+
function getServiceIdOrCurrent(regNumber, regs, currentServiceId) {
|
|
17425
|
+
const regValue = regs.get(regNumber);
|
|
17426
|
+
if (regValue === 2n ** 64n - 1n) {
|
|
17427
|
+
return currentServiceId;
|
|
17428
|
+
}
|
|
17429
|
+
return getServiceId(regValue);
|
|
17430
|
+
}
|
|
17431
|
+
function getServiceId(serviceId) {
|
|
17432
|
+
const { lower, upper } = u64IntoParts(serviceId);
|
|
17433
|
+
if (upper === 0) {
|
|
17434
|
+
return tryAsServiceId(lower);
|
|
17435
|
+
}
|
|
17436
|
+
return null;
|
|
17437
|
+
}
|
|
17438
|
+
function writeServiceIdAsLeBytes(serviceId, destination) {
|
|
17439
|
+
check `${destination.length >= SERVICE_ID_BYTES} Not enough space in the destination.`;
|
|
17440
|
+
destination.set(u32AsLeBytes(serviceId));
|
|
17441
|
+
}
|
|
17442
|
+
/** Clamp a U64 to the maximum value of a 32-bit unsigned integer. */
|
|
17443
|
+
function clampU64ToU32(value) {
|
|
17444
|
+
return value > MAX_U32_BIG_INT ? MAX_U32 : tryAsU32(Number(value));
|
|
17445
|
+
}
|
|
17446
|
+
function emptyRegistersBuffer() {
|
|
17447
|
+
return safeAllocUint8Array(NO_OF_REGISTERS$1 * REGISTER_BYTE_SIZE);
|
|
17448
|
+
}
|
|
17449
|
+
|
|
17450
|
+
Compatibility.isSuite(TestSuite.W3F_DAVXY) || Compatibility.isGreaterOrEqual(GpVersion.V0_7_2) ? 9 : 11;
|
|
17451
|
+
Compatibility.isSuite(TestSuite.W3F_DAVXY) || Compatibility.isGreaterOrEqual(GpVersion.V0_7_2) ? 10 : 12;
|
|
17452
|
+
/**
|
|
17453
|
+
* Service account details with threshold balance.
|
|
17454
|
+
*
|
|
17455
|
+
* Used exclusively by `info` host call.
|
|
17456
|
+
*
|
|
17457
|
+
* https://graypaper.fluffylabs.dev/#/ab2cdbd/33920033b500?v=0.7.2
|
|
17458
|
+
*/
|
|
17459
|
+
const codecServiceAccountInfoWithThresholdBalance = codec$1.object({
|
|
17460
|
+
codeHash: codec$1.bytes(HASH_SIZE),
|
|
17461
|
+
balance: codec$1.u64,
|
|
17462
|
+
thresholdBalance: codec$1.u64,
|
|
17463
|
+
accumulateMinGas: codec$1.u64.convert((i) => i, tryAsServiceGas),
|
|
17464
|
+
onTransferMinGas: codec$1.u64.convert((i) => i, tryAsServiceGas),
|
|
17465
|
+
storageUtilisationBytes: codec$1.u64,
|
|
17466
|
+
storageUtilisationCount: codec$1.u32,
|
|
17467
|
+
gratisStorage: codec$1.u64,
|
|
17468
|
+
created: codec$1.u32.convert((x) => x, tryAsTimeSlot),
|
|
17469
|
+
lastAccumulation: codec$1.u32.convert((x) => x, tryAsTimeSlot),
|
|
17470
|
+
parentService: codec$1.u32.convert((x) => x, tryAsServiceId),
|
|
17471
|
+
}, "ServiceAccountInfoWithThresholdBalance");
|
|
17472
|
+
|
|
17473
|
+
var index$6 = /*#__PURE__*/Object.freeze({
|
|
17474
|
+
__proto__: null,
|
|
17475
|
+
AccumulationStateUpdate: AccumulationStateUpdate,
|
|
17476
|
+
CURRENT_SERVICE_ID: CURRENT_SERVICE_ID,
|
|
17477
|
+
get EjectError () { return EjectError; },
|
|
17478
|
+
get ForgetPreimageError () { return ForgetPreimageError; },
|
|
17479
|
+
HostCallResult: HostCallResult,
|
|
17480
|
+
InsufficientFundsError: InsufficientFundsError,
|
|
17481
|
+
MachineInstance: MachineInstance,
|
|
17482
|
+
get MemoryOperation () { return MemoryOperation; },
|
|
17483
|
+
get NewServiceError () { return NewServiceError; },
|
|
17484
|
+
NoMachineError: NoMachineError,
|
|
17485
|
+
get PagesError () { return PagesError; },
|
|
17486
|
+
PartiallyUpdatedState: PartiallyUpdatedState,
|
|
17487
|
+
get PeekPokeError () { return PeekPokeError; },
|
|
17488
|
+
PendingTransfer: PendingTransfer,
|
|
17489
|
+
get PreimageStatusKind () { return PreimageStatusKind; },
|
|
17490
|
+
get ProvidePreimageError () { return ProvidePreimageError; },
|
|
17491
|
+
get RequestPreimageError () { return RequestPreimageError; },
|
|
17492
|
+
SERVICE_ID_BYTES: SERVICE_ID_BYTES,
|
|
17493
|
+
SegmentExportError: SegmentExportError,
|
|
17494
|
+
TRANSFER_MEMO_BYTES: TRANSFER_MEMO_BYTES,
|
|
17495
|
+
get TransferError () { return TransferError; },
|
|
17496
|
+
UnprivilegedError: UnprivilegedError,
|
|
17497
|
+
get UpdatePrivilegesError () { return UpdatePrivilegesError; },
|
|
17498
|
+
get ZeroVoidError () { return ZeroVoidError; },
|
|
17499
|
+
clampU64ToU32: clampU64ToU32,
|
|
17500
|
+
emptyRegistersBuffer: emptyRegistersBuffer,
|
|
17501
|
+
getServiceId: getServiceId,
|
|
17502
|
+
getServiceIdOrCurrent: getServiceIdOrCurrent,
|
|
17503
|
+
hostCallInfoAccount: codecServiceAccountInfoWithThresholdBalance,
|
|
17504
|
+
slotsToPreimageStatus: slotsToPreimageStatus,
|
|
17505
|
+
toMemoryOperation: toMemoryOperation,
|
|
17506
|
+
tryAsMachineId: tryAsMachineId,
|
|
17507
|
+
tryAsProgramCounter: tryAsProgramCounter,
|
|
17508
|
+
writeServiceIdAsLeBytes: writeServiceIdAsLeBytes
|
|
17509
|
+
});
|
|
17510
|
+
|
|
17511
|
+
const SUPER_PEAK_STRING = BytesBlob.blobFromString("peak");
|
|
17512
|
+
/**
|
|
17513
|
+
* Merkle Mountain Range.
|
|
17514
|
+
*
|
|
17515
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3aa0023aa002?v=0.6.2
|
|
17516
|
+
*/
|
|
17517
|
+
class MerkleMountainRange {
|
|
17518
|
+
hasher;
|
|
17519
|
+
mountains;
|
|
17520
|
+
/** Construct an empty MMR. */
|
|
17521
|
+
static empty(hasher) {
|
|
17522
|
+
return new MerkleMountainRange(hasher);
|
|
17523
|
+
}
|
|
17524
|
+
/** Construct a new MMR from existing peaks. */
|
|
17525
|
+
static fromPeaks(hasher, mmr) {
|
|
17526
|
+
return new MerkleMountainRange(hasher, mmr.peaks
|
|
17527
|
+
.reduce((acc, peak, index) => {
|
|
17528
|
+
if (peak !== null) {
|
|
17529
|
+
acc.push(Mountain.fromPeak(peak, 2 ** index));
|
|
17530
|
+
}
|
|
17531
|
+
return acc;
|
|
17532
|
+
}, [])
|
|
17533
|
+
.reverse());
|
|
17534
|
+
}
|
|
17535
|
+
constructor(hasher,
|
|
17536
|
+
/** Store non-empty merkle tries (mountains) ordered by descending size. */
|
|
17537
|
+
mountains = []) {
|
|
17538
|
+
this.hasher = hasher;
|
|
17539
|
+
this.mountains = mountains;
|
|
17540
|
+
}
|
|
17541
|
+
/**
|
|
17542
|
+
* Append a new hash to the MMR structure.
|
|
17543
|
+
*
|
|
17544
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3b11003b1100?v=0.6.2
|
|
17545
|
+
*/
|
|
17546
|
+
append(hash) {
|
|
17547
|
+
let newMountain = Mountain.fromPeak(hash, 1);
|
|
17548
|
+
for (;;) {
|
|
17549
|
+
const last = this.mountains.pop();
|
|
17550
|
+
if (last === undefined) {
|
|
17551
|
+
this.mountains.push(newMountain);
|
|
17552
|
+
return;
|
|
17553
|
+
}
|
|
17554
|
+
if (last.size !== newMountain.size) {
|
|
17555
|
+
this.mountains.push(last);
|
|
17556
|
+
this.mountains.push(newMountain);
|
|
17557
|
+
return;
|
|
17558
|
+
}
|
|
17559
|
+
newMountain = last.mergeWith(this.hasher, newMountain);
|
|
17560
|
+
}
|
|
17561
|
+
}
|
|
17562
|
+
/**
|
|
17563
|
+
* Root of the entire structure.
|
|
17564
|
+
*
|
|
17565
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3b20013b2001?v=0.6.2
|
|
17566
|
+
*/
|
|
17567
|
+
getSuperPeakHash() {
|
|
17568
|
+
if (this.mountains.length === 0) {
|
|
17569
|
+
return Bytes.zero(HASH_SIZE).asOpaque();
|
|
17570
|
+
}
|
|
17571
|
+
const revMountains = this.mountains.slice().reverse();
|
|
17572
|
+
const length = revMountains.length;
|
|
17573
|
+
let lastHash = revMountains[0].peak;
|
|
17574
|
+
for (let i = 1; i < length; i++) {
|
|
17575
|
+
const mountain = revMountains[i];
|
|
17576
|
+
lastHash = this.hasher.hashConcatPrepend(SUPER_PEAK_STRING, lastHash, mountain.peak);
|
|
17577
|
+
}
|
|
17578
|
+
return lastHash;
|
|
17579
|
+
}
|
|
17580
|
+
/** Get current peaks. */
|
|
17581
|
+
getPeaks() {
|
|
17582
|
+
const peaks = [];
|
|
17583
|
+
const mountains = this.mountains;
|
|
17584
|
+
// always 2**index
|
|
17585
|
+
let currentSize = 1;
|
|
17586
|
+
let currentIdx = mountains.length - 1;
|
|
17587
|
+
while (currentIdx >= 0) {
|
|
17588
|
+
const currentItem = mountains[currentIdx];
|
|
17589
|
+
if (currentItem.size >= currentSize && currentItem.size < 2 * currentSize) {
|
|
17590
|
+
peaks.push(currentItem.peak);
|
|
17591
|
+
currentIdx -= 1;
|
|
17592
|
+
}
|
|
17593
|
+
else {
|
|
17594
|
+
peaks.push(null);
|
|
17595
|
+
}
|
|
17596
|
+
// move to the next index.
|
|
17597
|
+
currentSize = currentSize << 1;
|
|
17598
|
+
}
|
|
17599
|
+
return { peaks };
|
|
17600
|
+
}
|
|
17601
|
+
}
|
|
17602
|
+
/** An internal helper structure to represent a merkle trie for MMR. */
|
|
17603
|
+
class Mountain {
|
|
17604
|
+
peak;
|
|
17605
|
+
size;
|
|
17606
|
+
constructor(peak, size) {
|
|
17607
|
+
this.peak = peak;
|
|
17608
|
+
this.size = size;
|
|
17609
|
+
}
|
|
17610
|
+
static fromPeak(peak, size) {
|
|
17611
|
+
return new Mountain(peak, size);
|
|
17612
|
+
}
|
|
17613
|
+
static fromChildren(hasher, children) {
|
|
17614
|
+
const [left, right] = children;
|
|
17615
|
+
const peak = hasher.hashConcat(left.peak, right.peak);
|
|
17616
|
+
const size = left.size + right.size;
|
|
17617
|
+
return new Mountain(peak, size);
|
|
17618
|
+
}
|
|
17619
|
+
/** Merge with another montain of the same size. */
|
|
17620
|
+
mergeWith(hasher, other) {
|
|
17621
|
+
return Mountain.fromChildren(hasher, [this, other]);
|
|
17622
|
+
}
|
|
17623
|
+
toString() {
|
|
17624
|
+
return `${this.size} @ ${this.peak}`;
|
|
17625
|
+
}
|
|
17626
|
+
}
|
|
17627
|
+
|
|
17628
|
+
var index$5 = /*#__PURE__*/Object.freeze({
|
|
17629
|
+
__proto__: null,
|
|
17630
|
+
MerkleMountainRange: MerkleMountainRange
|
|
17631
|
+
});
|
|
17632
|
+
|
|
17473
17633
|
class DebuggerAdapter {
|
|
17474
17634
|
pvm;
|
|
17475
17635
|
constructor(useSbrkGas = false) {
|
|
17476
17636
|
this.pvm = new Interpreter({ useSbrkGas });
|
|
17477
17637
|
}
|
|
17478
|
-
// TODO [MaSi]: a temporary solution that is needed to implement host calls in PVM debugger
|
|
17479
|
-
getInterpreter() {
|
|
17480
|
-
return this.pvm;
|
|
17481
|
-
}
|
|
17482
17638
|
resetGeneric(rawProgram, flatRegisters, initialGas) {
|
|
17483
17639
|
this.pvm.resetGeneric(rawProgram, 0, tryAsGas(initialGas), new Registers(flatRegisters));
|
|
17484
17640
|
}
|
|
@@ -17542,7 +17698,7 @@ class DebuggerAdapter {
|
|
|
17542
17698
|
}
|
|
17543
17699
|
}
|
|
17544
17700
|
|
|
17545
|
-
var index$
|
|
17701
|
+
var index$4 = /*#__PURE__*/Object.freeze({
|
|
17546
17702
|
__proto__: null,
|
|
17547
17703
|
AccumulationStateUpdate: AccumulationStateUpdate,
|
|
17548
17704
|
ArgsDecoder: ArgsDecoder,
|
|
@@ -17591,8 +17747,8 @@ var index$3 = /*#__PURE__*/Object.freeze({
|
|
|
17591
17747
|
asOpaqueType: asOpaqueType,
|
|
17592
17748
|
assertEmpty: assertEmpty,
|
|
17593
17749
|
assertNever: assertNever,
|
|
17594
|
-
block: index$
|
|
17595
|
-
bytes: index$
|
|
17750
|
+
block: index$m,
|
|
17751
|
+
bytes: index$t,
|
|
17596
17752
|
check: check,
|
|
17597
17753
|
clampU64ToU32: clampU64ToU32,
|
|
17598
17754
|
createResults: createResults,
|
|
@@ -17601,13 +17757,15 @@ var index$3 = /*#__PURE__*/Object.freeze({
|
|
|
17601
17757
|
extractCodeAndMetadata: extractCodeAndMetadata,
|
|
17602
17758
|
getServiceId: getServiceId,
|
|
17603
17759
|
getServiceIdOrCurrent: getServiceIdOrCurrent,
|
|
17604
|
-
hash: index$
|
|
17760
|
+
hash: index$p,
|
|
17761
|
+
hostCallInfoAccount: codecServiceAccountInfoWithThresholdBalance,
|
|
17605
17762
|
inspect: inspect,
|
|
17606
17763
|
instructionArgumentTypeMap: instructionArgumentTypeMap,
|
|
17607
|
-
interpreter: index$
|
|
17764
|
+
interpreter: index$8,
|
|
17608
17765
|
isBrowser: isBrowser,
|
|
17766
|
+
lazyInspect: lazyInspect,
|
|
17609
17767
|
measure: measure,
|
|
17610
|
-
numbers: index$
|
|
17768
|
+
numbers: index$s,
|
|
17611
17769
|
resultToString: resultToString,
|
|
17612
17770
|
seeThrough: seeThrough,
|
|
17613
17771
|
slotsToPreimageStatus: slotsToPreimageStatus,
|
|
@@ -17654,7 +17812,7 @@ function hashToNumberSequence(blake2b, entropy, length) {
|
|
|
17654
17812
|
return result;
|
|
17655
17813
|
}
|
|
17656
17814
|
|
|
17657
|
-
var index$
|
|
17815
|
+
var index$3 = /*#__PURE__*/Object.freeze({
|
|
17658
17816
|
__proto__: null,
|
|
17659
17817
|
fisherYatesShuffle: fisherYatesShuffle
|
|
17660
17818
|
});
|
|
@@ -18012,10 +18170,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18012
18170
|
chi_a: json.array("number"),
|
|
18013
18171
|
chi_v: "number",
|
|
18014
18172
|
chi_r: json.optional("number"),
|
|
18015
|
-
chi_g: json.nullable(json.
|
|
18016
|
-
service: "number",
|
|
18017
|
-
gasLimit: json.fromNumber((v) => tryAsServiceGas(v)),
|
|
18018
|
-
})),
|
|
18173
|
+
chi_g: json.nullable(json.map("number", json.fromNumber((v) => tryAsServiceGas(v)))),
|
|
18019
18174
|
},
|
|
18020
18175
|
pi: JsonStatisticsData.fromJson,
|
|
18021
18176
|
omega: json.array(json.array(notYetAccumulatedFromJson)),
|
|
@@ -18056,7 +18211,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18056
18211
|
assigners: chi.chi_a,
|
|
18057
18212
|
delegator: chi.chi_v,
|
|
18058
18213
|
registrar: chi.chi_r ?? tryAsServiceId(2 ** 32 - 1),
|
|
18059
|
-
autoAccumulateServices: chi.chi_g ??
|
|
18214
|
+
autoAccumulateServices: chi.chi_g ?? new Map(),
|
|
18060
18215
|
}),
|
|
18061
18216
|
statistics: JsonStatisticsData.toStatisticsData(spec, pi),
|
|
18062
18217
|
accumulationQueue: omega,
|
|
@@ -18066,7 +18221,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18066
18221
|
});
|
|
18067
18222
|
});
|
|
18068
18223
|
|
|
18069
|
-
var index$
|
|
18224
|
+
var index$2 = /*#__PURE__*/Object.freeze({
|
|
18070
18225
|
__proto__: null,
|
|
18071
18226
|
JsonCoreStatistics: JsonCoreStatistics,
|
|
18072
18227
|
JsonService: JsonService,
|
|
@@ -18084,6 +18239,65 @@ var index$1 = /*#__PURE__*/Object.freeze({
|
|
|
18084
18239
|
validatorDataFromJson: validatorDataFromJson
|
|
18085
18240
|
});
|
|
18086
18241
|
|
|
18242
|
+
class StateKeyVal {
|
|
18243
|
+
static fromJson = {
|
|
18244
|
+
key: fromJson.bytesN(TRUNCATED_HASH_SIZE),
|
|
18245
|
+
value: fromJson.bytesBlob,
|
|
18246
|
+
};
|
|
18247
|
+
key;
|
|
18248
|
+
value;
|
|
18249
|
+
}
|
|
18250
|
+
class TestState {
|
|
18251
|
+
static fromJson = {
|
|
18252
|
+
state_root: fromJson.bytes32(),
|
|
18253
|
+
keyvals: json.array(StateKeyVal.fromJson),
|
|
18254
|
+
};
|
|
18255
|
+
static Codec = codec$1.object({
|
|
18256
|
+
state_root: codec$1.bytes(HASH_SIZE).asOpaque(),
|
|
18257
|
+
keyvals: codec$1.sequenceVarLen(codec$1.object({
|
|
18258
|
+
key: codec$1.bytes(TRUNCATED_HASH_SIZE),
|
|
18259
|
+
value: codec$1.blob,
|
|
18260
|
+
})),
|
|
18261
|
+
});
|
|
18262
|
+
state_root;
|
|
18263
|
+
keyvals;
|
|
18264
|
+
}
|
|
18265
|
+
class StateTransitionGenesis {
|
|
18266
|
+
static fromJson = {
|
|
18267
|
+
header: headerFromJson,
|
|
18268
|
+
state: TestState.fromJson,
|
|
18269
|
+
};
|
|
18270
|
+
static Codec = codec$1.object({
|
|
18271
|
+
header: Header.Codec,
|
|
18272
|
+
state: TestState.Codec,
|
|
18273
|
+
});
|
|
18274
|
+
header;
|
|
18275
|
+
state;
|
|
18276
|
+
}
|
|
18277
|
+
class StateTransition {
|
|
18278
|
+
static fromJson = {
|
|
18279
|
+
pre_state: TestState.fromJson,
|
|
18280
|
+
post_state: TestState.fromJson,
|
|
18281
|
+
block: blockFromJson(tinyChainSpec),
|
|
18282
|
+
};
|
|
18283
|
+
static Codec = codec$1.object({
|
|
18284
|
+
pre_state: TestState.Codec,
|
|
18285
|
+
block: Block.Codec,
|
|
18286
|
+
post_state: TestState.Codec,
|
|
18287
|
+
});
|
|
18288
|
+
pre_state;
|
|
18289
|
+
post_state;
|
|
18290
|
+
block;
|
|
18291
|
+
}
|
|
18292
|
+
|
|
18293
|
+
var index$1 = /*#__PURE__*/Object.freeze({
|
|
18294
|
+
__proto__: null,
|
|
18295
|
+
StateKeyVal: StateKeyVal,
|
|
18296
|
+
StateTransition: StateTransition,
|
|
18297
|
+
StateTransitionGenesis: StateTransitionGenesis,
|
|
18298
|
+
TestState: TestState
|
|
18299
|
+
});
|
|
18300
|
+
|
|
18087
18301
|
/** Helper function to create most used hashes in the block */
|
|
18088
18302
|
class TransitionHasher {
|
|
18089
18303
|
context;
|
|
@@ -18132,15 +18346,6 @@ class TransitionHasher {
|
|
|
18132
18346
|
const encoded = BytesBlob.blobFromParts([et.raw, ep.raw, eg.raw, ea.raw, ed.raw]);
|
|
18133
18347
|
return new WithHashAndBytes(this.blake2b.hashBytes(encoded).asOpaque(), extrinsicView, encoded);
|
|
18134
18348
|
}
|
|
18135
|
-
/** Creates hash for given WorkPackage */
|
|
18136
|
-
workPackage(workPackage) {
|
|
18137
|
-
return this.encode(WorkPackage.Codec, workPackage);
|
|
18138
|
-
}
|
|
18139
|
-
encode(codec, data) {
|
|
18140
|
-
// TODO [ToDr] Use already allocated encoding destination and hash bytes from some arena.
|
|
18141
|
-
const encoded = Encoder.encodeObject(codec, data, this.context);
|
|
18142
|
-
return new WithHashAndBytes(this.blake2b.hashBytes(encoded).asOpaque(), data, encoded);
|
|
18143
|
-
}
|
|
18144
18349
|
}
|
|
18145
18350
|
|
|
18146
18351
|
var PreimagesErrorCode;
|
|
@@ -18149,7 +18354,6 @@ var PreimagesErrorCode;
|
|
|
18149
18354
|
PreimagesErrorCode["PreimagesNotSortedUnique"] = "preimages_not_sorted_unique";
|
|
18150
18355
|
PreimagesErrorCode["AccountNotFound"] = "account_not_found";
|
|
18151
18356
|
})(PreimagesErrorCode || (PreimagesErrorCode = {}));
|
|
18152
|
-
// TODO [SeKo] consider whether this module is the right place to remove expired preimages
|
|
18153
18357
|
class Preimages {
|
|
18154
18358
|
state;
|
|
18155
18359
|
blake2b;
|
|
@@ -18211,33 +18415,34 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
18211
18415
|
TransitionHasher: TransitionHasher
|
|
18212
18416
|
});
|
|
18213
18417
|
|
|
18214
|
-
exports.block = index$
|
|
18215
|
-
exports.block_json = index$
|
|
18216
|
-
exports.bytes = index$
|
|
18217
|
-
exports.codec = index$
|
|
18218
|
-
exports.collections = index$
|
|
18219
|
-
exports.config = index$
|
|
18220
|
-
exports.config_node = index$
|
|
18221
|
-
exports.crypto = index$
|
|
18222
|
-
exports.database = index$
|
|
18223
|
-
exports.erasure_coding = index$
|
|
18224
|
-
exports.fuzz_proto = index$
|
|
18225
|
-
exports.hash = index$
|
|
18226
|
-
exports.jam_host_calls = index$
|
|
18227
|
-
exports.json_parser = index$
|
|
18228
|
-
exports.logger = index$
|
|
18229
|
-
exports.mmr = index$
|
|
18230
|
-
exports.numbers = index$
|
|
18231
|
-
exports.ordering = index$
|
|
18232
|
-
exports.pvm = index$
|
|
18233
|
-
exports.pvm_host_calls = index$
|
|
18234
|
-
exports.pvm_interpreter = index$
|
|
18235
|
-
exports.pvm_program = index$
|
|
18236
|
-
exports.pvm_spi_decoder = index$
|
|
18237
|
-
exports.shuffling = index$
|
|
18238
|
-
exports.state = index$
|
|
18239
|
-
exports.state_json = index$
|
|
18240
|
-
exports.state_merkleization = index$
|
|
18418
|
+
exports.block = index$m;
|
|
18419
|
+
exports.block_json = index$k;
|
|
18420
|
+
exports.bytes = index$t;
|
|
18421
|
+
exports.codec = index$r;
|
|
18422
|
+
exports.collections = index$o;
|
|
18423
|
+
exports.config = index$n;
|
|
18424
|
+
exports.config_node = index$i;
|
|
18425
|
+
exports.crypto = index$q;
|
|
18426
|
+
exports.database = index$e;
|
|
18427
|
+
exports.erasure_coding = index$d;
|
|
18428
|
+
exports.fuzz_proto = index$b;
|
|
18429
|
+
exports.hash = index$p;
|
|
18430
|
+
exports.jam_host_calls = index$6;
|
|
18431
|
+
exports.json_parser = index$l;
|
|
18432
|
+
exports.logger = index$j;
|
|
18433
|
+
exports.mmr = index$5;
|
|
18434
|
+
exports.numbers = index$s;
|
|
18435
|
+
exports.ordering = index$u;
|
|
18436
|
+
exports.pvm = index$4;
|
|
18437
|
+
exports.pvm_host_calls = index$7;
|
|
18438
|
+
exports.pvm_interpreter = index$8;
|
|
18439
|
+
exports.pvm_program = index$9;
|
|
18440
|
+
exports.pvm_spi_decoder = index$a;
|
|
18441
|
+
exports.shuffling = index$3;
|
|
18442
|
+
exports.state = index$h;
|
|
18443
|
+
exports.state_json = index$2;
|
|
18444
|
+
exports.state_merkleization = index$f;
|
|
18445
|
+
exports.state_vectors = index$1;
|
|
18241
18446
|
exports.transition = index;
|
|
18242
|
-
exports.trie = index$
|
|
18243
|
-
exports.utils = index$
|
|
18447
|
+
exports.trie = index$g;
|
|
18448
|
+
exports.utils = index$v;
|