@cartanova/qgrid-cli 2.9.4 → 2.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/bundle/dist/application/qgrid/expired-token-reminder.js +6 -5
  2. package/bundle/dist/application/qgrid/qgrid-image-generation.js +12 -3
  3. package/bundle/dist/application/qgrid/qgrid-response-format.js +8 -6
  4. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +2 -2
  5. package/bundle/dist/application/qgrid/qgrid.types.js +31 -4
  6. package/bundle/dist/application/qgrid/tool-emulation.js +3 -2
  7. package/bundle/dist/application/setting/setting.model.js +8 -2
  8. package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +1 -1
  9. package/bundle/dist/utils/providers/openai/openai-direct-client.js +39 -1
  10. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +41 -20
  11. package/bundle/dist/utils/providers/openai/openai-image-generation.js +145 -0
  12. package/bundle/dist/utils/providers/openai/openai-quota.js +11 -3
  13. package/bundle/dist/utils/providers/openai/openai-refresh.js +7 -5
  14. package/bundle/dist/utils/slack-notify.js +8 -4
  15. package/bundle/src/application/qgrid/expired-token-reminder.test.ts +6 -1
  16. package/bundle/src/application/qgrid/expired-token-reminder.ts +10 -4
  17. package/bundle/src/application/qgrid/qgrid-image-generation.test.ts +53 -0
  18. package/bundle/src/application/qgrid/qgrid-image-generation.ts +32 -2
  19. package/bundle/src/application/qgrid/qgrid-response-format.test.ts +26 -0
  20. package/bundle/src/application/qgrid/qgrid-response-format.ts +21 -13
  21. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +32 -0
  22. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +1 -1
  23. package/bundle/src/application/qgrid/qgrid.types.ts +32 -0
  24. package/bundle/src/application/qgrid/tool-emulation.test.ts +18 -0
  25. package/bundle/src/application/qgrid/tool-emulation.ts +3 -0
  26. package/bundle/src/application/setting/setting.model.test.ts +20 -0
  27. package/bundle/src/application/setting/setting.model.ts +10 -2
  28. package/bundle/src/application/sonamu.generated.http +4 -2
  29. package/bundle/src/utils/providers/common/provider-dispatcher.ts +5 -1
  30. package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +9 -1
  31. package/bundle/src/utils/providers/openai/openai-direct-client.ts +48 -1
  32. package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +136 -2
  33. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +44 -18
  34. package/bundle/src/utils/providers/openai/openai-image-generation.test.ts +135 -0
  35. package/bundle/src/utils/providers/openai/openai-image-generation.ts +177 -0
  36. package/bundle/src/utils/providers/openai/openai-quota.test.ts +32 -0
  37. package/bundle/src/utils/providers/openai/openai-quota.ts +15 -8
  38. package/bundle/src/utils/providers/openai/openai-refresh.test.ts +18 -0
  39. package/bundle/src/utils/providers/openai/openai-refresh.ts +11 -4
  40. package/bundle/src/utils/slack-notify.test.ts +14 -0
  41. package/bundle/src/utils/slack-notify.ts +19 -3
  42. package/bundle/web-dist/client/assets/{index-fogJvajr.js → index-BcCytvFf.js} +3 -3
  43. package/bundle/web-dist/client/assets/{logs-CsY2cqvt.js → logs-BkOilk5x.js} +1 -1
  44. package/bundle/web-dist/client/assets/{monit-ChgaLEcD.js → monit-8oCSLCdL.js} +1 -1
  45. package/bundle/web-dist/client/assets/{routes-BvyiTnOZ.js → routes-DFIF4IoW.js} +1 -1
  46. package/bundle/web-dist/client/assets/{settings-ZR2J9rWb.js → settings-nUI-DR3U.js} +1 -1
  47. package/bundle/web-dist/client/assets/{show-CjwO4-So.js → show-Bzx6Xkoc.js} +1 -1
  48. package/bundle/web-dist/client/assets/{tokens-Bx-hG1gm.js → tokens-DFWCL7Ts.js} +1 -1
  49. package/bundle/web-dist/client/assets/{use-oauth-login-flow-Bqax_icS.js → use-oauth-login-flow-B5MAjpVc.js} +1 -1
  50. package/bundle/web-dist/client/index.html +1 -1
  51. package/bundle/web-dist/server/entry-server.generated.js +1 -1
  52. package/package.json +2 -1
  53. package/skills/qgrid/SKILL.md +1 -1
  54. package/skills/qgrid/references/ai-sdk-provider-contract.md +1 -1
  55. package/skills/qgrid/references/decision-rationale.md +2 -2
  56. package/skills/qgrid/references/openai-codex-runtime.md +8 -0
  57. package/skills/qgrid/references/request-log-run-lifecycle.md +1 -1
  58. package/skills/qgrid/references/token-auth-quota-lifecycle.md +1 -1
@@ -38,7 +38,7 @@ function buildReminderContext(tokens, userMap) {
38
38
  return mention ? `${mention} ${label}` : label;
39
39
  }), "재로그인이 필요합니다"].filter(Boolean).join("\n");
40
40
  }
41
- async function sendReminder(deps, urgent = false) {
41
+ async function sendReminder(deps, mode) {
42
42
  const expired = await deps.findReauthRequired();
43
43
  if (expired.length === 0) return 0;
44
44
  const userMap = deps.getSlackUserMap();
@@ -47,7 +47,8 @@ async function sendReminder(deps, urgent = false) {
47
47
  subject: expired.length > 1 ? `${expired.length}건` : expired[0].name ?? "unnamed",
48
48
  context: buildReminderContext(expired, userMap),
49
49
  color: SLACK_COLOR.bad,
50
- urgent
50
+ urgent: mode === "manual",
51
+ throwOnFailure: mode === "manual"
51
52
  });
52
53
  return expired.length;
53
54
  }
@@ -58,7 +59,7 @@ async function sendReminder(deps, urgent = false) {
58
59
  * 보낸 건수를 돌려줘 호출부가 "보낼 대상 없음"과 "보냄"을 구분해 보여준다.
59
60
  */
60
61
  function sendExpiredTokenReminderNow(deps = defaultDeps) {
61
- return sendReminder(deps, true);
62
+ return sendReminder(deps, "manual");
62
63
  }
63
64
  let timer = null;
64
65
  function scheduleExpiredTokenReminder(runNow, deps) {
@@ -70,7 +71,7 @@ function scheduleExpiredTokenReminder(runNow, deps) {
70
71
  const minutes = Number(deps.readSetting("slack.expiryReminderMinutes", "SLACK_EXPIRY_REMINDER_INTERVAL_MINUTES") ?? 0);
71
72
  if (!Number.isFinite(minutes) || minutes <= 0) return;
72
73
  logger.info(`expired token reminder every ${minutes}m (${deps.getSlackUserMap().size} user mappings)`);
73
- const run = () => sendReminder(deps).catch((e) => logger.warn(`reminder failed: ${e.message}`));
74
+ const run = () => sendReminder(deps, "scheduled").catch((e) => logger.warn(`reminder failed: ${e.message}`));
74
75
  if (runNow) run();
75
76
  timer = setInterval(run, minutes * MINUTE_MS);
76
77
  }
@@ -95,4 +96,4 @@ function stopExpiredTokenReminder() {
95
96
  //#endregion
96
97
  export { buildReminderContext, rescheduleExpiredTokenReminder, sendExpiredTokenReminderNow, startExpiredTokenReminder, stopExpiredTokenReminder };
97
98
 
98
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwaXJlZC10b2tlbi1yZW1pbmRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvZXhwaXJlZC10b2tlbi1yZW1pbmRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIOyEuOyFmCDrp4zro4wg7JWM66a8IOuwmOuztS5cbiAqXG4gKiDrp4zro4wg7Iic6rCE7J2YIOyVjOumvChgdG9rZW4tZGVhdGgudHNgKeydgCDqt7jrlYwg7LGE64SQ7J2EIOuztOyngCDslYrsnLzrqbQg64aT7Lmc64ukLiDsnqzroZzqt7jsnbjsnYAg7IKs656M7J20XG4gKiDtlbTslbwg7ZWY64qUIOydvOydtOudvCDrhpPsuZjrqbQg7Yag7YGw7J20IOqzhOyGjSDruaDsp4Qg7LGE66GcIOuCqOuKlOuLpC4g6re4656Y7IScIOyVhOyngSDsnqzroZzqt7jsnbjrkJjsp4Ag7JWK7J2AXG4gKiDthqDtgbDsnYQg6rCZ7J2AIOusuOq1rOuhnCDri6Tsi5wg7JWM66aw64ukIOKAlCDsgqzqsbTsnbQg7ZWY64KY7J2066+A66GcIOyVjOumvOuPhCDtlZwg7KKF66WY64ukLlxuICpcbiAqIOyXrOufrCDthqDtgbDsnbQg66eM66OM64+8IOyeiOycvOuptCDtlZwg66mU7Iuc7KeA7JeQIOuqqOydgOuLpC4g7Yag7YGw66eI64ukIOuplOyLnOyngOulvCDrs7TrgrTrqbQg7LGE64SQ7J20IOyLnOuBhOufrOybjFxuICog7KCV7J6RIOydve2eiOyngCDslYrripTri6QuXG4gKlxuICog7J6s66Gc6re47J247J20IO2VhOyalO2VnCDthqDtgbDsnbQg7JeG7Jy866m0IOuztOuCtOyngCDslYrripTri6Qg4oCUIFwi7J207IOBIOyXhuydjFwi7J2EIOyjvOq4sOyggeycvOuhnCDslYzrpqzrqbRcbiAqIOyxhOuEkOydtCDrrLTrjozsp4Tri6QuXG4gKi9cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5cbmltcG9ydCB7IG5vdGlmeVNsYWNrLCBTTEFDS19DT0xPUiB9IGZyb20gXCIuLi8uLi91dGlscy9zbGFjay1ub3RpZnlcIjtcbmltcG9ydCB7IGdldFNldHRpbmcgfSBmcm9tIFwiLi4vc2V0dGluZy9zZXR0aW5nLnN0b3JlXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyBnZXRTbGFja1VzZXJNYXAsIG1lbnRpb25Gb3IgfSBmcm9tIFwiLi9zbGFjay11c2VyLW1hcFwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJleHBpcmVkLXJlbWluZGVyXCJdKTtcblxuY29uc3QgTUlOVVRFX01TID0gNjBfMDAwO1xuXG5leHBvcnQgdHlwZSBFeHBpcmVkVG9rZW5SZW1pbmRlckRlcHMgPSB7XG4gIGZpbmRSZWF1dGhSZXF1aXJlZDogKCkgPT4gUHJvbWlzZTx7IG5hbWU6IHN0cmluZyB8IG51bGw7IHByb3ZpZGVyOiBzdHJpbmcgfVtdPjtcbiAgZ2V0U2xhY2tVc2VyTWFwOiAoKSA9PiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICByZWFkU2V0dGluZzogdHlwZW9mIGdldFNldHRpbmc7XG4gIHNlbmRTbGFjazogdHlwZW9mIG5vdGlmeVNsYWNrO1xufTtcblxuY29uc3QgZGVmYXVsdERlcHM6IEV4cGlyZWRUb2tlblJlbWluZGVyRGVwcyA9IHtcbiAgZmluZFJlYXV0aFJlcXVpcmVkOiAoKSA9PiBUb2tlbk1vZGVsLmZpbmRSZWF1dGhSZXF1aXJlZChcIkFcIiksXG4gIGdldFNsYWNrVXNlck1hcCxcbiAgcmVhZFNldHRpbmc6IGdldFNldHRpbmcsXG4gIHNlbmRTbGFjazogbm90aWZ5U2xhY2ssXG59O1xuXG4vKipcbiAqIDHqsbTsnbTrqbQg7KCc66qpKHN1YmplY3Qp7JeQIO2GoO2BsOuqheydtCDsnbTrr7gg7J6I7Jy866+A66GcIOuzuOusuOyXkOyEnOuKlCDruoDri6Qg4oCUIOqwmeydgCDsnbTrpoTsnYQg65GQIOuyiCDsk7DrqbRcbiAqIOydveuKlCDsgqzrnozsnbQg64uk66W4IOygleuztOyduCDspIQg7JWM6rOgIO2VnCDrsogg642UIOuzuOuLpC4g7Jes65+sIOqxtOydtOuptCDsoJzrqqnsnbQg6rG07IiY6528IOuzuOusuOyXkCDrgqjquLTri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJlbWluZGVyQ29udGV4dChcbiAgdG9rZW5zOiB7IG5hbWU6IHN0cmluZyB8IG51bGw7IHByb3ZpZGVyOiBzdHJpbmcgfVtdLFxuICB1c2VyTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+LFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc2hvd0xhYmVsID0gdG9rZW5zLmxlbmd0aCA+IDE7XG4gIGNvbnN0IGxpbmVzID0gdG9rZW5zLm1hcCgodG9rZW4pID0+IHtcbiAgICBjb25zdCBtZW50aW9uID0gbWVudGlvbkZvcih0b2tlbi5uYW1lLCB1c2VyTWFwKTtcbiAgICBjb25zdCBsYWJlbCA9IHRva2VuLm5hbWUgPz8gXCJ1bm5hbWVkXCI7XG4gICAgaWYgKCFzaG93TGFiZWwpIHJldHVybiBtZW50aW9uO1xuICAgIHJldHVybiBtZW50aW9uID8gYCR7bWVudGlvbn0gJHtsYWJlbH1gIDogbGFiZWw7XG4gIH0pO1xuICByZXR1cm4gWy4uLmxpbmVzLCBcIuyerOuhnOq3uOyduOydtCDtlYTsmpTtlanri4jri6RcIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCJcXG5cIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbmRSZW1pbmRlcihkZXBzOiBFeHBpcmVkVG9rZW5SZW1pbmRlckRlcHMsIHVyZ2VudCA9IGZhbHNlKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3QgZXhwaXJlZCA9IGF3YWl0IGRlcHMuZmluZFJlYXV0aFJlcXVpcmVkKCk7XG4gIGlmIChleHBpcmVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgY29uc3QgdXNlck1hcCA9IGRlcHMuZ2V0U2xhY2tVc2VyTWFwKCk7XG5cbiAgYXdhaXQgZGVwcy5zZW5kU2xhY2soe1xuICAgIC8vIOunjOujjCDsiJzqsIQg7JWM66a86rO8IOqwmeydgCDsoJzrqqnsnYQg7JO064ukLiDqsJnsnYAg7IKs6rG07J2066+A66GcIOuLpOuluCDsnbTrpoTsnYQg67aZ7J2066m0IOuzhOqwnCDrrLjsoJzroZwg7J297Z6M64ukLlxuICAgIHRpdGxlOiBcIuyEuOyFmCDrp4zro4xcIixcbiAgICBzdWJqZWN0OiBleHBpcmVkLmxlbmd0aCA+IDEgPyBgJHtleHBpcmVkLmxlbmd0aH3qsbRgIDogKGV4cGlyZWRbMF0hLm5hbWUgPz8gXCJ1bm5hbWVkXCIpLFxuICAgIGNvbnRleHQ6IGJ1aWxkUmVtaW5kZXJDb250ZXh0KGV4cGlyZWQsIHVzZXJNYXApLFxuICAgIGNvbG9yOiBTTEFDS19DT0xPUi5iYWQsXG4gICAgdXJnZW50LFxuICB9KTtcbiAgcmV0dXJuIGV4cGlyZWQubGVuZ3RoO1xufVxuXG4vKipcbiAqIO2ZlOuptOydmCBcIuyngOq4iCDrs7TrgrTquLBcIi4g7IKs656M7J20IOyngeygkSDriITrpbgg6rKD7J2066+A66GcIOyhsOyaqSDsi5zqsITCt+uniOyKpO2EsCDsiqTsnITsuZjrpbwg7Ya16rO87Iuc7YKo64ukIOKAlFxuICog64iM66CA64qU642wIOyVhOustCDsnbzrj4Qg7JWIIOydvOyWtOuCmOuptCDrsoTtirzsnbQg6rOg7J6lIOuCnCDqsoPsnLzroZwg7J297Z6M64ukLlxuICpcbiAqIOuztOuCuCDqsbTsiJjrpbwg64+M66Ck7KSYIO2YuOy2nOu2gOqwgCBcIuuztOuCvCDrjIDsg4Eg7JeG7J2MXCLqs7wgXCLrs7Trg4RcIuydhCDqtazrtoTtlbQg67O07Jes7KSA64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEV4cGlyZWRUb2tlblJlbWluZGVyTm93KFxuICBkZXBzOiBFeHBpcmVkVG9rZW5SZW1pbmRlckRlcHMgPSBkZWZhdWx0RGVwcyxcbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIHJldHVybiBzZW5kUmVtaW5kZXIoZGVwcywgdHJ1ZSk7XG59XG5cbmxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIHNjaGVkdWxlRXhwaXJlZFRva2VuUmVtaW5kZXIocnVuTm93OiBib29sZWFuLCBkZXBzOiBFeHBpcmVkVG9rZW5SZW1pbmRlckRlcHMpOiB2b2lkIHtcbiAgc3RvcEV4cGlyZWRUb2tlblJlbWluZGVyKCk7XG5cbiAgLy8g7KO86riwIOqwkuqzvCDrs4TqsJzsnbgg7Iqk7JyE7LmY64ukLiDqurzrj4Qg7KO86riw64qUIOuCqOyVhCDsnojslrQg64uk7IucIOy8pCDrlYwg6rOg66W0642YIOqwkuydtCDqt7jrjIDroZzri6QuXG4gIGlmIChkZXBzLnJlYWRTZXR0aW5nKFwic2xhY2sucmVtaW5kZXJzRW5hYmxlZFwiLCBcIlNMQUNLX1JFTUlOREVSU19FTkFCTEVEXCIpID09PSBcImZhbHNlXCIpIHtcbiAgICBsb2dnZXIuaW5mbyhcImV4cGlyZWQgdG9rZW4gcmVtaW5kZXIgZGlzYWJsZWRcIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbWludXRlcyA9IE51bWJlcihcbiAgICBkZXBzLnJlYWRTZXR0aW5nKFwic2xhY2suZXhwaXJ5UmVtaW5kZXJNaW51dGVzXCIsIFwiU0xBQ0tfRVhQSVJZX1JFTUlOREVSX0lOVEVSVkFMX01JTlVURVNcIikgPz8gMCxcbiAgKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWludXRlcykgfHwgbWludXRlcyA8PSAwKSByZXR1cm47XG5cbiAgbG9nZ2VyLmluZm8oXG4gICAgYGV4cGlyZWQgdG9rZW4gcmVtaW5kZXIgZXZlcnkgJHttaW51dGVzfW0gKCR7ZGVwcy5nZXRTbGFja1VzZXJNYXAoKS5zaXplfSB1c2VyIG1hcHBpbmdzKWAsXG4gICk7XG5cbiAgY29uc3QgcnVuID0gKCkgPT5cbiAgICBzZW5kUmVtaW5kZXIoZGVwcykuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGByZW1pbmRlciBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuXG4gIGlmIChydW5Ob3cpIHZvaWQgcnVuKCk7XG4gIHRpbWVyID0gc2V0SW50ZXJ2YWwocnVuLCBtaW51dGVzICogTUlOVVRFX01TKTtcbn1cblxuLyoqXG4gKiBgU0xBQ0tfRVhQSVJZX1JFTUlOREVSX0lOVEVSVkFMX01JTlVURVNgIOqwgCDslpHsiJjsnbwg65WM66eMIOy8nOynhOuLpC4g66+47ISk7KCVwrcwIOydtOuptCDruYTtmZzshLEuXG4gKlxuICog7J247Iqk7YS07Iqk6rCAIOyXrOufrCDqsJzrqbQg6rCB7J6QIOuztOuCuOuLpC4g66eM66OMIOyInOqwhCDslYzrprzqs7wg64us66asIOyDge2DnCDrs4DtmZTqsIAg7JeG7Ja0IERCIOuhnCDslrXsoJztlaAg7IiYXG4gKiDsl4bqs6AsIO2VmOujqCDrqocg6rG0IOyImOykgOydtOudvCDspJHrs7XsnYQg6rCQ7IiY7ZWY64qUIO2OuOydtCDsnqDquIgg7J6l7LmY66W8IOuRkOuKlCDqsoPrs7Tri6Qg64Kr64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFeHBpcmVkVG9rZW5SZW1pbmRlcihkZXBzOiBFeHBpcmVkVG9rZW5SZW1pbmRlckRlcHMgPSBkZWZhdWx0RGVwcyk6IHZvaWQge1xuICAvLyDquLDrj5kg7KeB7ZuE7JeQ64+EIO2VnCDrsogg67O064K464ukLiDsnqzquLDrj5nsnYAg67Cw7Y+s64KYIOyepeyVoCDrs7Xqtawg65WMIOydvOyWtOuCmOuKlOuNsCwg6re4IOyLnOygkOyXkCDsnbTrr7hcbiAgLy8g66eM66OM65CcIO2GoO2BsOydtCDsnojsnLzrqbQg7LKrIOyjvOq4sOqwgCDrj4wg65WM6rmM7KeAIOyhsOyaqe2VnCDqsoPsnbQg7J207IOB7ZWY64ukLlxuICBzY2hlZHVsZUV4cGlyZWRUb2tlblJlbWluZGVyKHRydWUsIGRlcHMpO1xufVxuXG4vKiog7ISk7KCVIOuzgOqyvSDsi5wg6riw7KG0IO2DgOydtOuouOunjCDsg4gg7KO86riw66GcIOq1kOyytO2VnOuLpC4g7KCA7J6lIOyekOyytOqwgCDslYzrprzsnYQg67O064K07KeA64qUIOyViuuKlOuLpC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNjaGVkdWxlRXhwaXJlZFRva2VuUmVtaW5kZXIoZGVwczogRXhwaXJlZFRva2VuUmVtaW5kZXJEZXBzID0gZGVmYXVsdERlcHMpOiB2b2lkIHtcbiAgc2NoZWR1bGVFeHBpcmVkVG9rZW5SZW1pbmRlcihmYWxzZSwgZGVwcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wRXhwaXJlZFRva2VuUmVtaW5kZXIoKTogdm9pZCB7XG4gIGlmICghdGltZXIpIHJldHVybjtcbiAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gIHRpbWVyID0gbnVsbDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsa0JBQWtCLENBQUM7QUFFdEQsTUFBTSxZQUFZO0FBU2xCLE1BQU0sY0FBd0M7Q0FDNUMsMEJBQTBCLFdBQVcsbUJBQW1CLEdBQUc7Q0FDM0Q7Q0FDQSxhQUFhO0NBQ2IsV0FBVztBQUNiOzs7OztBQU1BLFNBQWdCLHFCQUNkLFFBQ0EsU0FDUTtDQUNSLE1BQU0sWUFBWSxPQUFPLFNBQVM7Q0FPbEMsT0FBTyxDQUFDLEdBTk0sT0FBTyxLQUFLLFVBQVU7RUFDbEMsTUFBTSxVQUFVLFdBQVcsTUFBTSxNQUFNLE9BQU87RUFDOUMsTUFBTSxRQUFRLE1BQU0sUUFBUTtFQUM1QixJQUFJLENBQUMsV0FBVyxPQUFPO0VBQ3ZCLE9BQU8sVUFBVSxHQUFHLFFBQVEsR0FBRyxVQUFVO0NBQzNDLENBQ1csR0FBTyxhQUFhLENBQUMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSTtBQUM1RDtBQUVBLGVBQWUsYUFBYSxNQUFnQyxTQUFTLE9BQXdCO0NBQzNGLE1BQU0sVUFBVSxNQUFNLEtBQUssbUJBQW1CO0NBQzlDLElBQUksUUFBUSxXQUFXLEdBQUcsT0FBTztDQUVqQyxNQUFNLFVBQVUsS0FBSyxnQkFBZ0I7Q0FFckMsTUFBTSxLQUFLLFVBQVU7RUFFbkIsT0FBTztFQUNQLFNBQVMsUUFBUSxTQUFTLElBQUksR0FBRyxRQUFRLE9BQU8sS0FBTSxRQUFRLEVBQUUsQ0FBRSxRQUFRO0VBQzFFLFNBQVMscUJBQXFCLFNBQVMsT0FBTztFQUM5QyxPQUFPLFlBQVk7RUFDbkI7Q0FDRixDQUFDO0NBQ0QsT0FBTyxRQUFRO0FBQ2pCOzs7Ozs7O0FBUUEsU0FBZ0IsNEJBQ2QsT0FBaUMsYUFDaEI7Q0FDakIsT0FBTyxhQUFhLE1BQU0sSUFBSTtBQUNoQztBQUVBLElBQUksUUFBK0M7QUFFbkQsU0FBUyw2QkFBNkIsUUFBaUIsTUFBc0M7Q0FDM0YseUJBQXlCO0NBR3pCLElBQUksS0FBSyxZQUFZLDBCQUEwQix5QkFBeUIsTUFBTSxTQUFTO0VBQ3JGLE9BQU8sS0FBSyxpQ0FBaUM7RUFDN0M7Q0FDRjtDQUVBLE1BQU0sVUFBVSxPQUNkLEtBQUssWUFBWSwrQkFBK0Isd0NBQXdDLEtBQUssQ0FDL0Y7Q0FDQSxJQUFJLENBQUMsT0FBTyxTQUFTLE9BQU8sS0FBSyxXQUFXLEdBQUc7Q0FFL0MsT0FBTyxLQUNMLGdDQUFnQyxRQUFRLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssZ0JBQzNFO0NBRUEsTUFBTSxZQUNKLGFBQWEsSUFBSSxDQUFDLENBQUMsT0FBTyxNQUFNLE9BQU8sS0FBSyxvQkFBcUIsRUFBWSxTQUFTLENBQUM7Q0FFekYsSUFBSSxRQUFRLEFBQUssSUFBSTtDQUNyQixRQUFRLFlBQVksS0FBSyxVQUFVLFNBQVM7QUFDOUM7Ozs7Ozs7QUFRQSxTQUFnQiwwQkFBMEIsT0FBaUMsYUFBbUI7Q0FHNUYsNkJBQTZCLE1BQU0sSUFBSTtBQUN6Qzs7QUFHQSxTQUFnQiwrQkFBK0IsT0FBaUMsYUFBbUI7Q0FDakcsNkJBQTZCLE9BQU8sSUFBSTtBQUMxQztBQUVBLFNBQWdCLDJCQUFpQztDQUMvQyxJQUFJLENBQUMsT0FBTztDQUNaLGNBQWMsS0FBSztDQUNuQixRQUFRO0FBQ1YifQ==
99
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwaXJlZC10b2tlbi1yZW1pbmRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvZXhwaXJlZC10b2tlbi1yZW1pbmRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIOyEuOyFmCDrp4zro4wg7JWM66a8IOuwmOuztS5cbiAqXG4gKiDrp4zro4wg7Iic6rCE7J2YIOyVjOumvChgdG9rZW4tZGVhdGgudHNgKeydgCDqt7jrlYwg7LGE64SQ7J2EIOuztOyngCDslYrsnLzrqbQg64aT7Lmc64ukLiDsnqzroZzqt7jsnbjsnYAg7IKs656M7J20XG4gKiDtlbTslbwg7ZWY64qUIOydvOydtOudvCDrhpPsuZjrqbQg7Yag7YGw7J20IOqzhOyGjSDruaDsp4Qg7LGE66GcIOuCqOuKlOuLpC4g6re4656Y7IScIOyVhOyngSDsnqzroZzqt7jsnbjrkJjsp4Ag7JWK7J2AXG4gKiDthqDtgbDsnYQg6rCZ7J2AIOusuOq1rOuhnCDri6Tsi5wg7JWM66aw64ukIOKAlCDsgqzqsbTsnbQg7ZWY64KY7J2066+A66GcIOyVjOumvOuPhCDtlZwg7KKF66WY64ukLlxuICpcbiAqIOyXrOufrCDthqDtgbDsnbQg66eM66OM64+8IOyeiOycvOuptCDtlZwg66mU7Iuc7KeA7JeQIOuqqOydgOuLpC4g7Yag7YGw66eI64ukIOuplOyLnOyngOulvCDrs7TrgrTrqbQg7LGE64SQ7J20IOyLnOuBhOufrOybjFxuICog7KCV7J6RIOydve2eiOyngCDslYrripTri6QuXG4gKlxuICog7J6s66Gc6re47J247J20IO2VhOyalO2VnCDthqDtgbDsnbQg7JeG7Jy866m0IOuztOuCtOyngCDslYrripTri6Qg4oCUIFwi7J207IOBIOyXhuydjFwi7J2EIOyjvOq4sOyggeycvOuhnCDslYzrpqzrqbRcbiAqIOyxhOuEkOydtCDrrLTrjozsp4Tri6QuXG4gKi9cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5cbmltcG9ydCB7IG5vdGlmeVNsYWNrLCBTTEFDS19DT0xPUiB9IGZyb20gXCIuLi8uLi91dGlscy9zbGFjay1ub3RpZnlcIjtcbmltcG9ydCB7IGdldFNldHRpbmcgfSBmcm9tIFwiLi4vc2V0dGluZy9zZXR0aW5nLnN0b3JlXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyBnZXRTbGFja1VzZXJNYXAsIG1lbnRpb25Gb3IgfSBmcm9tIFwiLi9zbGFjay11c2VyLW1hcFwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJleHBpcmVkLXJlbWluZGVyXCJdKTtcblxuY29uc3QgTUlOVVRFX01TID0gNjBfMDAwO1xuXG5leHBvcnQgdHlwZSBFeHBpcmVkVG9rZW5SZW1pbmRlckRlcHMgPSB7XG4gIGZpbmRSZWF1dGhSZXF1aXJlZDogKCkgPT4gUHJvbWlzZTx7IG5hbWU6IHN0cmluZyB8IG51bGw7IHByb3ZpZGVyOiBzdHJpbmcgfVtdPjtcbiAgZ2V0U2xhY2tVc2VyTWFwOiAoKSA9PiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICByZWFkU2V0dGluZzogdHlwZW9mIGdldFNldHRpbmc7XG4gIHNlbmRTbGFjazogdHlwZW9mIG5vdGlmeVNsYWNrO1xufTtcblxuY29uc3QgZGVmYXVsdERlcHM6IEV4cGlyZWRUb2tlblJlbWluZGVyRGVwcyA9IHtcbiAgZmluZFJlYXV0aFJlcXVpcmVkOiAoKSA9PiBUb2tlbk1vZGVsLmZpbmRSZWF1dGhSZXF1aXJlZChcIkFcIiksXG4gIGdldFNsYWNrVXNlck1hcCxcbiAgcmVhZFNldHRpbmc6IGdldFNldHRpbmcsXG4gIHNlbmRTbGFjazogbm90aWZ5U2xhY2ssXG59O1xuXG4vKipcbiAqIDHqsbTsnbTrqbQg7KCc66qpKHN1YmplY3Qp7JeQIO2GoO2BsOuqheydtCDsnbTrr7gg7J6I7Jy866+A66GcIOuzuOusuOyXkOyEnOuKlCDruoDri6Qg4oCUIOqwmeydgCDsnbTrpoTsnYQg65GQIOuyiCDsk7DrqbRcbiAqIOydveuKlCDsgqzrnozsnbQg64uk66W4IOygleuztOyduCDspIQg7JWM6rOgIO2VnCDrsogg642UIOuzuOuLpC4g7Jes65+sIOqxtOydtOuptCDsoJzrqqnsnbQg6rG07IiY6528IOuzuOusuOyXkCDrgqjquLTri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJlbWluZGVyQ29udGV4dChcbiAgdG9rZW5zOiB7IG5hbWU6IHN0cmluZyB8IG51bGw7IHByb3ZpZGVyOiBzdHJpbmcgfVtdLFxuICB1c2VyTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+LFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc2hvd0xhYmVsID0gdG9rZW5zLmxlbmd0aCA+IDE7XG4gIGNvbnN0IGxpbmVzID0gdG9rZW5zLm1hcCgodG9rZW4pID0+IHtcbiAgICBjb25zdCBtZW50aW9uID0gbWVudGlvbkZvcih0b2tlbi5uYW1lLCB1c2VyTWFwKTtcbiAgICBjb25zdCBsYWJlbCA9IHRva2VuLm5hbWUgPz8gXCJ1bm5hbWVkXCI7XG4gICAgaWYgKCFzaG93TGFiZWwpIHJldHVybiBtZW50aW9uO1xuICAgIHJldHVybiBtZW50aW9uID8gYCR7bWVudGlvbn0gJHtsYWJlbH1gIDogbGFiZWw7XG4gIH0pO1xuICByZXR1cm4gWy4uLmxpbmVzLCBcIuyerOuhnOq3uOyduOydtCDtlYTsmpTtlanri4jri6RcIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCJcXG5cIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbmRSZW1pbmRlcihcbiAgZGVwczogRXhwaXJlZFRva2VuUmVtaW5kZXJEZXBzLFxuICBtb2RlOiBcInNjaGVkdWxlZFwiIHwgXCJtYW51YWxcIixcbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IGV4cGlyZWQgPSBhd2FpdCBkZXBzLmZpbmRSZWF1dGhSZXF1aXJlZCgpO1xuICBpZiAoZXhwaXJlZC5sZW5ndGggPT09IDApIHJldHVybiAwO1xuXG4gIGNvbnN0IHVzZXJNYXAgPSBkZXBzLmdldFNsYWNrVXNlck1hcCgpO1xuXG4gIGF3YWl0IGRlcHMuc2VuZFNsYWNrKHtcbiAgICAvLyDrp4zro4wg7Iic6rCEIOyVjOumvOqzvCDqsJnsnYAg7KCc66qp7J2EIOyTtOuLpC4g6rCZ7J2AIOyCrOqxtOydtOuvgOuhnCDri6Trpbgg7J2066aE7J2EIOu2meydtOuptCDrs4TqsJwg66y47KCc66GcIOydve2ejOuLpC5cbiAgICB0aXRsZTogXCLshLjshZgg66eM66OMXCIsXG4gICAgc3ViamVjdDogZXhwaXJlZC5sZW5ndGggPiAxID8gYCR7ZXhwaXJlZC5sZW5ndGh96rG0YCA6IChleHBpcmVkWzBdIS5uYW1lID8/IFwidW5uYW1lZFwiKSxcbiAgICBjb250ZXh0OiBidWlsZFJlbWluZGVyQ29udGV4dChleHBpcmVkLCB1c2VyTWFwKSxcbiAgICBjb2xvcjogU0xBQ0tfQ09MT1IuYmFkLFxuICAgIHVyZ2VudDogbW9kZSA9PT0gXCJtYW51YWxcIixcbiAgICB0aHJvd09uRmFpbHVyZTogbW9kZSA9PT0gXCJtYW51YWxcIixcbiAgfSk7XG4gIHJldHVybiBleHBpcmVkLmxlbmd0aDtcbn1cblxuLyoqXG4gKiDtmZTrqbTsnZggXCLsp4DquIgg67O064K06riwXCIuIOyCrOuejOydtCDsp4HsoJEg64iE66W4IOqyg+ydtOuvgOuhnCDsobDsmqkg7Iuc6rCEwrfrp4jsiqTthLAg7Iqk7JyE7LmY66W8IO2GteqzvOyLnO2CqOuLpCDigJRcbiAqIOuIjOuggOuKlOuNsCDslYTrrLQg7J2864+EIOyViCDsnbzslrTrgpjrqbQg67KE7Yq87J20IOqzoOyepSDrgpwg6rKD7Jy866GcIOydve2ejOuLpC5cbiAqXG4gKiDrs7Trgrgg6rG07IiY66W8IOuPjOugpOykmCDtmLjstpzrtoDqsIAgXCLrs7Trgrwg64yA7IOBIOyXhuydjFwi6rO8IFwi67O064OEXCLsnYQg6rWs67aE7ZW0IOuztOyXrOykgOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRFeHBpcmVkVG9rZW5SZW1pbmRlck5vdyhcbiAgZGVwczogRXhwaXJlZFRva2VuUmVtaW5kZXJEZXBzID0gZGVmYXVsdERlcHMsXG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gc2VuZFJlbWluZGVyKGRlcHMsIFwibWFudWFsXCIpO1xufVxuXG5sZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBzY2hlZHVsZUV4cGlyZWRUb2tlblJlbWluZGVyKHJ1bk5vdzogYm9vbGVhbiwgZGVwczogRXhwaXJlZFRva2VuUmVtaW5kZXJEZXBzKTogdm9pZCB7XG4gIHN0b3BFeHBpcmVkVG9rZW5SZW1pbmRlcigpO1xuXG4gIC8vIOyjvOq4sCDqsJLqs7wg67OE6rCc7J24IOyKpOychOy5mOuLpC4g6rq864+EIOyjvOq4sOuKlCDrgqjslYQg7J6I7Ja0IOuLpOyLnCDsvKQg65WMIOqzoOultOuNmCDqsJLsnbQg6re464yA66Gc64ukLlxuICBpZiAoZGVwcy5yZWFkU2V0dGluZyhcInNsYWNrLnJlbWluZGVyc0VuYWJsZWRcIiwgXCJTTEFDS19SRU1JTkRFUlNfRU5BQkxFRFwiKSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgbG9nZ2VyLmluZm8oXCJleHBpcmVkIHRva2VuIHJlbWluZGVyIGRpc2FibGVkXCIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1pbnV0ZXMgPSBOdW1iZXIoXG4gICAgZGVwcy5yZWFkU2V0dGluZyhcInNsYWNrLmV4cGlyeVJlbWluZGVyTWludXRlc1wiLCBcIlNMQUNLX0VYUElSWV9SRU1JTkRFUl9JTlRFUlZBTF9NSU5VVEVTXCIpID8/IDAsXG4gICk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG1pbnV0ZXMpIHx8IG1pbnV0ZXMgPD0gMCkgcmV0dXJuO1xuXG4gIGxvZ2dlci5pbmZvKFxuICAgIGBleHBpcmVkIHRva2VuIHJlbWluZGVyIGV2ZXJ5ICR7bWludXRlc31tICgke2RlcHMuZ2V0U2xhY2tVc2VyTWFwKCkuc2l6ZX0gdXNlciBtYXBwaW5ncylgLFxuICApO1xuXG4gIGNvbnN0IHJ1biA9ICgpID0+XG4gICAgc2VuZFJlbWluZGVyKGRlcHMsIFwic2NoZWR1bGVkXCIpLmNhdGNoKChlKSA9PlxuICAgICAgbG9nZ2VyLndhcm4oYHJlbWluZGVyIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSxcbiAgICApO1xuXG4gIGlmIChydW5Ob3cpIHZvaWQgcnVuKCk7XG4gIHRpbWVyID0gc2V0SW50ZXJ2YWwocnVuLCBtaW51dGVzICogTUlOVVRFX01TKTtcbn1cblxuLyoqXG4gKiBgU0xBQ0tfRVhQSVJZX1JFTUlOREVSX0lOVEVSVkFMX01JTlVURVNgIOqwgCDslpHsiJjsnbwg65WM66eMIOy8nOynhOuLpC4g66+47ISk7KCVwrcwIOydtOuptCDruYTtmZzshLEuXG4gKlxuICog7J247Iqk7YS07Iqk6rCAIOyXrOufrCDqsJzrqbQg6rCB7J6QIOuztOuCuOuLpC4g66eM66OMIOyInOqwhCDslYzrprzqs7wg64us66asIOyDge2DnCDrs4DtmZTqsIAg7JeG7Ja0IERCIOuhnCDslrXsoJztlaAg7IiYXG4gKiDsl4bqs6AsIO2VmOujqCDrqocg6rG0IOyImOykgOydtOudvCDspJHrs7XsnYQg6rCQ7IiY7ZWY64qUIO2OuOydtCDsnqDquIgg7J6l7LmY66W8IOuRkOuKlCDqsoPrs7Tri6Qg64Kr64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFeHBpcmVkVG9rZW5SZW1pbmRlcihkZXBzOiBFeHBpcmVkVG9rZW5SZW1pbmRlckRlcHMgPSBkZWZhdWx0RGVwcyk6IHZvaWQge1xuICAvLyDquLDrj5kg7KeB7ZuE7JeQ64+EIO2VnCDrsogg67O064K464ukLiDsnqzquLDrj5nsnYAg67Cw7Y+s64KYIOyepeyVoCDrs7Xqtawg65WMIOydvOyWtOuCmOuKlOuNsCwg6re4IOyLnOygkOyXkCDsnbTrr7hcbiAgLy8g66eM66OM65CcIO2GoO2BsOydtCDsnojsnLzrqbQg7LKrIOyjvOq4sOqwgCDrj4wg65WM6rmM7KeAIOyhsOyaqe2VnCDqsoPsnbQg7J207IOB7ZWY64ukLlxuICBzY2hlZHVsZUV4cGlyZWRUb2tlblJlbWluZGVyKHRydWUsIGRlcHMpO1xufVxuXG4vKiog7ISk7KCVIOuzgOqyvSDsi5wg6riw7KG0IO2DgOydtOuouOunjCDsg4gg7KO86riw66GcIOq1kOyytO2VnOuLpC4g7KCA7J6lIOyekOyytOqwgCDslYzrprzsnYQg67O064K07KeA64qUIOyViuuKlOuLpC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNjaGVkdWxlRXhwaXJlZFRva2VuUmVtaW5kZXIoZGVwczogRXhwaXJlZFRva2VuUmVtaW5kZXJEZXBzID0gZGVmYXVsdERlcHMpOiB2b2lkIHtcbiAgc2NoZWR1bGVFeHBpcmVkVG9rZW5SZW1pbmRlcihmYWxzZSwgZGVwcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wRXhwaXJlZFRva2VuUmVtaW5kZXIoKTogdm9pZCB7XG4gIGlmICghdGltZXIpIHJldHVybjtcbiAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gIHRpbWVyID0gbnVsbDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsa0JBQWtCLENBQUM7QUFFdEQsTUFBTSxZQUFZO0FBU2xCLE1BQU0sY0FBd0M7Q0FDNUMsMEJBQTBCLFdBQVcsbUJBQW1CLEdBQUc7Q0FDM0Q7Q0FDQSxhQUFhO0NBQ2IsV0FBVztBQUNiOzs7OztBQU1BLFNBQWdCLHFCQUNkLFFBQ0EsU0FDUTtDQUNSLE1BQU0sWUFBWSxPQUFPLFNBQVM7Q0FPbEMsT0FBTyxDQUFDLEdBTk0sT0FBTyxLQUFLLFVBQVU7RUFDbEMsTUFBTSxVQUFVLFdBQVcsTUFBTSxNQUFNLE9BQU87RUFDOUMsTUFBTSxRQUFRLE1BQU0sUUFBUTtFQUM1QixJQUFJLENBQUMsV0FBVyxPQUFPO0VBQ3ZCLE9BQU8sVUFBVSxHQUFHLFFBQVEsR0FBRyxVQUFVO0NBQzNDLENBQ1csR0FBTyxhQUFhLENBQUMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSTtBQUM1RDtBQUVBLGVBQWUsYUFDYixNQUNBLE1BQ2lCO0NBQ2pCLE1BQU0sVUFBVSxNQUFNLEtBQUssbUJBQW1CO0NBQzlDLElBQUksUUFBUSxXQUFXLEdBQUcsT0FBTztDQUVqQyxNQUFNLFVBQVUsS0FBSyxnQkFBZ0I7Q0FFckMsTUFBTSxLQUFLLFVBQVU7RUFFbkIsT0FBTztFQUNQLFNBQVMsUUFBUSxTQUFTLElBQUksR0FBRyxRQUFRLE9BQU8sS0FBTSxRQUFRLEVBQUUsQ0FBRSxRQUFRO0VBQzFFLFNBQVMscUJBQXFCLFNBQVMsT0FBTztFQUM5QyxPQUFPLFlBQVk7RUFDbkIsUUFBUSxTQUFTO0VBQ2pCLGdCQUFnQixTQUFTO0NBQzNCLENBQUM7Q0FDRCxPQUFPLFFBQVE7QUFDakI7Ozs7Ozs7QUFRQSxTQUFnQiw0QkFDZCxPQUFpQyxhQUNoQjtDQUNqQixPQUFPLGFBQWEsTUFBTSxRQUFRO0FBQ3BDO0FBRUEsSUFBSSxRQUErQztBQUVuRCxTQUFTLDZCQUE2QixRQUFpQixNQUFzQztDQUMzRix5QkFBeUI7Q0FHekIsSUFBSSxLQUFLLFlBQVksMEJBQTBCLHlCQUF5QixNQUFNLFNBQVM7RUFDckYsT0FBTyxLQUFLLGlDQUFpQztFQUM3QztDQUNGO0NBRUEsTUFBTSxVQUFVLE9BQ2QsS0FBSyxZQUFZLCtCQUErQix3Q0FBd0MsS0FBSyxDQUMvRjtDQUNBLElBQUksQ0FBQyxPQUFPLFNBQVMsT0FBTyxLQUFLLFdBQVcsR0FBRztDQUUvQyxPQUFPLEtBQ0wsZ0NBQWdDLFFBQVEsS0FBSyxLQUFLLGdCQUFnQixDQUFDLENBQUMsS0FBSyxnQkFDM0U7Q0FFQSxNQUFNLFlBQ0osYUFBYSxNQUFNLFdBQVcsQ0FBQyxDQUFDLE9BQU8sTUFDckMsT0FBTyxLQUFLLG9CQUFxQixFQUFZLFNBQVMsQ0FDeEQ7Q0FFRixJQUFJLFFBQVEsQUFBSyxJQUFJO0NBQ3JCLFFBQVEsWUFBWSxLQUFLLFVBQVUsU0FBUztBQUM5Qzs7Ozs7OztBQVFBLFNBQWdCLDBCQUEwQixPQUFpQyxhQUFtQjtDQUc1Riw2QkFBNkIsTUFBTSxJQUFJO0FBQ3pDOztBQUdBLFNBQWdCLCtCQUErQixPQUFpQyxhQUFtQjtDQUNqRyw2QkFBNkIsT0FBTyxJQUFJO0FBQzFDO0FBRUEsU0FBZ0IsMkJBQWlDO0NBQy9DLElBQUksQ0FBQyxPQUFPO0NBQ1osY0FBYyxLQUFLO0NBQ25CLFFBQVE7QUFDViJ9
@@ -25,17 +25,26 @@ function resolveImageGenerationOptions(options) {
25
25
  size: options?.size ?? "1536x1024"
26
26
  };
27
27
  }
28
- function imageGenerationCostMethod(options) {
28
+ function imageGenerationCostMethod(options, result) {
29
+ if (result?.content.some((item) => item.type === "image" && item.generation?.route === "codex-images")) return "estimated:gpt-image-2:reported-usage:public-prices:conservative";
29
30
  const resolved = resolveImageGenerationOptions(options);
30
31
  return `assumed:${CODEX_IMAGE_GENERATION_MODEL}:${resolved.quality}:${resolved.size}:png`;
31
32
  }
32
33
  function estimateImageGenerationCostMicroUsd(result, options) {
33
- const imageCount = result.content.filter((item) => item.type === "image").length;
34
+ const images = result.content.filter((item) => item.type === "image");
35
+ const imageCount = images.length;
34
36
  if (imageCount === 0) return null;
37
+ if (images.some((image) => image.generation?.route === "codex-images")) {
38
+ const usage = images.find((image) => image.generation?.usage)?.generation?.usage;
39
+ if (!usage) return null;
40
+ const details = usage.input_tokens_details;
41
+ const textTokens = details && details.text_tokens + details.image_tokens <= usage.input_tokens ? details.text_tokens : 0;
42
+ return Math.round(textTokens * 5 + (usage.input_tokens - textTokens) * 8 + usage.output_tokens * 30);
43
+ }
35
44
  const resolved = resolveImageGenerationOptions(options);
36
45
  return imageCount * IMAGE_OUTPUT_COST_MICRO_USD[resolved.quality][resolved.size];
37
46
  }
38
47
  //#endregion
39
48
  export { CODEX_IMAGE_GENERATION_MODEL, DEFAULT_IMAGE_GENERATION_QUALITY, DEFAULT_IMAGE_GENERATION_SIZE, estimateImageGenerationCostMicroUsd, imageGenerationCostMethod, resolveImageGenerationOptions };
40
49
 
41
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtaW1hZ2UtZ2VuZXJhdGlvbi5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQtaW1hZ2UtZ2VuZXJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG4gIHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSxcbiAgdHlwZSBJbWFnZUdlbmVyYXRpb25TaXplLFxuICB0eXBlIFF1ZXJ5T3V0cHV0LFxufSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgQ09ERVhfSU1BR0VfR0VORVJBVElPTl9NT0RFTCA9IFwiZ3B0LWltYWdlLTJcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0lNQUdFX0dFTkVSQVRJT05fUVVBTElUWTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IFwibWVkaXVtXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9JTUFHRV9HRU5FUkFUSU9OX1NJWkU6IEltYWdlR2VuZXJhdGlvblNpemUgPSBcIjE1MzZ4MTAyNFwiO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlZEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPSB7XG4gIHF1YWxpdHk6IEltYWdlR2VuZXJhdGlvblF1YWxpdHk7XG4gIHNpemU6IEltYWdlR2VuZXJhdGlvblNpemU7XG59O1xuXG4vLyBPcGVuQUkgZ3B0LWltYWdlLTIgaW1hZ2Ugb3V0cHV0IGNvc3QgZXN0aW1hdGVzIGJ5IHF1YWxpdHkvc2l6ZTpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuYWkuY29tL2FwaS9kb2NzL2d1aWRlcy9pbWFnZS1nZW5lcmF0aW9uI2NhbGN1bGF0aW5nLWNvc3RzXG5jb25zdCBJTUFHRV9PVVRQVVRfQ09TVF9NSUNST19VU0Q6IFJlY29yZDxcbiAgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSxcbiAgUmVjb3JkPEltYWdlR2VuZXJhdGlvblNpemUsIG51bWJlcj5cbj4gPSB7XG4gIGxvdzoge1xuICAgIFwiMTAyNHgxMDI0XCI6IDZfMDAwLFxuICAgIFwiMTAyNHgxNTM2XCI6IDVfMDAwLFxuICAgIFwiMTUzNngxMDI0XCI6IDVfMDAwLFxuICB9LFxuICBtZWRpdW06IHtcbiAgICBcIjEwMjR4MTAyNFwiOiA1M18wMDAsXG4gICAgXCIxMDI0eDE1MzZcIjogNDFfMDAwLFxuICAgIFwiMTUzNngxMDI0XCI6IDQxXzAwMCxcbiAgfSxcbiAgaGlnaDoge1xuICAgIFwiMTAyNHgxMDI0XCI6IDIxMV8wMDAsXG4gICAgXCIxMDI0eDE1MzZcIjogMTY1XzAwMCxcbiAgICBcIjE1MzZ4MTAyNFwiOiAxNjVfMDAwLFxuICB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbWFnZUdlbmVyYXRpb25PcHRpb25zKFxuICBvcHRpb25zOiBJbWFnZUdlbmVyYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkLFxuKTogUmVzb2x2ZWRJbWFnZUdlbmVyYXRpb25PcHRpb25zIHtcbiAgcmV0dXJuIHtcbiAgICBxdWFsaXR5OiBvcHRpb25zPy5xdWFsaXR5ID8/IERFRkFVTFRfSU1BR0VfR0VORVJBVElPTl9RVUFMSVRZLFxuICAgIHNpemU6IG9wdGlvbnM/LnNpemUgPz8gREVGQVVMVF9JTUFHRV9HRU5FUkFUSU9OX1NJWkUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZUdlbmVyYXRpb25Db3N0TWV0aG9kKG9wdGlvbnM6IEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVJbWFnZUdlbmVyYXRpb25PcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gYGFzc3VtZWQ6JHtDT0RFWF9JTUFHRV9HRU5FUkFUSU9OX01PREVMfToke3Jlc29sdmVkLnF1YWxpdHl9OiR7cmVzb2x2ZWQuc2l6ZX06cG5nYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzdGltYXRlSW1hZ2VHZW5lcmF0aW9uQ29zdE1pY3JvVXNkKFxuICByZXN1bHQ6IFF1ZXJ5T3V0cHV0LFxuICBvcHRpb25zOiBJbWFnZUdlbmVyYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkLFxuKTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IGltYWdlQ291bnQgPSByZXN1bHQuY29udGVudC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gXCJpbWFnZVwiKS5sZW5ndGg7XG4gIGlmIChpbWFnZUNvdW50ID09PSAwKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgcmV0dXJuIGltYWdlQ291bnQgKiBJTUFHRV9PVVRQVVRfQ09TVF9NSUNST19VU0RbcmVzb2x2ZWQucXVhbGl0eV1bcmVzb2x2ZWQuc2l6ZV07XG59XG4iXSwibWFwcGluZ3MiOiI7QUFPQSxNQUFhLCtCQUErQjtBQUM1QyxNQUFhLG1DQUEyRDtBQUN4RSxNQUFhLGdDQUFxRDtBQVNsRSxNQUFNLDhCQUdGO0NBQ0YsS0FBSztFQUNILGFBQWE7RUFDYixhQUFhO0VBQ2IsYUFBYTtDQUNmO0NBQ0EsUUFBUTtFQUNOLGFBQWE7RUFDYixhQUFhO0VBQ2IsYUFBYTtDQUNmO0NBQ0EsTUFBTTtFQUNKLGFBQWE7RUFDYixhQUFhO0VBQ2IsYUFBYTtDQUNmO0FBQ0Y7QUFFQSxTQUFnQiw4QkFDZCxTQUNnQztDQUNoQyxPQUFPO0VBQ0wsU0FBUyxTQUFTLFdBQUE7RUFDbEIsTUFBTSxTQUFTLFFBQUE7Q0FDakI7QUFDRjtBQUVBLFNBQWdCLDBCQUEwQixTQUFxRDtDQUM3RixNQUFNLFdBQVcsOEJBQThCLE9BQU87Q0FDdEQsT0FBTyxXQUFXLDZCQUE2QixHQUFHLFNBQVMsUUFBUSxHQUFHLFNBQVMsS0FBSztBQUN0RjtBQUVBLFNBQWdCLG9DQUNkLFFBQ0EsU0FDZTtDQUNmLE1BQU0sYUFBYSxPQUFPLFFBQVEsUUFBUSxTQUFTLEtBQUssU0FBUyxPQUFPLENBQUMsQ0FBQztDQUMxRSxJQUFJLGVBQWUsR0FBRyxPQUFPO0NBQzdCLE1BQU0sV0FBVyw4QkFBOEIsT0FBTztDQUN0RCxPQUFPLGFBQWEsNEJBQTRCLFNBQVMsUUFBUSxDQUFDLFNBQVM7QUFDN0UifQ==
50
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtaW1hZ2UtZ2VuZXJhdGlvbi5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQtaW1hZ2UtZ2VuZXJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG4gIHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSxcbiAgdHlwZSBJbWFnZUdlbmVyYXRpb25TaXplLFxuICB0eXBlIFF1ZXJ5T3V0cHV0LFxufSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgQ09ERVhfSU1BR0VfR0VORVJBVElPTl9NT0RFTCA9IFwiZ3B0LWltYWdlLTJcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0lNQUdFX0dFTkVSQVRJT05fUVVBTElUWTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IFwibWVkaXVtXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9JTUFHRV9HRU5FUkFUSU9OX1NJWkU6IEltYWdlR2VuZXJhdGlvblNpemUgPSBcIjE1MzZ4MTAyNFwiO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlZEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPSB7XG4gIHF1YWxpdHk6IEltYWdlR2VuZXJhdGlvblF1YWxpdHk7XG4gIHNpemU6IEltYWdlR2VuZXJhdGlvblNpemU7XG59O1xuXG4vLyBPcGVuQUkgZ3B0LWltYWdlLTIgaW1hZ2Ugb3V0cHV0IGNvc3QgZXN0aW1hdGVzIGJ5IHF1YWxpdHkvc2l6ZTpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuYWkuY29tL2FwaS9kb2NzL2d1aWRlcy9pbWFnZS1nZW5lcmF0aW9uI2NhbGN1bGF0aW5nLWNvc3RzXG5jb25zdCBJTUFHRV9PVVRQVVRfQ09TVF9NSUNST19VU0Q6IFJlY29yZDxcbiAgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSxcbiAgUmVjb3JkPEltYWdlR2VuZXJhdGlvblNpemUsIG51bWJlcj5cbj4gPSB7XG4gIGxvdzoge1xuICAgIFwiMTAyNHgxMDI0XCI6IDZfMDAwLFxuICAgIFwiMTAyNHgxNTM2XCI6IDVfMDAwLFxuICAgIFwiMTUzNngxMDI0XCI6IDVfMDAwLFxuICB9LFxuICBtZWRpdW06IHtcbiAgICBcIjEwMjR4MTAyNFwiOiA1M18wMDAsXG4gICAgXCIxMDI0eDE1MzZcIjogNDFfMDAwLFxuICAgIFwiMTUzNngxMDI0XCI6IDQxXzAwMCxcbiAgfSxcbiAgaGlnaDoge1xuICAgIFwiMTAyNHgxMDI0XCI6IDIxMV8wMDAsXG4gICAgXCIxMDI0eDE1MzZcIjogMTY1XzAwMCxcbiAgICBcIjE1MzZ4MTAyNFwiOiAxNjVfMDAwLFxuICB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbWFnZUdlbmVyYXRpb25PcHRpb25zKFxuICBvcHRpb25zOiBJbWFnZUdlbmVyYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkLFxuKTogUmVzb2x2ZWRJbWFnZUdlbmVyYXRpb25PcHRpb25zIHtcbiAgcmV0dXJuIHtcbiAgICBxdWFsaXR5OiBvcHRpb25zPy5xdWFsaXR5ID8/IERFRkFVTFRfSU1BR0VfR0VORVJBVElPTl9RVUFMSVRZLFxuICAgIHNpemU6IG9wdGlvbnM/LnNpemUgPz8gREVGQVVMVF9JTUFHRV9HRU5FUkFUSU9OX1NJWkUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZUdlbmVyYXRpb25Db3N0TWV0aG9kKFxuICBvcHRpb25zOiBJbWFnZUdlbmVyYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkLFxuICByZXN1bHQ/OiBRdWVyeU91dHB1dCxcbik6IHN0cmluZyB7XG4gIGlmIChcbiAgICByZXN1bHQ/LmNvbnRlbnQuc29tZShcbiAgICAgIChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IFwiaW1hZ2VcIiAmJiBpdGVtLmdlbmVyYXRpb24/LnJvdXRlID09PSBcImNvZGV4LWltYWdlc1wiLFxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuIFwiZXN0aW1hdGVkOmdwdC1pbWFnZS0yOnJlcG9ydGVkLXVzYWdlOnB1YmxpYy1wcmljZXM6Y29uc2VydmF0aXZlXCI7XG4gIH1cbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgcmV0dXJuIGBhc3N1bWVkOiR7Q09ERVhfSU1BR0VfR0VORVJBVElPTl9NT0RFTH06JHtyZXNvbHZlZC5xdWFsaXR5fToke3Jlc29sdmVkLnNpemV9OnBuZ2A7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc3RpbWF0ZUltYWdlR2VuZXJhdGlvbkNvc3RNaWNyb1VzZChcbiAgcmVzdWx0OiBRdWVyeU91dHB1dCxcbiAgb3B0aW9uczogSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZCxcbik6IG51bWJlciB8IG51bGwge1xuICBjb25zdCBpbWFnZXMgPSByZXN1bHQuY29udGVudC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gXCJpbWFnZVwiKTtcbiAgY29uc3QgaW1hZ2VDb3VudCA9IGltYWdlcy5sZW5ndGg7XG4gIGlmIChpbWFnZUNvdW50ID09PSAwKSByZXR1cm4gbnVsbDtcbiAgaWYgKGltYWdlcy5zb21lKChpbWFnZSkgPT4gaW1hZ2UuZ2VuZXJhdGlvbj8ucm91dGUgPT09IFwiY29kZXgtaW1hZ2VzXCIpKSB7XG4gICAgLy8gVGhlIHN0YW5kYWxvbmUgcmVzcG9uc2UncyBhZ2dyZWdhdGUgdXNhZ2UgaXMgY2FycmllZCBieSBpdHMgZmlyc3QgaW1hZ2Ugb25seS5cbiAgICAvLyBEbyBub3QgbXVsdGlwbHkgaXQgYnkgb3V0cHV0IGNvdW50IG9yIHByaWNlIGl0IGFzIHRoZSByZXF1ZXN0ZWQgdGV4dCBkcml2ZXIuXG4gICAgY29uc3QgdXNhZ2UgPSBpbWFnZXMuZmluZCgoaW1hZ2UpID0+IGltYWdlLmdlbmVyYXRpb24/LnVzYWdlKT8uZ2VuZXJhdGlvbj8udXNhZ2U7XG4gICAgaWYgKCF1c2FnZSkgcmV0dXJuIG51bGw7XG4gICAgLy8gUHVibGljIEdQVCBJbWFnZSAyIHJhdGVzIHZlcmlmaWVkIDIwMjYtMDktMDg6IHRleHQgaW5wdXQgJDUvTSwgaW1hZ2UgaW5wdXRcbiAgICAvLyAkOC9NLCBvdXRwdXQgJDMwL00uIEFtb3VudHMgYmVsb3cgYXJlIG1pY3JvVVNELCBzbyBubyAvMU0gY29udmVyc2lvbi5cbiAgICAvLyBodHRwczovL2RldmVsb3BlcnMub3BlbmFpLmNvbS9hcGkvZG9jcy9wcmljaW5nI2ltYWdlLWdlbmVyYXRpb25cbiAgICAvLyBVc2UgYSBjb25zaXN0ZW50IHJlcG9ydGVkIHNwbGl0OyB1bmtub3duIGlucHV0IGlzIGNvbnNlcnZhdGl2ZWx5IHByaWNlZCBhc1xuICAgIC8vIGltYWdlcy4gQ2FjaGUgZGlzY291bnRzIGFuZCBwcml2YXRlIHN1YnNjcmlwdGlvbiBiaWxsaW5nIHJlbWFpbiB1bmtub3duLlxuICAgIGNvbnN0IGRldGFpbHMgPSB1c2FnZS5pbnB1dF90b2tlbnNfZGV0YWlscztcbiAgICBjb25zdCB0ZXh0VG9rZW5zID1cbiAgICAgIGRldGFpbHMgJiYgZGV0YWlscy50ZXh0X3Rva2VucyArIGRldGFpbHMuaW1hZ2VfdG9rZW5zIDw9IHVzYWdlLmlucHV0X3Rva2Vuc1xuICAgICAgICA/IGRldGFpbHMudGV4dF90b2tlbnNcbiAgICAgICAgOiAwO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKFxuICAgICAgdGV4dFRva2VucyAqIDUgKyAodXNhZ2UuaW5wdXRfdG9rZW5zIC0gdGV4dFRva2VucykgKiA4ICsgdXNhZ2Uub3V0cHV0X3Rva2VucyAqIDMwLFxuICAgICk7XG4gIH1cbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgcmV0dXJuIGltYWdlQ291bnQgKiBJTUFHRV9PVVRQVVRfQ09TVF9NSUNST19VU0RbcmVzb2x2ZWQucXVhbGl0eV1bcmVzb2x2ZWQuc2l6ZV07XG59XG4iXSwibWFwcGluZ3MiOiI7QUFPQSxNQUFhLCtCQUErQjtBQUM1QyxNQUFhLG1DQUEyRDtBQUN4RSxNQUFhLGdDQUFxRDtBQVNsRSxNQUFNLDhCQUdGO0NBQ0YsS0FBSztFQUNILGFBQWE7RUFDYixhQUFhO0VBQ2IsYUFBYTtDQUNmO0NBQ0EsUUFBUTtFQUNOLGFBQWE7RUFDYixhQUFhO0VBQ2IsYUFBYTtDQUNmO0NBQ0EsTUFBTTtFQUNKLGFBQWE7RUFDYixhQUFhO0VBQ2IsYUFBYTtDQUNmO0FBQ0Y7QUFFQSxTQUFnQiw4QkFDZCxTQUNnQztDQUNoQyxPQUFPO0VBQ0wsU0FBUyxTQUFTLFdBQUE7RUFDbEIsTUFBTSxTQUFTLFFBQUE7Q0FDakI7QUFDRjtBQUVBLFNBQWdCLDBCQUNkLFNBQ0EsUUFDUTtDQUNSLElBQ0UsUUFBUSxRQUFRLE1BQ2IsU0FBUyxLQUFLLFNBQVMsV0FBVyxLQUFLLFlBQVksVUFBVSxjQUNoRSxHQUVBLE9BQU87Q0FFVCxNQUFNLFdBQVcsOEJBQThCLE9BQU87Q0FDdEQsT0FBTyxXQUFXLDZCQUE2QixHQUFHLFNBQVMsUUFBUSxHQUFHLFNBQVMsS0FBSztBQUN0RjtBQUVBLFNBQWdCLG9DQUNkLFFBQ0EsU0FDZTtDQUNmLE1BQU0sU0FBUyxPQUFPLFFBQVEsUUFBUSxTQUFTLEtBQUssU0FBUyxPQUFPO0NBQ3BFLE1BQU0sYUFBYSxPQUFPO0NBQzFCLElBQUksZUFBZSxHQUFHLE9BQU87Q0FDN0IsSUFBSSxPQUFPLE1BQU0sVUFBVSxNQUFNLFlBQVksVUFBVSxjQUFjLEdBQUc7RUFHdEUsTUFBTSxRQUFRLE9BQU8sTUFBTSxVQUFVLE1BQU0sWUFBWSxLQUFLLENBQUMsRUFBRSxZQUFZO0VBQzNFLElBQUksQ0FBQyxPQUFPLE9BQU87RUFNbkIsTUFBTSxVQUFVLE1BQU07RUFDdEIsTUFBTSxhQUNKLFdBQVcsUUFBUSxjQUFjLFFBQVEsZ0JBQWdCLE1BQU0sZUFDM0QsUUFBUSxjQUNSO0VBQ04sT0FBTyxLQUFLLE1BQ1YsYUFBYSxLQUFLLE1BQU0sZUFBZSxjQUFjLElBQUksTUFBTSxnQkFBZ0IsRUFDakY7Q0FDRjtDQUNBLE1BQU0sV0FBVyw4QkFBOEIsT0FBTztDQUN0RCxPQUFPLGFBQWEsNEJBQTRCLFNBQVMsUUFBUSxDQUFDLFNBQVM7QUFDN0UifQ==
@@ -32,24 +32,26 @@ function imageGenerationToolArgs(args, options = {}) {
32
32
  ...inputImages.length > 0 ? { inputImages } : {},
33
33
  driverModel: args.model ?? null,
34
34
  tool: CODEX_IMAGE_GENERATION_TOOL_CONFIG,
35
- pricingAssumption: {
35
+ ...args.imageGenerationOptions ? { requestedOptions: args.imageGenerationOptions } : {},
36
+ ...options.generation ? { observedGeneration: options.generation } : { pricingAssumption: {
36
37
  model: CODEX_IMAGE_GENERATION_MODEL,
37
38
  quality: resolved.quality,
38
39
  size: resolved.size
39
- }
40
+ } }
40
41
  });
41
42
  }
42
43
  function buildImageGenerationToolSteps(args, images, stepIndex) {
43
44
  if (images.length === 0) return [];
44
- const firstToolArgs = imageGenerationToolArgs(args, { includeInputImages: true });
45
- const laterToolArgs = images.length > 1 ? imageGenerationToolArgs(args, { includeInputImages: false }) : firstToolArgs;
46
45
  return images.map((image, index) => ({
47
46
  step_index: stepIndex,
48
47
  type: "tool_call",
49
48
  tool_call_index: index,
50
49
  tool_call_id: `image_generation:${stepIndex}:${index}`,
51
50
  tool_name: "image_generation",
52
- tool_args: index === 0 ? firstToolArgs : laterToolArgs,
51
+ tool_args: imageGenerationToolArgs(args, {
52
+ includeInputImages: index === 0,
53
+ generation: image.generation
54
+ }),
53
55
  tool_result: formatImagePartForLog(image)
54
56
  }));
55
57
  }
@@ -87,4 +89,4 @@ function base64ByteSize(value) {
87
89
  //#endregion
88
90
  export { CODEX_IMAGE_GENERATION_TOOL_CONFIG, buildImageGenerationToolSteps, formatImagePartForLog, formatResponseForLog, getImageParts, imageGenerationToolArgs };
89
91
 
90
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcmVzcG9uc2UtZm9ybWF0LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC1yZXNwb25zZS1mb3JtYXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ09ERVhfSU1BR0VfR0VORVJBVElPTl9NT0RFTCxcbiAgcmVzb2x2ZUltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG59IGZyb20gXCIuL3FncmlkLWltYWdlLWdlbmVyYXRpb25cIjtcbmltcG9ydCB7IHR5cGUgUWdyaWRDb250ZW50LCB0eXBlIFF1ZXJ5SW5wdXQsIHR5cGUgUXVlcnlPdXRwdXQgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgQ09ERVhfSU1BR0VfR0VORVJBVElPTl9UT09MX0NPTkZJRyA9IHtcbiAgdHlwZTogXCJpbWFnZV9nZW5lcmF0aW9uXCIsXG4gIG91dHB1dEZvcm1hdDogXCJwbmdcIixcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGVzY2FwZUh0bWxBdHRyaWJ1dGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcbiAgICAucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcbiAgICAucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcbiAgICAucmVwbGFjZSgvPi9nLCBcIiZndDtcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRSZXNwb25zZUZvckxvZyhyZXN1bHQ6IFF1ZXJ5T3V0cHV0KTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc3VsdC5jb250ZW50XG4gICAgLmZsYXRNYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IFwidGV4dFwiKSByZXR1cm4gW2l0ZW0udGV4dF07XG4gICAgICBpZiAoaXRlbS50eXBlID09PSBcImltYWdlXCIpIHtcbiAgICAgICAgY29uc3QgYWx0ID0gZXNjYXBlSHRtbEF0dHJpYnV0ZShpdGVtLnJldmlzZWRQcm9tcHQgPz8gXCJnZW5lcmF0ZWQgaW1hZ2VcIik7XG4gICAgICAgIHJldHVybiBbYDxpbWcgc3JjPVwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7aXRlbS5kYXRhfVwiIGFsdD1cIiR7YWx0fVwiIC8+YF07XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSlcbiAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0Lmxlbmd0aCA+IDApXG4gICAgLmpvaW4oXCJcXG5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZVBhcnRzKHJlc3VsdDogUXVlcnlPdXRwdXQpOiBFeHRyYWN0PFFncmlkQ29udGVudCwgeyB0eXBlOiBcImltYWdlXCIgfT5bXSB7XG4gIHJldHVybiByZXN1bHQuY29udGVudC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gXCJpbWFnZVwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEltYWdlUGFydEZvckxvZyhpbWFnZTogRXh0cmFjdDxRZ3JpZENvbnRlbnQsIHsgdHlwZTogXCJpbWFnZVwiIH0+KTogc3RyaW5nIHtcbiAgY29uc3QgYWx0ID0gZXNjYXBlSHRtbEF0dHJpYnV0ZShpbWFnZS5yZXZpc2VkUHJvbXB0ID8/IFwiZ2VuZXJhdGVkIGltYWdlXCIpO1xuICByZXR1cm4gYDxpbWcgc3JjPVwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7aW1hZ2UuZGF0YX1cIiBhbHQ9XCIke2FsdH1cIiAvPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZUdlbmVyYXRpb25Ub29sQXJncyhcbiAgYXJnczogUXVlcnlJbnB1dCxcbiAgb3B0aW9uczogeyBpbmNsdWRlSW5wdXRJbWFnZXM/OiBib29sZWFuIH0gPSB7fSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUltYWdlR2VuZXJhdGlvbk9wdGlvbnMoYXJncy5pbWFnZUdlbmVyYXRpb25PcHRpb25zKTtcbiAgY29uc3QgaW5wdXRJbWFnZXMgPVxuICAgIG9wdGlvbnMuaW5jbHVkZUlucHV0SW1hZ2VzID09PSBmYWxzZSA/IFtdIDogZXh0cmFjdElucHV0SW1hZ2VzRm9yVG9vbEFyZ3MoYXJncyk7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgcHJvbXB0OiBhcmdzLnByb21wdCxcbiAgICAuLi4oaW5wdXRJbWFnZXMubGVuZ3RoID4gMCA/IHsgaW5wdXRJbWFnZXMgfSA6IHt9KSxcbiAgICBkcml2ZXJNb2RlbDogYXJncy5tb2RlbCA/PyBudWxsLFxuICAgIHRvb2w6IENPREVYX0lNQUdFX0dFTkVSQVRJT05fVE9PTF9DT05GSUcsXG4gICAgcHJpY2luZ0Fzc3VtcHRpb246IHtcbiAgICAgIG1vZGVsOiBDT0RFWF9JTUFHRV9HRU5FUkFUSU9OX01PREVMLFxuICAgICAgcXVhbGl0eTogcmVzb2x2ZWQucXVhbGl0eSxcbiAgICAgIHNpemU6IHJlc29sdmVkLnNpemUsXG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEltYWdlR2VuZXJhdGlvblRvb2xTdGVwcyhcbiAgYXJnczogUXVlcnlJbnB1dCxcbiAgaW1hZ2VzOiBFeHRyYWN0PFFncmlkQ29udGVudCwgeyB0eXBlOiBcImltYWdlXCIgfT5bXSxcbiAgc3RlcEluZGV4OiBudW1iZXIsXG4pOiBBcnJheTx7XG4gIHN0ZXBfaW5kZXg6IG51bWJlcjtcbiAgdHlwZTogXCJ0b29sX2NhbGxcIjtcbiAgdG9vbF9jYWxsX2luZGV4OiBudW1iZXI7XG4gIHRvb2xfY2FsbF9pZDogc3RyaW5nO1xuICB0b29sX25hbWU6IFwiaW1hZ2VfZ2VuZXJhdGlvblwiO1xuICB0b29sX2FyZ3M6IHN0cmluZztcbiAgdG9vbF9yZXN1bHQ6IHN0cmluZztcbn0+IHtcbiAgaWYgKGltYWdlcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICBjb25zdCBmaXJzdFRvb2xBcmdzID0gaW1hZ2VHZW5lcmF0aW9uVG9vbEFyZ3MoYXJncywgeyBpbmNsdWRlSW5wdXRJbWFnZXM6IHRydWUgfSk7XG4gIGNvbnN0IGxhdGVyVG9vbEFyZ3MgPVxuICAgIGltYWdlcy5sZW5ndGggPiAxXG4gICAgICA/IGltYWdlR2VuZXJhdGlvblRvb2xBcmdzKGFyZ3MsIHsgaW5jbHVkZUlucHV0SW1hZ2VzOiBmYWxzZSB9KVxuICAgICAgOiBmaXJzdFRvb2xBcmdzO1xuICByZXR1cm4gaW1hZ2VzLm1hcCgoaW1hZ2UsIGluZGV4KSA9PiAoe1xuICAgIHN0ZXBfaW5kZXg6IHN0ZXBJbmRleCxcbiAgICB0eXBlOiBcInRvb2xfY2FsbFwiLFxuICAgIHRvb2xfY2FsbF9pbmRleDogaW5kZXgsXG4gICAgdG9vbF9jYWxsX2lkOiBgaW1hZ2VfZ2VuZXJhdGlvbjoke3N0ZXBJbmRleH06JHtpbmRleH1gLFxuICAgIHRvb2xfbmFtZTogXCJpbWFnZV9nZW5lcmF0aW9uXCIsXG4gICAgdG9vbF9hcmdzOiBpbmRleCA9PT0gMCA/IGZpcnN0VG9vbEFyZ3MgOiBsYXRlclRvb2xBcmdzLFxuICAgIHRvb2xfcmVzdWx0OiBmb3JtYXRJbWFnZVBhcnRGb3JMb2coaW1hZ2UpLFxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RJbnB1dEltYWdlc0ZvclRvb2xBcmdzKGFyZ3M6IFF1ZXJ5SW5wdXQpOiBBcnJheTx7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgZGF0YT86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xuICBieXRlU2l6ZT86IG51bWJlcjtcbn0+IHtcbiAgY29uc3QgaW1hZ2VzID0gYXJncy5pbnB1dD8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IFwiaW1hZ2VcIikgPz8gW107XG4gIHJldHVybiBpbWFnZXMubWFwKChpbWFnZSkgPT4ge1xuICAgIGNvbnN0IGRhdGFVcmwgPSBwYXJzZURhdGFVcmwoaW1hZ2UudXJsKTtcbiAgICBpZiAoIWRhdGFVcmwpIHJldHVybiB7IHVybDogaW1hZ2UudXJsIH07XG4gICAgaWYgKGRhdGFVcmwuaXNCYXNlNjQgJiYgZGF0YVVybC5tZWRpYVR5cGUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiaW1hZ2UvXCIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZWRpYVR5cGU6IGRhdGFVcmwubWVkaWFUeXBlLFxuICAgICAgICBkYXRhOiBkYXRhVXJsLmRhdGEsXG4gICAgICAgIGJ5dGVTaXplOiBiYXNlNjRCeXRlU2l6ZShkYXRhVXJsLmRhdGEpLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lZGlhVHlwZTogZGF0YVVybC5tZWRpYVR5cGUsXG4gICAgICB1cmw6IGBbZGF0YS11cmwgJHtpbWFnZS51cmwubGVuZ3RofSBjaGFyc11gLFxuICAgICAgLi4uKGRhdGFVcmwuaXNCYXNlNjQgPyB7IGJ5dGVTaXplOiBiYXNlNjRCeXRlU2l6ZShkYXRhVXJsLmRhdGEpIH0gOiB7fSksXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0YVVybChcbiAgdmFsdWU6IHN0cmluZyxcbik6IHsgbWVkaWFUeXBlOiBzdHJpbmc7IGRhdGE6IHN0cmluZzsgaXNCYXNlNjQ6IGJvb2xlYW4gfSB8IG51bGwge1xuICBjb25zdCBtYXRjaCA9IC9eZGF0YTooW147LF0rKSgoPzo7W14sXSopKiksKC4qKSQvaXMuZXhlYyh2YWx1ZSk7XG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuICBjb25zdCBwYXJhbXMgPSBtYXRjaFsyXSEudG9Mb3dlckNhc2UoKS5zcGxpdChcIjtcIikuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4geyBtZWRpYVR5cGU6IG1hdGNoWzFdISwgZGF0YTogbWF0Y2hbM10hLCBpc0Jhc2U2NDogcGFyYW1zLmluY2x1ZGVzKFwiYmFzZTY0XCIpIH07XG59XG5cbmZ1bmN0aW9uIGJhc2U2NEJ5dGVTaXplKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBub3JtYWxpemVkID0gL1xccy8udGVzdCh2YWx1ZSkgPyB2YWx1ZS5yZXBsYWNlKC9cXHMvZywgXCJcIikgOiB2YWx1ZTtcbiAgY29uc3QgcGFkZGluZyA9IG5vcm1hbGl6ZWQuZW5kc1dpdGgoXCI9PVwiKSA/IDIgOiBub3JtYWxpemVkLmVuZHNXaXRoKFwiPVwiKSA/IDEgOiAwO1xuICByZXR1cm4gTWF0aC5tYXgoTWF0aC5mbG9vcigobm9ybWFsaXplZC5sZW5ndGggKiAzKSAvIDQpIC0gcGFkZGluZywgMCk7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBTUEsTUFBYSxxQ0FBcUM7Q0FDaEQsTUFBTTtDQUNOLGNBQWM7QUFDaEI7QUFFQSxTQUFTLG9CQUFvQixPQUF1QjtDQUNsRCxPQUFPLE1BQ0osUUFBUSxNQUFNLE9BQU8sQ0FBQyxDQUN0QixRQUFRLE1BQU0sUUFBUSxDQUFDLENBQ3ZCLFFBQVEsTUFBTSxNQUFNLENBQUMsQ0FDckIsUUFBUSxNQUFNLE1BQU07QUFDekI7QUFFQSxTQUFnQixxQkFBcUIsUUFBNkI7Q0FDaEUsT0FBTyxPQUFPLFFBQ1gsU0FBUyxTQUFTO0VBQ2pCLElBQUksS0FBSyxTQUFTLFFBQVEsT0FBTyxDQUFDLEtBQUssSUFBSTtFQUMzQyxJQUFJLEtBQUssU0FBUyxTQUFTO0dBQ3pCLE1BQU0sTUFBTSxvQkFBb0IsS0FBSyxpQkFBaUIsaUJBQWlCO0dBQ3ZFLE9BQU8sQ0FBQyxtQ0FBbUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLO0VBQ3pFO0VBQ0EsT0FBTyxDQUFDO0NBQ1YsQ0FBQyxDQUFDLENBQ0QsUUFBUSxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FDakMsS0FBSyxJQUFJO0FBQ2Q7QUFFQSxTQUFnQixjQUFjLFFBQWlFO0NBQzdGLE9BQU8sT0FBTyxRQUFRLFFBQVEsU0FBUyxLQUFLLFNBQVMsT0FBTztBQUM5RDtBQUVBLFNBQWdCLHNCQUFzQixPQUF5RDtDQUM3RixNQUFNLE1BQU0sb0JBQW9CLE1BQU0saUJBQWlCLGlCQUFpQjtDQUN4RSxPQUFPLG1DQUFtQyxNQUFNLEtBQUssU0FBUyxJQUFJO0FBQ3BFO0FBRUEsU0FBZ0Is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
92
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcmVzcG9uc2UtZm9ybWF0LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC1yZXNwb25zZS1mb3JtYXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ09ERVhfSU1BR0VfR0VORVJBVElPTl9NT0RFTCxcbiAgcmVzb2x2ZUltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG59IGZyb20gXCIuL3FncmlkLWltYWdlLWdlbmVyYXRpb25cIjtcbmltcG9ydCB7XG4gIHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEsXG4gIHR5cGUgUWdyaWRDb250ZW50LFxuICB0eXBlIFF1ZXJ5SW5wdXQsXG4gIHR5cGUgUXVlcnlPdXRwdXQsXG59IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBDT0RFWF9JTUFHRV9HRU5FUkFUSU9OX1RPT0xfQ09ORklHID0ge1xuICB0eXBlOiBcImltYWdlX2dlbmVyYXRpb25cIixcbiAgb3V0cHV0Rm9ybWF0OiBcInBuZ1wiLFxufSBhcyBjb25zdDtcblxuZnVuY3Rpb24gZXNjYXBlSHRtbEF0dHJpYnV0ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuICAgIC5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKVxuICAgIC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKVxuICAgIC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFJlc3BvbnNlRm9yTG9nKHJlc3VsdDogUXVlcnlPdXRwdXQpOiBzdHJpbmcge1xuICByZXR1cm4gcmVzdWx0LmNvbnRlbnRcbiAgICAuZmxhdE1hcCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gXCJ0ZXh0XCIpIHJldHVybiBbaXRlbS50ZXh0XTtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IFwiaW1hZ2VcIikge1xuICAgICAgICBjb25zdCBhbHQgPSBlc2NhcGVIdG1sQXR0cmlidXRlKGl0ZW0ucmV2aXNlZFByb21wdCA/PyBcImdlbmVyYXRlZCBpbWFnZVwiKTtcbiAgICAgICAgcmV0dXJuIFtgPGltZyBzcmM9XCJkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtpdGVtLmRhdGF9XCIgYWx0PVwiJHthbHR9XCIgLz5gXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQubGVuZ3RoID4gMClcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlUGFydHMocmVzdWx0OiBRdWVyeU91dHB1dCk6IEV4dHJhY3Q8UWdyaWRDb250ZW50LCB7IHR5cGU6IFwiaW1hZ2VcIiB9PltdIHtcbiAgcmV0dXJuIHJlc3VsdC5jb250ZW50LmZpbHRlcigoaXRlbSkgPT4gaXRlbS50eXBlID09PSBcImltYWdlXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SW1hZ2VQYXJ0Rm9yTG9nKGltYWdlOiBFeHRyYWN0PFFncmlkQ29udGVudCwgeyB0eXBlOiBcImltYWdlXCIgfT4pOiBzdHJpbmcge1xuICBjb25zdCBhbHQgPSBlc2NhcGVIdG1sQXR0cmlidXRlKGltYWdlLnJldmlzZWRQcm9tcHQgPz8gXCJnZW5lcmF0ZWQgaW1hZ2VcIik7XG4gIHJldHVybiBgPGltZyBzcmM9XCJkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtpbWFnZS5kYXRhfVwiIGFsdD1cIiR7YWx0fVwiIC8+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltYWdlR2VuZXJhdGlvblRvb2xBcmdzKFxuICBhcmdzOiBRdWVyeUlucHV0LFxuICBvcHRpb25zOiB7IGluY2x1ZGVJbnB1dEltYWdlcz86IGJvb2xlYW47IGdlbmVyYXRpb24/OiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YSB9ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVJbWFnZUdlbmVyYXRpb25PcHRpb25zKGFyZ3MuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyk7XG4gIGNvbnN0IGlucHV0SW1hZ2VzID1cbiAgICBvcHRpb25zLmluY2x1ZGVJbnB1dEltYWdlcyA9PT0gZmFsc2UgPyBbXSA6IGV4dHJhY3RJbnB1dEltYWdlc0ZvclRvb2xBcmdzKGFyZ3MpO1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgIHByb21wdDogYXJncy5wcm9tcHQsXG4gICAgLi4uKGlucHV0SW1hZ2VzLmxlbmd0aCA+IDAgPyB7IGlucHV0SW1hZ2VzIH0gOiB7fSksXG4gICAgZHJpdmVyTW9kZWw6IGFyZ3MubW9kZWwgPz8gbnVsbCxcbiAgICB0b29sOiBDT0RFWF9JTUFHRV9HRU5FUkFUSU9OX1RPT0xfQ09ORklHLFxuICAgIC4uLihhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPyB7IHJlcXVlc3RlZE9wdGlvbnM6IGFyZ3MuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyB9IDoge30pLFxuICAgIC4uLihvcHRpb25zLmdlbmVyYXRpb25cbiAgICAgID8geyBvYnNlcnZlZEdlbmVyYXRpb246IG9wdGlvbnMuZ2VuZXJhdGlvbiB9XG4gICAgICA6IHtcbiAgICAgICAgICBwcmljaW5nQXNzdW1wdGlvbjoge1xuICAgICAgICAgICAgbW9kZWw6IENPREVYX0lNQUdFX0dFTkVSQVRJT05fTU9ERUwsXG4gICAgICAgICAgICBxdWFsaXR5OiByZXNvbHZlZC5xdWFsaXR5LFxuICAgICAgICAgICAgc2l6ZTogcmVzb2x2ZWQuc2l6ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEltYWdlR2VuZXJhdGlvblRvb2xTdGVwcyhcbiAgYXJnczogUXVlcnlJbnB1dCxcbiAgaW1hZ2VzOiBFeHRyYWN0PFFncmlkQ29udGVudCwgeyB0eXBlOiBcImltYWdlXCIgfT5bXSxcbiAgc3RlcEluZGV4OiBudW1iZXIsXG4pOiBBcnJheTx7XG4gIHN0ZXBfaW5kZXg6IG51bWJlcjtcbiAgdHlwZTogXCJ0b29sX2NhbGxcIjtcbiAgdG9vbF9jYWxsX2luZGV4OiBudW1iZXI7XG4gIHRvb2xfY2FsbF9pZDogc3RyaW5nO1xuICB0b29sX25hbWU6IFwiaW1hZ2VfZ2VuZXJhdGlvblwiO1xuICB0b29sX2FyZ3M6IHN0cmluZztcbiAgdG9vbF9yZXN1bHQ6IHN0cmluZztcbn0+IHtcbiAgaWYgKGltYWdlcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICByZXR1cm4gaW1hZ2VzLm1hcCgoaW1hZ2UsIGluZGV4KSA9PiAoe1xuICAgIHN0ZXBfaW5kZXg6IHN0ZXBJbmRleCxcbiAgICB0eXBlOiBcInRvb2xfY2FsbFwiLFxuICAgIHRvb2xfY2FsbF9pbmRleDogaW5kZXgsXG4gICAgdG9vbF9jYWxsX2lkOiBgaW1hZ2VfZ2VuZXJhdGlvbjoke3N0ZXBJbmRleH06JHtpbmRleH1gLFxuICAgIHRvb2xfbmFtZTogXCJpbWFnZV9nZW5lcmF0aW9uXCIsXG4gICAgdG9vbF9hcmdzOiBpbWFnZUdlbmVyYXRpb25Ub29sQXJncyhhcmdzLCB7XG4gICAgICBpbmNsdWRlSW5wdXRJbWFnZXM6IGluZGV4ID09PSAwLFxuICAgICAgZ2VuZXJhdGlvbjogaW1hZ2UuZ2VuZXJhdGlvbixcbiAgICB9KSxcbiAgICB0b29sX3Jlc3VsdDogZm9ybWF0SW1hZ2VQYXJ0Rm9yTG9nKGltYWdlKSxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SW5wdXRJbWFnZXNGb3JUb29sQXJncyhhcmdzOiBRdWVyeUlucHV0KTogQXJyYXk8e1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIGRhdGE/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbiAgYnl0ZVNpemU/OiBudW1iZXI7XG59PiB7XG4gIGNvbnN0IGltYWdlcyA9IGFyZ3MuaW5wdXQ/LmZpbHRlcigoaXRlbSkgPT4gaXRlbS50eXBlID09PSBcImltYWdlXCIpID8/IFtdO1xuICByZXR1cm4gaW1hZ2VzLm1hcCgoaW1hZ2UpID0+IHtcbiAgICBjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVXJsKGltYWdlLnVybCk7XG4gICAgaWYgKCFkYXRhVXJsKSByZXR1cm4geyB1cmw6IGltYWdlLnVybCB9O1xuICAgIGlmIChkYXRhVXJsLmlzQmFzZTY0ICYmIGRhdGFVcmwubWVkaWFUeXBlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcImltYWdlL1wiKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWVkaWFUeXBlOiBkYXRhVXJsLm1lZGlhVHlwZSxcbiAgICAgICAgZGF0YTogZGF0YVVybC5kYXRhLFxuICAgICAgICBieXRlU2l6ZTogYmFzZTY0Qnl0ZVNpemUoZGF0YVVybC5kYXRhKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtZWRpYVR5cGU6IGRhdGFVcmwubWVkaWFUeXBlLFxuICAgICAgdXJsOiBgW2RhdGEtdXJsICR7aW1hZ2UudXJsLmxlbmd0aH0gY2hhcnNdYCxcbiAgICAgIC4uLihkYXRhVXJsLmlzQmFzZTY0ID8geyBieXRlU2l6ZTogYmFzZTY0Qnl0ZVNpemUoZGF0YVVybC5kYXRhKSB9IDoge30pLFxuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZURhdGFVcmwoXG4gIHZhbHVlOiBzdHJpbmcsXG4pOiB7IG1lZGlhVHlwZTogc3RyaW5nOyBkYXRhOiBzdHJpbmc7IGlzQmFzZTY0OiBib29sZWFuIH0gfCBudWxsIHtcbiAgY29uc3QgbWF0Y2ggPSAvXmRhdGE6KFteOyxdKykoKD86O1teLF0qKSopLCguKikkL2lzLmV4ZWModmFsdWUpO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcGFyYW1zID0gbWF0Y2hbMl0hLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCI7XCIpLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIHsgbWVkaWFUeXBlOiBtYXRjaFsxXSEsIGRhdGE6IG1hdGNoWzNdISwgaXNCYXNlNjQ6IHBhcmFtcy5pbmNsdWRlcyhcImJhc2U2NFwiKSB9O1xufVxuXG5mdW5jdGlvbiBiYXNlNjRCeXRlU2l6ZSh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IC9cXHMvLnRlc3QodmFsdWUpID8gdmFsdWUucmVwbGFjZSgvXFxzL2csIFwiXCIpIDogdmFsdWU7XG4gIGNvbnN0IHBhZGRpbmcgPSBub3JtYWxpemVkLmVuZHNXaXRoKFwiPT1cIikgPyAyIDogbm9ybWFsaXplZC5lbmRzV2l0aChcIj1cIikgPyAxIDogMDtcbiAgcmV0dXJuIE1hdGgubWF4KE1hdGguZmxvb3IoKG5vcm1hbGl6ZWQubGVuZ3RoICogMykgLyA0KSAtIHBhZGRpbmcsIDApO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQVdBLE1BQWEscUNBQXFDO0NBQ2hELE1BQU07Q0FDTixjQUFjO0FBQ2hCO0FBRUEsU0FBUyxvQkFBb0IsT0FBdUI7Q0FDbEQsT0FBTyxNQUNKLFFBQVEsTUFBTSxPQUFPLENBQUMsQ0FDdEIsUUFBUSxNQUFNLFFBQVEsQ0FBQyxDQUN2QixRQUFRLE1BQU0sTUFBTSxDQUFDLENBQ3JCLFFBQVEsTUFBTSxNQUFNO0FBQ3pCO0FBRUEsU0FBZ0IscUJBQXFCLFFBQTZCO0NBQ2hFLE9BQU8sT0FBTyxRQUNYLFNBQVMsU0FBUztFQUNqQixJQUFJLEtBQUssU0FBUyxRQUFRLE9BQU8sQ0FBQyxLQUFLLElBQUk7RUFDM0MsSUFBSSxLQUFLLFNBQVMsU0FBUztHQUN6QixNQUFNLE1BQU0sb0JBQW9CLEtBQUssaUJBQWlCLGlCQUFpQjtHQUN2RSxPQUFPLENBQUMsbUNBQW1DLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSztFQUN6RTtFQUNBLE9BQU8sQ0FBQztDQUNWLENBQUMsQ0FBQyxDQUNELFFBQVEsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQ2pDLEtBQUssSUFBSTtBQUNkO0FBRUEsU0FBZ0IsY0FBYyxRQUFpRTtDQUM3RixPQUFPLE9BQU8s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
@@ -172,7 +172,7 @@ async function afterQuery(requestLogId, stepIndex, args, result) {
172
172
  cost_usd: agg.cost_usd,
173
173
  cost_source: agg.cost_source,
174
174
  image_cost_usd: imageCostMicroUsd,
175
- image_cost_method: imageCostMicroUsd !== null ? imageGenerationCostMethod(args.imageGenerationOptions) : null,
175
+ image_cost_method: imageCostMicroUsd !== null ? imageGenerationCostMethod(args.imageGenerationOptions, result) : null,
176
176
  history: filterHistoryForStorage(args.history)
177
177
  });
178
178
  return {};
@@ -275,4 +275,4 @@ async function performStaleRunCleanup() {
275
275
  //#endregion
276
276
  export { afterQuery, assertNativeRunAdmission, beforeQuery, finishActiveNativeRunsForRestart, finishRunAborted, finishRunWithError, resetNativeRunRegistryForTests };
277
277
 
278
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcnVuLWxpZmVjeWNsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQtcnVuLWxpZmVjeWNsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIH0gZnJvbSBcInNvbmFtdVwiO1xuXG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi8uLi9pMThuL3NkLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgaXNSZXN0YXJ0UGVuZGluZyB9IGZyb20gXCIuLi8uLi91dGlscy9zZXJ2ZXItcmVzdGFydFwiO1xuaW1wb3J0IHsgUmVxdWVzdExvZ01vZGVsIH0gZnJvbSBcIi4uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsXCI7XG5pbXBvcnQge1xuICBlc3RpbWF0ZUltYWdlR2VuZXJhdGlvbkNvc3RNaWNyb1VzZCxcbiAgaW1hZ2VHZW5lcmF0aW9uQ29zdE1ldGhvZCxcbn0gZnJvbSBcIi4vcWdyaWQtaW1hZ2UtZ2VuZXJhdGlvblwiO1xuaW1wb3J0IHtcbiAgYnVpbGRJbWFnZUdlbmVyYXRpb25Ub29sU3RlcHMsXG4gIGZvcm1hdFJlc3BvbnNlRm9yTG9nLFxuICBnZXRJbWFnZVBhcnRzLFxufSBmcm9tIFwiLi9xZ3JpZC1yZXNwb25zZS1mb3JtYXRcIjtcbmltcG9ydCB7IHR5cGUgUWdyaWRSdW5Db250ZXh0LCB0eXBlIFF1ZXJ5SW5wdXQsIHR5cGUgUXVlcnlPdXRwdXQgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJydW4tbGlmZWN5Y2xlXCJdKTtcbmNvbnN0IFNUQUxFX1JVTl9USFJFU0hPTERfTVMgPSAzMCAqIDYwICogMTAwMDtcbmNvbnN0IFNUQUxFX0NMRUFOVVBfSU5URVJWQUxfTVMgPSA2MCAqIDEwMDA7XG5sZXQgc3RhbGVDbGVhbnVwSW5GbGlnaHQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG5sZXQgbGFzdFN0YWxlQ2xlYW51cFN0YXJ0ZWRBdCA9IDA7XG5jb25zdCBhY3RpdmVOYXRpdmVSdW5SZWZzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbmNvbnN0IGludGVycnVwdGVkTmF0aXZlUnVuSWRzID0gbmV3IFNldDxudW1iZXI+KCk7XG5jb25zdCBhY3RpdmVOYXRpdmVGaW5hbGl6ZXJzID0gbmV3IE1hcDxudW1iZXIsIFNldDxQcm9taXNlPHZvaWQ+Pj4oKTtcblxuZnVuY3Rpb24gcmVzdGFydFVuYXZhaWxhYmxlKCk6IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiB7XG4gIHJldHVybiBuZXcgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uKFNEKFwicWdyaWQucmVzdGFydFBlbmRpbmdcIikoKSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTmF0aXZlUnVuKHJlcXVlc3RMb2dJZDogbnVtYmVyKTogdm9pZCB7XG4gIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuc2V0KHJlcXVlc3RMb2dJZCwgKGFjdGl2ZU5hdGl2ZVJ1blJlZnMuZ2V0KHJlcXVlc3RMb2dJZCkgPz8gMCkgKyAxKTtcbn1cblxuZnVuY3Rpb24gcmVsZWFzZU5hdGl2ZVJ1bihyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCByZWZzID0gYWN0aXZlTmF0aXZlUnVuUmVmcy5nZXQocmVxdWVzdExvZ0lkKTtcbiAgaWYgKHJlZnMgPT09IHVuZGVmaW5lZCB8fCByZWZzIDw9IDEpIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuZGVsZXRlKHJlcXVlc3RMb2dJZCk7XG4gIGVsc2UgYWN0aXZlTmF0aXZlUnVuUmVmcy5zZXQocmVxdWVzdExvZ0lkLCByZWZzIC0gMSk7XG59XG5cbmZ1bmN0aW9uIHRyYWNrTmF0aXZlRmluYWxpemVyPFQ+KHJlcXVlc3RMb2dJZDogbnVtYmVyLCBmaW5hbGl6ZTogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCBvcGVyYXRpb24gPSBmaW5hbGl6ZSgpO1xuICBjb25zdCBzZXR0bGVkID0gb3BlcmF0aW9uLnRoZW4oXG4gICAgKCkgPT4gdW5kZWZpbmVkLFxuICAgICgpID0+IHVuZGVmaW5lZCxcbiAgKTtcbiAgY29uc3QgZmluYWxpemVycyA9IGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuZ2V0KHJlcXVlc3RMb2dJZCkgPz8gbmV3IFNldDxQcm9taXNlPHZvaWQ+PigpO1xuICBmaW5hbGl6ZXJzLmFkZChzZXR0bGVkKTtcbiAgYWN0aXZlTmF0aXZlRmluYWxpemVycy5zZXQocmVxdWVzdExvZ0lkLCBmaW5hbGl6ZXJzKTtcbiAgdm9pZCBzZXR0bGVkLnRoZW4oKCkgPT4ge1xuICAgIGZpbmFsaXplcnMuZGVsZXRlKHNldHRsZWQpO1xuICAgIGlmIChmaW5hbGl6ZXJzLnNpemUgPT09IDApIGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuZGVsZXRlKHJlcXVlc3RMb2dJZCk7XG4gIH0pO1xuICByZXR1cm4gb3BlcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0TmF0aXZlUnVuQWRtaXNzaW9uKCk6IHZvaWQge1xuICBpZiAoaXNSZXN0YXJ0UGVuZGluZygpKSB0aHJvdyByZXN0YXJ0VW5hdmFpbGFibGUoKTtcbn1cblxuZnVuY3Rpb24gd2l0aFByb3ZpZGVyUHJlZml4KFxuICByb3V0ZU1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIG1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW1vZGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAobW9kZWwuaW5jbHVkZXMoXCIvXCIpKSByZXR1cm4gbW9kZWw7XG4gIGNvbnN0IHNsYXNoID0gcm91dGVNb2RlbD8uaW5kZXhPZihcIi9cIikgPz8gLTE7XG4gIGNvbnN0IHByb3ZpZGVyID0gc2xhc2ggPiAwID8gcm91dGVNb2RlbD8uc2xpY2UoMCwgc2xhc2gpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gcHJvdmlkZXIgPyBgJHtwcm92aWRlcn0vJHttb2RlbH1gIDogbW9kZWw7XG59XG5cbi8qKlxuICogaGlzdG9yeeuKlCDsm5Drs7gg6re464yA66GcIOyggOyepe2VmOq4sOuztOuLpOuKlCwgcnVuIOu2hOyEneyXkCDtlYTsmpTtlZwgdXNlci9hc3Npc3RhbnQg7KCV67O066eMIO2VhO2EsOunge2VtOyEnCDsoIDsnqVcbiAqL1xuZnVuY3Rpb24gZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UocmF3SGlzdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gIGlmICghcmF3SGlzdG9yeSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBpdGVtcyA9IEpTT04ucGFyc2UocmF3SGlzdG9yeSkgYXMgdW5rbm93bltdO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0gfHwgdHlwZW9mIGl0ZW0gIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IFwibWVzc2FnZVwiICYmIChyZWNvcmQucm9sZSA9PT0gXCJ1c2VyXCIgfHwgcmVjb3JkLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPiAwID8gZmlsdGVyZWQgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQYXJzZWFibGVKc29uKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIEpTT04ucGFyc2UodGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBSdW5MaWZlY3ljbGVSZXN1bHQgPSB7XG4gIHJ1bkNvbnRleHQ/OiBRZ3JpZFJ1bkNvbnRleHQ7XG59O1xuXG4vKipcbiAqIGxvZ2dlci1lbmFibGVkIHF1ZXJ5L3N0cmVhbSDsnZHri7Ug7KCE7ZuE7JeQIO2YuOy2nC5cbiAqXG4gKiAxKSBiZWZvcmVRdWVyeTogcnVuIOyDneyEsS/qs4Tsho0gKyB0b29sIHJlc3VsdCDsmYTro4wgKyBzdGFsZSB0b29sLXdhaXQgY2xlYW51cFxuICogMikgYWZ0ZXJRdWVyeTogZ2VuZXJhdGUgc3RlcCArIHRvb2wtY2FsbCBzdGVwICsgZmluaXNoL2tlZXAtb3BlblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmVmb3JlUXVlcnkoYXJnczogUXVlcnlJbnB1dCk6IFByb21pc2U8e1xuICByZXF1ZXN0TG9nSWQ6IG51bWJlcjtcbiAgc3RlcEluZGV4OiBudW1iZXI7XG59PiB7XG4gIGFzc2VydE5hdGl2ZVJ1bkFkbWlzc2lvbigpO1xuXG4gIGxldCByZXF1ZXN0TG9nSWQ6IG51bWJlcjtcbiAgbGV0IHN0ZXBJbmRleCA9IDA7XG5cbiAgLy8gcmVxdWVzdExvZ0lkIOqwgCDsnojsnYQg65WM66eMIOq4sOyhtCBydW4g7Jew7J6lLiB0aHJlYWRDb29yZCDrp4wg7J6I64qUIGNvbnYg64qUIOyDiCBydW4g7Jy866GcIOyLnOyekS5cbiAgLy8gY29udGludWF0aW9uIOydgCBjcmVhdGVSdW4g7J2EIOqxtOuEiOubsOuvgOuhnCBydW4g7J2YIHRvb2xzIOuKlCDssqsg7Iqk7YWdIOyepeywqeu2hOycvOuhnCDqs6DsoJXrkJzri6Qg4oCUXG4gIC8vIEFJIFNESyBwcmVwYXJlU3RlcC9hY3RpdmVUb29scyDroZwg7Iqk7YWd66eI64ukIO2ItOyFi+ydtCDrsJTrgIzslrTrj4Qg66Gc6re47JeQ64qUIOuwmOyYgeuQmOyngCDslYrripTri6QuXG4gIGlmIChhcmdzLnJ1bkNvbnRleHQ/LnJlcXVlc3RMb2dJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVxdWVzdExvZ0lkID0gYXJncy5ydW5Db250ZXh0LnJlcXVlc3RMb2dJZDtcbiAgICAvLyBjbGVhbnVw6rO8IOqwmeydgCBEQiBhZHZpc29yeSBsb2Nr7J2EIOyeoeqzoCB0b29sIOqysOqzvCDrsJjsmIEgKyDri6TsnYwgc3RlcCDsmIjslb3snYQg7ZWcXG4gICAgLy8gdHJhbnNhY3Rpb27sl5DshJwg7LKY66as7ZWc64ukLiDsl6zrn6wgcWdyaWQg7ZSE66Gc7IS47IqkIOyCrOydtOyXkOyEnOuPhCBzdGFsZSBleHBpcnnqsIBcbiAgICAvLyDrj4TssKkg7KSR7J24IGZvbGxvdy11cOydhCBlcnJvcuuhnCDrja7slrTsk7Dsp4Ag66q77ZWc64ukLlxuICAgIHN0ZXBJbmRleCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jb250aW51ZVRvb2xSdW4ocmVxdWVzdExvZ0lkLCBhcmdzLnRvb2xSZXN1bHRzID8/IFtdKTtcbiAgICBhd2FpdCBjbGVhbnVwU3RhbGVSdW5zKCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgY2xlYW51cFN0YWxlUnVucygpO1xuICAgIHJlcXVlc3RMb2dJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jcmVhdGVSdW4oe1xuICAgICAgdXNlcl9wcm9tcHQ6IGFyZ3MucHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogYXJncy5zeXN0ZW0sXG4gICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogYXJncy5tb2RlbCxcbiAgICAgIGVmZm9ydDogYXJncy5lZmZvcnQsXG4gICAgICBwcm9qZWN0X25hbWU6IGFyZ3MucHJvamVjdE5hbWUsXG4gICAgICBoaXN0b3J5OiBmaWx0ZXJIaXN0b3J5Rm9yU3RvcmFnZShhcmdzLmhpc3RvcnkpLFxuICAgICAgdG9vbHM6IGFyZ3MudG9vbHM/Lmxlbmd0aCA/IGFyZ3MudG9vbHMgOiB1bmRlZmluZWQsXG4gICAgICBpc19pbWFnZV9nZW5lcmF0aW9uOiBhcmdzLmltYWdlR2VuZXJhdGlvbixcbiAgICAgIGpzb25fc2NoZW1hOiBhcmdzLmpzb25TY2hlbWEgPz8gbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERCIOykgOu5hCDspJHsl5Ag7J6s7Iuc7J6R7J20IOyLnOyekeuQkOuLpOuptCBwcm92aWRlciDsi6TtlonsnLzroZwg64SY7Ja06rCA7KeAIOyViuuKlOuLpC5cbiAgLy8g7J20IOyalOyyreydgCDsnqzsi5zsnpEgc25hcHNob3Tsl5Ag7JeG7JeI7Jy866+A66GcIOuwqeq4iCDspIDruYTtlZwgcnVu7J2EIOyngeygkSDrp4jqsJDtlZzri6QuXG4gIGlmIChpc1Jlc3RhcnRQZW5kaW5nKCkpIHtcbiAgICBhd2FpdCBmaW5pc2hUZXJtaW5hbFJ1bihyZXF1ZXN0TG9nSWQsIFwiZXJyb3JcIiwgXCJzZXJ2ZXIgcmVzdGFydGVkXCIpO1xuICAgIHRocm93IHJlc3RhcnRVbmF2YWlsYWJsZSgpO1xuICB9XG5cbiAgcmVnaXN0ZXJOYXRpdmVSdW4ocmVxdWVzdExvZ0lkKTtcbiAgcmV0dXJuIHsgcmVxdWVzdExvZ0lkLCBzdGVwSW5kZXggfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFmdGVyUXVlcnkoXG4gIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICBzdGVwSW5kZXg6IG51bWJlcixcbiAgYXJnczogUXVlcnlJbnB1dCxcbiAgcmVzdWx0OiBRdWVyeU91dHB1dCxcbik6IFByb21pc2U8UnVuTGlmZWN5Y2xlUmVzdWx0PiB7XG4gIGlmIChpbnRlcnJ1cHRlZE5hdGl2ZVJ1bklkcy5oYXMocmVxdWVzdExvZ0lkKSkgcmV0dXJuIHt9O1xuXG4gIHJldHVybiB0cmFja05hdGl2ZUZpbmFsaXplcihyZXF1ZXN0TG9nSWQsIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gcHJvdmlkZXLqsIAgY2Fub25pY2FsIG1vZGVs7J2EIOuPjOugpOykmOuPhCDsmpTssq0gcm91dGUg7J6Q7LK0KFsxbV0g65OxKeuKlCDrs7TsobTtlZzri6QuXG4gICAgICBjb25zdCByZXF1ZXN0ZWRNb2RlbE5hbWUgPSB3aXRoUHJvdmlkZXJQcmVmaXgoXG4gICAgICAgIGFyZ3MubW9kZWwsXG4gICAgICAgIGFyZ3MubW9kZWwgPz8gcmVzdWx0LnJlcXVlc3RlZE1vZGVsID8/IHJlc3VsdC5tb2RlbCxcbiAgICAgICk7XG4gICAgICBjb25zdCBzZXJ2ZWRNb2RlbE5hbWUgPSB3aXRoUHJvdmlkZXJQcmVmaXgoYXJncy5tb2RlbCwgcmVzdWx0Lm1vZGVsKTtcblxuICAgICAgLy8gZ2VuZXJhdGUgc3RlcCDquLDroZ1cbiAgICAgIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hcHBlbmRTdGVwKHJlcXVlc3RMb2dJZCwge1xuICAgICAgICBzdGVwX2luZGV4OiBzdGVwSW5kZXgsXG4gICAgICAgIHR5cGU6IFwiZ2VuZXJhdGVcIixcbiAgICAgICAgbW9kZWxfbmFtZTogc2VydmVkTW9kZWxOYW1lLFxuICAgICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogcmVxdWVzdGVkTW9kZWxOYW1lLFxuICAgICAgICBmYWxsYmFja19jb3VudDogcmVzdWx0Lm1vZGVsRmFsbGJhY2tzPy5sZW5ndGggPz8gMCxcbiAgICAgICAgaW5wdXRfdG9rZW5zOiByZXN1bHQudXNhZ2UuaW5wdXRfdG9rZW5zLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiByZXN1bHQudXNhZ2Uub3V0cHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2VucyxcbiAgICAgICAgY29zdF91c2Q6IE1hdGgucm91bmQocmVzdWx0LmNvc3RVc2QgKiAxXzAwMF8wMDApLFxuICAgICAgICBjb3N0X3NvdXJjZTogcmVzdWx0LmNvc3RTb3VyY2UsXG4gICAgICAgIGR1cmF0aW9uX21zOiByZXN1bHQuZHVyYXRpb25NcyxcbiAgICAgICAgdHRmdF9tczogcmVzdWx0LnR0ZnRNcyxcbiAgICAgICAgZmluaXNoX3JlYXNvbjogcmVzdWx0LmZpbmlzaFJlYXNvbixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpbWFnZVBhcnRzID0gZ2V0SW1hZ2VQYXJ0cyhyZXN1bHQpO1xuICAgICAgY29uc3QgaW1hZ2VDb3N0TWljcm9Vc2QgPSBlc3RpbWF0ZUltYWdlR2VuZXJhdGlvbkNvc3RNaWNyb1VzZChcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICBhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBzdGVwIG9mIGJ1aWxkSW1hZ2VHZW5lcmF0aW9uVG9vbFN0ZXBzKGFyZ3MsIGltYWdlUGFydHMsIHN0ZXBJbmRleCkpIHtcbiAgICAgICAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkLCBzdGVwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5maW5pc2hSZWFzb24gPT09IFwidG9vbC1jYWxsc1wiKSB7XG4gICAgICAgIC8vIHRvb2wtY2FsbCBzdGVw7J2EIOymieyLnCDquLDroZ3tlZjqs6AsIOuLpOydjCBmb2xsb3ctdXDsnbQg6rCZ7J2AIHJvd+yXkCDqsrDqs7zrpbwg7LGE7Jq064ukLlxuICAgICAgICBjb25zdCB0b29sQ2FsbHMgPSByZXN1bHQuY29udGVudC5maWx0ZXIoKGMpID0+IGMudHlwZSA9PT0gXCJ0b29sLWNhbGxcIik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9vbENhbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdGMgPSB0b29sQ2FsbHNbaV0hO1xuICAgICAgICAgIGlmICh0Yy50eXBlICE9PSBcInRvb2wtY2FsbFwiKSBjb250aW51ZTtcbiAgICAgICAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQsIHtcbiAgICAgICAgICAgIHN0ZXBfaW5kZXg6IHN0ZXBJbmRleCxcbiAgICAgICAgICAgIHR5cGU6IFwidG9vbF9jYWxsXCIsXG4gICAgICAgICAgICB0b29sX2NhbGxfaW5kZXg6IGltYWdlUGFydHMubGVuZ3RoICsgaSxcbiAgICAgICAgICAgIHRvb2xfY2FsbF9pZDogdGMudG9vbENhbGxJZCxcbiAgICAgICAgICAgIHRvb2xfbmFtZTogdGMudG9vbE5hbWUsXG4gICAgICAgICAgICB0b29sX2FyZ3M6IHRjLmlucHV0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgcnVuQ29udGV4dDogeyByZXF1ZXN0TG9nSWQgfSB9O1xuICAgICAgfVxuXG4gICAgICAvLyBmaW5pc2hSZWFzb24gPT09IFwic3RvcFwiIOKGkiBydW4g7KKF66OMICjsoITssrQgc3RlcCB1c2FnZSDtlansgrApXG4gICAgICBjb25zdCBhZ2cgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYWdncmVnYXRlU3RlcFVzYWdlKHJlcXVlc3RMb2dJZCk7XG4gICAgICBjb25zdCByZXNwb25zZVRleHQgPSBmb3JtYXRSZXNwb25zZUZvckxvZyhyZXN1bHQpO1xuICAgICAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmZpbmlzaFJ1bihyZXF1ZXN0TG9nSWQsIHtcbiAgICAgICAgc3RhdHVzOiBcInN1Y2NlZWRlZFwiLFxuICAgICAgICByZXNwb25zZTogcmVzcG9uc2VUZXh0LFxuICAgICAgICAvLyBzdHJ1Y3R1cmVkIOyalOyyreunjCDtjJDsoJXtlZzri6QuIGRldGkg67Cw7LmY7J2YIGJyb2tlbiBKU09OIOulmOulvCDrqqnroZ3sl5DshJwg67CU66GcXG4gICAgICAgIC8vIOq1rOuzhO2VmOq4sCDsnITtlZwg6riw66Gd7J2066mwLCDruYRzdHJ1Y3R1cmVkIOyalOyyreydgCBudWxsIOuhnCDrgqjripTri6QuXG4gICAgICAgIHJlc3BvbnNlX2pzb25fb2s6IGFyZ3MuanNvblNjaGVtYSA/IGlzUGFyc2VhYmxlSnNvbihyZXNwb25zZVRleHQpIDogbnVsbCxcbiAgICAgICAgdG9rZW5fbmFtZTogcmVzdWx0LnRva2VuTmFtZSxcbiAgICAgICAgaW5wdXRfdG9rZW5zOiBhZ2cuaW5wdXRfdG9rZW5zLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiBhZ2cub3V0cHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IGFnZy5jYWNoZV9yZWFkX3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBhZ2cuY2FjaGVfY3JlYXRpb25fdG9rZW5zLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IGFnZy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogYWdnLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyxcbiAgICAgICAgZHVyYXRpb25fbXM6IGFnZy5kdXJhdGlvbl9tcyxcbiAgICAgICAgLy8gbXVsdGktc3RlcCBydW4g67aA66qo7J2YIOuqqOuNuOydgCDstZzsooUgdHVybuydhCDshJzruZntlZwg66qo64247J2064ukLlxuICAgICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogcmVxdWVzdGVkTW9kZWxOYW1lLFxuICAgICAgICBtb2RlbF9uYW1lOiBzZXJ2ZWRNb2RlbE5hbWUsXG4gICAgICAgIGZhbGxiYWNrX2NvdW50OiBhZ2cuZmFsbGJhY2tfY291bnQsXG4gICAgICAgIGNvc3RfdXNkOiBhZ2cuY29zdF91c2QsXG4gICAgICAgIGNvc3Rfc291cmNlOiBhZ2cuY29zdF9zb3VyY2UsXG4gICAgICAgIGltYWdlX2Nvc3RfdXNkOiBpbWFnZUNvc3RNaWNyb1VzZCxcbiAgICAgICAgaW1hZ2VfY29zdF9tZXRob2Q6XG4gICAgICAgICAgaW1hZ2VDb3N0TWljcm9Vc2QgIT09IG51bGxcbiAgICAgICAgICAgID8gaW1hZ2VHZW5lcmF0aW9uQ29zdE1ldGhvZChhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGhpc3Rvcnk6IGZpbHRlckhpc3RvcnlGb3JTdG9yYWdlKGFyZ3MuaGlzdG9yeSksXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZWxlYXNlTmF0aXZlUnVuKHJlcXVlc3RMb2dJZCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaFJ1bldpdGhFcnJvcihcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICBhcmdzPzogUXVlcnlJbnB1dCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoaW50ZXJydXB0ZWROYXRpdmVSdW5JZHMuaGFzKHJlcXVlc3RMb2dJZCkpIHJldHVybjtcbiAgcmV0dXJuIHRyYWNrTmF0aXZlRmluYWxpemVyKHJlcXVlc3RMb2dJZCwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaW5pc2hUZXJtaW5hbFJ1bihyZXF1ZXN0TG9nSWQsIFwiZXJyb3JcIiwgZXJyb3JNZXNzYWdlLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVsZWFzZU5hdGl2ZVJ1bihyZXF1ZXN0TG9nSWQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5pc2hSdW5BYm9ydGVkKHJlcXVlc3RMb2dJZDogbnVtYmVyLCBhcmdzPzogUXVlcnlJbnB1dCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoaW50ZXJydXB0ZWROYXRpdmVSdW5JZHMuaGFzKHJlcXVlc3RMb2dJZCkpIHJldHVybjtcbiAgcmV0dXJuIHRyYWNrTmF0aXZlRmluYWxpemVyKHJlcXVlc3RMb2dJZCwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaW5pc2hUZXJtaW5hbFJ1bihyZXF1ZXN0TG9nSWQsIFwiYWJvcnRlZFwiLCBcImNsaWVudCBkaXNjb25uZWN0ZWRcIiwgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlbGVhc2VOYXRpdmVSdW4ocmVxdWVzdExvZ0lkKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKiog7ZiE7J6sIOydtCDtlITroZzshLjsiqTqsIAgcHJvdmlkZXLrpbwg7Iuk7ZaJIOykkeyduCBuYXRpdmUgcnVu66eMIOyerOyLnOyekSDsmKTrpZjroZwg66eI6rCQ7ZWc64ukLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaEFjdGl2ZU5hdGl2ZVJ1bnNGb3JSZXN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXF1ZXN0TG9nSWRzID0gWy4uLmFjdGl2ZU5hdGl2ZVJ1blJlZnMua2V5cygpXTtcbiAgZm9yIChjb25zdCByZXF1ZXN0TG9nSWQgb2YgcmVxdWVzdExvZ0lkcykge1xuICAgIGludGVycnVwdGVkTmF0aXZlUnVuSWRzLmFkZChyZXF1ZXN0TG9nSWQpO1xuICAgIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuZGVsZXRlKHJlcXVlc3RMb2dJZCk7XG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICByZXF1ZXN0TG9nSWRzLm1hcChhc3luYyAocmVxdWVzdExvZ0lkKSA9PiB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChhY3RpdmVOYXRpdmVGaW5hbGl6ZXJzLmdldChyZXF1ZXN0TG9nSWQpID8/IFtdKTtcbiAgICAgIGF3YWl0IGZpbmlzaFRlcm1pbmFsUnVuKHJlcXVlc3RMb2dJZCwgXCJlcnJvclwiLCBcInNlcnZlciByZXN0YXJ0ZWRcIik7XG4gICAgfSksXG4gICk7XG59XG5cbi8qKiDtlITroZzshLjsiqQg7KCE7JetIHJlZ2lzdHJ566W8IOqyqeumrO2VtOyVvCDtlZjripQg64uo7JyEIO2FjOyKpO2KuCDsoITsmqkuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXROYXRpdmVSdW5SZWdpc3RyeUZvclRlc3RzKCk6IHZvaWQge1xuICBhY3RpdmVOYXRpdmVSdW5SZWZzLmNsZWFyKCk7XG4gIGludGVycnVwdGVkTmF0aXZlUnVuSWRzLmNsZWFyKCk7XG4gIGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuY2xlYXIoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluaXNoVGVybWluYWxSdW4oXG4gIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICBzdGF0dXM6IFwiZXJyb3JcIiB8IFwiYWJvcnRlZFwiLFxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgYXJncz86IFF1ZXJ5SW5wdXQsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBsZXQgYWdncmVnYXRlOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIFJlcXVlc3RMb2dNb2RlbC5hZ2dyZWdhdGVTdGVwVXNhZ2U+PiB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgYWdncmVnYXRlID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFnZ3JlZ2F0ZVN0ZXBVc2FnZShyZXF1ZXN0TG9nSWQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgYWdncmVnYXRlU3RlcFVzYWdlIGZhaWxlZCB3aGlsZSBmaW5pc2hpbmcgJHtzdGF0dXN9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5maW5pc2hSdW4ocmVxdWVzdExvZ0lkLCB7XG4gICAgICBzdGF0dXMsXG4gICAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICBoaXN0b3J5OiBhcmdzID8gZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UoYXJncy5oaXN0b3J5KSA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLihhZ2dyZWdhdGVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpbnB1dF90b2tlbnM6IGFnZ3JlZ2F0ZS5pbnB1dF90b2tlbnMsXG4gICAgICAgICAgICBvdXRwdXRfdG9rZW5zOiBhZ2dyZWdhdGUub3V0cHV0X3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfcmVhZF90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgICAgICAgICBkdXJhdGlvbl9tczogYWdncmVnYXRlLmR1cmF0aW9uX21zLFxuICAgICAgICAgICAgZmFsbGJhY2tfY291bnQ6IGFnZ3JlZ2F0ZS5mYWxsYmFja19jb3VudCxcbiAgICAgICAgICAgIGNvc3RfdXNkOiBhZ2dyZWdhdGUuY29zdF91c2QsXG4gICAgICAgICAgICBjb3N0X3NvdXJjZTogYWdncmVnYXRlLmNvc3Rfc291cmNlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoYGZpbmlzaFRlcm1pbmFsUnVuKCR7c3RhdHVzfSkgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFudXBTdGFsZVJ1bnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChzdGFsZUNsZWFudXBJbkZsaWdodCkge1xuICAgIGF3YWl0IHN0YWxlQ2xlYW51cEluRmxpZ2h0O1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGlmIChub3cgLSBsYXN0U3RhbGVDbGVhbnVwU3RhcnRlZEF0IDwgU1RBTEVfQ0xFQU5VUF9JTlRFUlZBTF9NUykgcmV0dXJuO1xuICBsYXN0U3RhbGVDbGVhbnVwU3RhcnRlZEF0ID0gbm93O1xuXG4gIGNvbnN0IGNsZWFudXAgPSBwZXJmb3JtU3RhbGVSdW5DbGVhbnVwKCk7XG4gIHN0YWxlQ2xlYW51cEluRmxpZ2h0ID0gY2xlYW51cDtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjbGVhbnVwO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChzdGFsZUNsZWFudXBJbkZsaWdodCA9PT0gY2xlYW51cCkgc3RhbGVDbGVhbnVwSW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVN0YWxlUnVuQ2xlYW51cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBcInRvb2wtY2FsbCBydW46IG5vIGZvbGxvdy11cCB3aXRoaW4gMzAgbWludXRlc1wiO1xuICAgIGNvbnN0IHN0YWxlSWRzID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW5zKFxuICAgICAgU1RBTEVfUlVOX1RIUkVTSE9MRF9NUyxcbiAgICAgIGVycm9yTWVzc2FnZSxcbiAgICApO1xuICAgIGNvbnN0IGNsZWFuZWRDb3VudCA9IHN0YWxlSWRzLmxlbmd0aDtcbiAgICBpZiAoY2xlYW5lZENvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oYGNsZWFuZWQgdXAgJHtjbGVhbmVkQ291bnR9IHN0YWxlIHJ1bm5pbmcgcmVxdWVzdCBsb2dzYCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBzdGFsZSBjbGVhbnVwIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWlCQSxN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
278
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcnVuLWxpZmVjeWNsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQtcnVuLWxpZmVjeWNsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIH0gZnJvbSBcInNvbmFtdVwiO1xuXG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi8uLi9pMThuL3NkLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgaXNSZXN0YXJ0UGVuZGluZyB9IGZyb20gXCIuLi8uLi91dGlscy9zZXJ2ZXItcmVzdGFydFwiO1xuaW1wb3J0IHsgUmVxdWVzdExvZ01vZGVsIH0gZnJvbSBcIi4uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsXCI7XG5pbXBvcnQge1xuICBlc3RpbWF0ZUltYWdlR2VuZXJhdGlvbkNvc3RNaWNyb1VzZCxcbiAgaW1hZ2VHZW5lcmF0aW9uQ29zdE1ldGhvZCxcbn0gZnJvbSBcIi4vcWdyaWQtaW1hZ2UtZ2VuZXJhdGlvblwiO1xuaW1wb3J0IHtcbiAgYnVpbGRJbWFnZUdlbmVyYXRpb25Ub29sU3RlcHMsXG4gIGZvcm1hdFJlc3BvbnNlRm9yTG9nLFxuICBnZXRJbWFnZVBhcnRzLFxufSBmcm9tIFwiLi9xZ3JpZC1yZXNwb25zZS1mb3JtYXRcIjtcbmltcG9ydCB7IHR5cGUgUWdyaWRSdW5Db250ZXh0LCB0eXBlIFF1ZXJ5SW5wdXQsIHR5cGUgUXVlcnlPdXRwdXQgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJydW4tbGlmZWN5Y2xlXCJdKTtcbmNvbnN0IFNUQUxFX1JVTl9USFJFU0hPTERfTVMgPSAzMCAqIDYwICogMTAwMDtcbmNvbnN0IFNUQUxFX0NMRUFOVVBfSU5URVJWQUxfTVMgPSA2MCAqIDEwMDA7XG5sZXQgc3RhbGVDbGVhbnVwSW5GbGlnaHQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG5sZXQgbGFzdFN0YWxlQ2xlYW51cFN0YXJ0ZWRBdCA9IDA7XG5jb25zdCBhY3RpdmVOYXRpdmVSdW5SZWZzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbmNvbnN0IGludGVycnVwdGVkTmF0aXZlUnVuSWRzID0gbmV3IFNldDxudW1iZXI+KCk7XG5jb25zdCBhY3RpdmVOYXRpdmVGaW5hbGl6ZXJzID0gbmV3IE1hcDxudW1iZXIsIFNldDxQcm9taXNlPHZvaWQ+Pj4oKTtcblxuZnVuY3Rpb24gcmVzdGFydFVuYXZhaWxhYmxlKCk6IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiB7XG4gIHJldHVybiBuZXcgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uKFNEKFwicWdyaWQucmVzdGFydFBlbmRpbmdcIikoKSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTmF0aXZlUnVuKHJlcXVlc3RMb2dJZDogbnVtYmVyKTogdm9pZCB7XG4gIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuc2V0KHJlcXVlc3RMb2dJZCwgKGFjdGl2ZU5hdGl2ZVJ1blJlZnMuZ2V0KHJlcXVlc3RMb2dJZCkgPz8gMCkgKyAxKTtcbn1cblxuZnVuY3Rpb24gcmVsZWFzZU5hdGl2ZVJ1bihyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCByZWZzID0gYWN0aXZlTmF0aXZlUnVuUmVmcy5nZXQocmVxdWVzdExvZ0lkKTtcbiAgaWYgKHJlZnMgPT09IHVuZGVmaW5lZCB8fCByZWZzIDw9IDEpIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuZGVsZXRlKHJlcXVlc3RMb2dJZCk7XG4gIGVsc2UgYWN0aXZlTmF0aXZlUnVuUmVmcy5zZXQocmVxdWVzdExvZ0lkLCByZWZzIC0gMSk7XG59XG5cbmZ1bmN0aW9uIHRyYWNrTmF0aXZlRmluYWxpemVyPFQ+KHJlcXVlc3RMb2dJZDogbnVtYmVyLCBmaW5hbGl6ZTogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCBvcGVyYXRpb24gPSBmaW5hbGl6ZSgpO1xuICBjb25zdCBzZXR0bGVkID0gb3BlcmF0aW9uLnRoZW4oXG4gICAgKCkgPT4gdW5kZWZpbmVkLFxuICAgICgpID0+IHVuZGVmaW5lZCxcbiAgKTtcbiAgY29uc3QgZmluYWxpemVycyA9IGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuZ2V0KHJlcXVlc3RMb2dJZCkgPz8gbmV3IFNldDxQcm9taXNlPHZvaWQ+PigpO1xuICBmaW5hbGl6ZXJzLmFkZChzZXR0bGVkKTtcbiAgYWN0aXZlTmF0aXZlRmluYWxpemVycy5zZXQocmVxdWVzdExvZ0lkLCBmaW5hbGl6ZXJzKTtcbiAgdm9pZCBzZXR0bGVkLnRoZW4oKCkgPT4ge1xuICAgIGZpbmFsaXplcnMuZGVsZXRlKHNldHRsZWQpO1xuICAgIGlmIChmaW5hbGl6ZXJzLnNpemUgPT09IDApIGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuZGVsZXRlKHJlcXVlc3RMb2dJZCk7XG4gIH0pO1xuICByZXR1cm4gb3BlcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0TmF0aXZlUnVuQWRtaXNzaW9uKCk6IHZvaWQge1xuICBpZiAoaXNSZXN0YXJ0UGVuZGluZygpKSB0aHJvdyByZXN0YXJ0VW5hdmFpbGFibGUoKTtcbn1cblxuZnVuY3Rpb24gd2l0aFByb3ZpZGVyUHJlZml4KFxuICByb3V0ZU1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIG1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW1vZGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAobW9kZWwuaW5jbHVkZXMoXCIvXCIpKSByZXR1cm4gbW9kZWw7XG4gIGNvbnN0IHNsYXNoID0gcm91dGVNb2RlbD8uaW5kZXhPZihcIi9cIikgPz8gLTE7XG4gIGNvbnN0IHByb3ZpZGVyID0gc2xhc2ggPiAwID8gcm91dGVNb2RlbD8uc2xpY2UoMCwgc2xhc2gpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gcHJvdmlkZXIgPyBgJHtwcm92aWRlcn0vJHttb2RlbH1gIDogbW9kZWw7XG59XG5cbi8qKlxuICogaGlzdG9yeeuKlCDsm5Drs7gg6re464yA66GcIOyggOyepe2VmOq4sOuztOuLpOuKlCwgcnVuIOu2hOyEneyXkCDtlYTsmpTtlZwgdXNlci9hc3Npc3RhbnQg7KCV67O066eMIO2VhO2EsOunge2VtOyEnCDsoIDsnqVcbiAqL1xuZnVuY3Rpb24gZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UocmF3SGlzdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gIGlmICghcmF3SGlzdG9yeSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBpdGVtcyA9IEpTT04ucGFyc2UocmF3SGlzdG9yeSkgYXMgdW5rbm93bltdO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0gfHwgdHlwZW9mIGl0ZW0gIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IFwibWVzc2FnZVwiICYmIChyZWNvcmQucm9sZSA9PT0gXCJ1c2VyXCIgfHwgcmVjb3JkLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPiAwID8gZmlsdGVyZWQgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQYXJzZWFibGVKc29uKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIEpTT04ucGFyc2UodGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBSdW5MaWZlY3ljbGVSZXN1bHQgPSB7XG4gIHJ1bkNvbnRleHQ/OiBRZ3JpZFJ1bkNvbnRleHQ7XG59O1xuXG4vKipcbiAqIGxvZ2dlci1lbmFibGVkIHF1ZXJ5L3N0cmVhbSDsnZHri7Ug7KCE7ZuE7JeQIO2YuOy2nC5cbiAqXG4gKiAxKSBiZWZvcmVRdWVyeTogcnVuIOyDneyEsS/qs4Tsho0gKyB0b29sIHJlc3VsdCDsmYTro4wgKyBzdGFsZSB0b29sLXdhaXQgY2xlYW51cFxuICogMikgYWZ0ZXJRdWVyeTogZ2VuZXJhdGUgc3RlcCArIHRvb2wtY2FsbCBzdGVwICsgZmluaXNoL2tlZXAtb3BlblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmVmb3JlUXVlcnkoYXJnczogUXVlcnlJbnB1dCk6IFByb21pc2U8e1xuICByZXF1ZXN0TG9nSWQ6IG51bWJlcjtcbiAgc3RlcEluZGV4OiBudW1iZXI7XG59PiB7XG4gIGFzc2VydE5hdGl2ZVJ1bkFkbWlzc2lvbigpO1xuXG4gIGxldCByZXF1ZXN0TG9nSWQ6IG51bWJlcjtcbiAgbGV0IHN0ZXBJbmRleCA9IDA7XG5cbiAgLy8gcmVxdWVzdExvZ0lkIOqwgCDsnojsnYQg65WM66eMIOq4sOyhtCBydW4g7Jew7J6lLiB0aHJlYWRDb29yZCDrp4wg7J6I64qUIGNvbnYg64qUIOyDiCBydW4g7Jy866GcIOyLnOyekS5cbiAgLy8gY29udGludWF0aW9uIOydgCBjcmVhdGVSdW4g7J2EIOqxtOuEiOubsOuvgOuhnCBydW4g7J2YIHRvb2xzIOuKlCDssqsg7Iqk7YWdIOyepeywqeu2hOycvOuhnCDqs6DsoJXrkJzri6Qg4oCUXG4gIC8vIEFJIFNESyBwcmVwYXJlU3RlcC9hY3RpdmVUb29scyDroZwg7Iqk7YWd66eI64ukIO2ItOyFi+ydtCDrsJTrgIzslrTrj4Qg66Gc6re47JeQ64qUIOuwmOyYgeuQmOyngCDslYrripTri6QuXG4gIGlmIChhcmdzLnJ1bkNvbnRleHQ/LnJlcXVlc3RMb2dJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVxdWVzdExvZ0lkID0gYXJncy5ydW5Db250ZXh0LnJlcXVlc3RMb2dJZDtcbiAgICAvLyBjbGVhbnVw6rO8IOqwmeydgCBEQiBhZHZpc29yeSBsb2Nr7J2EIOyeoeqzoCB0b29sIOqysOqzvCDrsJjsmIEgKyDri6TsnYwgc3RlcCDsmIjslb3snYQg7ZWcXG4gICAgLy8gdHJhbnNhY3Rpb27sl5DshJwg7LKY66as7ZWc64ukLiDsl6zrn6wgcWdyaWQg7ZSE66Gc7IS47IqkIOyCrOydtOyXkOyEnOuPhCBzdGFsZSBleHBpcnnqsIBcbiAgICAvLyDrj4TssKkg7KSR7J24IGZvbGxvdy11cOydhCBlcnJvcuuhnCDrja7slrTsk7Dsp4Ag66q77ZWc64ukLlxuICAgIHN0ZXBJbmRleCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jb250aW51ZVRvb2xSdW4ocmVxdWVzdExvZ0lkLCBhcmdzLnRvb2xSZXN1bHRzID8/IFtdKTtcbiAgICBhd2FpdCBjbGVhbnVwU3RhbGVSdW5zKCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgY2xlYW51cFN0YWxlUnVucygpO1xuICAgIHJlcXVlc3RMb2dJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jcmVhdGVSdW4oe1xuICAgICAgdXNlcl9wcm9tcHQ6IGFyZ3MucHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogYXJncy5zeXN0ZW0sXG4gICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogYXJncy5tb2RlbCxcbiAgICAgIGVmZm9ydDogYXJncy5lZmZvcnQsXG4gICAgICBwcm9qZWN0X25hbWU6IGFyZ3MucHJvamVjdE5hbWUsXG4gICAgICBoaXN0b3J5OiBmaWx0ZXJIaXN0b3J5Rm9yU3RvcmFnZShhcmdzLmhpc3RvcnkpLFxuICAgICAgdG9vbHM6IGFyZ3MudG9vbHM/Lmxlbmd0aCA/IGFyZ3MudG9vbHMgOiB1bmRlZmluZWQsXG4gICAgICBpc19pbWFnZV9nZW5lcmF0aW9uOiBhcmdzLmltYWdlR2VuZXJhdGlvbixcbiAgICAgIGpzb25fc2NoZW1hOiBhcmdzLmpzb25TY2hlbWEgPz8gbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERCIOykgOu5hCDspJHsl5Ag7J6s7Iuc7J6R7J20IOyLnOyekeuQkOuLpOuptCBwcm92aWRlciDsi6TtlonsnLzroZwg64SY7Ja06rCA7KeAIOyViuuKlOuLpC5cbiAgLy8g7J20IOyalOyyreydgCDsnqzsi5zsnpEgc25hcHNob3Tsl5Ag7JeG7JeI7Jy866+A66GcIOuwqeq4iCDspIDruYTtlZwgcnVu7J2EIOyngeygkSDrp4jqsJDtlZzri6QuXG4gIGlmIChpc1Jlc3RhcnRQZW5kaW5nKCkpIHtcbiAgICBhd2FpdCBmaW5pc2hUZXJtaW5hbFJ1bihyZXF1ZXN0TG9nSWQsIFwiZXJyb3JcIiwgXCJzZXJ2ZXIgcmVzdGFydGVkXCIpO1xuICAgIHRocm93IHJlc3RhcnRVbmF2YWlsYWJsZSgpO1xuICB9XG5cbiAgcmVnaXN0ZXJOYXRpdmVSdW4ocmVxdWVzdExvZ0lkKTtcbiAgcmV0dXJuIHsgcmVxdWVzdExvZ0lkLCBzdGVwSW5kZXggfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFmdGVyUXVlcnkoXG4gIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICBzdGVwSW5kZXg6IG51bWJlcixcbiAgYXJnczogUXVlcnlJbnB1dCxcbiAgcmVzdWx0OiBRdWVyeU91dHB1dCxcbik6IFByb21pc2U8UnVuTGlmZWN5Y2xlUmVzdWx0PiB7XG4gIGlmIChpbnRlcnJ1cHRlZE5hdGl2ZVJ1bklkcy5oYXMocmVxdWVzdExvZ0lkKSkgcmV0dXJuIHt9O1xuXG4gIHJldHVybiB0cmFja05hdGl2ZUZpbmFsaXplcihyZXF1ZXN0TG9nSWQsIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gcHJvdmlkZXLqsIAgY2Fub25pY2FsIG1vZGVs7J2EIOuPjOugpOykmOuPhCDsmpTssq0gcm91dGUg7J6Q7LK0KFsxbV0g65OxKeuKlCDrs7TsobTtlZzri6QuXG4gICAgICBjb25zdCByZXF1ZXN0ZWRNb2RlbE5hbWUgPSB3aXRoUHJvdmlkZXJQcmVmaXgoXG4gICAgICAgIGFyZ3MubW9kZWwsXG4gICAgICAgIGFyZ3MubW9kZWwgPz8gcmVzdWx0LnJlcXVlc3RlZE1vZGVsID8/IHJlc3VsdC5tb2RlbCxcbiAgICAgICk7XG4gICAgICBjb25zdCBzZXJ2ZWRNb2RlbE5hbWUgPSB3aXRoUHJvdmlkZXJQcmVmaXgoYXJncy5tb2RlbCwgcmVzdWx0Lm1vZGVsKTtcblxuICAgICAgLy8gZ2VuZXJhdGUgc3RlcCDquLDroZ1cbiAgICAgIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hcHBlbmRTdGVwKHJlcXVlc3RMb2dJZCwge1xuICAgICAgICBzdGVwX2luZGV4OiBzdGVwSW5kZXgsXG4gICAgICAgIHR5cGU6IFwiZ2VuZXJhdGVcIixcbiAgICAgICAgbW9kZWxfbmFtZTogc2VydmVkTW9kZWxOYW1lLFxuICAgICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogcmVxdWVzdGVkTW9kZWxOYW1lLFxuICAgICAgICBmYWxsYmFja19jb3VudDogcmVzdWx0Lm1vZGVsRmFsbGJhY2tzPy5sZW5ndGggPz8gMCxcbiAgICAgICAgaW5wdXRfdG9rZW5zOiByZXN1bHQudXNhZ2UuaW5wdXRfdG9rZW5zLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiByZXN1bHQudXNhZ2Uub3V0cHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2VucyxcbiAgICAgICAgY29zdF91c2Q6IE1hdGgucm91bmQocmVzdWx0LmNvc3RVc2QgKiAxXzAwMF8wMDApLFxuICAgICAgICBjb3N0X3NvdXJjZTogcmVzdWx0LmNvc3RTb3VyY2UsXG4gICAgICAgIGR1cmF0aW9uX21zOiByZXN1bHQuZHVyYXRpb25NcyxcbiAgICAgICAgdHRmdF9tczogcmVzdWx0LnR0ZnRNcyxcbiAgICAgICAgZmluaXNoX3JlYXNvbjogcmVzdWx0LmZpbmlzaFJlYXNvbixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpbWFnZVBhcnRzID0gZ2V0SW1hZ2VQYXJ0cyhyZXN1bHQpO1xuICAgICAgY29uc3QgaW1hZ2VDb3N0TWljcm9Vc2QgPSBlc3RpbWF0ZUltYWdlR2VuZXJhdGlvbkNvc3RNaWNyb1VzZChcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICBhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBzdGVwIG9mIGJ1aWxkSW1hZ2VHZW5lcmF0aW9uVG9vbFN0ZXBzKGFyZ3MsIGltYWdlUGFydHMsIHN0ZXBJbmRleCkpIHtcbiAgICAgICAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkLCBzdGVwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5maW5pc2hSZWFzb24gPT09IFwidG9vbC1jYWxsc1wiKSB7XG4gICAgICAgIC8vIHRvb2wtY2FsbCBzdGVw7J2EIOymieyLnCDquLDroZ3tlZjqs6AsIOuLpOydjCBmb2xsb3ctdXDsnbQg6rCZ7J2AIHJvd+yXkCDqsrDqs7zrpbwg7LGE7Jq064ukLlxuICAgICAgICBjb25zdCB0b29sQ2FsbHMgPSByZXN1bHQuY29udGVudC5maWx0ZXIoKGMpID0+IGMudHlwZSA9PT0gXCJ0b29sLWNhbGxcIik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9vbENhbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdGMgPSB0b29sQ2FsbHNbaV0hO1xuICAgICAgICAgIGlmICh0Yy50eXBlICE9PSBcInRvb2wtY2FsbFwiKSBjb250aW51ZTtcbiAgICAgICAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQsIHtcbiAgICAgICAgICAgIHN0ZXBfaW5kZXg6IHN0ZXBJbmRleCxcbiAgICAgICAgICAgIHR5cGU6IFwidG9vbF9jYWxsXCIsXG4gICAgICAgICAgICB0b29sX2NhbGxfaW5kZXg6IGltYWdlUGFydHMubGVuZ3RoICsgaSxcbiAgICAgICAgICAgIHRvb2xfY2FsbF9pZDogdGMudG9vbENhbGxJZCxcbiAgICAgICAgICAgIHRvb2xfbmFtZTogdGMudG9vbE5hbWUsXG4gICAgICAgICAgICB0b29sX2FyZ3M6IHRjLmlucHV0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgcnVuQ29udGV4dDogeyByZXF1ZXN0TG9nSWQgfSB9O1xuICAgICAgfVxuXG4gICAgICAvLyBmaW5pc2hSZWFzb24gPT09IFwic3RvcFwiIOKGkiBydW4g7KKF66OMICjsoITssrQgc3RlcCB1c2FnZSDtlansgrApXG4gICAgICBjb25zdCBhZ2cgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYWdncmVnYXRlU3RlcFVzYWdlKHJlcXVlc3RMb2dJZCk7XG4gICAgICBjb25zdCByZXNwb25zZVRleHQgPSBmb3JtYXRSZXNwb25zZUZvckxvZyhyZXN1bHQpO1xuICAgICAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmZpbmlzaFJ1bihyZXF1ZXN0TG9nSWQsIHtcbiAgICAgICAgc3RhdHVzOiBcInN1Y2NlZWRlZFwiLFxuICAgICAgICByZXNwb25zZTogcmVzcG9uc2VUZXh0LFxuICAgICAgICAvLyBzdHJ1Y3R1cmVkIOyalOyyreunjCDtjJDsoJXtlZzri6QuIGRldGkg67Cw7LmY7J2YIGJyb2tlbiBKU09OIOulmOulvCDrqqnroZ3sl5DshJwg67CU66GcXG4gICAgICAgIC8vIOq1rOuzhO2VmOq4sCDsnITtlZwg6riw66Gd7J2066mwLCDruYRzdHJ1Y3R1cmVkIOyalOyyreydgCBudWxsIOuhnCDrgqjripTri6QuXG4gICAgICAgIHJlc3BvbnNlX2pzb25fb2s6IGFyZ3MuanNvblNjaGVtYSA/IGlzUGFyc2VhYmxlSnNvbihyZXNwb25zZVRleHQpIDogbnVsbCxcbiAgICAgICAgdG9rZW5fbmFtZTogcmVzdWx0LnRva2VuTmFtZSxcbiAgICAgICAgaW5wdXRfdG9rZW5zOiBhZ2cuaW5wdXRfdG9rZW5zLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiBhZ2cub3V0cHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IGFnZy5jYWNoZV9yZWFkX3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBhZ2cuY2FjaGVfY3JlYXRpb25fdG9rZW5zLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IGFnZy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogYWdnLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyxcbiAgICAgICAgZHVyYXRpb25fbXM6IGFnZy5kdXJhdGlvbl9tcyxcbiAgICAgICAgLy8gbXVsdGktc3RlcCBydW4g67aA66qo7J2YIOuqqOuNuOydgCDstZzsooUgdHVybuydhCDshJzruZntlZwg66qo64247J2064ukLlxuICAgICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogcmVxdWVzdGVkTW9kZWxOYW1lLFxuICAgICAgICBtb2RlbF9uYW1lOiBzZXJ2ZWRNb2RlbE5hbWUsXG4gICAgICAgIGZhbGxiYWNrX2NvdW50OiBhZ2cuZmFsbGJhY2tfY291bnQsXG4gICAgICAgIGNvc3RfdXNkOiBhZ2cuY29zdF91c2QsXG4gICAgICAgIGNvc3Rfc291cmNlOiBhZ2cuY29zdF9zb3VyY2UsXG4gICAgICAgIGltYWdlX2Nvc3RfdXNkOiBpbWFnZUNvc3RNaWNyb1VzZCxcbiAgICAgICAgaW1hZ2VfY29zdF9tZXRob2Q6XG4gICAgICAgICAgaW1hZ2VDb3N0TWljcm9Vc2QgIT09IG51bGxcbiAgICAgICAgICAgID8gaW1hZ2VHZW5lcmF0aW9uQ29zdE1ldGhvZChhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMsIHJlc3VsdClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgaGlzdG9yeTogZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UoYXJncy5oaXN0b3J5KSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge307XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlbGVhc2VOYXRpdmVSdW4ocmVxdWVzdExvZ0lkKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluaXNoUnVuV2l0aEVycm9yKFxuICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4gIGFyZ3M/OiBRdWVyeUlucHV0LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpbnRlcnJ1cHRlZE5hdGl2ZVJ1bklkcy5oYXMocmVxdWVzdExvZ0lkKSkgcmV0dXJuO1xuICByZXR1cm4gdHJhY2tOYXRpdmVGaW5hbGl6ZXIocmVxdWVzdExvZ0lkLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpbmlzaFRlcm1pbmFsUnVuKHJlcXVlc3RMb2dJZCwgXCJlcnJvclwiLCBlcnJvck1lc3NhZ2UsIGFyZ3MpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZWxlYXNlTmF0aXZlUnVuKHJlcXVlc3RMb2dJZCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaFJ1bkFib3J0ZWQocmVxdWVzdExvZ0lkOiBudW1iZXIsIGFyZ3M/OiBRdWVyeUlucHV0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpbnRlcnJ1cHRlZE5hdGl2ZVJ1bklkcy5oYXMocmVxdWVzdExvZ0lkKSkgcmV0dXJuO1xuICByZXR1cm4gdHJhY2tOYXRpdmVGaW5hbGl6ZXIocmVxdWVzdExvZ0lkLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpbmlzaFRlcm1pbmFsUnVuKHJlcXVlc3RMb2dJZCwgXCJhYm9ydGVkXCIsIFwiY2xpZW50IGRpc2Nvbm5lY3RlZFwiLCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVsZWFzZU5hdGl2ZVJ1bihyZXF1ZXN0TG9nSWQpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKiDtmITsnqwg7J20IO2UhOuhnOyEuOyKpOqwgCBwcm92aWRlcuulvCDsi6Ttlokg7KSR7J24IG5hdGl2ZSBydW7rp4wg7J6s7Iuc7J6RIOyYpOulmOuhnCDrp4jqsJDtlZzri6QuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluaXNoQWN0aXZlTmF0aXZlUnVuc0ZvclJlc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlcXVlc3RMb2dJZHMgPSBbLi4uYWN0aXZlTmF0aXZlUnVuUmVmcy5rZXlzKCldO1xuICBmb3IgKGNvbnN0IHJlcXVlc3RMb2dJZCBvZiByZXF1ZXN0TG9nSWRzKSB7XG4gICAgaW50ZXJydXB0ZWROYXRpdmVSdW5JZHMuYWRkKHJlcXVlc3RMb2dJZCk7XG4gICAgYWN0aXZlTmF0aXZlUnVuUmVmcy5kZWxldGUocmVxdWVzdExvZ0lkKTtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHJlcXVlc3RMb2dJZHMubWFwKGFzeW5jIChyZXF1ZXN0TG9nSWQpID0+IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGFjdGl2ZU5hdGl2ZUZpbmFsaXplcnMuZ2V0KHJlcXVlc3RMb2dJZCkgPz8gW10pO1xuICAgICAgYXdhaXQgZmluaXNoVGVybWluYWxSdW4ocmVxdWVzdExvZ0lkLCBcImVycm9yXCIsIFwic2VydmVyIHJlc3RhcnRlZFwiKTtcbiAgICB9KSxcbiAgKTtcbn1cblxuLyoqIO2UhOuhnOyEuOyKpCDsoITsl60gcmVnaXN0cnnrpbwg6rKp66as7ZW07JW8IO2VmOuKlCDri6jsnIQg7YWM7Iqk7Yq4IOyghOyaqS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldE5hdGl2ZVJ1blJlZ2lzdHJ5Rm9yVGVzdHMoKTogdm9pZCB7XG4gIGFjdGl2ZU5hdGl2ZVJ1blJlZnMuY2xlYXIoKTtcbiAgaW50ZXJydXB0ZWROYXRpdmVSdW5JZHMuY2xlYXIoKTtcbiAgYWN0aXZlTmF0aXZlRmluYWxpemVycy5jbGVhcigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5pc2hUZXJtaW5hbFJ1bihcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIHN0YXR1czogXCJlcnJvclwiIHwgXCJhYm9ydGVkXCIsXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICBhcmdzPzogUXVlcnlJbnB1dCxcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGxldCBhZ2dyZWdhdGU6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgUmVxdWVzdExvZ01vZGVsLmFnZ3JlZ2F0ZVN0ZXBVc2FnZT4+IHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBhZ2dyZWdhdGUgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYWdncmVnYXRlU3RlcFVzYWdlKHJlcXVlc3RMb2dJZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKGBhZ2dyZWdhdGVTdGVwVXNhZ2UgZmFpbGVkIHdoaWxlIGZpbmlzaGluZyAke3N0YXR1c306ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmZpbmlzaFJ1bihyZXF1ZXN0TG9nSWQsIHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgIGhpc3Rvcnk6IGFyZ3MgPyBmaWx0ZXJIaXN0b3J5Rm9yU3RvcmFnZShhcmdzLmhpc3RvcnkpIDogdW5kZWZpbmVkLFxuICAgICAgLi4uKGFnZ3JlZ2F0ZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGlucHV0X3Rva2VuczogYWdncmVnYXRlLmlucHV0X3Rva2VucyxcbiAgICAgICAgICAgIG91dHB1dF90b2tlbnM6IGFnZ3JlZ2F0ZS5vdXRwdXRfdG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9yZWFkX3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uX3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyxcbiAgICAgICAgICAgIGR1cmF0aW9uX21zOiBhZ2dyZWdhdGUuZHVyYXRpb25fbXMsXG4gICAgICAgICAgICBmYWxsYmFja19jb3VudDogYWdncmVnYXRlLmZhbGxiYWNrX2NvdW50LFxuICAgICAgICAgICAgY29zdF91c2Q6IGFnZ3JlZ2F0ZS5jb3N0X3VzZCxcbiAgICAgICAgICAgIGNvc3Rfc291cmNlOiBhZ2dyZWdhdGUuY29zdF9zb3VyY2UsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcihgZmluaXNoVGVybWluYWxSdW4oJHtzdGF0dXN9KSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYW51cFN0YWxlUnVucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHN0YWxlQ2xlYW51cEluRmxpZ2h0KSB7XG4gICAgYXdhaXQgc3RhbGVDbGVhbnVwSW5GbGlnaHQ7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgaWYgKG5vdyAtIGxhc3RTdGFsZUNsZWFudXBTdGFydGVkQXQgPCBTVEFMRV9DTEVBTlVQX0lOVEVSVkFMX01TKSByZXR1cm47XG4gIGxhc3RTdGFsZUNsZWFudXBTdGFydGVkQXQgPSBub3c7XG5cbiAgY29uc3QgY2xlYW51cCA9IHBlcmZvcm1TdGFsZVJ1bkNsZWFudXAoKTtcbiAgc3RhbGVDbGVhbnVwSW5GbGlnaHQgPSBjbGVhbnVwO1xuICB0cnkge1xuICAgIGF3YWl0IGNsZWFudXA7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHN0YWxlQ2xlYW51cEluRmxpZ2h0ID09PSBjbGVhbnVwKSBzdGFsZUNsZWFudXBJbkZsaWdodCA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwZXJmb3JtU3RhbGVSdW5DbGVhbnVwKCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IFwidG9vbC1jYWxsIHJ1bjogbm8gZm9sbG93LXVwIHdpdGhpbiAzMCBtaW51dGVzXCI7XG4gICAgY29uc3Qgc3RhbGVJZHMgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZXhwaXJlU3RhbGVUb29sV2FpdGluZ1J1bnMoXG4gICAgICBTVEFMRV9SVU5fVEhSRVNIT0xEX01TLFxuICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICk7XG4gICAgY29uc3QgY2xlYW5lZENvdW50ID0gc3RhbGVJZHMubGVuZ3RoO1xuICAgIGlmIChjbGVhbmVkQ291bnQgPiAwKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgY2xlYW5lZCB1cCAke2NsZWFuZWRDb3VudH0gc3RhbGUgcnVubmluZyByZXF1ZXN0IGxvZ3NgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoYHN0YWxlIGNsZWFudXAgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7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
@@ -10,6 +10,27 @@ const QgridTool = z.object({
10
10
  description: z.string().optional(),
11
11
  inputSchema: z.unknown()
12
12
  });
13
+ const ImageGenerationMetadata = z.object({
14
+ route: z.literal("codex-images"),
15
+ model: z.literal("gpt-image-2"),
16
+ background: z.string().optional(),
17
+ quality: z.string().optional(),
18
+ size: z.string().optional(),
19
+ usage: z.object({
20
+ input_tokens: z.number().nonnegative(),
21
+ output_tokens: z.number().nonnegative(),
22
+ total_tokens: z.number().nonnegative(),
23
+ input_tokens_details: z.object({
24
+ image_tokens: z.number().nonnegative(),
25
+ text_tokens: z.number().nonnegative(),
26
+ cached_tokens: z.number().nonnegative().optional()
27
+ }).optional(),
28
+ output_tokens_details: z.object({
29
+ image_tokens: z.number().nonnegative(),
30
+ text_tokens: z.number().nonnegative()
31
+ }).optional()
32
+ }).optional()
33
+ });
13
34
  const QgridContent = z.discriminatedUnion("type", [
14
35
  z.object({
15
36
  type: z.literal("text"),
@@ -24,7 +45,8 @@ const QgridContent = z.discriminatedUnion("type", [
24
45
  z.object({
25
46
  type: z.literal("image"),
26
47
  data: z.string(),
27
- revisedPrompt: z.string().nullish()
48
+ revisedPrompt: z.string().nullish(),
49
+ generation: ImageGenerationMetadata.optional()
28
50
  })
29
51
  ]);
30
52
  const FinishReason = z.enum(["stop", "tool-calls"]);
@@ -52,7 +74,12 @@ const ImageGenerationSize = z.enum([
52
74
  ]);
53
75
  const ImageGenerationOptions = z.object({
54
76
  quality: ImageGenerationQuality.optional(),
55
- size: ImageGenerationSize.optional()
77
+ size: ImageGenerationSize.optional(),
78
+ background: z.enum([
79
+ "auto",
80
+ "opaque",
81
+ "transparent"
82
+ ]).optional()
56
83
  });
57
84
  const QgridInputPart = z.discriminatedUnion("type", [z.object({
58
85
  type: z.literal("text"),
@@ -290,6 +317,6 @@ function maskToken(token) {
290
317
  return token.length > 4 ? `...${token.slice(-4)}` : token;
291
318
  }
292
319
  //#endregion
293
- export { AppendStepInput, CostSource, CreateRunInput, Effort, FinishReason, FinishRunInput, HealthResponse, ImageGenerationOptions, ImageGenerationQuality, ImageGenerationSize, MAX_QUERY_TIMEOUT_MS, ModelFallback, OAuthStartResult, ProcessError, ProviderStartupState, QgridContent, QgridInputPart, QgridRunContext, QgridThreadCoord, QgridTool, QgridToolResultInput, QueryInput, QueryOutput, QueryTimeoutMs, QuotaError, QuotaThresholdExceededError, ReasoningSummary, ServiceTier, StreamEvents, SubscriberStatus, TimeoutError, TokenStats, UsageResponse, Verbosity, maskToken };
320
+ export { AppendStepInput, CostSource, CreateRunInput, Effort, FinishReason, FinishRunInput, HealthResponse, ImageGenerationMetadata, ImageGenerationOptions, ImageGenerationQuality, ImageGenerationSize, MAX_QUERY_TIMEOUT_MS, ModelFallback, OAuthStartResult, ProcessError, ProviderStartupState, QgridContent, QgridInputPart, QgridRunContext, QgridThreadCoord, QgridTool, QgridToolResultInput, QueryInput, QueryOutput, QueryTimeoutMs, QuotaError, QuotaThresholdExceededError, ReasoningSummary, ServiceTier, StreamEvents, SubscriberStatus, TimeoutError, TokenStats, UsageResponse, Verbosity, maskToken };
294
321
 
295
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkQ29udGVudCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ0ZXh0XCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidG9vbC1jYWxsXCIpLFxuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgLy8gQ29kZXggaW1hZ2VfZ2VuZXJhdGlvbiByZXN1bHQgYmFzZTY0LiBxZ3JpZCDripQg7Y+s66e3L+2ZleyepeyekCDssYXsnoTsnYQg7KeA7KeAIOyViuuKlOuLpC5cbiAgICBkYXRhOiB6LnN0cmluZygpLFxuICAgIHJldmlzZWRQcm9tcHQ6IHouc3RyaW5nKCkubnVsbGlzaCgpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRDb250ZW50ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRDb250ZW50PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJlYXNvbiA9IHouZW51bShbXCJzdG9wXCIsIFwidG9vbC1jYWxsc1wiXSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSZWFzb24gPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSZWFzb24+O1xuXG5leHBvcnQgY29uc3QgVmVyYm9zaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFJlYXNvbmluZ1N1bW1hcnk+O1xuXG5leHBvcnQgY29uc3QgU2VydmljZVRpZXIgPSB6LmVudW0oW1wiZmFzdFwiLCBcImZsZXhcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmljZVRpZXIgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aWNlVGllcj47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25RdWFsaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouZW51bShbXCIxMDI0eDEwMjRcIiwgXCIxMDI0eDE1MzZcIiwgXCIxNTM2eDEwMjRcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblNpemU+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgcXVhbGl0eTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eS5vcHRpb25hbCgpLFxuICBzaXplOiBJbWFnZUdlbmVyYXRpb25TaXplLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25PcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkSW5wdXRQYXJ0ID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRleHRcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICB0ZXh0X2VsZW1lbnRzOiB6LmFycmF5KHoubmV2ZXIoKSkuZGVmYXVsdChbXSksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRJbnB1dFBhcnQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZElucHV0UGFydD47XG5cbmV4cG9ydCBjb25zdCBNQVhfUVVFUllfVElNRU9VVF9NUyA9IDMwICogNjBfMDAwO1xuZXhwb3J0IGNvbnN0IFF1ZXJ5VGltZW91dE1zID0gei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpLm1heChNQVhfUVVFUllfVElNRU9VVF9NUyk7XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIENvbnRleHQgKFNESyDihpQgU2VydmVyIGNvbnRyYWN0KSDilIDilIDilIBcblxuLy8gT3BlbkFJIGNhY2hlIGFmZmluaXR5IOyijO2RnCjqtawgY29kZXggdGhyZWFkIOyijO2RnCkuIHByb21wdF9jYWNoZV9rZXkg66W8IOqzoOygle2VtFxuLy8gT3BlbkFJIHByb21wdCBjYWNoaW5nIOydhCDsgrTrpqzquLAg7JyE7ZWcIO2VuOuTpC4g7ISc67KE6rCAIOuwnOq4ie2VmOqzoCDtgbTrnbzqsIAg64uk7J2MIOyalOyyreyXkCDqt7jrjIDroZwg7ZqM7Iah7ZWc64ukLlxuLy8g7ZW465OkIOuvuOyghOyGoSDsi5wg6riw7KG0IFwi66ekIHR1cm4g7IOIIHRocmVhZCArIGhpc3RvcnkgaW5qZWN0XCIg64+Z7J6R7Jy866GcIO2PtOuwsShRZ3JpZFJ1bkNvbnRleHQg7LC47KGwKS5cbmV4cG9ydCBjb25zdCBRZ3JpZFRocmVhZENvb3JkID0gei5vYmplY3Qoe1xuICB3b3JrZXJJZDogei5udW1iZXIoKSwgLy8g6rOg7KCVIOudvOyasO2MhSAodGhyZWFkIOuKlCB3b3JrZXIg7ZSE66Gc7IS47IqkIOuplOuqqOumrOyXkOunjCDsobTsnqwpXG4gIHRocmVhZElkOiB6LnN0cmluZygpLCAvLyBvcGFxdWUgY2FjaGUgYWZmaW5pdHkga2V5ID0gcHJvbXB0X2NhY2hlX2tleVxuICBlcG9jaDogei5udW1iZXIoKSwgLy8gd29ya2VyIHNwYXduIOy5tOyatO2EsC4gcmVzdGFydCDroZwgdGhyZWFkIOymneuwnCDqsJDsp4BcbiAgc3lzdGVtSGFzaDogei5zdHJpbmcoKSwgLy8gc3lzdGVtX3Byb21wdCDtlbTsi5wuIOuLpOuluCDrjIDtmZQg7Jik7KCR7IaNIOuwqeyngFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRocmVhZENvb3JkID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUaHJlYWRDb29yZD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFJ1bkNvbnRleHQgPSB6Lm9iamVjdCh7XG4gIC8vIHRvb2wtY2FsbCBydW7snYQg6rOE7IaN7ZWgIOuVjOunjCDrsJzquIkuIOydvOuwmCDrjIDtmZTripQgdGhyZWFkQ29vcmQg66eMIOyZleuztS5cbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRocmVhZENvb3JkOiBRZ3JpZFRocmVhZENvb3JkLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkUnVuQ29udGV4dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkUnVuQ29udGV4dD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgdG9vbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0OiB6LnN0cmluZygpLFxuICBpc0Vycm9yOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVG9vbFJlc3VsdElucHV0PjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5SW5wdXQgPSB6Lmxvb3NlT2JqZWN0KHtcbiAgc3lzdGVtOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb21wdDogei5zdHJpbmcoKSxcbiAgaW5wdXQ6IHouYXJyYXkoUWdyaWRJbnB1dFBhcnQpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRpbWVvdXQ6IFF1ZXJ5VGltZW91dE1zLm9wdGlvbmFsKCksXG4gIGpzb25TY2hlbWE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbHM6IHouYXJyYXkoUWdyaWRUb29sKS5vcHRpb25hbCgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmVyYm9zaXR5OiBWZXJib3NpdHkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nU3VtbWFyeTogUmVhc29uaW5nU3VtbWFyeS5vcHRpb25hbCgpLFxuICBzZXJ2aWNlVGllcjogU2VydmljZVRpZXIub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvLyByYXcvZGFzaGJvYXJk7JmAIOqzteqwnCBBSSBTREsgcHJvdmlkZXJPcHRpb25zLnFncmlkLnRva2VuTmFtZeydtCDqs7XsnKDtlZjripQg7KeA7KCVIOyjvOyGjC5cbiAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8vIFNESy1kZXJpdmVkIG9wYXF1ZSBhZmZpbml0eS4gSXQgaXMgaW50ZW50aW9uYWxseSBkaXN0aW5jdCBmcm9tIHRoZSBjYWxsZXIncyBzZXNzaW9uS2V5LlxuICBjYWNoZUFmZmluaXR5S2V5OiB6XG4gICAgLnN0cmluZygpXG4gICAgLnJlZ2V4KC9eWzAtOWEtZl17NjR9JC8pXG4gICAgLm9wdGlvbmFsKCksXG4gIC8vIOyDneuete2VmOuptCDroZzquYXtlZzri6QuIGZhbHNl64qUIHJlcXVlc3QgbG9nIOyTsOq4sOunjCDrgYTqs6AgZGlzcGF0Y2gvdGhyZWFk64qUIOycoOyngO2VnOuLpC5cbiAgbG9nZ2VyOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbiAgdG9vbFJlc3VsdHM6IHouYXJyYXkoUWdyaWRUb29sUmVzdWx0SW5wdXQpLm9wdGlvbmFsKCksXG4gIC8vIE9wZW5BSSBSZXNwb25zZXMgaW1hZ2VfZ2VuZXJhdGlvbiB0b29sIOydhCDsvKDri6QoT3BlbkFJIOqyveuhnCDsoITsmqksIG9wdC1pbiwgbm9uLXN0cmVhbSkuXG4gIGltYWdlR2VuZXJhdGlvbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgLy8gcWdyaWQg6rCA6rKpIOy2lOyglSDrsI8gQ29kZXgg7J2066+47KeAIOyalOyyrSDtnoztirguIOydtOuvuOyngCDrqqjrjbjsnYAgZ3B0LWltYWdlLTIg66GcIOqzoOyglSDqsIDsoJXtlZzri6QuXG4gIGltYWdlR2VuZXJhdGlvbk9wdGlvbnM6IEltYWdlR2VuZXJhdGlvbk9wdGlvbnMub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFF1ZXJ5SW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgTW9kZWxGYWxsYmFjayA9IHoub2JqZWN0KHtcbiAgdHJpZ2dlcjogei5saXRlcmFsKFwicmVmdXNhbFwiKSxcbiAgZnJvbU1vZGVsOiB6LnN0cmluZygpLFxuICB0b01vZGVsOiB6LnN0cmluZygpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleHBsYW5hdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBNb2RlbEZhbGxiYWNrID0gei5pbmZlcjx0eXBlb2YgTW9kZWxGYWxsYmFjaz47XG5cbmV4cG9ydCBjb25zdCBDb3N0U291cmNlID0gei5lbnVtKFtcInByb3ZpZGVyXCIsIFwicHJpY2luZ190YWJsZVwiLCBcIm1peGVkXCJdKTtcbmV4cG9ydCB0eXBlIENvc3RTb3VyY2UgPSB6LmluZmVyPHR5cGVvZiBDb3N0U291cmNlPjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5T3V0cHV0ID0gei5vYmplY3Qoe1xuICB0ZXh0OiB6LnN0cmluZygpLFxuICBjb250ZW50OiB6LmFycmF5KFFncmlkQ29udGVudCksXG4gIGZpbmlzaFJlYXNvbjogRmluaXNoUmVhc29uLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxGYWxsYmFja3M6IHouYXJyYXkoTW9kZWxGYWxsYmFjaykub3B0aW9uYWwoKSxcbiAgdXNhZ2U6IHoub2JqZWN0KHtcbiAgICBpbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICByZWFzb25pbmdfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBjYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBjYWNoZV9yZWFkX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgfSksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCksXG4gIHR0ZnRNczogei5udW1iZXIoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZSxcbiAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFF1ZXJ5T3V0cHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlPdXRwdXQ+O1xuXG4vLyDilIDilIDilIAgU3RyZWFtIEV2ZW50cyDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFN0cmVhbUV2ZW50cyA9IHoub2JqZWN0KHtcbiAgZGVsdGE6IHoub2JqZWN0KHsgdGV4dDogei5zdHJpbmcoKSB9KSxcbiAgdG9vbENhbGw6IHoub2JqZWN0KHtcbiAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgIHRvb2xOYW1lOiB6LnN0cmluZygpLFxuICAgIGlucHV0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgZG9uZTogei5vYmplY3Qoe1xuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gICAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICByZXF1ZXN0ZWRNb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG1vZGVsRmFsbGJhY2tzOiB6LmFycmF5KE1vZGVsRmFsbGJhY2spLm9wdGlvbmFsKCksXG4gICAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24sXG4gICAgdXNhZ2U6IHoub2JqZWN0KHtcbiAgICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICByZWFzb25pbmdfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgY2FjaGVfY3JlYXRpb25fNW1faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl8xaF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIH0pLFxuICAgIGR1cmF0aW9uTXM6IHoubnVtYmVyKCksXG4gICAgdHRmdE1zOiB6Lm51bWJlcigpLFxuICAgIGNvc3RVc2Q6IHoubnVtYmVyKCksXG4gICAgY29zdFNvdXJjZTogQ29zdFNvdXJjZSxcbiAgICBjb250ZW50OiB6LmFycmF5KFFncmlkQ29udGVudCksXG4gICAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG4gIH0pLFxuICBlcnJvcjogei5vYmplY3QoeyBtZXNzYWdlOiB6LnN0cmluZygpIH0pLFxufSk7XG5leHBvcnQgdHlwZSBTdHJlYW1FdmVudHMgPSB6LmluZmVyPHR5cGVvZiBTdHJlYW1FdmVudHM+O1xuXG4vLyDilIDilIDilIAgUnVuIExpZmVjeWNsZSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IENyZWF0ZVJ1bklucHV0ID0gei5vYmplY3Qoe1xuICB1c2VyUHJvbXB0OiB6LnN0cmluZygpLFxuICBzeXN0ZW1Qcm9tcHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlzU3RydWN0dXJlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAganNvblNjaGVtYTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIENyZWF0ZVJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgQ3JlYXRlUnVuSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgQXBwZW5kU3RlcElucHV0ID0gei5vYmplY3Qoe1xuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCksXG4gIHN0ZXBJbmRleDogei5udW1iZXIoKSxcbiAgdHlwZTogei5lbnVtKFtcImdlbmVyYXRlXCIsIFwidG9vbF9jYWxsXCJdKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlcXVlc3RlZE1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmYWxsYmFja0NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGlucHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIG91dHB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZVJlYWRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY2FjaGVDcmVhdGlvblRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uNW1Ub2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY2FjaGVDcmVhdGlvbjFoVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZS5vcHRpb25hbCgpLFxuICBkdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHR0ZnRNczogei5udW1iZXIoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGZpbmlzaFJlYXNvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZWFzb25pbmdUZXh0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b29sQ2FsbEluZGV4OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbEFyZ3M6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbFJlc3VsdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sRHVyYXRpb25Nczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBBcHBlbmRTdGVwSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBBcHBlbmRTdGVwSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgRmluaXNoUnVuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKSxcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2VlZGVkXCIsIFwiZXJyb3JcIiwgXCJhYm9ydGVkXCJdKSxcbiAgcmVzcG9uc2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXF1ZXN0ZWRNb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZmFsbGJhY2tDb3VudDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbElucHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsT3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVSZWFkVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvblRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlQ3JlYXRpb241bVRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlQ3JlYXRpb24xaFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RTb3VyY2U6IENvc3RTb3VyY2Uub3B0aW9uYWwoKSxcbiAgdG90YWxEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXJyb3JNZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlc3BvbnNlSnNvbk9rOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSdW5JbnB1dCA9IHouaW5mZXI8dHlwZW9mIEZpbmlzaFJ1bklucHV0PjtcblxuLy8g4pSA4pSA4pSAIFRva2VuIE1hbmFnZW1lbnQg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBUb2tlblN0YXRzID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHJlcXVlc3RzOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBUb2tlblN0YXRzID0gei5pbmZlcjx0eXBlb2YgVG9rZW5TdGF0cz47XG5cbi8vIOKUgOKUgOKUgCBPQXV0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IE9BdXRoU3RhcnRSZXN1bHQgPSB6Lm9iamVjdCh7XG4gIGF1dGhVcmw6IHouc3RyaW5nKCksXG4gIC8vIHJlZGlyZWN0OiDruIzrnbzsmrDsoIAg7J6Q64+ZIOuzteq3gCjro6jtlITrsLEg7KCR7IaNKS4gY29kZTog7L2Y7IaUIOy9nOuwsSArIOy9lOuTnCDrtpnsl6zrhKPquLAo7JuQ6rKpIOygkeyGjSkuXG4gIC8vIE9wZW5BSSDsm5Dqsqkg6rK966Gc64qUIOuTseuhneuQnCBsb29wYmFjayBjYWxsYmFjayBVUkwg7KCE7LK066W8IOu2meyXrOuEo+uKlCBjb2RlIOuqqOuTnOulvCDsk7Tri6QuXG4gIG1vZGU6IHouZW51bShbXCJyZWRpcmVjdFwiLCBcImNvZGVcIl0pLFxufSk7XG5leHBvcnQgdHlwZSBPQXV0aFN0YXJ0UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgT0F1dGhTdGFydFJlc3VsdD47XG5cbmNvbnN0IFJhdGVXaW5kb3cgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHV0aWxpemF0aW9uOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgcmVzZXRzQXQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICB3aW5kb3dEdXJhdGlvbk1pbnM6IHoubnVtYmVyKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICB9KVxuICAubnVsbGFibGUoKTtcblxuZXhwb3J0IGNvbnN0IFVzYWdlUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZpdmVIb3VyOiBSYXRlV2luZG93Lm9wdGlvbmFsKCksXG4gIHNldmVuRGF5OiBSYXRlV2luZG93Lm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFVzYWdlUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBVc2FnZVJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEhlYWx0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFN1YnNjcmliZXJTdGF0dXMgPSB6Lm9iamVjdCh7XG4gIGNvbm5lY3RlZDogei5ib29sZWFuKCksXG4gIGNvbm5lY3RlZEF0OiB6LmRhdGUoKS5udWxsYWJsZSgpLFxuICBsYXN0UmVjb25jaWxlQXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG4gIGF0dGVtcHQ6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIFN1YnNjcmliZXJTdGF0dXMgPSB6LmluZmVyPHR5cGVvZiBTdWJzY3JpYmVyU3RhdHVzPjtcblxuZXhwb3J0IGNvbnN0IFByb3ZpZGVyU3RhcnR1cFN0YXRlID0gei5lbnVtKFtcInN0YXJ0aW5nXCIsIFwicmVhZHlcIiwgXCJmYWlsZWRcIl0pO1xuZXhwb3J0IHR5cGUgUHJvdmlkZXJTdGFydHVwU3RhdGUgPSB6LmluZmVyPHR5cGVvZiBQcm92aWRlclN0YXJ0dXBTdGF0ZT47XG5cbmV4cG9ydCBjb25zdCBIZWFsdGhSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LnN0cmluZygpLFxuICBhY3RpdmVUb2tlbnM6IHoubnVtYmVyKCksXG4gIHN1YnNjcmliZXI6IFN1YnNjcmliZXJTdGF0dXMubnVsbGFibGUoKSxcbiAgLy8gSFRUUCDrpqzsiqTri53snYAgZGlzcGF0Y2hlciDquLDrj5nrs7Tri6Qg66i87KCAIOyXtOumsOuLpC4gMjAwIOydkeuLteunjOycvOuhnOuKlCDsmpTssq3snYQg7LKY66as7ZWgIOyImFxuICAvLyDsnojripTsp4Ag7JWMIOyImCDsl4bslrQgcHJvdmlkZXIg67OEIOykgOu5hCDsg4Htg5zrpbwg7ZWo6ruYIOuFuOy2nO2VnOuLpC5cbiAgcmVhZHk6IHouYm9vbGVhbigpLFxuICBwcm92aWRlcnM6IHoub2JqZWN0KHtcbiAgICBvcGVuYWk6IFByb3ZpZGVyU3RhcnR1cFN0YXRlLFxuICAgIGFudGhyb3BpYzogUHJvdmlkZXJTdGFydHVwU3RhdGUsXG4gIH0pLFxufSk7XG5leHBvcnQgdHlwZSBIZWFsdGhSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEhlYWx0aFJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEVycm9ycyDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIFF1b3RhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlFVT1RBX0VYSEFVU1RFRFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFF1b3RhVGhyZXNob2xkRXhjZWVkZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUVVPVEFfVEhSRVNIT0xEX0VYQ0VFREVEXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJUSU1FT1VUXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgUHJvY2Vzc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJQUk9DRVNTX0VSUk9SXCIgYXMgY29uc3Q7XG59XG5cbi8vIOKUgOKUgOKUgCBVdGlscyDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIG1hc2tUb2tlbih0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRva2VuLmxlbmd0aCA+IDQgPyBgLi4uJHt0b2tlbi5zbGljZSgtNCl9YCA6IHRva2VuO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQUlBLE1BQWEsU0FBUyxFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7QUFBTSxDQUFDO0FBR3RELE1BQWEsWUFBWSxFQUFFLE9BQU87Q0FDaEMsTUFBTSxFQUFFLE9BQU87Q0FDZixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNqQyxhQUFhLEVBQUUsUUFBUTtBQUN6QixDQUFDO0FBR0QsTUFBYSxlQUFlLEVBQUUsbUJBQW1CLFFBQVE7Q0FDdkQsRUFBRSxPQUFPO0VBQ1AsTUFBTSxFQUFFLFFBQVEsTUFBTTtFQUN0QixNQUFNLEVBQUUsT0FBTztDQUNqQixDQUFDO0NBQ0QsRUFBRSxPQUFPO0VBQ1AsTUFBTSxFQUFFLFFBQVEsV0FBVztFQUMzQixZQUFZLEVBQUUsT0FBTztFQUNyQixVQUFVLEVBQUUsT0FBTztFQUNuQixPQUFPLEVBQUUsT0FBTztDQUNsQixDQUFDO0NBQ0QsRUFBRSxPQUFPO0VBQ1AsTUFBTSxFQUFFLFFBQVEsT0FBTztFQUV2QixNQUFNLEVBQUUsT0FBTztFQUNmLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRO0NBQ3BDLENBQUM7QUFDSCxDQUFDO0FBR0QsTUFBYSxlQUFlLEVBQUUsS0FBSyxDQUFDLFFBQVEsWUFBWSxDQUFDO0FBR3pELE1BQWEsWUFBWSxFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7QUFBTSxDQUFDO0FBR3pELE1BQWEsbUJBQW1CLEVBQUUsS0FBSztDQUFDO0NBQVE7Q0FBVztDQUFZO0FBQU0sQ0FBQztBQUc5RSxNQUFhLGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUSxNQUFNLENBQUM7QUFHbEQsTUFBYSx5QkFBeUIsRUFBRSxLQUFLO0NBQUM7Q0FBTztDQUFVO0FBQU0sQ0FBQztBQUd0RSxNQUFhLHNCQUFzQixFQUFFLEtBQUs7Q0FBQztDQUFhO0NBQWE7QUFBVyxDQUFDO0FBR2pGLE1BQWEseUJBQXlCLEVBQUUsT0FBTztDQUM3QyxTQUFTLHVCQUF1QixTQUFTO0NBQ3pDLE1BQU0sb0JBQW9CLFNBQVM7QUFDckMsQ0FBQztBQUdELE1BQWEsaUJBQWlCLEVBQUUsbUJBQW1CLFFBQVEsQ0FDekQsRUFBRSxPQUFPO0NBQ1AsTUFBTSxFQUFFLFFBQVEsTUFBTTtDQUN0QixNQUFNLEVBQUUsT0FBTztDQUNmLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QyxDQUFDLEdBQ0QsRUFBRSxPQUFPO0NBQ1AsTUFBTSxFQUFFLFFBQVEsT0FBTztDQUN2QixLQUFLLEVBQUUsT0FBTztBQUNoQixDQUFDLENBQ0gsQ0FBQztBQUdELE1BQWEsdUJBQXVCLEtBQUs7QUFDekMsTUFBYSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLG9CQUFvQjtBQU9sRixNQUFhLG1CQUFtQixFQUFFLE9BQU87Q0FDdkMsVUFBVSxFQUFFLE9BQU87Q0FDbkIsVUFBVSxFQUFFLE9BQU87Q0FDbkIsT0FBTyxFQUFFLE9BQU87Q0FDaEIsWUFBWSxFQUFFLE9BQU87QUFDdkIsQ0FBQztBQUdELE1BQWEsa0JBQWtCLEVBQUUsT0FBTztDQUV0QyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNsQyxhQUFhLGlCQUFpQixTQUFTO0FBQ3pDLENBQUM7QUFHRCxNQUFhLHVCQUF1QixFQUFFLE9BQU87Q0FDM0MsWUFBWSxFQUFFLE9BQU87Q0FDckIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDOUIsUUFBUSxFQUFFLE9BQU87Q0FDakIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVM7QUFDaEMsQ0FBQztBQUdELE1BQWEsYUFBYSxFQUFFLFlBQVk7Q0FDdEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDNUIsUUFBUSxFQUFFLE9BQU87Q0FDakIsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDLENBQUMsU0FBUztDQUN4QyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMzQixTQUFTLGVBQWUsU0FBUztDQUNqQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNoQyxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQyxTQUFTO0NBQ25DLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzVCLFdBQVcsVUFBVSxTQUFTO0NBQzlCLGtCQUFrQixpQkFBaUIsU0FBUztDQUM1QyxhQUFhLFlBQVksU0FBUztDQUNsQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM3QixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUVqQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUUvQixrQkFBa0IsRUFDZixPQUFPLENBQUMsQ0FDUixNQUFNLGdCQUFnQixDQUFDLENBQ3ZCLFNBQVM7Q0FFWixRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsU0FBUztDQUM3QixZQUFZLGdCQUFnQixTQUFTO0NBQ3JDLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDLENBQUMsU0FBUztDQUVwRCxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTO0NBRXRDLHdCQUF3Qix1QkFBdUIsU0FBUztBQUMxRCxDQUFDO0FBR0QsTUFBYSxnQkFBZ0IsRUFBRSxPQUFPO0NBQ3BDLFNBQVMsRUFBRSxRQUFRLFNBQVM7Q0FDNUIsV0FBVyxFQUFFLE9BQU87Q0FDcEIsU0FBUyxFQUFFLE9BQU87Q0FDbEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDOUIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7QUFDbkMsQ0FBQztBQUdELE1BQWEsYUFBYSxFQUFFLEtBQUs7Q0FBQztDQUFZO0NBQWlCO0FBQU8sQ0FBQztBQUd2RSxNQUFhLGNBQWMsRUFBRSxPQUFPO0NBQ2xDLE1BQU0sRUFBRSxPQUFPO0NBQ2YsU0FBUyxFQUFFLE1BQU0sWUFBWTtDQUM3QixjQUFjO0NBQ2QsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDL0IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDM0IsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNwQyxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQyxDQUFDLFNBQVM7Q0FDaEQsT0FBTyxFQUFFLE9BQU87RUFDZCxjQUFjLEVBQUUsT0FBTztFQUN2QixlQUFlLEVBQUUsT0FBTztFQUN4QixrQkFBa0IsRUFBRSxPQUFPO0VBQzNCLDZCQUE2QixFQUFFLE9BQU87RUFDdEMsZ0NBQWdDLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztFQUNwRCxnQ0FBZ0MsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0VBQ3BELHlCQUF5QixFQUFFLE9BQU87Q0FDcEMsQ0FBQztDQUNELFlBQVksRUFBRSxPQUFPO0NBQ3JCLFFBQVEsRUFBRSxPQUFPO0NBQ2pCLFNBQVMsRUFBRSxPQUFPO0NBQ2xCLFlBQVk7Q0FDWixZQUFZLGdCQUFnQixTQUFTO0FBQ3ZDLENBQUM7QUFLRCxNQUFhLGVBQWUsRUFBRSxPQUFPO0NBQ25DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0NBQ3BDLFVBQVUsRUFBRSxPQUFPO0VBQ2pCLFlBQVksRUFBRSxPQUFPO0VBQ3JCLFVBQVUsRUFBRSxPQUFPO0VBQ25CLE9BQU8sRUFBRSxPQUFPO0NBQ2xCLENBQUM7Q0FDRCxNQUFNLEVBQUUsT0FBTztFQUNiLE1BQU0sRUFBRSxPQUFPO0VBQ2YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7RUFDM0IsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztFQUNwQyxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQyxDQUFDLFNBQVM7RUFDaEQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7RUFDL0IsY0FBYztFQUNkLE9BQU8sRUFBRSxPQUFPO0dBQ2QsY0FBYyxFQUFFLE9BQU87R0FDdkIsZUFBZSxFQUFFLE9BQU87R0FDeEIsa0JBQWtCLEVBQUUsT0FBTztHQUMzQiw2QkFBNkIsRUFBRSxPQUFPO0dBQ3RDLGdDQUFnQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7R0FDcEQsZ0NBQWdDLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztHQUNwRCx5QkFBeUIsRUFBRSxPQUFPO0VBQ3BDLENBQUM7RUFDRCxZQUFZLEVBQUUsT0FBTztFQUNyQixRQUFRLEVBQUUsT0FBTztFQUNqQixTQUFTLEVBQUUsT0FBTztFQUNsQixZQUFZO0VBQ1osU0FBUyxFQUFFLE1BQU0sWUFBWTtFQUM3QixZQUFZLGdCQUFnQixTQUFTO0NBQ3ZDLENBQUM7Q0FDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBS0QsTUFBYSxpQkFBaUIsRUFBRSxPQUFPO0NBQ3JDLFlBQVksRUFBRSxPQUFPO0NBQ3JCLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2xDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQy9CLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzVCLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzdCLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTO0NBQ25DLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTO0FBQzdDLENBQUM7QUFHRCxNQUFhLGtCQUFrQixFQUFFLE9BQU87Q0FDdEMsY0FBYyxFQUFFLE9BQU87Q0FDdkIsV0FBVyxFQUFFLE9BQU87Q0FDcEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxZQUFZLFdBQVcsQ0FBQztDQUN0QyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMvQixvQkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3hDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ25DLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2xDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDckMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUN6Qyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzNDLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDM0MsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDN0IsWUFBWSxXQUFXLFNBQVM7Q0FDaEMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDaEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVM7Q0FDdkMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNyQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNuQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNoQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM5QixVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM5QixZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNoQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3BDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0FBQzdCLENBQUM7QUFHRCxNQUFhLGlCQUFpQixFQUFFLE9BQU87Q0FDckMsY0FBYyxFQUFFLE9BQU87Q0FDdkIsUUFBUSxFQUFFLEtBQUs7RUFBQztFQUFhO0VBQVM7Q0FBUyxDQUFDO0NBQ2hELFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzlCLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQy9CLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQy9CLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDeEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUN0QyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3ZDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDMUMsMEJBQTBCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM5Qyw0QkFBNEIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2hELDRCQUE0QixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDaEQsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDN0IsWUFBWSxXQUFXLFNBQVM7Q0FDaEMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNyQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM3QixjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNsQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTO0FBQ3ZDLENBQUM7QUFLRCxNQUFhLGFBQWEsRUFBRSxPQUFPO0NBQ2pDLE9BQU8sRUFBRSxPQUFPO0NBQ2hCLE1BQU0sRUFBRSxPQUFPO0NBQ2YsVUFBVSxFQUFFLE9BQU87Q0FDbkIsVUFBVSxFQUFFLE9BQU87QUFDckIsQ0FBQztBQUtELE1BQWEsbUJBQW1CLEVBQUUsT0FBTztDQUN2QyxTQUFTLEVBQUUsT0FBTztDQUdsQixNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksTUFBTSxDQUFDO0FBQ25DLENBQUM7QUFHRCxNQUFNLGFBQWEsRUFDaEIsT0FBTztDQUNOLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzlCLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVM7QUFDckQsQ0FBQyxDQUFDLENBQ0QsU0FBUztBQUVaLE1BQWEsZ0JBQWdCLEVBQUUsT0FBTztDQUNwQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMzQixVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM5QixVQUFVLFdBQVcsU0FBUztDQUM5QixVQUFVLFdBQVcsU0FBUztBQUNoQyxDQUFDO0FBS0QsTUFBYSxtQkFBbUIsRUFBRSxPQUFPO0NBQ3ZDLFdBQVcsRUFBRSxRQUFRO0NBQ3JCLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxTQUFTO0NBQy9CLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsU0FBUyxFQUFFLE9BQU87QUFDcEIsQ0FBQztBQUdELE1BQWEsdUJBQXVCLEVBQUUsS0FBSztDQUFDO0NBQVk7Q0FBUztBQUFRLENBQUM7QUFHMUUsTUFBYSxpQkFBaUIsRUFBRSxPQUFPO0NBQ3JDLFFBQVEsRUFBRSxPQUFPO0NBQ2pCLGNBQWMsRUFBRSxPQUFPO0NBQ3ZCLFlBQVksaUJBQWlCLFNBQVM7Q0FHdEMsT0FBTyxFQUFFLFFBQVE7Q0FDakIsV0FBVyxFQUFFLE9BQU87RUFDbEIsUUFBUTtFQUNSLFdBQVc7Q0FDYixDQUFDO0FBQ0gsQ0FBQztBQUtELElBQWEsYUFBYixjQUFnQyxNQUFNO0NBQ3BDLE9BQWdCO0FBQ2xCO0FBQ0EsSUFBYSw4QkFBYixjQUFpRCxNQUFNO0NBQ3JELE9BQWdCO0FBQ2xCO0FBQ0EsSUFBYSxlQUFiLGNBQWtDLE1BQU07Q0FDdEMsT0FBZ0I7QUFDbEI7QUFDQSxJQUFhLGVBQWIsY0FBa0MsTUFBTTtDQUN0QyxPQUFnQjtBQUNsQjtBQUlBLFNBQWdCLFVBQVUsT0FBdUI7Q0FDL0MsT0FBTyxNQUFNLFNBQVMsSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFLE1BQU07QUFDdEQifQ==
322
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuLy8gT2JzZXJ2ZWQgc3RhbmRhbG9uZSBJbWFnZXMgcmVzcG9uc2UgdmFsdWVzLCBkaXN0aW5jdCBmcm9tIHJlcXVlc3RlZCBnZW5lcmF0aW9uIGhpbnRzLlxuZXhwb3J0IGNvbnN0IEltYWdlR2VuZXJhdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICByb3V0ZTogei5saXRlcmFsKFwiY29kZXgtaW1hZ2VzXCIpLFxuICBtb2RlbDogei5saXRlcmFsKFwiZ3B0LWltYWdlLTJcIiksXG4gIGJhY2tncm91bmQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcXVhbGl0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzaXplOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzYWdlOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBpbnB1dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgIHRvdGFsX3Rva2Vuczogei5udW1iZXIoKS5ub25uZWdhdGl2ZSgpLFxuICAgICAgaW5wdXRfdG9rZW5zX2RldGFpbHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgaW1hZ2VfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICAgICAgdGV4dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgICAgICBjYWNoZWRfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCkub3B0aW9uYWwoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICBvdXRwdXRfdG9rZW5zX2RldGFpbHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgaW1hZ2VfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICAgICAgdGV4dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YT47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZENvbnRlbnQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidGV4dFwiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRvb2wtY2FsbFwiKSxcbiAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgIHRvb2xOYW1lOiB6LnN0cmluZygpLFxuICAgIGlucHV0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcImltYWdlXCIpLFxuICAgIC8vIENvZGV4IGltYWdlX2dlbmVyYXRpb24gcmVzdWx0IGJhc2U2NC4gcWdyaWQg64qUIO2PrOunty/tmZXsnqXsnpAg7LGF7J6E7J2EIOyngOyngCDslYrripTri6QuXG4gICAgZGF0YTogei5zdHJpbmcoKSxcbiAgICByZXZpc2VkUHJvbXB0OiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBnZW5lcmF0aW9uOiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YS5vcHRpb25hbCgpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRDb250ZW50ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRDb250ZW50PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJlYXNvbiA9IHouZW51bShbXCJzdG9wXCIsIFwidG9vbC1jYWxsc1wiXSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSZWFzb24gPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSZWFzb24+O1xuXG5leHBvcnQgY29uc3QgVmVyYm9zaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFJlYXNvbmluZ1N1bW1hcnk+O1xuXG5leHBvcnQgY29uc3QgU2VydmljZVRpZXIgPSB6LmVudW0oW1wiZmFzdFwiLCBcImZsZXhcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmljZVRpZXIgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aWNlVGllcj47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25RdWFsaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouZW51bShbXCIxMDI0eDEwMjRcIiwgXCIxMDI0eDE1MzZcIiwgXCIxNTM2eDEwMjRcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblNpemU+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgcXVhbGl0eTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eS5vcHRpb25hbCgpLFxuICBzaXplOiBJbWFnZUdlbmVyYXRpb25TaXplLm9wdGlvbmFsKCksXG4gIGJhY2tncm91bmQ6IHouZW51bShbXCJhdXRvXCIsIFwib3BhcXVlXCIsIFwidHJhbnNwYXJlbnRcIl0pLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25PcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkSW5wdXRQYXJ0ID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRleHRcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICB0ZXh0X2VsZW1lbnRzOiB6LmFycmF5KHoubmV2ZXIoKSkuZGVmYXVsdChbXSksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRJbnB1dFBhcnQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZElucHV0UGFydD47XG5cbmV4cG9ydCBjb25zdCBNQVhfUVVFUllfVElNRU9VVF9NUyA9IDMwICogNjBfMDAwO1xuZXhwb3J0IGNvbnN0IFF1ZXJ5VGltZW91dE1zID0gei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpLm1heChNQVhfUVVFUllfVElNRU9VVF9NUyk7XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIENvbnRleHQgKFNESyDihpQgU2VydmVyIGNvbnRyYWN0KSDilIDilIDilIBcblxuLy8gT3BlbkFJIGNhY2hlIGFmZmluaXR5IOyijO2RnCjqtawgY29kZXggdGhyZWFkIOyijO2RnCkuIHByb21wdF9jYWNoZV9rZXkg66W8IOqzoOygle2VtFxuLy8gT3BlbkFJIHByb21wdCBjYWNoaW5nIOydhCDsgrTrpqzquLAg7JyE7ZWcIO2VuOuTpC4g7ISc67KE6rCAIOuwnOq4ie2VmOqzoCDtgbTrnbzqsIAg64uk7J2MIOyalOyyreyXkCDqt7jrjIDroZwg7ZqM7Iah7ZWc64ukLlxuLy8g7ZW465OkIOuvuOyghOyGoSDsi5wg6riw7KG0IFwi66ekIHR1cm4g7IOIIHRocmVhZCArIGhpc3RvcnkgaW5qZWN0XCIg64+Z7J6R7Jy866GcIO2PtOuwsShRZ3JpZFJ1bkNvbnRleHQg7LC47KGwKS5cbmV4cG9ydCBjb25zdCBRZ3JpZFRocmVhZENvb3JkID0gei5vYmplY3Qoe1xuICB3b3JrZXJJZDogei5udW1iZXIoKSwgLy8g6rOg7KCVIOudvOyasO2MhSAodGhyZWFkIOuKlCB3b3JrZXIg7ZSE66Gc7IS47IqkIOuplOuqqOumrOyXkOunjCDsobTsnqwpXG4gIHRocmVhZElkOiB6LnN0cmluZygpLCAvLyBvcGFxdWUgY2FjaGUgYWZmaW5pdHkga2V5ID0gcHJvbXB0X2NhY2hlX2tleVxuICBlcG9jaDogei5udW1iZXIoKSwgLy8gd29ya2VyIHNwYXduIOy5tOyatO2EsC4gcmVzdGFydCDroZwgdGhyZWFkIOymneuwnCDqsJDsp4BcbiAgc3lzdGVtSGFzaDogei5zdHJpbmcoKSwgLy8gc3lzdGVtX3Byb21wdCDtlbTsi5wuIOuLpOuluCDrjIDtmZQg7Jik7KCR7IaNIOuwqeyngFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRocmVhZENvb3JkID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUaHJlYWRDb29yZD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFJ1bkNvbnRleHQgPSB6Lm9iamVjdCh7XG4gIC8vIHRvb2wtY2FsbCBydW7snYQg6rOE7IaN7ZWgIOuVjOunjCDrsJzquIkuIOydvOuwmCDrjIDtmZTripQgdGhyZWFkQ29vcmQg66eMIOyZleuztS5cbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRocmVhZENvb3JkOiBRZ3JpZFRocmVhZENvb3JkLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkUnVuQ29udGV4dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkUnVuQ29udGV4dD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgdG9vbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0OiB6LnN0cmluZygpLFxuICBpc0Vycm9yOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVG9vbFJlc3VsdElucHV0PjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5SW5wdXQgPSB6Lmxvb3NlT2JqZWN0KHtcbiAgc3lzdGVtOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb21wdDogei5zdHJpbmcoKSxcbiAgaW5wdXQ6IHouYXJyYXkoUWdyaWRJbnB1dFBhcnQpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRpbWVvdXQ6IFF1ZXJ5VGltZW91dE1zLm9wdGlvbmFsKCksXG4gIGpzb25TY2hlbWE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbHM6IHouYXJyYXkoUWdyaWRUb29sKS5vcHRpb25hbCgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmVyYm9zaXR5OiBWZXJib3NpdHkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nU3VtbWFyeTogUmVhc29uaW5nU3VtbWFyeS5vcHRpb25hbCgpLFxuICBzZXJ2aWNlVGllcjogU2VydmljZVRpZXIub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvLyByYXcvZGFzaGJvYXJk7JmAIOqzteqwnCBBSSBTREsgcHJvdmlkZXJPcHRpb25zLnFncmlkLnRva2VuTmFtZeydtCDqs7XsnKDtlZjripQg7KeA7KCVIOyjvOyGjC5cbiAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8vIFNESy1kZXJpdmVkIG9wYXF1ZSBhZmZpbml0eS4gSXQgaXMgaW50ZW50aW9uYWxseSBkaXN0aW5jdCBmcm9tIHRoZSBjYWxsZXIncyBzZXNzaW9uS2V5LlxuICBjYWNoZUFmZmluaXR5S2V5OiB6XG4gICAgLnN0cmluZygpXG4gICAgLnJlZ2V4KC9eWzAtOWEtZl17NjR9JC8pXG4gICAgLm9wdGlvbmFsKCksXG4gIC8vIOyDneuete2VmOuptCDroZzquYXtlZzri6QuIGZhbHNl64qUIHJlcXVlc3QgbG9nIOyTsOq4sOunjCDrgYTqs6AgZGlzcGF0Y2gvdGhyZWFk64qUIOycoOyngO2VnOuLpC5cbiAgbG9nZ2VyOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbiAgdG9vbFJlc3VsdHM6IHouYXJyYXkoUWdyaWRUb29sUmVzdWx0SW5wdXQpLm9wdGlvbmFsKCksXG4gIC8vIE9wZW5BSSBSZXNwb25zZXMgaW1hZ2VfZ2VuZXJhdGlvbiB0b29sIOydhCDsvKDri6QoT3BlbkFJIOqyveuhnCDsoITsmqksIG9wdC1pbiwgbm9uLXN0cmVhbSkuXG4gIGltYWdlR2VuZXJhdGlvbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgLy8gcWdyaWQg6rCA6rKpIOy2lOyglSDrsI8gQ29kZXgg7J2066+47KeAIOyalOyyrSDtnoztirguIOydtOuvuOyngCDrqqjrjbjsnYAgZ3B0LWltYWdlLTIg66GcIOqzoOyglSDqsIDsoJXtlZzri6QuXG4gIGltYWdlR2VuZXJhdGlvbk9wdGlvbnM6IEltYWdlR2VuZXJhdGlvbk9wdGlvbnMub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFF1ZXJ5SW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgTW9kZWxGYWxsYmFjayA9IHoub2JqZWN0KHtcbiAgdHJpZ2dlcjogei5saXRlcmFsKFwicmVmdXNhbFwiKSxcbiAgZnJvbU1vZGVsOiB6LnN0cmluZygpLFxuICB0b01vZGVsOiB6LnN0cmluZygpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleHBsYW5hdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBNb2RlbEZhbGxiYWNrID0gei5pbmZlcjx0eXBlb2YgTW9kZWxGYWxsYmFjaz47XG5cbmV4cG9ydCBjb25zdCBDb3N0U291cmNlID0gei5lbnVtKFtcInByb3ZpZGVyXCIsIFwicHJpY2luZ190YWJsZVwiLCBcIm1peGVkXCJdKTtcbmV4cG9ydCB0eXBlIENvc3RTb3VyY2UgPSB6LmluZmVyPHR5cGVvZiBDb3N0U291cmNlPjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5T3V0cHV0ID0gei5vYmplY3Qoe1xuICB0ZXh0OiB6LnN0cmluZygpLFxuICBjb250ZW50OiB6LmFycmF5KFFncmlkQ29udGVudCksXG4gIGZpbmlzaFJlYXNvbjogRmluaXNoUmVhc29uLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxGYWxsYmFja3M6IHouYXJyYXkoTW9kZWxGYWxsYmFjaykub3B0aW9uYWwoKSxcbiAgdXNhZ2U6IHoub2JqZWN0KHtcbiAgICBpbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICByZWFzb25pbmdfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBjYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBjYWNoZV9yZWFkX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgfSksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCksXG4gIHR0ZnRNczogei5udW1iZXIoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZSxcbiAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFF1ZXJ5T3V0cHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlPdXRwdXQ+O1xuXG4vLyDilIDilIDilIAgU3RyZWFtIEV2ZW50cyDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFN0cmVhbUV2ZW50cyA9IHoub2JqZWN0KHtcbiAgZGVsdGE6IHoub2JqZWN0KHsgdGV4dDogei5zdHJpbmcoKSB9KSxcbiAgdG9vbENhbGw6IHoub2JqZWN0KHtcbiAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgIHRvb2xOYW1lOiB6LnN0cmluZygpLFxuICAgIGlucHV0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgZG9uZTogei5vYmplY3Qoe1xuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gICAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICByZXF1ZXN0ZWRNb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG1vZGVsRmFsbGJhY2tzOiB6LmFycmF5KE1vZGVsRmFsbGJhY2spLm9wdGlvbmFsKCksXG4gICAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24sXG4gICAgdXNhZ2U6IHoub2JqZWN0KHtcbiAgICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICByZWFzb25pbmdfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgY2FjaGVfY3JlYXRpb25fNW1faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl8xaF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIH0pLFxuICAgIGR1cmF0aW9uTXM6IHoubnVtYmVyKCksXG4gICAgdHRmdE1zOiB6Lm51bWJlcigpLFxuICAgIGNvc3RVc2Q6IHoubnVtYmVyKCksXG4gICAgY29zdFNvdXJjZTogQ29zdFNvdXJjZSxcbiAgICBjb250ZW50OiB6LmFycmF5KFFncmlkQ29udGVudCksXG4gICAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG4gIH0pLFxuICBlcnJvcjogei5vYmplY3QoeyBtZXNzYWdlOiB6LnN0cmluZygpIH0pLFxufSk7XG5leHBvcnQgdHlwZSBTdHJlYW1FdmVudHMgPSB6LmluZmVyPHR5cGVvZiBTdHJlYW1FdmVudHM+O1xuXG4vLyDilIDilIDilIAgUnVuIExpZmVjeWNsZSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IENyZWF0ZVJ1bklucHV0ID0gei5vYmplY3Qoe1xuICB1c2VyUHJvbXB0OiB6LnN0cmluZygpLFxuICBzeXN0ZW1Qcm9tcHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlzU3RydWN0dXJlZDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAganNvblNjaGVtYTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIENyZWF0ZVJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgQ3JlYXRlUnVuSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgQXBwZW5kU3RlcElucHV0ID0gei5vYmplY3Qoe1xuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCksXG4gIHN0ZXBJbmRleDogei5udW1iZXIoKSxcbiAgdHlwZTogei5lbnVtKFtcImdlbmVyYXRlXCIsIFwidG9vbF9jYWxsXCJdKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlcXVlc3RlZE1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmYWxsYmFja0NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGlucHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIG91dHB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZVJlYWRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY2FjaGVDcmVhdGlvblRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uNW1Ub2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY2FjaGVDcmVhdGlvbjFoVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZS5vcHRpb25hbCgpLFxuICBkdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHR0ZnRNczogei5udW1iZXIoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIGZpbmlzaFJlYXNvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZWFzb25pbmdUZXh0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b29sQ2FsbEluZGV4OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbEFyZ3M6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbFJlc3VsdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sRHVyYXRpb25Nczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBBcHBlbmRTdGVwSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBBcHBlbmRTdGVwSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgRmluaXNoUnVuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKSxcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2VlZGVkXCIsIFwiZXJyb3JcIiwgXCJhYm9ydGVkXCJdKSxcbiAgcmVzcG9uc2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXF1ZXN0ZWRNb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZmFsbGJhY2tDb3VudDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbElucHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsT3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVSZWFkVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvblRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlQ3JlYXRpb241bVRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlQ3JlYXRpb24xaFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RTb3VyY2U6IENvc3RTb3VyY2Uub3B0aW9uYWwoKSxcbiAgdG90YWxEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXJyb3JNZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlc3BvbnNlSnNvbk9rOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSdW5JbnB1dCA9IHouaW5mZXI8dHlwZW9mIEZpbmlzaFJ1bklucHV0PjtcblxuLy8g4pSA4pSA4pSAIFRva2VuIE1hbmFnZW1lbnQg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBUb2tlblN0YXRzID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHJlcXVlc3RzOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBUb2tlblN0YXRzID0gei5pbmZlcjx0eXBlb2YgVG9rZW5TdGF0cz47XG5cbi8vIOKUgOKUgOKUgCBPQXV0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IE9BdXRoU3RhcnRSZXN1bHQgPSB6Lm9iamVjdCh7XG4gIGF1dGhVcmw6IHouc3RyaW5nKCksXG4gIC8vIHJlZGlyZWN0OiDruIzrnbzsmrDsoIAg7J6Q64+ZIOuzteq3gCjro6jtlITrsLEg7KCR7IaNKS4gY29kZTog7L2Y7IaUIOy9nOuwsSArIOy9lOuTnCDrtpnsl6zrhKPquLAo7JuQ6rKpIOygkeyGjSkuXG4gIC8vIE9wZW5BSSDsm5Dqsqkg6rK966Gc64qUIOuTseuhneuQnCBsb29wYmFjayBjYWxsYmFjayBVUkwg7KCE7LK066W8IOu2meyXrOuEo+uKlCBjb2RlIOuqqOuTnOulvCDsk7Tri6QuXG4gIG1vZGU6IHouZW51bShbXCJyZWRpcmVjdFwiLCBcImNvZGVcIl0pLFxufSk7XG5leHBvcnQgdHlwZSBPQXV0aFN0YXJ0UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgT0F1dGhTdGFydFJlc3VsdD47XG5cbmNvbnN0IFJhdGVXaW5kb3cgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHV0aWxpemF0aW9uOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgcmVzZXRzQXQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICB3aW5kb3dEdXJhdGlvbk1pbnM6IHoubnVtYmVyKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICB9KVxuICAubnVsbGFibGUoKTtcblxuZXhwb3J0IGNvbnN0IFVzYWdlUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZpdmVIb3VyOiBSYXRlV2luZG93Lm9wdGlvbmFsKCksXG4gIHNldmVuRGF5OiBSYXRlV2luZG93Lm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFVzYWdlUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBVc2FnZVJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEhlYWx0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFN1YnNjcmliZXJTdGF0dXMgPSB6Lm9iamVjdCh7XG4gIGNvbm5lY3RlZDogei5ib29sZWFuKCksXG4gIGNvbm5lY3RlZEF0OiB6LmRhdGUoKS5udWxsYWJsZSgpLFxuICBsYXN0UmVjb25jaWxlQXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG4gIGF0dGVtcHQ6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIFN1YnNjcmliZXJTdGF0dXMgPSB6LmluZmVyPHR5cGVvZiBTdWJzY3JpYmVyU3RhdHVzPjtcblxuZXhwb3J0IGNvbnN0IFByb3ZpZGVyU3RhcnR1cFN0YXRlID0gei5lbnVtKFtcInN0YXJ0aW5nXCIsIFwicmVhZHlcIiwgXCJmYWlsZWRcIl0pO1xuZXhwb3J0IHR5cGUgUHJvdmlkZXJTdGFydHVwU3RhdGUgPSB6LmluZmVyPHR5cGVvZiBQcm92aWRlclN0YXJ0dXBTdGF0ZT47XG5cbmV4cG9ydCBjb25zdCBIZWFsdGhSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LnN0cmluZygpLFxuICBhY3RpdmVUb2tlbnM6IHoubnVtYmVyKCksXG4gIHN1YnNjcmliZXI6IFN1YnNjcmliZXJTdGF0dXMubnVsbGFibGUoKSxcbiAgLy8gSFRUUCDrpqzsiqTri53snYAgZGlzcGF0Y2hlciDquLDrj5nrs7Tri6Qg66i87KCAIOyXtOumsOuLpC4gMjAwIOydkeuLteunjOycvOuhnOuKlCDsmpTssq3snYQg7LKY66as7ZWgIOyImFxuICAvLyDsnojripTsp4Ag7JWMIOyImCDsl4bslrQgcHJvdmlkZXIg67OEIOykgOu5hCDsg4Htg5zrpbwg7ZWo6ruYIOuFuOy2nO2VnOuLpC5cbiAgcmVhZHk6IHouYm9vbGVhbigpLFxuICBwcm92aWRlcnM6IHoub2JqZWN0KHtcbiAgICBvcGVuYWk6IFByb3ZpZGVyU3RhcnR1cFN0YXRlLFxuICAgIGFudGhyb3BpYzogUHJvdmlkZXJTdGFydHVwU3RhdGUsXG4gIH0pLFxufSk7XG5leHBvcnQgdHlwZSBIZWFsdGhSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEhlYWx0aFJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEVycm9ycyDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIFF1b3RhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlFVT1RBX0VYSEFVU1RFRFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFF1b3RhVGhyZXNob2xkRXhjZWVkZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUVVPVEFfVEhSRVNIT0xEX0VYQ0VFREVEXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJUSU1FT1VUXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgUHJvY2Vzc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJQUk9DRVNTX0VSUk9SXCIgYXMgY29uc3Q7XG59XG5cbi8vIOKUgOKUgOKUgCBVdGlscyDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIG1hc2tUb2tlbih0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRva2VuLmxlbmd0aCA+IDQgPyBgLi4uJHt0b2tlbi5zbGljZSgtNCl9YCA6IHRva2VuO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQUlBLE1BQWEsU0FBUyxFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7QUFBTSxDQUFDO0FBR3RELE1BQWEsWUFBWSxFQUFFLE9BQU87Q0FDaEMsTUFBTSxFQUFFLE9BQU87Q0FDZixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNqQyxhQUFhLEVBQUUsUUFBUTtBQUN6QixDQUFD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