@agenticprimitives/agent-naming 1.0.0-alpha.46 → 1.0.0-alpha.48
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/AUDIT.md +52 -2
- package/CLAUDE.md +9 -17
- package/dist/abis.d.ts +461 -0
- package/dist/abis.d.ts.map +1 -1
- package/dist/abis.js +88 -0
- package/dist/abis.js.map +1 -1
- package/dist/claim.d.ts +32 -0
- package/dist/claim.d.ts.map +1 -1
- package/dist/claim.js +61 -3
- package/dist/claim.js.map +1 -1
- package/dist/constants.d.ts +24 -4
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +32 -4
- package/dist/constants.js.map +1 -1
- package/dist/custody.d.ts +95 -8
- package/dist/custody.d.ts.map +1 -1
- package/dist/custody.js +107 -13
- package/dist/custody.js.map +1 -1
- package/dist/dns.d.ts +102 -7
- package/dist/dns.d.ts.map +1 -1
- package/dist/dns.js +128 -28
- package/dist/dns.js.map +1 -1
- package/dist/grammar.d.ts +1 -1
- package/dist/grammar.js +2 -2
- package/dist/grammar.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/normalize.d.ts +1 -1
- package/dist/normalize.js +1 -1
- package/dist/price.d.ts.map +1 -1
- package/dist/price.js +7 -0
- package/dist/price.js.map +1 -1
- package/dist/vertical.d.ts +1 -1
- package/dist/vertical.d.ts.map +1 -1
- package/dist/vertical.js +4 -0
- package/dist/vertical.js.map +1 -1
- package/docs/api.md +3 -1
- package/package.json +4 -4
package/AUDIT.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# @agenticprimitives/agent-naming — package audit
|
|
2
2
|
|
|
3
3
|
**Status:** Phase 1 (SDK skeleton + spec + pure helpers).
|
|
4
|
-
**Last refreshed:** 2026-
|
|
4
|
+
**Last refreshed:** 2026-11-10 (spec 445 hardening: NAME-8)
|
|
5
|
+
**Prior refresh:** 2026-06-01 (R9 substrate coverage references + R11.1 fail-hard audit + R11.3 public-surface cleanup)
|
|
5
6
|
**Prior refresh:** 2026-05-23
|
|
6
7
|
**Owner:** [security-auditor](../../docs/agents/security-auditor.md) +
|
|
7
8
|
[technical-architect-auditor](../../docs/agents/technical-architect-auditor.md).
|
|
@@ -57,6 +58,53 @@ on-chain authority paths, and demo integration land in Phase 3+.
|
|
|
57
58
|
- ✅ `AgentNamingClient` throws `NS Phase 4 — wire to …` from every
|
|
58
59
|
write method.
|
|
59
60
|
|
|
61
|
+
## Spec 445 — pre-launch hardening (2026-11-10)
|
|
62
|
+
|
|
63
|
+
**Root retirement (2026-11-10, owner decision).** `.impact` is removed from `LEGACY_TLDS`; `.agent` is the only
|
|
64
|
+
untyped legacy root. No alias or migration path: `alice.impact` is `unknown_tld` in `parseAgentName` / `namehash` /
|
|
65
|
+
`normalizeAgentName` (so it cannot be hashed, resolved or claimed), has no host, and reads as no name
|
|
66
|
+
(`test/grammar.test.ts` "a retired root fails closed"). The on-chain root on deployed networks is not removed by this.
|
|
67
|
+
Residual: `hostForName` / `dnsHostReadings` / `agentNameForHandle` take the bare roots from the CALLER and do not
|
|
68
|
+
check them against the root lists — a deployment still configured with a retired parent builds a string that then
|
|
69
|
+
fails at `namehash`.
|
|
70
|
+
|
|
71
|
+
Source: `docs/audits/2026-11-10-pre-launch-audit/reviewer-reports/09-ts-naming-registry-coordination.md`.
|
|
72
|
+
|
|
73
|
+
**NAME-8 (Medium) — the DNS host projection is injective and its inverse single-valued.** Typed names host at
|
|
74
|
+
`<label>-<type>.<zone>`, persons and untyped roots at `<label>.<zone>`. The rule, enforced where a host is made,
|
|
75
|
+
read and claimed (`src/dns.ts` header):
|
|
76
|
+
|
|
77
|
+
1. a bare-root label ending in `-<type>` **has no host** — `hostForName` → `null`, `dnsHostForHandle` throws
|
|
78
|
+
`label_reads_as_type` — for LEGACY roots as well as persons (before: person-only, and only in `validateTypedClaim`);
|
|
79
|
+
2. a type suffix is one hyphen-free word (`registerVerticalAgentTypes` refuses a hyphen), so `<label>-<type>` splits
|
|
80
|
+
one way (`typeSuffixOfLabel`);
|
|
81
|
+
3. a reserved label has no host and reads back as no name;
|
|
82
|
+
4. the SDK claim helpers refuse both (`labelClaimViolation` in `buildSubregistryRegisterCall` — an omitted `root` is
|
|
83
|
+
judged a bare root — `buildRegisterSubnameCall` under a known root, `buildTypedClaimCalls`, `buildPricedClaimCalls`);
|
|
84
|
+
5. every inverse is a HINT: `confirmDnsHost` resolves EVERY reading of a host on chain and returns `ambiguous` when two
|
|
85
|
+
agents hold it — a router refuses, it never picks by precedence.
|
|
86
|
+
|
|
87
|
+
| Test (`test/dns.test.ts`, `test/claim.test.ts`) | Twin |
|
|
88
|
+
| --- | --- |
|
|
89
|
+
| "twin: legacy `foo-org` and typed `foo.org` do not share a host" | the audit PoC rows |
|
|
90
|
+
| "property: forward is injective for one bare root, and inverse∘forward is the identity" (+ two more properties) | > 5 000 generated names × every root |
|
|
91
|
+
| "twin: a host that reads two ways on chain is AMBIGUOUS, never a pick" | victim legacy name + attacker typed claim |
|
|
92
|
+
| "twin: a reserved label has no host…" / "…through every SDK claim helper is refused" | `www`, `api`, type words |
|
|
93
|
+
| "twin: a hyphenated vertical suffix is refused" | `x.house-guild` vs `x-house.guild` |
|
|
94
|
+
|
|
95
|
+
**Contract half — generation 4 / B2 (2026-11-10, spec 445).** `AgentNameRegistry.register` (so every subregistry
|
|
96
|
+
path) reverts `ReservedLabel` (`ws www mtls edge api well-known` = `CHAIN_SEEDED_RESERVED_LABELS`, plus each INITIALIZED
|
|
97
|
+
typed root's label) and, under a bare-host root, `LabelReadsAsTypedName`; the SDK stays the stricter pre-check (all type
|
|
98
|
+
words statically). Mirrored: REG-5 commit-reveal (`buildSubregistryCommitCall` → wait ≥10 s → reveal with the client's
|
|
99
|
+
secret; `subregistryCommitment` golden), REG-6 parent-only `buildRenewNameCall`, REG-4 epoch/REG-11/initializer ABI.
|
|
100
|
+
Tests: `test/generation4-b2.test.ts` (REG-5 ×6, NAME-8 on chain ×2, REG-6, REG-11). Routing still uses `confirmDnsHost`.
|
|
101
|
+
|
|
102
|
+
**Open — residual.** An estate serving several bare roots shares `<label>.<zone>` between them by configuration;
|
|
103
|
+
`confirmDnsHost` reports it unless one agent holds both. A grandfathered bare name ending in `-<type>` still answers
|
|
104
|
+
at its old host while no typed claim reads the same (`projectable: false`); once one does, the host answers for
|
|
105
|
+
neither. NAME-18 (ABI mirrors outside `check:abi-sync`) and NAME-20's chain-id comparison for `AgentNamingClient`
|
|
106
|
+
are not taken here (the gate script is root-owned; the client has ~20 read paths and needs its own change).
|
|
107
|
+
|
|
60
108
|
## Audit events this package emits (Phase 2+)
|
|
61
109
|
|
|
62
110
|
| Action | When | Severity in audit context |
|
|
@@ -85,11 +133,13 @@ client doesn't yet take an `auditSink`; Phase 2 will add the optional
|
|
|
85
133
|
| Date | Wave | What changed |
|
|
86
134
|
| --- | --- | --- |
|
|
87
135
|
| 2026-05-23 | NS Phase 1 | Initial audit. AN-1/2/3 open; security invariants verified by unit tests. |
|
|
136
|
+
| 2026-11-10 | spec 445 | NAME-8: injective DNS projection, `confirmDnsHost`, claim-helper refusals, hyphen-free vertical suffixes; `handleForDnsHost` exported. |
|
|
137
|
+
| 2026-11-10 | spec 445 / generation 4 / B2 | REG-4/5/6/11 + NAME-8-on-chain mirrors; `buildTypedClaimCalls` → `{ commit, claim }` (BREAKING: `chainId`, `secret`). |
|
|
88
138
|
|
|
89
139
|
## R9 substrate coverage (2026-06-01)
|
|
90
140
|
|
|
91
141
|
- Locked by R6.2 + R6.8 contract-side hardening:
|
|
92
|
-
- `AgentNameRegistry.initializeRoot` cannot be frontrun (
|
|
142
|
+
- `AgentNameRegistry.initializeRoot` cannot be frontrun (one initializer; gen 4: one-shot relinquishing `transferInitializer`→`acceptInitializer`) — H7-C.4 / CON-NAMING-001.
|
|
93
143
|
- `PermissionlessSubregistry.register` is `nonReentrant` — R6.2 / CON-SUBREGISTRY-003.
|
|
94
144
|
- Pause coverage: 7 mutating functions (register, backfillLabel, setOwner, setResolver, setSubregistry, renew, setPrimaryName) are `whenNotPaused` — R6.8.
|
|
95
145
|
- ADR-0012 / ADR-0013: NO `eth_getLogs` in product read paths; `reverseResolveString` is the canonical single-call.
|
package/CLAUDE.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# @agenticprimitives/agent-naming — Claude guide
|
|
2
2
|
|
|
3
3
|
## Naming facet, not identity
|
|
4
|
-
Names are a **facet registration** pointing AT the canonical Smart Agent ([ADR-0010](../../docs/architecture/decisions/0010-smart-agent-canonical-identifier.md)). Forced-unique labels: [spec 220 § 5](../../specs/220-agent-identity-bootstrap.md). `addr` + `nativeId`
|
|
4
|
+
Names are a **facet registration** pointing AT the canonical Smart Agent ([ADR-0010](../../docs/architecture/decisions/0010-smart-agent-canonical-identifier.md)). Forced-unique labels: [spec 220 § 5](../../specs/220-agent-identity-bootstrap.md). `addr` + `nativeId` SHOULD reference the same SA — no read path here checks it (audit NAME-20); a consumer that relies on it compares them.
|
|
5
5
|
|
|
6
6
|
## What this package owns
|
|
7
7
|
|
|
8
8
|
- The **typed TLD registry** (`AGENT_TLDS` = `me org team svc workspace treasury registry church circle`, alias `ws`,
|
|
9
|
-
legacy `impact
|
|
9
|
+
legacy `agent`; `.impact` retired ⇒ `unknown_tld`) — a suffix names the DERIVED agent type, never a root, a role or the
|
|
10
10
|
hierarchy ([ADR-0061](../../docs/architecture/decisions/0061-derived-agent-types-and-typed-name-suffixes.md),
|
|
11
11
|
[spec 346](../../specs/346-typed-agent-naming-and-registry.md)). `derivedTypeForTld` / `rootClassForTld`.
|
|
12
12
|
- The name **grammar** (`parseAgentName`): `x.t` canonical, `x.t@c.u` context-issued (path form
|
|
@@ -16,19 +16,17 @@ Names are a **facet registration** pointing AT the canonical Smart Agent ([ADR-0
|
|
|
16
16
|
- The **federated reference** (`federatedAgentName` → `FederatedAgentNameV1 { name, chain }`, `displayAgentName` —
|
|
17
17
|
bare only inside the home chain, qualified everywhere else; spec 346 §3.7, ap-federation spec 440 §C). The chain is
|
|
18
18
|
a record beside the name, never a name component: `alice.me@faithchain` is refused by the grammar.
|
|
19
|
-
- The **DNS/A2A projection** (`dnsHostForHandle`, zone caller-supplied — ADR-0021)
|
|
20
|
-
|
|
19
|
+
- The **DNS/A2A projection** (`dnsHostForHandle`/`hostForName`, zone caller-supplied — ADR-0021) + the two protocol paths. Injective (spec 445 / NAME-8):
|
|
20
|
+
a bare-root label ending in `-<type>` and a reserved label have NO host; host → name is a HINT — route via `confirmDnsHost` (`ambiguous` ⇒ refuse).
|
|
21
21
|
- **Claim-time validation** (`validateTypedClaim`, `findUniqueLabel`, `buildDeclareAgentTypeCalls`,
|
|
22
22
|
`buildTypedClaimCalls`): the suffix is a CLAIM, the SA-keyed on-chain `atl:agentType` record is
|
|
23
23
|
the authority; a mismatch fails closed (`resolveTyped` → `null`, `checkTypedName` → reason).
|
|
24
|
-
- `labelhash` + `namehash`
|
|
25
|
-
(`keccak256(parentNode || labelhash)`) for identifier nodes.
|
|
24
|
+
- `labelhash` + `namehash` for identifier nodes.
|
|
26
25
|
- Record schemas (`AgentNameRecords`) and predicate constants
|
|
27
26
|
(subpath `/records`).
|
|
28
27
|
- `AgentNamingClient` — read API (resolve / reverse-resolve / get
|
|
29
28
|
records) + write API skeleton (Phase 1 writes throw `NS Phase 2`).
|
|
30
|
-
-
|
|
31
|
-
into custody-policy ceremonies (subpath `/custody`).
|
|
29
|
+
- Call builders for name-owner rotation (subpath `/custody`).
|
|
32
30
|
|
|
33
31
|
## What this package does NOT own
|
|
34
32
|
|
|
@@ -49,18 +47,14 @@ resolver / invitation flows → `registry-resolution` (spec 346 §6.3).
|
|
|
49
47
|
- **"registry"** here = `AgentNameRegistry` contract. Distinct from
|
|
50
48
|
the factory deploy-registry in `agent-account`.
|
|
51
49
|
- **"primary name"** = reverse-record on a Smart Agent address.
|
|
52
|
-
|
|
53
|
-
**Does not use:** `Delegation`, `Caveat`, `Steward`, `Custodian`,
|
|
54
|
-
`Trustee`, `KMS`, `RiskTier`, `JtiStore`, MCP / A2A transport.
|
|
55
|
-
See `capability.manifest.json:forbiddenTerms`.
|
|
50
|
+
**Does not use:** see `capability.manifest.json:forbiddenTerms`.
|
|
56
51
|
|
|
57
52
|
## Read these first (in order)
|
|
58
53
|
|
|
59
54
|
1. `capability.manifest.json` — boundary.
|
|
60
55
|
2. `src/index.ts` — public API.
|
|
61
56
|
3. `../../specs/346-typed-agent-naming-and-registry.md` §2–§5 — the typed model (spec 215 = records/contracts prior art).
|
|
62
|
-
4. `src/namehash.ts
|
|
63
|
-
5. `src/client.ts` — the client skeleton.
|
|
57
|
+
4. `src/namehash.ts`, `src/normalize.ts`, `src/client.ts`.
|
|
64
58
|
|
|
65
59
|
## Stable public exports
|
|
66
60
|
|
|
@@ -110,9 +104,7 @@ resolver / invitation flows → `registry-resolution` (spec 346 §6.3).
|
|
|
110
104
|
in [`custody`](../account-custody). Compose via `agent-naming/custody`
|
|
111
105
|
call builders here without importing.
|
|
112
106
|
- "Add a passkey ceremony" — **STOP.** Belongs in [`connect-auth`](../connect-auth).
|
|
113
|
-
- "Reach for an MCP transport" — **STOP.** Out of scope.
|
|
114
|
-
- "Auto-resolve name via a system-wide hook in the worker" — **STOP.**
|
|
115
|
-
Demo-app integration only; the package itself is transport-agnostic.
|
|
107
|
+
- "Reach for an MCP transport" or "auto-resolve via a worker hook" — **STOP.** Out of scope; app integration.
|
|
116
108
|
- "Infer the agent type from the suffix / the DNS label" or "let the suffix
|
|
117
109
|
override `atl:agentType`" — **STOP.** ADR-0061 §5: the record is the
|
|
118
110
|
authority; `checkTypedName` fails closed on a mismatch.
|
package/dist/abis.d.ts
CHANGED
|
@@ -30,6 +30,263 @@ export declare const agentNameRegistryAbi: readonly [{
|
|
|
30
30
|
readonly type: "error";
|
|
31
31
|
readonly name: "ZeroOwner";
|
|
32
32
|
readonly inputs: readonly [];
|
|
33
|
+
}, {
|
|
34
|
+
readonly type: "error";
|
|
35
|
+
readonly name: "InvalidLabel";
|
|
36
|
+
readonly inputs: readonly [];
|
|
37
|
+
}, {
|
|
38
|
+
readonly type: "error";
|
|
39
|
+
readonly name: "ReservedLabel";
|
|
40
|
+
readonly inputs: readonly [];
|
|
41
|
+
}, {
|
|
42
|
+
readonly type: "error";
|
|
43
|
+
readonly name: "LabelReadsAsTypedName";
|
|
44
|
+
readonly inputs: readonly [];
|
|
45
|
+
}, {
|
|
46
|
+
readonly type: "error";
|
|
47
|
+
readonly name: "ExpiryNotExtended";
|
|
48
|
+
readonly inputs: readonly [];
|
|
49
|
+
}, {
|
|
50
|
+
readonly type: "error";
|
|
51
|
+
readonly name: "InitializerAlreadyHandedOver";
|
|
52
|
+
readonly inputs: readonly [];
|
|
53
|
+
}, {
|
|
54
|
+
readonly type: "error";
|
|
55
|
+
readonly name: "NotPendingInitializer";
|
|
56
|
+
readonly inputs: readonly [{
|
|
57
|
+
readonly name: "caller";
|
|
58
|
+
readonly type: "address";
|
|
59
|
+
}];
|
|
60
|
+
}, {
|
|
61
|
+
readonly type: "error";
|
|
62
|
+
readonly name: "NotInitializer";
|
|
63
|
+
readonly inputs: readonly [{
|
|
64
|
+
readonly name: "caller";
|
|
65
|
+
readonly type: "address";
|
|
66
|
+
}, {
|
|
67
|
+
readonly name: "initializer";
|
|
68
|
+
readonly type: "address";
|
|
69
|
+
}];
|
|
70
|
+
}, {
|
|
71
|
+
readonly type: "event";
|
|
72
|
+
readonly name: "RecordEpochBumped";
|
|
73
|
+
readonly inputs: readonly [{
|
|
74
|
+
readonly name: "node";
|
|
75
|
+
readonly type: "bytes32";
|
|
76
|
+
readonly indexed: true;
|
|
77
|
+
}, {
|
|
78
|
+
readonly name: "epoch";
|
|
79
|
+
readonly type: "uint64";
|
|
80
|
+
readonly indexed: false;
|
|
81
|
+
}];
|
|
82
|
+
}, {
|
|
83
|
+
readonly type: "event";
|
|
84
|
+
readonly name: "LabelBackfilled";
|
|
85
|
+
readonly inputs: readonly [{
|
|
86
|
+
readonly name: "node";
|
|
87
|
+
readonly type: "bytes32";
|
|
88
|
+
readonly indexed: true;
|
|
89
|
+
}, {
|
|
90
|
+
readonly name: "label";
|
|
91
|
+
readonly type: "string";
|
|
92
|
+
readonly indexed: false;
|
|
93
|
+
}];
|
|
94
|
+
}, {
|
|
95
|
+
readonly type: "event";
|
|
96
|
+
readonly name: "InitializerTransferStarted";
|
|
97
|
+
readonly inputs: readonly [{
|
|
98
|
+
readonly name: "from";
|
|
99
|
+
readonly type: "address";
|
|
100
|
+
readonly indexed: true;
|
|
101
|
+
}, {
|
|
102
|
+
readonly name: "to";
|
|
103
|
+
readonly type: "address";
|
|
104
|
+
readonly indexed: true;
|
|
105
|
+
}];
|
|
106
|
+
}, {
|
|
107
|
+
readonly type: "event";
|
|
108
|
+
readonly name: "InitializerTransferred";
|
|
109
|
+
readonly inputs: readonly [{
|
|
110
|
+
readonly name: "from";
|
|
111
|
+
readonly type: "address";
|
|
112
|
+
readonly indexed: true;
|
|
113
|
+
}, {
|
|
114
|
+
readonly name: "to";
|
|
115
|
+
readonly type: "address";
|
|
116
|
+
readonly indexed: true;
|
|
117
|
+
}];
|
|
118
|
+
}, {
|
|
119
|
+
readonly type: "event";
|
|
120
|
+
readonly name: "ReservedLabelSet";
|
|
121
|
+
readonly inputs: readonly [{
|
|
122
|
+
readonly name: "labelhash";
|
|
123
|
+
readonly type: "bytes32";
|
|
124
|
+
readonly indexed: true;
|
|
125
|
+
}, {
|
|
126
|
+
readonly name: "reserved";
|
|
127
|
+
readonly type: "bool";
|
|
128
|
+
readonly indexed: false;
|
|
129
|
+
}];
|
|
130
|
+
}, {
|
|
131
|
+
readonly type: "event";
|
|
132
|
+
readonly name: "RootBareHostSet";
|
|
133
|
+
readonly inputs: readonly [{
|
|
134
|
+
readonly name: "rootNode";
|
|
135
|
+
readonly type: "bytes32";
|
|
136
|
+
readonly indexed: true;
|
|
137
|
+
}, {
|
|
138
|
+
readonly name: "takesBareHost";
|
|
139
|
+
readonly type: "bool";
|
|
140
|
+
readonly indexed: false;
|
|
141
|
+
}];
|
|
142
|
+
}, {
|
|
143
|
+
readonly type: "function";
|
|
144
|
+
readonly name: "KIND_PERSON";
|
|
145
|
+
readonly stateMutability: "view";
|
|
146
|
+
readonly inputs: readonly [];
|
|
147
|
+
readonly outputs: readonly [{
|
|
148
|
+
readonly type: "bytes32";
|
|
149
|
+
}];
|
|
150
|
+
}, {
|
|
151
|
+
readonly type: "function";
|
|
152
|
+
readonly name: "initializer";
|
|
153
|
+
readonly stateMutability: "view";
|
|
154
|
+
readonly inputs: readonly [];
|
|
155
|
+
readonly outputs: readonly [{
|
|
156
|
+
readonly type: "address";
|
|
157
|
+
}];
|
|
158
|
+
}, {
|
|
159
|
+
readonly type: "function";
|
|
160
|
+
readonly name: "pendingInitializer";
|
|
161
|
+
readonly stateMutability: "view";
|
|
162
|
+
readonly inputs: readonly [];
|
|
163
|
+
readonly outputs: readonly [{
|
|
164
|
+
readonly type: "address";
|
|
165
|
+
}];
|
|
166
|
+
}, {
|
|
167
|
+
readonly type: "function";
|
|
168
|
+
readonly name: "initializerHandedOver";
|
|
169
|
+
readonly stateMutability: "view";
|
|
170
|
+
readonly inputs: readonly [];
|
|
171
|
+
readonly outputs: readonly [{
|
|
172
|
+
readonly type: "bool";
|
|
173
|
+
}];
|
|
174
|
+
}, {
|
|
175
|
+
readonly type: "function";
|
|
176
|
+
readonly name: "transferInitializer";
|
|
177
|
+
readonly stateMutability: "nonpayable";
|
|
178
|
+
readonly inputs: readonly [{
|
|
179
|
+
readonly name: "to";
|
|
180
|
+
readonly type: "address";
|
|
181
|
+
}];
|
|
182
|
+
readonly outputs: readonly [];
|
|
183
|
+
}, {
|
|
184
|
+
readonly type: "function";
|
|
185
|
+
readonly name: "acceptInitializer";
|
|
186
|
+
readonly stateMutability: "nonpayable";
|
|
187
|
+
readonly inputs: readonly [];
|
|
188
|
+
readonly outputs: readonly [];
|
|
189
|
+
}, {
|
|
190
|
+
readonly type: "function";
|
|
191
|
+
readonly name: "recordEpoch";
|
|
192
|
+
readonly stateMutability: "view";
|
|
193
|
+
readonly inputs: readonly [{
|
|
194
|
+
readonly name: "node";
|
|
195
|
+
readonly type: "bytes32";
|
|
196
|
+
}];
|
|
197
|
+
readonly outputs: readonly [{
|
|
198
|
+
readonly type: "uint64";
|
|
199
|
+
}];
|
|
200
|
+
}, {
|
|
201
|
+
readonly type: "function";
|
|
202
|
+
readonly name: "recordState";
|
|
203
|
+
readonly stateMutability: "view";
|
|
204
|
+
readonly inputs: readonly [{
|
|
205
|
+
readonly name: "node";
|
|
206
|
+
readonly type: "bytes32";
|
|
207
|
+
}];
|
|
208
|
+
readonly outputs: readonly [{
|
|
209
|
+
readonly name: "live";
|
|
210
|
+
readonly type: "bool";
|
|
211
|
+
}, {
|
|
212
|
+
readonly name: "epoch";
|
|
213
|
+
readonly type: "uint64";
|
|
214
|
+
}];
|
|
215
|
+
}, {
|
|
216
|
+
readonly type: "function";
|
|
217
|
+
readonly name: "isReservedLabel";
|
|
218
|
+
readonly stateMutability: "view";
|
|
219
|
+
readonly inputs: readonly [{
|
|
220
|
+
readonly name: "";
|
|
221
|
+
readonly type: "bytes32";
|
|
222
|
+
}];
|
|
223
|
+
readonly outputs: readonly [{
|
|
224
|
+
readonly type: "bool";
|
|
225
|
+
}];
|
|
226
|
+
}, {
|
|
227
|
+
readonly type: "function";
|
|
228
|
+
readonly name: "isTypedRootLabel";
|
|
229
|
+
readonly stateMutability: "view";
|
|
230
|
+
readonly inputs: readonly [{
|
|
231
|
+
readonly name: "";
|
|
232
|
+
readonly type: "bytes32";
|
|
233
|
+
}];
|
|
234
|
+
readonly outputs: readonly [{
|
|
235
|
+
readonly type: "bool";
|
|
236
|
+
}];
|
|
237
|
+
}, {
|
|
238
|
+
readonly type: "function";
|
|
239
|
+
readonly name: "rootTakesBareHost";
|
|
240
|
+
readonly stateMutability: "view";
|
|
241
|
+
readonly inputs: readonly [{
|
|
242
|
+
readonly name: "";
|
|
243
|
+
readonly type: "bytes32";
|
|
244
|
+
}];
|
|
245
|
+
readonly outputs: readonly [{
|
|
246
|
+
readonly type: "bool";
|
|
247
|
+
}];
|
|
248
|
+
}, {
|
|
249
|
+
readonly type: "function";
|
|
250
|
+
readonly name: "setReservedLabels";
|
|
251
|
+
readonly stateMutability: "nonpayable";
|
|
252
|
+
readonly inputs: readonly [{
|
|
253
|
+
readonly name: "labelhashes";
|
|
254
|
+
readonly type: "bytes32[]";
|
|
255
|
+
}, {
|
|
256
|
+
readonly name: "reserved";
|
|
257
|
+
readonly type: "bool";
|
|
258
|
+
}];
|
|
259
|
+
readonly outputs: readonly [];
|
|
260
|
+
}, {
|
|
261
|
+
readonly type: "function";
|
|
262
|
+
readonly name: "setRootBareHost";
|
|
263
|
+
readonly stateMutability: "nonpayable";
|
|
264
|
+
readonly inputs: readonly [{
|
|
265
|
+
readonly name: "rootNode";
|
|
266
|
+
readonly type: "bytes32";
|
|
267
|
+
}, {
|
|
268
|
+
readonly name: "takesBareHost";
|
|
269
|
+
readonly type: "bool";
|
|
270
|
+
}];
|
|
271
|
+
readonly outputs: readonly [];
|
|
272
|
+
}, {
|
|
273
|
+
readonly type: "function";
|
|
274
|
+
readonly name: "childLabelhashesPage";
|
|
275
|
+
readonly stateMutability: "view";
|
|
276
|
+
readonly inputs: readonly [{
|
|
277
|
+
readonly name: "parentNode";
|
|
278
|
+
readonly type: "bytes32";
|
|
279
|
+
}, {
|
|
280
|
+
readonly name: "offset";
|
|
281
|
+
readonly type: "uint256";
|
|
282
|
+
}, {
|
|
283
|
+
readonly name: "limit";
|
|
284
|
+
readonly type: "uint256";
|
|
285
|
+
}];
|
|
286
|
+
readonly outputs: readonly [{
|
|
287
|
+
readonly name: "page";
|
|
288
|
+
readonly type: "bytes32[]";
|
|
289
|
+
}];
|
|
33
290
|
}, {
|
|
34
291
|
readonly type: "event";
|
|
35
292
|
readonly name: "RootInitialized";
|
|
@@ -926,6 +1183,53 @@ export declare const permissionlessSubregistryAbi: readonly [{
|
|
|
926
1183
|
readonly type: "error";
|
|
927
1184
|
readonly name: "ZeroNewOwner";
|
|
928
1185
|
readonly inputs: readonly [];
|
|
1186
|
+
}, {
|
|
1187
|
+
readonly type: "error";
|
|
1188
|
+
readonly name: "ZeroCommitment";
|
|
1189
|
+
readonly inputs: readonly [];
|
|
1190
|
+
}, {
|
|
1191
|
+
readonly type: "error";
|
|
1192
|
+
readonly name: "CommitmentPending";
|
|
1193
|
+
readonly inputs: readonly [{
|
|
1194
|
+
readonly name: "commitment";
|
|
1195
|
+
readonly type: "bytes32";
|
|
1196
|
+
}];
|
|
1197
|
+
}, {
|
|
1198
|
+
readonly type: "error";
|
|
1199
|
+
readonly name: "CommitmentNotFound";
|
|
1200
|
+
readonly inputs: readonly [{
|
|
1201
|
+
readonly name: "commitment";
|
|
1202
|
+
readonly type: "bytes32";
|
|
1203
|
+
}];
|
|
1204
|
+
}, {
|
|
1205
|
+
readonly type: "error";
|
|
1206
|
+
readonly name: "CommitmentTooNew";
|
|
1207
|
+
readonly inputs: readonly [{
|
|
1208
|
+
readonly name: "commitment";
|
|
1209
|
+
readonly type: "bytes32";
|
|
1210
|
+
}, {
|
|
1211
|
+
readonly name: "matureAt";
|
|
1212
|
+
readonly type: "uint256";
|
|
1213
|
+
}];
|
|
1214
|
+
}, {
|
|
1215
|
+
readonly type: "error";
|
|
1216
|
+
readonly name: "CommitmentExpired";
|
|
1217
|
+
readonly inputs: readonly [{
|
|
1218
|
+
readonly name: "commitment";
|
|
1219
|
+
readonly type: "bytes32";
|
|
1220
|
+
}];
|
|
1221
|
+
}, {
|
|
1222
|
+
readonly type: "event";
|
|
1223
|
+
readonly name: "Committed";
|
|
1224
|
+
readonly inputs: readonly [{
|
|
1225
|
+
readonly name: "commitment";
|
|
1226
|
+
readonly type: "bytes32";
|
|
1227
|
+
readonly indexed: true;
|
|
1228
|
+
}, {
|
|
1229
|
+
readonly name: "by";
|
|
1230
|
+
readonly type: "address";
|
|
1231
|
+
readonly indexed: true;
|
|
1232
|
+
}];
|
|
929
1233
|
}, {
|
|
930
1234
|
readonly type: "event";
|
|
931
1235
|
readonly name: "NameClaimed";
|
|
@@ -978,6 +1282,59 @@ export declare const permissionlessSubregistryAbi: readonly [{
|
|
|
978
1282
|
readonly outputs: readonly [{
|
|
979
1283
|
readonly type: "uint256";
|
|
980
1284
|
}];
|
|
1285
|
+
}, {
|
|
1286
|
+
readonly type: "function";
|
|
1287
|
+
readonly name: "MIN_COMMIT_AGE";
|
|
1288
|
+
readonly stateMutability: "view";
|
|
1289
|
+
readonly inputs: readonly [];
|
|
1290
|
+
readonly outputs: readonly [{
|
|
1291
|
+
readonly type: "uint256";
|
|
1292
|
+
}];
|
|
1293
|
+
}, {
|
|
1294
|
+
readonly type: "function";
|
|
1295
|
+
readonly name: "MAX_COMMIT_AGE";
|
|
1296
|
+
readonly stateMutability: "view";
|
|
1297
|
+
readonly inputs: readonly [];
|
|
1298
|
+
readonly outputs: readonly [{
|
|
1299
|
+
readonly type: "uint256";
|
|
1300
|
+
}];
|
|
1301
|
+
}, {
|
|
1302
|
+
readonly type: "function";
|
|
1303
|
+
readonly name: "commit";
|
|
1304
|
+
readonly stateMutability: "nonpayable";
|
|
1305
|
+
readonly inputs: readonly [{
|
|
1306
|
+
readonly name: "commitment";
|
|
1307
|
+
readonly type: "bytes32";
|
|
1308
|
+
}];
|
|
1309
|
+
readonly outputs: readonly [];
|
|
1310
|
+
}, {
|
|
1311
|
+
readonly type: "function";
|
|
1312
|
+
readonly name: "committedAt";
|
|
1313
|
+
readonly stateMutability: "view";
|
|
1314
|
+
readonly inputs: readonly [{
|
|
1315
|
+
readonly name: "";
|
|
1316
|
+
readonly type: "bytes32";
|
|
1317
|
+
}];
|
|
1318
|
+
readonly outputs: readonly [{
|
|
1319
|
+
readonly type: "uint256";
|
|
1320
|
+
}];
|
|
1321
|
+
}, {
|
|
1322
|
+
readonly type: "function";
|
|
1323
|
+
readonly name: "makeCommitment";
|
|
1324
|
+
readonly stateMutability: "view";
|
|
1325
|
+
readonly inputs: readonly [{
|
|
1326
|
+
readonly name: "label";
|
|
1327
|
+
readonly type: "string";
|
|
1328
|
+
}, {
|
|
1329
|
+
readonly name: "newOwner";
|
|
1330
|
+
readonly type: "address";
|
|
1331
|
+
}, {
|
|
1332
|
+
readonly name: "secret";
|
|
1333
|
+
readonly type: "bytes32";
|
|
1334
|
+
}];
|
|
1335
|
+
readonly outputs: readonly [{
|
|
1336
|
+
readonly type: "bytes32";
|
|
1337
|
+
}];
|
|
981
1338
|
}, {
|
|
982
1339
|
readonly type: "function";
|
|
983
1340
|
readonly name: "register";
|
|
@@ -988,6 +1345,9 @@ export declare const permissionlessSubregistryAbi: readonly [{
|
|
|
988
1345
|
}, {
|
|
989
1346
|
readonly name: "newOwner";
|
|
990
1347
|
readonly type: "address";
|
|
1348
|
+
}, {
|
|
1349
|
+
readonly name: "secret";
|
|
1350
|
+
readonly type: "bytes32";
|
|
991
1351
|
}];
|
|
992
1352
|
readonly outputs: readonly [{
|
|
993
1353
|
readonly name: "childNode";
|
|
@@ -1147,6 +1507,27 @@ export declare const agentNameUniversalResolverAbi: readonly [{
|
|
|
1147
1507
|
readonly type: "address[]";
|
|
1148
1508
|
readonly name: "owners";
|
|
1149
1509
|
}];
|
|
1510
|
+
}, {
|
|
1511
|
+
readonly type: "function";
|
|
1512
|
+
readonly name: "getChildrenPage";
|
|
1513
|
+
readonly stateMutability: "view";
|
|
1514
|
+
readonly inputs: readonly [{
|
|
1515
|
+
readonly name: "parentNode";
|
|
1516
|
+
readonly type: "bytes32";
|
|
1517
|
+
}, {
|
|
1518
|
+
readonly name: "offset";
|
|
1519
|
+
readonly type: "uint256";
|
|
1520
|
+
}, {
|
|
1521
|
+
readonly name: "limit";
|
|
1522
|
+
readonly type: "uint256";
|
|
1523
|
+
}];
|
|
1524
|
+
readonly outputs: readonly [{
|
|
1525
|
+
readonly type: "bytes32[]";
|
|
1526
|
+
readonly name: "childNodes";
|
|
1527
|
+
}, {
|
|
1528
|
+
readonly type: "address[]";
|
|
1529
|
+
readonly name: "owners";
|
|
1530
|
+
}];
|
|
1150
1531
|
}];
|
|
1151
1532
|
export declare const ontologyTermRegistryAbi: readonly [{
|
|
1152
1533
|
readonly type: "error";
|
|
@@ -1225,6 +1606,45 @@ export declare const ontologyTermRegistryAbi: readonly [{
|
|
|
1225
1606
|
readonly type: "address";
|
|
1226
1607
|
}];
|
|
1227
1608
|
readonly outputs: readonly [];
|
|
1609
|
+
}, {
|
|
1610
|
+
readonly type: "error";
|
|
1611
|
+
readonly name: "NotPendingGovernor";
|
|
1612
|
+
readonly inputs: readonly [];
|
|
1613
|
+
}, {
|
|
1614
|
+
readonly type: "event";
|
|
1615
|
+
readonly name: "GovernorProposed";
|
|
1616
|
+
readonly inputs: readonly [{
|
|
1617
|
+
readonly name: "governor";
|
|
1618
|
+
readonly type: "address";
|
|
1619
|
+
readonly indexed: true;
|
|
1620
|
+
}, {
|
|
1621
|
+
readonly name: "pendingGovernor";
|
|
1622
|
+
readonly type: "address";
|
|
1623
|
+
readonly indexed: true;
|
|
1624
|
+
}];
|
|
1625
|
+
}, {
|
|
1626
|
+
readonly type: "function";
|
|
1627
|
+
readonly name: "pendingGovernor";
|
|
1628
|
+
readonly stateMutability: "view";
|
|
1629
|
+
readonly inputs: readonly [];
|
|
1630
|
+
readonly outputs: readonly [{
|
|
1631
|
+
readonly type: "address";
|
|
1632
|
+
}];
|
|
1633
|
+
}, {
|
|
1634
|
+
readonly type: "function";
|
|
1635
|
+
readonly name: "proposeGovernor";
|
|
1636
|
+
readonly stateMutability: "nonpayable";
|
|
1637
|
+
readonly inputs: readonly [{
|
|
1638
|
+
readonly name: "newGovernor";
|
|
1639
|
+
readonly type: "address";
|
|
1640
|
+
}];
|
|
1641
|
+
readonly outputs: readonly [];
|
|
1642
|
+
}, {
|
|
1643
|
+
readonly type: "function";
|
|
1644
|
+
readonly name: "acceptGovernor";
|
|
1645
|
+
readonly stateMutability: "nonpayable";
|
|
1646
|
+
readonly inputs: readonly [];
|
|
1647
|
+
readonly outputs: readonly [];
|
|
1228
1648
|
}, {
|
|
1229
1649
|
readonly type: "function";
|
|
1230
1650
|
readonly name: "registerTerm";
|
|
@@ -1960,6 +2380,47 @@ export declare const pricedSubregistryAbi: readonly [{
|
|
|
1960
2380
|
}];
|
|
1961
2381
|
readonly outputs: readonly [];
|
|
1962
2382
|
readonly stateMutability: "nonpayable";
|
|
2383
|
+
}, {
|
|
2384
|
+
readonly type: "function";
|
|
2385
|
+
readonly name: "pendingGovernor";
|
|
2386
|
+
readonly inputs: readonly [];
|
|
2387
|
+
readonly outputs: readonly [{
|
|
2388
|
+
readonly name: "";
|
|
2389
|
+
readonly type: "address";
|
|
2390
|
+
}];
|
|
2391
|
+
readonly stateMutability: "view";
|
|
2392
|
+
}, {
|
|
2393
|
+
readonly type: "function";
|
|
2394
|
+
readonly name: "proposeGovernor";
|
|
2395
|
+
readonly inputs: readonly [{
|
|
2396
|
+
readonly name: "newGovernor";
|
|
2397
|
+
readonly type: "address";
|
|
2398
|
+
}];
|
|
2399
|
+
readonly outputs: readonly [];
|
|
2400
|
+
readonly stateMutability: "nonpayable";
|
|
2401
|
+
}, {
|
|
2402
|
+
readonly type: "function";
|
|
2403
|
+
readonly name: "acceptGovernor";
|
|
2404
|
+
readonly inputs: readonly [];
|
|
2405
|
+
readonly outputs: readonly [];
|
|
2406
|
+
readonly stateMutability: "nonpayable";
|
|
2407
|
+
}, {
|
|
2408
|
+
readonly type: "event";
|
|
2409
|
+
readonly name: "GovernorProposed";
|
|
2410
|
+
readonly inputs: readonly [{
|
|
2411
|
+
readonly name: "governor";
|
|
2412
|
+
readonly type: "address";
|
|
2413
|
+
readonly indexed: true;
|
|
2414
|
+
}, {
|
|
2415
|
+
readonly name: "pendingGovernor";
|
|
2416
|
+
readonly type: "address";
|
|
2417
|
+
readonly indexed: true;
|
|
2418
|
+
}];
|
|
2419
|
+
readonly anonymous: false;
|
|
2420
|
+
}, {
|
|
2421
|
+
readonly type: "error";
|
|
2422
|
+
readonly name: "NotPendingGovernor";
|
|
2423
|
+
readonly inputs: readonly [];
|
|
1963
2424
|
}, {
|
|
1964
2425
|
readonly type: "function";
|
|
1965
2426
|
readonly name: "usedNonce";
|
package/dist/abis.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abis.d.ts","sourceRoot":"","sources":["../src/abis.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"abis.d.ts","sourceRoot":"","sources":["../src/abis.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoLvB,CAAC;AAIX,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoFhC,CAAC;AAMX,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgE/B,CAAC;AAEX,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgChC,CAAC;AAIX,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmF1B,CAAC;AAIX,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8DnB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkC9B,CAAC;AAIX,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4DvB,CAAC"}
|