@sentry/node 8.12.0-beta.0 → 8.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/integrations/anr/index.js +211 -0
- package/{cjs → build/cjs}/integrations/anr/index.js.map +1 -1
- package/build/cjs/integrations/local-variables/local-variables-async.js +152 -0
- package/{cjs → build/cjs}/integrations/local-variables/local-variables-async.js.map +1 -1
- package/{cjs → build/cjs}/proxy/base.js +1 -1
- package/{cjs → build/cjs}/proxy/base.js.map +1 -1
- package/{cjs → build/cjs}/proxy/index.js.map +1 -1
- package/{cjs → build/cjs}/proxy/parse-proxy-response.js.map +1 -1
- package/build/cjs/utils/createMissingInstrumentationContext.js +11 -0
- package/build/cjs/utils/createMissingInstrumentationContext.js.map +1 -0
- package/{cjs → build/cjs}/utils/ensureIsWrapped.js +3 -0
- package/build/cjs/utils/ensureIsWrapped.js.map +1 -0
- package/build/esm/integrations/anr/index.js +204 -0
- package/{esm → build/esm}/integrations/anr/index.js.map +1 -1
- package/build/esm/integrations/anr/worker-script.js +2 -0
- package/build/esm/integrations/local-variables/local-variables-async.js +146 -0
- package/{esm → build/esm}/integrations/local-variables/local-variables-async.js.map +1 -1
- package/{esm → build/esm}/integrations/local-variables/worker-script.js +1 -1
- package/{esm → build/esm}/proxy/base.js +1 -1
- package/{esm → build/esm}/proxy/base.js.map +1 -1
- package/{esm → build/esm}/proxy/index.js.map +1 -1
- package/{esm → build/esm}/proxy/parse-proxy-response.js.map +1 -1
- package/build/esm/utils/createMissingInstrumentationContext.js +9 -0
- package/build/esm/utils/createMissingInstrumentationContext.js.map +1 -0
- package/{esm → build/esm}/utils/ensureIsWrapped.js +4 -1
- package/build/esm/utils/ensureIsWrapped.js.map +1 -0
- package/{types → build/types}/proxy/base.d.ts +1 -1
- package/{types → build/types}/proxy/helpers.d.ts +1 -1
- package/{types → build/types}/proxy/index.d.ts +1 -1
- package/{types → build/types}/proxy/parse-proxy-response.d.ts +1 -1
- package/build/types/utils/createMissingInstrumentationContext.d.ts +3 -0
- package/build/types/utils/createMissingInstrumentationContext.d.ts.map +1 -0
- package/{types → build/types}/utils/ensureIsWrapped.d.ts.map +1 -1
- package/{types-ts3.8 → build/types-ts3.8}/proxy/base.d.ts +1 -1
- package/{types-ts3.8 → build/types-ts3.8}/proxy/helpers.d.ts +1 -1
- package/{types-ts3.8 → build/types-ts3.8}/proxy/index.d.ts +1 -1
- package/{types-ts3.8 → build/types-ts3.8}/proxy/parse-proxy-response.d.ts +1 -1
- package/build/types-ts3.8/utils/createMissingInstrumentationContext.d.ts +3 -0
- package/package.json +54 -35
- package/cjs/integrations/anr/index.js +0 -211
- package/cjs/integrations/local-variables/local-variables-async.js +0 -152
- package/cjs/utils/ensureIsWrapped.js.map +0 -1
- package/esm/integrations/anr/index.js +0 -204
- package/esm/integrations/anr/worker-script.js +0 -2
- package/esm/integrations/local-variables/local-variables-async.js +0 -146
- package/esm/utils/ensureIsWrapped.js.map +0 -1
- /package/{cjs → build/cjs}/cron/common.js +0 -0
- /package/{cjs → build/cjs}/cron/common.js.map +0 -0
- /package/{cjs → build/cjs}/cron/cron.js +0 -0
- /package/{cjs → build/cjs}/cron/cron.js.map +0 -0
- /package/{cjs → build/cjs}/cron/index.js +0 -0
- /package/{cjs → build/cjs}/cron/index.js.map +0 -0
- /package/{cjs → build/cjs}/cron/node-cron.js +0 -0
- /package/{cjs → build/cjs}/cron/node-cron.js.map +0 -0
- /package/{cjs → build/cjs}/cron/node-schedule.js +0 -0
- /package/{cjs → build/cjs}/cron/node-schedule.js.map +0 -0
- /package/{cjs → build/cjs}/debug-build.js +0 -0
- /package/{cjs → build/cjs}/debug-build.js.map +0 -0
- /package/{cjs → build/cjs}/index.js +0 -0
- /package/{cjs → build/cjs}/index.js.map +0 -0
- /package/{cjs → build/cjs}/init.js +0 -0
- /package/{cjs → build/cjs}/init.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/console.js +0 -0
- /package/{cjs → build/cjs}/integrations/console.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/context.js +0 -0
- /package/{cjs → build/cjs}/integrations/context.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/contextlines.js +0 -0
- /package/{cjs → build/cjs}/integrations/contextlines.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/http.js +0 -0
- /package/{cjs → build/cjs}/integrations/http.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/local-variables/common.js +0 -0
- /package/{cjs → build/cjs}/integrations/local-variables/common.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/local-variables/index.js +0 -0
- /package/{cjs → build/cjs}/integrations/local-variables/index.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/local-variables/local-variables-sync.js +0 -0
- /package/{cjs → build/cjs}/integrations/local-variables/local-variables-sync.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/modules.js +0 -0
- /package/{cjs → build/cjs}/integrations/modules.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/node-fetch.js +0 -0
- /package/{cjs → build/cjs}/integrations/node-fetch.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/onuncaughtexception.js +0 -0
- /package/{cjs → build/cjs}/integrations/onuncaughtexception.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/onunhandledrejection.js +0 -0
- /package/{cjs → build/cjs}/integrations/onunhandledrejection.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/spotlight.js +0 -0
- /package/{cjs → build/cjs}/integrations/spotlight.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/connect.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/connect.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/express.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/express.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/fastify.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/fastify.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/graphql.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/graphql.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/hapi/index.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/hapi/index.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/index.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/index.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/koa.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/koa.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/mongo.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/mongo.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/mongoose.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/mongoose.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/mysql.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/mysql.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/mysql2.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/mysql2.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/nest.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/nest.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/postgres.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/postgres.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/prisma.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/prisma.js.map +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/redis.js +0 -0
- /package/{cjs → build/cjs}/integrations/tracing/redis.js.map +0 -0
- /package/{cjs → build/cjs}/nodeVersion.js +0 -0
- /package/{cjs → build/cjs}/nodeVersion.js.map +0 -0
- /package/{cjs → build/cjs}/otel/contextManager.js +0 -0
- /package/{cjs → build/cjs}/otel/contextManager.js.map +0 -0
- /package/{cjs → build/cjs}/otel/instrument.js +0 -0
- /package/{cjs → build/cjs}/otel/instrument.js.map +0 -0
- /package/{cjs → build/cjs}/preload.js +0 -0
- /package/{cjs → build/cjs}/preload.js.map +0 -0
- /package/{cjs → build/cjs}/proxy/index.js +0 -0
- /package/{cjs → build/cjs}/proxy/parse-proxy-response.js +0 -0
- /package/{cjs → build/cjs}/sdk/api.js +0 -0
- /package/{cjs → build/cjs}/sdk/api.js.map +0 -0
- /package/{cjs → build/cjs}/sdk/client.js +0 -0
- /package/{cjs → build/cjs}/sdk/client.js.map +0 -0
- /package/{cjs → build/cjs}/sdk/index.js +0 -0
- /package/{cjs → build/cjs}/sdk/index.js.map +0 -0
- /package/{cjs → build/cjs}/sdk/initOtel.js +0 -0
- /package/{cjs → build/cjs}/sdk/initOtel.js.map +0 -0
- /package/{cjs → build/cjs}/sdk/scope.js +0 -0
- /package/{cjs → build/cjs}/sdk/scope.js.map +0 -0
- /package/{cjs → build/cjs}/transports/http.js +0 -0
- /package/{cjs → build/cjs}/transports/http.js.map +0 -0
- /package/{cjs → build/cjs}/utils/addOriginToSpan.js +0 -0
- /package/{cjs → build/cjs}/utils/addOriginToSpan.js.map +0 -0
- /package/{cjs → build/cjs}/utils/commonjs.js +0 -0
- /package/{cjs → build/cjs}/utils/commonjs.js.map +0 -0
- /package/{cjs → build/cjs}/utils/errorhandling.js +0 -0
- /package/{cjs → build/cjs}/utils/errorhandling.js.map +0 -0
- /package/{cjs → build/cjs}/utils/getRequestUrl.js +0 -0
- /package/{cjs → build/cjs}/utils/getRequestUrl.js.map +0 -0
- /package/{cjs → build/cjs}/utils/module.js +0 -0
- /package/{cjs → build/cjs}/utils/module.js.map +0 -0
- /package/{cjs → build/cjs}/utils/redisCache.js +0 -0
- /package/{cjs → build/cjs}/utils/redisCache.js.map +0 -0
- /package/{esm → build/esm}/cron/common.js +0 -0
- /package/{esm → build/esm}/cron/common.js.map +0 -0
- /package/{esm → build/esm}/cron/cron.js +0 -0
- /package/{esm → build/esm}/cron/cron.js.map +0 -0
- /package/{esm → build/esm}/cron/index.js +0 -0
- /package/{esm → build/esm}/cron/index.js.map +0 -0
- /package/{esm → build/esm}/cron/node-cron.js +0 -0
- /package/{esm → build/esm}/cron/node-cron.js.map +0 -0
- /package/{esm → build/esm}/cron/node-schedule.js +0 -0
- /package/{esm → build/esm}/cron/node-schedule.js.map +0 -0
- /package/{esm → build/esm}/debug-build.js +0 -0
- /package/{esm → build/esm}/debug-build.js.map +0 -0
- /package/{esm → build/esm}/index.js +0 -0
- /package/{esm → build/esm}/index.js.map +0 -0
- /package/{esm → build/esm}/init.js +0 -0
- /package/{esm → build/esm}/init.js.map +0 -0
- /package/{esm → build/esm}/integrations/console.js +0 -0
- /package/{esm → build/esm}/integrations/console.js.map +0 -0
- /package/{esm → build/esm}/integrations/context.js +0 -0
- /package/{esm → build/esm}/integrations/context.js.map +0 -0
- /package/{esm → build/esm}/integrations/contextlines.js +0 -0
- /package/{esm → build/esm}/integrations/contextlines.js.map +0 -0
- /package/{esm → build/esm}/integrations/http.js +0 -0
- /package/{esm → build/esm}/integrations/http.js.map +0 -0
- /package/{esm → build/esm}/integrations/local-variables/common.js +0 -0
- /package/{esm → build/esm}/integrations/local-variables/common.js.map +0 -0
- /package/{esm → build/esm}/integrations/local-variables/index.js +0 -0
- /package/{esm → build/esm}/integrations/local-variables/index.js.map +0 -0
- /package/{esm → build/esm}/integrations/local-variables/local-variables-sync.js +0 -0
- /package/{esm → build/esm}/integrations/local-variables/local-variables-sync.js.map +0 -0
- /package/{esm → build/esm}/integrations/modules.js +0 -0
- /package/{esm → build/esm}/integrations/modules.js.map +0 -0
- /package/{esm → build/esm}/integrations/node-fetch.js +0 -0
- /package/{esm → build/esm}/integrations/node-fetch.js.map +0 -0
- /package/{esm → build/esm}/integrations/onuncaughtexception.js +0 -0
- /package/{esm → build/esm}/integrations/onuncaughtexception.js.map +0 -0
- /package/{esm → build/esm}/integrations/onunhandledrejection.js +0 -0
- /package/{esm → build/esm}/integrations/onunhandledrejection.js.map +0 -0
- /package/{esm → build/esm}/integrations/spotlight.js +0 -0
- /package/{esm → build/esm}/integrations/spotlight.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/connect.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/connect.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/express.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/express.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/fastify.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/fastify.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/graphql.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/graphql.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/hapi/index.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/hapi/index.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/index.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/index.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/koa.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/koa.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/mongo.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/mongo.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/mongoose.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/mongoose.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/mysql.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/mysql.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/mysql2.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/mysql2.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/nest.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/nest.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/postgres.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/postgres.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/prisma.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/prisma.js.map +0 -0
- /package/{esm → build/esm}/integrations/tracing/redis.js +0 -0
- /package/{esm → build/esm}/integrations/tracing/redis.js.map +0 -0
- /package/{esm → build/esm}/nodeVersion.js +0 -0
- /package/{esm → build/esm}/nodeVersion.js.map +0 -0
- /package/{esm → build/esm}/otel/contextManager.js +0 -0
- /package/{esm → build/esm}/otel/contextManager.js.map +0 -0
- /package/{esm → build/esm}/otel/instrument.js +0 -0
- /package/{esm → build/esm}/otel/instrument.js.map +0 -0
- /package/{esm → build/esm}/package.json +0 -0
- /package/{esm → build/esm}/preload.js +0 -0
- /package/{esm → build/esm}/preload.js.map +0 -0
- /package/{esm → build/esm}/proxy/index.js +0 -0
- /package/{esm → build/esm}/proxy/parse-proxy-response.js +0 -0
- /package/{esm → build/esm}/sdk/api.js +0 -0
- /package/{esm → build/esm}/sdk/api.js.map +0 -0
- /package/{esm → build/esm}/sdk/client.js +0 -0
- /package/{esm → build/esm}/sdk/client.js.map +0 -0
- /package/{esm → build/esm}/sdk/index.js +0 -0
- /package/{esm → build/esm}/sdk/index.js.map +0 -0
- /package/{esm → build/esm}/sdk/initOtel.js +0 -0
- /package/{esm → build/esm}/sdk/initOtel.js.map +0 -0
- /package/{esm → build/esm}/sdk/scope.js +0 -0
- /package/{esm → build/esm}/sdk/scope.js.map +0 -0
- /package/{esm → build/esm}/transports/http.js +0 -0
- /package/{esm → build/esm}/transports/http.js.map +0 -0
- /package/{esm → build/esm}/utils/addOriginToSpan.js +0 -0
- /package/{esm → build/esm}/utils/addOriginToSpan.js.map +0 -0
- /package/{esm → build/esm}/utils/commonjs.js +0 -0
- /package/{esm → build/esm}/utils/commonjs.js.map +0 -0
- /package/{esm → build/esm}/utils/errorhandling.js +0 -0
- /package/{esm → build/esm}/utils/errorhandling.js.map +0 -0
- /package/{esm → build/esm}/utils/getRequestUrl.js +0 -0
- /package/{esm → build/esm}/utils/getRequestUrl.js.map +0 -0
- /package/{esm → build/esm}/utils/module.js +0 -0
- /package/{esm → build/esm}/utils/module.js.map +0 -0
- /package/{esm → build/esm}/utils/redisCache.js +0 -0
- /package/{esm → build/esm}/utils/redisCache.js.map +0 -0
- /package/{import-hook.mjs → build/import-hook.mjs} +0 -0
- /package/{loader-hook.mjs → build/loader-hook.mjs} +0 -0
- /package/{types → build/types}/cron/common.d.ts +0 -0
- /package/{types → build/types}/cron/common.d.ts.map +0 -0
- /package/{types → build/types}/cron/cron.d.ts +0 -0
- /package/{types → build/types}/cron/cron.d.ts.map +0 -0
- /package/{types → build/types}/cron/index.d.ts +0 -0
- /package/{types → build/types}/cron/index.d.ts.map +0 -0
- /package/{types → build/types}/cron/node-cron.d.ts +0 -0
- /package/{types → build/types}/cron/node-cron.d.ts.map +0 -0
- /package/{types → build/types}/cron/node-schedule.d.ts +0 -0
- /package/{types → build/types}/cron/node-schedule.d.ts.map +0 -0
- /package/{types → build/types}/debug-build.d.ts +0 -0
- /package/{types → build/types}/debug-build.d.ts.map +0 -0
- /package/{types → build/types}/index.d.ts +0 -0
- /package/{types → build/types}/index.d.ts.map +0 -0
- /package/{types → build/types}/init.d.ts +0 -0
- /package/{types → build/types}/init.d.ts.map +0 -0
- /package/{types → build/types}/integrations/anr/common.d.ts +0 -0
- /package/{types → build/types}/integrations/anr/common.d.ts.map +0 -0
- /package/{types → build/types}/integrations/anr/index.d.ts +0 -0
- /package/{types → build/types}/integrations/anr/index.d.ts.map +0 -0
- /package/{types → build/types}/integrations/anr/worker.d.ts +0 -0
- /package/{types → build/types}/integrations/anr/worker.d.ts.map +0 -0
- /package/{types → build/types}/integrations/console.d.ts +0 -0
- /package/{types → build/types}/integrations/console.d.ts.map +0 -0
- /package/{types → build/types}/integrations/context.d.ts +0 -0
- /package/{types → build/types}/integrations/context.d.ts.map +0 -0
- /package/{types → build/types}/integrations/contextlines.d.ts +0 -0
- /package/{types → build/types}/integrations/contextlines.d.ts.map +0 -0
- /package/{types → build/types}/integrations/http.d.ts +0 -0
- /package/{types → build/types}/integrations/http.d.ts.map +0 -0
- /package/{types → build/types}/integrations/local-variables/common.d.ts +0 -0
- /package/{types → build/types}/integrations/local-variables/common.d.ts.map +0 -0
- /package/{types → build/types}/integrations/local-variables/index.d.ts +0 -0
- /package/{types → build/types}/integrations/local-variables/index.d.ts.map +0 -0
- /package/{types → build/types}/integrations/local-variables/local-variables-async.d.ts +0 -0
- /package/{types → build/types}/integrations/local-variables/local-variables-async.d.ts.map +0 -0
- /package/{types → build/types}/integrations/local-variables/local-variables-sync.d.ts +0 -0
- /package/{types → build/types}/integrations/local-variables/local-variables-sync.d.ts.map +0 -0
- /package/{types → build/types}/integrations/local-variables/worker.d.ts +0 -0
- /package/{types → build/types}/integrations/local-variables/worker.d.ts.map +0 -0
- /package/{types → build/types}/integrations/modules.d.ts +0 -0
- /package/{types → build/types}/integrations/modules.d.ts.map +0 -0
- /package/{types → build/types}/integrations/node-fetch.d.ts +0 -0
- /package/{types → build/types}/integrations/node-fetch.d.ts.map +0 -0
- /package/{types → build/types}/integrations/onuncaughtexception.d.ts +0 -0
- /package/{types → build/types}/integrations/onuncaughtexception.d.ts.map +0 -0
- /package/{types → build/types}/integrations/onunhandledrejection.d.ts +0 -0
- /package/{types → build/types}/integrations/onunhandledrejection.d.ts.map +0 -0
- /package/{types → build/types}/integrations/spotlight.d.ts +0 -0
- /package/{types → build/types}/integrations/spotlight.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/connect.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/connect.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/express.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/express.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/fastify.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/fastify.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/graphql.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/graphql.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/hapi/index.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/hapi/index.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/hapi/types.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/hapi/types.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/index.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/index.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/koa.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/koa.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/mongo.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/mongo.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/mongoose.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/mongoose.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/mysql.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/mysql.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/mysql2.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/mysql2.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/nest.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/nest.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/postgres.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/postgres.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/prisma.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/prisma.d.ts.map +0 -0
- /package/{types → build/types}/integrations/tracing/redis.d.ts +0 -0
- /package/{types → build/types}/integrations/tracing/redis.d.ts.map +0 -0
- /package/{types → build/types}/nodeVersion.d.ts +0 -0
- /package/{types → build/types}/nodeVersion.d.ts.map +0 -0
- /package/{types → build/types}/otel/contextManager.d.ts +0 -0
- /package/{types → build/types}/otel/contextManager.d.ts.map +0 -0
- /package/{types → build/types}/otel/instrument.d.ts +0 -0
- /package/{types → build/types}/otel/instrument.d.ts.map +0 -0
- /package/{types → build/types}/preload.d.ts +0 -0
- /package/{types → build/types}/preload.d.ts.map +0 -0
- /package/{types → build/types}/proxy/base.d.ts.map +0 -0
- /package/{types → build/types}/proxy/helpers.d.ts.map +0 -0
- /package/{types → build/types}/proxy/index.d.ts.map +0 -0
- /package/{types → build/types}/proxy/parse-proxy-response.d.ts.map +0 -0
- /package/{types → build/types}/sdk/api.d.ts +0 -0
- /package/{types → build/types}/sdk/api.d.ts.map +0 -0
- /package/{types → build/types}/sdk/client.d.ts +0 -0
- /package/{types → build/types}/sdk/client.d.ts.map +0 -0
- /package/{types → build/types}/sdk/index.d.ts +0 -0
- /package/{types → build/types}/sdk/index.d.ts.map +0 -0
- /package/{types → build/types}/sdk/initOtel.d.ts +0 -0
- /package/{types → build/types}/sdk/initOtel.d.ts.map +0 -0
- /package/{types → build/types}/sdk/scope.d.ts +0 -0
- /package/{types → build/types}/sdk/scope.d.ts.map +0 -0
- /package/{types → build/types}/transports/http-module.d.ts +0 -0
- /package/{types → build/types}/transports/http-module.d.ts.map +0 -0
- /package/{types → build/types}/transports/http.d.ts +0 -0
- /package/{types → build/types}/transports/http.d.ts.map +0 -0
- /package/{types → build/types}/transports/index.d.ts +0 -0
- /package/{types → build/types}/transports/index.d.ts.map +0 -0
- /package/{types → build/types}/types.d.ts +0 -0
- /package/{types → build/types}/types.d.ts.map +0 -0
- /package/{types → build/types}/utils/addOriginToSpan.d.ts +0 -0
- /package/{types → build/types}/utils/addOriginToSpan.d.ts.map +0 -0
- /package/{types → build/types}/utils/commonjs.d.ts +0 -0
- /package/{types → build/types}/utils/commonjs.d.ts.map +0 -0
- /package/{types → build/types}/utils/ensureIsWrapped.d.ts +0 -0
- /package/{types → build/types}/utils/errorhandling.d.ts +0 -0
- /package/{types → build/types}/utils/errorhandling.d.ts.map +0 -0
- /package/{types → build/types}/utils/getRequestUrl.d.ts +0 -0
- /package/{types → build/types}/utils/getRequestUrl.d.ts.map +0 -0
- /package/{types → build/types}/utils/module.d.ts +0 -0
- /package/{types → build/types}/utils/module.d.ts.map +0 -0
- /package/{types → build/types}/utils/prepareEvent.d.ts +0 -0
- /package/{types → build/types}/utils/prepareEvent.d.ts.map +0 -0
- /package/{types → build/types}/utils/redisCache.d.ts +0 -0
- /package/{types → build/types}/utils/redisCache.d.ts.map +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/cron/common.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/cron/cron.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/cron/index.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/cron/node-cron.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/cron/node-schedule.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/debug-build.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/index.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/init.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/anr/common.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/anr/index.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/anr/worker.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/console.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/context.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/contextlines.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/http.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/local-variables/common.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/local-variables/index.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/local-variables/local-variables-async.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/local-variables/local-variables-sync.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/local-variables/worker.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/modules.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/node-fetch.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/onuncaughtexception.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/onunhandledrejection.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/spotlight.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/connect.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/express.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/fastify.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/graphql.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/hapi/index.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/hapi/types.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/index.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/koa.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/mongo.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/mongoose.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/mysql.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/mysql2.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/nest.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/postgres.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/prisma.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/integrations/tracing/redis.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/nodeVersion.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/otel/contextManager.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/otel/instrument.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/preload.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/sdk/api.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/sdk/client.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/sdk/index.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/sdk/initOtel.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/sdk/scope.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/transports/http-module.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/transports/http.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/transports/index.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/types.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/utils/addOriginToSpan.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/utils/commonjs.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/utils/ensureIsWrapped.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/utils/errorhandling.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/utils/getRequestUrl.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/utils/module.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/utils/prepareEvent.d.ts +0 -0
- /package/{types-ts3.8 → build/types-ts3.8}/utils/redisCache.d.ts +0 -0
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
var {
|
|
2
|
-
_optionalChain,
|
|
3
|
-
_optionalChainDelete
|
|
4
|
-
} = require('@sentry/utils');
|
|
5
|
-
|
|
6
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
7
|
-
|
|
8
|
-
const node_worker_threads = require('node:worker_threads');
|
|
9
|
-
const core = require('@sentry/core');
|
|
10
|
-
const utils = require('@sentry/utils');
|
|
11
|
-
const nodeVersion = require('../../nodeVersion.js');
|
|
12
|
-
|
|
13
|
-
// This string is a placeholder that gets overwritten with the worker code.
|
|
14
|
-
const base64WorkerScript = 'LyohIEBzZW50cnkvbm9kZSA4LjEyLjAtYmV0YS4wIChhZjRlNzVhKSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQgKi8KaW1wb3J0e1Nlc3Npb24gYXMgdH1mcm9tIm5vZGU6aW5zcGVjdG9yIjtpbXBvcnR7cGFyZW50UG9ydCBhcyBuLHdvcmtlckRhdGEgYXMgZX1mcm9tIm5vZGU6d29ya2VyX3RocmVhZHMiO2ltcG9ydHtwb3NpeCBhcyByLHNlcCBhcyBvfWZyb20ibm9kZTpwYXRoIjtpbXBvcnQqYXMgcyBmcm9tIm5vZGU6aHR0cCI7aW1wb3J0KmFzIGkgZnJvbSJub2RlOmh0dHBzIjtpbXBvcnR7UmVhZGFibGUgYXMgY31mcm9tIm5vZGU6c3RyZWFtIjtpbXBvcnR7Y3JlYXRlR3ppcCBhcyB1fWZyb20ibm9kZTp6bGliIjtpbXBvcnQqYXMgYSBmcm9tIm5vZGU6bmV0IjtpbXBvcnQqYXMgZiBmcm9tIm5vZGU6dGxzIjtjb25zdCBoPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gcCh0LG4pe3JldHVybiBoLmNhbGwodCk9PT1gW29iamVjdCAke259XWB9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gcCh0LCJTdHJpbmciKX1mdW5jdGlvbiBsKHQpe3JldHVybiBwKHQsIk9iamVjdCIpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIEJvb2xlYW4odCYmdC50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVuKX1mdW5jdGlvbiB5KHQsbil7dHJ5e3JldHVybiB0IGluc3RhbmNlb2Ygbn1jYXRjaCh0KXtyZXR1cm4hMX19Y29uc3QgZz0iOC4xMi4wLWJldGEuMCIsYj1nbG9iYWxUaGlzO2Z1bmN0aW9uIHYodCxuLGUpe2NvbnN0IHI9ZXx8YixvPXIuX19TRU5UUllfXz1yLl9fU0VOVFJZX198fHt9LHM9b1tnXT1vW2ddfHx7fTtyZXR1cm4gc1t0XXx8KHNbdF09bigpKX1jb25zdCBfPWIsdz04MDtmdW5jdGlvbiBTKHQsbil7Y29uc3QgZT10LHI9W107aWYoIWV8fCFlLnRhZ05hbWUpcmV0dXJuIiI7aWYoXy5IVE1MRWxlbWVudCYmZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLmRhdGFzZXQpe2lmKGUuZGF0YXNldC5zZW50cnlDb21wb25lbnQpcmV0dXJuIGUuZGF0YXNldC5zZW50cnlDb21wb25lbnQ7aWYoZS5kYXRhc2V0LnNlbnRyeUVsZW1lbnQpcmV0dXJuIGUuZGF0YXNldC5zZW50cnlFbGVtZW50fXIucHVzaChlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7Y29uc3Qgbz1uJiZuLmxlbmd0aD9uLmZpbHRlcigodD0+ZS5nZXRBdHRyaWJ1dGUodCkpKS5tYXAoKHQ9Plt0LGUuZ2V0QXR0cmlidXRlKHQpXSkpOm51bGw7aWYobyYmby5sZW5ndGgpby5mb3JFYWNoKCh0PT57ci5wdXNoKGBbJHt0WzBdfT0iJHt0WzFdfSJdYCl9KSk7ZWxzZXtlLmlkJiZyLnB1c2goYCMke2UuaWR9YCk7Y29uc3QgdD1lLmNsYXNzTmFtZTtpZih0JiZkKHQpKXtjb25zdCBuPXQuc3BsaXQoL1xzKy8pO2Zvcihjb25zdCB0IG9mIG4pci5wdXNoKGAuJHt0fWApfX1jb25zdCBzPVsiYXJpYS1sYWJlbCIsInR5cGUiLCJuYW1lIiwidGl0bGUiLCJhbHQiXTtmb3IoY29uc3QgdCBvZiBzKXtjb25zdCBuPWUuZ2V0QXR0cmlidXRlKHQpO24mJnIucHVzaChgWyR7dH09IiR7bn0iXWApfXJldHVybiByLmpvaW4oIiIpfWNvbnN0ICQ9InVuZGVmaW5lZCI9PXR5cGVvZiBfX1NFTlRSWV9ERUJVR19ffHxfX1NFTlRSWV9ERUJVR19fLEU9WyJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsb2ciLCJhc3NlcnQiLCJ0cmFjZSJdLHg9e307ZnVuY3Rpb24gTih0KXtpZighKCJjb25zb2xlImluIGIpKXJldHVybiB0KCk7Y29uc3Qgbj1iLmNvbnNvbGUsZT17fSxyPU9iamVjdC5rZXlzKHgpO3IuZm9yRWFjaCgodD0+e2NvbnN0IHI9eFt0XTtlW3RdPW5bdF0sblt0XT1yfSkpO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7ci5mb3JFYWNoKCh0PT57blt0XT1lW3RdfSkpfX1jb25zdCBrPWZ1bmN0aW9uKCl7bGV0IHQ9ITE7Y29uc3Qgbj17ZW5hYmxlOigpPT57dD0hMH0sZGlzYWJsZTooKT0+e3Q9ITF9LGlzRW5hYmxlZDooKT0+dH07cmV0dXJuICQ/RS5mb3JFYWNoKChlPT57bltlXT0oLi4ubik9Pnt0JiZOKCgoKT0+e2IuY29uc29sZVtlXShgU2VudHJ5IExvZ2dlciBbJHtlfV06YCwuLi5uKX0pKX19KSk6RS5mb3JFYWNoKCh0PT57blt0XT0oKT0+e319KSksbn0oKTtmdW5jdGlvbiBDKHQsbj0hMSl7Y29uc3R7aG9zdDplLHBhdGg6cixwYXNzOm8scG9ydDpzLHByb2plY3RJZDppLHByb3RvY29sOmMscHVibGljS2V5OnV9PXQ7cmV0dXJuYCR7Y306Ly8ke3V9JHtuJiZvP2A6JHtvfWA6IiJ9QCR7ZX0ke3M/YDoke3N9YDoiIn0vJHtyP2Ake3J9L2A6cn0ke2l9YH1jbGFzcyBEIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuPSJ3YXJuIil7c3VwZXIodCksdGhpcy5tZXNzYWdlPXQsdGhpcy5uYW1lPW5ldy50YXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsbmV3LnRhcmdldC5wcm90b3R5cGUpLHRoaXMubG9nTGV2ZWw9bn19ZnVuY3Rpb24gVCh0KXtpZihmdW5jdGlvbih0KXtzd2l0Y2goaC5jYWxsKHQpKXtjYXNlIltvYmplY3QgRXJyb3JdIjpjYXNlIltvYmplY3QgRXhjZXB0aW9uXSI6Y2FzZSJbb2JqZWN0IERPTUV4Y2VwdGlvbl0iOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuIHkodCxFcnJvcil9fSh0KSlyZXR1cm57bWVzc2FnZTp0Lm1lc3NhZ2UsbmFtZTp0Lm5hbWUsc3RhY2s6dC5zdGFjaywuLi5qKHQpfTtpZihuPXQsInVuZGVmaW5lZCIhPXR5cGVvZiBFdmVudCYmeShuLEV2ZW50KSl7Y29uc3Qgbj17dHlwZTp0LnR5cGUsdGFyZ2V0Ok8odC50YXJnZXQpLGN1cnJlbnRUYXJnZXQ6Tyh0LmN1cnJlbnRUYXJnZXQpLC4uLmoodCl9O3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQ3VzdG9tRXZlbnQmJnkodCxDdXN0b21FdmVudCkmJihuLmRldGFpbD10LmRldGFpbCksbn1yZXR1cm4gdDt2YXIgbn1mdW5jdGlvbiBPKHQpe3RyeXtyZXR1cm4gbj10LCJ1bmRlZmluZWQiIT10eXBlb2YgRWxlbWVudCYmeShuLEVsZW1lbnQpP2Z1bmN0aW9uKHQsbj17fSl7aWYoIXQpcmV0dXJuIjx1bmtub3duPiI7dHJ5e2xldCBlPXQ7Y29uc3Qgcj01LG89W107bGV0IHM9MCxpPTA7Y29uc3QgYz0iID4gIix1PWMubGVuZ3RoO2xldCBhO2NvbnN0IGY9QXJyYXkuaXNBcnJheShuKT9uOm4ua2V5QXR0cnMsaD0hQXJyYXkuaXNBcnJheShuKSYmbi5tYXhTdHJpbmdMZW5ndGh8fHc7Zm9yKDtlJiZzKys8ciYmKGE9UyhlLGYpLCEoImh0bWwiPT09YXx8cz4xJiZpK28ubGVuZ3RoKnUrYS5sZW5ndGg+PWgpKTspby5wdXNoKGEpLGkrPWEubGVuZ3RoLGU9ZS5wYXJlbnROb2RlO3JldHVybiBvLnJldmVyc2UoKS5qb2luKGMpfWNhdGNoKHQpe3JldHVybiI8dW5rbm93bj4ifX0odCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWNhdGNoKHQpe3JldHVybiI8dW5rbm93bj4ifXZhciBufWZ1bmN0aW9uIGoodCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCl7Y29uc3Qgbj17fTtmb3IoY29uc3QgZSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpJiYobltlXT10W2VdKTtyZXR1cm4gbn1yZXR1cm57fX1mdW5jdGlvbiBSKHQpe3JldHVybiBBKHQsbmV3IE1hcCl9ZnVuY3Rpb24gQSh0LG4pe2lmKGZ1bmN0aW9uKHQpe2lmKCFsKHQpKXJldHVybiExO3RyeXtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3Rvci5uYW1lO3JldHVybiFufHwiT2JqZWN0Ij09PW59Y2F0Y2godCl7cmV0dXJuITB9fSh0KSl7Y29uc3QgZT1uLmdldCh0KTtpZih2b2lkIDAhPT1lKXJldHVybiBlO2NvbnN0IHI9e307bi5zZXQodCxyKTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyh0KSl2b2lkIDAhPT10W2VdJiYocltlXT1BKHRbZV0sbikpO3JldHVybiByfWlmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGU9bi5nZXQodCk7aWYodm9pZCAwIT09ZSlyZXR1cm4gZTtjb25zdCByPVtdO3JldHVybiBuLnNldCh0LHIpLHQuZm9yRWFjaCgodD0+e3IucHVzaChBKHQsbikpfSkpLHJ9cmV0dXJuIHR9Y29uc3QgST01MCxQPSI/IixVPS9jYXB0dXJlTWVzc2FnZXxjYXB0dXJlRXhjZXB0aW9uLztmdW5jdGlvbiBNKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfHx7fX1jb25zdCBMPSI8YW5vbnltb3VzPiI7Y29uc3QgQj0xZTM7ZnVuY3Rpb24gRygpe3JldHVybiBEYXRlLm5vdygpL0J9Y29uc3QgSj1mdW5jdGlvbigpe2NvbnN0e3BlcmZvcm1hbmNlOnR9PWI7aWYoIXR8fCF0Lm5vdylyZXR1cm4gRztjb25zdCBuPURhdGUubm93KCktdC5ub3coKSxlPW51bGw9PXQudGltZU9yaWdpbj9uOnQudGltZU9yaWdpbjtyZXR1cm4oKT0+KGUrdC5ub3coKSkvQn0oKTtmdW5jdGlvbiB6KCl7Y29uc3QgdD1iLG49dC5jcnlwdG98fHQubXNDcnlwdG87bGV0IGU9KCk9PjE2Kk1hdGgucmFuZG9tKCk7dHJ5e2lmKG4mJm4ucmFuZG9tVVVJRClyZXR1cm4gbi5yYW5kb21VVUlEKCkucmVwbGFjZSgvLS9nLCIiKTtuJiZuLmdldFJhbmRvbVZhbHVlcyYmKGU9KCk9Pntjb25zdCB0PW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBuLmdldFJhbmRvbVZhbHVlcyh0KSx0WzBdfSl9Y2F0Y2godCl7fXJldHVybihbMWU3XSsxZTMrNGUzKzhlMysxZTExKS5yZXBsYWNlKC9bMDE4XS9nLCh0PT4odF4oMTUmZSgpKT4+dC80KS50b1N0cmluZygxNikpKX1mdW5jdGlvbiBIKHQsbj0xMDAsZT0xLzApe3RyeXtyZXR1cm4gVygiIix0LG4sZSl9Y2F0Y2godCl7cmV0dXJue0VSUk9SOmAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHt0fSlgfX19ZnVuY3Rpb24gVyh0LG4sZT0xLzAscj0xLzAsbz1mdW5jdGlvbigpe2NvbnN0IHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtTZXQsbj10P25ldyBXZWFrU2V0OltdO3JldHVybltmdW5jdGlvbihlKXtpZih0KXJldHVybiEhbi5oYXMoZSl8fChuLmFkZChlKSwhMSk7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspaWYoblt0XT09PWUpcmV0dXJuITA7cmV0dXJuIG4ucHVzaChlKSwhMX0sZnVuY3Rpb24oZSl7aWYodCluLmRlbGV0ZShlKTtlbHNlIGZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWlmKG5bdF09PT1lKXtuLnNwbGljZSh0LDEpO2JyZWFrfX1dfSgpKXtjb25zdFtzLGldPW87aWYobnVsbD09bnx8WyJudW1iZXIiLCJib29sZWFuIiwic3RyaW5nIl0uaW5jbHVkZXModHlwZW9mIG4pJiYhTnVtYmVyLmlzTmFOKG4pKXJldHVybiBuO2NvbnN0IGM9ZnVuY3Rpb24odCxuKXt0cnl7aWYoImRvbWFpbiI9PT10JiZuJiYib2JqZWN0Ij09dHlwZW9mIG4mJm4udClyZXR1cm4iW0RvbWFpbl0iO2lmKCJkb21haW5FbWl0dGVyIj09PXQpcmV0dXJuIltEb21haW5FbWl0dGVyXSI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJm49PT1nbG9iYWwpcmV0dXJuIltHbG9iYWxdIjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmbj09PXdpbmRvdylyZXR1cm4iW1dpbmRvd10iO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJm49PT1kb2N1bWVudClyZXR1cm4iW0RvY3VtZW50XSI7aWYoIm9iamVjdCI9PXR5cGVvZihlPW4pJiZudWxsIT09ZSYmKGUuX19pc1Z1ZXx8ZS5vKSlyZXR1cm4iW1Z1ZVZpZXdNb2RlbF0iO2lmKGZ1bmN0aW9uKHQpe3JldHVybiBsKHQpJiYibmF0aXZlRXZlbnQiaW4gdCYmInByZXZlbnREZWZhdWx0ImluIHQmJiJzdG9wUHJvcGFnYXRpb24iaW4gdH0obikpcmV0dXJuIltTeW50aGV0aWNFdmVudF0iO2lmKCJudW1iZXIiPT10eXBlb2YgbiYmbiE9bilyZXR1cm4iW05hTl0iO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXJldHVybmBbRnVuY3Rpb246ICR7ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5uYW1lfHxMfWNhdGNoKHQpe3JldHVybiBMfX0obil9XWA7aWYoInN5bWJvbCI9PXR5cGVvZiBuKXJldHVybmBbJHtTdHJpbmcobil9XWA7aWYoImJpZ2ludCI9PXR5cGVvZiBuKXJldHVybmBbQmlnSW50OiAke1N0cmluZyhuKX1dYDtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO3JldHVybiBuP24uY29uc3RydWN0b3IubmFtZToibnVsbCBwcm90b3R5cGUifShuKTtyZXR1cm4vXkhUTUwoXHcqKUVsZW1lbnQkLy50ZXN0KHIpP2BbSFRNTEVsZW1lbnQ6ICR7cn1dYDpgW29iamVjdCAke3J9XWB9Y2F0Y2godCl7cmV0dXJuYCoqbm9uLXNlcmlhbGl6YWJsZSoqICgke3R9KWB9dmFyIGV9KHQsbik7aWYoIWMuc3RhcnRzV2l0aCgiW29iamVjdCAiKSlyZXR1cm4gYztpZihuLl9fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fKXJldHVybiBuO2NvbnN0IHU9Im51bWJlciI9PXR5cGVvZiBuLl9fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXz9uLl9fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXzplO2lmKDA9PT11KXJldHVybiBjLnJlcGxhY2UoIm9iamVjdCAiLCIiKTtpZihzKG4pKXJldHVybiJbQ2lyY3VsYXIgfl0iO2NvbnN0IGE9bjtpZihhJiYiZnVuY3Rpb24iPT10eXBlb2YgYS50b0pTT04pdHJ5e3JldHVybiBXKCIiLGEudG9KU09OKCksdS0xLHIsbyl9Y2F0Y2godCl7fWNvbnN0IGY9QXJyYXkuaXNBcnJheShuKT9bXTp7fTtsZXQgaD0wO2NvbnN0IHA9VChuKTtmb3IoY29uc3QgdCBpbiBwKXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHAsdCkpY29udGludWU7aWYoaD49cil7Zlt0XT0iW01heFByb3BlcnRpZXMgfl0iO2JyZWFrfWNvbnN0IG49cFt0XTtmW3RdPVcodCxuLHUtMSxyLG8pLGgrK31yZXR1cm4gaShuKSxmfWZ1bmN0aW9uIFkodCxuKXtjb25zdCBlPW4ucmVwbGFjZSgvXFwvZywiLyIpLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrKj8uXS9nLCJcXCQmIik7bGV0IHI9dDt0cnl7cj1kZWNvZGVVUkkodCl9Y2F0Y2godCl7fXJldHVybiByLnJlcGxhY2UoL1xcL2csIi8iKS5yZXBsYWNlKC93ZWJwYWNrOlwvPy9nLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoYChmaWxlOi8vKT8vKiR7ZX0vKmAsImlnIiksImFwcDovLy8iKX0oKCk9Pntjb25zdHtwZXJmb3JtYW5jZTp0fT1iO2lmKCF0fHwhdC5ub3cpcmV0dXJuO2NvbnN0IG49MzZlNSxlPXQubm93KCkscj1EYXRlLm5vdygpLG89dC50aW1lT3JpZ2luP01hdGguYWJzKHQudGltZU9yaWdpbitlLXIpOm4scz1vPG4saT10LnRpbWluZyYmdC50aW1pbmcubmF2aWdhdGlvblN0YXJ0LGM9Im51bWJlciI9PXR5cGVvZiBpP01hdGguYWJzKGkrZS1yKTpuOyhzfHxjPG4pJiYobzw9YyYmdC50aW1lT3JpZ2luKX0pKCk7Y29uc3QgcT0vXihcUys6XFx8XC8/KShbXHNcU10qPykoKD86XC57MSwyfXxbXi9cXF0rP3wpKFwuW14uL1xcXSp8KSkoPzpbL1xcXSopJC87ZnVuY3Rpb24gRih0KXtjb25zdCBuPWZ1bmN0aW9uKHQpe2NvbnN0IG49dC5sZW5ndGg+MTAyND9gPHRydW5jYXRlZD4ke3Quc2xpY2UoLTEwMjQpfWA6dCxlPXEuZXhlYyhuKTtyZXR1cm4gZT9lLnNsaWNlKDEpOltdfSh0KSxlPW5bMF18fCIiO2xldCByPW5bMV07cmV0dXJuIGV8fHI/KHImJihyPXIuc2xpY2UoMCxyLmxlbmd0aC0xKSksZStyKToiLiJ9dmFyIEs7ZnVuY3Rpb24gVih0KXtyZXR1cm4gbmV3IFooKG49PntuKHQpfSkpfSFmdW5jdGlvbih0KXt0W3QuUEVORElORz0wXT0iUEVORElORyI7dFt0LlJFU09MVkVEPTFdPSJSRVNPTFZFRCI7dFt0LlJFSkVDVEVEPTJdPSJSRUpFQ1RFRCJ9KEt8fChLPXt9KSk7Y2xhc3MgWntjb25zdHJ1Y3Rvcih0KXtaLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKSxaLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyksWi5wcm90b3R5cGUuX19pbml0My5jYWxsKHRoaXMpLFoucHJvdG90eXBlLl9faW5pdDQuY2FsbCh0aGlzKSx0aGlzLmk9Sy5QRU5ESU5HLHRoaXMudT1bXTt0cnl7dCh0aGlzLmgsdGhpcy5wKX1jYXRjaCh0KXt0aGlzLnAodCl9fXRoZW4odCxuKXtyZXR1cm4gbmV3IFooKChlLHIpPT57dGhpcy51LnB1c2goWyExLG49PntpZih0KXRyeXtlKHQobikpfWNhdGNoKHQpe3IodCl9ZWxzZSBlKG4pfSx0PT57aWYobil0cnl7ZShuKHQpKX1jYXRjaCh0KXtyKHQpfWVsc2Ugcih0KX1dKSx0aGlzLmwoKX0pKX1jYXRjaCh0KXtyZXR1cm4gdGhpcy50aGVuKCh0PT50KSx0KX1maW5hbGx5KHQpe3JldHVybiBuZXcgWigoKG4sZSk9PntsZXQgcixvO3JldHVybiB0aGlzLnRoZW4oKG49PntvPSExLHI9bix0JiZ0KCl9KSwobj0+e289ITAscj1uLHQmJnQoKX0pKS50aGVuKCgoKT0+e28/ZShyKTpuKHIpfSkpfSkpfV9faW5pdCgpe3RoaXMuaD10PT57dGhpcy5tKEsuUkVTT0xWRUQsdCl9fV9faW5pdDIoKXt0aGlzLnA9dD0+e3RoaXMubShLLlJFSkVDVEVELHQpfX1fX2luaXQzKCl7dGhpcy5tPSh0LG4pPT57dGhpcy5pPT09Sy5QRU5ESU5HJiYobShuKT9uLnRoZW4odGhpcy5oLHRoaXMucCk6KHRoaXMuaT10LHRoaXMudj1uLHRoaXMubCgpKSl9fV9faW5pdDQoKXt0aGlzLmw9KCk9PntpZih0aGlzLmk9PT1LLlBFTkRJTkcpcmV0dXJuO2NvbnN0IHQ9dGhpcy51LnNsaWNlKCk7dGhpcy51PVtdLHQuZm9yRWFjaCgodD0+e3RbMF18fCh0aGlzLmk9PT1LLlJFU09MVkVEJiZ0WzFdKHRoaXMudiksdGhpcy5pPT09Sy5SRUpFQ1RFRCYmdFsyXSh0aGlzLnYpLHRbMF09ITApfSkpfX19ZnVuY3Rpb24gUSh0KXtjb25zdCBuPVtdO2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4uc3BsaWNlKG4uaW5kZXhPZih0KSwxKVswXXx8UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCl9cmV0dXJueyQ6bixhZGQ6ZnVuY3Rpb24ocil7aWYoISh2b2lkIDA9PT10fHxuLmxlbmd0aDx0KSlyZXR1cm4gbz1uZXcgRCgiTm90IGFkZGluZyBQcm9taXNlIGJlY2F1c2UgYnVmZmVyIGxpbWl0IHdhcyByZWFjaGVkLiIpLG5ldyBaKCgodCxuKT0+e24obyl9KSk7dmFyIG87Y29uc3Qgcz1yKCk7cmV0dXJuLTE9PT1uLmluZGV4T2YocykmJm4ucHVzaChzKSxzLnRoZW4oKCgpPT5lKHMpKSkudGhlbihudWxsLCgoKT0+ZShzKS50aGVuKG51bGwsKCgpPT57fSkpKSksc30sZHJhaW46ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBaKCgoZSxyKT0+e2xldCBvPW4ubGVuZ3RoO2lmKCFvKXJldHVybiBlKCEwKTtjb25zdCBzPXNldFRpbWVvdXQoKCgpPT57dCYmdD4wJiZlKCExKX0pLHQpO24uZm9yRWFjaCgodD0+e1YodCkudGhlbigoKCk9PnstLW98fChjbGVhclRpbWVvdXQocyksZSghMCkpfSkscil9KSl9KSl9fX1mdW5jdGlvbiBYKHQsbj0hMSl7cmV0dXJuIShufHx0JiYhdC5zdGFydHNXaXRoKCIvIikmJiF0Lm1hdGNoKC9eW0EtWl06LykmJiF0LnN0YXJ0c1dpdGgoIi4iKSYmIXQubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpJiZ2b2lkIDAhPT10JiYhdC5pbmNsdWRlcygibm9kZV9tb2R1bGVzLyIpfWNvbnN0IHR0PSJzZW50cnktIixudD0vXnNlbnRyeS0vO2Z1bmN0aW9uIGV0KHQpe2NvbnN0IG49ZnVuY3Rpb24odCl7aWYoIXR8fCFkKHQpJiYhQXJyYXkuaXNBcnJheSh0KSlyZXR1cm47aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5yZWR1Y2UoKCh0LG4pPT57Y29uc3QgZT1ydChuKTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoKFtuLGVdKT0+e3Rbbl09ZX0pKSx0fSkse30pO3JldHVybiBydCh0KX0odCk7aWYoIW4pcmV0dXJuO2NvbnN0IGU9T2JqZWN0LmVudHJpZXMobikucmVkdWNlKCgodCxbbixlXSk9PntpZihuLm1hdGNoKG50KSl7dFtuLnNsaWNlKHR0Lmxlbmd0aCldPWV9cmV0dXJuIHR9KSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aD4wP2U6dm9pZCAwfWZ1bmN0aW9uIHJ0KHQpe3JldHVybiB0LnNwbGl0KCIsIikubWFwKCh0PT50LnNwbGl0KCI9IikubWFwKCh0PT5kZWNvZGVVUklDb21wb25lbnQodC50cmltKCkpKSkpKS5yZWR1Y2UoKCh0LFtuLGVdKT0+KG4mJmUmJih0W25dPWUpLHQpKSx7fSl9ZnVuY3Rpb24gb3QodCxuPVtdKXtyZXR1cm5bdCxuXX1mdW5jdGlvbiBzdCh0LG4pe2NvbnN0IGU9dFsxXTtmb3IoY29uc3QgdCBvZiBlKXtpZihuKHQsdFswXS50eXBlKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gYi5fX1NFTlRSWV9fJiZiLl9fU0VOVFJZX18uZW5jb2RlUG9seWZpbGw/Yi5fX1NFTlRSWV9fLmVuY29kZVBvbHlmaWxsKHQpOihuZXcgVGV4dEVuY29kZXIpLmVuY29kZSh0KX1mdW5jdGlvbiBjdCh0KXtjb25zdFtuLGVdPXQ7bGV0IHI9SlNPTi5zdHJpbmdpZnkobik7ZnVuY3Rpb24gbyh0KXsic3RyaW5nIj09dHlwZW9mIHI/cj0ic3RyaW5nIj09dHlwZW9mIHQ/cit0OltpdChyKSx0XTpyLnB1c2goInN0cmluZyI9PXR5cGVvZiB0P2l0KHQpOnQpfWZvcihjb25zdCB0IG9mIGUpe2NvbnN0W24sZV09dDtpZihvKGBcbiR7SlNPTi5zdHJpbmdpZnkobil9XG5gKSwic3RyaW5nIj09dHlwZW9mIGV8fGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KW8oZSk7ZWxzZXtsZXQgdDt0cnl7dD1KU09OLnN0cmluZ2lmeShlKX1jYXRjaChuKXt0PUpTT04uc3RyaW5naWZ5KEgoZSkpfW8odCl9fXJldHVybiJzdHJpbmciPT10eXBlb2Ygcj9yOmZ1bmN0aW9uKHQpe2NvbnN0IG49dC5yZWR1Y2UoKCh0LG4pPT50K24ubGVuZ3RoKSwwKSxlPW5ldyBVaW50OEFycmF5KG4pO2xldCByPTA7Zm9yKGNvbnN0IG4gb2YgdCllLnNldChuLHIpLHIrPW4ubGVuZ3RoO3JldHVybiBlfShyKX1jb25zdCB1dD17c2Vzc2lvbjoic2Vzc2lvbiIsc2Vzc2lvbnM6InNlc3Npb24iLGF0dGFjaG1lbnQ6ImF0dGFjaG1lbnQiLHRyYW5zYWN0aW9uOiJ0cmFuc2FjdGlvbiIsZXZlbnQ6ImVycm9yIixjbGllbnRfcmVwb3J0OiJpbnRlcm5hbCIsdXNlcl9yZXBvcnQ6ImRlZmF1bHQiLHByb2ZpbGU6InByb2ZpbGUiLHByb2ZpbGVfY2h1bms6InByb2ZpbGUiLHJlcGxheV9ldmVudDoicmVwbGF5IixyZXBsYXlfcmVjb3JkaW5nOiJyZXBsYXkiLGNoZWNrX2luOiJtb25pdG9yIixmZWVkYmFjazoiZmVlZGJhY2siLHNwYW46InNwYW4iLHN0YXRzZDoibWV0cmljX2J1Y2tldCJ9O2Z1bmN0aW9uIGF0KHQpe3JldHVybiB1dFt0XX1mdW5jdGlvbiBmdCh0KXtpZighdHx8IXQuc2RrKXJldHVybjtjb25zdHtuYW1lOm4sdmVyc2lvbjplfT10LnNkaztyZXR1cm57bmFtZTpuLHZlcnNpb246ZX19Y29uc3QgaHQ9NmU0O2Z1bmN0aW9uIHB0KHQse3N0YXR1c0NvZGU6bixoZWFkZXJzOmV9LHI9RGF0ZS5ub3coKSl7Y29uc3Qgbz17Li4udH0scz1lJiZlWyJ4LXNlbnRyeS1yYXRlLWxpbWl0cyJdLGk9ZSYmZVsicmV0cnktYWZ0ZXIiXTtpZihzKWZvcihjb25zdCB0IG9mIHMudHJpbSgpLnNwbGl0KCIsIikpe2NvbnN0W24sZSwsLHNdPXQuc3BsaXQoIjoiLDUpLGk9cGFyc2VJbnQobiwxMCksYz0xZTMqKGlzTmFOKGkpPzYwOmkpO2lmKGUpZm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgiOyIpKSJtZXRyaWNfYnVja2V0Ij09PXQmJnMmJiFzLnNwbGl0KCI7IikuaW5jbHVkZXMoImN1c3RvbSIpfHwob1t0XT1yK2MpO2Vsc2Ugby5hbGw9citjfWVsc2UgaT9vLmFsbD1yK2Z1bmN0aW9uKHQsbj1EYXRlLm5vdygpKXtjb25zdCBlPXBhcnNlSW50KGAke3R9YCwxMCk7aWYoIWlzTmFOKGUpKXJldHVybiAxZTMqZTtjb25zdCByPURhdGUucGFyc2UoYCR7dH1gKTtyZXR1cm4gaXNOYU4ocik/aHQ6ci1ufShpLHIpOjQyOT09PW4mJihvLmFsbD1yKzZlNCk7cmV0dXJuIG99ZnVuY3Rpb24gZHQoKXtyZXR1cm57dHJhY2VJZDp6KCksc3BhbklkOnooKS5zdWJzdHJpbmcoMTYpfX1jb25zdCBsdD0idW5kZWZpbmVkIj09dHlwZW9mIF9fU0VOVFJZX0RFQlVHX198fF9fU0VOVFJZX0RFQlVHX187ZnVuY3Rpb24gbXQoKXtyZXR1cm4geXQoYiksYn1mdW5jdGlvbiB5dCh0KXtjb25zdCBuPXQuX19TRU5UUllfXz10Ll9fU0VOVFJZX198fHt9O3JldHVybiBuLnZlcnNpb249bi52ZXJzaW9ufHxnLG5bZ109bltnXXx8e319ZnVuY3Rpb24gZ3QodCl7Y29uc3Qgbj1KKCksZT17c2lkOnooKSxpbml0OiEwLHRpbWVzdGFtcDpuLHN0YXJ0ZWQ6bixkdXJhdGlvbjowLHN0YXR1czoib2siLGVycm9yczowLGlnbm9yZUR1cmF0aW9uOiExLHRvSlNPTjooKT0+ZnVuY3Rpb24odCl7cmV0dXJuIFIoe3NpZDpgJHt0LnNpZH1gLGluaXQ6dC5pbml0LHN0YXJ0ZWQ6bmV3IERhdGUoMWUzKnQuc3RhcnRlZCkudG9JU09TdHJpbmcoKSx0aW1lc3RhbXA6bmV3IERhdGUoMWUzKnQudGltZXN0YW1wKS50b0lTT1N0cmluZygpLHN0YXR1czp0LnN0YXR1cyxlcnJvcnM6dC5lcnJvcnMsZGlkOiJudW1iZXIiPT10eXBlb2YgdC5kaWR8fCJzdHJpbmciPT10eXBlb2YgdC5kaWQ/YCR7dC5kaWR9YDp2b2lkIDAsZHVyYXRpb246dC5kdXJhdGlvbixhYm5vcm1hbF9tZWNoYW5pc206dC5hYm5vcm1hbF9tZWNoYW5pc20sYXR0cnM6e3JlbGVhc2U6dC5yZWxlYXNlLGVudmlyb25tZW50OnQuZW52aXJvbm1lbnQsaXBfYWRkcmVzczp0LmlwQWRkcmVzcyx1c2VyX2FnZW50OnQudXNlckFnZW50fX0pfShlKX07cmV0dXJuIHQmJmJ0KGUsdCksZX1mdW5jdGlvbiBidCh0LG49e30pe2lmKG4udXNlciYmKCF0LmlwQWRkcmVzcyYmbi51c2VyLmlwX2FkZHJlc3MmJih0LmlwQWRkcmVzcz1uLnVzZXIuaXBfYWRkcmVzcyksdC5kaWR8fG4uZGlkfHwodC5kaWQ9bi51c2VyLmlkfHxuLnVzZXIuZW1haWx8fG4udXNlci51c2VybmFtZSkpLHQudGltZXN0YW1wPW4udGltZXN0YW1wfHxKKCksbi5hYm5vcm1hbF9tZWNoYW5pc20mJih0LmFibm9ybWFsX21lY2hhbmlzbT1uLmFibm9ybWFsX21lY2hhbmlzbSksbi5pZ25vcmVEdXJhdGlvbiYmKHQuaWdub3JlRHVyYXRpb249bi5pZ25vcmVEdXJhdGlvbiksbi5zaWQmJih0LnNpZD0zMj09PW4uc2lkLmxlbmd0aD9uLnNpZDp6KCkpLHZvaWQgMCE9PW4uaW5pdCYmKHQuaW5pdD1uLmluaXQpLCF0LmRpZCYmbi5kaWQmJih0LmRpZD1gJHtuLmRpZH1gKSwibnVtYmVyIj09dHlwZW9mIG4uc3RhcnRlZCYmKHQuc3RhcnRlZD1uLnN0YXJ0ZWQpLHQuaWdub3JlRHVyYXRpb24pdC5kdXJhdGlvbj12b2lkIDA7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIG4uZHVyYXRpb24pdC5kdXJhdGlvbj1uLmR1cmF0aW9uO2Vsc2V7Y29uc3Qgbj10LnRpbWVzdGFtcC10LnN0YXJ0ZWQ7dC5kdXJhdGlvbj1uPj0wP246MH1uLnJlbGVhc2UmJih0LnJlbGVhc2U9bi5yZWxlYXNlKSxuLmVudmlyb25tZW50JiYodC5lbnZpcm9ubWVudD1uLmVudmlyb25tZW50KSwhdC5pcEFkZHJlc3MmJm4uaXBBZGRyZXNzJiYodC5pcEFkZHJlc3M9bi5pcEFkZHJlc3MpLCF0LnVzZXJBZ2VudCYmbi51c2VyQWdlbnQmJih0LnVzZXJBZ2VudD1uLnVzZXJBZ2VudCksIm51bWJlciI9PXR5cGVvZiBuLmVycm9ycyYmKHQuZXJyb3JzPW4uZXJyb3JzKSxuLnN0YXR1cyYmKHQuc3RhdHVzPW4uc3RhdHVzKX1jb25zdCB2dD0iX3NlbnRyeVNwYW4iO2Z1bmN0aW9uIF90KHQsbil7bj9mdW5jdGlvbih0LG4sZSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4se3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9Y2F0Y2goZSl7JCYmay5sb2coYEZhaWxlZCB0byBhZGQgbm9uLWVudW1lcmFibGUgcHJvcGVydHkgIiR7bn0iIHRvIG9iamVjdGAsdCl9fSh0LHZ0LG4pOmRlbGV0ZSB0W3Z0XX1mdW5jdGlvbiB3dCh0KXtyZXR1cm4gdFt2dF19Y2xhc3MgU3R7Y29uc3RydWN0b3IoKXt0aGlzLl89ITEsdGhpcy5TPVtdLHRoaXMuTj1bXSx0aGlzLms9W10sdGhpcy5DPVtdLHRoaXMuRD17fSx0aGlzLlQ9e30sdGhpcy5PPXt9LHRoaXMuaj17fSx0aGlzLlI9e30sdGhpcy5BPWR0KCl9Y2xvbmUoKXtjb25zdCB0PW5ldyBTdDtyZXR1cm4gdC5rPVsuLi50aGlzLmtdLHQuVD17Li4udGhpcy5UfSx0Lk89ey4uLnRoaXMuT30sdC5qPXsuLi50aGlzLmp9LHQuRD10aGlzLkQsdC5JPXRoaXMuSSx0LlA9dGhpcy5QLHQuVT10aGlzLlUsdC5NPXRoaXMuTSx0Lk49Wy4uLnRoaXMuTl0sdC5MPXRoaXMuTCx0LkM9Wy4uLnRoaXMuQ10sdC5SPXsuLi50aGlzLlJ9LHQuQT17Li4udGhpcy5BfSx0LkI9dGhpcy5CLHQuRz10aGlzLkcsX3QodCx3dCh0aGlzKSksdH1zZXRDbGllbnQodCl7dGhpcy5CPXR9c2V0TGFzdEV2ZW50SWQodCl7dGhpcy5HPXR9Z2V0Q2xpZW50KCl7cmV0dXJuIHRoaXMuQn1sYXN0RXZlbnRJZCgpe3JldHVybiB0aGlzLkd9YWRkU2NvcGVMaXN0ZW5lcih0KXt0aGlzLlMucHVzaCh0KX1hZGRFdmVudFByb2Nlc3Nvcih0KXtyZXR1cm4gdGhpcy5OLnB1c2godCksdGhpc31zZXRVc2VyKHQpe3JldHVybiB0aGlzLkQ9dHx8e2VtYWlsOnZvaWQgMCxpZDp2b2lkIDAsaXBfYWRkcmVzczp2b2lkIDAsdXNlcm5hbWU6dm9pZCAwfSx0aGlzLlAmJmJ0KHRoaXMuUCx7dXNlcjp0fSksdGhpcy5KKCksdGhpc31nZXRVc2VyKCl7cmV0dXJuIHRoaXMuRH1nZXRSZXF1ZXN0U2Vzc2lvbigpe3JldHVybiB0aGlzLkx9c2V0UmVxdWVzdFNlc3Npb24odCl7cmV0dXJuIHRoaXMuTD10LHRoaXN9c2V0VGFncyh0KXtyZXR1cm4gdGhpcy5UPXsuLi50aGlzLlQsLi4udH0sdGhpcy5KKCksdGhpc31zZXRUYWcodCxuKXtyZXR1cm4gdGhpcy5UPXsuLi50aGlzLlQsW3RdOm59LHRoaXMuSigpLHRoaXN9c2V0RXh0cmFzKHQpe3JldHVybiB0aGlzLk89ey4uLnRoaXMuTywuLi50fSx0aGlzLkooKSx0aGlzfXNldEV4dHJhKHQsbil7cmV0dXJuIHRoaXMuTz17Li4udGhpcy5PLFt0XTpufSx0aGlzLkooKSx0aGlzfXNldEZpbmdlcnByaW50KHQpe3JldHVybiB0aGlzLk09dCx0aGlzLkooKSx0aGlzfXNldExldmVsKHQpe3JldHVybiB0aGlzLkk9dCx0aGlzLkooKSx0aGlzfXNldFRyYW5zYWN0aW9uTmFtZSh0KXtyZXR1cm4gdGhpcy5VPXQsdGhpcy5KKCksdGhpc31zZXRDb250ZXh0KHQsbil7cmV0dXJuIG51bGw9PT1uP2RlbGV0ZSB0aGlzLmpbdF06dGhpcy5qW3RdPW4sdGhpcy5KKCksdGhpc31zZXRTZXNzaW9uKHQpe3JldHVybiB0P3RoaXMuUD10OmRlbGV0ZSB0aGlzLlAsdGhpcy5KKCksdGhpc31nZXRTZXNzaW9uKCl7cmV0dXJuIHRoaXMuUH11cGRhdGUodCl7aWYoIXQpcmV0dXJuIHRoaXM7Y29uc3Qgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90KHRoaXMpOnQsW2Uscl09biBpbnN0YW5jZW9mICR0P1tuLmdldFNjb3BlRGF0YSgpLG4uZ2V0UmVxdWVzdFNlc3Npb24oKV06bChuKT9bdCx0LnJlcXVlc3RTZXNzaW9uXTpbXSx7dGFnczpvLGV4dHJhOnMsdXNlcjppLGNvbnRleHRzOmMsbGV2ZWw6dSxmaW5nZXJwcmludDphPVtdLHByb3BhZ2F0aW9uQ29udGV4dDpmfT1lfHx7fTtyZXR1cm4gdGhpcy5UPXsuLi50aGlzLlQsLi4ub30sdGhpcy5PPXsuLi50aGlzLk8sLi4uc30sdGhpcy5qPXsuLi50aGlzLmosLi4uY30saSYmT2JqZWN0LmtleXMoaSkubGVuZ3RoJiYodGhpcy5EPWkpLHUmJih0aGlzLkk9dSksYS5sZW5ndGgmJih0aGlzLk09YSksZiYmKHRoaXMuQT1mKSxyJiYodGhpcy5MPXIpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy5rPVtdLHRoaXMuVD17fSx0aGlzLk89e30sdGhpcy5EPXt9LHRoaXMuaj17fSx0aGlzLkk9dm9pZCAwLHRoaXMuVT12b2lkIDAsdGhpcy5NPXZvaWQgMCx0aGlzLkw9dm9pZCAwLHRoaXMuUD12b2lkIDAsX3QodGhpcyx2b2lkIDApLHRoaXMuQz1bXSx0aGlzLkE9ZHQoKSx0aGlzLkooKSx0aGlzfWFkZEJyZWFkY3J1bWIodCxuKXtjb25zdCBlPSJudW1iZXIiPT10eXBlb2Ygbj9uOjEwMDtpZihlPD0wKXJldHVybiB0aGlzO2NvbnN0IHI9e3RpbWVzdGFtcDpHKCksLi4udH0sbz10aGlzLms7cmV0dXJuIG8ucHVzaChyKSx0aGlzLms9by5sZW5ndGg+ZT9vLnNsaWNlKC1lKTpvLHRoaXMuSigpLHRoaXN9Z2V0TGFzdEJyZWFkY3J1bWIoKXtyZXR1cm4gdGhpcy5rW3RoaXMuay5sZW5ndGgtMV19Y2xlYXJCcmVhZGNydW1icygpe3JldHVybiB0aGlzLms9W10sdGhpcy5KKCksdGhpc31hZGRBdHRhY2htZW50KHQpe3JldHVybiB0aGlzLkMucHVzaCh0KSx0aGlzfWNsZWFyQXR0YWNobWVudHMoKXtyZXR1cm4gdGhpcy5DPVtdLHRoaXN9Z2V0U2NvcGVEYXRhKCl7cmV0dXJue2JyZWFkY3J1bWJzOnRoaXMuayxhdHRhY2htZW50czp0aGlzLkMsY29udGV4dHM6dGhpcy5qLHRhZ3M6dGhpcy5ULGV4dHJhOnRoaXMuTyx1c2VyOnRoaXMuRCxsZXZlbDp0aGlzLkksZmluZ2VycHJpbnQ6dGhpcy5NfHxbXSxldmVudFByb2Nlc3NvcnM6dGhpcy5OLHByb3BhZ2F0aW9uQ29udGV4dDp0aGlzLkEsc2RrUHJvY2Vzc2luZ01ldGFkYXRhOnRoaXMuUix0cmFuc2FjdGlvbk5hbWU6dGhpcy5VLHNwYW46d3QodGhpcyl9fXNldFNES1Byb2Nlc3NpbmdNZXRhZGF0YSh0KXtyZXR1cm4gdGhpcy5SPXsuLi50aGlzLlIsLi4udH0sdGhpc31zZXRQcm9wYWdhdGlvbkNvbnRleHQodCl7cmV0dXJuIHRoaXMuQT10LHRoaXN9Z2V0UHJvcGFnYXRpb25Db250ZXh0KCl7cmV0dXJuIHRoaXMuQX1jYXB0dXJlRXhjZXB0aW9uKHQsbil7Y29uc3QgZT1uJiZuLmV2ZW50X2lkP24uZXZlbnRfaWQ6eigpO2lmKCF0aGlzLkIpcmV0dXJuIGsud2FybigiTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIGV4Y2VwdGlvbiEiKSxlO2NvbnN0IHI9bmV3IEVycm9yKCJTZW50cnkgc3ludGhldGljRXhjZXB0aW9uIik7cmV0dXJuIHRoaXMuQi5jYXB0dXJlRXhjZXB0aW9uKHQse29yaWdpbmFsRXhjZXB0aW9uOnQsc3ludGhldGljRXhjZXB0aW9uOnIsLi4ubixldmVudF9pZDplfSx0aGlzKSxlfWNhcHR1cmVNZXNzYWdlKHQsbixlKXtjb25zdCByPWUmJmUuZXZlbnRfaWQ/ZS5ldmVudF9pZDp6KCk7aWYoIXRoaXMuQilyZXR1cm4gay53YXJuKCJObyBjbGllbnQgY29uZmlndXJlZCBvbiBzY29wZSAtIHdpbGwgbm90IGNhcHR1cmUgbWVzc2FnZSEiKSxyO2NvbnN0IG89bmV3IEVycm9yKHQpO3JldHVybiB0aGlzLkIuY2FwdHVyZU1lc3NhZ2UodCxuLHtvcmlnaW5hbEV4Y2VwdGlvbjp0LHN5bnRoZXRpY0V4Y2VwdGlvbjpvLC4uLmUsZXZlbnRfaWQ6cn0sdGhpcykscn1jYXB0dXJlRXZlbnQodCxuKXtjb25zdCBlPW4mJm4uZXZlbnRfaWQ/bi5ldmVudF9pZDp6KCk7cmV0dXJuIHRoaXMuQj8odGhpcy5CLmNhcHR1cmVFdmVudCh0LHsuLi5uLGV2ZW50X2lkOmV9LHRoaXMpLGUpOihrLndhcm4oIk5vIGNsaWVudCBjb25maWd1cmVkIG9uIHNjb3BlIC0gd2lsbCBub3QgY2FwdHVyZSBldmVudCEiKSxlKX1KKCl7dGhpcy5ffHwodGhpcy5fPSEwLHRoaXMuUy5mb3JFYWNoKCh0PT57dCh0aGlzKX0pKSx0aGlzLl89ITEpfX1jb25zdCAkdD1TdDtjbGFzcyBFdHtjb25zdHJ1Y3Rvcih0LG4pe2xldCBlLHI7ZT10fHxuZXcgJHQscj1ufHxuZXcgJHQsdGhpcy5IPVt7c2NvcGU6ZX1dLHRoaXMuVz1yfXdpdGhTY29wZSh0KXtjb25zdCBuPXRoaXMuWSgpO2xldCBlO3RyeXtlPXQobil9Y2F0Y2godCl7dGhyb3cgdGhpcy5xKCksdH1yZXR1cm4gbShlKT9lLnRoZW4oKHQ9Pih0aGlzLnEoKSx0KSksKHQ9Pnt0aHJvdyB0aGlzLnEoKSx0fSkpOih0aGlzLnEoKSxlKX1nZXRDbGllbnQoKXtyZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLmNsaWVudH1nZXRTY29wZSgpe3JldHVybiB0aGlzLmdldFN0YWNrVG9wKCkuc2NvcGV9Z2V0SXNvbGF0aW9uU2NvcGUoKXtyZXR1cm4gdGhpcy5XfWdldFN0YWNrKCl7cmV0dXJuIHRoaXMuSH1nZXRTdGFja1RvcCgpe3JldHVybiB0aGlzLkhbdGhpcy5ILmxlbmd0aC0xXX1ZKCl7Y29uc3QgdD10aGlzLmdldFNjb3BlKCkuY2xvbmUoKTtyZXR1cm4gdGhpcy5nZXRTdGFjaygpLnB1c2goe2NsaWVudDp0aGlzLmdldENsaWVudCgpLHNjb3BlOnR9KSx0fXEoKXtyZXR1cm4hKHRoaXMuZ2V0U3RhY2soKS5sZW5ndGg8PTEpJiYhIXRoaXMuZ2V0U3RhY2soKS5wb3AoKX19ZnVuY3Rpb24geHQoKXtjb25zdCB0PXl0KG10KCkpO3JldHVybiB0LnN0YWNrPXQuc3RhY2t8fG5ldyBFdCh2KCJkZWZhdWx0Q3VycmVudFNjb3BlIiwoKCk9Pm5ldyAkdCkpLHYoImRlZmF1bHRJc29sYXRpb25TY29wZSIsKCgpPT5uZXcgJHQpKSl9ZnVuY3Rpb24gTnQodCl7cmV0dXJuIHh0KCkud2l0aFNjb3BlKHQpfWZ1bmN0aW9uIGt0KHQsbil7Y29uc3QgZT14dCgpO3JldHVybiBlLndpdGhTY29wZSgoKCk9PihlLmdldFN0YWNrVG9wKCkuc2NvcGU9dCxuKHQpKSkpfWZ1bmN0aW9uIEN0KHQpe3JldHVybiB4dCgpLndpdGhTY29wZSgoKCk9PnQoeHQoKS5nZXRJc29sYXRpb25TY29wZSgpKSkpfWZ1bmN0aW9uIER0KHQpe2NvbnN0IG49eXQodCk7cmV0dXJuIG4uYWNzP24uYWNzOnt3aXRoSXNvbGF0aW9uU2NvcGU6Q3Qsd2l0aFNjb3BlOk50LHdpdGhTZXRTY29wZTprdCx3aXRoU2V0SXNvbGF0aW9uU2NvcGU6KHQsbik9PkN0KG4pLGdldEN1cnJlbnRTY29wZTooKT0+eHQoKS5nZXRTY29wZSgpLGdldElzb2xhdGlvblNjb3BlOigpPT54dCgpLmdldElzb2xhdGlvblNjb3BlKCl9fWZ1bmN0aW9uIFR0KCl7cmV0dXJuIER0KG10KCkpLmdldEN1cnJlbnRTY29wZSgpLmdldENsaWVudCgpfWNvbnN0IE90PSJfc2VudHJ5TWV0cmljcyI7ZnVuY3Rpb24ganQodCl7Y29uc3Qgbj10W090XTtpZighbilyZXR1cm47Y29uc3QgZT17fTtmb3IoY29uc3RbLFt0LHJdXW9mIG4peyhlW3RdfHwoZVt0XT1bXSkpLnB1c2goUihyKSl9cmV0dXJuIGV9Y29uc3QgUnQ9InNlbnRyeS5zb3VyY2UiLEF0PSJzZW50cnkuc2FtcGxlX3JhdGUiLEl0PSJzZW50cnkub3AiLFB0PSJzZW50cnkub3JpZ2luIixVdD0wLE10PTEsTHQ9MTtmdW5jdGlvbiBCdCh0KXtjb25zdHtzcGFuSWQ6bix0cmFjZUlkOmV9PXQuc3BhbkNvbnRleHQoKSx7cGFyZW50X3NwYW5faWQ6cn09enQodCk7cmV0dXJuIFIoe3BhcmVudF9zcGFuX2lkOnIsc3Bhbl9pZDpuLHRyYWNlX2lkOmV9KX1mdW5jdGlvbiBHdCh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/SnQodCk6QXJyYXkuaXNBcnJheSh0KT90WzBdK3RbMV0vMWU5OnQgaW5zdGFuY2VvZiBEYXRlP0p0KHQuZ2V0VGltZSgpKTpKKCl9ZnVuY3Rpb24gSnQodCl7cmV0dXJuIHQ+OTk5OTk5OTk5OT90LzFlMzp0fWZ1bmN0aW9uIHp0KHQpe2lmKGZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldFNwYW5KU09OfSh0KSlyZXR1cm4gdC5nZXRTcGFuSlNPTigpO3RyeXtjb25zdHtzcGFuSWQ6bix0cmFjZUlkOmV9PXQuc3BhbkNvbnRleHQoKTtpZihmdW5jdGlvbih0KXtjb25zdCBuPXQ7cmV0dXJuISEobi5hdHRyaWJ1dGVzJiZuLnN0YXJ0VGltZSYmbi5uYW1lJiZuLmVuZFRpbWUmJm4uc3RhdHVzKX0odCkpe2NvbnN0e2F0dHJpYnV0ZXM6cixzdGFydFRpbWU6byxuYW1lOnMsZW5kVGltZTppLHBhcmVudFNwYW5JZDpjLHN0YXR1czp1fT10O3JldHVybiBSKHtzcGFuX2lkOm4sdHJhY2VfaWQ6ZSxkYXRhOnIsZGVzY3JpcHRpb246cyxwYXJlbnRfc3Bhbl9pZDpjLHN0YXJ0X3RpbWVzdGFtcDpHdChvKSx0aW1lc3RhbXA6R3QoaSl8fHZvaWQgMCxzdGF0dXM6SHQodSksb3A6cltJdF0sb3JpZ2luOnJbUHRdLF9tZXRyaWNzX3N1bW1hcnk6anQodCl9KX1yZXR1cm57c3Bhbl9pZDpuLHRyYWNlX2lkOmV9fWNhdGNoKHQpe3JldHVybnt9fX1mdW5jdGlvbiBIdCh0KXtpZih0JiZ0LmNvZGUhPT1VdClyZXR1cm4gdC5jb2RlPT09TXQ/Im9rIjp0Lm1lc3NhZ2V8fCJ1bmtub3duX2Vycm9yIn1jb25zdCBXdD0iX3NlbnRyeVJvb3RTcGFuIjtmdW5jdGlvbiBZdCh0KXtyZXR1cm4gdFtXdF18fHR9Y29uc3QgcXQ9InByb2R1Y3Rpb24iLEZ0PSJfZnJvemVuRHNjIjtmdW5jdGlvbiBLdCh0KXtjb25zdCBuPVR0KCk7aWYoIW4pcmV0dXJue307Y29uc3QgZT1mdW5jdGlvbih0LG4pe2NvbnN0IGU9bi5nZXRPcHRpb25zKCkse3B1YmxpY0tleTpyfT1uLmdldERzbigpfHx7fSxvPVIoe2Vudmlyb25tZW50OmUuZW52aXJvbm1lbnR8fHF0LHJlbGVhc2U6ZS5yZWxlYXNlLHB1YmxpY19rZXk6cix0cmFjZV9pZDp0fSk7cmV0dXJuIG4uZW1pdCgiY3JlYXRlRHNjIixvKSxvfSh6dCh0KS50cmFjZV9pZHx8IiIsbikscj1ZdCh0KSxvPXJbRnRdO2lmKG8pcmV0dXJuIG87Y29uc3Qgcz1yLnNwYW5Db250ZXh0KCkudHJhY2VTdGF0ZSxpPXMmJnMuZ2V0KCJzZW50cnkuZHNjIiksYz1pJiZldChpKTtpZihjKXJldHVybiBjO2NvbnN0IHU9enQociksYT11LmRhdGF8fHt9LGY9YVtBdF07bnVsbCE9ZiYmKGUuc2FtcGxlX3JhdGU9YCR7Zn1gKTtjb25zdCBoPWFbUnRdLHA9dS5kZXNjcmlwdGlvbjtyZXR1cm4idXJsIiE9PWgmJnAmJihlLnRyYW5zYWN0aW9uPXApLGUuc2FtcGxlZD1TdHJpbmcoZnVuY3Rpb24odCl7Y29uc3R7dHJhY2VGbGFnczpufT10LnNwYW5Db250ZXh0KCk7cmV0dXJuIG49PT1MdH0ocikpLG4uZW1pdCgiY3JlYXRlRHNjIixlLHIpLGV9ZnVuY3Rpb24gVnQodCxuLGUscil7Y29uc3Qgbz1mdChlKSxzPXQudHlwZSYmInJlcGxheV9ldmVudCIhPT10LnR5cGU/dC50eXBlOiJldmVudCI7IWZ1bmN0aW9uKHQsbil7biYmKHQuc2RrPXQuc2RrfHx7fSx0LnNkay5uYW1lPXQuc2RrLm5hbWV8fG4ubmFtZSx0LnNkay52ZXJzaW9uPXQuc2RrLnZlcnNpb258fG4udmVyc2lvbix0LnNkay5pbnRlZ3JhdGlvbnM9Wy4uLnQuc2RrLmludGVncmF0aW9uc3x8W10sLi4ubi5pbnRlZ3JhdGlvbnN8fFtdXSx0LnNkay5wYWNrYWdlcz1bLi4udC5zZGsucGFja2FnZXN8fFtdLC4uLm4ucGFja2FnZXN8fFtdXSl9KHQsZSYmZS5zZGspO2NvbnN0IGk9ZnVuY3Rpb24odCxuLGUscil7Y29uc3Qgbz10LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSYmdC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEuZHluYW1pY1NhbXBsaW5nQ29udGV4dDtyZXR1cm57ZXZlbnRfaWQ6dC5ldmVudF9pZCxzZW50X2F0OihuZXcgRGF0ZSkudG9JU09TdHJpbmcoKSwuLi5uJiZ7c2RrOm59LC4uLiEhZSYmciYme2RzbjpDKHIpfSwuLi5vJiZ7dHJhY2U6Uih7Li4ub30pfX19KHQsbyxyLG4pO2RlbGV0ZSB0LnNka1Byb2Nlc3NpbmdNZXRhZGF0YTtyZXR1cm4gb3QoaSxbW3t0eXBlOnN9LHRdXSl9Y29uc3QgWnQ9Il9fU0VOVFJZX1NVUFBSRVNTX1RSQUNJTkdfXyI7ZnVuY3Rpb24gUXQodCl7Y29uc3Qgbj1EdChtdCgpKTtyZXR1cm4gbi5zdXBwcmVzc1RyYWNpbmc/bi5zdXBwcmVzc1RyYWNpbmcodCk6ZnVuY3Rpb24oLi4udCl7Y29uc3Qgbj1EdChtdCgpKTtpZigyPT09dC5sZW5ndGgpe2NvbnN0W2Uscl09dDtyZXR1cm4gZT9uLndpdGhTZXRTY29wZShlLHIpOm4ud2l0aFNjb3BlKHIpfXJldHVybiBuLndpdGhTY29wZSh0WzBdKX0oKG49PihuLnNldFNES1Byb2Nlc3NpbmdNZXRhZGF0YSh7W1p0XTohMH0pLHQoKSkpKX1mdW5jdGlvbiBYdCh0LG4pe2NvbnN0e2ZpbmdlcnByaW50OmUsc3BhbjpyLGJyZWFkY3J1bWJzOm8sc2RrUHJvY2Vzc2luZ01ldGFkYXRhOnN9PW47IWZ1bmN0aW9uKHQsbil7Y29uc3R7ZXh0cmE6ZSx0YWdzOnIsdXNlcjpvLGNvbnRleHRzOnMsbGV2ZWw6aSx0cmFuc2FjdGlvbk5hbWU6Y309bix1PVIoZSk7dSYmT2JqZWN0LmtleXModSkubGVuZ3RoJiYodC5leHRyYT17Li4udSwuLi50LmV4dHJhfSk7Y29uc3QgYT1SKHIpO2EmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKHQudGFncz17Li4uYSwuLi50LnRhZ3N9KTtjb25zdCBmPVIobyk7ZiYmT2JqZWN0LmtleXMoZikubGVuZ3RoJiYodC51c2VyPXsuLi5mLC4uLnQudXNlcn0pO2NvbnN0IGg9UihzKTtoJiZPYmplY3Qua2V5cyhoKS5sZW5ndGgmJih0LmNvbnRleHRzPXsuLi5oLC4uLnQuY29udGV4dHN9KTtpJiYodC5sZXZlbD1pKTtjJiYidHJhbnNhY3Rpb24iIT09dC50eXBlJiYodC50cmFuc2FjdGlvbj1jKX0odCxuKSxyJiZmdW5jdGlvbih0LG4pe3QuY29udGV4dHM9e3RyYWNlOkJ0KG4pLC4uLnQuY29udGV4dHN9LHQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhPXtkeW5hbWljU2FtcGxpbmdDb250ZXh0Okt0KG4pLC4uLnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhfTtjb25zdCBlPVl0KG4pLHI9enQoZSkuZGVzY3JpcHRpb247ciYmIXQudHJhbnNhY3Rpb24mJiJ0cmFuc2FjdGlvbiI9PT10LnR5cGUmJih0LnRyYW5zYWN0aW9uPXIpfSh0LHIpLGZ1bmN0aW9uKHQsbil7dC5maW5nZXJwcmludD10LmZpbmdlcnByaW50P2Z1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W3RdfSh0LmZpbmdlcnByaW50KTpbXSxuJiYodC5maW5nZXJwcmludD10LmZpbmdlcnByaW50LmNvbmNhdChuKSk7dC5maW5nZXJwcmludCYmIXQuZmluZ2VycHJpbnQubGVuZ3RoJiZkZWxldGUgdC5maW5nZXJwcmludH0odCxlKSxmdW5jdGlvbih0LG4pe2NvbnN0IGU9Wy4uLnQuYnJlYWRjcnVtYnN8fFtdLC4uLm5dO3QuYnJlYWRjcnVtYnM9ZS5sZW5ndGg/ZTp2b2lkIDB9KHQsbyksZnVuY3Rpb24odCxuKXt0LnNka1Byb2Nlc3NpbmdNZXRhZGF0YT17Li4udC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEsLi4ubn19KHQscyl9Y29uc3QgdG49IjciO2Z1bmN0aW9uIG5uKHQsbil7cmV0dXJuIGU9e3NlbnRyeV9rZXk6dC5wdWJsaWNLZXksc2VudHJ5X3ZlcnNpb246dG4sLi4ubiYme3NlbnRyeV9jbGllbnQ6YCR7bi5uYW1lfS8ke24udmVyc2lvbn1gfX0sT2JqZWN0LmtleXMoZSkubWFwKCh0PT5gJHtlbmNvZGVVUklDb21wb25lbnQodCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGVbdF0pfWApKS5qb2luKCImIik7dmFyIGV9Y29uc3QgZW49NjQ7ZnVuY3Rpb24gcm4odCxuLGU9USh0LmJ1ZmZlclNpemV8fGVuKSl7bGV0IHI9e307cmV0dXJue3NlbmQ6ZnVuY3Rpb24obyl7Y29uc3Qgcz1bXTtpZihzdChvLCgobixlKT0+e2NvbnN0IG89YXQoZSk7aWYoZnVuY3Rpb24odCxuLGU9RGF0ZS5ub3coKSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbbl18fHQuYWxsfHwwfSh0LG4pPmV9KHIsbykpe2NvbnN0IHI9b24obixlKTt0LnJlY29yZERyb3BwZWRFdmVudCgicmF0ZWxpbWl0X2JhY2tvZmYiLG8scil9ZWxzZSBzLnB1c2gobil9KSksMD09PXMubGVuZ3RoKXJldHVybiBWKHt9KTtjb25zdCBpPW90KG9bMF0scyksYz1uPT57c3QoaSwoKGUscik9Pntjb25zdCBvPW9uKGUscik7dC5yZWNvcmREcm9wcGVkRXZlbnQobixhdChyKSxvKX0pKX07cmV0dXJuIGUuYWRkKCgoKT0+bih7Ym9keTpjdChpKX0pLnRoZW4oKHQ9Pih2b2lkIDAhPT10LnN0YXR1c0NvZGUmJih0LnN0YXR1c0NvZGU8MjAwfHx0LnN0YXR1c0NvZGU+PTMwMCkmJmx0JiZrLndhcm4oYFNlbnRyeSByZXNwb25kZWQgd2l0aCBzdGF0dXMgY29kZSAke3Quc3RhdHVzQ29kZX0gdG8gc2VudCBldmVudC5gKSxyPXB0KHIsdCksdCkpLCh0PT57dGhyb3cgYygibmV0d29ya19lcnJvciIpLHR9KSkpKS50aGVuKCh0PT50KSwodD0+e2lmKHQgaW5zdGFuY2VvZiBEKXJldHVybiBsdCYmay5lcnJvcigiU2tpcHBlZCBzZW5kaW5nIGV2ZW50IGJlY2F1c2UgYnVmZmVyIGlzIGZ1bGwuIiksYygicXVldWVfb3ZlcmZsb3ciKSxWKHt9KTt0aHJvdyB0fSkpfSxmbHVzaDp0PT5lLmRyYWluKHQpfX1mdW5jdGlvbiBvbih0LG4pe2lmKCJldmVudCI9PT1ufHwidHJhbnNhY3Rpb24iPT09bilyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90WzFdOnZvaWQgMH1jb25zdCBzbj1TeW1ib2woIkFnZW50QmFzZUludGVybmFsU3RhdGUiKTtjbGFzcyBjbiBleHRlbmRzIHMuQWdlbnR7W3NuXTtvcHRpb25zO2tlZXBBbGl2ZTtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzW3NuXT17fX1pc1NlY3VyZUVuZHBvaW50KHQpe2lmKHQpe2lmKCJib29sZWFuIj09dHlwZW9mIHQuc2VjdXJlRW5kcG9pbnQpcmV0dXJuIHQuc2VjdXJlRW5kcG9pbnQ7aWYoInN0cmluZyI9PXR5cGVvZiB0LnByb3RvY29sKXJldHVybiJodHRwczoiPT09dC5wcm90b2NvbH1jb25zdHtzdGFjazpufT1uZXcgRXJyb3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuJiZuLnNwbGl0KCJcbiIpLnNvbWUoKHQ9Pi0xIT09dC5pbmRleE9mKCIoaHR0cHMuanM6Iil8fC0xIT09dC5pbmRleE9mKCJub2RlOmh0dHBzOiIpKSl9Y3JlYXRlU29ja2V0KHQsbixlKXtjb25zdCByPXsuLi5uLHNlY3VyZUVuZHBvaW50OnRoaXMuaXNTZWN1cmVFbmRwb2ludChuKX07UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9PnRoaXMuY29ubmVjdCh0LHIpKSkudGhlbigobz0+e2lmKG8gaW5zdGFuY2VvZiBzLkFnZW50KXJldHVybiBvLmFkZFJlcXVlc3QodCxyKTt0aGlzW3NuXS5jdXJyZW50U29ja2V0PW8sc3VwZXIuY3JlYXRlU29ja2V0KHQsbixlKX0pLGUpfWNyZWF0ZUNvbm5lY3Rpb24oKXtjb25zdCB0PXRoaXNbc25dLmN1cnJlbnRTb2NrZXQ7aWYodGhpc1tzbl0uY3VycmVudFNvY2tldD12b2lkIDAsIXQpdGhyb3cgbmV3IEVycm9yKCJObyBzb2NrZXQgd2FzIHJldHVybmVkIGluIHRoZSBgY29ubmVjdCgpYCBmdW5jdGlvbiIpO3JldHVybiB0fWdldCBkZWZhdWx0UG9ydCgpe3JldHVybiB0aGlzW3NuXS5kZWZhdWx0UG9ydD8/KCJodHRwczoiPT09dGhpcy5wcm90b2NvbD80NDM6ODApfXNldCBkZWZhdWx0UG9ydCh0KXt0aGlzW3NuXSYmKHRoaXNbc25dLmRlZmF1bHRQb3J0PXQpfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzW3NuXS5wcm90b2NvbD8/KHRoaXMuaXNTZWN1cmVFbmRwb2ludCgpPyJodHRwczoiOiJodHRwOiIpfXNldCBwcm90b2NvbCh0KXt0aGlzW3NuXSYmKHRoaXNbc25dLnByb3RvY29sPXQpfX1mdW5jdGlvbiB1biguLi50KXtrLmxvZygiW2h0dHBzLXByb3h5LWFnZW50OnBhcnNlLXByb3h5LXJlc3BvbnNlXSIsLi4udCl9ZnVuY3Rpb24gYW4odCl7cmV0dXJuIG5ldyBQcm9taXNlKCgobixlKT0+e2xldCByPTA7Y29uc3Qgbz1bXTtmdW5jdGlvbiBzKCl7Y29uc3QgYz10LnJlYWQoKTtjP2Z1bmN0aW9uKGMpe28ucHVzaChjKSxyKz1jLmxlbmd0aDtjb25zdCB1PUJ1ZmZlci5jb25jYXQobyxyKSxhPXUuaW5kZXhPZigiXHJcblxyXG4iKTtpZigtMT09PWEpcmV0dXJuIHVuKCJoYXZlIG5vdCByZWNlaXZlZCBlbmQgb2YgSFRUUCBoZWFkZXJzIHlldC4uLiIpLHZvaWQgcygpO2NvbnN0IGY9dS5zbGljZSgwLGEpLnRvU3RyaW5nKCJhc2NpaSIpLnNwbGl0KCJcclxuIiksaD1mLnNoaWZ0KCk7aWYoIWgpcmV0dXJuIHQuZGVzdHJveSgpLGUobmV3IEVycm9yKCJObyBoZWFkZXIgcmVjZWl2ZWQgZnJvbSBwcm94eSBDT05ORUNUIHJlc3BvbnNlIikpO2NvbnN0IHA9aC5zcGxpdCgiICIpLGQ9KyhwWzFdfHwwKSxsPXAuc2xpY2UoMikuam9pbigiICIpLG09e307Zm9yKGNvbnN0IG4gb2YgZil7aWYoIW4pY29udGludWU7Y29uc3Qgcj1uLmluZGV4T2YoIjoiKTtpZigtMT09PXIpcmV0dXJuIHQuZGVzdHJveSgpLGUobmV3IEVycm9yKGBJbnZhbGlkIGhlYWRlciBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2U6ICIke259ImApKTtjb25zdCBvPW4uc2xpY2UoMCxyKS50b0xvd2VyQ2FzZSgpLHM9bi5zbGljZShyKzEpLnRyaW1TdGFydCgpLGk9bVtvXTsic3RyaW5nIj09dHlwZW9mIGk/bVtvXT1baSxzXTpBcnJheS5pc0FycmF5KGkpP2kucHVzaChzKTptW29dPXN9dW4oImdvdCBwcm94eSBzZXJ2ZXIgcmVzcG9uc2U6ICVvICVvIixoLG0pLGkoKSxuKHtjb25uZWN0OntzdGF0dXNDb2RlOmQsc3RhdHVzVGV4dDpsLGhlYWRlcnM6bX0sYnVmZmVyZWQ6dX0pfShjKTp0Lm9uY2UoInJlYWRhYmxlIixzKX1mdW5jdGlvbiBpKCl7dC5yZW1vdmVMaXN0ZW5lcigiZW5kIixjKSx0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsdSksdC5yZW1vdmVMaXN0ZW5lcigicmVhZGFibGUiLHMpfWZ1bmN0aW9uIGMoKXtpKCksdW4oIm9uZW5kIiksZShuZXcgRXJyb3IoIlByb3h5IGNvbm5lY3Rpb24gZW5kZWQgYmVmb3JlIHJlY2VpdmluZyBDT05ORUNUIHJlc3BvbnNlIikpfWZ1bmN0aW9uIHUodCl7aSgpLHVuKCJvbmVycm9yICVvIix0KSxlKHQpfXQub24oImVycm9yIix1KSx0Lm9uKCJlbmQiLGMpLHMoKX0pKX1mdW5jdGlvbiBmbiguLi50KXtrLmxvZygiW2h0dHBzLXByb3h5LWFnZW50XSIsLi4udCl9Y2xhc3MgaG4gZXh0ZW5kcyBjbntzdGF0aWMgcHJvdG9jb2xzPVsiaHR0cCIsImh0dHBzIl07cHJveHk7cHJveHlIZWFkZXJzO2Nvbm5lY3RPcHRzO2NvbnN0cnVjdG9yKHQsbil7c3VwZXIobiksdGhpcy5vcHRpb25zPXt9LHRoaXMucHJveHk9InN0cmluZyI9PXR5cGVvZiB0P25ldyBVUkwodCk6dCx0aGlzLnByb3h5SGVhZGVycz1uPy5oZWFkZXJzPz97fSxmbigiQ3JlYXRpbmcgbmV3IEh0dHBzUHJveHlBZ2VudCBpbnN0YW5jZTogJW8iLHRoaXMucHJveHkuaHJlZik7Y29uc3QgZT0odGhpcy5wcm94eS5ob3N0bmFtZXx8dGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFt8XF0kL2csIiIpLHI9dGhpcy5wcm94eS5wb3J0P3BhcnNlSW50KHRoaXMucHJveHkucG9ydCwxMCk6Imh0dHBzOiI9PT10aGlzLnByb3h5LnByb3RvY29sPzQ0Mzo4MDt0aGlzLmNvbm5lY3RPcHRzPXtBTFBOUHJvdG9jb2xzOlsiaHR0cC8xLjEiXSwuLi5uP2RuKG4sImhlYWRlcnMiKTpudWxsLGhvc3Q6ZSxwb3J0OnJ9fWFzeW5jIGNvbm5lY3QodCxuKXtjb25zdHtwcm94eTplfT10aGlzO2lmKCFuLmhvc3QpdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gImhvc3QiIHByb3ZpZGVkJyk7bGV0IHI7aWYoImh0dHBzOiI9PT1lLnByb3RvY29sKXtmbigiQ3JlYXRpbmcgYHRscy5Tb2NrZXRgOiAlbyIsdGhpcy5jb25uZWN0T3B0cyk7Y29uc3QgdD10aGlzLmNvbm5lY3RPcHRzLnNlcnZlcm5hbWV8fHRoaXMuY29ubmVjdE9wdHMuaG9zdDtyPWYuY29ubmVjdCh7Li4udGhpcy5jb25uZWN0T3B0cyxzZXJ2ZXJuYW1lOnQmJmEuaXNJUCh0KT92b2lkIDA6dH0pfWVsc2UgZm4oIkNyZWF0aW5nIGBuZXQuU29ja2V0YDogJW8iLHRoaXMuY29ubmVjdE9wdHMpLHI9YS5jb25uZWN0KHRoaXMuY29ubmVjdE9wdHMpO2NvbnN0IG89ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucHJveHlIZWFkZXJzP3RoaXMucHJveHlIZWFkZXJzKCk6ey4uLnRoaXMucHJveHlIZWFkZXJzfSxzPWEuaXNJUHY2KG4uaG9zdCk/YFske24uaG9zdH1dYDpuLmhvc3Q7bGV0IGk9YENPTk5FQ1QgJHtzfToke24ucG9ydH0gSFRUUC8xLjFcclxuYDtpZihlLnVzZXJuYW1lfHxlLnBhc3N3b3JkKXtjb25zdCB0PWAke2RlY29kZVVSSUNvbXBvbmVudChlLnVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQoZS5wYXNzd29yZCl9YDtvWyJQcm94eS1BdXRob3JpemF0aW9uIl09YEJhc2ljICR7QnVmZmVyLmZyb20odCkudG9TdHJpbmcoImJhc2U2NCIpfWB9by5Ib3N0PWAke3N9OiR7bi5wb3J0fWAsb1siUHJveHktQ29ubmVjdGlvbiJdfHwob1siUHJveHktQ29ubmVjdGlvbiJdPXRoaXMua2VlcEFsaXZlPyJLZWVwLUFsaXZlIjoiY2xvc2UiKTtmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyhvKSlpKz1gJHt0fTogJHtvW3RdfVxyXG5gO2NvbnN0IGM9YW4ocik7ci53cml0ZShgJHtpfVxyXG5gKTtjb25zdHtjb25uZWN0OnUsYnVmZmVyZWQ6aH09YXdhaXQgYztpZih0LmVtaXQoInByb3h5Q29ubmVjdCIsdSksdGhpcy5lbWl0KCJwcm94eUNvbm5lY3QiLHUsdCksMjAwPT09dS5zdGF0dXNDb2RlKXtpZih0Lm9uY2UoInNvY2tldCIscG4pLG4uc2VjdXJlRW5kcG9pbnQpe2ZuKCJVcGdyYWRpbmcgc29ja2V0IGNvbm5lY3Rpb24gdG8gVExTIik7Y29uc3QgdD1uLnNlcnZlcm5hbWV8fG4uaG9zdDtyZXR1cm4gZi5jb25uZWN0KHsuLi5kbihuLCJob3N0IiwicGF0aCIsInBvcnQiKSxzb2NrZXQ6cixzZXJ2ZXJuYW1lOmEuaXNJUCh0KT92b2lkIDA6dH0pfXJldHVybiByfXIuZGVzdHJveSgpO2NvbnN0IHA9bmV3IGEuU29ja2V0KHt3cml0YWJsZTohMX0pO3JldHVybiBwLnJlYWRhYmxlPSEwLHQub25jZSgic29ja2V0IiwodD0+e2ZuKCJSZXBsYXlpbmcgcHJveHkgYnVmZmVyIGZvciBmYWlsZWQgcmVxdWVzdCIpLHQucHVzaChoKSx0LnB1c2gobnVsbCl9KSkscH19ZnVuY3Rpb24gcG4odCl7dC5yZXN1bWUoKX1mdW5jdGlvbiBkbih0LC4uLm4pe2NvbnN0IGU9e307bGV0IHI7Zm9yKHIgaW4gdCluLmluY2x1ZGVzKHIpfHwoZVtyXT10W3JdKTtyZXR1cm4gZX1jb25zdCBsbj0zMjc2ODtmdW5jdGlvbiBtbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9eW0EtWl06LywiIikucmVwbGFjZSgvXFwvZywiLyIpfWNvbnN0IHluPWU7bGV0IGduLGJuPSExO2Z1bmN0aW9uIHZuKHQpe3luLmRlYnVnJiZjb25zb2xlLmxvZyhgW0FOUiBXb3JrZXJdICR7dH1gKX12YXIgX24sd24sU247Y29uc3QgJG49ZnVuY3Rpb24odCl7bGV0IG47dHJ5e249bmV3IFVSTCh0LnVybCl9Y2F0Y2gobil7cmV0dXJuIE4oKCgpPT57Y29uc29sZS53YXJuKCJbQHNlbnRyeS9ub2RlXTogSW52YWxpZCBkc24gb3IgdHVubmVsIG9wdGlvbiwgd2lsbCBub3Qgc2VuZCBhbnkgZXZlbnRzLiBUaGUgdHVubmVsIG9wdGlvbiBtdXN0IGJlIGEgZnVsbCBVUkwgd2hlbiB1c2VkLiIpfSkpLHJuKHQsKCgpPT5Qcm9taXNlLnJlc29sdmUoe30pKSl9Y29uc3QgZT0iaHR0cHM6Ij09PW4ucHJvdG9jb2wscj1mdW5jdGlvbih0LG4pe2NvbnN0e25vX3Byb3h5OmV9PXByb2Nlc3MuZW52O3JldHVybiBlJiZlLnNwbGl0KCIsIikuc29tZSgobj0+dC5ob3N0LmVuZHNXaXRoKG4pfHx0Lmhvc3RuYW1lLmVuZHNXaXRoKG4pKSk/dm9pZCAwOm59KG4sdC5wcm94eXx8KGU/cHJvY2Vzcy5lbnYuaHR0cHNfcHJveHk6dm9pZCAwKXx8cHJvY2Vzcy5lbnYuaHR0cF9wcm94eSksbz1lP2k6cyxhPXZvaWQgMCE9PXQua2VlcEFsaXZlJiZ0LmtlZXBBbGl2ZSxmPXI/bmV3IGhuKHIpOm5ldyBvLkFnZW50KHtrZWVwQWxpdmU6YSxtYXhTb2NrZXRzOjMwLHRpbWVvdXQ6MmUzfSk7cmV0dXJuIFF0KCgoKT0+e2NvbnN0IG49ZnVuY3Rpb24odCxuLGUpe2NvbnN0e2hvc3RuYW1lOnIscGF0aG5hbWU6byxwb3J0OnMscHJvdG9jb2w6aSxzZWFyY2g6YX09bmV3IFVSTCh0LnVybCk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBuZXcgUHJvbWlzZSgoKGgscCk9PntsZXQgZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGMoe3JlYWQoKXt0aGlzLnB1c2godCksdGhpcy5wdXNoKG51bGwpfX0pfShmLmJvZHkpO2NvbnN0IGw9ey4uLnQuaGVhZGVyc307Zi5ib2R5Lmxlbmd0aD5sbiYmKGxbImNvbnRlbnQtZW5jb2RpbmciXT0iZ3ppcCIsZD1kLnBpcGUodSgpKSk7Y29uc3QgbT1uLnJlcXVlc3Qoe21ldGhvZDoiUE9TVCIsYWdlbnQ6ZSxoZWFkZXJzOmwsaG9zdG5hbWU6cixwYXRoOmAke299JHthfWAscG9ydDpzLHByb3RvY29sOmksY2E6dC5jYUNlcnRzfSwodD0+e3Qub24oImRhdGEiLCgoKT0+e30pKSx0Lm9uKCJlbmQiLCgoKT0+e30pKSx0LnNldEVuY29kaW5nKCJ1dGY4Iik7Y29uc3Qgbj10LmhlYWRlcnNbInJldHJ5LWFmdGVyIl0/P251bGwsZT10LmhlYWRlcnNbIngtc2VudHJ5LXJhdGUtbGltaXRzIl0/P251bGw7aCh7c3RhdHVzQ29kZTp0LnN0YXR1c0NvZGUsaGVhZGVyczp7InJldHJ5LWFmdGVyIjpuLCJ4LXNlbnRyeS1yYXRlLWxpbWl0cyI6QXJyYXkuaXNBcnJheShlKT9lWzBdfHxudWxsOmV9fSl9KSk7bS5vbigiZXJyb3IiLHApLGQucGlwZShtKX0pKX19KHQsdC5odHRwTW9kdWxlPz9vLGYpO3JldHVybiBybih0LG4pfSkpfSh7dXJsOihfbj15bi5kc24sd249eW4udHVubmVsLFNuPXluLnNka01ldGFkYXRhLnNkayx3bnx8YCR7ZnVuY3Rpb24odCl7cmV0dXJuYCR7ZnVuY3Rpb24odCl7Y29uc3Qgbj10LnByb3RvY29sP2Ake3QucHJvdG9jb2x9OmA6IiIsZT10LnBvcnQ/YDoke3QucG9ydH1gOiIiO3JldHVybmAke259Ly8ke3QuaG9zdH0ke2V9JHt0LnBhdGg/YC8ke3QucGF0aH1gOiIifS9hcGkvYH0odCl9JHt0LnByb2plY3RJZH0vZW52ZWxvcGUvYH0oX24pfT8ke25uKF9uLFNuKX1gKSxyZWNvcmREcm9wcGVkRXZlbnQ6KCk9Pnt9fSk7YXN5bmMgZnVuY3Rpb24gRW4oKXtpZihnbil7dm4oIlNlbmRpbmcgYWJub3JtYWwgc2Vzc2lvbiIpLGJ0KGduLHtzdGF0dXM6ImFibm9ybWFsIixhYm5vcm1hbF9tZWNoYW5pc206ImFucl9mb3JlZ3JvdW5kIn0pO2NvbnN0IHQ9ZnVuY3Rpb24odCxuLGUscil7Y29uc3Qgbz1mdChlKTtyZXR1cm4gb3Qoe3NlbnRfYXQ6KG5ldyBEYXRlKS50b0lTT1N0cmluZygpLC4uLm8mJntzZGs6b30sLi4uISFyJiZuJiZ7ZHNuOkMobil9fSxbImFnZ3JlZ2F0ZXMiaW4gdD9be3R5cGU6InNlc3Npb25zIn0sdF06W3t0eXBlOiJzZXNzaW9uIn0sdC50b0pTT04oKV1dKX0oZ24seW4uZHNuLHluLnNka01ldGFkYXRhLHluLnR1bm5lbCk7dm4oSlNPTi5zdHJpbmdpZnkodCkpLGF3YWl0ICRuLnNlbmQodCk7dHJ5e24/LnBvc3RNZXNzYWdlKCJzZXNzaW9uLWVuZGVkIil9Y2F0Y2godCl7fX19ZnVuY3Rpb24geG4odCl7aWYoIXQpcmV0dXJuO2NvbnN0IG49ZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKXJldHVybltdO2NvbnN0IG49QXJyYXkuZnJvbSh0KTtyZXR1cm4vc2VudHJ5V3JhcHBlZC8udGVzdChNKG4pLmZ1bmN0aW9ufHwiIikmJm4ucG9wKCksbi5yZXZlcnNlKCksVS50ZXN0KE0obikuZnVuY3Rpb258fCIiKSYmKG4ucG9wKCksVS50ZXN0KE0obikuZnVuY3Rpb258fCIiKSYmbi5wb3AoKSksbi5zbGljZSgwLEkpLm1hcCgodD0+KHsuLi50LGZpbGVuYW1lOnQuZmlsZW5hbWV8fE0obikuZmlsZW5hbWUsZnVuY3Rpb246dC5mdW5jdGlvbnx8UH0pKSl9KHQpO2lmKHluLmFwcFJvb3RQYXRoKWZvcihjb25zdCB0IG9mIG4pdC5maWxlbmFtZSYmKHQuZmlsZW5hbWU9WSh0LmZpbGVuYW1lLHluLmFwcFJvb3RQYXRoKSk7cmV0dXJuIG59YXN5bmMgZnVuY3Rpb24gTm4odCxuKXtpZihibilyZXR1cm47Ym49ITAsYXdhaXQgRW4oKSx2bigiU2VuZGluZyBldmVudCIpO2NvbnN0IGU9e2V2ZW50X2lkOnooKSxjb250ZXh0czp5bi5jb250ZXh0cyxyZWxlYXNlOnluLnJlbGVhc2UsZW52aXJvbm1lbnQ6eW4uZW52aXJvbm1lbnQsZGlzdDp5bi5kaXN0LHBsYXRmb3JtOiJub2RlIixsZXZlbDoiZXJyb3IiLGV4Y2VwdGlvbjp7dmFsdWVzOlt7dHlwZToiQXBwbGljYXRpb25Ob3RSZXNwb25kaW5nIix2YWx1ZTpgQXBwbGljYXRpb24gTm90IFJlc3BvbmRpbmcgZm9yIGF0IGxlYXN0ICR7eW4uYW5yVGhyZXNob2xkfSBtc2Asc3RhY2t0cmFjZTp7ZnJhbWVzOnhuKHQpfSxtZWNoYW5pc206e3R5cGU6IkFOUiJ9fV19LHRhZ3M6eW4uc3RhdGljVGFnc307biYmZnVuY3Rpb24odCxuKXtpZihYdCh0LG4pLCF0LmNvbnRleHRzPy50cmFjZSl7Y29uc3R7dHJhY2VJZDplLHNwYW5JZDpyLHBhcmVudFNwYW5JZDpvfT1uLnByb3BhZ2F0aW9uQ29udGV4dDt0LmNvbnRleHRzPXt0cmFjZTp7dHJhY2VfaWQ6ZSxzcGFuX2lkOnIscGFyZW50X3NwYW5faWQ6b30sLi4udC5jb250ZXh0c319fShlLG4pO2NvbnN0IHI9VnQoZSx5bi5kc24seW4uc2RrTWV0YWRhdGEseW4udHVubmVsKTt2bihKU09OLnN0cmluZ2lmeShyKSksYXdhaXQgJG4uc2VuZChyKSxhd2FpdCAkbi5mbHVzaCgyZTMpLHNldFRpbWVvdXQoKCgpPT57cHJvY2Vzcy5leGl0KDApfSksNWUzKX1sZXQga247aWYodm4oIlN0YXJ0ZWQiKSx5bi5jYXB0dXJlU3RhY2tUcmFjZSl7dm4oIkNvbm5lY3RpbmcgdG8gZGVidWdnZXIiKTtjb25zdCBuPW5ldyB0O24uY29ubmVjdFRvTWFpblRocmVhZCgpLHZuKCJDb25uZWN0ZWQgdG8gZGVidWdnZXIiKTtjb25zdCBlPW5ldyBNYXA7bi5vbigiRGVidWdnZXIuc2NyaXB0UGFyc2VkIiwodD0+e2Uuc2V0KHQucGFyYW1zLnNjcmlwdElkLHQucGFyYW1zLnVybCl9KSksbi5vbigiRGVidWdnZXIucGF1c2VkIiwodD0+e2lmKCJvdGhlciI9PT10LnBhcmFtcy5yZWFzb24pdHJ5e3ZuKCJEZWJ1Z2dlciBwYXVzZWQiKTtjb25zdCBzPVsuLi50LnBhcmFtcy5jYWxsRnJhbWVzXSxpPXluLmFwcFJvb3RQYXRoP2Z1bmN0aW9uKHQ9KHByb2Nlc3MuYXJndlsxXT9GKHByb2Nlc3MuYXJndlsxXSk6cHJvY2Vzcy5jd2QoKSksbj0iXFwiPT09byl7Y29uc3QgZT1uP21uKHQpOnQ7cmV0dXJuIHQ9PntpZighdClyZXR1cm47Y29uc3Qgbz1uP21uKHQpOnQ7bGV0e2RpcjpzLGJhc2U6aSxleHQ6Y309ci5wYXJzZShvKTsiLmpzIiE9PWMmJiIubWpzIiE9PWMmJiIuY2pzIiE9PWN8fChpPWkuc2xpY2UoMCwtMSpjLmxlbmd0aCkpLHN8fChzPSIuIik7Y29uc3QgdT1zLmxhc3RJbmRleE9mKCIvbm9kZV9tb2R1bGVzIik7aWYodT4tMSlyZXR1cm5gJHtzLnNsaWNlKHUrMTQpLnJlcGxhY2UoL1wvL2csIi4iKX06JHtpfWA7aWYocy5zdGFydHNXaXRoKGUpKXtsZXQgdD1zLnNsaWNlKGUubGVuZ3RoKzEpLnJlcGxhY2UoL1wvL2csIi4iKTtyZXR1cm4gdCYmKHQrPSI6IiksdCs9aSx0fXJldHVybiBpfX0oeW4uYXBwUm9vdFBhdGgpOigpPT57fSxjPXMubWFwKCh0PT5mdW5jdGlvbih0LG4sZSl7Y29uc3Qgcj1uP24ucmVwbGFjZSgvXmZpbGU6XC9cLy8sIiIpOnZvaWQgMCxvPXQubG9jYXRpb24uY29sdW1uTnVtYmVyP3QubG9jYXRpb24uY29sdW1uTnVtYmVyKzE6dm9pZCAwLHM9dC5sb2NhdGlvbi5saW5lTnVtYmVyP3QubG9jYXRpb24ubGluZU51bWJlcisxOnZvaWQgMDtyZXR1cm4gUih7ZmlsZW5hbWU6cixtb2R1bGU6ZShyKSxmdW5jdGlvbjp0LmZ1bmN0aW9uTmFtZXx8UCxjb2xubzpvLGxpbmVubzpzLGluX2FwcDpyP1gocik6dm9pZCAwfSl9KHQsZS5nZXQodC5sb2NhdGlvbi5zY3JpcHRJZCksaSkpKSx1PXNldFRpbWVvdXQoKCgpPT57Tm4oYykudGhlbihudWxsLCgoKT0+e3ZuKCJTZW5kaW5nIEFOUiBldmVudCBmYWlsZWQuIil9KSl9KSw1ZTMpO24ucG9zdCgiUnVudGltZS5ldmFsdWF0ZSIse2V4cHJlc3Npb246Imdsb2JhbC5fX1NFTlRSWV9HRVRfU0NPUEVTX18oKTsiLHNpbGVudDohMCxyZXR1cm5CeVZhbHVlOiEwfSwoKHQsZSk9Pnt0JiZ2bihgRXJyb3IgZXhlY3V0aW5nIHNjcmlwdDogJyR7dC5tZXNzYWdlfSdgKSxjbGVhclRpbWVvdXQodSk7Y29uc3Qgcj1lJiZlLnJlc3VsdD9lLnJlc3VsdC52YWx1ZTp2b2lkIDA7bi5wb3N0KCJEZWJ1Z2dlci5yZXN1bWUiKSxuLnBvc3QoIkRlYnVnZ2VyLmRpc2FibGUiKSxObihjLHIpLnRoZW4obnVsbCwoKCk9Pnt2bigiU2VuZGluZyBBTlIgZXZlbnQgZmFpbGVkLiIpfSkpfSkpfWNhdGNoKHQpe3Rocm93IG4ucG9zdCgiRGVidWdnZXIucmVzdW1lIiksbi5wb3N0KCJEZWJ1Z2dlci5kaXNhYmxlIiksdH19KSksa249KCk9Pnt0cnl7bi5wb3N0KCJEZWJ1Z2dlci5lbmFibGUiLCgoKT0+e24ucG9zdCgiRGVidWdnZXIucGF1c2UiKX0pKX1jYXRjaCh0KXt9fX1jb25zdHtwb2xsOkNufT1mdW5jdGlvbih0LG4sZSxyKXtjb25zdCBvPXQoKTtsZXQgcz0hMSxpPSEwO3JldHVybiBzZXRJbnRlcnZhbCgoKCk9Pntjb25zdCB0PW8uZ2V0VGltZU1zKCk7ITE9PT1zJiZ0Pm4rZSYmKHM9ITAsaSYmcigpKSx0PG4rZSYmKHM9ITEpfSksMjApLHtwb2xsOigpPT57by5yZXNldCgpfSxlbmFibGVkOnQ9PntpPXR9fX0oKGZ1bmN0aW9uKCl7bGV0IHQ9cHJvY2Vzcy5ocnRpbWUoKTtyZXR1cm57Z2V0VGltZU1zOigpPT57Y29uc3RbbixlXT1wcm9jZXNzLmhydGltZSh0KTtyZXR1cm4gTWF0aC5mbG9vcigxZTMqbitlLzFlNil9LHJlc2V0OigpPT57dD1wcm9jZXNzLmhydGltZSgpfX19KSx5bi5wb2xsSW50ZXJ2YWwseW4uYW5yVGhyZXNob2xkLChmdW5jdGlvbigpe3ZuKCJXYXRjaGRvZyB0aW1lb3V0Iiksa24/KHZuKCJQYXVzaW5nIGRlYnVnZ2VyIHRvIGNhcHR1cmUgc3RhY2sgdHJhY2UiKSxrbigpKToodm4oIkNhcHR1cmluZyBldmVudCB3aXRob3V0IGEgc3RhY2sgdHJhY2UiKSxObigpLnRoZW4obnVsbCwoKCk9Pnt2bigiU2VuZGluZyBBTlIgZXZlbnQgZmFpbGVkIG9uIHdhdGNoZG9nIHRpbWVvdXQuIil9KSkpfSkpO24/Lm9uKCJtZXNzYWdlIiwodD0+e3Quc2Vzc2lvbiYmKGduPWd0KHQuc2Vzc2lvbikpLENuKCl9KSk7';
|
|
15
|
-
|
|
16
|
-
const DEFAULT_INTERVAL = 50;
|
|
17
|
-
const DEFAULT_HANG_THRESHOLD = 5000;
|
|
18
|
-
|
|
19
|
-
function log(message, ...args) {
|
|
20
|
-
utils.logger.log(`[ANR] ${message}`, ...args);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function globalWithScopeFetchFn() {
|
|
24
|
-
return utils.GLOBAL_OBJ;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/** Fetches merged scope data */
|
|
28
|
-
function getScopeData() {
|
|
29
|
-
const scope = core.getGlobalScope().getScopeData();
|
|
30
|
-
core.mergeScopeData(scope, core.getIsolationScope().getScopeData());
|
|
31
|
-
core.mergeScopeData(scope, core.getCurrentScope().getScopeData());
|
|
32
|
-
|
|
33
|
-
// We remove attachments because they likely won't serialize well as json
|
|
34
|
-
scope.attachments = [];
|
|
35
|
-
// We can't serialize event processor functions
|
|
36
|
-
scope.eventProcessors = [];
|
|
37
|
-
|
|
38
|
-
return scope;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Gets contexts by calling all event processors. This shouldn't be called until all integrations are setup
|
|
43
|
-
*/
|
|
44
|
-
async function getContexts(client) {
|
|
45
|
-
let event = { message: 'ANR' };
|
|
46
|
-
const eventHint = {};
|
|
47
|
-
|
|
48
|
-
for (const processor of client.getEventProcessors()) {
|
|
49
|
-
if (event === null) break;
|
|
50
|
-
event = await processor(event, eventHint);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return _optionalChain([event, 'optionalAccess', _2 => _2.contexts]) || {};
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const INTEGRATION_NAME = 'Anr';
|
|
57
|
-
|
|
58
|
-
const _anrIntegration = ((options = {}) => {
|
|
59
|
-
if (nodeVersion.NODE_VERSION.major < 16 || (nodeVersion.NODE_VERSION.major === 16 && nodeVersion.NODE_VERSION.minor < 17)) {
|
|
60
|
-
throw new Error('ANR detection requires Node 16.17.0 or later');
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
let worker;
|
|
64
|
-
let client;
|
|
65
|
-
|
|
66
|
-
// Hookup the scope fetch function to the global object so that it can be called from the worker thread via the
|
|
67
|
-
// debugger when it pauses
|
|
68
|
-
const gbl = globalWithScopeFetchFn();
|
|
69
|
-
gbl.__SENTRY_GET_SCOPES__ = getScopeData;
|
|
70
|
-
|
|
71
|
-
return {
|
|
72
|
-
name: INTEGRATION_NAME,
|
|
73
|
-
startWorker: () => {
|
|
74
|
-
if (worker) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
if (client) {
|
|
79
|
-
worker = _startWorker(client, options);
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
stopWorker: () => {
|
|
83
|
-
if (worker) {
|
|
84
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
85
|
-
worker.then(stop => {
|
|
86
|
-
stop();
|
|
87
|
-
worker = undefined;
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
setup(initClient) {
|
|
92
|
-
client = initClient;
|
|
93
|
-
|
|
94
|
-
// setImmediate is used to ensure that all other integrations have had their setup called first.
|
|
95
|
-
// This allows us to call into all integrations to fetch the full context
|
|
96
|
-
setImmediate(() => this.startWorker());
|
|
97
|
-
},
|
|
98
|
-
} ;
|
|
99
|
-
}) ;
|
|
100
|
-
|
|
101
|
-
const anrIntegration = core.defineIntegration(_anrIntegration) ;
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Starts the ANR worker thread
|
|
105
|
-
*
|
|
106
|
-
* @returns A function to stop the worker
|
|
107
|
-
*/
|
|
108
|
-
async function _startWorker(
|
|
109
|
-
client,
|
|
110
|
-
integrationOptions,
|
|
111
|
-
) {
|
|
112
|
-
const dsn = client.getDsn();
|
|
113
|
-
|
|
114
|
-
if (!dsn) {
|
|
115
|
-
return () => {
|
|
116
|
-
//
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const contexts = await getContexts(client);
|
|
121
|
-
|
|
122
|
-
// These will not be accurate if sent later from the worker thread
|
|
123
|
-
_optionalChainDelete([contexts, 'access', _3 => _3.app, 'optionalAccess', _4 => delete _4.app_memory]);
|
|
124
|
-
_optionalChainDelete([contexts, 'access', _5 => _5.device, 'optionalAccess', _6 => delete _6.free_memory]);
|
|
125
|
-
|
|
126
|
-
const initOptions = client.getOptions();
|
|
127
|
-
|
|
128
|
-
const sdkMetadata = client.getSdkMetadata() || {};
|
|
129
|
-
if (sdkMetadata.sdk) {
|
|
130
|
-
sdkMetadata.sdk.integrations = initOptions.integrations.map(i => i.name);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
const options = {
|
|
134
|
-
debug: utils.logger.isEnabled(),
|
|
135
|
-
dsn,
|
|
136
|
-
tunnel: initOptions.tunnel,
|
|
137
|
-
environment: initOptions.environment || 'production',
|
|
138
|
-
release: initOptions.release,
|
|
139
|
-
dist: initOptions.dist,
|
|
140
|
-
sdkMetadata,
|
|
141
|
-
appRootPath: integrationOptions.appRootPath,
|
|
142
|
-
pollInterval: integrationOptions.pollInterval || DEFAULT_INTERVAL,
|
|
143
|
-
anrThreshold: integrationOptions.anrThreshold || DEFAULT_HANG_THRESHOLD,
|
|
144
|
-
captureStackTrace: !!integrationOptions.captureStackTrace,
|
|
145
|
-
staticTags: integrationOptions.staticTags || {},
|
|
146
|
-
contexts,
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
if (options.captureStackTrace) {
|
|
150
|
-
const inspector = await import('node:inspector');
|
|
151
|
-
if (!inspector.url()) {
|
|
152
|
-
inspector.open(0);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const worker = new node_worker_threads.Worker(new URL(`data:application/javascript;base64,${base64WorkerScript}`), {
|
|
157
|
-
workerData: options,
|
|
158
|
-
// We don't want any Node args to be passed to the worker
|
|
159
|
-
execArgv: [],
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
process.on('exit', () => {
|
|
163
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
164
|
-
worker.terminate();
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
const timer = setInterval(() => {
|
|
168
|
-
try {
|
|
169
|
-
const currentSession = core.getCurrentScope().getSession();
|
|
170
|
-
// We need to copy the session object and remove the toJSON method so it can be sent to the worker
|
|
171
|
-
// serialized without making it a SerializedSession
|
|
172
|
-
const session = currentSession ? { ...currentSession, toJSON: undefined } : undefined;
|
|
173
|
-
// message the worker to tell it the main event loop is still running
|
|
174
|
-
worker.postMessage({ session });
|
|
175
|
-
} catch (_) {
|
|
176
|
-
//
|
|
177
|
-
}
|
|
178
|
-
}, options.pollInterval);
|
|
179
|
-
// Timer should not block exit
|
|
180
|
-
timer.unref();
|
|
181
|
-
|
|
182
|
-
worker.on('message', (msg) => {
|
|
183
|
-
if (msg === 'session-ended') {
|
|
184
|
-
log('ANR event sent from ANR worker. Clearing session in this thread.');
|
|
185
|
-
core.getCurrentScope().setSession(undefined);
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
worker.once('error', (err) => {
|
|
190
|
-
clearInterval(timer);
|
|
191
|
-
log('ANR worker error', err);
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
worker.once('exit', (code) => {
|
|
195
|
-
clearInterval(timer);
|
|
196
|
-
log('ANR worker exit', code);
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
// Ensure this thread can't block app exit
|
|
200
|
-
worker.unref();
|
|
201
|
-
|
|
202
|
-
return () => {
|
|
203
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
204
|
-
worker.terminate();
|
|
205
|
-
clearInterval(timer);
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
exports.anrIntegration = anrIntegration;
|
|
210
|
-
exports.base64WorkerScript = base64WorkerScript;
|
|
211
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
var {
|
|
2
|
-
_optionalChain
|
|
3
|
-
} = require('@sentry/utils');
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
6
|
-
|
|
7
|
-
const node_worker_threads = require('node:worker_threads');
|
|
8
|
-
const core = require('@sentry/core');
|
|
9
|
-
const utils = require('@sentry/utils');
|
|
10
|
-
const common = require('./common.js');
|
|
11
|
-
|
|
12
|
-
// This string is a placeholder that gets overwritten with the worker code.
|
|
13
|
-
const base64WorkerScript = 'LyohIEBzZW50cnkvbm9kZSA4LjEyLjAtYmV0YS4wIChhZjRlNzVhKSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQgKi8KaW1wb3J0e1Nlc3Npb24gYXMgZX1mcm9tIm5vZGU6aW5zcGVjdG9yL3Byb21pc2VzIjtpbXBvcnR7d29ya2VyRGF0YSBhcyBuLHBhcmVudFBvcnQgYXMgdH1mcm9tIm5vZGU6d29ya2VyX3RocmVhZHMiO2ltcG9ydHtwb3NpeCBhcyBvLHNlcCBhcyByfWZyb20ibm9kZTpwYXRoIjtjb25zdCBpPTUwLHM9Ij8iLGM9L1woZXJyb3I6ICguKilcKS8sYT0vY2FwdHVyZU1lc3NhZ2V8Y2FwdHVyZUV4Y2VwdGlvbi87ZnVuY3Rpb24gdShlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXXx8e319Y29uc3QgZj0vXihcUys6XFx8XC8/KShbXHNcU10qPykoKD86XC57MSwyfXxbXi9cXF0rP3wpKFwuW14uL1xcXSp8KSkoPzpbL1xcXSopJC87ZnVuY3Rpb24gbChlKXtjb25zdCBuPWZ1bmN0aW9uKGUpe2NvbnN0IG49ZS5sZW5ndGg+MTAyND9gPHRydW5jYXRlZD4ke2Uuc2xpY2UoLTEwMjQpfWA6ZSx0PWYuZXhlYyhuKTtyZXR1cm4gdD90LnNsaWNlKDEpOltdfShlKSx0PW5bMF18fCIiO2xldCBvPW5bMV07cmV0dXJuIHR8fG8/KG8mJihvPW8uc2xpY2UoMCxvLmxlbmd0aC0xKSksdCtvKToiLiJ9ZnVuY3Rpb24gZChlLG49ITEpe3JldHVybiEobnx8ZSYmIWUuc3RhcnRzV2l0aCgiLyIpJiYhZS5tYXRjaCgvXltBLVpdOi8pJiYhZS5zdGFydHNXaXRoKCIuIikmJiFlLm1hdGNoKC9eW2EtekEtWl0oW2EtekEtWjAtOS5cLStdKSo6XC9cLy8pKSYmdm9pZCAwIT09ZSYmIWUuaW5jbHVkZXMoIm5vZGVfbW9kdWxlcy8iKX1mdW5jdGlvbiBwKGUpe2NvbnN0IG49L15ccypbLV17NCx9JC8sdD0vYXQgKD86YXN5bmMgKT8oPzooLis/KVxzK1woKT8oPzooLispOihcZCspOihcZCspP3woW14pXSspKVwpPy87cmV0dXJuIG89Pntjb25zdCByPW8ubWF0Y2godCk7aWYocil7bGV0IG4sdCxvLGksYztpZihyWzFdKXtvPXJbMV07bGV0IGU9by5sYXN0SW5kZXhPZigiLiIpO2lmKCIuIj09PW9bZS0xXSYmZS0tLGU+MCl7bj1vLnNsaWNlKDAsZSksdD1vLnNsaWNlKGUrMSk7Y29uc3Qgcj1uLmluZGV4T2YoIi5Nb2R1bGUiKTtyPjAmJihvPW8uc2xpY2UocisxKSxuPW4uc2xpY2UoMCxyKSl9aT12b2lkIDB9dCYmKGk9bixjPXQpLCI8YW5vbnltb3VzPiI9PT10JiYoYz12b2lkIDAsbz12b2lkIDApLHZvaWQgMD09PW8mJihjPWN8fHMsbz1pP2Ake2l9LiR7Y31gOmMpO2xldCBhPXJbMl0mJnJbMl0uc3RhcnRzV2l0aCgiZmlsZTovLyIpP3JbMl0uc2xpY2UoNyk6clsyXTtjb25zdCB1PSJuYXRpdmUiPT09cls1XTtyZXR1cm4gYSYmYS5tYXRjaCgvXC9bQS1aXTovKSYmKGE9YS5zbGljZSgxKSksYXx8IXJbNV18fHV8fChhPXJbNV0pLHtmaWxlbmFtZTphLG1vZHVsZTplP2UoYSk6dm9pZCAwLGZ1bmN0aW9uOm8sbGluZW5vOmcoclszXSksY29sbm86ZyhyWzRdKSxpbl9hcHA6ZChhfHwiIix1KX19aWYoby5tYXRjaChuKSlyZXR1cm57ZmlsZW5hbWU6b319fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIHBhcnNlSW50KGV8fCIiLDEwKXx8dm9pZCAwfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIGUucmVwbGFjZSgvXltBLVpdOi8sIiIpLnJlcGxhY2UoL1xcL2csIi8iKX1jb25zdCBiPW4sJD1mdW5jdGlvbiguLi5lKXtjb25zdCBuPWUuc29ydCgoKGUsbik9PmVbMF0tblswXSkpLm1hcCgoZT0+ZVsxXSkpO3JldHVybihlLHQ9MCxvPTApPT57Y29uc3Qgcj1bXSxmPWUuc3BsaXQoIlxuIik7Zm9yKGxldCBlPXQ7ZTxmLmxlbmd0aDtlKyspe2NvbnN0IHQ9ZltlXTtpZih0Lmxlbmd0aD4xMDI0KWNvbnRpbnVlO2NvbnN0IHM9Yy50ZXN0KHQpP3QucmVwbGFjZShjLCIkMSIpOnQ7aWYoIXMubWF0Y2goL1xTKkVycm9yOiAvKSl7Zm9yKGNvbnN0IGUgb2Ygbil7Y29uc3Qgbj1lKHMpO2lmKG4pe3IucHVzaChuKTticmVha319aWYoci5sZW5ndGg+PWkrbylicmVha319cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClyZXR1cm5bXTtjb25zdCBuPUFycmF5LmZyb20oZSk7L3NlbnRyeVdyYXBwZWQvLnRlc3QodShuKS5mdW5jdGlvbnx8IiIpJiZuLnBvcCgpO24ucmV2ZXJzZSgpLGEudGVzdCh1KG4pLmZ1bmN0aW9ufHwiIikmJihuLnBvcCgpLGEudGVzdCh1KG4pLmZ1bmN0aW9ufHwiIikmJm4ucG9wKCkpO3JldHVybiBuLnNsaWNlKDAsaSkubWFwKChlPT4oey4uLmUsZmlsZW5hbWU6ZS5maWxlbmFtZXx8dShuKS5maWxlbmFtZSxmdW5jdGlvbjplLmZ1bmN0aW9ufHxzfSkpKX0oci5zbGljZShvKSl9fShbOTAscChmdW5jdGlvbihlPShwcm9jZXNzLmFyZ3ZbMV0/bChwcm9jZXNzLmFyZ3ZbMV0pOnByb2Nlc3MuY3dkKCkpLG49IlxcIj09PXIpe2NvbnN0IHQ9bj9tKGUpOmU7cmV0dXJuIGU9PntpZighZSlyZXR1cm47Y29uc3Qgcj1uP20oZSk6ZTtsZXR7ZGlyOmksYmFzZTpzLGV4dDpjfT1vLnBhcnNlKHIpOyIuanMiIT09YyYmIi5tanMiIT09YyYmIi5janMiIT09Y3x8KHM9cy5zbGljZSgwLC0xKmMubGVuZ3RoKSksaXx8KGk9Ii4iKTtjb25zdCBhPWkubGFzdEluZGV4T2YoIi9ub2RlX21vZHVsZXMiKTtpZihhPi0xKXJldHVybmAke2kuc2xpY2UoYSsxNCkucmVwbGFjZSgvXC8vZywiLiIpfToke3N9YDtpZihpLnN0YXJ0c1dpdGgodCkpe2xldCBlPWkuc2xpY2UodC5sZW5ndGgrMSkucmVwbGFjZSgvXC8vZywiLiIpO3JldHVybiBlJiYoZSs9IjoiKSxlKz1zLGV9cmV0dXJuIHN9fShiLmJhc2VQYXRoKSldKTtmdW5jdGlvbiB2KC4uLmUpe2IuZGVidWcmJmNvbnNvbGUubG9nKCJbTG9jYWxWYXJpYWJsZXMgV29ya2VyXSIsLi4uZSl9YXN5bmMgZnVuY3Rpb24gdyhlLG4sdCxvKXtjb25zdCByPWF3YWl0IGUucG9zdCgiUnVudGltZS5nZXRQcm9wZXJ0aWVzIix7b2JqZWN0SWQ6bixvd25Qcm9wZXJ0aWVzOiEwfSk7b1t0XT1yLnJlc3VsdC5maWx0ZXIoKGU9PiJsZW5ndGgiIT09ZS5uYW1lJiYhaXNOYU4ocGFyc2VJbnQoZS5uYW1lLDEwKSkpKS5zb3J0KCgoZSxuKT0+cGFyc2VJbnQoZS5uYW1lLDEwKS1wYXJzZUludChuLm5hbWUsMTApKSkubWFwKChlPT5lLnZhbHVlPy52YWx1ZSkpfWFzeW5jIGZ1bmN0aW9uIHkoZSxuLHQsbyl7Y29uc3Qgcj1hd2FpdCBlLnBvc3QoIlJ1bnRpbWUuZ2V0UHJvcGVydGllcyIse29iamVjdElkOm4sb3duUHJvcGVydGllczohMH0pO29bdF09ci5yZXN1bHQubWFwKChlPT5bZS5uYW1lLGUudmFsdWU/LnZhbHVlXSkpLnJlZHVjZSgoKGUsW24sdF0pPT4oZVtuXT10LGUpKSx7fSl9ZnVuY3Rpb24gaChlLG4pe2UudmFsdWUmJigidmFsdWUiaW4gZS52YWx1ZT92b2lkIDA9PT1lLnZhbHVlLnZhbHVlfHxudWxsPT09ZS52YWx1ZS52YWx1ZT9uW2UubmFtZV09YDwke2UudmFsdWUudmFsdWV9PmA6bltlLm5hbWVdPWUudmFsdWUudmFsdWU6ImRlc2NyaXB0aW9uImluIGUudmFsdWUmJiJmdW5jdGlvbiIhPT1lLnZhbHVlLnR5cGU/bltlLm5hbWVdPWA8JHtlLnZhbHVlLmRlc2NyaXB0aW9ufT5gOiJ1bmRlZmluZWQiPT09ZS52YWx1ZS50eXBlJiYobltlLm5hbWVdPSI8dW5kZWZpbmVkPiIpKX1hc3luYyBmdW5jdGlvbiBQKGUsbil7Y29uc3QgdD1hd2FpdCBlLnBvc3QoIlJ1bnRpbWUuZ2V0UHJvcGVydGllcyIse29iamVjdElkOm4sb3duUHJvcGVydGllczohMH0pLG89e307Zm9yKGNvbnN0IG4gb2YgdC5yZXN1bHQpaWYobj8udmFsdWU/Lm9iamVjdElkJiYiQXJyYXkiPT09bj8udmFsdWUuY2xhc3NOYW1lKXtjb25zdCB0PW4udmFsdWUub2JqZWN0SWQ7YXdhaXQgdyhlLHQsbi5uYW1lLG8pfWVsc2UgaWYobj8udmFsdWU/Lm9iamVjdElkJiYiT2JqZWN0Ij09PW4/LnZhbHVlPy5jbGFzc05hbWUpe2NvbnN0IHQ9bi52YWx1ZS5vYmplY3RJZDthd2FpdCB5KGUsdCxuLm5hbWUsbyl9ZWxzZSBuPy52YWx1ZSYmaChuLG8pO3JldHVybiBvfWxldCB4Oyhhc3luYyBmdW5jdGlvbigpe2NvbnN0IG49bmV3IGU7bi5jb25uZWN0VG9NYWluVGhyZWFkKCksdigiQ29ubmVjdGVkIHRvIG1haW4gdGhyZWFkIik7bGV0IG89ITE7bi5vbigiRGVidWdnZXIucmVzdW1lZCIsKCgpPT57bz0hMX0pKSxuLm9uKCJEZWJ1Z2dlci5wYXVzZWQiLChlPT57bz0hMCxhc3luYyBmdW5jdGlvbihlLG4se3JlYXNvbjpvLGRhdGE6cixjYWxsRnJhbWVzOml9KXtpZigiZXhjZXB0aW9uIiE9PW8mJiJwcm9taXNlUmVqZWN0aW9uIiE9PW8pcmV0dXJuO3g/LigpO2NvbnN0IHM9ZnVuY3Rpb24oZSxuKXtpZih2b2lkIDAhPT1uKXJldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDAhPT1lKXJldHVybiBlLnNsaWNlKC0xMCkucmVkdWNlKCgoZSxuKT0+YCR7ZX0sJHtuLmZ1bmN0aW9ufSwke24ubGluZW5vfSwke24uY29sbm99YCksIiIpfShlKG4sMSkpfShuLHI/LmRlc2NyaXB0aW9uKTtpZihudWxsPT1zKXJldHVybjtjb25zdCBjPVtdO2ZvcihsZXQgbj0wO248aS5sZW5ndGg7bisrKXtjb25zdHtzY29wZUNoYWluOnQsZnVuY3Rpb25OYW1lOm8sdGhpczpyfT1pW25dLHM9dC5maW5kKChlPT4ibG9jYWwiPT09ZS50eXBlKSksYT0iZ2xvYmFsIiE9PXIuY2xhc3NOYW1lJiZyLmNsYXNzTmFtZT9gJHtyLmNsYXNzTmFtZX0uJHtvfWA6bztpZih2b2lkIDA9PT1zPy5vYmplY3Qub2JqZWN0SWQpY1tuXT17ZnVuY3Rpb246YX07ZWxzZXtjb25zdCB0PWF3YWl0IFAoZSxzLm9iamVjdC5vYmplY3RJZCk7Y1tuXT17ZnVuY3Rpb246YSx2YXJzOnR9fX10Py5wb3N0TWVzc2FnZSh7ZXhjZXB0aW9uSGFzaDpzLGZyYW1lczpjfSl9KG4sJCxlLnBhcmFtcykudGhlbigoKCk9Pm8/bi5wb3N0KCJEZWJ1Z2dlci5yZXN1bWUiKTpQcm9taXNlLnJlc29sdmUoKSksKGU9Pnt9KSl9KSksYXdhaXQgbi5wb3N0KCJEZWJ1Z2dlci5lbmFibGUiKTtjb25zdCByPSExIT09Yi5jYXB0dXJlQWxsRXhjZXB0aW9ucztpZihhd2FpdCBuLnBvc3QoIkRlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zIix7c3RhdGU6cj8iYWxsIjoidW5jYXVnaHQifSkscil7Y29uc3QgZT1iLm1heEV4Y2VwdGlvbnNQZXJTZWNvbmR8fDUwO3g9ZnVuY3Rpb24oZSxuLHQpe2xldCBvPTAscj01LGk9MDtyZXR1cm4gc2V0SW50ZXJ2YWwoKCgpPT57MD09PWk/bz5lJiYocio9Mix0KHIpLHI+ODY0MDAmJihyPTg2NDAwKSxpPXIpOihpLT0xLDA9PT1pJiZuKCkpLG89MH0pLDFlMykudW5yZWYoKSwoKT0+e28rPTF9fShlLChhc3luYygpPT57digiUmF0ZS1saW1pdCBsaWZ0ZWQuIiksYXdhaXQgbi5wb3N0KCJEZWJ1Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucyIse3N0YXRlOiJhbGwifSl9KSwoYXN5bmMgZT0+e3YoYFJhdGUtbGltaXQgZXhjZWVkZWQuIERpc2FibGluZyBjYXB0dXJpbmcgb2YgY2F1Z2h0IGV4Y2VwdGlvbnMgZm9yICR7ZX0gc2Vjb25kcy5gKSxhd2FpdCBuLnBvc3QoIkRlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zIix7c3RhdGU6InVuY2F1Z2h0In0pfSkpfX0pKCkuY2F0Y2goKGU9Pnt2KCJGYWlsZWQgdG8gc3RhcnQgZGVidWdnZXIiLGUpfSkpLHNldEludGVydmFsKCgoKT0+e30pLDFlNCk7';
|
|
14
|
-
|
|
15
|
-
function log(...args) {
|
|
16
|
-
utils.logger.log('[LocalVariables]', ...args);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Adds local variables to exception frames
|
|
21
|
-
*/
|
|
22
|
-
const localVariablesAsyncIntegration = core.defineIntegration(((
|
|
23
|
-
integrationOptions = {},
|
|
24
|
-
) => {
|
|
25
|
-
const cachedFrames = new utils.LRUMap(20);
|
|
26
|
-
|
|
27
|
-
function addLocalVariablesToException(exception) {
|
|
28
|
-
const hash = common.hashFrames(_optionalChain([exception, 'optionalAccess', _ => _.stacktrace, 'optionalAccess', _2 => _2.frames]));
|
|
29
|
-
|
|
30
|
-
if (hash === undefined) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// Check if we have local variables for an exception that matches the hash
|
|
35
|
-
// remove is identical to get but also removes the entry from the cache
|
|
36
|
-
const cachedFrame = cachedFrames.remove(hash);
|
|
37
|
-
|
|
38
|
-
if (cachedFrame === undefined) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Filter out frames where the function name is `new Promise` since these are in the error.stack frames
|
|
43
|
-
// but do not appear in the debugger call frames
|
|
44
|
-
const frames = (_optionalChain([exception, 'access', _3 => _3.stacktrace, 'optionalAccess', _4 => _4.frames]) || []).filter(frame => frame.function !== 'new Promise');
|
|
45
|
-
|
|
46
|
-
for (let i = 0; i < frames.length; i++) {
|
|
47
|
-
// Sentry frames are in reverse order
|
|
48
|
-
const frameIndex = frames.length - i - 1;
|
|
49
|
-
|
|
50
|
-
const cachedFrameVariable = cachedFrame[i];
|
|
51
|
-
const frameVariable = frames[frameIndex];
|
|
52
|
-
|
|
53
|
-
if (!frameVariable || !cachedFrameVariable) {
|
|
54
|
-
// Drop out if we run out of frames to match up
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (
|
|
59
|
-
// We need to have vars to add
|
|
60
|
-
cachedFrameVariable.vars === undefined ||
|
|
61
|
-
// We're not interested in frames that are not in_app because the vars are not relevant
|
|
62
|
-
frameVariable.in_app === false ||
|
|
63
|
-
// The function names need to match
|
|
64
|
-
!common.functionNamesMatch(frameVariable.function, cachedFrameVariable.function)
|
|
65
|
-
) {
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
frameVariable.vars = cachedFrameVariable.vars;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function addLocalVariablesToEvent(event) {
|
|
74
|
-
for (const exception of _optionalChain([event, 'access', _5 => _5.exception, 'optionalAccess', _6 => _6.values]) || []) {
|
|
75
|
-
addLocalVariablesToException(exception);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return event;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
async function startInspector() {
|
|
82
|
-
// We load inspector dynamically because on some platforms Node is built without inspector support
|
|
83
|
-
const inspector = await import('node:inspector');
|
|
84
|
-
if (!inspector.url()) {
|
|
85
|
-
inspector.open(0);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function startWorker(options) {
|
|
90
|
-
const worker = new node_worker_threads.Worker(new URL(`data:application/javascript;base64,${base64WorkerScript}`), {
|
|
91
|
-
workerData: options,
|
|
92
|
-
// We don't want any Node args to be passed to the worker
|
|
93
|
-
execArgv: [],
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
process.on('exit', () => {
|
|
97
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
98
|
-
worker.terminate();
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
worker.on('message', ({ exceptionHash, frames }) => {
|
|
102
|
-
cachedFrames.set(exceptionHash, frames);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
worker.once('error', (err) => {
|
|
106
|
-
log('Worker error', err);
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
worker.once('exit', (code) => {
|
|
110
|
-
log('Worker exit', code);
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
// Ensure this thread can't block app exit
|
|
114
|
-
worker.unref();
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return {
|
|
118
|
-
name: 'LocalVariablesAsync',
|
|
119
|
-
setup(client) {
|
|
120
|
-
const clientOptions = client.getOptions();
|
|
121
|
-
|
|
122
|
-
if (!clientOptions.includeLocalVariables) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const options = {
|
|
127
|
-
...integrationOptions,
|
|
128
|
-
debug: utils.logger.isEnabled(),
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
startInspector().then(
|
|
132
|
-
() => {
|
|
133
|
-
try {
|
|
134
|
-
startWorker(options);
|
|
135
|
-
} catch (e) {
|
|
136
|
-
utils.logger.error('Failed to start worker', e);
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
e => {
|
|
140
|
-
utils.logger.error('Failed to start inspector', e);
|
|
141
|
-
},
|
|
142
|
-
);
|
|
143
|
-
},
|
|
144
|
-
processEvent(event) {
|
|
145
|
-
return addLocalVariablesToEvent(event);
|
|
146
|
-
},
|
|
147
|
-
};
|
|
148
|
-
}) );
|
|
149
|
-
|
|
150
|
-
exports.base64WorkerScript = base64WorkerScript;
|
|
151
|
-
exports.localVariablesAsyncIntegration = localVariablesAsyncIntegration;
|
|
152
|
-
//# sourceMappingURL=local-variables-async.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ensureIsWrapped.js","sources":["../../../src/utils/ensureIsWrapped.ts"],"sourcesContent":["import { isWrapped } from '@opentelemetry/core';\nimport { hasTracingEnabled, isEnabled } from '@sentry/core';\nimport { consoleSandbox } from '@sentry/utils';\nimport { isCjs } from './commonjs';\n\n/**\n * Checks and warns if a framework isn't wrapped by opentelemetry.\n */\nexport function ensureIsWrapped(\n maybeWrappedModule: unknown,\n name: 'express' | 'connect' | 'fastify' | 'hapi' | 'koa',\n): void {\n if (!isWrapped(maybeWrappedModule) && isEnabled() && hasTracingEnabled()) {\n consoleSandbox(() => {\n if (isCjs()) {\n // eslint-disable-next-line no-console\n console.warn(\n `[Sentry] ${name} is not instrumented. This is likely because you required/imported ${name} before calling \\`Sentry.init()\\`.`,\n );\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `[Sentry] ${name} is not instrumented. Please make sure to initialize Sentry in a separate file that you \\`--import\\` when running node, see: https://docs.sentry.io/platforms/javascript/guides/${name}/install/esm/.`,\n );\n }\n });\n }\n}\n"],"names":["isWrapped","isEnabled","hasTracingEnabled","consoleSandbox","isCjs"],"mappings":";;;;;;;AAKA;AACA;AACA;AACO,SAAS,eAAe;AAC/B,EAAE,kBAAkB;AACpB,EAAE,IAAI;AACN,EAAQ;AACR,EAAE,IAAI,CAACA,cAAS,CAAC,kBAAkB,CAAA,IAAKC,gBAAS,EAAG,IAAGC,wBAAiB,EAAE,EAAE;AAC5E,IAAIC,oBAAc,CAAC,MAAM;AACzB,MAAM,IAAIC,cAAK,EAAE,EAAE;AACnB;AACA,QAAQ,OAAO,CAAC,IAAI;AACpB,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,mEAAmE,EAAE,IAAI,CAAC,kCAAkC,CAAC;AACxI,SAAS,CAAA;AACT,aAAa;AACb;AACA,QAAQ,OAAO,CAAC,IAAI;AACpB,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,gLAAgL,EAAE,IAAI,CAAC,cAAc,CAAC;AACjO,SAAS,CAAA;AACT,OAAM;AACN,KAAK,CAAC,CAAA;AACN,GAAE;AACF;;;;"}
|