smart-web-mcp 0.38.1 → 0.40.0

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/CHANGELOG.md CHANGED
@@ -8,6 +8,8 @@ The format is based on Keep a Changelog[^1] and this project uses SemVer.
8
8
 
9
9
  ### Added
10
10
 
11
+ - Added `smartvertical`, a single Korean/local structured-data MCP router for places, weather, transit, finance, DART, real estate, safety, news, commerce, spellcheck, zipcode, law, public restrooms, and GeekNews domains.
12
+ - X/Twitter `smartfetch` now unrolls public mega-threads through Thread Reader when direct public seed/oEmbed metadata only exposes the first post, preserving outbound links such as GitHub Gists and blog versions.
11
13
  - Added `kr_aliexpress`, a no-secret MCP product search tool that scrapes AliExpress public search pages for product candidates, current storefront prices, images, and links with delivery/coupon/customs caveats.
12
14
  - `kr_place_search` now provides Korean map-style local recommendations by merging Kakao Local, Google Places, and Naver Local candidates with distance/rating/review-count ranking for 맛집, 카페, 산책, and dog-walk use cases.
13
15
  - Removed hosted API-key provider lanes (Firecrawl, Exa, Tavily, Browserless) from the smart-web runtime/benchmark surface so the default product remains no-secret/local-first.
@@ -83,6 +85,7 @@ The format is based on Keep a Changelog[^1] and this project uses SemVer.
83
85
 
84
86
  ### Changed
85
87
 
88
+ - Collapsed the public MCP surface for Korean/local helpers from individual `kr_*` tools into `smartvertical` domains while keeping provider adapters modular internally.
86
89
  - CI pull request verification now stays on GitHub-hosted runners while trusted push/release events can still use the configured runner pool.
87
90
  - Release publishing now scopes npm credentials to the publish step, avoids dependency lifecycle scripts in OIDC/write-scoped jobs, and verifies the pinned MCP publisher asset digest before execution.
88
91
  - YouTube transcript failures and X/Twitter login/error shells now return compact unavailable guidance instead of raw fallback page text or shell links.
@@ -160,6 +163,20 @@ The format is based on Keep a Changelog[^1] and this project uses SemVer.
160
163
  - Korean public API helpers now validate outbound URLs and redirects before fetching, blocking localhost, private, and reserved targets unless `network.allowPrivateHosts` is explicitly enabled.
161
164
  - CI now declares read-only default repository permissions, Dependabot auto-merge pins the reusable workflow without forwarding all caller secrets, and the workflow check enforces those guards.
162
165
 
166
+ ## [0.40.0](https://github.com/jojo-labs/smart-web/compare/v0.39.0...v0.40.0) (2026-07-03)
167
+
168
+
169
+ ### Features
170
+
171
+ * collapse Korean tools into smartvertical ([#410](https://github.com/jojo-labs/smart-web/issues/410)) ([36a4f9a](https://github.com/jojo-labs/smart-web/commit/36a4f9a1064ecacb09e8570a700f5f4f5ba3469f))
172
+
173
+ ## [0.39.0](https://github.com/jojo-labs/smart-web/compare/v0.38.1...v0.39.0) (2026-07-03)
174
+
175
+
176
+ ### Features
177
+
178
+ * unroll public X threads ([#408](https://github.com/jojo-labs/smart-web/issues/408)) ([f23487a](https://github.com/jojo-labs/smart-web/commit/f23487ae4ac38036556cef119bb88e75dc2aa0e1))
179
+
163
180
  ## [0.38.1](https://github.com/jojo-labs/smart-web/compare/v0.38.0...v0.38.1) (2026-07-03)
164
181
 
165
182
 
package/README.md CHANGED
@@ -4,11 +4,12 @@
4
4
 
5
5
  Local MCP for agentic web retrieval.
6
6
 
7
- `smart-web` bundles three tools in one stdio server:
7
+ `smart-web` bundles four public tools in one stdio server:
8
8
 
9
9
  - `smartfetch` for direct URLs
10
10
  - `smartsearch` for discovery
11
11
  - `smartcrawl` for same-site multi-page traversal
12
+ - `smartvertical` for Korean/local structured vertical data such as places, weather, transit, finance, law, commerce, and safety lookups
12
13
 
13
14
  It is designed for **agents and MCP hosts**, not for manual browser automation. The job is to return structured retrieval output first, then signal when a browser-task runtime would be a better next step.
14
15
 
@@ -22,7 +23,7 @@ If `smart-web` returns reproducible incorrect or misleading output, open a GitHu
22
23
 
23
24
  ## Highlights
24
25
 
25
- - one local MCP instead of separate search, fetch, and crawl servers
26
+ - one local MCP instead of separate search, fetch, crawl, and Korean vertical-data servers
26
27
  - explicit routing: URL → `smartfetch`, query → `smartsearch`, known site → `smartcrawl`
27
28
  - up-front smartfetch acquisition lanes instead of broad direct → browser retry chains, with `pipeline.acquire.attempt_map` showing seed/direct/relay/archive/browser phases and skip/failure reasons
28
29
  - optional Jina Reader relay for weak generic/article fetches when you explicitly enable it, with JSON mode and alternate-link preservation
@@ -47,17 +48,18 @@ If `smart-web` returns reproducible incorrect or misleading output, open a GitHu
47
48
  - `smartsearch` when the user gave a topic, keywords, or a `site:` query
48
49
  - `smartcrawl` when you already know the site and need multiple relevant pages
49
50
 
50
- | Situation | Tool |
51
- | ------------------------------------------------- | ------------- |
52
- | User already gave a URL or shortlink | `smartfetch` |
53
- | User gave a topic, keywords, or `site:` query | `smartsearch` |
54
- | You already know the site and need multiple pages | `smartcrawl` |
51
+ | Situation | Tool |
52
+ | ------------------------------------------------- | --------------- |
53
+ | User already gave a URL or shortlink | `smartfetch` |
54
+ | User gave a topic, keywords, or `site:` query | `smartsearch` |
55
+ | You already know the site and need multiple pages | `smartcrawl` |
56
+ | User needs Korean/local structured data | `smartvertical` |
55
57
 
56
58
  `smart-web` is a retrieval layer. It is not a general-purpose click/type/form-fill browser agent.[^1]
57
59
 
58
60
  ## What the tools return
59
61
 
60
- All three tools are shaped for agent consumption. Common high-signal fields include:
62
+ All public tools are shaped for agent consumption. Common high-signal fields include:
61
63
 
62
64
  - `assessment`: confidence, block/auth hints, recommended handoff
63
65
  - `pipeline`: resolve/acquire/normalize/assess stages, plus policy metadata for relay-style usage and authwall likelihood; `pipeline.acquire.attempt_map` describes the default seed, direct/impit, Jina Reader, archive, and browser phases as succeeded, failed, or skipped
@@ -0,0 +1,64 @@
1
+ export declare const SMARTVERTICAL_DOMAINS: readonly ["geeknews", "subway", "weather", "fine_dust", "stock", "dart", "real_estate", "drug_safety", "food_safety", "news", "aliexpress", "shopping", "coupang", "spellcheck", "zipcode", "law", "place", "public_restroom"];
2
+ export type SmartverticalDomain = typeof SMARTVERTICAL_DOMAINS[number];
3
+ type SmartverticalInputOptionalFields = {
4
+ action: string;
5
+ query: string;
6
+ id: string;
7
+ text: string;
8
+ item_names: string[];
9
+ location: string;
10
+ station_name: string;
11
+ region_hint: string;
12
+ station: string;
13
+ nx: number;
14
+ ny: number;
15
+ lat: number;
16
+ lon: number;
17
+ base_date: string;
18
+ base_time: string;
19
+ market: "KOSPI" | "KOSDAQ" | "KONEX";
20
+ code: string;
21
+ bas_date: string;
22
+ corp_code: string;
23
+ bgn_de: string;
24
+ end_de: string;
25
+ bsns_year: string;
26
+ reprt_code: string;
27
+ fs_div: "OFS" | "CFS";
28
+ pblntf_ty: string;
29
+ lawd_cd: string;
30
+ asset_type: "apartment" | "officetel" | "villa" | "single-house" | "commercial";
31
+ deal_type: "trade" | "rent";
32
+ deal_ymd: string;
33
+ display: number;
34
+ start: number;
35
+ sort: string;
36
+ locale: "ko" | "en";
37
+ currency: "KRW" | "USD";
38
+ ship_to: string;
39
+ max_price: number;
40
+ law_id: string;
41
+ article: string;
42
+ radius_m: number;
43
+ radius_km: number;
44
+ providers: Array<"kakao" | "google" | "naver">;
45
+ intent: "auto" | "food" | "cafe" | "walk" | "dog_walk" | "errand" | "date" | "work";
46
+ limit: number;
47
+ page_count: number;
48
+ num_of_rows: number;
49
+ timeout_ms: number;
50
+ };
51
+ export type SmartverticalInput = {
52
+ domain: SmartverticalDomain;
53
+ } & {
54
+ [K in keyof SmartverticalInputOptionalFields]?: SmartverticalInputOptionalFields[K] | undefined;
55
+ };
56
+ export type SmartverticalOutput = {
57
+ source: "smartvertical";
58
+ domain: SmartverticalDomain;
59
+ result: unknown;
60
+ text: string;
61
+ };
62
+ export declare function runSmartvertical(input: SmartverticalInput): Promise<SmartverticalOutput>;
63
+ export declare function renderSmartvertical(output: SmartverticalOutput): string;
64
+ export {};
@@ -0,0 +1,272 @@
1
+ import { renderAliExpress, renderCoupang, renderDart, renderDrugSafety, renderFineDust, renderFoodSafety, renderGeeknews, renderLaw, renderNaverNews, renderNaverShopping, renderPlaceSearch, renderPublicRestroom, renderRealEstate, renderSpellCheck, renderStock, renderSubway, renderWeather, renderZipcode, runAliExpress, runCoupang, runDart, runDrugSafety, runFineDust, runFoodSafety, runGeeknews, runLaw, runNaverNews, runNaverShopping, runPlaceSearch, runPublicRestroom, runRealEstate, runSpellCheck, runStock, runSubway, runWeather, runZipcode, } from "./index.js";
2
+ export const SMARTVERTICAL_DOMAINS = [
3
+ "geeknews",
4
+ "subway",
5
+ "weather",
6
+ "fine_dust",
7
+ "stock",
8
+ "dart",
9
+ "real_estate",
10
+ "drug_safety",
11
+ "food_safety",
12
+ "news",
13
+ "aliexpress",
14
+ "shopping",
15
+ "coupang",
16
+ "spellcheck",
17
+ "zipcode",
18
+ "law",
19
+ "place",
20
+ "public_restroom",
21
+ ];
22
+ function isErrorResult(result) {
23
+ return typeof result === "object" && result !== null && "ok" in result && result.ok === false;
24
+ }
25
+ function unwrapResult(result) {
26
+ if (isErrorResult(result))
27
+ throw new Error(result.message);
28
+ return result;
29
+ }
30
+ function queryOrEmpty(input) {
31
+ return input.query || input.location || input.station_name || "";
32
+ }
33
+ function normalizeGeeknewsAction(action) {
34
+ if (action === "search" || action === "detail" || action === "list")
35
+ return action;
36
+ return undefined;
37
+ }
38
+ function normalizeStockAction(action) {
39
+ if (action === "search" || action === "base-info" || action === "trade-info")
40
+ return action;
41
+ return "search";
42
+ }
43
+ function normalizeDartAction(action) {
44
+ if (action === "disclosures" || action === "company" || action === "financials")
45
+ return action;
46
+ return "disclosures";
47
+ }
48
+ function normalizeRealEstateAction(action) {
49
+ if (action === "region-code" || action === "transactions")
50
+ return action;
51
+ return "region-code";
52
+ }
53
+ function normalizeFoodSafetyAction(action) {
54
+ if (action === "recall" || action === "unfit" || action === "functional-ingredient")
55
+ return action;
56
+ return "recall";
57
+ }
58
+ function normalizeCoupangAction(action) {
59
+ if (action === "search" || action === "rocket" || action === "budget" || action === "goldbox")
60
+ return action;
61
+ return undefined;
62
+ }
63
+ function normalizeLawAction(action) {
64
+ if (action === "search" || action === "get-text" || action === "search-precedents")
65
+ return action;
66
+ return "search";
67
+ }
68
+ function normalizeSort(sort, allowed) {
69
+ if (sort !== undefined && allowed.includes(sort))
70
+ return sort;
71
+ return undefined;
72
+ }
73
+ export async function runSmartvertical(input) {
74
+ switch (input.domain) {
75
+ case "geeknews": {
76
+ const action = normalizeGeeknewsAction(input.action);
77
+ const result = unwrapResult(await runGeeknews({
78
+ ...(action === undefined ? {} : { action }),
79
+ ...(input.query === undefined ? {} : { query: input.query }),
80
+ ...(input.id === undefined ? {} : { id: input.id }),
81
+ ...(input.limit === undefined ? {} : { limit: input.limit }),
82
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
83
+ }));
84
+ return { source: "smartvertical", domain: input.domain, result, text: renderGeeknews(result) };
85
+ }
86
+ case "subway": {
87
+ const result = unwrapResult(await runSubway({
88
+ stationName: input.station_name || input.station || input.query || input.location || "",
89
+ ...(input.limit === undefined ? {} : { limit: input.limit }),
90
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
91
+ }));
92
+ return { source: "smartvertical", domain: input.domain, result, text: renderSubway(result) };
93
+ }
94
+ case "weather": {
95
+ const result = unwrapResult(await runWeather({
96
+ ...(input.nx === undefined ? {} : { nx: input.nx }),
97
+ ...(input.ny === undefined ? {} : { ny: input.ny }),
98
+ ...(input.lat === undefined ? {} : { lat: input.lat }),
99
+ ...(input.lon === undefined ? {} : { lon: input.lon }),
100
+ ...(input.base_date === undefined ? {} : { baseDate: input.base_date }),
101
+ ...(input.base_time === undefined ? {} : { baseTime: input.base_time }),
102
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
103
+ }));
104
+ return { source: "smartvertical", domain: input.domain, result, text: renderWeather(result) };
105
+ }
106
+ case "fine_dust": {
107
+ const result = unwrapResult(await runFineDust({
108
+ ...(input.region_hint === undefined ? {} : { regionHint: input.region_hint }),
109
+ ...(input.station_name === undefined ? {} : { stationName: input.station_name }),
110
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
111
+ }));
112
+ return { source: "smartvertical", domain: input.domain, result, text: renderFineDust(result) };
113
+ }
114
+ case "stock": {
115
+ const result = unwrapResult(await runStock({
116
+ action: normalizeStockAction(input.action),
117
+ ...(input.query === undefined ? {} : { q: input.query }),
118
+ ...(input.market === undefined ? {} : { market: input.market }),
119
+ ...(input.code === undefined ? {} : { code: input.code }),
120
+ ...(input.bas_date === undefined ? {} : { basDate: input.bas_date }),
121
+ ...(input.limit === undefined ? {} : { limit: input.limit }),
122
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
123
+ }));
124
+ return { source: "smartvertical", domain: input.domain, result, text: renderStock(result) };
125
+ }
126
+ case "dart": {
127
+ const result = unwrapResult(await runDart({
128
+ action: normalizeDartAction(input.action),
129
+ ...(input.corp_code === undefined ? {} : { corp_code: input.corp_code }),
130
+ ...(input.bgn_de === undefined ? {} : { bgn_de: input.bgn_de }),
131
+ ...(input.end_de === undefined ? {} : { end_de: input.end_de }),
132
+ ...(input.bsns_year === undefined ? {} : { bsns_year: input.bsns_year }),
133
+ ...(input.reprt_code === undefined ? {} : { reprt_code: input.reprt_code }),
134
+ ...(input.fs_div === undefined ? {} : { fs_div: input.fs_div }),
135
+ ...(input.pblntf_ty === undefined ? {} : { pblntf_ty: input.pblntf_ty }),
136
+ ...(input.page_count === undefined ? {} : { page_count: input.page_count }),
137
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
138
+ }));
139
+ return { source: "smartvertical", domain: input.domain, result, text: renderDart(result) };
140
+ }
141
+ case "real_estate": {
142
+ const result = unwrapResult(await runRealEstate({
143
+ action: normalizeRealEstateAction(input.action),
144
+ ...(input.query === undefined ? {} : { q: input.query }),
145
+ ...(input.lawd_cd === undefined ? {} : { lawd_cd: input.lawd_cd }),
146
+ ...(input.asset_type === undefined ? {} : { asset_type: input.asset_type }),
147
+ ...(input.deal_type === undefined ? {} : { deal_type: input.deal_type }),
148
+ ...(input.deal_ymd === undefined ? {} : { deal_ymd: input.deal_ymd }),
149
+ ...(input.num_of_rows === undefined ? {} : { num_of_rows: input.num_of_rows }),
150
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
151
+ }));
152
+ return { source: "smartvertical", domain: input.domain, result, text: renderRealEstate(result) };
153
+ }
154
+ case "drug_safety": {
155
+ const itemNames = input.item_names || (input.query === undefined ? [] : [input.query]);
156
+ const result = unwrapResult(await runDrugSafety({
157
+ itemNames,
158
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
159
+ }));
160
+ return { source: "smartvertical", domain: input.domain, result, text: renderDrugSafety(result) };
161
+ }
162
+ case "food_safety": {
163
+ const result = unwrapResult(await runFoodSafety({
164
+ action: normalizeFoodSafetyAction(input.action),
165
+ query: queryOrEmpty(input),
166
+ ...(input.limit === undefined ? {} : { limit: input.limit }),
167
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
168
+ }));
169
+ return { source: "smartvertical", domain: input.domain, result, text: renderFoodSafety(result) };
170
+ }
171
+ case "news": {
172
+ const sort = normalizeSort(input.sort, ["sim", "date"]);
173
+ const result = unwrapResult(await runNaverNews({
174
+ query: queryOrEmpty(input),
175
+ ...(input.display === undefined ? {} : { display: input.display }),
176
+ ...(input.start === undefined ? {} : { start: input.start }),
177
+ ...(sort === undefined ? {} : { sort }),
178
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
179
+ }));
180
+ return { source: "smartvertical", domain: input.domain, result, text: renderNaverNews(result) };
181
+ }
182
+ case "aliexpress": {
183
+ const result = unwrapResult(await runAliExpress({
184
+ query: queryOrEmpty(input),
185
+ ...(input.limit === undefined ? {} : { limit: input.limit }),
186
+ ...(input.locale === undefined ? {} : { locale: input.locale }),
187
+ ...(input.currency === undefined ? {} : { currency: input.currency }),
188
+ ...(input.ship_to === undefined ? {} : { shipTo: input.ship_to }),
189
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
190
+ }));
191
+ return { source: "smartvertical", domain: input.domain, result, text: renderAliExpress(result) };
192
+ }
193
+ case "shopping": {
194
+ const sort = normalizeSort(input.sort, ["rel", "date", "price_asc", "price_dsc", "review"]);
195
+ const result = unwrapResult(await runNaverShopping({
196
+ query: queryOrEmpty(input),
197
+ ...(input.limit === undefined ? {} : { limit: input.limit }),
198
+ ...(sort === undefined ? {} : { sort }),
199
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
200
+ }));
201
+ return { source: "smartvertical", domain: input.domain, result, text: renderNaverShopping(result) };
202
+ }
203
+ case "coupang": {
204
+ const action = normalizeCoupangAction(input.action);
205
+ const result = unwrapResult(await runCoupang({
206
+ ...(action === undefined ? {} : { action }),
207
+ ...(input.query === undefined ? {} : { query: input.query }),
208
+ ...(input.max_price === undefined ? {} : { maxPrice: input.max_price }),
209
+ ...(input.limit === undefined ? {} : { limit: input.limit }),
210
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
211
+ }));
212
+ return { source: "smartvertical", domain: input.domain, result, text: renderCoupang(result) };
213
+ }
214
+ case "spellcheck": {
215
+ const result = unwrapResult(await runSpellCheck({
216
+ text: input.text || input.query || "",
217
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
218
+ }));
219
+ return { source: "smartvertical", domain: input.domain, result, text: renderSpellCheck(result) };
220
+ }
221
+ case "zipcode": {
222
+ const result = unwrapResult(await runZipcode({
223
+ query: queryOrEmpty(input),
224
+ ...(input.limit === undefined ? {} : { limit: input.limit }),
225
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
226
+ }));
227
+ return { source: "smartvertical", domain: input.domain, result, text: renderZipcode(result) };
228
+ }
229
+ case "law": {
230
+ const result = unwrapResult(await runLaw({
231
+ action: normalizeLawAction(input.action),
232
+ ...(input.query === undefined ? {} : { query: input.query }),
233
+ ...(input.law_id === undefined ? {} : { law_id: input.law_id }),
234
+ ...(input.article === undefined ? {} : { article: input.article }),
235
+ ...(input.limit === undefined ? {} : { limit: input.limit }),
236
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
237
+ }));
238
+ return { source: "smartvertical", domain: input.domain, result, text: renderLaw(result) };
239
+ }
240
+ case "place": {
241
+ const sort = normalizeSort(input.sort, ["blended", "relevance", "distance", "rating", "review_count"]);
242
+ const result = await runPlaceSearch({
243
+ ...(input.query === undefined ? {} : { query: input.query }),
244
+ ...(input.location === undefined ? {} : { location: input.location }),
245
+ ...(input.lat === undefined ? {} : { lat: input.lat }),
246
+ ...(input.lon === undefined ? {} : { lon: input.lon }),
247
+ ...(input.radius_m === undefined ? {} : { radiusM: input.radius_m }),
248
+ ...(input.limit === undefined ? {} : { limit: input.limit }),
249
+ ...(input.intent === undefined ? {} : { intent: input.intent }),
250
+ ...(sort === undefined ? {} : { sort }),
251
+ ...(input.providers === undefined ? {} : { providers: input.providers }),
252
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
253
+ });
254
+ return { source: "smartvertical", domain: input.domain, result, text: renderPlaceSearch(result) };
255
+ }
256
+ case "public_restroom": {
257
+ const result = await runPublicRestroom({
258
+ location: queryOrEmpty(input),
259
+ ...(input.lat === undefined ? {} : { lat: input.lat }),
260
+ ...(input.lon === undefined ? {} : { lon: input.lon }),
261
+ ...(input.radius_km === undefined ? {} : { radiusKm: input.radius_km }),
262
+ ...(input.limit === undefined ? {} : { limit: input.limit }),
263
+ ...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
264
+ });
265
+ return { source: "smartvertical", domain: input.domain, result, text: renderPublicRestroom(result) };
266
+ }
267
+ }
268
+ }
269
+ export function renderSmartvertical(output) {
270
+ return output.text;
271
+ }
272
+ //# sourceMappingURL=smartvertical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smartvertical.js","sourceRoot":"","sources":["../../src/korea/smartvertical.ts"],"names":[],"mappings":"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"}