@cartanova/qgrid-cli 2.10.3 → 2.10.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/dist/application/qgrid/qgrid-image-generation.js +6 -2
- package/bundle/dist/application/qgrid/qgrid-response-format.js +4 -4
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +63 -140
- package/bundle/dist/application/qgrid/qgrid.frame.js +3 -6
- package/bundle/dist/application/qgrid/qgrid.types.js +4 -8
- package/bundle/dist/application/request-log/request-log.model.js +21 -15
- package/bundle/dist/application/setting/setting.model.js +2 -64
- package/bundle/dist/application/setting/setting.store.js +3 -4
- package/bundle/dist/application/setting/setting.types.js +2 -12
- package/bundle/dist/i18n/en.js +1 -3
- package/bundle/dist/i18n/ko.js +1 -3
- package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +19 -8
- package/bundle/src/application/qgrid/qgrid-image-generation.test.ts +18 -0
- package/bundle/src/application/qgrid/qgrid-image-generation.ts +14 -3
- package/bundle/src/application/qgrid/qgrid-response-format.test.ts +9 -0
- package/bundle/src/application/qgrid/qgrid-response-format.ts +10 -7
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +0 -111
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +82 -178
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +0 -38
- package/bundle/src/application/qgrid/qgrid.frame.ts +4 -6
- package/bundle/src/application/qgrid/qgrid.types.ts +14 -4
- package/bundle/src/application/request-log/request-log.model.test.ts +17 -12
- package/bundle/src/application/request-log/request-log.model.ts +8 -2
- package/bundle/src/application/setting/setting.model.test.ts +1 -101
- package/bundle/src/application/setting/setting.model.ts +0 -73
- package/bundle/src/application/setting/setting.store.ts +2 -3
- package/bundle/src/application/setting/setting.types.ts +0 -12
- package/bundle/src/application/sonamu.generated.http +2 -7
- package/bundle/src/i18n/en.ts +0 -3
- package/bundle/src/i18n/ko.ts +0 -3
- package/bundle/src/utils/providers/openai/openai-backend-protocol.test.ts +19 -1
- package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +22 -0
- package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +12 -0
- package/bundle/web-dist/client/assets/cost-CY2BJEPC.js +1 -0
- package/bundle/web-dist/client/assets/index-CvG4UB9v.css +1 -0
- package/bundle/web-dist/client/assets/{index-BIC1sQxw.js → index-Dxw7DiXF.js} +4 -4
- package/bundle/web-dist/client/assets/logs-3n_U4qnI.js +1 -0
- package/bundle/web-dist/client/assets/{monit-CraVV3MQ.js → monit-E8eGW1Sj.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-B3ZBoJ60.js → routes-7spLfIGZ.js} +2 -2
- package/bundle/web-dist/client/assets/services.generated-jnPHYMER.js +51 -0
- package/bundle/web-dist/client/assets/settings-BdosZFNC.js +1 -0
- package/bundle/web-dist/client/assets/{show-ItTExdAh.js → show-b2PFNI3D.js} +1 -1
- package/bundle/web-dist/client/assets/{tokens-BynKx8Vn.js → tokens-CBdHb2_U.js} +1 -1
- package/bundle/web-dist/client/assets/{use-oauth-login-flow-8xw6on5P.js → use-oauth-login-flow-Cyn3YPqW.js} +1 -1
- package/bundle/web-dist/client/assets/{use-update-token-mutation-D-Y8OySK.js → use-update-token-mutation-DQCwCYfR.js} +1 -1
- package/bundle/web-dist/client/index.html +3 -3
- package/bundle/web-dist/server/assets/{cost-CSH_t17I.js → cost-59jBdx-I.js} +8 -3
- package/bundle/web-dist/server/assets/{lazyRouteComponent-Bj1cPq6x.js → lazyRouteComponent-CUR-kWzI.js} +2 -2
- package/bundle/web-dist/server/assets/{logs-BSk9lOHe.js → logs-CaaWO9-Z.js} +9 -7
- package/bundle/web-dist/server/assets/{monit-D9W4ioUi.js → monit-CBil92fJ.js} +4 -4
- package/bundle/web-dist/server/assets/{plus-CmvbWuDf.js → plus-Bvdj8Pwx.js} +1 -1
- package/bundle/web-dist/server/assets/{react-dom-BjR1Iaz8.js → react-dom-CyuShs9K.js} +1 -1
- package/bundle/web-dist/server/assets/{refresh-cw-B8U9BL9-.js → refresh-cw-3QAiSWBd.js} +1 -1
- package/bundle/web-dist/server/assets/{routes-C7lB2Q85.js → routes-DtVf9yqo.js} +7 -7
- package/bundle/web-dist/server/assets/{services.generated-BM4X3Ecj.js → services.generated-FPwsG9p3.js} +116 -131
- package/bundle/web-dist/server/assets/{settings-BFVuldch.js → settings-DeHNwoMv.js} +40 -251
- package/bundle/web-dist/server/assets/{show-Cswh_tqs.js → show-8NNdRxhM.js} +3 -3
- package/bundle/web-dist/server/assets/{tokens-DiTUwUwr.js → tokens-odgS2-9q.js} +4 -4
- package/bundle/web-dist/server/assets/{use-oauth-login-flow-DYKnG4A2.js → use-oauth-login-flow-DTQKdYBO.js} +1 -1
- package/bundle/web-dist/server/assets/{use-update-token-mutation-DqGMopII.js → use-update-token-mutation-xvXbPrCI.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +10 -10
- package/package.json +3 -2
- package/skills/qgrid/SKILL.md +1 -1
- package/skills/qgrid/references/ai-sdk-provider-contract.md +1 -1
- package/skills/qgrid/references/cli-env-and-server-boot.md +12 -9
- package/skills/qgrid/references/decision-rationale.md +2 -2
- package/skills/qgrid/references/openai-codex-runtime.md +5 -1
- package/bundle/dist/utils/process-supervisor.js +0 -22
- package/bundle/dist/utils/server-restart.js +0 -61
- package/bundle/src/utils/process-supervisor.test.ts +0 -24
- package/bundle/src/utils/process-supervisor.ts +0 -17
- package/bundle/src/utils/server-restart.test.ts +0 -76
- package/bundle/src/utils/server-restart.ts +0 -68
- package/bundle/web-dist/client/assets/cost-CpjVoAqp.js +0 -1
- package/bundle/web-dist/client/assets/index-D_sagzsR.css +0 -1
- package/bundle/web-dist/client/assets/logs-zvdujZWn.js +0 -1
- package/bundle/web-dist/client/assets/services.generated-Cbvg2sGQ.js +0 -51
- package/bundle/web-dist/client/assets/settings-DwbzT5jo.js +0 -1
|
@@ -20,14 +20,6 @@ const SettingSource = z.enum([
|
|
|
20
20
|
"env",
|
|
21
21
|
"default"
|
|
22
22
|
]);
|
|
23
|
-
/**
|
|
24
|
-
* 프로세스를 다시 띄워주는 도구. 재시작은 스스로 종료하고 이 도구에 맡기므로,
|
|
25
|
-
* 없으면(null) 화면에서 재시작을 시도조차 하지 않는다.
|
|
26
|
-
*
|
|
27
|
-
* API 반환 타입에 쓰이므로 zod 로 둔다 — sonamu syncer 가 클라이언트 코드를 만들 때
|
|
28
|
-
* 타입만 있는 선언은 모듈을 찾지 못한다.
|
|
29
|
-
*/
|
|
30
|
-
const SupervisorKind = z.enum(["pm2"]);
|
|
31
23
|
const SettingItem = z.object({
|
|
32
24
|
key: z.string(),
|
|
33
25
|
group: z.string(),
|
|
@@ -52,12 +44,10 @@ const RuntimeInfoItem = z.object({
|
|
|
52
44
|
const SettingsResponse = z.object({
|
|
53
45
|
settings: SettingItem.array(),
|
|
54
46
|
runtime: RuntimeInfoItem.array(),
|
|
55
|
-
/** null 이면 재시작 버튼을 쓸 수 없다 — 종료해도 되살릴 주체가 없다. */
|
|
56
|
-
supervisor: SupervisorKind.nullable(),
|
|
57
47
|
/** 이 인스턴스가 keepalive 스케줄러를 소유하도록 명시적으로 허용됐는지. */
|
|
58
48
|
keepaliveRunnerEnabled: z.boolean()
|
|
59
49
|
});
|
|
60
50
|
//#endregion
|
|
61
|
-
export { RuntimeInfoItem, SettingApplies, SettingItem, SettingKind, SettingListParams, SettingSaveParams, SettingSource, SettingsResponse
|
|
51
|
+
export { RuntimeInfoItem, SettingApplies, SettingItem, SettingKind, SettingListParams, SettingSaveParams, SettingSource, SettingsResponse };
|
|
62
52
|
|
|
63
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy50eXBlcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vc2V0dGluZy9zZXR0aW5nLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IFNldHRpbmdCYXNlU2NoZW1hLCBTZXR0aW5nQmFzZUxpc3RQYXJhbXMgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuXG4vLyBTZXR0aW5nIC0gTGlzdFBhcmFtc1xuZXhwb3J0IGNvbnN0IFNldHRpbmdMaXN0UGFyYW1zID0gU2V0dGluZ0Jhc2VMaXN0UGFyYW1zO1xuZXhwb3J0IHR5cGUgU2V0dGluZ0xpc3RQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiBTZXR0aW5nTGlzdFBhcmFtcz47XG5cbi8vIFNldHRpbmcgLSBTYXZlUGFyYW1zXG5leHBvcnQgY29uc3QgU2V0dGluZ1NhdmVQYXJhbXMgPSBTZXR0aW5nQmFzZVNjaGVtYS5wYXJ0aWFsKHsgaWQ6IHRydWUsIGNyZWF0ZWRfYXQ6IHRydWUgfSk7XG5leHBvcnQgdHlwZSBTZXR0aW5nU2F2ZVBhcmFtcyA9IHouaW5mZXI8dHlwZW9mIFNldHRpbmdTYXZlUGFyYW1zPjtcblxuLy8g4pSA4pSAIOyEpOyglSBBUEkg7J2R64u1IOyKpO2CpOuniCDilIDilIBcblxuZXhwb3J0IGNvbnN0IFNldHRpbmdLaW5kID0gei5lbnVtKFtcImJvb2xlYW5cIiwgXCJpbnRlZ2VyXCIsIFwibnVtYmVyXCIsIFwic3RyaW5nXCIsIFwic2VjcmV0XCIsIFwicHJlc2V0XCJdKTtcbmV4cG9ydCB0eXBlIFNldHRpbmdLaW5kID0gei5pbmZlcjx0eXBlb2YgU2V0dGluZ0tpbmQ+
|
|
53
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy50eXBlcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vc2V0dGluZy9zZXR0aW5nLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IFNldHRpbmdCYXNlU2NoZW1hLCBTZXR0aW5nQmFzZUxpc3RQYXJhbXMgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuXG4vLyBTZXR0aW5nIC0gTGlzdFBhcmFtc1xuZXhwb3J0IGNvbnN0IFNldHRpbmdMaXN0UGFyYW1zID0gU2V0dGluZ0Jhc2VMaXN0UGFyYW1zO1xuZXhwb3J0IHR5cGUgU2V0dGluZ0xpc3RQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiBTZXR0aW5nTGlzdFBhcmFtcz47XG5cbi8vIFNldHRpbmcgLSBTYXZlUGFyYW1zXG5leHBvcnQgY29uc3QgU2V0dGluZ1NhdmVQYXJhbXMgPSBTZXR0aW5nQmFzZVNjaGVtYS5wYXJ0aWFsKHsgaWQ6IHRydWUsIGNyZWF0ZWRfYXQ6IHRydWUgfSk7XG5leHBvcnQgdHlwZSBTZXR0aW5nU2F2ZVBhcmFtcyA9IHouaW5mZXI8dHlwZW9mIFNldHRpbmdTYXZlUGFyYW1zPjtcblxuLy8g4pSA4pSAIOyEpOyglSBBUEkg7J2R64u1IOyKpO2CpOuniCDilIDilIBcblxuZXhwb3J0IGNvbnN0IFNldHRpbmdLaW5kID0gei5lbnVtKFtcImJvb2xlYW5cIiwgXCJpbnRlZ2VyXCIsIFwibnVtYmVyXCIsIFwic3RyaW5nXCIsIFwic2VjcmV0XCIsIFwicHJlc2V0XCJdKTtcbmV4cG9ydCB0eXBlIFNldHRpbmdLaW5kID0gei5pbmZlcjx0eXBlb2YgU2V0dGluZ0tpbmQ+O1xuXG5leHBvcnQgY29uc3QgU2V0dGluZ0FwcGxpZXMgPSB6LmVudW0oW1wiaW1tZWRpYXRlXCIsIFwicmVzdGFydFwiXSk7XG5leHBvcnQgdHlwZSBTZXR0aW5nQXBwbGllcyA9IHouaW5mZXI8dHlwZW9mIFNldHRpbmdBcHBsaWVzPjtcblxuZXhwb3J0IGNvbnN0IFNldHRpbmdTb3VyY2UgPSB6LmVudW0oW1wiZGJcIiwgXCJlbnZcIiwgXCJkZWZhdWx0XCJdKTtcbmV4cG9ydCB0eXBlIFNldHRpbmdTb3VyY2UgPSB6LmluZmVyPHR5cGVvZiBTZXR0aW5nU291cmNlPjtcblxuZXhwb3J0IGNvbnN0IFNldHRpbmdJdGVtID0gei5vYmplY3Qoe1xuICBrZXk6IHouc3RyaW5nKCksXG4gIGdyb3VwOiB6LnN0cmluZygpLFxuICBsYWJlbDogei5zdHJpbmcoKSxcbiAga2luZDogU2V0dGluZ0tpbmQsXG4gIGFwcGxpZXM6IFNldHRpbmdBcHBsaWVzLFxuICAvKiog7ZiE7J6sIOyggeyaqSDspJHsnbgg6rCSLiDriIgg7Yag6riA7J2EIOyngOybkO2VmOq4sCDsnITtlbQgc2VjcmV0IOuPhCDsm5Drs7jsnLzroZwg64K066Ck6rCE64ukLiAqL1xuICB2YWx1ZTogei5zdHJpbmcoKSxcbiAgLyoqIOydtCDqsJLsnbQg7Ja065SU7IScIOyZlOuKlOyngC4g7ZmU66m07JeQ7IScIOy2nOyymOulvCDrs7Tsl6zspJjslbwgXCLsmZwg7JWIIOuwlOuAjOyngFwi6rCAIOyXhuuLpC4gKi9cbiAgc291cmNlOiBTZXR0aW5nU291cmNlLFxuICBtaW46IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgbWF4OiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gIC8qKiBgcHJlc2V0YCDsooXrpZjsl5DshJwg6rOg66W8IOyImCDsnojripQg6rCSLiDri6Trpbgg7KKF66WY64qUIOu5iCDrsLDsl7QuICovXG4gIHByZXNldHM6IHoubnVtYmVyKCkuYXJyYXkoKSxcbiAgaGVscDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBTZXR0aW5nSXRlbSA9IHouaW5mZXI8dHlwZW9mIFNldHRpbmdJdGVtPjtcblxuLyoqIO2ZlOuptOyXkOyEnCDrsJTqv4Ag7IiYIOyXhuuKlCDquLDrj5kg7Iuc7KCQIOqwkuuTpCDigJQg7Ja065akIO2ZmOqyveyXkCDrtpnslrQg7J6I64qU7KeAIO2ZleyduOyaqS4gKi9cbmV4cG9ydCBjb25zdCBSdW50aW1lSW5mb0l0ZW0gPSB6Lm9iamVjdCh7XG4gIGxhYmVsOiB6LnN0cmluZygpLFxuICB2YWx1ZTogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUnVudGltZUluZm9JdGVtID0gei5pbmZlcjx0eXBlb2YgUnVudGltZUluZm9JdGVtPjtcblxuZXhwb3J0IGNvbnN0IFNldHRpbmdzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHNldHRpbmdzOiBTZXR0aW5nSXRlbS5hcnJheSgpLFxuICBydW50aW1lOiBSdW50aW1lSW5mb0l0ZW0uYXJyYXkoKSxcbiAgLyoqIOydtCDsnbjsiqTthLTsiqTqsIAga2VlcGFsaXZlIOyKpOy8gOykhOufrOulvCDshozsnKDtlZjrj4TroZ0g66qF7Iuc7KCB7Jy866GcIO2XiOyaqeuQkOuKlOyngC4gKi9cbiAga2VlcGFsaXZlUnVubmVyRW5hYmxlZDogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIFNldHRpbmdzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBTZXR0aW5nc1Jlc3BvbnNlPjtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsTUFBYSxvQkFBb0I7QUFJakMsTUFBYSxvQkFBb0Isa0JBQWtCLFFBQVE7Q0FBRSxJQUFJO0NBQU0sWUFBWTtBQUFLLENBQUM7QUFLekYsTUFBYSxjQUFjLEVBQUUsS0FBSztDQUFDO0NBQVc7Q0FBVztDQUFVO0NBQVU7Q0FBVTtBQUFRLENBQUM7QUFHaEcsTUFBYSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsYUFBYSxTQUFTLENBQUM7QUFHN0QsTUFBYSxnQkFBZ0IsRUFBRSxLQUFLO0NBQUM7Q0FBTTtDQUFPO0FBQVMsQ0FBQztBQUc1RCxNQUFhLGNBQWMsRUFBRSxPQUFPO0NBQ2xDLEtBQUssRUFBRSxPQUFPO0NBQ2QsT0FBTyxFQUFFLE9BQU87Q0FDaEIsT0FBTyxFQUFFLE9BQU87Q0FDaEIsTUFBTTtDQUNOLFNBQVM7O0NBRVQsT0FBTyxFQUFFLE9BQU87O0NBRWhCLFFBQVE7Q0FDUixLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUN6QixLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUzs7Q0FFekIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU07Q0FDMUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7QUFDNUIsQ0FBQzs7QUFJRCxNQUFhLGtCQUFrQixFQUFFLE9BQU87Q0FDdEMsT0FBTyxFQUFFLE9BQU87Q0FDaEIsT0FBTyxFQUFFLE9BQU87QUFDbEIsQ0FBQztBQUdELE1BQWEsbUJBQW1CLEVBQUUsT0FBTztDQUN2QyxVQUFVLFlBQVksTUFBTTtDQUM1QixTQUFTLGdCQUFnQixNQUFNOztDQUUvQix3QkFBd0IsRUFBRSxRQUFRO0FBQ3BDLENBQUMifQ==
|
package/bundle/dist/i18n/en.js
CHANGED
|
@@ -50,10 +50,8 @@ var en_default = {
|
|
|
50
50
|
"error.serviceUnavailable": "Service unavailable",
|
|
51
51
|
"setting.invalidValue": (reason) => `Invalid setting value: ${reason}`,
|
|
52
52
|
"setting.unknownKey": (key) => `Unknown setting key ${key}`,
|
|
53
|
-
"setting.noSupervisor": () => "Restart is unavailable when running locally — nothing would bring the server back up",
|
|
54
53
|
"qgrid.dispatcherFailed": (provider) => `${provider} dispatcher failed to initialize`,
|
|
55
54
|
"qgrid.dispatcherStarting": (provider) => `${provider} dispatcher is starting up. Please retry shortly`,
|
|
56
|
-
"qgrid.restartPending": () => "Server restart is in progress. Please retry shortly",
|
|
57
55
|
"error.unauthorized": "Unauthorized",
|
|
58
56
|
notFound: (name, id) => `${name} ID ${id} not found`,
|
|
59
57
|
"validation.email": "Invalid email format",
|
|
@@ -65,4 +63,4 @@ var en_default = {
|
|
|
65
63
|
//#endregion
|
|
66
64
|
export { en_default as default };
|
|
67
65
|
|
|
68
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW4uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2kxOG4vZW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGx1cmFsIH0gZnJvbSBcInNvbmFtdS9kaWN0XCI7XG5cbi8qKlxuICogUHJvamVjdCBFTiBEaWN0aW9uYXJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCJjb21tb24uYWxsXCI6IFwiQWxsXCIsXG4gIFwiY29tbW9uLmJhY2tUb0xpc3RcIjogXCJCYWNrIHRvIExpc3RcIixcbiAgXCJjb21tb24uY2FuY2VsXCI6IFwiQ2FuY2VsXCIsXG4gIFwiY29tbW9uLmNsb3NlXCI6IFwiQ2xvc2VcIixcbiAgXCJjb21tb24uY29uZmlybVwiOiBcIkNvbmZpcm1cIixcbiAgXCJjb21tb24uY3JlYXRlXCI6IFwiQ3JlYXRlXCIsXG4gIFwiY29tbW9uLmNyZWF0ZWRBdFwiOiBcIkNyZWF0ZWQgQXRcIixcbiAgXCJjb21tb24uZGVsZXRlXCI6IFwiRGVsZXRlXCIsXG4gIFwiY29tbW9uLmVkaXRcIjogXCJFZGl0XCIsXG4gIFwiY29tbW9uLmxvZ2luXCI6IFwiTG9naW5cIixcbiAgXCJjb21tb24ubG9nb3V0XCI6IFwiTG9nb3V0XCIsXG4gIFwiY29tbW9uLm1hbmFnZVwiOiBcIk1hbmFnZVwiLFxuICBcImNvbW1vbi5yZXN1bHRzXCI6IChjb3VudDogbnVtYmVyKSA9PlxuICAgIHBsdXJhbChjb3VudCwgeyBvbmU6IGAke2NvdW50fSByZXN1bHRgLCBvdGhlcjogYCR7Y291bnR9IHJlc3VsdHNgIH0pLFxuICBcImNvbW1vbi5zYXZlXCI6IFwiU2F2ZVwiLFxuICBcImNvbW1vbi5zZWFyY2hcIjogXCJTZWFyY2hcIixcbiAgXCJjb21tb24uc2VhcmNoUGxhY2Vob2xkZXJcIjogXCJTZWFyY2guLi5cIixcbiAgXCJjb21tb24uc2VhcmNoVHlwZVwiOiBcIlNlYXJjaCBUeXBlXCIsXG4gIFwiY29tbW9uLnNvcnRcIjogXCJTb3J0XCIsXG4gIFwiY29uZmlybS5kZWxldGVcIjogXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlP1wiLFxuICBcImNvbmZpcm0uc2F2ZVwiOiBcIkRvIHlvdSB3YW50IHRvIHNhdmU/XCIsXG4gIFwiZGFzaGJvYXJkLmFkbWluTWVudVwiOiBcIkFkbWluIE1lbnVcIixcbiAgXCJkYXNoYm9hcmQuY3JlYXRlZEF0XCI6IFwiSm9pbmVkXCIsXG4gIFwiZGFzaGJvYXJkLmVtYWlsXCI6IFwiRW1haWxcIixcbiAgXCJkYXNoYm9hcmQubG9naW5SZXF1aXJlZFwiOiBcIlBsZWFzZSBsb2dpbiB0byBjb250aW51ZS5cIixcbiAgXCJkYXNoYm9hcmQubmFtZVwiOiBcIk5hbWVcIixcbiAgXCJkYXNoYm9hcmQucm9sZVwiOiBcIlJvbGVcIixcbiAgXCJkYXNoYm9hcmQudGl0bGVcIjogXCJBZG1pbiBEYXNoYm9hcmRcIixcbiAgXCJkYXNoYm9hcmQud2VsY29tZVwiOiBcIldlbGNvbWUhXCIsXG4gIFwiZGVsZXRlLmNvbmZpcm0uZGVzY3JpcHRpb25cIjpcbiAgICBcIlRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUuIFRoaXMgd2lsbCBwZXJtYW5lbnRseSBkZWxldGUgdGhpcyBpdGVtLlwiLFxuICBcImRlbGV0ZS5jb25maXJtLnRpdGxlXCI6IFwiQXJlIHlvdSBzdXJlP1wiLFxuICBcImVudGl0eS5jcmVhdGVcIjogKG5hbWU6IHN0cmluZykgPT4gYENyZWF0ZSAke25hbWV9YCxcbiAgXCJlbnRpdHkuZWRpdFwiOiAobmFtZTogc3RyaW5nLCBpZDogbnVtYmVyKSA9PiBgRWRpdCAke25hbWV9ICgjJHtpZH0pYCxcbiAgXCJlbnRpdHkubGlzdFwiOiAobmFtZTogc3RyaW5nKSA9PiBgJHtuYW1lfSBMaXN0YCxcbiAgXCJlbnRpdHkubGlzdE1hbmFnZVwiOiAobmFtZTogc3RyaW5nKSA9PiBgTWFuYWdlICR7bmFtZX0gTGlzdGAsXG4gIFwiZXJyb3IuYWxyZWFkeVByb2Nlc3NlZFwiOiBcIkFscmVhZHkgcHJvY2Vzc2VkXCIsXG4gIFwiZXJyb3IuYmFkUmVxdWVzdFwiOiBcIkJhZCByZXF1ZXN0XCIsXG4gIFwiZXJyb3IuZHVwbGljYXRlUm93XCI6IFwiRHVwbGljYXRlIGRhdGFcIixcbiAgXCJlcnJvci5mb3JiaWRkZW5cIjogXCJGb3JiaWRkZW5cIixcbiAgXCJlcnJvci5pbnRlcm5hbFNlcnZlckVycm9yXCI6IFwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG4gIFwiZXJyb3Iubm90Rm91bmRcIjogXCJOb3QgZm91bmRcIixcbiAgXCJlcnJvci5zZXJ2aWNlVW5hdmFpbGFibGVcIjogXCJTZXJ2aWNlIHVuYXZhaWxhYmxlXCIsXG4gIFwic2V0dGluZy5pbnZhbGlkVmFsdWVcIjogKHJlYXNvbjogc3RyaW5nKSA9PiBgSW52YWxpZCBzZXR0aW5nIHZhbHVlOiAke3JlYXNvbn1gLFxuICBcInNldHRpbmcudW5rbm93bktleVwiOiAoa2V5OiBzdHJpbmcpID0+
|
|
66
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW4uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2kxOG4vZW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGx1cmFsIH0gZnJvbSBcInNvbmFtdS9kaWN0XCI7XG5cbi8qKlxuICogUHJvamVjdCBFTiBEaWN0aW9uYXJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCJjb21tb24uYWxsXCI6IFwiQWxsXCIsXG4gIFwiY29tbW9uLmJhY2tUb0xpc3RcIjogXCJCYWNrIHRvIExpc3RcIixcbiAgXCJjb21tb24uY2FuY2VsXCI6IFwiQ2FuY2VsXCIsXG4gIFwiY29tbW9uLmNsb3NlXCI6IFwiQ2xvc2VcIixcbiAgXCJjb21tb24uY29uZmlybVwiOiBcIkNvbmZpcm1cIixcbiAgXCJjb21tb24uY3JlYXRlXCI6IFwiQ3JlYXRlXCIsXG4gIFwiY29tbW9uLmNyZWF0ZWRBdFwiOiBcIkNyZWF0ZWQgQXRcIixcbiAgXCJjb21tb24uZGVsZXRlXCI6IFwiRGVsZXRlXCIsXG4gIFwiY29tbW9uLmVkaXRcIjogXCJFZGl0XCIsXG4gIFwiY29tbW9uLmxvZ2luXCI6IFwiTG9naW5cIixcbiAgXCJjb21tb24ubG9nb3V0XCI6IFwiTG9nb3V0XCIsXG4gIFwiY29tbW9uLm1hbmFnZVwiOiBcIk1hbmFnZVwiLFxuICBcImNvbW1vbi5yZXN1bHRzXCI6IChjb3VudDogbnVtYmVyKSA9PlxuICAgIHBsdXJhbChjb3VudCwgeyBvbmU6IGAke2NvdW50fSByZXN1bHRgLCBvdGhlcjogYCR7Y291bnR9IHJlc3VsdHNgIH0pLFxuICBcImNvbW1vbi5zYXZlXCI6IFwiU2F2ZVwiLFxuICBcImNvbW1vbi5zZWFyY2hcIjogXCJTZWFyY2hcIixcbiAgXCJjb21tb24uc2VhcmNoUGxhY2Vob2xkZXJcIjogXCJTZWFyY2guLi5cIixcbiAgXCJjb21tb24uc2VhcmNoVHlwZVwiOiBcIlNlYXJjaCBUeXBlXCIsXG4gIFwiY29tbW9uLnNvcnRcIjogXCJTb3J0XCIsXG4gIFwiY29uZmlybS5kZWxldGVcIjogXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlP1wiLFxuICBcImNvbmZpcm0uc2F2ZVwiOiBcIkRvIHlvdSB3YW50IHRvIHNhdmU/XCIsXG4gIFwiZGFzaGJvYXJkLmFkbWluTWVudVwiOiBcIkFkbWluIE1lbnVcIixcbiAgXCJkYXNoYm9hcmQuY3JlYXRlZEF0XCI6IFwiSm9pbmVkXCIsXG4gIFwiZGFzaGJvYXJkLmVtYWlsXCI6IFwiRW1haWxcIixcbiAgXCJkYXNoYm9hcmQubG9naW5SZXF1aXJlZFwiOiBcIlBsZWFzZSBsb2dpbiB0byBjb250aW51ZS5cIixcbiAgXCJkYXNoYm9hcmQubmFtZVwiOiBcIk5hbWVcIixcbiAgXCJkYXNoYm9hcmQucm9sZVwiOiBcIlJvbGVcIixcbiAgXCJkYXNoYm9hcmQudGl0bGVcIjogXCJBZG1pbiBEYXNoYm9hcmRcIixcbiAgXCJkYXNoYm9hcmQud2VsY29tZVwiOiBcIldlbGNvbWUhXCIsXG4gIFwiZGVsZXRlLmNvbmZpcm0uZGVzY3JpcHRpb25cIjpcbiAgICBcIlRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUuIFRoaXMgd2lsbCBwZXJtYW5lbnRseSBkZWxldGUgdGhpcyBpdGVtLlwiLFxuICBcImRlbGV0ZS5jb25maXJtLnRpdGxlXCI6IFwiQXJlIHlvdSBzdXJlP1wiLFxuICBcImVudGl0eS5jcmVhdGVcIjogKG5hbWU6IHN0cmluZykgPT4gYENyZWF0ZSAke25hbWV9YCxcbiAgXCJlbnRpdHkuZWRpdFwiOiAobmFtZTogc3RyaW5nLCBpZDogbnVtYmVyKSA9PiBgRWRpdCAke25hbWV9ICgjJHtpZH0pYCxcbiAgXCJlbnRpdHkubGlzdFwiOiAobmFtZTogc3RyaW5nKSA9PiBgJHtuYW1lfSBMaXN0YCxcbiAgXCJlbnRpdHkubGlzdE1hbmFnZVwiOiAobmFtZTogc3RyaW5nKSA9PiBgTWFuYWdlICR7bmFtZX0gTGlzdGAsXG4gIFwiZXJyb3IuYWxyZWFkeVByb2Nlc3NlZFwiOiBcIkFscmVhZHkgcHJvY2Vzc2VkXCIsXG4gIFwiZXJyb3IuYmFkUmVxdWVzdFwiOiBcIkJhZCByZXF1ZXN0XCIsXG4gIFwiZXJyb3IuZHVwbGljYXRlUm93XCI6IFwiRHVwbGljYXRlIGRhdGFcIixcbiAgXCJlcnJvci5mb3JiaWRkZW5cIjogXCJGb3JiaWRkZW5cIixcbiAgXCJlcnJvci5pbnRlcm5hbFNlcnZlckVycm9yXCI6IFwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG4gIFwiZXJyb3Iubm90Rm91bmRcIjogXCJOb3QgZm91bmRcIixcbiAgXCJlcnJvci5zZXJ2aWNlVW5hdmFpbGFibGVcIjogXCJTZXJ2aWNlIHVuYXZhaWxhYmxlXCIsXG4gIFwic2V0dGluZy5pbnZhbGlkVmFsdWVcIjogKHJlYXNvbjogc3RyaW5nKSA9PiBgSW52YWxpZCBzZXR0aW5nIHZhbHVlOiAke3JlYXNvbn1gLFxuICBcInNldHRpbmcudW5rbm93bktleVwiOiAoa2V5OiBzdHJpbmcpID0+IGBVbmtub3duIHNldHRpbmcga2V5ICR7a2V5fWAsXG4gIFwicWdyaWQuZGlzcGF0Y2hlckZhaWxlZFwiOiAocHJvdmlkZXI6IHN0cmluZykgPT4gYCR7cHJvdmlkZXJ9IGRpc3BhdGNoZXIgZmFpbGVkIHRvIGluaXRpYWxpemVgLFxuICBcInFncmlkLmRpc3BhdGNoZXJTdGFydGluZ1wiOiAocHJvdmlkZXI6IHN0cmluZykgPT5cbiAgICBgJHtwcm92aWRlcn0gZGlzcGF0Y2hlciBpcyBzdGFydGluZyB1cC4gUGxlYXNlIHJldHJ5IHNob3J0bHlgLFxuICBcImVycm9yLnVuYXV0aG9yaXplZFwiOiBcIlVuYXV0aG9yaXplZFwiLFxuICBub3RGb3VuZDogKG5hbWU6IHN0cmluZywgaWQ6IG51bWJlcikgPT4gYCR7bmFtZX0gSUQgJHtpZH0gbm90IGZvdW5kYCxcbiAgXCJ2YWxpZGF0aW9uLmVtYWlsXCI6IFwiSW52YWxpZCBlbWFpbCBmb3JtYXRcIixcbiAgXCJ2YWxpZGF0aW9uLm1heExlbmd0aFwiOiAoZmllbGQ6IHN0cmluZywgbWF4OiBudW1iZXIpID0+XG4gICAgYCR7ZmllbGR9IG11c3QgYmUgYXQgbW9zdCAke21heH0gY2hhcmFjdGVyc2AsXG4gIFwidmFsaWRhdGlvbi5taW5MZW5ndGhcIjogKGZpZWxkOiBzdHJpbmcsIG1pbjogbnVtYmVyKSA9PlxuICAgIGAke2ZpZWxkfSBtdXN0IGJlIGF0IGxlYXN0ICR7bWlufSBjaGFyYWN0ZXJzYCxcbiAgXCJ2YWxpZGF0aW9uLnJlcXVpcmVkXCI6IChmaWVsZDogc3RyaW5nKSA9PiBgJHtmaWVsZH0gaXMgcmVxdWlyZWRgLFxuICBcInZhbGlkYXRpb24udXJsXCI6IFwiSW52YWxpZCBVUkwgZm9ybWF0XCIsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUtBLElBQUEsYUFBZTtDQUNiLGNBQWM7Q0FDZCxxQkFBcUI7Q0FDckIsaUJBQWlCO0NBQ2pCLGdCQUFnQjtDQUNoQixrQkFBa0I7Q0FDbEIsaUJBQWlCO0NBQ2pCLG9CQUFvQjtDQUNwQixpQkFBaUI7Q0FDakIsZUFBZTtDQUNmLGdCQUFnQjtDQUNoQixpQkFBaUI7Q0FDakIsaUJBQWlCO0NBQ2pCLG1CQUFtQixVQUNqQixPQUFPLE9BQU87RUFBRSxLQUFLLEdBQUcsTUFBTTtFQUFVLE9BQU8sR0FBRyxNQUFNO0NBQVUsQ0FBQztDQUNyRSxlQUFlO0NBQ2YsaUJBQWlCO0NBQ2pCLDRCQUE0QjtDQUM1QixxQkFBcUI7Q0FDckIsZUFBZTtDQUNmLGtCQUFrQjtDQUNsQixnQkFBZ0I7Q0FDaEIsdUJBQXVCO0NBQ3ZCLHVCQUF1QjtDQUN2QixtQkFBbUI7Q0FDbkIsMkJBQTJCO0NBQzNCLGtCQUFrQjtDQUNsQixrQkFBa0I7Q0FDbEIsbUJBQW1CO0NBQ25CLHFCQUFxQjtDQUNyQiw4QkFDRTtDQUNGLHdCQUF3QjtDQUN4QixrQkFBa0IsU0FBaUIsVUFBVTtDQUM3QyxnQkFBZ0IsTUFBYyxPQUFlLFFBQVEsS0FBSyxLQUFLLEdBQUc7Q0FDbEUsZ0JBQWdCLFNBQWlCLEdBQUcsS0FBSztDQUN6QyxzQkFBc0IsU0FBaUIsVUFBVSxLQUFLO0NBQ3RELDBCQUEwQjtDQUMxQixvQkFBb0I7Q0FDcEIsc0JBQXNCO0NBQ3RCLG1CQUFtQjtDQUNuQiw2QkFBNkI7Q0FDN0Isa0JBQWtCO0NBQ2xCLDRCQUE0QjtDQUM1Qix5QkFBeUIsV0FBbUIsMEJBQTBCO0NBQ3RFLHVCQUF1QixRQUFnQix1QkFBdUI7Q0FDOUQsMkJBQTJCLGFBQXFCLEdBQUcsU0FBUztDQUM1RCw2QkFBNkIsYUFDM0IsR0FBRyxTQUFTO0NBQ2Qsc0JBQXNCO0NBQ3RCLFdBQVcsTUFBYyxPQUFlLEdBQUcsS0FBSyxNQUFNLEdBQUc7Q0FDekQsb0JBQW9CO0NBQ3BCLHlCQUF5QixPQUFlLFFBQ3RDLEdBQUcsTUFBTSxtQkFBbUIsSUFBSTtDQUNsQyx5QkFBeUIsT0FBZSxRQUN0QyxHQUFHLE1BQU0sb0JBQW9CLElBQUk7Q0FDbkMsd0JBQXdCLFVBQWtCLEdBQUcsTUFBTTtDQUNuRCxrQkFBa0I7QUFDcEIifQ==
|
package/bundle/dist/i18n/ko.js
CHANGED
|
@@ -48,10 +48,8 @@ var ko_default = {
|
|
|
48
48
|
"error.serviceUnavailable": "서비스를 사용할 수 없습니다",
|
|
49
49
|
"setting.invalidValue": (reason) => `설정 값이 올바르지 않습니다: ${reason}`,
|
|
50
50
|
"setting.unknownKey": (key) => `알 수 없는 설정 키 ${key}`,
|
|
51
|
-
"setting.noSupervisor": () => "로컬 실행 환경에서는 재시작할 수 없습니다 — 종료하면 다시 켜줄 모니터링 도구가 없습니다",
|
|
52
51
|
"qgrid.dispatcherFailed": (provider) => `${provider} dispatcher 초기화에 실패했습니다`,
|
|
53
52
|
"qgrid.dispatcherStarting": (provider) => `${provider} dispatcher 기동 중입니다. 잠시 후 다시 시도해주세요`,
|
|
54
|
-
"qgrid.restartPending": () => "서버 재시작 중입니다. 잠시 후 다시 시도해주세요",
|
|
55
53
|
"error.unauthorized": "인증이 필요합니다",
|
|
56
54
|
"error.unknownSearchField": (field) => `구현되지 않은 검색 필드 ${field}`,
|
|
57
55
|
notFound: (name, id) => `존재하지 않는 ${name} ID ${id}`,
|
|
@@ -64,4 +62,4 @@ var ko_default = {
|
|
|
64
62
|
//#endregion
|
|
65
63
|
export { ko_default as default };
|
|
66
64
|
|
|
67
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia28uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2kxOG4va28udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9zYSB9IGZyb20gXCJzb25hbXUvZGljdFwiO1xuXG4vKipcbiAqIFByb2plY3QgS08gRGljdGlvbmFyeVxuICovXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiY29tbW9uLmFsbFwiOiBcIuyghOyytFwiLFxuICBcImNvbW1vbi5iYWNrVG9MaXN0XCI6IFwi66qp66Gd7Jy866GcXCIsXG4gIFwiY29tbW9uLmNhbmNlbFwiOiBcIuy3qOyGjFwiLFxuICBcImNvbW1vbi5jbG9zZVwiOiBcIuuLq+q4sFwiLFxuICBcImNvbW1vbi5jb25maXJtXCI6IFwi7ZmV7J24XCIsXG4gIFwiY29tbW9uLmNyZWF0ZVwiOiBcIuyDneyEsVwiLFxuICBcImNvbW1vbi5jcmVhdGVkQXRcIjogXCLrk7HroZ1cIixcbiAgXCJjb21tb24uZGVsZXRlXCI6IFwi7IKt7KCcXCIsXG4gIFwiY29tbW9uLmVkaXRcIjogXCLsiJjsoJVcIixcbiAgXCJjb21tb24ubG9naW5cIjogXCLroZzqt7jsnbhcIixcbiAgXCJjb21tb24ubG9nb3V0XCI6IFwi66Gc6re47JWE7JuDXCIsXG4gIFwiY29tbW9uLm1hbmFnZVwiOiBcIuq0gOumrFwiLFxuICBcImNvbW1vbi5yZXN1bHRzXCI6IChjb3VudDogbnVtYmVyKSA9PiBgJHtjb3VudH3qsJwg6rKw6rO8YCxcbiAgXCJjb21tb24uc2F2ZVwiOiBcIuyggOyepVwiLFxuICBcImNvbW1vbi5zZWFyY2hcIjogXCLqsoDsg4lcIixcbiAgXCJjb21tb24uc2VhcmNoUGxhY2Vob2xkZXJcIjogXCLqsoDsg4kuLi5cIixcbiAgXCJjb21tb24uc2VhcmNoVHlwZVwiOiBcIuqygOyDiSDsnKDtmJVcIixcbiAgXCJjb21tb24uc29ydFwiOiBcIuygleugrFwiLFxuICBcImNvbmZpcm0uZGVsZXRlXCI6IFwi7KCV66eQIOyCreygnO2VmOyLnOqyoOyKteuLiOq5jD9cIixcbiAgXCJjb25maXJtLnNhdmVcIjogXCLsoIDsnqXtlZjsi5zqsqDsirXri4jquYw/XCIsXG4gIFwiZGFzaGJvYXJkLmFkbWluTWVudVwiOiBcIuq0gOumrCDrqZTribRcIixcbiAgXCJkYXNoYm9hcmQuY3JlYXRlZEF0XCI6IFwi6rCA7J6F7J28XCIsXG4gIFwiZGFzaGJvYXJkLmVtYWlsXCI6IFwi7J2066mU7J28XCIsXG4gIFwiZGFzaGJvYXJkLmxvZ2luUmVxdWlyZWRcIjogXCLroZzqt7jsnbjsnbQg7ZWE7JqU7ZWp64uI64ukLlwiLFxuICBcImRhc2hib2FyZC5uYW1lXCI6IFwi7J2066aEXCIsXG4gIFwiZGFzaGJvYXJkLnJvbGVcIjogXCLsl63tlaBcIixcbiAgXCJkYXNoYm9hcmQudGl0bGVcIjogXCLqtIDrpqzsnpAg64yA7Iuc67O065OcXCIsXG4gIFwiZGFzaGJvYXJkLndlbGNvbWVcIjogXCLtmZjsmIHtlanri4jri6QhXCIsXG4gIFwiZGVsZXRlLmNvbmZpcm0uZGVzY3JpcHRpb25cIjogXCLsnbQg7J6R7JeF7J2AIOy3qOyGjO2VoCDsiJgg7JeG7Iq164uI64ukLiDtla3rqqnsnbQg7JiB6rWs7KCB7Jy866GcIOyCreygnOuQqeuLiOuLpC5cIixcbiAgXCJkZWxldGUuY29uZmlybS50aXRsZVwiOiBcIuygleunkCDsgq3soJztlZjsi5zqsqDsirXri4jquYw/XCIsXG4gIFwiZW50aXR5LmNyZWF0ZVwiOiAobmFtZTogc3RyaW5nKSA9PiBgJHtuYW1lfSDsg53shLFgLFxuICBcImVudGl0eS5lZGl0XCI6IChuYW1lOiBzdHJpbmcsIGlkOiBudW1iZXIpID0+IGAke25hbWV9IOyImOyglSAoIyR7aWR9KWAsXG4gIFwiZW50aXR5Lmxpc3RcIjogKG5hbWU6IHN0cmluZykgPT4gYCR7bmFtZX0g66qp66GdYCxcbiAgXCJlbnRpdHkubGlzdE1hbmFnZVwiOiAobmFtZTogc3RyaW5nKSA9PiBgJHtuYW1lfSDrqqnroZ0g6rSA66asYCxcbiAgXCJlcnJvci5hbHJlYWR5UHJvY2Vzc2VkXCI6IFwi7J2066+4IOyymOumrOuQmOyXiOyKteuLiOuLpFwiLFxuICBcImVycm9yLmJhZFJlcXVlc3RcIjogXCLsnpjrqrvrkJwg7JqU7LKt7J6F64uI64ukXCIsXG4gIFwiZXJyb3IuZHVwbGljYXRlUm93XCI6IFwi7KSR67O165CcIOuNsOydtO2EsOyeheuLiOuLpFwiLFxuICBcImVycm9yLmVudGl0eU5vdEZvdW5kXCI6IChuYW1lOiBzdHJpbmcsIGlkOiBudW1iZXIgfCBzdHJpbmcpID0+IGDsobTsnqztlZjsp4Ag7JWK64qUICR7bmFtZX0gSUQgJHtpZH1gLFxuICBcImVycm9yLmZvcmJpZGRlblwiOiBcIuq2jO2VnOydtCDsl4bsirXri4jri6RcIixcbiAgXCJlcnJvci5pbnRlcm5hbFNlcnZlckVycm9yXCI6IFwi7ISc67KEIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6RcIixcbiAgXCJlcnJvci5ub3RGb3VuZFwiOiBcIuywvuydhCDsiJgg7JeG7Iq164uI64ukXCIsXG4gIFwiZXJyb3Iuc2VydmljZVVuYXZhaWxhYmxlXCI6IFwi7ISc67mE7Iqk66W8IOyCrOyaqe2VoCDsiJgg7JeG7Iq164uI64ukXCIsXG4gIFwic2V0dGluZy5pbnZhbGlkVmFsdWVcIjogKHJlYXNvbjogc3RyaW5nKSA9PiBg7ISk7KCVIOqwkuydtCDsmKzrsJTrpbTsp4Ag7JWK7Iq164uI64ukOiAke3JlYXNvbn1gLFxuICBcInNldHRpbmcudW5rbm93bktleVwiOiAoa2V5OiBzdHJpbmcpID0+
|
|
65
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia28uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2kxOG4va28udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9zYSB9IGZyb20gXCJzb25hbXUvZGljdFwiO1xuXG4vKipcbiAqIFByb2plY3QgS08gRGljdGlvbmFyeVxuICovXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiY29tbW9uLmFsbFwiOiBcIuyghOyytFwiLFxuICBcImNvbW1vbi5iYWNrVG9MaXN0XCI6IFwi66qp66Gd7Jy866GcXCIsXG4gIFwiY29tbW9uLmNhbmNlbFwiOiBcIuy3qOyGjFwiLFxuICBcImNvbW1vbi5jbG9zZVwiOiBcIuuLq+q4sFwiLFxuICBcImNvbW1vbi5jb25maXJtXCI6IFwi7ZmV7J24XCIsXG4gIFwiY29tbW9uLmNyZWF0ZVwiOiBcIuyDneyEsVwiLFxuICBcImNvbW1vbi5jcmVhdGVkQXRcIjogXCLrk7HroZ1cIixcbiAgXCJjb21tb24uZGVsZXRlXCI6IFwi7IKt7KCcXCIsXG4gIFwiY29tbW9uLmVkaXRcIjogXCLsiJjsoJVcIixcbiAgXCJjb21tb24ubG9naW5cIjogXCLroZzqt7jsnbhcIixcbiAgXCJjb21tb24ubG9nb3V0XCI6IFwi66Gc6re47JWE7JuDXCIsXG4gIFwiY29tbW9uLm1hbmFnZVwiOiBcIuq0gOumrFwiLFxuICBcImNvbW1vbi5yZXN1bHRzXCI6IChjb3VudDogbnVtYmVyKSA9PiBgJHtjb3VudH3qsJwg6rKw6rO8YCxcbiAgXCJjb21tb24uc2F2ZVwiOiBcIuyggOyepVwiLFxuICBcImNvbW1vbi5zZWFyY2hcIjogXCLqsoDsg4lcIixcbiAgXCJjb21tb24uc2VhcmNoUGxhY2Vob2xkZXJcIjogXCLqsoDsg4kuLi5cIixcbiAgXCJjb21tb24uc2VhcmNoVHlwZVwiOiBcIuqygOyDiSDsnKDtmJVcIixcbiAgXCJjb21tb24uc29ydFwiOiBcIuygleugrFwiLFxuICBcImNvbmZpcm0uZGVsZXRlXCI6IFwi7KCV66eQIOyCreygnO2VmOyLnOqyoOyKteuLiOq5jD9cIixcbiAgXCJjb25maXJtLnNhdmVcIjogXCLsoIDsnqXtlZjsi5zqsqDsirXri4jquYw/XCIsXG4gIFwiZGFzaGJvYXJkLmFkbWluTWVudVwiOiBcIuq0gOumrCDrqZTribRcIixcbiAgXCJkYXNoYm9hcmQuY3JlYXRlZEF0XCI6IFwi6rCA7J6F7J28XCIsXG4gIFwiZGFzaGJvYXJkLmVtYWlsXCI6IFwi7J2066mU7J28XCIsXG4gIFwiZGFzaGJvYXJkLmxvZ2luUmVxdWlyZWRcIjogXCLroZzqt7jsnbjsnbQg7ZWE7JqU7ZWp64uI64ukLlwiLFxuICBcImRhc2hib2FyZC5uYW1lXCI6IFwi7J2066aEXCIsXG4gIFwiZGFzaGJvYXJkLnJvbGVcIjogXCLsl63tlaBcIixcbiAgXCJkYXNoYm9hcmQudGl0bGVcIjogXCLqtIDrpqzsnpAg64yA7Iuc67O065OcXCIsXG4gIFwiZGFzaGJvYXJkLndlbGNvbWVcIjogXCLtmZjsmIHtlanri4jri6QhXCIsXG4gIFwiZGVsZXRlLmNvbmZpcm0uZGVzY3JpcHRpb25cIjogXCLsnbQg7J6R7JeF7J2AIOy3qOyGjO2VoCDsiJgg7JeG7Iq164uI64ukLiDtla3rqqnsnbQg7JiB6rWs7KCB7Jy866GcIOyCreygnOuQqeuLiOuLpC5cIixcbiAgXCJkZWxldGUuY29uZmlybS50aXRsZVwiOiBcIuygleunkCDsgq3soJztlZjsi5zqsqDsirXri4jquYw/XCIsXG4gIFwiZW50aXR5LmNyZWF0ZVwiOiAobmFtZTogc3RyaW5nKSA9PiBgJHtuYW1lfSDsg53shLFgLFxuICBcImVudGl0eS5lZGl0XCI6IChuYW1lOiBzdHJpbmcsIGlkOiBudW1iZXIpID0+IGAke25hbWV9IOyImOyglSAoIyR7aWR9KWAsXG4gIFwiZW50aXR5Lmxpc3RcIjogKG5hbWU6IHN0cmluZykgPT4gYCR7bmFtZX0g66qp66GdYCxcbiAgXCJlbnRpdHkubGlzdE1hbmFnZVwiOiAobmFtZTogc3RyaW5nKSA9PiBgJHtuYW1lfSDrqqnroZ0g6rSA66asYCxcbiAgXCJlcnJvci5hbHJlYWR5UHJvY2Vzc2VkXCI6IFwi7J2066+4IOyymOumrOuQmOyXiOyKteuLiOuLpFwiLFxuICBcImVycm9yLmJhZFJlcXVlc3RcIjogXCLsnpjrqrvrkJwg7JqU7LKt7J6F64uI64ukXCIsXG4gIFwiZXJyb3IuZHVwbGljYXRlUm93XCI6IFwi7KSR67O165CcIOuNsOydtO2EsOyeheuLiOuLpFwiLFxuICBcImVycm9yLmVudGl0eU5vdEZvdW5kXCI6IChuYW1lOiBzdHJpbmcsIGlkOiBudW1iZXIgfCBzdHJpbmcpID0+IGDsobTsnqztlZjsp4Ag7JWK64qUICR7bmFtZX0gSUQgJHtpZH1gLFxuICBcImVycm9yLmZvcmJpZGRlblwiOiBcIuq2jO2VnOydtCDsl4bsirXri4jri6RcIixcbiAgXCJlcnJvci5pbnRlcm5hbFNlcnZlckVycm9yXCI6IFwi7ISc67KEIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6RcIixcbiAgXCJlcnJvci5ub3RGb3VuZFwiOiBcIuywvuydhCDsiJgg7JeG7Iq164uI64ukXCIsXG4gIFwiZXJyb3Iuc2VydmljZVVuYXZhaWxhYmxlXCI6IFwi7ISc67mE7Iqk66W8IOyCrOyaqe2VoCDsiJgg7JeG7Iq164uI64ukXCIsXG4gIFwic2V0dGluZy5pbnZhbGlkVmFsdWVcIjogKHJlYXNvbjogc3RyaW5nKSA9PiBg7ISk7KCVIOqwkuydtCDsmKzrsJTrpbTsp4Ag7JWK7Iq164uI64ukOiAke3JlYXNvbn1gLFxuICBcInNldHRpbmcudW5rbm93bktleVwiOiAoa2V5OiBzdHJpbmcpID0+IGDslYwg7IiYIOyXhuuKlCDshKTsoJUg7YKkICR7a2V5fWAsXG4gIFwicWdyaWQuZGlzcGF0Y2hlckZhaWxlZFwiOiAocHJvdmlkZXI6IHN0cmluZykgPT4gYCR7cHJvdmlkZXJ9IGRpc3BhdGNoZXIg7LSI6riw7ZmU7JeQIOyLpO2MqO2WiOyKteuLiOuLpGAsXG4gIFwicWdyaWQuZGlzcGF0Y2hlclN0YXJ0aW5nXCI6IChwcm92aWRlcjogc3RyaW5nKSA9PlxuICAgIGAke3Byb3ZpZGVyfSBkaXNwYXRjaGVyIOq4sOuPmSDspJHsnoXri4jri6QuIOyeoOyLnCDtm4Qg64uk7IucIOyLnOuPhO2VtOyjvOyEuOyalGAsXG4gIFwiZXJyb3IudW5hdXRob3JpemVkXCI6IFwi7J247Kad7J20IO2VhOyalO2VqeuLiOuLpFwiLFxuICBcImVycm9yLnVua25vd25TZWFyY2hGaWVsZFwiOiAoZmllbGQ6IHN0cmluZykgPT4gYOq1rO2YhOuQmOyngCDslYrsnYAg6rKA7IOJIO2VhOuTnCAke2ZpZWxkfWAsXG4gIG5vdEZvdW5kOiAobmFtZTogc3RyaW5nLCBpZDogbnVtYmVyKSA9PiBg7KG07J6s7ZWY7KeAIOyViuuKlCAke25hbWV9IElEICR7aWR9YCxcbiAgXCJ2YWxpZGF0aW9uLmVtYWlsXCI6IFwi7Jis67CU66W4IOydtOuplOydvCDtmJXsi53snbQg7JWE64uZ64uI64ukXCIsXG4gIFwidmFsaWRhdGlvbi5tYXhMZW5ndGhcIjogKGZpZWxkOiBzdHJpbmcsIG1heDogbnVtYmVyKSA9PlxuICAgIGAke2ZpZWxkfSR7am9zYShmaWVsZCwgXCLsnYDripRcIil9IOy1nOuMgCAke21heH3snpDquYzsp4Ag7J6F66Cl7ZWgIOyImCDsnojsirXri4jri6RgLFxuICBcInZhbGlkYXRpb24ubWluTGVuZ3RoXCI6IChmaWVsZDogc3RyaW5nLCBtaW46IG51bWJlcikgPT5cbiAgICBgJHtmaWVsZH0ke2pvc2EoZmllbGQsIFwi7J2A64qUXCIpfSDstZzshowgJHttaW597J6QIOydtOyDgeydtOyWtOyVvCDtlanri4jri6RgLFxuICBcInZhbGlkYXRpb24ucmVxdWlyZWRcIjogKGZpZWxkOiBzdHJpbmcpID0+IGAke2pvc2EoZmllbGQsIFwi7J2A64qUXCIpfSDtlYTsiJjsnoXri4jri6RgLFxuICBcInZhbGlkYXRpb24udXJsXCI6IFwi7Jis67CU66W4IFVSTCDtmJXsi53snbQg7JWE64uZ64uI64ukXCIsXG59IGFzIGNvbnN0O1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUtBLElBQUEsYUFBZTtDQUNiLGNBQWM7Q0FDZCxxQkFBcUI7Q0FDckIsaUJBQWlCO0NBQ2pCLGdCQUFnQjtDQUNoQixrQkFBa0I7Q0FDbEIsaUJBQWlCO0NBQ2pCLG9CQUFvQjtDQUNwQixpQkFBaUI7Q0FDakIsZUFBZTtDQUNmLGdCQUFnQjtDQUNoQixpQkFBaUI7Q0FDakIsaUJBQWlCO0NBQ2pCLG1CQUFtQixVQUFrQixHQUFHLE1BQU07Q0FDOUMsZUFBZTtDQUNmLGlCQUFpQjtDQUNqQiw0QkFBNEI7Q0FDNUIscUJBQXFCO0NBQ3JCLGVBQWU7Q0FDZixrQkFBa0I7Q0FDbEIsZ0JBQWdCO0NBQ2hCLHVCQUF1QjtDQUN2Qix1QkFBdUI7Q0FDdkIsbUJBQW1CO0NBQ25CLDJCQUEyQjtDQUMzQixrQkFBa0I7Q0FDbEIsa0JBQWtCO0NBQ2xCLG1CQUFtQjtDQUNuQixxQkFBcUI7Q0FDckIsOEJBQThCO0NBQzlCLHdCQUF3QjtDQUN4QixrQkFBa0IsU0FBaUIsR0FBRyxLQUFLO0NBQzNDLGdCQUFnQixNQUFjLE9BQWUsR0FBRyxLQUFLLFFBQVEsR0FBRztDQUNoRSxnQkFBZ0IsU0FBaUIsR0FBRyxLQUFLO0NBQ3pDLHNCQUFzQixTQUFpQixHQUFHLEtBQUs7Q0FDL0MsMEJBQTBCO0NBQzFCLG9CQUFvQjtDQUNwQixzQkFBc0I7Q0FDdEIseUJBQXlCLE1BQWMsT0FBd0IsV0FBVyxLQUFLLE1BQU07Q0FDckYsbUJBQW1CO0NBQ25CLDZCQUE2QjtDQUM3QixrQkFBa0I7Q0FDbEIsNEJBQTRCO0NBQzVCLHlCQUF5QixXQUFtQixvQkFBb0I7Q0FDaEUsdUJBQXVCLFFBQWdCLGVBQWU7Q0FDdEQsMkJBQTJCLGFBQXFCLEdBQUcsU0FBUztDQUM1RCw2QkFBNkIsYUFDM0IsR0FBRyxTQUFTO0NBQ2Qsc0JBQXNCO0NBQ3RCLDZCQUE2QixVQUFrQixpQkFBaUI7Q0FDaEUsV0FBVyxNQUFjLE9BQWUsV0FBVyxLQUFLLE1BQU07Q0FDOUQsb0JBQW9CO0NBQ3BCLHlCQUF5QixPQUFlLFFBQ3RDLEdBQUcsUUFBUSxLQUFLLE9BQU8sSUFBSSxFQUFFLE1BQU0sSUFBSTtDQUN6Qyx5QkFBeUIsT0FBZSxRQUN0QyxHQUFHLFFBQVEsS0FBSyxPQUFPLElBQUksRUFBRSxNQUFNLElBQUk7Q0FDekMsd0JBQXdCLFVBQWtCLEdBQUcsS0FBSyxPQUFPLElBQUksRUFBRTtDQUMvRCxrQkFBa0I7QUFDcEIifQ==
|
|
@@ -128,13 +128,24 @@ function normalizeOpenAIEvent(raw) {
|
|
|
128
128
|
};
|
|
129
129
|
if ((type === "response.output_item.added" || type === "response.output_item.done") && event.item && typeof event.item === "object") {
|
|
130
130
|
const item = event.item;
|
|
131
|
-
if (item.type === "image_generation_call" && typeof item.result === "string")
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
131
|
+
if (item.type === "image_generation_call" && typeof item.result === "string") {
|
|
132
|
+
const header = Buffer.from(item.result.slice(0, 32), "base64");
|
|
133
|
+
const size = (header.length >= 24 && header.subarray(0, 8).equals(Buffer.from("89504e470d0a1a0a", "hex")) && header.readUInt32BE(16) > 0 && header.readUInt32BE(20) > 0 ? `${header.readUInt32BE(16)}x${header.readUInt32BE(20)}` : void 0) ?? (typeof item.size === "string" && /^[1-9]\d*x[1-9]\d*$/.test(item.size) ? item.size : void 0);
|
|
134
|
+
return {
|
|
135
|
+
type: "image",
|
|
136
|
+
...typeof item.id === "string" ? { id: item.id } : {},
|
|
137
|
+
base64: item.result,
|
|
138
|
+
mimeType: imageMimeType(item.result, item.output_format),
|
|
139
|
+
generation: {
|
|
140
|
+
route: "codex-responses",
|
|
141
|
+
...size ? { size } : {},
|
|
142
|
+
...typeof item.model === "string" ? { model: item.model } : {},
|
|
143
|
+
...typeof item.quality === "string" ? { quality: item.quality } : {},
|
|
144
|
+
...typeof item.background === "string" ? { background: item.background } : {}
|
|
145
|
+
},
|
|
146
|
+
...typeof item.revised_prompt === "string" ? { revisedPrompt: item.revised_prompt } : typeof item.revisedPrompt === "string" ? { revisedPrompt: item.revisedPrompt } : {}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
138
149
|
return {
|
|
139
150
|
type: "output-item",
|
|
140
151
|
item,
|
|
@@ -162,4 +173,4 @@ function normalizeOpenAIEvent(raw) {
|
|
|
162
173
|
//#endregion
|
|
163
174
|
export { CHATGPT_CODEX_RESPONSES_URL, CODEX_CLI_ORIGINATOR, CODEX_CLI_VERSION, OpenAIProtocolError, buildCodexIdentityHeaders, buildOpenAIResponsesRequest, codexCliUserAgent, imageMimeType, normalizeOpenAIEvent };
|
|
164
175
|
|
|
165
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJub2RlOm9zXCI7XG5cbmltcG9ydCB7IHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgfSBmcm9tIFwiLi4vLi4vLi4vYXBwbGljYXRpb24vcWdyaWQvcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgT3BlbkFJRWZmb3J0IH0gZnJvbSBcIi4uL2NvbW1vbi9lZmZvcnRcIjtcblxuZXhwb3J0IGNvbnN0IENIQVRHUFRfQ09ERVhfUkVTUE9OU0VTX1VSTCA9XG4gIFwiaHR0cHM6Ly9jaGF0Z3B0LmNvbS9iYWNrZW5kLWFwaS9jb2RleC9yZXNwb25zZXNcIiBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IENPREVYX0NMSV9PUklHSU5BVE9SID0gXCJjb2RleF9jbGlfcnNcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBDT0RFWF9DTElfVkVSU0lPTiA9IFwiMC4xNDcuMFwiIGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGV4VXNlckFnZW50UGxhdGZvcm0ge1xuICBvc1R5cGU6IHN0cmluZztcbiAgb3NWZXJzaW9uOiBzdHJpbmc7XG4gIGFyY2hpdGVjdHVyZTogc3RyaW5nO1xuICB0ZXJtaW5hbDogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjb2RleFBsYXRmb3JtKCk6IENvZGV4VXNlckFnZW50UGxhdGZvcm0ge1xuICBjb25zdCBuYW1lczogUGFydGlhbDxSZWNvcmQ8Tm9kZUpTLlBsYXRmb3JtLCBzdHJpbmc+PiA9IHtcbiAgICBkYXJ3aW46IFwiTWFjIE9TXCIsXG4gICAgbGludXg6IFwiTGludXhcIixcbiAgICB3aW4zMjogXCJXaW5kb3dzXCIsXG4gIH07XG4gIGNvbnN0IHRlcm1pbmFsID0gcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNO1xuICBjb25zdCB0ZXJtaW5hbFZlcnNpb24gPSBwcm9jZXNzLmVudi5URVJNX1BST0dSQU1fVkVSU0lPTjtcbiAgcmV0dXJuIHtcbiAgICBvc1R5cGU6IG5hbWVzW3Byb2Nlc3MucGxhdGZvcm1dID8/IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgb3NWZXJzaW9uOiBvcy5yZWxlYXNlKCksXG4gICAgYXJjaGl0ZWN0dXJlOiBwcm9jZXNzLmFyY2gsXG4gICAgdGVybWluYWw6IHRlcm1pbmFsID8gYCR7dGVybWluYWx9JHt0ZXJtaW5hbFZlcnNpb24gPyBgLyR7dGVybWluYWxWZXJzaW9ufWAgOiBcIlwifWAgOiBcInVua25vd25cIixcbiAgfTtcbn1cblxuLyoqIE1hdGNoZXMgdGhlIHBsYXRmb3JtL3Rlcm1pbmFsIHN1ZmZpeCBlbWl0dGVkIGJ5IHRoZSBwaW5uZWQgUnVzdCBDb2RleCBDTEkuICovXG5leHBvcnQgZnVuY3Rpb24gY29kZXhDbGlVc2VyQWdlbnQocGxhdGZvcm06IENvZGV4VXNlckFnZW50UGxhdGZvcm0gPSBjb2RleFBsYXRmb3JtKCkpOiBzdHJpbmcge1xuICByZXR1cm4gYGNvZGV4X2NsaV9ycy8ke0NPREVYX0NMSV9WRVJTSU9OfSAoJHtwbGF0Zm9ybS5vc1R5cGV9ICR7cGxhdGZvcm0ub3NWZXJzaW9ufTsgJHtwbGF0Zm9ybS5hcmNoaXRlY3R1cmV9KSAke3BsYXRmb3JtLnRlcm1pbmFsfWA7XG59XG5cbmV4cG9ydCB0eXBlIEpzb25WYWx1ZSA9XG4gIHwgbnVsbFxuICB8IGJvb2xlYW5cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCBKc29uVmFsdWVbXVxuICB8IHsgW2tleTogc3RyaW5nXTogSnNvblZhbHVlIH07XG5cbi8qKiBSYXcgUmVzcG9uc2VzIEFQSSBpdGVtcy4gS2VlcGluZyB0aGVzZSBvcGFxdWUgcHJlc2VydmVzIHRoZSBjb21wbGV0ZSBjb252ZXJzYXRpb24gaGlzdG9yeS4gKi9cbmV4cG9ydCB0eXBlIE9wZW5BSVJlc3BvbnNlSXRlbSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSU91dHB1dFNjaGVtYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNjaGVtYTogSnNvblZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSVJlc3BvbnNlc09wdGlvbnMge1xuICBtb2RlbDogc3RyaW5nO1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIGhpc3Rvcnk6IHJlYWRvbmx5IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29scz86IHJlYWRvbmx5IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29sQ2hvaWNlPzogc3RyaW5nIHwgT3BlbkFJUmVzcG9uc2VJdGVtO1xuICBwYXJhbGxlbFRvb2xDYWxscz86IGJvb2xlYW47XG4gIHJlYXNvbmluZz86IHtcbiAgICBlZmZvcnQ/OiBPcGVuQUlFZmZvcnQgfCBcIm5vbmVcIjtcbiAgICBzdW1tYXJ5PzogXCJhdXRvXCIgfCBcImNvbmNpc2VcIiB8IFwiZGV0YWlsZWRcIjtcbiAgfTtcbiAgdmVyYm9zaXR5PzogXCJsb3dcIiB8IFwibWVkaXVtXCIgfCBcImhpZ2hcIjtcbiAgc2VydmljZVRpZXI/OiBzdHJpbmc7XG4gIHByb21wdENhY2hlS2V5Pzogc3RyaW5nO1xuICBvdXRwdXRTY2hlbWE/OiBPcGVuQUlPdXRwdXRTY2hlbWE7XG4gIGltYWdlR2VuZXJhdGlvbj86IGJvb2xlYW4gfCBPcGVuQUlSZXNwb25zZUl0ZW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJUmVzcG9uc2VzUmVxdWVzdCB7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcbiAgaW5wdXQ6IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29scz86IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29sX2Nob2ljZTogc3RyaW5nIHwgT3BlbkFJUmVzcG9uc2VJdGVtO1xuICBwYXJhbGxlbF90b29sX2NhbGxzOiBib29sZWFuO1xuICByZWFzb25pbmc6IE9wZW5BSVJlc3BvbnNlc09wdGlvbnNbXCJyZWFzb25pbmdcIl0gfCBudWxsO1xuICBzdG9yZTogZmFsc2U7XG4gIHN0cmVhbTogdHJ1ZTtcbiAgaW5jbHVkZTogc3RyaW5nW107XG4gIHNlcnZpY2VfdGllcj86IHN0cmluZztcbiAgcHJvbXB0X2NhY2hlX2tleT86IHN0cmluZztcbiAgdGV4dD86IHtcbiAgICB2ZXJib3NpdHk/OiBcImxvd1wiIHwgXCJtZWRpdW1cIiB8IFwiaGlnaFwiO1xuICAgIGZvcm1hdD86IHtcbiAgICAgIHR5cGU6IFwianNvbl9zY2hlbWFcIjtcbiAgICAgIHN0cmljdDogdHJ1ZTtcbiAgICAgIHNjaGVtYTogSnNvblZhbHVlO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE9wZW5BSVJlc3BvbnNlc1JlcXVlc3QoXG4gIG9wdGlvbnM6IE9wZW5BSVJlc3BvbnNlc09wdGlvbnMsXG4pOiBPcGVuQUlSZXNwb25zZXNSZXF1ZXN0IHtcbiAgY29uc3QgdG9vbHMgPSBvcHRpb25zLnRvb2xzID8gWy4uLm9wdGlvbnMudG9vbHNdIDogW107XG4gIGlmIChvcHRpb25zLmltYWdlR2VuZXJhdGlvbikge1xuICAgIHRvb2xzLnB1c2goXG4gICAgICBvcHRpb25zLmltYWdlR2VuZXJhdGlvbiA9PT0gdHJ1ZVxuICAgICAgICA/IHsgdHlwZTogXCJpbWFnZV9nZW5lcmF0aW9uXCIgfVxuICAgICAgICA6IHsgdHlwZTogXCJpbWFnZV9nZW5lcmF0aW9uXCIsIC4uLm9wdGlvbnMuaW1hZ2VHZW5lcmF0aW9uIH0sXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPVxuICAgIG9wdGlvbnMudmVyYm9zaXR5IHx8IG9wdGlvbnMub3V0cHV0U2NoZW1hXG4gICAgICA/IHtcbiAgICAgICAgICAuLi4ob3B0aW9ucy52ZXJib3NpdHkgPyB7IHZlcmJvc2l0eTogb3B0aW9ucy52ZXJib3NpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5vdXRwdXRTY2hlbWFcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJqc29uX3NjaGVtYVwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgICAgc2NoZW1hOiBvcHRpb25zLm91dHB1dFNjaGVtYS5zY2hlbWEsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLm91dHB1dFNjaGVtYS5uYW1lID8/IFwiY29kZXhfb3V0cHV0X3NjaGVtYVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgIC4uLihvcHRpb25zLmluc3RydWN0aW9ucyA/IHsgaW5zdHJ1Y3Rpb25zOiBvcHRpb25zLmluc3RydWN0aW9ucyB9IDoge30pLFxuICAgIC8vIENvcHkgdGhlIGFycmF5LCBub3QgaXRzIGl0ZW1zOiByYXcgaXRlbXMgbXVzdCBhcnJpdmUgYnl0ZS1mb3ItYnl0ZSBlcXVpdmFsZW50LlxuICAgIGlucHV0OiBbLi4ub3B0aW9ucy5oaXN0b3J5XSxcbiAgICAuLi4odG9vbHMubGVuZ3RoID8geyB0b29scyB9IDoge30pLFxuICAgIHRvb2xfY2hvaWNlOiBvcHRpb25zLnRvb2xDaG9pY2UgPz8gXCJhdXRvXCIsXG4gICAgcGFyYWxsZWxfdG9vbF9jYWxsczogb3B0aW9ucy5wYXJhbGxlbFRvb2xDYWxscyA/PyB0cnVlLFxuICAgIHJlYXNvbmluZzogb3B0aW9ucy5yZWFzb25pbmcgPz8gbnVsbCxcbiAgICBzdG9yZTogZmFsc2UsXG4gICAgc3RyZWFtOiB0cnVlLFxuICAgIGluY2x1ZGU6IFtcInJlYXNvbmluZy5lbmNyeXB0ZWRfY29udGVudFwiXSxcbiAgICAuLi4ob3B0aW9ucy5zZXJ2aWNlVGllciA/IHsgc2VydmljZV90aWVyOiBvcHRpb25zLnNlcnZpY2VUaWVyIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMucHJvbXB0Q2FjaGVLZXkgPyB7IHByb21wdF9jYWNoZV9rZXk6IG9wdGlvbnMucHJvbXB0Q2FjaGVLZXkgfSA6IHt9KSxcbiAgICAuLi4odGV4dCA/IHsgdGV4dCB9IDoge30pLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDb2RleElkZW50aXR5SGVhZGVycyhcbiAgYWNjZXNzVG9rZW46IHN0cmluZyxcbiAgYWNjb3VudElkOiBzdHJpbmcsXG4gIGNvcnJlbGF0aW9uPzogeyBzZXNzaW9uSWQ/OiBzdHJpbmc7IHRocmVhZElkPzogc3RyaW5nOyBjbGllbnRSZXF1ZXN0SWQ/OiBzdHJpbmcgfSxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4ge1xuICAgIEFjY2VwdDogXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiLFxuICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxuICAgIFwiQ2hhdEdQVC1BY2NvdW50LUlEXCI6IGFjY291bnRJZCxcbiAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICBvcmlnaW5hdG9yOiBDT0RFWF9DTElfT1JJR0lOQVRPUixcbiAgICBcIlVzZXItQWdlbnRcIjogY29kZXhDbGlVc2VyQWdlbnQoKSxcbiAgICAuLi4oY29ycmVsYXRpb24/LnNlc3Npb25JZCA/IHsgXCJzZXNzaW9uLWlkXCI6IGNvcnJlbGF0aW9uLnNlc3Npb25JZCB9IDoge30pLFxuICAgIC4uLihjb3JyZWxhdGlvbj8udGhyZWFkSWQgPyB7IFwidGhyZWFkLWlkXCI6IGNvcnJlbGF0aW9uLnRocmVhZElkIH0gOiB7fSksXG4gICAgLi4uKGNvcnJlbGF0aW9uPy5jbGllbnRSZXF1ZXN0SWQgPyB7IFwieC1jbGllbnQtcmVxdWVzdC1pZFwiOiBjb3JyZWxhdGlvbi5jbGllbnRSZXF1ZXN0SWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlVc2FnZSB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlZElucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICByZWFzb25pbmdUb2tlbnM6IG51bWJlcjtcbiAgdG90YWxUb2tlbnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgT3BlbkFJTm9ybWFsaXplZEV2ZW50ID1cbiAgfCB7IHR5cGU6IFwiY3JlYXRlZFwiOyByZXNwb25zZUlkPzogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwidGV4dC1kZWx0YVwiOyB0ZXh0OiBzdHJpbmc7IGl0ZW1JZD86IHN0cmluZyB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbWFnZVwiO1xuICAgICAgaWQ/OiBzdHJpbmc7XG4gICAgICBiYXNlNjQ6IHN0cmluZztcbiAgICAgIG1pbWVUeXBlOiBcImltYWdlL3BuZ1wiIHwgXCJpbWFnZS9qcGVnXCIgfCBcImltYWdlL3dlYnBcIjtcbiAgICAgIHJldmlzZWRQcm9tcHQ/OiBzdHJpbmc7XG4gICAgICBnZW5lcmF0aW9uPzogSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGE7XG4gICAgfVxuICB8IHsgdHlwZTogXCJvdXRwdXQtaXRlbVwiOyBpdGVtOiBPcGVuQUlSZXNwb25zZUl0ZW07IGNvbXBsZXRlZD86IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogXCJjb21wbGV0ZWRcIjsgcmVzcG9uc2VJZDogc3RyaW5nOyB1c2FnZT86IE9wZW5BSVVzYWdlOyBtb2RlbD86IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcImVycm9yXCI7IGVycm9yOiBPcGVuQUlQcm90b2NvbEVycm9yIH07XG5cbmV4cG9ydCBjbGFzcyBPcGVuQUlQcm90b2NvbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvZGU/OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cz86IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmV0cnlBZnRlck1zPzogbnVtYmVyLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSBcIk9wZW5BSVByb3RvY29sRXJyb3JcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2FnZUZyb20odmFsdWU6IHVua25vd24pOiBPcGVuQUlVc2FnZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB1c2FnZSA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBpbnB1dERldGFpbHMgPSAodXNhZ2UuaW5wdXRfdG9rZW5zX2RldGFpbHMgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBvdXRwdXREZXRhaWxzID0gKHVzYWdlLm91dHB1dF90b2tlbnNfZGV0YWlscyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiB7XG4gICAgaW5wdXRUb2tlbnM6IE51bWJlcih1c2FnZS5pbnB1dF90b2tlbnMgPz8gMCksXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IE51bWJlcihpbnB1dERldGFpbHMuY2FjaGVkX3Rva2VucyA/PyAwKSxcbiAgICBvdXRwdXRUb2tlbnM6IE51bWJlcih1c2FnZS5vdXRwdXRfdG9rZW5zID8/IDApLFxuICAgIHJlYXNvbmluZ1Rva2VuczogTnVtYmVyKG91dHB1dERldGFpbHMucmVhc29uaW5nX3Rva2VucyA/PyAwKSxcbiAgICB0b3RhbFRva2VuczogTnVtYmVyKHVzYWdlLnRvdGFsX3Rva2VucyA/PyAwKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltYWdlTWltZVR5cGUoXG4gIGJhc2U2NDogc3RyaW5nLFxuICBvdXRwdXRGb3JtYXQ/OiB1bmtub3duLFxuKTogXCJpbWFnZS9wbmdcIiB8IFwiaW1hZ2UvanBlZ1wiIHwgXCJpbWFnZS93ZWJwXCIge1xuICAvLyBJbnNwZWN0IG9ubHkgdGhlIGhlYWRlciwgd2l0aG91dCBkZWNvZGluZyBhIHBvdGVudGlhbGx5IGxhcmdlIGltYWdlIHR3aWNlLlxuICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuZnJvbShiYXNlNjQuc2xpY2UoMCwgMjQpLCBcImJhc2U2NFwiKTtcbiAgaWYgKGhlYWRlci5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oWzEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTBdKSkpXG4gICAgcmV0dXJuIFwiaW1hZ2UvcG5nXCI7XG4gIGlmIChoZWFkZXJbMF0gPT09IDI1NSAmJiBoZWFkZXJbMV0gPT09IDIxNiAmJiBoZWFkZXJbMl0gPT09IDI1NSkgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICBpZiAoaGVhZGVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMCwgNCkgPT09IFwiUklGRlwiICYmIGhlYWRlci50b1N0cmluZyhcImFzY2lpXCIsIDgsIDEyKSA9PT0gXCJXRUJQXCIpXG4gICAgcmV0dXJuIFwiaW1hZ2Uvd2VicFwiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSBcImpwZWdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSBcIndlYnBcIikgcmV0dXJuIFwiaW1hZ2Uvd2VicFwiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSB1bmRlZmluZWQgfHwgb3V0cHV0Rm9ybWF0ID09PSBcInBuZ1wiKSByZXR1cm4gXCJpbWFnZS9wbmdcIjtcbiAgdGhyb3cgbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoYFVuc3VwcG9ydGVkIGltYWdlIG91dHB1dCBmb3JtYXQ6ICR7U3RyaW5nKG91dHB1dEZvcm1hdCl9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPcGVuQUlFdmVudChyYXc6IHVua25vd24pOiBPcGVuQUlOb3JtYWxpemVkRXZlbnQgfCB1bmRlZmluZWQge1xuICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSBcIm9iamVjdFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBldmVudCA9IHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgdHlwZSA9IFN0cmluZyhldmVudC50eXBlID8/IFwiXCIpO1xuICBpZiAodHlwZSA9PT0gXCJyZXNwb25zZS5jcmVhdGVkXCIpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGV2ZW50LnJlc3BvbnNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHR5cGU6IFwiY3JlYXRlZFwiLCAuLi4ocmVzcG9uc2U/LmlkID8geyByZXNwb25zZUlkOiBTdHJpbmcocmVzcG9uc2UuaWQpIH0gOiB7fSkgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJyZXNwb25zZS5vdXRwdXRfdGV4dC5kZWx0YVwiICYmIHR5cGVvZiBldmVudC5kZWx0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInRleHQtZGVsdGFcIixcbiAgICAgIHRleHQ6IGV2ZW50LmRlbHRhLFxuICAgICAgLi4uKHR5cGVvZiBldmVudC5pdGVtX2lkID09PSBcInN0cmluZ1wiID8geyBpdGVtSWQ6IGV2ZW50Lml0ZW1faWQgfSA6IHt9KSxcbiAgICB9O1xuICB9XG4gIGlmIChcbiAgICAodHlwZSA9PT0gXCJyZXNwb25zZS5vdXRwdXRfaXRlbS5hZGRlZFwiIHx8IHR5cGUgPT09IFwicmVzcG9uc2Uub3V0cHV0X2l0ZW0uZG9uZVwiKSAmJlxuICAgIGV2ZW50Lml0ZW0gJiZcbiAgICB0eXBlb2YgZXZlbnQuaXRlbSA9PT0gXCJvYmplY3RcIlxuICApIHtcbiAgICBjb25zdCBpdGVtID0gZXZlbnQuaXRlbSBhcyBPcGVuQUlSZXNwb25zZUl0ZW07XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gXCJpbWFnZV9nZW5lcmF0aW9uX2NhbGxcIiAmJiB0eXBlb2YgaXRlbS5yZXN1bHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiaW1hZ2VcIixcbiAgICAgICAgLi4uKHR5cGVvZiBpdGVtLmlkID09PSBcInN0cmluZ1wiID8geyBpZDogaXRlbS5pZCB9IDoge30pLFxuICAgICAgICBiYXNlNjQ6IGl0ZW0ucmVzdWx0LFxuICAgICAgICBtaW1lVHlwZTogaW1hZ2VNaW1lVHlwZShpdGVtLnJlc3VsdCwgaXRlbS5vdXRwdXRfZm9ybWF0KSxcbiAgICAgICAgLi4uKHR5cGVvZiBpdGVtLnJldmlzZWRfcHJvbXB0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyB7IHJldmlzZWRQcm9tcHQ6IGl0ZW0ucmV2aXNlZF9wcm9tcHQgfVxuICAgICAgICAgIDogdHlwZW9mIGl0ZW0ucmV2aXNlZFByb21wdCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgPyB7IHJldmlzZWRQcm9tcHQ6IGl0ZW0ucmV2aXNlZFByb21wdCB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IHR5cGU6IFwib3V0cHV0LWl0ZW1cIiwgaXRlbSwgY29tcGxldGVkOiB0eXBlID09PSBcInJlc3BvbnNlLm91dHB1dF9pdGVtLmRvbmVcIiB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcInJlc3BvbnNlLmNvbXBsZXRlZFwiKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSAoZXZlbnQucmVzcG9uc2UgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbXBsZXRlZFwiLFxuICAgICAgcmVzcG9uc2VJZDogU3RyaW5nKHJlc3BvbnNlLmlkID8/IFwiXCIpLFxuICAgICAgLi4uKHJlc3BvbnNlLnVzYWdlID8geyB1c2FnZTogdXNhZ2VGcm9tKHJlc3BvbnNlLnVzYWdlKSB9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiByZXNwb25zZS5tb2RlbCA9PT0gXCJzdHJpbmdcIiA/IHsgbW9kZWw6IHJlc3BvbnNlLm1vZGVsIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJlcnJvclwiIHx8IHR5cGUgPT09IFwicmVzcG9uc2UuZmFpbGVkXCIgfHwgdHlwZSA9PT0gXCJyZXNwb25zZS5pbmNvbXBsZXRlXCIpIHtcbiAgICBjb25zdCBzb3VyY2UgPSAoZXZlbnQuZXJyb3IgPz8gZXZlbnQucmVzcG9uc2UgPz8gZXZlbnQpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG5lc3RlZCA9IChzb3VyY2UuZXJyb3IgPz8gc291cmNlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgZXJyb3I6IG5ldyBPcGVuQUlQcm90b2NvbEVycm9yKFxuICAgICAgICBTdHJpbmcobmVzdGVkLm1lc3NhZ2UgPz8gYE9wZW5BSSBzdHJlYW0gZW5kZWQgd2l0aCAke3R5cGV9YCksXG4gICAgICAgIHR5cGVvZiBuZXN0ZWQuY29kZSA9PT0gXCJzdHJpbmdcIiA/IG5lc3RlZC5jb2RlIDogdW5kZWZpbmVkLFxuICAgICAgKSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBS0EsTUFBYSw4QkFDWDtBQUVGLE1BQWEsdUJBQXVCO0FBQ3BDLE1BQWEsb0JBQW9CO0FBU2pDLFNBQVMsZ0JBQXdDO0NBQy9DLE1BQU0sUUFBa0Q7RUFDdEQsUUFBUTtFQUNSLE9BQU87RUFDUCxPQUFPO0NBQ1Q7Q0FDQSxNQUFNLFdBQVcsUUFBUSxJQUFJO0NBQzdCLE1BQU0sa0JBQWtCLFFBQVEsSUFBSTtDQUNwQyxPQUFPO0VB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
|
|
176
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJub2RlOm9zXCI7XG5cbmltcG9ydCB7IHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgfSBmcm9tIFwiLi4vLi4vLi4vYXBwbGljYXRpb24vcWdyaWQvcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgT3BlbkFJRWZmb3J0IH0gZnJvbSBcIi4uL2NvbW1vbi9lZmZvcnRcIjtcblxuZXhwb3J0IGNvbnN0IENIQVRHUFRfQ09ERVhfUkVTUE9OU0VTX1VSTCA9XG4gIFwiaHR0cHM6Ly9jaGF0Z3B0LmNvbS9iYWNrZW5kLWFwaS9jb2RleC9yZXNwb25zZXNcIiBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IENPREVYX0NMSV9PUklHSU5BVE9SID0gXCJjb2RleF9jbGlfcnNcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBDT0RFWF9DTElfVkVSU0lPTiA9IFwiMC4xNDcuMFwiIGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGV4VXNlckFnZW50UGxhdGZvcm0ge1xuICBvc1R5cGU6IHN0cmluZztcbiAgb3NWZXJzaW9uOiBzdHJpbmc7XG4gIGFyY2hpdGVjdHVyZTogc3RyaW5nO1xuICB0ZXJtaW5hbDogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjb2RleFBsYXRmb3JtKCk6IENvZGV4VXNlckFnZW50UGxhdGZvcm0ge1xuICBjb25zdCBuYW1lczogUGFydGlhbDxSZWNvcmQ8Tm9kZUpTLlBsYXRmb3JtLCBzdHJpbmc+PiA9IHtcbiAgICBkYXJ3aW46IFwiTWFjIE9TXCIsXG4gICAgbGludXg6IFwiTGludXhcIixcbiAgICB3aW4zMjogXCJXaW5kb3dzXCIsXG4gIH07XG4gIGNvbnN0IHRlcm1pbmFsID0gcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNO1xuICBjb25zdCB0ZXJtaW5hbFZlcnNpb24gPSBwcm9jZXNzLmVudi5URVJNX1BST0dSQU1fVkVSU0lPTjtcbiAgcmV0dXJuIHtcbiAgICBvc1R5cGU6IG5hbWVzW3Byb2Nlc3MucGxhdGZvcm1dID8/IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgb3NWZXJzaW9uOiBvcy5yZWxlYXNlKCksXG4gICAgYXJjaGl0ZWN0dXJlOiBwcm9jZXNzLmFyY2gsXG4gICAgdGVybWluYWw6IHRlcm1pbmFsID8gYCR7dGVybWluYWx9JHt0ZXJtaW5hbFZlcnNpb24gPyBgLyR7dGVybWluYWxWZXJzaW9ufWAgOiBcIlwifWAgOiBcInVua25vd25cIixcbiAgfTtcbn1cblxuLyoqIE1hdGNoZXMgdGhlIHBsYXRmb3JtL3Rlcm1pbmFsIHN1ZmZpeCBlbWl0dGVkIGJ5IHRoZSBwaW5uZWQgUnVzdCBDb2RleCBDTEkuICovXG5leHBvcnQgZnVuY3Rpb24gY29kZXhDbGlVc2VyQWdlbnQocGxhdGZvcm06IENvZGV4VXNlckFnZW50UGxhdGZvcm0gPSBjb2RleFBsYXRmb3JtKCkpOiBzdHJpbmcge1xuICByZXR1cm4gYGNvZGV4X2NsaV9ycy8ke0NPREVYX0NMSV9WRVJTSU9OfSAoJHtwbGF0Zm9ybS5vc1R5cGV9ICR7cGxhdGZvcm0ub3NWZXJzaW9ufTsgJHtwbGF0Zm9ybS5hcmNoaXRlY3R1cmV9KSAke3BsYXRmb3JtLnRlcm1pbmFsfWA7XG59XG5cbmV4cG9ydCB0eXBlIEpzb25WYWx1ZSA9XG4gIHwgbnVsbFxuICB8IGJvb2xlYW5cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCBKc29uVmFsdWVbXVxuICB8IHsgW2tleTogc3RyaW5nXTogSnNvblZhbHVlIH07XG5cbi8qKiBSYXcgUmVzcG9uc2VzIEFQSSBpdGVtcy4gS2VlcGluZyB0aGVzZSBvcGFxdWUgcHJlc2VydmVzIHRoZSBjb21wbGV0ZSBjb252ZXJzYXRpb24gaGlzdG9yeS4gKi9cbmV4cG9ydCB0eXBlIE9wZW5BSVJlc3BvbnNlSXRlbSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSU91dHB1dFNjaGVtYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNjaGVtYTogSnNvblZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSVJlc3BvbnNlc09wdGlvbnMge1xuICBtb2RlbDogc3RyaW5nO1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIGhpc3Rvcnk6IHJlYWRvbmx5IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29scz86IHJlYWRvbmx5IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29sQ2hvaWNlPzogc3RyaW5nIHwgT3BlbkFJUmVzcG9uc2VJdGVtO1xuICBwYXJhbGxlbFRvb2xDYWxscz86IGJvb2xlYW47XG4gIHJlYXNvbmluZz86IHtcbiAgICBlZmZvcnQ/OiBPcGVuQUlFZmZvcnQgfCBcIm5vbmVcIjtcbiAgICBzdW1tYXJ5PzogXCJhdXRvXCIgfCBcImNvbmNpc2VcIiB8IFwiZGV0YWlsZWRcIjtcbiAgfTtcbiAgdmVyYm9zaXR5PzogXCJsb3dcIiB8IFwibWVkaXVtXCIgfCBcImhpZ2hcIjtcbiAgc2VydmljZVRpZXI/OiBzdHJpbmc7XG4gIHByb21wdENhY2hlS2V5Pzogc3RyaW5nO1xuICBvdXRwdXRTY2hlbWE/OiBPcGVuQUlPdXRwdXRTY2hlbWE7XG4gIGltYWdlR2VuZXJhdGlvbj86IGJvb2xlYW4gfCBPcGVuQUlSZXNwb25zZUl0ZW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJUmVzcG9uc2VzUmVxdWVzdCB7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcbiAgaW5wdXQ6IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29scz86IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29sX2Nob2ljZTogc3RyaW5nIHwgT3BlbkFJUmVzcG9uc2VJdGVtO1xuICBwYXJhbGxlbF90b29sX2NhbGxzOiBib29sZWFuO1xuICByZWFzb25pbmc6IE9wZW5BSVJlc3BvbnNlc09wdGlvbnNbXCJyZWFzb25pbmdcIl0gfCBudWxsO1xuICBzdG9yZTogZmFsc2U7XG4gIHN0cmVhbTogdHJ1ZTtcbiAgaW5jbHVkZTogc3RyaW5nW107XG4gIHNlcnZpY2VfdGllcj86IHN0cmluZztcbiAgcHJvbXB0X2NhY2hlX2tleT86IHN0cmluZztcbiAgdGV4dD86IHtcbiAgICB2ZXJib3NpdHk/OiBcImxvd1wiIHwgXCJtZWRpdW1cIiB8IFwiaGlnaFwiO1xuICAgIGZvcm1hdD86IHtcbiAgICAgIHR5cGU6IFwianNvbl9zY2hlbWFcIjtcbiAgICAgIHN0cmljdDogdHJ1ZTtcbiAgICAgIHNjaGVtYTogSnNvblZhbHVlO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE9wZW5BSVJlc3BvbnNlc1JlcXVlc3QoXG4gIG9wdGlvbnM6IE9wZW5BSVJlc3BvbnNlc09wdGlvbnMsXG4pOiBPcGVuQUlSZXNwb25zZXNSZXF1ZXN0IHtcbiAgY29uc3QgdG9vbHMgPSBvcHRpb25zLnRvb2xzID8gWy4uLm9wdGlvbnMudG9vbHNdIDogW107XG4gIGlmIChvcHRpb25zLmltYWdlR2VuZXJhdGlvbikge1xuICAgIHRvb2xzLnB1c2goXG4gICAgICBvcHRpb25zLmltYWdlR2VuZXJhdGlvbiA9PT0gdHJ1ZVxuICAgICAgICA/IHsgdHlwZTogXCJpbWFnZV9nZW5lcmF0aW9uXCIgfVxuICAgICAgICA6IHsgdHlwZTogXCJpbWFnZV9nZW5lcmF0aW9uXCIsIC4uLm9wdGlvbnMuaW1hZ2VHZW5lcmF0aW9uIH0sXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPVxuICAgIG9wdGlvbnMudmVyYm9zaXR5IHx8IG9wdGlvbnMub3V0cHV0U2NoZW1hXG4gICAgICA/IHtcbiAgICAgICAgICAuLi4ob3B0aW9ucy52ZXJib3NpdHkgPyB7IHZlcmJvc2l0eTogb3B0aW9ucy52ZXJib3NpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5vdXRwdXRTY2hlbWFcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJqc29uX3NjaGVtYVwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgICAgc2NoZW1hOiBvcHRpb25zLm91dHB1dFNjaGVtYS5zY2hlbWEsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLm91dHB1dFNjaGVtYS5uYW1lID8/IFwiY29kZXhfb3V0cHV0X3NjaGVtYVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgIC4uLihvcHRpb25zLmluc3RydWN0aW9ucyA/IHsgaW5zdHJ1Y3Rpb25zOiBvcHRpb25zLmluc3RydWN0aW9ucyB9IDoge30pLFxuICAgIC8vIENvcHkgdGhlIGFycmF5LCBub3QgaXRzIGl0ZW1zOiByYXcgaXRlbXMgbXVzdCBhcnJpdmUgYnl0ZS1mb3ItYnl0ZSBlcXVpdmFsZW50LlxuICAgIGlucHV0OiBbLi4ub3B0aW9ucy5oaXN0b3J5XSxcbiAgICAuLi4odG9vbHMubGVuZ3RoID8geyB0b29scyB9IDoge30pLFxuICAgIHRvb2xfY2hvaWNlOiBvcHRpb25zLnRvb2xDaG9pY2UgPz8gXCJhdXRvXCIsXG4gICAgcGFyYWxsZWxfdG9vbF9jYWxsczogb3B0aW9ucy5wYXJhbGxlbFRvb2xDYWxscyA/PyB0cnVlLFxuICAgIHJlYXNvbmluZzogb3B0aW9ucy5yZWFzb25pbmcgPz8gbnVsbCxcbiAgICBzdG9yZTogZmFsc2UsXG4gICAgc3RyZWFtOiB0cnVlLFxuICAgIGluY2x1ZGU6IFtcInJlYXNvbmluZy5lbmNyeXB0ZWRfY29udGVudFwiXSxcbiAgICAuLi4ob3B0aW9ucy5zZXJ2aWNlVGllciA/IHsgc2VydmljZV90aWVyOiBvcHRpb25zLnNlcnZpY2VUaWVyIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMucHJvbXB0Q2FjaGVLZXkgPyB7IHByb21wdF9jYWNoZV9rZXk6IG9wdGlvbnMucHJvbXB0Q2FjaGVLZXkgfSA6IHt9KSxcbiAgICAuLi4odGV4dCA/IHsgdGV4dCB9IDoge30pLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDb2RleElkZW50aXR5SGVhZGVycyhcbiAgYWNjZXNzVG9rZW46IHN0cmluZyxcbiAgYWNjb3VudElkOiBzdHJpbmcsXG4gIGNvcnJlbGF0aW9uPzogeyBzZXNzaW9uSWQ/OiBzdHJpbmc7IHRocmVhZElkPzogc3RyaW5nOyBjbGllbnRSZXF1ZXN0SWQ/OiBzdHJpbmcgfSxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4ge1xuICAgIEFjY2VwdDogXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiLFxuICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxuICAgIFwiQ2hhdEdQVC1BY2NvdW50LUlEXCI6IGFjY291bnRJZCxcbiAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICBvcmlnaW5hdG9yOiBDT0RFWF9DTElfT1JJR0lOQVRPUixcbiAgICBcIlVzZXItQWdlbnRcIjogY29kZXhDbGlVc2VyQWdlbnQoKSxcbiAgICAuLi4oY29ycmVsYXRpb24/LnNlc3Npb25JZCA/IHsgXCJzZXNzaW9uLWlkXCI6IGNvcnJlbGF0aW9uLnNlc3Npb25JZCB9IDoge30pLFxuICAgIC4uLihjb3JyZWxhdGlvbj8udGhyZWFkSWQgPyB7IFwidGhyZWFkLWlkXCI6IGNvcnJlbGF0aW9uLnRocmVhZElkIH0gOiB7fSksXG4gICAgLi4uKGNvcnJlbGF0aW9uPy5jbGllbnRSZXF1ZXN0SWQgPyB7IFwieC1jbGllbnQtcmVxdWVzdC1pZFwiOiBjb3JyZWxhdGlvbi5jbGllbnRSZXF1ZXN0SWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlVc2FnZSB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlZElucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICByZWFzb25pbmdUb2tlbnM6IG51bWJlcjtcbiAgdG90YWxUb2tlbnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgT3BlbkFJTm9ybWFsaXplZEV2ZW50ID1cbiAgfCB7IHR5cGU6IFwiY3JlYXRlZFwiOyByZXNwb25zZUlkPzogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwidGV4dC1kZWx0YVwiOyB0ZXh0OiBzdHJpbmc7IGl0ZW1JZD86IHN0cmluZyB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbWFnZVwiO1xuICAgICAgaWQ/OiBzdHJpbmc7XG4gICAgICBiYXNlNjQ6IHN0cmluZztcbiAgICAgIG1pbWVUeXBlOiBcImltYWdlL3BuZ1wiIHwgXCJpbWFnZS9qcGVnXCIgfCBcImltYWdlL3dlYnBcIjtcbiAgICAgIHJldmlzZWRQcm9tcHQ/OiBzdHJpbmc7XG4gICAgICBnZW5lcmF0aW9uPzogSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGE7XG4gICAgfVxuICB8IHsgdHlwZTogXCJvdXRwdXQtaXRlbVwiOyBpdGVtOiBPcGVuQUlSZXNwb25zZUl0ZW07IGNvbXBsZXRlZD86IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogXCJjb21wbGV0ZWRcIjsgcmVzcG9uc2VJZDogc3RyaW5nOyB1c2FnZT86IE9wZW5BSVVzYWdlOyBtb2RlbD86IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcImVycm9yXCI7IGVycm9yOiBPcGVuQUlQcm90b2NvbEVycm9yIH07XG5cbmV4cG9ydCBjbGFzcyBPcGVuQUlQcm90b2NvbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvZGU/OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cz86IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmV0cnlBZnRlck1zPzogbnVtYmVyLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSBcIk9wZW5BSVByb3RvY29sRXJyb3JcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2FnZUZyb20odmFsdWU6IHVua25vd24pOiBPcGVuQUlVc2FnZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB1c2FnZSA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBpbnB1dERldGFpbHMgPSAodXNhZ2UuaW5wdXRfdG9rZW5zX2RldGFpbHMgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBvdXRwdXREZXRhaWxzID0gKHVzYWdlLm91dHB1dF90b2tlbnNfZGV0YWlscyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiB7XG4gICAgaW5wdXRUb2tlbnM6IE51bWJlcih1c2FnZS5pbnB1dF90b2tlbnMgPz8gMCksXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IE51bWJlcihpbnB1dERldGFpbHMuY2FjaGVkX3Rva2VucyA/PyAwKSxcbiAgICBvdXRwdXRUb2tlbnM6IE51bWJlcih1c2FnZS5vdXRwdXRfdG9rZW5zID8/IDApLFxuICAgIHJlYXNvbmluZ1Rva2VuczogTnVtYmVyKG91dHB1dERldGFpbHMucmVhc29uaW5nX3Rva2VucyA/PyAwKSxcbiAgICB0b3RhbFRva2VuczogTnVtYmVyKHVzYWdlLnRvdGFsX3Rva2VucyA/PyAwKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltYWdlTWltZVR5cGUoXG4gIGJhc2U2NDogc3RyaW5nLFxuICBvdXRwdXRGb3JtYXQ/OiB1bmtub3duLFxuKTogXCJpbWFnZS9wbmdcIiB8IFwiaW1hZ2UvanBlZ1wiIHwgXCJpbWFnZS93ZWJwXCIge1xuICAvLyBJbnNwZWN0IG9ubHkgdGhlIGhlYWRlciwgd2l0aG91dCBkZWNvZGluZyBhIHBvdGVudGlhbGx5IGxhcmdlIGltYWdlIHR3aWNlLlxuICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuZnJvbShiYXNlNjQuc2xpY2UoMCwgMjQpLCBcImJhc2U2NFwiKTtcbiAgaWYgKGhlYWRlci5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oWzEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTBdKSkpXG4gICAgcmV0dXJuIFwiaW1hZ2UvcG5nXCI7XG4gIGlmIChoZWFkZXJbMF0gPT09IDI1NSAmJiBoZWFkZXJbMV0gPT09IDIxNiAmJiBoZWFkZXJbMl0gPT09IDI1NSkgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICBpZiAoaGVhZGVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMCwgNCkgPT09IFwiUklGRlwiICYmIGhlYWRlci50b1N0cmluZyhcImFzY2lpXCIsIDgsIDEyKSA9PT0gXCJXRUJQXCIpXG4gICAgcmV0dXJuIFwiaW1hZ2Uvd2VicFwiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSBcImpwZWdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSBcIndlYnBcIikgcmV0dXJuIFwiaW1hZ2Uvd2VicFwiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSB1bmRlZmluZWQgfHwgb3V0cHV0Rm9ybWF0ID09PSBcInBuZ1wiKSByZXR1cm4gXCJpbWFnZS9wbmdcIjtcbiAgdGhyb3cgbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoYFVuc3VwcG9ydGVkIGltYWdlIG91dHB1dCBmb3JtYXQ6ICR7U3RyaW5nKG91dHB1dEZvcm1hdCl9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPcGVuQUlFdmVudChyYXc6IHVua25vd24pOiBPcGVuQUlOb3JtYWxpemVkRXZlbnQgfCB1bmRlZmluZWQge1xuICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSBcIm9iamVjdFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBldmVudCA9IHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgdHlwZSA9IFN0cmluZyhldmVudC50eXBlID8/IFwiXCIpO1xuICBpZiAodHlwZSA9PT0gXCJyZXNwb25zZS5jcmVhdGVkXCIpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGV2ZW50LnJlc3BvbnNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHR5cGU6IFwiY3JlYXRlZFwiLCAuLi4ocmVzcG9uc2U/LmlkID8geyByZXNwb25zZUlkOiBTdHJpbmcocmVzcG9uc2UuaWQpIH0gOiB7fSkgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJyZXNwb25zZS5vdXRwdXRfdGV4dC5kZWx0YVwiICYmIHR5cGVvZiBldmVudC5kZWx0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInRleHQtZGVsdGFcIixcbiAgICAgIHRleHQ6IGV2ZW50LmRlbHRhLFxuICAgICAgLi4uKHR5cGVvZiBldmVudC5pdGVtX2lkID09PSBcInN0cmluZ1wiID8geyBpdGVtSWQ6IGV2ZW50Lml0ZW1faWQgfSA6IHt9KSxcbiAgICB9O1xuICB9XG4gIGlmIChcbiAgICAodHlwZSA9PT0gXCJyZXNwb25zZS5vdXRwdXRfaXRlbS5hZGRlZFwiIHx8IHR5cGUgPT09IFwicmVzcG9uc2Uub3V0cHV0X2l0ZW0uZG9uZVwiKSAmJlxuICAgIGV2ZW50Lml0ZW0gJiZcbiAgICB0eXBlb2YgZXZlbnQuaXRlbSA9PT0gXCJvYmplY3RcIlxuICApIHtcbiAgICBjb25zdCBpdGVtID0gZXZlbnQuaXRlbSBhcyBPcGVuQUlSZXNwb25zZUl0ZW07XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gXCJpbWFnZV9nZW5lcmF0aW9uX2NhbGxcIiAmJiB0eXBlb2YgaXRlbS5yZXN1bHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIFBORyBleHBvc2VzIGRpbWVuc2lvbnMgaW4gaXRzIGZpeGVkIGhlYWRlci4gT3RoZXIgZm9ybWF0cyByZXRhaW4gdGhlXG4gICAgICAvLyBiYWNrZW5kJ3Mgb2JzZXJ2ZWQgc2l6ZTsgbmV2ZXIgc3Vic3RpdHV0ZSByZXF1ZXN0ZWQgaW1hZ2UgY29udHJvbHMuXG4gICAgICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuZnJvbShpdGVtLnJlc3VsdC5zbGljZSgwLCAzMiksIFwiYmFzZTY0XCIpO1xuICAgICAgY29uc3QgcG5nU2l6ZSA9XG4gICAgICAgIGhlYWRlci5sZW5ndGggPj0gMjQgJiZcbiAgICAgICAgaGVhZGVyLnN1YmFycmF5KDAsIDgpLmVxdWFscyhCdWZmZXIuZnJvbShcIjg5NTA0ZTQ3MGQwYTFhMGFcIiwgXCJoZXhcIikpICYmXG4gICAgICAgIGhlYWRlci5yZWFkVUludDMyQkUoMTYpID4gMCAmJlxuICAgICAgICBoZWFkZXIucmVhZFVJbnQzMkJFKDIwKSA+IDBcbiAgICAgICAgICA/IGAke2hlYWRlci5yZWFkVUludDMyQkUoMTYpfXgke2hlYWRlci5yZWFkVUludDMyQkUoMjApfWBcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHNpemUgPVxuICAgICAgICBwbmdTaXplID8/XG4gICAgICAgICh0eXBlb2YgaXRlbS5zaXplID09PSBcInN0cmluZ1wiICYmIC9eWzEtOV1cXGQqeFsxLTldXFxkKiQvLnRlc3QoaXRlbS5zaXplKVxuICAgICAgICAgID8gaXRlbS5zaXplXG4gICAgICAgICAgOiB1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJpbWFnZVwiLFxuICAgICAgICAuLi4odHlwZW9mIGl0ZW0uaWQgPT09IFwic3RyaW5nXCIgPyB7IGlkOiBpdGVtLmlkIH0gOiB7fSksXG4gICAgICAgIGJhc2U2NDogaXRlbS5yZXN1bHQsXG4gICAgICAgIG1pbWVUeXBlOiBpbWFnZU1pbWVUeXBlKGl0ZW0ucmVzdWx0LCBpdGVtLm91dHB1dF9mb3JtYXQpLFxuICAgICAgICBnZW5lcmF0aW9uOiB7XG4gICAgICAgICAgcm91dGU6IFwiY29kZXgtcmVzcG9uc2VzXCIsXG4gICAgICAgICAgLi4uKHNpemUgPyB7IHNpemUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4odHlwZW9mIGl0ZW0ubW9kZWwgPT09IFwic3RyaW5nXCIgPyB7IG1vZGVsOiBpdGVtLm1vZGVsIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHR5cGVvZiBpdGVtLnF1YWxpdHkgPT09IFwic3RyaW5nXCIgPyB7IHF1YWxpdHk6IGl0ZW0ucXVhbGl0eSB9IDoge30pLFxuICAgICAgICAgIC4uLih0eXBlb2YgaXRlbS5iYWNrZ3JvdW5kID09PSBcInN0cmluZ1wiID8geyBiYWNrZ3JvdW5kOiBpdGVtLmJhY2tncm91bmQgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKHR5cGVvZiBpdGVtLnJldmlzZWRfcHJvbXB0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyB7IHJldmlzZWRQcm9tcHQ6IGl0ZW0ucmV2aXNlZF9wcm9tcHQgfVxuICAgICAgICAgIDogdHlwZW9mIGl0ZW0ucmV2aXNlZFByb21wdCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgPyB7IHJldmlzZWRQcm9tcHQ6IGl0ZW0ucmV2aXNlZFByb21wdCB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IHR5cGU6IFwib3V0cHV0LWl0ZW1cIiwgaXRlbSwgY29tcGxldGVkOiB0eXBlID09PSBcInJlc3BvbnNlLm91dHB1dF9pdGVtLmRvbmVcIiB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcInJlc3BvbnNlLmNvbXBsZXRlZFwiKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSAoZXZlbnQucmVzcG9uc2UgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbXBsZXRlZFwiLFxuICAgICAgcmVzcG9uc2VJZDogU3RyaW5nKHJlc3BvbnNlLmlkID8/IFwiXCIpLFxuICAgICAgLi4uKHJlc3BvbnNlLnVzYWdlID8geyB1c2FnZTogdXNhZ2VGcm9tKHJlc3BvbnNlLnVzYWdlKSB9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiByZXNwb25zZS5tb2RlbCA9PT0gXCJzdHJpbmdcIiA/IHsgbW9kZWw6IHJlc3BvbnNlLm1vZGVsIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJlcnJvclwiIHx8IHR5cGUgPT09IFwicmVzcG9uc2UuZmFpbGVkXCIgfHwgdHlwZSA9PT0gXCJyZXNwb25zZS5pbmNvbXBsZXRlXCIpIHtcbiAgICBjb25zdCBzb3VyY2UgPSAoZXZlbnQuZXJyb3IgPz8gZXZlbnQucmVzcG9uc2UgPz8gZXZlbnQpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG5lc3RlZCA9IChzb3VyY2UuZXJyb3IgPz8gc291cmNlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgZXJyb3I6IG5ldyBPcGVuQUlQcm90b2NvbEVycm9yKFxuICAgICAgICBTdHJpbmcobmVzdGVkLm1lc3NhZ2UgPz8gYE9wZW5BSSBzdHJlYW0gZW5kZWQgd2l0aCAke3R5cGV9YCksXG4gICAgICAgIHR5cGVvZiBuZXN0ZWQuY29kZSA9PT0gXCJzdHJpbmdcIiA/IG5lc3RlZC5jb2RlIDogdW5kZWZpbmVkLFxuICAgICAgKSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBS0EsTUFBYSw4QkFDWDtBQUVGLE1BQWEsdUJBQXVCO0FBQ3BDLE1BQWEsb0JBQW9CO0FBU2pDLFNBQVMsZ0JBQXdDO0NBQy9DLE1BQU0sUUFBa0Q7RUFDdEQsUUFBUTtFQUNSLE9BQU87RUFDUCxPQUFPO0NBQ1Q7Q0FDQSxNQUFNLFdBQVcsUUFBUSxJQUFJO0NBQzdCLE1BQU0sa0JBQWtCLFFBQVEsSUFBSTtDQUNwQyxPQUFPO0VBQ0wsUUFBUSxNQUFNLFFBQVEsYUFBYSxRQUFRO0VBQzNDLFdBQVcsR0FBRyxRQUFRO0VBQ3RCLGNBQWMsUUFBUTtFQUN0QixVQUFVLFdBQVcsR0FBRyxXQUFXLGtCQUFrQixJQUFJLG9CQUFvQixPQUFPO0NBQ3RGO0FBQ0Y7O0FBR0EsU0FBZ0Isa0JBQWtCLFdBQW1DLGNBQWMsR0FBVztDQUM1RixPQUFPLGdCQUFnQixrQkFBa0IsSUFBSSxTQUFTLE9BQU8sR0FBRyxTQUFTLFVBQVUsSUFBSSxTQUFTLGFBQWEsSUFBSSxTQUFTO0FBQzVIO0FBNERBLFNBQWdCLDRCQUNkLFNBQ3dCO0NBQ3hCLE1BQU0sUUFBUSxRQUFRLFFBQVEsQ0FBQyxHQUFHLFFBQVEsS0FBSyxJQUFJLENBQUM7Q0FDcEQsSUFBSSxRQUFRLGlCQUNWLE1BQU0sS0FDSixRQUFRLG9CQUFvQixPQUN4QixFQUFFLE1BQU0sbUJBQW1CLElBQzNCO0VBQUUsTUFBTTtFQUFvQixHQUFHLFFBQVE7Q0FBZ0IsQ0FDN0Q7Q0FHRixNQUFNLE9BQ0osUUFBUSxhQUFhLFFBQVEsZUFDekI7RUFDRSxHQUFJLFFBQVEsWUFBWSxFQUFFLFdBQVcsUUFBUSxVQUFVLElBQUksQ0FBQztFQUM1RCxHQUFJLFFBQVEsZUFDUixFQUNFLFFBQVE7R0FDTixNQUFNO0dBQ04sUUFBUTtHQUNSLFFBQVEsUUFBUSxhQUFhO0dBQzdCLE1BQU0sUUFBUSxhQUFhLFFBQVE7RUFDckMsRUFDRixJQUNBLENBQUM7Q0FDUCxJQUNBO0NBRU4sT0FBTztFQUNMLE9BQU8sUUFBUTtFQUNmLEdBQUksUUFBUSxlQUFlLEVBQUUsY0FBYyxRQUFRLGFBQWEsSUFBSSxDQUFDO0VBRXJFLE9BQU8sQ0FBQyxHQUFHLFFBQVEsT0FBTztFQUMxQixHQUFJLE1BQU0sU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDO0VBQ2hDLGFBQWEsUUFBUSxjQUFjO0VBQ25DLHFCQUFxQixRQUFRLHFCQUFxQjtFQUNsRCxXQUFXLFFBQVEsYUFBYTtFQUNoQyxPQUFPO0VBQ1AsUUFBUTtFQUNSLFNBQVMsQ0FBQyw2QkFBNkI7RUFDdkMsR0FBSSxRQUFRLGNBQWMsRUFBRSxjQUFjLFFBQVEsWUFBWSxJQUFJLENBQUM7RUFDbkUsR0FBSSxRQUFRLGlCQUFpQixFQUFFLGtCQUFrQixRQUFRLGVBQWUsSUFBSSxDQUFDO0VBQzdFLEdBQUksT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDO0NBQ3pCO0FBQ0Y7QUFFQSxTQUFnQiwwQkFDZCxhQUNBLFdBQ0EsYUFDd0I7Q0FDeEIsT0FBTztFQUNMLFFBQVE7RUFDUixlQUFlLFVBQVU7RUFDekIsc0JBQXNCO0VBQ3RCLGdCQUFnQjtFQUNoQixZQUFZO0VBQ1osY0FBYyxrQkFBa0I7RUFDaEMsR0FBSSxhQUFhLFlBQVksRUFBRSxjQUFjLFlBQVksVUFBVSxJQUFJLENBQUM7RUFDeEUsR0FBSSxhQUFhLFdBQVcsRUFBRSxhQUFhLFlBQVksU0FBUyxJQUFJLENBQUM7RUFDckUsR0FBSSxhQUFhLGtCQUFrQixFQUFFLHVCQUF1QixZQUFZLGdCQUFnQixJQUFJLENBQUM7Q0FDL0Y7QUFDRjtBQXlCQSxJQUFhLHNCQUFiLGNBQXlDLE1BQU07Q0FHM0I7Q0FDQTtDQUNBO0NBSmxCLFlBQ0UsU0FDQSxNQUNBLFFBQ0EsY0FDQTtFQUNBLE1BQU0sT0FBTztFQUpHLEtBQUEsT0FBQTtFQUNBLEtBQUEsU0FBQTtFQUNBLEtBQUEsZUFBQTtFQUdoQixLQUFLLE9BQU87Q0FDZDtBQUNGO0FBRUEsU0FBUyxVQUFVLE9BQXlDO0NBQzFELElBQUksQ0FBQyxTQUFTLE9BQU8sVUFBVSxVQUFVLE9BQU87Q0FDaEQsTUFBTSxRQUFRO0NBQ2QsTUFBTSxlQUFnQixNQUFNLHdCQUF3QixDQUFDO0NBQ3JELE1BQU0sZ0JBQWlCLE1BQU0seUJBQXlCLENBQUM7Q0FDdkQsT0FBTztFQUNMLGFBQWEsT0FBTyxNQUFNLGdCQUFnQixDQUFDO0VBQzNDLG1CQUFtQixPQUFPLGFBQWEsaUJBQWlCLENBQUM7RUFDekQsY0FBYyxPQUFPLE1BQU0saUJBQWlCLENBQUM7RUFDN0MsaUJBQWlCLE9BQU8sY0FBYyxvQkFBb0IsQ0FBQztFQUMzRCxhQUFhLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztDQUM3QztBQUNGO0FBRUEsU0FBZ0IsY0FDZCxRQUNBLGNBQzJDO0NBRTNDLE1BQU0sU0FBUyxPQUFPLEtBQUssT0FBTyxNQUFNLEdBQUcsRUFBRSxHQUFHLFFBQVE7Q0FDeEQsSUFBSSxPQUFPLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSztFQUFDO0VBQUs7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7Q0FBRSxDQUFDLENBQUMsR0FDN0UsT0FBTztDQUNULElBQUksT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLEtBQUssT0FBTztDQUN4RSxJQUFJLE9BQU8sU0FBUyxTQUFTLEdBQUcsQ0FBQyxNQUFNLFVBQVUsT0FBTyxTQUFTLFNBQVMsR0FBRyxFQUFFLE1BQU0sUUFDbkYsT0FBTztDQUNULElBQUksaUJBQWlCLFFBQVEsT0FBTztDQUNwQyxJQUFJLGlCQUFpQixRQUFRLE9BQU87Q0FDcEMsSUFBSSxpQkFBaUIsVUFBYSxpQkFBaUIsT0FBTyxPQUFPO0NBQ2pFLE1BQU0sSUFBSSxvQkFBb0Isb0NBQW9DLE9BQU8sWUFBWSxHQUFHO0FBQzFGO0FBRUEsU0FBZ0IscUJBQXFCLEtBQWlEO0NBQ3BGLElBQUksQ0FBQyxPQUFPLE9BQU8sUUFBUSxVQUFVLE9BQU87Q0FDNUMsTUFBTSxRQUFRO0NBQ2QsTUFBTSxPQUFPLE9BQU8sTUFBTSxRQUFRLEVBQUU7Q0FDcEMsSUFBSSxTQUFTLG9CQUFvQjtFQUMvQixNQUFNLFdBQVcsTUFBTTtFQUN2QixPQUFPO0dBQUUsTUFBTTtHQUFXLEdBQUksVUFBVSxLQUFLLEVBQUUsWUFBWSxPQUFPLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQztFQUFHO0NBQ3pGO0NBQ0EsSUFBSSxTQUFTLGdDQUFnQyxPQUFPLE1BQU0sVUFBVSxVQUNsRSxPQUFPO0VBQ0wsTUFBTTtFQUNOLE1BQU0sTUFBTTtFQUNaLEdBQUksT0FBTyxNQUFNLFlBQVksV0FBVyxFQUFFLFFBQVEsTUFBTSxRQUFRLElBQUksQ0FBQztDQUN2RTtDQUVGLEtBQ0csU0FBUyxnQ0FBZ0MsU0FBUyxnQ0FDbkQsTUFBTSxRQUNOLE9BQU8sTUFBTSxTQUFTLFVBQ3RCO0VBQ0EsTUFBTSxPQUFPLE1BQU07RUFDbkIsSUFBSSxLQUFLLFNBQVMsMkJBQTJCLE9BQU8sS0FBSyxXQUFXLFVBQVU7R0FHNUUsTUFBTSxTQUFTLE9BQU8sS0FBSyxLQUFLLE9BQU8sTUFBTSxHQUFHLEVBQUUsR0FBRyxRQUFRO0dBUTdELE1BQU0sUUFOSixPQUFPLFVBQVUsTUFDakIsT0FBTyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxPQUFPLEtBQUssb0JBQW9CLEtBQUssQ0FBQyxLQUNuRSxPQUFPLGFBQWEsRUFBRSxJQUFJLEtBQzFCLE9BQU8sYUFBYSxFQUFFLElBQUksSUFDdEIsR0FBRyxPQUFPLGFBQWEsRUFBRSxFQUFFLEdBQUcsT0FBTyxhQUFhLEVBQUUsTUFDcEQsWUFHSCxPQUFPLEtBQUssU0FBUyxZQUFZLHNCQUFzQixLQUFLLEtBQUssSUFBSSxJQUNsRSxLQUFLLE9BQ0w7R0FDTixPQUFPO0lBQ0wsTUFBTTtJQUNOLEdBQUksT0FBTyxLQUFLLE9BQU8sV0FBVyxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztJQUNyRCxRQUFRLEtBQUs7SUFDYixVQUFVLGNBQWMsS0FBSyxRQUFRLEtBQUssYUFBYTtJQUN2RCxZQUFZO0tBQ1YsT0FBTztLQUNQLEdBQUksT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDO0tBQ3ZCLEdBQUksT0FBTyxLQUFLLFVBQVUsV0FBVyxFQUFFLE9BQU8sS0FBSyxNQUFNLElBQUksQ0FBQztLQUM5RCxHQUFJLE9BQU8sS0FBSyxZQUFZLFdBQVcsRUFBRSxTQUFTLEtBQUssUUFBUSxJQUFJLENBQUM7S0FDcEUsR0FBSSxPQUFPLEtBQUssZUFBZSxXQUFXLEVBQUUsWUFBWSxLQUFLLFdBQVcsSUFBSSxDQUFDO0lBQy9FO0lBQ0EsR0FBSSxPQUFPLEtBQUssbUJBQW1CLFdBQy9CLEVBQUUsZUFBZSxLQUFLLGVBQWUsSUFDckMsT0FBTyxLQUFLLGtCQUFrQixXQUM1QixFQUFFLGVBQWUsS0FBSyxjQUFjLElBQ3BDLENBQUM7R0FDVDtFQUNGO0VBQ0EsT0FBTztHQUFFLE1BQU07R0FBZTtHQUFNLFdBQVcsU0FBUztFQUE0QjtDQUN0RjtDQUNBLElBQUksU0FBUyxzQkFBc0I7RUFDakMsTUFBTSxXQUFZLE1BQU0sWUFBWSxDQUFDO0VBQ3JDLE9BQU87R0FDTCxNQUFNO0dBQ04sWUFBWSxPQUFPLFNBQVMsTUFBTSxFQUFFO0dBQ3BDLEdBQUksU0FBUyxRQUFRLEVBQUUsT0FBTyxVQUFVLFNBQVMsS0FBSyxFQUFFLElBQUksQ0FBQztHQUM3RCxHQUFJLE9BQU8sU0FBUyxVQUFVLFdBQVcsRUFBRSxPQUFPLFNBQVMsTUFBTSxJQUFJLENBQUM7RUFDeEU7Q0FDRjtDQUNBLElBQUksU0FBUyxXQUFXLFNBQVMscUJBQXFCLFNBQVMsdUJBQXVCO0VBQ3BGLE1BQU0sU0FBVSxNQUFNLFNBQVMsTUFBTSxZQUFZO0VBQ2pELE1BQU0sU0FBVSxPQUFPLFNBQVM7RUFDaEMsT0FBTztHQUNMLE1BQU07R0FDTixPQUFPLElBQUksb0JBQ1QsT0FBTyxPQUFPLFdBQVcsNEJBQTRCLE1BQU0sR0FDM0QsT0FBTyxPQUFPLFNBQVMsV0FBVyxPQUFPLE9BQU8sTUFDbEQ7RUFDRjtDQUNGO0FBRUYifQ==
|
|
@@ -17,6 +17,24 @@ function result(content: QgridContent[]): QueryOutput {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
describe("standalone image cost estimates", () => {
|
|
20
|
+
it("accepts size hints without promising public API resolution limits", () => {
|
|
21
|
+
for (const size of ["auto", "1152x2560", "841x1870", "2160x3840"]) {
|
|
22
|
+
expect(QueryInput.parse({ prompt: "draw", imageGenerationOptions: { size } }).imageGenerationOptions?.size).toBe(size);
|
|
23
|
+
}
|
|
24
|
+
for (const size of ["9:20", "0x1024", "1.5x1024", "-1x1024", "9007199254740992x1"]) {
|
|
25
|
+
expect(QueryInput.safeParse({ prompt: "draw", imageGenerationOptions: { size } }).success).toBe(false);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("leaves custom/auto size and observed hosted image costs unknown", () => {
|
|
30
|
+
const output = result([{ type: "image", data: "png" }]);
|
|
31
|
+
for (const size of ["auto", "1152x2560"] as const) {
|
|
32
|
+
expect(estimateImageGenerationCostMicroUsd(output, { size })).toBeNull();
|
|
33
|
+
}
|
|
34
|
+
expect(estimateImageGenerationCostMicroUsd(result([{ type: "image", data: "png", generation: {
|
|
35
|
+
route: "codex-responses", size: "841x1870", quality: "low",
|
|
36
|
+
} }]), options)).toBeNull();
|
|
37
|
+
});
|
|
20
38
|
it("accepts automatic image mode while preserving boolean requests", () => {
|
|
21
39
|
for (const imageGeneration of [true, false, "auto"] as const) {
|
|
22
40
|
expect(QueryInput.parse({ prompt: "chat", imageGeneration }).imageGeneration).toBe(imageGeneration);
|
|
@@ -18,7 +18,7 @@ export type ResolvedImageGenerationOptions = {
|
|
|
18
18
|
// https://developers.openai.com/api/docs/guides/image-generation#calculating-costs
|
|
19
19
|
const IMAGE_OUTPUT_COST_MICRO_USD: Record<
|
|
20
20
|
ImageGenerationQuality,
|
|
21
|
-
Record<ImageGenerationSize, number
|
|
21
|
+
Partial<Record<ImageGenerationSize, number>>
|
|
22
22
|
> = {
|
|
23
23
|
low: {
|
|
24
24
|
"1024x1024": 6_000,
|
|
@@ -49,7 +49,13 @@ export function resolveImageGenerationOptions(
|
|
|
49
49
|
export function imageGenerationCostMethod(
|
|
50
50
|
options: ImageGenerationOptions | undefined,
|
|
51
51
|
result?: QueryOutput,
|
|
52
|
-
): string {
|
|
52
|
+
): string | null {
|
|
53
|
+
if (
|
|
54
|
+
result?.content.some(
|
|
55
|
+
(item) => item.type === "image" && item.generation?.route === "codex-responses",
|
|
56
|
+
)
|
|
57
|
+
)
|
|
58
|
+
return null;
|
|
53
59
|
if (
|
|
54
60
|
result?.content.some(
|
|
55
61
|
(item) => item.type === "image" && item.generation?.route === "codex-images",
|
|
@@ -58,6 +64,7 @@ export function imageGenerationCostMethod(
|
|
|
58
64
|
return "estimated:gpt-image-2:reported-usage:public-prices:conservative";
|
|
59
65
|
}
|
|
60
66
|
const resolved = resolveImageGenerationOptions(options);
|
|
67
|
+
if (IMAGE_OUTPUT_COST_MICRO_USD[resolved.quality][resolved.size] === undefined) return null;
|
|
61
68
|
return `assumed:${CODEX_IMAGE_GENERATION_MODEL}:${resolved.quality}:${resolved.size}:png`;
|
|
62
69
|
}
|
|
63
70
|
|
|
@@ -68,6 +75,9 @@ export function estimateImageGenerationCostMicroUsd(
|
|
|
68
75
|
const images = result.content.filter((item) => item.type === "image");
|
|
69
76
|
const imageCount = images.length;
|
|
70
77
|
if (imageCount === 0) return null;
|
|
78
|
+
// Hosted Responses reports observed settings but no trustworthy image usage
|
|
79
|
+
// or guaranteed image model. Requested size/quality cannot price that output.
|
|
80
|
+
if (images.some((image) => image.generation?.route === "codex-responses")) return null;
|
|
71
81
|
if (images.some((image) => image.generation?.route === "codex-images")) {
|
|
72
82
|
// The standalone response's aggregate usage is carried by its first image only.
|
|
73
83
|
// Do not multiply it by output count or price it as the requested text driver.
|
|
@@ -88,5 +98,6 @@ export function estimateImageGenerationCostMicroUsd(
|
|
|
88
98
|
);
|
|
89
99
|
}
|
|
90
100
|
const resolved = resolveImageGenerationOptions(options);
|
|
91
|
-
|
|
101
|
+
const unitCost = IMAGE_OUTPUT_COST_MICRO_USD[resolved.quality][resolved.size];
|
|
102
|
+
return unitCost === undefined ? null : imageCount * unitCost;
|
|
92
103
|
}
|
|
@@ -19,6 +19,15 @@ it("logs observed standalone settings separately from requested controls without
|
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
describe("qgrid response log formatting", () => {
|
|
22
|
+
it("keeps custom requests and hosted observations separate without inventing a price assumption", () => {
|
|
23
|
+
const args = { prompt: "draw in 9:20", imageGenerationOptions: { size: "1152x2560" } };
|
|
24
|
+
const generation = { route: "codex-responses" as const, size: "841x1870", quality: "low" };
|
|
25
|
+
const observed = JSON.parse(imageGenerationToolArgs(args, { generation }));
|
|
26
|
+
expect(observed.requestedOptions.size).toBe("1152x2560");
|
|
27
|
+
expect(observed.observedGeneration).toEqual(generation);
|
|
28
|
+
expect(observed).not.toHaveProperty("pricingAssumption");
|
|
29
|
+
expect(JSON.parse(imageGenerationToolArgs(args))).not.toHaveProperty("pricingAssumption");
|
|
30
|
+
});
|
|
22
31
|
it("logs the returned MIME and requested output format", () => {
|
|
23
32
|
expect(formatImagePartForLog({ type: "image", data: "webp", mediaType: "image/webp" })).toContain("data:image/webp;base64,webp");
|
|
24
33
|
expect(JSON.parse(imageGenerationToolArgs({ prompt: "draw", imageGenerationOptions: { outputFormat: "webp" } })).tool.outputFormat).toBe("webp");
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CODEX_IMAGE_GENERATION_MODEL,
|
|
3
|
+
imageGenerationCostMethod,
|
|
3
4
|
resolveImageGenerationOptions,
|
|
4
5
|
} from "./qgrid-image-generation";
|
|
5
6
|
import {
|
|
@@ -62,13 +63,15 @@ export function imageGenerationToolArgs(
|
|
|
62
63
|
...(args.imageGenerationOptions ? { requestedOptions: args.imageGenerationOptions } : {}),
|
|
63
64
|
...(options.generation
|
|
64
65
|
? { observedGeneration: options.generation }
|
|
65
|
-
:
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
66
|
+
: imageGenerationCostMethod(args.imageGenerationOptions)
|
|
67
|
+
? {
|
|
68
|
+
pricingAssumption: {
|
|
69
|
+
model: CODEX_IMAGE_GENERATION_MODEL,
|
|
70
|
+
quality: resolved.quality,
|
|
71
|
+
size: resolved.size,
|
|
72
|
+
},
|
|
73
|
+
}
|
|
74
|
+
: {}),
|
|
72
75
|
});
|
|
73
76
|
}
|
|
74
77
|
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
beginServerRestart,
|
|
5
|
-
resetServerRestartForTests,
|
|
6
|
-
} from "../../utils/server-restart";
|
|
7
3
|
import {
|
|
8
4
|
afterQuery,
|
|
9
5
|
beforeQuery,
|
|
10
|
-
finishActiveNativeRunsForRestart,
|
|
11
6
|
finishRunAborted,
|
|
12
7
|
finishRunWithError,
|
|
13
|
-
resetNativeRunRegistryForTests,
|
|
14
8
|
} from "./qgrid-run-lifecycle";
|
|
15
9
|
import { type QueryOutput } from "./qgrid.types";
|
|
16
10
|
|
|
@@ -65,11 +59,6 @@ function queryOutput(overrides: Partial<QueryOutput> = {}): QueryOutput {
|
|
|
65
59
|
|
|
66
60
|
let lifecycleNow = Date.now();
|
|
67
61
|
|
|
68
|
-
afterEach(() => {
|
|
69
|
-
resetServerRestartForTests();
|
|
70
|
-
resetNativeRunRegistryForTests();
|
|
71
|
-
});
|
|
72
|
-
|
|
73
62
|
describe("qgrid run lifecycle start", () => {
|
|
74
63
|
beforeEach(() => {
|
|
75
64
|
lifecycleNow += 60_001;
|
|
@@ -221,107 +210,7 @@ describe("qgrid run lifecycle start", () => {
|
|
|
221
210
|
expect(createRunMock).toHaveBeenCalledTimes(2);
|
|
222
211
|
});
|
|
223
212
|
|
|
224
|
-
it("rejects new native runs while a restart is pending", async () => {
|
|
225
|
-
beginServerRestart();
|
|
226
|
-
|
|
227
|
-
await expect(beforeQuery({ prompt: "hi" })).rejects.toMatchObject({ statusCode: 503 });
|
|
228
|
-
expect(createRunMock).not.toHaveBeenCalled();
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
it("finishes a run prepared during the restart race before rejecting provider execution", async () => {
|
|
232
|
-
let resolveCreate!: (requestLogId: number) => void;
|
|
233
|
-
createRunMock.mockReturnValueOnce(
|
|
234
|
-
new Promise<number>((resolve) => {
|
|
235
|
-
resolveCreate = resolve;
|
|
236
|
-
}),
|
|
237
|
-
);
|
|
238
|
-
|
|
239
|
-
const starting = beforeQuery({ prompt: "hi" });
|
|
240
|
-
await vi.waitFor(() => expect(createRunMock).toHaveBeenCalledOnce());
|
|
241
|
-
beginServerRestart();
|
|
242
|
-
resolveCreate(22);
|
|
243
|
-
|
|
244
|
-
await expect(starting).rejects.toMatchObject({ statusCode: 503 });
|
|
245
|
-
expect(finishRunMock).toHaveBeenCalledWith(
|
|
246
|
-
22,
|
|
247
|
-
expect.objectContaining({ status: "error", error_message: "server restarted" }),
|
|
248
|
-
);
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
it("marks only active native runs as restarted and prevents a late success overwrite", async () => {
|
|
252
|
-
const { requestLogId, stepIndex } = await beforeQuery({ prompt: "hi" });
|
|
253
|
-
|
|
254
|
-
await finishActiveNativeRunsForRestart();
|
|
255
|
-
expect(finishRunMock).toHaveBeenCalledWith(
|
|
256
|
-
requestLogId,
|
|
257
|
-
expect.objectContaining({ status: "error", error_message: "server restarted" }),
|
|
258
|
-
);
|
|
259
|
-
|
|
260
|
-
appendStepMock.mockClear();
|
|
261
|
-
finishRunMock.mockClear();
|
|
262
|
-
await expect(afterQuery(requestLogId, stepIndex, { prompt: "hi" }, queryOutput())).resolves.toEqual(
|
|
263
|
-
{},
|
|
264
|
-
);
|
|
265
|
-
expect(appendStepMock).not.toHaveBeenCalled();
|
|
266
|
-
expect(finishRunMock).not.toHaveBeenCalled();
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
it("waits for an in-flight finalizer and writes the restart error last", async () => {
|
|
270
|
-
const { requestLogId, stepIndex } = await beforeQuery({ prompt: "hi" });
|
|
271
|
-
let releaseAppend!: () => void;
|
|
272
|
-
appendStepMock.mockReturnValueOnce(
|
|
273
|
-
new Promise<void>((resolve) => {
|
|
274
|
-
releaseAppend = resolve;
|
|
275
|
-
}),
|
|
276
|
-
);
|
|
277
|
-
|
|
278
|
-
const finishing = afterQuery(requestLogId, stepIndex, { prompt: "hi" }, queryOutput());
|
|
279
|
-
await vi.waitFor(() => expect(appendStepMock).toHaveBeenCalledOnce());
|
|
280
|
-
const restarting = finishActiveNativeRunsForRestart();
|
|
281
|
-
|
|
282
|
-
await Promise.resolve();
|
|
283
|
-
expect(finishRunMock).not.toHaveBeenCalledWith(
|
|
284
|
-
requestLogId,
|
|
285
|
-
expect.objectContaining({ error_message: "server restarted" }),
|
|
286
|
-
);
|
|
287
|
-
|
|
288
|
-
releaseAppend();
|
|
289
|
-
await Promise.all([finishing, restarting]);
|
|
290
|
-
|
|
291
|
-
const terminalStatuses = finishRunMock.mock.calls
|
|
292
|
-
.filter(([id]) => id === requestLogId)
|
|
293
|
-
.map(([, payload]) => payload.status);
|
|
294
|
-
expect(terminalStatuses.at(-1)).toBe("error");
|
|
295
|
-
expect(finishRunMock).toHaveBeenLastCalledWith(
|
|
296
|
-
requestLogId,
|
|
297
|
-
expect.objectContaining({ status: "error", error_message: "server restarted" }),
|
|
298
|
-
);
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
it("leaves tool-wait runs alone after their provider turn has completed", async () => {
|
|
302
|
-
const { requestLogId, stepIndex } = await beforeQuery({ prompt: "use a tool" });
|
|
303
|
-
await afterQuery(
|
|
304
|
-
requestLogId,
|
|
305
|
-
stepIndex,
|
|
306
|
-
{ prompt: "use a tool" },
|
|
307
|
-
queryOutput({
|
|
308
|
-
finishReason: "tool-calls",
|
|
309
|
-
content: [
|
|
310
|
-
{
|
|
311
|
-
type: "tool-call",
|
|
312
|
-
toolCallId: "call-1",
|
|
313
|
-
toolName: "lookup",
|
|
314
|
-
input: "{}",
|
|
315
|
-
},
|
|
316
|
-
],
|
|
317
|
-
}),
|
|
318
|
-
);
|
|
319
|
-
finishRunMock.mockClear();
|
|
320
|
-
|
|
321
|
-
await finishActiveNativeRunsForRestart();
|
|
322
213
|
|
|
323
|
-
expect(finishRunMock).not.toHaveBeenCalled();
|
|
324
|
-
});
|
|
325
214
|
});
|
|
326
215
|
|
|
327
216
|
describe("qgrid run lifecycle TTFT", () => {
|