tempmail-sdk 1.1.4 → 1.1.6

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 CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm version](https://badge.fury.io/js/tempmail-sdk.svg)](https://www.npmjs.com/package/tempmail-sdk)
4
4
  [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
5
5
 
6
- 临时邮箱 SDK(TypeScript/Node.js),支持 11 个邮箱服务提供商,所有渠道返回**统一标准化格式**。
6
+ 临时邮箱 SDK(TypeScript/Node.js),支持 **16** 个邮箱服务提供商,所有渠道返回**统一标准化格式**。
7
7
 
8
8
  ## 安装
9
9
 
@@ -25,11 +25,16 @@ npm install @XxxXTeam/tempmail-sdk --registry=https://npm.pkg.github.com
25
25
  | `chatgpt-org-uk` | mail.chatgpt.org.uk | ✅ | 首页注入 `__BROWSER_AUTH`,创建邮箱时须带 `X-Inbox-Token` + `gm_sid`(已自动处理) |
26
26
  | `temp-mail-io` | temp-mail.io | - | |
27
27
  | `awamail` | awamail.com | ✅ | Session Cookie 自动管理 |
28
+ | `temporary-email-org` | temporary-email.org | ✅ | `GET /zh/messages` 下发 Cookie;收信须 `X-Requested-With: XMLHttpRequest` |
28
29
  | `mail-tm` | mail.tm / api.mail.tm | ✅ | 自动注册账号;请求与 **Internxt** 等站点前端一致(`GET /domains?page=1`、`GET /messages?page=1` 及常见浏览器头) |
29
- | `smail-pw` | smail.pw | ✅ | `POST/GET https://smail.pw/_root.data`,`__session` Cookie;解析 RSC/Flight 中的 **D1 邮件行对象**(`subject`/`time` 等) |
30
30
  | `dropmail` | dropmail.me | ✅ | GraphQL API |
31
31
  | `guerrillamail` | guerrillamail.com | ✅ | 公开 JSON API |
32
- | `maildrop` | maildrop.cc | ✅ | GraphQL API,自带反垃圾 |
32
+ | `maildrop` | maildrop.cc | ✅ | GraphQL;`data` MIME 源码,解析 plain/multipart/Base64/QP,HTML 兜底 `text` |
33
+ | `smail-pw` | smail.pw | ✅ | `POST/GET https://smail.pw/_root.data`,`__session` Cookie;解析 RSC/Flight 中的 **D1 邮件行对象**(`subject`/`time` 等) |
34
+ | `boomlify` | boomlify.com | - | `domains/public` + `emails/public/create`;地址 `{UUID}@{域名}` |
35
+ | `minmail` | minmail.app | ✅ | `visitor-id` / `ck` 等序列化在 token(JSON) |
36
+ | `mffac` | mffac.com | - | REST API,24h 有效期 |
37
+ | `vip-215` | vip.215.im | ✅ | `POST` 建箱 + `wss`;无正文时 synthetic 兜底 |
33
38
 
34
39
  > **提示:** 使用 `TempEmailClient` 类时无需手动处理 Token,SDK 自动管理。
35
40
 
@@ -282,7 +287,6 @@ DropMail 自动令牌等更多配置见源码 `src/config.ts` 注释(`DROPMAIL
282
287
  | 命令 / 文件 | 说明 |
283
288
  |-------------|------|
284
289
  | `npx ts-node demo/poll-emails.ts` | 未配置 SMTP 时为交互式选渠道并轮询;配置 `SMTP_HOST` 等后可自动向各渠道发探针并轮询(`POLL_CHANNELS`、`POLL_INTERVAL_MS`、`POLL_MAX_ROUNDS`) |
285
- | `npm run demo:internxt` | `demo/internxt-tempmail-probe.ts`:检查 Internxt 页面与 **Mail.tm(SDK `mail-tm`)** 全流程 |
286
290
 
287
291
  `poll-emails` 使用 SMTP 时需安装:`npm install nodemailer @types/nodemailer`(若尚未加入 devDependencies)。
288
292
 
package/dist/index.js CHANGED
@@ -40,15 +40,21 @@ exports.generateEmail = generateEmail;
40
40
  exports.getEmails = getEmails;
41
41
  const tempmail = __importStar(require("./providers/tempmail"));
42
42
  const linshiEmail = __importStar(require("./providers/linshi-email"));
43
+ const linshiyou = __importStar(require("./providers/linshiyou"));
44
+ const mffac = __importStar(require("./providers/mffac"));
43
45
  const tempmailLol = __importStar(require("./providers/tempmail-lol"));
44
46
  const chatgptOrgUk = __importStar(require("./providers/chatgpt-org-uk"));
45
47
  const tempMailIO = __importStar(require("./providers/temp-mail-io"));
46
48
  const awamail = __importStar(require("./providers/awamail"));
49
+ const temporaryEmailOrg = __importStar(require("./providers/temporary-email-org"));
47
50
  const mailTm = __importStar(require("./providers/mail-tm"));
48
51
  const dropmail = __importStar(require("./providers/dropmail"));
49
52
  const guerrillamail = __importStar(require("./providers/guerrillamail"));
50
53
  const maildropProvider = __importStar(require("./providers/maildrop"));
51
54
  const smailPw = __importStar(require("./providers/smail-pw"));
55
+ const boomlify = __importStar(require("./providers/boomlify"));
56
+ const minmail = __importStar(require("./providers/minmail"));
57
+ const vip215 = __importStar(require("./providers/vip-215"));
52
58
  const retry_1 = require("./retry");
53
59
  const logger_1 = require("./logger");
54
60
  const config_1 = require("./config");
@@ -78,35 +84,27 @@ Object.defineProperty(exports, "deriveLinshiApiPathKey", { enumerable: true, get
78
84
  Object.defineProperty(exports, "randomSyntheticLinshiKey", { enumerable: true, get: function () { return linshi_token_1.randomSyntheticLinshiKey; } });
79
85
  Object.defineProperty(exports, "randomBrowserLikeProfile", { enumerable: true, get: function () { return linshi_token_1.randomBrowserLikeProfile; } });
80
86
  Object.defineProperty(exports, "syntheticVisitorIdFromProfile", { enumerable: true, get: function () { return linshi_token_1.syntheticVisitorIdFromProfile; } });
81
- /** 渠道名称到 provider 实现的映射表 */
82
- const providers = {
83
- 'tempmail': tempmail,
84
- 'linshi-email': linshiEmail,
85
- 'tempmail-lol': tempmailLol,
86
- 'chatgpt-org-uk': chatgptOrgUk,
87
- 'temp-mail-io': tempMailIO,
88
- 'awamail': awamail,
89
- 'mail-tm': mailTm,
90
- 'dropmail': dropmail,
91
- 'guerrillamail': guerrillamail,
92
- 'maildrop': maildropProvider,
93
- 'smail-pw': smailPw,
94
- };
95
87
  /** 所有支持的渠道列表,用于随机选择和遍历 */
96
- const allChannels = ['tempmail', 'linshi-email', 'tempmail-lol', 'chatgpt-org-uk', 'temp-mail-io', 'awamail', 'mail-tm', 'dropmail', 'guerrillamail', 'maildrop', 'smail-pw'];
88
+ const allChannels = ['tempmail', 'linshi-email', 'linshiyou', 'mffac', 'tempmail-lol', 'chatgpt-org-uk', 'temp-mail-io', 'awamail', 'temporary-email-org', 'mail-tm', 'dropmail', 'guerrillamail', 'maildrop', 'smail-pw', 'boomlify', 'minmail', 'vip-215'];
97
89
  /** 渠道信息映射表 */
98
90
  const channelInfoMap = {
99
91
  'tempmail': { channel: 'tempmail', name: 'TempMail', website: 'tempmail.ing' },
100
92
  'linshi-email': { channel: 'linshi-email', name: '临时邮箱', website: 'linshi-email.com' },
93
+ 'linshiyou': { channel: 'linshiyou', name: '临时邮', website: 'linshiyou.com' },
101
94
  'tempmail-lol': { channel: 'tempmail-lol', name: 'TempMail LOL', website: 'tempmail.lol' },
102
95
  'chatgpt-org-uk': { channel: 'chatgpt-org-uk', name: 'ChatGPT Mail', website: 'mail.chatgpt.org.uk' },
103
96
  'temp-mail-io': { channel: 'temp-mail-io', name: 'Temp Mail IO', website: 'temp-mail.io' },
104
97
  'awamail': { channel: 'awamail', name: 'AwaMail', website: 'awamail.com' },
98
+ 'temporary-email-org': { channel: 'temporary-email-org', name: 'Temporary Email', website: 'temporary-email.org' },
105
99
  'mail-tm': { channel: 'mail-tm', name: 'Mail.tm', website: 'mail.tm' },
106
100
  'dropmail': { channel: 'dropmail', name: 'DropMail', website: 'dropmail.me' },
107
101
  'guerrillamail': { channel: 'guerrillamail', name: 'Guerrilla Mail', website: 'guerrillamail.com' },
108
102
  'maildrop': { channel: 'maildrop', name: 'Maildrop', website: 'maildrop.cc' },
109
103
  'smail-pw': { channel: 'smail-pw', name: 'Smail.pw', website: 'smail.pw' },
104
+ 'boomlify': { channel: 'boomlify', name: 'Boomlify', website: 'boomlify.com' },
105
+ 'minmail': { channel: 'minmail', name: 'MinMail', website: 'minmail.app' },
106
+ 'mffac': { channel: 'mffac', name: 'MFFAC', website: 'mffac.com' },
107
+ 'vip-215': { channel: 'vip-215', name: 'VIP 215', website: 'vip.215.im' },
110
108
  };
111
109
  /**
112
110
  * 获取所有支持的渠道列表
@@ -207,6 +205,8 @@ async function generateEmailOnce(channel, options) {
207
205
  return tempmail.generateEmail(options.duration || 30);
208
206
  case 'linshi-email':
209
207
  return linshiEmail.generateEmail();
208
+ case 'linshiyou':
209
+ return linshiyou.generateEmail();
210
210
  case 'tempmail-lol':
211
211
  return tempmailLol.generateEmail(options.domain || null);
212
212
  case 'chatgpt-org-uk':
@@ -215,6 +215,8 @@ async function generateEmailOnce(channel, options) {
215
215
  return tempMailIO.generateEmail();
216
216
  case 'awamail':
217
217
  return awamail.generateEmail();
218
+ case 'temporary-email-org':
219
+ return temporaryEmailOrg.generateEmail();
218
220
  case 'mail-tm':
219
221
  return mailTm.generateEmail();
220
222
  case 'dropmail':
@@ -225,6 +227,14 @@ async function generateEmailOnce(channel, options) {
225
227
  return maildropProvider.generateEmail();
226
228
  case 'smail-pw':
227
229
  return smailPw.generateEmail();
230
+ case 'boomlify':
231
+ return boomlify.generateEmail();
232
+ case 'mffac':
233
+ return mffac.generateEmail();
234
+ case 'minmail':
235
+ return minmail.generateEmail();
236
+ case 'vip-215':
237
+ return vip215.generateEmail();
228
238
  default:
229
239
  throw new Error(`Unknown channel: ${channel}`);
230
240
  }
@@ -295,6 +305,10 @@ async function getEmailsOnce(channel, email, token) {
295
305
  if (!token)
296
306
  throw new Error('internal error: token missing for linshi-email');
297
307
  return linshiEmail.getEmails(email, token);
308
+ case 'linshiyou':
309
+ if (!token)
310
+ throw new Error('internal error: token missing for linshiyou');
311
+ return linshiyou.getEmails(token, email);
298
312
  case 'tempmail-lol':
299
313
  if (!token)
300
314
  throw new Error('internal error: token missing for tempmail-lol');
@@ -309,6 +323,10 @@ async function getEmailsOnce(channel, email, token) {
309
323
  if (!token)
310
324
  throw new Error('internal error: token missing for awamail');
311
325
  return awamail.getEmails(token, email);
326
+ case 'temporary-email-org':
327
+ if (!token)
328
+ throw new Error('internal error: token missing for temporary-email-org');
329
+ return temporaryEmailOrg.getEmails(email, token);
312
330
  case 'mail-tm':
313
331
  if (!token)
314
332
  throw new Error('internal error: token missing for mail-tm');
@@ -329,6 +347,18 @@ async function getEmailsOnce(channel, email, token) {
329
347
  if (!token)
330
348
  throw new Error('internal error: token missing for smail-pw');
331
349
  return smailPw.getEmails(token, email);
350
+ case 'boomlify':
351
+ return boomlify.getEmails(email);
352
+ case 'mffac':
353
+ return mffac.getEmails(email, token);
354
+ case 'minmail':
355
+ if (!token)
356
+ throw new Error('internal error: token missing for minmail');
357
+ return minmail.getEmails(email, token);
358
+ case 'vip-215':
359
+ if (!token)
360
+ throw new Error('internal error: token missing for vip-215');
361
+ return vip215.getEmails(token, email);
332
362
  default:
333
363
  throw new Error(`Unknown channel: ${channel}`);
334
364
  }
@@ -393,4 +423,4 @@ exports.default = {
393
423
  setConfig: config_1.setConfig,
394
424
  getConfig: config_1.getConfig,
395
425
  };
396
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkZBLG9DQUVDO0FBUUQsd0NBRUM7QUFvQkQsc0NBaUNDO0FBMEVELDhCQWdDQztBQXhRRCwrREFBaUQ7QUFDakQsc0VBQXdEO0FBQ3hELHNFQUF3RDtBQUN4RCx5RUFBMkQ7QUFDM0QscUVBQXVEO0FBQ3ZELDZEQUErQztBQUMvQyw0REFBOEM7QUFDOUMsK0RBQWlEO0FBQ2pELHlFQUEyRDtBQUMzRCx1RUFBeUQ7QUFDekQsOERBQWdEO0FBRWhELG1DQUFrRDtBQUNsRCxxQ0FBa0M7QUFDbEMscUNBQWdEO0FBSWhEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQXFCLENBQUM7QUFDcEQseUNBQTZDO0FBQXBDLDJHQUFBLGNBQWMsT0FBQTtBQUN2QixpQ0FBb0U7QUFBM0Qsa0dBQUEsU0FBUyxPQUFBO0FBQUUseUdBQUEsZ0JBQWdCLE9BQUE7QUFDcEMsbUNBQTZGO0FBQXBGLGtHQUFBLFFBQVEsT0FBQTtBQUFjLHFHQUFBLFdBQVcsT0FBQTtBQUFFLHFHQUFBLFdBQVcsT0FBQTtBQUFFLG1HQUFBLFNBQVMsT0FBQTtBQUFFLGdHQUFBLE1BQU0sT0FBQTtBQUMxRSxtQ0FBMkQ7QUFBdkMsbUdBQUEsU0FBUyxPQUFBO0FBQUUsbUdBQUEsU0FBUyxPQUFBO0FBRXhDLHlEQUtrQztBQUpoQyxzSEFBQSxzQkFBc0IsT0FBQTtBQUN0Qix3SEFBQSx3QkFBd0IsT0FBQTtBQUN4Qix3SEFBQSx3QkFBd0IsT0FBQTtBQUN4Qiw2SEFBQSw2QkFBNkIsT0FBQTtBQUcvQiw0QkFBNEI7QUFDNUIsTUFBTSxTQUFTLEdBQUc7SUFDaEIsVUFBVSxFQUFFLFFBQVE7SUFDcEIsY0FBYyxFQUFFLFdBQVc7SUFDM0IsY0FBYyxFQUFFLFdBQVc7SUFD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QyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekM7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFhLGVBQWU7SUFBNUI7UUFDVSxjQUFTLEdBQXFCLElBQUksQ0FBQztJQWlDN0MsQ0FBQztJQS9CQzs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFnQyxFQUFFO1FBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBMEI7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBbENELDBDQWtDQztBQUVELGtCQUFlO0lBQ2IsWUFBWTtJQUNaLGNBQWM7SUFDZCxhQUFhO0lBQ2IsU0FBUztJQUNULGVBQWU7SUFDZixTQUFTLEVBQVQsa0JBQVM7SUFDVCxTQUFTLEVBQVQsa0JBQVM7Q0FDVixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdGVtcG1haWwgZnJvbSAnLi9wcm92aWRlcnMvdGVtcG1haWwnO1xuaW1wb3J0ICogYXMgbGluc2hpRW1haWwgZnJvbSAnLi9wcm92aWRlcnMvbGluc2hpLWVtYWlsJztcbmltcG9ydCAqIGFzIHRlbXBtYWlsTG9sIGZyb20gJy4vcHJvdmlkZXJzL3RlbXBtYWlsLWxvbCc7XG5pbXBvcnQgKiBhcyBjaGF0Z3B0T3JnVWsgZnJvbSAnLi9wcm92aWRlcnMvY2hhdGdwdC1vcmctdWsnO1xuaW1wb3J0ICogYXMgdGVtcE1haWxJTyBmcm9tICcuL3Byb3ZpZGVycy90ZW1wLW1haWwtaW8nO1xuaW1wb3J0ICogYXMgYXdhbWFpbCBmcm9tICcuL3Byb3ZpZGVycy9hd2FtYWlsJztcbmltcG9ydCAqIGFzIG1haWxUbSBmcm9tICcuL3Byb3ZpZGVycy9tYWlsLXRtJztcbmltcG9ydCAqIGFzIGRyb3BtYWlsIGZyb20gJy4vcHJvdmlkZXJzL2Ryb3BtYWlsJztcbmltcG9ydCAqIGFzIGd1ZXJyaWxsYW1haWwgZnJvbSAnLi9wcm92aWRlcnMvZ3VlcnJpbGxhbWFpbCc7XG5pbXBvcnQgKiBhcyBtYWlsZHJvcFByb3ZpZGVyIGZyb20gJy4vcHJvdmlkZXJzL21haWxkcm9wJztcbmltcG9ydCAqIGFzIHNtYWlsUHcgZnJvbSAnLi9wcm92aWRlcnMvc21haWwtcHcnO1xuaW1wb3J0IHsgQ2hhbm5lbCwgRW1haWxJbmZvLCBJbnRlcm5hbEVtYWlsSW5mbywgRW1haWwsIEVtYWlsQXR0YWNobWVudCwgR2V0RW1haWxzUmVzdWx0LCBHZW5lcmF0ZUVtYWlsT3B0aW9ucywgR2V0RW1haWxzT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgd2l0aFJldHJ5LCBSZXRyeU9wdGlvbnMgfSBmcm9tICcuL3JldHJ5JztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNldENvbmZpZywgZ2V0Q29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuXG5leHBvcnQgeyBDaGFubmVsLCBFbWFpbEluZm8sIEVtYWlsLCBFbWFpbEF0dGFjaG1lbnQsIEdldEVtYWlsc1Jlc3VsdCwgR2VuZXJhdGVFbWFpbE9wdGlvbnMsIEdldEVtYWlsc09wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBTREsg5YaF6YOoIHRva2VuIOWtmOWCqFxuICog5L2/55SoIFdlYWtNYXAg5bCGIEVtYWlsSW5mbyDlr7nosaHmmKDlsITliLDlr7nlupTnmoQgdG9rZW5cbiAqIOeUqOaIt+aXoOazleebtOaOpeiuv+mXriB0b2tlbu+8jOeUsSBTREsg6Ieq5Yqo566h55CGXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgdG9rZW5TdG9yZSA9IG5ldyBXZWFrTWFwPEVtYWlsSW5mbywgc3RyaW5nPigpO1xuZXhwb3J0IHsgbm9ybWFsaXplRW1haWwgfSBmcm9tICcuL25vcm1hbGl6ZSc7XG5leHBvcnQgeyB3aXRoUmV0cnksIGZldGNoV2l0aFRpbWVvdXQsIFJldHJ5T3B0aW9ucyB9IGZyb20gJy4vcmV0cnknO1xuZXhwb3J0IHsgTG9nTGV2ZWwsIExvZ0hhbmRsZXIsIHNldExvZ0xldmVsLCBnZXRMb2dMZXZlbCwgc2V0TG9nZ2VyLCBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5leHBvcnQgeyBTREtDb25maWcsIHNldENvbmZpZywgZ2V0Q29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuZXhwb3J0IHR5cGUgeyBTeW50aGV0aWNCcm93c2VyUHJvZmlsZSB9IGZyb20gJy4vcHJvdmlkZXJzL2xpbnNoaS10b2tlbic7XG5leHBvcnQge1xuICBkZXJpdmVMaW5zaGlBcGlQYXRoS2V5LFxuICByYW5kb21TeW50aGV0aWNMaW5zaGlLZXksXG4gIHJhbmRvbUJyb3dzZXJMaWtlUHJvZmlsZSxcbiAgc3ludGhldGljVmlzaXRvcklkRnJvbVByb2ZpbGUsXG59IGZyb20gJy4vcHJvdmlkZXJzL2xpbnNoaS10b2tlbic7XG5cbi8qKiDmuKDpgZPlkI3np7DliLAgcHJvdmlkZXIg5a6e546w55qE5pig5bCE6KGoICovXG5jb25zdCBwcm92aWRlcnMgPSB7XG4gICd0ZW1wbWFpbCc6IHRlbXBtYWlsLFxuICAnbGluc2hpLWVtYWlsJzogbGluc2hpRW1haWwsXG4gICd0ZW1wbWFpbC1sb2wnOiB0ZW1wbWFpbExvbCxcbiAgJ2NoYXRncHQtb3JnLXVrJzogY2hhdGdwdE9yZ1VrLFxuICAndGVtcC1tYWlsLWlvJzogdGVtcE1haWxJTyxcbiAgJ2F3YW1haWwnOiBhd2FtYWlsLFxuICAnbWFpbC10bSc6IG1haWxUbSxcbiAgJ2Ryb3BtYWlsJzogZHJvcG1haWwsXG4gICdndWVycmlsbGFtYWlsJzogZ3VlcnJpbGxhbWFpbCxcbiAgJ21haWxkcm9wJzogbWFpbGRyb3BQcm92aWRlcixcbiAgJ3NtYWlsLXB3Jzogc21haWxQdyxcbn07XG5cbi8qKiDmiYDmnInmlK/mjIHnmoTmuKDpgZPliJfooajvvIznlKjkuo7pmo/mnLrpgInmi6nlkozpgY3ljoYgKi9cbmNvbnN0IGFsbENoYW5uZWxzOiBDaGFubmVsW10gPSBbJ3RlbXBtYWlsJywgJ2xpbnNoaS1lbWFpbCcsICd0ZW1wbWFpbC1sb2wnLCAnY2hhdGdwdC1vcmctdWsnLCAndGVtcC1tYWlsLWlvJywgJ2F3YW1haWwnLCAnbWFpbC10bScsICdkcm9wbWFpbCcsICdndWVycmlsbGFtYWlsJywgJ21haWxkcm9wJywgJ3NtYWlsLXB3J107XG5cbi8qKlxuICog5rig6YGT5L+h5oGv77yM5YyF5ZCr5rig6YGT5qCH6K+G44CB5pi+56S65ZCN56ew5ZKM5a+55bqU572R56uZXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbm5lbEluZm8ge1xuICAvKiog5rig6YGT5qCH6K+GICovXG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIC8qKiDmuKDpgZPmmL7npLrlkI3np7AgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiog5a+55bqU55qE5Li05pe26YKu566x5pyN5Yqh572R56uZICovXG4gIHdlYnNpdGU6IHN0cmluZztcbn1cblxuLyoqIOa4oOmBk+S/oeaBr+aYoOWwhOihqCAqL1xuY29uc3QgY2hhbm5lbEluZm9NYXA6IFJlY29yZDxDaGFubmVsLCBDaGFubmVsSW5mbz4gPSB7XG4gICd0ZW1wbWFpbCc6IHsgY2hhbm5lbDogJ3RlbXBtYWlsJywgbmFtZTogJ1RlbXBNYWlsJywgd2Vic2l0ZTogJ3RlbXBtYWlsLmluZycgfSxcbiAgJ2xpbnNoaS1lbWFpbCc6IHsgY2hhbm5lbDogJ2xpbnNoaS1lbWFpbCcsIG5hbWU6ICfkuLTml7bpgq7nrrEnLCB3ZWJzaXRlOiAnbGluc2hpLWVtYWlsLmNvbScgfSxcbiAgJ3RlbXBtYWlsLWxvbCc6IHsgY2hhbm5lbDogJ3RlbXBtYWlsLWxvbCcsIG5hbWU6ICdUZW1wTWFpbCBMT0wnLCB3ZWJzaXRlOiAndGVtcG1haWwubG9sJyB9LFxuICAnY2hhdGdwdC1vcmctdWsnOiB7IGNoYW5uZWw6ICdjaGF0Z3B0LW9yZy11aycsIG5hbWU6ICdDaGF0R1BUIE1haWwnLCB3ZWJzaXRlOiAnbWFpbC5jaGF0Z3B0Lm9yZy51aycgfSxcbiAgJ3RlbXAtbWFpbC1pbyc6IHsgY2hhbm5lbDogJ3RlbXAtbWFpbC1pbycsIG5hbWU6ICdUZW1wIE1haWwgSU8nLCB3ZWJzaXRlOiAndGVtcC1tYWlsLmlvJyB9LFxuICAnYXdhbWFpbCc6IHsgY2hhbm5lbDogJ2F3YW1haWwnLCBuYW1lOiAnQXdhTWFpbCcsIHdlYnNpdGU6ICdhd2FtYWlsLmNvbScgfSxcbiAgJ21haWwtdG0nOiB7IGNoYW5uZWw6ICdtYWlsLXRtJywgbmFtZTogJ01haWwudG0nLCB3ZWJzaXRlOiAnbWFpbC50bScgfSxcbiAgJ2Ryb3BtYWlsJzogeyBjaGFubmVsOiAnZHJvcG1haWwnLCBuYW1lOiAnRHJvcE1haWwnLCB3ZWJzaXRlOiAnZHJvcG1haWwubWUnIH0sXG4gICdndWVycmlsbGFtYWlsJzogeyBjaGFubmVsOiAnZ3VlcnJpbGxhbWFpbCcsIG5hbWU6ICdHdWVycmlsbGEgTWFpbCcsIHdlYnNpdGU6ICdndWVycmlsbGFtYWlsLmNvbScgfSxcbiAgJ21haWxkcm9wJzogeyBjaGFubmVsOiAnbWFpbGRyb3AnLCBuYW1lOiAnTWFpbGRyb3AnLCB3ZWJzaXRlOiAnbWFpbGRyb3AuY2MnIH0sXG4gICdzbWFpbC1wdyc6IHsgY2hhbm5lbDogJ3NtYWlsLXB3JywgbmFtZTogJ1NtYWlsLnB3Jywgd2Vic2l0ZTogJ3NtYWlsLnB3JyB9LFxufTtcblxuLyoqXG4gKiDojrflj5bmiYDmnInmlK/mjIHnmoTmuKDpgZPliJfooahcbiAqXG4gKiBAcmV0dXJucyDmiYDmnInmuKDpgZPnmoTkv6Hmga/mlbDnu4RcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGNoYW5uZWxzID0gbGlzdENoYW5uZWxzKCk7XG4gKiBjaGFubmVscy5mb3JFYWNoKGNoID0+IGNvbnNvbGUubG9nKGAke2NoLm5hbWV9ICgke2NoLndlYnNpdGV9KWApKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdENoYW5uZWxzKCk6IENoYW5uZWxJbmZvW10ge1xuICByZXR1cm4gYWxsQ2hhbm5lbHMubWFwKGNoID0+IGNoYW5uZWxJbmZvTWFwW2NoXSk7XG59XG5cbi8qKlxuICog6I635Y+W5oyH5a6a5rig6YGT55qE6K+m57uG5L+h5oGvXG4gKlxuICogQHBhcmFtIGNoYW5uZWwgLSDmuKDpgZPmoIfor4ZcbiAqIEByZXR1cm5zIOa4oOmBk+S/oeaBr++8jOS4jeWtmOWcqOaXtui/lOWbniB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoYW5uZWxJbmZvKGNoYW5uZWw6IENoYW5uZWwpOiBDaGFubmVsSW5mbyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjaGFubmVsSW5mb01hcFtjaGFubmVsXTtcbn1cblxuLyoqXG4gKiDliJvlu7rkuLTml7bpgq7nrrFcbiAqXG4gKiDplJnor6/lpITnkIbnrZbnlaXvvJpcbiAqIC0g5oyH5a6a5rig6YGT5aSx6LSl5pe277yM6buY6K6k6Ieq5Yqo5bCd6K+V5YW25LuW5Y+v55So5rig6YGT77yI5omT5Lmx6aG65bqP6YCQ5Liq5bCd6K+V77yJXG4gKiAtIGBjaGFubmVsRmFsbGJhY2s6IGZhbHNlYCDkuJTmjIflrprkuoYgYGNoYW5uZWxgIOaXtu+8jOS7heWwneivleivpea4oOmBk++8jOWksei0peWNs+i/lOWbniBudWxsXG4gKiAtIOacquaMh+Wumua4oOmBk+aXtu+8jOaJk+S5seWFqOmDqOa4oOmBk+mAkOS4quWwneivle+8jOebtOWIsOaIkOWKn1xuICogLSDmiYDmnInmuKDpgZPlnYfkuI3lj6/nlKjml7bov5Tlm54gbnVsbO+8iOS4jeaKm+WHuuW8guW4uO+8iVxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0g5Yib5bu66YCJ6aG577yM5Y+v5oyH5a6a5rig6YGT44CB5pyJ5pWI5pe26ZW/44CB5Z+f5ZCN562JXG4gKiBAcmV0dXJucyDpgq7nrrHkv6Hmga/vvIzmiYDmnInmuKDpgZPlnYfkuI3lj6/nlKjml7bov5Tlm54gbnVsbFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgZW1haWxJbmZvID0gYXdhaXQgZ2VuZXJhdGVFbWFpbCh7IGNoYW5uZWw6ICd0ZW1wLW1haWwtaW8nIH0pO1xuICogaWYgKGVtYWlsSW5mbykgY29uc29sZS5sb2coZW1haWxJbmZvLmVtYWlsKTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFbWFpbChvcHRpb25zOiBHZW5lcmF0ZUVtYWlsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxFbWFpbEluZm8gfCBudWxsPiB7XG4gIC8qXG4gICAqIOaehOW7uuWwneivlemhuuW6j++8mlxuICAgKiAtIOaMh+Wumua4oOmBkyDihpIg5LyY5YWI5bCd6K+V6K+l5rig6YGT77yM5aSx6LSl5ZCO6ZqP5py65bCd6K+V5YW25LuW5rig6YGTXG4gICAqIC0g5pyq5oyH5a6aIOKGkiDmiZPkubHlhajpg6jmuKDpgZPpgJDkuKrlsJ3or5VcbiAgICovXG4gIGNvbnN0IGFsbG93RmFsbGJhY2sgPSBvcHRpb25zLmNoYW5uZWxGYWxsYmFjayAhPT0gZmFsc2U7XG4gIGNvbnN0IHRyeU9yZGVyID0gYnVpbGRDaGFubmVsT3JkZXIob3B0aW9ucy5jaGFubmVsLCBhbGxvd0ZhbGxiYWNrKTtcblxuICBmb3IgKGNvbnN0IGNoIG9mIHRyeU9yZGVyKSB7XG4gICAgbG9nZ2VyLmluZm8oYOWIm+W7uuS4tOaXtumCrueusSwg5rig6YGTOiAke2NofWApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnRlcm5hbDogSW50ZXJuYWxFbWFpbEluZm8gPSBhd2FpdCB3aXRoUmV0cnkoKCkgPT4gZ2VuZXJhdGVFbWFpbE9uY2UoY2gsIG9wdGlvbnMpLCBvcHRpb25zLnJldHJ5KTtcbiAgICAgIGxvZ2dlci5pbmZvKGDpgq7nrrHliJvlu7rmiJDlip86ICR7aW50ZXJuYWwuZW1haWx9ICjmuKDpgZM6ICR7Y2h9KWApO1xuXG4gICAgICAvKiDlsIYgdG9rZW4g5a2Y5YWl5YaF6YOo5a2Y5YKo77yM5LiN5pq06Zyy57uZ55So5oi3ICovXG4gICAgICBjb25zdCBwdWJsaWNJbmZvOiBFbWFpbEluZm8gPSB7XG4gICAgICAgIGNoYW5uZWw6IGludGVybmFsLmNoYW5uZWwsXG4gICAgICAgIGVtYWlsOiBpbnRlcm5hbC5lbWFpbCxcbiAgICAgICAgZXhwaXJlc0F0OiBpbnRlcm5hbC5leHBpcmVzQXQsXG4gICAgICAgIGNyZWF0ZWRBdDogaW50ZXJuYWwuY3JlYXRlZEF0LFxuICAgICAgfTtcbiAgICAgIGlmIChpbnRlcm5hbC50b2tlbikge1xuICAgICAgICB0b2tlblN0b3JlLnNldChwdWJsaWNJbmZvLCBpbnRlcm5hbC50b2tlbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHVibGljSW5mbztcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgbG9nZ2VyLndhcm4oYOa4oOmBkyAke2NofSDkuI3lj6/nlKg6ICR7ZXJyLm1lc3NhZ2UgfHwgZXJyfe+8jOWwneivleS4i+S4gOS4qua4oOmBk2ApO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5lcnJvcign5omA5pyJ5rig6YGT5Z2H5LiN5Y+v55So77yM5Yib5bu66YKu566x5aSx6LSlJyk7XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIOaehOW7uua4oOmBk+WwneivlemhuuW6j1xuICog5oyH5a6a5rig6YGT5pe25LyY5YWI5bCd6K+V6K+l5rig6YGT77yM5YW25L2Z5rig6YGT5omT5Lmx6L+95YqgXG4gKiDmnKrmjIflrprml7bmiZPkubHlhajpg6jmuKDpgZNcbiAqL1xuZnVuY3Rpb24gYnVpbGRDaGFubmVsT3JkZXIocHJlZmVycmVkPzogQ2hhbm5lbCwgYWxsb3dGYWxsYmFjayA9IHRydWUpOiBDaGFubmVsW10ge1xuICBjb25zdCBzaHVmZmxlZCA9IFsuLi5hbGxDaGFubmVsc10uc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KTtcbiAgaWYgKCFwcmVmZXJyZWQpIHtcbiAgICByZXR1cm4gc2h1ZmZsZWQ7XG4gIH1cbiAgaWYgKCFhbGxvd0ZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIFtwcmVmZXJyZWRdO1xuICB9XG4gIGNvbnN0IHJlc3QgPSBzaHVmZmxlZC5maWx0ZXIoY2ggPT4gY2ggIT09IHByZWZlcnJlZCk7XG4gIHJldHVybiBbcHJlZmVycmVkLCAuLi5yZXN0XTtcbn1cblxuLyoqXG4gKiDljZXmrKHliJvlu7rpgq7nrrHvvIjkuI3lkKvph43or5XpgLvovpHvvIlcbiAqIOagueaNrua4oOmBk+exu+Wei+WIhuWPkeWIsOWvueW6lOeahCBwcm92aWRlciDlrp7njrBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFbWFpbE9uY2UoY2hhbm5lbDogQ2hhbm5lbCwgb3B0aW9uczogR2VuZXJhdGVFbWFpbE9wdGlvbnMpOiBQcm9taXNlPEludGVybmFsRW1haWxJbmZvPiB7XG4gIHN3aXRjaCAoY2hhbm5lbCkge1xuICAgIGNhc2UgJ3RlbXBtYWlsJzpcbiAgICAgIHJldHVybiB0ZW1wbWFpbC5nZW5lcmF0ZUVtYWlsKG9wdGlvbnMuZHVyYXRpb24gfHwgMzApO1xuICAgIGNhc2UgJ2xpbnNoaS1lbWFpbCc6XG4gICAgICByZXR1cm4gbGluc2hpRW1haWwuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ3RlbXBtYWlsLWxvbCc6XG4gICAgICByZXR1cm4gdGVtcG1haWxMb2wuZ2VuZXJhdGVFbWFpbChvcHRpb25zLmRvbWFpbiB8fCBudWxsKTtcbiAgICBjYXNlICdjaGF0Z3B0LW9yZy11ayc6XG4gICAgICByZXR1cm4gY2hhdGdwdE9yZ1VrLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICd0ZW1wLW1haWwtaW8nOlxuICAgICAgcmV0dXJuIHRlbXBNYWlsSU8uZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ2F3YW1haWwnOlxuICAgICAgcmV0dXJuIGF3YW1haWwuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ21haWwtdG0nOlxuICAgICAgcmV0dXJuIG1haWxUbS5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnZHJvcG1haWwnOlxuICAgICAgcmV0dXJuIGRyb3BtYWlsLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdndWVycmlsbGFtYWlsJzpcbiAgICAgIHJldHVybiBndWVycmlsbGFtYWlsLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdtYWlsZHJvcCc6XG4gICAgICByZXR1cm4gbWFpbGRyb3BQcm92aWRlci5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnc21haWwtcHcnOlxuICAgICAgcmV0dXJuIHNtYWlsUHcuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY2hhbm5lbDogJHtjaGFubmVsfWApO1xuICB9XG59XG5cbi8qKlxuICog6I635Y+W6YKu5Lu25YiX6KGoXG4gKiBDaGFubmVsL0VtYWlsL1Rva2VuIOetieeUsSBTREsg5LuOIEVtYWlsSW5mbyDkuK3oh6rliqjojrflj5bvvIznlKjmiLfml6DpnIDmiYvliqjkvKDpgJJcbiAqXG4gKiDplJnor6/lpITnkIbnrZbnlaXvvJpcbiAqIC0g572R57uc6ZSZ6K+v44CB6LaF5pe244CBNDI544CB5pyN5Yqh56uvIDV4eCDplJnor68g4oaSIOiHquWKqOmHjeivle+8iOm7mOiupCAyIOasoe+8iVxuICogLSDph43or5XogJflsL3lkI7ov5Tlm54geyBzdWNjZXNzOiBmYWxzZSwgZW1haWxzOiBbXSB977yM5LiN5oqb5byC5bi4XG4gKiAtIOWPguaVsOagoemqjOmUmeivr++8iOe8uuWwkSBFbWFpbEluZm/vvInnm7TmjqXmipvlh7pcbiAqXG4gKiBAcGFyYW0gaW5mbyAtIEdlbmVyYXRlRW1haWwoKSDov5Tlm57nmoTpgq7nrrHkv6Hmga9cbiAqIEBwYXJhbSBvcHRpb25zIC0g5Y+v6YCJ6YWN572u77yI6YeN6K+V562J77yJXG4gKiBAcmV0dXJucyDpgq7ku7bnu5PmnpzvvIzljIXlkKsgc3VjY2VzcyDmoIforrDlkozpgq7ku7bliJfooahcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGluZm8gPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKHsgY2hhbm5lbDogJ21haWwtdG0nIH0pO1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0RW1haWxzKGluZm8pO1xuICogaWYgKHJlc3VsdC5zdWNjZXNzICYmIHJlc3VsdC5lbWFpbHMubGVuZ3RoID4gMCkge1xuICogICBjb25zb2xlLmxvZygn5pS25Yiw6YKu5Lu2OicsIHJlc3VsdC5lbWFpbHNbMF0uc3ViamVjdCk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEVtYWlscyhpbmZvOiBFbWFpbEluZm8sIG9wdGlvbnM/OiBHZXRFbWFpbHNPcHRpb25zKTogUHJvbWlzZTxHZXRFbWFpbHNSZXN1bHQ+IHtcbiAgaWYgKCFpbmZvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbWFpbEluZm8gaXMgcmVxdWlyZWQsIGNhbGwgZ2VuZXJhdGVFbWFpbCgpIGZpcnN0Jyk7XG4gIH1cblxuICBjb25zdCB7IGNoYW5uZWwsIGVtYWlsIH0gPSBpbmZvO1xuICBjb25zdCB0b2tlbiA9IHRva2VuU3RvcmUuZ2V0KGluZm8pO1xuXG4gIGlmICghY2hhbm5lbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCBpcyByZXF1aXJlZCcpO1xuICB9XG4gIGlmICghZW1haWwgJiYgY2hhbm5lbCAhPT0gJ3RlbXBtYWlsLWxvbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtYWlsIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoYOiOt+WPlumCruS7tiwg5rig6YGTOiAke2NoYW5uZWx9LCDpgq7nrrE6ICR7ZW1haWx9YCk7XG4gIHRyeSB7XG4gICAgY29uc3QgZW1haWxzID0gYXdhaXQgd2l0aFJldHJ5KCgpID0+IGdldEVtYWlsc09uY2UoY2hhbm5lbCwgZW1haWwsIHRva2VuKSwgb3B0aW9ucz8ucmV0cnkpO1xuICAgIGlmIChlbWFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oYOiOt+WPluWIsCAke2VtYWlscy5sZW5ndGh9IOWwgemCruS7tiwg5rig6YGTOiAke2NoYW5uZWx9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1Zyhg5pqC5peg6YKu5Lu2LCDmuKDpgZM6ICR7Y2hhbm5lbH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY2hhbm5lbCwgZW1haWwsIGVtYWlscywgc3VjY2VzczogdHJ1ZSB9O1xuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIC8qXG4gICAgICog6YeN6K+V6ICX5bC95ZCO5LuN54S25aSx6LSlIOKGkiDov5Tlm57nqbrnu5PmnpzogIzpnZ7mipvlvILluLhcbiAgICAgKiDov5nmoLfosIPnlKjmlrnlnKjova7or6LlnLrmma/kuIvkuI3kvJrlm6DkuLrkuIDmrKHnvZHnu5zms6LliqjogIzkuK3mlq3mlbTkuKrmtYHnqItcbiAgICAgKi9cbiAgICBsb2dnZXIuZXJyb3IoYOiOt+WPlumCruS7tuWksei0pSwg5rig6YGTOiAke2NoYW5uZWx9LCDplJnor686ICR7ZXJyLm1lc3NhZ2UgfHwgZXJyfWApO1xuICAgIHJldHVybiB7IGNoYW5uZWwsIGVtYWlsLCBlbWFpbHM6IFtdLCBzdWNjZXNzOiBmYWxzZSB9O1xuICB9XG59XG5cbi8qKlxuICog5Y2V5qyh6I635Y+W6YKu5Lu277yI5LiN5ZCr6YeN6K+V6YC76L6R77yJXG4gKiDmoLnmja7muKDpgZPnsbvlnovliIblj5HliLDlr7nlupTnmoQgcHJvdmlkZXIg5a6e546w77yM5bm25qCh6aqM5b+F6ZyA55qEIHRva2VuIOWPguaVsFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRFbWFpbHNPbmNlKGNoYW5uZWw6IENoYW5uZWwsIGVtYWlsOiBzdHJpbmcsIHRva2VuPzogc3RyaW5nKTogUHJvbWlzZTxFbWFpbFtdPiB7XG4gIHN3aXRjaCAoY2hhbm5lbCkge1xuICAgIGNhc2UgJ3RlbXBtYWlsJzpcbiAgICAgIHJldHVybiB0ZW1wbWFpbC5nZXRFbWFpbHMoZW1haWwpO1xuICAgIGNhc2UgJ2xpbnNoaS1lbWFpbCc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBsaW5zaGktZW1haWwnKTtcbiAgICAgIHJldHVybiBsaW5zaGlFbWFpbC5nZXRFbWFpbHMoZW1haWwsIHRva2VuKTtcbiAgICBjYXNlICd0ZW1wbWFpbC1sb2wnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgdGVtcG1haWwtbG9sJyk7XG4gICAgICByZXR1cm4gdGVtcG1haWxMb2wuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnY2hhdGdwdC1vcmctdWsnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgY2hhdGdwdC1vcmctdWsnKTtcbiAgICAgIHJldHVybiBjaGF0Z3B0T3JnVWsuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAndGVtcC1tYWlsLWlvJzpcbiAgICAgIHJldHVybiB0ZW1wTWFpbElPLmdldEVtYWlscyhlbWFpbCk7XG4gICAgY2FzZSAnYXdhbWFpbCc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBhd2FtYWlsJyk7XG4gICAgICByZXR1cm4gYXdhbWFpbC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdtYWlsLXRtJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIG1haWwtdG0nKTtcbiAgICAgIHJldHVybiBtYWlsVG0uZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnZHJvcG1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgZHJvcG1haWwnKTtcbiAgICAgIHJldHVybiBkcm9wbWFpbC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdndWVycmlsbGFtYWlsJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIGd1ZXJyaWxsYW1haWwnKTtcbiAgICAgIHJldHVybiBndWVycmlsbGFtYWlsLmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGNhc2UgJ21haWxkcm9wJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIG1haWxkcm9wJyk7XG4gICAgICByZXR1cm4gbWFpbGRyb3BQcm92aWRlci5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdzbWFpbC1wdyc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBzbWFpbC1wdycpO1xuICAgICAgcmV0dXJuIHNtYWlsUHcuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjaGFubmVsOiAke2NoYW5uZWx9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiDkuLTml7bpgq7nrrHlrqLmiLfnq69cbiAqIOWwgeijheS6humCrueuseWIm+W7uuWSjOmCruS7tuiOt+WPlueahOWujOaVtOa1geeoi++8jOiHquWKqOeuoeeQhumCrueuseS/oeaBr+WSjOiupOivgeS7pOeJjFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgY2xpZW50ID0gbmV3IFRlbXBFbWFpbENsaWVudCgpO1xuICogY29uc3QgZW1haWxJbmZvID0gYXdhaXQgY2xpZW50LmdlbmVyYXRlKHsgY2hhbm5lbDogJ21haWwtdG0nIH0pO1xuICogY29uc29sZS5sb2coJ+mCrueusTonLCBlbWFpbEluZm8uZW1haWwpO1xuICpcbiAqIC8vIOi9ruivouiOt+WPlumCruS7tlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmdldEVtYWlscygpO1xuICogaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gKiAgIGNvbnNvbGUubG9nKCfpgq7ku7bmlbA6JywgcmVzdWx0LmVtYWlscy5sZW5ndGgpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wRW1haWxDbGllbnQge1xuICBwcml2YXRlIGVtYWlsSW5mbzogRW1haWxJbmZvIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIOWIm+W7uuS4tOaXtumCrueuseW5tue8k+WtmOmCrueuseS/oeaBr1xuICAgKiDlkI7nu63osIPnlKggZ2V0RW1haWxzKCkg5pe26Ieq5Yqo5L2/55So5q2k6YKu566x55qE5rig6YGT44CB5Zyw5Z2A5ZKM5Luk54mMXG4gICAqIOaJgOaciea4oOmBk+Wdh+S4jeWPr+eUqOaXtui/lOWbniBudWxsXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZShvcHRpb25zOiBHZW5lcmF0ZUVtYWlsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxFbWFpbEluZm8gfCBudWxsPiB7XG4gICAgdGhpcy5lbWFpbEluZm8gPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmVtYWlsSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3pgq7nrrHnmoTpgq7ku7bliJfooahcbiAgICog5b+F6aG75YWI6LCD55SoIGdlbmVyYXRlKCkg5Yib5bu66YKu566xXG4gICAqXG4gICAqIEB0aHJvd3Mg5pyq6LCD55SoIGdlbmVyYXRlKCkg5pe25oqb5Ye65byC5bi4XG4gICAqL1xuICBhc3luYyBnZXRFbWFpbHMob3B0aW9ucz86IEdldEVtYWlsc09wdGlvbnMpOiBQcm9taXNlPEdldEVtYWlsc1Jlc3VsdD4ge1xuICAgIGlmICghdGhpcy5lbWFpbEluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZW1haWwgZ2VuZXJhdGVkLiBDYWxsIGdlbmVyYXRlKCkgZmlyc3QuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldEVtYWlscyh0aGlzLmVtYWlsSW5mbywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN57yT5a2Y55qE6YKu566x5L+h5oGvXG4gICAqIOacquiwg+eUqCBnZW5lcmF0ZSgpIOaXtui/lOWbniBudWxsXG4gICAqL1xuICBnZXRFbWFpbEluZm8oKTogRW1haWxJbmZvIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZW1haWxJbmZvO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbGlzdENoYW5uZWxzLFxuICBnZXRDaGFubmVsSW5mbyxcbiAgZ2VuZXJhdGVFbWFpbCxcbiAgZ2V0RW1haWxzLFxuICBUZW1wRW1haWxDbGllbnQsXG4gIHNldENvbmZpZyxcbiAgZ2V0Q29uZmlnLFxufTtcbiJdfQ==
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEZBLG9DQUVDO0FBUUQsd0NBRUM7QUFvQkQsc0NBaUNDO0FBc0ZELDhCQWdDQztBQWpSRCwrREFBaUQ7QUFDakQsc0VBQXdEO0FBQ3hELGlFQUFtRDtBQUNuRCx5REFBMkM7QUFDM0Msc0VBQXdEO0FBQ3hELHlFQUEyRDtBQUMzRCxxRUFBdUQ7QUFDdkQsNkRBQStDO0FBQy9DLG1GQUFxRTtBQUNyRSw0REFBOEM7QUFDOUMsK0RBQWlEO0FBQ2pELHlFQUEyRDtBQUMzRCx1RUFBeUQ7QUFDekQsOERBQWdEO0FBQ2hELCtEQUFpRDtBQUNqRCw2REFBK0M7QUFDL0MsNERBQThDO0FBRTlDLG1DQUFvQztBQUNwQyxxQ0FBa0M7QUFDbEMscUNBQWdEO0FBSWhEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQXFCLENBQUM7QUFDcEQseUNBQTZDO0FBQXBDLDJHQUFBLGNBQWMsT0FBQTtBQUN2QixpQ0FBb0U7QUFBM0Qsa0dBQUEsU0FBUyxPQUFBO0FBQUUseUdBQUEsZ0JBQWdCLE9BQUE7QUFDcEMsbUNBQTZGO0FBQXBGLGtHQUFBLFFBQVEsT0FBQTtBQUFjLHFHQUFBLFdBQVcsT0FBQTtBQUFFLHFHQUFBLFdBQVcsT0FBQTtBQUFFLG1HQUFBLFNBQVMsT0FBQTtBQUFFLGdHQUFBLE1BQU0sT0FBQTtBQUMxRSxtQ0FBMkQ7QUFBdkMsbUdBQUEsU0FBUyxPQUFBO0FBQUUsbUdBQUEsU0FBUyxPQUFBO0FBRXhDLHlEQUtrQztBQUpoQyxzSEFBQSxzQkFBc0IsT0FBQTtBQUN0Qix3SEFBQSx3QkFBd0IsT0FBQTtBQUN4Qix3SEFBQSx3QkFBd0IsT0FBQTtBQUN4Qiw2SEFBQSw2QkFBNkIsT0FBQTtBQUcvQiwwQkFBMEI7QUFDMUIsTUFB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LENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFsQ0QsMENBa0NDO0FBRUQsa0JBQWU7SUFDYixZQUFZO0lBQ1osY0FBYztJQUNkLGFBQWE7SUFDYixTQUFTO0lBQ1QsZUFBZTtJQUNmLFNBQVMsRUFBVCxrQkFBUztJQUNULFNBQVMsRUFBVCxrQkFBUztDQUNWLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0ZW1wbWFpbCBmcm9tICcuL3Byb3ZpZGVycy90ZW1wbWFpbCc7XG5pbXBvcnQgKiBhcyBsaW5zaGlFbWFpbCBmcm9tICcuL3Byb3ZpZGVycy9saW5zaGktZW1haWwnO1xuaW1wb3J0ICogYXMgbGluc2hpeW91IGZyb20gJy4vcHJvdmlkZXJzL2xpbnNoaXlvdSc7XG5pbXBvcnQgKiBhcyBtZmZhYyBmcm9tICcuL3Byb3ZpZGVycy9tZmZhYyc7XG5pbXBvcnQgKiBhcyB0ZW1wbWFpbExvbCBmcm9tICcuL3Byb3ZpZGVycy90ZW1wbWFpbC1sb2wnO1xuaW1wb3J0ICogYXMgY2hhdGdwdE9yZ1VrIGZyb20gJy4vcHJvdmlkZXJzL2NoYXRncHQtb3JnLXVrJztcbmltcG9ydCAqIGFzIHRlbXBNYWlsSU8gZnJvbSAnLi9wcm92aWRlcnMvdGVtcC1tYWlsLWlvJztcbmltcG9ydCAqIGFzIGF3YW1haWwgZnJvbSAnLi9wcm92aWRlcnMvYXdhbWFpbCc7XG5pbXBvcnQgKiBhcyB0ZW1wb3JhcnlFbWFpbE9yZyBmcm9tICcuL3Byb3ZpZGVycy90ZW1wb3JhcnktZW1haWwtb3JnJztcbmltcG9ydCAqIGFzIG1haWxUbSBmcm9tICcuL3Byb3ZpZGVycy9tYWlsLXRtJztcbmltcG9ydCAqIGFzIGRyb3BtYWlsIGZyb20gJy4vcHJvdmlkZXJzL2Ryb3BtYWlsJztcbmltcG9ydCAqIGFzIGd1ZXJyaWxsYW1haWwgZnJvbSAnLi9wcm92aWRlcnMvZ3VlcnJpbGxhbWFpbCc7XG5pbXBvcnQgKiBhcyBtYWlsZHJvcFByb3ZpZGVyIGZyb20gJy4vcHJvdmlkZXJzL21haWxkcm9wJztcbmltcG9ydCAqIGFzIHNtYWlsUHcgZnJvbSAnLi9wcm92aWRlcnMvc21haWwtcHcnO1xuaW1wb3J0ICogYXMgYm9vbWxpZnkgZnJvbSAnLi9wcm92aWRlcnMvYm9vbWxpZnknO1xuaW1wb3J0ICogYXMgbWlubWFpbCBmcm9tICcuL3Byb3ZpZGVycy9taW5tYWlsJztcbmltcG9ydCAqIGFzIHZpcDIxNSBmcm9tICcuL3Byb3ZpZGVycy92aXAtMjE1JztcbmltcG9ydCB7IENoYW5uZWwsIEVtYWlsSW5mbywgSW50ZXJuYWxFbWFpbEluZm8sIEVtYWlsLCBHZXRFbWFpbHNSZXN1bHQsIEdlbmVyYXRlRW1haWxPcHRpb25zLCBHZXRFbWFpbHNPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyB3aXRoUmV0cnkgfSBmcm9tICcuL3JldHJ5JztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNldENvbmZpZywgZ2V0Q29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuXG5leHBvcnQgeyBDaGFubmVsLCBFbWFpbEluZm8sIEVtYWlsLCBFbWFpbEF0dGFjaG1lbnQsIEdldEVtYWlsc1Jlc3VsdCwgR2VuZXJhdGVFbWFpbE9wdGlvbnMsIEdldEVtYWlsc09wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBTREsg5YaF6YOoIHRva2VuIOWtmOWCqFxuICog5L2/55SoIFdlYWtNYXAg5bCGIEVtYWlsSW5mbyDlr7nosaHmmKDlsITliLDlr7nlupTnmoQgdG9rZW5cbiAqIOeUqOaIt+aXoOazleebtOaOpeiuv+mXriB0b2tlbu+8jOeUsSBTREsg6Ieq5Yqo566h55CGXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgdG9rZW5TdG9yZSA9IG5ldyBXZWFrTWFwPEVtYWlsSW5mbywgc3RyaW5nPigpO1xuZXhwb3J0IHsgbm9ybWFsaXplRW1haWwgfSBmcm9tICcuL25vcm1hbGl6ZSc7XG5leHBvcnQgeyB3aXRoUmV0cnksIGZldGNoV2l0aFRpbWVvdXQsIFJldHJ5T3B0aW9ucyB9IGZyb20gJy4vcmV0cnknO1xuZXhwb3J0IHsgTG9nTGV2ZWwsIExvZ0hhbmRsZXIsIHNldExvZ0xldmVsLCBnZXRMb2dMZXZlbCwgc2V0TG9nZ2VyLCBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5leHBvcnQgeyBTREtDb25maWcsIHNldENvbmZpZywgZ2V0Q29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuZXhwb3J0IHR5cGUgeyBTeW50aGV0aWNCcm93c2VyUHJvZmlsZSB9IGZyb20gJy4vcHJvdmlkZXJzL2xpbnNoaS10b2tlbic7XG5leHBvcnQge1xuICBkZXJpdmVMaW5zaGlBcGlQYXRoS2V5LFxuICByYW5kb21TeW50aGV0aWNMaW5zaGlLZXksXG4gIHJhbmRvbUJyb3dzZXJMaWtlUHJvZmlsZSxcbiAgc3ludGhldGljVmlzaXRvcklkRnJvbVByb2ZpbGUsXG59IGZyb20gJy4vcHJvdmlkZXJzL2xpbnNoaS10b2tlbic7XG5cbi8qKiDmiYDmnInmlK/mjIHnmoTmuKDpgZPliJfooajvvIznlKjkuo7pmo/mnLrpgInmi6nlkozpgY3ljoYgKi9cbmNvbnN0IGFsbENoYW5uZWxzOiBDaGFubmVsW10gPSBbJ3RlbXBtYWlsJywgJ2xpbnNoaS1lbWFpbCcsICdsaW5zaGl5b3UnLCAnbWZmYWMnLCAndGVtcG1haWwtbG9sJywgJ2NoYXRncHQtb3JnLXVrJywgJ3RlbXAtbWFpbC1pbycsICdhd2FtYWlsJywgJ3RlbXBvcmFyeS1lbWFpbC1vcmcnLCAnbWFpbC10bScsICdkcm9wbWFpbCcsICdndWVycmlsbGFtYWlsJywgJ21haWxkcm9wJywgJ3NtYWlsLXB3JywgJ2Jvb21saWZ5JywgJ21pbm1haWwnLCAndmlwLTIxNSddO1xuXG4vKipcbiAqIOa4oOmBk+S/oeaBr++8jOWMheWQq+a4oOmBk+agh+ivhuOAgeaYvuekuuWQjeensOWSjOWvueW6lOe9keermVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5uZWxJbmZvIHtcbiAgLyoqIOa4oOmBk+agh+ivhiAqL1xuICBjaGFubmVsOiBDaGFubmVsO1xuICAvKiog5rig6YGT5pi+56S65ZCN56ewICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIOWvueW6lOeahOS4tOaXtumCrueuseacjeWKoee9keermSAqL1xuICB3ZWJzaXRlOiBzdHJpbmc7XG59XG5cbi8qKiDmuKDpgZPkv6Hmga/mmKDlsITooaggKi9cbmNvbnN0IGNoYW5uZWxJbmZvTWFwOiBSZWNvcmQ8Q2hhbm5lbCwgQ2hhbm5lbEluZm8+ID0ge1xuICAndGVtcG1haWwnOiB7IGNoYW5uZWw6ICd0ZW1wbWFpbCcsIG5hbWU6ICdUZW1wTWFpbCcsIHdlYnNpdGU6ICd0ZW1wbWFpbC5pbmcnIH0sXG4gICdsaW5zaGktZW1haWwnOiB7IGNoYW5uZWw6ICdsaW5zaGktZW1haWwnLCBuYW1lOiAn5Li05pe26YKu566xJywgd2Vic2l0ZTogJ2xpbnNoaS1lbWFpbC5jb20nIH0sXG4gICdsaW5zaGl5b3UnOiB7IGNoYW5uZWw6ICdsaW5zaGl5b3UnLCBuYW1lOiAn5Li05pe26YKuJywgd2Vic2l0ZTogJ2xpbnNoaXlvdS5jb20nIH0sXG4gICd0ZW1wbWFpbC1sb2wnOiB7IGNoYW5uZWw6ICd0ZW1wbWFpbC1sb2wnLCBuYW1lOiAnVGVtcE1haWwgTE9MJywgd2Vic2l0ZTogJ3RlbXBtYWlsLmxvbCcgfSxcbiAgJ2NoYXRncHQtb3JnLXVrJzogeyBjaGFubmVsOiAnY2hhdGdwdC1vcmctdWsnLCBuYW1lOiAnQ2hhdEdQVCBNYWlsJywgd2Vic2l0ZTogJ21haWwuY2hhdGdwdC5vcmcudWsnIH0sXG4gICd0ZW1wLW1haWwtaW8nOiB7IGNoYW5uZWw6ICd0ZW1wLW1haWwtaW8nLCBuYW1lOiAnVGVtcCBNYWlsIElPJywgd2Vic2l0ZTogJ3RlbXAtbWFpbC5pbycgfSxcbiAgJ2F3YW1haWwnOiB7IGNoYW5uZWw6ICdhd2FtYWlsJywgbmFtZTogJ0F3YU1haWwnLCB3ZWJzaXRlOiAnYXdhbWFpbC5jb20nIH0sXG4gICd0ZW1wb3JhcnktZW1haWwtb3JnJzogeyBjaGFubmVsOiAndGVtcG9yYXJ5LWVtYWlsLW9yZycsIG5hbWU6ICdUZW1wb3JhcnkgRW1haWwnLCB3ZWJzaXRlOiAndGVtcG9yYXJ5LWVtYWlsLm9yZycgfSxcbiAgJ21haWwtdG0nOiB7IGNoYW5uZWw6ICdtYWlsLXRtJywgbmFtZTogJ01haWwudG0nLCB3ZWJzaXRlOiAnbWFpbC50bScgfSxcbiAgJ2Ryb3BtYWlsJzogeyBjaGFubmVsOiAnZHJvcG1haWwnLCBuYW1lOiAnRHJvcE1haWwnLCB3ZWJzaXRlOiAnZHJvcG1haWwubWUnIH0sXG4gICdndWVycmlsbGFtYWlsJzogeyBjaGFubmVsOiAnZ3VlcnJpbGxhbWFpbCcsIG5hbWU6ICdHdWVycmlsbGEgTWFpbCcsIHdlYnNpdGU6ICdndWVycmlsbGFtYWlsLmNvbScgfSxcbiAgJ21haWxkcm9wJzogeyBjaGFubmVsOiAnbWFpbGRyb3AnLCBuYW1lOiAnTWFpbGRyb3AnLCB3ZWJzaXRlOiAnbWFpbGRyb3AuY2MnIH0sXG4gICdzbWFpbC1wdyc6IHsgY2hhbm5lbDogJ3NtYWlsLXB3JywgbmFtZTogJ1NtYWlsLnB3Jywgd2Vic2l0ZTogJ3NtYWlsLnB3JyB9LFxuICAnYm9vbWxpZnknOiB7IGNoYW5uZWw6ICdib29tbGlmeScsIG5hbWU6ICdCb29tbGlmeScsIHdlYnNpdGU6ICdib29tbGlmeS5jb20nIH0sXG4gICdtaW5tYWlsJzogeyBjaGFubmVsOiAnbWlubWFpbCcsIG5hbWU6ICdNaW5NYWlsJywgd2Vic2l0ZTogJ21pbm1haWwuYXBwJyB9LFxuICAnbWZmYWMnOiB7IGNoYW5uZWw6ICdtZmZhYycsIG5hbWU6ICdNRkZBQycsIHdlYnNpdGU6ICdtZmZhYy5jb20nIH0sXG4gICd2aXAtMjE1JzogeyBjaGFubmVsOiAndmlwLTIxNScsIG5hbWU6ICdWSVAgMjE1Jywgd2Vic2l0ZTogJ3ZpcC4yMTUuaW0nIH0sXG59O1xuXG4vKipcbiAqIOiOt+WPluaJgOacieaUr+aMgeeahOa4oOmBk+WIl+ihqFxuICpcbiAqIEByZXR1cm5zIOaJgOaciea4oOmBk+eahOS/oeaBr+aVsOe7hFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgY2hhbm5lbHMgPSBsaXN0Q2hhbm5lbHMoKTtcbiAqIGNoYW5uZWxzLmZvckVhY2goY2ggPT4gY29uc29sZS5sb2coYCR7Y2gubmFtZX0gKCR7Y2gud2Vic2l0ZX0pYCkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0Q2hhbm5lbHMoKTogQ2hhbm5lbEluZm9bXSB7XG4gIHJldHVybiBhbGxDaGFubmVscy5tYXAoY2ggPT4gY2hhbm5lbEluZm9NYXBbY2hdKTtcbn1cblxuLyoqXG4gKiDojrflj5bmjIflrprmuKDpgZPnmoTor6bnu4bkv6Hmga9cbiAqXG4gKiBAcGFyYW0gY2hhbm5lbCAtIOa4oOmBk+agh+ivhlxuICogQHJldHVybnMg5rig6YGT5L+h5oGv77yM5LiN5a2Y5Zyo5pe26L+U5ZueIHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbm5lbEluZm8oY2hhbm5lbDogQ2hhbm5lbCk6IENoYW5uZWxJbmZvIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNoYW5uZWxJbmZvTWFwW2NoYW5uZWxdO1xufVxuXG4vKipcbiAqIOWIm+W7uuS4tOaXtumCrueusVxuICpcbiAqIOmUmeivr+WkhOeQhuetlueVpe+8mlxuICogLSDmjIflrprmuKDpgZPlpLHotKXml7bvvIzpu5jorqToh6rliqjlsJ3or5Xlhbbku5blj6/nlKjmuKDpgZPvvIjmiZPkubHpobrluo/pgJDkuKrlsJ3or5XvvIlcbiAqIC0gYGNoYW5uZWxGYWxsYmFjazogZmFsc2VgIOS4lOaMh+WumuS6hiBgY2hhbm5lbGAg5pe277yM5LuF5bCd6K+V6K+l5rig6YGT77yM5aSx6LSl5Y2z6L+U5ZueIG51bGxcbiAqIC0g5pyq5oyH5a6a5rig6YGT5pe277yM5omT5Lmx5YWo6YOo5rig6YGT6YCQ5Liq5bCd6K+V77yM55u05Yiw5oiQ5YqfXG4gKiAtIOaJgOaciea4oOmBk+Wdh+S4jeWPr+eUqOaXtui/lOWbniBudWxs77yI5LiN5oqb5Ye65byC5bi477yJXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSDliJvlu7rpgInpobnvvIzlj6/mjIflrprmuKDpgZPjgIHmnInmlYjml7bplb/jgIHln5/lkI3nrYlcbiAqIEByZXR1cm5zIOmCrueuseS/oeaBr++8jOaJgOaciea4oOmBk+Wdh+S4jeWPr+eUqOaXtui/lOWbniBudWxsXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBlbWFpbEluZm8gPSBhd2FpdCBnZW5lcmF0ZUVtYWlsKHsgY2hhbm5lbDogJ3RlbXAtbWFpbC1pbycgfSk7XG4gKiBpZiAoZW1haWxJbmZvKSBjb25zb2xlLmxvZyhlbWFpbEluZm8uZW1haWwpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUVtYWlsKG9wdGlvbnM6IEdlbmVyYXRlRW1haWxPcHRpb25zID0ge30pOiBQcm9taXNlPEVtYWlsSW5mbyB8IG51bGw+IHtcbiAgLypcbiAgICog5p6E5bu65bCd6K+V6aG65bqP77yaXG4gICAqIC0g5oyH5a6a5rig6YGTIOKGkiDkvJjlhYjlsJ3or5Xor6XmuKDpgZPvvIzlpLHotKXlkI7pmo/mnLrlsJ3or5Xlhbbku5bmuKDpgZNcbiAgICogLSDmnKrmjIflrpog4oaSIOaJk+S5seWFqOmDqOa4oOmBk+mAkOS4quWwneivlVxuICAgKi9cbiAgY29uc3QgYWxsb3dGYWxsYmFjayA9IG9wdGlvbnMuY2hhbm5lbEZhbGxiYWNrICE9PSBmYWxzZTtcbiAgY29uc3QgdHJ5T3JkZXIgPSBidWlsZENoYW5uZWxPcmRlcihvcHRpb25zLmNoYW5uZWwsIGFsbG93RmFsbGJhY2spO1xuXG4gIGZvciAoY29uc3QgY2ggb2YgdHJ5T3JkZXIpIHtcbiAgICBsb2dnZXIuaW5mbyhg5Yib5bu65Li05pe26YKu566xLCDmuKDpgZM6ICR7Y2h9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGludGVybmFsOiBJbnRlcm5hbEVtYWlsSW5mbyA9IGF3YWl0IHdpdGhSZXRyeSgoKSA9PiBnZW5lcmF0ZUVtYWlsT25jZShjaCwgb3B0aW9ucyksIG9wdGlvbnMucmV0cnkpO1xuICAgICAgbG9nZ2VyLmluZm8oYOmCrueuseWIm+W7uuaIkOWKnzogJHtpbnRlcm5hbC5lbWFpbH0gKOa4oOmBkzogJHtjaH0pYCk7XG5cbiAgICAgIC8qIOWwhiB0b2tlbiDlrZjlhaXlhoXpg6jlrZjlgqjvvIzkuI3mmrTpnLLnu5nnlKjmiLcgKi9cbiAgICAgIGNvbnN0IHB1YmxpY0luZm86IEVtYWlsSW5mbyA9IHtcbiAgICAgICAgY2hhbm5lbDogaW50ZXJuYWwuY2hhbm5lbCxcbiAgICAgICAgZW1haWw6IGludGVybmFsLmVtYWlsLFxuICAgICAgICBleHBpcmVzQXQ6IGludGVybmFsLmV4cGlyZXNBdCxcbiAgICAgICAgY3JlYXRlZEF0OiBpbnRlcm5hbC5jcmVhdGVkQXQsXG4gICAgICB9O1xuICAgICAgaWYgKGludGVybmFsLnRva2VuKSB7XG4gICAgICAgIHRva2VuU3RvcmUuc2V0KHB1YmxpY0luZm8sIGludGVybmFsLnRva2VuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwdWJsaWNJbmZvO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBsb2dnZXIud2Fybihg5rig6YGTICR7Y2h9IOS4jeWPr+eUqDogJHtlcnIubWVzc2FnZSB8fCBlcnJ977yM5bCd6K+V5LiL5LiA5Liq5rig6YGTYCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmVycm9yKCfmiYDmnInmuKDpgZPlnYfkuI3lj6/nlKjvvIzliJvlu7rpgq7nrrHlpLHotKUnKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICog5p6E5bu65rig6YGT5bCd6K+V6aG65bqPXG4gKiDmjIflrprmuKDpgZPml7bkvJjlhYjlsJ3or5Xor6XmuKDpgZPvvIzlhbbkvZnmuKDpgZPmiZPkubHov73liqBcbiAqIOacquaMh+WumuaXtuaJk+S5seWFqOmDqOa4oOmBk1xuICovXG5mdW5jdGlvbiBidWlsZENoYW5uZWxPcmRlcihwcmVmZXJyZWQ/OiBDaGFubmVsLCBhbGxvd0ZhbGxiYWNrID0gdHJ1ZSk6IENoYW5uZWxbXSB7XG4gIGNvbnN0IHNodWZmbGVkID0gWy4uLmFsbENoYW5uZWxzXS5zb3J0KCgpID0+IE1hdGgucmFuZG9tKCkgLSAwLjUpO1xuICBpZiAoIXByZWZlcnJlZCkge1xuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfVxuICBpZiAoIWFsbG93RmFsbGJhY2spIHtcbiAgICByZXR1cm4gW3ByZWZlcnJlZF07XG4gIH1cbiAgY29uc3QgcmVzdCA9IHNodWZmbGVkLmZpbHRlcihjaCA9PiBjaCAhPT0gcHJlZmVycmVkKTtcbiAgcmV0dXJuIFtwcmVmZXJyZWQsIC4uLnJlc3RdO1xufVxuXG4vKipcbiAqIOWNleasoeWIm+W7uumCrueuse+8iOS4jeWQq+mHjeivlemAu+i+ke+8iVxuICog5qC55o2u5rig6YGT57G75Z6L5YiG5Y+R5Yiw5a+55bqU55qEIHByb3ZpZGVyIOWunueOsFxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUVtYWlsT25jZShjaGFubmVsOiBDaGFubmVsLCBvcHRpb25zOiBHZW5lcmF0ZUVtYWlsT3B0aW9ucyk6IFByb21pc2U8SW50ZXJuYWxFbWFpbEluZm8+IHtcbiAgc3dpdGNoIChjaGFubmVsKSB7XG4gICAgY2FzZSAndGVtcG1haWwnOlxuICAgICAgcmV0dXJuIHRlbXBtYWlsLmdlbmVyYXRlRW1haWwob3B0aW9ucy5kdXJhdGlvbiB8fCAzMCk7XG4gICAgY2FzZSAnbGluc2hpLWVtYWlsJzpcbiAgICAgIHJldHVybiBsaW5zaGlFbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnbGluc2hpeW91JzpcbiAgICAgIHJldHVybiBsaW5zaGl5b3UuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ3RlbXBtYWlsLWxvbCc6XG4gICAgICByZXR1cm4gdGVtcG1haWxMb2wuZ2VuZXJhdGVFbWFpbChvcHRpb25zLmRvbWFpbiB8fCBudWxsKTtcbiAgICBjYXNlICdjaGF0Z3B0LW9yZy11ayc6XG4gICAgICByZXR1cm4gY2hhdGdwdE9yZ1VrLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICd0ZW1wLW1haWwtaW8nOlxuICAgICAgcmV0dXJuIHRlbXBNYWlsSU8uZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ2F3YW1haWwnOlxuICAgICAgcmV0dXJuIGF3YW1haWwuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ3RlbXBvcmFyeS1lbWFpbC1vcmcnOlxuICAgICAgcmV0dXJuIHRlbXBvcmFyeUVtYWlsT3JnLmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdtYWlsLXRtJzpcbiAgICAgIHJldHVybiBtYWlsVG0uZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ2Ryb3BtYWlsJzpcbiAgICAgIHJldHVybiBkcm9wbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnZ3VlcnJpbGxhbWFpbCc6XG4gICAgICByZXR1cm4gZ3VlcnJpbGxhbWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnbWFpbGRyb3AnOlxuICAgICAgcmV0dXJuIG1haWxkcm9wUHJvdmlkZXIuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ3NtYWlsLXB3JzpcbiAgICAgIHJldHVybiBzbWFpbFB3LmdlbmVyYXRlRW1haWwoKTtcbiAgICBjYXNlICdib29tbGlmeSc6XG4gICAgICByZXR1cm4gYm9vbWxpZnkuZ2VuZXJhdGVFbWFpbCgpO1xuICAgIGNhc2UgJ21mZmFjJzpcbiAgICAgIHJldHVybiBtZmZhYy5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAnbWlubWFpbCc6XG4gICAgICByZXR1cm4gbWlubWFpbC5nZW5lcmF0ZUVtYWlsKCk7XG4gICAgY2FzZSAndmlwLTIxNSc6XG4gICAgICByZXR1cm4gdmlwMjE1LmdlbmVyYXRlRW1haWwoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNoYW5uZWw6ICR7Y2hhbm5lbH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIOiOt+WPlumCruS7tuWIl+ihqFxuICogQ2hhbm5lbC9FbWFpbC9Ub2tlbiDnrYnnlLEgU0RLIOS7jiBFbWFpbEluZm8g5Lit6Ieq5Yqo6I635Y+W77yM55So5oi35peg6ZyA5omL5Yqo5Lyg6YCSXG4gKlxuICog6ZSZ6K+v5aSE55CG562W55Wl77yaXG4gKiAtIOe9kee7nOmUmeivr+OAgei2heaXtuOAgTQyOeOAgeacjeWKoeerryA1eHgg6ZSZ6K+vIOKGkiDoh6rliqjph43or5XvvIjpu5jorqQgMiDmrKHvvIlcbiAqIC0g6YeN6K+V6ICX5bC95ZCO6L+U5ZueIHsgc3VjY2VzczogZmFsc2UsIGVtYWlsczogW10gfe+8jOS4jeaKm+W8guW4uFxuICogLSDlj4LmlbDmoKHpqozplJnor6/vvIjnvLrlsJEgRW1haWxJbmZv77yJ55u05o6l5oqb5Ye6XG4gKlxuICogQHBhcmFtIGluZm8gLSBHZW5lcmF0ZUVtYWlsKCkg6L+U5Zue55qE6YKu566x5L+h5oGvXG4gKiBAcGFyYW0gb3B0aW9ucyAtIOWPr+mAiemFjee9ru+8iOmHjeivleetie+8iVxuICogQHJldHVybnMg6YKu5Lu257uT5p6c77yM5YyF5ZCrIHN1Y2Nlc3Mg5qCH6K6w5ZKM6YKu5Lu25YiX6KGoXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBpbmZvID0gYXdhaXQgZ2VuZXJhdGVFbWFpbCh7IGNoYW5uZWw6ICdtYWlsLXRtJyB9KTtcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEVtYWlscyhpbmZvKTtcbiAqIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQuZW1haWxzLmxlbmd0aCA+IDApIHtcbiAqICAgY29uc29sZS5sb2coJ+aUtuWIsOmCruS7tjonLCByZXN1bHQuZW1haWxzWzBdLnN1YmplY3QpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbWFpbHMoaW5mbzogRW1haWxJbmZvLCBvcHRpb25zPzogR2V0RW1haWxzT3B0aW9ucyk6IFByb21pc2U8R2V0RW1haWxzUmVzdWx0PiB7XG4gIGlmICghaW5mbykge1xuICAgIHRocm93IG5ldyBFcnJvcignRW1haWxJbmZvIGlzIHJlcXVpcmVkLCBjYWxsIGdlbmVyYXRlRW1haWwoKSBmaXJzdCcpO1xuICB9XG5cbiAgY29uc3QgeyBjaGFubmVsLCBlbWFpbCB9ID0gaW5mbztcbiAgY29uc3QgdG9rZW4gPSB0b2tlblN0b3JlLmdldChpbmZvKTtcblxuICBpZiAoIWNoYW5uZWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgaXMgcmVxdWlyZWQnKTtcbiAgfVxuICBpZiAoIWVtYWlsICYmIGNoYW5uZWwgIT09ICd0ZW1wbWFpbC1sb2wnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbWFpbCBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGDojrflj5bpgq7ku7YsIOa4oOmBkzogJHtjaGFubmVsfSwg6YKu566xOiAke2VtYWlsfWApO1xuICB0cnkge1xuICAgIGNvbnN0IGVtYWlscyA9IGF3YWl0IHdpdGhSZXRyeSgoKSA9PiBnZXRFbWFpbHNPbmNlKGNoYW5uZWwsIGVtYWlsLCB0b2tlbiksIG9wdGlvbnM/LnJldHJ5KTtcbiAgICBpZiAoZW1haWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKGDojrflj5bliLAgJHtlbWFpbHMubGVuZ3RofSDlsIHpgq7ku7YsIOa4oOmBkzogJHtjaGFubmVsfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYOaaguaXoOmCruS7tiwg5rig6YGTOiAke2NoYW5uZWx9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IGNoYW5uZWwsIGVtYWlsLCBlbWFpbHMsIHN1Y2Nlc3M6IHRydWUgfTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAvKlxuICAgICAqIOmHjeivleiAl+WwveWQjuS7jeeEtuWksei0pSDihpIg6L+U5Zue56m657uT5p6c6ICM6Z2e5oqb5byC5bi4XG4gICAgICog6L+Z5qC36LCD55So5pa55Zyo6L2u6K+i5Zy65pmv5LiL5LiN5Lya5Zug5Li65LiA5qyh572R57uc5rOi5Yqo6ICM5Lit5pat5pW05Liq5rWB56iLXG4gICAgICovXG4gICAgbG9nZ2VyLmVycm9yKGDojrflj5bpgq7ku7blpLHotKUsIOa4oOmBkzogJHtjaGFubmVsfSwg6ZSZ6K+vOiAke2Vyci5tZXNzYWdlIHx8IGVycn1gKTtcbiAgICByZXR1cm4geyBjaGFubmVsLCBlbWFpbCwgZW1haWxzOiBbXSwgc3VjY2VzczogZmFsc2UgfTtcbiAgfVxufVxuXG4vKipcbiAqIOWNleasoeiOt+WPlumCruS7tu+8iOS4jeWQq+mHjeivlemAu+i+ke+8iVxuICog5qC55o2u5rig6YGT57G75Z6L5YiG5Y+R5Yiw5a+55bqU55qEIHByb3ZpZGVyIOWunueOsO+8jOW5tuagoemqjOW/hemcgOeahCB0b2tlbiDlj4LmlbBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0RW1haWxzT25jZShjaGFubmVsOiBDaGFubmVsLCBlbWFpbDogc3RyaW5nLCB0b2tlbj86IHN0cmluZyk6IFByb21pc2U8RW1haWxbXT4ge1xuICBzd2l0Y2ggKGNoYW5uZWwpIHtcbiAgICBjYXNlICd0ZW1wbWFpbCc6XG4gICAgICByZXR1cm4gdGVtcG1haWwuZ2V0RW1haWxzKGVtYWlsKTtcbiAgICBjYXNlICdsaW5zaGktZW1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgbGluc2hpLWVtYWlsJyk7XG4gICAgICByZXR1cm4gbGluc2hpRW1haWwuZ2V0RW1haWxzKGVtYWlsLCB0b2tlbik7XG4gICAgY2FzZSAnbGluc2hpeW91JzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIGxpbnNoaXlvdScpO1xuICAgICAgcmV0dXJuIGxpbnNoaXlvdS5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICd0ZW1wbWFpbC1sb2wnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgdGVtcG1haWwtbG9sJyk7XG4gICAgICByZXR1cm4gdGVtcG1haWxMb2wuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnY2hhdGdwdC1vcmctdWsnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgY2hhdGdwdC1vcmctdWsnKTtcbiAgICAgIHJldHVybiBjaGF0Z3B0T3JnVWsuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAndGVtcC1tYWlsLWlvJzpcbiAgICAgIHJldHVybiB0ZW1wTWFpbElPLmdldEVtYWlscyhlbWFpbCk7XG4gICAgY2FzZSAnYXdhbWFpbCc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBhd2FtYWlsJyk7XG4gICAgICByZXR1cm4gYXdhbWFpbC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICd0ZW1wb3JhcnktZW1haWwtb3JnJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIHRlbXBvcmFyeS1lbWFpbC1vcmcnKTtcbiAgICAgIHJldHVybiB0ZW1wb3JhcnlFbWFpbE9yZy5nZXRFbWFpbHMoZW1haWwsIHRva2VuKTtcbiAgICBjYXNlICdtYWlsLXRtJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIG1haWwtdG0nKTtcbiAgICAgIHJldHVybiBtYWlsVG0uZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnZHJvcG1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgZHJvcG1haWwnKTtcbiAgICAgIHJldHVybiBkcm9wbWFpbC5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdndWVycmlsbGFtYWlsJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIGd1ZXJyaWxsYW1haWwnKTtcbiAgICAgIHJldHVybiBndWVycmlsbGFtYWlsLmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGNhc2UgJ21haWxkcm9wJzpcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcignaW50ZXJuYWwgZXJyb3I6IHRva2VuIG1pc3NpbmcgZm9yIG1haWxkcm9wJyk7XG4gICAgICByZXR1cm4gbWFpbGRyb3BQcm92aWRlci5nZXRFbWFpbHModG9rZW4sIGVtYWlsKTtcbiAgICBjYXNlICdzbWFpbC1wdyc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciBzbWFpbC1wdycpO1xuICAgICAgcmV0dXJuIHNtYWlsUHcuZ2V0RW1haWxzKHRva2VuLCBlbWFpbCk7XG4gICAgY2FzZSAnYm9vbWxpZnknOlxuICAgICAgcmV0dXJuIGJvb21saWZ5LmdldEVtYWlscyhlbWFpbCk7XG4gICAgY2FzZSAnbWZmYWMnOlxuICAgICAgcmV0dXJuIG1mZmFjLmdldEVtYWlscyhlbWFpbCwgdG9rZW4pO1xuICAgIGNhc2UgJ21pbm1haWwnOlxuICAgICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdpbnRlcm5hbCBlcnJvcjogdG9rZW4gbWlzc2luZyBmb3IgbWlubWFpbCcpO1xuICAgICAgcmV0dXJuIG1pbm1haWwuZ2V0RW1haWxzKGVtYWlsLCB0b2tlbik7XG4gICAgY2FzZSAndmlwLTIxNSc6XG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ2ludGVybmFsIGVycm9yOiB0b2tlbiBtaXNzaW5nIGZvciB2aXAtMjE1Jyk7XG4gICAgICByZXR1cm4gdmlwMjE1LmdldEVtYWlscyh0b2tlbiwgZW1haWwpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY2hhbm5lbDogJHtjaGFubmVsfWApO1xuICB9XG59XG5cbi8qKlxuICog5Li05pe26YKu566x5a6i5oi356uvXG4gKiDlsIHoo4Xkuobpgq7nrrHliJvlu7rlkozpgq7ku7bojrflj5bnmoTlrozmlbTmtYHnqIvvvIzoh6rliqjnrqHnkIbpgq7nrrHkv6Hmga/lkozorqTor4Hku6TniYxcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGNsaWVudCA9IG5ldyBUZW1wRW1haWxDbGllbnQoKTtcbiAqIGNvbnN0IGVtYWlsSW5mbyA9IGF3YWl0IGNsaWVudC5nZW5lcmF0ZSh7IGNoYW5uZWw6ICdtYWlsLXRtJyB9KTtcbiAqIGNvbnNvbGUubG9nKCfpgq7nrrE6JywgZW1haWxJbmZvLmVtYWlsKTtcbiAqXG4gKiAvLyDova7or6Lojrflj5bpgq7ku7ZcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5nZXRFbWFpbHMoKTtcbiAqIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICogICBjb25zb2xlLmxvZygn6YKu5Lu25pWwOicsIHJlc3VsdC5lbWFpbHMubGVuZ3RoKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgVGVtcEVtYWlsQ2xpZW50IHtcbiAgcHJpdmF0ZSBlbWFpbEluZm86IEVtYWlsSW5mbyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiDliJvlu7rkuLTml7bpgq7nrrHlubbnvJPlrZjpgq7nrrHkv6Hmga9cbiAgICog5ZCO57ut6LCD55SoIGdldEVtYWlscygpIOaXtuiHquWKqOS9v+eUqOatpOmCrueuseeahOa4oOmBk+OAgeWcsOWdgOWSjOS7pOeJjFxuICAgKiDmiYDmnInmuKDpgZPlnYfkuI3lj6/nlKjml7bov5Tlm54gbnVsbFxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGUob3B0aW9uczogR2VuZXJhdGVFbWFpbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8RW1haWxJbmZvIHwgbnVsbD4ge1xuICAgIHRoaXMuZW1haWxJbmZvID0gYXdhaXQgZ2VuZXJhdGVFbWFpbChvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5lbWFpbEluZm87XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN6YKu566x55qE6YKu5Lu25YiX6KGoXG4gICAqIOW/hemhu+WFiOiwg+eUqCBnZW5lcmF0ZSgpIOWIm+W7uumCrueusVxuICAgKlxuICAgKiBAdGhyb3dzIOacquiwg+eUqCBnZW5lcmF0ZSgpIOaXtuaKm+WHuuW8guW4uFxuICAgKi9cbiAgYXN5bmMgZ2V0RW1haWxzKG9wdGlvbnM/OiBHZXRFbWFpbHNPcHRpb25zKTogUHJvbWlzZTxHZXRFbWFpbHNSZXN1bHQ+IHtcbiAgICBpZiAoIXRoaXMuZW1haWxJbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVtYWlsIGdlbmVyYXRlZC4gQ2FsbCBnZW5lcmF0ZSgpIGZpcnN0LicpO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRFbWFpbHModGhpcy5lbWFpbEluZm8sIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluW9k+WJjee8k+WtmOeahOmCrueuseS/oeaBr1xuICAgKiDmnKrosIPnlKggZ2VuZXJhdGUoKSDml7bov5Tlm54gbnVsbFxuICAgKi9cbiAgZ2V0RW1haWxJbmZvKCk6IEVtYWlsSW5mbyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmVtYWlsSW5mbztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGxpc3RDaGFubmVscyxcbiAgZ2V0Q2hhbm5lbEluZm8sXG4gIGdlbmVyYXRlRW1haWwsXG4gIGdldEVtYWlscyxcbiAgVGVtcEVtYWlsQ2xpZW50LFxuICBzZXRDb25maWcsXG4gIGdldENvbmZpZyxcbn07XG4iXX0=
package/dist/normalize.js CHANGED
@@ -62,7 +62,7 @@ function normalizeId(raw) {
62
62
  * 候选字段: from_address, address_from, from, messageFrom, sender
63
63
  */
64
64
  function normalizeFrom(raw) {
65
- return raw.from_address || raw.address_from || raw.from || raw.messageFrom || raw.sender || '';
65
+ return raw.from_address || raw.address_from || raw.from_email || raw.from || raw.messageFrom || raw.sender || '';
66
66
  }
67
67
  /**
68
68
  * 提取收件人地址,无匹配字段时回退为 recipientEmail
@@ -101,6 +101,8 @@ function normalizeDate(raw) {
101
101
  try {
102
102
  if (raw.received_at)
103
103
  return new Date(raw.received_at).toISOString();
104
+ if (raw.receivedAt)
105
+ return new Date(String(raw.receivedAt).replace(' ', 'T')).toISOString();
104
106
  if (raw.created_at)
105
107
  return new Date(raw.created_at).toISOString();
106
108
  if (raw.createdAt)
@@ -132,6 +134,10 @@ function normalizeIsRead(raw) {
132
134
  return raw.read;
133
135
  if (typeof raw.isRead === 'boolean')
134
136
  return raw.isRead;
137
+ if (typeof raw.is_seen === 'number')
138
+ return raw.is_seen === 1;
139
+ if (typeof raw.is_seen === 'string')
140
+ return raw.is_seen === '1';
135
141
  if (typeof raw.is_read === 'number')
136
142
  return raw.is_read === 1;
137
143
  if (typeof raw.is_read === 'string')
@@ -154,4 +160,4 @@ function normalizeAttachments(attachments) {
154
160
  url: a.url || a.download_url || a.downloadUrl || undefined,
155
161
  }));
156
162
  }
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25vcm1hbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLHdDQTBCQztBQXBDRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixjQUFjLENBQUMsR0FBUSxFQUFFLGlCQUF5QixFQUFFO0lBQ2xFLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFOUI7Ozs7O09BS0c7SUFDSCxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUM7UUFDeEIsRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDO1FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7UUFDOUIsSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQztRQUN4QixNQUFNLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQztRQUM1QixXQUFXLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztLQUNuRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLE9BQWU7SUFDcEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN6QyxPQUFPLENBQUMs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U0FBUyxvQkFBb0IsQ0FBQyxXQUFnQjtJQUM1QyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMzRCxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO1FBQ3BDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksU0FBUztRQUN2QyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxTQUFTO1FBQ3RGLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxTQUFTO0tBQzNELENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVtYWlsLCBFbWFpbEF0dGFjaG1lbnQgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiDlsIblkITmj5DkvpvllYbov5Tlm57nmoTljp/lp4vpgq7ku7bmlbDmja7moIflh4bljJbkuLrnu5/kuIDnmoQgRW1haWwg5qC85byPXG4gKlxuICog5LiN5ZCM5rig6YGT55qEIEFQSSDov5Tlm57lrZfmrrXlkI3lkITkuI3nm7jlkIzvvIzmraTlh73mlbDpgJrov4flpJrlrZfmrrXlgJnpgInnrZbnlaVcbiAqIOWwhuWug+S7rOe7n+S4gOaYoOWwhOS4uuagh+WHhueahCBFbWFpbCDnu5PmnoTvvIzkv53or4EgU0RLIOi+k+WHuuS4gOiHtOaAp+OAglxuICpcbiAqIEBwYXJhbSByYXcgLSDljp/lp4vpgq7ku7bmlbDmja7vvIjmnaXoh6rkuI3lkIzmj5DkvpvllYbnmoQgQVBJIOWTjeW6lO+8iVxuICogQHBhcmFtIHJlY2lwaWVudEVtYWlsIC0g5pS25Lu25Lq66YKu566x5Zyw5Z2A77yM5b2T5Y6f5aeL5pWw5o2u5Lit5peg5pS25Lu25Lq65a2X5q615pe255So5L2c5Zue6YCA5YC8XG4gKiBAcmV0dXJucyDmoIflh4bljJbnmoQgRW1haWwg5a+56LGhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVFbWFpbChyYXc6IGFueSwgcmVjaXBpZW50RW1haWw6IHN0cmluZyA9ICcnKTogRW1haWwge1xuICBsZXQgdGV4dCA9IG5vcm1hbGl6ZVRleHQocmF3KTtcbiAgbGV0IGh0bWwgPSBub3JtYWxpemVIdG1sKHJhdyk7XG5cbiAgLypcbiAgICog5L+u5q2jIHRleHQvaHRtbCDplJnphY3vvJpcbiAgICog6YOo5YiG5rig6YGT5bCGIEhUTUwg5YaF5a655pS+5ZyoIGJvZHkvdGV4dCDnrYnlrZfmrrXkuK3vvIxcbiAgICog5a+86Ie0IG5vcm1hbGl6ZVRleHQg5o+Q5Y+W5YiwIEhUTUwg5YaF5a656ICMIG5vcm1hbGl6ZUh0bWwg5Li656m644CCXG4gICAqIOajgOa1iyB0ZXh0IOS4reaYr+WQpuWMheWQqyBIVE1MIOagh+etvu+8jOWmguaenOaYr+WImeenu+WKqOWIsCBodG1sIOWtl+auteOAglxuICAgKi9cbiAgaWYgKHRleHQgJiYgIWh0bWwgJiYgaXNIdG1sQ29udGVudCh0ZXh0KSkge1xuICAgIGh0bWwgPSB0ZXh0O1xuICAgIHRleHQgPSAnJztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaWQ6IG5vcm1hbGl6ZUlkKHJhdyksXG4gICAgZnJvbTogbm9ybWFsaXplRnJvbShyYXcpLFxuICAgIHRvOiBub3JtYWxpemVUbyhyYXcsIHJlY2lwaWVudEVtYWlsKSxcbiAgICBzdWJqZWN0OiBub3JtYWxpemVTdWJqZWN0KHJhdyksXG4gICAgdGV4dCxcbiAgICBodG1sLFxuICAgIGRhdGU6IG5vcm1hbGl6ZURhdGUocmF3KSxcbiAgICBpc1JlYWQ6IG5vcm1hbGl6ZUlzUmVhZChyYXcpLFxuICAgIGF0dGFjaG1lbnRzOiBub3JtYWxpemVBdHRhY2htZW50cyhyYXcuYXR0YWNobWVudHMpLFxuICB9O1xufVxuXG4vKipcbiAqIOajgOa1i+WGheWuueaYr+WQpuS4uiBIVE1MXG4gKiDpgJrov4fmo4Dmn6XmmK/lkKbljIXlkKvluLjop4HnmoQgSFRNTCDmoIfnrb7mnaXliKTmlq1cbiAqL1xuZnVuY3Rpb24gaXNIdG1sQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgdHJpbW1lZCA9IGNvbnRlbnQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiB0cmltbWVkLnN0YXJ0c1dpdGgoJzwhZG9jdHlwZSBodG1sJykgfHxcbiAgICB0cmltbWVkLnN0YXJ0c1dpdGgoJzxodG1sJykgfHxcbiAgICB0cmltbWVkLnN0YXJ0c1dpdGgoJzxib2R5JykgfHxcbiAgICAodHJpbW1lZC5pbmNsdWRlcygnPGRpdicpICYmIHRyaW1tZWQuaW5jbHVkZXMoJzwvZGl2PicpKSB8fFxuICAgICh0cmltbWVkLmluY2x1ZGVzKCc8dGFibGUnKSAmJiB0cmltbWVkLmluY2x1ZGVzKCc8L3RhYmxlPicpKSB8fFxuICAgICh0cmltbWVkLmluY2x1ZGVzKCc8cCcpICYmIHRyaW1tZWQuaW5jbHVkZXMoJzwvcD4nKSAmJiB0cmltbWVkLmluY2x1ZGVzKCc8JykpO1xufVxuXG4vKipcbiAqIOaPkOWPlumCruS7tiBJRFxuICog5YCZ6YCJ5a2X5q61OiBpZCwgZWlkLCBfaWQsIG1haWxib3hJZCwgbWVzc2FnZUlkLCBtYWlsX2lkXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKHJhdzogYW55KTogc3RyaW5nIHtcbiAgY29uc3QgaWQgPSByYXcuaWQgPz8gcmF3LmVpZCA/PyByYXcuX2lkID8/IHJhdy5tYWlsYm94SWQgPz8gcmF3Lm1lc3NhZ2VJZCA/PyByYXcubWFpbF9pZCA/PyAnJztcbiAgcmV0dXJuIFN0cmluZyhpZCk7XG59XG5cbi8qKlxuICog5o+Q5Y+W5Y+R5Lu25Lq65Zyw5Z2AXG4gKiDlgJnpgInlrZfmrrU6IGZyb21fYWRkcmVzcywgYWRkcmVzc19mcm9tLCBmcm9tLCBtZXNzYWdlRnJvbSwgc2VuZGVyXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb20ocmF3OiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3LmZyb21fYWRkcmVzcyB8fCByYXcuYWRkcmVzc19mcm9tIHx8IHJhdy5mcm9tIHx8IHJhdy5tZXNzYWdlRnJvbSB8fCByYXcuc2VuZGVyIHx8ICcnO1xufVxuXG4vKipcbiAqIOaPkOWPluaUtuS7tuS6uuWcsOWdgO+8jOaXoOWMuemFjeWtl+auteaXtuWbnumAgOS4uiByZWNpcGllbnRFbWFpbFxuICog5YCZ6YCJ5a2X5q61OiB0bywgdG9fYWRkcmVzcywgbmFtZV90bywgZW1haWxfYWRkcmVzcywgYWRkcmVzc1xuICovXG5mdW5jdGlvbiBub3JtYWxpemVUbyhyYXc6IGFueSwgcmVjaXBpZW50RW1haWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByYXcudG8gfHwgcmF3LnRvX2FkZHJlc3MgfHwgcmF3Lm5hbWVfdG8gfHwgcmF3LmVtYWlsX2FkZHJlc3MgfHwgcmF3LmFkZHJlc3MgfHwgcmVjaXBpZW50RW1haWwgfHwgJyc7XG59XG5cbi8qKlxuICog5o+Q5Y+W6YKu5Lu25Li76aKYXG4gKiDlgJnpgInlrZfmrrU6IHN1YmplY3QsIGVfc3ViamVjdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTdWJqZWN0KHJhdzogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIHJhdy5zdWJqZWN0IHx8IHJhdy5lX3N1YmplY3QgfHwgJyc7XG59XG5cbi8qKlxuICog5o+Q5Y+W57qv5paH5pys5YaF5a65XG4gKiDlgJnpgInlrZfmrrU6IHRleHQsIGJvZHksIGNvbnRlbnQsIGJvZHlfdGV4dCwgdGV4dF9jb250ZW50XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRleHQocmF3OiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3LnRleHQgfHwgcmF3LmJvZHkgfHwgcmF3LmNvbnRlbnQgfHwgcmF3LmJvZHlfdGV4dCB8fCByYXcudGV4dF9jb250ZW50IHx8ICcnO1xufVxuXG4vKipcbiAqIOaPkOWPliBIVE1MIOWGheWuuVxuICog5YCZ6YCJ5a2X5q61OiBodG1sLCBodG1sX2NvbnRlbnQsIGJvZHlfaHRtbFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVIdG1sKHJhdzogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIHJhdy5odG1sIHx8IHJhdy5odG1sX2NvbnRlbnQgfHwgcmF3LmJvZHlfaHRtbCB8fCAnJztcbn1cblxuLyoqXG4gKiDmj5Dlj5blubbnu5/kuIDml6XmnJ/moLzlvI/kuLogSVNPIDg2MDFcbiAqIOWAmemAieWtl+autTogcmVjZWl2ZWRfYXQsIGNyZWF0ZWRfYXQsIGNyZWF0ZWRBdCwgZGF0ZSwgdGltZXN0YW1wLCBlX2RhdGVcbiAqIOWFtuS4rSB0aW1lc3RhbXAg5Li6IFVuaXgg56eS57qn5pe26Ze05oiz77yM6ZyA5LmY5LulIDEwMDAg6L2s5Li65q+r56eSXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGUocmF3OiBhbnkpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGlmIChyYXcucmVjZWl2ZWRfYXQpIHJldHVybiBuZXcgRGF0ZShyYXcucmVjZWl2ZWRfYXQpLnRvSVNPU3RyaW5nKCk7XG4gICAgaWYgKHJhdy5jcmVhdGVkX2F0KSByZXR1cm4gbmV3IERhdGUocmF3LmNyZWF0ZWRfYXQpLnRvSVNPU3RyaW5nKCk7XG4gICAgaWYgKHJhdy5jcmVhdGVkQXQpIHJldHVybiBuZXcgRGF0ZShyYXcuY3JlYXRlZEF0KS50b0lTT1N0cmluZygpO1xuICAgIGlmIChyYXcuZGF0ZSkge1xuICAgICAgaWYgKHR5cGVvZiByYXcuZGF0ZSA9PT0gJ251bWJlcicpIHJldHVybiBuZXcgRGF0ZShyYXcuZGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShyYXcuZGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHJhdy50aW1lc3RhbXApIHJldHVybiBuZXcgRGF0ZShyYXcudGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgICBpZiAocmF3LmVfZGF0ZSkgcmV0dXJuIG5ldyBEYXRlKHJhdy5lX2RhdGUpLnRvSVNPU3RyaW5nKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8qIOaXpeacn+ino+aekOWksei0pe+8jOi/lOWbnuepuuWtl+espuS4siAqL1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiDmj5Dlj5blt7Lor7vnirbmgIFcbiAqIOWAmemAieWtl+autTogc2VlbiwgcmVhZCwgaXNSZWFkLCBpc19yZWFkXG4gKiDmlK/mjIEgYm9vbGVhbiAvIG51bWJlcigwfDEpIC8gc3RyaW5nKCcwJ3wnMScpIOWkmuenjeexu+Wei1xuICovXG5mdW5jdGlvbiBub3JtYWxpemVJc1JlYWQocmF3OiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiByYXcuc2VlbiA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gcmF3LnNlZW47XG4gIGlmICh0eXBlb2YgcmF3LnJlYWQgPT09ICdib29sZWFuJykgcmV0dXJuIHJhdy5yZWFkO1xuICBpZiAodHlwZW9mIHJhdy5pc1JlYWQgPT09ICdib29sZWFuJykgcmV0dXJuIHJhdy5pc1JlYWQ7XG4gIGlmICh0eXBlb2YgcmF3LmlzX3JlYWQgPT09ICdudW1iZXInKSByZXR1cm4gcmF3LmlzX3JlYWQgPT09IDE7XG4gIGlmICh0eXBlb2YgcmF3LmlzX3JlYWQgPT09ICdzdHJpbmcnKSByZXR1cm4gcmF3LmlzX3JlYWQgPT09ICcxJztcbiAgaWYgKHR5cGVvZiByYXcuaXNfcmVhZCA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gcmF3LmlzX3JlYWQ7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiDmj5Dlj5blubbmoIflh4bljJbpmYTku7bliJfooahcbiAqIOavj+S4qumZhOS7tueahOWtl+auteS5n+mHh+eUqOWkmuWAmemAieetlueVpeaYoOWwhFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBdHRhY2htZW50cyhhdHRhY2htZW50czogYW55KTogRW1haWxBdHRhY2htZW50W10ge1xuICBpZiAoIWF0dGFjaG1lbnRzIHx8ICFBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzKSkgcmV0dXJuIFtdO1xuICByZXR1cm4gYXR0YWNobWVudHMubWFwKChhOiBhbnkpID0+ICh7XG4gICAgZmlsZW5hbWU6IGEuZmlsZW5hbWUgfHwgYS5uYW1lIHx8ICcnLFxuICAgIHNpemU6IGEuc2l6ZSB8fCBhLmZpbGVzaXplIHx8IHVuZGVmaW5lZCxcbiAgICBjb250ZW50VHlwZTogYS5jb250ZW50VHlwZSB8fCBhLmNvbnRlbnRfdHlwZSB8fCBhLm1pbWVUeXBlIHx8IGEubWltZV90eXBlIHx8IHVuZGVmaW5lZCxcbiAgICB1cmw6IGEudXJsIHx8IGEuZG93bmxvYWRfdXJsIHx8IGEuZG93bmxvYWRVcmwgfHwgdW5kZWZpbmVkLFxuICB9KSk7XG59XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25vcm1hbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLHdDQTBCQztBQXBDRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixjQUFjLENBQUMsR0FBUSxFQUFFLGlCQUF5QixFQUFFO0lBQ2xFLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFOUI7Ozs7O09BS0c7SUFDSCxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUM7UUFDeEIsRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDO1FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7UUFDOUIsSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQztRQUN4QixNQUFNLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQztRQUM1QixXQUFXLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztLQUNuRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLE9BQWU7SUFDcEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN6QyxPQUFPLENBQUMs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UTtRQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUM7SUFDaEUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssUUFBUTtRQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDOUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssUUFBUTtRQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUM7SUFDaEUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssU0FBUztRQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUN6RCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLG9CQUFvQixDQUFDLFdBQWdCO0lBQzVDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzNELE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7UUFDcEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxTQUFTO1FBQ3ZDLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLFNBQVM7UUFDdEYsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLFNBQVM7S0FDM0QsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW1haWwsIEVtYWlsQXR0YWNobWVudCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIOWwhuWQhOaPkOS+m+WVhui/lOWbnueahOWOn+Wni+mCruS7tuaVsOaNruagh+WHhuWMluS4uue7n+S4gOeahCBFbWFpbCDmoLzlvI9cbiAqXG4gKiDkuI3lkIzmuKDpgZPnmoQgQVBJIOi/lOWbnuWtl+auteWQjeWQhOS4jeebuOWQjO+8jOatpOWHveaVsOmAmui/h+WkmuWtl+auteWAmemAieetlueVpVxuICog5bCG5a6D5Lus57uf5LiA5pig5bCE5Li65qCH5YeG55qEIEVtYWlsIOe7k+aehO+8jOS/neivgSBTREsg6L6T5Ye65LiA6Ie05oCn44CCXG4gKlxuICogQHBhcmFtIHJhdyAtIOWOn+Wni+mCruS7tuaVsOaNru+8iOadpeiHquS4jeWQjOaPkOS+m+WVhueahCBBUEkg5ZON5bqU77yJXG4gKiBAcGFyYW0gcmVjaXBpZW50RW1haWwgLSDmlLbku7bkurrpgq7nrrHlnLDlnYDvvIzlvZPljp/lp4vmlbDmja7kuK3ml6DmlLbku7bkurrlrZfmrrXml7bnlKjkvZzlm57pgIDlgLxcbiAqIEByZXR1cm5zIOagh+WHhuWMlueahCBFbWFpbCDlr7nosaFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUVtYWlsKHJhdzogYW55LCByZWNpcGllbnRFbWFpbDogc3RyaW5nID0gJycpOiBFbWFpbCB7XG4gIGxldCB0ZXh0ID0gbm9ybWFsaXplVGV4dChyYXcpO1xuICBsZXQgaHRtbCA9IG5vcm1hbGl6ZUh0bWwocmF3KTtcblxuICAvKlxuICAgKiDkv67mraMgdGV4dC9odG1sIOmUmemFje+8mlxuICAgKiDpg6jliIbmuKDpgZPlsIYgSFRNTCDlhoXlrrnmlL7lnKggYm9keS90ZXh0IOetieWtl+auteS4re+8jFxuICAgKiDlr7zoh7Qgbm9ybWFsaXplVGV4dCDmj5Dlj5bliLAgSFRNTCDlhoXlrrnogIwgbm9ybWFsaXplSHRtbCDkuLrnqbrjgIJcbiAgICog5qOA5rWLIHRleHQg5Lit5piv5ZCm5YyF5ZCrIEhUTUwg5qCH562+77yM5aaC5p6c5piv5YiZ56e75Yqo5YiwIGh0bWwg5a2X5q6144CCXG4gICAqL1xuICBpZiAodGV4dCAmJiAhaHRtbCAmJiBpc0h0bWxDb250ZW50KHRleHQpKSB7XG4gICAgaHRtbCA9IHRleHQ7XG4gICAgdGV4dCA9ICcnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogbm9ybWFsaXplSWQocmF3KSxcbiAgICBmcm9tOiBub3JtYWxpemVGcm9tKHJhdyksXG4gICAgdG86IG5vcm1hbGl6ZVRvKHJhdywgcmVjaXBpZW50RW1haWwpLFxuICAgIHN1YmplY3Q6IG5vcm1hbGl6ZVN1YmplY3QocmF3KSxcbiAgICB0ZXh0LFxuICAgIGh0bWwsXG4gICAgZGF0ZTogbm9ybWFsaXplRGF0ZShyYXcpLFxuICAgIGlzUmVhZDogbm9ybWFsaXplSXNSZWFkKHJhdyksXG4gICAgYXR0YWNobWVudHM6IG5vcm1hbGl6ZUF0dGFjaG1lbnRzKHJhdy5hdHRhY2htZW50cyksXG4gIH07XG59XG5cbi8qKlxuICog5qOA5rWL5YaF5a655piv5ZCm5Li6IEhUTUxcbiAqIOmAmui/h+ajgOafpeaYr+WQpuWMheWQq+W4uOingeeahCBIVE1MIOagh+etvuadpeWIpOaWrVxuICovXG5mdW5jdGlvbiBpc0h0bWxDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB0cmltbWVkID0gY29udGVudC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHRyaW1tZWQuc3RhcnRzV2l0aCgnPCFkb2N0eXBlIGh0bWwnKSB8fFxuICAgIHRyaW1tZWQuc3RhcnRzV2l0aCgnPGh0bWwnKSB8fFxuICAgIHRyaW1tZWQuc3RhcnRzV2l0aCgnPGJvZHknKSB8fFxuICAgICh0cmltbWVkLmluY2x1ZGVzKCc8ZGl2JykgJiYgdHJpbW1lZC5pbmNsdWRlcygnPC9kaXY+JykpIHx8XG4gICAgKHRyaW1tZWQuaW5jbHVkZXMoJzx0YWJsZScpICYmIHRyaW1tZWQuaW5jbHVkZXMoJzwvdGFibGU+JykpIHx8XG4gICAgKHRyaW1tZWQuaW5jbHVkZXMoJzxwJykgJiYgdHJpbW1lZC5pbmNsdWRlcygnPC9wPicpICYmIHRyaW1tZWQuaW5jbHVkZXMoJzwnKSk7XG59XG5cbi8qKlxuICog5o+Q5Y+W6YKu5Lu2IElEXG4gKiDlgJnpgInlrZfmrrU6IGlkLCBlaWQsIF9pZCwgbWFpbGJveElkLCBtZXNzYWdlSWQsIG1haWxfaWRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSWQocmF3OiBhbnkpOiBzdHJpbmcge1xuICBjb25zdCBpZCA9IHJhdy5pZCA/PyByYXcuZWlkID8/IHJhdy5faWQgPz8gcmF3Lm1haWxib3hJZCA/PyByYXcubWVzc2FnZUlkID8/IHJhdy5tYWlsX2lkID8/ICcnO1xuICByZXR1cm4gU3RyaW5nKGlkKTtcbn1cblxuLyoqXG4gKiDmj5Dlj5blj5Hku7bkurrlnLDlnYBcbiAqIOWAmemAieWtl+autTogZnJvbV9hZGRyZXNzLCBhZGRyZXNzX2Zyb20sIGZyb20sIG1lc3NhZ2VGcm9tLCBzZW5kZXJcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbShyYXc6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiByYXcuZnJvbV9hZGRyZXNzIHx8IHJhdy5hZGRyZXNzX2Zyb20gfHwgcmF3LmZyb21fZW1haWwgfHwgcmF3LmZyb20gfHwgcmF3Lm1lc3NhZ2VGcm9tIHx8IHJhdy5zZW5kZXIgfHwgJyc7XG59XG5cbi8qKlxuICog5o+Q5Y+W5pS25Lu25Lq65Zyw5Z2A77yM5peg5Yy56YWN5a2X5q615pe25Zue6YCA5Li6IHJlY2lwaWVudEVtYWlsXG4gKiDlgJnpgInlrZfmrrU6IHRvLCB0b19hZGRyZXNzLCBuYW1lX3RvLCBlbWFpbF9hZGRyZXNzLCBhZGRyZXNzXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRvKHJhdzogYW55LCByZWNpcGllbnRFbWFpbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJhdy50byB8fCByYXcudG9fYWRkcmVzcyB8fCByYXcubmFtZV90byB8fCByYXcuZW1haWxfYWRkcmVzcyB8fCByYXcuYWRkcmVzcyB8fCByZWNpcGllbnRFbWFpbCB8fCAnJztcbn1cblxuLyoqXG4gKiDmj5Dlj5bpgq7ku7bkuLvpophcbiAqIOWAmemAieWtl+autTogc3ViamVjdCwgZV9zdWJqZWN0XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN1YmplY3QocmF3OiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3LnN1YmplY3QgfHwgcmF3LmVfc3ViamVjdCB8fCAnJztcbn1cblxuLyoqXG4gKiDmj5Dlj5bnuq/mlofmnKzlhoXlrrlcbiAqIOWAmemAieWtl+autTogdGV4dCwgYm9keSwgY29udGVudCwgYm9keV90ZXh0LCB0ZXh0X2NvbnRlbnRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVGV4dChyYXc6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiByYXcudGV4dCB8fCByYXcuYm9keSB8fCByYXcuY29udGVudCB8fCByYXcuYm9keV90ZXh0IHx8IHJhdy50ZXh0X2NvbnRlbnQgfHwgJyc7XG59XG5cbi8qKlxuICog5o+Q5Y+WIEhUTUwg5YaF5a65XG4gKiDlgJnpgInlrZfmrrU6IGh0bWwsIGh0bWxfY29udGVudCwgYm9keV9odG1sXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUh0bWwocmF3OiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3Lmh0bWwgfHwgcmF3Lmh0bWxfY29udGVudCB8fCByYXcuYm9keV9odG1sIHx8ICcnO1xufVxuXG4vKipcbiAqIOaPkOWPluW5tue7n+S4gOaXpeacn+agvOW8j+S4uiBJU08gODYwMVxuICog5YCZ6YCJ5a2X5q61OiByZWNlaXZlZF9hdCwgY3JlYXRlZF9hdCwgY3JlYXRlZEF0LCBkYXRlLCB0aW1lc3RhbXAsIGVfZGF0ZVxuICog5YW25LitIHRpbWVzdGFtcCDkuLogVW5peCDnp5Lnuqfml7bpl7TmiLPvvIzpnIDkuZjku6UgMTAwMCDovazkuLrmr6vnp5JcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGF0ZShyYXc6IGFueSk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgaWYgKHJhdy5yZWNlaXZlZF9hdCkgcmV0dXJuIG5ldyBEYXRlKHJhdy5yZWNlaXZlZF9hdCkudG9JU09TdHJpbmcoKTtcbiAgICBpZiAocmF3LnJlY2VpdmVkQXQpIHJldHVybiBuZXcgRGF0ZShTdHJpbmcocmF3LnJlY2VpdmVkQXQpLnJlcGxhY2UoJyAnLCAnVCcpKS50b0lTT1N0cmluZygpO1xuICAgIGlmIChyYXcuY3JlYXRlZF9hdCkgcmV0dXJuIG5ldyBEYXRlKHJhdy5jcmVhdGVkX2F0KS50b0lTT1N0cmluZygpO1xuICAgIGlmIChyYXcuY3JlYXRlZEF0KSByZXR1cm4gbmV3IERhdGUocmF3LmNyZWF0ZWRBdCkudG9JU09TdHJpbmcoKTtcbiAgICBpZiAocmF3LmRhdGUpIHtcbiAgICAgIGlmICh0eXBlb2YgcmF3LmRhdGUgPT09ICdudW1iZXInKSByZXR1cm4gbmV3IERhdGUocmF3LmRhdGUpLnRvSVNPU3RyaW5nKCk7XG4gICAgICByZXR1cm4gbmV3IERhdGUocmF3LmRhdGUpLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmIChyYXcudGltZXN0YW1wKSByZXR1cm4gbmV3IERhdGUocmF3LnRpbWVzdGFtcCAqIDEwMDApLnRvSVNPU3RyaW5nKCk7XG4gICAgaWYgKHJhdy5lX2RhdGUpIHJldHVybiBuZXcgRGF0ZShyYXcuZV9kYXRlKS50b0lTT1N0cmluZygpO1xuICB9IGNhdGNoIHtcbiAgICAvKiDml6XmnJ/op6PmnpDlpLHotKXvvIzov5Tlm57nqbrlrZfnrKbkuLIgKi9cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICog5o+Q5Y+W5bey6K+754q25oCBXG4gKiDlgJnpgInlrZfmrrU6IHNlZW4sIHJlYWQsIGlzUmVhZCwgaXNfcmVhZFxuICog5pSv5oyBIGJvb2xlYW4gLyBudW1iZXIoMHwxKSAvIHN0cmluZygnMCd8JzEnKSDlpJrnp43nsbvlnotcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSXNSZWFkKHJhdzogYW55KTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgcmF3LnNlZW4gPT09ICdib29sZWFuJykgcmV0dXJuIHJhdy5zZWVuO1xuICBpZiAodHlwZW9mIHJhdy5yZWFkID09PSAnYm9vbGVhbicpIHJldHVybiByYXcucmVhZDtcbiAgaWYgKHR5cGVvZiByYXcuaXNSZWFkID09PSAnYm9vbGVhbicpIHJldHVybiByYXcuaXNSZWFkO1xuICBpZiAodHlwZW9mIHJhdy5pc19zZWVuID09PSAnbnVtYmVyJykgcmV0dXJuIHJhdy5pc19zZWVuID09PSAxO1xuICBpZiAodHlwZW9mIHJhdy5pc19zZWVuID09PSAnc3RyaW5nJykgcmV0dXJuIHJhdy5pc19zZWVuID09PSAnMSc7XG4gIGlmICh0eXBlb2YgcmF3LmlzX3JlYWQgPT09ICdudW1iZXInKSByZXR1cm4gcmF3LmlzX3JlYWQgPT09IDE7XG4gIGlmICh0eXBlb2YgcmF3LmlzX3JlYWQgPT09ICdzdHJpbmcnKSByZXR1cm4gcmF3LmlzX3JlYWQgPT09ICcxJztcbiAgaWYgKHR5cGVvZiByYXcuaXNfcmVhZCA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gcmF3LmlzX3JlYWQ7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiDmj5Dlj5blubbmoIflh4bljJbpmYTku7bliJfooahcbiAqIOavj+S4qumZhOS7tueahOWtl+auteS5n+mHh+eUqOWkmuWAmemAieetlueVpeaYoOWwhFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBdHRhY2htZW50cyhhdHRhY2htZW50czogYW55KTogRW1haWxBdHRhY2htZW50W10ge1xuICBpZiAoIWF0dGFjaG1lbnRzIHx8ICFBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzKSkgcmV0dXJuIFtdO1xuICByZXR1cm4gYXR0YWNobWVudHMubWFwKChhOiBhbnkpID0+ICh7XG4gICAgZmlsZW5hbWU6IGEuZmlsZW5hbWUgfHwgYS5uYW1lIHx8ICcnLFxuICAgIHNpemU6IGEuc2l6ZSB8fCBhLmZpbGVzaXplIHx8IHVuZGVmaW5lZCxcbiAgICBjb250ZW50VHlwZTogYS5jb250ZW50VHlwZSB8fCBhLmNvbnRlbnRfdHlwZSB8fCBhLm1pbWVUeXBlIHx8IGEubWltZV90eXBlIHx8IHVuZGVmaW5lZCxcbiAgICB1cmw6IGEudXJsIHx8IGEuZG93bmxvYWRfdXJsIHx8IGEuZG93bmxvYWRVcmwgfHwgdW5kZWZpbmVkLFxuICB9KSk7XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { InternalEmailInfo, Email } from '../types';
2
+ export declare function generateEmail(): Promise<InternalEmailInfo>;
3
+ export declare function getEmails(email: string): Promise<Email[]>;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateEmail = generateEmail;
4
+ exports.getEmails = getEmails;
5
+ const normalize_1 = require("../normalize");
6
+ const retry_1 = require("../retry");
7
+ const CHANNEL = 'boomlify';
8
+ const BASE_URL = 'https://v1.boomlify.com';
9
+ const DEFAULT_HEADERS = {
10
+ 'Accept': 'application/json, text/plain, */*',
11
+ 'Accept-Language': 'zh',
12
+ 'Origin': 'https://boomlify.com',
13
+ 'Referer': 'https://boomlify.com/',
14
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0',
15
+ 'sec-ch-ua': '"Chromium";v="146", "Not-A.Brand";v="24", "Microsoft Edge";v="146"',
16
+ 'sec-ch-ua-mobile': '?0',
17
+ 'sec-ch-ua-platform': '"Windows"',
18
+ 'sec-fetch-dest': 'empty',
19
+ 'sec-fetch-mode': 'cors',
20
+ 'sec-fetch-site': 'same-site',
21
+ 'x-user-language': 'zh',
22
+ };
23
+ async function getDomains() {
24
+ const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}/domains/public`, {
25
+ method: 'GET',
26
+ headers: DEFAULT_HEADERS,
27
+ });
28
+ if (!response.ok) {
29
+ throw new Error(`Failed to get domains: ${response.status}`);
30
+ }
31
+ const data = await response.json();
32
+ return data.filter(d => d.is_active === 1 && d.id && d.domain);
33
+ }
34
+ /**
35
+ * 在服务端登记公开收件箱(需 domain 的 UUID)。
36
+ * 仅随机 local@domain 不会入库,SMTP 邮件无法与列表 API 对应。
37
+ */
38
+ async function createPublicInbox(domainId) {
39
+ const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}/emails/public/create`, {
40
+ method: 'POST',
41
+ headers: {
42
+ ...DEFAULT_HEADERS,
43
+ 'Content-Type': 'application/json',
44
+ },
45
+ body: JSON.stringify({ domainId }),
46
+ });
47
+ if (!response.ok) {
48
+ throw new Error(`Failed to create boomlify inbox: ${response.status}`);
49
+ }
50
+ const data = await response.json();
51
+ if (data.error) {
52
+ const extra = data.message ? ` — ${data.message}` : '';
53
+ if (data.captchaRequired) {
54
+ throw new Error(`boomlify: ${data.error}${extra}(服务端限流/需验证码,请稍后重试)`);
55
+ }
56
+ throw new Error(`boomlify: ${data.error}${extra}`);
57
+ }
58
+ if (!data.id) {
59
+ throw new Error('boomlify: public create returned no inbox id');
60
+ }
61
+ return data.id;
62
+ }
63
+ async function generateEmail() {
64
+ const domains = await getDomains();
65
+ if (domains.length === 0) {
66
+ throw new Error('Failed to generate email: no domains available');
67
+ }
68
+ const pick = domains[Math.floor(Math.random() * domains.length)];
69
+ const boxId = await createPublicInbox(pick.id);
70
+ /* 收件地址与列表 API 一致:inboxId@域名(与官网 public create 行为一致) */
71
+ const email = `${boxId}@${pick.domain}`;
72
+ return {
73
+ channel: CHANNEL,
74
+ email,
75
+ token: boxId,
76
+ };
77
+ }
78
+ function boomlifyInboxPathSegment(email) {
79
+ const at = email.indexOf('@');
80
+ const local = at > 0 ? email.slice(0, at) : email;
81
+ /* public create 返回的 inbox id 为 UUID;列表接口路径为 /emails/public/{id},非完整地址 */
82
+ const uuidRe = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
83
+ return uuidRe.test(local) ? local : email;
84
+ }
85
+ async function getEmails(email) {
86
+ const pathSeg = boomlifyInboxPathSegment(email);
87
+ const response = await (0, retry_1.fetchWithTimeout)(`${BASE_URL}/emails/public/${encodeURIComponent(pathSeg)}`, {
88
+ method: 'GET',
89
+ headers: DEFAULT_HEADERS,
90
+ });
91
+ if (!response.ok) {
92
+ throw new Error(`Failed to get emails: ${response.status}`);
93
+ }
94
+ const data = await response.json();
95
+ return data.map((raw) => (0, normalize_1.normalizeEmail)({
96
+ id: raw.id,
97
+ from: raw.from_email || raw.from_name || '',
98
+ to: email,
99
+ subject: raw.subject || '',
100
+ text: raw.body_text || '',
101
+ html: raw.body_html || '',
102
+ date: raw.received_at || '',
103
+ isRead: false,
104
+ }, email));
105
+ }
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbWxpZnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXJzL2Jvb21saWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUdBLHNDQWlCQztBQVVELDhCQXVCQztBQWxKRCw0Q0FBOEM7QUFDOUMsb0NBQTRDO0FBRTVDLE1BQU0sT0FBTyxHQUFZLFVBQVUsQ0FBQztBQUNwQyxNQUFNLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQztBQUUzQyxNQUFNLGVBQWUsR0FBRztJQUN0QixRQUFRLEVBQUUsbUNBQW1DO0lBQzdDLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsUUFBUSxFQUFFLHNCQUFzQjtJQUNoQyxTQUFTLEVBQUUsdUJBQXVCO0lBQ2xDLFlBQVksRUFBRSwrSEFBK0g7SUFDN0ksV0FBVyxFQUFFLG9FQUFvRTtJQUNqRixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLG9CQUFvQixFQUFFLFdBQVc7SUFDakMsZ0JBQWdCLEVBQUUsT0FBTztJQUN6QixnQkFBZ0IsRUFBRSxNQUFNO0lBQ3hCLGdCQUFnQixFQUFFLFdBQVc7SUFDN0IsaUJBQWlCLEVBQUUsSUFBSTtDQUN4QixDQUFDO0FBK0JGLEtBQUssVUFBVSxVQUFVO0lBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSx3QkFBZ0IsRUFBQyxHQUFHLFFBQVEsaUJBQWlCLEVBQUU7UUFDcEUsTUFBTSxFQUFFLEtBQUs7UUFDYixPQUFPLEVBQUUsZUFBZTtLQUN6QixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxNQUFNLElBQUksR0FBcUIsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENB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QztBQUM1QyxDQUFDO0FBRU0sS0FBSyxVQUFVLFNBQVMsQ0FBQyxLQUFhO0lBQzNDLE1BQU0sT0FBTyxHQUFHLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSx3QkFBZ0IsRUFBQyxHQUFHLFFBQVEsa0JBQWtCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7UUFDbEcsTUFBTSxFQUFFLEtBQUs7UUFDYixPQUFPLEVBQUUsZUFBZTtLQUN6QixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLElBQUksR0FBb0IsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFcEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDBCQUFjLEVBQUM7UUFDdEMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ1YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFNBQVMsSUFBSSxFQUFFO1FBQzNDLEVBQUUsRUFBRSxLQUFLO1FBQ1QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRTtRQUMxQixJQUFJLEVBQUUsR0FBRyxDQUFDLFNBQVMsSUFBSSxFQUFFO1FBQ3pCLElBQUksRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUU7UUFDekIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRTtRQUMzQixNQUFNLEVBQUUsS0FBSztLQUNkLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnRlcm5hbEVtYWlsSW5mbywgRW1haWwsIENoYW5uZWwgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBub3JtYWxpemVFbWFpbCB9IGZyb20gJy4uL25vcm1hbGl6ZSc7XG5pbXBvcnQgeyBmZXRjaFdpdGhUaW1lb3V0IH0gZnJvbSAnLi4vcmV0cnknO1xuXG5jb25zdCBDSEFOTkVMOiBDaGFubmVsID0gJ2Jvb21saWZ5JztcbmNvbnN0IEJBU0VfVVJMID0gJ2h0dHBzOi8vdjEuYm9vbWxpZnkuY29tJztcblxuY29uc3QgREVGQVVMVF9IRUFERVJTID0ge1xuICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICdBY2NlcHQtTGFuZ3VhZ2UnOiAnemgnLFxuICAnT3JpZ2luJzogJ2h0dHBzOi8vYm9vbWxpZnkuY29tJyxcbiAgJ1JlZmVyZXInOiAnaHR0cHM6Ly9ib29tbGlmeS5jb20vJyxcbiAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzE0Ni4wLjAuMCBTYWZhcmkvNTM3LjM2IEVkZy8xNDYuMC4wLjAnLFxuICAnc2VjLWNoLXVhJzogJ1wiQ2hyb21pdW1cIjt2PVwiMTQ2XCIsIFwiTm90LUEuQnJhbmRcIjt2PVwiMjRcIiwgXCJNaWNyb3NvZnQgRWRnZVwiO3Y9XCIxNDZcIicsXG4gICdzZWMtY2gtdWEtbW9iaWxlJzogJz8wJyxcbiAgJ3NlYy1jaC11YS1wbGF0Zm9ybSc6ICdcIldpbmRvd3NcIicsXG4gICdzZWMtZmV0Y2gtZGVzdCc6ICdlbXB0eScsXG4gICdzZWMtZmV0Y2gtbW9kZSc6ICdjb3JzJyxcbiAgJ3NlYy1mZXRjaC1zaXRlJzogJ3NhbWUtc2l0ZScsXG4gICd4LXVzZXItbGFuZ3VhZ2UnOiAnemgnLFxufTtcblxuaW50ZXJmYWNlIEJvb21saWZ5RG9tYWluIHtcbiAgaWQ6IHN0cmluZztcbiAgZG9tYWluOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgaXNfcHJlbWl1bTogbnVtYmVyO1xuICBpc19lZHU6IG51bWJlcjtcbiAgZXhwaXJlc19hdDogc3RyaW5nO1xuICBpc19hY3RpdmU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEJvb21saWZ5UHVibGljQ3JlYXRlUmVzcG9uc2Uge1xuICBpZD86IHN0cmluZztcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIGNhcHRjaGFSZXF1aXJlZD86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBCb29tbGlmeUVtYWlsIHtcbiAgaWQ6IHN0cmluZztcbiAgdGVtcF9lbWFpbF9pZDogc3RyaW5nO1xuICBmcm9tX2VtYWlsOiBzdHJpbmc7XG4gIGZyb21fbmFtZTogc3RyaW5nO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIGJvZHlfaHRtbDogc3RyaW5nO1xuICBib2R5X3RleHQ6IHN0cmluZztcbiAgcmVjZWl2ZWRfYXQ6IHN0cmluZztcbiAgdGVtcF9lbWFpbDogc3RyaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXREb21haW5zKCk6IFByb21pc2U8Qm9vbWxpZnlEb21haW5bXT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aFRpbWVvdXQoYCR7QkFTRV9VUkx9L2RvbWFpbnMvcHVibGljYCwge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgaGVhZGVyczogREVGQVVMVF9IRUFERVJTLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IGRvbWFpbnM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICB9XG5cbiAgY29uc3QgZGF0YTogQm9vbWxpZnlEb21haW5bXSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgcmV0dXJuIGRhdGEuZmlsdGVyKGQgPT4gZC5pc19hY3RpdmUgPT09IDEgJiYgZC5pZCAmJiBkLmRvbWFpbik7XG59XG5cbi8qKlxuICog5Zyo5pyN5Yqh56uv55m76K6w5YWs5byA5pS25Lu2566x77yI6ZyAIGRvbWFpbiDnmoQgVVVJRO+8ieOAglxuICog5LuF6ZqP5py6IGxvY2FsQGRvbWFpbiDkuI3kvJrlhaXlupPvvIxTTVRQIOmCruS7tuaXoOazleS4juWIl+ihqCBBUEkg5a+55bqU44CCXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVB1YmxpY0luYm94KGRvbWFpbklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aFRpbWVvdXQoYCR7QkFTRV9VUkx9L2VtYWlscy9wdWJsaWMvY3JlYXRlYCwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLkRFRkFVTFRfSEVBREVSUyxcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGRvbWFpbklkIH0pLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGJvb21saWZ5IGluYm94OiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGE6IEJvb21saWZ5UHVibGljQ3JlYXRlUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gIGlmIChkYXRhLmVycm9yKSB7XG4gICAgY29uc3QgZXh0cmEgPSBkYXRhLm1lc3NhZ2UgPyBgIOKAlCAke2RhdGEubWVzc2FnZX1gIDogJyc7XG4gICAgaWYgKGRhdGEuY2FwdGNoYVJlcXVpcmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGJvb21saWZ5OiAke2RhdGEuZXJyb3J9JHtleHRyYX3vvIjmnI3liqHnq6/pmZDmtYEv6ZyA6aqM6K+B56CB77yM6K+356iN5ZCO6YeN6K+V77yJYCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgYm9vbWxpZnk6ICR7ZGF0YS5lcnJvcn0ke2V4dHJhfWApO1xuICB9XG4gIGlmICghZGF0YS5pZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYm9vbWxpZnk6IHB1YmxpYyBjcmVhdGUgcmV0dXJuZWQgbm8gaW5ib3ggaWQnKTtcbiAgfVxuICByZXR1cm4gZGF0YS5pZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWwoKTogUHJvbWlzZTxJbnRlcm5hbEVtYWlsSW5mbz4ge1xuICBjb25zdCBkb21haW5zID0gYXdhaXQgZ2V0RG9tYWlucygpO1xuXG4gIGlmIChkb21haW5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIGVtYWlsOiBubyBkb21haW5zIGF2YWlsYWJsZScpO1xuICB9XG5cbiAgY29uc3QgcGljayA9IGRvbWFpbnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZG9tYWlucy5sZW5ndGgpXTtcbiAgY29uc3QgYm94SWQgPSBhd2FpdCBjcmVhdGVQdWJsaWNJbmJveChwaWNrLmlkKTtcbiAgLyog5pS25Lu25Zyw5Z2A5LiO5YiX6KGoIEFQSSDkuIDoh7TvvJppbmJveElkQOWfn+WQje+8iOS4juWumOe9kSBwdWJsaWMgY3JlYXRlIOihjOS4uuS4gOiHtO+8iSAqL1xuICBjb25zdCBlbWFpbCA9IGAke2JveElkfUAke3BpY2suZG9tYWlufWA7XG5cbiAgcmV0dXJuIHtcbiAgICBjaGFubmVsOiBDSEFOTkVMLFxuICAgIGVtYWlsLFxuICAgIHRva2VuOiBib3hJZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYm9vbWxpZnlJbmJveFBhdGhTZWdtZW50KGVtYWlsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBhdCA9IGVtYWlsLmluZGV4T2YoJ0AnKTtcbiAgY29uc3QgbG9jYWwgPSBhdCA+IDAgPyBlbWFpbC5zbGljZSgwLCBhdCkgOiBlbWFpbDtcbiAgLyogcHVibGljIGNyZWF0ZSDov5Tlm57nmoQgaW5ib3ggaWQg5Li6IFVVSUTvvJvliJfooajmjqXlj6Pot6/lvoTkuLogL2VtYWlscy9wdWJsaWMve2lkfe+8jOmdnuWujOaVtOWcsOWdgCAqL1xuICBjb25zdCB1dWlkUmUgPSAvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pO1xuICByZXR1cm4gdXVpZFJlLnRlc3QobG9jYWwpID8gbG9jYWwgOiBlbWFpbDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEVtYWlscyhlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxFbWFpbFtdPiB7XG4gIGNvbnN0IHBhdGhTZWcgPSBib29tbGlmeUluYm94UGF0aFNlZ21lbnQoZW1haWwpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aFRpbWVvdXQoYCR7QkFTRV9VUkx9L2VtYWlscy9wdWJsaWMvJHtlbmNvZGVVUklDb21wb25lbnQocGF0aFNlZyl9YCwge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgaGVhZGVyczogREVGQVVMVF9IRUFERVJTLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IGVtYWlsczogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cblxuICBjb25zdCBkYXRhOiBCb29tbGlmeUVtYWlsW10gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgcmV0dXJuIGRhdGEubWFwKChyYXcpID0+IG5vcm1hbGl6ZUVtYWlsKHtcbiAgICBpZDogcmF3LmlkLFxuICAgIGZyb206IHJhdy5mcm9tX2VtYWlsIHx8IHJhdy5mcm9tX25hbWUgfHwgJycsXG4gICAgdG86IGVtYWlsLFxuICAgIHN1YmplY3Q6IHJhdy5zdWJqZWN0IHx8ICcnLFxuICAgIHRleHQ6IHJhdy5ib2R5X3RleHQgfHwgJycsXG4gICAgaHRtbDogcmF3LmJvZHlfaHRtbCB8fCAnJyxcbiAgICBkYXRlOiByYXcucmVjZWl2ZWRfYXQgfHwgJycsXG4gICAgaXNSZWFkOiBmYWxzZSxcbiAgfSwgZW1haWwpKTtcbn0iXX0=
@@ -0,0 +1,3 @@
1
+ import { InternalEmailInfo, Email } from '../types';
2
+ export declare function generateEmail(): Promise<InternalEmailInfo>;
3
+ export declare function getEmails(cookieHeader: string, email: string): Promise<Email[]>;