@aifinpay/mcp 2.12.1 → 2.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -9
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -2
- package/dist/config.js.map +1 -1
- package/dist/directory.d.ts +55 -0
- package/dist/directory.d.ts.map +1 -0
- package/dist/directory.js +56 -0
- package/dist/directory.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/merchant-site.d.ts +9 -1
- package/dist/merchant-site.d.ts.map +1 -1
- package/dist/merchant-site.js +11 -4
- package/dist/merchant-site.js.map +1 -1
- package/dist/native-price.d.ts +1 -1
- package/dist/native-price.d.ts.map +1 -1
- package/dist/native-price.js +4 -0
- package/dist/native-price.js.map +1 -1
- package/dist/pay-chains.d.ts +4 -0
- package/dist/pay-chains.d.ts.map +1 -1
- package/dist/pay-chains.js.map +1 -1
- package/dist/tools/agent-claim-self.d.ts +14 -7
- package/dist/tools/agent-claim-self.d.ts.map +1 -1
- package/dist/tools/agent-claim-self.js +64 -25
- package/dist/tools/agent-claim-self.js.map +1 -1
- package/dist/tools/directory.d.ts +275 -0
- package/dist/tools/directory.d.ts.map +1 -0
- package/dist/tools/directory.js +253 -0
- package/dist/tools/directory.js.map +1 -0
- package/dist/tools/payable-fetch.d.ts.map +1 -1
- package/dist/tools/payable-fetch.js +14 -4
- package/dist/tools/payable-fetch.js.map +1 -1
- package/dist/tools/production-control.d.ts.map +1 -1
- package/dist/tools/production-control.js +4 -1
- package/dist/tools/production-control.js.map +1 -1
- package/package.json +3 -3
- package/skills/SKILL.md +99 -82
|
@@ -4,17 +4,25 @@ import { payChain } from "../pay-chains.js";
|
|
|
4
4
|
* autonomously by signing a claim challenge with its own key.
|
|
5
5
|
*
|
|
6
6
|
* Flow (executed inside the tool, no copy-paste between UIs):
|
|
7
|
-
* 1.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* 3. Agent calls this tool with the magic_link_url
|
|
12
|
-
* 4. Tool
|
|
7
|
+
* 1. The owner opens dash.aifinpay.io → My Agents → Link an agent →
|
|
8
|
+
* Claim via MCP and generates a one-time URL (POST /api/me/claim-url),
|
|
9
|
+
* e.g. `https://dash.aifinpay.io/api/auth/verify?token=…`
|
|
10
|
+
* 2. The owner gives that URL to the agent: "link yourself to my account"
|
|
11
|
+
* 3. Agent calls this tool with the URL as magic_link_url
|
|
12
|
+
* 4. Tool POSTs the token to /api/auth/claim → server answers with a
|
|
13
|
+
* ten-minute agent-claim grant cookie (not a session)
|
|
13
14
|
* 5. Tool requests a challenge for the owner-selected payment family
|
|
14
15
|
* 6. Tool signs only that address's claim (EIP-191 or Ed25519)
|
|
15
16
|
* 7. Tool POSTs to /api/me/agents/claim → server verifies signature →
|
|
16
17
|
* agent attached to user's watchlist
|
|
17
18
|
*
|
|
19
|
+
* Step 4 used to GET the URL. The backend redeems a claim link on that GET
|
|
20
|
+
* only when the request carries no browser Sec-Fetch headers, so a runtime
|
|
21
|
+
* whose fetch adds them was sent to the confirm page and linked nothing.
|
|
22
|
+
* The POST route is told apart by its own path and the link's flow. A
|
|
23
|
+
* backend without it (404/405) still gets the GET, so this works against any
|
|
24
|
+
* deployment.
|
|
25
|
+
*
|
|
18
26
|
* Optional `label` field gives the agent a friendly name in the user's UI.
|
|
19
27
|
*
|
|
20
28
|
* Security model:
|
|
@@ -29,15 +37,16 @@ export function agentClaimSelfTool() {
|
|
|
29
37
|
name: "agent_claim_self",
|
|
30
38
|
description: "Link this agent to its owner's AiFinPay dashboard, so the owner sees the agent's " +
|
|
31
39
|
"balance, payments and receipts. Offer this after creating a wallet. The owner " +
|
|
32
|
-
"generates a one-time URL at https://dash.aifinpay.io → My Agents →
|
|
33
|
-
"and
|
|
40
|
+
"generates a one-time URL at https://dash.aifinpay.io → My Agents → Link an agent → " +
|
|
41
|
+
"Claim via MCP and gives it to you; pass it here. Do not open the URL in a browser " +
|
|
42
|
+
"tool: that links nothing. The tool signs only an AiFinPay claim challenge for this " +
|
|
34
43
|
"agent's own address and moves no funds.",
|
|
35
44
|
inputSchema: {
|
|
36
45
|
type: "object",
|
|
37
46
|
properties: {
|
|
38
47
|
magic_link_url: {
|
|
39
48
|
type: "string",
|
|
40
|
-
description: "The one-time URL from My Agents → Claim via MCP. Looks like " +
|
|
49
|
+
description: "The one-time URL from My Agents → Link an agent → Claim via MCP. Looks like " +
|
|
41
50
|
"https://dash.aifinpay.io/api/auth/verify?token=… — single use, " +
|
|
42
51
|
"expires 15 minutes after it was generated.",
|
|
43
52
|
},
|
|
@@ -115,16 +124,41 @@ function challengeIsWellFormed(message, address) {
|
|
|
115
124
|
return false;
|
|
116
125
|
return /^[0-9a-f]{32}$/.test(message.slice(prefix.length));
|
|
117
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* The token of a one-time claim URL. Accepts the shape the dashboard hands
|
|
129
|
+
* out (`/api/auth/verify?token=<hex>`) and `/api/auth/claim/<hex>`. The token
|
|
130
|
+
* is sent in a POST body, never back in a URL.
|
|
131
|
+
*/
|
|
132
|
+
function claimToken(url) {
|
|
133
|
+
let parsed;
|
|
134
|
+
try {
|
|
135
|
+
parsed = new URL(url);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
const fromQuery = parsed.pathname.replace(/\/+$/, "") === "/api/auth/verify" ? parsed.searchParams.get("token") : null;
|
|
141
|
+
const fromPath = parsed.pathname.match(/^\/api\/auth\/claim\/([^/]+)\/?$/)?.[1] ?? null;
|
|
142
|
+
const token = fromQuery ?? fromPath;
|
|
143
|
+
return token && /^[A-Za-z0-9_-]{1,256}$/.test(token) ? token : null;
|
|
144
|
+
}
|
|
145
|
+
/** Why the link gave no grant, without echoing the token or server text. */
|
|
146
|
+
function linkRefused(status) {
|
|
147
|
+
const text = `The one-time URL gave no claim grant (HTTP ${status}). It works once and for 15 minutes; ` +
|
|
148
|
+
"ask the owner for a new one in My Agents → Link an agent → Claim via MCP.";
|
|
149
|
+
return { isError: true, content: [{ type: "text", text }] };
|
|
150
|
+
}
|
|
118
151
|
export async function runAgentClaimSelf(ctx, args) {
|
|
119
152
|
const magicLinkUrl = typeof args.magic_link_url === "string" ? args.magic_link_url : "";
|
|
120
153
|
const label = typeof args.label === "string" ? args.label : null;
|
|
121
|
-
|
|
154
|
+
const token = claimToken(magicLinkUrl);
|
|
155
|
+
if (!magicLinkUrl || !token) {
|
|
122
156
|
return {
|
|
123
157
|
isError: true,
|
|
124
158
|
content: [
|
|
125
159
|
{
|
|
126
160
|
type: "text",
|
|
127
|
-
text: "magic_link_url required — should look like https://aifinpay.io/api/auth/verify?token=…",
|
|
161
|
+
text: "magic_link_url required — should look like https://dash.aifinpay.io/api/auth/verify?token=…",
|
|
128
162
|
},
|
|
129
163
|
],
|
|
130
164
|
};
|
|
@@ -146,27 +180,32 @@ export async function runAgentClaimSelf(ctx, args) {
|
|
|
146
180
|
content: [{ type: "text", text: "magic_link_url is not a valid URL" }],
|
|
147
181
|
};
|
|
148
182
|
}
|
|
149
|
-
// ── 1.
|
|
183
|
+
// ── 1. Redeem the link for a claim grant ───────────────────────────
|
|
150
184
|
let setCookie = null;
|
|
151
185
|
try {
|
|
152
|
-
const res = await fetch(
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
186
|
+
const res = await fetch(`${apiBase}/api/auth/claim`, {
|
|
187
|
+
method: "POST",
|
|
188
|
+
redirect: "error", // a redirect would leave the origin we vetted
|
|
189
|
+
headers: { "content-type": "application/json" },
|
|
190
|
+
body: JSON.stringify({ token }),
|
|
191
|
+
});
|
|
192
|
+
if (res.status === 404 || res.status === 405) {
|
|
193
|
+
// A backend from before /api/auth/claim: the URL itself is the claim.
|
|
194
|
+
const legacy = await fetch(magicLinkUrl, { redirect: "manual" });
|
|
195
|
+
setCookie = legacy.headers.get("set-cookie");
|
|
196
|
+
if (!setCookie)
|
|
197
|
+
return linkRefused(legacy.status);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
setCookie = res.headers.get("set-cookie");
|
|
201
|
+
if (!res.ok || !setCookie)
|
|
202
|
+
return linkRefused(res.status);
|
|
164
203
|
}
|
|
165
204
|
}
|
|
166
205
|
catch {
|
|
167
206
|
return {
|
|
168
207
|
isError: true,
|
|
169
|
-
content: [{ type: "text", text: "Failed to
|
|
208
|
+
content: [{ type: "text", text: "Failed to reach AiFinPay to redeem the link; no claim was completed." }],
|
|
170
209
|
};
|
|
171
210
|
}
|
|
172
211
|
// Some setups split multiple cookies; grab the session one we care about.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-claim-self.js","sourceRoot":"","sources":["../../src/tools/agent-claim-self.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C
|
|
1
|
+
{"version":3,"file":"agent-claim-self.js","sourceRoot":"","sources":["../../src/tools/agent-claim-self.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory tools — the READ-ONLY surface submitted to the OpenAI ChatGPT App
|
|
3
|
+
* Directory. Every tool here is a thin wrapper over a public `api.aifinpay.io`
|
|
4
|
+
* GET endpoint: no agent identity, no keys, no money movement, no auth. This is
|
|
5
|
+
* what makes the directory app reviewable (OpenAI prohibits payment/crypto
|
|
6
|
+
* EXECUTION in directory apps — see Obsidian/32). Execution tools live only on
|
|
7
|
+
* the full BYO-MCP connector (`server.ts`), never here.
|
|
8
|
+
*
|
|
9
|
+
* Each tool declares `readOnlyHint: true`, an `outputSchema`, and ALWAYS returns
|
|
10
|
+
* `structuredContent` matching it (the audit found 4 connector tools that declare
|
|
11
|
+
* outputSchema but return only text — Apps SDK validation may reject that; we
|
|
12
|
+
* don't repeat it).
|
|
13
|
+
*/
|
|
14
|
+
/** Public API base. Defaults to production; override with AIFINPAY_API_BASE. */
|
|
15
|
+
export declare const DIRECTORY_API_BASE: string;
|
|
16
|
+
export interface DirectoryContext {
|
|
17
|
+
apiBase: string;
|
|
18
|
+
timeoutMs: number;
|
|
19
|
+
log: (level: "info" | "warn" | "error", msg: string) => void;
|
|
20
|
+
}
|
|
21
|
+
type ToolResult = {
|
|
22
|
+
content: {
|
|
23
|
+
type: "text";
|
|
24
|
+
text: string;
|
|
25
|
+
}[];
|
|
26
|
+
structuredContent?: Record<string, unknown>;
|
|
27
|
+
isError?: boolean;
|
|
28
|
+
};
|
|
29
|
+
export declare function directoryTools(): ({
|
|
30
|
+
name: string;
|
|
31
|
+
description: string;
|
|
32
|
+
inputSchema: {
|
|
33
|
+
type: string;
|
|
34
|
+
properties: {
|
|
35
|
+
name?: undefined;
|
|
36
|
+
chain?: undefined;
|
|
37
|
+
amount?: undefined;
|
|
38
|
+
asset?: undefined;
|
|
39
|
+
pubkey?: undefined;
|
|
40
|
+
address?: undefined;
|
|
41
|
+
};
|
|
42
|
+
required?: undefined;
|
|
43
|
+
};
|
|
44
|
+
annotations: {
|
|
45
|
+
readOnlyHint: boolean;
|
|
46
|
+
openWorldHint: boolean;
|
|
47
|
+
destructiveHint: boolean;
|
|
48
|
+
};
|
|
49
|
+
outputSchema: {
|
|
50
|
+
type: string;
|
|
51
|
+
properties: {
|
|
52
|
+
providers: {
|
|
53
|
+
type: string;
|
|
54
|
+
items: {
|
|
55
|
+
type: string;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
covered?: undefined;
|
|
59
|
+
total_seats?: undefined;
|
|
60
|
+
leaderboard?: undefined;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
} | {
|
|
64
|
+
name: string;
|
|
65
|
+
description: string;
|
|
66
|
+
inputSchema: {
|
|
67
|
+
type: string;
|
|
68
|
+
properties: {
|
|
69
|
+
name: {
|
|
70
|
+
type: string;
|
|
71
|
+
description: string;
|
|
72
|
+
};
|
|
73
|
+
chain?: undefined;
|
|
74
|
+
amount?: undefined;
|
|
75
|
+
asset?: undefined;
|
|
76
|
+
pubkey?: undefined;
|
|
77
|
+
address?: undefined;
|
|
78
|
+
};
|
|
79
|
+
required: string[];
|
|
80
|
+
};
|
|
81
|
+
annotations: {
|
|
82
|
+
readOnlyHint: boolean;
|
|
83
|
+
openWorldHint: boolean;
|
|
84
|
+
destructiveHint: boolean;
|
|
85
|
+
};
|
|
86
|
+
outputSchema: {
|
|
87
|
+
type: string;
|
|
88
|
+
properties?: undefined;
|
|
89
|
+
};
|
|
90
|
+
} | {
|
|
91
|
+
name: string;
|
|
92
|
+
description: string;
|
|
93
|
+
inputSchema: {
|
|
94
|
+
type: string;
|
|
95
|
+
properties: {
|
|
96
|
+
name?: undefined;
|
|
97
|
+
chain?: undefined;
|
|
98
|
+
amount?: undefined;
|
|
99
|
+
asset?: undefined;
|
|
100
|
+
pubkey?: undefined;
|
|
101
|
+
address?: undefined;
|
|
102
|
+
};
|
|
103
|
+
required?: undefined;
|
|
104
|
+
};
|
|
105
|
+
annotations: {
|
|
106
|
+
readOnlyHint: boolean;
|
|
107
|
+
openWorldHint: boolean;
|
|
108
|
+
destructiveHint: boolean;
|
|
109
|
+
};
|
|
110
|
+
outputSchema: {
|
|
111
|
+
type: string;
|
|
112
|
+
properties?: undefined;
|
|
113
|
+
};
|
|
114
|
+
} | {
|
|
115
|
+
name: string;
|
|
116
|
+
description: string;
|
|
117
|
+
inputSchema: {
|
|
118
|
+
type: string;
|
|
119
|
+
properties: {
|
|
120
|
+
name?: undefined;
|
|
121
|
+
chain?: undefined;
|
|
122
|
+
amount?: undefined;
|
|
123
|
+
asset?: undefined;
|
|
124
|
+
pubkey?: undefined;
|
|
125
|
+
address?: undefined;
|
|
126
|
+
};
|
|
127
|
+
required?: undefined;
|
|
128
|
+
};
|
|
129
|
+
annotations: {
|
|
130
|
+
readOnlyHint: boolean;
|
|
131
|
+
openWorldHint: boolean;
|
|
132
|
+
destructiveHint: boolean;
|
|
133
|
+
};
|
|
134
|
+
outputSchema: {
|
|
135
|
+
type: string;
|
|
136
|
+
properties: {
|
|
137
|
+
providers?: undefined;
|
|
138
|
+
covered: {
|
|
139
|
+
type: string;
|
|
140
|
+
items: {
|
|
141
|
+
type: string;
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
total_seats?: undefined;
|
|
145
|
+
leaderboard?: undefined;
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
} | {
|
|
149
|
+
name: string;
|
|
150
|
+
description: string;
|
|
151
|
+
inputSchema: {
|
|
152
|
+
type: string;
|
|
153
|
+
properties: {
|
|
154
|
+
name?: undefined;
|
|
155
|
+
chain?: undefined;
|
|
156
|
+
amount?: undefined;
|
|
157
|
+
asset?: undefined;
|
|
158
|
+
pubkey?: undefined;
|
|
159
|
+
address?: undefined;
|
|
160
|
+
};
|
|
161
|
+
required?: undefined;
|
|
162
|
+
};
|
|
163
|
+
annotations: {
|
|
164
|
+
readOnlyHint: boolean;
|
|
165
|
+
openWorldHint: boolean;
|
|
166
|
+
destructiveHint: boolean;
|
|
167
|
+
};
|
|
168
|
+
outputSchema: {
|
|
169
|
+
type: string;
|
|
170
|
+
properties: {
|
|
171
|
+
providers?: undefined;
|
|
172
|
+
covered?: undefined;
|
|
173
|
+
total_seats: {
|
|
174
|
+
type: string;
|
|
175
|
+
};
|
|
176
|
+
leaderboard: {
|
|
177
|
+
type: string;
|
|
178
|
+
items: {
|
|
179
|
+
type: string;
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
} | {
|
|
185
|
+
name: string;
|
|
186
|
+
description: string;
|
|
187
|
+
inputSchema: {
|
|
188
|
+
type: string;
|
|
189
|
+
properties: {
|
|
190
|
+
name?: undefined;
|
|
191
|
+
chain: {
|
|
192
|
+
type: string;
|
|
193
|
+
enum: string[];
|
|
194
|
+
};
|
|
195
|
+
amount: {
|
|
196
|
+
type: string;
|
|
197
|
+
description: string;
|
|
198
|
+
};
|
|
199
|
+
asset: {
|
|
200
|
+
type: string;
|
|
201
|
+
enum: string[];
|
|
202
|
+
description: string;
|
|
203
|
+
};
|
|
204
|
+
pubkey?: undefined;
|
|
205
|
+
address?: undefined;
|
|
206
|
+
};
|
|
207
|
+
required: string[];
|
|
208
|
+
};
|
|
209
|
+
annotations: {
|
|
210
|
+
readOnlyHint: boolean;
|
|
211
|
+
openWorldHint: boolean;
|
|
212
|
+
destructiveHint: boolean;
|
|
213
|
+
};
|
|
214
|
+
outputSchema: {
|
|
215
|
+
properties?: undefined;
|
|
216
|
+
type: string;
|
|
217
|
+
};
|
|
218
|
+
} | {
|
|
219
|
+
name: string;
|
|
220
|
+
description: string;
|
|
221
|
+
inputSchema: {
|
|
222
|
+
type: string;
|
|
223
|
+
properties: {
|
|
224
|
+
name?: undefined;
|
|
225
|
+
chain?: undefined;
|
|
226
|
+
amount?: undefined;
|
|
227
|
+
asset?: undefined;
|
|
228
|
+
pubkey: {
|
|
229
|
+
type: string;
|
|
230
|
+
description: string;
|
|
231
|
+
};
|
|
232
|
+
address?: undefined;
|
|
233
|
+
};
|
|
234
|
+
required: string[];
|
|
235
|
+
};
|
|
236
|
+
annotations: {
|
|
237
|
+
readOnlyHint: boolean;
|
|
238
|
+
openWorldHint: boolean;
|
|
239
|
+
destructiveHint: boolean;
|
|
240
|
+
};
|
|
241
|
+
outputSchema: {
|
|
242
|
+
properties?: undefined;
|
|
243
|
+
type: string;
|
|
244
|
+
};
|
|
245
|
+
} | {
|
|
246
|
+
name: string;
|
|
247
|
+
description: string;
|
|
248
|
+
inputSchema: {
|
|
249
|
+
type: string;
|
|
250
|
+
properties: {
|
|
251
|
+
name?: undefined;
|
|
252
|
+
chain?: undefined;
|
|
253
|
+
amount?: undefined;
|
|
254
|
+
asset?: undefined;
|
|
255
|
+
pubkey?: undefined;
|
|
256
|
+
address: {
|
|
257
|
+
type: string;
|
|
258
|
+
description: string;
|
|
259
|
+
};
|
|
260
|
+
};
|
|
261
|
+
required: string[];
|
|
262
|
+
};
|
|
263
|
+
annotations: {
|
|
264
|
+
readOnlyHint: boolean;
|
|
265
|
+
openWorldHint: boolean;
|
|
266
|
+
destructiveHint: boolean;
|
|
267
|
+
};
|
|
268
|
+
outputSchema: {
|
|
269
|
+
properties?: undefined;
|
|
270
|
+
type: string;
|
|
271
|
+
};
|
|
272
|
+
})[];
|
|
273
|
+
export declare function runDirectoryTool(ctx: DirectoryContext, name: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
274
|
+
export {};
|
|
275
|
+
//# sourceMappingURL=directory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../../src/tools/directory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,QAAkF,CAAC;AAElH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9D;AAED,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAyCF,wBAAgB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;gBAiBP,IAAI;gBAAW,KAAK;oBAAI,IAAI;;;;;;;;;;;;;;;gBAavC,IAAI;gBACJ,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA0BF,IAAI;gBAAW,KAAK;oBAAI,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAsBxB,IAAI;;;gBACJ,IAAI;gBAAW,KAAK;oBAAI,IAAI;;;;;;;;;;;;;gBAalC,IAAI;gBAAY,IAAI;;;gBAE3B,IAAI;gBACJ,WAAW;;;gBAKX,IAAI;gBACJ,IAAI;gBACJ,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAmBX,IAAI;gBACJ,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAgBX,IAAI;gBACJ,WAAW;;;;;;;;;;;;;;KAStB;AAID,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,UAAU,CAAC,CAsDrB"}
|