@typeberry/lib 0.2.0-5746fdc → 0.2.0-663eeb1
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 +659 -453
- package/index.d.ts +1342 -1120
- package/index.js +631 -426
- 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
|
});
|
|
@@ -766,12 +769,13 @@ class BytesBlob {
|
|
|
766
769
|
}
|
|
767
770
|
/** Display a hex-encoded version of this byte blob, but truncated if it's large. */
|
|
768
771
|
toStringTruncated() {
|
|
772
|
+
const bytes = `${this.raw.length} ${this.raw.length === 1 ? "byte" : "bytes"}`;
|
|
769
773
|
if (this.raw.length > 32) {
|
|
770
774
|
const start = bytesToHexString(this.raw.subarray(0, 16));
|
|
771
775
|
const end = bytesToHexString(this.raw.subarray(this.raw.length - 16));
|
|
772
|
-
return `${start}...${end.substring(2)} (${
|
|
776
|
+
return `${start}...${end.substring(2)} (${bytes})`;
|
|
773
777
|
}
|
|
774
|
-
return this.toString()
|
|
778
|
+
return `${this.toString()} (${bytes})`;
|
|
775
779
|
}
|
|
776
780
|
toJSON() {
|
|
777
781
|
return this.toString();
|
|
@@ -987,7 +991,7 @@ function u8ArraySameLengthEqual(self, other) {
|
|
|
987
991
|
}
|
|
988
992
|
const bytesBlobComparator = (a, b) => a.compare(b);
|
|
989
993
|
|
|
990
|
-
var index$
|
|
994
|
+
var index$t = /*#__PURE__*/Object.freeze({
|
|
991
995
|
__proto__: null,
|
|
992
996
|
BitVec: BitVec,
|
|
993
997
|
Bytes: Bytes,
|
|
@@ -1089,7 +1093,7 @@ const minU64 = (a, ...values) => values.reduce((min, value) => (value > min ? mi
|
|
|
1089
1093
|
/** Get the biggest value between U64 a and values given as input parameters. */
|
|
1090
1094
|
const maxU64 = (a, ...values) => values.reduce((max, value) => (value < max ? max : value), a);
|
|
1091
1095
|
|
|
1092
|
-
var index$
|
|
1096
|
+
var index$s = /*#__PURE__*/Object.freeze({
|
|
1093
1097
|
__proto__: null,
|
|
1094
1098
|
isU16: isU16,
|
|
1095
1099
|
isU32: isU32,
|
|
@@ -2528,7 +2532,7 @@ function sequenceViewFixLen(type, { fixedLength }) {
|
|
|
2528
2532
|
}, skipper);
|
|
2529
2533
|
}
|
|
2530
2534
|
|
|
2531
|
-
var index$
|
|
2535
|
+
var index$r = /*#__PURE__*/Object.freeze({
|
|
2532
2536
|
__proto__: null,
|
|
2533
2537
|
Decoder: Decoder,
|
|
2534
2538
|
Descriptor: Descriptor,
|
|
@@ -3729,7 +3733,7 @@ var keyDerivation = /*#__PURE__*/Object.freeze({
|
|
|
3729
3733
|
trivialSeed: trivialSeed
|
|
3730
3734
|
});
|
|
3731
3735
|
|
|
3732
|
-
var index$
|
|
3736
|
+
var index$q = /*#__PURE__*/Object.freeze({
|
|
3733
3737
|
__proto__: null,
|
|
3734
3738
|
BANDERSNATCH_KEY_BYTES: BANDERSNATCH_KEY_BYTES,
|
|
3735
3739
|
BANDERSNATCH_PROOF_BYTES: BANDERSNATCH_PROOF_BYTES,
|
|
@@ -4367,7 +4371,7 @@ var keccak = /*#__PURE__*/Object.freeze({
|
|
|
4367
4371
|
// TODO [ToDr] (#213) this should most likely be moved to a separate
|
|
4368
4372
|
// package to avoid pulling in unnecessary deps.
|
|
4369
4373
|
|
|
4370
|
-
var index$
|
|
4374
|
+
var index$p = /*#__PURE__*/Object.freeze({
|
|
4371
4375
|
__proto__: null,
|
|
4372
4376
|
Blake2b: Blake2b,
|
|
4373
4377
|
HASH_SIZE: HASH_SIZE,
|
|
@@ -5004,7 +5008,7 @@ class TruncatedHashDictionary {
|
|
|
5004
5008
|
}
|
|
5005
5009
|
}
|
|
5006
5010
|
|
|
5007
|
-
var index$
|
|
5011
|
+
var index$o = /*#__PURE__*/Object.freeze({
|
|
5008
5012
|
__proto__: null,
|
|
5009
5013
|
ArrayView: ArrayView,
|
|
5010
5014
|
FixedSizeArray: FixedSizeArray,
|
|
@@ -5053,6 +5057,8 @@ const EC_SEGMENT_SIZE = 4104;
|
|
|
5053
5057
|
* Additional data that has to be passed to the codec to correctly parse incoming bytes.
|
|
5054
5058
|
*/
|
|
5055
5059
|
class ChainSpec extends WithDebug {
|
|
5060
|
+
/** Human-readable name of the chain spec. */
|
|
5061
|
+
name;
|
|
5056
5062
|
/** Number of validators. */
|
|
5057
5063
|
validatorsCount;
|
|
5058
5064
|
/** 1/3 of number of validators */
|
|
@@ -5095,6 +5101,7 @@ class ChainSpec extends WithDebug {
|
|
|
5095
5101
|
maxLookupAnchorAge;
|
|
5096
5102
|
constructor(data) {
|
|
5097
5103
|
super();
|
|
5104
|
+
this.name = data.name;
|
|
5098
5105
|
this.validatorsCount = data.validatorsCount;
|
|
5099
5106
|
this.thirdOfValidators = tryAsU16(Math.floor(data.validatorsCount / 3));
|
|
5100
5107
|
this.validatorsSuperMajority = tryAsU16(Math.floor(data.validatorsCount / 3) * 2 + 1);
|
|
@@ -5115,6 +5122,7 @@ class ChainSpec extends WithDebug {
|
|
|
5115
5122
|
}
|
|
5116
5123
|
/** Set of values for "tiny" chain as defined in JAM test vectors. */
|
|
5117
5124
|
const tinyChainSpec = new ChainSpec({
|
|
5125
|
+
name: "tiny",
|
|
5118
5126
|
validatorsCount: tryAsU16(6),
|
|
5119
5127
|
coresCount: tryAsU16(2),
|
|
5120
5128
|
epochLength: tryAsU32(12),
|
|
@@ -5136,6 +5144,7 @@ const tinyChainSpec = new ChainSpec({
|
|
|
5136
5144
|
* Please note that only validatorsCount and epochLength are "full", the rest is copied from "tiny".
|
|
5137
5145
|
*/
|
|
5138
5146
|
const fullChainSpec = new ChainSpec({
|
|
5147
|
+
name: "full",
|
|
5139
5148
|
validatorsCount: tryAsU16(1023),
|
|
5140
5149
|
coresCount: tryAsU16(341),
|
|
5141
5150
|
epochLength: tryAsU32(600),
|
|
@@ -5186,7 +5195,7 @@ var PvmBackend;
|
|
|
5186
5195
|
PvmBackend[PvmBackend["Ananas"] = 1] = "Ananas";
|
|
5187
5196
|
})(PvmBackend || (PvmBackend = {}));
|
|
5188
5197
|
|
|
5189
|
-
var index$
|
|
5198
|
+
var index$n = /*#__PURE__*/Object.freeze({
|
|
5190
5199
|
__proto__: null,
|
|
5191
5200
|
Bootnode: Bootnode,
|
|
5192
5201
|
ChainSpec: ChainSpec,
|
|
@@ -6693,7 +6702,7 @@ function reencodeAsView(codec, object, chainSpec) {
|
|
|
6693
6702
|
return Decoder.decodeObject(codec.View, encoded, chainSpec);
|
|
6694
6703
|
}
|
|
6695
6704
|
|
|
6696
|
-
var index$
|
|
6705
|
+
var index$m = /*#__PURE__*/Object.freeze({
|
|
6697
6706
|
__proto__: null,
|
|
6698
6707
|
Block: Block,
|
|
6699
6708
|
EpochMarker: EpochMarker,
|
|
@@ -6950,7 +6959,7 @@ var json;
|
|
|
6950
6959
|
json.object = object;
|
|
6951
6960
|
})(json || (json = {}));
|
|
6952
6961
|
|
|
6953
|
-
var index$
|
|
6962
|
+
var index$l = /*#__PURE__*/Object.freeze({
|
|
6954
6963
|
__proto__: null,
|
|
6955
6964
|
get json () { return json; },
|
|
6956
6965
|
parseFromJson: parseFromJson
|
|
@@ -7220,7 +7229,7 @@ const blockFromJson = (spec) => json.object({
|
|
|
7220
7229
|
extrinsic: getExtrinsicFromJson(spec),
|
|
7221
7230
|
}, ({ header, extrinsic }) => Block.create({ header, extrinsic }));
|
|
7222
7231
|
|
|
7223
|
-
var index$
|
|
7232
|
+
var index$k = /*#__PURE__*/Object.freeze({
|
|
7224
7233
|
__proto__: null,
|
|
7225
7234
|
blockFromJson: blockFromJson,
|
|
7226
7235
|
disputesExtrinsicFromJson: disputesExtrinsicFromJson,
|
|
@@ -7714,7 +7723,7 @@ class Logger {
|
|
|
7714
7723
|
}
|
|
7715
7724
|
}
|
|
7716
7725
|
|
|
7717
|
-
var index$
|
|
7726
|
+
var index$j = /*#__PURE__*/Object.freeze({
|
|
7718
7727
|
__proto__: null,
|
|
7719
7728
|
get Level () { return Level; },
|
|
7720
7729
|
Logger: Logger,
|
|
@@ -7744,8 +7753,8 @@ const DEV_CONFIG = "dev";
|
|
|
7744
7753
|
const DEFAULT_CONFIG = "default";
|
|
7745
7754
|
const NODE_DEFAULTS = {
|
|
7746
7755
|
name: isBrowser() ? "browser" : os.hostname(),
|
|
7747
|
-
config: DEFAULT_CONFIG,
|
|
7748
|
-
pvm: PvmBackend.
|
|
7756
|
+
config: [DEFAULT_CONFIG],
|
|
7757
|
+
pvm: PvmBackend.Ananas,
|
|
7749
7758
|
};
|
|
7750
7759
|
/** Chain spec chooser. */
|
|
7751
7760
|
var KnownChainSpec;
|
|
@@ -7797,27 +7806,139 @@ class NodeConfiguration {
|
|
|
7797
7806
|
this.authorship = authorship;
|
|
7798
7807
|
}
|
|
7799
7808
|
}
|
|
7800
|
-
function loadConfig(
|
|
7801
|
-
|
|
7802
|
-
|
|
7803
|
-
|
|
7804
|
-
|
|
7805
|
-
|
|
7806
|
-
|
|
7807
|
-
|
|
7809
|
+
function loadConfig(config, withRelPath) {
|
|
7810
|
+
logger$5.log `🔧 Loading config`;
|
|
7811
|
+
let mergedJson = {};
|
|
7812
|
+
for (const entry of config) {
|
|
7813
|
+
logger$5.log `🔧 Applying '${entry}'`;
|
|
7814
|
+
if (entry === DEV_CONFIG) {
|
|
7815
|
+
mergedJson = structuredClone(configs.dev); // clone to avoid mutating the original config. not doing a merge since dev and default should theoretically replace all properties.
|
|
7816
|
+
continue;
|
|
7817
|
+
}
|
|
7818
|
+
if (entry === DEFAULT_CONFIG) {
|
|
7819
|
+
mergedJson = structuredClone(configs.default);
|
|
7820
|
+
continue;
|
|
7821
|
+
}
|
|
7822
|
+
// try to parse as JSON
|
|
7823
|
+
try {
|
|
7824
|
+
const parsed = JSON.parse(entry);
|
|
7825
|
+
deepMerge(mergedJson, parsed);
|
|
7826
|
+
continue;
|
|
7827
|
+
}
|
|
7828
|
+
catch { }
|
|
7829
|
+
// if not, try to load as file
|
|
7830
|
+
if (entry.indexOf("=") === -1 && entry.endsWith(".json")) {
|
|
7831
|
+
try {
|
|
7832
|
+
const configFile = fs.readFileSync(withRelPath(entry), "utf8");
|
|
7833
|
+
const parsed = JSON.parse(configFile);
|
|
7834
|
+
deepMerge(mergedJson, parsed);
|
|
7835
|
+
}
|
|
7836
|
+
catch (e) {
|
|
7837
|
+
throw new Error(`Unable to load config from ${entry}: ${e}`);
|
|
7838
|
+
}
|
|
7839
|
+
}
|
|
7840
|
+
else {
|
|
7841
|
+
// finally try to process as a pseudo-jq query
|
|
7842
|
+
try {
|
|
7843
|
+
processQuery(mergedJson, entry, withRelPath);
|
|
7844
|
+
}
|
|
7845
|
+
catch (e) {
|
|
7846
|
+
throw new Error(`Error while processing '${entry}': ${e}`);
|
|
7847
|
+
}
|
|
7848
|
+
}
|
|
7808
7849
|
}
|
|
7809
7850
|
try {
|
|
7810
|
-
|
|
7811
|
-
|
|
7812
|
-
|
|
7813
|
-
return parseFromJson(parsed, NodeConfiguration.fromJson);
|
|
7851
|
+
const parsed = parseFromJson(mergedJson, NodeConfiguration.fromJson);
|
|
7852
|
+
logger$5.log `🔧 Config ready`;
|
|
7853
|
+
return parsed;
|
|
7814
7854
|
}
|
|
7815
7855
|
catch (e) {
|
|
7816
|
-
throw new Error(`Unable to
|
|
7856
|
+
throw new Error(`Unable to parse config: ${e}`);
|
|
7857
|
+
}
|
|
7858
|
+
}
|
|
7859
|
+
function deepMerge(target, source) {
|
|
7860
|
+
if (!isJsonObject(source)) {
|
|
7861
|
+
throw new Error(`Expected object, got ${source}`);
|
|
7862
|
+
}
|
|
7863
|
+
for (const key in source) {
|
|
7864
|
+
if (isJsonObject(source[key])) {
|
|
7865
|
+
if (!isJsonObject(target[key])) {
|
|
7866
|
+
target[key] = {};
|
|
7867
|
+
}
|
|
7868
|
+
deepMerge(target[key], source[key]);
|
|
7869
|
+
}
|
|
7870
|
+
else {
|
|
7871
|
+
target[key] = source[key];
|
|
7872
|
+
}
|
|
7817
7873
|
}
|
|
7818
7874
|
}
|
|
7875
|
+
/**
|
|
7876
|
+
* Caution: updates input directly.
|
|
7877
|
+
* Processes a pseudo-jq query. Syntax:
|
|
7878
|
+
* .path.to.value = { ... } - updates value with the specified object by replacement
|
|
7879
|
+
* .path.to.value += { ... } - updates value with the specified object by merging
|
|
7880
|
+
* .path.to.value = file.json - updates value with the contents of file.json
|
|
7881
|
+
* .path.to.value += file.json - merges the contents of file.json onto value
|
|
7882
|
+
*/
|
|
7883
|
+
function processQuery(input, query, withRelPath) {
|
|
7884
|
+
const queryParts = query.split("=");
|
|
7885
|
+
if (queryParts.length === 2) {
|
|
7886
|
+
let [path, value] = queryParts.map((part) => part.trim());
|
|
7887
|
+
let merge = false;
|
|
7888
|
+
// detect += syntax
|
|
7889
|
+
if (path.endsWith("+")) {
|
|
7890
|
+
merge = true;
|
|
7891
|
+
path = path.slice(0, -1);
|
|
7892
|
+
}
|
|
7893
|
+
let parsedValue;
|
|
7894
|
+
if (value.endsWith(".json")) {
|
|
7895
|
+
try {
|
|
7896
|
+
const configFile = fs.readFileSync(withRelPath(value), "utf8");
|
|
7897
|
+
const parsed = JSON.parse(configFile);
|
|
7898
|
+
parsedValue = parsed;
|
|
7899
|
+
}
|
|
7900
|
+
catch (e) {
|
|
7901
|
+
throw new Error(`Unable to load config from ${value}: ${e}`);
|
|
7902
|
+
}
|
|
7903
|
+
}
|
|
7904
|
+
else {
|
|
7905
|
+
try {
|
|
7906
|
+
parsedValue = JSON.parse(value);
|
|
7907
|
+
}
|
|
7908
|
+
catch (e) {
|
|
7909
|
+
throw new Error(`Unrecognized syntax '${value}': ${e}`);
|
|
7910
|
+
}
|
|
7911
|
+
}
|
|
7912
|
+
let pathParts = path.split(".");
|
|
7913
|
+
// allow leading dot in path
|
|
7914
|
+
if (pathParts[0] === "") {
|
|
7915
|
+
pathParts = pathParts.slice(1);
|
|
7916
|
+
}
|
|
7917
|
+
let target = input;
|
|
7918
|
+
for (let i = 0; i < pathParts.length; i++) {
|
|
7919
|
+
const part = pathParts[i];
|
|
7920
|
+
if (!isJsonObject(target[part])) {
|
|
7921
|
+
target[part] = {};
|
|
7922
|
+
}
|
|
7923
|
+
if (i === pathParts.length - 1) {
|
|
7924
|
+
if (merge) {
|
|
7925
|
+
deepMerge(target[part], parsedValue);
|
|
7926
|
+
}
|
|
7927
|
+
else {
|
|
7928
|
+
target[part] = parsedValue;
|
|
7929
|
+
}
|
|
7930
|
+
return;
|
|
7931
|
+
}
|
|
7932
|
+
target = target[part];
|
|
7933
|
+
}
|
|
7934
|
+
}
|
|
7935
|
+
throw new Error("Unrecognized syntax.");
|
|
7936
|
+
}
|
|
7937
|
+
function isJsonObject(value) {
|
|
7938
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
7939
|
+
}
|
|
7819
7940
|
|
|
7820
|
-
var index$
|
|
7941
|
+
var index$i = /*#__PURE__*/Object.freeze({
|
|
7821
7942
|
__proto__: null,
|
|
7822
7943
|
DEFAULT_CONFIG: DEFAULT_CONFIG,
|
|
7823
7944
|
DEV_CONFIG: DEV_CONFIG,
|
|
@@ -8061,7 +8182,7 @@ function accumulationOutputComparator(a, b) {
|
|
|
8061
8182
|
if (result > 0) {
|
|
8062
8183
|
return Ordering.Greater;
|
|
8063
8184
|
}
|
|
8064
|
-
return
|
|
8185
|
+
return a.output.compare(b.output);
|
|
8065
8186
|
}
|
|
8066
8187
|
|
|
8067
8188
|
/** `O`: Maximum number of items in the authorizations pool. */
|
|
@@ -8958,26 +9079,6 @@ class InMemoryStateView {
|
|
|
8958
9079
|
}
|
|
8959
9080
|
}
|
|
8960
9081
|
|
|
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
9082
|
/**
|
|
8982
9083
|
* https://graypaper.fluffylabs.dev/#/ab2cdbd/114402114402?v=0.7.2
|
|
8983
9084
|
*/
|
|
@@ -8995,7 +9096,9 @@ class PrivilegedServices {
|
|
|
8995
9096
|
registrar: Compatibility.isGreaterOrEqual(GpVersion.V0_7_1)
|
|
8996
9097
|
? codec$1.u32.asOpaque()
|
|
8997
9098
|
: ignoreValueWithDefault(tryAsServiceId(2 ** 32 - 1)),
|
|
8998
|
-
autoAccumulateServices:
|
|
9099
|
+
autoAccumulateServices: codec$1.dictionary(codec$1.u32.asOpaque(), codec$1.u64.asOpaque(), {
|
|
9100
|
+
sortKeys: (a, b) => a - b,
|
|
9101
|
+
}),
|
|
8999
9102
|
});
|
|
9000
9103
|
static create(a) {
|
|
9001
9104
|
return new PrivilegedServices(a.manager, a.delegator, a.registrar, a.assigners, a.autoAccumulateServices);
|
|
@@ -9230,6 +9333,15 @@ class InMemoryService extends WithDebug {
|
|
|
9230
9333
|
}),
|
|
9231
9334
|
};
|
|
9232
9335
|
}
|
|
9336
|
+
/** Return identical `InMemoryService` which does not share any references. */
|
|
9337
|
+
clone() {
|
|
9338
|
+
return new InMemoryService(this.serviceId, {
|
|
9339
|
+
info: ServiceAccountInfo.create(this.data.info),
|
|
9340
|
+
preimages: HashDictionary.fromEntries(Array.from(this.data.preimages.entries())),
|
|
9341
|
+
lookupHistory: HashDictionary.fromEntries(Array.from(this.data.lookupHistory.entries()).map(([k, v]) => [k, v.slice()])),
|
|
9342
|
+
storage: new Map(this.data.storage.entries()),
|
|
9343
|
+
});
|
|
9344
|
+
}
|
|
9233
9345
|
/**
|
|
9234
9346
|
* Create a new in-memory service from another state service
|
|
9235
9347
|
* by copying all given entries.
|
|
@@ -9600,7 +9712,7 @@ class InMemoryState extends WithDebug {
|
|
|
9600
9712
|
assigners: tryAsPerCore(new Array(spec.coresCount).fill(tryAsServiceId(0)), spec),
|
|
9601
9713
|
delegator: tryAsServiceId(0),
|
|
9602
9714
|
registrar: tryAsServiceId(MAX_VALUE),
|
|
9603
|
-
autoAccumulateServices:
|
|
9715
|
+
autoAccumulateServices: new Map(),
|
|
9604
9716
|
}),
|
|
9605
9717
|
accumulationOutputLog: SortedArray.fromArray(accumulationOutputComparator, []),
|
|
9606
9718
|
services: new Map(),
|
|
@@ -9619,11 +9731,10 @@ const serviceDataCodec = codec$1.dictionary(codec$1.u32.asOpaque(), serviceEntri
|
|
|
9619
9731
|
sortKeys: (a, b) => a - b,
|
|
9620
9732
|
});
|
|
9621
9733
|
|
|
9622
|
-
var index$
|
|
9734
|
+
var index$h = /*#__PURE__*/Object.freeze({
|
|
9623
9735
|
__proto__: null,
|
|
9624
9736
|
AUTHORIZATION_QUEUE_SIZE: AUTHORIZATION_QUEUE_SIZE,
|
|
9625
9737
|
AccumulationOutput: AccumulationOutput,
|
|
9626
|
-
AutoAccumulate: AutoAccumulate,
|
|
9627
9738
|
AvailabilityAssignment: AvailabilityAssignment,
|
|
9628
9739
|
BASE_SERVICE_BALANCE: BASE_SERVICE_BALANCE,
|
|
9629
9740
|
BlockState: BlockState,
|
|
@@ -10694,7 +10805,7 @@ const bitLookup = [
|
|
|
10694
10805
|
[0b00000000, 8],
|
|
10695
10806
|
];
|
|
10696
10807
|
|
|
10697
|
-
var index$
|
|
10808
|
+
var index$g = /*#__PURE__*/Object.freeze({
|
|
10698
10809
|
__proto__: null,
|
|
10699
10810
|
BranchNode: BranchNode,
|
|
10700
10811
|
InMemoryTrie: InMemoryTrie,
|
|
@@ -10744,7 +10855,6 @@ function* serializeRemovedServices(servicesRemoved) {
|
|
|
10744
10855
|
return;
|
|
10745
10856
|
}
|
|
10746
10857
|
for (const serviceId of servicesRemoved) {
|
|
10747
|
-
// TODO [ToDr] what about all data associated with a service?
|
|
10748
10858
|
const codec = serialize.serviceData(serviceId);
|
|
10749
10859
|
yield [StateEntryUpdateAction.Remove, codec.key, EMPTY_BLOB];
|
|
10750
10860
|
}
|
|
@@ -11062,7 +11172,7 @@ function loadState(spec, blake2b, entries) {
|
|
|
11062
11172
|
* hashmap of `key -> value` entries.
|
|
11063
11173
|
*/
|
|
11064
11174
|
|
|
11065
|
-
var index$
|
|
11175
|
+
var index$f = /*#__PURE__*/Object.freeze({
|
|
11066
11176
|
__proto__: null,
|
|
11067
11177
|
SerializedService: SerializedService,
|
|
11068
11178
|
SerializedState: SerializedState,
|
|
@@ -11307,7 +11417,7 @@ class InMemoryStates {
|
|
|
11307
11417
|
async close() { }
|
|
11308
11418
|
}
|
|
11309
11419
|
|
|
11310
|
-
var index$
|
|
11420
|
+
var index$e = /*#__PURE__*/Object.freeze({
|
|
11311
11421
|
__proto__: null,
|
|
11312
11422
|
InMemoryBlocks: InMemoryBlocks,
|
|
11313
11423
|
InMemorySerializedStates: InMemorySerializedStates,
|
|
@@ -11671,7 +11781,7 @@ const initEc = async () => {
|
|
|
11671
11781
|
await init.reedSolomon();
|
|
11672
11782
|
};
|
|
11673
11783
|
|
|
11674
|
-
var index$
|
|
11784
|
+
var index$d = /*#__PURE__*/Object.freeze({
|
|
11675
11785
|
__proto__: null,
|
|
11676
11786
|
N_CHUNKS_REDUNDANCY: N_CHUNKS_REDUNDANCY,
|
|
11677
11787
|
N_CHUNKS_REQUIRED: N_CHUNKS_REQUIRED,
|
|
@@ -12105,7 +12215,7 @@ class FuzzTarget {
|
|
|
12105
12215
|
}
|
|
12106
12216
|
}
|
|
12107
12217
|
|
|
12108
|
-
var index$
|
|
12218
|
+
var index$c = /*#__PURE__*/Object.freeze({
|
|
12109
12219
|
__proto__: null,
|
|
12110
12220
|
AncestryItem: AncestryItem,
|
|
12111
12221
|
ErrorMessage: ErrorMessage,
|
|
@@ -12123,9 +12233,9 @@ var index$b = /*#__PURE__*/Object.freeze({
|
|
|
12123
12233
|
stateRootCodec: stateRootCodec
|
|
12124
12234
|
});
|
|
12125
12235
|
|
|
12126
|
-
var index$
|
|
12236
|
+
var index$b = /*#__PURE__*/Object.freeze({
|
|
12127
12237
|
__proto__: null,
|
|
12128
|
-
v1: index$
|
|
12238
|
+
v1: index$c
|
|
12129
12239
|
});
|
|
12130
12240
|
|
|
12131
12241
|
/** Size of the transfer memo. */
|
|
@@ -12196,13 +12306,6 @@ var ForgetPreimageError;
|
|
|
12196
12306
|
})(ForgetPreimageError || (ForgetPreimageError = {}));
|
|
12197
12307
|
/**
|
|
12198
12308
|
* 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
12309
|
*/
|
|
12207
12310
|
var TransferError;
|
|
12208
12311
|
(function (TransferError) {
|
|
@@ -12412,7 +12515,7 @@ function deepCloneMapWithArray(map) {
|
|
|
12412
12515
|
class AccumulationStateUpdate {
|
|
12413
12516
|
services;
|
|
12414
12517
|
transfers;
|
|
12415
|
-
|
|
12518
|
+
yieldedRoot;
|
|
12416
12519
|
/** Updated authorization queues for cores. */
|
|
12417
12520
|
authorizationQueues = new Map();
|
|
12418
12521
|
/** New validators data. */
|
|
@@ -12425,10 +12528,10 @@ class AccumulationStateUpdate {
|
|
|
12425
12528
|
/** Pending transfers. */
|
|
12426
12529
|
transfers,
|
|
12427
12530
|
/** Yielded accumulation root. */
|
|
12428
|
-
|
|
12531
|
+
yieldedRoot = null) {
|
|
12429
12532
|
this.services = services;
|
|
12430
12533
|
this.transfers = transfers;
|
|
12431
|
-
this.
|
|
12534
|
+
this.yieldedRoot = yieldedRoot;
|
|
12432
12535
|
}
|
|
12433
12536
|
/** Create new empty state update. */
|
|
12434
12537
|
static empty() {
|
|
@@ -12458,7 +12561,7 @@ class AccumulationStateUpdate {
|
|
|
12458
12561
|
storage: deepCloneMapWithArray(from.services.storage),
|
|
12459
12562
|
};
|
|
12460
12563
|
const transfers = [...from.transfers];
|
|
12461
|
-
const update = new AccumulationStateUpdate(serviceUpdates, transfers,
|
|
12564
|
+
const update = new AccumulationStateUpdate(serviceUpdates, transfers, from.yieldedRoot);
|
|
12462
12565
|
// update entries
|
|
12463
12566
|
for (const [k, v] of from.authorizationQueues) {
|
|
12464
12567
|
update.authorizationQueues.set(k, v);
|
|
@@ -12480,6 +12583,12 @@ class AccumulationStateUpdate {
|
|
|
12480
12583
|
this.transfers = [];
|
|
12481
12584
|
return transfers;
|
|
12482
12585
|
}
|
|
12586
|
+
/** Retrieve and clear yielded root. */
|
|
12587
|
+
takeYieldedRoot() {
|
|
12588
|
+
const yieldedRoot = this.yieldedRoot;
|
|
12589
|
+
this.yieldedRoot = null;
|
|
12590
|
+
return yieldedRoot;
|
|
12591
|
+
}
|
|
12483
12592
|
}
|
|
12484
12593
|
class PartiallyUpdatedState {
|
|
12485
12594
|
state;
|
|
@@ -12557,6 +12666,16 @@ class PartiallyUpdatedState {
|
|
|
12557
12666
|
}
|
|
12558
12667
|
/** Get status of a preimage of current service taking into account any updates. */
|
|
12559
12668
|
getLookupHistory(currentTimeslot, serviceId, hash, length) {
|
|
12669
|
+
const updatedService = this.stateUpdate.services.updated.get(serviceId);
|
|
12670
|
+
/** Return lookup history item for newly created service */
|
|
12671
|
+
if (updatedService !== undefined && updatedService.action.kind === UpdateServiceKind.Create) {
|
|
12672
|
+
const lookupHistoryItem = updatedService.action.lookupHistory;
|
|
12673
|
+
if (lookupHistoryItem !== null &&
|
|
12674
|
+
hash.isEqualTo(lookupHistoryItem.hash) &&
|
|
12675
|
+
length === BigInt(lookupHistoryItem.length)) {
|
|
12676
|
+
return lookupHistoryItem;
|
|
12677
|
+
}
|
|
12678
|
+
}
|
|
12560
12679
|
const preimages = this.stateUpdate.services.preimages.get(serviceId) ?? [];
|
|
12561
12680
|
// TODO [ToDr] This is most likely wrong. We may have `provide` and `remove` within
|
|
12562
12681
|
// the same state update. We should however switch to proper "updated state"
|
|
@@ -12672,304 +12791,87 @@ function preimageLenAsU32(length) {
|
|
|
12672
12791
|
return length >= 2n ** 32n ? null : tryAsU32(Number(length));
|
|
12673
12792
|
}
|
|
12674
12793
|
|
|
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),
|
|
12794
|
+
const REGISTER_SIZE_SHIFT = 3; // x << 3 === x * 8
|
|
12795
|
+
const tryAsRegisterIndex = (index) => {
|
|
12796
|
+
check `${index >= 0 && index < NO_OF_REGISTERS$1} Incorrect register index: ${index}!`;
|
|
12797
|
+
return asOpaqueType(index);
|
|
12701
12798
|
};
|
|
12702
|
-
|
|
12703
|
-
|
|
12704
|
-
|
|
12705
|
-
|
|
12706
|
-
|
|
12707
|
-
|
|
12708
|
-
|
|
12709
|
-
|
|
12710
|
-
|
|
12799
|
+
class Registers {
|
|
12800
|
+
bytes;
|
|
12801
|
+
asSigned;
|
|
12802
|
+
asUnsigned;
|
|
12803
|
+
constructor(bytes = safeAllocUint8Array(NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT)) {
|
|
12804
|
+
this.bytes = bytes;
|
|
12805
|
+
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12806
|
+
this.asSigned = new BigInt64Array(bytes.buffer, bytes.byteOffset);
|
|
12807
|
+
this.asUnsigned = new BigUint64Array(bytes.buffer, bytes.byteOffset);
|
|
12711
12808
|
}
|
|
12712
|
-
|
|
12713
|
-
|
|
12714
|
-
|
|
12715
|
-
|
|
12716
|
-
|
|
12717
|
-
|
|
12809
|
+
getAllEncoded() {
|
|
12810
|
+
return this.bytes;
|
|
12811
|
+
}
|
|
12812
|
+
setAllEncoded(bytes) {
|
|
12813
|
+
check `${bytes.length === this.bytes.length} Incorrect size of input registers. Got: ${bytes.length}, need: ${this.bytes.length}`;
|
|
12814
|
+
this.bytes.set(bytes, 0);
|
|
12815
|
+
}
|
|
12816
|
+
static fromBytes(bytes) {
|
|
12817
|
+
check `${bytes.length === NO_OF_REGISTERS$1 << REGISTER_SIZE_SHIFT} Invalid size of registers array.`;
|
|
12818
|
+
return new Registers(bytes);
|
|
12819
|
+
}
|
|
12820
|
+
getBytesAsLittleEndian(index, len) {
|
|
12821
|
+
const offset = index << REGISTER_SIZE_SHIFT;
|
|
12822
|
+
return this.bytes.subarray(offset, offset + len);
|
|
12823
|
+
}
|
|
12824
|
+
copyFrom(regs) {
|
|
12825
|
+
const array = regs instanceof BigUint64Array ? regs : regs.asUnsigned;
|
|
12826
|
+
this.asUnsigned.set(array);
|
|
12827
|
+
}
|
|
12828
|
+
reset() {
|
|
12829
|
+
for (let i = 0; i < NO_OF_REGISTERS$1; i++) {
|
|
12830
|
+
this.asUnsigned[i] = 0n;
|
|
12831
|
+
}
|
|
12832
|
+
}
|
|
12833
|
+
getLowerU32(registerIndex) {
|
|
12834
|
+
return Number(this.asUnsigned[registerIndex] & 0xffffffffn);
|
|
12835
|
+
}
|
|
12836
|
+
getLowerI32(registerIndex) {
|
|
12837
|
+
return Number(this.getLowerU32(registerIndex)) >> 0;
|
|
12838
|
+
}
|
|
12839
|
+
setU32(registerIndex, value) {
|
|
12840
|
+
this.asUnsigned[registerIndex] = signExtend32To64(value);
|
|
12841
|
+
}
|
|
12842
|
+
setI32(registerIndex, value) {
|
|
12843
|
+
this.asSigned[registerIndex] = signExtend32To64(value);
|
|
12844
|
+
}
|
|
12845
|
+
getU64(registerIndex) {
|
|
12846
|
+
return this.asUnsigned[registerIndex];
|
|
12847
|
+
}
|
|
12848
|
+
getI64(registerIndex) {
|
|
12849
|
+
return this.asSigned[registerIndex];
|
|
12850
|
+
}
|
|
12851
|
+
setU64(registerIndex, value) {
|
|
12852
|
+
this.asUnsigned[registerIndex] = value;
|
|
12853
|
+
}
|
|
12854
|
+
setI64(registerIndex, value) {
|
|
12855
|
+
this.asSigned[registerIndex] = value;
|
|
12856
|
+
}
|
|
12857
|
+
getAllU64() {
|
|
12858
|
+
return this.asUnsigned;
|
|
12718
12859
|
}
|
|
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
12860
|
}
|
|
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;
|
|
12861
|
+
function signExtend32To64(value) {
|
|
12862
|
+
// Convert to BigInt if the value is a number
|
|
12863
|
+
const bigValue = typeof value === "number" ? BigInt(value) : value;
|
|
12864
|
+
// Ensure the value is treated as a 32-bit integer
|
|
12865
|
+
const mask32 = BigInt(0xffffffff);
|
|
12866
|
+
const signBit = BigInt(0x80000000);
|
|
12867
|
+
const maskedValue = bigValue & mask32;
|
|
12868
|
+
// Check the sign bit and extend the sign if necessary
|
|
12869
|
+
if ((maskedValue & signBit) !== BigInt(0)) {
|
|
12870
|
+
// If the sign bit is set, extend with ones
|
|
12871
|
+
return maskedValue | ~mask32;
|
|
12872
|
+
}
|
|
12873
|
+
// If the sign bit is not set, return as is
|
|
12874
|
+
return maskedValue;
|
|
12973
12875
|
}
|
|
12974
12876
|
|
|
12975
12877
|
/** Attempt to convert a number into `HostCallIndex`. */
|
|
@@ -13954,7 +13856,7 @@ function getRegisters(argsLength) {
|
|
|
13954
13856
|
return regs;
|
|
13955
13857
|
}
|
|
13956
13858
|
|
|
13957
|
-
var index$
|
|
13859
|
+
var index$a = /*#__PURE__*/Object.freeze({
|
|
13958
13860
|
__proto__: null,
|
|
13959
13861
|
MemorySegment: MemorySegment,
|
|
13960
13862
|
SpiMemory: SpiMemory,
|
|
@@ -14013,7 +13915,7 @@ function extractCodeAndMetadata(blobWithMetadata) {
|
|
|
14013
13915
|
return { metadata, code };
|
|
14014
13916
|
}
|
|
14015
13917
|
|
|
14016
|
-
var index$
|
|
13918
|
+
var index$9 = /*#__PURE__*/Object.freeze({
|
|
14017
13919
|
__proto__: null,
|
|
14018
13920
|
Program: Program,
|
|
14019
13921
|
extractCodeAndMetadata: extractCodeAndMetadata
|
|
@@ -16885,7 +16787,7 @@ class Interpreter {
|
|
|
16885
16787
|
}
|
|
16886
16788
|
}
|
|
16887
16789
|
|
|
16888
|
-
var index$
|
|
16790
|
+
var index$8 = /*#__PURE__*/Object.freeze({
|
|
16889
16791
|
__proto__: null,
|
|
16890
16792
|
Interpreter: Interpreter,
|
|
16891
16793
|
Memory: Memory,
|
|
@@ -16896,7 +16798,7 @@ var index$5 = /*#__PURE__*/Object.freeze({
|
|
|
16896
16798
|
tryAsSbrkIndex: tryAsSbrkIndex
|
|
16897
16799
|
});
|
|
16898
16800
|
|
|
16899
|
-
async function instantiate(module, imports = {}) {
|
|
16801
|
+
async function instantiate$1(module, imports = {}) {
|
|
16900
16802
|
const adaptedImports = {
|
|
16901
16803
|
env: Object.setPrototypeOf({
|
|
16902
16804
|
abort(message, fileName, lineNumber, columnNumber) {
|
|
@@ -17273,9 +17175,28 @@ async function instantiate(module, imports = {}) {
|
|
|
17273
17175
|
return adaptedExports;
|
|
17274
17176
|
}
|
|
17275
17177
|
|
|
17276
|
-
//
|
|
17277
|
-
|
|
17278
|
-
|
|
17178
|
+
// Auto-generated inline WASM module
|
|
17179
|
+
// Target: release-stub
|
|
17180
|
+
// Source: build/release-stub.wasm
|
|
17181
|
+
|
|
17182
|
+
|
|
17183
|
+
const wasmBase64 = "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IAckACAGIAM2AgAFIAMgB0EBdCIGIAMgBksbEA0iAyACIAf8CgAAIAMhAgsFIAgEQCACIANqJAAgBiADNgIACwsgAkEEayABNgIQIAJBEGoiAiAEakEAIAEgBGv8CwAgAiAFRwRAIAAgAjYCACAAIAI2AgQLIAAgATYCCAsLTQEBfyABIAAoAgxPBEAgAUEASARAQfDEAEGwxQBBggFBFhAAAAsgACABQQFqIgNBAkEBEBEgACADNgIMCyAAKAIEIAFBAnRqIAI2AgAL4xcBAX9BjKUBJABBwA5BAEEAEA4kAUHwD0EIQQAQDiQCQecBQQJBCUEAEBAiAEEAQZAQQQBBARAOEBIgAEEBQbAQQQBBARAOEBIgAEECIwEQEiAAQQMjARASIABBBCMBEBIgAEEFIwEQEiAAQQYjARASIABBByMBEBIgAEEIIwEQEiAAQQkjARASIABBCkHgEEEBQQAQDhASIABBCyMBEBIgAEEMIwEQEiAAQQ0jARASIABBDiMBEBIgAEEPIwEQEiAAQRAjARASIABBESMBEBIgAEESIwEQEiAAQRMjARASIABBFEGAEUEFQQAQDhASIABBFSMBEBIgAEEWIwEQEiAAQRcjARASIABBGCMBEBIgAEEZIwEQEiAAQRojARASIABBGyMBEBIgAEEcIwEQEiAAQR0jARASIABBHkGwEUECQQAQDhASIABBH0HgEUECQQAQDhASIABBIEGQEkECQQAQDhASIABBIUHAEkECQQAQDhASIABBIiMBEBIgAEEjIwEQEiAAQSQjARASIABBJSMBEBIgAEEmIwEQEiAAQScjARASIABBKEHwEkEDQQEQDhASIABBKSMBEBIgAEEqIwEQEiAAQSsjARASIABBLCMBEBIgAEEtIwEQEiAAQS4jARASIABBLyMBEBIgAEEwIwEQEiAAQTEjARASIABBMkGQE0EEQQEQDhASIABBM0HAE0EEQQAQDhASIABBNEHwE0EEQQAQDhASIABBNUGgFEEEQQAQDhASIABBNkHQFEEEQQAQDhASIABBN0GAFUEEQQAQDhASIABBOEGwFUEEQQAQDhASIABBOUHgFUEEQQAQDhASIABBOkGQFkEEQQAQDhASIABBO0HAFkEEQQAQDhASIABBPEHwFkEEQQAQDhASIABBPUGgF0EEQQAQDhASIABBPkHQF0EE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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/IAgoAgggAG0FQQALEMgBIQRBACEAA0AgACAIKAIISARAQgAhDSAGQQFrQf8BcSEBA0AgAUEATgRAQn8gDUIIhiIOIAgoAgQgACABamoxAAB8Ig8gDSAPViANIA5WchshDSABQQFrIQEMAQsLIAQgACAGQf8BcSIBbUEDdGogDTcDACAAIAFqIQAMAQsLIAIgBDYCAEEAIQFBBEEeEA8iAEEANgIA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WhtBA3RqKQMANwMIIAAgBUEMIAI1AggiBqcgBkINWhtBA3RqKQMANwMQDAYLQYCHASABELIBEK8BQfCfAUHQAkEHEAAACyAAIAI0AgA3AwAMBAsgACACNAIENwMIDAMLIAAgBUEMIAI1AgAiBqcgBkINWhtBA3RqKQMANwMAIAAgAjQCBDcDCAwBCyAAIAVBDCACNQIAIganIAZCDVobQQN0aikDADcDACAAIAVBDCACNQIEIganIAZCDVobQQN0aikDADcDCAsgACACNAIINwMQCyAAC7UDAQl/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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";
|
|
17184
|
+
let compiledModulePromise = null;
|
|
17185
|
+
|
|
17186
|
+
// Helper function to decode and instantiate the module
|
|
17187
|
+
async function instantiate(imports) {
|
|
17188
|
+
if (compiledModulePromise === null) {
|
|
17189
|
+
compiledModulePromise = WebAssembly.compile(getWasmBytes());
|
|
17190
|
+
}
|
|
17191
|
+
const module = await compiledModulePromise;
|
|
17192
|
+
return instantiate$1(module, imports);
|
|
17193
|
+
}
|
|
17194
|
+
|
|
17195
|
+
// Helper function to just get the bytes
|
|
17196
|
+
function getWasmBytes() {
|
|
17197
|
+
return Uint8Array.from(atob(wasmBase64), c => c.charCodeAt(0));
|
|
17198
|
+
}
|
|
17199
|
+
|
|
17279
17200
|
// Max u32 value
|
|
17280
17201
|
const INF_STEPS = 2 ** 32 - 1;
|
|
17281
17202
|
class AnanasRegisters {
|
|
@@ -17361,8 +17282,7 @@ class AnanasInterpreter {
|
|
|
17361
17282
|
this.gas = new AnanasGasCounter(instance);
|
|
17362
17283
|
}
|
|
17363
17284
|
static async new() {
|
|
17364
|
-
const
|
|
17365
|
-
const instance = await instantiate(wasmModule, {
|
|
17285
|
+
const instance = await instantiate({
|
|
17366
17286
|
env: {
|
|
17367
17287
|
abort: () => {
|
|
17368
17288
|
throw new Error("Abort called from WASM");
|
|
@@ -17458,7 +17378,7 @@ class InterpreterInstanceManager {
|
|
|
17458
17378
|
}
|
|
17459
17379
|
}
|
|
17460
17380
|
|
|
17461
|
-
var index$
|
|
17381
|
+
var index$7 = /*#__PURE__*/Object.freeze({
|
|
17462
17382
|
__proto__: null,
|
|
17463
17383
|
HostCallMemory: HostCallMemory,
|
|
17464
17384
|
HostCallRegisters: HostCallRegisters,
|
|
@@ -17470,15 +17390,252 @@ var index$4 = /*#__PURE__*/Object.freeze({
|
|
|
17470
17390
|
tryAsHostCallIndex: tryAsHostCallIndex
|
|
17471
17391
|
});
|
|
17472
17392
|
|
|
17393
|
+
/**
|
|
17394
|
+
* Host call result constants.
|
|
17395
|
+
*
|
|
17396
|
+
* https://graypaper.fluffylabs.dev/#/85129da/2c7c022c7c02?v=0.6.3
|
|
17397
|
+
*/
|
|
17398
|
+
const HostCallResult = {
|
|
17399
|
+
/** The return value indicating an item does not exist. */
|
|
17400
|
+
NONE: tryAsU64(0xffffffffffffffffn), // 2**64 - 1
|
|
17401
|
+
/** Name unknown. */
|
|
17402
|
+
WHAT: tryAsU64(0xfffffffffffffffen), // 2**64 - 2
|
|
17403
|
+
/** The inner PVM memory index provided for reading/writing is not accessible. */
|
|
17404
|
+
OOB: tryAsU64(0xfffffffffffffffdn), // 2**64 - 3
|
|
17405
|
+
/** Index unknown. */
|
|
17406
|
+
WHO: tryAsU64(0xfffffffffffffffcn), // 2**64 - 4
|
|
17407
|
+
/** Storage full or resource already allocated. */
|
|
17408
|
+
FULL: tryAsU64(0xfffffffffffffffbn), // 2**64 - 5
|
|
17409
|
+
/** Core index unknown. */
|
|
17410
|
+
CORE: tryAsU64(0xfffffffffffffffan), // 2**64 - 6
|
|
17411
|
+
/** Insufficient funds. */
|
|
17412
|
+
CASH: tryAsU64(0xfffffffffffffff9n), // 2**64 - 7
|
|
17413
|
+
/** Gas limit too low. */
|
|
17414
|
+
LOW: tryAsU64(0xfffffffffffffff8n), // 2**64 - 8
|
|
17415
|
+
/** The item is already solicited, cannot be forgotten or the operation is invalid due to privilege level. */
|
|
17416
|
+
HUH: tryAsU64(0xfffffffffffffff7n), // 2**64 - 9
|
|
17417
|
+
/** The return value indicating general success. */
|
|
17418
|
+
OK: tryAsU64(0n),
|
|
17419
|
+
};
|
|
17420
|
+
|
|
17421
|
+
const MAX_U32 = tryAsU32(2 ** 32 - 1);
|
|
17422
|
+
const MAX_U32_BIG_INT = tryAsU64(MAX_U32);
|
|
17423
|
+
const SERVICE_ID_BYTES = 4;
|
|
17424
|
+
const CURRENT_SERVICE_ID = tryAsServiceId(2 ** 32 - 1);
|
|
17425
|
+
function getServiceIdOrCurrent(regNumber, regs, currentServiceId) {
|
|
17426
|
+
const regValue = regs.get(regNumber);
|
|
17427
|
+
if (regValue === 2n ** 64n - 1n) {
|
|
17428
|
+
return currentServiceId;
|
|
17429
|
+
}
|
|
17430
|
+
return getServiceId(regValue);
|
|
17431
|
+
}
|
|
17432
|
+
function getServiceId(serviceId) {
|
|
17433
|
+
const { lower, upper } = u64IntoParts(serviceId);
|
|
17434
|
+
if (upper === 0) {
|
|
17435
|
+
return tryAsServiceId(lower);
|
|
17436
|
+
}
|
|
17437
|
+
return null;
|
|
17438
|
+
}
|
|
17439
|
+
function writeServiceIdAsLeBytes(serviceId, destination) {
|
|
17440
|
+
check `${destination.length >= SERVICE_ID_BYTES} Not enough space in the destination.`;
|
|
17441
|
+
destination.set(u32AsLeBytes(serviceId));
|
|
17442
|
+
}
|
|
17443
|
+
/** Clamp a U64 to the maximum value of a 32-bit unsigned integer. */
|
|
17444
|
+
function clampU64ToU32(value) {
|
|
17445
|
+
return value > MAX_U32_BIG_INT ? MAX_U32 : tryAsU32(Number(value));
|
|
17446
|
+
}
|
|
17447
|
+
function emptyRegistersBuffer() {
|
|
17448
|
+
return safeAllocUint8Array(NO_OF_REGISTERS$1 * REGISTER_BYTE_SIZE);
|
|
17449
|
+
}
|
|
17450
|
+
|
|
17451
|
+
Compatibility.isSuite(TestSuite.W3F_DAVXY) || Compatibility.isGreaterOrEqual(GpVersion.V0_7_2) ? 9 : 11;
|
|
17452
|
+
Compatibility.isSuite(TestSuite.W3F_DAVXY) || Compatibility.isGreaterOrEqual(GpVersion.V0_7_2) ? 10 : 12;
|
|
17453
|
+
/**
|
|
17454
|
+
* Service account details with threshold balance.
|
|
17455
|
+
*
|
|
17456
|
+
* Used exclusively by `info` host call.
|
|
17457
|
+
*
|
|
17458
|
+
* https://graypaper.fluffylabs.dev/#/ab2cdbd/33920033b500?v=0.7.2
|
|
17459
|
+
*/
|
|
17460
|
+
const codecServiceAccountInfoWithThresholdBalance = codec$1.object({
|
|
17461
|
+
codeHash: codec$1.bytes(HASH_SIZE),
|
|
17462
|
+
balance: codec$1.u64,
|
|
17463
|
+
thresholdBalance: codec$1.u64,
|
|
17464
|
+
accumulateMinGas: codec$1.u64.convert((i) => i, tryAsServiceGas),
|
|
17465
|
+
onTransferMinGas: codec$1.u64.convert((i) => i, tryAsServiceGas),
|
|
17466
|
+
storageUtilisationBytes: codec$1.u64,
|
|
17467
|
+
storageUtilisationCount: codec$1.u32,
|
|
17468
|
+
gratisStorage: codec$1.u64,
|
|
17469
|
+
created: codec$1.u32.convert((x) => x, tryAsTimeSlot),
|
|
17470
|
+
lastAccumulation: codec$1.u32.convert((x) => x, tryAsTimeSlot),
|
|
17471
|
+
parentService: codec$1.u32.convert((x) => x, tryAsServiceId),
|
|
17472
|
+
}, "ServiceAccountInfoWithThresholdBalance");
|
|
17473
|
+
|
|
17474
|
+
var index$6 = /*#__PURE__*/Object.freeze({
|
|
17475
|
+
__proto__: null,
|
|
17476
|
+
AccumulationStateUpdate: AccumulationStateUpdate,
|
|
17477
|
+
CURRENT_SERVICE_ID: CURRENT_SERVICE_ID,
|
|
17478
|
+
get EjectError () { return EjectError; },
|
|
17479
|
+
get ForgetPreimageError () { return ForgetPreimageError; },
|
|
17480
|
+
HostCallResult: HostCallResult,
|
|
17481
|
+
InsufficientFundsError: InsufficientFundsError,
|
|
17482
|
+
MachineInstance: MachineInstance,
|
|
17483
|
+
get MemoryOperation () { return MemoryOperation; },
|
|
17484
|
+
get NewServiceError () { return NewServiceError; },
|
|
17485
|
+
NoMachineError: NoMachineError,
|
|
17486
|
+
get PagesError () { return PagesError; },
|
|
17487
|
+
PartiallyUpdatedState: PartiallyUpdatedState,
|
|
17488
|
+
get PeekPokeError () { return PeekPokeError; },
|
|
17489
|
+
PendingTransfer: PendingTransfer,
|
|
17490
|
+
get PreimageStatusKind () { return PreimageStatusKind; },
|
|
17491
|
+
get ProvidePreimageError () { return ProvidePreimageError; },
|
|
17492
|
+
get RequestPreimageError () { return RequestPreimageError; },
|
|
17493
|
+
SERVICE_ID_BYTES: SERVICE_ID_BYTES,
|
|
17494
|
+
SegmentExportError: SegmentExportError,
|
|
17495
|
+
TRANSFER_MEMO_BYTES: TRANSFER_MEMO_BYTES,
|
|
17496
|
+
get TransferError () { return TransferError; },
|
|
17497
|
+
UnprivilegedError: UnprivilegedError,
|
|
17498
|
+
get UpdatePrivilegesError () { return UpdatePrivilegesError; },
|
|
17499
|
+
get ZeroVoidError () { return ZeroVoidError; },
|
|
17500
|
+
clampU64ToU32: clampU64ToU32,
|
|
17501
|
+
emptyRegistersBuffer: emptyRegistersBuffer,
|
|
17502
|
+
getServiceId: getServiceId,
|
|
17503
|
+
getServiceIdOrCurrent: getServiceIdOrCurrent,
|
|
17504
|
+
hostCallInfoAccount: codecServiceAccountInfoWithThresholdBalance,
|
|
17505
|
+
slotsToPreimageStatus: slotsToPreimageStatus,
|
|
17506
|
+
toMemoryOperation: toMemoryOperation,
|
|
17507
|
+
tryAsMachineId: tryAsMachineId,
|
|
17508
|
+
tryAsProgramCounter: tryAsProgramCounter,
|
|
17509
|
+
writeServiceIdAsLeBytes: writeServiceIdAsLeBytes
|
|
17510
|
+
});
|
|
17511
|
+
|
|
17512
|
+
const SUPER_PEAK_STRING = BytesBlob.blobFromString("peak");
|
|
17513
|
+
/**
|
|
17514
|
+
* Merkle Mountain Range.
|
|
17515
|
+
*
|
|
17516
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3aa0023aa002?v=0.6.2
|
|
17517
|
+
*/
|
|
17518
|
+
class MerkleMountainRange {
|
|
17519
|
+
hasher;
|
|
17520
|
+
mountains;
|
|
17521
|
+
/** Construct an empty MMR. */
|
|
17522
|
+
static empty(hasher) {
|
|
17523
|
+
return new MerkleMountainRange(hasher);
|
|
17524
|
+
}
|
|
17525
|
+
/** Construct a new MMR from existing peaks. */
|
|
17526
|
+
static fromPeaks(hasher, mmr) {
|
|
17527
|
+
return new MerkleMountainRange(hasher, mmr.peaks
|
|
17528
|
+
.reduce((acc, peak, index) => {
|
|
17529
|
+
if (peak !== null) {
|
|
17530
|
+
acc.push(Mountain.fromPeak(peak, 2 ** index));
|
|
17531
|
+
}
|
|
17532
|
+
return acc;
|
|
17533
|
+
}, [])
|
|
17534
|
+
.reverse());
|
|
17535
|
+
}
|
|
17536
|
+
constructor(hasher,
|
|
17537
|
+
/** Store non-empty merkle tries (mountains) ordered by descending size. */
|
|
17538
|
+
mountains = []) {
|
|
17539
|
+
this.hasher = hasher;
|
|
17540
|
+
this.mountains = mountains;
|
|
17541
|
+
}
|
|
17542
|
+
/**
|
|
17543
|
+
* Append a new hash to the MMR structure.
|
|
17544
|
+
*
|
|
17545
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3b11003b1100?v=0.6.2
|
|
17546
|
+
*/
|
|
17547
|
+
append(hash) {
|
|
17548
|
+
let newMountain = Mountain.fromPeak(hash, 1);
|
|
17549
|
+
for (;;) {
|
|
17550
|
+
const last = this.mountains.pop();
|
|
17551
|
+
if (last === undefined) {
|
|
17552
|
+
this.mountains.push(newMountain);
|
|
17553
|
+
return;
|
|
17554
|
+
}
|
|
17555
|
+
if (last.size !== newMountain.size) {
|
|
17556
|
+
this.mountains.push(last);
|
|
17557
|
+
this.mountains.push(newMountain);
|
|
17558
|
+
return;
|
|
17559
|
+
}
|
|
17560
|
+
newMountain = last.mergeWith(this.hasher, newMountain);
|
|
17561
|
+
}
|
|
17562
|
+
}
|
|
17563
|
+
/**
|
|
17564
|
+
* Root of the entire structure.
|
|
17565
|
+
*
|
|
17566
|
+
* https://graypaper.fluffylabs.dev/#/5f542d7/3b20013b2001?v=0.6.2
|
|
17567
|
+
*/
|
|
17568
|
+
getSuperPeakHash() {
|
|
17569
|
+
if (this.mountains.length === 0) {
|
|
17570
|
+
return Bytes.zero(HASH_SIZE).asOpaque();
|
|
17571
|
+
}
|
|
17572
|
+
const revMountains = this.mountains.slice().reverse();
|
|
17573
|
+
const length = revMountains.length;
|
|
17574
|
+
let lastHash = revMountains[0].peak;
|
|
17575
|
+
for (let i = 1; i < length; i++) {
|
|
17576
|
+
const mountain = revMountains[i];
|
|
17577
|
+
lastHash = this.hasher.hashConcatPrepend(SUPER_PEAK_STRING, lastHash, mountain.peak);
|
|
17578
|
+
}
|
|
17579
|
+
return lastHash;
|
|
17580
|
+
}
|
|
17581
|
+
/** Get current peaks. */
|
|
17582
|
+
getPeaks() {
|
|
17583
|
+
const peaks = [];
|
|
17584
|
+
const mountains = this.mountains;
|
|
17585
|
+
// always 2**index
|
|
17586
|
+
let currentSize = 1;
|
|
17587
|
+
let currentIdx = mountains.length - 1;
|
|
17588
|
+
while (currentIdx >= 0) {
|
|
17589
|
+
const currentItem = mountains[currentIdx];
|
|
17590
|
+
if (currentItem.size >= currentSize && currentItem.size < 2 * currentSize) {
|
|
17591
|
+
peaks.push(currentItem.peak);
|
|
17592
|
+
currentIdx -= 1;
|
|
17593
|
+
}
|
|
17594
|
+
else {
|
|
17595
|
+
peaks.push(null);
|
|
17596
|
+
}
|
|
17597
|
+
// move to the next index.
|
|
17598
|
+
currentSize = currentSize << 1;
|
|
17599
|
+
}
|
|
17600
|
+
return { peaks };
|
|
17601
|
+
}
|
|
17602
|
+
}
|
|
17603
|
+
/** An internal helper structure to represent a merkle trie for MMR. */
|
|
17604
|
+
class Mountain {
|
|
17605
|
+
peak;
|
|
17606
|
+
size;
|
|
17607
|
+
constructor(peak, size) {
|
|
17608
|
+
this.peak = peak;
|
|
17609
|
+
this.size = size;
|
|
17610
|
+
}
|
|
17611
|
+
static fromPeak(peak, size) {
|
|
17612
|
+
return new Mountain(peak, size);
|
|
17613
|
+
}
|
|
17614
|
+
static fromChildren(hasher, children) {
|
|
17615
|
+
const [left, right] = children;
|
|
17616
|
+
const peak = hasher.hashConcat(left.peak, right.peak);
|
|
17617
|
+
const size = left.size + right.size;
|
|
17618
|
+
return new Mountain(peak, size);
|
|
17619
|
+
}
|
|
17620
|
+
/** Merge with another montain of the same size. */
|
|
17621
|
+
mergeWith(hasher, other) {
|
|
17622
|
+
return Mountain.fromChildren(hasher, [this, other]);
|
|
17623
|
+
}
|
|
17624
|
+
toString() {
|
|
17625
|
+
return `${this.size} @ ${this.peak}`;
|
|
17626
|
+
}
|
|
17627
|
+
}
|
|
17628
|
+
|
|
17629
|
+
var index$5 = /*#__PURE__*/Object.freeze({
|
|
17630
|
+
__proto__: null,
|
|
17631
|
+
MerkleMountainRange: MerkleMountainRange
|
|
17632
|
+
});
|
|
17633
|
+
|
|
17473
17634
|
class DebuggerAdapter {
|
|
17474
17635
|
pvm;
|
|
17475
17636
|
constructor(useSbrkGas = false) {
|
|
17476
17637
|
this.pvm = new Interpreter({ useSbrkGas });
|
|
17477
17638
|
}
|
|
17478
|
-
// TODO [MaSi]: a temporary solution that is needed to implement host calls in PVM debugger
|
|
17479
|
-
getInterpreter() {
|
|
17480
|
-
return this.pvm;
|
|
17481
|
-
}
|
|
17482
17639
|
resetGeneric(rawProgram, flatRegisters, initialGas) {
|
|
17483
17640
|
this.pvm.resetGeneric(rawProgram, 0, tryAsGas(initialGas), new Registers(flatRegisters));
|
|
17484
17641
|
}
|
|
@@ -17542,7 +17699,7 @@ class DebuggerAdapter {
|
|
|
17542
17699
|
}
|
|
17543
17700
|
}
|
|
17544
17701
|
|
|
17545
|
-
var index$
|
|
17702
|
+
var index$4 = /*#__PURE__*/Object.freeze({
|
|
17546
17703
|
__proto__: null,
|
|
17547
17704
|
AccumulationStateUpdate: AccumulationStateUpdate,
|
|
17548
17705
|
ArgsDecoder: ArgsDecoder,
|
|
@@ -17591,8 +17748,8 @@ var index$3 = /*#__PURE__*/Object.freeze({
|
|
|
17591
17748
|
asOpaqueType: asOpaqueType,
|
|
17592
17749
|
assertEmpty: assertEmpty,
|
|
17593
17750
|
assertNever: assertNever,
|
|
17594
|
-
block: index$
|
|
17595
|
-
bytes: index$
|
|
17751
|
+
block: index$m,
|
|
17752
|
+
bytes: index$t,
|
|
17596
17753
|
check: check,
|
|
17597
17754
|
clampU64ToU32: clampU64ToU32,
|
|
17598
17755
|
createResults: createResults,
|
|
@@ -17601,13 +17758,15 @@ var index$3 = /*#__PURE__*/Object.freeze({
|
|
|
17601
17758
|
extractCodeAndMetadata: extractCodeAndMetadata,
|
|
17602
17759
|
getServiceId: getServiceId,
|
|
17603
17760
|
getServiceIdOrCurrent: getServiceIdOrCurrent,
|
|
17604
|
-
hash: index$
|
|
17761
|
+
hash: index$p,
|
|
17762
|
+
hostCallInfoAccount: codecServiceAccountInfoWithThresholdBalance,
|
|
17605
17763
|
inspect: inspect,
|
|
17606
17764
|
instructionArgumentTypeMap: instructionArgumentTypeMap,
|
|
17607
|
-
interpreter: index$
|
|
17765
|
+
interpreter: index$8,
|
|
17608
17766
|
isBrowser: isBrowser,
|
|
17767
|
+
lazyInspect: lazyInspect,
|
|
17609
17768
|
measure: measure,
|
|
17610
|
-
numbers: index$
|
|
17769
|
+
numbers: index$s,
|
|
17611
17770
|
resultToString: resultToString,
|
|
17612
17771
|
seeThrough: seeThrough,
|
|
17613
17772
|
slotsToPreimageStatus: slotsToPreimageStatus,
|
|
@@ -17654,7 +17813,7 @@ function hashToNumberSequence(blake2b, entropy, length) {
|
|
|
17654
17813
|
return result;
|
|
17655
17814
|
}
|
|
17656
17815
|
|
|
17657
|
-
var index$
|
|
17816
|
+
var index$3 = /*#__PURE__*/Object.freeze({
|
|
17658
17817
|
__proto__: null,
|
|
17659
17818
|
fisherYatesShuffle: fisherYatesShuffle
|
|
17660
17819
|
});
|
|
@@ -18012,10 +18171,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18012
18171
|
chi_a: json.array("number"),
|
|
18013
18172
|
chi_v: "number",
|
|
18014
18173
|
chi_r: json.optional("number"),
|
|
18015
|
-
chi_g: json.nullable(json.
|
|
18016
|
-
service: "number",
|
|
18017
|
-
gasLimit: json.fromNumber((v) => tryAsServiceGas(v)),
|
|
18018
|
-
})),
|
|
18174
|
+
chi_g: json.nullable(json.map("number", json.fromNumber((v) => tryAsServiceGas(v)))),
|
|
18019
18175
|
},
|
|
18020
18176
|
pi: JsonStatisticsData.fromJson,
|
|
18021
18177
|
omega: json.array(json.array(notYetAccumulatedFromJson)),
|
|
@@ -18056,7 +18212,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18056
18212
|
assigners: chi.chi_a,
|
|
18057
18213
|
delegator: chi.chi_v,
|
|
18058
18214
|
registrar: chi.chi_r ?? tryAsServiceId(2 ** 32 - 1),
|
|
18059
|
-
autoAccumulateServices: chi.chi_g ??
|
|
18215
|
+
autoAccumulateServices: chi.chi_g ?? new Map(),
|
|
18060
18216
|
}),
|
|
18061
18217
|
statistics: JsonStatisticsData.toStatisticsData(spec, pi),
|
|
18062
18218
|
accumulationQueue: omega,
|
|
@@ -18066,7 +18222,7 @@ const fullStateDumpFromJson = (spec) => json.object({
|
|
|
18066
18222
|
});
|
|
18067
18223
|
});
|
|
18068
18224
|
|
|
18069
|
-
var index$
|
|
18225
|
+
var index$2 = /*#__PURE__*/Object.freeze({
|
|
18070
18226
|
__proto__: null,
|
|
18071
18227
|
JsonCoreStatistics: JsonCoreStatistics,
|
|
18072
18228
|
JsonService: JsonService,
|
|
@@ -18084,6 +18240,65 @@ var index$1 = /*#__PURE__*/Object.freeze({
|
|
|
18084
18240
|
validatorDataFromJson: validatorDataFromJson
|
|
18085
18241
|
});
|
|
18086
18242
|
|
|
18243
|
+
class StateKeyVal {
|
|
18244
|
+
static fromJson = {
|
|
18245
|
+
key: fromJson.bytesN(TRUNCATED_HASH_SIZE),
|
|
18246
|
+
value: fromJson.bytesBlob,
|
|
18247
|
+
};
|
|
18248
|
+
key;
|
|
18249
|
+
value;
|
|
18250
|
+
}
|
|
18251
|
+
class TestState {
|
|
18252
|
+
static fromJson = {
|
|
18253
|
+
state_root: fromJson.bytes32(),
|
|
18254
|
+
keyvals: json.array(StateKeyVal.fromJson),
|
|
18255
|
+
};
|
|
18256
|
+
static Codec = codec$1.object({
|
|
18257
|
+
state_root: codec$1.bytes(HASH_SIZE).asOpaque(),
|
|
18258
|
+
keyvals: codec$1.sequenceVarLen(codec$1.object({
|
|
18259
|
+
key: codec$1.bytes(TRUNCATED_HASH_SIZE),
|
|
18260
|
+
value: codec$1.blob,
|
|
18261
|
+
})),
|
|
18262
|
+
});
|
|
18263
|
+
state_root;
|
|
18264
|
+
keyvals;
|
|
18265
|
+
}
|
|
18266
|
+
class StateTransitionGenesis {
|
|
18267
|
+
static fromJson = {
|
|
18268
|
+
header: headerFromJson,
|
|
18269
|
+
state: TestState.fromJson,
|
|
18270
|
+
};
|
|
18271
|
+
static Codec = codec$1.object({
|
|
18272
|
+
header: Header.Codec,
|
|
18273
|
+
state: TestState.Codec,
|
|
18274
|
+
});
|
|
18275
|
+
header;
|
|
18276
|
+
state;
|
|
18277
|
+
}
|
|
18278
|
+
class StateTransition {
|
|
18279
|
+
static fromJson = {
|
|
18280
|
+
pre_state: TestState.fromJson,
|
|
18281
|
+
post_state: TestState.fromJson,
|
|
18282
|
+
block: blockFromJson(tinyChainSpec),
|
|
18283
|
+
};
|
|
18284
|
+
static Codec = codec$1.object({
|
|
18285
|
+
pre_state: TestState.Codec,
|
|
18286
|
+
block: Block.Codec,
|
|
18287
|
+
post_state: TestState.Codec,
|
|
18288
|
+
});
|
|
18289
|
+
pre_state;
|
|
18290
|
+
post_state;
|
|
18291
|
+
block;
|
|
18292
|
+
}
|
|
18293
|
+
|
|
18294
|
+
var index$1 = /*#__PURE__*/Object.freeze({
|
|
18295
|
+
__proto__: null,
|
|
18296
|
+
StateKeyVal: StateKeyVal,
|
|
18297
|
+
StateTransition: StateTransition,
|
|
18298
|
+
StateTransitionGenesis: StateTransitionGenesis,
|
|
18299
|
+
TestState: TestState
|
|
18300
|
+
});
|
|
18301
|
+
|
|
18087
18302
|
/** Helper function to create most used hashes in the block */
|
|
18088
18303
|
class TransitionHasher {
|
|
18089
18304
|
context;
|
|
@@ -18132,15 +18347,6 @@ class TransitionHasher {
|
|
|
18132
18347
|
const encoded = BytesBlob.blobFromParts([et.raw, ep.raw, eg.raw, ea.raw, ed.raw]);
|
|
18133
18348
|
return new WithHashAndBytes(this.blake2b.hashBytes(encoded).asOpaque(), extrinsicView, encoded);
|
|
18134
18349
|
}
|
|
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
18350
|
}
|
|
18145
18351
|
|
|
18146
18352
|
var PreimagesErrorCode;
|
|
@@ -18149,7 +18355,6 @@ var PreimagesErrorCode;
|
|
|
18149
18355
|
PreimagesErrorCode["PreimagesNotSortedUnique"] = "preimages_not_sorted_unique";
|
|
18150
18356
|
PreimagesErrorCode["AccountNotFound"] = "account_not_found";
|
|
18151
18357
|
})(PreimagesErrorCode || (PreimagesErrorCode = {}));
|
|
18152
|
-
// TODO [SeKo] consider whether this module is the right place to remove expired preimages
|
|
18153
18358
|
class Preimages {
|
|
18154
18359
|
state;
|
|
18155
18360
|
blake2b;
|
|
@@ -18211,33 +18416,34 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
18211
18416
|
TransitionHasher: TransitionHasher
|
|
18212
18417
|
});
|
|
18213
18418
|
|
|
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$
|
|
18419
|
+
exports.block = index$m;
|
|
18420
|
+
exports.block_json = index$k;
|
|
18421
|
+
exports.bytes = index$t;
|
|
18422
|
+
exports.codec = index$r;
|
|
18423
|
+
exports.collections = index$o;
|
|
18424
|
+
exports.config = index$n;
|
|
18425
|
+
exports.config_node = index$i;
|
|
18426
|
+
exports.crypto = index$q;
|
|
18427
|
+
exports.database = index$e;
|
|
18428
|
+
exports.erasure_coding = index$d;
|
|
18429
|
+
exports.fuzz_proto = index$b;
|
|
18430
|
+
exports.hash = index$p;
|
|
18431
|
+
exports.jam_host_calls = index$6;
|
|
18432
|
+
exports.json_parser = index$l;
|
|
18433
|
+
exports.logger = index$j;
|
|
18434
|
+
exports.mmr = index$5;
|
|
18435
|
+
exports.numbers = index$s;
|
|
18436
|
+
exports.ordering = index$u;
|
|
18437
|
+
exports.pvm = index$4;
|
|
18438
|
+
exports.pvm_host_calls = index$7;
|
|
18439
|
+
exports.pvm_interpreter = index$8;
|
|
18440
|
+
exports.pvm_program = index$9;
|
|
18441
|
+
exports.pvm_spi_decoder = index$a;
|
|
18442
|
+
exports.shuffling = index$3;
|
|
18443
|
+
exports.state = index$h;
|
|
18444
|
+
exports.state_json = index$2;
|
|
18445
|
+
exports.state_merkleization = index$f;
|
|
18446
|
+
exports.state_vectors = index$1;
|
|
18241
18447
|
exports.transition = index;
|
|
18242
|
-
exports.trie = index$
|
|
18243
|
-
exports.utils = index$
|
|
18448
|
+
exports.trie = index$g;
|
|
18449
|
+
exports.utils = index$v;
|