@cartanova/qgrid-cli 2.7.0 → 2.7.2

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 (1337) hide show
  1. package/README.ko.md +3 -2
  2. package/README.md +3 -2
  3. package/bundle/dist/_virtual/_rolldown/runtime.js +20 -1
  4. package/bundle/dist/application/monit/monit.frame.js +27 -14
  5. package/bundle/dist/application/monit/monit.types.js +22 -13
  6. package/bundle/dist/application/qgrid/conv-routing.js +21 -11
  7. package/bundle/dist/application/qgrid/oauth.js +1 -1
  8. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +15 -4
  9. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +34 -14
  10. package/bundle/dist/application/qgrid/qgrid.frame.js +50 -73
  11. package/bundle/dist/application/qgrid/qgrid.types.js +4 -1
  12. package/bundle/dist/application/qgrid/schema-prompt.js +240 -0
  13. package/bundle/dist/application/qgrid/token-subscriber.js +5 -5
  14. package/bundle/dist/application/qgrid/tool-emulation-schema.js +13 -1
  15. package/bundle/dist/application/qgrid/tool-emulation.js +8 -6
  16. package/bundle/dist/application/queries.generated.js +3 -1
  17. package/bundle/dist/application/request-log/json-schema-type-text.js +55 -0
  18. package/bundle/dist/application/request-log/request-log.model.js +85 -3
  19. package/bundle/dist/application/request-log/request-log.types.js +3 -2
  20. package/bundle/dist/application/request-log/zod-code-format.js +71 -0
  21. package/bundle/dist/application/setting/setting.constant.js +2 -62
  22. package/bundle/dist/application/setting/setting.model.js +3 -3
  23. package/bundle/dist/application/setting/setting.store.js +2 -2
  24. package/bundle/dist/application/sonamu.generated.js +11 -4
  25. package/bundle/dist/application/sonamu.generated.sso.js +7 -3
  26. package/bundle/dist/i18n/sd.generated.js +5 -2
  27. package/bundle/dist/migrations/20260814130113_alter_request_logs_add1_alter1.js +15 -0
  28. package/bundle/dist/migrations/20260814131051_alter_request_logs_add1_alter1.js +15 -0
  29. package/bundle/dist/migrations/20260814134846_alter_request_logs_add1_alter1.js +15 -0
  30. package/bundle/dist/migrations/20260814140759_alter_request_logs_alter1.js +13 -0
  31. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/2020.js +112 -0
  32. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.js +140 -0
  33. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/index.js +676 -0
  34. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/scope.js +143 -0
  35. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/errors.js +104 -0
  36. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/index.js +225 -0
  37. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/names.js +30 -0
  38. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/ref_error.js +20 -0
  39. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/resolve.js +135 -0
  40. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/rules.js +63 -0
  41. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/util.js +148 -0
  42. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/applicability.js +25 -0
  43. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/boolSchema.js +50 -0
  44. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/dataType.js +174 -0
  45. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/defaults.js +33 -0
  46. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/index.js +435 -0
  47. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/keyword.js +115 -0
  48. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/subschema.js +74 -0
  49. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/core.js +585 -0
  50. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/data.js +20 -0
  51. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/index.js +44 -0
  52. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.js +52 -0
  53. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.js +22 -0
  54. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.js +53 -0
  55. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.js +18 -0
  56. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.js +38 -0
  57. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.js +21 -0
  58. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.js +87 -0
  59. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/schema.js +61 -0
  60. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/equal.js +14 -0
  61. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/ucs2length.js +27 -0
  62. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/uri.js +14 -0
  63. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/validation_error.js +18 -0
  64. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +59 -0
  65. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +98 -0
  66. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js +31 -0
  67. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +18 -0
  68. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/contains.js +91 -0
  69. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +89 -0
  70. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js +18 -0
  71. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/if.js +64 -0
  72. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/index.js +62 -0
  73. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items.js +61 -0
  74. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js +36 -0
  75. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/not.js +33 -0
  76. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +53 -0
  77. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +63 -0
  78. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +19 -0
  79. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/properties.js +54 -0
  80. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +43 -0
  81. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +19 -0
  82. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/code.js +132 -0
  83. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/id.js +16 -0
  84. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/index.js +24 -0
  85. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/ref.js +114 -0
  86. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/index.js +103 -0
  87. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/types.js +16 -0
  88. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/draft2020.js +37 -0
  89. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js +48 -0
  90. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js +47 -0
  91. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/dynamic/index.js +24 -0
  92. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js +22 -0
  93. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js +17 -0
  94. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/format.js +94 -0
  95. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/index.js +12 -0
  96. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/metadata.js +25 -0
  97. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/next.js +21 -0
  98. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/index.js +15 -0
  99. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js +48 -0
  100. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js +61 -0
  101. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/const.js +29 -0
  102. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js +19 -0
  103. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/enum.js +51 -0
  104. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/index.js +50 -0
  105. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitContains.js +20 -0
  106. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js +30 -0
  107. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js +35 -0
  108. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +49 -0
  109. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +30 -0
  110. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +29 -0
  111. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/pattern.js +40 -0
  112. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/required.js +74 -0
  113. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +72 -0
  114. package/bundle/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +35 -0
  115. package/bundle/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js +238 -0
  116. package/bundle/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js +189 -0
  117. package/bundle/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js +284 -0
  118. package/bundle/dist/node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js +80 -0
  119. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +9 -0
  120. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +41 -0
  121. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +19 -0
  122. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +202 -0
  123. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +46 -0
  124. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +119 -0
  125. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +3044 -0
  126. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +59 -0
  127. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/index.js +28 -0
  128. package/bundle/dist/sonamu.config.js +10 -9
  129. package/bundle/dist/testing/schema-bench.js +0 -0
  130. package/bundle/dist/testing/setup-mocks.js +2 -2
  131. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +14 -2
  132. package/bundle/dist/utils/providers/anthropic/claude-session.js +1 -1
  133. package/bundle/dist/utils/providers/anthropic/fence-strip.js +83 -0
  134. package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +3 -5
  135. package/bundle/dist/utils/providers/common/model-cost.js +1 -1
  136. package/bundle/dist/utils/providers/common/schema-validation.js +1 -1
  137. package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +144 -0
  138. package/bundle/dist/utils/providers/openai/openai-constants.js +4 -2
  139. package/bundle/dist/utils/providers/openai/openai-direct-client.js +327 -0
  140. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +358 -781
  141. package/bundle/dist/utils/providers/openai/openai-oauth.js +84 -0
  142. package/bundle/dist/utils/providers/openai/openai-quota.js +76 -5
  143. package/bundle/dist/utils/providers/openai/openai-refresh.js +3 -3
  144. package/bundle/dist/utils/providers/openai/openai-sse.js +72 -0
  145. package/bundle/dist/utils/providers/openai/openai-transport-config.js +14 -0
  146. package/bundle/src/application/monit/monit.frame.test.ts +14 -17
  147. package/bundle/src/application/monit/monit.frame.ts +23 -12
  148. package/bundle/src/application/monit/monit.types.ts +40 -11
  149. package/bundle/src/application/qgrid/conv-routing.test.ts +67 -0
  150. package/bundle/src/application/qgrid/conv-routing.ts +46 -12
  151. package/bundle/src/application/qgrid/qgrid-oauth-redirect.test.ts +92 -2
  152. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +3 -0
  153. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +15 -1
  154. package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +286 -40
  155. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +58 -14
  156. package/bundle/src/application/qgrid/qgrid.frame.test.ts +120 -153
  157. package/bundle/src/application/qgrid/qgrid.frame.ts +57 -94
  158. package/bundle/src/application/qgrid/qgrid.types.ts +11 -4
  159. package/bundle/src/application/qgrid/schema-prompt.test.ts +166 -0
  160. package/bundle/src/application/qgrid/schema-prompt.ts +293 -0
  161. package/bundle/src/application/qgrid/token-subscriber.ts +4 -4
  162. package/bundle/src/application/qgrid/tool-emulation-schema.ts +1 -1
  163. package/bundle/src/application/qgrid/tool-emulation.test.ts +37 -0
  164. package/bundle/src/application/qgrid/tool-emulation.ts +19 -7
  165. package/bundle/src/application/queries.generated.ts +6 -0
  166. package/bundle/src/application/request-log/json-schema-type-text.test.ts +96 -0
  167. package/bundle/src/application/request-log/json-schema-type-text.ts +83 -0
  168. package/bundle/src/application/request-log/request-log.entity.json +147 -21
  169. package/bundle/src/application/request-log/request-log.model.ts +108 -0
  170. package/bundle/src/application/request-log/request-log.types.ts +2 -0
  171. package/bundle/src/application/request-log/zod-code-format.test.ts +31 -0
  172. package/bundle/src/application/request-log/zod-code-format.ts +73 -0
  173. package/bundle/src/application/setting/setting.constant.test.ts +22 -24
  174. package/bundle/src/application/setting/setting.constant.ts +2 -63
  175. package/bundle/src/application/setting/setting.entity.json +1 -1
  176. package/bundle/src/application/setting/setting.store.ts +1 -1
  177. package/bundle/src/application/sonamu.generated.http +20 -1
  178. package/bundle/src/application/sonamu.generated.sso.ts +4 -0
  179. package/bundle/src/application/sonamu.generated.ts +10 -0
  180. package/bundle/src/i18n/sd.generated.ts +6 -1
  181. package/bundle/src/migrations/20260814130113_alter_request_logs_add1_alter1.ts +15 -0
  182. package/bundle/src/migrations/20260814131051_alter_request_logs_add1_alter1.ts +15 -0
  183. package/bundle/src/migrations/20260814134846_alter_request_logs_add1_alter1.ts +15 -0
  184. package/bundle/src/migrations/20260814140759_alter_request_logs_alter1.ts +13 -0
  185. package/bundle/src/sonamu.config.ts +9 -13
  186. package/bundle/src/testing/schema-bench.test.ts +358 -0
  187. package/bundle/src/testing/schema-bench.ts +352 -0
  188. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +17 -2
  189. package/bundle/src/utils/providers/anthropic/claude-session.ts +1 -3
  190. package/bundle/src/utils/providers/anthropic/fence-strip.test.ts +122 -0
  191. package/bundle/src/utils/providers/anthropic/fence-strip.ts +105 -0
  192. package/bundle/src/utils/providers/anthropic/stream-json-adapter.test.ts +1 -2
  193. package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +4 -11
  194. package/bundle/src/utils/providers/common/model-cost.ts +4 -9
  195. package/bundle/src/utils/providers/common/provider-dispatcher.ts +10 -8
  196. package/bundle/src/utils/providers/common/provider-types.ts +48 -0
  197. package/bundle/src/utils/providers/common/schema-validation.ts +1 -1
  198. package/bundle/src/utils/providers/openai/openai-backend-protocol.test.ts +106 -0
  199. package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +255 -0
  200. package/bundle/src/utils/providers/openai/openai-constants.ts +2 -0
  201. package/bundle/src/utils/providers/openai/openai-direct-client.test.ts +610 -0
  202. package/bundle/src/utils/providers/openai/openai-direct-client.ts +478 -0
  203. package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +336 -1723
  204. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +458 -1175
  205. package/bundle/src/utils/providers/openai/openai-oauth.test.ts +95 -0
  206. package/bundle/src/utils/providers/openai/openai-oauth.ts +141 -0
  207. package/bundle/src/utils/providers/openai/openai-quota.test.ts +80 -7
  208. package/bundle/src/utils/providers/openai/openai-quota.ts +105 -4
  209. package/bundle/src/utils/providers/openai/openai-refresh.test.ts +120 -0
  210. package/bundle/src/utils/providers/openai/openai-refresh.ts +3 -1
  211. package/bundle/src/utils/providers/openai/openai-sse.test.ts +52 -0
  212. package/bundle/src/utils/providers/openai/openai-sse.ts +79 -0
  213. package/bundle/src/utils/providers/openai/openai-transport-config.ts +17 -0
  214. package/bundle/web-dist/client/assets/index-BldeEvAK.css +1 -0
  215. package/bundle/web-dist/client/assets/index-DkAXPF9q.js +106 -0
  216. package/bundle/web-dist/client/assets/logs-DlI6OojL.js +1 -0
  217. package/bundle/web-dist/client/assets/monit-qap66dhi.js +1 -0
  218. package/bundle/web-dist/client/assets/routes-CV07Pzde.js +5 -0
  219. package/bundle/web-dist/client/assets/services.generated-CSW8bhCP.js +51 -0
  220. package/bundle/web-dist/client/assets/settings-CdYub4yo.js +1 -0
  221. package/bundle/web-dist/client/assets/show-DA1L8DVD.js +2 -0
  222. package/bundle/web-dist/client/assets/tokens-Dt3gfkwP.js +1 -0
  223. package/bundle/web-dist/client/assets/use-oauth-login-flow-Cwi0HtJY.js +1 -0
  224. package/bundle/web-dist/client/index.html +3 -3
  225. package/bundle/web-dist/server/assets/lazyRouteComponent-0y-znAfz.js +1856 -0
  226. package/bundle/web-dist/server/assets/logs-CJBbHM3_.js +481 -0
  227. package/bundle/web-dist/server/assets/monit-8WAsPETB.js +1670 -0
  228. package/bundle/web-dist/server/assets/plus-9das21ju.js +19 -0
  229. package/bundle/web-dist/server/assets/react-dom-zmEq8BVp.js +462 -0
  230. package/bundle/web-dist/server/assets/routes-B6bX3o41.js +2924 -0
  231. package/bundle/web-dist/server/assets/services.generated-DyPeBI00.js +23644 -0
  232. package/bundle/web-dist/server/assets/settings-D1u5WdpP.js +597 -0
  233. package/bundle/web-dist/server/assets/show-Cr7vwR0l.js +2861 -0
  234. package/bundle/web-dist/server/assets/tokens-BumM0gnH.js +441 -0
  235. package/bundle/web-dist/server/assets/use-oauth-login-flow-DmsHGOlx.js +160 -0
  236. package/bundle/web-dist/server/entry-server.generated.js +12 -12
  237. package/dist/cli.d.ts +10 -1
  238. package/dist/cli.js +1 -6
  239. package/package.json +3 -2
  240. package/skills/qgrid/SKILL.md +5 -5
  241. package/skills/qgrid/references/ai-sdk-provider-contract.md +36 -25
  242. package/skills/qgrid/references/anthropic-claude-code-runtime.md +31 -14
  243. package/skills/qgrid/references/cli-env-and-server-boot.md +6 -13
  244. package/skills/qgrid/references/decision-rationale.md +28 -26
  245. package/skills/qgrid/references/docs-workflow.md +1 -1
  246. package/skills/qgrid/references/openai-codex-runtime.md +39 -156
  247. package/skills/qgrid/references/prompt-cache-and-usage.md +35 -68
  248. package/skills/qgrid/references/provider-runtime-differences.md +18 -18
  249. package/skills/qgrid/references/repo-map.md +2 -2
  250. package/skills/qgrid/references/request-log-run-lifecycle.md +12 -2
  251. package/skills/qgrid/references/sonamu-api-web-flow.md +4 -0
  252. package/skills/qgrid/references/token-auth-quota-lifecycle.md +14 -24
  253. package/skills/qgrid/references/tool-calling-and-multiturn.md +19 -9
  254. package/skills/qgrid/references/verification-and-debugging.md +17 -15
  255. package/bundle/dist/codex-protocol/AgentPath.js +0 -1
  256. package/bundle/dist/codex-protocol/ApplyPatchApprovalParams.js +0 -1
  257. package/bundle/dist/codex-protocol/ApplyPatchApprovalResponse.js +0 -1
  258. package/bundle/dist/codex-protocol/AuthMode.js +0 -1
  259. package/bundle/dist/codex-protocol/ClientInfo.js +0 -1
  260. package/bundle/dist/codex-protocol/ClientNotification.js +0 -1
  261. package/bundle/dist/codex-protocol/ClientRequest.js +0 -1
  262. package/bundle/dist/codex-protocol/CollaborationMode.js +0 -1
  263. package/bundle/dist/codex-protocol/ContentItem.js +0 -1
  264. package/bundle/dist/codex-protocol/ConversationGitInfo.js +0 -1
  265. package/bundle/dist/codex-protocol/ConversationSummary.js +0 -1
  266. package/bundle/dist/codex-protocol/ExecCommandApprovalParams.js +0 -1
  267. package/bundle/dist/codex-protocol/ExecCommandApprovalResponse.js +0 -1
  268. package/bundle/dist/codex-protocol/ExecPolicyAmendment.js +0 -1
  269. package/bundle/dist/codex-protocol/FileChange.js +0 -1
  270. package/bundle/dist/codex-protocol/ForcedLoginMethod.js +0 -1
  271. package/bundle/dist/codex-protocol/FunctionCallOutputBody.js +0 -1
  272. package/bundle/dist/codex-protocol/FunctionCallOutputContentItem.js +0 -1
  273. package/bundle/dist/codex-protocol/FuzzyFileSearchMatchType.js +0 -1
  274. package/bundle/dist/codex-protocol/FuzzyFileSearchParams.js +0 -1
  275. package/bundle/dist/codex-protocol/FuzzyFileSearchResponse.js +0 -1
  276. package/bundle/dist/codex-protocol/FuzzyFileSearchResult.js +0 -1
  277. package/bundle/dist/codex-protocol/FuzzyFileSearchSessionCompletedNotification.js +0 -1
  278. package/bundle/dist/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.js +0 -1
  279. package/bundle/dist/codex-protocol/GetAuthStatusParams.js +0 -1
  280. package/bundle/dist/codex-protocol/GetAuthStatusResponse.js +0 -1
  281. package/bundle/dist/codex-protocol/GetConversationSummaryParams.js +0 -1
  282. package/bundle/dist/codex-protocol/GetConversationSummaryResponse.js +0 -1
  283. package/bundle/dist/codex-protocol/GitDiffToRemoteParams.js +0 -1
  284. package/bundle/dist/codex-protocol/GitDiffToRemoteResponse.js +0 -1
  285. package/bundle/dist/codex-protocol/GitSha.js +0 -1
  286. package/bundle/dist/codex-protocol/ImageDetail.js +0 -1
  287. package/bundle/dist/codex-protocol/InitializeCapabilities.js +0 -1
  288. package/bundle/dist/codex-protocol/InitializeParams.js +0 -1
  289. package/bundle/dist/codex-protocol/InitializeResponse.js +0 -1
  290. package/bundle/dist/codex-protocol/InputModality.js +0 -1
  291. package/bundle/dist/codex-protocol/InternalSessionSource.js +0 -1
  292. package/bundle/dist/codex-protocol/LocalShellAction.js +0 -1
  293. package/bundle/dist/codex-protocol/LocalShellExecAction.js +0 -1
  294. package/bundle/dist/codex-protocol/LocalShellStatus.js +0 -1
  295. package/bundle/dist/codex-protocol/MessagePhase.js +0 -1
  296. package/bundle/dist/codex-protocol/ModeKind.js +0 -1
  297. package/bundle/dist/codex-protocol/NetworkPolicyAmendment.js +0 -1
  298. package/bundle/dist/codex-protocol/NetworkPolicyRuleAction.js +0 -1
  299. package/bundle/dist/codex-protocol/ParsedCommand.js +0 -1
  300. package/bundle/dist/codex-protocol/Personality.js +0 -1
  301. package/bundle/dist/codex-protocol/PlanType.js +0 -1
  302. package/bundle/dist/codex-protocol/RealtimeConversationVersion.js +0 -1
  303. package/bundle/dist/codex-protocol/RealtimeOutputModality.js +0 -1
  304. package/bundle/dist/codex-protocol/RealtimeVoice.js +0 -1
  305. package/bundle/dist/codex-protocol/RealtimeVoicesList.js +0 -1
  306. package/bundle/dist/codex-protocol/ReasoningEffort.js +0 -1
  307. package/bundle/dist/codex-protocol/ReasoningItemContent.js +0 -1
  308. package/bundle/dist/codex-protocol/ReasoningItemReasoningSummary.js +0 -1
  309. package/bundle/dist/codex-protocol/ReasoningSummary.js +0 -1
  310. package/bundle/dist/codex-protocol/RequestId.js +0 -1
  311. package/bundle/dist/codex-protocol/Resource.js +0 -1
  312. package/bundle/dist/codex-protocol/ResourceContent.js +0 -1
  313. package/bundle/dist/codex-protocol/ResourceTemplate.js +0 -1
  314. package/bundle/dist/codex-protocol/ResponseItem.js +0 -1
  315. package/bundle/dist/codex-protocol/ReviewDecision.js +0 -1
  316. package/bundle/dist/codex-protocol/ServerNotification.js +0 -1
  317. package/bundle/dist/codex-protocol/ServerRequest.js +0 -1
  318. package/bundle/dist/codex-protocol/SessionSource.js +0 -1
  319. package/bundle/dist/codex-protocol/Settings.js +0 -1
  320. package/bundle/dist/codex-protocol/SubAgentSource.js +0 -1
  321. package/bundle/dist/codex-protocol/ThreadId.js +0 -1
  322. package/bundle/dist/codex-protocol/ThreadMemoryMode.js +0 -1
  323. package/bundle/dist/codex-protocol/Tool.js +0 -1
  324. package/bundle/dist/codex-protocol/Verbosity.js +0 -1
  325. package/bundle/dist/codex-protocol/WebSearchAction.js +0 -1
  326. package/bundle/dist/codex-protocol/WebSearchContextSize.js +0 -1
  327. package/bundle/dist/codex-protocol/WebSearchLocation.js +0 -1
  328. package/bundle/dist/codex-protocol/WebSearchMode.js +0 -1
  329. package/bundle/dist/codex-protocol/WebSearchToolConfig.js +0 -1
  330. package/bundle/dist/codex-protocol/index.js +0 -2
  331. package/bundle/dist/codex-protocol/serde_json/JsonValue.js +0 -1
  332. package/bundle/dist/codex-protocol/v2/Account.js +0 -1
  333. package/bundle/dist/codex-protocol/v2/AccountLoginCompletedNotification.js +0 -1
  334. package/bundle/dist/codex-protocol/v2/AccountRateLimitsUpdatedNotification.js +0 -1
  335. package/bundle/dist/codex-protocol/v2/AccountUpdatedNotification.js +0 -1
  336. package/bundle/dist/codex-protocol/v2/ActivePermissionProfile.js +0 -1
  337. package/bundle/dist/codex-protocol/v2/ActivePermissionProfileModification.js +0 -1
  338. package/bundle/dist/codex-protocol/v2/AddCreditsNudgeCreditType.js +0 -1
  339. package/bundle/dist/codex-protocol/v2/AddCreditsNudgeEmailStatus.js +0 -1
  340. package/bundle/dist/codex-protocol/v2/AdditionalFileSystemPermissions.js +0 -1
  341. package/bundle/dist/codex-protocol/v2/AdditionalNetworkPermissions.js +0 -1
  342. package/bundle/dist/codex-protocol/v2/AdditionalPermissionProfile.js +0 -1
  343. package/bundle/dist/codex-protocol/v2/AgentMessageDeltaNotification.js +0 -1
  344. package/bundle/dist/codex-protocol/v2/AnalyticsConfig.js +0 -1
  345. package/bundle/dist/codex-protocol/v2/AppBranding.js +0 -1
  346. package/bundle/dist/codex-protocol/v2/AppInfo.js +0 -1
  347. package/bundle/dist/codex-protocol/v2/AppListUpdatedNotification.js +0 -1
  348. package/bundle/dist/codex-protocol/v2/AppMetadata.js +0 -1
  349. package/bundle/dist/codex-protocol/v2/AppReview.js +0 -1
  350. package/bundle/dist/codex-protocol/v2/AppScreenshot.js +0 -1
  351. package/bundle/dist/codex-protocol/v2/AppSummary.js +0 -1
  352. package/bundle/dist/codex-protocol/v2/AppToolApproval.js +0 -1
  353. package/bundle/dist/codex-protocol/v2/AppToolsConfig.js +0 -1
  354. package/bundle/dist/codex-protocol/v2/ApprovalsReviewer.js +0 -1
  355. package/bundle/dist/codex-protocol/v2/AppsConfig.js +0 -1
  356. package/bundle/dist/codex-protocol/v2/AppsDefaultConfig.js +0 -1
  357. package/bundle/dist/codex-protocol/v2/AppsListParams.js +0 -1
  358. package/bundle/dist/codex-protocol/v2/AppsListResponse.js +0 -1
  359. package/bundle/dist/codex-protocol/v2/AskForApproval.js +0 -1
  360. package/bundle/dist/codex-protocol/v2/AutoReviewDecisionSource.js +0 -1
  361. package/bundle/dist/codex-protocol/v2/ByteRange.js +0 -1
  362. package/bundle/dist/codex-protocol/v2/CancelLoginAccountParams.js +0 -1
  363. package/bundle/dist/codex-protocol/v2/CancelLoginAccountResponse.js +0 -1
  364. package/bundle/dist/codex-protocol/v2/CancelLoginAccountStatus.js +0 -1
  365. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshParams.js +0 -1
  366. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshReason.js +0 -1
  367. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.js +0 -1
  368. package/bundle/dist/codex-protocol/v2/CodexErrorInfo.js +0 -1
  369. package/bundle/dist/codex-protocol/v2/CollabAgentState.js +0 -1
  370. package/bundle/dist/codex-protocol/v2/CollabAgentStatus.js +0 -1
  371. package/bundle/dist/codex-protocol/v2/CollabAgentTool.js +0 -1
  372. package/bundle/dist/codex-protocol/v2/CollabAgentToolCallStatus.js +0 -1
  373. package/bundle/dist/codex-protocol/v2/CollaborationModeMask.js +0 -1
  374. package/bundle/dist/codex-protocol/v2/CommandAction.js +0 -1
  375. package/bundle/dist/codex-protocol/v2/CommandExecOutputDeltaNotification.js +0 -1
  376. package/bundle/dist/codex-protocol/v2/CommandExecOutputStream.js +0 -1
  377. package/bundle/dist/codex-protocol/v2/CommandExecParams.js +0 -1
  378. package/bundle/dist/codex-protocol/v2/CommandExecResizeParams.js +0 -1
  379. package/bundle/dist/codex-protocol/v2/CommandExecResizeResponse.js +0 -1
  380. package/bundle/dist/codex-protocol/v2/CommandExecResponse.js +0 -1
  381. package/bundle/dist/codex-protocol/v2/CommandExecTerminalSize.js +0 -1
  382. package/bundle/dist/codex-protocol/v2/CommandExecTerminateParams.js +0 -1
  383. package/bundle/dist/codex-protocol/v2/CommandExecTerminateResponse.js +0 -1
  384. package/bundle/dist/codex-protocol/v2/CommandExecWriteParams.js +0 -1
  385. package/bundle/dist/codex-protocol/v2/CommandExecWriteResponse.js +0 -1
  386. package/bundle/dist/codex-protocol/v2/CommandExecutionApprovalDecision.js +0 -1
  387. package/bundle/dist/codex-protocol/v2/CommandExecutionOutputDeltaNotification.js +0 -1
  388. package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalParams.js +0 -1
  389. package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalResponse.js +0 -1
  390. package/bundle/dist/codex-protocol/v2/CommandExecutionSource.js +0 -1
  391. package/bundle/dist/codex-protocol/v2/CommandExecutionStatus.js +0 -1
  392. package/bundle/dist/codex-protocol/v2/CommandMigration.js +0 -1
  393. package/bundle/dist/codex-protocol/v2/Config.js +0 -1
  394. package/bundle/dist/codex-protocol/v2/ConfigBatchWriteParams.js +0 -1
  395. package/bundle/dist/codex-protocol/v2/ConfigEdit.js +0 -1
  396. package/bundle/dist/codex-protocol/v2/ConfigLayer.js +0 -1
  397. package/bundle/dist/codex-protocol/v2/ConfigLayerMetadata.js +0 -1
  398. package/bundle/dist/codex-protocol/v2/ConfigLayerSource.js +0 -1
  399. package/bundle/dist/codex-protocol/v2/ConfigReadParams.js +0 -1
  400. package/bundle/dist/codex-protocol/v2/ConfigReadResponse.js +0 -1
  401. package/bundle/dist/codex-protocol/v2/ConfigRequirements.js +0 -1
  402. package/bundle/dist/codex-protocol/v2/ConfigRequirementsReadResponse.js +0 -1
  403. package/bundle/dist/codex-protocol/v2/ConfigValueWriteParams.js +0 -1
  404. package/bundle/dist/codex-protocol/v2/ConfigWarningNotification.js +0 -1
  405. package/bundle/dist/codex-protocol/v2/ConfigWriteResponse.js +0 -1
  406. package/bundle/dist/codex-protocol/v2/ConfiguredHookHandler.js +0 -1
  407. package/bundle/dist/codex-protocol/v2/ConfiguredHookMatcherGroup.js +0 -1
  408. package/bundle/dist/codex-protocol/v2/ContextCompactedNotification.js +0 -1
  409. package/bundle/dist/codex-protocol/v2/CreditsSnapshot.js +0 -1
  410. package/bundle/dist/codex-protocol/v2/DeprecationNoticeNotification.js +0 -1
  411. package/bundle/dist/codex-protocol/v2/DynamicToolCallOutputContentItem.js +0 -1
  412. package/bundle/dist/codex-protocol/v2/DynamicToolCallParams.js +0 -1
  413. package/bundle/dist/codex-protocol/v2/DynamicToolCallResponse.js +0 -1
  414. package/bundle/dist/codex-protocol/v2/DynamicToolCallStatus.js +0 -1
  415. package/bundle/dist/codex-protocol/v2/DynamicToolSpec.js +0 -1
  416. package/bundle/dist/codex-protocol/v2/ErrorNotification.js +0 -1
  417. package/bundle/dist/codex-protocol/v2/ExecPolicyAmendment.js +0 -1
  418. package/bundle/dist/codex-protocol/v2/ExperimentalFeature.js +0 -1
  419. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.js +0 -1
  420. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.js +0 -1
  421. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListParams.js +0 -1
  422. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListResponse.js +0 -1
  423. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureStage.js +0 -1
  424. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectParams.js +0 -1
  425. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectResponse.js +0 -1
  426. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.js +0 -1
  427. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportParams.js +0 -1
  428. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportResponse.js +0 -1
  429. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItem.js +0 -1
  430. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItemType.js +0 -1
  431. package/bundle/dist/codex-protocol/v2/FeedbackUploadParams.js +0 -1
  432. package/bundle/dist/codex-protocol/v2/FeedbackUploadResponse.js +0 -1
  433. package/bundle/dist/codex-protocol/v2/FileChangeApprovalDecision.js +0 -1
  434. package/bundle/dist/codex-protocol/v2/FileChangeOutputDeltaNotification.js +0 -1
  435. package/bundle/dist/codex-protocol/v2/FileChangePatchUpdatedNotification.js +0 -1
  436. package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalParams.js +0 -1
  437. package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalResponse.js +0 -1
  438. package/bundle/dist/codex-protocol/v2/FileSystemAccessMode.js +0 -1
  439. package/bundle/dist/codex-protocol/v2/FileSystemPath.js +0 -1
  440. package/bundle/dist/codex-protocol/v2/FileSystemSandboxEntry.js +0 -1
  441. package/bundle/dist/codex-protocol/v2/FileSystemSpecialPath.js +0 -1
  442. package/bundle/dist/codex-protocol/v2/FileUpdateChange.js +0 -1
  443. package/bundle/dist/codex-protocol/v2/FsChangedNotification.js +0 -1
  444. package/bundle/dist/codex-protocol/v2/FsCopyParams.js +0 -1
  445. package/bundle/dist/codex-protocol/v2/FsCopyResponse.js +0 -1
  446. package/bundle/dist/codex-protocol/v2/FsCreateDirectoryParams.js +0 -1
  447. package/bundle/dist/codex-protocol/v2/FsCreateDirectoryResponse.js +0 -1
  448. package/bundle/dist/codex-protocol/v2/FsGetMetadataParams.js +0 -1
  449. package/bundle/dist/codex-protocol/v2/FsGetMetadataResponse.js +0 -1
  450. package/bundle/dist/codex-protocol/v2/FsReadDirectoryEntry.js +0 -1
  451. package/bundle/dist/codex-protocol/v2/FsReadDirectoryParams.js +0 -1
  452. package/bundle/dist/codex-protocol/v2/FsReadDirectoryResponse.js +0 -1
  453. package/bundle/dist/codex-protocol/v2/FsReadFileParams.js +0 -1
  454. package/bundle/dist/codex-protocol/v2/FsReadFileResponse.js +0 -1
  455. package/bundle/dist/codex-protocol/v2/FsRemoveParams.js +0 -1
  456. package/bundle/dist/codex-protocol/v2/FsRemoveResponse.js +0 -1
  457. package/bundle/dist/codex-protocol/v2/FsUnwatchParams.js +0 -1
  458. package/bundle/dist/codex-protocol/v2/FsUnwatchResponse.js +0 -1
  459. package/bundle/dist/codex-protocol/v2/FsWatchParams.js +0 -1
  460. package/bundle/dist/codex-protocol/v2/FsWatchResponse.js +0 -1
  461. package/bundle/dist/codex-protocol/v2/FsWriteFileParams.js +0 -1
  462. package/bundle/dist/codex-protocol/v2/FsWriteFileResponse.js +0 -1
  463. package/bundle/dist/codex-protocol/v2/GetAccountParams.js +0 -1
  464. package/bundle/dist/codex-protocol/v2/GetAccountRateLimitsResponse.js +0 -1
  465. package/bundle/dist/codex-protocol/v2/GetAccountResponse.js +0 -1
  466. package/bundle/dist/codex-protocol/v2/GitInfo.js +0 -1
  467. package/bundle/dist/codex-protocol/v2/GrantedPermissionProfile.js +0 -1
  468. package/bundle/dist/codex-protocol/v2/GuardianApprovalReview.js +0 -1
  469. package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewAction.js +0 -1
  470. package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewStatus.js +0 -1
  471. package/bundle/dist/codex-protocol/v2/GuardianCommandSource.js +0 -1
  472. package/bundle/dist/codex-protocol/v2/GuardianRiskLevel.js +0 -1
  473. package/bundle/dist/codex-protocol/v2/GuardianUserAuthorization.js +0 -1
  474. package/bundle/dist/codex-protocol/v2/GuardianWarningNotification.js +0 -1
  475. package/bundle/dist/codex-protocol/v2/HookCompletedNotification.js +0 -1
  476. package/bundle/dist/codex-protocol/v2/HookErrorInfo.js +0 -1
  477. package/bundle/dist/codex-protocol/v2/HookEventName.js +0 -1
  478. package/bundle/dist/codex-protocol/v2/HookExecutionMode.js +0 -1
  479. package/bundle/dist/codex-protocol/v2/HookHandlerType.js +0 -1
  480. package/bundle/dist/codex-protocol/v2/HookMetadata.js +0 -1
  481. package/bundle/dist/codex-protocol/v2/HookMigration.js +0 -1
  482. package/bundle/dist/codex-protocol/v2/HookOutputEntry.js +0 -1
  483. package/bundle/dist/codex-protocol/v2/HookOutputEntryKind.js +0 -1
  484. package/bundle/dist/codex-protocol/v2/HookPromptFragment.js +0 -1
  485. package/bundle/dist/codex-protocol/v2/HookRunStatus.js +0 -1
  486. package/bundle/dist/codex-protocol/v2/HookRunSummary.js +0 -1
  487. package/bundle/dist/codex-protocol/v2/HookScope.js +0 -1
  488. package/bundle/dist/codex-protocol/v2/HookSource.js +0 -1
  489. package/bundle/dist/codex-protocol/v2/HookStartedNotification.js +0 -1
  490. package/bundle/dist/codex-protocol/v2/HookTrustStatus.js +0 -1
  491. package/bundle/dist/codex-protocol/v2/HooksListEntry.js +0 -1
  492. package/bundle/dist/codex-protocol/v2/HooksListParams.js +0 -1
  493. package/bundle/dist/codex-protocol/v2/HooksListResponse.js +0 -1
  494. package/bundle/dist/codex-protocol/v2/ItemCompletedNotification.js +0 -1
  495. package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.js +0 -1
  496. package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.js +0 -1
  497. package/bundle/dist/codex-protocol/v2/ItemStartedNotification.js +0 -1
  498. package/bundle/dist/codex-protocol/v2/ListMcpServerStatusParams.js +0 -1
  499. package/bundle/dist/codex-protocol/v2/ListMcpServerStatusResponse.js +0 -1
  500. package/bundle/dist/codex-protocol/v2/LoginAccountParams.js +0 -1
  501. package/bundle/dist/codex-protocol/v2/LoginAccountResponse.js +0 -1
  502. package/bundle/dist/codex-protocol/v2/LogoutAccountResponse.js +0 -1
  503. package/bundle/dist/codex-protocol/v2/ManagedHooksRequirements.js +0 -1
  504. package/bundle/dist/codex-protocol/v2/MarketplaceAddParams.js +0 -1
  505. package/bundle/dist/codex-protocol/v2/MarketplaceAddResponse.js +0 -1
  506. package/bundle/dist/codex-protocol/v2/MarketplaceInterface.js +0 -1
  507. package/bundle/dist/codex-protocol/v2/MarketplaceLoadErrorInfo.js +0 -1
  508. package/bundle/dist/codex-protocol/v2/MarketplaceRemoveParams.js +0 -1
  509. package/bundle/dist/codex-protocol/v2/MarketplaceRemoveResponse.js +0 -1
  510. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeErrorInfo.js +0 -1
  511. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeParams.js +0 -1
  512. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeResponse.js +0 -1
  513. package/bundle/dist/codex-protocol/v2/McpAuthStatus.js +0 -1
  514. package/bundle/dist/codex-protocol/v2/McpElicitationArrayType.js +0 -1
  515. package/bundle/dist/codex-protocol/v2/McpElicitationBooleanSchema.js +0 -1
  516. package/bundle/dist/codex-protocol/v2/McpElicitationBooleanType.js +0 -1
  517. package/bundle/dist/codex-protocol/v2/McpElicitationConstOption.js +0 -1
  518. package/bundle/dist/codex-protocol/v2/McpElicitationEnumSchema.js +0 -1
  519. package/bundle/dist/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.js +0 -1
  520. package/bundle/dist/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.js +0 -1
  521. package/bundle/dist/codex-protocol/v2/McpElicitationNumberSchema.js +0 -1
  522. package/bundle/dist/codex-protocol/v2/McpElicitationNumberType.js +0 -1
  523. package/bundle/dist/codex-protocol/v2/McpElicitationObjectType.js +0 -1
  524. package/bundle/dist/codex-protocol/v2/McpElicitationPrimitiveSchema.js +0 -1
  525. package/bundle/dist/codex-protocol/v2/McpElicitationSchema.js +0 -1
  526. package/bundle/dist/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.js +0 -1
  527. package/bundle/dist/codex-protocol/v2/McpElicitationStringFormat.js +0 -1
  528. package/bundle/dist/codex-protocol/v2/McpElicitationStringSchema.js +0 -1
  529. package/bundle/dist/codex-protocol/v2/McpElicitationStringType.js +0 -1
  530. package/bundle/dist/codex-protocol/v2/McpElicitationTitledEnumItems.js +0 -1
  531. package/bundle/dist/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.js +0 -1
  532. package/bundle/dist/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.js +0 -1
  533. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledEnumItems.js +0 -1
  534. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.js +0 -1
  535. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.js +0 -1
  536. package/bundle/dist/codex-protocol/v2/McpResourceReadParams.js +0 -1
  537. package/bundle/dist/codex-protocol/v2/McpResourceReadResponse.js +0 -1
  538. package/bundle/dist/codex-protocol/v2/McpServerElicitationAction.js +0 -1
  539. package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestParams.js +0 -1
  540. package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestResponse.js +0 -1
  541. package/bundle/dist/codex-protocol/v2/McpServerMigration.js +0 -1
  542. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginCompletedNotification.js +0 -1
  543. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginParams.js +0 -1
  544. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginResponse.js +0 -1
  545. package/bundle/dist/codex-protocol/v2/McpServerRefreshResponse.js +0 -1
  546. package/bundle/dist/codex-protocol/v2/McpServerStartupState.js +0 -1
  547. package/bundle/dist/codex-protocol/v2/McpServerStatus.js +0 -1
  548. package/bundle/dist/codex-protocol/v2/McpServerStatusDetail.js +0 -1
  549. package/bundle/dist/codex-protocol/v2/McpServerStatusUpdatedNotification.js +0 -1
  550. package/bundle/dist/codex-protocol/v2/McpServerToolCallParams.js +0 -1
  551. package/bundle/dist/codex-protocol/v2/McpServerToolCallResponse.js +0 -1
  552. package/bundle/dist/codex-protocol/v2/McpToolCallError.js +0 -1
  553. package/bundle/dist/codex-protocol/v2/McpToolCallProgressNotification.js +0 -1
  554. package/bundle/dist/codex-protocol/v2/McpToolCallResult.js +0 -1
  555. package/bundle/dist/codex-protocol/v2/McpToolCallStatus.js +0 -1
  556. package/bundle/dist/codex-protocol/v2/MemoryCitation.js +0 -1
  557. package/bundle/dist/codex-protocol/v2/MemoryCitationEntry.js +0 -1
  558. package/bundle/dist/codex-protocol/v2/MergeStrategy.js +0 -1
  559. package/bundle/dist/codex-protocol/v2/MigrationDetails.js +0 -1
  560. package/bundle/dist/codex-protocol/v2/Model.js +0 -1
  561. package/bundle/dist/codex-protocol/v2/ModelAvailabilityNux.js +0 -1
  562. package/bundle/dist/codex-protocol/v2/ModelListParams.js +0 -1
  563. package/bundle/dist/codex-protocol/v2/ModelListResponse.js +0 -1
  564. package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadParams.js +0 -1
  565. package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.js +0 -1
  566. package/bundle/dist/codex-protocol/v2/ModelRerouteReason.js +0 -1
  567. package/bundle/dist/codex-protocol/v2/ModelReroutedNotification.js +0 -1
  568. package/bundle/dist/codex-protocol/v2/ModelServiceTier.js +0 -1
  569. package/bundle/dist/codex-protocol/v2/ModelUpgradeInfo.js +0 -1
  570. package/bundle/dist/codex-protocol/v2/ModelVerification.js +0 -1
  571. package/bundle/dist/codex-protocol/v2/ModelVerificationNotification.js +0 -1
  572. package/bundle/dist/codex-protocol/v2/NetworkAccess.js +0 -1
  573. package/bundle/dist/codex-protocol/v2/NetworkApprovalContext.js +0 -1
  574. package/bundle/dist/codex-protocol/v2/NetworkApprovalProtocol.js +0 -1
  575. package/bundle/dist/codex-protocol/v2/NetworkDomainPermission.js +0 -1
  576. package/bundle/dist/codex-protocol/v2/NetworkPolicyAmendment.js +0 -1
  577. package/bundle/dist/codex-protocol/v2/NetworkPolicyRuleAction.js +0 -1
  578. package/bundle/dist/codex-protocol/v2/NetworkRequirements.js +0 -1
  579. package/bundle/dist/codex-protocol/v2/NetworkUnixSocketPermission.js +0 -1
  580. package/bundle/dist/codex-protocol/v2/NonSteerableTurnKind.js +0 -1
  581. package/bundle/dist/codex-protocol/v2/OverriddenMetadata.js +0 -1
  582. package/bundle/dist/codex-protocol/v2/PatchApplyStatus.js +0 -1
  583. package/bundle/dist/codex-protocol/v2/PatchChangeKind.js +0 -1
  584. package/bundle/dist/codex-protocol/v2/PermissionGrantScope.js +0 -1
  585. package/bundle/dist/codex-protocol/v2/PermissionProfile.js +0 -1
  586. package/bundle/dist/codex-protocol/v2/PermissionProfileFileSystemPermissions.js +0 -1
  587. package/bundle/dist/codex-protocol/v2/PermissionProfileModificationParams.js +0 -1
  588. package/bundle/dist/codex-protocol/v2/PermissionProfileNetworkPermissions.js +0 -1
  589. package/bundle/dist/codex-protocol/v2/PermissionProfileSelectionParams.js +0 -1
  590. package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalParams.js +0 -1
  591. package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalResponse.js +0 -1
  592. package/bundle/dist/codex-protocol/v2/PlanDeltaNotification.js +0 -1
  593. package/bundle/dist/codex-protocol/v2/PluginAuthPolicy.js +0 -1
  594. package/bundle/dist/codex-protocol/v2/PluginAvailability.js +0 -1
  595. package/bundle/dist/codex-protocol/v2/PluginDetail.js +0 -1
  596. package/bundle/dist/codex-protocol/v2/PluginHookSummary.js +0 -1
  597. package/bundle/dist/codex-protocol/v2/PluginInstallParams.js +0 -1
  598. package/bundle/dist/codex-protocol/v2/PluginInstallPolicy.js +0 -1
  599. package/bundle/dist/codex-protocol/v2/PluginInstallResponse.js +0 -1
  600. package/bundle/dist/codex-protocol/v2/PluginInterface.js +0 -1
  601. package/bundle/dist/codex-protocol/v2/PluginListMarketplaceKind.js +0 -1
  602. package/bundle/dist/codex-protocol/v2/PluginListParams.js +0 -1
  603. package/bundle/dist/codex-protocol/v2/PluginListResponse.js +0 -1
  604. package/bundle/dist/codex-protocol/v2/PluginMarketplaceEntry.js +0 -1
  605. package/bundle/dist/codex-protocol/v2/PluginReadParams.js +0 -1
  606. package/bundle/dist/codex-protocol/v2/PluginReadResponse.js +0 -1
  607. package/bundle/dist/codex-protocol/v2/PluginShareContext.js +0 -1
  608. package/bundle/dist/codex-protocol/v2/PluginShareDeleteParams.js +0 -1
  609. package/bundle/dist/codex-protocol/v2/PluginShareDeleteResponse.js +0 -1
  610. package/bundle/dist/codex-protocol/v2/PluginShareDiscoverability.js +0 -1
  611. package/bundle/dist/codex-protocol/v2/PluginShareListItem.js +0 -1
  612. package/bundle/dist/codex-protocol/v2/PluginShareListParams.js +0 -1
  613. package/bundle/dist/codex-protocol/v2/PluginShareListResponse.js +0 -1
  614. package/bundle/dist/codex-protocol/v2/PluginSharePrincipal.js +0 -1
  615. package/bundle/dist/codex-protocol/v2/PluginSharePrincipalType.js +0 -1
  616. package/bundle/dist/codex-protocol/v2/PluginShareSaveParams.js +0 -1
  617. package/bundle/dist/codex-protocol/v2/PluginShareSaveResponse.js +0 -1
  618. package/bundle/dist/codex-protocol/v2/PluginShareTarget.js +0 -1
  619. package/bundle/dist/codex-protocol/v2/PluginShareUpdateDiscoverability.js +0 -1
  620. package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsParams.js +0 -1
  621. package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsResponse.js +0 -1
  622. package/bundle/dist/codex-protocol/v2/PluginSkillReadParams.js +0 -1
  623. package/bundle/dist/codex-protocol/v2/PluginSkillReadResponse.js +0 -1
  624. package/bundle/dist/codex-protocol/v2/PluginSource.js +0 -1
  625. package/bundle/dist/codex-protocol/v2/PluginSummary.js +0 -1
  626. package/bundle/dist/codex-protocol/v2/PluginUninstallParams.js +0 -1
  627. package/bundle/dist/codex-protocol/v2/PluginUninstallResponse.js +0 -1
  628. package/bundle/dist/codex-protocol/v2/PluginsMigration.js +0 -1
  629. package/bundle/dist/codex-protocol/v2/ProcessExitedNotification.js +0 -1
  630. package/bundle/dist/codex-protocol/v2/ProcessOutputDeltaNotification.js +0 -1
  631. package/bundle/dist/codex-protocol/v2/ProcessOutputStream.js +0 -1
  632. package/bundle/dist/codex-protocol/v2/ProcessTerminalSize.js +0 -1
  633. package/bundle/dist/codex-protocol/v2/ProfileV2.js +0 -1
  634. package/bundle/dist/codex-protocol/v2/RateLimitReachedType.js +0 -1
  635. package/bundle/dist/codex-protocol/v2/RateLimitSnapshot.js +0 -1
  636. package/bundle/dist/codex-protocol/v2/RateLimitWindow.js +0 -1
  637. package/bundle/dist/codex-protocol/v2/RawResponseItemCompletedNotification.js +0 -1
  638. package/bundle/dist/codex-protocol/v2/ReasoningEffortOption.js +0 -1
  639. package/bundle/dist/codex-protocol/v2/ReasoningSummaryPartAddedNotification.js +0 -1
  640. package/bundle/dist/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.js +0 -1
  641. package/bundle/dist/codex-protocol/v2/ReasoningTextDeltaNotification.js +0 -1
  642. package/bundle/dist/codex-protocol/v2/RemoteControlConnectionStatus.js +0 -1
  643. package/bundle/dist/codex-protocol/v2/RemoteControlStatusChangedNotification.js +0 -1
  644. package/bundle/dist/codex-protocol/v2/RequestPermissionProfile.js +0 -1
  645. package/bundle/dist/codex-protocol/v2/ResidencyRequirement.js +0 -1
  646. package/bundle/dist/codex-protocol/v2/ReviewDelivery.js +0 -1
  647. package/bundle/dist/codex-protocol/v2/ReviewStartParams.js +0 -1
  648. package/bundle/dist/codex-protocol/v2/ReviewStartResponse.js +0 -1
  649. package/bundle/dist/codex-protocol/v2/ReviewTarget.js +0 -1
  650. package/bundle/dist/codex-protocol/v2/SandboxMode.js +0 -1
  651. package/bundle/dist/codex-protocol/v2/SandboxPolicy.js +0 -1
  652. package/bundle/dist/codex-protocol/v2/SandboxWorkspaceWrite.js +0 -1
  653. package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailParams.js +0 -1
  654. package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.js +0 -1
  655. package/bundle/dist/codex-protocol/v2/ServerRequestResolvedNotification.js +0 -1
  656. package/bundle/dist/codex-protocol/v2/SessionMigration.js +0 -1
  657. package/bundle/dist/codex-protocol/v2/SessionSource.js +0 -1
  658. package/bundle/dist/codex-protocol/v2/SkillDependencies.js +0 -1
  659. package/bundle/dist/codex-protocol/v2/SkillErrorInfo.js +0 -1
  660. package/bundle/dist/codex-protocol/v2/SkillInterface.js +0 -1
  661. package/bundle/dist/codex-protocol/v2/SkillMetadata.js +0 -1
  662. package/bundle/dist/codex-protocol/v2/SkillScope.js +0 -1
  663. package/bundle/dist/codex-protocol/v2/SkillSummary.js +0 -1
  664. package/bundle/dist/codex-protocol/v2/SkillToolDependency.js +0 -1
  665. package/bundle/dist/codex-protocol/v2/SkillsChangedNotification.js +0 -1
  666. package/bundle/dist/codex-protocol/v2/SkillsConfigWriteParams.js +0 -1
  667. package/bundle/dist/codex-protocol/v2/SkillsConfigWriteResponse.js +0 -1
  668. package/bundle/dist/codex-protocol/v2/SkillsListEntry.js +0 -1
  669. package/bundle/dist/codex-protocol/v2/SkillsListParams.js +0 -1
  670. package/bundle/dist/codex-protocol/v2/SkillsListResponse.js +0 -1
  671. package/bundle/dist/codex-protocol/v2/SortDirection.js +0 -1
  672. package/bundle/dist/codex-protocol/v2/SubagentMigration.js +0 -1
  673. package/bundle/dist/codex-protocol/v2/TerminalInteractionNotification.js +0 -1
  674. package/bundle/dist/codex-protocol/v2/TextElement.js +0 -1
  675. package/bundle/dist/codex-protocol/v2/TextPosition.js +0 -1
  676. package/bundle/dist/codex-protocol/v2/TextRange.js +0 -1
  677. package/bundle/dist/codex-protocol/v2/Thread.js +0 -1
  678. package/bundle/dist/codex-protocol/v2/ThreadActiveFlag.js +0 -1
  679. package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.js +0 -1
  680. package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.js +0 -1
  681. package/bundle/dist/codex-protocol/v2/ThreadArchiveParams.js +0 -1
  682. package/bundle/dist/codex-protocol/v2/ThreadArchiveResponse.js +0 -1
  683. package/bundle/dist/codex-protocol/v2/ThreadArchivedNotification.js +0 -1
  684. package/bundle/dist/codex-protocol/v2/ThreadClosedNotification.js +0 -1
  685. package/bundle/dist/codex-protocol/v2/ThreadCompactStartParams.js +0 -1
  686. package/bundle/dist/codex-protocol/v2/ThreadCompactStartResponse.js +0 -1
  687. package/bundle/dist/codex-protocol/v2/ThreadForkParams.js +0 -1
  688. package/bundle/dist/codex-protocol/v2/ThreadForkResponse.js +0 -1
  689. package/bundle/dist/codex-protocol/v2/ThreadGoal.js +0 -1
  690. package/bundle/dist/codex-protocol/v2/ThreadGoalClearedNotification.js +0 -1
  691. package/bundle/dist/codex-protocol/v2/ThreadGoalStatus.js +0 -1
  692. package/bundle/dist/codex-protocol/v2/ThreadGoalUpdatedNotification.js +0 -1
  693. package/bundle/dist/codex-protocol/v2/ThreadInjectItemsParams.js +0 -1
  694. package/bundle/dist/codex-protocol/v2/ThreadInjectItemsResponse.js +0 -1
  695. package/bundle/dist/codex-protocol/v2/ThreadItem.js +0 -1
  696. package/bundle/dist/codex-protocol/v2/ThreadListParams.js +0 -1
  697. package/bundle/dist/codex-protocol/v2/ThreadListResponse.js +0 -1
  698. package/bundle/dist/codex-protocol/v2/ThreadLoadedListParams.js +0 -1
  699. package/bundle/dist/codex-protocol/v2/ThreadLoadedListResponse.js +0 -1
  700. package/bundle/dist/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.js +0 -1
  701. package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateParams.js +0 -1
  702. package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateResponse.js +0 -1
  703. package/bundle/dist/codex-protocol/v2/ThreadNameUpdatedNotification.js +0 -1
  704. package/bundle/dist/codex-protocol/v2/ThreadReadParams.js +0 -1
  705. package/bundle/dist/codex-protocol/v2/ThreadReadResponse.js +0 -1
  706. package/bundle/dist/codex-protocol/v2/ThreadRealtimeAudioChunk.js +0 -1
  707. package/bundle/dist/codex-protocol/v2/ThreadRealtimeClosedNotification.js +0 -1
  708. package/bundle/dist/codex-protocol/v2/ThreadRealtimeErrorNotification.js +0 -1
  709. package/bundle/dist/codex-protocol/v2/ThreadRealtimeItemAddedNotification.js +0 -1
  710. package/bundle/dist/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.js +0 -1
  711. package/bundle/dist/codex-protocol/v2/ThreadRealtimeSdpNotification.js +0 -1
  712. package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartTransport.js +0 -1
  713. package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartedNotification.js +0 -1
  714. package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.js +0 -1
  715. package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.js +0 -1
  716. package/bundle/dist/codex-protocol/v2/ThreadResumeParams.js +0 -1
  717. package/bundle/dist/codex-protocol/v2/ThreadResumeResponse.js +0 -1
  718. package/bundle/dist/codex-protocol/v2/ThreadRollbackParams.js +0 -1
  719. package/bundle/dist/codex-protocol/v2/ThreadRollbackResponse.js +0 -1
  720. package/bundle/dist/codex-protocol/v2/ThreadSetNameParams.js +0 -1
  721. package/bundle/dist/codex-protocol/v2/ThreadSetNameResponse.js +0 -1
  722. package/bundle/dist/codex-protocol/v2/ThreadShellCommandParams.js +0 -1
  723. package/bundle/dist/codex-protocol/v2/ThreadShellCommandResponse.js +0 -1
  724. package/bundle/dist/codex-protocol/v2/ThreadSortKey.js +0 -1
  725. package/bundle/dist/codex-protocol/v2/ThreadSource.js +0 -1
  726. package/bundle/dist/codex-protocol/v2/ThreadSourceKind.js +0 -1
  727. package/bundle/dist/codex-protocol/v2/ThreadStartParams.js +0 -1
  728. package/bundle/dist/codex-protocol/v2/ThreadStartResponse.js +0 -1
  729. package/bundle/dist/codex-protocol/v2/ThreadStartSource.js +0 -1
  730. package/bundle/dist/codex-protocol/v2/ThreadStartedNotification.js +0 -1
  731. package/bundle/dist/codex-protocol/v2/ThreadStatus.js +0 -1
  732. package/bundle/dist/codex-protocol/v2/ThreadStatusChangedNotification.js +0 -1
  733. package/bundle/dist/codex-protocol/v2/ThreadTokenUsage.js +0 -1
  734. package/bundle/dist/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.js +0 -1
  735. package/bundle/dist/codex-protocol/v2/ThreadUnarchiveParams.js +0 -1
  736. package/bundle/dist/codex-protocol/v2/ThreadUnarchiveResponse.js +0 -1
  737. package/bundle/dist/codex-protocol/v2/ThreadUnarchivedNotification.js +0 -1
  738. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeParams.js +0 -1
  739. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeResponse.js +0 -1
  740. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeStatus.js +0 -1
  741. package/bundle/dist/codex-protocol/v2/TokenUsageBreakdown.js +0 -1
  742. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputAnswer.js +0 -1
  743. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputOption.js +0 -1
  744. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputParams.js +0 -1
  745. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputQuestion.js +0 -1
  746. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputResponse.js +0 -1
  747. package/bundle/dist/codex-protocol/v2/ToolsV2.js +0 -1
  748. package/bundle/dist/codex-protocol/v2/Turn.js +0 -1
  749. package/bundle/dist/codex-protocol/v2/TurnCompletedNotification.js +0 -1
  750. package/bundle/dist/codex-protocol/v2/TurnDiffUpdatedNotification.js +0 -1
  751. package/bundle/dist/codex-protocol/v2/TurnEnvironmentParams.js +0 -1
  752. package/bundle/dist/codex-protocol/v2/TurnError.js +0 -1
  753. package/bundle/dist/codex-protocol/v2/TurnInterruptParams.js +0 -1
  754. package/bundle/dist/codex-protocol/v2/TurnInterruptResponse.js +0 -1
  755. package/bundle/dist/codex-protocol/v2/TurnItemsView.js +0 -1
  756. package/bundle/dist/codex-protocol/v2/TurnPlanStep.js +0 -1
  757. package/bundle/dist/codex-protocol/v2/TurnPlanStepStatus.js +0 -1
  758. package/bundle/dist/codex-protocol/v2/TurnPlanUpdatedNotification.js +0 -1
  759. package/bundle/dist/codex-protocol/v2/TurnStartParams.js +0 -1
  760. package/bundle/dist/codex-protocol/v2/TurnStartResponse.js +0 -1
  761. package/bundle/dist/codex-protocol/v2/TurnStartedNotification.js +0 -1
  762. package/bundle/dist/codex-protocol/v2/TurnStatus.js +0 -1
  763. package/bundle/dist/codex-protocol/v2/TurnSteerParams.js +0 -1
  764. package/bundle/dist/codex-protocol/v2/TurnSteerResponse.js +0 -1
  765. package/bundle/dist/codex-protocol/v2/UserInput.js +0 -1
  766. package/bundle/dist/codex-protocol/v2/WarningNotification.js +0 -1
  767. package/bundle/dist/codex-protocol/v2/WebSearchAction.js +0 -1
  768. package/bundle/dist/codex-protocol/v2/WindowsSandboxReadiness.js +0 -1
  769. package/bundle/dist/codex-protocol/v2/WindowsSandboxReadinessResponse.js +0 -1
  770. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.js +0 -1
  771. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupMode.js +0 -1
  772. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartParams.js +0 -1
  773. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartResponse.js +0 -1
  774. package/bundle/dist/codex-protocol/v2/WindowsWorldWritableWarningNotification.js +0 -1
  775. package/bundle/dist/codex-protocol/v2/WriteStatus.js +0 -1
  776. package/bundle/dist/codex-protocol/v2/index.js +0 -7
  777. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +0 -9
  778. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +0 -41
  779. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +0 -19
  780. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +0 -202
  781. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +0 -46
  782. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +0 -119
  783. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +0 -3044
  784. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +0 -59
  785. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/index.js +0 -28
  786. package/bundle/dist/utils/providers/openai/codex-rpc.js +0 -153
  787. package/bundle/dist/utils/providers/openai/codex-worker.js +0 -642
  788. package/bundle/dist/utils/providers/openai/openai-worker-pool-config.js +0 -51
  789. package/bundle/src/codex-protocol/AbsolutePathBuf.ts +0 -14
  790. package/bundle/src/codex-protocol/AgentPath.ts +0 -5
  791. package/bundle/src/codex-protocol/ApplyPatchApprovalParams.ts +0 -24
  792. package/bundle/src/codex-protocol/ApplyPatchApprovalResponse.ts +0 -6
  793. package/bundle/src/codex-protocol/AuthMode.ts +0 -8
  794. package/bundle/src/codex-protocol/ClientInfo.ts +0 -5
  795. package/bundle/src/codex-protocol/ClientNotification.ts +0 -5
  796. package/bundle/src/codex-protocol/ClientRequest.ts +0 -176
  797. package/bundle/src/codex-protocol/CollaborationMode.ts +0 -10
  798. package/bundle/src/codex-protocol/ContentItem.ts +0 -9
  799. package/bundle/src/codex-protocol/ConversationGitInfo.ts +0 -9
  800. package/bundle/src/codex-protocol/ConversationSummary.ts +0 -19
  801. package/bundle/src/codex-protocol/ExecCommandApprovalParams.ts +0 -22
  802. package/bundle/src/codex-protocol/ExecCommandApprovalResponse.ts +0 -6
  803. package/bundle/src/codex-protocol/ExecPolicyAmendment.ts +0 -12
  804. package/bundle/src/codex-protocol/FileChange.ts +0 -8
  805. package/bundle/src/codex-protocol/ForcedLoginMethod.ts +0 -5
  806. package/bundle/src/codex-protocol/FunctionCallOutputBody.ts +0 -6
  807. package/bundle/src/codex-protocol/FunctionCallOutputContentItem.ts +0 -12
  808. package/bundle/src/codex-protocol/FuzzyFileSearchMatchType.ts +0 -5
  809. package/bundle/src/codex-protocol/FuzzyFileSearchParams.ts +0 -9
  810. package/bundle/src/codex-protocol/FuzzyFileSearchResponse.ts +0 -6
  811. package/bundle/src/codex-protocol/FuzzyFileSearchResult.ts +0 -16
  812. package/bundle/src/codex-protocol/FuzzyFileSearchSessionCompletedNotification.ts +0 -5
  813. package/bundle/src/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.ts +0 -10
  814. package/bundle/src/codex-protocol/GetAuthStatusParams.ts +0 -5
  815. package/bundle/src/codex-protocol/GetAuthStatusResponse.ts +0 -10
  816. package/bundle/src/codex-protocol/GetConversationSummaryParams.ts +0 -6
  817. package/bundle/src/codex-protocol/GetConversationSummaryResponse.ts +0 -6
  818. package/bundle/src/codex-protocol/GitDiffToRemoteParams.ts +0 -5
  819. package/bundle/src/codex-protocol/GitDiffToRemoteResponse.ts +0 -6
  820. package/bundle/src/codex-protocol/GitSha.ts +0 -5
  821. package/bundle/src/codex-protocol/ImageDetail.ts +0 -5
  822. package/bundle/src/codex-protocol/InitializeCapabilities.ts +0 -18
  823. package/bundle/src/codex-protocol/InitializeParams.ts +0 -10
  824. package/bundle/src/codex-protocol/InitializeResponse.ts +0 -22
  825. package/bundle/src/codex-protocol/InputModality.ts +0 -8
  826. package/bundle/src/codex-protocol/InternalSessionSource.ts +0 -5
  827. package/bundle/src/codex-protocol/LocalShellAction.ts +0 -6
  828. package/bundle/src/codex-protocol/LocalShellExecAction.ts +0 -11
  829. package/bundle/src/codex-protocol/LocalShellStatus.ts +0 -5
  830. package/bundle/src/codex-protocol/MessagePhase.ts +0 -11
  831. package/bundle/src/codex-protocol/ModeKind.ts +0 -8
  832. package/bundle/src/codex-protocol/NetworkPolicyAmendment.ts +0 -6
  833. package/bundle/src/codex-protocol/NetworkPolicyRuleAction.ts +0 -5
  834. package/bundle/src/codex-protocol/ParsedCommand.ts +0 -20
  835. package/bundle/src/codex-protocol/Personality.ts +0 -5
  836. package/bundle/src/codex-protocol/PlanType.ts +0 -17
  837. package/bundle/src/codex-protocol/RealtimeConversationVersion.ts +0 -5
  838. package/bundle/src/codex-protocol/RealtimeOutputModality.ts +0 -5
  839. package/bundle/src/codex-protocol/RealtimeVoice.ts +0 -24
  840. package/bundle/src/codex-protocol/RealtimeVoicesList.ts +0 -11
  841. package/bundle/src/codex-protocol/ReasoningEffort.ts +0 -8
  842. package/bundle/src/codex-protocol/ReasoningItemContent.ts +0 -7
  843. package/bundle/src/codex-protocol/ReasoningItemReasoningSummary.ts +0 -5
  844. package/bundle/src/codex-protocol/ReasoningSummary.ts +0 -10
  845. package/bundle/src/codex-protocol/RequestId.ts +0 -5
  846. package/bundle/src/codex-protocol/Resource.ts +0 -19
  847. package/bundle/src/codex-protocol/ResourceContent.ts +0 -27
  848. package/bundle/src/codex-protocol/ResourceTemplate.ts +0 -16
  849. package/bundle/src/codex-protocol/ResponseItem.ts +0 -63
  850. package/bundle/src/codex-protocol/ReviewDecision.ts +0 -17
  851. package/bundle/src/codex-protocol/ServerNotification.ts +0 -154
  852. package/bundle/src/codex-protocol/ServerRequest.ts +0 -47
  853. package/bundle/src/codex-protocol/SessionSource.ts +0 -15
  854. package/bundle/src/codex-protocol/Settings.ts +0 -13
  855. package/bundle/src/codex-protocol/SubAgentSource.ts +0 -20
  856. package/bundle/src/codex-protocol/ThreadId.ts +0 -5
  857. package/bundle/src/codex-protocol/ThreadMemoryMode.ts +0 -5
  858. package/bundle/src/codex-protocol/Tool.ts +0 -18
  859. package/bundle/src/codex-protocol/Verbosity.ts +0 -9
  860. package/bundle/src/codex-protocol/WebSearchAction.ts +0 -9
  861. package/bundle/src/codex-protocol/WebSearchContextSize.ts +0 -5
  862. package/bundle/src/codex-protocol/WebSearchLocation.ts +0 -10
  863. package/bundle/src/codex-protocol/WebSearchMode.ts +0 -5
  864. package/bundle/src/codex-protocol/WebSearchToolConfig.ts +0 -11
  865. package/bundle/src/codex-protocol/index.ts +0 -79
  866. package/bundle/src/codex-protocol/serde_json/JsonValue.ts +0 -11
  867. package/bundle/src/codex-protocol/v2/Account.ts +0 -9
  868. package/bundle/src/codex-protocol/v2/AccountLoginCompletedNotification.ts +0 -9
  869. package/bundle/src/codex-protocol/v2/AccountRateLimitsUpdatedNotification.ts +0 -6
  870. package/bundle/src/codex-protocol/v2/AccountUpdatedNotification.ts +0 -7
  871. package/bundle/src/codex-protocol/v2/ActivePermissionProfile.ts +0 -22
  872. package/bundle/src/codex-protocol/v2/ActivePermissionProfileModification.ts +0 -9
  873. package/bundle/src/codex-protocol/v2/AddCreditsNudgeCreditType.ts +0 -5
  874. package/bundle/src/codex-protocol/v2/AddCreditsNudgeEmailStatus.ts +0 -5
  875. package/bundle/src/codex-protocol/v2/AdditionalFileSystemPermissions.ts +0 -18
  876. package/bundle/src/codex-protocol/v2/AdditionalNetworkPermissions.ts +0 -5
  877. package/bundle/src/codex-protocol/v2/AdditionalPermissionProfile.ts +0 -13
  878. package/bundle/src/codex-protocol/v2/AgentMessageDeltaNotification.ts +0 -10
  879. package/bundle/src/codex-protocol/v2/AnalyticsConfig.ts +0 -14
  880. package/bundle/src/codex-protocol/v2/AppBranding.ts +0 -15
  881. package/bundle/src/codex-protocol/v2/AppInfo.ts +0 -32
  882. package/bundle/src/codex-protocol/v2/AppListUpdatedNotification.ts +0 -9
  883. package/bundle/src/codex-protocol/v2/AppMetadata.ts +0 -20
  884. package/bundle/src/codex-protocol/v2/AppReview.ts +0 -5
  885. package/bundle/src/codex-protocol/v2/AppScreenshot.ts +0 -5
  886. package/bundle/src/codex-protocol/v2/AppSummary.ts +0 -14
  887. package/bundle/src/codex-protocol/v2/AppToolApproval.ts +0 -5
  888. package/bundle/src/codex-protocol/v2/AppToolsConfig.ts +0 -8
  889. package/bundle/src/codex-protocol/v2/ApprovalsReviewer.ts +0 -12
  890. package/bundle/src/codex-protocol/v2/AppsConfig.ts +0 -17
  891. package/bundle/src/codex-protocol/v2/AppsDefaultConfig.ts +0 -9
  892. package/bundle/src/codex-protocol/v2/AppsListParams.ts +0 -25
  893. package/bundle/src/codex-protocol/v2/AppsListResponse.ts +0 -16
  894. package/bundle/src/codex-protocol/v2/AskForApproval.ts +0 -18
  895. package/bundle/src/codex-protocol/v2/AutoReviewDecisionSource.ts +0 -8
  896. package/bundle/src/codex-protocol/v2/ByteRange.ts +0 -5
  897. package/bundle/src/codex-protocol/v2/CancelLoginAccountParams.ts +0 -5
  898. package/bundle/src/codex-protocol/v2/CancelLoginAccountResponse.ts +0 -6
  899. package/bundle/src/codex-protocol/v2/CancelLoginAccountStatus.ts +0 -5
  900. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshParams.ts +0 -18
  901. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshReason.ts +0 -5
  902. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.ts +0 -9
  903. package/bundle/src/codex-protocol/v2/CodexErrorInfo.ts +0 -27
  904. package/bundle/src/codex-protocol/v2/CollabAgentState.ts +0 -6
  905. package/bundle/src/codex-protocol/v2/CollabAgentStatus.ts +0 -12
  906. package/bundle/src/codex-protocol/v2/CollabAgentTool.ts +0 -5
  907. package/bundle/src/codex-protocol/v2/CollabAgentToolCallStatus.ts +0 -5
  908. package/bundle/src/codex-protocol/v2/CollaborationModeMask.ts +0 -15
  909. package/bundle/src/codex-protocol/v2/CommandAction.ts +0 -10
  910. package/bundle/src/codex-protocol/v2/CommandExecOutputDeltaNotification.ts +0 -31
  911. package/bundle/src/codex-protocol/v2/CommandExecOutputStream.ts +0 -8
  912. package/bundle/src/codex-protocol/v2/CommandExecParams.ts +0 -87
  913. package/bundle/src/codex-protocol/v2/CommandExecResizeParams.ts +0 -19
  914. package/bundle/src/codex-protocol/v2/CommandExecResizeResponse.ts +0 -8
  915. package/bundle/src/codex-protocol/v2/CommandExecResponse.ts +0 -25
  916. package/bundle/src/codex-protocol/v2/CommandExecTerminalSize.ts +0 -17
  917. package/bundle/src/codex-protocol/v2/CommandExecTerminateParams.ts +0 -14
  918. package/bundle/src/codex-protocol/v2/CommandExecTerminateResponse.ts +0 -8
  919. package/bundle/src/codex-protocol/v2/CommandExecWriteParams.ts +0 -23
  920. package/bundle/src/codex-protocol/v2/CommandExecWriteResponse.ts +0 -8
  921. package/bundle/src/codex-protocol/v2/CommandExecutionApprovalDecision.ts +0 -13
  922. package/bundle/src/codex-protocol/v2/CommandExecutionOutputDeltaNotification.ts +0 -10
  923. package/bundle/src/codex-protocol/v2/CommandExecutionRequestApprovalParams.ts +0 -47
  924. package/bundle/src/codex-protocol/v2/CommandExecutionRequestApprovalResponse.ts +0 -8
  925. package/bundle/src/codex-protocol/v2/CommandExecutionSource.ts +0 -9
  926. package/bundle/src/codex-protocol/v2/CommandExecutionStatus.ts +0 -5
  927. package/bundle/src/codex-protocol/v2/CommandMigration.ts +0 -5
  928. package/bundle/src/codex-protocol/v2/Config.ts +0 -53
  929. package/bundle/src/codex-protocol/v2/ConfigBatchWriteParams.ts +0 -17
  930. package/bundle/src/codex-protocol/v2/ConfigEdit.ts +0 -7
  931. package/bundle/src/codex-protocol/v2/ConfigLayer.ts +0 -12
  932. package/bundle/src/codex-protocol/v2/ConfigLayerMetadata.ts +0 -6
  933. package/bundle/src/codex-protocol/v2/ConfigLayerSource.ts +0 -27
  934. package/bundle/src/codex-protocol/v2/ConfigReadParams.ts +0 -13
  935. package/bundle/src/codex-protocol/v2/ConfigReadResponse.ts +0 -12
  936. package/bundle/src/codex-protocol/v2/ConfigRequirements.ts +0 -15
  937. package/bundle/src/codex-protocol/v2/ConfigRequirementsReadResponse.ts +0 -11
  938. package/bundle/src/codex-protocol/v2/ConfigValueWriteParams.ts +0 -16
  939. package/bundle/src/codex-protocol/v2/ConfigWarningNotification.ts +0 -23
  940. package/bundle/src/codex-protocol/v2/ConfigWriteResponse.ts +0 -16
  941. package/bundle/src/codex-protocol/v2/ConfiguredHookHandler.ts +0 -14
  942. package/bundle/src/codex-protocol/v2/ConfiguredHookMatcherGroup.ts +0 -9
  943. package/bundle/src/codex-protocol/v2/ContextCompactedNotification.ts +0 -8
  944. package/bundle/src/codex-protocol/v2/CreditsSnapshot.ts +0 -5
  945. package/bundle/src/codex-protocol/v2/DeprecationNoticeNotification.ts +0 -14
  946. package/bundle/src/codex-protocol/v2/DynamicToolCallOutputContentItem.ts +0 -7
  947. package/bundle/src/codex-protocol/v2/DynamicToolCallParams.ts +0 -13
  948. package/bundle/src/codex-protocol/v2/DynamicToolCallResponse.ts +0 -9
  949. package/bundle/src/codex-protocol/v2/DynamicToolCallStatus.ts +0 -5
  950. package/bundle/src/codex-protocol/v2/DynamicToolSpec.ts +0 -12
  951. package/bundle/src/codex-protocol/v2/ErrorNotification.ts +0 -11
  952. package/bundle/src/codex-protocol/v2/ExecPolicyAmendment.ts +0 -5
  953. package/bundle/src/codex-protocol/v2/ExperimentalFeature.ts +0 -38
  954. package/bundle/src/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.ts +0 -13
  955. package/bundle/src/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.ts +0 -10
  956. package/bundle/src/codex-protocol/v2/ExperimentalFeatureListParams.ts +0 -14
  957. package/bundle/src/codex-protocol/v2/ExperimentalFeatureListResponse.ts +0 -13
  958. package/bundle/src/codex-protocol/v2/ExperimentalFeatureStage.ts +0 -10
  959. package/bundle/src/codex-protocol/v2/ExternalAgentConfigDetectParams.ts +0 -14
  960. package/bundle/src/codex-protocol/v2/ExternalAgentConfigDetectResponse.ts +0 -6
  961. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.ts +0 -5
  962. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportParams.ts +0 -8
  963. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportResponse.ts +0 -5
  964. package/bundle/src/codex-protocol/v2/ExternalAgentConfigMigrationItem.ts +0 -15
  965. package/bundle/src/codex-protocol/v2/ExternalAgentConfigMigrationItemType.ts +0 -14
  966. package/bundle/src/codex-protocol/v2/FeedbackUploadParams.ts +0 -12
  967. package/bundle/src/codex-protocol/v2/FeedbackUploadResponse.ts +0 -5
  968. package/bundle/src/codex-protocol/v2/FileChangeApprovalDecision.ts +0 -5
  969. package/bundle/src/codex-protocol/v2/FileChangeOutputDeltaNotification.ts +0 -15
  970. package/bundle/src/codex-protocol/v2/FileChangePatchUpdatedNotification.ts +0 -11
  971. package/bundle/src/codex-protocol/v2/FileChangeRequestApprovalParams.ts +0 -22
  972. package/bundle/src/codex-protocol/v2/FileChangeRequestApprovalResponse.ts +0 -6
  973. package/bundle/src/codex-protocol/v2/FileSystemAccessMode.ts +0 -5
  974. package/bundle/src/codex-protocol/v2/FileSystemPath.ts +0 -10
  975. package/bundle/src/codex-protocol/v2/FileSystemSandboxEntry.ts +0 -7
  976. package/bundle/src/codex-protocol/v2/FileSystemSpecialPath.ts +0 -11
  977. package/bundle/src/codex-protocol/v2/FileUpdateChange.ts +0 -6
  978. package/bundle/src/codex-protocol/v2/FsChangedNotification.ts +0 -18
  979. package/bundle/src/codex-protocol/v2/FsCopyParams.ts +0 -22
  980. package/bundle/src/codex-protocol/v2/FsCopyResponse.ts +0 -8
  981. package/bundle/src/codex-protocol/v2/FsCreateDirectoryParams.ts +0 -18
  982. package/bundle/src/codex-protocol/v2/FsCreateDirectoryResponse.ts +0 -8
  983. package/bundle/src/codex-protocol/v2/FsGetMetadataParams.ts +0 -14
  984. package/bundle/src/codex-protocol/v2/FsGetMetadataResponse.ts +0 -29
  985. package/bundle/src/codex-protocol/v2/FsReadDirectoryEntry.ts +0 -21
  986. package/bundle/src/codex-protocol/v2/FsReadDirectoryParams.ts +0 -14
  987. package/bundle/src/codex-protocol/v2/FsReadDirectoryResponse.ts +0 -14
  988. package/bundle/src/codex-protocol/v2/FsReadFileParams.ts +0 -14
  989. package/bundle/src/codex-protocol/v2/FsReadFileResponse.ts +0 -13
  990. package/bundle/src/codex-protocol/v2/FsRemoveParams.ts +0 -22
  991. package/bundle/src/codex-protocol/v2/FsRemoveResponse.ts +0 -8
  992. package/bundle/src/codex-protocol/v2/FsUnwatchParams.ts +0 -13
  993. package/bundle/src/codex-protocol/v2/FsUnwatchResponse.ts +0 -8
  994. package/bundle/src/codex-protocol/v2/FsWatchParams.ts +0 -18
  995. package/bundle/src/codex-protocol/v2/FsWatchResponse.ts +0 -14
  996. package/bundle/src/codex-protocol/v2/FsWriteFileParams.ts +0 -18
  997. package/bundle/src/codex-protocol/v2/FsWriteFileResponse.ts +0 -8
  998. package/bundle/src/codex-protocol/v2/GetAccountParams.ts +0 -14
  999. package/bundle/src/codex-protocol/v2/GetAccountRateLimitsResponse.ts +0 -15
  1000. package/bundle/src/codex-protocol/v2/GetAccountResponse.ts +0 -6
  1001. package/bundle/src/codex-protocol/v2/GitInfo.ts +0 -5
  1002. package/bundle/src/codex-protocol/v2/GrantedPermissionProfile.ts +0 -10
  1003. package/bundle/src/codex-protocol/v2/GuardianApprovalReview.ts +0 -18
  1004. package/bundle/src/codex-protocol/v2/GuardianApprovalReviewAction.ts +0 -34
  1005. package/bundle/src/codex-protocol/v2/GuardianApprovalReviewStatus.ts +0 -13
  1006. package/bundle/src/codex-protocol/v2/GuardianCommandSource.ts +0 -5
  1007. package/bundle/src/codex-protocol/v2/GuardianRiskLevel.ts +0 -8
  1008. package/bundle/src/codex-protocol/v2/GuardianUserAuthorization.ts +0 -8
  1009. package/bundle/src/codex-protocol/v2/GuardianWarningNotification.ts +0 -14
  1010. package/bundle/src/codex-protocol/v2/HookCompletedNotification.ts +0 -10
  1011. package/bundle/src/codex-protocol/v2/HookErrorInfo.ts +0 -5
  1012. package/bundle/src/codex-protocol/v2/HookEventName.ts +0 -13
  1013. package/bundle/src/codex-protocol/v2/HookExecutionMode.ts +0 -5
  1014. package/bundle/src/codex-protocol/v2/HookHandlerType.ts +0 -5
  1015. package/bundle/src/codex-protocol/v2/HookMetadata.ts +0 -26
  1016. package/bundle/src/codex-protocol/v2/HookMigration.ts +0 -5
  1017. package/bundle/src/codex-protocol/v2/HookOutputEntry.ts +0 -6
  1018. package/bundle/src/codex-protocol/v2/HookOutputEntryKind.ts +0 -5
  1019. package/bundle/src/codex-protocol/v2/HookPromptFragment.ts +0 -5
  1020. package/bundle/src/codex-protocol/v2/HookRunStatus.ts +0 -5
  1021. package/bundle/src/codex-protocol/v2/HookRunSummary.ts +0 -28
  1022. package/bundle/src/codex-protocol/v2/HookScope.ts +0 -5
  1023. package/bundle/src/codex-protocol/v2/HookSource.ts +0 -15
  1024. package/bundle/src/codex-protocol/v2/HookStartedNotification.ts +0 -10
  1025. package/bundle/src/codex-protocol/v2/HookTrustStatus.ts +0 -5
  1026. package/bundle/src/codex-protocol/v2/HooksListEntry.ts +0 -12
  1027. package/bundle/src/codex-protocol/v2/HooksListParams.ts +0 -10
  1028. package/bundle/src/codex-protocol/v2/HooksListResponse.ts +0 -6
  1029. package/bundle/src/codex-protocol/v2/ItemCompletedNotification.ts +0 -14
  1030. package/bundle/src/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.ts +0 -44
  1031. package/bundle/src/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.ts +0 -38
  1032. package/bundle/src/codex-protocol/v2/ItemStartedNotification.ts +0 -14
  1033. package/bundle/src/codex-protocol/v2/ListMcpServerStatusParams.ts +0 -20
  1034. package/bundle/src/codex-protocol/v2/ListMcpServerStatusResponse.ts +0 -13
  1035. package/bundle/src/codex-protocol/v2/LoginAccountParams.ts +0 -27
  1036. package/bundle/src/codex-protocol/v2/LoginAccountResponse.ts +0 -27
  1037. package/bundle/src/codex-protocol/v2/LogoutAccountResponse.ts +0 -5
  1038. package/bundle/src/codex-protocol/v2/ManagedHooksRequirements.ts +0 -17
  1039. package/bundle/src/codex-protocol/v2/MarketplaceAddParams.ts +0 -9
  1040. package/bundle/src/codex-protocol/v2/MarketplaceAddResponse.ts +0 -10
  1041. package/bundle/src/codex-protocol/v2/MarketplaceInterface.ts +0 -5
  1042. package/bundle/src/codex-protocol/v2/MarketplaceLoadErrorInfo.ts +0 -6
  1043. package/bundle/src/codex-protocol/v2/MarketplaceRemoveParams.ts +0 -5
  1044. package/bundle/src/codex-protocol/v2/MarketplaceRemoveResponse.ts +0 -9
  1045. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeErrorInfo.ts +0 -5
  1046. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeParams.ts +0 -5
  1047. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeResponse.ts +0 -11
  1048. package/bundle/src/codex-protocol/v2/McpAuthStatus.ts +0 -5
  1049. package/bundle/src/codex-protocol/v2/McpElicitationArrayType.ts +0 -5
  1050. package/bundle/src/codex-protocol/v2/McpElicitationBooleanSchema.ts +0 -11
  1051. package/bundle/src/codex-protocol/v2/McpElicitationBooleanType.ts +0 -5
  1052. package/bundle/src/codex-protocol/v2/McpElicitationConstOption.ts +0 -5
  1053. package/bundle/src/codex-protocol/v2/McpElicitationEnumSchema.ts +0 -11
  1054. package/bundle/src/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.ts +0 -13
  1055. package/bundle/src/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.ts +0 -9
  1056. package/bundle/src/codex-protocol/v2/McpElicitationNumberSchema.ts +0 -13
  1057. package/bundle/src/codex-protocol/v2/McpElicitationNumberType.ts +0 -5
  1058. package/bundle/src/codex-protocol/v2/McpElicitationObjectType.ts +0 -5
  1059. package/bundle/src/codex-protocol/v2/McpElicitationPrimitiveSchema.ts +0 -13
  1060. package/bundle/src/codex-protocol/v2/McpElicitationSchema.ts +0 -18
  1061. package/bundle/src/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.ts +0 -9
  1062. package/bundle/src/codex-protocol/v2/McpElicitationStringFormat.ts +0 -5
  1063. package/bundle/src/codex-protocol/v2/McpElicitationStringSchema.ts +0 -15
  1064. package/bundle/src/codex-protocol/v2/McpElicitationStringType.ts +0 -5
  1065. package/bundle/src/codex-protocol/v2/McpElicitationTitledEnumItems.ts +0 -6
  1066. package/bundle/src/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.ts +0 -15
  1067. package/bundle/src/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.ts +0 -13
  1068. package/bundle/src/codex-protocol/v2/McpElicitationUntitledEnumItems.ts +0 -9
  1069. package/bundle/src/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.ts +0 -15
  1070. package/bundle/src/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.ts +0 -12
  1071. package/bundle/src/codex-protocol/v2/McpResourceReadParams.ts +0 -5
  1072. package/bundle/src/codex-protocol/v2/McpResourceReadResponse.ts +0 -6
  1073. package/bundle/src/codex-protocol/v2/McpServerElicitationAction.ts +0 -5
  1074. package/bundle/src/codex-protocol/v2/McpServerElicitationRequestParams.ts +0 -27
  1075. package/bundle/src/codex-protocol/v2/McpServerElicitationRequestResponse.ts +0 -19
  1076. package/bundle/src/codex-protocol/v2/McpServerMigration.ts +0 -5
  1077. package/bundle/src/codex-protocol/v2/McpServerOauthLoginCompletedNotification.ts +0 -9
  1078. package/bundle/src/codex-protocol/v2/McpServerOauthLoginParams.ts +0 -9
  1079. package/bundle/src/codex-protocol/v2/McpServerOauthLoginResponse.ts +0 -5
  1080. package/bundle/src/codex-protocol/v2/McpServerRefreshResponse.ts +0 -5
  1081. package/bundle/src/codex-protocol/v2/McpServerStartupState.ts +0 -5
  1082. package/bundle/src/codex-protocol/v2/McpServerStatus.ts +0 -15
  1083. package/bundle/src/codex-protocol/v2/McpServerStatusDetail.ts +0 -5
  1084. package/bundle/src/codex-protocol/v2/McpServerStatusUpdatedNotification.ts +0 -10
  1085. package/bundle/src/codex-protocol/v2/McpServerToolCallParams.ts +0 -12
  1086. package/bundle/src/codex-protocol/v2/McpServerToolCallResponse.ts +0 -11
  1087. package/bundle/src/codex-protocol/v2/McpToolCallError.ts +0 -5
  1088. package/bundle/src/codex-protocol/v2/McpToolCallProgressNotification.ts +0 -10
  1089. package/bundle/src/codex-protocol/v2/McpToolCallResult.ts +0 -10
  1090. package/bundle/src/codex-protocol/v2/McpToolCallStatus.ts +0 -5
  1091. package/bundle/src/codex-protocol/v2/MemoryCitation.ts +0 -6
  1092. package/bundle/src/codex-protocol/v2/MemoryCitationEntry.ts +0 -10
  1093. package/bundle/src/codex-protocol/v2/MergeStrategy.ts +0 -5
  1094. package/bundle/src/codex-protocol/v2/MigrationDetails.ts +0 -18
  1095. package/bundle/src/codex-protocol/v2/Model.ts +0 -30
  1096. package/bundle/src/codex-protocol/v2/ModelAvailabilityNux.ts +0 -5
  1097. package/bundle/src/codex-protocol/v2/ModelListParams.ts +0 -18
  1098. package/bundle/src/codex-protocol/v2/ModelListResponse.ts +0 -13
  1099. package/bundle/src/codex-protocol/v2/ModelProviderCapabilitiesReadParams.ts +0 -5
  1100. package/bundle/src/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.ts +0 -9
  1101. package/bundle/src/codex-protocol/v2/ModelRerouteReason.ts +0 -5
  1102. package/bundle/src/codex-protocol/v2/ModelReroutedNotification.ts +0 -12
  1103. package/bundle/src/codex-protocol/v2/ModelServiceTier.ts +0 -5
  1104. package/bundle/src/codex-protocol/v2/ModelUpgradeInfo.ts +0 -10
  1105. package/bundle/src/codex-protocol/v2/ModelVerification.ts +0 -5
  1106. package/bundle/src/codex-protocol/v2/ModelVerificationNotification.ts +0 -10
  1107. package/bundle/src/codex-protocol/v2/NetworkAccess.ts +0 -5
  1108. package/bundle/src/codex-protocol/v2/NetworkApprovalContext.ts +0 -6
  1109. package/bundle/src/codex-protocol/v2/NetworkApprovalProtocol.ts +0 -5
  1110. package/bundle/src/codex-protocol/v2/NetworkDomainPermission.ts +0 -5
  1111. package/bundle/src/codex-protocol/v2/NetworkPolicyAmendment.ts +0 -6
  1112. package/bundle/src/codex-protocol/v2/NetworkPolicyRuleAction.ts +0 -5
  1113. package/bundle/src/codex-protocol/v2/NetworkRequirements.ts +0 -40
  1114. package/bundle/src/codex-protocol/v2/NetworkUnixSocketPermission.ts +0 -5
  1115. package/bundle/src/codex-protocol/v2/NonSteerableTurnKind.ts +0 -5
  1116. package/bundle/src/codex-protocol/v2/OverriddenMetadata.ts +0 -11
  1117. package/bundle/src/codex-protocol/v2/PatchApplyStatus.ts +0 -5
  1118. package/bundle/src/codex-protocol/v2/PatchChangeKind.ts +0 -8
  1119. package/bundle/src/codex-protocol/v2/PermissionGrantScope.ts +0 -5
  1120. package/bundle/src/codex-protocol/v2/PermissionProfile.ts +0 -14
  1121. package/bundle/src/codex-protocol/v2/PermissionProfileFileSystemPermissions.ts +0 -8
  1122. package/bundle/src/codex-protocol/v2/PermissionProfileModificationParams.ts +0 -9
  1123. package/bundle/src/codex-protocol/v2/PermissionProfileNetworkPermissions.ts +0 -5
  1124. package/bundle/src/codex-protocol/v2/PermissionProfileSelectionParams.ts +0 -10
  1125. package/bundle/src/codex-protocol/v2/PermissionsRequestApprovalParams.ts +0 -18
  1126. package/bundle/src/codex-protocol/v2/PermissionsRequestApprovalResponse.ts +0 -14
  1127. package/bundle/src/codex-protocol/v2/PlanDeltaNotification.ts +0 -14
  1128. package/bundle/src/codex-protocol/v2/PluginAuthPolicy.ts +0 -5
  1129. package/bundle/src/codex-protocol/v2/PluginAvailability.ts +0 -5
  1130. package/bundle/src/codex-protocol/v2/PluginDetail.ts +0 -19
  1131. package/bundle/src/codex-protocol/v2/PluginHookSummary.ts +0 -6
  1132. package/bundle/src/codex-protocol/v2/PluginInstallParams.ts +0 -10
  1133. package/bundle/src/codex-protocol/v2/PluginInstallPolicy.ts +0 -5
  1134. package/bundle/src/codex-protocol/v2/PluginInstallResponse.ts +0 -10
  1135. package/bundle/src/codex-protocol/v2/PluginInterface.ts +0 -46
  1136. package/bundle/src/codex-protocol/v2/PluginListMarketplaceKind.ts +0 -5
  1137. package/bundle/src/codex-protocol/v2/PluginListParams.ts +0 -18
  1138. package/bundle/src/codex-protocol/v2/PluginListResponse.ts +0 -11
  1139. package/bundle/src/codex-protocol/v2/PluginMarketplaceEntry.ts +0 -17
  1140. package/bundle/src/codex-protocol/v2/PluginReadParams.ts +0 -10
  1141. package/bundle/src/codex-protocol/v2/PluginReadResponse.ts +0 -6
  1142. package/bundle/src/codex-protocol/v2/PluginShareContext.ts +0 -12
  1143. package/bundle/src/codex-protocol/v2/PluginShareDeleteParams.ts +0 -5
  1144. package/bundle/src/codex-protocol/v2/PluginShareDeleteResponse.ts +0 -5
  1145. package/bundle/src/codex-protocol/v2/PluginShareDiscoverability.ts +0 -5
  1146. package/bundle/src/codex-protocol/v2/PluginShareListItem.ts +0 -11
  1147. package/bundle/src/codex-protocol/v2/PluginShareListParams.ts +0 -5
  1148. package/bundle/src/codex-protocol/v2/PluginShareListResponse.ts +0 -6
  1149. package/bundle/src/codex-protocol/v2/PluginSharePrincipal.ts +0 -10
  1150. package/bundle/src/codex-protocol/v2/PluginSharePrincipalType.ts +0 -5
  1151. package/bundle/src/codex-protocol/v2/PluginShareSaveParams.ts +0 -13
  1152. package/bundle/src/codex-protocol/v2/PluginShareSaveResponse.ts +0 -5
  1153. package/bundle/src/codex-protocol/v2/PluginShareTarget.ts +0 -6
  1154. package/bundle/src/codex-protocol/v2/PluginShareUpdateDiscoverability.ts +0 -5
  1155. package/bundle/src/codex-protocol/v2/PluginShareUpdateTargetsParams.ts +0 -11
  1156. package/bundle/src/codex-protocol/v2/PluginShareUpdateTargetsResponse.ts +0 -10
  1157. package/bundle/src/codex-protocol/v2/PluginSkillReadParams.ts +0 -9
  1158. package/bundle/src/codex-protocol/v2/PluginSkillReadResponse.ts +0 -5
  1159. package/bundle/src/codex-protocol/v2/PluginSource.ts +0 -9
  1160. package/bundle/src/codex-protocol/v2/PluginSummary.ts +0 -29
  1161. package/bundle/src/codex-protocol/v2/PluginUninstallParams.ts +0 -5
  1162. package/bundle/src/codex-protocol/v2/PluginUninstallResponse.ts +0 -5
  1163. package/bundle/src/codex-protocol/v2/PluginsMigration.ts +0 -5
  1164. package/bundle/src/codex-protocol/v2/ProcessExitedNotification.ts +0 -43
  1165. package/bundle/src/codex-protocol/v2/ProcessOutputDeltaNotification.ts +0 -27
  1166. package/bundle/src/codex-protocol/v2/ProcessOutputStream.ts +0 -8
  1167. package/bundle/src/codex-protocol/v2/ProcessTerminalSize.ts +0 -17
  1168. package/bundle/src/codex-protocol/v2/ProfileV2.ts +0 -37
  1169. package/bundle/src/codex-protocol/v2/RateLimitReachedType.ts +0 -10
  1170. package/bundle/src/codex-protocol/v2/RateLimitSnapshot.ts +0 -17
  1171. package/bundle/src/codex-protocol/v2/RateLimitWindow.ts +0 -9
  1172. package/bundle/src/codex-protocol/v2/RawResponseItemCompletedNotification.ts +0 -10
  1173. package/bundle/src/codex-protocol/v2/ReasoningEffortOption.ts +0 -6
  1174. package/bundle/src/codex-protocol/v2/ReasoningSummaryPartAddedNotification.ts +0 -10
  1175. package/bundle/src/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.ts +0 -11
  1176. package/bundle/src/codex-protocol/v2/ReasoningTextDeltaNotification.ts +0 -11
  1177. package/bundle/src/codex-protocol/v2/RemoteControlConnectionStatus.ts +0 -5
  1178. package/bundle/src/codex-protocol/v2/RemoteControlStatusChangedNotification.ts +0 -12
  1179. package/bundle/src/codex-protocol/v2/RequestPermissionProfile.ts +0 -10
  1180. package/bundle/src/codex-protocol/v2/ResidencyRequirement.ts +0 -5
  1181. package/bundle/src/codex-protocol/v2/ReviewDelivery.ts +0 -5
  1182. package/bundle/src/codex-protocol/v2/ReviewStartParams.ts +0 -15
  1183. package/bundle/src/codex-protocol/v2/ReviewStartResponse.ts +0 -15
  1184. package/bundle/src/codex-protocol/v2/ReviewTarget.ts +0 -16
  1185. package/bundle/src/codex-protocol/v2/SandboxMode.ts +0 -5
  1186. package/bundle/src/codex-protocol/v2/SandboxPolicy.ts +0 -17
  1187. package/bundle/src/codex-protocol/v2/SandboxWorkspaceWrite.ts +0 -10
  1188. package/bundle/src/codex-protocol/v2/SendAddCreditsNudgeEmailParams.ts +0 -6
  1189. package/bundle/src/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.ts +0 -6
  1190. package/bundle/src/codex-protocol/v2/ServerRequestResolvedNotification.ts +0 -6
  1191. package/bundle/src/codex-protocol/v2/SessionMigration.ts +0 -5
  1192. package/bundle/src/codex-protocol/v2/SessionSource.ts +0 -13
  1193. package/bundle/src/codex-protocol/v2/SkillDependencies.ts +0 -6
  1194. package/bundle/src/codex-protocol/v2/SkillErrorInfo.ts +0 -5
  1195. package/bundle/src/codex-protocol/v2/SkillInterface.ts +0 -13
  1196. package/bundle/src/codex-protocol/v2/SkillMetadata.ts +0 -21
  1197. package/bundle/src/codex-protocol/v2/SkillScope.ts +0 -5
  1198. package/bundle/src/codex-protocol/v2/SkillSummary.ts +0 -14
  1199. package/bundle/src/codex-protocol/v2/SkillToolDependency.ts +0 -12
  1200. package/bundle/src/codex-protocol/v2/SkillsChangedNotification.ts +0 -11
  1201. package/bundle/src/codex-protocol/v2/SkillsConfigWriteParams.ts +0 -16
  1202. package/bundle/src/codex-protocol/v2/SkillsConfigWriteResponse.ts +0 -5
  1203. package/bundle/src/codex-protocol/v2/SkillsListEntry.ts +0 -11
  1204. package/bundle/src/codex-protocol/v2/SkillsListParams.ts +0 -14
  1205. package/bundle/src/codex-protocol/v2/SkillsListResponse.ts +0 -6
  1206. package/bundle/src/codex-protocol/v2/SortDirection.ts +0 -5
  1207. package/bundle/src/codex-protocol/v2/SubagentMigration.ts +0 -5
  1208. package/bundle/src/codex-protocol/v2/TerminalInteractionNotification.ts +0 -11
  1209. package/bundle/src/codex-protocol/v2/TextElement.ts +0 -15
  1210. package/bundle/src/codex-protocol/v2/TextPosition.ts +0 -14
  1211. package/bundle/src/codex-protocol/v2/TextRange.ts +0 -6
  1212. package/bundle/src/codex-protocol/v2/Thread.ts +0 -88
  1213. package/bundle/src/codex-protocol/v2/ThreadActiveFlag.ts +0 -5
  1214. package/bundle/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.ts +0 -12
  1215. package/bundle/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.ts +0 -5
  1216. package/bundle/src/codex-protocol/v2/ThreadArchiveParams.ts +0 -5
  1217. package/bundle/src/codex-protocol/v2/ThreadArchiveResponse.ts +0 -5
  1218. package/bundle/src/codex-protocol/v2/ThreadArchivedNotification.ts +0 -5
  1219. package/bundle/src/codex-protocol/v2/ThreadClosedNotification.ts +0 -5
  1220. package/bundle/src/codex-protocol/v2/ThreadCompactStartParams.ts +0 -5
  1221. package/bundle/src/codex-protocol/v2/ThreadCompactStartResponse.ts +0 -5
  1222. package/bundle/src/codex-protocol/v2/ThreadForkParams.ts +0 -40
  1223. package/bundle/src/codex-protocol/v2/ThreadForkResponse.ts +0 -30
  1224. package/bundle/src/codex-protocol/v2/ThreadGoal.ts +0 -15
  1225. package/bundle/src/codex-protocol/v2/ThreadGoalClearedNotification.ts +0 -5
  1226. package/bundle/src/codex-protocol/v2/ThreadGoalStatus.ts +0 -5
  1227. package/bundle/src/codex-protocol/v2/ThreadGoalUpdatedNotification.ts +0 -10
  1228. package/bundle/src/codex-protocol/v2/ThreadInjectItemsParams.ts +0 -12
  1229. package/bundle/src/codex-protocol/v2/ThreadInjectItemsResponse.ts +0 -5
  1230. package/bundle/src/codex-protocol/v2/ThreadItem.ts +0 -156
  1231. package/bundle/src/codex-protocol/v2/ThreadListParams.ts +0 -55
  1232. package/bundle/src/codex-protocol/v2/ThreadListResponse.ts +0 -20
  1233. package/bundle/src/codex-protocol/v2/ThreadLoadedListParams.ts +0 -14
  1234. package/bundle/src/codex-protocol/v2/ThreadLoadedListResponse.ts +0 -15
  1235. package/bundle/src/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.ts +0 -21
  1236. package/bundle/src/codex-protocol/v2/ThreadMetadataUpdateParams.ts +0 -14
  1237. package/bundle/src/codex-protocol/v2/ThreadMetadataUpdateResponse.ts +0 -6
  1238. package/bundle/src/codex-protocol/v2/ThreadNameUpdatedNotification.ts +0 -5
  1239. package/bundle/src/codex-protocol/v2/ThreadReadParams.ts +0 -11
  1240. package/bundle/src/codex-protocol/v2/ThreadReadResponse.ts +0 -6
  1241. package/bundle/src/codex-protocol/v2/ThreadRealtimeAudioChunk.ts +0 -14
  1242. package/bundle/src/codex-protocol/v2/ThreadRealtimeClosedNotification.ts +0 -8
  1243. package/bundle/src/codex-protocol/v2/ThreadRealtimeErrorNotification.ts +0 -8
  1244. package/bundle/src/codex-protocol/v2/ThreadRealtimeItemAddedNotification.ts +0 -9
  1245. package/bundle/src/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.ts +0 -12
  1246. package/bundle/src/codex-protocol/v2/ThreadRealtimeSdpNotification.ts +0 -8
  1247. package/bundle/src/codex-protocol/v2/ThreadRealtimeStartTransport.ts +0 -17
  1248. package/bundle/src/codex-protocol/v2/ThreadRealtimeStartedNotification.ts +0 -13
  1249. package/bundle/src/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.ts +0 -16
  1250. package/bundle/src/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.ts +0 -16
  1251. package/bundle/src/codex-protocol/v2/ThreadResumeParams.ts +0 -39
  1252. package/bundle/src/codex-protocol/v2/ThreadResumeResponse.ts +0 -30
  1253. package/bundle/src/codex-protocol/v2/ThreadRollbackParams.ts +0 -14
  1254. package/bundle/src/codex-protocol/v2/ThreadRollbackResponse.ts +0 -15
  1255. package/bundle/src/codex-protocol/v2/ThreadSetNameParams.ts +0 -5
  1256. package/bundle/src/codex-protocol/v2/ThreadSetNameResponse.ts +0 -5
  1257. package/bundle/src/codex-protocol/v2/ThreadShellCommandParams.ts +0 -14
  1258. package/bundle/src/codex-protocol/v2/ThreadShellCommandResponse.ts +0 -5
  1259. package/bundle/src/codex-protocol/v2/ThreadSortKey.ts +0 -5
  1260. package/bundle/src/codex-protocol/v2/ThreadSource.ts +0 -5
  1261. package/bundle/src/codex-protocol/v2/ThreadSourceKind.ts +0 -15
  1262. package/bundle/src/codex-protocol/v2/ThreadStartParams.ts +0 -33
  1263. package/bundle/src/codex-protocol/v2/ThreadStartResponse.ts +0 -30
  1264. package/bundle/src/codex-protocol/v2/ThreadStartSource.ts +0 -5
  1265. package/bundle/src/codex-protocol/v2/ThreadStartedNotification.ts +0 -6
  1266. package/bundle/src/codex-protocol/v2/ThreadStatus.ts +0 -10
  1267. package/bundle/src/codex-protocol/v2/ThreadStatusChangedNotification.ts +0 -6
  1268. package/bundle/src/codex-protocol/v2/ThreadTokenUsage.ts +0 -10
  1269. package/bundle/src/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.ts +0 -10
  1270. package/bundle/src/codex-protocol/v2/ThreadUnarchiveParams.ts +0 -5
  1271. package/bundle/src/codex-protocol/v2/ThreadUnarchiveResponse.ts +0 -6
  1272. package/bundle/src/codex-protocol/v2/ThreadUnarchivedNotification.ts +0 -5
  1273. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeParams.ts +0 -5
  1274. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeResponse.ts +0 -6
  1275. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeStatus.ts +0 -5
  1276. package/bundle/src/codex-protocol/v2/TokenUsageBreakdown.ts +0 -11
  1277. package/bundle/src/codex-protocol/v2/ToolRequestUserInputAnswer.ts +0 -8
  1278. package/bundle/src/codex-protocol/v2/ToolRequestUserInputOption.ts +0 -8
  1279. package/bundle/src/codex-protocol/v2/ToolRequestUserInputParams.ts +0 -14
  1280. package/bundle/src/codex-protocol/v2/ToolRequestUserInputQuestion.ts +0 -16
  1281. package/bundle/src/codex-protocol/v2/ToolRequestUserInputResponse.ts +0 -11
  1282. package/bundle/src/codex-protocol/v2/ToolsV2.ts +0 -6
  1283. package/bundle/src/codex-protocol/v2/Turn.ts +0 -36
  1284. package/bundle/src/codex-protocol/v2/TurnCompletedNotification.ts +0 -6
  1285. package/bundle/src/codex-protocol/v2/TurnDiffUpdatedNotification.ts +0 -9
  1286. package/bundle/src/codex-protocol/v2/TurnEnvironmentParams.ts +0 -6
  1287. package/bundle/src/codex-protocol/v2/TurnError.ts +0 -10
  1288. package/bundle/src/codex-protocol/v2/TurnInterruptParams.ts +0 -5
  1289. package/bundle/src/codex-protocol/v2/TurnInterruptResponse.ts +0 -5
  1290. package/bundle/src/codex-protocol/v2/TurnItemsView.ts +0 -5
  1291. package/bundle/src/codex-protocol/v2/TurnPlanStep.ts +0 -6
  1292. package/bundle/src/codex-protocol/v2/TurnPlanStepStatus.ts +0 -5
  1293. package/bundle/src/codex-protocol/v2/TurnPlanUpdatedNotification.ts +0 -11
  1294. package/bundle/src/codex-protocol/v2/TurnStartParams.ts +0 -48
  1295. package/bundle/src/codex-protocol/v2/TurnStartResponse.ts +0 -6
  1296. package/bundle/src/codex-protocol/v2/TurnStartedNotification.ts +0 -6
  1297. package/bundle/src/codex-protocol/v2/TurnStatus.ts +0 -5
  1298. package/bundle/src/codex-protocol/v2/TurnSteerParams.ts +0 -13
  1299. package/bundle/src/codex-protocol/v2/TurnSteerResponse.ts +0 -5
  1300. package/bundle/src/codex-protocol/v2/UserInput.ts +0 -18
  1301. package/bundle/src/codex-protocol/v2/WarningNotification.ts +0 -14
  1302. package/bundle/src/codex-protocol/v2/WebSearchAction.ts +0 -9
  1303. package/bundle/src/codex-protocol/v2/WindowsSandboxReadiness.ts +0 -5
  1304. package/bundle/src/codex-protocol/v2/WindowsSandboxReadinessResponse.ts +0 -6
  1305. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.ts +0 -10
  1306. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupMode.ts +0 -5
  1307. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupStartParams.ts +0 -10
  1308. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupStartResponse.ts +0 -5
  1309. package/bundle/src/codex-protocol/v2/WindowsWorldWritableWarningNotification.ts +0 -9
  1310. package/bundle/src/codex-protocol/v2/WriteStatus.ts +0 -5
  1311. package/bundle/src/codex-protocol/v2/index.ts +0 -446
  1312. package/bundle/src/utils/providers/openai/codex-rpc.ts +0 -238
  1313. package/bundle/src/utils/providers/openai/codex-worker.test.ts +0 -1006
  1314. package/bundle/src/utils/providers/openai/codex-worker.ts +0 -927
  1315. package/bundle/src/utils/providers/openai/openai-worker-pool-config.ts +0 -112
  1316. package/bundle/web-dist/client/assets/index-C24D5PiN.js +0 -106
  1317. package/bundle/web-dist/client/assets/index-CcMEpCgt.css +0 -1
  1318. package/bundle/web-dist/client/assets/logs-CIlZG6A3.js +0 -1
  1319. package/bundle/web-dist/client/assets/monit-DZFBMxKl.js +0 -1
  1320. package/bundle/web-dist/client/assets/routes-C3wlSNBL.js +0 -5
  1321. package/bundle/web-dist/client/assets/services.generated-jGypfumC.js +0 -51
  1322. package/bundle/web-dist/client/assets/settings-ClRDWO-8.js +0 -1
  1323. package/bundle/web-dist/client/assets/show-BP7U8yyJ.js +0 -2
  1324. package/bundle/web-dist/client/assets/tokens-DfQeULnJ.js +0 -1
  1325. package/bundle/web-dist/client/assets/use-oauth-login-flow-CY-ASCfL.js +0 -1
  1326. package/bundle/web-dist/server/assets/lazyRouteComponent-DOc8TV-P.js +0 -1856
  1327. package/bundle/web-dist/server/assets/logs-CfF3nmLM.js +0 -451
  1328. package/bundle/web-dist/server/assets/monit-BSaKhh5D.js +0 -1577
  1329. package/bundle/web-dist/server/assets/plus-DLFUHsfx.js +0 -19
  1330. package/bundle/web-dist/server/assets/react-dom-BotjLnTK.js +0 -462
  1331. package/bundle/web-dist/server/assets/routes-CHMxrTT0.js +0 -2924
  1332. package/bundle/web-dist/server/assets/services.generated-D3Q3FYot.js +0 -23570
  1333. package/bundle/web-dist/server/assets/settings-DOQjV28c.js +0 -598
  1334. package/bundle/web-dist/server/assets/show-Cn_C6Qvl.js +0 -2776
  1335. package/bundle/web-dist/server/assets/tokens-c0EN3iCx.js +0 -441
  1336. package/bundle/web-dist/server/assets/use-oauth-login-flow-B68AbMDE.js +0 -160
  1337. /package/bundle/dist/{codex-protocol/AbsolutePathBuf.js → utils/providers/common/provider-types.js} +0 -0
@@ -0,0 +1,83 @@
1
+ //#region src/utils/providers/anthropic/fence-strip.ts
2
+ /**
3
+ * 코드펜스 스트리핑 (SON-532).
4
+ *
5
+ * anthropic 은 스키마/envelope 계약을 프롬프트로 안내하므로 응답은 평범한 텍스트다.
6
+ * sonnet 계열이 지시에도 불구하고 ```json 펜스를 붙이는 실측이 있어, 서버가 펜스와
7
+ * 양끝 공백만 벗겨 소비자(zod)/parseEnvelope/EnvelopeStreamParser 에 순수 JSON 을
8
+ * 넘긴다. 머리말·후미 프로즈 구제는 하지 않는다 — 관용 복구는 2026-07 medpath 13.5k
9
+ * 오염 사고로 기각된 원칙이며, 프로즈 응답은 다음 층에서 정직하게 실패한다.
10
+ *
11
+ * `stripFences` 는 stream-json-adapter 의 stripCodeFence(비스트림 result 경로)에서
12
+ * 추출한 동일 시맨틱이다 — 스트림 델타 연결과 비스트림 최종 텍스트가 같은 결과여야
13
+ * 클라이언트가 어느 쪽을 조립해도 어긋나지 않는다.
14
+ */
15
+ function stripFences(s) {
16
+ return s.trim().replace(/^```(?:json)?\s*\n?/i, "").replace(/\n?```\s*$/i, "");
17
+ }
18
+ /**
19
+ * 델타 스트림용 통과 필터. 불변식: 임의 절단 지점에 대해
20
+ * `push(...) 들의 연결 + flush() == stripFences(전체 텍스트)`.
21
+ *
22
+ * tail 홀드백은 고정 크기가 아니라 계약 기반이다 — "공백·개행·백틱만으로 이루어진
23
+ * suffix"(닫는 펜스 후보)를 스트림 완료까지 보류하고, 후보를 깨는 내용이 오면 즉시
24
+ * 방출을 재개한다. 닫는 펜스 앞 공백은 임의 길이일 수 있어 고정 크기로는 "양끝 공백
25
+ * 제거" 불변식이 성립하지 않는다.
26
+ */
27
+ function createFenceStripTransform() {
28
+ let full = "";
29
+ let bodyStart = -1;
30
+ let emitted = 0;
31
+ return {
32
+ push(delta) {
33
+ full += delta;
34
+ if (bodyStart < 0) {
35
+ bodyStart = resolveLeadingOffset(full);
36
+ if (bodyStart < 0) return "";
37
+ }
38
+ const unemitted = full.slice(bodyStart).slice(emitted);
39
+ const safe = unemitted.length - trailingHoldLength(unemitted);
40
+ if (safe <= 0) return "";
41
+ const out = unemitted.slice(0, safe);
42
+ emitted += safe;
43
+ return out;
44
+ },
45
+ flush() {
46
+ return stripFences(full).slice(emitted);
47
+ }
48
+ };
49
+ }
50
+ /**
51
+ * 여는 펜스 판정. 아직 "```json" 으로 자랄 수 있는 경계(백틱 1~2개, "```j(s(o))",
52
+ * 펜스 직후 공백만 도착)면 -1 로 보류한다. stripFences 의 leading 정규식과 동일한
53
+ * 소비 규칙: ```(json)? 뒤에 이어지는 공백 전부가 펜스에 붙어 떨어져 나간다.
54
+ */
55
+ function resolveLeadingOffset(text) {
56
+ const trimmedStart = text.trimStart();
57
+ if (trimmedStart === "") return -1;
58
+ const ws = text.length - trimmedStart.length;
59
+ if (!trimmedStart.startsWith("`")) return ws;
60
+ if (/^`{1,2}$/.test(trimmedStart)) return -1;
61
+ const fence = /^```(?:json)?/i.exec(trimmedStart);
62
+ if (!fence) return ws;
63
+ if (/^```(?:j|js|jso)$/i.test(trimmedStart)) return -1;
64
+ const afterFence = trimmedStart.slice(fence[0].length);
65
+ const afterFenceBody = afterFence.trimStart();
66
+ if (afterFenceBody === "") return -1;
67
+ return ws + fence[0].length + (afterFence.length - afterFenceBody.length);
68
+ }
69
+ /**
70
+ * 아직 방출하면 안 되는 suffix 길이. 닫는 펜스 후보는 "(개행?)(백틱 1~3)(공백*)" 또는
71
+ * 순수 trailing 공백 — stripFences 의 trim + /\n?```\s*$/ 가 지울 수 있는 모든 형태를
72
+ * 덮는다. 공백 클래스는 반드시 `\s`(+BOM) — trim() 은 NBSP·VT·FF·U+2028·U+2029 까지
73
+ * 지우므로 ASCII 만 보류하면 그 문자들이 먼저 방출돼 "방출 == strip(전체)" 불변식이
74
+ * 깨진다(2차 검토 #8 실측). 미방출 구간에만 적용하므로 비용은 (보류분+delta)에 비례.
75
+ */
76
+ function trailingHoldLength(unemitted) {
77
+ const match = /(?:\n?`{1,3})?[\s]*$/.exec(unemitted);
78
+ return match ? match[0].length : 0;
79
+ }
80
+ //#endregion
81
+ export { createFenceStripTransform, stripFences };
82
+
83
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVuY2Utc3RyaXAuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvZmVuY2Utc3RyaXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDsvZTrk5ztjpzsiqQg7Iqk7Yq466as7ZWRIChTT04tNTMyKS5cbiAqXG4gKiBhbnRocm9waWMg7J2AIOyKpO2CpOuniC9lbnZlbG9wZSDqs4Tslb3snYQg7ZSE66Gs7ZSE7Yq466GcIOyViOuCtO2VmOuvgOuhnCDsnZHri7XsnYAg7Y+J67KU7ZWcIO2FjeyKpO2KuOuLpC5cbiAqIHNvbm5ldCDqs4Tsl7TsnbQg7KeA7Iuc7JeQ64+EIOu2iOq1rO2VmOqzoCBgYGBqc29uIO2OnOyKpOulvCDrtpnsnbTripQg7Iuk7Lih7J20IOyeiOyWtCwg7ISc67KE6rCAIO2OnOyKpOyZgFxuICog7JaR64GdIOqzteuwseunjCDrspfqsqgg7IaM67mE7J6QKHpvZCkvcGFyc2VFbnZlbG9wZS9FbnZlbG9wZVN0cmVhbVBhcnNlciDsl5Ag7Iic7IiYIEpTT04g7J2EXG4gKiDrhJjquLTri6QuIOuouOumrOunkMK37ZuE66+4IO2UhOuhnOymiCDqtazsoJzripQg7ZWY7KeAIOyViuuKlOuLpCDigJQg6rSA7JqpIOuzteq1rOuKlCAyMDI2LTA3IG1lZHBhdGggMTMuNWtcbiAqIOyYpOyXvCDsgqzqs6DroZwg6riw6rCB65CcIOybkOy5meydtOupsCwg7ZSE66Gc7KaIIOydkeuLteydgCDri6TsnYwg7Li17JeQ7IScIOygleynge2VmOqyjCDsi6TtjKjtlZzri6QuXG4gKlxuICogYHN0cmlwRmVuY2VzYCDripQgc3RyZWFtLWpzb24tYWRhcHRlciDsnZggc3RyaXBDb2RlRmVuY2Uo67mE7Iqk7Yq466a8IHJlc3VsdCDqsr3roZwp7JeQ7IScXG4gKiDstpTstpztlZwg64+Z7J28IOyLnOunqO2LseydtOuLpCDigJQg7Iqk7Yq466a8IOuNuO2DgCDsl7DqsrDqs7wg67mE7Iqk7Yq466a8IOy1nOyihSDthY3siqTtirjqsIAg6rCZ7J2AIOqysOqzvOyXrOyVvFxuICog7YG065287J207Ja47Yq46rCAIOyWtOuKkCDsqr3snYQg7KGw66a97ZW064+EIOyWtOq4i+uCmOyngCDslYrripTri6QuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwRmVuY2VzKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9eYGBgKD86anNvbik/XFxzKlxcbj8vaSwgXCJcIilcbiAgICAucmVwbGFjZSgvXFxuP2BgYFxccyokL2ksIFwiXCIpO1xufVxuXG5pbnRlcmZhY2UgRmVuY2VTdHJpcFRyYW5zZm9ybSB7XG4gIC8qKiBkZWx0YSDrpbwg64Sj6rOgIOyngOq4iCDrsKnstpztlbTrj4Qg7JWI7KCE7ZWcIOyhsOqwgeydhCDrj4zroKTrsJvripTri6QuICovXG4gIHB1c2goZGVsdGE6IHN0cmluZyk6IHN0cmluZztcbiAgLyoqIOyKpO2KuOumvCDsooXro4wuIOuztOulmOu2hCDspJEg7Y6c7Iqkwrd0cmFpbGluZyDqs7XrsLHsnbQg7JWE64uMIOyelOyXrOulvCDrj4zroKTspIDri6QuICovXG4gIGZsdXNoKCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiDrjbjtg4Ag7Iqk7Yq466a87JqpIO2GteqzvCDtlYTthLAuIOu2iOuzgOyLnTog7J6E7J2YIOygiOuLqCDsp4DsoJDsl5Ag64yA7ZW0XG4gKiBgcHVzaCguLi4pIOuTpOydmCDsl7DqsrAgKyBmbHVzaCgpID09IHN0cmlwRmVuY2VzKOyghOyytCDthY3siqTtirgpYC5cbiAqXG4gKiB0YWlsIO2ZgOuTnOuwseydgCDqs6DsoJUg7YGs6riw6rCAIOyVhOuLiOudvCDqs4Tslb0g6riw67CY7J2064ukIOKAlCBcIuqzteuwscK36rCc7ZaJwrfrsLHti7Hrp4zsnLzroZwg7J2066Oo7Ja07KeEXG4gKiBzdWZmaXhcIijri6vripQg7Y6c7IqkIO2bhOuztCnrpbwg7Iqk7Yq466a8IOyZhOujjOq5jOyngCDrs7TrpZjtlZjqs6AsIO2bhOuztOulvCDquajripQg64K07Jqp7J20IOyYpOuptCDsponsi5xcbiAqIOuwqey2nOydhCDsnqzqsJztlZzri6QuIOuLq+uKlCDtjpzsiqQg7JWeIOqzteuwseydgCDsnoTsnZgg6ri47J207J28IOyImCDsnojslrQg6rOg7KCVIO2BrOq4sOuhnOuKlCBcIuyWkeuBnSDqs7XrsLFcbiAqIOygnOqxsFwiIOu2iOuzgOyLneydtCDshLHrpr3tlZjsp4Ag7JWK64qU64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmVuY2VTdHJpcFRyYW5zZm9ybSgpOiBGZW5jZVN0cmlwVHJhbnNmb3JtIHtcbiAgbGV0IGZ1bGwgPSBcIlwiO1xuICAvLyBmdWxsIOyXkOyEnCDrs7jrrLgobGVhZGluZyB0cmltICsg7Jes64qUIO2OnOyKpCDsnbTtm4Qp7J20IOyLnOyeke2VmOuKlCDsnbjrjbHsiqQuIC0xID0g7JWE7KeBIOuvuO2ZleyglS5cbiAgbGV0IGJvZHlTdGFydCA9IC0xO1xuICAvLyDrs7jrrLgg6riw7KSA7Jy866GcIOydtOuvuCDrsKnstpztlZwg66y47J6QIOyImC4g67Cp7Lac67aE7J2AIOy1nOyihSDqsrDqs7zsnZggcHJlZml4IOyehOydtCDrs7TsnqXrkJzri6Qg4oCUXG4gIC8vIOqzteuwseydgCDruYTqs7XrsLEg64K07Jqp7J20IOuSpOuUsOultOq4sCDsoITquYzsp4Ag7ZWt7IOBIOuztOulmOuQmOuvgOuhnCwg64KY7KSR7JeQIOuLq+uKlCDtjpzsiqTsnZgg7J2867aA66GcXG4gIC8vIO2MkOuqheuQoCDrrLjsnpDqsIAg66+466asIOuwqey2nOuQmOuKlCDsnbzsnbQg7JeG64ukLlxuICBsZXQgZW1pdHRlZCA9IDA7XG5cbiAgcmV0dXJuIHtcbiAgICBwdXNoKGRlbHRhOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgZnVsbCArPSBkZWx0YTtcbiAgICAgIGlmIChib2R5U3RhcnQgPCAwKSB7XG4gICAgICAgIGJvZHlTdGFydCA9IHJlc29sdmVMZWFkaW5nT2Zmc2V0KGZ1bGwpO1xuICAgICAgICBpZiAoYm9keVN0YXJ0IDwgMCkgcmV0dXJuIFwiXCI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvZHkgPSBmdWxsLnNsaWNlKGJvZHlTdGFydCk7XG4gICAgICBjb25zdCB1bmVtaXR0ZWQgPSBib2R5LnNsaWNlKGVtaXR0ZWQpO1xuICAgICAgY29uc3Qgc2FmZSA9IHVuZW1pdHRlZC5sZW5ndGggLSB0cmFpbGluZ0hvbGRMZW5ndGgodW5lbWl0dGVkKTtcbiAgICAgIGlmIChzYWZlIDw9IDApIHJldHVybiBcIlwiO1xuXG4gICAgICBjb25zdCBvdXQgPSB1bmVtaXR0ZWQuc2xpY2UoMCwgc2FmZSk7XG4gICAgICBlbWl0dGVkICs9IHNhZmU7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICBmbHVzaCgpOiBzdHJpbmcge1xuICAgICAgLy8g67Cp7Lac67aE7J20IOy1nOyihSDqsrDqs7zsnZggcHJlZml4IOudvOuKlCDrtojrs4Dsi50g7JyE7JeQ7IScLCDsnpTsl6zrp4wg7J6Y6528IOuPjOugpOykgOuLpC5cbiAgICAgIHJldHVybiBzdHJpcEZlbmNlcyhmdWxsKS5zbGljZShlbWl0dGVkKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIOyXrOuKlCDtjpzsiqQg7YyQ7KCVLiDslYTsp4EgXCJgYGBqc29uXCIg7Jy866GcIOyekOuehCDsiJgg7J6I64qUIOqyveqzhCjrsLHti7EgMX4y6rCcLCBcImBgYGoocyhvKSlcIixcbiAqIO2OnOyKpCDsp4Htm4Qg6rO167Cx66eMIOuPhOywqSnrqbQgLTEg66GcIOuztOulmO2VnOuLpC4gc3RyaXBGZW5jZXMg7J2YIGxlYWRpbmcg7KCV6rec7Iud6rO8IOuPmeydvO2VnFxuICog7IaM67mEIOq3nOy5mTogYGBgKGpzb24pPyDrkqTsl5Ag7J207Ja07KeA64qUIOqzteuwsSDsoITrtoDqsIAg7Y6c7Iqk7JeQIOu2meyWtCDrlqjslrTsoLgg64KY6rCE64ukLlxuICovXG5mdW5jdGlvbiByZXNvbHZlTGVhZGluZ09mZnNldCh0ZXh0OiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCB0cmltbWVkU3RhcnQgPSB0ZXh0LnRyaW1TdGFydCgpO1xuICBpZiAodHJpbW1lZFN0YXJ0ID09PSBcIlwiKSByZXR1cm4gLTE7IC8vIOyVhOyngSDqs7XrsLHrv5Ag4oCUIGZsdXNoIOqwgCDsoJXrpqztlZzri6RcbiAgY29uc3Qgd3MgPSB0ZXh0Lmxlbmd0aCAtIHRyaW1tZWRTdGFydC5sZW5ndGg7XG5cbiAgaWYgKCF0cmltbWVkU3RhcnQuc3RhcnRzV2l0aChcImBcIikpIHJldHVybiB3cztcbiAgaWYgKC9eYHsxLDJ9JC8udGVzdCh0cmltbWVkU3RhcnQpKSByZXR1cm4gLTE7IC8vIFwiYGBgXCIg66GcIOyekOuehCDsiJgg7J6I7J2MXG5cbiAgY29uc3QgZmVuY2UgPSAvXmBgYCg/Ompzb24pPy9pLmV4ZWModHJpbW1lZFN0YXJ0KTtcbiAgaWYgKCFmZW5jZSkgcmV0dXJuIHdzOyAvLyBcImB4XCIsIFwiYGB4XCIg4oCUIO2OnOyKpOqwgCDslYTri4jrnbwg67O466y4XG4gIGlmICgvXmBgYCg/Omp8anN8anNvKSQvaS50ZXN0KHRyaW1tZWRTdGFydCkpIHJldHVybiAtMTsgLy8gXCJqc29uXCIg7YOc6re46rCAIOyekOudvOuKlCDspJFcblxuICBjb25zdCBhZnRlckZlbmNlID0gdHJpbW1lZFN0YXJ0LnNsaWNlKGZlbmNlWzBdLmxlbmd0aCk7XG4gIGNvbnN0IGFmdGVyRmVuY2VCb2R5ID0gYWZ0ZXJGZW5jZS50cmltU3RhcnQoKTtcbiAgaWYgKGFmdGVyRmVuY2VCb2R5ID09PSBcIlwiKSByZXR1cm4gLTE7IC8vIO2OnOyKpCDrkqQg6rO167Cx66eMIOKAlCDrs7jrrLgg7LKrIOq4gOyekCDrjIDquLBcbiAgcmV0dXJuIHdzICsgZmVuY2VbMF0ubGVuZ3RoICsgKGFmdGVyRmVuY2UubGVuZ3RoIC0gYWZ0ZXJGZW5jZUJvZHkubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiDslYTsp4Eg67Cp7Lac7ZWY66m0IOyViCDrkJjripQgc3VmZml4IOq4uOydtC4g64ur64qUIO2OnOyKpCDtm4Trs7TripQgXCIo6rCc7ZaJPyko67Cx7YuxIDF+Myko6rO167CxKilcIiDrmJDripRcbiAqIOyInOyImCB0cmFpbGluZyDqs7XrsLEg4oCUIHN0cmlwRmVuY2VzIOydmCB0cmltICsgL1xcbj9gYGBcXHMqJC8g6rCAIOyngOyauCDsiJgg7J6I64qUIOuqqOuToCDtmJXtg5zrpbxcbiAqIOuNruuKlOuLpC4g6rO167CxIO2BtOuemOyKpOuKlCDrsJjrk5zsi5wgYFxcc2AoK0JPTSkg4oCUIHRyaW0oKSDsnYAgTkJTUMK3VlTCt0ZGwrdVKzIwMjjCt1UrMjAyOSDquYzsp4BcbiAqIOyngOyasOuvgOuhnCBBU0NJSSDrp4wg67O066WY7ZWY66m0IOq3uCDrrLjsnpDrk6TsnbQg66i87KCAIOuwqey2nOuPvCBcIuuwqey2nCA9PSBzdHJpcCjsoITssrQpXCIg67aI67OA7Iud7J20XG4gKiDquajsp4Tri6QoMuywqCDqsoDthqAgIzgg7Iuk7LihKS4g66+467Cp7LacIOq1rOqwhOyXkOunjCDsoIHsmqntlZjrr4DroZwg67mE7Jqp7J2AICjrs7TrpZjrtoQrZGVsdGEp7JeQIOu5hOuhgC5cbiAqL1xuZnVuY3Rpb24gdHJhaWxpbmdIb2xkTGVuZ3RoKHVuZW1pdHRlZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgbWF0Y2ggPSAvKD86XFxuP2B7MSwzfSk/W1xcc++7v10qJC8uZXhlYyh1bmVtaXR0ZWQpO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXS5sZW5ndGggOiAwO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQWNBLFNBQWdCLFlBQVksR0FBbUI7Q0FDN0MsT0FBTyxFQUNKLEtBQUssQ0FBQyxDQUNOLFFBQVEsd0JBQXdCLEVBQUUsQ0FBQyxDQUNuQyxRQUFRLGVBQWUsRUFBRTtBQUM5Qjs7Ozs7Ozs7OztBQWtCQSxTQUFnQiw0QkFBaUQ7Q0FDL0QsSUFBSSxPQUFPO0NBRVgsSUFBSSxZQUFZO0NBSWhCLElBQUksVUFBVTtDQUVkLE9BQU87RUFDTCxLQUFLLE9BQXVCO0dBQzFCLFFBQVE7R0FDUixJQUFJLFlBQVksR0FBRztJQUNqQixZQUFZLHFCQUFxQixJQUFJO0lBQ3JDLElBQUksWUFBWSxHQUFHLE9BQU87R0FDNUI7R0FHQSxNQUFNLFlBRE8sS0FBSyxNQUFNLFNBQ04sQ0FBQSxDQUFLLE1BQU0sT0FBTztHQUNwQyxNQUFNLE9BQU8sVUFBVSxTQUFTLG1CQUFtQixTQUFTO0dBQzVELElBQUksUUFBUSxHQUFHLE9BQU87R0FFdEIsTUFBTSxNQUFNLFVBQVUsTUFBTSxHQUFHLElBQUk7R0FDbkMsV0FBVztHQUNYLE9BQU87RUFDVDtFQUVBLFFBQWdCO0dBRWQsT0FBTyxZQUFZLElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTztFQUN4QztDQUNGO0FBQ0Y7Ozs7OztBQU9BLFNBQVMscUJBQXFCLE1BQXNCO0NBQ2xELE1BQU0sZUFBZSxLQUFLLFVBQVU7Q0FDcEMsSUFBSSxpQkFBaUIsSUFBSSxPQUFPO0NBQ2hDLE1BQU0sS0FBSyxLQUFLLFNBQVMsYUFBYTtDQUV0QyxJQUFJLENBQUMsYUFBYSxXQUFXLEdBQUcsR0FBRyxPQUFPO0NBQzFDLElBQUksV0FBVyxLQUFLLFlBQVksR0FBRyxPQUFPO0NBRTFDLE1BQU0sUUFBUSxpQkFBaUIsS0FBSyxZQUFZO0NBQ2hELElBQUksQ0FBQyxPQUFPLE9BQU87Q0FDbkIsSUFBSSxxQkFBcUIsS0FBSyxZQUFZLEdBQUcsT0FBTztDQUVwRCxNQUFNLGFBQWEsYUFBYSxNQUFNLE1BQU0sRUFBRSxDQUFDLE1BQU07Q0FDckQsTUFBTSxpQkFBaUIsV0FBVyxVQUFVO0NBQzVDLElBQUksbUJBQW1CLElBQUksT0FBTztDQUNsQyxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUMsVUFBVSxXQUFXLFNBQVMsZUFBZTtBQUNwRTs7Ozs7Ozs7QUFTQSxTQUFTLG1CQUFtQixXQUEyQjtDQUNyRCxNQUFNLFFBQVEsd0JBQXdCLEtBQUssU0FBUztDQUNwRCxPQUFPLFFBQVEsTUFBTSxFQUFFLENBQUMsU0FBUztBQUNuQyJ9
@@ -1,3 +1,4 @@
1
+ import { stripFences } from "./fence-strip.js";
1
2
  //#region src/utils/providers/anthropic/stream-json-adapter.ts
2
3
  function userInputToText(input) {
3
4
  return input.filter((i) => i.type === "text").map((i) => i.text).join("\n");
@@ -80,9 +81,6 @@ function toUsageBreakdown(u) {
80
81
  reasoningOutputTokens: 0
81
82
  };
82
83
  }
83
- function stripCodeFence(s) {
84
- return s.trim().replace(/^```(?:json)?\s*\n?/i, "").replace(/\n?```\s*$/i, "");
85
- }
86
84
  function structuredOutputToolUseText(j) {
87
85
  const content = asObject(j.message)?.content;
88
86
  if (!Array.isArray(content)) return void 0;
@@ -222,7 +220,7 @@ function handleStreamJsonLine(line, onDelta, opts) {
222
220
  if (structuredOutput && resultSucceeded && j.structured_output !== void 0) text = JSON.stringify(j.structured_output);
223
221
  else if (preservedStructuredOutput !== void 0) text = preservedStructuredOutput;
224
222
  else if (j.structured_output !== void 0) text = JSON.stringify(j.structured_output);
225
- else text = stripCodeFence(typeof j.result === "string" ? j.result : "");
223
+ else text = stripFences(typeof j.result === "string" ? j.result : "");
226
224
  const rawUsage = asObject(j.usage) ?? {};
227
225
  updateRoutingFromUsage(rawUsage, state);
228
226
  const resultModel = optionalString(j.model);
@@ -255,4 +253,4 @@ function handleStreamJsonLine(line, onDelta, opts) {
255
253
  //#endregion
256
254
  export { buildStreamJsonInput, handleStreamJsonLine, serializeStreamJsonInput };
257
255
 
258
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLWpzb24tYWRhcHRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2FudGhyb3BpYy9zdHJlYW0tanNvbi1hZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhdWRlIENMSSBzdHJlYW0tanNvbiBhZGFwdGVyLlxuICpcbiAqIElucHV0OiBxZ3JpZCBoaXN0b3J5L2lucHV0IC0+IENsYXVkZSBKU09OTCBzdGRpbi5cbiAqIE91dHB1dDogQ2xhdWRlIEpTT05MIHN0ZG91dCAtPiBxZ3JpZCBkZWx0YXMgKyBmaW5hbCByZXN1bHQgbWV0YWRhdGEuXG4gKlxuICogUHJldmlvdXMgY29udmVyc2F0aW9uIGl0ZW1zIGFyZSBmbGF0dGVuZWQgaW50byBvbmUgYXNzaXN0YW50IGNvbnRleHQgbGluZS5cbiAqIFRoZSBvbmx5IGV4ZWN1dGFibGUgdXNlciBsaW5lIGlzIHRoZSBjdXJyZW50IGlucHV0LlxuICovXG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJJbnB1dCB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Vc2VySW5wdXRcIjtcbmltcG9ydCB7XG4gIHR5cGUgTW9kZWxGYWxsYmFjayxcbiAgdHlwZSBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd24sXG59IGZyb20gXCIuLi9jb21tb24vcHJvdmlkZXItZGlzcGF0Y2hlclwiO1xuXG4vLyDilIDilIAg7J6F66ClIOyWtOuMke2EsCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLy8gQ2xhdWRlIHN0cmVhbS1qc29uIOyeheugpSDtlZwg7KSEKEpTT05MKS4gRW52ZWxvcGUgZmllbGRzIGFyZSBhZGRlZCBpbiBjbGF1ZGUtc2Vzc2lvbi5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhdWRlU3RyZWFtSnNvbkxpbmUge1xuICB0eXBlOiBcInVzZXJcIiB8IFwiYXNzaXN0YW50XCI7XG4gIG1lc3NhZ2U6IHtcbiAgICByb2xlOiBcInVzZXJcIiB8IFwiYXNzaXN0YW50XCI7XG4gICAgY29udGVudDogQXJyYXk8eyB0eXBlOiBcInRleHRcIjsgdGV4dDogc3RyaW5nIH0+O1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VySW5wdXRUb1RleHQoaW5wdXQ6IEFycmF5PFVzZXJJbnB1dD4pOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXRcbiAgICAuZmlsdGVyKChpKTogaSBpcyBFeHRyYWN0PFVzZXJJbnB1dCwgeyB0eXBlOiBcInRleHRcIiB9PiA9PiBpLnR5cGUgPT09IFwidGV4dFwiKVxuICAgIC5tYXAoKGkpID0+IGkudGV4dClcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gdGV4dEJsb2NrKHRleHQ6IHN0cmluZyk6IEFycmF5PHsgdHlwZTogXCJ0ZXh0XCI7IHRleHQ6IHN0cmluZyB9PiB7XG4gIHJldHVybiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dCB9XTtcbn1cblxuLy8gY29kZXggUmVzcG9uc2VJdGVtKGNvbGRIaXN0b3J5IGl0ZW0pIOy1nOyGjCBzaGFwZS5cbi8vIGV4dHJhY3RQcm9tcHRBbmRIaXN0b3J5KGFpLXNkay91dGlscy50cykg6rCAIOunjOuTnOuKlCDtmJXsi506XG4vLyAgIHsgdHlwZTpcIm1lc3NhZ2VcIiwgcm9sZTpcInVzZXJcIiwgY29udGVudDpbe3R5cGU6XCJpbnB1dF90ZXh0XCIsIHRleHR9XSB9XG4vLyAgIHsgdHlwZTpcIm1lc3NhZ2VcIiwgcm9sZTpcImFzc2lzdGFudFwiLCBjb250ZW50Olt7dHlwZTpcIm91dHB1dF90ZXh0XCIsIHRleHR9XSB9XG4vLyAgIHsgdHlwZTpcImZ1bmN0aW9uX2NhbGxcIiwgbmFtZSwgYXJndW1lbnRzLCBjYWxsX2lkIH1cbi8vICAgeyB0eXBlOlwiZnVuY3Rpb25fY2FsbF9vdXRwdXRcIiwgY2FsbF9pZCwgb3V0cHV0IH1cbnR5cGUgUmVzcG9uc2VJdGVtID0geyBba2V5OiBzdHJpbmddOiBKc29uVmFsdWUgfCB1bmRlZmluZWQgfTtcblxuZnVuY3Rpb24gYXNPYmplY3QodjogSnNvblZhbHVlIHwgdW5kZWZpbmVkKTogUmVzcG9uc2VJdGVtIHwgbnVsbCB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpID8gKHYgYXMgUmVzcG9uc2VJdGVtKSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlSXRlbVRleHQoaXRlbTogUmVzcG9uc2VJdGVtKTogc3RyaW5nIHtcbiAgY29uc3QgY29udGVudCA9IGl0ZW0uY29udGVudDtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIGNvbnRlbnRcbiAgICAubWFwKChjKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSBhc09iamVjdChjKTtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iai50ZXh0ID09PSBcInN0cmluZ1wiID8gb2JqLnRleHQgOiBcIlwiO1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiBmbGF0dGVuQ29sZEhpc3RvcnkoY29sZEhpc3Rvcnk6IEFycmF5PEpzb25WYWx1ZT4pOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBmb3IgKGNvbnN0IHJhdyBvZiBjb2xkSGlzdG9yeSkge1xuICAgIGNvbnN0IGl0ZW0gPSBhc09iamVjdChyYXcpO1xuICAgIGlmICghaXRlbSkgY29udGludWU7XG5cbiAgICBpZiAoaXRlbS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiBpdGVtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpIHtcbiAgICAgIHBhcnRzLnB1c2goYEFzc2lzdGFudDogJHtyZXNwb25zZUl0ZW1UZXh0KGl0ZW0pfWApO1xuICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiBpdGVtLnJvbGUgPT09IFwidXNlclwiKSB7XG4gICAgICBwYXJ0cy5wdXNoKGBVc2VyOiAke3Jlc3BvbnNlSXRlbVRleHQoaXRlbSl9YCk7XG4gICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFwiZnVuY3Rpb25fY2FsbFwiKSB7XG4gICAgICBjb25zdCBuYW1lID0gdHlwZW9mIGl0ZW0ubmFtZSA9PT0gXCJzdHJpbmdcIiA/IGl0ZW0ubmFtZSA6IFwiXCI7XG4gICAgICBjb25zdCBhcmdzID1cbiAgICAgICAgdHlwZW9mIGl0ZW0uYXJndW1lbnRzID09PSBcInN0cmluZ1wiID8gaXRlbS5hcmd1bWVudHMgOiBKU09OLnN0cmluZ2lmeShpdGVtLmFyZ3VtZW50cyA/PyB7fSk7XG4gICAgICBwYXJ0cy5wdXNoKGBUb29sIGNhbGw6ICR7bmFtZX0oJHthcmdzfSlgKTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gXCJmdW5jdGlvbl9jYWxsX291dHB1dFwiKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPVxuICAgICAgICB0eXBlb2YgaXRlbS5vdXRwdXQgPT09IFwic3RyaW5nXCIgPyBpdGVtLm91dHB1dCA6IEpTT04uc3RyaW5naWZ5KGl0ZW0ub3V0cHV0ID8/IFwiXCIpO1xuICAgICAgcGFydHMucHVzaChgVG9vbCByZXN1bHQ6ICR7b3V0cHV0fWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RyZWFtSnNvbklucHV0KG9wdHM6IHtcbiAgY29sZEhpc3Rvcnk/OiBBcnJheTxKc29uVmFsdWU+O1xuICBpbnB1dDogQXJyYXk8VXNlcklucHV0Pjtcbn0pOiBBcnJheTxDbGF1ZGVTdHJlYW1Kc29uTGluZT4ge1xuICBjb25zdCBsaW5lczogQXJyYXk8Q2xhdWRlU3RyZWFtSnNvbkxpbmU+ID0gW107XG5cbiAgaWYgKG9wdHMuY29sZEhpc3RvcnkgJiYgb3B0cy5jb2xkSGlzdG9yeS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmxhdHRlbmVkID0gZmxhdHRlbkNvbGRIaXN0b3J5KG9wdHMuY29sZEhpc3RvcnkpO1xuICAgIGlmIChmbGF0dGVuZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goe1xuICAgICAgICB0eXBlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgICBjb250ZW50OiB0ZXh0QmxvY2soYFByaW9yIGNvbnZlcnNhdGlvbiBjb250ZXh0OlxcbiR7ZmxhdHRlbmVkfWApLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGluZXMucHVzaCh7XG4gICAgdHlwZTogXCJ1c2VyXCIsXG4gICAgbWVzc2FnZTogeyByb2xlOiBcInVzZXJcIiwgY29udGVudDogdGV4dEJsb2NrKHVzZXJJbnB1dFRvVGV4dChvcHRzLmlucHV0KSkgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplU3RyZWFtSnNvbklucHV0KGxpbmVzOiBBcnJheTxDbGF1ZGVTdHJlYW1Kc29uTGluZT4pOiBzdHJpbmcge1xuICByZXR1cm4gbGluZXMubWFwKChsKSA9PiBKU09OLnN0cmluZ2lmeShsKSkuam9pbihcIlxcblwiKSArIFwiXFxuXCI7XG59XG5cbi8vIOKUgOKUgCDstpzroKUg7Ja064yR7YSwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy9cbi8vIENsYXVkZSBzdGRvdXQoSlNPTkwp7J2EIHFncmlkIGRlbHRhcyArIGZpbmFsIHJlc3VsdCDroZwg67OA7ZmY7ZWc64ukLlxuXG5pbnRlcmZhY2UgQ2xhdWRlVXNhZ2Uge1xuICBpbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gIG91dHB1dF90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vucz86IG51bWJlcjtcbiAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uPzoge1xuICAgIGVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gICAgZXBoZW1lcmFsXzFoX2lucHV0X3Rva2Vucz86IG51bWJlcjtcbiAgfTtcbiAgaXRlcmF0aW9ucz86IEFycmF5PHtcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIG1vZGVsPzogc3RyaW5nO1xuICB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTdHJlYW1SZXN1bHQge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHVzYWdlOiBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd247XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgY29zdFVzZDogbnVtYmVyO1xuICAvLyBxdW90YSDshozsp4QoXCJZb3UndmUgaGl0IC4uLlwiKSDqsJDsp4AuIGRpc3BhdGNoZXIg6rCAIFF1b3RhRXJyb3Ig66GcIOuzgO2ZmC5cbiAgcXVvdGFFeGhhdXN0ZWQ6IGJvb2xlYW47XG4gIC8vIHJlc3VsdC5pc19lcnJvciAvIHRlcm1pbmFsIG1vZGVsX2Vycm9yIOuTsS4gZGlzcGF0Y2hlciDqsIAg7JeQ65+s66GcIOuzgO2ZmC5cbiAgaXNFcnJvcjogYm9vbGVhbjtcbiAgLy8g7KeE64uo7JqpOiBDQyByZXN1bHQg65287J247J2YIHN1YnR5cGUoXCJzdWNjZXNzXCIgfCBcImVycm9yX21heF90dXJuc1wiIHwgLi4uKSDqs7wgdGVybWluYWxfcmVhc29uLlxuICAvLyBpc0Vycm9yIO2MkOyglSDsgqzsnKDrpbwg7JeQ65+sIOuplOyLnOyngOyXkCDrk5zrn6zrgrTquLAg7JyE7ZW0IOuztOyhtO2VnOuLpChTT04tNDk1KS5cbiAgc3VidHlwZT86IHN0cmluZztcbiAgdGVybWluYWxSZWFzb24/OiBzdHJpbmc7XG4gIC8vIOyLpOygnCDstZzsooUg7J2R64u17J2EIOunjOuToCDrqqjrjbguIEZhYmxlIHJlZnVzYWwgZmFsbGJhY2sg65WMIHJlcXVlc3RlZCBtb2RlbCDqs7wg64uk66W064ukLlxuICBzZXJ2ZWRNb2RlbD86IHN0cmluZztcbiAgc3RvcFJlYXNvbj86IHN0cmluZztcbiAgcmVmdXNhbD86IHtcbiAgICBjYXRlZ29yeT86IHN0cmluZztcbiAgICBleHBsYW5hdGlvbj86IHN0cmluZztcbiAgfTtcbiAgbW9kZWxGYWxsYmFja3M/OiBBcnJheTxNb2RlbEZhbGxiYWNrPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTdHJlYW1Kc29uU3RhdGUge1xuICBzdHJ1Y3R1cmVkT3V0cHV0VGV4dD86IHN0cmluZztcbiAgc2VydmVkTW9kZWw/OiBzdHJpbmc7XG4gIHN0b3BSZWFzb24/OiBzdHJpbmc7XG4gIHJlZnVzYWw/OiB7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gICAgZXhwbGFuYXRpb24/OiBzdHJpbmc7XG4gIH07XG4gIG1vZGVsRmFsbGJhY2tzPzogQXJyYXk8TW9kZWxGYWxsYmFjaz47XG4gIHJlZnVzYWxXaXRob3V0RmFsbGJhY2s/OiBib29sZWFuO1xufVxuXG4vLyBBbnRocm9waWMgdXNhZ2UgNCDsubTthYzqs6Drpqwg4oaSIFRva2VuVXNhZ2VCcmVha2Rvd24uXG4vLyBBbnRocm9waWMgbmF0aXZlIHVzYWdlIOuKlCBpbnB1dC9jYWNoZV9jcmVhdGlvbi9jYWNoZV9yZWFkIOulvCDshJzroZwg67Cw7YOA7KCB7J24IOy5tO2FjOqzoOumrOuhnCDspIDri6QuXG4vLyDrsJjrqbQgcWdyaWQg64K067aAIO2RnOykgChUb2tlblVzYWdlQnJlYWtkb3duKeqzvCBjb3N0IOqzhOyCsOydgCBpbnB1dFRva2VucyDrpbwgXCLsoITssrQg7J6F66ClXG4vLyAoPSBub24tY2FjaGUgaW5wdXQgKyBjYWNoZSBjcmVhdGlvbiArIGNhY2hlIHJlYWQpXCIg7Jy866GcIOy3qOq4ie2VmOqzoCBjYWNoZWRJbnB1dFRva2Vucy9jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnNcbi8vIOulvCDqt7jspJEg6rCBIOuqq+ycvOuhnCDri6Tsi5wg7ZGc7Iuc7ZWc64ukKE9wZW5BSS9Db2RleCB1c2FnZSDsmYAg6rCZ7J2AIOydmOuvuCkuIOuUsOudvOyEnCDsl6zquLDshJwg7ZWp7LOQIO2RnOykgO2ZlO2VnOuLpC5cbmZ1bmN0aW9uIHRvVXNhZ2VCcmVha2Rvd24odTogQ2xhdWRlVXNhZ2UpOiBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd24ge1xuICBjb25zdCBpbnB1dCA9IHUuaW5wdXRfdG9rZW5zID8/IDA7XG4gIGNvbnN0IGNhY2hlQ3JlYXRlID0gdS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMgPz8gMDtcbiAgY29uc3QgY2FjaGVSZWFkID0gdS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyA/PyAwO1xuICBjb25zdCBvdXRwdXQgPSB1Lm91dHB1dF90b2tlbnMgPz8gMDtcbiAgY29uc3QgdG90YWxJbnB1dCA9IGlucHV0ICsgY2FjaGVDcmVhdGUgKyBjYWNoZVJlYWQ7XG4gIGNvbnN0IGNhY2hlQ3JlYXRlNW0gPSB1LmNhY2hlX2NyZWF0aW9uPy5lcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zO1xuICBjb25zdCBjYWNoZUNyZWF0ZTFoID0gdS5jYWNoZV9jcmVhdGlvbj8uZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucztcbiAgcmV0dXJuIHtcbiAgICB0b3RhbFRva2VuczogdG90YWxJbnB1dCArIG91dHB1dCxcbiAgICBpbnB1dFRva2VuczogdG90YWxJbnB1dCxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogY2FjaGVSZWFkLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogY2FjaGVDcmVhdGUsXG4gICAgLi4uKHR5cGVvZiBjYWNoZUNyZWF0ZTVtID09PSBcIm51bWJlclwiID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogY2FjaGVDcmVhdGU1bSB9IDoge30pLFxuICAgIC4uLih0eXBlb2YgY2FjaGVDcmVhdGUxaCA9PT0gXCJudW1iZXJcIiA/IHsgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IGNhY2hlQ3JlYXRlMWggfSA6IHt9KSxcbiAgICBvdXRwdXRUb2tlbnM6IG91dHB1dCxcbiAgICByZWFzb25pbmdPdXRwdXRUb2tlbnM6IDAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0cmlwQ29kZUZlbmNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9eYGBgKD86anNvbik/XFxzKlxcbj8vaSwgXCJcIilcbiAgICAucmVwbGFjZSgvXFxuP2BgYFxccyokL2ksIFwiXCIpO1xufVxuXG5mdW5jdGlvbiBzdHJ1Y3R1cmVkT3V0cHV0VG9vbFVzZVRleHQoajogUmVzcG9uc2VJdGVtKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWVzc2FnZSA9IGFzT2JqZWN0KGoubWVzc2FnZSk7XG4gIGNvbnN0IGNvbnRlbnQgPSBtZXNzYWdlPy5jb250ZW50O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCByYXcgb2YgY29udGVudCkge1xuICAgIGNvbnN0IGJsb2NrID0gYXNPYmplY3QocmF3KTtcbiAgICBpZiAoIWJsb2NrKSBjb250aW51ZTtcbiAgICBpZiAoXG4gICAgICBibG9jay50eXBlID09PSBcInRvb2xfdXNlXCIgJiZcbiAgICAgIGJsb2NrLm5hbWUgPT09IFwiU3RydWN0dXJlZE91dHB1dFwiICYmXG4gICAgICBibG9jay5pbnB1dCAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYmxvY2suaW5wdXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxFdmVudE1vZGVsKG1vZGVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aXRob3V0UHJvdmlkZXIgPSBtb2RlbC5zdGFydHNXaXRoKFwiYW50aHJvcGljL1wiKSA/IG1vZGVsLnNsaWNlKFwiYW50aHJvcGljL1wiLmxlbmd0aCkgOiBtb2RlbDtcbiAgcmV0dXJuIHdpdGhvdXRQcm92aWRlci5yZXBsYWNlKC9cXFsxbVxcXSQvLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxTdHJpbmcodmFsdWU6IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZWNvcmRGYWxsYmFjayhzdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogTW9kZWxGYWxsYmFjayk6IHZvaWQge1xuICBpZiAoIXN0YXRlKSByZXR1cm47XG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IE1vZGVsRmFsbGJhY2sgPSB7XG4gICAgLi4uZmFsbGJhY2ssXG4gICAgZnJvbU1vZGVsOiBjYW5vbmljYWxFdmVudE1vZGVsKGZhbGxiYWNrLmZyb21Nb2RlbCksXG4gICAgdG9Nb2RlbDogY2Fub25pY2FsRXZlbnRNb2RlbChmYWxsYmFjay50b01vZGVsKSxcbiAgfTtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGF0ZS5tb2RlbEZhbGxiYWNrcz8uZmluZChcbiAgICAoaXRlbSkgPT5cbiAgICAgIGl0ZW0udHJpZ2dlciA9PT0gbm9ybWFsaXplZC50cmlnZ2VyICYmXG4gICAgICBpdGVtLmZyb21Nb2RlbCA9PT0gbm9ybWFsaXplZC5mcm9tTW9kZWwgJiZcbiAgICAgIGl0ZW0udG9Nb2RlbCA9PT0gbm9ybWFsaXplZC50b01vZGVsLFxuICApO1xuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBleGlzdGluZy5jYXRlZ29yeSA/Pz0gbm9ybWFsaXplZC5jYXRlZ29yeTtcbiAgICBleGlzdGluZy5leHBsYW5hdGlvbiA/Pz0gbm9ybWFsaXplZC5leHBsYW5hdGlvbjtcbiAgfSBlbHNlIHtcbiAgICAoc3RhdGUubW9kZWxGYWxsYmFja3MgPz89IFtdKS5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9XG4gIHN0YXRlLnNlcnZlZE1vZGVsID0gbm9ybWFsaXplZC50b01vZGVsO1xuICBzdGF0ZS5yZWZ1c2FsV2l0aG91dEZhbGxiYWNrID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJvdXRpbmdGcm9tVXNhZ2UoXG4gIHVzYWdlOiBSZXNwb25zZUl0ZW0gfCBudWxsLFxuICBzdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlIHwgdW5kZWZpbmVkLFxuKTogdm9pZCB7XG4gIGlmICghc3RhdGUgfHwgIXVzYWdlIHx8ICFBcnJheS5pc0FycmF5KHVzYWdlLml0ZXJhdGlvbnMpKSByZXR1cm47XG5cbiAgbGV0IHByZXZpb3VzTW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCByYXcgb2YgdXNhZ2UuaXRlcmF0aW9ucykge1xuICAgIGNvbnN0IGl0ZXJhdGlvbiA9IGFzT2JqZWN0KHJhdyk7XG4gICAgaWYgKCFpdGVyYXRpb24pIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1vZGVsID0gb3B0aW9uYWxTdHJpbmcoaXRlcmF0aW9uLm1vZGVsKTtcbiAgICBjb25zdCB0eXBlID0gb3B0aW9uYWxTdHJpbmcoaXRlcmF0aW9uLnR5cGUpO1xuICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGNhbm9uaWNhbE1vZGVsID0gY2Fub25pY2FsRXZlbnRNb2RlbChtb2RlbCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZmFsbGJhY2tfbWVzc2FnZVwiICYmIHByZXZpb3VzTW9kZWwpIHtcbiAgICAgIHJlY29yZEZhbGxiYWNrKHN0YXRlLCB7XG4gICAgICAgIHRyaWdnZXI6IFwicmVmdXNhbFwiLFxuICAgICAgICBmcm9tTW9kZWw6IHByZXZpb3VzTW9kZWwsXG4gICAgICAgIHRvTW9kZWw6IGNhbm9uaWNhbE1vZGVsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHByZXZpb3VzTW9kZWwgPSBjYW5vbmljYWxNb2RlbDtcbiAgICBzdGF0ZS5zZXJ2ZWRNb2RlbCA9IGNhbm9uaWNhbE1vZGVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJvdXRpbmdGcm9tTWVzc2FnZShcbiAgbWVzc2FnZTogUmVzcG9uc2VJdGVtIHwgbnVsbCxcbiAgc3RhdGU6IENsYXVkZVN0cmVhbUpzb25TdGF0ZSB8IHVuZGVmaW5lZCxcbik6IHZvaWQge1xuICBpZiAoIXN0YXRlIHx8ICFtZXNzYWdlKSByZXR1cm47XG4gIGNvbnN0IG1vZGVsID0gb3B0aW9uYWxTdHJpbmcobWVzc2FnZS5tb2RlbCk7XG4gIGNvbnN0IGNhbm9uaWNhbE1vZGVsID0gbW9kZWwgPyBjYW5vbmljYWxFdmVudE1vZGVsKG1vZGVsKSA6IHVuZGVmaW5lZDtcbiAgaWYgKGNhbm9uaWNhbE1vZGVsKSBzdGF0ZS5zZXJ2ZWRNb2RlbCA9IGNhbm9uaWNhbE1vZGVsO1xuICBjb25zdCBzdG9wUmVhc29uID0gb3B0aW9uYWxTdHJpbmcobWVzc2FnZS5zdG9wX3JlYXNvbik7XG4gIGlmIChzdG9wUmVhc29uKSB7XG4gICAgc3RhdGUuc3RvcFJlYXNvbiA9IHN0b3BSZWFzb247XG4gICAgaWYgKHN0b3BSZWFzb24gPT09IFwicmVmdXNhbFwiKSBzdGF0ZS5yZWZ1c2FsV2l0aG91dEZhbGxiYWNrID0gdHJ1ZTtcbiAgICBlbHNlIGlmIChzdGF0ZS5tb2RlbEZhbGxiYWNrcz8uc29tZSgoZmFsbGJhY2spID0+IGZhbGxiYWNrLnRvTW9kZWwgPT09IGNhbm9uaWNhbE1vZGVsKSkge1xuICAgICAgc3RhdGUucmVmdXNhbFdpdGhvdXRGYWxsYmFjayA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0b3BEZXRhaWxzID0gYXNPYmplY3QobWVzc2FnZS5zdG9wX2RldGFpbHMpO1xuICBpZiAoc3RvcERldGFpbHM/LnR5cGUgPT09IFwicmVmdXNhbFwiIHx8IHN0b3BSZWFzb24gPT09IFwicmVmdXNhbFwiKSB7XG4gICAgc3RhdGUucmVmdXNhbCA9IHtcbiAgICAgIGNhdGVnb3J5OiBvcHRpb25hbFN0cmluZyhzdG9wRGV0YWlscz8uY2F0ZWdvcnkpLFxuICAgICAgZXhwbGFuYXRpb246IG9wdGlvbmFsU3RyaW5nKHN0b3BEZXRhaWxzPy5leHBsYW5hdGlvbiksXG4gICAgfTtcbiAgfVxuICB1cGRhdGVSb3V0aW5nRnJvbVVzYWdlKGFzT2JqZWN0KG1lc3NhZ2UudXNhZ2UpLCBzdGF0ZSk7XG59XG5cbi8vIFByb2Nlc3NlcyBvbmUgQ2xhdWRlIHN0ZG91dCBKU09OTCBsaW5lLiBSZXR1cm5zIGZpbmFsIHJlc3VsdCBvbiByZXN1bHQgZXZlbnQuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlU3RyZWFtSnNvbkxpbmUoXG4gIGxpbmU6IHN0cmluZyxcbiAgb25EZWx0YTogKHRleHQ6IHN0cmluZykgPT4gdm9pZCxcbiAgb3B0cz86IHsgc3RydWN0dXJlZE91dHB1dD86IGJvb2xlYW47IHN0YXRlPzogQ2xhdWRlU3RyZWFtSnNvblN0YXRlIH0sXG4pOiBDbGF1ZGVTdHJlYW1SZXN1bHQgfCBudWxsIHtcbiAgY29uc3Qgc3RydWN0dXJlZE91dHB1dCA9IG9wdHM/LnN0cnVjdHVyZWRPdXRwdXQgPz8gZmFsc2U7XG4gIGNvbnN0IHN0YXRlID0gb3B0cz8uc3RhdGU7XG4gIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gbnVsbDtcblxuICBsZXQgajogeyBba2V5OiBzdHJpbmddOiBKc29uVmFsdWUgfCB1bmRlZmluZWQgfTtcbiAgdHJ5IHtcbiAgICBqID0gSlNPTi5wYXJzZSh0cmltbWVkKSBhcyB7IFtrZXk6IHN0cmluZ106IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChqLnR5cGUgPT09IFwic3RyZWFtX2V2ZW50XCIpIHtcbiAgICBjb25zdCBldmVudCA9IGFzT2JqZWN0KGouZXZlbnQpO1xuICAgIGlmIChldmVudD8udHlwZSA9PT0gXCJtZXNzYWdlX3N0YXJ0XCIpIHtcbiAgICAgIHVwZGF0ZVJvdXRpbmdGcm9tTWVzc2FnZShhc09iamVjdChldmVudC5tZXNzYWdlKSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnR5cGUgPT09IFwibWVzc2FnZV9kZWx0YVwiKSB7XG4gICAgICBjb25zdCBkZWx0YSA9IGFzT2JqZWN0KGV2ZW50LmRlbHRhKTtcbiAgICAgIGNvbnN0IHN0b3BSZWFzb24gPSBvcHRpb25hbFN0cmluZyhkZWx0YT8uc3RvcF9yZWFzb24pO1xuICAgICAgaWYgKHN0YXRlICYmIHN0b3BSZWFzb24pIHtcbiAgICAgICAgc3RhdGUuc3RvcFJlYXNvbiA9IHN0b3BSZWFzb247XG4gICAgICAgIGlmIChzdG9wUmVhc29uID09PSBcInJlZnVzYWxcIikgc3RhdGUucmVmdXNhbFdpdGhvdXRGYWxsYmFjayA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSBcImNvbnRlbnRfYmxvY2tfZGVsdGFcIikge1xuICAgICAgY29uc3QgZGVsdGEgPSBhc09iamVjdChldmVudC5kZWx0YSk7XG4gICAgICBpZiAoZGVsdGEpIHtcbiAgICAgICAgaWYgKHN0cnVjdHVyZWRPdXRwdXQpIHtcbiAgICAgICAgICBpZiAoZGVsdGEudHlwZSA9PT0gXCJpbnB1dF9qc29uX2RlbHRhXCIgJiYgdHlwZW9mIGRlbHRhLnBhcnRpYWxfanNvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgb25EZWx0YShkZWx0YS5wYXJ0aWFsX2pzb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZGVsdGEudHlwZSA9PT0gXCJ0ZXh0X2RlbHRhXCIgJiYgdHlwZW9mIGRlbHRhLnRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIG9uRGVsdGEoZGVsdGEudGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGoudHlwZSA9PT0gXCJzeXN0ZW1cIikge1xuICAgIGNvbnN0IHN1YnR5cGUgPSBvcHRpb25hbFN0cmluZyhqLnN1YnR5cGUpO1xuICAgIGlmIChzdWJ0eXBlID09PSBcIm1vZGVsX3JlZnVzYWxfZmFsbGJhY2tcIikge1xuICAgICAgY29uc3QgZnJvbU1vZGVsID0gb3B0aW9uYWxTdHJpbmcoai5vcmlnaW5hbE1vZGVsKSA/PyBvcHRpb25hbFN0cmluZyhqLm9yaWdpbmFsX21vZGVsKTtcbiAgICAgIGNvbnN0IHRvTW9kZWwgPSBvcHRpb25hbFN0cmluZyhqLmZhbGxiYWNrTW9kZWwpID8/IG9wdGlvbmFsU3RyaW5nKGouZmFsbGJhY2tfbW9kZWwpO1xuICAgICAgaWYgKGZyb21Nb2RlbCAmJiB0b01vZGVsKSB7XG4gICAgICAgIHJlY29yZEZhbGxiYWNrKHN0YXRlLCB7XG4gICAgICAgICAgdHJpZ2dlcjogXCJyZWZ1c2FsXCIsXG4gICAgICAgICAgZnJvbU1vZGVsLFxuICAgICAgICAgIHRvTW9kZWwsXG4gICAgICAgICAgY2F0ZWdvcnk6XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaVJlZnVzYWxDYXRlZ29yeSkgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGouYXBpX3JlZnVzYWxfY2F0ZWdvcnkpID8/XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxDYXRlZ29yeSkgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbF9jYXRlZ29yeSksXG4gICAgICAgICAgZXhwbGFuYXRpb246XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaVJlZnVzYWxFeHBsYW5hdGlvbikgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGouYXBpX3JlZnVzYWxfZXhwbGFuYXRpb24pID8/XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxFeHBsYW5hdGlvbikgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbF9leHBsYW5hdGlvbiksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3VidHlwZSA9PT0gXCJtb2RlbF9yZWZ1c2FsX25vX2ZhbGxiYWNrXCIgJiYgc3RhdGUpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsTW9kZWwgPSBvcHRpb25hbFN0cmluZyhqLm9yaWdpbmFsTW9kZWwpID8/IG9wdGlvbmFsU3RyaW5nKGoub3JpZ2luYWxfbW9kZWwpO1xuICAgICAgaWYgKG9yaWdpbmFsTW9kZWwpIHN0YXRlLnNlcnZlZE1vZGVsID0gY2Fub25pY2FsRXZlbnRNb2RlbChvcmlnaW5hbE1vZGVsKTtcbiAgICAgIHN0YXRlLnN0b3BSZWFzb24gPSBcInJlZnVzYWxcIjtcbiAgICAgIHN0YXRlLnJlZnVzYWxXaXRob3V0RmFsbGJhY2sgPSB0cnVlO1xuICAgICAgc3RhdGUucmVmdXNhbCA9IHtcbiAgICAgICAgY2F0ZWdvcnk6XG4gICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5hcGlSZWZ1c2FsQ2F0ZWdvcnkpID8/XG4gICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5hcGlfcmVmdXNhbF9jYXRlZ29yeSkgPz9cbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxDYXRlZ29yeSkgPz9cbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxfY2F0ZWdvcnkpLFxuICAgICAgICBleHBsYW5hdGlvbjpcbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaVJlZnVzYWxFeHBsYW5hdGlvbikgPz9cbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaV9yZWZ1c2FsX2V4cGxhbmF0aW9uKSA/P1xuICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbEV4cGxhbmF0aW9uKSA/P1xuICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbF9leHBsYW5hdGlvbiksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChqLnR5cGUgPT09IFwiYXNzaXN0YW50XCIpIHtcbiAgICB1cGRhdGVSb3V0aW5nRnJvbU1lc3NhZ2UoYXNPYmplY3Qoai5tZXNzYWdlKSwgc3RhdGUpO1xuICAgIGlmIChzdHJ1Y3R1cmVkT3V0cHV0ICYmIHN0YXRlICYmIHN0YXRlLnN0cnVjdHVyZWRPdXRwdXRUZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBzdHJ1Y3R1cmVkT3V0cHV0VG9vbFVzZVRleHQoaik7XG4gICAgICBpZiAodGV4dCAhPT0gdW5kZWZpbmVkKSBzdGF0ZS5zdHJ1Y3R1cmVkT3V0cHV0VGV4dCA9IHRleHQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGoudHlwZSA9PT0gXCJyZXN1bHRcIikge1xuICAgIGNvbnN0IHN1YnR5cGUgPSB0eXBlb2Ygai5zdWJ0eXBlID09PSBcInN0cmluZ1wiID8gai5zdWJ0eXBlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRlcm1pbmFsUmVhc29uID0gdHlwZW9mIGoudGVybWluYWxfcmVhc29uID09PSBcInN0cmluZ1wiID8gai50ZXJtaW5hbF9yZWFzb24gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVzdWx0U3VjY2VlZGVkID1cbiAgICAgIGouaXNfZXJyb3IgIT09IHRydWUgJiZcbiAgICAgIHRlcm1pbmFsUmVhc29uICE9PSBcIm1vZGVsX2Vycm9yXCIgJiZcbiAgICAgIChzdWJ0eXBlID09PSB1bmRlZmluZWQgfHwgc3VidHlwZSA9PT0gXCJzdWNjZXNzXCIpO1xuICAgIGxldCB0ZXh0OiBzdHJpbmc7XG4gICAgY29uc3QgcHJlc2VydmVkU3RydWN0dXJlZE91dHB1dCA9IHN0cnVjdHVyZWRPdXRwdXQgPyBzdGF0ZT8uc3RydWN0dXJlZE91dHB1dFRleHQgOiB1bmRlZmluZWQ7XG4gICAgLy8gQ2xhdWRlIENvZGXripQgU3RydWN0dXJlZE91dHB1dCDsiqTtgqTrp4gg6rKA7KadIOyLpO2MqCDtm4Qg64K067aAIOyerOyLnOuPhOulvCDtlaAg7IiYIOyeiOuLpC4gYXNzaXN0YW50XG4gICAgLy8g7J2067Kk7Yq47J2YIOyyqyB0b29sIGlucHV07J2AIOqxsOygiOuQnCDsi5zrj4Tsnbwg7IiYIOyeiOycvOuvgOuhnCwg7ISx6rO1IHJlc3VsdOqwgCDsoJzqs7XtlZwg7LWc7KKFIOqygOymneqwkuydhFxuICAgIC8vIOyasOyEoO2VnOuLpC4g7LKrIOyeheugpSDrs7TsobTqsJLsnYAgbWF4X3R1cm5zL3JldHJ5IOy0iOqzvOyymOufvCDshLHqs7UgcmVzdWx06rCAIOyXhuuKlCDsp4Tri6gg6rK966Gc7Jqp7J2064ukLlxuICAgIGlmIChzdHJ1Y3R1cmVkT3V0cHV0ICYmIHJlc3VsdFN1Y2NlZWRlZCAmJiBqLnN0cnVjdHVyZWRfb3V0cHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShqLnN0cnVjdHVyZWRfb3V0cHV0KTtcbiAgICB9IGVsc2UgaWYgKHByZXNlcnZlZFN0cnVjdHVyZWRPdXRwdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dCA9IHByZXNlcnZlZFN0cnVjdHVyZWRPdXRwdXQ7XG4gICAgfSBlbHNlIGlmIChqLnN0cnVjdHVyZWRfb3V0cHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShqLnN0cnVjdHVyZWRfb3V0cHV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dCA9IHN0cmlwQ29kZUZlbmNlKHR5cGVvZiBqLnJlc3VsdCA9PT0gXCJzdHJpbmdcIiA/IGoucmVzdWx0IDogXCJcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3VXNhZ2UgPSBhc09iamVjdChqLnVzYWdlKSA/PyB7fTtcbiAgICB1cGRhdGVSb3V0aW5nRnJvbVVzYWdlKHJhd1VzYWdlLCBzdGF0ZSk7XG4gICAgY29uc3QgcmVzdWx0TW9kZWwgPSBvcHRpb25hbFN0cmluZyhqLm1vZGVsKTtcbiAgICBpZiAoc3RhdGUgJiYgcmVzdWx0TW9kZWwgJiYgIXN0YXRlLnNlcnZlZE1vZGVsKSB7XG4gICAgICBzdGF0ZS5zZXJ2ZWRNb2RlbCA9IGNhbm9uaWNhbEV2ZW50TW9kZWwocmVzdWx0TW9kZWwpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRTdG9wUmVhc29uID0gb3B0aW9uYWxTdHJpbmcoai5zdG9wX3JlYXNvbik7XG4gICAgaWYgKHN0YXRlICYmIHJlc3VsdFN0b3BSZWFzb24pIHtcbiAgICAgIHN0YXRlLnN0b3BSZWFzb24gPSByZXN1bHRTdG9wUmVhc29uO1xuICAgICAgaWYgKHJlc3VsdFN0b3BSZWFzb24gPT09IFwicmVmdXNhbFwiKSBzdGF0ZS5yZWZ1c2FsV2l0aG91dEZhbGxiYWNrID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdXNhZ2UgPSB0b1VzYWdlQnJlYWtkb3duKHJhd1VzYWdlIGFzIENsYXVkZVVzYWdlKTtcbiAgICBjb25zdCBxdW90YUV4aGF1c3RlZCA9IHRleHQuc3RhcnRzV2l0aChcIllvdSd2ZSBoaXRcIik7XG5cbiAgICAvLyBTT04tNDk1OiDruYTsoJXsg4Eg7KKF66OMKGVycm9yX21heF9zdHJ1Y3R1cmVkX291dHB1dF9yZXRyaWVzIOuTsSnripQg7KCV7KeB7ZWY6rKMIOyXkOufrOuhnCDsspjrpqztlZzri6QuXG4gICAgLy8gQ0Mgc3RydWN0dXJlZCBvdXRwdXQg7J2AIGNvbnN0cmFpbmVkIGRlY29kaW5nIOydtCDslYTri4jrnbwgXCJ0b29sIGlucHV0IOyDneyEsSDtm4Qg7IKs7ZuEIEFKViDqsoDspp1cIuydtOudvFxuICAgIC8vIOuqqOuNuOydtCDqsIDrgZQgcGxhY2Vob2xkZXIoJFBBUkFNRVRFUl9OQU1FKcK36rGw67aAKFwianVzdCBraWRkaW5nXCIpwrftlYTrk5wg64iE6529KGFkdmFuY2UpIOqwmeydgCDrsJzsnpEvXG4gICAgLy8g67aI7JmE7KCEIOy2nOugpeydhCDrgrjri6QuIOydtOulvCBcIuqxsOydmCDrp57slZjsnLzri4gg7IK066as7J6QXCLqs6Ag7Z2Y66as66m0IO2BtOudvOydtOyWuO2KuCDqsoDspp3sl5DshJwg6rmo7KeA6rGw64KYKO2VhOuTnCDriITrnb0pXG4gICAgLy8g7JOw66CI6riw6rCAIOyDiOyWtCDrgpjqsITri6Qo7Iuk7LihIDExNjc0LzExNjc1KS4g7JWM66Ck7KeEIGJlc3QgcHJhY3RpY2UocmVmdXNhbC9kZWdlbmVyYXRlIG91dHB1dCDsnYAg7IK066as7KeAXG4gICAgLy8g66eQ6rOgIGdyYWNlZnVsIGVycm9yKeuMgOuhnCwgc3VidHlwZSAhPSBzdWNjZXNzIOuKlCDqt7jrjIDroZwg7JeQ65+s66GcIOuRlOuLpC4g7YG065287J207Ja47Yq46rCAIOq3uCDthLTsnYQg7Iuk7Yyo66GcXG4gICAgLy8g64uk66Oo6rKMIO2VnOuLpCjsiqTtirjrprzsnbTrnbwg7J6Q64+ZIOyerOyLnOuPhCDsl4bsnYwg4oCUIOyLnOqwhCAy67CwIOuwqeyngCkuXG4gICAgY29uc3QgaXNFcnJvciA9XG4gICAgICBqLmlzX2Vycm9yID09PSB0cnVlIHx8XG4gICAgICBqLnRlcm1pbmFsX3JlYXNvbiA9PT0gXCJtb2RlbF9lcnJvclwiIHx8XG4gICAgICAoc3VidHlwZSAhPT0gdW5kZWZpbmVkICYmIHN1YnR5cGUgIT09IFwic3VjY2Vzc1wiKSB8fFxuICAgICAgc3RhdGU/LnJlZnVzYWxXaXRob3V0RmFsbGJhY2sgPT09IHRydWU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGV4dCxcbiAgICAgIHVzYWdlLFxuICAgICAgZHVyYXRpb25NczogdHlwZW9mIGouZHVyYXRpb25fbXMgPT09IFwibnVtYmVyXCIgPyBqLmR1cmF0aW9uX21zIDogMCxcbiAgICAgIGNvc3RVc2Q6IHR5cGVvZiBqLnRvdGFsX2Nvc3RfdXNkID09PSBcIm51bWJlclwiID8gai50b3RhbF9jb3N0X3VzZCA6IDAsXG4gICAgICBxdW90YUV4aGF1c3RlZCxcbiAgICAgIGlzRXJyb3IsXG4gICAgICBzdWJ0eXBlLFxuICAgICAgdGVybWluYWxSZWFzb24sXG4gICAgICBzZXJ2ZWRNb2RlbDogc3RhdGU/LnNlcnZlZE1vZGVsLFxuICAgICAgc3RvcFJlYXNvbjogc3RhdGU/LnN0b3BSZWFzb24sXG4gICAgICByZWZ1c2FsOiBzdGF0ZT8ucmVmdXNhbCxcbiAgICAgIG1vZGVsRmFsbGJhY2tzOiBzdGF0ZT8ubW9kZWxGYWxsYmFja3MsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBNEJBLFNBQVMsZ0JBQWdCLE9BQWlDO0NBQ3hELE9BQU8sTUFDSixRQUFRLE1BQWlELEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FDM0UsS0FBSyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQ2xCLEtBQUssSUFBSTtBQUNkO0FBRUEsU0FBUyxVQUFVLE1BQXFEO0NBQ3RFLE9BQU8sQ0FBQztFQUFFLE1BQU07RUFBUTtDQUFLLENBQUM7QUFDaEM7QUFVQSxTQUFTLFNBQVMsR0FBK0M7Q0FDL0QsT0FBTyxPQUFPLE1BQU0sWUFBWSxNQUFNLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFLLElBQXFCO0FBQzFGO0FBRUEsU0FBUyxpQkFBaUIsTUFBNEI7Q0FDcEQsTUFBTSxVQUFVLEtBQUs7Q0FDckIsSUFBSSxDQUFDLE1BQU0sUUFBUSxPQUFPLEdBQUcsT0FBTztDQUNwQyxPQUFPLFFBQ0osS0FBSyxNQUFNO0VB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
256
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLWpzb24tYWRhcHRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2FudGhyb3BpYy9zdHJlYW0tanNvbi1hZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhdWRlIENMSSBzdHJlYW0tanNvbiBhZGFwdGVyLlxuICpcbiAqIElucHV0OiBxZ3JpZCBoaXN0b3J5L2lucHV0IC0+IENsYXVkZSBKU09OTCBzdGRpbi5cbiAqIE91dHB1dDogQ2xhdWRlIEpTT05MIHN0ZG91dCAtPiBxZ3JpZCBkZWx0YXMgKyBmaW5hbCByZXN1bHQgbWV0YWRhdGEuXG4gKlxuICogUHJldmlvdXMgY29udmVyc2F0aW9uIGl0ZW1zIGFyZSBmbGF0dGVuZWQgaW50byBvbmUgYXNzaXN0YW50IGNvbnRleHQgbGluZS5cbiAqIFRoZSBvbmx5IGV4ZWN1dGFibGUgdXNlciBsaW5lIGlzIHRoZSBjdXJyZW50IGlucHV0LlxuICovXG5cbmltcG9ydCB7XG4gIHR5cGUgTW9kZWxGYWxsYmFjayxcbiAgdHlwZSBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd24sXG59IGZyb20gXCIuLi9jb21tb24vcHJvdmlkZXItZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBKc29uVmFsdWUsIHR5cGUgVXNlcklucHV0IH0gZnJvbSBcIi4uL2NvbW1vbi9wcm92aWRlci10eXBlc1wiO1xuaW1wb3J0IHsgc3RyaXBGZW5jZXMgfSBmcm9tIFwiLi9mZW5jZS1zdHJpcFwiO1xuXG4vLyDilIDilIAg7J6F66ClIOyWtOuMke2EsCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLy8gQ2xhdWRlIHN0cmVhbS1qc29uIOyeheugpSDtlZwg7KSEKEpTT05MKS4gRW52ZWxvcGUgZmllbGRzIGFyZSBhZGRlZCBpbiBjbGF1ZGUtc2Vzc2lvbi5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhdWRlU3RyZWFtSnNvbkxpbmUge1xuICB0eXBlOiBcInVzZXJcIiB8IFwiYXNzaXN0YW50XCI7XG4gIG1lc3NhZ2U6IHtcbiAgICByb2xlOiBcInVzZXJcIiB8IFwiYXNzaXN0YW50XCI7XG4gICAgY29udGVudDogQXJyYXk8eyB0eXBlOiBcInRleHRcIjsgdGV4dDogc3RyaW5nIH0+O1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VySW5wdXRUb1RleHQoaW5wdXQ6IEFycmF5PFVzZXJJbnB1dD4pOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXRcbiAgICAuZmlsdGVyKChpKTogaSBpcyBFeHRyYWN0PFVzZXJJbnB1dCwgeyB0eXBlOiBcInRleHRcIiB9PiA9PiBpLnR5cGUgPT09IFwidGV4dFwiKVxuICAgIC5tYXAoKGkpID0+IGkudGV4dClcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gdGV4dEJsb2NrKHRleHQ6IHN0cmluZyk6IEFycmF5PHsgdHlwZTogXCJ0ZXh0XCI7IHRleHQ6IHN0cmluZyB9PiB7XG4gIHJldHVybiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dCB9XTtcbn1cblxuLy8gT3BlbkFJIFJlc3BvbnNlcyBpdGVtKGNvbGRIaXN0b3J5IGl0ZW0pIOy1nOyGjCBzaGFwZS5cbi8vIGV4dHJhY3RQcm9tcHRBbmRIaXN0b3J5KGFpLXNkay91dGlscy50cykg6rCAIOunjOuTnOuKlCDtmJXsi506XG4vLyAgIHsgdHlwZTpcIm1lc3NhZ2VcIiwgcm9sZTpcInVzZXJcIiwgY29udGVudDpbe3R5cGU6XCJpbnB1dF90ZXh0XCIsIHRleHR9XSB9XG4vLyAgIHsgdHlwZTpcIm1lc3NhZ2VcIiwgcm9sZTpcImFzc2lzdGFudFwiLCBjb250ZW50Olt7dHlwZTpcIm91dHB1dF90ZXh0XCIsIHRleHR9XSB9XG4vLyAgIHsgdHlwZTpcImZ1bmN0aW9uX2NhbGxcIiwgbmFtZSwgYXJndW1lbnRzLCBjYWxsX2lkIH1cbi8vICAgeyB0eXBlOlwiZnVuY3Rpb25fY2FsbF9vdXRwdXRcIiwgY2FsbF9pZCwgb3V0cHV0IH1cbnR5cGUgUmVzcG9uc2VJdGVtID0geyBba2V5OiBzdHJpbmddOiBKc29uVmFsdWUgfCB1bmRlZmluZWQgfTtcblxuZnVuY3Rpb24gYXNPYmplY3QodjogSnNvblZhbHVlIHwgdW5kZWZpbmVkKTogUmVzcG9uc2VJdGVtIHwgbnVsbCB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpID8gKHYgYXMgUmVzcG9uc2VJdGVtKSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlSXRlbVRleHQoaXRlbTogUmVzcG9uc2VJdGVtKTogc3RyaW5nIHtcbiAgY29uc3QgY29udGVudCA9IGl0ZW0uY29udGVudDtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIGNvbnRlbnRcbiAgICAubWFwKChjKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSBhc09iamVjdChjKTtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iai50ZXh0ID09PSBcInN0cmluZ1wiID8gb2JqLnRleHQgOiBcIlwiO1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiBmbGF0dGVuQ29sZEhpc3RvcnkoY29sZEhpc3Rvcnk6IEFycmF5PEpzb25WYWx1ZT4pOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBmb3IgKGNvbnN0IHJhdyBvZiBjb2xkSGlzdG9yeSkge1xuICAgIGNvbnN0IGl0ZW0gPSBhc09iamVjdChyYXcpO1xuICAgIGlmICghaXRlbSkgY29udGludWU7XG5cbiAgICBpZiAoaXRlbS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiBpdGVtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpIHtcbiAgICAgIHBhcnRzLnB1c2goYEFzc2lzdGFudDogJHtyZXNwb25zZUl0ZW1UZXh0KGl0ZW0pfWApO1xuICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiBpdGVtLnJvbGUgPT09IFwidXNlclwiKSB7XG4gICAgICBwYXJ0cy5wdXNoKGBVc2VyOiAke3Jlc3BvbnNlSXRlbVRleHQoaXRlbSl9YCk7XG4gICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFwiZnVuY3Rpb25fY2FsbFwiKSB7XG4gICAgICBjb25zdCBuYW1lID0gdHlwZW9mIGl0ZW0ubmFtZSA9PT0gXCJzdHJpbmdcIiA/IGl0ZW0ubmFtZSA6IFwiXCI7XG4gICAgICBjb25zdCBhcmdzID1cbiAgICAgICAgdHlwZW9mIGl0ZW0uYXJndW1lbnRzID09PSBcInN0cmluZ1wiID8gaXRlbS5hcmd1bWVudHMgOiBKU09OLnN0cmluZ2lmeShpdGVtLmFyZ3VtZW50cyA/PyB7fSk7XG4gICAgICBwYXJ0cy5wdXNoKGBUb29sIGNhbGw6ICR7bmFtZX0oJHthcmdzfSlgKTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gXCJmdW5jdGlvbl9jYWxsX291dHB1dFwiKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPVxuICAgICAgICB0eXBlb2YgaXRlbS5vdXRwdXQgPT09IFwic3RyaW5nXCIgPyBpdGVtLm91dHB1dCA6IEpTT04uc3RyaW5naWZ5KGl0ZW0ub3V0cHV0ID8/IFwiXCIpO1xuICAgICAgcGFydHMucHVzaChgVG9vbCByZXN1bHQ6ICR7b3V0cHV0fWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RyZWFtSnNvbklucHV0KG9wdHM6IHtcbiAgY29sZEhpc3Rvcnk/OiBBcnJheTxKc29uVmFsdWU+O1xuICBpbnB1dDogQXJyYXk8VXNlcklucHV0Pjtcbn0pOiBBcnJheTxDbGF1ZGVTdHJlYW1Kc29uTGluZT4ge1xuICBjb25zdCBsaW5lczogQXJyYXk8Q2xhdWRlU3RyZWFtSnNvbkxpbmU+ID0gW107XG5cbiAgaWYgKG9wdHMuY29sZEhpc3RvcnkgJiYgb3B0cy5jb2xkSGlzdG9yeS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmxhdHRlbmVkID0gZmxhdHRlbkNvbGRIaXN0b3J5KG9wdHMuY29sZEhpc3RvcnkpO1xuICAgIGlmIChmbGF0dGVuZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goe1xuICAgICAgICB0eXBlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgICBjb250ZW50OiB0ZXh0QmxvY2soYFByaW9yIGNvbnZlcnNhdGlvbiBjb250ZXh0OlxcbiR7ZmxhdHRlbmVkfWApLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGluZXMucHVzaCh7XG4gICAgdHlwZTogXCJ1c2VyXCIsXG4gICAgbWVzc2FnZTogeyByb2xlOiBcInVzZXJcIiwgY29udGVudDogdGV4dEJsb2NrKHVzZXJJbnB1dFRvVGV4dChvcHRzLmlucHV0KSkgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplU3RyZWFtSnNvbklucHV0KGxpbmVzOiBBcnJheTxDbGF1ZGVTdHJlYW1Kc29uTGluZT4pOiBzdHJpbmcge1xuICByZXR1cm4gbGluZXMubWFwKChsKSA9PiBKU09OLnN0cmluZ2lmeShsKSkuam9pbihcIlxcblwiKSArIFwiXFxuXCI7XG59XG5cbi8vIOKUgOKUgCDstpzroKUg7Ja064yR7YSwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy9cbi8vIENsYXVkZSBzdGRvdXQoSlNPTkwp7J2EIHFncmlkIGRlbHRhcyArIGZpbmFsIHJlc3VsdCDroZwg67OA7ZmY7ZWc64ukLlxuXG5pbnRlcmZhY2UgQ2xhdWRlVXNhZ2Uge1xuICBpbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gIG91dHB1dF90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vucz86IG51bWJlcjtcbiAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uPzoge1xuICAgIGVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gICAgZXBoZW1lcmFsXzFoX2lucHV0X3Rva2Vucz86IG51bWJlcjtcbiAgfTtcbiAgaXRlcmF0aW9ucz86IEFycmF5PHtcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIG1vZGVsPzogc3RyaW5nO1xuICB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTdHJlYW1SZXN1bHQge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHVzYWdlOiBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd247XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgY29zdFVzZDogbnVtYmVyO1xuICAvLyBxdW90YSDshozsp4QoXCJZb3UndmUgaGl0IC4uLlwiKSDqsJDsp4AuIGRpc3BhdGNoZXIg6rCAIFF1b3RhRXJyb3Ig66GcIOuzgO2ZmC5cbiAgcXVvdGFFeGhhdXN0ZWQ6IGJvb2xlYW47XG4gIC8vIHJlc3VsdC5pc19lcnJvciAvIHRlcm1pbmFsIG1vZGVsX2Vycm9yIOuTsS4gZGlzcGF0Y2hlciDqsIAg7JeQ65+s66GcIOuzgO2ZmC5cbiAgaXNFcnJvcjogYm9vbGVhbjtcbiAgLy8g7KeE64uo7JqpOiBDQyByZXN1bHQg65287J247J2YIHN1YnR5cGUoXCJzdWNjZXNzXCIgfCBcImVycm9yX21heF90dXJuc1wiIHwgLi4uKSDqs7wgdGVybWluYWxfcmVhc29uLlxuICAvLyBpc0Vycm9yIO2MkOyglSDsgqzsnKDrpbwg7JeQ65+sIOuplOyLnOyngOyXkCDrk5zrn6zrgrTquLAg7JyE7ZW0IOuztOyhtO2VnOuLpChTT04tNDk1KS5cbiAgc3VidHlwZT86IHN0cmluZztcbiAgdGVybWluYWxSZWFzb24/OiBzdHJpbmc7XG4gIC8vIOyLpOygnCDstZzsooUg7J2R64u17J2EIOunjOuToCDrqqjrjbguIEZhYmxlIHJlZnVzYWwgZmFsbGJhY2sg65WMIHJlcXVlc3RlZCBtb2RlbCDqs7wg64uk66W064ukLlxuICBzZXJ2ZWRNb2RlbD86IHN0cmluZztcbiAgc3RvcFJlYXNvbj86IHN0cmluZztcbiAgcmVmdXNhbD86IHtcbiAgICBjYXRlZ29yeT86IHN0cmluZztcbiAgICBleHBsYW5hdGlvbj86IHN0cmluZztcbiAgfTtcbiAgbW9kZWxGYWxsYmFja3M/OiBBcnJheTxNb2RlbEZhbGxiYWNrPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTdHJlYW1Kc29uU3RhdGUge1xuICBzdHJ1Y3R1cmVkT3V0cHV0VGV4dD86IHN0cmluZztcbiAgc2VydmVkTW9kZWw/OiBzdHJpbmc7XG4gIHN0b3BSZWFzb24/OiBzdHJpbmc7XG4gIHJlZnVzYWw/OiB7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gICAgZXhwbGFuYXRpb24/OiBzdHJpbmc7XG4gIH07XG4gIG1vZGVsRmFsbGJhY2tzPzogQXJyYXk8TW9kZWxGYWxsYmFjaz47XG4gIHJlZnVzYWxXaXRob3V0RmFsbGJhY2s/OiBib29sZWFuO1xufVxuXG4vLyBBbnRocm9waWMgdXNhZ2UgNCDsubTthYzqs6Drpqwg4oaSIFRva2VuVXNhZ2VCcmVha2Rvd24uXG4vLyBBbnRocm9waWMgbmF0aXZlIHVzYWdlIOuKlCBpbnB1dC9jYWNoZV9jcmVhdGlvbi9jYWNoZV9yZWFkIOulvCDshJzroZwg67Cw7YOA7KCB7J24IOy5tO2FjOqzoOumrOuhnCDspIDri6QuXG4vLyDrsJjrqbQgcWdyaWQg64K067aAIO2RnOykgChUb2tlblVzYWdlQnJlYWtkb3duKeqzvCBjb3N0IOqzhOyCsOydgCBpbnB1dFRva2VucyDrpbwgXCLsoITssrQg7J6F66ClXG4vLyAoPSBub24tY2FjaGUgaW5wdXQgKyBjYWNoZSBjcmVhdGlvbiArIGNhY2hlIHJlYWQpXCIg7Jy866GcIOy3qOq4ie2VmOqzoCBjYWNoZWRJbnB1dFRva2Vucy9jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnNcbi8vIOulvCDqt7jspJEg6rCBIOuqq+ycvOuhnCDri6Tsi5wg7ZGc7Iuc7ZWc64ukKE9wZW5BSS9Db2RleCB1c2FnZSDsmYAg6rCZ7J2AIOydmOuvuCkuIOuUsOudvOyEnCDsl6zquLDshJwg7ZWp7LOQIO2RnOykgO2ZlO2VnOuLpC5cbmZ1bmN0aW9uIHRvVXNhZ2VCcmVha2Rvd24odTogQ2xhdWRlVXNhZ2UpOiBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd24ge1xuICBjb25zdCBpbnB1dCA9IHUuaW5wdXRfdG9rZW5zID8/IDA7XG4gIGNvbnN0IGNhY2hlQ3JlYXRlID0gdS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMgPz8gMDtcbiAgY29uc3QgY2FjaGVSZWFkID0gdS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyA/PyAwO1xuICBjb25zdCBvdXRwdXQgPSB1Lm91dHB1dF90b2tlbnMgPz8gMDtcbiAgY29uc3QgdG90YWxJbnB1dCA9IGlucHV0ICsgY2FjaGVDcmVhdGUgKyBjYWNoZVJlYWQ7XG4gIGNvbnN0IGNhY2hlQ3JlYXRlNW0gPSB1LmNhY2hlX2NyZWF0aW9uPy5lcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zO1xuICBjb25zdCBjYWNoZUNyZWF0ZTFoID0gdS5jYWNoZV9jcmVhdGlvbj8uZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucztcbiAgcmV0dXJuIHtcbiAgICB0b3RhbFRva2VuczogdG90YWxJbnB1dCArIG91dHB1dCxcbiAgICBpbnB1dFRva2VuczogdG90YWxJbnB1dCxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogY2FjaGVSZWFkLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogY2FjaGVDcmVhdGUsXG4gICAgLi4uKHR5cGVvZiBjYWNoZUNyZWF0ZTVtID09PSBcIm51bWJlclwiID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogY2FjaGVDcmVhdGU1bSB9IDoge30pLFxuICAgIC4uLih0eXBlb2YgY2FjaGVDcmVhdGUxaCA9PT0gXCJudW1iZXJcIiA/IHsgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IGNhY2hlQ3JlYXRlMWggfSA6IHt9KSxcbiAgICBvdXRwdXRUb2tlbnM6IG91dHB1dCxcbiAgICByZWFzb25pbmdPdXRwdXRUb2tlbnM6IDAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0cnVjdHVyZWRPdXRwdXRUb29sVXNlVGV4dChqOiBSZXNwb25zZUl0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBtZXNzYWdlID0gYXNPYmplY3Qoai5tZXNzYWdlKTtcbiAgY29uc3QgY29udGVudCA9IG1lc3NhZ2U/LmNvbnRlbnQ7XG4gIGlmICghQXJyYXkuaXNBcnJheShjb250ZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IHJhdyBvZiBjb250ZW50KSB7XG4gICAgY29uc3QgYmxvY2sgPSBhc09iamVjdChyYXcpO1xuICAgIGlmICghYmxvY2spIGNvbnRpbnVlO1xuICAgIGlmIChcbiAgICAgIGJsb2NrLnR5cGUgPT09IFwidG9vbF91c2VcIiAmJlxuICAgICAgYmxvY2submFtZSA9PT0gXCJTdHJ1Y3R1cmVkT3V0cHV0XCIgJiZcbiAgICAgIGJsb2NrLmlucHV0ICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShibG9jay5pbnB1dCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbEV2ZW50TW9kZWwobW9kZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHdpdGhvdXRQcm92aWRlciA9IG1vZGVsLnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvXCIpID8gbW9kZWwuc2xpY2UoXCJhbnRocm9waWMvXCIubGVuZ3RoKSA6IG1vZGVsO1xuICByZXR1cm4gd2l0aG91dFByb3ZpZGVyLnJlcGxhY2UoL1xcWzFtXFxdJC8sIFwiXCIpO1xufVxuXG5mdW5jdGlvbiBvcHRpb25hbFN0cmluZyh2YWx1ZTogSnNvblZhbHVlIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHJlY29yZEZhbGxiYWNrKHN0YXRlOiBDbGF1ZGVTdHJlYW1Kc29uU3RhdGUgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBNb2RlbEZhbGxiYWNrKTogdm9pZCB7XG4gIGlmICghc3RhdGUpIHJldHVybjtcbiAgY29uc3Qgbm9ybWFsaXplZDogTW9kZWxGYWxsYmFjayA9IHtcbiAgICAuLi5mYWxsYmFjayxcbiAgICBmcm9tTW9kZWw6IGNhbm9uaWNhbEV2ZW50TW9kZWwoZmFsbGJhY2suZnJvbU1vZGVsKSxcbiAgICB0b01vZGVsOiBjYW5vbmljYWxFdmVudE1vZGVsKGZhbGxiYWNrLnRvTW9kZWwpLFxuICB9O1xuICBjb25zdCBleGlzdGluZyA9IHN0YXRlLm1vZGVsRmFsbGJhY2tzPy5maW5kKFxuICAgIChpdGVtKSA9PlxuICAgICAgaXRlbS50cmlnZ2VyID09PSBub3JtYWxpemVkLnRyaWdnZXIgJiZcbiAgICAgIGl0ZW0uZnJvbU1vZGVsID09PSBub3JtYWxpemVkLmZyb21Nb2RlbCAmJlxuICAgICAgaXRlbS50b01vZGVsID09PSBub3JtYWxpemVkLnRvTW9kZWwsXG4gICk7XG4gIGlmIChleGlzdGluZykge1xuICAgIGV4aXN0aW5nLmNhdGVnb3J5ID8/PSBub3JtYWxpemVkLmNhdGVnb3J5O1xuICAgIGV4aXN0aW5nLmV4cGxhbmF0aW9uID8/PSBub3JtYWxpemVkLmV4cGxhbmF0aW9uO1xuICB9IGVsc2Uge1xuICAgIChzdGF0ZS5tb2RlbEZhbGxiYWNrcyA/Pz0gW10pLnB1c2gobm9ybWFsaXplZCk7XG4gIH1cbiAgc3RhdGUuc2VydmVkTW9kZWwgPSBub3JtYWxpemVkLnRvTW9kZWw7XG4gIHN0YXRlLnJlZnVzYWxXaXRob3V0RmFsbGJhY2sgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUm91dGluZ0Zyb21Vc2FnZShcbiAgdXNhZ2U6IFJlc3BvbnNlSXRlbSB8IG51bGwsXG4gIHN0YXRlOiBDbGF1ZGVTdHJlYW1Kc29uU3RhdGUgfCB1bmRlZmluZWQsXG4pOiB2b2lkIHtcbiAgaWYgKCFzdGF0ZSB8fCAhdXNhZ2UgfHwgIUFycmF5LmlzQXJyYXkodXNhZ2UuaXRlcmF0aW9ucykpIHJldHVybjtcblxuICBsZXQgcHJldmlvdXNNb2RlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IHJhdyBvZiB1c2FnZS5pdGVyYXRpb25zKSB7XG4gICAgY29uc3QgaXRlcmF0aW9uID0gYXNPYmplY3QocmF3KTtcbiAgICBpZiAoIWl0ZXJhdGlvbikgY29udGludWU7XG4gICAgY29uc3QgbW9kZWwgPSBvcHRpb25hbFN0cmluZyhpdGVyYXRpb24ubW9kZWwpO1xuICAgIGNvbnN0IHR5cGUgPSBvcHRpb25hbFN0cmluZyhpdGVyYXRpb24udHlwZSk7XG4gICAgaWYgKCFtb2RlbCkgY29udGludWU7XG4gICAgY29uc3QgY2Fub25pY2FsTW9kZWwgPSBjYW5vbmljYWxFdmVudE1vZGVsKG1vZGVsKTtcbiAgICBpZiAodHlwZSA9PT0gXCJmYWxsYmFja19tZXNzYWdlXCIgJiYgcHJldmlvdXNNb2RlbCkge1xuICAgICAgcmVjb3JkRmFsbGJhY2soc3RhdGUsIHtcbiAgICAgICAgdHJpZ2dlcjogXCJyZWZ1c2FsXCIsXG4gICAgICAgIGZyb21Nb2RlbDogcHJldmlvdXNNb2RlbCxcbiAgICAgICAgdG9Nb2RlbDogY2Fub25pY2FsTW9kZWwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcHJldmlvdXNNb2RlbCA9IGNhbm9uaWNhbE1vZGVsO1xuICAgIHN0YXRlLnNlcnZlZE1vZGVsID0gY2Fub25pY2FsTW9kZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlUm91dGluZ0Zyb21NZXNzYWdlKFxuICBtZXNzYWdlOiBSZXNwb25zZUl0ZW0gfCBudWxsLFxuICBzdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlIHwgdW5kZWZpbmVkLFxuKTogdm9pZCB7XG4gIGlmICghc3RhdGUgfHwgIW1lc3NhZ2UpIHJldHVybjtcbiAgY29uc3QgbW9kZWwgPSBvcHRpb25hbFN0cmluZyhtZXNzYWdlLm1vZGVsKTtcbiAgY29uc3QgY2Fub25pY2FsTW9kZWwgPSBtb2RlbCA/IGNhbm9uaWNhbEV2ZW50TW9kZWwobW9kZWwpIDogdW5kZWZpbmVkO1xuICBpZiAoY2Fub25pY2FsTW9kZWwpIHN0YXRlLnNlcnZlZE1vZGVsID0gY2Fub25pY2FsTW9kZWw7XG4gIGNvbnN0IHN0b3BSZWFzb24gPSBvcHRpb25hbFN0cmluZyhtZXNzYWdlLnN0b3BfcmVhc29uKTtcbiAgaWYgKHN0b3BSZWFzb24pIHtcbiAgICBzdGF0ZS5zdG9wUmVhc29uID0gc3RvcFJlYXNvbjtcbiAgICBpZiAoc3RvcFJlYXNvbiA9PT0gXCJyZWZ1c2FsXCIpIHN0YXRlLnJlZnVzYWxXaXRob3V0RmFsbGJhY2sgPSB0cnVlO1xuICAgIGVsc2UgaWYgKHN0YXRlLm1vZGVsRmFsbGJhY2tzPy5zb21lKChmYWxsYmFjaykgPT4gZmFsbGJhY2sudG9Nb2RlbCA9PT0gY2Fub25pY2FsTW9kZWwpKSB7XG4gICAgICBzdGF0ZS5yZWZ1c2FsV2l0aG91dEZhbGxiYWNrID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RvcERldGFpbHMgPSBhc09iamVjdChtZXNzYWdlLnN0b3BfZGV0YWlscyk7XG4gIGlmIChzdG9wRGV0YWlscz8udHlwZSA9PT0gXCJyZWZ1c2FsXCIgfHwgc3RvcFJlYXNvbiA9PT0gXCJyZWZ1c2FsXCIpIHtcbiAgICBzdGF0ZS5yZWZ1c2FsID0ge1xuICAgICAgY2F0ZWdvcnk6IG9wdGlvbmFsU3RyaW5nKHN0b3BEZXRhaWxzPy5jYXRlZ29yeSksXG4gICAgICBleHBsYW5hdGlvbjogb3B0aW9uYWxTdHJpbmcoc3RvcERldGFpbHM/LmV4cGxhbmF0aW9uKSxcbiAgICB9O1xuICB9XG4gIHVwZGF0ZVJvdXRpbmdGcm9tVXNhZ2UoYXNPYmplY3QobWVzc2FnZS51c2FnZSksIHN0YXRlKTtcbn1cblxuLy8gUHJvY2Vzc2VzIG9uZSBDbGF1ZGUgc3Rkb3V0IEpTT05MIGxpbmUuIFJldHVybnMgZmluYWwgcmVzdWx0IG9uIHJlc3VsdCBldmVudC5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1Kc29uTGluZShcbiAgbGluZTogc3RyaW5nLFxuICBvbkRlbHRhOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkLFxuICBvcHRzPzogeyBzdHJ1Y3R1cmVkT3V0cHV0PzogYm9vbGVhbjsgc3RhdGU/OiBDbGF1ZGVTdHJlYW1Kc29uU3RhdGUgfSxcbik6IENsYXVkZVN0cmVhbVJlc3VsdCB8IG51bGwge1xuICBjb25zdCBzdHJ1Y3R1cmVkT3V0cHV0ID0gb3B0cz8uc3RydWN0dXJlZE91dHB1dCA/PyBmYWxzZTtcbiAgY29uc3Qgc3RhdGUgPSBvcHRzPy5zdGF0ZTtcbiAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbSgpO1xuICBpZiAoIXRyaW1tZWQpIHJldHVybiBudWxsO1xuXG4gIGxldCBqOiB7IFtrZXk6IHN0cmluZ106IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCB9O1xuICB0cnkge1xuICAgIGogPSBKU09OLnBhcnNlKHRyaW1tZWQpIGFzIHsgW2tleTogc3RyaW5nXTogSnNvblZhbHVlIHwgdW5kZWZpbmVkIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGoudHlwZSA9PT0gXCJzdHJlYW1fZXZlbnRcIikge1xuICAgIGNvbnN0IGV2ZW50ID0gYXNPYmplY3Qoai5ldmVudCk7XG4gICAgaWYgKGV2ZW50Py50eXBlID09PSBcIm1lc3NhZ2Vfc3RhcnRcIikge1xuICAgICAgdXBkYXRlUm91dGluZ0Zyb21NZXNzYWdlKGFzT2JqZWN0KGV2ZW50Lm1lc3NhZ2UpLCBzdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChldmVudD8udHlwZSA9PT0gXCJtZXNzYWdlX2RlbHRhXCIpIHtcbiAgICAgIGNvbnN0IGRlbHRhID0gYXNPYmplY3QoZXZlbnQuZGVsdGEpO1xuICAgICAgY29uc3Qgc3RvcFJlYXNvbiA9IG9wdGlvbmFsU3RyaW5nKGRlbHRhPy5zdG9wX3JlYXNvbik7XG4gICAgICBpZiAoc3RhdGUgJiYgc3RvcFJlYXNvbikge1xuICAgICAgICBzdGF0ZS5zdG9wUmVhc29uID0gc3RvcFJlYXNvbjtcbiAgICAgICAgaWYgKHN0b3BSZWFzb24gPT09IFwicmVmdXNhbFwiKSBzdGF0ZS5yZWZ1c2FsV2l0aG91dEZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09IFwiY29udGVudF9ibG9ja19kZWx0YVwiKSB7XG4gICAgICBjb25zdCBkZWx0YSA9IGFzT2JqZWN0KGV2ZW50LmRlbHRhKTtcbiAgICAgIGlmIChkZWx0YSkge1xuICAgICAgICBpZiAoc3RydWN0dXJlZE91dHB1dCkge1xuICAgICAgICAgIGlmIChkZWx0YS50eXBlID09PSBcImlucHV0X2pzb25fZGVsdGFcIiAmJiB0eXBlb2YgZGVsdGEucGFydGlhbF9qc29uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBvbkRlbHRhKGRlbHRhLnBhcnRpYWxfanNvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChkZWx0YS50eXBlID09PSBcInRleHRfZGVsdGFcIiAmJiB0eXBlb2YgZGVsdGEudGV4dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgb25EZWx0YShkZWx0YS50ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoai50eXBlID09PSBcInN5c3RlbVwiKSB7XG4gICAgY29uc3Qgc3VidHlwZSA9IG9wdGlvbmFsU3RyaW5nKGouc3VidHlwZSk7XG4gICAgaWYgKHN1YnR5cGUgPT09IFwibW9kZWxfcmVmdXNhbF9mYWxsYmFja1wiKSB7XG4gICAgICBjb25zdCBmcm9tTW9kZWwgPSBvcHRpb25hbFN0cmluZyhqLm9yaWdpbmFsTW9kZWwpID8/IG9wdGlvbmFsU3RyaW5nKGoub3JpZ2luYWxfbW9kZWwpO1xuICAgICAgY29uc3QgdG9Nb2RlbCA9IG9wdGlvbmFsU3RyaW5nKGouZmFsbGJhY2tNb2RlbCkgPz8gb3B0aW9uYWxTdHJpbmcoai5mYWxsYmFja19tb2RlbCk7XG4gICAgICBpZiAoZnJvbU1vZGVsICYmIHRvTW9kZWwpIHtcbiAgICAgICAgcmVjb3JkRmFsbGJhY2soc3RhdGUsIHtcbiAgICAgICAgICB0cmlnZ2VyOiBcInJlZnVzYWxcIixcbiAgICAgICAgICBmcm9tTW9kZWwsXG4gICAgICAgICAgdG9Nb2RlbCxcbiAgICAgICAgICBjYXRlZ29yeTpcbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGouYXBpUmVmdXNhbENhdGVnb3J5KSA/P1xuICAgICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5hcGlfcmVmdXNhbF9jYXRlZ29yeSkgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbENhdGVnb3J5KSA/P1xuICAgICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5yZWZ1c2FsX2NhdGVnb3J5KSxcbiAgICAgICAgICBleHBsYW5hdGlvbjpcbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGouYXBpUmVmdXNhbEV4cGxhbmF0aW9uKSA/P1xuICAgICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5hcGlfcmVmdXNhbF9leHBsYW5hdGlvbikgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbEV4cGxhbmF0aW9uKSA/P1xuICAgICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5yZWZ1c2FsX2V4cGxhbmF0aW9uKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdWJ0eXBlID09PSBcIm1vZGVsX3JlZnVzYWxfbm9fZmFsbGJhY2tcIiAmJiBzdGF0ZSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxNb2RlbCA9IG9wdGlvbmFsU3RyaW5nKGoub3JpZ2luYWxNb2RlbCkgPz8gb3B0aW9uYWxTdHJpbmcoai5vcmlnaW5hbF9tb2RlbCk7XG4gICAgICBpZiAob3JpZ2luYWxNb2RlbCkgc3RhdGUuc2VydmVkTW9kZWwgPSBjYW5vbmljYWxFdmVudE1vZGVsKG9yaWdpbmFsTW9kZWwpO1xuICAgICAgc3RhdGUuc3RvcFJlYXNvbiA9IFwicmVmdXNhbFwiO1xuICAgICAgc3RhdGUucmVmdXNhbFdpdGhvdXRGYWxsYmFjayA9IHRydWU7XG4gICAgICBzdGF0ZS5yZWZ1c2FsID0ge1xuICAgICAgICBjYXRlZ29yeTpcbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaVJlZnVzYWxDYXRlZ29yeSkgPz9cbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaV9yZWZ1c2FsX2NhdGVnb3J5KSA/P1xuICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbENhdGVnb3J5KSA/P1xuICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbF9jYXRlZ29yeSksXG4gICAgICAgIGV4cGxhbmF0aW9uOlxuICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGouYXBpUmVmdXNhbEV4cGxhbmF0aW9uKSA/P1xuICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGouYXBpX3JlZnVzYWxfZXhwbGFuYXRpb24pID8/XG4gICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5yZWZ1c2FsRXhwbGFuYXRpb24pID8/XG4gICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5yZWZ1c2FsX2V4cGxhbmF0aW9uKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGoudHlwZSA9PT0gXCJhc3Npc3RhbnRcIikge1xuICAgIHVwZGF0ZVJvdXRpbmdGcm9tTWVzc2FnZShhc09iamVjdChqLm1lc3NhZ2UpLCBzdGF0ZSk7XG4gICAgaWYgKHN0cnVjdHVyZWRPdXRwdXQgJiYgc3RhdGUgJiYgc3RhdGUuc3RydWN0dXJlZE91dHB1dFRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGV4dCA9IHN0cnVjdHVyZWRPdXRwdXRUb29sVXNlVGV4dChqKTtcbiAgICAgIGlmICh0ZXh0ICE9PSB1bmRlZmluZWQpIHN0YXRlLnN0cnVjdHVyZWRPdXRwdXRUZXh0ID0gdGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoai50eXBlID09PSBcInJlc3VsdFwiKSB7XG4gICAgY29uc3Qgc3VidHlwZSA9IHR5cGVvZiBqLnN1YnR5cGUgPT09IFwic3RyaW5nXCIgPyBqLnN1YnR5cGUgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGVybWluYWxSZWFzb24gPSB0eXBlb2Ygai50ZXJtaW5hbF9yZWFzb24gPT09IFwic3RyaW5nXCIgPyBqLnRlcm1pbmFsX3JlYXNvbiA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXN1bHRTdWNjZWVkZWQgPVxuICAgICAgai5pc19lcnJvciAhPT0gdHJ1ZSAmJlxuICAgICAgdGVybWluYWxSZWFzb24gIT09IFwibW9kZWxfZXJyb3JcIiAmJlxuICAgICAgKHN1YnR5cGUgPT09IHVuZGVmaW5lZCB8fCBzdWJ0eXBlID09PSBcInN1Y2Nlc3NcIik7XG4gICAgbGV0IHRleHQ6IHN0cmluZztcbiAgICBjb25zdCBwcmVzZXJ2ZWRTdHJ1Y3R1cmVkT3V0cHV0ID0gc3RydWN0dXJlZE91dHB1dCA/IHN0YXRlPy5zdHJ1Y3R1cmVkT3V0cHV0VGV4dCA6IHVuZGVmaW5lZDtcbiAgICAvLyBDbGF1ZGUgQ29kZeuKlCBTdHJ1Y3R1cmVkT3V0cHV0IOyKpO2CpOuniCDqsoDspp0g7Iuk7YyoIO2bhCDrgrTrtoAg7J6s7Iuc64+E66W8IO2VoCDsiJgg7J6I64ukLiBhc3Npc3RhbnRcbiAgICAvLyDsnbTrsqTtirjsnZgg7LKrIHRvb2wgaW5wdXTsnYAg6rGw7KCI65CcIOyLnOuPhOydvCDsiJgg7J6I7Jy866+A66GcLCDshLHqs7UgcmVzdWx06rCAIOygnOqzte2VnCDstZzsooUg6rKA7Kad6rCS7J2EXG4gICAgLy8g7Jqw7ISg7ZWc64ukLiDssqsg7J6F66ClIOuztOyhtOqwkuydgCBtYXhfdHVybnMvcmV0cnkg7LSI6rO87LKY65+8IOyEseqztSByZXN1bHTqsIAg7JeG64qUIOynhOuLqCDqsr3roZzsmqnsnbTri6QuXG4gICAgaWYgKHN0cnVjdHVyZWRPdXRwdXQgJiYgcmVzdWx0U3VjY2VlZGVkICYmIGouc3RydWN0dXJlZF9vdXRwdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KGouc3RydWN0dXJlZF9vdXRwdXQpO1xuICAgIH0gZWxzZSBpZiAocHJlc2VydmVkU3RydWN0dXJlZE91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0ZXh0ID0gcHJlc2VydmVkU3RydWN0dXJlZE91dHB1dDtcbiAgICB9IGVsc2UgaWYgKGouc3RydWN0dXJlZF9vdXRwdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KGouc3RydWN0dXJlZF9vdXRwdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0ID0gc3RyaXBGZW5jZXModHlwZW9mIGoucmVzdWx0ID09PSBcInN0cmluZ1wiID8gai5yZXN1bHQgOiBcIlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByYXdVc2FnZSA9IGFzT2JqZWN0KGoudXNhZ2UpID8/IHt9O1xuICAgIHVwZGF0ZVJvdXRpbmdGcm9tVXNhZ2UocmF3VXNhZ2UsIHN0YXRlKTtcbiAgICBjb25zdCByZXN1bHRNb2RlbCA9IG9wdGlvbmFsU3RyaW5nKGoubW9kZWwpO1xuICAgIGlmIChzdGF0ZSAmJiByZXN1bHRNb2RlbCAmJiAhc3RhdGUuc2VydmVkTW9kZWwpIHtcbiAgICAgIHN0YXRlLnNlcnZlZE1vZGVsID0gY2Fub25pY2FsRXZlbnRNb2RlbChyZXN1bHRNb2RlbCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdFN0b3BSZWFzb24gPSBvcHRpb25hbFN0cmluZyhqLnN0b3BfcmVhc29uKTtcbiAgICBpZiAoc3RhdGUgJiYgcmVzdWx0U3RvcFJlYXNvbikge1xuICAgICAgc3RhdGUuc3RvcFJlYXNvbiA9IHJlc3VsdFN0b3BSZWFzb247XG4gICAgICBpZiAocmVzdWx0U3RvcFJlYXNvbiA9PT0gXCJyZWZ1c2FsXCIpIHN0YXRlLnJlZnVzYWxXaXRob3V0RmFsbGJhY2sgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB1c2FnZSA9IHRvVXNhZ2VCcmVha2Rvd24ocmF3VXNhZ2UgYXMgQ2xhdWRlVXNhZ2UpO1xuICAgIGNvbnN0IHF1b3RhRXhoYXVzdGVkID0gdGV4dC5zdGFydHNXaXRoKFwiWW91J3ZlIGhpdFwiKTtcblxuICAgIC8vIFNPTi00OTU6IOu5hOygleyDgSDsooXro4woZXJyb3JfbWF4X3N0cnVjdHVyZWRfb3V0cHV0X3JldHJpZXMg65OxKeuKlCDsoJXsp4HtlZjqsowg7JeQ65+s66GcIOyymOumrO2VnOuLpC5cbiAgICAvLyBDQyBzdHJ1Y3R1cmVkIG91dHB1dCDsnYAgY29uc3RyYWluZWQgZGVjb2Rpbmcg7J20IOyVhOuLiOudvCBcInRvb2wgaW5wdXQg7IOd7ISxIO2bhCDsgqztm4QgQUpWIOqygOymnVwi7J206528XG4gICAgLy8g66qo64247J20IOqwgOuBlCBwbGFjZWhvbGRlcigkUEFSQU1FVEVSX05BTUUpwrfqsbDrtoAoXCJqdXN0IGtpZGRpbmdcIinCt+2VhOuTnCDriITrnb0oYWR2YW5jZSkg6rCZ7J2AIOuwnOyekS9cbiAgICAvLyDrtojsmYTsoIQg7Lac66Cl7J2EIOuCuOuLpC4g7J2066W8IFwi6rGw7J2YIOunnuyVmOycvOuLiCDsgrTrpqzsnpBcIuqzoCDtnZjrpqzrqbQg7YG065287J207Ja47Yq4IOqygOymneyXkOyEnCDquajsp4DqsbDrgpgo7ZWE65OcIOuIhOudvSlcbiAgICAvLyDsk7DroIjquLDqsIAg7IOI7Ja0IOuCmOqwhOuLpCjsi6TsuKEgMTE2NzQvMTE2NzUpLiDslYzroKTsp4QgYmVzdCBwcmFjdGljZShyZWZ1c2FsL2RlZ2VuZXJhdGUgb3V0cHV0IOydgCDsgrTrpqzsp4BcbiAgICAvLyDrp5Dqs6AgZ3JhY2VmdWwgZXJyb3Ip64yA66GcLCBzdWJ0eXBlICE9IHN1Y2Nlc3Mg64qUIOq3uOuMgOuhnCDsl5Drn6zroZwg65GU64ukLiDtgbTrnbzsnbTslrjtirjqsIAg6re4IO2EtOydhCDsi6TtjKjroZxcbiAgICAvLyDri6Tro6jqsowg7ZWc64ukKOyKpO2KuOumvOydtOudvCDsnpDrj5kg7J6s7Iuc64+EIOyXhuydjCDigJQg7Iuc6rCEIDLrsLAg67Cp7KeAKS5cbiAgICBjb25zdCBpc0Vycm9yID1cbiAgICAgIGouaXNfZXJyb3IgPT09IHRydWUgfHxcbiAgICAgIGoudGVybWluYWxfcmVhc29uID09PSBcIm1vZGVsX2Vycm9yXCIgfHxcbiAgICAgIChzdWJ0eXBlICE9PSB1bmRlZmluZWQgJiYgc3VidHlwZSAhPT0gXCJzdWNjZXNzXCIpIHx8XG4gICAgICBzdGF0ZT8ucmVmdXNhbFdpdGhvdXRGYWxsYmFjayA9PT0gdHJ1ZTtcblxuICAgIHJldHVybiB7XG4gICAgICB0ZXh0LFxuICAgICAgdXNhZ2UsXG4gICAgICBkdXJhdGlvbk1zOiB0eXBlb2Ygai5kdXJhdGlvbl9tcyA9PT0gXCJudW1iZXJcIiA/IGouZHVyYXRpb25fbXMgOiAwLFxuICAgICAgY29zdFVzZDogdHlwZW9mIGoudG90YWxfY29zdF91c2QgPT09IFwibnVtYmVyXCIgPyBqLnRvdGFsX2Nvc3RfdXNkIDogMCxcbiAgICAgIHF1b3RhRXhoYXVzdGVkLFxuICAgICAgaXNFcnJvcixcbiAgICAgIHN1YnR5cGUsXG4gICAgICB0ZXJtaW5hbFJlYXNvbixcbiAgICAgIHNlcnZlZE1vZGVsOiBzdGF0ZT8uc2VydmVkTW9kZWwsXG4gICAgICBzdG9wUmVhc29uOiBzdGF0ZT8uc3RvcFJlYXNvbixcbiAgICAgIHJlZnVzYWw6IHN0YXRlPy5yZWZ1c2FsLFxuICAgICAgbW9kZWxGYWxsYmFja3M6IHN0YXRlPy5tb2RlbEZhbGxiYWNrcyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBNEJBLFNBQVMsZ0JBQWdCLE9BQWlDO0NBQ3hELE9BQU8sTUFDSixRQUFRLE1BQWlELEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FDM0UsS0FBSyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQ2xCLEtBQUssSUFBSTtBQUNkO0FBRUEsU0FBUyxVQUFVLE1BQXFEO0NBQ3RFLE9BQU8sQ0FBQztFQUFFLE1BQU07RUFBUTtDQUFLLENBQUM7QUFDaEM7QUFVQSxTQUFTLFNBQVMsR0FBK0M7Q0FDL0QsT0FBTyxPQUFPLE1BQU0sWUFBWSxNQUFNLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFLLElBQXFCO0FBQzFGO0FBRUEsU0FBUyxpQkFBaUIsTUFBNEI7Q0FDcEQsTUFBTSxVQUFVLEtBQUs7Q0FDckIsSUFBSSxDQUFDLE1BQU0sUUFBUSxPQUFPLEdBQUcsT0FBTztDQUNwQyxPQUFPLFFBQ0osS0FBSyxNQUFNO0VBQ1YsTUFBTSxNQUFNLFNBQVMsQ0FBQztFQUN0QixPQUFPLE9BQU8sT0FBTyxJQUFJLFNBQVMsV0FBVyxJQUFJLE9BQU87Q0FDMUQsQ0FBQyxDQUFDLENBQ0QsT0FBTyxPQUFPLENBQUMsQ0FDZixLQUFLLElBQUk7QUFDZDtBQUVBLFNBQVMsbUJBQW1CLGFBQXVDO0NBQ2pFLE1BQU0sUUFBdUIsQ0FBQztDQUM5QixLQUFLLE1BQU0sT0FB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
@@ -120,4 +120,4 @@ function calculateCostUsd(model, usage, atMs = Date.now()) {
120
120
  //#endregion
121
121
  export { calculateCostUsd, getModelCosts };
122
122
 
123
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29zdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog66qo642467OEIO2GoO2BsCDqsIDqsqkg7YWM7J2067iUICsgY29zdCDqs4TsgrAuXG4gKlxuICogY2xhdWRlIGNvZGUg7JmAIOuPmeydvCDtjKjthLQ6IO2BtOudvOydtOyWuO2KuOyXkOyEnCDqsIDqsqkg7YWM7J2067iU66GcIOyngeygkSDqs4TsgrAuXG4gKiDqsIDqsqkg64uo7JyEOiBVU0QgcGVyIDFNIHRva2Vucy5cbiAqXG4gKiBPcGVuQUkg66qo6424IOuqqeuhnTogY29kZXggYXBwLXNlcnZlciBtb2RlbC9saXN0IFJQQyDroZwg7Iuk7LihICgyMDI2LTA1LTE4KVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvcHJpY2luZ1xuICogQHNlZSBodHRwczovL3BsYXRmb3JtLmNsYXVkZS5jb20vZG9jcy9lbi9hYm91dC1jbGF1ZGUvcHJpY2luZ1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDb3N0cyB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xuICAvKiogVFRMIGJyZWFrZG93biDsnbQg7JeG64qUIHVzYWdlIOyXkCDsoIHsmqntlaAgY2FjaGUgd3JpdGUgZmFsbGJhY2sg64uo6rCALiAqL1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtPzogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaD86IG51bWJlcjtcbiAgLyoqXG4gICAqIGxvbmctY29udGV4dCDtlaDspp0uIOyghOyytCDsnoXroKUg7Yag7YGwKGlucHV0X3Rva2VucywgY2FjaGVfcmVhZCDtj6ztlagp7J20IHRocmVzaG9sZCDstIjqs7wg7IucXG4gICAqIOy0iOqzvOu2hOunjOydtCDslYTri4jrnbwg7JqU7LKtIOyghOyytChmdWxsIHNlc3Npb24p7JeQIOuwsOycqCDsoIHsmqkuXG4gICAqL1xuICBsb25nQ29udGV4dD86IHtcbiAgICB0aHJlc2hvbGQ6IG51bWJlcjtcbiAgICBpbnB1dE11bHRpcGxpZXI6IG51bWJlcjtcbiAgICBjYWNoZWRJbnB1dE11bHRpcGxpZXI6IG51bWJlcjtcbiAgICBvdXRwdXRNdWx0aXBsaWVyOiBudW1iZXI7XG4gIH07XG59XG5cbi8vIOKUgOKUgCBPcGVuQUkg4oCUIGNvZGV4IGFwcC1zZXJ2ZXIg7JeQ7IScIOyCrOyaqSDqsIDriqXtlZwg66qo6424IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy9cbi8vIOqwgOqyqSDstpzsspg6IGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuYWkuY29tL2FwaS9kb2NzL21vZGVscyAoMjAyNi0wNy0xOCDtmZXsnbgpXG4vLyDsi6Drqqjrjbgg7Lac7Iuc66eI64ukIOuLqOqwgOqwgCDrsJTrgIzrr4DroZwoNS4y4oaSNS404oaSNS41KSDrqqjrjbgg7LaU6rCAIOyLnCDrsJjrk5zsi5wg6rO17IudIO2OmOydtOyngCDsnqztmZXsnbjtlbTslbztlahcblxuLy8gR1BULTUuNOyXkOyEnCDsspjsnYwg64+E7J6F65CcIGxvbmctY29udGV4dCDtlaDspp0gKDUuMi81LjMtY29kZXjripQg7ZW064u5IOyXhuydjCwgNS40LW1pbmkvbmFub+uKlCDqs7Xsi50g7ZGc7JeQ7IScIGxvbmctY29udGV4dCDri6jqsIAg7JeG7J2MKVxuLy8gMjcySyDstIjqs7wg7IucIGlucHV0IDJ4IC8gY2FjaGVkIDJ4IC8gb3V0cHV0IDEuNXgg4oCUIOy0iOqzvOu2hOunjOydtCDslYTri4wg7IS47IWYIOyghOyytOyXkCDsoIHsmqnrkKhcbi8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLm9wZW5haS5jb20vYXBpL2RvY3MvbW9kZWxzL2dwdC01LjUgKFwicHJvbXB0cyB3aXRoID4yNzJLIGlucHV0IHRva2Vuc1wiKVxuY29uc3QgTE9OR19DT05URVhUXzI3Mks6IE5vbk51bGxhYmxlPE1vZGVsQ29zdHNbXCJsb25nQ29udGV4dFwiXT4gPSB7XG4gIHRocmVzaG9sZDogMjcyXzAwMCxcbiAgaW5wdXRNdWx0aXBsaWVyOiAyLFxuICBjYWNoZWRJbnB1dE11bHRpcGxpZXI6IDIsXG4gIG91dHB1dE11bHRpcGxpZXI6IDEuNSxcbn07XG5cbmNvbnN0IE9QRU5BSV9DT1NUUzogUmVjb3JkPHN0cmluZywgTW9kZWxDb3N0cz4gPSB7XG4gIC8vIEdQVC01LjYgU29sLCBUZXJyYSwgTHVuYS4gT3BlbkFJIG5hdGl2ZSBBUEkg64qUIDEuMDVNIGNvbnRleHQgLyAxMjhLIG1heCBvdXRwdXQg7J207KeA66eMLFxuICAvLyBxZ3JpZCDsnZggY29kZXggYXBwLXNlcnZlciDqsr3roZzripQgY29udGV4dF93aW5kb3c9MzcySyAobWF4X2NvbnRleHRfd2luZG93IOuPhCAzNzJLLFxuICAvLyBlZmZlY3RpdmUgOTUlIOKJiCAzNTNLKSDroZwg7KCc7ZWc65Cc64ukIOKAlCBjb2RleCAwLjE0NC4xIG1vZGVsc19jYWNoZSDsi6TsuKEgKDIwMjYtMDctMTApLlxuICAvLyBjYWNoZSB3cml0ZSDripQgdW5jYWNoZWQgaW5wdXQg7J2YIDEuMjV4IOuhnCDqs7zquIjrkJjsp4Drp4wsIGNvZGV4IGFwcC1zZXJ2ZXIgdXNhZ2VcbiAgLy8gKFRva2VuVXNhZ2VCcmVha2Rvd24pIOyXkCBjYWNoZSB3cml0ZSDthqDtgbAg7ZWE65Oc6rCAIOyXhuyWtCDtmITsnqwgT3BlbkFJIOyLpO2WiSDqsr3roZzsnZhcbiAgLy8gY29zdCDqs4TsgrDsl5DshJzripQg7ZWt7IOBIDAg7Jy866GcIOyeoe2ejOuLpCDihpIg6re466eM7YG8IOqzvOyGjOynkeqzhC4g64uo6rCA64qUIOyZuOu2gCBsb2dnZXIvbWFudWFsXG4gIC8vIHVzYWdlIOyeheugpeqzvCDtlqXtm4Qg7ZSE66Gc7Yag7L2cIO2ZleyepeydhCDsnITtlbQg7Jyg7KeA7ZWc64ukLlxuICAvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuYWkuY29tL2FwaS9kb2NzL21vZGVscy9ncHQtNS42LXNvbFxuICAvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuYWkuY29tL2FwaS9kb2NzL21vZGVscy9ncHQtNS42LXRlcnJhXG4gIC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLm9wZW5haS5jb20vYXBpL2RvY3MvbW9kZWxzL2dwdC01LjYtbHVuYVxuICBcImdwdC01LjYtc29sXCI6IHtcbiAgICBpbnB1dFRva2VuczogNSxcbiAgICBvdXRwdXRUb2tlbnM6IDMwLFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjUsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiA2LjI1LFxuICAgIGxvbmdDb250ZXh0OiBMT05HX0NPTlRFWFRfMjcySyxcbiAgfSxcbiAgXCJncHQtNS42LXRlcnJhXCI6IHtcbiAgICBpbnB1dFRva2VuczogMi41LFxuICAgIG91dHB1dFRva2VuczogMTUsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMjUsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiAzLjEyNSxcbiAgICBsb25nQ29udGV4dDogTE9OR19DT05URVhUXzI3MkssXG4gIH0sXG4gIFwiZ3B0LTUuNi1sdW5hXCI6IHtcbiAgICBpbnB1dFRva2VuczogMSxcbiAgICBvdXRwdXRUb2tlbnM6IDYsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMSxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDEuMjUsXG4gICAgbG9uZ0NvbnRleHQ6IExPTkdfQ09OVEVYVF8yNzJLLFxuICB9LFxuICAvLyBodHRwczovL29wZW5haS5jb20vaW5kZXgvaW50cm9kdWNpbmctZ3B0LTUtNS8gKDIwMjYtMDQg7Lac7IucKVxuICBcImdwdC01LjVcIjoge1xuICAgIGlucHV0VG9rZW5zOiA1LFxuICAgIG91dHB1dFRva2VuczogMzAsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSxcbiAgICBsb25nQ29udGV4dDogTE9OR19DT05URVhUXzI3MkssXG4gIH0sXG4gIC8vIGh0dHBzOi8vb3BlbmFpLmNvbS9pbmRleC9pbnRyb2R1Y2luZy1ncHQtNS00LyAoMjAyNi0wMyDstpzsi5wpXG4gIFwiZ3B0LTUuNFwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDIuNSxcbiAgICBvdXRwdXRUb2tlbnM6IDE1LFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjI1LFxuICAgIGxvbmdDb250ZXh0OiBMT05HX0NPTlRFWFRfMjcySyxcbiAgfSxcbiAgXCJncHQtNS40LW1pbmlcIjogeyBpbnB1dFRva2VuczogMC43NSwgb3V0cHV0VG9rZW5zOiA0LjUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjA3NSB9LFxuICAvLyBncHQtNS4y7JmAIOuPmeydvCDri6jqsIAgKGNhY2hlZCA9IGlucHV07J2YIDEwJSlcbiAgXCJncHQtNS4zLWNvZGV4XCI6IHsgaW5wdXRUb2tlbnM6IDEuNzUsIG91dHB1dFRva2VuczogMTQsIGNhY2hlZElucHV0VG9rZW5zOiAwLjE3NSB9LFxuICAvLyBodHRwczovL29wZW5haS5jb20vaW5kZXgvaW50cm9kdWNpbmctZ3B0LTUtMi8gKGNhY2hlZCBpbnB1dCA5MCUg7ZWg7J24IOuqheyLnClcbiAgXCJncHQtNS4yXCI6IHsgaW5wdXRUb2tlbnM6IDEuNzUsIG91dHB1dFRva2VuczogMTQsIGNhY2hlZElucHV0VG9rZW5zOiAwLjE3NSB9LFxufTtcblxuLy8g4pSA4pSAIEFudGhyb3BpYyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gYW50aHJvcGljQ29zdHMoaW5wdXRUb2tlbnM6IG51bWJlciwgb3V0cHV0VG9rZW5zOiBudW1iZXIpOiBNb2RlbENvc3RzIHtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dFRva2VucyxcbiAgICBvdXRwdXRUb2tlbnMsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IGlucHV0VG9rZW5zIC8gMTAsXG4gICAgLy8gQ2xhdWRlIENvZGUgc3Vic2NyaXB0aW9uIE9BdXRoIOuKlCAxaCBUVEwg7J2EIOyekOuPmSDshKDtg53tlZzri6QuIOq1rOuyhOyghOyymOufvCDsnZHri7Xsl5BcbiAgICAvLyBUVEwgYnJlYWtkb3duIOydtCDsl4bsnYQg65WM66eMIOydtCAxaCDri6jqsIDrpbwgZmFsbGJhY2sg7Jy866GcIOyCrOyaqe2VnOuLpC5cbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IGlucHV0VG9rZW5zICogMixcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogaW5wdXRUb2tlbnMgKiAxLjI1LFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoOiBpbnB1dFRva2VucyAqIDIsXG4gIH07XG59XG5cbmNvbnN0IEFOVEhST1BJQ19DT1NUUzogUmVjb3JkPHN0cmluZywgTW9kZWxDb3N0cz4gPSB7XG4gIFwiY2xhdWRlLWZhYmxlLTVcIjogYW50aHJvcGljQ29zdHMoMTAsIDUwKSxcbiAgc29ubmV0OiBhbnRocm9waWNDb3N0cygzLCAxNSksXG4gIFwiY2xhdWRlLTMtNS1oYWlrdVwiOiBhbnRocm9waWNDb3N0cygwLjgsIDQpLFxuICBcImNsYXVkZS1oYWlrdS00LTVcIjogYW50aHJvcGljQ29zdHMoMSwgNSksXG4gIFwiY2xhdWRlLTMtNS1zb25uZXRcIjogYW50aHJvcGljQ29zdHMoMywgMTUpLFxuICBcImNsYXVkZS0zLTctc29ubmV0XCI6IGFudGhyb3BpY0Nvc3RzKDMsIDE1KSxcbiAgXCJjbGF1ZGUtc29ubmV0LTRcIjogYW50aHJvcGljQ29zdHMoMywgMTUpLFxuICBcImNsYXVkZS1zb25uZXQtNC01XCI6IGFudGhyb3BpY0Nvc3RzKDMsIDE1KSxcbiAgXCJjbGF1ZGUtc29ubmV0LTQtNlwiOiBhbnRocm9waWNDb3N0cygzLCAxNSksXG4gIFwiY2xhdWRlLXNvbm5ldC00LTdcIjogYW50aHJvcGljQ29zdHMoMywgMTUpLFxuICBcImNsYXVkZS1vcHVzLTRcIjogYW50aHJvcGljQ29zdHMoMTUsIDc1KSxcbiAgXCJjbGF1ZGUtb3B1cy00LTFcIjogYW50aHJvcGljQ29zdHMoMTUsIDc1KSxcbiAgXCJjbGF1ZGUtb3B1cy00LTVcIjogYW50aHJvcGljQ29zdHMoNSwgMjUpLFxuICBcImNsYXVkZS1vcHVzLTQtNlwiOiBhbnRocm9waWNDb3N0cyg1LCAyNSksXG4gIFwiY2xhdWRlLW9wdXMtNC03XCI6IGFudGhyb3BpY0Nvc3RzKDUsIDI1KSxcbiAgXCJjbGF1ZGUtb3B1cy00LThcIjogYW50aHJvcGljQ29zdHMoNSwgMjUpLFxuICBcImNsYXVkZS1vcHVzLTVcIjogYW50aHJvcGljQ29zdHMoNSwgMjUpLFxufTtcblxuLy8gQW50aHJvcGljIOqzteyLnSBpbnRyb2R1Y3RvcnkgcHJpY2luZzogMjAyNi0wOC0zMeq5jOyngCAkMi8kMTAsIOydtO2bhCAkMy8kMTUuXG4vLyBxZ3JpZCDripQg7JqU7LKtIOyLnOygkOyXkCDqs4TsgrDtlZjrr4DroZwg67Cw7Y+s66W8IOuLpOyLnCDtlZjsp4Ag7JWK7JWE64+EIDIwMjYtMDktMDEgVVRD67aA7YSwIO2RnOykgCDri6jqsIDroZwg7KCE7ZmY7ZWc64ukLlxuY29uc3QgQ0xBVURFX1NPTk5FVF81X0lOVFJPX1BSSUNJTkdfRU5EX01TID0gRGF0ZS5VVEMoMjAyNiwgOCwgMSk7XG5jb25zdCBDTEFVREVfU09OTkVUXzVfSU5UUk9fQ09TVFMgPSBhbnRocm9waWNDb3N0cygyLCAxMCk7XG5jb25zdCBDTEFVREVfU09OTkVUXzVfU1RBTkRBUkRfQ09TVFMgPSBhbnRocm9waWNDb3N0cygzLCAxNSk7XG5cbi8vIGdwdC01LjMtY29kZXgtc3Bhcmsg64qUIHJlc2VhcmNoIHByZXZpZXcg66GcIOqzteyLnSB0b2tlbiDri6jqsIDqsIAg7JWE7KeBIGZpbmFsIOydtCDslYTri4jri6QuXG4vLyDsp4Dsm5Ag7YOA7J6F7J2AIOycoOyngO2VmOuQmCwg6rO17IudIOuLqOqwgOqwgCDqs7XqsJzrkKAg65WM6rmM7KeAIOyVhOuemCBnZW5lcmljIGVzdGltYXRlIOuhnCDqs4TsgrDtlZzri6QuXG4vLyBAc2VlIGh0dHBzOi8vaGVscC5vcGVuYWkuY29tL2VuL2FydGljbGVzLzIwMDAxMTA2LWNvZGV4LXJhdGUtY2FyZFxuY29uc3QgREVGQVVMVF9DT1NUUzogTW9kZWxDb3N0cyA9IHsgaW5wdXRUb2tlbnM6IDMsIG91dHB1dFRva2VuczogMTUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjMgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGVsQ29zdHMobW9kZWw6IHN0cmluZywgYXRNcyA9IERhdGUubm93KCkpOiBNb2RlbENvc3RzIHtcbiAgY29uc3Qgbm9ybWFsaXplZE1vZGVsID0gKG1vZGVsLnNwbGl0KFwiL1wiKS5wb3AoKSA/PyBtb2RlbCkucmVwbGFjZSgvXFxbMW1cXF0kL2ksIFwiXCIpO1xuICBpZiAobm9ybWFsaXplZE1vZGVsID09PSBcImNsYXVkZS1zb25uZXQtNVwiKSB7XG4gICAgcmV0dXJuIGF0TXMgPCBDTEFVREVfU09OTkVUXzVfSU5UUk9fUFJJQ0lOR19FTkRfTVNcbiAgICAgID8gQ0xBVURFX1NPTk5FVF81X0lOVFJPX0NPU1RTXG4gICAgICA6IENMQVVERV9TT05ORVRfNV9TVEFOREFSRF9DT1NUUztcbiAgfVxuICByZXR1cm4gT1BFTkFJX0NPU1RTW25vcm1hbGl6ZWRNb2RlbF0gPz8gQU5USFJPUElDX0NPU1RTW25vcm1hbGl6ZWRNb2RlbF0gPz8gREVGQVVMVF9DT1NUUztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvc3RVc2QoXG4gIG1vZGVsOiBzdHJpbmcsXG4gIHVzYWdlOiB7XG4gICAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgICBjYWNoZWRJbnB1dFRva2Vucz86IG51bWJlcjtcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM/OiBudW1iZXI7XG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0/OiBudW1iZXI7XG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg/OiBudW1iZXI7XG4gIH0sXG4gIGF0TXMgPSBEYXRlLm5vdygpLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgY29zdHMgPSBnZXRNb2RlbENvc3RzKG1vZGVsLCBhdE1zKTtcbiAgY29uc3QgY2FjaGVkSW5wdXQgPSB1c2FnZS5jYWNoZWRJbnB1dFRva2VucyA/PyAwO1xuICBjb25zdCBjYWNoZUNyZWF0aW9uSW5wdXQ1bSA9IE1hdGgubWF4KHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtID8/IDAsIDApO1xuICBjb25zdCBjYWNoZUNyZWF0aW9uSW5wdXQxaCA9IE1hdGgubWF4KHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoID8/IDAsIDApO1xuICBjb25zdCBjYWNoZUNyZWF0aW9uSW5wdXQgPSBNYXRoLm1heChcbiAgICB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMgPz8gMCxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXQ1bSArIGNhY2hlQ3JlYXRpb25JbnB1dDFoLFxuICApO1xuICBjb25zdCBjbGFzc2lmaWVkQ2FjaGVDcmVhdGlvbklucHV0NW0gPSBNYXRoLm1pbihjYWNoZUNyZWF0aW9uSW5wdXQ1bSwgY2FjaGVDcmVhdGlvbklucHV0KTtcbiAgY29uc3QgY2xhc3NpZmllZENhY2hlQ3JlYXRpb25JbnB1dDFoID0gTWF0aC5taW4oXG4gICAgY2FjaGVDcmVhdGlvbklucHV0MWgsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0IC0gY2xhc3NpZmllZENhY2hlQ3JlYXRpb25JbnB1dDVtLFxuICApO1xuICBjb25zdCB1bmNsYXNzaWZpZWRDYWNoZUNyZWF0aW9uSW5wdXQgPVxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dCAtIGNsYXNzaWZpZWRDYWNoZUNyZWF0aW9uSW5wdXQ1bSAtIGNsYXNzaWZpZWRDYWNoZUNyZWF0aW9uSW5wdXQxaDtcbiAgY29uc3Qgbm9uQ2FjaGVkSW5wdXQgPSBNYXRoLm1heCh1c2FnZS5pbnB1dFRva2VucyAtIGNhY2hlZElucHV0IC0gY2FjaGVDcmVhdGlvbklucHV0LCAwKTtcblxuICAvLyBsb25nLWNvbnRleHQg7ZWg7KadOiDsoITssrQg7J6F66ClKGlucHV0X3Rva2VucywgY2FjaGUg7Y+s7ZWoKeydtCB0aHJlc2hvbGQg7LSI6rO8IOyLnCDsmpTssq0g7KCE7LK07JeQIOuwsOycqCDsoIHsmqlcbiAgY29uc3QgbGMgPSBjb3N0cy5sb25nQ29udGV4dDtcbiAgY29uc3QgaXNMb25nQ29udGV4dCA9IGxjICE9PSB1bmRlZmluZWQgJiYgdXNhZ2UuaW5wdXRUb2tlbnMgPiBsYy50aHJlc2hvbGQ7XG4gIGNvbnN0IGlucHV0UmF0ZSA9IGNvc3RzLmlucHV0VG9rZW5zICogKGlzTG9uZ0NvbnRleHQgPyBsYy5pbnB1dE11bHRpcGxpZXIgOiAxKTtcbiAgY29uc3QgY2FjaGVkUmF0ZSA9IGNvc3RzLmNhY2hlZElucHV0VG9rZW5zICogKGlzTG9uZ0NvbnRleHQgPyBsYy5jYWNoZWRJbnB1dE11bHRpcGxpZXIgOiAxKTtcbiAgY29uc3QgY2FjaGVDcmVhdGlvbkZhbGxiYWNrUmF0ZSA9XG4gICAgKGNvc3RzLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyA/PyBjb3N0cy5pbnB1dFRva2VucykgKlxuICAgIChpc0xvbmdDb250ZXh0ID8gbGMuaW5wdXRNdWx0aXBsaWVyIDogMSk7XG4gIGNvbnN0IGNhY2hlQ3JlYXRpb241bVJhdGUgPVxuICAgIChjb3N0cy5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bSA/PyBjb3N0cy5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMgPz8gY29zdHMuaW5wdXRUb2tlbnMpICpcbiAgICAoaXNMb25nQ29udGV4dCA/IGxjLmlucHV0TXVsdGlwbGllciA6IDEpO1xuICBjb25zdCBjYWNoZUNyZWF0aW9uMWhSYXRlID1cbiAgICAoY29zdHMuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWggPz8gY29zdHMuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zID8/IGNvc3RzLmlucHV0VG9rZW5zKSAqXG4gICAgKGlzTG9uZ0NvbnRleHQgPyBsYy5pbnB1dE11bHRpcGxpZXIgOiAxKTtcbiAgY29uc3Qgb3V0cHV0UmF0ZSA9IGNvc3RzLm91dHB1dFRva2VucyAqIChpc0xvbmdDb250ZXh0ID8gbGMub3V0cHV0TXVsdGlwbGllciA6IDEpO1xuXG4gIHJldHVybiAoXG4gICAgKG5vbkNhY2hlZElucHV0IC8gMV8wMDBfMDAwKSAqIGlucHV0UmF0ZSArXG4gICAgKHVzYWdlLm91dHB1dFRva2VucyAvIDFfMDAwXzAwMCkgKiBvdXRwdXRSYXRlICtcbiAgICAoY2FjaGVkSW5wdXQgLyAxXzAwMF8wMDApICogY2FjaGVkUmF0ZSArXG4gICAgKHVuY2xhc3NpZmllZENhY2hlQ3JlYXRpb25JbnB1dCAvIDFfMDAwXzAwMCkgKiBjYWNoZUNyZWF0aW9uRmFsbGJhY2tSYXRlICtcbiAgICAoY2xhc3NpZmllZENhY2hlQ3JlYXRpb25JbnB1dDVtIC8gMV8wMDBfMDAwKSAqIGNhY2hlQ3JlYXRpb241bVJhdGUgK1xuICAgIChjbGFzc2lmaWVkQ2FjaGVDcmVhdGlvbklucHV0MWggLyAxXzAwMF8wMDApICogY2FjaGVDcmVhdGlvbjFoUmF0ZVxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBd0NBLE1BQU0sb0JBQTREO0NBQ2hFLFdBQVc7Q0FDWCxpQkFBaUI7Q0FDakIsdUJBQXVCO0NBQ3ZCLGtCQUFrQjtBQUNwQjtBQUVBLE1BQU0sZUFBMkM7Q0FXL0MsZUFBZTtFQUNiLGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VB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
123
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29zdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog66qo642467OEIO2GoO2BsCDqsIDqsqkg7YWM7J2067iUICsgY29zdCDqs4TsgrAuXG4gKlxuICogY2xhdWRlIGNvZGUg7JmAIOuPmeydvCDtjKjthLQ6IO2BtOudvOydtOyWuO2KuOyXkOyEnCDqsIDqsqkg7YWM7J2067iU66GcIOyngeygkSDqs4TsgrAuXG4gKiDqsIDqsqkg64uo7JyEOiBVU0QgcGVyIDFNIHRva2Vucy5cbiAqXG4gKiBPcGVuQUkg66qo6424IOuqqeuhneydgCBPcGVuQUkg66qo6424IOusuOyEnOyZgCDtmITsnqwg7KeA7JuQIOuqqeuhneydhCDquLDspIDsnLzroZwg6rSA66as7ZWc64ukLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvcHJpY2luZ1xuICogQHNlZSBodHRwczovL3BsYXRmb3JtLmNsYXVkZS5jb20vZG9jcy9lbi9hYm91dC1jbGF1ZGUvcHJpY2luZ1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDb3N0cyB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xuICAvKiogVFRMIGJyZWFrZG93biDsnbQg7JeG64qUIHVzYWdlIOyXkCDsoIHsmqntlaAgY2FjaGUgd3JpdGUgZmFsbGJhY2sg64uo6rCALiAqL1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtPzogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaD86IG51bWJlcjtcbiAgLyoqXG4gICAqIGxvbmctY29udGV4dCDtlaDspp0uIOyghOyytCDsnoXroKUg7Yag7YGwKGlucHV0X3Rva2VucywgY2FjaGVfcmVhZCDtj6ztlagp7J20IHRocmVzaG9sZCDstIjqs7wg7IucXG4gICAqIOy0iOqzvOu2hOunjOydtCDslYTri4jrnbwg7JqU7LKtIOyghOyytChmdWxsIHNlc3Npb24p7JeQIOuwsOycqCDsoIHsmqkuXG4gICAqL1xuICBsb25nQ29udGV4dD86IHtcbiAgICB0aHJlc2hvbGQ6IG51bWJlcjtcbiAgICBpbnB1dE11bHRpcGxpZXI6IG51bWJlcjtcbiAgICBjYWNoZWRJbnB1dE11bHRpcGxpZXI6IG51bWJlcjtcbiAgICBvdXRwdXRNdWx0aXBsaWVyOiBudW1iZXI7XG4gIH07XG59XG5cbi8vIOKUgOKUgCBPcGVuQUkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vL1xuLy8g6rCA6rKpIOy2nOyymDogaHR0cHM6Ly9kZXZlbG9wZXJzLm9wZW5haS5jb20vYXBpL2RvY3MvbW9kZWxzICgyMDI2LTA3LTE4IO2ZleyduClcbi8vIOyLoOuqqOuNuCDstpzsi5zrp4jri6Qg64uo6rCA6rCAIOuwlOuAjOuvgOuhnCg1LjLihpI1LjTihpI1LjUpIOuqqOuNuCDstpTqsIAg7IucIOuwmOuTnOyLnCDqs7Xsi50g7Y6Y7J207KeAIOyerO2ZleyduO2VtOyVvO2VqFxuXG4vLyBHUFQtNS407JeQ7IScIOyymOydjCDrj4TsnoXrkJwgbG9uZy1jb250ZXh0IO2VoOymnSAoNS4yLzUuMy1jb2RleOuKlCDtlbTri7kg7JeG7J2MLCA1LjQtbWluaS9uYW5v64qUIOqzteyLnSDtkZzsl5DshJwgbG9uZy1jb250ZXh0IOuLqOqwgCDsl4bsnYwpXG4vLyAyNzJLIOy0iOqzvCDsi5wgaW5wdXQgMnggLyBjYWNoZWQgMnggLyBvdXRwdXQgMS41eCDigJQg7LSI6rO867aE66eM7J20IOyVhOuLjCDshLjshZgg7KCE7LK07JeQIOyggeyaqeuQqFxuLy8gQHNlZSBodHRwczovL2RldmVsb3BlcnMub3BlbmFpLmNvbS9hcGkvZG9jcy9tb2RlbHMvZ3B0LTUuNSAoXCJwcm9tcHRzIHdpdGggPjI3MksgaW5wdXQgdG9rZW5zXCIpXG5jb25zdCBMT05HX0NPTlRFWFRfMjcySzogTm9uTnVsbGFibGU8TW9kZWxDb3N0c1tcImxvbmdDb250ZXh0XCJdPiA9IHtcbiAgdGhyZXNob2xkOiAyNzJfMDAwLFxuICBpbnB1dE11bHRpcGxpZXI6IDIsXG4gIGNhY2hlZElucHV0TXVsdGlwbGllcjogMixcbiAgb3V0cHV0TXVsdGlwbGllcjogMS41LFxufTtcblxuY29uc3QgT1BFTkFJX0NPU1RTOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvc3RzPiA9IHtcbiAgLy8gR1BULTUuNiBTb2wsIFRlcnJhLCBMdW5hLiBjYWNoZSB3cml0ZSDri6jqsIDripQg7Jm467aAIGxvZ2dlci9tYW51YWwgdXNhZ2Ug7J6F66Cl7J2EIOychO2VtFxuICAvLyDsnKDsp4DtlZzri6QuIO2YhOyerCBPcGVuQUkg7J2R64u1IHVzYWdlIOyXkCBjYWNoZSB3cml0ZSDthqDtgbAg7ZWE65Oc6rCAIOyXhuycvOuptCDruYTsmqnsnYAgMOycvOuhnCDqs4TsgrDrkJzri6QuXG4gIC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLm9wZW5haS5jb20vYXBpL2RvY3MvbW9kZWxzL2dwdC01LjYtc29sXG4gIC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLm9wZW5haS5jb20vYXBpL2RvY3MvbW9kZWxzL2dwdC01LjYtdGVycmFcbiAgLy8gQHNlZSBodHRwczovL2RldmVsb3BlcnMub3BlbmFpLmNvbS9hcGkvZG9jcy9tb2RlbHMvZ3B0LTUuNi1sdW5hXG4gIFwiZ3B0LTUuNi1zb2xcIjoge1xuICAgIGlucHV0VG9rZW5zOiA1LFxuICAgIG91dHB1dFRva2VuczogMzAsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDYuMjUsXG4gICAgbG9uZ0NvbnRleHQ6IExPTkdfQ09OVEVYVF8yNzJLLFxuICB9LFxuICBcImdwdC01LjYtdGVycmFcIjoge1xuICAgIGlucHV0VG9rZW5zOiAyLjUsXG4gICAgb3V0cHV0VG9rZW5zOiAxNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4yNSxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDMuMTI1LFxuICAgIGxvbmdDb250ZXh0OiBMT05HX0NPTlRFWFRfMjcySyxcbiAgfSxcbiAgXCJncHQtNS42LWx1bmFcIjoge1xuICAgIGlucHV0VG9rZW5zOiAxLFxuICAgIG91dHB1dFRva2VuczogNixcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4xLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMS4yNSxcbiAgICBsb25nQ29udGV4dDogTE9OR19DT05URVhUXzI3MkssXG4gIH0sXG4gIC8vIGh0dHBzOi8vb3BlbmFpLmNvbS9pbmRleC9pbnRyb2R1Y2luZy1ncHQtNS01LyAoMjAyNi0wNCDstpzsi5wpXG4gIFwiZ3B0LTUuNVwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDUsXG4gICAgb3V0cHV0VG9rZW5zOiAzMCxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC41LFxuICAgIGxvbmdDb250ZXh0OiBMT05HX0NPTlRFWFRfMjcySyxcbiAgfSxcbiAgLy8gaHR0cHM6Ly9vcGVuYWkuY29tL2luZGV4L2ludHJvZHVjaW5nLWdwdC01LTQvICgyMDI2LTAzIOy2nOyLnClcbiAgXCJncHQtNS40XCI6IHtcbiAgICBpbnB1dFRva2VuczogMi41LFxuICAgIG91dHB1dFRva2VuczogMTUsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMjUsXG4gICAgbG9uZ0NvbnRleHQ6IExPTkdfQ09OVEVYVF8yNzJLLFxuICB9LFxuICBcImdwdC01LjQtbWluaVwiOiB7IGlucHV0VG9rZW5zOiAwLjc1LCBvdXRwdXRUb2tlbnM6IDQuNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMDc1IH0sXG4gIC8vIGdwdC01LjLsmYAg64+Z7J28IOuLqOqwgCAoY2FjaGVkID0gaW5wdXTsnZggMTAlKVxuICBcImdwdC01LjMtY29kZXhcIjogeyBpbnB1dFRva2VuczogMS43NSwgb3V0cHV0VG9rZW5zOiAxNCwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMTc1IH0sXG4gIC8vIGh0dHBzOi8vb3BlbmFpLmNvbS9pbmRleC9pbnRyb2R1Y2luZy1ncHQtNS0yLyAoY2FjaGVkIGlucHV0IDkwJSDtlaDsnbgg66qF7IucKVxuICBcImdwdC01LjJcIjogeyBpbnB1dFRva2VuczogMS43NSwgb3V0cHV0VG9rZW5zOiAxNCwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMTc1IH0sXG59O1xuXG4vLyDilIDilIAgQW50aHJvcGljIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBhbnRocm9waWNDb3N0cyhpbnB1dFRva2VuczogbnVtYmVyLCBvdXRwdXRUb2tlbnM6IG51bWJlcik6IE1vZGVsQ29zdHMge1xuICByZXR1cm4ge1xuICAgIGlucHV0VG9rZW5zLFxuICAgIG91dHB1dFRva2VucyxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogaW5wdXRUb2tlbnMgLyAxMCxcbiAgICAvLyBDbGF1ZGUgQ29kZSBzdWJzY3JpcHRpb24gT0F1dGgg64qUIDFoIFRUTCDsnYQg7J6Q64+ZIOyEoO2Dne2VnOuLpC4g6rWs67KE7KCE7LKY65+8IOydkeuLteyXkFxuICAgIC8vIFRUTCBicmVha2Rvd24g7J20IOyXhuydhCDrlYzrp4wg7J20IDFoIOuLqOqwgOulvCBmYWxsYmFjayDsnLzroZwg7IKs7Jqp7ZWc64ukLlxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogaW5wdXRUb2tlbnMgKiAyLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtOiBpbnB1dFRva2VucyAqIDEuMjUsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IGlucHV0VG9rZW5zICogMixcbiAgfTtcbn1cblxuY29uc3QgQU5USFJPUElDX0NPU1RTOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvc3RzPiA9IHtcbiAgXCJjbGF1ZGUtZmFibGUtNVwiOiBhbnRocm9waWNDb3N0cygxMCwgNTApLFxuICBzb25uZXQ6IGFudGhyb3BpY0Nvc3RzKDMsIDE1KSxcbiAgXCJjbGF1ZGUtMy01LWhhaWt1XCI6IGFudGhyb3BpY0Nvc3RzKDAuOCwgNCksXG4gIFwiY2xhdWRlLWhhaWt1LTQtNVwiOiBhbnRocm9waWNDb3N0cygxLCA1KSxcbiAgXCJjbGF1ZGUtMy01LXNvbm5ldFwiOiBhbnRocm9waWNDb3N0cygzLCAxNSksXG4gIFwiY2xhdWRlLTMtNy1zb25uZXRcIjogYW50aHJvcGljQ29zdHMoMywgMTUpLFxuICBcImNsYXVkZS1zb25uZXQtNFwiOiBhbnRocm9waWNDb3N0cygzLCAxNSksXG4gIFwiY2xhdWRlLXNvbm5ldC00LTVcIjogYW50aHJvcGljQ29zdHMoMywgMTUpLFxuICBcImNsYXVkZS1zb25uZXQtNC02XCI6IGFudGhyb3BpY0Nvc3RzKDMsIDE1KSxcbiAgXCJjbGF1ZGUtc29ubmV0LTQtN1wiOiBhbnRocm9waWNDb3N0cygzLCAxNSksXG4gIFwiY2xhdWRlLW9wdXMtNFwiOiBhbnRocm9waWNDb3N0cygxNSwgNzUpLFxuICBcImNsYXVkZS1vcHVzLTQtMVwiOiBhbnRocm9waWNDb3N0cygxNSwgNzUpLFxuICBcImNsYXVkZS1vcHVzLTQtNVwiOiBhbnRocm9waWNDb3N0cyg1LCAyNSksXG4gIFwiY2xhdWRlLW9wdXMtNC02XCI6IGFudGhyb3BpY0Nvc3RzKDUsIDI1KSxcbiAgXCJjbGF1ZGUtb3B1cy00LTdcIjogYW50aHJvcGljQ29zdHMoNSwgMjUpLFxuICBcImNsYXVkZS1vcHVzLTQtOFwiOiBhbnRocm9waWNDb3N0cyg1LCAyNSksXG4gIFwiY2xhdWRlLW9wdXMtNVwiOiBhbnRocm9waWNDb3N0cyg1LCAyNSksXG59O1xuXG4vLyBBbnRocm9waWMg6rO17IudIGludHJvZHVjdG9yeSBwcmljaW5nOiAyMDI2LTA4LTMx6rmM7KeAICQyLyQxMCwg7J207ZuEICQzLyQxNS5cbi8vIHFncmlkIOuKlCDsmpTssq0g7Iuc7KCQ7JeQIOqzhOyCsO2VmOuvgOuhnCDrsLDtj6zrpbwg64uk7IucIO2VmOyngCDslYrslYTrj4QgMjAyNi0wOS0wMSBVVEPrtoDthLAg7ZGc7KSAIOuLqOqwgOuhnCDsoITtmZjtlZzri6QuXG5jb25zdCBDTEFVREVfU09OTkVUXzVfSU5UUk9fUFJJQ0lOR19FTkRfTVMgPSBEYXRlLlVUQygyMDI2LCA4LCAxKTtcbmNvbnN0IENMQVVERV9TT05ORVRfNV9JTlRST19DT1NUUyA9IGFudGhyb3BpY0Nvc3RzKDIsIDEwKTtcbmNvbnN0IENMQVVERV9TT05ORVRfNV9TVEFOREFSRF9DT1NUUyA9IGFudGhyb3BpY0Nvc3RzKDMsIDE1KTtcblxuLy8gZ3B0LTUuMy1jb2RleC1zcGFyayDripQgcmVzZWFyY2ggcHJldmlldyDroZwg6rO17IudIHRva2VuIOuLqOqwgOqwgCDslYTsp4EgZmluYWwg7J20IOyVhOuLiOuLpC5cbi8vIOyngOybkCDtg4DsnoXsnYAg7Jyg7KeA7ZWY65CYLCDqs7Xsi50g64uo6rCA6rCAIOqzteqwnOuQoCDrlYzquYzsp4Ag7JWE656YIGdlbmVyaWMgZXN0aW1hdGUg66GcIOqzhOyCsO2VnOuLpC5cbi8vIEBzZWUgaHR0cHM6Ly9oZWxwLm9wZW5haS5jb20vZW4vYXJ0aWNsZXMvMjAwMDExMDYtY29kZXgtcmF0ZS1jYXJkXG5jb25zdCBERUZBVUxUX0NPU1RTOiBNb2RlbENvc3RzID0geyBpbnB1dFRva2VuczogMywgb3V0cHV0VG9rZW5zOiAxNSwgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWxDb3N0cyhtb2RlbDogc3RyaW5nLCBhdE1zID0gRGF0ZS5ub3coKSk6IE1vZGVsQ29zdHMge1xuICBjb25zdCBub3JtYWxpemVkTW9kZWwgPSAobW9kZWwuc3BsaXQoXCIvXCIpLnBvcCgpID8/IG1vZGVsKS5yZXBsYWNlKC9cXFsxbVxcXSQvaSwgXCJcIik7XG4gIGlmIChub3JtYWxpemVkTW9kZWwgPT09IFwiY2xhdWRlLXNvbm5ldC01XCIpIHtcbiAgICByZXR1cm4gYXRNcyA8IENMQVVERV9TT05ORVRfNV9JTlRST19QUklDSU5HX0VORF9NU1xuICAgICAgPyBDTEFVREVfU09OTkVUXzVfSU5UUk9fQ09TVFNcbiAgICAgIDogQ0xBVURFX1NPTk5FVF81X1NUQU5EQVJEX0NPU1RTO1xuICB9XG4gIHJldHVybiBPUEVOQUlfQ09TVFNbbm9ybWFsaXplZE1vZGVsXSA/PyBBTlRIUk9QSUNfQ09TVFNbbm9ybWFsaXplZE1vZGVsXSA/PyBERUZBVUxUX0NPU1RTO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29zdFVzZChcbiAgbW9kZWw6IHN0cmluZyxcbiAgdXNhZ2U6IHtcbiAgICBpbnB1dFRva2VuczogbnVtYmVyO1xuICAgIG91dHB1dFRva2VuczogbnVtYmVyO1xuICAgIGNhY2hlZElucHV0VG9rZW5zPzogbnVtYmVyO1xuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2Vucz86IG51bWJlcjtcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bT86IG51bWJlcjtcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaD86IG51bWJlcjtcbiAgfSxcbiAgYXRNcyA9IERhdGUubm93KCksXG4pOiBudW1iZXIge1xuICBjb25zdCBjb3N0cyA9IGdldE1vZGVsQ29zdHMobW9kZWwsIGF0TXMpO1xuICBjb25zdCBjYWNoZWRJbnB1dCA9IHVzYWdlLmNhY2hlZElucHV0VG9rZW5zID8/IDA7XG4gIGNvbnN0IGNhY2hlQ3JlYXRpb25JbnB1dDVtID0gTWF0aC5tYXgodXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0gPz8gMCwgMCk7XG4gIGNvbnN0IGNhY2hlQ3JlYXRpb25JbnB1dDFoID0gTWF0aC5tYXgodXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWggPz8gMCwgMCk7XG4gIGNvbnN0IGNhY2hlQ3JlYXRpb25JbnB1dCA9IE1hdGgubWF4KFxuICAgIHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyA/PyAwLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dDVtICsgY2FjaGVDcmVhdGlvbklucHV0MWgsXG4gICk7XG4gIGNvbnN0IGNsYXNzaWZpZWRDYWNoZUNyZWF0aW9uSW5wdXQ1bSA9IE1hdGgubWluKGNhY2hlQ3JlYXRpb25JbnB1dDVtLCBjYWNoZUNyZWF0aW9uSW5wdXQpO1xuICBjb25zdCBjbGFzc2lmaWVkQ2FjaGVDcmVhdGlvbklucHV0MWggPSBNYXRoLm1pbihcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXQxaCxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXQgLSBjbGFzc2lmaWVkQ2FjaGVDcmVhdGlvbklucHV0NW0sXG4gICk7XG4gIGNvbnN0IHVuY2xhc3NpZmllZENhY2hlQ3JlYXRpb25JbnB1dCA9XG4gICAgY2FjaGVDcmVhdGlvbklucHV0IC0gY2xhc3NpZmllZENhY2hlQ3JlYXRpb25JbnB1dDVtIC0gY2xhc3NpZmllZENhY2hlQ3JlYXRpb25JbnB1dDFoO1xuICBjb25zdCBub25DYWNoZWRJbnB1dCA9IE1hdGgubWF4KHVzYWdlLmlucHV0VG9rZW5zIC0gY2FjaGVkSW5wdXQgLSBjYWNoZUNyZWF0aW9uSW5wdXQsIDApO1xuXG4gIC8vIGxvbmctY29udGV4dCDtlaDspp06IOyghOyytCDsnoXroKUoaW5wdXRfdG9rZW5zLCBjYWNoZSDtj6ztlagp7J20IHRocmVzaG9sZCDstIjqs7wg7IucIOyalOyyrSDsoITssrTsl5Ag67Cw7JyoIOyggeyaqVxuICBjb25zdCBsYyA9IGNvc3RzLmxvbmdDb250ZXh0O1xuICBjb25zdCBpc0xvbmdDb250ZXh0ID0gbGMgIT09IHVuZGVmaW5lZCAmJiB1c2FnZS5pbnB1dFRva2VucyA+IGxjLnRocmVzaG9sZDtcbiAgY29uc3QgaW5wdXRSYXRlID0gY29zdHMuaW5wdXRUb2tlbnMgKiAoaXNMb25nQ29udGV4dCA/IGxjLmlucHV0TXVsdGlwbGllciA6IDEpO1xuICBjb25zdCBjYWNoZWRSYXRlID0gY29zdHMuY2FjaGVkSW5wdXRUb2tlbnMgKiAoaXNMb25nQ29udGV4dCA/IGxjLmNhY2hlZElucHV0TXVsdGlwbGllciA6IDEpO1xuICBjb25zdCBjYWNoZUNyZWF0aW9uRmFsbGJhY2tSYXRlID1cbiAgICAoY29zdHMuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zID8/IGNvc3RzLmlucHV0VG9rZW5zKSAqXG4gICAgKGlzTG9uZ0NvbnRleHQgPyBsYy5pbnB1dE11bHRpcGxpZXIgOiAxKTtcbiAgY29uc3QgY2FjaGVDcmVhdGlvbjVtUmF0ZSA9XG4gICAgKGNvc3RzLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtID8/IGNvc3RzLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyA/PyBjb3N0cy5pbnB1dFRva2VucykgKlxuICAgIChpc0xvbmdDb250ZXh0ID8gbGMuaW5wdXRNdWx0aXBsaWVyIDogMSk7XG4gIGNvbnN0IGNhY2hlQ3JlYXRpb24xaFJhdGUgPVxuICAgIChjb3N0cy5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaCA/PyBjb3N0cy5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMgPz8gY29zdHMuaW5wdXRUb2tlbnMpICpcbiAgICAoaXNMb25nQ29udGV4dCA/IGxjLmlucHV0TXVsdGlwbGllciA6IDEpO1xuICBjb25zdCBvdXRwdXRSYXRlID0gY29zdHMub3V0cHV0VG9rZW5zICogKGlzTG9uZ0NvbnRleHQgPyBsYy5vdXRwdXRNdWx0aXBsaWVyIDogMSk7XG5cbiAgcmV0dXJuIChcbiAgICAobm9uQ2FjaGVkSW5wdXQgLyAxXzAwMF8wMDApICogaW5wdXRSYXRlICtcbiAgICAodXNhZ2Uub3V0cHV0VG9rZW5zIC8gMV8wMDBfMDAwKSAqIG91dHB1dFJhdGUgK1xuICAgIChjYWNoZWRJbnB1dCAvIDFfMDAwXzAwMCkgKiBjYWNoZWRSYXRlICtcbiAgICAodW5jbGFzc2lmaWVkQ2FjaGVDcmVhdGlvbklucHV0IC8gMV8wMDBfMDAwKSAqIGNhY2hlQ3JlYXRpb25GYWxsYmFja1JhdGUgK1xuICAgIChjbGFzc2lmaWVkQ2FjaGVDcmVhdGlvbklucHV0NW0gLyAxXzAwMF8wMDApICogY2FjaGVDcmVhdGlvbjVtUmF0ZSArXG4gICAgKGNsYXNzaWZpZWRDYWNoZUNyZWF0aW9uSW5wdXQxaCAvIDFfMDAwXzAwMCkgKiBjYWNoZUNyZWF0aW9uMWhSYXRlXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7QUF3Q0EsTUFBTSxvQkFBNEQ7Q0FDaEUsV0FBVztDQUNYLGlCQUFpQjtDQUNqQix1QkFBdUI7Q0FDdkIsa0JBQWtCO0FBQ3BCO0FBRUEsTUFBTSxlQUEyQztDQU0vQyxlQUFlO0VBQ2IsYUFBYTtFQUNiLGNBQWM7RUFDZCxtQkFBbUI7RUFDbkIsMEJBQTBCO0VBQzFCLGFBQWE7Q0FDZjtDQUNBLGlCQUFpQjtFQUNmLGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLDBCQUEwQjtFQUMxQixhQUFhO0NBQ2Y7Q0FDQSxnQkFBZ0I7RUFDZCxhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQiwwQkFBMEI7RUFDMUIsYUFBYTtDQUNmO0NBRUEsV0FBVztFQUNULGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLGFBQWE7Q0FDZjtDQUVBLFdBQVc7RUFDVCxhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQixhQUFhO0NBQ2Y7Q0FDQSxnQkFBZ0I7RUFBRSxhQUFhO0VBQU0sY0FBYztFQUFLLG1CQUFtQjtDQUFNO0NBRWpGLGlCQUFpQjtFQUFF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
@@ -175,4 +175,4 @@ function isRecord(value) {
175
175
  //#endregion
176
176
  export { ANTHROPIC_SCHEMA_ARGV_MAX_UTF8_BYTES, ARGV_SAFE_MAX_UTF8_BYTES, CALLER_SCHEMA_LIMITS, CallerSchemaValidationError, assertAnthropicSchemaArgvSize, parseAndValidateCallerSchemas, serializeAndValidateDispatchSchema };
177
177
 
178
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXZhbGlkYXRpb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vc2NoZW1hLXZhbGlkYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIm5vZGU6YnVmZmVyXCI7XG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5cbi8qKlxuICogQ2FsbGVyLXByb3ZpZGVkIHNjaGVtYXMgYXJlIHNlcmlhbGl6ZWQsIGNvcGllZCwgYW5kIHJlY3Vyc2l2ZWx5IG5vcm1hbGl6ZWQgYmVmb3JlIGRpc3BhdGNoLlxuICogS2VlcCB0aGVzZSBsaW1pdHMgY29tZm9ydGFibHkgYWJvdmUgbm9ybWFsIGdlbmVyYXRlZCBzY2hlbWFzIHdoaWxlIGJvdW5kaW5nIHRoYXQgcHJlcHJvY2Vzc2luZ1xuICogd2VsbCBiZWxvdyB0aGUgQVBJJ3MgMTAgTWlCIHJlcXVlc3QtYm9keSBjZWlsaW5nLlxuICovXG5leHBvcnQgY29uc3QgQ0FMTEVSX1NDSEVNQV9MSU1JVFMgPSB7XG4gIG1heFV0ZjhCeXRlczogNTEyICogMTAyNCxcbiAgbWF4Tm9kZXM6IDIwXzAwMCxcbiAgbWF4RGVwdGg6IDEyOCxcbn0gYXMgY29uc3Q7XG5cbi8vIExpbnV4IHBlcm1pdHMgYXQgbW9zdCAxMjggS2lCIChNQVhfQVJHX1NUUkxFTikgZm9yIG9uZSBhcmd2IHZhbHVlLiBxZ3JpZCB1c2VzIGEgNTAlIHNhZmV0eVxuLy8gbWFyZ2luIGZvciBldmVyeSBhcmd2LWRlbGl2ZXJlZCBwYXlsb2FkIOKAlCBDbGF1ZGUgQ29kZSAtLWpzb24tc2NoZW1hIGhlcmUgYW5kIHRoZSBzeXN0ZW0tcHJvbXB0XG4vLyB0cmFuc3BvcnQgKGNsYXVkZS1zZXNzaW9uKSBib3RoIGRlcml2ZSBmcm9tIHRoaXMgc2luZ2xlIGNvbnN0YW50LlxuZXhwb3J0IGNvbnN0IEFSR1ZfU0FGRV9NQVhfVVRGOF9CWVRFUyA9IDY0ICogMTAyNDtcbmV4cG9ydCBjb25zdCBBTlRIUk9QSUNfU0NIRU1BX0FSR1ZfTUFYX1VURjhfQllURVMgPSBBUkdWX1NBRkVfTUFYX1VURjhfQllURVM7XG5cbmV4cG9ydCBjbGFzcyBDYWxsZXJTY2hlbWFWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGBxZ3JpZDogJHttZXNzYWdlfWApO1xuICAgIHRoaXMubmFtZSA9IFwiQ2FsbGVyU2NoZW1hVmFsaWRhdGlvbkVycm9yXCI7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxsZXJTY2hlbWFzSW5wdXQge1xuICBqc29uU2NoZW1hPzogc3RyaW5nO1xuICB0b29scz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZzsgaW5wdXRTY2hlbWE6IHVua25vd24gfT47XG59XG5cbmludGVyZmFjZSBDb21wbGV4aXR5U3RhdGUge1xuICB1dGY4Qnl0ZXM6IG51bWJlcjtcbiAgbm9kZXM6IG51bWJlcjtcbiAgc2NoZW1hczogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBbmRWYWxpZGF0ZUNhbGxlclNjaGVtYXMoaW5wdXQ6IENhbGxlclNjaGVtYXNJbnB1dCk6IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN0YXRlOiBDb21wbGV4aXR5U3RhdGUgPSB7XG4gICAgdXRmOEJ5dGVzOiAwLFxuICAgIG5vZGVzOiAwLFxuICAgIHNjaGVtYXM6IDAsXG4gIH07XG4gIGxldCBvdXRwdXRTY2hlbWE6IEpzb25WYWx1ZSB8IHVuZGVmaW5lZDtcblxuICBpZiAoaW5wdXQuanNvblNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWRkVXRmOEJ5dGVzKEJ1ZmZlci5ieXRlTGVuZ3RoKGlucHV0Lmpzb25TY2hlbWEsIFwidXRmOFwiKSwgXCJqc29uU2NoZW1hXCIsIHN0YXRlKTtcblxuICAgIGxldCBwYXJzZWQ6IHVua25vd247XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoaW5wdXQuanNvblNjaGVtYSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgQ2FsbGVyU2NoZW1hVmFsaWRhdGlvbkVycm9yKFwianNvblNjaGVtYSBtdXN0IGNvbnRhaW4gdmFsaWQgSlNPTlwiKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzUmVjb3JkKHBhcnNlZCkgfHwgcGFyc2VkLnR5cGUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBDYWxsZXJTY2hlbWFWYWxpZGF0aW9uRXJyb3IoJ2pzb25TY2hlbWEgdG9wLWxldmVsIHR5cGUgbXVzdCBiZSBcIm9iamVjdFwiJyk7XG4gICAgfVxuXG4gICAgYWRkQ29tcGxleGl0eShwYXJzZWQsIFwianNvblNjaGVtYVwiLCBzdGF0ZSk7XG4gICAgc3RhdGUuc2NoZW1hcyArPSAxO1xuICAgIG91dHB1dFNjaGVtYSA9IHBhcnNlZCBhcyBKc29uVmFsdWU7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtpbmRleCwgdG9vbF0gb2YgKGlucHV0LnRvb2xzID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICBhZGRUb29sTWV0YWRhdGFVdGY4Qnl0ZXModG9vbCwgaW5kZXgsIHN0YXRlKTtcblxuICAgIGNvbnN0IHBhdGggPSBgdG9vbHNbJHtpbmRleH1dLmlucHV0U2NoZW1hYDtcbiAgICBhZGRDb21wbGV4aXR5KHRvb2wuaW5wdXRTY2hlbWEsIHBhdGgsIHN0YXRlLCB0cnVlKTtcblxuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzdHJpbmdpZnlKc29uT3JUaHJvdyh0b29sLmlucHV0U2NoZW1hLCBwYXRoKTtcblxuICAgIC8vIGJ1aWxkVG9vbENhbGxTY2hlbWEgZW1iZWRzIHRoaXMgc2VyaWFsaXphdGlvbiBpbnNpZGUgYW5vdGhlciBKU09OIHN0cmluZy4gQ2hhcmdlIHRoZVxuICAgIC8vIGVzY2FwZWQgb3V0ZXItc3RyaW5nIHJlcHJlc2VudGF0aW9uIGJlZm9yZSB0aGF0IGNvbXBvc2VkIGRlc2NyaXB0aW9uIGlzIG1hdGVyaWFsaXplZC5cbiAgICBhZGRVdGY4Qnl0ZXMoanNvblN0cmluZ0NvbnRlbnRVdGY4Qnl0ZVVwcGVyQm91bmQoc2VyaWFsaXplZCksIHBhdGgsIHN0YXRlKTtcbiAgICBzdGF0ZS5zY2hlbWFzICs9IDE7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0U2NoZW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQW5kVmFsaWRhdGVEaXNwYXRjaFNjaGVtYShcbiAgc2NoZW1hOiB1bmtub3duLFxuICBwcm92aWRlcj86IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzY2hlbWEgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBzZXJpYWxpemVkID0gc3RyaW5naWZ5SnNvbk9yVGhyb3coc2NoZW1hLCBcImRpc3BhdGNoIHNjaGVtYVwiKTtcblxuICBjb25zdCBieXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc2VyaWFsaXplZCwgXCJ1dGY4XCIpO1xuICBpZiAoYnl0ZUxlbmd0aCA+IENBTExFUl9TQ0hFTUFfTElNSVRTLm1heFV0ZjhCeXRlcykge1xuICAgIHRocm93IG5ldyBDYWxsZXJTY2hlbWFWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgZGlzcGF0Y2ggc2NoZW1hIGV4Y2VlZHMgVVRGLTggYnl0ZSBsaW1pdCBvZiAke0NBTExFUl9TQ0hFTUFfTElNSVRTLm1heFV0ZjhCeXRlc31gLFxuICAgICk7XG4gIH1cbiAgaWYgKHByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKSB7XG4gICAgYXNzZXJ0QW50aHJvcGljU2NoZW1hQXJndlNpemUoc2VyaWFsaXplZCk7XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFudGhyb3BpY1NjaGVtYUFyZ3ZTaXplKGpzb25TY2hlbWE6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoQnVmZmVyLmJ5dGVMZW5ndGgoanNvblNjaGVtYSwgXCJ1dGY4XCIpID4gQU5USFJPUElDX1NDSEVNQV9BUkdWX01BWF9VVEY4X0JZVEVTKSB7XG4gICAgdGhyb3cgbmV3IENhbGxlclNjaGVtYVZhbGlkYXRpb25FcnJvcihcbiAgICAgIGBBbnRocm9waWMgZGlzcGF0Y2ggc2NoZW1hIGV4Y2VlZHMgYXJndiBVVEYtOCBieXRlIGxpbWl0IG9mICR7QU5USFJPUElDX1NDSEVNQV9BUkdWX01BWF9VVEY4X0JZVEVTfWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlKc29uT3JUaHJvdyh2YWx1ZTogdW5rbm93biwgc3ViamVjdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHNlcmlhbGl6ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBzZXJpYWxpemVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgQ2FsbGVyU2NoZW1hVmFsaWRhdGlvbkVycm9yKGAke3N1YmplY3R9IG11c3QgYmUgSlNPTi1zZXJpYWxpemFibGVgKTtcbiAgfVxuICBpZiAoc2VyaWFsaXplZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IENhbGxlclNjaGVtYVZhbGlkYXRpb25FcnJvcihgJHtzdWJqZWN0fSBtdXN0IGJlIEpTT04tc2VyaWFsaXphYmxlYCk7XG4gIH1cbiAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG59XG5cbmZ1bmN0aW9uIGFkZFV0ZjhCeXRlcyhieXRlTGVuZ3RoOiBudW1iZXIsIHBhdGg6IHN0cmluZywgc3RhdGU6IENvbXBsZXhpdHlTdGF0ZSk6IHZvaWQge1xuICBzdGF0ZS51dGY4Qnl0ZXMgKz0gYnl0ZUxlbmd0aDtcbiAgaWYgKHN0YXRlLnV0ZjhCeXRlcyA+IENBTExFUl9TQ0hFTUFfTElNSVRTLm1heFV0ZjhCeXRlcykge1xuICAgIHRocm93TGltaXRFcnJvcihwYXRoLCBcIlVURi04IGJ5dGVcIiwgQ0FMTEVSX1NDSEVNQV9MSU1JVFMubWF4VXRmOEJ5dGVzLCBzdGF0ZSk7XG4gIH1cbn1cblxuY29uc3QgVE9PTF9ERVNDUklQVElPTl9FTlRSWV9QUkVGSVggPSBcIi0gXCI7XG5jb25zdCBUT09MX0RFU0NSSVBUSU9OX05BTUVfU0VQQVJBVE9SID0gXCI6IFwiO1xuY29uc3QgVE9PTF9ERVNDUklQVElPTl9JTlBVVF9TQ0hFTUFfUFJFRklYID0gXCJcXG4gIGlucHV0U2NoZW1hOiBcIjtcbmNvbnN0IFRPT0xfREVTQ1JJUFRJT05fRU5UUllfU0VQQVJBVE9SID0gXCJcXG5cIjtcblxuZnVuY3Rpb24gYWRkVG9vbE1ldGFkYXRhVXRmOEJ5dGVzKFxuICB0b29sOiBOb25OdWxsYWJsZTxDYWxsZXJTY2hlbWFzSW5wdXRbXCJ0b29sc1wiXT5bbnVtYmVyXSxcbiAgaW5kZXg6IG51bWJlcixcbiAgc3RhdGU6IENvbXBsZXhpdHlTdGF0ZSxcbik6IHZvaWQge1xuICBjb25zdCB0b29sUGF0aCA9IGB0b29sc1ske2luZGV4fV1gO1xuXG4gIC8vIGJ1aWxkVG9vbENhbGxTY2hlbWEgcGxhY2VzIGV2ZXJ5IHRvb2wgbmFtZSBpbiBib3RoIHRoZSBlbnVtIGFuZCB0aGUgaHVtYW4tcmVhZGFibGUgdG9vbFxuICAvLyBkZXNjcmlwdGlvbi4gQ291bnQgYm90aCBlc2NhcGVkIG9jY3VycmVuY2VzLCBwbHVzIHRoZSBlbnVtJ3MgSlNPTiBzdHJpbmcgZGVsaW1pdGVycy5cbiAgY29uc3QgZW5jb2RlZE5hbWVCeXRlcyA9IGpzb25TdHJpbmdDb250ZW50VXRmOEJ5dGVVcHBlckJvdW5kKHRvb2wubmFtZSk7XG4gIGFkZFV0ZjhCeXRlcyhlbmNvZGVkTmFtZUJ5dGVzICogMiArIDIsIGAke3Rvb2xQYXRofS5uYW1lYCwgc3RhdGUpO1xuXG4gIGlmICh0b29sLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBhZGRVdGY4Qnl0ZXMoXG4gICAgICBqc29uU3RyaW5nQ29udGVudFV0ZjhCeXRlVXBwZXJCb3VuZCh0b29sLmRlc2NyaXB0aW9uKSxcbiAgICAgIGAke3Rvb2xQYXRofS5kZXNjcmlwdGlvbmAsXG4gICAgICBzdGF0ZSxcbiAgICApO1xuICB9XG5cbiAgLy8gUGVyLXRvb2wgZnJhbWluZyBhbHNvIGdyb3dzIHdpdGggdGhlIG51bWJlciBvZiB0b29scyBldmVuIHdoZW4gYWxsIGNhbGxlciBzdHJpbmdzIGFyZSBlbXB0eS5cbiAgLy8gSW5jbHVkZSBib3RoIHRoZSB0b29sRGVzY3JpcHRpb25zIGpvaW4gc2VwYXJhdG9yIGFuZCB0aGUgZW51bSBjb21tYSBhZnRlciB0aGUgZmlyc3QgZW50cnkuXG4gIGNvbnN0IGZyYW1pbmdCeXRlcyA9XG4gICAganNvblN0cmluZ0NvbnRlbnRVdGY4Qnl0ZVVwcGVyQm91bmQoVE9PTF9ERVNDUklQVElPTl9FTlRSWV9QUkVGSVgpICtcbiAgICBqc29uU3RyaW5nQ29udGVudFV0ZjhCeXRlVXBwZXJCb3VuZChUT09MX0RFU0NSSVBUSU9OX05BTUVfU0VQQVJBVE9SKSArXG4gICAganNvblN0cmluZ0NvbnRlbnRVdGY4Qnl0ZVVwcGVyQm91bmQoVE9PTF9ERVNDUklQVElPTl9JTlBVVF9TQ0hFTUFfUFJFRklYKSArXG4gICAgKGluZGV4ID09PSAwID8gMCA6IGpzb25TdHJpbmdDb250ZW50VXRmOEJ5dGVVcHBlckJvdW5kKFRPT0xfREVTQ1JJUFRJT05fRU5UUllfU0VQQVJBVE9SKSArIDEpO1xuICBhZGRVdGY4Qnl0ZXMoZnJhbWluZ0J5dGVzLCB0b29sUGF0aCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb25zZXJ2YXRpdmUgVVRGLTggYnl0ZSBjb3VudCBmb3IgYSBzdHJpbmcgd2hlbiBpdCBiZWNvbWVzIEpTT04gc3RyaW5nIGNvbnRlbnQsXG4gKiB3aXRob3V0IGFsbG9jYXRpbmcgdGhlIGVzY2FwZWQgcmVwcmVzZW50YXRpb24uIEpTT04uc3RyaW5naWZ5IHVzZXMgc2hvcnQgdHdvLWJ5dGUgZXNjYXBlcyBmb3JcbiAqIGZpdmUgY29udHJvbCBjaGFyYWN0ZXJzOyBjb3VudGluZyBldmVyeSBjb250cm9sIGNoYXJhY3RlciBhcyBhIHNpeC1ieXRlIGBcXHUwMFhYYCBlc2NhcGUga2VlcHNcbiAqIHRoaXMgYW4gdXBwZXIgYm91bmQgd2hpbGUgYXZvaWRpbmcgYSBzZWNvbmQgbGFyZ2UgdGVtcG9yYXJ5IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24ganNvblN0cmluZ0NvbnRlbnRVdGY4Qnl0ZVVwcGVyQm91bmQodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGxldCBieXRlcyA9IDA7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZhbHVlLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGNvZGVVbml0ID0gdmFsdWUuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICBpZiAoY29kZVVuaXQgPT09IDB4MjIgfHwgY29kZVVuaXQgPT09IDB4NWMpIHtcbiAgICAgIGJ5dGVzICs9IDI7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGNvZGVVbml0IDw9IDB4MWYpIHtcbiAgICAgIGJ5dGVzICs9IDY7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGNvZGVVbml0ID49IDB4ZDgwMCAmJiBjb2RlVW5pdCA8PSAweGRiZmYpIHtcbiAgICAgIGNvbnN0IG5leHRDb2RlVW5pdCA9IHZhbHVlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcbiAgICAgIGlmIChuZXh0Q29kZVVuaXQgPj0gMHhkYzAwICYmIG5leHRDb2RlVW5pdCA8PSAweGRmZmYpIHtcbiAgICAgICAgYnl0ZXMgKz0gNDtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlbGwtZm9ybWVkIEpTT04uc3RyaW5naWZ5IGVzY2FwZXMgbG9uZSBzdXJyb2dhdGVzIGFzIGBcXHVYWFhYYC5cbiAgICAgICAgYnl0ZXMgKz0gNjtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoY29kZVVuaXQgPj0gMHhkYzAwICYmIGNvZGVVbml0IDw9IDB4ZGZmZikge1xuICAgICAgYnl0ZXMgKz0gNjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGJ5dGVzICs9IGNvZGVVbml0IDw9IDB4N2YgPyAxIDogY29kZVVuaXQgPD0gMHg3ZmYgPyAyIDogMztcbiAgfVxuXG4gIHJldHVybiBieXRlcztcbn1cblxuZnVuY3Rpb24gYWRkQ29tcGxleGl0eShcbiAgcm9vdDogdW5rbm93bixcbiAgcGF0aDogc3RyaW5nLFxuICBzdGF0ZTogQ29tcGxleGl0eVN0YXRlLFxuICBwcmVjaGVja1V0ZjhCeXRlcyA9IGZhbHNlLFxuKTogdm9pZCB7XG4gIGNvbnN0IHJhd1V0ZjhCeXRlcyA9IHsgdmFsdWU6IDAgfTtcbiAgaWYgKHByZWNoZWNrVXRmOEJ5dGVzICYmIHR5cGVvZiByb290ID09PSBcInN0cmluZ1wiKSB7XG4gICAgYWRkUmF3VXRmOExvd2VyQm91bmQocm9vdCwgcGF0aCwgc3RhdGUsIHJhd1V0ZjhCeXRlcyk7XG4gIH1cbiAgYWRkTm9kZShwYXRoLCBzdGF0ZSk7XG4gIGlmIChyb290ID09PSBudWxsIHx8IHR5cGVvZiByb290ICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG5cbiAgY29uc3Qgc3RhY2s6IEFycmF5PHsgdmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5rbm93bltdOyBkZXB0aDogbnVtYmVyIH0+ID0gW1xuICAgIHsgdmFsdWU6IHJvb3QgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duW10sIGRlcHRoOiAwIH0sXG4gIF07XG5cbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBjdXJyZW50ID0gc3RhY2sucG9wKCkhO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQudmFsdWUpKSB7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY3VycmVudC52YWx1ZS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgICAgY29uc3QgZGVwdGggPSBjdXJyZW50LmRlcHRoICsgMTtcbiAgICAgICAgYXNzZXJ0RGVwdGhXaXRoaW5MaW1pdChkZXB0aCwgcGF0aCk7XG4gICAgICAgIGFkZE5vZGUocGF0aCwgc3RhdGUpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkID0gY3VycmVudC52YWx1ZVtpbmRleF07XG4gICAgICAgIGlmIChwcmVjaGVja1V0ZjhCeXRlcyAmJiB0eXBlb2YgY2hpbGQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBhZGRSYXdVdGY4TG93ZXJCb3VuZChjaGlsZCwgcGF0aCwgc3RhdGUsIHJhd1V0ZjhCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsICYmIHR5cGVvZiBjaGlsZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHN0YWNrLnB1c2goeyB2YWx1ZTogY2hpbGQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duW10sIGRlcHRoIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjdXJyZW50LnZhbHVlKSB7XG4gICAgICBpZiAoIU9iamVjdC5oYXNPd24oY3VycmVudC52YWx1ZSwga2V5KSkgY29udGludWU7XG4gICAgICBpZiAocHJlY2hlY2tVdGY4Qnl0ZXMpIHtcbiAgICAgICAgYWRkUmF3VXRmOExvd2VyQm91bmQoa2V5LCBwYXRoLCBzdGF0ZSwgcmF3VXRmOEJ5dGVzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlcHRoID0gY3VycmVudC5kZXB0aCArIDE7XG4gICAgICBhc3NlcnREZXB0aFdpdGhpbkxpbWl0KGRlcHRoLCBwYXRoKTtcbiAgICAgIGFkZE5vZGUocGF0aCwgc3RhdGUpO1xuXG4gICAgICBjb25zdCBjaGlsZCA9IGN1cnJlbnQudmFsdWVba2V5XTtcbiAgICAgIGlmIChwcmVjaGVja1V0ZjhCeXRlcyAmJiB0eXBlb2YgY2hpbGQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYWRkUmF3VXRmOExvd2VyQm91bmQoY2hpbGQsIHBhdGgsIHN0YXRlLCByYXdVdGY4Qnl0ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkICE9PSBudWxsICYmIHR5cGVvZiBjaGlsZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBzdGFjay5wdXNoKHsgdmFsdWU6IGNoaWxkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5rbm93bltdLCBkZXB0aCB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkUmF3VXRmOExvd2VyQm91bmQoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbiAgc3RhdGU6IENvbXBsZXhpdHlTdGF0ZSxcbiAgcmF3VXRmOEJ5dGVzOiB7IHZhbHVlOiBudW1iZXIgfSxcbik6IHZvaWQge1xuICByYXdVdGY4Qnl0ZXMudmFsdWUgKz0gQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUsIFwidXRmOFwiKTtcbiAgaWYgKHN0YXRlLnV0ZjhCeXRlcyArIHJhd1V0ZjhCeXRlcy52YWx1ZSA+IENBTExFUl9TQ0hFTUFfTElNSVRTLm1heFV0ZjhCeXRlcykge1xuICAgIHRocm93TGltaXRFcnJvcihwYXRoLCBcIlVURi04IGJ5dGVcIiwgQ0FMTEVSX1NDSEVNQV9MSU1JVFMubWF4VXRmOEJ5dGVzLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0RGVwdGhXaXRoaW5MaW1pdChkZXB0aDogbnVtYmVyLCBwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGRlcHRoID4gQ0FMTEVSX1NDSEVNQV9MSU1JVFMubWF4RGVwdGgpIHtcbiAgICB0aHJvdyBuZXcgQ2FsbGVyU2NoZW1hVmFsaWRhdGlvbkVycm9yKFxuICAgICAgYCR7cGF0aH0gZXhjZWVkcyBkZXB0aCBsaW1pdCBvZiAke0NBTExFUl9TQ0hFTUFfTElNSVRTLm1heERlcHRofWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGROb2RlKHBhdGg6IHN0cmluZywgc3RhdGU6IENvbXBsZXhpdHlTdGF0ZSk6IHZvaWQge1xuICBzdGF0ZS5ub2RlcyArPSAxO1xuICBpZiAoc3RhdGUubm9kZXMgPiBDQUxMRVJfU0NIRU1BX0xJTUlUUy5tYXhOb2Rlcykge1xuICAgIHRocm93TGltaXRFcnJvcihwYXRoLCBcIm5vZGVcIiwgQ0FMTEVSX1NDSEVNQV9MSU1JVFMubWF4Tm9kZXMsIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0xpbWl0RXJyb3IoXG4gIHBhdGg6IHN0cmluZyxcbiAga2luZDogXCJVVEYtOCBieXRlXCIgfCBcIm5vZGVcIixcbiAgbGltaXQ6IG51bWJlcixcbiAgc3RhdGU6IENvbXBsZXhpdHlTdGF0ZSxcbik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IENhbGxlclNjaGVtYVZhbGlkYXRpb25FcnJvcihcbiAgICBzdGF0ZS5zY2hlbWFzID09PSAwXG4gICAgICA/IGAke3BhdGh9IGV4Y2VlZHMgJHtraW5kfSBsaW1pdCBvZiAke2xpbWl0fWBcbiAgICAgIDogYGNhbGxlciBzY2hlbWFzIGV4Y2VlZCBhZ2dyZWdhdGUgJHtraW5kfSBsaW1pdCBvZiAke2xpbWl0fWAsXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzUmVjb3JkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVNBLE1BQWEsdUJBQXVCO0NBQ2xDLGNBQWMsTUFBTTtDQUNwQixVQUFVO0NBQ1YsVUFBVTtBQUNaO0FBS0EsTUFBYSwyQkFBMkIsS0FBSztBQUM3QyxN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
178
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXZhbGlkYXRpb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vc2NoZW1hLXZhbGlkYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIm5vZGU6YnVmZmVyXCI7XG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4vcHJvdmlkZXItdHlwZXNcIjtcblxuLyoqXG4gKiBDYWxsZXItcHJvdmlkZWQgc2NoZW1hcyBhcmUgc2VyaWFsaXplZCwgY29waWVkLCBhbmQgcmVjdXJzaXZlbHkgbm9ybWFsaXplZCBiZWZvcmUgZGlzcGF0Y2guXG4gKiBLZWVwIHRoZXNlIGxpbWl0cyBjb21mb3J0YWJseSBhYm92ZSBub3JtYWwgZ2VuZXJhdGVkIHNjaGVtYXMgd2hpbGUgYm91bmRpbmcgdGhhdCBwcmVwcm9jZXNzaW5nXG4gKiB3ZWxsIGJlbG93IHRoZSBBUEkncyAxMCBNaUIgcmVxdWVzdC1ib2R5IGNlaWxpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBDQUxMRVJfU0NIRU1BX0xJTUlUUyA9IHtcbiAgbWF4VXRmOEJ5dGVzOiA1MTIgKiAxMDI0LFxuICBtYXhOb2RlczogMjBfMDAwLFxuICBtYXhEZXB0aDogMTI4LFxufSBhcyBjb25zdDtcblxuLy8gTGludXggcGVybWl0cyBhdCBtb3N0IDEyOCBLaUIgKE1BWF9BUkdfU1RSTEVOKSBmb3Igb25lIGFyZ3YgdmFsdWUuIHFncmlkIHVzZXMgYSA1MCUgc2FmZXR5XG4vLyBtYXJnaW4gZm9yIGV2ZXJ5IGFyZ3YtZGVsaXZlcmVkIHBheWxvYWQg4oCUIENsYXVkZSBDb2RlIC0tanNvbi1zY2hlbWEgaGVyZSBhbmQgdGhlIHN5c3RlbS1wcm9tcHRcbi8vIHRyYW5zcG9ydCAoY2xhdWRlLXNlc3Npb24pIGJvdGggZGVyaXZlIGZyb20gdGhpcyBzaW5nbGUgY29uc3RhbnQuXG5leHBvcnQgY29uc3QgQVJHVl9TQUZFX01BWF9VVEY4X0JZVEVTID0gNjQgKiAxMDI0O1xuZXhwb3J0IGNvbnN0IEFOVEhST1BJQ19TQ0hFTUFfQVJHVl9NQVhfVVRGOF9CWVRFUyA9IEFSR1ZfU0FGRV9NQVhfVVRGOF9CWVRFUztcblxuZXhwb3J0IGNsYXNzIENhbGxlclNjaGVtYVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYHFncmlkOiAke21lc3NhZ2V9YCk7XG4gICAgdGhpcy5uYW1lID0gXCJDYWxsZXJTY2hlbWFWYWxpZGF0aW9uRXJyb3JcIjtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGxlclNjaGVtYXNJbnB1dCB7XG4gIGpzb25TY2hlbWE/OiBzdHJpbmc7XG4gIHRvb2xzPzogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nOyBpbnB1dFNjaGVtYTogdW5rbm93biB9Pjtcbn1cblxuaW50ZXJmYWNlIENvbXBsZXhpdHlTdGF0ZSB7XG4gIHV0ZjhCeXRlczogbnVtYmVyO1xuICBub2RlczogbnVtYmVyO1xuICBzY2hlbWFzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFuZFZhbGlkYXRlQ2FsbGVyU2NoZW1hcyhpbnB1dDogQ2FsbGVyU2NoZW1hc0lucHV0KTogSnNvblZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3RhdGU6IENvbXBsZXhpdHlTdGF0ZSA9IHtcbiAgICB1dGY4Qnl0ZXM6IDAsXG4gICAgbm9kZXM6IDAsXG4gICAgc2NoZW1hczogMCxcbiAgfTtcbiAgbGV0IG91dHB1dFNjaGVtYTogSnNvblZhbHVlIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChpbnB1dC5qc29uU2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICBhZGRVdGY4Qnl0ZXMoQnVmZmVyLmJ5dGVMZW5ndGgoaW5wdXQuanNvblNjaGVtYSwgXCJ1dGY4XCIpLCBcImpzb25TY2hlbWFcIiwgc3RhdGUpO1xuXG4gICAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShpbnB1dC5qc29uU2NoZW1hKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBDYWxsZXJTY2hlbWFWYWxpZGF0aW9uRXJyb3IoXCJqc29uU2NoZW1hIG11c3QgY29udGFpbiB2YWxpZCBKU09OXCIpO1xuICAgIH1cblxuICAgIGlmICghaXNSZWNvcmQocGFyc2VkKSB8fCBwYXJzZWQudHlwZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IENhbGxlclNjaGVtYVZhbGlkYXRpb25FcnJvcignanNvblNjaGVtYSB0b3AtbGV2ZWwgdHlwZSBtdXN0IGJlIFwib2JqZWN0XCInKTtcbiAgICB9XG5cbiAgICBhZGRDb21wbGV4aXR5KHBhcnNlZCwgXCJqc29uU2NoZW1hXCIsIHN0YXRlKTtcbiAgICBzdGF0ZS5zY2hlbWFzICs9IDE7XG4gICAgb3V0cHV0U2NoZW1hID0gcGFyc2VkIGFzIEpzb25WYWx1ZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCB0b29sXSBvZiAoaW5wdXQudG9vbHMgPz8gW10pLmVudHJpZXMoKSkge1xuICAgIGFkZFRvb2xNZXRhZGF0YVV0ZjhCeXRlcyh0b29sLCBpbmRleCwgc3RhdGUpO1xuXG4gICAgY29uc3QgcGF0aCA9IGB0b29sc1ske2luZGV4fV0uaW5wdXRTY2hlbWFgO1xuICAgIGFkZENvbXBsZXhpdHkodG9vbC5pbnB1dFNjaGVtYSwgcGF0aCwgc3RhdGUsIHRydWUpO1xuXG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHN0cmluZ2lmeUpzb25PclRocm93KHRvb2wuaW5wdXRTY2hlbWEsIHBhdGgpO1xuXG4gICAgLy8gYnVpbGRUb29sQ2FsbFNjaGVtYSBlbWJlZHMgdGhpcyBzZXJpYWxpemF0aW9uIGluc2lkZSBhbm90aGVyIEpTT04gc3RyaW5nLiBDaGFyZ2UgdGhlXG4gICAgLy8gZXNjYXBlZCBvdXRlci1zdHJpbmcgcmVwcmVzZW50YXRpb24gYmVmb3JlIHRoYXQgY29tcG9zZWQgZGVzY3JpcHRpb24gaXMgbWF0ZXJpYWxpemVkLlxuICAgIGFkZFV0ZjhCeXRlcyhqc29uU3RyaW5nQ29udGVudFV0ZjhCeXRlVXBwZXJCb3VuZChzZXJpYWxpemVkKSwgcGF0aCwgc3RhdGUpO1xuICAgIHN0YXRlLnNjaGVtYXMgKz0gMTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXRTY2hlbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVBbmRWYWxpZGF0ZURpc3BhdGNoU2NoZW1hKFxuICBzY2hlbWE6IHVua25vd24sXG4gIHByb3ZpZGVyPzogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHNjaGVtYSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBzdHJpbmdpZnlKc29uT3JUaHJvdyhzY2hlbWEsIFwiZGlzcGF0Y2ggc2NoZW1hXCIpO1xuXG4gIGNvbnN0IGJ5dGVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChzZXJpYWxpemVkLCBcInV0ZjhcIik7XG4gIGlmIChieXRlTGVuZ3RoID4gQ0FMTEVSX1NDSEVNQV9MSU1JVFMubWF4VXRmOEJ5dGVzKSB7XG4gICAgdGhyb3cgbmV3IENhbGxlclNjaGVtYVZhbGlkYXRpb25FcnJvcihcbiAgICAgIGBkaXNwYXRjaCBzY2hlbWEgZXhjZWVkcyBVVEYtOCBieXRlIGxpbWl0IG9mICR7Q0FMTEVSX1NDSEVNQV9MSU1JVFMubWF4VXRmOEJ5dGVzfWAsXG4gICAgKTtcbiAgfVxuICBpZiAocHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCIpIHtcbiAgICBhc3NlcnRBbnRocm9waWNTY2hlbWFBcmd2U2l6ZShzZXJpYWxpemVkKTtcbiAgfVxuXG4gIHJldHVybiBzZXJpYWxpemVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QW50aHJvcGljU2NoZW1hQXJndlNpemUoanNvblNjaGVtYTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChCdWZmZXIuYnl0ZUxlbmd0aChqc29uU2NoZW1hLCBcInV0ZjhcIikgPiBBTlRIUk9QSUNfU0NIRU1BX0FSR1ZfTUFYX1VURjhfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgQ2FsbGVyU2NoZW1hVmFsaWRhdGlvbkVycm9yKFxuICAgICAgYEFudGhyb3BpYyBkaXNwYXRjaCBzY2hlbWEgZXhjZWVkcyBhcmd2IFVURi04IGJ5dGUgbGltaXQgb2YgJHtBTlRIUk9QSUNfU0NIRU1BX0FSR1ZfTUFYX1VURjhfQllURVN9YCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUpzb25PclRocm93KHZhbHVlOiB1bmtub3duLCBzdWJqZWN0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgc2VyaWFsaXplZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHNlcmlhbGl6ZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBDYWxsZXJTY2hlbWFWYWxpZGF0aW9uRXJyb3IoYCR7c3ViamVjdH0gbXVzdCBiZSBKU09OLXNlcmlhbGl6YWJsZWApO1xuICB9XG4gIGlmIChzZXJpYWxpemVkID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FsbGVyU2NoZW1hVmFsaWRhdGlvbkVycm9yKGAke3N1YmplY3R9IG11c3QgYmUgSlNPTi1zZXJpYWxpemFibGVgKTtcbiAgfVxuICByZXR1cm4gc2VyaWFsaXplZDtcbn1cblxuZnVuY3Rpb24gYWRkVXRmOEJ5dGVzKGJ5dGVMZW5ndGg6IG51bWJlciwgcGF0aDogc3RyaW5nLCBzdGF0ZTogQ29tcGxleGl0eVN0YXRlKTogdm9pZCB7XG4gIHN0YXRlLnV0ZjhCeXRlcyArPSBieXRlTGVuZ3RoO1xuICBpZiAoc3RhdGUudXRmOEJ5dGVzID4gQ0FMTEVSX1NDSEVNQV9MSU1JVFMubWF4VXRmOEJ5dGVzKSB7XG4gICAgdGhyb3dMaW1pdEVycm9yKHBhdGgsIFwiVVRGLTggYnl0ZVwiLCBDQUxMRVJfU0NIRU1BX0xJTUlUUy5tYXhVdGY4Qnl0ZXMsIHN0YXRlKTtcbiAgfVxufVxuXG5jb25zdCBUT09MX0RFU0NSSVBUSU9OX0VOVFJZX1BSRUZJWCA9IFwiLSBcIjtcbmNvbnN0IFRPT0xfREVTQ1JJUFRJT05fTkFNRV9TRVBBUkFUT1IgPSBcIjogXCI7XG5jb25zdCBUT09MX0RFU0NSSVBUSU9OX0lOUFVUX1NDSEVNQV9QUkVGSVggPSBcIlxcbiAgaW5wdXRTY2hlbWE6IFwiO1xuY29uc3QgVE9PTF9ERVNDUklQVElPTl9FTlRSWV9TRVBBUkFUT1IgPSBcIlxcblwiO1xuXG5mdW5jdGlvbiBhZGRUb29sTWV0YWRhdGFVdGY4Qnl0ZXMoXG4gIHRvb2w6IE5vbk51bGxhYmxlPENhbGxlclNjaGVtYXNJbnB1dFtcInRvb2xzXCJdPltudW1iZXJdLFxuICBpbmRleDogbnVtYmVyLFxuICBzdGF0ZTogQ29tcGxleGl0eVN0YXRlLFxuKTogdm9pZCB7XG4gIGNvbnN0IHRvb2xQYXRoID0gYHRvb2xzWyR7aW5kZXh9XWA7XG5cbiAgLy8gYnVpbGRUb29sQ2FsbFNjaGVtYSBwbGFjZXMgZXZlcnkgdG9vbCBuYW1lIGluIGJvdGggdGhlIGVudW0gYW5kIHRoZSBodW1hbi1yZWFkYWJsZSB0b29sXG4gIC8vIGRlc2NyaXB0aW9uLiBDb3VudCBib3RoIGVzY2FwZWQgb2NjdXJyZW5jZXMsIHBsdXMgdGhlIGVudW0ncyBKU09OIHN0cmluZyBkZWxpbWl0ZXJzLlxuICBjb25zdCBlbmNvZGVkTmFtZUJ5dGVzID0ganNvblN0cmluZ0NvbnRlbnRVdGY4Qnl0ZVVwcGVyQm91bmQodG9vbC5uYW1lKTtcbiAgYWRkVXRmOEJ5dGVzKGVuY29kZWROYW1lQnl0ZXMgKiAyICsgMiwgYCR7dG9vbFBhdGh9Lm5hbWVgLCBzdGF0ZSk7XG5cbiAgaWYgKHRvb2wuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIGFkZFV0ZjhCeXRlcyhcbiAgICAgIGpzb25TdHJpbmdDb250ZW50VXRmOEJ5dGVVcHBlckJvdW5kKHRvb2wuZGVzY3JpcHRpb24pLFxuICAgICAgYCR7dG9vbFBhdGh9LmRlc2NyaXB0aW9uYCxcbiAgICAgIHN0YXRlLFxuICAgICk7XG4gIH1cblxuICAvLyBQZXItdG9vbCBmcmFtaW5nIGFsc28gZ3Jvd3Mgd2l0aCB0aGUgbnVtYmVyIG9mIHRvb2xzIGV2ZW4gd2hlbiBhbGwgY2FsbGVyIHN0cmluZ3MgYXJlIGVtcHR5LlxuICAvLyBJbmNsdWRlIGJvdGggdGhlIHRvb2xEZXNjcmlwdGlvbnMgam9pbiBzZXBhcmF0b3IgYW5kIHRoZSBlbnVtIGNvbW1hIGFmdGVyIHRoZSBmaXJzdCBlbnRyeS5cbiAgY29uc3QgZnJhbWluZ0J5dGVzID1cbiAgICBqc29uU3RyaW5nQ29udGVudFV0ZjhCeXRlVXBwZXJCb3VuZChUT09MX0RFU0NSSVBUSU9OX0VOVFJZX1BSRUZJWCkgK1xuICAgIGpzb25TdHJpbmdDb250ZW50VXRmOEJ5dGVVcHBlckJvdW5kKFRPT0xfREVTQ1JJUFRJT05fTkFNRV9TRVBBUkFUT1IpICtcbiAgICBqc29uU3RyaW5nQ29udGVudFV0ZjhCeXRlVXBwZXJCb3VuZChUT09MX0RFU0NSSVBUSU9OX0lOUFVUX1NDSEVNQV9QUkVGSVgpICtcbiAgICAoaW5kZXggPT09IDAgPyAwIDoganNvblN0cmluZ0NvbnRlbnRVdGY4Qnl0ZVVwcGVyQm91bmQoVE9PTF9ERVNDUklQVElPTl9FTlRSWV9TRVBBUkFUT1IpICsgMSk7XG4gIGFkZFV0ZjhCeXRlcyhmcmFtaW5nQnl0ZXMsIHRvb2xQYXRoLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvbnNlcnZhdGl2ZSBVVEYtOCBieXRlIGNvdW50IGZvciBhIHN0cmluZyB3aGVuIGl0IGJlY29tZXMgSlNPTiBzdHJpbmcgY29udGVudCxcbiAqIHdpdGhvdXQgYWxsb2NhdGluZyB0aGUgZXNjYXBlZCByZXByZXNlbnRhdGlvbi4gSlNPTi5zdHJpbmdpZnkgdXNlcyBzaG9ydCB0d28tYnl0ZSBlc2NhcGVzIGZvclxuICogZml2ZSBjb250cm9sIGNoYXJhY3RlcnM7IGNvdW50aW5nIGV2ZXJ5IGNvbnRyb2wgY2hhcmFjdGVyIGFzIGEgc2l4LWJ5dGUgYFxcdTAwWFhgIGVzY2FwZSBrZWVwc1xuICogdGhpcyBhbiB1cHBlciBib3VuZCB3aGlsZSBhdm9pZGluZyBhIHNlY29uZCBsYXJnZSB0ZW1wb3Jhcnkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBqc29uU3RyaW5nQ29udGVudFV0ZjhCeXRlVXBwZXJCb3VuZCh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgbGV0IGJ5dGVzID0gMDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWUubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgY29kZVVuaXQgPSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAgIGlmIChjb2RlVW5pdCA9PT0gMHgyMiB8fCBjb2RlVW5pdCA9PT0gMHg1Yykge1xuICAgICAgYnl0ZXMgKz0gMjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoY29kZVVuaXQgPD0gMHgxZikge1xuICAgICAgYnl0ZXMgKz0gNjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoY29kZVVuaXQgPj0gMHhkODAwICYmIGNvZGVVbml0IDw9IDB4ZGJmZikge1xuICAgICAgY29uc3QgbmV4dENvZGVVbml0ID0gdmFsdWUuY2hhckNvZGVBdChpbmRleCArIDEpO1xuICAgICAgaWYgKG5leHRDb2RlVW5pdCA+PSAweGRjMDAgJiYgbmV4dENvZGVVbml0IDw9IDB4ZGZmZikge1xuICAgICAgICBieXRlcyArPSA0O1xuICAgICAgICBpbmRleCArPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2VsbC1mb3JtZWQgSlNPTi5zdHJpbmdpZnkgZXNjYXBlcyBsb25lIHN1cnJvZ2F0ZXMgYXMgYFxcdVhYWFhgLlxuICAgICAgICBieXRlcyArPSA2O1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChjb2RlVW5pdCA+PSAweGRjMDAgJiYgY29kZVVuaXQgPD0gMHhkZmZmKSB7XG4gICAgICBieXRlcyArPSA2O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYnl0ZXMgKz0gY29kZVVuaXQgPD0gMHg3ZiA/IDEgOiBjb2RlVW5pdCA8PSAweDdmZiA/IDIgOiAzO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5mdW5jdGlvbiBhZGRDb21wbGV4aXR5KFxuICByb290OiB1bmtub3duLFxuICBwYXRoOiBzdHJpbmcsXG4gIHN0YXRlOiBDb21wbGV4aXR5U3RhdGUsXG4gIHByZWNoZWNrVXRmOEJ5dGVzID0gZmFsc2UsXG4pOiB2b2lkIHtcbiAgY29uc3QgcmF3VXRmOEJ5dGVzID0geyB2YWx1ZTogMCB9O1xuICBpZiAocHJlY2hlY2tVdGY4Qnl0ZXMgJiYgdHlwZW9mIHJvb3QgPT09IFwic3RyaW5nXCIpIHtcbiAgICBhZGRSYXdVdGY4TG93ZXJCb3VuZChyb290LCBwYXRoLCBzdGF0ZSwgcmF3VXRmOEJ5dGVzKTtcbiAgfVxuICBhZGROb2RlKHBhdGgsIHN0YXRlKTtcbiAgaWYgKHJvb3QgPT09IG51bGwgfHwgdHlwZW9mIHJvb3QgIT09IFwib2JqZWN0XCIpIHJldHVybjtcblxuICBjb25zdCBzdGFjazogQXJyYXk8eyB2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duW107IGRlcHRoOiBudW1iZXIgfT4gPSBbXG4gICAgeyB2YWx1ZTogcm9vdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVua25vd25bXSwgZGVwdGg6IDAgfSxcbiAgXTtcblxuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBzdGFjay5wb3AoKSE7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudC52YWx1ZSkpIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjdXJyZW50LnZhbHVlLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgICBjb25zdCBkZXB0aCA9IGN1cnJlbnQuZGVwdGggKyAxO1xuICAgICAgICBhc3NlcnREZXB0aFdpdGhpbkxpbWl0KGRlcHRoLCBwYXRoKTtcbiAgICAgICAgYWRkTm9kZShwYXRoLCBzdGF0ZSk7XG5cbiAgICAgICAgY29uc3QgY2hpbGQgPSBjdXJyZW50LnZhbHVlW2luZGV4XTtcbiAgICAgICAgaWYgKHByZWNoZWNrVXRmOEJ5dGVzICYmIHR5cGVvZiBjaGlsZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGFkZFJhd1V0ZjhMb3dlckJvdW5kKGNoaWxkLCBwYXRoLCBzdGF0ZSwgcmF3VXRmOEJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgdHlwZW9mIGNoaWxkID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7IHZhbHVlOiBjaGlsZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVua25vd25bXSwgZGVwdGggfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGN1cnJlbnQudmFsdWUpIHtcbiAgICAgIGlmICghT2JqZWN0Lmhhc093bihjdXJyZW50LnZhbHVlLCBrZXkpKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmVjaGVja1V0ZjhCeXRlcykge1xuICAgICAgICBhZGRSYXdVdGY4TG93ZXJCb3VuZChrZXksIHBhdGgsIHN0YXRlLCByYXdVdGY4Qnl0ZXMpO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVwdGggPSBjdXJyZW50LmRlcHRoICsgMTtcbiAgICAgIGFzc2VydERlcHRoV2l0aGluTGltaXQoZGVwdGgsIHBhdGgpO1xuICAgICAgYWRkTm9kZShwYXRoLCBzdGF0ZSk7XG5cbiAgICAgIGNvbnN0IGNoaWxkID0gY3VycmVudC52YWx1ZVtrZXldO1xuICAgICAgaWYgKHByZWNoZWNrVXRmOEJ5dGVzICYmIHR5cGVvZiBjaGlsZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBhZGRSYXdVdGY4TG93ZXJCb3VuZChjaGlsZCwgcGF0aCwgc3RhdGUsIHJhd1V0ZjhCeXRlcyk7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgdHlwZW9mIGNoaWxkID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHN0YWNrLnB1c2goeyB2YWx1ZTogY2hpbGQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duW10sIGRlcHRoIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRSYXdVdGY4TG93ZXJCb3VuZChcbiAgdmFsdWU6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICBzdGF0ZTogQ29tcGxleGl0eVN0YXRlLFxuICByYXdVdGY4Qnl0ZXM6IHsgdmFsdWU6IG51bWJlciB9LFxuKTogdm9pZCB7XG4gIHJhd1V0ZjhCeXRlcy52YWx1ZSArPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSwgXCJ1dGY4XCIpO1xuICBpZiAoc3RhdGUudXRmOEJ5dGVzICsgcmF3VXRmOEJ5dGVzLnZhbHVlID4gQ0FMTEVSX1NDSEVNQV9MSU1JVFMubWF4VXRmOEJ5dGVzKSB7XG4gICAgdGhyb3dMaW1pdEVycm9yKHBhdGgsIFwiVVRGLTggYnl0ZVwiLCBDQUxMRVJfU0NIRU1BX0xJTUlUUy5tYXhVdGY4Qnl0ZXMsIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnREZXB0aFdpdGhpbkxpbWl0KGRlcHRoOiBudW1iZXIsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZGVwdGggPiBDQUxMRVJfU0NIRU1BX0xJTUlUUy5tYXhEZXB0aCkge1xuICAgIHRocm93IG5ldyBDYWxsZXJTY2hlbWFWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgJHtwYXRofSBleGNlZWRzIGRlcHRoIGxpbWl0IG9mICR7Q0FMTEVSX1NDSEVNQV9MSU1JVFMubWF4RGVwdGh9YCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZE5vZGUocGF0aDogc3RyaW5nLCBzdGF0ZTogQ29tcGxleGl0eVN0YXRlKTogdm9pZCB7XG4gIHN0YXRlLm5vZGVzICs9IDE7XG4gIGlmIChzdGF0ZS5ub2RlcyA+IENBTExFUl9TQ0hFTUFfTElNSVRTLm1heE5vZGVzKSB7XG4gICAgdGhyb3dMaW1pdEVycm9yKHBhdGgsIFwibm9kZVwiLCBDQUxMRVJfU0NIRU1BX0xJTUlUUy5tYXhOb2Rlcywgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93TGltaXRFcnJvcihcbiAgcGF0aDogc3RyaW5nLFxuICBraW5kOiBcIlVURi04IGJ5dGVcIiB8IFwibm9kZVwiLFxuICBsaW1pdDogbnVtYmVyLFxuICBzdGF0ZTogQ29tcGxleGl0eVN0YXRlLFxuKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgQ2FsbGVyU2NoZW1hVmFsaWRhdGlvbkVycm9yKFxuICAgIHN0YXRlLnNjaGVtYXMgPT09IDBcbiAgICAgID8gYCR7cGF0aH0gZXhjZWVkcyAke2tpbmR9IGxpbWl0IG9mICR7bGltaXR9YFxuICAgICAgOiBgY2FsbGVyIHNjaGVtYXMgZXhjZWVkIGFnZ3JlZ2F0ZSAke2tpbmR9IGxpbWl0IG9mICR7bGltaXR9YCxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNSZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBU0EsTUFBYSx1QkFBdUI7Q0FDbEMsY0FBYyxNQUFNO0NBQ3BCLFVBQVU7Q0FDVixVQUFVO0FBQ1o7QUFLQSxNQUFhLDJCQUEyQixLQUFLO0FBQzdDLE1BQWEsdUNBQXVDO0FBRXBELElBQWEsOEJBQWIsY0FBaUQsTUFBTTtDQUNyRCxZQUFZLFNBQWlCO0VBQzNCLE1BQU0sVUFBVSxTQUFTO0VBQ3pCLEtBQUssT0FBTztDQUNkO0FBQ0Y7QUFhQSxTQUFnQiw4QkFBOEIsT0FBa0Q7Q0FDOUYsTUFBTSxRQUF5QjtFQUM3QixXQUFXO0VBQ1gsT0FBTztFQUNQLFNBQVM7Q0FDWDtDQUNBLElBQUk7Q0FFSixJQUFJLE1BQU0sZUFBZSxRQUFXO0VBQ2xDLGFBQWEsT0FBTyxXQUFXLE1BQU0sWUFBWSxNQUFNLEdBQUcsY0FBYyxLQUFLO0VBRTdFLElBQUk7RUFDSixJQUFJO0dBQ0YsU0FBUyxLQUFLLE1BQU0sTUFBTSxVQUFVO0VBQ3RDLFFBQVE7R0FDTixNQUFNLElBQUksNEJBQTRCLG9DQUFvQztFQUM1RTtFQUVBLElBQUksQ0FBQyxTQUFTLE1BQU0sS0FBSyxPQUFPLFNBQVMsVUFDdkMsTUFBTSxJQUFJLDRCQUE0Qiw4Q0FBNEM7RUFHcEYsY0FBYyxRQUFRLGNBQWMsS0FBSztFQUN6QyxNQUFNLFdBQVc7RUFDakIsZUFBZTtDQUNqQjtDQUVBLEtBQUssTUFBTSxDQUFDLE9BQU8sVUFBVSxNQUFNLFNBQVMsQ0FBQyxFQUFBLENBQUcsUUFBUSxHQUFHO0VBQ3pELHlCQUF5QixNQUFNLE9BQU8sS0FBSztFQUUzQyxNQUFNLE9BQU8sU0FBUyxNQUFNO0VBQzVCLGNBQWMsS0FBSyxhQUFhLE1BQU0sT0FBTyxJQUFJO0VBTWpELGFBQWEsb0NBSk0scUJBQXFCLEtBQUssYUFBYSxJQUlULENBQVUsR0FBRyxNQUFNLEtBQUs7RUFDekUsTUFBTSxXQUFXO0NBQ25CO0NBRUEsT0FBTztBQUNUO0FBRUEsU0FBZ0IsbUNBQ2QsUUFDQSxVQUNvQjtDQUNwQixJQUFJLFdBQVcsUUFBVyxPQUFPO0NBRWpDLE1BQU0sYUFBYSxxQkFBcUIsUUFBUSxpQkFBaUI7Q0FHakUsSUFEbUIsT0FBTyxXQUFXLFlBQVksTUFDN0MsSUFBYSxxQkFBcUIsY0FDcEMsTUFBTSxJQUFJLDRCQUNSLCtDQUErQyxxQkFBcUIsY0FDdEU7Q0FFRixJQUFJLGFBQWEsYUFDZiw4QkFBOEIsVUFBVTtDQUcxQyxPQUFPO0FBQ1Q7QUFFQSxTQUFnQiw4QkFBOEIsWUFBMEI7Q0FDdEUsSUFBSSxPQUFPLFdBQVcsWUFBWSxNQUFNLElBQUEsT0FDdEMsTUFBTSxJQUFJLDRCQUNSLDhEQUE4RCxzQ0FDaEU7QUFFSjtBQUVBLFNBQVMscUJBQXFCLE9BQWdCLFNBQXlCO0NBQ3JFLElBQUk7Q0FDSixJQUFJO0VBQ0YsYUFBYSxLQUFLLFVBQVUsS0FBSztDQUNuQyxRQUFRO0VBQ04sTUFBTSxJQUFJLDRCQUE0QixHQUFHLFFBQVEsMkJBQTJCO0NBQzlFO0NBQ0EsSUFBSSxlQUFlLFFBQ2pCLE1BQU0sSUFBSSw0QkFBNEIsR0FBRyxRQUFRLDJCQUEyQjtDQUU5RSxPQUFPO0FBQ1Q7QUFFQSxTQUFTLGFBQWEsWUFBb0IsTUFBYyxPQUE4QjtDQUNwRixNQUFNLGFBQWE7Q0FDbkIsSUFBSSxNQUFNLFlBQVkscUJBQXFCLGNBQ3pDLGdCQUFnQixNQUFNLGNBQWMscUJBQXFCLGNBQWMsS0FBSztBQUVoRjtBQUVBLE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sa0NBQWtDO0FBQ3hDLE1BQU0sdUNBQXVDO0FBQzdDLE1BQU0sbUNBQW1DO0FBRXpDLFNBQVMseUJBQ1AsTUFDQSxPQUNBLE9BQ007Q0FDTixNQUFNLFdBQVcsU0FBUyxNQUFNO0NBS2hDLGFBRHlCLG9DQUFvQyxLQUFLLElBQ3JELElBQW1CLElBQUksR0FBRyxHQUFHLFNBQVMsUUFBUSxLQUFLO0NBRWhFLElBQUksS0FBSyxnQkFBZ0IsUUFDdkIsYUFDRSxvQ0FBb0MsS0FBSyxXQUFXLEdBQ3BELEdBQUcsU0FBUyxlQUNaLEtBQ0Y7Q0FVRixhQUpFLG9DQUFvQyw2QkFBNkIsSUFDakUsb0NBQW9DLCtCQUErQixJQUNuRSxvQ0FBb0Msb0NBQW9DLEtBQ3ZFLFVBQVUsSUFBSSxJQUFJLG9DQUFvQyxnQ0FBZ0MsSUFBSSxJQUNsRSxVQUFVLEtBQUs7QUFDNUM7Ozs7Ozs7QUFRQSxTQUFTLG9DQUFvQyxPQUF1QjtDQUNsRSxJQUFJLFFBQVE7Q0FFWixLQUFLLElBQUksUUFBUSxHQUFHLFFBQVEsTUFBTSxRQUFRLFNBQVMsR0FBRztFQUNwRCxNQUFNLFdBQVcsTUFBTSxXQUFXLEtBQUs7RUFFdkMsSUFBSSxhQUFhLE1BQVEsYUFBYSxJQUFNO0dBQzFDLFNBQVM7R0FDVDtFQUNGO0VBQ0EsSUFBSSxZQUFZLElBQU07R0FDcEIsU0FBUztHQUNUO0VBQ0Y7RUFDQSxJQUFJLFlBQVksU0FBVSxZQUFZLE9BQVE7R0FDNUMsTUFBTSxlQUFlLE1BQU0sV0FBVyxRQUFRLENBQUM7R0FDL0MsSUFBSSxnQkFBZ0IsU0FBVSxnQkFBZ0IsT0FBUTtJQUNwRCxTQUFTO0lBQ1QsU0FBUztHQUNYLE9BRUUsU0FBUztHQUVYO0VBQ0Y7RUFDQSxJQUFJLFlBQVksU0FBVSxZQUFZLE9BQVE7R0FDNUMsU0FBUztHQUNUO0VBQ0Y7RUFFQSxTQUFTLFlBQVksTUFBTyxJQUFJLFlBQVksT0FBUSxJQUFJO0NBQzFEO0NBRUEsT0FBTztBQUNUO0FBRUEsU0FBUyxjQUNQLE1BQ0EsTUFDQSxPQUNBLG9CQUFvQixPQUNkO0NBQ04sTUFBTSxlQUFlLEVBQUUsT0FBTyxFQUFFO0NBQ2hDLElBQUkscUJBQXFCLE9BQU8sU0FBUyxVQUN2QyxxQkFBcUIsTUFBTSxNQUFNLE9BQU8sWUFBWTtDQUV0RCxRQUFRLE1BQU0sS0FBSztDQUNuQixJQUFJLFNBQVMsUUFBUSxPQUFPLFNBQVMsVUFBVTtDQUUvQyxNQUFNLFFBQThFLENBQ2xGO0VBQUUsT0FBTztFQUE2QyxPQUFPO0NBQUUsQ0FDakU7Q0FFQSxPQUFPLE1BQU0sU0FBUyxHQUFHO0VBQ3ZCLE1BQU0sVUFBVSxNQUFNLElBQUk7RUFDMUIsSUFBSSxNQUFNLFFBQVEsUUFBUSxLQUFLLEdBQUc7R0FDaEMsS0FBSyxJQUFJLFFBQVEsR0FBRyxRQUFRLFFBQVEsTUFBTSxRQUFRLFNBQVMsR0FBRztJQUM1RCxNQUFNLFFBQVEsUUFBUSxRQUFRO0lBQzlCLHVCQUF1QixPQUFPLElBQUk7SUFDbEMsUUFBUSxNQUFNLEtBQUs7SUFFbkIsTUFBTSxRQUFRLFFBQVEsTUFBTTtJQUM1QixJQUFJLHFCQUFxQixPQUFPLFVBQVUsVUFDeEMscUJBQXFCLE9BQU8sTUFBTSxPQUFPLFlBQVk7SUFFdkQsSUFBSSxVQUFVLFFBQVEsT0FBTyxVQUFVLFVBQ3JDLE1BQU0sS0FBSztLQUFFLE9BQU87S0FBOEM7SUFBTSxDQUFDO0dBRTdFO0dBQ0E7RUFDRjtFQUVBLEtBQUssTUFBTSxPQUFPLFFBQVEsT0FBTztHQUMvQixJQUFJLENBQUMsT0FBTyxPQUFPLFFBQVEsT0FBTyxHQUFHLEdBQUc7R0FDeEMsSUFBSSxtQkFDRixxQkFBcUIsS0FBSyxNQUFNLE9BQU8sWUFBWTtHQUVyRCxNQUFNLFFBQVEsUUFBUSxRQUFRO0dBQzlCLHVCQUF1QixPQUFPLElBQUk7R0FDbEMsUUFBUSxNQUFNLEtBQUs7R0FFbkIsTUFBTSxRQUFRLFFBQVEsTUFBTTtHQUM1QixJQUFJLHFCQUFxQixPQUFPLFVBQVUsVUFDeEMscUJBQXFCLE9BQU8sTUFBTSxPQUFPLFlBQVk7R0FFdkQsSUFBSSxVQUFVLFFBQVEsT0FBTyxVQUFVLFVBQ3JDLE1BQU0sS0FBSztJQUFFLE9BQU87SUFBOEM7R0FBTSxDQUFDO0VBRTdFO0NBQ0Y7QUFDRjtBQUVBLFNBQVMscUJBQ1AsT0FDQSxNQUNBLE9BQ0EsY0FDTTtDQUNOLGFBQWEsU0FBUyxPQUFPLFdBQVcsT0FBTyxNQUFNO0NBQ3JELElBQUksTUFBTSxZQUFZLGFBQWEsUUFBUSxxQkFBcUIsY0FDOUQsZ0JBQWdCLE1BQU0sY0FBYyxxQkFBcUIsY0FBYyxLQUFLO0FBRWhGO0FBRUEsU0FBUyx1QkFBdUIsT0FBZSxNQUFvQjtDQUNqRSxJQUFJLFFBQVEscUJBQXFCLFVBQy9CLE1BQU0sSUFBSSw0QkFDUixHQUFHLEtBQUssMEJBQTBCLHFCQUFxQixVQUN6RDtBQUVKO0FBRUEsU0FBUyxRQUFRLE1BQWMsT0FBOEI7Q0FDM0QsTUFBTSxTQUFTO0NBQ2YsSUFBSSxNQUFNLFFBQVEscUJBQXFCLFVBQ3JDLGdCQUFnQixNQUFNLFFBQVEscUJBQXFCLFVBQVUsS0FBSztBQUV0RTtBQUVBLFNBQVMsZ0JBQ1AsTUFDQSxNQUNBLE9BQ0EsT0FDTztDQUNQLE1BQU0sSUFBSSw0QkFDUixNQUFNLFlBQVksSUFDZCxHQUFHLEtBQUssV0FBVyxLQUFLLFlBQVksVUFDcEMsbUNBQW1DLEtBQUssWUFBWSxPQUMxRDtBQUNGO0FBRUEsU0FBUyxTQUFTLE9BQWtEO0NBQ2xFLE9BQU8sVUFBVSxRQUFRLE9BQU8sVUFBVSxZQUFZLENBQUMsTUFBTSxRQUFRLEtBQUs7QUFDNUUifQ==