valyu-js 1.0.3 → 1.0.5
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/dist/index.d.mts +14 -3
- package/dist/index.d.ts +14 -3
- package/dist/index.js +21 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
type SearchType = "web" | "proprietary";
|
|
2
2
|
type FeedbackSentiment = "very good" | "good" | "bad" | "very bad";
|
|
3
|
+
type DataType = "structured" | "unstructured";
|
|
4
|
+
interface SearchResult {
|
|
5
|
+
title: string;
|
|
6
|
+
url: string;
|
|
7
|
+
content: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
source: string;
|
|
10
|
+
price: number;
|
|
11
|
+
length: number;
|
|
12
|
+
relevance_score: number;
|
|
13
|
+
data_type?: DataType;
|
|
14
|
+
}
|
|
3
15
|
interface SearchResponse {
|
|
4
16
|
success: boolean;
|
|
5
17
|
error?: string;
|
|
6
18
|
tx_id: string | null;
|
|
7
19
|
query: string;
|
|
8
|
-
results:
|
|
20
|
+
results: SearchResult[];
|
|
9
21
|
results_by_source: {
|
|
10
22
|
web: number;
|
|
11
23
|
proprietary: number;
|
|
@@ -23,8 +35,7 @@ declare class Valyu {
|
|
|
23
35
|
private baseUrl;
|
|
24
36
|
private headers;
|
|
25
37
|
constructor(apiKey?: string, baseUrl?: string);
|
|
26
|
-
context(
|
|
27
|
-
query: string;
|
|
38
|
+
context(query: string, options?: {
|
|
28
39
|
searchType: SearchType;
|
|
29
40
|
maxNumResults?: number;
|
|
30
41
|
queryRewrite?: boolean;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
type SearchType = "web" | "proprietary";
|
|
2
2
|
type FeedbackSentiment = "very good" | "good" | "bad" | "very bad";
|
|
3
|
+
type DataType = "structured" | "unstructured";
|
|
4
|
+
interface SearchResult {
|
|
5
|
+
title: string;
|
|
6
|
+
url: string;
|
|
7
|
+
content: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
source: string;
|
|
10
|
+
price: number;
|
|
11
|
+
length: number;
|
|
12
|
+
relevance_score: number;
|
|
13
|
+
data_type?: DataType;
|
|
14
|
+
}
|
|
3
15
|
interface SearchResponse {
|
|
4
16
|
success: boolean;
|
|
5
17
|
error?: string;
|
|
6
18
|
tx_id: string | null;
|
|
7
19
|
query: string;
|
|
8
|
-
results:
|
|
20
|
+
results: SearchResult[];
|
|
9
21
|
results_by_source: {
|
|
10
22
|
web: number;
|
|
11
23
|
proprietary: number;
|
|
@@ -23,8 +35,7 @@ declare class Valyu {
|
|
|
23
35
|
private baseUrl;
|
|
24
36
|
private headers;
|
|
25
37
|
constructor(apiKey?: string, baseUrl?: string);
|
|
26
|
-
context(
|
|
27
|
-
query: string;
|
|
38
|
+
context(query: string, options?: {
|
|
28
39
|
searchType: SearchType;
|
|
29
40
|
maxNumResults?: number;
|
|
30
41
|
queryRewrite?: boolean;
|
package/dist/index.js
CHANGED
|
@@ -48,16 +48,22 @@ var Valyu = class {
|
|
|
48
48
|
"x-api-key": apiKey
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
|
-
async context({
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
maxPrice = 1,
|
|
58
|
-
dataSources
|
|
51
|
+
async context(query, options = {
|
|
52
|
+
searchType: "proprietary",
|
|
53
|
+
maxNumResults: 10,
|
|
54
|
+
queryRewrite: true,
|
|
55
|
+
similarityThreshold: 0.4,
|
|
56
|
+
maxPrice: 1
|
|
59
57
|
}) {
|
|
60
58
|
try {
|
|
59
|
+
const {
|
|
60
|
+
searchType,
|
|
61
|
+
maxNumResults = 10,
|
|
62
|
+
queryRewrite = true,
|
|
63
|
+
similarityThreshold = 0.4,
|
|
64
|
+
maxPrice = 1,
|
|
65
|
+
dataSources
|
|
66
|
+
} = options;
|
|
61
67
|
const payload = {
|
|
62
68
|
query,
|
|
63
69
|
search_type: searchType,
|
|
@@ -111,13 +117,19 @@ var Valyu = class {
|
|
|
111
117
|
const payload = {
|
|
112
118
|
tx_id,
|
|
113
119
|
feedback,
|
|
114
|
-
sentiment
|
|
120
|
+
sentiment
|
|
115
121
|
};
|
|
116
122
|
const response = await import_axios.default.post(
|
|
117
123
|
`${this.baseUrl}/feedback`,
|
|
118
124
|
payload,
|
|
119
125
|
{ headers: this.headers }
|
|
120
126
|
);
|
|
127
|
+
if (!response.status || response.status < 200 || response.status >= 300) {
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
error: response.data?.error
|
|
131
|
+
};
|
|
132
|
+
}
|
|
121
133
|
return response.data;
|
|
122
134
|
} catch (e) {
|
|
123
135
|
return {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import axios from 'axios';\nimport { SearchResponse, SearchType, FeedbackSentiment, FeedbackResponse } from './types';\n\nexport class Valyu {\n private baseUrl: string;\n private headers: Record<string, string>;\n\n constructor(apiKey?: string, baseUrl: string = \"https://api.valyu.network/v1\") {\n if (!apiKey) {\n apiKey = process.env.VALYU_API_KEY;\n if (!apiKey) {\n throw new Error(\"VALYU_API_KEY is not set\");\n }\n }\n this.baseUrl = baseUrl;\n this.headers = {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey\n };\n }\n\n async context(
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import axios from 'axios';\nimport { SearchResponse, SearchType, FeedbackSentiment, FeedbackResponse } from './types';\n\nexport class Valyu {\n private baseUrl: string;\n private headers: Record<string, string>;\n\n constructor(apiKey?: string, baseUrl: string = \"https://api.valyu.network/v1\") {\n if (!apiKey) {\n apiKey = process.env.VALYU_API_KEY;\n if (!apiKey) {\n throw new Error(\"VALYU_API_KEY is not set\");\n }\n }\n this.baseUrl = baseUrl;\n this.headers = {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey\n };\n }\n\n async context(\n query: string,\n options: {\n searchType: SearchType;\n maxNumResults?: number;\n queryRewrite?: boolean;\n similarityThreshold?: number;\n maxPrice?: number;\n dataSources?: string[];\n } = {\n searchType: \"proprietary\",\n maxNumResults: 10,\n queryRewrite: true,\n similarityThreshold: 0.4,\n maxPrice: 1\n }\n ): Promise<SearchResponse> {\n try {\n const {\n searchType,\n maxNumResults = 10,\n queryRewrite = true,\n similarityThreshold = 0.4,\n maxPrice = 1,\n dataSources\n } = options;\n\n const payload: Record<string, any> = {\n query,\n search_type: searchType,\n max_num_results: maxNumResults,\n query_rewrite: queryRewrite,\n similarity_threshold: similarityThreshold,\n max_price: maxPrice\n };\n\n if (dataSources !== undefined) {\n payload.data_sources = dataSources;\n }\n\n\n const response = await axios.post(\n `${this.baseUrl}/knowledge`,\n payload,\n { headers: this.headers }\n );\n\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.message,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0\n };\n }\n }\n\n async feedback({\n tx_id,\n feedback,\n sentiment\n }: {\n tx_id: string;\n feedback: string;\n sentiment: FeedbackSentiment;\n }): Promise<FeedbackResponse> {\n try {\n const payload = {\n tx_id,\n feedback,\n sentiment\n };\n\n const response = await axios.post(\n `${this.baseUrl}/feedback`,\n payload,\n { headers: this.headers }\n );\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.message\n };\n }\n }\n}\n\nexport type { \n SearchResponse, \n SearchType, \n FeedbackSentiment, \n FeedbackResponse \n} from './types'; "],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAGX,IAAM,QAAN,MAAY;AAAA,EAIjB,YAAY,QAAiB,UAAkB,gCAAgC;AAC7E,QAAI,CAAC,QAAQ;AACX,eAAS,QAAQ,IAAI;AACrB,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI,MAAM,0BAA0B;AAAA,MAC5C;AAAA,IACF;AACA,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,MACb,gBAAgB;AAAA,MAChB,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAM,QACJ,OACA,UAOI;AAAA,IACF,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,UAAU;AAAA,EACZ,GACyB;AACzB,QAAI;AACF,YAAM;AAAA,QACJ;AAAA,QACA,gBAAgB;AAAA,QAChB,eAAe;AAAA,QACf,sBAAsB;AAAA,QACtB,WAAW;AAAA,QACX;AAAA,MACF,IAAI;AAEJ,YAAM,UAA+B;AAAA,QACnC;AAAA,QACA,aAAa;AAAA,QACb,iBAAiB;AAAA,QACjB,eAAe;AAAA,QACf,sBAAsB;AAAA,QACtB,WAAW;AAAA,MACb;AAEA,UAAI,gBAAgB,QAAW;AAC7B,gBAAQ,eAAe;AAAA,MACzB;AAGA,YAAM,WAAW,MAAM,aAAAA,QAAM;AAAA,QAC3B,GAAG,KAAK,OAAO;AAAA,QACf;AAAA,QACA,EAAE,SAAS,KAAK,QAAQ;AAAA,MAC1B;AAGA,UAAI,CAAC,SAAS,UAAU,SAAS,SAAS,OAAO,SAAS,UAAU,KAAK;AACvE,eAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO,SAAS,MAAM;AAAA,UACtB,OAAO;AAAA,UACP;AAAA,UACA,SAAS,CAAC;AAAA,UACV,mBAAmB,EAAE,KAAK,GAAG,aAAa,EAAE;AAAA,UAC5C,qBAAqB;AAAA,UACrB,yBAAyB;AAAA,UACzB,kBAAkB;AAAA,QACpB;AAAA,MACF;AAEA,aAAO,SAAS;AAAA,IAClB,SAAS,GAAQ;AACf,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,EAAE;AAAA,QACT,OAAO;AAAA,QACP;AAAA,QACA,SAAS,CAAC;AAAA,QACV,mBAAmB,EAAE,KAAK,GAAG,aAAa,EAAE;AAAA,QAC5C,qBAAqB;AAAA,QACrB,yBAAyB;AAAA,QACzB,kBAAkB;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAI8B;AAC5B,QAAI;AACF,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,YAAM,WAAW,MAAM,aAAAA,QAAM;AAAA,QAC3B,GAAG,KAAK,OAAO;AAAA,QACf;AAAA,QACA,EAAE,SAAS,KAAK,QAAQ;AAAA,MAC1B;AAEA,UAAI,CAAC,SAAS,UAAU,SAAS,SAAS,OAAO,SAAS,UAAU,KAAK;AACvE,eAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO,SAAS,MAAM;AAAA,QACxB;AAAA,MACF;AAEA,aAAO,SAAS;AAAA,IAClB,SAAS,GAAQ;AACf,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,EAAE;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;","names":["axios"]}
|
package/dist/index.mjs
CHANGED
|
@@ -14,16 +14,22 @@ var Valyu = class {
|
|
|
14
14
|
"x-api-key": apiKey
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
-
async context({
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
maxPrice = 1,
|
|
24
|
-
dataSources
|
|
17
|
+
async context(query, options = {
|
|
18
|
+
searchType: "proprietary",
|
|
19
|
+
maxNumResults: 10,
|
|
20
|
+
queryRewrite: true,
|
|
21
|
+
similarityThreshold: 0.4,
|
|
22
|
+
maxPrice: 1
|
|
25
23
|
}) {
|
|
26
24
|
try {
|
|
25
|
+
const {
|
|
26
|
+
searchType,
|
|
27
|
+
maxNumResults = 10,
|
|
28
|
+
queryRewrite = true,
|
|
29
|
+
similarityThreshold = 0.4,
|
|
30
|
+
maxPrice = 1,
|
|
31
|
+
dataSources
|
|
32
|
+
} = options;
|
|
27
33
|
const payload = {
|
|
28
34
|
query,
|
|
29
35
|
search_type: searchType,
|
|
@@ -77,13 +83,19 @@ var Valyu = class {
|
|
|
77
83
|
const payload = {
|
|
78
84
|
tx_id,
|
|
79
85
|
feedback,
|
|
80
|
-
sentiment
|
|
86
|
+
sentiment
|
|
81
87
|
};
|
|
82
88
|
const response = await axios.post(
|
|
83
89
|
`${this.baseUrl}/feedback`,
|
|
84
90
|
payload,
|
|
85
91
|
{ headers: this.headers }
|
|
86
92
|
);
|
|
93
|
+
if (!response.status || response.status < 200 || response.status >= 300) {
|
|
94
|
+
return {
|
|
95
|
+
success: false,
|
|
96
|
+
error: response.data?.error
|
|
97
|
+
};
|
|
98
|
+
}
|
|
87
99
|
return response.data;
|
|
88
100
|
} catch (e) {
|
|
89
101
|
return {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import axios from 'axios';\nimport { SearchResponse, SearchType, FeedbackSentiment, FeedbackResponse } from './types';\n\nexport class Valyu {\n private baseUrl: string;\n private headers: Record<string, string>;\n\n constructor(apiKey?: string, baseUrl: string = \"https://api.valyu.network/v1\") {\n if (!apiKey) {\n apiKey = process.env.VALYU_API_KEY;\n if (!apiKey) {\n throw new Error(\"VALYU_API_KEY is not set\");\n }\n }\n this.baseUrl = baseUrl;\n this.headers = {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey\n };\n }\n\n async context(
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import axios from 'axios';\nimport { SearchResponse, SearchType, FeedbackSentiment, FeedbackResponse } from './types';\n\nexport class Valyu {\n private baseUrl: string;\n private headers: Record<string, string>;\n\n constructor(apiKey?: string, baseUrl: string = \"https://api.valyu.network/v1\") {\n if (!apiKey) {\n apiKey = process.env.VALYU_API_KEY;\n if (!apiKey) {\n throw new Error(\"VALYU_API_KEY is not set\");\n }\n }\n this.baseUrl = baseUrl;\n this.headers = {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey\n };\n }\n\n async context(\n query: string,\n options: {\n searchType: SearchType;\n maxNumResults?: number;\n queryRewrite?: boolean;\n similarityThreshold?: number;\n maxPrice?: number;\n dataSources?: string[];\n } = {\n searchType: \"proprietary\",\n maxNumResults: 10,\n queryRewrite: true,\n similarityThreshold: 0.4,\n maxPrice: 1\n }\n ): Promise<SearchResponse> {\n try {\n const {\n searchType,\n maxNumResults = 10,\n queryRewrite = true,\n similarityThreshold = 0.4,\n maxPrice = 1,\n dataSources\n } = options;\n\n const payload: Record<string, any> = {\n query,\n search_type: searchType,\n max_num_results: maxNumResults,\n query_rewrite: queryRewrite,\n similarity_threshold: similarityThreshold,\n max_price: maxPrice\n };\n\n if (dataSources !== undefined) {\n payload.data_sources = dataSources;\n }\n\n\n const response = await axios.post(\n `${this.baseUrl}/knowledge`,\n payload,\n { headers: this.headers }\n );\n\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.message,\n tx_id: null,\n query,\n results: [],\n results_by_source: { web: 0, proprietary: 0 },\n total_deduction_pcm: 0.0,\n total_deduction_dollars: 0.0,\n total_characters: 0\n };\n }\n }\n\n async feedback({\n tx_id,\n feedback,\n sentiment\n }: {\n tx_id: string;\n feedback: string;\n sentiment: FeedbackSentiment;\n }): Promise<FeedbackResponse> {\n try {\n const payload = {\n tx_id,\n feedback,\n sentiment\n };\n\n const response = await axios.post(\n `${this.baseUrl}/feedback`,\n payload,\n { headers: this.headers }\n );\n\n if (!response.status || response.status < 200 || response.status >= 300) {\n return {\n success: false,\n error: response.data?.error\n };\n }\n\n return response.data;\n } catch (e: any) {\n return {\n success: false,\n error: e.message\n };\n }\n }\n}\n\nexport type { \n SearchResponse, \n SearchType, \n FeedbackSentiment, \n FeedbackResponse \n} from './types'; "],"mappings":";AAAA,OAAO,WAAW;AAGX,IAAM,QAAN,MAAY;AAAA,EAIjB,YAAY,QAAiB,UAAkB,gCAAgC;AAC7E,QAAI,CAAC,QAAQ;AACX,eAAS,QAAQ,IAAI;AACrB,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI,MAAM,0BAA0B;AAAA,MAC5C;AAAA,IACF;AACA,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,MACb,gBAAgB;AAAA,MAChB,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAM,QACJ,OACA,UAOI;AAAA,IACF,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,UAAU;AAAA,EACZ,GACyB;AACzB,QAAI;AACF,YAAM;AAAA,QACJ;AAAA,QACA,gBAAgB;AAAA,QAChB,eAAe;AAAA,QACf,sBAAsB;AAAA,QACtB,WAAW;AAAA,QACX;AAAA,MACF,IAAI;AAEJ,YAAM,UAA+B;AAAA,QACnC;AAAA,QACA,aAAa;AAAA,QACb,iBAAiB;AAAA,QACjB,eAAe;AAAA,QACf,sBAAsB;AAAA,QACtB,WAAW;AAAA,MACb;AAEA,UAAI,gBAAgB,QAAW;AAC7B,gBAAQ,eAAe;AAAA,MACzB;AAGA,YAAM,WAAW,MAAM,MAAM;AAAA,QAC3B,GAAG,KAAK,OAAO;AAAA,QACf;AAAA,QACA,EAAE,SAAS,KAAK,QAAQ;AAAA,MAC1B;AAGA,UAAI,CAAC,SAAS,UAAU,SAAS,SAAS,OAAO,SAAS,UAAU,KAAK;AACvE,eAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO,SAAS,MAAM;AAAA,UACtB,OAAO;AAAA,UACP;AAAA,UACA,SAAS,CAAC;AAAA,UACV,mBAAmB,EAAE,KAAK,GAAG,aAAa,EAAE;AAAA,UAC5C,qBAAqB;AAAA,UACrB,yBAAyB;AAAA,UACzB,kBAAkB;AAAA,QACpB;AAAA,MACF;AAEA,aAAO,SAAS;AAAA,IAClB,SAAS,GAAQ;AACf,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,EAAE;AAAA,QACT,OAAO;AAAA,QACP;AAAA,QACA,SAAS,CAAC;AAAA,QACV,mBAAmB,EAAE,KAAK,GAAG,aAAa,EAAE;AAAA,QAC5C,qBAAqB;AAAA,QACrB,yBAAyB;AAAA,QACzB,kBAAkB;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAI8B;AAC5B,QAAI;AACF,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,YAAM,WAAW,MAAM,MAAM;AAAA,QAC3B,GAAG,KAAK,OAAO;AAAA,QACf;AAAA,QACA,EAAE,SAAS,KAAK,QAAQ;AAAA,MAC1B;AAEA,UAAI,CAAC,SAAS,UAAU,SAAS,SAAS,OAAO,SAAS,UAAU,KAAK;AACvE,eAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO,SAAS,MAAM;AAAA,QACxB;AAAA,MACF;AAEA,aAAO,SAAS;AAAA,IAClB,SAAS,GAAQ;AACf,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,EAAE;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|