{"version":3,"file":"core.mjs","sources":["../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/qdev.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/log.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/error/assert.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/error/error.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/qrl-utils.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/markers.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/platform/platform.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/element.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/promises.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/types.js","../../../dist-dev/tsc-out/packages/qwik/src/server/prefetch-strategy.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/flyweight.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/qrl.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-locale.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-sequential-scope.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/event-names.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-context.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/error/error-handling.js","../../../dist-dev/tsc-out/packages/qwik/src/core/version.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/jsx/slot.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/jsx/utils.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/signal/flags.js","../../../dist-dev/tsc-out/packages/qwik/src/core/signal/subscriber.js","../../../dist-dev/tsc-out/packages/qwik/src/core/signal/signal.js","../../../dist-dev/tsc-out/packages/qwik/src/core/signal/store.js","../../../dist-dev/tsc-out/packages/qwik/src/core/signal/signal-cleanup.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-lexical-scope.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-task.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/scoped-styles.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/types.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/util-mapArray.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/vnode-namespace.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/component-execution.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/constants.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/prop.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/character-escaping.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/unitless_number.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/hash_code.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/styles.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/jsx-filename.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/vnode-diff.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/implicit_dollar.js","../../../dist-dev/tsc-out/packages/qwik/src/core/signal/signal-api.js","../../../dist-dev/tsc-out/packages/qwik/src/core/signal/signal.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-resource.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/scheduler-document-position.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/scheduler.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/shared-container.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/vnode-data-types.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/process-vnode-data.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/dom-container.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-core.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/queue-qrl.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/async-generator.js","../../../dist-dev/tsc-out/packages/qwik/src/core/ssr/ssr-render-component.js","../../../dist-dev/tsc-out/packages/qwik/src/core/ssr/ssr-render-jsx.js","../../../dist-dev/tsc-out/packages/qwik/src/core/signal/signal-utils.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/inlined-fn.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared-types.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/jsx/jsx-runtime.js","../../../dist-dev/tsc-out/packages/qwik/src/core/debug.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/maps.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/vnode.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/shared-serialization.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/serialize-utils.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/qrl-class.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/qrl.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/component.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/qrl/qrl.public.dollar.js","../../../dist-dev/tsc-out/packages/qwik/src/core/client/dom-render.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-store.public.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/unique-index-generator.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-id.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-env-data.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/utils/scoped-stylesheet.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-styles.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-on.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-signal.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-computed.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-serializer.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-visible-task.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-resource-dollar.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-task-dollar.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-visible-task-dollar.js","../../../dist-dev/tsc-out/packages/qwik/src/core/use/use-error-boundary.js","../../../dist-dev/tsc-out/packages/qwik/src/core/shared/prefetch-service-worker/prefetch.js"],"sourcesContent":["// same as isDev but separate so we can test\nexport const qDev = globalThis.qDev !== false;\nexport const qInspector = globalThis.qInspector === true;\nexport const qSerialize = globalThis.qSerialize !== false;\nexport const qDynamicPlatform = globalThis.qDynamicPlatform !== false;\nexport const qTest = globalThis.qTest === true;\nexport const qRuntimeQrl = globalThis.qRuntimeQrl === true;\nexport const seal = (obj) => {\n    if (qDev) {\n        Object.seal(obj);\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWRldi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvcWRldi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0Q0FBNEM7QUFDNUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQztBQUN6RCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixLQUFLLEtBQUssQ0FBQztBQUN0RSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFO0lBQy9CLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzYW1lIGFzIGlzRGV2IGJ1dCBzZXBhcmF0ZSBzbyB3ZSBjYW4gdGVzdFxuZXhwb3J0IGNvbnN0IHFEZXYgPSBnbG9iYWxUaGlzLnFEZXYgIT09IGZhbHNlO1xuZXhwb3J0IGNvbnN0IHFJbnNwZWN0b3IgPSBnbG9iYWxUaGlzLnFJbnNwZWN0b3IgPT09IHRydWU7XG5leHBvcnQgY29uc3QgcVNlcmlhbGl6ZSA9IGdsb2JhbFRoaXMucVNlcmlhbGl6ZSAhPT0gZmFsc2U7XG5leHBvcnQgY29uc3QgcUR5bmFtaWNQbGF0Zm9ybSA9IGdsb2JhbFRoaXMucUR5bmFtaWNQbGF0Zm9ybSAhPT0gZmFsc2U7XG5leHBvcnQgY29uc3QgcVRlc3QgPSBnbG9iYWxUaGlzLnFUZXN0ID09PSB0cnVlO1xuZXhwb3J0IGNvbnN0IHFSdW50aW1lUXJsID0gZ2xvYmFsVGhpcy5xUnVudGltZVFybCA9PT0gdHJ1ZTtcblxuZXhwb3J0IGNvbnN0IHNlYWwgPSAob2JqOiBhbnkpID0+IHtcbiAgaWYgKHFEZXYpIHtcbiAgICBPYmplY3Quc2VhbChvYmopO1xuICB9XG59O1xuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbFRoaXM6IGFueTtcbiJdfQ==","import { qDev, qTest } from './qdev';\nconst STYLE = qDev\n    ? `background: #564CE0; color: white; padding: 2px 3px; border-radius: 2px; font-size: 0.8em;`\n    : '';\nexport const logError = (message, ...optionalParams) => {\n    return createAndLogError(false, message, ...optionalParams);\n};\nexport const throwErrorAndStop = (message, ...optionalParams) => {\n    const error = createAndLogError(false, message, ...optionalParams);\n    // eslint-disable-next-line no-debugger\n    debugger;\n    throw error;\n};\nexport const logErrorAndStop = (message, ...optionalParams) => {\n    const err = createAndLogError(true, message, ...optionalParams);\n    // eslint-disable-next-line no-debugger\n    debugger;\n    return err;\n};\nconst _printed = /*#__PURE__*/ new Set();\nexport const logOnceWarn = (message, ...optionalParams) => {\n    if (qDev) {\n        const key = 'warn' + String(message);\n        if (!_printed.has(key)) {\n            _printed.add(key);\n            logWarn(message, ...optionalParams);\n        }\n    }\n};\nexport const logWarn = (message, ...optionalParams) => {\n    if (qDev) {\n        console.warn('%cQWIK WARN', STYLE, message, ...optionalParams);\n    }\n};\nexport const logDebug = (message, ...optionalParams) => {\n    if (qDev) {\n        // eslint-disable-next-line no-console\n        console.debug('%cQWIK', STYLE, message, ...optionalParams);\n    }\n};\nconst createAndLogError = (asyncThrow, message, ...optionalParams) => {\n    const err = message instanceof Error ? message : new Error(message);\n    // display the error message first, then the optional params, and finally the stack trace\n    // the stack needs to be displayed last because the given params will be lost among large stack traces so it will\n    // provide a bad developer experience\n    !qTest && console.error('%cQWIK ERROR', STYLE, err.message, ...optionalParams, err.stack);\n    asyncThrow &&\n        !qTest &&\n        setTimeout(() => {\n            // throwing error asynchronously to avoid breaking the current call stack.\n            // We throw so that the error is delivered to the global error handler for\n            // reporting it to a third-party tools such as Qwik Insights, Sentry or New Relic.\n            throw err;\n        }, 0);\n    return err;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9sb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFckMsTUFBTSxLQUFLLEdBQUcsSUFBSTtJQUNoQixDQUFDLENBQUMsNEZBQTRGO0lBQzlGLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFFUCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFhLEVBQUUsR0FBRyxjQUFxQixFQUFFLEVBQUU7SUFDbEUsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxPQUFhLEVBQUUsR0FBRyxjQUFxQixFQUFTLEVBQUU7SUFDbEYsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQ25FLHVDQUF1QztJQUN2QyxRQUFRLENBQUM7SUFDVCxNQUFNLEtBQUssQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQWEsRUFBRSxHQUFHLGNBQXFCLEVBQUUsRUFBRTtJQUN6RSxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDaEUsdUNBQXVDO0lBQ3ZDLFFBQVEsQ0FBQztJQUNULE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLElBQUksR0FBRyxFQUFVLENBQUM7QUFFakQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBYSxFQUFFLEdBQUcsY0FBcUIsRUFBRSxFQUFFO0lBQ3JFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFhLEVBQUUsR0FBRyxjQUFxQixFQUFFLEVBQUU7SUFDakUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUNqRSxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxHQUFHLGNBQXFCLEVBQUUsRUFBRTtJQUNyRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1Qsc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUM3RCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFVBQW1CLEVBQUUsT0FBYSxFQUFFLEdBQUcsY0FBcUIsRUFBRSxFQUFFO0lBQ3pGLE1BQU0sR0FBRyxHQUFHLE9BQU8sWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFcEUseUZBQXlGO0lBQ3pGLGlIQUFpSDtJQUNqSCxxQ0FBcUM7SUFDckMsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFGLFVBQVU7UUFDUixDQUFDLEtBQUs7UUFDTixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsMEVBQTBFO1lBQzFFLDBFQUEwRTtZQUMxRSxrRkFBa0Y7WUFDbEYsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHFEZXYsIHFUZXN0IH0gZnJvbSAnLi9xZGV2JztcblxuY29uc3QgU1RZTEUgPSBxRGV2XG4gID8gYGJhY2tncm91bmQ6ICM1NjRDRTA7IGNvbG9yOiB3aGl0ZTsgcGFkZGluZzogMnB4IDNweDsgYm9yZGVyLXJhZGl1czogMnB4OyBmb250LXNpemU6IDAuOGVtO2BcbiAgOiAnJztcblxuZXhwb3J0IGNvbnN0IGxvZ0Vycm9yID0gKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4ge1xuICByZXR1cm4gY3JlYXRlQW5kTG9nRXJyb3IoZmFsc2UsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0aHJvd0Vycm9yQW5kU3RvcCA9IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiBuZXZlciA9PiB7XG4gIGNvbnN0IGVycm9yID0gY3JlYXRlQW5kTG9nRXJyb3IoZmFsc2UsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlYnVnZ2VyXG4gIGRlYnVnZ2VyO1xuICB0aHJvdyBlcnJvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2dFcnJvckFuZFN0b3AgPSAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gIGNvbnN0IGVyciA9IGNyZWF0ZUFuZExvZ0Vycm9yKHRydWUsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlYnVnZ2VyXG4gIGRlYnVnZ2VyO1xuICByZXR1cm4gZXJyO1xufTtcblxuY29uc3QgX3ByaW50ZWQgPSAvKiNfX1BVUkVfXyovIG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5leHBvcnQgY29uc3QgbG9nT25jZVdhcm4gPSAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gIGlmIChxRGV2KSB7XG4gICAgY29uc3Qga2V5ID0gJ3dhcm4nICsgU3RyaW5nKG1lc3NhZ2UpO1xuICAgIGlmICghX3ByaW50ZWQuaGFzKGtleSkpIHtcbiAgICAgIF9wcmludGVkLmFkZChrZXkpO1xuICAgICAgbG9nV2FybihtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbG9nV2FybiA9IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHtcbiAgaWYgKHFEZXYpIHtcbiAgICBjb25zb2xlLndhcm4oJyVjUVdJSyBXQVJOJywgU1RZTEUsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGxvZ0RlYnVnID0gKG1lc3NhZ2U/OiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4ge1xuICBpZiAocURldikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5kZWJ1ZygnJWNRV0lLJywgU1RZTEUsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlQW5kTG9nRXJyb3IgPSAoYXN5bmNUaHJvdzogYm9vbGVhbiwgbWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gIGNvbnN0IGVyciA9IG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciA/IG1lc3NhZ2UgOiBuZXcgRXJyb3IobWVzc2FnZSk7XG5cbiAgLy8gZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZSBmaXJzdCwgdGhlbiB0aGUgb3B0aW9uYWwgcGFyYW1zLCBhbmQgZmluYWxseSB0aGUgc3RhY2sgdHJhY2VcbiAgLy8gdGhlIHN0YWNrIG5lZWRzIHRvIGJlIGRpc3BsYXllZCBsYXN0IGJlY2F1c2UgdGhlIGdpdmVuIHBhcmFtcyB3aWxsIGJlIGxvc3QgYW1vbmcgbGFyZ2Ugc3RhY2sgdHJhY2VzIHNvIGl0IHdpbGxcbiAgLy8gcHJvdmlkZSBhIGJhZCBkZXZlbG9wZXIgZXhwZXJpZW5jZVxuICAhcVRlc3QgJiYgY29uc29sZS5lcnJvcignJWNRV0lLIEVSUk9SJywgU1RZTEUsIGVyci5tZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcywgZXJyLnN0YWNrKTtcblxuICBhc3luY1Rocm93ICYmXG4gICAgIXFUZXN0ICYmXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyB0aHJvd2luZyBlcnJvciBhc3luY2hyb25vdXNseSB0byBhdm9pZCBicmVha2luZyB0aGUgY3VycmVudCBjYWxsIHN0YWNrLlxuICAgICAgLy8gV2UgdGhyb3cgc28gdGhhdCB0aGUgZXJyb3IgaXMgZGVsaXZlcmVkIHRvIHRoZSBnbG9iYWwgZXJyb3IgaGFuZGxlciBmb3JcbiAgICAgIC8vIHJlcG9ydGluZyBpdCB0byBhIHRoaXJkLXBhcnR5IHRvb2xzIHN1Y2ggYXMgUXdpayBJbnNpZ2h0cywgU2VudHJ5IG9yIE5ldyBSZWxpYy5cbiAgICAgIHRocm93IGVycjtcbiAgICB9LCAwKTtcbiAgcmV0dXJuIGVycjtcbn07XG4iXX0=","import { throwErrorAndStop } from '../utils/log';\nimport { qDev } from '../utils/qdev';\nconst ASSERT_DISCLAIMER = 'Internal assert, this is likely caused by a bug in Qwik: ';\nexport function assertDefined(value, text, ...parts) {\n    if (qDev) {\n        if (value != null) {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\nexport function assertEqual(value1, value2, text, ...parts) {\n    if (qDev) {\n        if (value1 === value2) {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\nexport function assertFail(text, ...parts) {\n    if (qDev) {\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\nexport function assertTrue(value1, text, ...parts) {\n    if (qDev) {\n        if (value1 === true) {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\nexport function assertFalse(value1, text, ...parts) {\n    if (qDev) {\n        if (value1 === false) {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\nexport function assertNumber(value1, text, ...parts) {\n    if (qDev) {\n        if (typeof value1 === 'number') {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\nexport function assertString(value1, text, ...parts) {\n    if (qDev) {\n        if (typeof value1 === 'string') {\n            return;\n        }\n        throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9lcnJvci9hc3NlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckMsTUFBTSxpQkFBaUIsR0FBRywyREFBMkQsQ0FBQztBQUV0RixNQUFNLFVBQVUsYUFBYSxDQUMzQixLQUFRLEVBQ1IsSUFBWSxFQUNaLEdBQUcsS0FBWTtJQUVmLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELGlCQUFpQixDQUFDLGlCQUFpQixHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FDekIsTUFBVyxFQUNYLE1BQVcsRUFDWCxJQUFZLEVBQ1osR0FBRyxLQUFZO0lBRWYsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBQ0QsaUJBQWlCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQztBQUNILENBQUM7QUFHRCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQVksRUFBRSxHQUFHLEtBQVk7SUFDdEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULGlCQUFpQixDQUFDLGlCQUFpQixHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFXLEVBQUUsSUFBWSxFQUFFLEdBQUcsS0FBWTtJQUNuRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEIsT0FBTztRQUNULENBQUM7UUFDRCxpQkFBaUIsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBVyxFQUFFLElBQVksRUFBRSxHQUFHLEtBQVk7SUFDcEUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULElBQUksTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3JCLE9BQU87UUFDVCxDQUFDO1FBQ0QsaUJBQWlCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQVcsRUFBRSxJQUFZLEVBQUUsR0FBRyxLQUFZO0lBQ3JFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBQ0QsaUJBQWlCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQVcsRUFBRSxJQUFZLEVBQUUsR0FBRyxLQUFZO0lBQ3JFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBQ0QsaUJBQWlCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0aHJvd0Vycm9yQW5kU3RvcCB9IGZyb20gJy4uL3V0aWxzL2xvZyc7XG5pbXBvcnQgeyBxRGV2IH0gZnJvbSAnLi4vdXRpbHMvcWRldic7XG5cbmNvbnN0IEFTU0VSVF9ESVNDTEFJTUVSID0gJ0ludGVybmFsIGFzc2VydCwgdGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFF3aWs6ICc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnREZWZpbmVkPFQ+KFxuICB2YWx1ZTogVCxcbiAgdGV4dDogc3RyaW5nLFxuICAuLi5wYXJ0czogYW55W11cbik6IGFzc2VydHMgdmFsdWUgaXMgTm9uTnVsbGFibGU8VD4ge1xuICBpZiAocURldikge1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93RXJyb3JBbmRTdG9wKEFTU0VSVF9ESVNDTEFJTUVSICsgdGV4dCwgLi4ucGFydHMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFcXVhbChcbiAgdmFsdWUxOiBhbnksXG4gIHZhbHVlMjogYW55LFxuICB0ZXh0OiBzdHJpbmcsXG4gIC4uLnBhcnRzOiBhbnlbXVxuKTogYXNzZXJ0cyB2YWx1ZTEgaXMgdHlwZW9mIHZhbHVlMiB7XG4gIGlmIChxRGV2KSB7XG4gICAgaWYgKHZhbHVlMSA9PT0gdmFsdWUyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93RXJyb3JBbmRTdG9wKEFTU0VSVF9ESVNDTEFJTUVSICsgdGV4dCwgLi4ucGFydHMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRGYWlsKHRleHQ6IHN0cmluZywgLi4ucGFydHM6IGFueVtdKTogbmV2ZXI7XG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RmFpbCh0ZXh0OiBzdHJpbmcsIC4uLnBhcnRzOiBhbnlbXSkge1xuICBpZiAocURldikge1xuICAgIHRocm93RXJyb3JBbmRTdG9wKEFTU0VSVF9ESVNDTEFJTUVSICsgdGV4dCwgLi4ucGFydHMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRUcnVlKHZhbHVlMTogYW55LCB0ZXh0OiBzdHJpbmcsIC4uLnBhcnRzOiBhbnlbXSk6IGFzc2VydHMgdmFsdWUxIGlzIHRydWUge1xuICBpZiAocURldikge1xuICAgIGlmICh2YWx1ZTEgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3dFcnJvckFuZFN0b3AoQVNTRVJUX0RJU0NMQUlNRVIgKyB0ZXh0LCAuLi5wYXJ0cyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEZhbHNlKHZhbHVlMTogYW55LCB0ZXh0OiBzdHJpbmcsIC4uLnBhcnRzOiBhbnlbXSk6IGFzc2VydHMgdmFsdWUxIGlzIHRydWUge1xuICBpZiAocURldikge1xuICAgIGlmICh2YWx1ZTEgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93RXJyb3JBbmRTdG9wKEFTU0VSVF9ESVNDTEFJTUVSICsgdGV4dCwgLi4ucGFydHMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROdW1iZXIodmFsdWUxOiBhbnksIHRleHQ6IHN0cmluZywgLi4ucGFydHM6IGFueVtdKTogYXNzZXJ0cyB2YWx1ZTEgaXMgbnVtYmVyIHtcbiAgaWYgKHFEZXYpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3dFcnJvckFuZFN0b3AoQVNTRVJUX0RJU0NMQUlNRVIgKyB0ZXh0LCAuLi5wYXJ0cyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFN0cmluZyh2YWx1ZTE6IGFueSwgdGV4dDogc3RyaW5nLCAuLi5wYXJ0czogYW55W10pOiBhc3NlcnRzIHZhbHVlMSBpcyBzdHJpbmcge1xuICBpZiAocURldikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUxID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvd0Vycm9yQW5kU3RvcChBU1NFUlRfRElTQ0xBSU1FUiArIHRleHQsIC4uLnBhcnRzKTtcbiAgfVxufVxuIl19","import { logErrorAndStop } from '../utils/log';\nimport { qDev } from '../utils/qdev';\nexport const codeToText = (code, ...parts) => {\n    if (qDev) {\n        // Keep one error, one line to make it easier to search for the error message.\n        const MAP = [\n            'Error while serializing class or style attributes', // 0\n            'Scheduler not found', // 1\n            'track() received object, without prop to track', // 2\n            'Only primitive and object literals can be serialized. {{0}}', // 3\n            '', // 4 unused\n            'You can render over a existing q:container. Skipping render().', // 5\n            '', // 6 unused\n            '', // 7 unused\n            '', // 8 unused\n            '', // 9 unused\n            'QRL is not a function', // 10\n            'Dynamic import not found', // 11\n            'Unknown type argument', // 12\n            `Actual value for useContext({{0}}) can not be found, make sure some ancestor component has set a value using useContextProvider(). In the browser make sure that the context was used during SSR so its state was serialized.`, // 13\n            \"Invoking 'use*()' method outside of invocation context.\", // 14\n            '', // 15 unused\n            '', // 16 unused\n            '', // 17 unused\n            '', // 18 unused\n            '', // 19 unused\n            `Calling a 'use*()' method outside 'component$(() => { HERE })' is not allowed. 'use*()' methods provide hooks to the 'component$' state and lifecycle, ie 'use' hooks can only be called synchronously within the 'component$' function or another 'use' method.\\nSee https://qwik.dev/docs/components/tasks/#use-method-rules`, // 20\n            '', // 21 unused\n            '', // 22 unused\n            '', // 23 unused\n            '', // 24 unused\n            '', // 25 unused\n            '', // 26 unused\n            '', // 27 unused\n            'The provided Context reference \"{{0}}\" is not a valid context created by createContextId()', // 28\n            'SsrError(tag): {{0}}', // 29\n            'QRLs can not be resolved because it does not have an attached container. This means that the QRL does not know where it belongs inside the DOM, so it cant dynamically import() from a relative path.', // 30\n            'QRLs can not be dynamically resolved, because it does not have a chunk path', // 31\n            '{{0}}\\nThe JSX ref attribute must be a Signal', // 32\n            'Serialization Error: Deserialization of data type {{0}} is not implemented', // 33\n            'Serialization Error: Expected vnode for ref prop, but got {{0}}', // 34\n            'Serialization Error: Cannot allocate data type {{0}}', // 35\n            'Serialization Error: Missing root id for {{0}}', // 36\n            'Serialization Error: Serialization of data type {{0}} is not implemented', // 37\n            'Serialization Error: Unvisited {{0}}', // 38\n            'Serialization Error: Missing QRL chunk for {{0}}', // 39\n            '{{0}}\\nThe value of the textarea must be a string found {{1}}', // 40\n            'Unable to find q:container', // 41\n            \"Element must have 'q:container' attribute.\", // 42\n            'Unknown vnode type {{0}}.', // 43\n            'Materialize error: missing element: {{0}} {{1}} {{2}}', // 44\n            'Cannot coerce a Signal, use `.value` instead', // 45\n            'useComputedSignal$ QRL {{0}} {{1}} returned a Promise', // 46\n            'ComputedSignal is read-only', // 47\n            'WrappedSignal is read-only', // 48\n            'Attribute value is unsafe for SSR', // 49\n            'SerializerSymbol function returned rejected promise', // 50\n        ];\n        let text = MAP[code] ?? '';\n        if (parts.length) {\n            text = text.replaceAll(/{{(\\d+)}}/g, (_, index) => {\n                let v = parts[index];\n                if (v && typeof v === 'object' && v.constructor === Object) {\n                    v = JSON.stringify(v).slice(0, 50);\n                }\n                return v;\n            });\n        }\n        return `Code(Q${code}): ${text}`;\n    }\n    else {\n        // cute little hack to give roughly the correct line number. Update the line number if it shifts.\n        return `Code(Q${code}) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L${8 + code}`;\n    }\n};\nexport const qError = (code, errorMessageArgs = []) => {\n    const text = codeToText(code, ...errorMessageArgs);\n    return logErrorAndStop(text, ...errorMessageArgs);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL2Vycm9yL2Vycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQUUsR0FBRyxLQUFZLEVBQVUsRUFBRTtJQUNsRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsOEVBQThFO1FBQzlFLE1BQU0sR0FBRyxHQUFHO1lBQ1YsbURBQW1ELEVBQUUsSUFBSTtZQUN6RCxxQkFBcUIsRUFBRSxJQUFJO1lBQzNCLGdEQUFnRCxFQUFFLElBQUk7WUFDdEQsNkRBQTZELEVBQUUsSUFBSTtZQUNuRSxFQUFFLEVBQUUsV0FBVztZQUNmLGdFQUFnRSxFQUFFLElBQUk7WUFDdEUsRUFBRSxFQUFFLFdBQVc7WUFDZixFQUFFLEVBQUUsV0FBVztZQUNmLEVBQUUsRUFBRSxXQUFXO1lBQ2YsRUFBRSxFQUFFLFdBQVc7WUFDZix1QkFBdUIsRUFBRSxLQUFLO1lBQzlCLDBCQUEwQixFQUFFLEtBQUs7WUFDakMsdUJBQXVCLEVBQUUsS0FBSztZQUM5QiwrTkFBK04sRUFBRSxLQUFLO1lBQ3RPLHlEQUF5RCxFQUFFLEtBQUs7WUFDaEUsRUFBRSxFQUFFLFlBQVk7WUFDaEIsRUFBRSxFQUFFLFlBQVk7WUFDaEIsRUFBRSxFQUFFLFlBQVk7WUFDaEIsRUFBRSxFQUFFLFlBQVk7WUFDaEIsRUFBRSxFQUFFLFlBQVk7WUFDaEIsZ1VBQWdVLEVBQUUsS0FBSztZQUN2VSxFQUFFLEVBQUUsWUFBWTtZQUNoQixFQUFFLEVBQUUsWUFBWTtZQUNoQixFQUFFLEVBQUUsWUFBWTtZQUNoQixFQUFFLEVBQUUsWUFBWTtZQUNoQixFQUFFLEVBQUUsWUFBWTtZQUNoQixFQUFFLEVBQUUsWUFBWTtZQUNoQixFQUFFLEVBQUUsWUFBWTtZQUNoQiw0RkFBNEYsRUFBRSxLQUFLO1lBQ25HLHNCQUFzQixFQUFFLEtBQUs7WUFDN0IsdU1BQXVNLEVBQUUsS0FBSztZQUM5TSw2RUFBNkUsRUFBRSxLQUFLO1lBQ3BGLCtDQUErQyxFQUFFLEtBQUs7WUFDdEQsNEVBQTRFLEVBQUUsS0FBSztZQUNuRixpRUFBaUUsRUFBRSxLQUFLO1lBQ3hFLHNEQUFzRCxFQUFFLEtBQUs7WUFDN0QsZ0RBQWdELEVBQUUsS0FBSztZQUN2RCwwRUFBMEUsRUFBRSxLQUFLO1lBQ2pGLHNDQUFzQyxFQUFFLEtBQUs7WUFDN0Msa0RBQWtELEVBQUUsS0FBSztZQUN6RCwrREFBK0QsRUFBRSxLQUFLO1lBQ3RFLDRCQUE0QixFQUFFLEtBQUs7WUFDbkMsNENBQTRDLEVBQUUsS0FBSztZQUNuRCwyQkFBMkIsRUFBRSxLQUFLO1lBQ2xDLHVEQUF1RCxFQUFFLEtBQUs7WUFDOUQsOENBQThDLEVBQUUsS0FBSztZQUNyRCx1REFBdUQsRUFBRSxLQUFLO1lBQzlELDZCQUE2QixFQUFFLEtBQUs7WUFDcEMsNEJBQTRCLEVBQUUsS0FBSztZQUNuQyxtQ0FBbUMsRUFBRSxLQUFLO1lBQzFDLHFEQUFxRCxFQUFFLEtBQUs7U0FDN0QsQ0FBQztRQUNGLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUMzRCxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxTQUFTLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO1NBQU0sQ0FBQztRQUNOLGlHQUFpRztRQUNqRyxPQUFPLFNBQVMsSUFBSSxzRkFBc0YsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ3ZILENBQUM7QUFDSCxDQUFDLENBQUM7QUF3REYsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBWSxFQUFFLG1CQUEwQixFQUFFLEVBQVMsRUFBRTtJQUMxRSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRCxPQUFPLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ0Vycm9yQW5kU3RvcCB9IGZyb20gJy4uL3V0aWxzL2xvZyc7XG5pbXBvcnQgeyBxRGV2IH0gZnJvbSAnLi4vdXRpbHMvcWRldic7XG5cbmV4cG9ydCBjb25zdCBjb2RlVG9UZXh0ID0gKGNvZGU6IG51bWJlciwgLi4ucGFydHM6IGFueVtdKTogc3RyaW5nID0+IHtcbiAgaWYgKHFEZXYpIHtcbiAgICAvLyBLZWVwIG9uZSBlcnJvciwgb25lIGxpbmUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2VhcmNoIGZvciB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICBjb25zdCBNQVAgPSBbXG4gICAgICAnRXJyb3Igd2hpbGUgc2VyaWFsaXppbmcgY2xhc3Mgb3Igc3R5bGUgYXR0cmlidXRlcycsIC8vIDBcbiAgICAgICdTY2hlZHVsZXIgbm90IGZvdW5kJywgLy8gMVxuICAgICAgJ3RyYWNrKCkgcmVjZWl2ZWQgb2JqZWN0LCB3aXRob3V0IHByb3AgdG8gdHJhY2snLCAvLyAyXG4gICAgICAnT25seSBwcmltaXRpdmUgYW5kIG9iamVjdCBsaXRlcmFscyBjYW4gYmUgc2VyaWFsaXplZC4ge3swfX0nLCAvLyAzXG4gICAgICAnJywgLy8gNCB1bnVzZWRcbiAgICAgICdZb3UgY2FuIHJlbmRlciBvdmVyIGEgZXhpc3RpbmcgcTpjb250YWluZXIuIFNraXBwaW5nIHJlbmRlcigpLicsIC8vIDVcbiAgICAgICcnLCAvLyA2IHVudXNlZFxuICAgICAgJycsIC8vIDcgdW51c2VkXG4gICAgICAnJywgLy8gOCB1bnVzZWRcbiAgICAgICcnLCAvLyA5IHVudXNlZFxuICAgICAgJ1FSTCBpcyBub3QgYSBmdW5jdGlvbicsIC8vIDEwXG4gICAgICAnRHluYW1pYyBpbXBvcnQgbm90IGZvdW5kJywgLy8gMTFcbiAgICAgICdVbmtub3duIHR5cGUgYXJndW1lbnQnLCAvLyAxMlxuICAgICAgYEFjdHVhbCB2YWx1ZSBmb3IgdXNlQ29udGV4dCh7ezB9fSkgY2FuIG5vdCBiZSBmb3VuZCwgbWFrZSBzdXJlIHNvbWUgYW5jZXN0b3IgY29tcG9uZW50IGhhcyBzZXQgYSB2YWx1ZSB1c2luZyB1c2VDb250ZXh0UHJvdmlkZXIoKS4gSW4gdGhlIGJyb3dzZXIgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbnRleHQgd2FzIHVzZWQgZHVyaW5nIFNTUiBzbyBpdHMgc3RhdGUgd2FzIHNlcmlhbGl6ZWQuYCwgLy8gMTNcbiAgICAgIFwiSW52b2tpbmcgJ3VzZSooKScgbWV0aG9kIG91dHNpZGUgb2YgaW52b2NhdGlvbiBjb250ZXh0LlwiLCAvLyAxNFxuICAgICAgJycsIC8vIDE1IHVudXNlZFxuICAgICAgJycsIC8vIDE2IHVudXNlZFxuICAgICAgJycsIC8vIDE3IHVudXNlZFxuICAgICAgJycsIC8vIDE4IHVudXNlZFxuICAgICAgJycsIC8vIDE5IHVudXNlZFxuICAgICAgYENhbGxpbmcgYSAndXNlKigpJyBtZXRob2Qgb3V0c2lkZSAnY29tcG9uZW50JCgoKSA9PiB7IEhFUkUgfSknIGlzIG5vdCBhbGxvd2VkLiAndXNlKigpJyBtZXRob2RzIHByb3ZpZGUgaG9va3MgdG8gdGhlICdjb21wb25lbnQkJyBzdGF0ZSBhbmQgbGlmZWN5Y2xlLCBpZSAndXNlJyBob29rcyBjYW4gb25seSBiZSBjYWxsZWQgc3luY2hyb25vdXNseSB3aXRoaW4gdGhlICdjb21wb25lbnQkJyBmdW5jdGlvbiBvciBhbm90aGVyICd1c2UnIG1ldGhvZC5cXG5TZWUgaHR0cHM6Ly9xd2lrLmRldi9kb2NzL2NvbXBvbmVudHMvdGFza3MvI3VzZS1tZXRob2QtcnVsZXNgLCAvLyAyMFxuICAgICAgJycsIC8vIDIxIHVudXNlZFxuICAgICAgJycsIC8vIDIyIHVudXNlZFxuICAgICAgJycsIC8vIDIzIHVudXNlZFxuICAgICAgJycsIC8vIDI0IHVudXNlZFxuICAgICAgJycsIC8vIDI1IHVudXNlZFxuICAgICAgJycsIC8vIDI2IHVudXNlZFxuICAgICAgJycsIC8vIDI3IHVudXNlZFxuICAgICAgJ1RoZSBwcm92aWRlZCBDb250ZXh0IHJlZmVyZW5jZSBcInt7MH19XCIgaXMgbm90IGEgdmFsaWQgY29udGV4dCBjcmVhdGVkIGJ5IGNyZWF0ZUNvbnRleHRJZCgpJywgLy8gMjhcbiAgICAgICdTc3JFcnJvcih0YWcpOiB7ezB9fScsIC8vIDI5XG4gICAgICAnUVJMcyBjYW4gbm90IGJlIHJlc29sdmVkIGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBhbiBhdHRhY2hlZCBjb250YWluZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGUgUVJMIGRvZXMgbm90IGtub3cgd2hlcmUgaXQgYmVsb25ncyBpbnNpZGUgdGhlIERPTSwgc28gaXQgY2FudCBkeW5hbWljYWxseSBpbXBvcnQoKSBmcm9tIGEgcmVsYXRpdmUgcGF0aC4nLCAvLyAzMFxuICAgICAgJ1FSTHMgY2FuIG5vdCBiZSBkeW5hbWljYWxseSByZXNvbHZlZCwgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGEgY2h1bmsgcGF0aCcsIC8vIDMxXG4gICAgICAne3swfX1cXG5UaGUgSlNYIHJlZiBhdHRyaWJ1dGUgbXVzdCBiZSBhIFNpZ25hbCcsIC8vIDMyXG4gICAgICAnU2VyaWFsaXphdGlvbiBFcnJvcjogRGVzZXJpYWxpemF0aW9uIG9mIGRhdGEgdHlwZSB7ezB9fSBpcyBub3QgaW1wbGVtZW50ZWQnLCAvLyAzM1xuICAgICAgJ1NlcmlhbGl6YXRpb24gRXJyb3I6IEV4cGVjdGVkIHZub2RlIGZvciByZWYgcHJvcCwgYnV0IGdvdCB7ezB9fScsIC8vIDM0XG4gICAgICAnU2VyaWFsaXphdGlvbiBFcnJvcjogQ2Fubm90IGFsbG9jYXRlIGRhdGEgdHlwZSB7ezB9fScsIC8vIDM1XG4gICAgICAnU2VyaWFsaXphdGlvbiBFcnJvcjogTWlzc2luZyByb290IGlkIGZvciB7ezB9fScsIC8vIDM2XG4gICAgICAnU2VyaWFsaXphdGlvbiBFcnJvcjogU2VyaWFsaXphdGlvbiBvZiBkYXRhIHR5cGUge3swfX0gaXMgbm90IGltcGxlbWVudGVkJywgLy8gMzdcbiAgICAgICdTZXJpYWxpemF0aW9uIEVycm9yOiBVbnZpc2l0ZWQge3swfX0nLCAvLyAzOFxuICAgICAgJ1NlcmlhbGl6YXRpb24gRXJyb3I6IE1pc3NpbmcgUVJMIGNodW5rIGZvciB7ezB9fScsIC8vIDM5XG4gICAgICAne3swfX1cXG5UaGUgdmFsdWUgb2YgdGhlIHRleHRhcmVhIG11c3QgYmUgYSBzdHJpbmcgZm91bmQge3sxfX0nLCAvLyA0MFxuICAgICAgJ1VuYWJsZSB0byBmaW5kIHE6Y29udGFpbmVyJywgLy8gNDFcbiAgICAgIFwiRWxlbWVudCBtdXN0IGhhdmUgJ3E6Y29udGFpbmVyJyBhdHRyaWJ1dGUuXCIsIC8vIDQyXG4gICAgICAnVW5rbm93biB2bm9kZSB0eXBlIHt7MH19LicsIC8vIDQzXG4gICAgICAnTWF0ZXJpYWxpemUgZXJyb3I6IG1pc3NpbmcgZWxlbWVudDoge3swfX0ge3sxfX0ge3syfX0nLCAvLyA0NFxuICAgICAgJ0Nhbm5vdCBjb2VyY2UgYSBTaWduYWwsIHVzZSBgLnZhbHVlYCBpbnN0ZWFkJywgLy8gNDVcbiAgICAgICd1c2VDb21wdXRlZFNpZ25hbCQgUVJMIHt7MH19IHt7MX19IHJldHVybmVkIGEgUHJvbWlzZScsIC8vIDQ2XG4gICAgICAnQ29tcHV0ZWRTaWduYWwgaXMgcmVhZC1vbmx5JywgLy8gNDdcbiAgICAgICdXcmFwcGVkU2lnbmFsIGlzIHJlYWQtb25seScsIC8vIDQ4XG4gICAgICAnQXR0cmlidXRlIHZhbHVlIGlzIHVuc2FmZSBmb3IgU1NSJywgLy8gNDlcbiAgICAgICdTZXJpYWxpemVyU3ltYm9sIGZ1bmN0aW9uIHJldHVybmVkIHJlamVjdGVkIHByb21pc2UnLCAvLyA1MFxuICAgIF07XG4gICAgbGV0IHRleHQgPSBNQVBbY29kZV0gPz8gJyc7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCkge1xuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZUFsbCgve3soXFxkKyl9fS9nLCAoXywgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IHYgPSBwYXJ0c1tpbmRleF07XG4gICAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2LmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodikuc2xpY2UoMCwgNTApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBgQ29kZShRJHtjb2RlfSk6ICR7dGV4dH1gO1xuICB9IGVsc2Uge1xuICAgIC8vIGN1dGUgbGl0dGxlIGhhY2sgdG8gZ2l2ZSByb3VnaGx5IHRoZSBjb3JyZWN0IGxpbmUgbnVtYmVyLiBVcGRhdGUgdGhlIGxpbmUgbnVtYmVyIGlmIGl0IHNoaWZ0cy5cbiAgICByZXR1cm4gYENvZGUoUSR7Y29kZX0pIGh0dHBzOi8vZ2l0aHViLmNvbS9Rd2lrRGV2L3F3aWsvYmxvYi9tYWluL3BhY2thZ2VzL3F3aWsvc3JjL2NvcmUvZXJyb3IvZXJyb3IudHMjTCR7OCArIGNvZGV9YDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGVudW0gUUVycm9yIHtcbiAgc3RyaW5naWZ5Q2xhc3NPclN0eWxlID0gMCxcbiAgc2NoZWR1bGVyTm90Rm91bmQgPSAxLFxuICB0cmFja09iamVjdFdpdGhvdXRQcm9wID0gMixcbiAgdmVyaWZ5U2VyaWFsaXphYmxlID0gMyxcbiAgVU5VU0VEXzQgPSA0LFxuICBjYW5ub3RSZW5kZXJPdmVyRXhpc3RpbmdDb250YWluZXIgPSA1LFxuICBVTlVTRURfNiA9IDYsXG4gIFVOVVNFRF83ID0gNyxcbiAgVU5VU0VEXzggPSA4LFxuICBVTlVTRURfOSA9IDksXG4gIHFybElzTm90RnVuY3Rpb24gPSAxMCxcbiAgZHluYW1pY0ltcG9ydEZhaWxlZCA9IDExLFxuICB1bmtub3duVHlwZUFyZ3VtZW50ID0gMTIsXG4gIG5vdEZvdW5kQ29udGV4dCA9IDEzLFxuICB1c2VNZXRob2RPdXRzaWRlQ29udGV4dCA9IDE0LFxuICBVTlVTRURfMTUgPSAxNSxcbiAgVU5VU0VEXzE2ID0gMTYsXG4gIFVOVVNFRF8xNyA9IDE3LFxuICBVTlVTRURfMTggPSAxOCxcbiAgVU5VU0VEXzE5ID0gMTksXG4gIHVzZUludm9rZUNvbnRleHQgPSAyMCxcbiAgVU5VU0VEXzIxID0gMjEsXG4gIFVOVVNFRF8yMiA9IDIyLFxuICBVTlVTRURfMjMgPSAyMyxcbiAgVU5VU0VEXzI0ID0gMjQsXG4gIFVOVVNFRF8yNSA9IDI1LFxuICBVTlVTRURfMjYgPSAyNixcbiAgVU5VU0VEXzI3ID0gMjcsXG4gIGludmFsaWRDb250ZXh0ID0gMjgsXG4gIHRhZ0Vycm9yID0gMjksXG4gIHFybE1pc3NpbmdDb250YWluZXIgPSAzMCxcbiAgcXJsTWlzc2luZ0NodW5rID0gMzEsXG4gIGludmFsaWRSZWZWYWx1ZSA9IDMyLFxuICBzZXJpYWxpemVFcnJvck5vdEltcGxlbWVudGVkID0gMzMsXG4gIHNlcmlhbGl6ZUVycm9yRXhwZWN0ZWRWTm9kZSA9IDM0LFxuICBzZXJpYWxpemVFcnJvckNhbm5vdEFsbG9jYXRlID0gMzUsXG4gIHNlcmlhbGl6ZUVycm9yTWlzc2luZ1Jvb3RJZCA9IDM2LFxuICBzZXJpYWxpemVFcnJvclVua25vd25UeXBlID0gMzcsXG4gIHNlcmlhbGl6ZUVycm9yVW52aXNpdGVkID0gMzgsXG4gIHNlcmlhbGl6ZUVycm9yTWlzc2luZ0NodW5rID0gMzksXG4gIHdyb25nVGV4dGFyZWFWYWx1ZSA9IDQwLFxuICBjb250YWluZXJOb3RGb3VuZCA9IDQxLFxuICBlbGVtZW50V2l0aG91dENvbnRhaW5lciA9IDQyLFxuICBpbnZhbGlkVk5vZGVUeXBlID0gNDMsXG4gIG1hdGVyaWFsaXplVk5vZGVEYXRhRXJyb3IgPSA0NCxcbiAgY2Fubm90Q29lcmNlU2lnbmFsID0gNDUsXG4gIGNvbXB1dGVkTm90U3luYyA9IDQ2LFxuICBjb21wdXRlZFJlYWRPbmx5ID0gNDcsXG4gIHdyYXBwZWRSZWFkT25seSA9IDQ4LFxuICB1bnNhZmVBdHRyID0gNDksXG4gIHNlcmlhbGl6ZXJTeW1ib2xSZWplY3RlZFByb21pc2UgPSA1MCxcbn1cblxuZXhwb3J0IGNvbnN0IHFFcnJvciA9IChjb2RlOiBudW1iZXIsIGVycm9yTWVzc2FnZUFyZ3M6IGFueVtdID0gW10pOiBFcnJvciA9PiB7XG4gIGNvbnN0IHRleHQgPSBjb2RlVG9UZXh0KGNvZGUsIC4uLmVycm9yTWVzc2FnZUFyZ3MpO1xuICByZXR1cm4gbG9nRXJyb3JBbmRTdG9wKHRleHQsIC4uLmVycm9yTWVzc2FnZUFyZ3MpO1xufTtcbiJdfQ==","/** QRL related utilities that you can import without importing all of Qwik. */\nimport { isDev } from '@qwik.dev/core/build';\nexport const SYNC_QRL = '<sync>';\n/** Sync QRL is a function which is serialized into `<script q:func=\"qwik/json\">` tag. */\nexport const isSyncQrl = (value) => {\n    return isQrl(value) && value.$symbol$ == SYNC_QRL;\n};\nexport const isQrl = (value) => {\n    return typeof value === 'function' && typeof value.getSymbol === 'function';\n};\nexport function assertQrl(qrl) {\n    if (isDev) {\n        if (!isQrl(qrl)) {\n            throw new Error('Not a QRL');\n        }\n    }\n}\nexport const getSymbolHash = (symbolName) => {\n    const index = symbolName.lastIndexOf('_');\n    if (index > -1) {\n        return symbolName.slice(index + 1);\n    }\n    return symbolName;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLXV0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9xcmwvcXJsLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtFQUErRTtBQUUvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJN0MsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUVqQyx5RkFBeUY7QUFDekYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBVSxFQUE0QixFQUFFO0lBQ2hFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDO0FBQ3BELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFjLEtBQWMsRUFBMkIsRUFBRTtJQUM1RSxPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsSUFBSSxPQUFRLEtBQWEsQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDO0FBQ3ZGLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxTQUFTLENBQUksR0FBVztJQUN0QyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBa0IsRUFBRSxFQUFFO0lBQ2xELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNmLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBRUkwgcmVsYXRlZCB1dGlsaXRpZXMgdGhhdCB5b3UgY2FuIGltcG9ydCB3aXRob3V0IGltcG9ydGluZyBhbGwgb2YgUXdpay4gKi9cblxuaW1wb3J0IHsgaXNEZXYgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgdHlwZSB7IFFSTEludGVybmFsLCBTeW5jUVJMSW50ZXJuYWwgfSBmcm9tICcuL3FybC1jbGFzcyc7XG5pbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4vcXJsLnB1YmxpYyc7XG5cbmV4cG9ydCBjb25zdCBTWU5DX1FSTCA9ICc8c3luYz4nO1xuXG4vKiogU3luYyBRUkwgaXMgYSBmdW5jdGlvbiB3aGljaCBpcyBzZXJpYWxpemVkIGludG8gYDxzY3JpcHQgcTpmdW5jPVwicXdpay9qc29uXCI+YCB0YWcuICovXG5leHBvcnQgY29uc3QgaXNTeW5jUXJsID0gKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBTeW5jUVJMSW50ZXJuYWwgPT4ge1xuICByZXR1cm4gaXNRcmwodmFsdWUpICYmIHZhbHVlLiRzeW1ib2wkID09IFNZTkNfUVJMO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUXJsID0gPFQgPSB1bmtub3duPih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFFSTEludGVybmFsPFQ+ID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgKHZhbHVlIGFzIGFueSkuZ2V0U3ltYm9sID09PSAnZnVuY3Rpb24nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFFybDxUPihxcmw6IFFSTDxUPik6IGFzc2VydHMgcXJsIGlzIFFSTEludGVybmFsPFQ+IHtcbiAgaWYgKGlzRGV2KSB7XG4gICAgaWYgKCFpc1FybChxcmwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhIFFSTCcpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0U3ltYm9sSGFzaCA9IChzeW1ib2xOYW1lOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaW5kZXggPSBzeW1ib2xOYW1lLmxhc3RJbmRleE9mKCdfJyk7XG4gIGlmIChpbmRleCA+IC0xKSB7XG4gICAgcmV0dXJuIHN5bWJvbE5hbWUuc2xpY2UoaW5kZXggKyAxKTtcbiAgfVxuICByZXR1cm4gc3ltYm9sTmFtZTtcbn07XG4iXX0=","/** State factory of the component. */\nexport const OnRenderProp = 'q:renderFn';\n/** Component style content prefix */\nexport const ComponentStylesPrefixContent = '⚡️';\n/** `<some-element q:slot=\"...\">` */\nexport const QSlot = 'q:slot';\nexport const QSlotParent = 'q:sparent';\nexport const QSlotS = 'q:s';\nexport const QStyle = 'q:style';\nexport const QStyleSelector = 'style[q\\\\:style]';\nexport const QStyleSSelector = 'style[q\\\\:sstyle]';\nexport const QStylesAllSelector = QStyleSelector + ',' + QStyleSSelector;\nexport const QScopedStyle = 'q:sstyle';\nexport const QCtxAttr = 'q:ctx';\nexport const QBackRefs = 'q:brefs';\nexport const QFuncsPrefix = 'qFuncs_';\nexport const getQFuncs = (document, hash) => {\n    return document[QFuncsPrefix + hash] || [];\n};\nexport const QRenderAttr = 'q:render';\nexport const QRuntimeAttr = 'q:runtime';\nexport const QVersionAttr = 'q:version';\nexport const QBaseAttr = 'q:base';\nexport const QLocaleAttr = 'q:locale';\nexport const QManifestHashAttr = 'q:manifest-hash';\nexport const QInstanceAttr = 'q:instance';\nexport const QContainerIsland = 'q:container-island';\nexport const QContainerIslandEnd = '/' + QContainerIsland;\nexport const QIgnore = 'q:ignore';\nexport const QIgnoreEnd = '/' + QIgnore;\nexport const QContainerAttr = 'q:container';\nexport const QContainerAttrEnd = '/' + QContainerAttr;\nexport const QTemplate = 'q:template';\n// the same selector should be inside the qwik loader\n// and the same selector should be inside the qwik router spa-shim and spa-init\nexport const QContainerSelector = '[q\\\\:container]:not([q\\\\:container=' +\n    \"html\" /* QContainerValue.HTML */ +\n    ']):not([q\\\\:container=' +\n    \"text\" /* QContainerValue.TEXT */ +\n    '])';\nexport const HTML_NS = 'http://www.w3.org/1999/xhtml';\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\nexport const MATH_NS = 'http://www.w3.org/1998/Math/MathML';\nexport const ResourceEvent = 'qResource';\nexport const ComputedEvent = 'qComputed';\nexport const RenderEvent = 'qRender';\nexport const TaskEvent = 'qTask';\n/** `<q:slot name=\"...\">` */\nexport const QDefaultSlot = '';\n/**\n * Attribute to mark that this VNode has a pointer to itself from the `qwik/json` state.\n *\n * As the VNode get materialized the vnode now becomes eligible for mutation. Once the vnode mutates\n * the `VNode` references from the `qwik/json` may become invalid. For this reason, these references\n * need to be eagerly resolved. `VNODE_REF` stores a pointer to \"this\" vnode. This allows the system\n * to eagerly resolve these pointes as the vnodes are materialized.\n */\nexport const ELEMENT_ID = 'q:id';\nexport const ELEMENT_KEY = 'q:key';\nexport const ELEMENT_PROPS = 'q:props';\nexport const ELEMENT_SEQ = 'q:seq';\nexport const ELEMENT_SEQ_IDX = 'q:seqIdx';\nexport const Q_PREFIX = 'q:';\n/** Non serializable markers - always begins with `:` character */\nexport const NON_SERIALIZABLE_MARKER_PREFIX = ':';\nexport const USE_ON_LOCAL = NON_SERIALIZABLE_MARKER_PREFIX + 'on';\nexport const USE_ON_LOCAL_SEQ_IDX = NON_SERIALIZABLE_MARKER_PREFIX + 'onIdx';\nexport const USE_ON_LOCAL_FLAGS = NON_SERIALIZABLE_MARKER_PREFIX + 'onFlags';\n// comment nodes\nexport const FLUSH_COMMENT = 'qkssr-f';\nexport const STREAM_BLOCK_START_COMMENT = 'qkssr-pu';\nexport const STREAM_BLOCK_END_COMMENT = 'qkssr-po';\nexport const Q_PROPS_SEPARATOR = ':';\nexport const dangerouslySetInnerHTML = 'dangerouslySetInnerHTML';\nexport const qwikInspectorAttr = 'data-qwik-inspector';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Vycy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvbWFya2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxzQ0FBc0M7QUFDdEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQztBQUV6QyxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxDQUFDO0FBRWpELG9DQUFvQztBQUNwQyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1QixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQztBQUNqRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsbUJBQW1CLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxHQUFHLEdBQUcsR0FBRyxlQUFlLENBQUM7QUFDekUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FDdkIsUUFBa0IsRUFDbEIsSUFBWSxFQUM0QixFQUFFO0lBQzFDLE9BQVEsUUFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3RELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FB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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUUNvbnRhaW5lclZhbHVlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKiogU3RhdGUgZmFjdG9yeSBvZiB0aGUgY29tcG9uZW50LiAqL1xuZXhwb3J0IGNvbnN0IE9uUmVuZGVyUHJvcCA9ICdxOnJlbmRlckZuJztcblxuLyoqIENvbXBvbmVudCBzdHlsZSBjb250ZW50IHByZWZpeCAqL1xuZXhwb3J0IGNvbnN0IENvbXBvbmVudFN0eWxlc1ByZWZpeENvbnRlbnQgPSAn4pqh77iPJztcblxuLyoqIGA8c29tZS1lbGVtZW50IHE6c2xvdD1cIi4uLlwiPmAgKi9cbmV4cG9ydCBjb25zdCBRU2xvdCA9ICdxOnNsb3QnO1xuZXhwb3J0IGNvbnN0IFFTbG90UGFyZW50ID0gJ3E6c3BhcmVudCc7XG5leHBvcnQgY29uc3QgUVNsb3RTID0gJ3E6cyc7XG5leHBvcnQgY29uc3QgUVN0eWxlID0gJ3E6c3R5bGUnO1xuZXhwb3J0IGNvbnN0IFFTdHlsZVNlbGVjdG9yID0gJ3N0eWxlW3FcXFxcOnN0eWxlXSc7XG5leHBvcnQgY29uc3QgUVN0eWxlU1NlbGVjdG9yID0gJ3N0eWxlW3FcXFxcOnNzdHlsZV0nO1xuZXhwb3J0IGNvbnN0IFFTdHlsZXNBbGxTZWxlY3RvciA9IFFTdHlsZVNlbGVjdG9yICsgJywnICsgUVN0eWxlU1NlbGVjdG9yO1xuZXhwb3J0IGNvbnN0IFFTY29wZWRTdHlsZSA9ICdxOnNzdHlsZSc7XG5leHBvcnQgY29uc3QgUUN0eEF0dHIgPSAncTpjdHgnO1xuZXhwb3J0IGNvbnN0IFFCYWNrUmVmcyA9ICdxOmJyZWZzJztcbmV4cG9ydCBjb25zdCBRRnVuY3NQcmVmaXggPSAncUZ1bmNzXyc7XG5cbmV4cG9ydCBjb25zdCBnZXRRRnVuY3MgPSAoXG4gIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgaGFzaDogc3RyaW5nXG4pOiBBcnJheTwoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duPiA9PiB7XG4gIHJldHVybiAoZG9jdW1lbnQgYXMgYW55KVtRRnVuY3NQcmVmaXggKyBoYXNoXSB8fCBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBRUmVuZGVyQXR0ciA9ICdxOnJlbmRlcic7XG5leHBvcnQgY29uc3QgUVJ1bnRpbWVBdHRyID0gJ3E6cnVudGltZSc7XG5leHBvcnQgY29uc3QgUVZlcnNpb25BdHRyID0gJ3E6dmVyc2lvbic7XG5leHBvcnQgY29uc3QgUUJhc2VBdHRyID0gJ3E6YmFzZSc7XG5leHBvcnQgY29uc3QgUUxvY2FsZUF0dHIgPSAncTpsb2NhbGUnO1xuZXhwb3J0IGNvbnN0IFFNYW5pZmVzdEhhc2hBdHRyID0gJ3E6bWFuaWZlc3QtaGFzaCc7XG5leHBvcnQgY29uc3QgUUluc3RhbmNlQXR0ciA9ICdxOmluc3RhbmNlJztcbmV4cG9ydCBjb25zdCBRQ29udGFpbmVySXNsYW5kID0gJ3E6Y29udGFpbmVyLWlzbGFuZCc7XG5leHBvcnQgY29uc3QgUUNvbnRhaW5lcklzbGFuZEVuZCA9ICcvJyArIFFDb250YWluZXJJc2xhbmQ7XG5leHBvcnQgY29uc3QgUUlnbm9yZSA9ICdxOmlnbm9yZSc7XG5leHBvcnQgY29uc3QgUUlnbm9yZUVuZCA9ICcvJyArIFFJZ25vcmU7XG5leHBvcnQgY29uc3QgUUNvbnRhaW5lckF0dHIgPSAncTpjb250YWluZXInO1xuZXhwb3J0IGNvbnN0IFFDb250YWluZXJBdHRyRW5kID0gJy8nICsgUUNvbnRhaW5lckF0dHI7XG5cbmV4cG9ydCBjb25zdCBRVGVtcGxhdGUgPSAncTp0ZW1wbGF0ZSc7XG5cbi8vIHRoZSBzYW1lIHNlbGVjdG9yIHNob3VsZCBiZSBpbnNpZGUgdGhlIHF3aWsgbG9hZGVyXG4vLyBhbmQgdGhlIHNhbWUgc2VsZWN0b3Igc2hvdWxkIGJlIGluc2lkZSB0aGUgcXdpayByb3V0ZXIgc3BhLXNoaW0gYW5kIHNwYS1pbml0XG5leHBvcnQgY29uc3QgUUNvbnRhaW5lclNlbGVjdG9yID1cbiAgJ1txXFxcXDpjb250YWluZXJdOm5vdChbcVxcXFw6Y29udGFpbmVyPScgK1xuICBRQ29udGFpbmVyVmFsdWUuSFRNTCArXG4gICddKTpub3QoW3FcXFxcOmNvbnRhaW5lcj0nICtcbiAgUUNvbnRhaW5lclZhbHVlLlRFWFQgK1xuICAnXSknO1xuXG5leHBvcnQgY29uc3QgSFRNTF9OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcbmV4cG9ydCBjb25zdCBTVkdfTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuZXhwb3J0IGNvbnN0IE1BVEhfTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUV2ZW50ID0gJ3FSZXNvdXJjZSc7XG5leHBvcnQgY29uc3QgQ29tcHV0ZWRFdmVudCA9ICdxQ29tcHV0ZWQnO1xuZXhwb3J0IGNvbnN0IFJlbmRlckV2ZW50ID0gJ3FSZW5kZXInO1xuZXhwb3J0IGNvbnN0IFRhc2tFdmVudCA9ICdxVGFzayc7XG5cbi8qKiBgPHE6c2xvdCBuYW1lPVwiLi4uXCI+YCAqL1xuZXhwb3J0IGNvbnN0IFFEZWZhdWx0U2xvdCA9ICcnO1xuXG4vKipcbiAqIEF0dHJpYnV0ZSB0byBtYXJrIHRoYXQgdGhpcyBWTm9kZSBoYXMgYSBwb2ludGVyIHRvIGl0c2VsZiBmcm9tIHRoZSBgcXdpay9qc29uYCBzdGF0ZS5cbiAqXG4gKiBBcyB0aGUgVk5vZGUgZ2V0IG1hdGVyaWFsaXplZCB0aGUgdm5vZGUgbm93IGJlY29tZXMgZWxpZ2libGUgZm9yIG11dGF0aW9uLiBPbmNlIHRoZSB2bm9kZSBtdXRhdGVzXG4gKiB0aGUgYFZOb2RlYCByZWZlcmVuY2VzIGZyb20gdGhlIGBxd2lrL2pzb25gIG1heSBiZWNvbWUgaW52YWxpZC4gRm9yIHRoaXMgcmVhc29uLCB0aGVzZSByZWZlcmVuY2VzXG4gKiBuZWVkIHRvIGJlIGVhZ2VybHkgcmVzb2x2ZWQuIGBWTk9ERV9SRUZgIHN0b3JlcyBhIHBvaW50ZXIgdG8gXCJ0aGlzXCIgdm5vZGUuIFRoaXMgYWxsb3dzIHRoZSBzeXN0ZW1cbiAqIHRvIGVhZ2VybHkgcmVzb2x2ZSB0aGVzZSBwb2ludGVzIGFzIHRoZSB2bm9kZXMgYXJlIG1hdGVyaWFsaXplZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVMRU1FTlRfSUQgPSAncTppZCc7XG5leHBvcnQgY29uc3QgRUxFTUVOVF9LRVkgPSAncTprZXknO1xuZXhwb3J0IGNvbnN0IEVMRU1FTlRfUFJPUFMgPSAncTpwcm9wcyc7XG5leHBvcnQgY29uc3QgRUxFTUVOVF9TRVEgPSAncTpzZXEnO1xuZXhwb3J0IGNvbnN0IEVMRU1FTlRfU0VRX0lEWCA9ICdxOnNlcUlkeCc7XG5leHBvcnQgY29uc3QgUV9QUkVGSVggPSAncTonO1xuXG4vKiogTm9uIHNlcmlhbGl6YWJsZSBtYXJrZXJzIC0gYWx3YXlzIGJlZ2lucyB3aXRoIGA6YCBjaGFyYWN0ZXIgKi9cbmV4cG9ydCBjb25zdCBOT05fU0VSSUFMSVpBQkxFX01BUktFUl9QUkVGSVggPSAnOic7XG5leHBvcnQgY29uc3QgVVNFX09OX0xPQ0FMID0gTk9OX1NFUklBTElaQUJMRV9NQVJLRVJfUFJFRklYICsgJ29uJztcbmV4cG9ydCBjb25zdCBVU0VfT05fTE9DQUxfU0VRX0lEWCA9IE5PTl9TRVJJQUxJWkFCTEVfTUFSS0VSX1BSRUZJWCArICdvbklkeCc7XG5leHBvcnQgY29uc3QgVVNFX09OX0xPQ0FMX0ZMQUdTID0gTk9OX1NFUklBTElaQUJMRV9NQVJLRVJfUFJFRklYICsgJ29uRmxhZ3MnO1xuXG4vLyBjb21tZW50IG5vZGVzXG5leHBvcnQgY29uc3QgRkxVU0hfQ09NTUVOVCA9ICdxa3Nzci1mJztcbmV4cG9ydCBjb25zdCBTVFJFQU1fQkxPQ0tfU1RBUlRfQ09NTUVOVCA9ICdxa3Nzci1wdSc7XG5leHBvcnQgY29uc3QgU1RSRUFNX0JMT0NLX0VORF9DT01NRU5UID0gJ3Frc3NyLXBvJztcblxuZXhwb3J0IGNvbnN0IFFfUFJPUFNfU0VQQVJBVE9SID0gJzonO1xuXG5leHBvcnQgY29uc3QgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnO1xuZXhwb3J0IGNvbnN0IHF3aWtJbnNwZWN0b3JBdHRyID0gJ2RhdGEtcXdpay1pbnNwZWN0b3InO1xuIl19","// keep this import from core/build so the cjs build works\nimport { isServer } from '@qwik.dev/core/build';\nimport { qError } from '../error/error';\nimport { getSymbolHash } from '../qrl/qrl-utils';\nimport { QBaseAttr } from '../utils/markers';\nimport { qDynamicPlatform } from '../utils/qdev';\nexport const createPlatform = () => {\n    return {\n        isServer,\n        importSymbol(containerEl, url, symbolName) {\n            if (isServer) {\n                const hash = getSymbolHash(symbolName);\n                const regSym = globalThis.__qwik_reg_symbols?.get(hash);\n                if (regSym) {\n                    return regSym;\n                }\n            }\n            if (!url) {\n                throw qError(31 /* QError.qrlMissingChunk */, [symbolName]);\n            }\n            if (!containerEl) {\n                throw qError(30 /* QError.qrlMissingContainer */, [url, symbolName]);\n            }\n            const urlDoc = toUrl(containerEl.ownerDocument, containerEl, url).toString();\n            const urlCopy = new URL(urlDoc);\n            urlCopy.hash = '';\n            const importURL = urlCopy.href;\n            return import(/* @vite-ignore */ importURL).then((mod) => {\n                return mod[symbolName];\n            });\n        },\n        raf: (fn) => {\n            return new Promise((resolve) => {\n                requestAnimationFrame(() => {\n                    resolve(fn());\n                });\n            });\n        },\n        nextTick: (fn) => {\n            return new Promise((resolve) => {\n                setTimeout(() => {\n                    resolve(fn());\n                });\n            });\n        },\n        chunkForSymbol(symbolName, chunk) {\n            return [symbolName, chunk ?? '_'];\n        },\n    };\n};\n/**\n * Convert relative base URI and relative URL into a fully qualified URL.\n *\n * @param base -`QRL`s are relative, and therefore they need a base for resolution.\n *\n *   - `Element` use `base.ownerDocument.baseURI`\n *   - `Document` use `base.baseURI`\n *   - `string` use `base` as is\n *   - `QConfig` use `base.baseURI`\n *\n * @param url - Relative URL\n * @returns Fully qualified URL.\n */\nexport const toUrl = (doc, containerEl, url) => {\n    const baseURI = doc.baseURI;\n    const base = new URL(containerEl.getAttribute(QBaseAttr) ?? baseURI, baseURI);\n    return new URL(url, base);\n};\nlet _platform = /*#__PURE__ */ createPlatform();\n// <docs markdown=\"./readme.md#setPlatform\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ./readme.md#setPlatform instead and run `pnpm docs.sync`)\n/**\n * Sets the `CorePlatform`.\n *\n * This is useful to override the platform in tests to change the behavior of,\n * `requestAnimationFrame`, and import resolution.\n *\n * @param doc - The document of the application for which the platform is needed.\n * @param platform - The platform to use.\n * @public\n */\n// </docs>\nexport const setPlatform = (plt) => (_platform = plt);\n// <docs markdown=\"./readme.md#getPlatform\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ./readme.md#getPlatform instead and run `pnpm docs.sync`)\n/**\n * Retrieve the `CorePlatform`.\n *\n * The `CorePlatform` is also responsible for retrieving the Manifest, that contains mappings from\n * symbols to javascript import chunks. For this reason, `CorePlatform` can't be global, but is\n * specific to the application currently running. On server it is possible that many different\n * applications are running in a single server instance, and for this reason the `CorePlatform` is\n * associated with the application document.\n *\n * @param docOrNode - The document (or node) of the application for which the platform is needed.\n * @public\n */\n// </docs>\nexport const getPlatform = () => {\n    return _platform;\n};\nexport const isServerPlatform = () => {\n    if (qDynamicPlatform) {\n        return _platform.isServer;\n    }\n    return false;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3BsYXRmb3JtL3BsYXRmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBEQUEwRDtBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2pELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxHQUFpQixFQUFFO0lBQy9DLE9BQU87UUFDTCxRQUFRO1FBQ1IsWUFBWSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsVUFBVTtZQUN2QyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxNQUFNLEdBQUksVUFBa0IsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sTUFBTSxrQ0FBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sTUFBTSxzQ0FBNkIsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdFLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDL0IsT0FBTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3ZELE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ1YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM3QixxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7b0JBQ3pCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ2YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM3QixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSztZQUM5QixPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNwQyxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQWEsRUFBRSxXQUFvQixFQUFFLEdBQWlCLEVBQU8sRUFBRTtJQUNuRixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlFLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQztBQUVGLElBQUksU0FBUyxHQUFHLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUVoRCw0Q0FBNEM7QUFDNUMseUNBQXlDO0FBQ3pDLGtFQUFrRTtBQUNsRTs7Ozs7Ozs7O0dBU0c7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFFcEUsNENBQTRDO0FBQzVDLHlDQUF5QztBQUN6QyxrRUFBa0U7QUFDbEU7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLEdBQWlCLEVBQUU7SUFDNUMsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO0lBQ25DLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQixPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8ga2VlcCB0aGlzIGltcG9ydCBmcm9tIGNvcmUvYnVpbGQgc28gdGhlIGNqcyBidWlsZCB3b3Jrc1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBRRXJyb3IsIHFFcnJvciB9IGZyb20gJy4uL2Vycm9yL2Vycm9yJztcbmltcG9ydCB7IGdldFN5bWJvbEhhc2ggfSBmcm9tICcuLi9xcmwvcXJsLXV0aWxzJztcbmltcG9ydCB7IFFCYXNlQXR0ciB9IGZyb20gJy4uL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgcUR5bmFtaWNQbGF0Zm9ybSB9IGZyb20gJy4uL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHR5cGUgeyBDb3JlUGxhdGZvcm0gfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBsYXRmb3JtID0gKCk6IENvcmVQbGF0Zm9ybSA9PiB7XG4gIHJldHVybiB7XG4gICAgaXNTZXJ2ZXIsXG4gICAgaW1wb3J0U3ltYm9sKGNvbnRhaW5lckVsLCB1cmwsIHN5bWJvbE5hbWUpIHtcbiAgICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgICBjb25zdCBoYXNoID0gZ2V0U3ltYm9sSGFzaChzeW1ib2xOYW1lKTtcbiAgICAgICAgY29uc3QgcmVnU3ltID0gKGdsb2JhbFRoaXMgYXMgYW55KS5fX3F3aWtfcmVnX3N5bWJvbHM/LmdldChoYXNoKTtcbiAgICAgICAgaWYgKHJlZ1N5bSkge1xuICAgICAgICAgIHJldHVybiByZWdTeW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdXJsKSB7XG4gICAgICAgIHRocm93IHFFcnJvcihRRXJyb3IucXJsTWlzc2luZ0NodW5rLCBbc3ltYm9sTmFtZV0pO1xuICAgICAgfVxuICAgICAgaWYgKCFjb250YWluZXJFbCkge1xuICAgICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnFybE1pc3NpbmdDb250YWluZXIsIFt1cmwsIHN5bWJvbE5hbWVdKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVybERvYyA9IHRvVXJsKGNvbnRhaW5lckVsLm93bmVyRG9jdW1lbnQsIGNvbnRhaW5lckVsLCB1cmwpLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCB1cmxDb3B5ID0gbmV3IFVSTCh1cmxEb2MpO1xuICAgICAgdXJsQ29weS5oYXNoID0gJyc7XG4gICAgICBjb25zdCBpbXBvcnRVUkwgPSB1cmxDb3B5LmhyZWY7XG4gICAgICByZXR1cm4gaW1wb3J0KC8qIEB2aXRlLWlnbm9yZSAqLyBpbXBvcnRVUkwpLnRoZW4oKG1vZCkgPT4ge1xuICAgICAgICByZXR1cm4gbW9kW3N5bWJvbE5hbWVdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICByYWY6IChmbikgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG5leHRUaWNrOiAoZm4pID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2h1bmtGb3JTeW1ib2woc3ltYm9sTmFtZSwgY2h1bmspIHtcbiAgICAgIHJldHVybiBbc3ltYm9sTmFtZSwgY2h1bmsgPz8gJ18nXTtcbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IHJlbGF0aXZlIGJhc2UgVVJJIGFuZCByZWxhdGl2ZSBVUkwgaW50byBhIGZ1bGx5IHF1YWxpZmllZCBVUkwuXG4gKlxuICogQHBhcmFtIGJhc2UgLWBRUkxgcyBhcmUgcmVsYXRpdmUsIGFuZCB0aGVyZWZvcmUgdGhleSBuZWVkIGEgYmFzZSBmb3IgcmVzb2x1dGlvbi5cbiAqXG4gKiAgIC0gYEVsZW1lbnRgIHVzZSBgYmFzZS5vd25lckRvY3VtZW50LmJhc2VVUklgXG4gKiAgIC0gYERvY3VtZW50YCB1c2UgYGJhc2UuYmFzZVVSSWBcbiAqICAgLSBgc3RyaW5nYCB1c2UgYGJhc2VgIGFzIGlzXG4gKiAgIC0gYFFDb25maWdgIHVzZSBgYmFzZS5iYXNlVVJJYFxuICpcbiAqIEBwYXJhbSB1cmwgLSBSZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIEZ1bGx5IHF1YWxpZmllZCBVUkwuXG4gKi9cbmV4cG9ydCBjb25zdCB0b1VybCA9IChkb2M6IERvY3VtZW50LCBjb250YWluZXJFbDogRWxlbWVudCwgdXJsOiBzdHJpbmcgfCBVUkwpOiBVUkwgPT4ge1xuICBjb25zdCBiYXNlVVJJID0gZG9jLmJhc2VVUkk7XG4gIGNvbnN0IGJhc2UgPSBuZXcgVVJMKGNvbnRhaW5lckVsLmdldEF0dHJpYnV0ZShRQmFzZUF0dHIpID8/IGJhc2VVUkksIGJhc2VVUkkpO1xuICByZXR1cm4gbmV3IFVSTCh1cmwsIGJhc2UpO1xufTtcblxubGV0IF9wbGF0Zm9ybSA9IC8qI19fUFVSRV9fICovIGNyZWF0ZVBsYXRmb3JtKCk7XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi9yZWFkbWUubWQjc2V0UGxhdGZvcm1cIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuL3JlYWRtZS5tZCNzZXRQbGF0Zm9ybSBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogU2V0cyB0aGUgYENvcmVQbGF0Zm9ybWAuXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgdG8gb3ZlcnJpZGUgdGhlIHBsYXRmb3JtIGluIHRlc3RzIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YsXG4gKiBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCwgYW5kIGltcG9ydCByZXNvbHV0aW9uLlxuICpcbiAqIEBwYXJhbSBkb2MgLSBUaGUgZG9jdW1lbnQgb2YgdGhlIGFwcGxpY2F0aW9uIGZvciB3aGljaCB0aGUgcGxhdGZvcm0gaXMgbmVlZGVkLlxuICogQHBhcmFtIHBsYXRmb3JtIC0gVGhlIHBsYXRmb3JtIHRvIHVzZS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gPC9kb2NzPlxuZXhwb3J0IGNvbnN0IHNldFBsYXRmb3JtID0gKHBsdDogQ29yZVBsYXRmb3JtKSA9PiAoX3BsYXRmb3JtID0gcGx0KTtcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuL3JlYWRtZS5tZCNnZXRQbGF0Zm9ybVwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4vcmVhZG1lLm1kI2dldFBsYXRmb3JtIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgYENvcmVQbGF0Zm9ybWAuXG4gKlxuICogVGhlIGBDb3JlUGxhdGZvcm1gIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIHJldHJpZXZpbmcgdGhlIE1hbmlmZXN0LCB0aGF0IGNvbnRhaW5zIG1hcHBpbmdzIGZyb21cbiAqIHN5bWJvbHMgdG8gamF2YXNjcmlwdCBpbXBvcnQgY2h1bmtzLiBGb3IgdGhpcyByZWFzb24sIGBDb3JlUGxhdGZvcm1gIGNhbid0IGJlIGdsb2JhbCwgYnV0IGlzXG4gKiBzcGVjaWZpYyB0byB0aGUgYXBwbGljYXRpb24gY3VycmVudGx5IHJ1bm5pbmcuIE9uIHNlcnZlciBpdCBpcyBwb3NzaWJsZSB0aGF0IG1hbnkgZGlmZmVyZW50XG4gKiBhcHBsaWNhdGlvbnMgYXJlIHJ1bm5pbmcgaW4gYSBzaW5nbGUgc2VydmVyIGluc3RhbmNlLCBhbmQgZm9yIHRoaXMgcmVhc29uIHRoZSBgQ29yZVBsYXRmb3JtYCBpc1xuICogYXNzb2NpYXRlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbiBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0gZG9jT3JOb2RlIC0gVGhlIGRvY3VtZW50IChvciBub2RlKSBvZiB0aGUgYXBwbGljYXRpb24gZm9yIHdoaWNoIHRoZSBwbGF0Zm9ybSBpcyBuZWVkZWQuXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCBnZXRQbGF0Zm9ybSA9ICgpOiBDb3JlUGxhdGZvcm0gPT4ge1xuICByZXR1cm4gX3BsYXRmb3JtO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2VydmVyUGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChxRHluYW1pY1BsYXRmb3JtKSB7XG4gICAgcmV0dXJuIF9wbGF0Zm9ybS5pc1NlcnZlcjtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuIl19","export const isNode = (value) => {\n    return value && typeof value.nodeType === 'number';\n};\nexport const isDocument = (value) => {\n    return value.nodeType === 9;\n};\nexport const isElement = (value) => {\n    return value.nodeType === 1;\n};\nexport const isText = (value) => {\n    return value.nodeType === 3;\n};\nexport const isComment = (value) => {\n    return value.nodeType === 8;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvZWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFVLEVBQWlCLEVBQUU7SUFDbEQsT0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFXLEVBQXFCLEVBQUU7SUFDM0QsT0FBUSxLQUFhLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFhLEVBQW9CLEVBQUU7SUFDM0QsT0FBUSxLQUFhLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFxQixFQUFpQixFQUFFO0lBQzdELE9BQVEsS0FBYSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBcUIsRUFBb0IsRUFBRTtJQUNuRSxPQUFRLEtBQWEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBpc05vZGUgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIE5vZGUgPT4ge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLm5vZGVUeXBlID09PSAnbnVtYmVyJztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RvY3VtZW50ID0gKHZhbHVlOiBOb2RlKTogdmFsdWUgaXMgRG9jdW1lbnQgPT4ge1xuICByZXR1cm4gKHZhbHVlIGFzIGFueSkubm9kZVR5cGUgPT09IDk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFbGVtZW50ID0gKHZhbHVlOiBvYmplY3QpOiB2YWx1ZSBpcyBFbGVtZW50ID0+IHtcbiAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLm5vZGVUeXBlID09PSAxO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVGV4dCA9ICh2YWx1ZTogTm9kZSB8IEVsZW1lbnQpOiB2YWx1ZSBpcyBUZXh0ID0+IHtcbiAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLm5vZGVUeXBlID09PSAzO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQ29tbWVudCA9ICh2YWx1ZTogTm9kZSB8IEVsZW1lbnQpOiB2YWx1ZSBpcyBDb21tZW50ID0+IHtcbiAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLm5vZGVUeXBlID09PSA4O1xufTtcbiJdfQ==","import { throwErrorAndStop } from './log';\nexport const MAX_RETRY_ON_PROMISE_COUNT = 100;\nexport const isPromise = (value) => {\n    // not using \"value instanceof Promise\" to have zone.js support\n    return !!value && typeof value == 'object' && typeof value.then === 'function';\n};\nexport const safeCall = (call, thenFn, rejectFn) => {\n    try {\n        const result = call();\n        if (isPromise(result)) {\n            return result.then(thenFn, rejectFn);\n        }\n        else {\n            return thenFn(result);\n        }\n    }\n    catch (e) {\n        return rejectFn(e);\n    }\n};\nexport const maybeThen = (valueOrPromise, thenFn) => {\n    return isPromise(valueOrPromise)\n        ? valueOrPromise.then(thenFn, shouldNotError)\n        : thenFn(valueOrPromise);\n};\nexport const shouldNotError = (reason) => {\n    throwErrorAndStop(reason);\n};\nexport const maybeThenMap = (array, thenMapFn, thenFn) => {\n    const length = array.length;\n    const mappedArray = [];\n    let idx = 0;\n    const drain = () => {\n        let result;\n        do {\n            const item = array[idx];\n            result = isPromise(item) ? item.then(thenMapFn) : thenMapFn(item);\n            if (isPromise(result)) {\n                return result.then((value) => {\n                    mappedArray[idx] = value;\n                    return drain();\n                });\n            }\n            else {\n                mappedArray[idx] = result;\n                idx++;\n            }\n        } while (idx < length);\n        return mappedArray;\n    };\n    return maybeThen(drain(), thenFn);\n};\nexport const promiseAll = (promises) => {\n    const hasPromise = promises.some(isPromise);\n    if (hasPromise) {\n        return Promise.all(promises);\n    }\n    return promises;\n};\nexport const promiseAllLazy = (promises) => {\n    if (promises.length > 0) {\n        return Promise.all(promises);\n    }\n    return promises;\n};\nexport const isNotNullable = (v) => {\n    return v != null;\n};\nexport const delay = (timeout) => {\n    return new Promise((resolve) => {\n        setTimeout(resolve, timeout);\n    });\n};\n// Retries a function that throws a promise.\nexport function retryOnPromise(fn, retryCount = 0) {\n    const retryOrThrow = (e) => {\n        if (isPromise(e) && retryCount < MAX_RETRY_ON_PROMISE_COUNT) {\n            return e.then(retryOnPromise.bind(null, fn, retryCount++));\n        }\n        throw e;\n    };\n    try {\n        const result = fn();\n        if (isPromise(result)) {\n            // not awaited promise is not caught by try/catch block\n            return result.catch((e) => retryOrThrow(e));\n        }\n        return result;\n    }\n    catch (e) {\n        return retryOrThrow(e);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbWlzZXMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3V0aWxzL3Byb21pc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUcxQyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFFOUMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBVSxFQUF5QixFQUFFO0lBQzdELCtEQUErRDtJQUMvRCxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7QUFDakYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQ3RCLElBQTZCLEVBQzdCLE1BQXNELEVBQ3RELFFBQW9ELEVBQzdCLEVBQUU7SUFDekIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN0QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxNQUFNLENBQUMsTUFBYSxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUN2QixjQUFpQyxFQUNqQyxNQUE4QyxFQUMzQixFQUFFO0lBQ3JCLE9BQU8sU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUM5QixDQUFDLENBQUMsY0FBYyxD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TSxFQUFxQixFQUFFO1FBQ2pELElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRywwQkFBMEIsRUFBRSxDQUFDO1lBQzVELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBc0IsQ0FBQztRQUNsRixDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDLENBQUM7SUFFRixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNwQixJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3RCLHVEQUF1RDtZQUN2RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGhyb3dFcnJvckFuZFN0b3AgfSBmcm9tICcuL2xvZyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNQVhfUkVUUllfT05fUFJPTUlTRV9DT1VOVCA9IDEwMDtcblxuZXhwb3J0IGNvbnN0IGlzUHJvbWlzZSA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgUHJvbWlzZTxhbnk+ID0+IHtcbiAgLy8gbm90IHVzaW5nIFwidmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlXCIgdG8gaGF2ZSB6b25lLmpzIHN1cHBvcnRcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nO1xufTtcblxuZXhwb3J0IGNvbnN0IHNhZmVDYWxsID0gPFQsIEIsIEM+KFxuICBjYWxsOiAoKSA9PiBWYWx1ZU9yUHJvbWlzZTxUPixcbiAgdGhlbkZuOiB7IGYoYXJnOiBBd2FpdGVkPFQ+KTogVmFsdWVPclByb21pc2U8Qj4gfVsnZiddLFxuICByZWplY3RGbjogeyBmKHJlYXNvbjogYW55KTogVmFsdWVPclByb21pc2U8Qz4gfVsnZiddXG4pOiBWYWx1ZU9yUHJvbWlzZTxCIHwgQz4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGwoKTtcbiAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgIHJldHVybiByZXN1bHQudGhlbih0aGVuRm4gYXMgYW55LCByZWplY3RGbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGVuRm4ocmVzdWx0IGFzIGFueSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHJlamVjdEZuKGUpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbWF5YmVUaGVuID0gPFQsIEI+KFxuICB2YWx1ZU9yUHJvbWlzZTogVmFsdWVPclByb21pc2U8VD4sXG4gIHRoZW5GbjogKGFyZzogQXdhaXRlZDxUPikgPT4gVmFsdWVPclByb21pc2U8Qj5cbik6IFZhbHVlT3JQcm9taXNlPEI+ID0+IHtcbiAgcmV0dXJuIGlzUHJvbWlzZSh2YWx1ZU9yUHJvbWlzZSlcbiAgICA/IHZhbHVlT3JQcm9taXNlLnRoZW4odGhlbkZuIGFzIGFueSwgc2hvdWxkTm90RXJyb3IpXG4gICAgOiB0aGVuRm4odmFsdWVPclByb21pc2UgYXMgYW55KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaG91bGROb3RFcnJvciA9IChyZWFzb246IGFueSk6IGFueSA9PiB7XG4gIHRocm93RXJyb3JBbmRTdG9wKHJlYXNvbik7XG59O1xuXG5leHBvcnQgY29uc3QgbWF5YmVUaGVuTWFwID0gPFQsIE1BUF9SRVQsIFJFVD4oXG4gIGFycmF5OiBWYWx1ZU9yUHJvbWlzZTxUPltdLFxuICB0aGVuTWFwRm46IChpdGVtOiBUKSA9PiBWYWx1ZU9yUHJvbWlzZTxNQVBfUkVUPixcbiAgdGhlbkZuOiAoaXRlbXM6IE1BUF9SRVRbXSkgPT4gVmFsdWVPclByb21pc2U8UkVUPlxuKTogVmFsdWVPclByb21pc2U8UkVUPiA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgY29uc3QgbWFwcGVkQXJyYXk6IE1BUF9SRVRbXSA9IFtdO1xuICBsZXQgaWR4ID0gMDtcbiAgY29uc3QgZHJhaW4gPSAoKTogVmFsdWVPclByb21pc2U8TUFQX1JFVFtdPiA9PiB7XG4gICAgbGV0IHJlc3VsdDogVmFsdWVPclByb21pc2U8TUFQX1JFVD47XG4gICAgZG8ge1xuICAgICAgY29uc3QgaXRlbSA9IGFycmF5W2lkeF07XG4gICAgICByZXN1bHQgPSBpc1Byb21pc2UoaXRlbSkgPyBpdGVtLnRoZW4odGhlbk1hcEZuKSA6IHRoZW5NYXBGbihpdGVtKTtcbiAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgbWFwcGVkQXJyYXlbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiBkcmFpbigpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hcHBlZEFycmF5W2lkeF0gPSByZXN1bHQ7XG4gICAgICAgIGlkeCsrO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGlkeCA8IGxlbmd0aCk7XG4gICAgcmV0dXJuIG1hcHBlZEFycmF5O1xuICB9O1xuICByZXR1cm4gbWF5YmVUaGVuKGRyYWluKCksIHRoZW5Gbik7XG59O1xuXG5leHBvcnQgY29uc3QgcHJvbWlzZUFsbCA9IDxUIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdIHwgW10+KFxuICBwcm9taXNlczogVFxuKTogVmFsdWVPclByb21pc2U8eyAtcmVhZG9ubHkgW1AgaW4ga2V5b2YgVF06IEF3YWl0ZWQ8VFtQXT4gfT4gPT4ge1xuICBjb25zdCBoYXNQcm9taXNlID0gcHJvbWlzZXMuc29tZShpc1Byb21pc2UpO1xuICBpZiAoaGFzUHJvbWlzZSkge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gIH1cbiAgcmV0dXJuIHByb21pc2VzIGFzIGFueTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9taXNlQWxsTGF6eSA9IDxUIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdIHwgW10+KFxuICBwcm9taXNlczogVFxuKTogVmFsdWVPclByb21pc2U8dm9pZD4gPT4ge1xuICBpZiAocHJvbWlzZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykgYXMgYW55O1xuICB9XG4gIHJldHVybiBwcm9taXNlcyBhcyBhbnk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNOb3ROdWxsYWJsZSA9IDxUPih2OiBUKTogdiBpcyBOb25OdWxsYWJsZTxUPiA9PiB7XG4gIHJldHVybiB2ICE9IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsYXkgPSAodGltZW91dDogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCk7XG4gIH0pO1xufTtcblxuLy8gUmV0cmllcyBhIGZ1bmN0aW9uIHRoYXQgdGhyb3dzIGEgcHJvbWlzZS5cbmV4cG9ydCBmdW5jdGlvbiByZXRyeU9uUHJvbWlzZTxUPihcbiAgZm46ICgpID0+IFZhbHVlT3JQcm9taXNlPFQ+LFxuICByZXRyeUNvdW50OiBudW1iZXIgPSAwXG4pOiBWYWx1ZU9yUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHJldHJ5T3JUaHJvdyA9IChlOiBhbnkpOiBWYWx1ZU9yUHJvbWlzZTxUPiA9PiB7XG4gICAgaWYgKGlzUHJvbWlzZShlKSAmJiByZXRyeUNvdW50IDwgTUFYX1JFVFJZX09OX1BST01JU0VfQ09VTlQpIHtcbiAgICAgIHJldHVybiBlLnRoZW4ocmV0cnlPblByb21pc2UuYmluZChudWxsLCBmbiwgcmV0cnlDb3VudCsrKSkgYXMgVmFsdWVPclByb21pc2U8VD47XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBmbigpO1xuICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgLy8gbm90IGF3YWl0ZWQgcHJvbWlzZSBpcyBub3QgY2F1Z2h0IGJ5IHRyeS9jYXRjaCBibG9ja1xuICAgICAgcmV0dXJuIHJlc3VsdC5jYXRjaCgoZSkgPT4gcmV0cnlPclRocm93KGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiByZXRyeU9yVGhyb3coZSk7XG4gIH1cbn1cbiJdfQ==","/** @private */\nexport const isHtmlElement = (node) => {\n    return node ? node.nodeType === 1 : false;\n};\nexport const isSerializableObject = (v) => {\n    const proto = Object.getPrototypeOf(v);\n    return proto === Object.prototype || proto === Array.prototype || proto === null;\n};\nexport const isObject = (v) => {\n    return !!v && typeof v === 'object';\n};\nexport const isArray = (v) => {\n    return Array.isArray(v);\n};\nexport const isString = (v) => {\n    return typeof v === 'string';\n};\nexport const isFunction = (v) => {\n    return typeof v === 'function';\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3V0aWxzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWU7QUFDZixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFhLEVBQW1CLEVBQUU7SUFDOUQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFFLElBQWEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFVLEVBQWdDLEVBQUU7SUFDL0UsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxPQUFPLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDbkYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBVSxFQUFlLEVBQUU7SUFDbEQsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQztBQUN0QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFVLEVBQWtCLEVBQUU7SUFDcEQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVUsRUFBZSxFQUFFO0lBQ2xELE9BQU8sT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFrQyxDQUFVLEVBQVUsRUFBRTtJQUNoRixPQUFPLE9BQU8sQ0FBQyxLQUFLLFVBQVUsQ0FBQztBQUNqQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQHByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBpc0h0bWxFbGVtZW50ID0gKG5vZGU6IHVua25vd24pOiBub2RlIGlzIEVsZW1lbnQgPT4ge1xuICByZXR1cm4gbm9kZSA/IChub2RlIGFzIE5vZGUpLm5vZGVUeXBlID09PSAxIDogZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTZXJpYWxpemFibGVPYmplY3QgPSAodjogdW5rbm93bik6IHYgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2KTtcbiAgcmV0dXJuIHByb3RvID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvID09PSBBcnJheS5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSAodjogdW5rbm93bik6IHYgaXMgb2JqZWN0ID0+IHtcbiAgcmV0dXJuICEhdiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCc7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBcnJheSA9ICh2OiB1bmtub3duKTogdiBpcyB1bmtub3duW10gPT4ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1N0cmluZyA9ICh2OiB1bmtub3duKTogdiBpcyBzdHJpbmcgPT4ge1xuICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb24gPSA8VCBleHRlbmRzICguLi5hcmdzOiBhbnkpID0+IGFueT4odjogdW5rbm93bik6IHYgaXMgVCA9PiB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cbi8qKlxuICogVHlwZSByZXByZXNlbnRpbmcgYSB2YWx1ZSB3aGljaCBpcyBlaXRoZXIgcmVzb2x2ZSBvciBhIHByb21pc2UuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBWYWx1ZU9yUHJvbWlzZTxUPiA9IFQgfCBQcm9taXNlPFQ+O1xuIl19","import { getBuildBase } from './utils';\nimport { isDev } from '@qwik.dev/core/build';\nexport function getPrefetchResources(qrls, opts, resolvedManifest) {\n    if (!resolvedManifest) {\n        return [];\n    }\n    const prefetchStrategy = opts.prefetchStrategy;\n    const buildBase = getBuildBase(opts);\n    if (prefetchStrategy !== null) {\n        // do nothing if opts.prefetchStrategy is explicitly set to null\n        if (!prefetchStrategy ||\n            !prefetchStrategy.symbolsToPrefetch ||\n            prefetchStrategy.symbolsToPrefetch === 'auto') {\n            // DEFAULT 'events-document'\n            // if prefetchStrategy is undefined\n            // or prefetchStrategy.symbolsToPrefetch is undefined\n            // get event QRLs used in this document\n            return getAutoPrefetch(qrls, resolvedManifest, buildBase);\n        }\n        if (typeof prefetchStrategy.symbolsToPrefetch === 'function') {\n            // call user option symbolsToPrefetch()\n            try {\n                return prefetchStrategy.symbolsToPrefetch({ manifest: resolvedManifest.manifest });\n            }\n            catch (e) {\n                console.error('getPrefetchUrls, symbolsToPrefetch()', e);\n            }\n        }\n    }\n    // no urls to prefetch\n    return [];\n}\nfunction getAutoPrefetch(qrls, resolvedManifest, buildBase) {\n    const prefetchResources = [];\n    const { mapper, manifest } = resolvedManifest;\n    const urls = new Map();\n    if (mapper && manifest) {\n        for (const qrl of qrls) {\n            const qrlSymbolName = qrl.getHash();\n            const resolvedSymbol = mapper[qrlSymbolName];\n            if (resolvedSymbol) {\n                const bundleFileName = resolvedSymbol[1];\n                addBundle(manifest, urls, prefetchResources, buildBase, bundleFileName);\n            }\n        }\n    }\n    return prefetchResources;\n}\nfunction addBundle(manifest, urls, prefetchResources, buildBase, bundleFileName) {\n    const url = isDev ? bundleFileName : buildBase + bundleFileName;\n    let prefetchResource = urls.get(url);\n    if (!prefetchResource) {\n        prefetchResource = {\n            url,\n            imports: [],\n        };\n        urls.set(url, prefetchResource);\n        const bundle = manifest.bundles[bundleFileName];\n        if (bundle) {\n            if (Array.isArray(bundle.imports)) {\n                for (const importedFilename of bundle.imports) {\n                    addBundle(manifest, urls, prefetchResource.imports, buildBase, importedFilename);\n                }\n            }\n        }\n    }\n    prefetchResources.push(prefetchResource);\n}\nexport const isQrl = (value) => {\n    return typeof value === 'function' && typeof value.getSymbol === 'function';\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmV0Y2gtc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL3NlcnZlci9wcmVmZXRjaC1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU83QyxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLElBQVcsRUFDWCxJQUEyQixFQUMzQixnQkFBOEM7SUFFOUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0MsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJDLElBQUksZ0JBQWdCLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDOUIsZ0VBQWdFO1FBRWhFLElBQ0UsQ0FBQyxnQkFBZ0I7WUFDakIsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUI7WUFDbkMsZ0JBQWdCLENBQUMsaUJBQWlCLEtBQUssTUFBTSxFQUM3QyxDQUFDO1lBQ0QsNEJBQTRCO1lBQzVCLG1DQUFtQztZQUNuQyxxREFBcUQ7WUFDckQsdUNBQXVDO1lBQ3ZDLE9BQU8sZUFBZSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsSUFBSSxPQUFPLGdCQUFnQixDQUFDLGlCQUFpQixLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzdELHVDQUF1QztZQUN2QyxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3JGLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0Qsc0JBQXNCO0lBQ3RCLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLElBQVcsRUFBRSxnQkFBa0MsRUFBRSxTQUFpQjtJQUN6RixNQUFNLGlCQUFpQixHQUF1QixFQUFFLENBQUM7SUFDakQsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztJQUM5QyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztJQUVqRCxJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN2QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0MsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDMUUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQ2hCLFFBQXNCLEVBQ3RCLElBQW1DLEVBQ25DLGlCQUFxQyxFQUNyQyxTQUFpQixFQUNqQixjQUFzQjtJQUV0QixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztJQUNoRSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdEIsZ0JBQWdCLEdBQUc7WUFDakIsR0FBRztZQUNILE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFaEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxLQUFLLE1BQU0sZ0JBQWdCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUM5QyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQ25GLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBVSxFQUF3QixFQUFFO0lBQ3hELE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUM7QUFDOUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0QnVpbGRCYXNlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB0eXBlIHsgUHJlZmV0Y2hSZXNvdXJjZSwgUXdpa01hbmlmZXN0LCBSZW5kZXJUb1N0cmluZ09wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHR5cGUgeyBRUkxJbnRlcm5hbCB9IGZyb20gJy4vcXdpay10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkTWFuaWZlc3QgfSBmcm9tICdAcXdpay5kZXYvY29yZS9vcHRpbWl6ZXInO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICdAcXdpay5kZXYvY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmVmZXRjaFJlc291cmNlcyhcbiAgcXJsczogUVJMW10sXG4gIG9wdHM6IFJlbmRlclRvU3RyaW5nT3B0aW9ucyxcbiAgcmVzb2x2ZWRNYW5pZmVzdDogUmVzb2x2ZWRNYW5pZmVzdCB8IHVuZGVmaW5lZFxuKTogUHJlZmV0Y2hSZXNvdXJjZVtdIHtcbiAgaWYgKCFyZXNvbHZlZE1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHByZWZldGNoU3RyYXRlZ3kgPSBvcHRzLnByZWZldGNoU3RyYXRlZ3k7XG4gIGNvbnN0IGJ1aWxkQmFzZSA9IGdldEJ1aWxkQmFzZShvcHRzKTtcblxuICBpZiAocHJlZmV0Y2hTdHJhdGVneSAhPT0gbnVsbCkge1xuICAgIC8vIGRvIG5vdGhpbmcgaWYgb3B0cy5wcmVmZXRjaFN0cmF0ZWd5IGlzIGV4cGxpY2l0bHkgc2V0IHRvIG51bGxcblxuICAgIGlmIChcbiAgICAgICFwcmVmZXRjaFN0cmF0ZWd5IHx8XG4gICAgICAhcHJlZmV0Y2hTdHJhdGVneS5zeW1ib2xzVG9QcmVmZXRjaCB8fFxuICAgICAgcHJlZmV0Y2hTdHJhdGVneS5zeW1ib2xzVG9QcmVmZXRjaCA9PT0gJ2F1dG8nXG4gICAgKSB7XG4gICAgICAvLyBERUZBVUxUICdldmVudHMtZG9jdW1lbnQnXG4gICAgICAvLyBpZiBwcmVmZXRjaFN0cmF0ZWd5IGlzIHVuZGVmaW5lZFxuICAgICAgLy8gb3IgcHJlZmV0Y2hTdHJhdGVneS5zeW1ib2xzVG9QcmVmZXRjaCBpcyB1bmRlZmluZWRcbiAgICAgIC8vIGdldCBldmVudCBRUkxzIHVzZWQgaW4gdGhpcyBkb2N1bWVudFxuICAgICAgcmV0dXJuIGdldEF1dG9QcmVmZXRjaChxcmxzLCByZXNvbHZlZE1hbmlmZXN0LCBidWlsZEJhc2UpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJlZmV0Y2hTdHJhdGVneS5zeW1ib2xzVG9QcmVmZXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gY2FsbCB1c2VyIG9wdGlvbiBzeW1ib2xzVG9QcmVmZXRjaCgpXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcHJlZmV0Y2hTdHJhdGVneS5zeW1ib2xzVG9QcmVmZXRjaCh7IG1hbmlmZXN0OiByZXNvbHZlZE1hbmlmZXN0Lm1hbmlmZXN0IH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnZXRQcmVmZXRjaFVybHMsIHN5bWJvbHNUb1ByZWZldGNoKCknLCBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gbm8gdXJscyB0byBwcmVmZXRjaFxuICByZXR1cm4gW107XG59XG5cbmZ1bmN0aW9uIGdldEF1dG9QcmVmZXRjaChxcmxzOiBRUkxbXSwgcmVzb2x2ZWRNYW5pZmVzdDogUmVzb2x2ZWRNYW5pZmVzdCwgYnVpbGRCYXNlOiBzdHJpbmcpIHtcbiAgY29uc3QgcHJlZmV0Y2hSZXNvdXJjZXM6IFByZWZldGNoUmVzb3VyY2VbXSA9IFtdO1xuICBjb25zdCB7IG1hcHBlciwgbWFuaWZlc3QgfSA9IHJlc29sdmVkTWFuaWZlc3Q7XG4gIGNvbnN0IHVybHMgPSBuZXcgTWFwPHN0cmluZywgUHJlZmV0Y2hSZXNvdXJjZT4oKTtcblxuICBpZiAobWFwcGVyICYmIG1hbmlmZXN0KSB7XG4gICAgZm9yIChjb25zdCBxcmwgb2YgcXJscykge1xuICAgICAgY29uc3QgcXJsU3ltYm9sTmFtZSA9IHFybC5nZXRIYXNoKCk7XG4gICAgICBjb25zdCByZXNvbHZlZFN5bWJvbCA9IG1hcHBlcltxcmxTeW1ib2xOYW1lXTtcbiAgICAgIGlmIChyZXNvbHZlZFN5bWJvbCkge1xuICAgICAgICBjb25zdCBidW5kbGVGaWxlTmFtZSA9IHJlc29sdmVkU3ltYm9sWzFdO1xuICAgICAgICBhZGRCdW5kbGUobWFuaWZlc3QsIHVybHMsIHByZWZldGNoUmVzb3VyY2VzLCBidWlsZEJhc2UsIGJ1bmRsZUZpbGVOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByZWZldGNoUmVzb3VyY2VzO1xufVxuXG5mdW5jdGlvbiBhZGRCdW5kbGUoXG4gIG1hbmlmZXN0OiBRd2lrTWFuaWZlc3QsXG4gIHVybHM6IE1hcDxzdHJpbmcsIFByZWZldGNoUmVzb3VyY2U+LFxuICBwcmVmZXRjaFJlc291cmNlczogUHJlZmV0Y2hSZXNvdXJjZVtdLFxuICBidWlsZEJhc2U6IHN0cmluZyxcbiAgYnVuZGxlRmlsZU5hbWU6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHVybCA9IGlzRGV2ID8gYnVuZGxlRmlsZU5hbWUgOiBidWlsZEJhc2UgKyBidW5kbGVGaWxlTmFtZTtcbiAgbGV0IHByZWZldGNoUmVzb3VyY2UgPSB1cmxzLmdldCh1cmwpO1xuICBpZiAoIXByZWZldGNoUmVzb3VyY2UpIHtcbiAgICBwcmVmZXRjaFJlc291cmNlID0ge1xuICAgICAgdXJsLFxuICAgICAgaW1wb3J0czogW10sXG4gICAgfTtcbiAgICB1cmxzLnNldCh1cmwsIHByZWZldGNoUmVzb3VyY2UpO1xuXG4gICAgY29uc3QgYnVuZGxlID0gbWFuaWZlc3QuYnVuZGxlc1tidW5kbGVGaWxlTmFtZV07XG4gICAgaWYgKGJ1bmRsZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnVuZGxlLmltcG9ydHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW1wb3J0ZWRGaWxlbmFtZSBvZiBidW5kbGUuaW1wb3J0cykge1xuICAgICAgICAgIGFkZEJ1bmRsZShtYW5pZmVzdCwgdXJscywgcHJlZmV0Y2hSZXNvdXJjZS5pbXBvcnRzLCBidWlsZEJhc2UsIGltcG9ydGVkRmlsZW5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByZWZldGNoUmVzb3VyY2VzLnB1c2gocHJlZmV0Y2hSZXNvdXJjZSk7XG59XG5cbmV4cG9ydCBjb25zdCBpc1FybCA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgUVJMSW50ZXJuYWwgPT4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZS5nZXRTeW1ib2wgPT09ICdmdW5jdGlvbic7XG59O1xuIl19","/** @internal */\nexport const EMPTY_ARRAY = [];\nexport const EMPTY_OBJ = {};\nObject.freeze(EMPTY_ARRAY);\nObject.freeze(EMPTY_OBJ);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx5d2VpZ2h0LmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9mbHl3ZWlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxFQUFXLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEVBQXlCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IEVNUFRZX0FSUkFZID0gW10gYXMgYW55W107XG5leHBvcnQgY29uc3QgRU1QVFlfT0JKID0ge30gYXMgUmVjb3JkPHN0cmluZywgYW55PjtcblxuT2JqZWN0LmZyZWV6ZShFTVBUWV9BUlJBWSk7XG5PYmplY3QuZnJlZXplKEVNUFRZX09CSik7XG4iXX0=","import { qError } from '../error/error';\nimport { EMPTY_ARRAY } from '../utils/flyweight';\nimport { qSerialize } from '../utils/qdev';\nimport { isFunction, isString } from '../utils/types';\nimport { createQRL, emitEvent } from './qrl-class';\n// https://regexr.com/68v72\n// @ts-expect-error this is a valid regex\nconst EXTRACT_IMPORT_PATH = /\\(\\s*(['\"])([^\\1]+)\\1\\s*\\)/;\n// https://regexr.com/690ds\nconst EXTRACT_SELF_IMPORT = /Promise\\s*\\.\\s*resolve/;\n// https://regexr.com/6a83h\nconst EXTRACT_FILE_NAME = /[\\\\/(]([\\w\\d.\\-_]+\\.(js|ts)x?):/;\nconst announcedQRL = /*#__PURE__*/ new Set();\n// <docs markdown=\"../../readme.md#qrl\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../../readme.md#qrl instead and run `pnpm docs.sync`)\n/**\n * Used by Qwik Optimizer to point to lazy-loaded resources.\n *\n * This function should be used by the Qwik Optimizer only. The function should not be directly\n * referred to in the source code of the application.\n *\n * @param chunkOrFn - Chunk name (or function which is stringified to extract chunk name)\n * @param symbol - Symbol to lazy load\n * @param lexicalScopeCapture - A set of lexically scoped variables to capture.\n * @public\n * @see `QRL`, `$(...)`\n */\n// </docs>\nexport const qrl = (chunkOrFn, symbol, lexicalScopeCapture = EMPTY_ARRAY, stackOffset = 0) => {\n    let chunk = null;\n    let symbolFn = null;\n    if (isFunction(chunkOrFn)) {\n        symbolFn = chunkOrFn;\n        if (qSerialize) {\n            let match;\n            const srcCode = String(chunkOrFn);\n            if ((match = srcCode.match(EXTRACT_IMPORT_PATH)) && match[2]) {\n                chunk = match[2];\n            }\n            else if ((match = srcCode.match(EXTRACT_SELF_IMPORT))) {\n                const ref = 'QWIK-SELF';\n                const frames = new Error(ref).stack.split('\\n');\n                const start = frames.findIndex((f) => f.includes(ref));\n                const frame = frames[start + 2 + stackOffset];\n                match = frame.match(EXTRACT_FILE_NAME);\n                if (!match) {\n                    chunk = 'main';\n                }\n                else {\n                    chunk = match[1];\n                }\n            }\n            else {\n                throw qError(11 /* QError.dynamicImportFailed */, [srcCode]);\n            }\n        }\n    }\n    else if (isString(chunkOrFn)) {\n        chunk = chunkOrFn;\n    }\n    else {\n        throw qError(12 /* QError.unknownTypeArgument */, [chunkOrFn]);\n    }\n    if (!announcedQRL.has(symbol)) {\n        // Emit event\n        announcedQRL.add(symbol);\n        emitEvent('qprefetch', {\n            symbols: [symbol],\n            bundles: chunk && [chunk],\n        });\n    }\n    // Unwrap subscribers\n    return createQRL(chunk, symbol, null, symbolFn, null, lexicalScopeCapture);\n};\n/** @internal */\nexport const inlinedQrl = (symbol, symbolName, lexicalScopeCapture = EMPTY_ARRAY) => {\n    // Unwrap subscribers\n    return createQRL(null, symbolName, symbol, null, null, lexicalScopeCapture);\n};\n/** @internal */\nexport const _noopQrl = (symbolName, lexicalScopeCapture = EMPTY_ARRAY) => {\n    return createQRL(null, symbolName, null, null, null, lexicalScopeCapture);\n};\n/** @internal */\nexport const _noopQrlDEV = (symbolName, opts, lexicalScopeCapture = EMPTY_ARRAY) => {\n    const newQrl = _noopQrl(symbolName, lexicalScopeCapture);\n    newQrl.dev = opts;\n    return newQrl;\n};\n/** @internal */\nexport const qrlDEV = (chunkOrFn, symbol, opts, lexicalScopeCapture = EMPTY_ARRAY) => {\n    const newQrl = qrl(chunkOrFn, symbol, lexicalScopeCapture, 1);\n    newQrl.dev = opts;\n    return newQrl;\n};\n/** @internal */\nexport const inlinedQrlDEV = (symbol, symbolName, opts, lexicalScopeCapture = EMPTY_ARRAY) => {\n    const qrl = inlinedQrl(symbol, symbolName, lexicalScopeCapture);\n    qrl.dev = opts;\n    return qrl;\n};\n/** @internal */\nexport const _regSymbol = (symbol, hash) => {\n    if (typeof globalThis.__qwik_reg_symbols === 'undefined') {\n        globalThis.__qwik_reg_symbols = new Map();\n    }\n    globalThis.__qwik_reg_symbols.set(hash, symbol);\n    return symbol;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9xcmwvcXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUdyRSwyQkFBMkI7QUFDM0IseUNBQXlDO0FBQ3pDLE1BQU0sbUJBQW1CLEdBQUcsNEJBQTRCLENBQUM7QUFFekQsMkJBQTJCO0FBQzNCLE1BQU0sbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7QUFFckQsMkJBQTJCO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsaUNBQWlDLENBQUM7QUFFNUQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksR0FBRyxFQUFVLENBQUM7QUFTckQsd0NBQXdDO0FBQ3hDLHlDQUF5QztBQUN6Qyw4REFBOEQ7QUFDOUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQ2pCLFNBQXdDLEVBQ3hDLE1BQWMsRUFDZCxzQkFBNkIsV0FBVyxFQUN4QyxXQUFXLEdBQUcsQ0FBQyxFQUNQLEVBQUU7SUFDVixJQUFJLEtBQUssR0FBa0IsSUFBSSxDQUFDO0lBQ2hDLElBQUksUUFBUSxHQUFnRCxJQUFJLENBQUM7SUFDakUsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMxQixRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3JCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJ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QUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUUVycm9yLCBxRXJyb3IgfSBmcm9tICcuLi9lcnJvci9lcnJvcic7XG5pbXBvcnQgeyBFTVBUWV9BUlJBWSB9IGZyb20gJy4uL3V0aWxzL2ZseXdlaWdodCc7XG5pbXBvcnQgeyBxU2VyaWFsaXplIH0gZnJvbSAnLi4vdXRpbHMvcWRldic7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVFSTCwgZW1pdEV2ZW50LCB0eXBlIFFSTEludGVybmFsIH0gZnJvbSAnLi9xcmwtY2xhc3MnO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICcuL3FybC5wdWJsaWMnO1xuXG4vLyBodHRwczovL3JlZ2V4ci5jb20vNjh2NzJcbi8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyBhIHZhbGlkIHJlZ2V4XG5jb25zdCBFWFRSQUNUX0lNUE9SVF9QQVRIID0gL1xcKFxccyooWydcIl0pKFteXFwxXSspXFwxXFxzKlxcKS87XG5cbi8vIGh0dHBzOi8vcmVnZXhyLmNvbS82OTBkc1xuY29uc3QgRVhUUkFDVF9TRUxGX0lNUE9SVCA9IC9Qcm9taXNlXFxzKlxcLlxccypyZXNvbHZlLztcblxuLy8gaHR0cHM6Ly9yZWdleHIuY29tLzZhODNoXG5jb25zdCBFWFRSQUNUX0ZJTEVfTkFNRSA9IC9bXFxcXC8oXShbXFx3XFxkLlxcLV9dK1xcLihqc3x0cyl4Pyk6LztcblxuY29uc3QgYW5ub3VuY2VkUVJMID0gLyojX19QVVJFX18qLyBuZXcgU2V0PHN0cmluZz4oKTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUVJMRGV2IHtcbiAgZmlsZTogc3RyaW5nO1xuICBsbzogbnVtYmVyO1xuICBoaTogbnVtYmVyO1xufVxuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uLy4uL3JlYWRtZS5tZCNxcmxcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi8uLi9yZWFkbWUubWQjcXJsIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBVc2VkIGJ5IFF3aWsgT3B0aW1pemVyIHRvIHBvaW50IHRvIGxhenktbG9hZGVkIHJlc291cmNlcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBRd2lrIE9wdGltaXplciBvbmx5LiBUaGUgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBkaXJlY3RseVxuICogcmVmZXJyZWQgdG8gaW4gdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0gY2h1bmtPckZuIC0gQ2h1bmsgbmFtZSAob3IgZnVuY3Rpb24gd2hpY2ggaXMgc3RyaW5naWZpZWQgdG8gZXh0cmFjdCBjaHVuayBuYW1lKVxuICogQHBhcmFtIHN5bWJvbCAtIFN5bWJvbCB0byBsYXp5IGxvYWRcbiAqIEBwYXJhbSBsZXhpY2FsU2NvcGVDYXB0dXJlIC0gQSBzZXQgb2YgbGV4aWNhbGx5IHNjb3BlZCB2YXJpYWJsZXMgdG8gY2FwdHVyZS5cbiAqIEBwdWJsaWNcbiAqIEBzZWUgYFFSTGAsIGAkKC4uLilgXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCBxcmwgPSA8VCA9IGFueT4oXG4gIGNodW5rT3JGbjogc3RyaW5nIHwgKCgpID0+IFByb21pc2U8YW55PiksXG4gIHN5bWJvbDogc3RyaW5nLFxuICBsZXhpY2FsU2NvcGVDYXB0dXJlOiBhbnlbXSA9IEVNUFRZX0FSUkFZLFxuICBzdGFja09mZnNldCA9IDBcbik6IFFSTDxUPiA9PiB7XG4gIGxldCBjaHVuazogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGxldCBzeW1ib2xGbjogbnVsbCB8ICgoKSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+KSA9IG51bGw7XG4gIGlmIChpc0Z1bmN0aW9uKGNodW5rT3JGbikpIHtcbiAgICBzeW1ib2xGbiA9IGNodW5rT3JGbjtcbiAgICBpZiAocVNlcmlhbGl6ZSkge1xuICAgICAgbGV0IG1hdGNoOiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbDtcbiAgICAgIGNvbnN0IHNyY0NvZGUgPSBTdHJpbmcoY2h1bmtPckZuKTtcbiAgICAgIGlmICgobWF0Y2ggPSBzcmNDb2RlLm1hdGNoKEVYVFJBQ1RfSU1QT1JUX1BBVEgpKSAmJiBtYXRjaFsyXSkge1xuICAgICAgICBjaHVuayA9IG1hdGNoWzJdO1xuICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBzcmNDb2RlLm1hdGNoKEVYVFJBQ1RfU0VMRl9JTVBPUlQpKSkge1xuICAgICAgICBjb25zdCByZWYgPSAnUVdJSy1TRUxGJztcbiAgICAgICAgY29uc3QgZnJhbWVzID0gbmV3IEVycm9yKHJlZikuc3RhY2shLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBmcmFtZXMuZmluZEluZGV4KChmKSA9PiBmLmluY2x1ZGVzKHJlZikpO1xuICAgICAgICBjb25zdCBmcmFtZSA9IGZyYW1lc1tzdGFydCArIDIgKyBzdGFja09mZnNldF07XG4gICAgICAgIG1hdGNoID0gZnJhbWUubWF0Y2goRVhUUkFDVF9GSUxFX05BTUUpO1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgY2h1bmsgPSAnbWFpbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2h1bmsgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5keW5hbWljSW1wb3J0RmFpbGVkLCBbc3JjQ29kZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZyhjaHVua09yRm4pKSB7XG4gICAgY2h1bmsgPSBjaHVua09yRm47XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgcUVycm9yKFFFcnJvci51bmtub3duVHlwZUFyZ3VtZW50LCBbY2h1bmtPckZuXSk7XG4gIH1cblxuICBpZiAoIWFubm91bmNlZFFSTC5oYXMoc3ltYm9sKSkge1xuICAgIC8vIEVtaXQgZXZlbnRcbiAgICBhbm5vdW5jZWRRUkwuYWRkKHN5bWJvbCk7XG4gICAgZW1pdEV2ZW50KCdxcHJlZmV0Y2gnLCB7XG4gICAgICBzeW1ib2xzOiBbc3ltYm9sXSxcbiAgICAgIGJ1bmRsZXM6IGNodW5rICYmIFtjaHVua10sXG4gICAgfSk7XG4gIH1cblxuICAvLyBVbndyYXAgc3Vic2NyaWJlcnNcbiAgcmV0dXJuIGNyZWF0ZVFSTDxUPihjaHVuaywgc3ltYm9sLCBudWxsLCBzeW1ib2xGbiwgbnVsbCwgbGV4aWNhbFNjb3BlQ2FwdHVyZSk7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgaW5saW5lZFFybCA9IDxUPihcbiAgc3ltYm9sOiBULFxuICBzeW1ib2xOYW1lOiBzdHJpbmcsXG4gIGxleGljYWxTY29wZUNhcHR1cmU6IGFueVtdID0gRU1QVFlfQVJSQVlcbik6IFFSTDxUPiA9PiB7XG4gIC8vIFVud3JhcCBzdWJzY3JpYmVyc1xuICByZXR1cm4gY3JlYXRlUVJMPFQ+KG51bGwsIHN5bWJvbE5hbWUsIHN5bWJvbCwgbnVsbCwgbnVsbCwgbGV4aWNhbFNjb3BlQ2FwdHVyZSk7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX25vb3BRcmwgPSA8VD4oXG4gIHN5bWJvbE5hbWU6IHN0cmluZyxcbiAgbGV4aWNhbFNjb3BlQ2FwdHVyZTogYW55W10gPSBFTVBUWV9BUlJBWVxuKTogUVJMPFQ+ID0+IHtcbiAgcmV0dXJuIGNyZWF0ZVFSTDxUPihudWxsLCBzeW1ib2xOYW1lLCBudWxsLCBudWxsLCBudWxsLCBsZXhpY2FsU2NvcGVDYXB0dXJlKTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBfbm9vcFFybERFViA9IDxUPihcbiAgc3ltYm9sTmFtZTogc3RyaW5nLFxuICBvcHRzOiBRUkxEZXYsXG4gIGxleGljYWxTY29wZUNhcHR1cmU6IGFueVtdID0gRU1QVFlfQVJSQVlcbik6IFFSTDxUPiA9PiB7XG4gIGNvbnN0IG5ld1FybCA9IF9ub29wUXJsKHN5bWJvbE5hbWUsIGxleGljYWxTY29wZUNhcHR1cmUpIGFzIFFSTEludGVybmFsPFQ+O1xuICBuZXdRcmwuZGV2ID0gb3B0cztcbiAgcmV0dXJuIG5ld1FybDtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBxcmxERVYgPSA8VCA9IGFueT4oXG4gIGNodW5rT3JGbjogc3RyaW5nIHwgKCgpID0+IFByb21pc2U8YW55PiksXG4gIHN5bWJvbDogc3RyaW5nLFxuICBvcHRzOiBRUkxEZXYsXG4gIGxleGljYWxTY29wZUNhcHR1cmU6IGFueVtdID0gRU1QVFlfQVJSQVlcbik6IFFSTDxUPiA9PiB7XG4gIGNvbnN0IG5ld1FybCA9IHFybChjaHVua09yRm4sIHN5bWJvbCwgbGV4aWNhbFNjb3BlQ2FwdHVyZSwgMSkgYXMgUVJMSW50ZXJuYWw8VD47XG4gIG5ld1FybC5kZXYgPSBvcHRzO1xuICByZXR1cm4gbmV3UXJsO1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGlubGluZWRRcmxERVYgPSA8VCA9IGFueT4oXG4gIHN5bWJvbDogVCxcbiAgc3ltYm9sTmFtZTogc3RyaW5nLFxuICBvcHRzOiBRUkxEZXYsXG4gIGxleGljYWxTY29wZUNhcHR1cmU6IGFueVtdID0gRU1QVFlfQVJSQVlcbik6IFFSTDxUPiA9PiB7XG4gIGNvbnN0IHFybCA9IGlubGluZWRRcmwoc3ltYm9sLCBzeW1ib2xOYW1lLCBsZXhpY2FsU2NvcGVDYXB0dXJlKSBhcyBRUkxJbnRlcm5hbDxUPjtcbiAgcXJsLmRldiA9IG9wdHM7XG4gIHJldHVybiBxcmw7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX3JlZ1N5bWJvbCA9IChzeW1ib2w6IGFueSwgaGFzaDogc3RyaW5nKSA9PiB7XG4gIGlmICh0eXBlb2YgKGdsb2JhbFRoaXMgYXMgYW55KS5fX3F3aWtfcmVnX3N5bWJvbHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgKGdsb2JhbFRoaXMgYXMgYW55KS5fX3F3aWtfcmVnX3N5bWJvbHMgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICB9XG4gIChnbG9iYWxUaGlzIGFzIGFueSkuX19xd2lrX3JlZ19zeW1ib2xzLnNldChoYXNoLCBzeW1ib2wpO1xuICByZXR1cm4gc3ltYm9sO1xufTtcbiJdfQ==","import { tryGetInvokeContext } from './use-core';\nlet _locale = undefined;\n/**\n * Retrieve the current locale.\n *\n * If no current locale and there is no `defaultLocale` the function throws an error.\n *\n * @returns The locale.\n * @public\n */\nexport function getLocale(defaultLocale) {\n    if (_locale === undefined) {\n        const ctx = tryGetInvokeContext();\n        if (ctx && ctx.$locale$) {\n            return ctx.$locale$;\n        }\n        if (defaultLocale !== undefined) {\n            return defaultLocale;\n        }\n        throw new Error('Reading `locale` outside of context.');\n    }\n    return _locale;\n}\n/**\n * Override the `getLocale` with `lang` within the `fn` execution.\n *\n * @public\n */\nexport function withLocale(locale, fn) {\n    const previousLang = _locale;\n    try {\n        _locale = locale;\n        return fn();\n    }\n    finally {\n        _locale = previousLang;\n    }\n}\n/**\n * Globally set a lang.\n *\n * This can be used only in browser. Server execution requires that each request could potentially\n * be a different lang, therefore setting a global lang would produce incorrect responses.\n *\n * @public\n */\nexport function setLocale(locale) {\n    _locale = locale;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWxvY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLWxvY2FsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakQsSUFBSSxPQUFPLEdBQXVCLFNBQVMsQ0FBQztBQUU1Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxhQUFzQjtJQUM5QyxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2xDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBSSxNQUFjLEVBQUUsRUFBVztJQUN2RCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUM7SUFDN0IsSUFBSSxDQUFDO1FBQ0gsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUNqQixPQUFPLEVBQUUsRUFBRSxDQUFDO0lBQ2QsQ0FBQztZQUFTLENBQUM7UUFDVCxPQUFPLEdBQUcsWUFBWSxDQUFDO0lBQ3pCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBYztJQUN0QyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0cnlHZXRJbnZva2VDb250ZXh0IH0gZnJvbSAnLi91c2UtY29yZSc7XG5cbmxldCBfbG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGN1cnJlbnQgbG9jYWxlLlxuICpcbiAqIElmIG5vIGN1cnJlbnQgbG9jYWxlIGFuZCB0aGVyZSBpcyBubyBgZGVmYXVsdExvY2FsZWAgdGhlIGZ1bmN0aW9uIHRocm93cyBhbiBlcnJvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbG9jYWxlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxlKGRlZmF1bHRMb2NhbGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoX2xvY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY3R4ID0gdHJ5R2V0SW52b2tlQ29udGV4dCgpO1xuICAgIGlmIChjdHggJiYgY3R4LiRsb2NhbGUkKSB7XG4gICAgICByZXR1cm4gY3R4LiRsb2NhbGUkO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdExvY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdExvY2FsZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWFkaW5nIGBsb2NhbGVgIG91dHNpZGUgb2YgY29udGV4dC4nKTtcbiAgfVxuICByZXR1cm4gX2xvY2FsZTtcbn1cblxuLyoqXG4gKiBPdmVycmlkZSB0aGUgYGdldExvY2FsZWAgd2l0aCBgbGFuZ2Agd2l0aGluIHRoZSBgZm5gIGV4ZWN1dGlvbi5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTG9jYWxlPFQ+KGxvY2FsZTogc3RyaW5nLCBmbjogKCkgPT4gVCk6IFQge1xuICBjb25zdCBwcmV2aW91c0xhbmcgPSBfbG9jYWxlO1xuICB0cnkge1xuICAgIF9sb2NhbGUgPSBsb2NhbGU7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgX2xvY2FsZSA9IHByZXZpb3VzTGFuZztcbiAgfVxufVxuXG4vKipcbiAqIEdsb2JhbGx5IHNldCBhIGxhbmcuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBvbmx5IGluIGJyb3dzZXIuIFNlcnZlciBleGVjdXRpb24gcmVxdWlyZXMgdGhhdCBlYWNoIHJlcXVlc3QgY291bGQgcG90ZW50aWFsbHlcbiAqIGJlIGEgZGlmZmVyZW50IGxhbmcsIHRoZXJlZm9yZSBzZXR0aW5nIGEgZ2xvYmFsIGxhbmcgd291bGQgcHJvZHVjZSBpbmNvcnJlY3QgcmVzcG9uc2VzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExvY2FsZShsb2NhbGU6IHN0cmluZyk6IHZvaWQge1xuICBfbG9jYWxlID0gbG9jYWxlO1xufVxuIl19","import { verifySerializable } from '../shared/utils/serialize-utils';\nimport { ELEMENT_SEQ, ELEMENT_SEQ_IDX } from '../shared/utils/markers';\nimport { qDev, qSerialize } from '../shared/utils/qdev';\nimport { useInvokeContext } from './use-core';\n/**\n * @internal\n * The storage provider for hooks. Each invocation increases index i. Data is stored in an array.\n */\nexport const useSequentialScope = () => {\n    const iCtx = useInvokeContext();\n    const hostElement = iCtx.$hostElement$;\n    const host = hostElement;\n    let seq = iCtx.$container$.getHostProp(host, ELEMENT_SEQ);\n    if (seq === null) {\n        seq = [];\n        iCtx.$container$.setHostProp(host, ELEMENT_SEQ, seq);\n    }\n    let seqIdx = iCtx.$container$.getHostProp(host, ELEMENT_SEQ_IDX);\n    if (seqIdx === null) {\n        seqIdx = 0;\n    }\n    iCtx.$container$.setHostProp(host, ELEMENT_SEQ_IDX, seqIdx + 1);\n    while (seq.length <= seqIdx) {\n        seq.push(undefined);\n    }\n    const set = (value) => {\n        if (qDev && qSerialize) {\n            verifySerializable(value);\n        }\n        return (seq[seqIdx] = value);\n    };\n    return {\n        val: seq[seqIdx],\n        set,\n        i: seqIdx,\n        iCtx,\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXNlcXVlbnRpYWwtc2NvcGUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS1zZXF1ZW50aWFsLXNjb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQTRCLE1BQU0sWUFBWSxDQUFDO0FBWXhFOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQTBCLEVBQUU7SUFDNUQsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ3ZDLE1BQU0sSUFBSSxHQUFnQixXQUFrQixDQUFDO0lBQzdDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFRLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqRSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNqQixHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQVMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3pFLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEUsT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBUSxFQUFFLEVBQUU7UUFDdkIsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7WUFDdkIsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFJLENBQUMsTUFBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2hCLEdBQUc7UUFDSCxDQUFDLEVBQUUsTUFBTTtRQUNULElBQUk7S0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmVyaWZ5U2VyaWFsaXphYmxlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3NlcmlhbGl6ZS11dGlscyc7XG5pbXBvcnQgeyBFTEVNRU5UX1NFUSwgRUxFTUVOVF9TRVFfSURYIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgcURldiwgcVNlcmlhbGl6ZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9xZGV2JztcbmltcG9ydCB0eXBlIHsgSG9zdEVsZW1lbnQgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgdXNlSW52b2tlQ29udGV4dCwgdHlwZSBSZW5kZXJJbnZva2VDb250ZXh0IH0gZnJvbSAnLi91c2UtY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VxdWVudGlhbFNjb3BlPFQ+IHtcbiAgLyoqIFRoZSBjdXJyZW50bHkgc3RvcmVkIGRhdGEgZm9yIHRoZSBob29rIHRoYXQgY2FsbHMgdGhpcyAqL1xuICByZWFkb25seSB2YWw6IFQgfCB1bmRlZmluZWQ7XG4gIC8qKiBTdG9yZSBuZXcgZGF0YSBmb3IgdGhlIGhvb2sgdGhhdCBjYWxscyB0aGlzICovXG4gIHJlYWRvbmx5IHNldDogKHY6IFQpID0+IFQ7XG4gIC8qKiBJbmRleCBvZiB0aGUgaG9vayAqL1xuICByZWFkb25seSBpOiBudW1iZXI7XG4gIHJlYWRvbmx5IGlDdHg6IFJlbmRlckludm9rZUNvbnRleHQ7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBUaGUgc3RvcmFnZSBwcm92aWRlciBmb3IgaG9va3MuIEVhY2ggaW52b2NhdGlvbiBpbmNyZWFzZXMgaW5kZXggaS4gRGF0YSBpcyBzdG9yZWQgaW4gYW4gYXJyYXkuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VTZXF1ZW50aWFsU2NvcGUgPSA8VD4oKTogU2VxdWVudGlhbFNjb3BlPFQ+ID0+IHtcbiAgY29uc3QgaUN0eCA9IHVzZUludm9rZUNvbnRleHQoKTtcbiAgY29uc3QgaG9zdEVsZW1lbnQgPSBpQ3R4LiRob3N0RWxlbWVudCQ7XG4gIGNvbnN0IGhvc3Q6IEhvc3RFbGVtZW50ID0gaG9zdEVsZW1lbnQgYXMgYW55O1xuICBsZXQgc2VxID0gaUN0eC4kY29udGFpbmVyJC5nZXRIb3N0UHJvcDxhbnlbXT4oaG9zdCwgRUxFTUVOVF9TRVEpO1xuICBpZiAoc2VxID09PSBudWxsKSB7XG4gICAgc2VxID0gW107XG4gICAgaUN0eC4kY29udGFpbmVyJC5zZXRIb3N0UHJvcChob3N0LCBFTEVNRU5UX1NFUSwgc2VxKTtcbiAgfVxuICBsZXQgc2VxSWR4ID0gaUN0eC4kY29udGFpbmVyJC5nZXRIb3N0UHJvcDxudW1iZXI+KGhvc3QsIEVMRU1FTlRfU0VRX0lEWCk7XG4gIGlmIChzZXFJZHggPT09IG51bGwpIHtcbiAgICBzZXFJZHggPSAwO1xuICB9XG4gIGlDdHguJGNvbnRhaW5lciQuc2V0SG9zdFByb3AoaG9zdCwgRUxFTUVOVF9TRVFfSURYLCBzZXFJZHggKyAxKTtcbiAgd2hpbGUgKHNlcS5sZW5ndGggPD0gc2VxSWR4KSB7XG4gICAgc2VxLnB1c2godW5kZWZpbmVkKTtcbiAgfVxuICBjb25zdCBzZXQgPSAodmFsdWU6IFQpID0+IHtcbiAgICBpZiAocURldiAmJiBxU2VyaWFsaXplKSB7XG4gICAgICB2ZXJpZnlTZXJpYWxpemFibGUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gKHNlcSFbc2VxSWR4IV0gPSB2YWx1ZSk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB2YWw6IHNlcVtzZXFJZHhdLFxuICAgIHNldCxcbiAgICBpOiBzZXFJZHgsXG4gICAgaUN0eCxcbiAgfTtcbn07XG4iXX0=","/**\n * Think of `-` as an escape character which makes the next character uppercase. `--` is just `-`.\n *\n * Rules for JSX property event names starting with `on`:\n *\n * - Are case insensitive: `onClick$` is same `onclick$`\n * - A `--` is `-`: `dbl--click` => `dbl-click`\n * - Become case sensitive if prefixed by `-`: `-Click` is `Click`\n * - A `-` (not at the beginning) makes next character uppercase: `dbl-click` => `dblClick`\n */\nexport const EVENT_SUFFIX = '$';\nexport const DOMContentLoadedEvent = 'DOMContentLoaded';\nexport const isJsxPropertyAnEventName = (name) => {\n    return ((name.startsWith(\"on\" /* EventNameJSXScope.on */) ||\n        name.startsWith(\"window:on\" /* EventNameJSXScope.window */) ||\n        name.startsWith(\"document:on\" /* EventNameJSXScope.document */)) &&\n        name.endsWith(EVENT_SUFFIX));\n};\nexport const isHtmlAttributeAnEventName = (name) => {\n    return (name.startsWith(\"on:\" /* EventNameHtmlScope.on */) ||\n        name.startsWith(\"on-window:\" /* EventNameHtmlScope.window */) ||\n        name.startsWith(\"on-document:\" /* EventNameHtmlScope.document */));\n};\n/**\n * Converts a JSX event property to an HTML attribute. Examples:\n *\n * - OnClick$ -> on:click\n * - On-DOMContentLoaded$ -> on:-d-o-m-content-loaded\n * - On-CustomEvent$ -> on:-custom-event\n */\nexport function jsxEventToHtmlAttribute(jsxEvent) {\n    if (jsxEvent.endsWith(EVENT_SUFFIX)) {\n        const [prefix, idx] = getEventScopeDataFromJsxEvent(jsxEvent);\n        if (idx !== -1) {\n            const eventName = getEventNameFromJsxEvent(jsxEvent);\n            return prefix + fromCamelToKebabCase(eventName);\n        }\n    }\n    return null; // Return null if not matching expected format\n}\n/**\n * Converts an HTML attribute back to JSX event property. Examples:\n *\n * - On:click -> onClick$\n * - On:-d-o-m-content-loaded -> onDOMContentLoaded$\n * - On:-custom-event -> on-CustomEvent$\n */\nexport function htmlAttributeToJsxEvent(htmlAttr) {\n    const eventScopeData = getEventScopeDataFromHtmlEvent(htmlAttr);\n    let prefix = eventScopeData[0];\n    const idx = eventScopeData[1];\n    if (idx !== -1) {\n        const isCaseSensitive = isDash(htmlAttr.charCodeAt(idx));\n        const eventName = htmlAttrToEventName(htmlAttr, idx);\n        if (isCaseSensitive && eventName !== DOMContentLoadedEvent) {\n            prefix += '-'; // Add hyphen at the start if case-sensitive\n        }\n        return eventNameToJsxEvent(eventName, prefix, idx);\n    }\n    return null; // Return null if not matching expected format\n}\nexport function eventNameToJsxEvent(eventName, prefix, startIdx = 0) {\n    eventName = eventName.charAt(0).toUpperCase() + eventName.substring(1);\n    return prefix + eventName + EVENT_SUFFIX;\n}\n/**\n * Gets the event name from a JSX event property. Examples:\n *\n * - OnClick$ -> click\n * - OnDOMContentLoaded$ -> DOMContentLoaded\n * - On-CustomEvent$ -> CustomEvent\n */\nexport function getEventNameFromJsxEvent(jsxEvent) {\n    if (jsxEvent.endsWith(EVENT_SUFFIX)) {\n        const [, idx] = getEventScopeDataFromJsxEvent(jsxEvent);\n        if (idx != -1) {\n            return jsxEventToEventName(jsxEvent, idx);\n        }\n    }\n    return null;\n}\nfunction jsxEventToEventName(jsxEvent, startIdx = 0) {\n    const idx = startIdx;\n    let lastIdx = idx;\n    const isCaseSensitive = isDash(jsxEvent.charCodeAt(idx));\n    if (isCaseSensitive) {\n        lastIdx++;\n    }\n    let eventName = '';\n    const chunk = jsxEvent.substring(lastIdx, jsxEvent.length - 1 /* don't include `$` */);\n    if (chunk === DOMContentLoadedEvent) {\n        return DOMContentLoadedEvent;\n    }\n    eventName += isCaseSensitive ? chunk : chunk.toLowerCase();\n    return eventName;\n}\n/**\n * Gets the event name from an HTML attribute. Examples:\n *\n * - On:click -> click\n * - On:-d-o-m-content-loaded -> DOMContentLoaded\n * - On:-custom-event -> CustomEvent\n */\nexport function getEventNameFromHtmlAttribute(htmlAttr) {\n    const [, idx] = getEventScopeDataFromHtmlEvent(htmlAttr);\n    if (idx !== -1) {\n        return htmlAttrToEventName(htmlAttr, idx);\n    }\n    return htmlAttr; // Return as is if not matching expected format\n}\n/** Helper function to convert HTML attribute name to event name. */\nfunction htmlAttrToEventName(htmlAttr, startIdx = 0) {\n    let idx = startIdx;\n    let lastIdx = idx;\n    let eventName = '';\n    const isCaseSensitive = isDash(htmlAttr.charCodeAt(lastIdx));\n    if (isCaseSensitive) {\n        lastIdx++; // Skip the hyphen\n        eventName += htmlAttr.charAt(lastIdx).toUpperCase(); // Capitalize the first letter\n        lastIdx++; // Skip the first letter\n    }\n    while (true) {\n        idx = htmlAttr.indexOf('-', lastIdx); // Find the next hyphen\n        const chunk = htmlAttr.substring(lastIdx, idx === -1 ? htmlAttr.length : idx); // Get the chunk\n        eventName += chunk; // Add the chunk to the event name\n        if (idx == -1) {\n            return eventName; // Return the event name if no more hyphens\n        }\n        idx++; // Move to the next character after the hyphen\n        eventName += htmlAttr.charAt(idx).toUpperCase(); // Capitalize the next letter if previous character is hyphen\n        lastIdx = idx + 1; // Move to the next character\n    }\n    return eventName;\n}\nexport function getEventScopeDataFromJsxEvent(eventName) {\n    let prefix = null;\n    let idx = -1;\n    // set prefix and idx based on the scope\n    if (eventName.startsWith(\"on\" /* EventNameJSXScope.on */)) {\n        prefix = \"on:\" /* EventNameHtmlScope.on */;\n        idx = 2;\n    }\n    else if (eventName.startsWith(\"window:on\" /* EventNameJSXScope.window */)) {\n        prefix = \"on-window:\" /* EventNameHtmlScope.window */;\n        idx = 9;\n    }\n    else if (eventName.startsWith(\"document:on\" /* EventNameJSXScope.document */)) {\n        prefix = \"on-document:\" /* EventNameHtmlScope.document */;\n        idx = 11;\n    }\n    return [prefix, idx];\n}\nfunction getEventScopeDataFromHtmlEvent(htmlAttr) {\n    let prefix = null;\n    let idx = -1;\n    if (htmlAttr.startsWith(\"on:\" /* EventNameHtmlScope.on */)) {\n        prefix = \"on\" /* EventNameJSXScope.on */;\n        idx = 3;\n    }\n    else if (htmlAttr.startsWith(\"on-window:\" /* EventNameHtmlScope.window */)) {\n        prefix = \"window:on\" /* EventNameJSXScope.window */;\n        idx = 10;\n    }\n    else if (htmlAttr.startsWith(\"on-document:\" /* EventNameHtmlScope.document */)) {\n        prefix = \"document:on\" /* EventNameJSXScope.document */;\n        idx = 12;\n    }\n    return [prefix, idx];\n}\nexport const isDash = (charCode) => charCode === 45; /* - */\nexport const getEventNameScopeFromJsxEvent = (name) => {\n    const index = name.indexOf(':');\n    return index !== -1 ? name.substring(0, index) : '';\n};\nexport function isPreventDefault(key) {\n    return key.startsWith('preventdefault:');\n}\nexport const fromCamelToKebabCase = (text) => {\n    return text.replace(/([A-Z-])/g, '-$1').toLowerCase();\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbmFtZXMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3V0aWxzL2V2ZW50LW5hbWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQWNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQUM7QUFFeEQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxJQUFZLEVBQVcsRUFBRTtJQUNoRSxPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsVUFBVSxpQ0FBc0I7UUFDcEMsSUFBSSxDQUFDLFVBQVUsNENBQTBCO1FBQ3pDLElBQUksQ0FBQyxVQUFVLGdEQUE0QixDQUFDO1FBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQzVCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLElBQVksRUFBVyxFQUFFO0lBQ2xFLE9BQU8sQ0FDTCxJQUFJLENBQUMsVUFBVSxtQ0FBdUI7UUFDdEMsSUFBSSxDQUFDLFVBQVUsOENBQTJCO1FBQzFDLElBQUksQ0FBQyxVQUFVLGtEQUE2QixDQUM3QyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLFFBQWdCO0lBQ3RELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUQsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNmLE1BQU0sU0FBUyxHQUFHLHdCQUF3QixDQUFDLFFBQVEsQ0FBRSxDQUFDO1lBQ3RELE9B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LENBQUM7SUFDVixDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsVUFBVSw4Q0FBMkIsRUFBRSxDQUFDO1FBQzFELE1BQU0sNkNBQTJCLENBQUM7UUFDbEMsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNYLENBQUM7U0FBTSxJQUFJLFFBQVEsQ0FBQyxVQUFVLGtEQUE2QixFQUFFLENBQUM7UUFDNUQsTUFBTSxpREFBNkIsQ0FBQztRQUNwQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ1gsQ0FBQztJQUNELE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLFFBQWdCLEVBQVcsRUFBRSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUU7SUFDcEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RCxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBVztJQUMxQyxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRTtJQUMzRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmsgb2YgYC1gIGFzIGFuIGVzY2FwZSBjaGFyYWN0ZXIgd2hpY2ggbWFrZXMgdGhlIG5leHQgY2hhcmFjdGVyIHVwcGVyY2FzZS4gYC0tYCBpcyBqdXN0IGAtYC5cbiAqXG4gKiBSdWxlcyBmb3IgSlNYIHByb3BlcnR5IGV2ZW50IG5hbWVzIHN0YXJ0aW5nIHdpdGggYG9uYDpcbiAqXG4gKiAtIEFyZSBjYXNlIGluc2Vuc2l0aXZlOiBgb25DbGljayRgIGlzIHNhbWUgYG9uY2xpY2skYFxuICogLSBBIGAtLWAgaXMgYC1gOiBgZGJsLS1jbGlja2AgPT4gYGRibC1jbGlja2BcbiAqIC0gQmVjb21lIGNhc2Ugc2Vuc2l0aXZlIGlmIHByZWZpeGVkIGJ5IGAtYDogYC1DbGlja2AgaXMgYENsaWNrYFxuICogLSBBIGAtYCAobm90IGF0IHRoZSBiZWdpbm5pbmcpIG1ha2VzIG5leHQgY2hhcmFjdGVyIHVwcGVyY2FzZTogYGRibC1jbGlja2AgPT4gYGRibENsaWNrYFxuICovXG5cbmV4cG9ydCBjb25zdCBlbnVtIEV2ZW50TmFtZUpTWFNjb3BlIHtcbiAgb24gPSAnb24nLFxuICB3aW5kb3cgPSAnd2luZG93Om9uJyxcbiAgZG9jdW1lbnQgPSAnZG9jdW1lbnQ6b24nLFxufVxuXG5jb25zdCBlbnVtIEV2ZW50TmFtZUh0bWxTY29wZSB7XG4gIG9uID0gJ29uOicsXG4gIHdpbmRvdyA9ICdvbi13aW5kb3c6JyxcbiAgZG9jdW1lbnQgPSAnb24tZG9jdW1lbnQ6Jyxcbn1cblxuZXhwb3J0IGNvbnN0IEVWRU5UX1NVRkZJWCA9ICckJztcbmV4cG9ydCBjb25zdCBET01Db250ZW50TG9hZGVkRXZlbnQgPSAnRE9NQ29udGVudExvYWRlZCc7XG5cbmV4cG9ydCBjb25zdCBpc0pzeFByb3BlcnR5QW5FdmVudE5hbWUgPSAobmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiAoXG4gICAgKG5hbWUuc3RhcnRzV2l0aChFdmVudE5hbWVKU1hTY29wZS5vbikgfHxcbiAgICAgIG5hbWUuc3RhcnRzV2l0aChFdmVudE5hbWVKU1hTY29wZS53aW5kb3cpIHx8XG4gICAgICBuYW1lLnN0YXJ0c1dpdGgoRXZlbnROYW1lSlNYU2NvcGUuZG9jdW1lbnQpKSAmJlxuICAgIG5hbWUuZW5kc1dpdGgoRVZFTlRfU1VGRklYKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSHRtbEF0dHJpYnV0ZUFuRXZlbnROYW1lID0gKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgIG5hbWUuc3RhcnRzV2l0aChFdmVudE5hbWVIdG1sU2NvcGUub24pIHx8XG4gICAgbmFtZS5zdGFydHNXaXRoKEV2ZW50TmFtZUh0bWxTY29wZS53aW5kb3cpIHx8XG4gICAgbmFtZS5zdGFydHNXaXRoKEV2ZW50TmFtZUh0bWxTY29wZS5kb2N1bWVudClcbiAgKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBKU1ggZXZlbnQgcHJvcGVydHkgdG8gYW4gSFRNTCBhdHRyaWJ1dGUuIEV4YW1wbGVzOlxuICpcbiAqIC0gT25DbGljayQgLT4gb246Y2xpY2tcbiAqIC0gT24tRE9NQ29udGVudExvYWRlZCQgLT4gb246LWQtby1tLWNvbnRlbnQtbG9hZGVkXG4gKiAtIE9uLUN1c3RvbUV2ZW50JCAtPiBvbjotY3VzdG9tLWV2ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc3hFdmVudFRvSHRtbEF0dHJpYnV0ZShqc3hFdmVudDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChqc3hFdmVudC5lbmRzV2l0aChFVkVOVF9TVUZGSVgpKSB7XG4gICAgY29uc3QgW3ByZWZpeCwgaWR4XSA9IGdldEV2ZW50U2NvcGVEYXRhRnJvbUpzeEV2ZW50KGpzeEV2ZW50KTtcblxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICBjb25zdCBldmVudE5hbWUgPSBnZXRFdmVudE5hbWVGcm9tSnN4RXZlbnQoanN4RXZlbnQpITtcbiAgICAgIHJldHVybiBwcmVmaXggKyBmcm9tQ2FtZWxUb0tlYmFiQ2FzZShldmVudE5hbWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgbm90IG1hdGNoaW5nIGV4cGVjdGVkIGZvcm1hdFxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEhUTUwgYXR0cmlidXRlIGJhY2sgdG8gSlNYIGV2ZW50IHByb3BlcnR5LiBFeGFtcGxlczpcbiAqXG4gKiAtIE9uOmNsaWNrIC0+IG9uQ2xpY2skXG4gKiAtIE9uOi1kLW8tbS1jb250ZW50LWxvYWRlZCAtPiBvbkRPTUNvbnRlbnRMb2FkZWQkXG4gKiAtIE9uOi1jdXN0b20tZXZlbnQgLT4gb24tQ3VzdG9tRXZlbnQkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodG1sQXR0cmlidXRlVG9Kc3hFdmVudChodG1sQXR0cjogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGV2ZW50U2NvcGVEYXRhID0gZ2V0RXZlbnRTY29wZURhdGFGcm9tSHRtbEV2ZW50KGh0bWxBdHRyKTtcbiAgbGV0IHByZWZpeCA9IGV2ZW50U2NvcGVEYXRhWzBdO1xuICBjb25zdCBpZHggPSBldmVudFNjb3BlRGF0YVsxXTtcblxuICBpZiAoaWR4ICE9PSAtMSkge1xuICAgIGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZSA9IGlzRGFzaChodG1sQXR0ci5jaGFyQ29kZUF0KGlkeCkpO1xuICAgIGNvbnN0IGV2ZW50TmFtZSA9IGh0bWxBdHRyVG9FdmVudE5hbWUoaHRtbEF0dHIsIGlkeCk7XG4gICAgaWYgKGlzQ2FzZVNlbnNpdGl2ZSAmJiBldmVudE5hbWUgIT09IERPTUNvbnRlbnRMb2FkZWRFdmVudCkge1xuICAgICAgcHJlZml4ICs9ICctJzsgLy8gQWRkIGh5cGhlbiBhdCB0aGUgc3RhcnQgaWYgY2FzZS1zZW5zaXRpdmVcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50TmFtZVRvSnN4RXZlbnQoZXZlbnROYW1lLCBwcmVmaXgsIGlkeCk7XG4gIH1cbiAgcmV0dXJuIG51bGw7IC8vIFJldHVybiBudWxsIGlmIG5vdCBtYXRjaGluZyBleHBlY3RlZCBmb3JtYXRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50TmFtZVRvSnN4RXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nIHwgbnVsbCwgc3RhcnRJZHggPSAwKSB7XG4gIGV2ZW50TmFtZSA9IGV2ZW50TmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGV2ZW50TmFtZS5zdWJzdHJpbmcoMSk7XG4gIHJldHVybiBwcmVmaXggKyBldmVudE5hbWUgKyBFVkVOVF9TVUZGSVg7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXZlbnQgbmFtZSBmcm9tIGEgSlNYIGV2ZW50IHByb3BlcnR5LiBFeGFtcGxlczpcbiAqXG4gKiAtIE9uQ2xpY2skIC0+IGNsaWNrXG4gKiAtIE9uRE9NQ29udGVudExvYWRlZCQgLT4gRE9NQ29udGVudExvYWRlZFxuICogLSBPbi1DdXN0b21FdmVudCQgLT4gQ3VzdG9tRXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50TmFtZUZyb21Kc3hFdmVudChqc3hFdmVudDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChqc3hFdmVudC5lbmRzV2l0aChFVkVOVF9TVUZGSVgpKSB7XG4gICAgY29uc3QgWywgaWR4XSA9IGdldEV2ZW50U2NvcGVEYXRhRnJvbUpzeEV2ZW50KGpzeEV2ZW50KTtcbiAgICBpZiAoaWR4ICE9IC0xKSB7XG4gICAgICByZXR1cm4ganN4RXZlbnRUb0V2ZW50TmFtZShqc3hFdmVudCwgaWR4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGpzeEV2ZW50VG9FdmVudE5hbWUoanN4RXZlbnQ6IHN0cmluZywgc3RhcnRJZHg6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICBjb25zdCBpZHggPSBzdGFydElkeDtcbiAgbGV0IGxhc3RJZHggPSBpZHg7XG4gIGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZSA9IGlzRGFzaChqc3hFdmVudC5jaGFyQ29kZUF0KGlkeCkpO1xuICBpZiAoaXNDYXNlU2Vuc2l0aXZlKSB7XG4gICAgbGFzdElkeCsrO1xuICB9XG4gIGxldCBldmVudE5hbWUgPSAnJztcbiAgY29uc3QgY2h1bmsgPSBqc3hFdmVudC5zdWJzdHJpbmcobGFzdElkeCwganN4RXZlbnQubGVuZ3RoIC0gMSAvKiBkb24ndCBpbmNsdWRlIGAkYCAqLyk7XG4gIGlmIChjaHVuayA9PT0gRE9NQ29udGVudExvYWRlZEV2ZW50KSB7XG4gICAgcmV0dXJuIERPTUNvbnRlbnRMb2FkZWRFdmVudDtcbiAgfVxuICBldmVudE5hbWUgKz0gaXNDYXNlU2Vuc2l0aXZlID8gY2h1bmsgOiBjaHVuay50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZXZlbnROYW1lO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGV2ZW50IG5hbWUgZnJvbSBhbiBIVE1MIGF0dHJpYnV0ZS4gRXhhbXBsZXM6XG4gKlxuICogLSBPbjpjbGljayAtPiBjbGlja1xuICogLSBPbjotZC1vLW0tY29udGVudC1sb2FkZWQgLT4gRE9NQ29udGVudExvYWRlZFxuICogLSBPbjotY3VzdG9tLWV2ZW50IC0+IEN1c3RvbUV2ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdmVudE5hbWVGcm9tSHRtbEF0dHJpYnV0ZShodG1sQXR0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgWywgaWR4XSA9IGdldEV2ZW50U2NvcGVEYXRhRnJvbUh0bWxFdmVudChodG1sQXR0cik7XG4gIGlmIChpZHggIT09IC0xKSB7XG4gICAgcmV0dXJuIGh0bWxBdHRyVG9FdmVudE5hbWUoaHRtbEF0dHIsIGlkeCk7XG4gIH1cbiAgcmV0dXJuIGh0bWxBdHRyOyAvLyBSZXR1cm4gYXMgaXMgaWYgbm90IG1hdGNoaW5nIGV4cGVjdGVkIGZvcm1hdFxufVxuXG4vKiogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgSFRNTCBhdHRyaWJ1dGUgbmFtZSB0byBldmVudCBuYW1lLiAqL1xuZnVuY3Rpb24gaHRtbEF0dHJUb0V2ZW50TmFtZShodG1sQXR0cjogc3RyaW5nLCBzdGFydElkeDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gIGxldCBpZHggPSBzdGFydElkeDtcbiAgbGV0IGxhc3RJZHggPSBpZHg7XG4gIGxldCBldmVudE5hbWUgPSAnJztcbiAgY29uc3QgaXNDYXNlU2Vuc2l0aXZlID0gaXNEYXNoKGh0bWxBdHRyLmNoYXJDb2RlQXQobGFzdElkeCkpO1xuICBpZiAoaXNDYXNlU2Vuc2l0aXZlKSB7XG4gICAgbGFzdElkeCsrOyAvLyBTa2lwIHRoZSBoeXBoZW5cbiAgICBldmVudE5hbWUgKz0gaHRtbEF0dHIuY2hhckF0KGxhc3RJZHgpLnRvVXBwZXJDYXNlKCk7IC8vIENhcGl0YWxpemUgdGhlIGZpcnN0IGxldHRlclxuICAgIGxhc3RJZHgrKzsgLy8gU2tpcCB0aGUgZmlyc3QgbGV0dGVyXG4gIH1cblxuICB3aGlsZSAodHJ1ZSBhcyBib29sZWFuKSB7XG4gICAgaWR4ID0gaHRtbEF0dHIuaW5kZXhPZignLScsIGxhc3RJZHgpOyAvLyBGaW5kIHRoZSBuZXh0IGh5cGhlblxuICAgIGNvbnN0IGNodW5rID0gaHRtbEF0dHIuc3Vic3RyaW5nKGxhc3RJZHgsIGlkeCA9PT0gLTEgPyBodG1sQXR0ci5sZW5ndGggOiBpZHgpOyAvLyBHZXQgdGhlIGNodW5rXG4gICAgZXZlbnROYW1lICs9IGNodW5rOyAvLyBBZGQgdGhlIGNodW5rIHRvIHRoZSBldmVudCBuYW1lXG4gICAgaWYgKGlkeCA9PSAtMSkge1xuICAgICAgcmV0dXJuIGV2ZW50TmFtZTsgLy8gUmV0dXJuIHRoZSBldmVudCBuYW1lIGlmIG5vIG1vcmUgaHlwaGVuc1xuICAgIH1cbiAgICBpZHgrKzsgLy8gTW92ZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGh5cGhlblxuICAgIGV2ZW50TmFtZSArPSBodG1sQXR0ci5jaGFyQXQoaWR4KS50b1VwcGVyQ2FzZSgpOyAvLyBDYXBpdGFsaXplIHRoZSBuZXh0IGxldHRlciBpZiBwcmV2aW91cyBjaGFyYWN0ZXIgaXMgaHlwaGVuXG4gICAgbGFzdElkeCA9IGlkeCArIDE7IC8vIE1vdmUgdG8gdGhlIG5leHQgY2hhcmFjdGVyXG4gIH1cbiAgcmV0dXJuIGV2ZW50TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50U2NvcGVEYXRhRnJvbUpzeEV2ZW50KGV2ZW50TmFtZTogc3RyaW5nKTogW3N0cmluZyB8IG51bGwsIG51bWJlcl0ge1xuICBsZXQgcHJlZml4OiBFdmVudE5hbWVIdG1sU2NvcGUgfCBudWxsID0gbnVsbDtcbiAgbGV0IGlkeCA9IC0xO1xuICAvLyBzZXQgcHJlZml4IGFuZCBpZHggYmFzZWQgb24gdGhlIHNjb3BlXG4gIGlmIChldmVudE5hbWUuc3RhcnRzV2l0aChFdmVudE5hbWVKU1hTY29wZS5vbikpIHtcbiAgICBwcmVmaXggPSBFdmVudE5hbWVIdG1sU2NvcGUub247XG4gICAgaWR4ID0gMjtcbiAgfSBlbHNlIGlmIChldmVudE5hbWUuc3RhcnRzV2l0aChFdmVudE5hbWVKU1hTY29wZS53aW5kb3cpKSB7XG4gICAgcHJlZml4ID0gRXZlbnROYW1lSHRtbFNjb3BlLndpbmRvdztcbiAgICBpZHggPSA5O1xuICB9IGVsc2UgaWYgKGV2ZW50TmFtZS5zdGFydHNXaXRoKEV2ZW50TmFtZUpTWFNjb3BlLmRvY3VtZW50KSkge1xuICAgIHByZWZpeCA9IEV2ZW50TmFtZUh0bWxTY29wZS5kb2N1bWVudDtcbiAgICBpZHggPSAxMTtcbiAgfVxuICByZXR1cm4gW3ByZWZpeCwgaWR4XTtcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRTY29wZURhdGFGcm9tSHRtbEV2ZW50KGh0bWxBdHRyOiBzdHJpbmcpOiBbc3RyaW5nIHwgbnVsbCwgbnVtYmVyXSB7XG4gIGxldCBwcmVmaXg6IEV2ZW50TmFtZUpTWFNjb3BlIHwgbnVsbCA9IG51bGw7XG4gIGxldCBpZHggPSAtMTtcbiAgaWYgKGh0bWxBdHRyLnN0YXJ0c1dpdGgoRXZlbnROYW1lSHRtbFNjb3BlLm9uKSkge1xuICAgIHByZWZpeCA9IEV2ZW50TmFtZUpTWFNjb3BlLm9uO1xuICAgIGlkeCA9IDM7XG4gIH0gZWxzZSBpZiAoaHRtbEF0dHIuc3RhcnRzV2l0aChFdmVudE5hbWVIdG1sU2NvcGUud2luZG93KSkge1xuICAgIHByZWZpeCA9IEV2ZW50TmFtZUpTWFNjb3BlLndpbmRvdztcbiAgICBpZHggPSAxMDtcbiAgfSBlbHNlIGlmIChodG1sQXR0ci5zdGFydHNXaXRoKEV2ZW50TmFtZUh0bWxTY29wZS5kb2N1bWVudCkpIHtcbiAgICBwcmVmaXggPSBFdmVudE5hbWVKU1hTY29wZS5kb2N1bWVudDtcbiAgICBpZHggPSAxMjtcbiAgfVxuICByZXR1cm4gW3ByZWZpeCwgaWR4XTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzRGFzaCA9IChjaGFyQ29kZTogbnVtYmVyKTogYm9vbGVhbiA9PiBjaGFyQ29kZSA9PT0gNDU7IC8qIC0gKi9cblxuZXhwb3J0IGNvbnN0IGdldEV2ZW50TmFtZVNjb3BlRnJvbUpzeEV2ZW50ID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGluZGV4ID0gbmFtZS5pbmRleE9mKCc6Jyk7XG4gIHJldHVybiBpbmRleCAhPT0gLTEgPyBuYW1lLnN1YnN0cmluZygwLCBpbmRleCkgOiAnJztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ByZXZlbnREZWZhdWx0KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBrZXkuc3RhcnRzV2l0aCgncHJldmVudGRlZmF1bHQ6Jyk7XG59XG5cbmV4cG9ydCBjb25zdCBmcm9tQ2FtZWxUb0tlYmFiQ2FzZSA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC8oW0EtWi1dKS9nLCAnLSQxJykudG9Mb3dlckNhc2UoKTtcbn07XG4iXX0=","import { assertTrue } from '../shared/error/assert';\nimport { qError } from '../shared/error/error';\nimport { verifySerializable } from '../shared/utils/serialize-utils';\nimport { qDev, qSerialize } from '../shared/utils/qdev';\nimport { isObject } from '../shared/utils/types';\nimport { invoke } from './use-core';\nimport { useSequentialScope } from './use-sequential-scope';\nimport { fromCamelToKebabCase } from '../shared/utils/event-names';\n// <docs markdown=\"../readme.md#createContextId\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#createContextId instead and run `pnpm docs.sync`)\n/**\n * Create a context ID to be used in your application. The name should be written with no spaces.\n *\n * Context is a way to pass stores to the child components without prop-drilling.\n *\n * Use `createContextId()` to create a `ContextId`. A `ContextId` is just a serializable identifier\n * for the context. It is not the context value itself. See `useContextProvider()` and\n * `useContext()` for the values. Qwik needs a serializable ID for the context so that the it can\n * track context providers and consumers in a way that survives resumability.\n *\n * ### Example\n *\n * ```tsx\n * // Declare the Context type.\n * interface TodosStore {\n *   items: string[];\n * }\n * // Create a Context ID (no data is saved here.)\n * // You will use this ID to both create and retrieve the Context.\n * export const TodosContext = createContextId<TodosStore>('Todos');\n *\n * // Example of providing context to child components.\n * export const App = component$(() => {\n *   useContextProvider(\n *     TodosContext,\n *     useStore<TodosStore>({\n *       items: ['Learn Qwik', 'Build Qwik app', 'Profit'],\n *     })\n *   );\n *\n *   return <Items />;\n * });\n *\n * // Example of retrieving the context provided by a parent component.\n * export const Items = component$(() => {\n *   const todos = useContext(TodosContext);\n *   return (\n *     <ul>\n *       {todos.items.map((item) => (\n *         <li>{item}</li>\n *       ))}\n *     </ul>\n *   );\n * });\n *\n * ```\n *\n * @param name - The name of the context.\n * @public\n */\n// </docs>\nexport const createContextId = (name) => {\n    assertTrue(/^[\\w/.-]+$/.test(name), 'Context name must only contain A-Z,a-z,0-9, _', name);\n    return /*#__PURE__*/ Object.freeze({\n        id: fromCamelToKebabCase(name),\n    });\n};\n// <docs markdown=\"../readme.md#useContextProvider\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useContextProvider instead and run `pnpm docs.sync`)\n/**\n * Assign a value to a Context.\n *\n * Use `useContextProvider()` to assign a value to a context. The assignment happens in the\n * component's function. Once assigned, use `useContext()` in any child component to retrieve the\n * value.\n *\n * Context is a way to pass stores to the child components without prop-drilling. Note that scalar\n * values are allowed, but for reactivity you need signals or stores.\n *\n * ### Example\n *\n * ```tsx\n * // Declare the Context type.\n * interface TodosStore {\n *   items: string[];\n * }\n * // Create a Context ID (no data is saved here.)\n * // You will use this ID to both create and retrieve the Context.\n * export const TodosContext = createContextId<TodosStore>('Todos');\n *\n * // Example of providing context to child components.\n * export const App = component$(() => {\n *   useContextProvider(\n *     TodosContext,\n *     useStore<TodosStore>({\n *       items: ['Learn Qwik', 'Build Qwik app', 'Profit'],\n *     })\n *   );\n *\n *   return <Items />;\n * });\n *\n * // Example of retrieving the context provided by a parent component.\n * export const Items = component$(() => {\n *   const todos = useContext(TodosContext);\n *   return (\n *     <ul>\n *       {todos.items.map((item) => (\n *         <li>{item}</li>\n *       ))}\n *     </ul>\n *   );\n * });\n *\n * ```\n *\n * @param context - The context to assign a value to.\n * @param value - The value to assign to the context.\n * @public\n */\n// </docs>\nexport const useContextProvider = (context, newValue) => {\n    const { val, set, iCtx } = useSequentialScope();\n    if (val !== undefined) {\n        return;\n    }\n    if (qDev) {\n        validateContext(context);\n    }\n    if (qDev && qSerialize) {\n        verifySerializable(newValue);\n    }\n    iCtx.$container$.setContext(iCtx.$hostElement$, context, newValue);\n    set(1);\n};\n// <docs markdown=\"../readme.md#useContext\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useContext instead and run `pnpm docs.sync`)\n/**\n * Retrieve Context value.\n *\n * Use `useContext()` to retrieve the value of context in a component. To retrieve a value a parent\n * component needs to invoke `useContextProvider()` to assign a value.\n *\n * ### Example\n *\n * ```tsx\n * // Declare the Context type.\n * interface TodosStore {\n *   items: string[];\n * }\n * // Create a Context ID (no data is saved here.)\n * // You will use this ID to both create and retrieve the Context.\n * export const TodosContext = createContextId<TodosStore>('Todos');\n *\n * // Example of providing context to child components.\n * export const App = component$(() => {\n *   useContextProvider(\n *     TodosContext,\n *     useStore<TodosStore>({\n *       items: ['Learn Qwik', 'Build Qwik app', 'Profit'],\n *     })\n *   );\n *\n *   return <Items />;\n * });\n *\n * // Example of retrieving the context provided by a parent component.\n * export const Items = component$(() => {\n *   const todos = useContext(TodosContext);\n *   return (\n *     <ul>\n *       {todos.items.map((item) => (\n *         <li>{item}</li>\n *       ))}\n *     </ul>\n *   );\n * });\n *\n * ```\n *\n * @param context - The context to retrieve a value from.\n * @public\n */\n// </docs>\nexport const useContext = (context, defaultValue) => {\n    const { val, set, iCtx } = useSequentialScope();\n    if (val !== undefined) {\n        return val;\n    }\n    if (qDev) {\n        validateContext(context);\n    }\n    const value = iCtx.$container$.resolveContext(iCtx.$hostElement$, context);\n    if (typeof defaultValue === 'function') {\n        return set(invoke(undefined, defaultValue, value));\n    }\n    if (value !== undefined) {\n        return set(value);\n    }\n    if (defaultValue !== undefined) {\n        return set(defaultValue);\n    }\n    throw qError(13 /* QError.notFoundContext */, [context.id]);\n};\nexport const validateContext = (context) => {\n    if (!isObject(context) || typeof context.id !== 'string' || context.id.length === 0) {\n        throw qError(28 /* QError.invalidContext */, [context]);\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQThEbkUsaURBQWlEO0FBQ2pELHlDQUF5QztBQUN6Qyx1RUFBdUU7QUFDdkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpREc7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQWtCLElBQVksRUFBb0IsRUFBRTtJQUNqRixVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSwrQ0FBK0MsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRixPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2pDLEVBQUUsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7S0FDeEIsQ0FBQyxDQUFDO0FBQ1osQ0FBQyxDQUFDO0FBRUYsb0RBQW9EO0FBQ3BELHlDQUF5QztBQUN6QywwRUFBMEU7QUFDMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RHO0FBQ0gsVUFBVTtBQUNWLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQVEsT0FBeUIsRUFBRSxRQUFlLEVBQUUsRUFBRTtJQUN0RixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsRUFBSyxDQUFDO0lBQ25ELElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkIsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25FLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQztBQVFGLDRDQUE0QztBQUM1Qyx5Q0FBeUM7QUFDekMsa0VBQWtFO0FBQ2xFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Q0c7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFlLENBQ3BDLE9BQXlCLEVBQ3pCLFlBQThELEVBQzlELEVBQUU7SUFDRixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsRUFBUyxDQUFDO0lBQ3ZELElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFzQixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlGLElBQUksT0FBTyxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDdkMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMvQixPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsTUFBTSxNQUFNLGtDQUF5QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQXVCLEVBQUUsRUFBRTtJQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sT0FBTyxDQUFDLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEYsTUFBTSxNQUFNLGlDQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydFRydWUgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvYXNzZXJ0JztcbmltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Vycm9yJztcbmltcG9ydCB7IHZlcmlmeVNlcmlhbGl6YWJsZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9zZXJpYWxpemUtdXRpbHMnO1xuaW1wb3J0IHsgcURldiwgcVNlcmlhbGl6ZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9xZGV2JztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IGludm9rZSB9IGZyb20gJy4vdXNlLWNvcmUnO1xuaW1wb3J0IHsgdXNlU2VxdWVudGlhbFNjb3BlIH0gZnJvbSAnLi91c2Utc2VxdWVudGlhbC1zY29wZSc7XG5pbXBvcnQgeyBmcm9tQ2FtZWxUb0tlYmFiQ2FzZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9ldmVudC1uYW1lcyc7XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vcmVhZG1lLm1kI0NvbnRleHRJZFwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uL3JlYWRtZS5tZCNDb250ZXh0SWQgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIENvbnRleHRJZCBpcyBhIHR5cGVzYWZlIElEIGZvciB5b3VyIGNvbnRleHQuXG4gKlxuICogQ29udGV4dCBpcyBhIHdheSB0byBwYXNzIHN0b3JlcyB0byB0aGUgY2hpbGQgY29tcG9uZW50cyB3aXRob3V0IHByb3AtZHJpbGxpbmcuXG4gKlxuICogVXNlIGBjcmVhdGVDb250ZXh0SWQoKWAgdG8gY3JlYXRlIGEgYENvbnRleHRJZGAuIEEgYENvbnRleHRJZGAgaXMganVzdCBhIHNlcmlhbGl6YWJsZSBpZGVudGlmaWVyXG4gKiBmb3IgdGhlIGNvbnRleHQuIEl0IGlzIG5vdCB0aGUgY29udGV4dCB2YWx1ZSBpdHNlbGYuIFNlZSBgdXNlQ29udGV4dFByb3ZpZGVyKClgIGFuZFxuICogYHVzZUNvbnRleHQoKWAgZm9yIHRoZSB2YWx1ZXMuIFF3aWsgbmVlZHMgYSBzZXJpYWxpemFibGUgSUQgZm9yIHRoZSBjb250ZXh0IHNvIHRoYXQgdGhlIGl0IGNhblxuICogdHJhY2sgY29udGV4dCBwcm92aWRlcnMgYW5kIGNvbnN1bWVycyBpbiBhIHdheSB0aGF0IHN1cnZpdmVzIHJlc3VtYWJpbGl0eS5cbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIGBgYHRzeFxuICogLy8gRGVjbGFyZSB0aGUgQ29udGV4dCB0eXBlLlxuICogaW50ZXJmYWNlIFRvZG9zU3RvcmUge1xuICogICBpdGVtczogc3RyaW5nW107XG4gKiB9XG4gKiAvLyBDcmVhdGUgYSBDb250ZXh0IElEIChubyBkYXRhIGlzIHNhdmVkIGhlcmUuKVxuICogLy8gWW91IHdpbGwgdXNlIHRoaXMgSUQgdG8gYm90aCBjcmVhdGUgYW5kIHJldHJpZXZlIHRoZSBDb250ZXh0LlxuICogZXhwb3J0IGNvbnN0IFRvZG9zQ29udGV4dCA9IGNyZWF0ZUNvbnRleHRJZDxUb2Rvc1N0b3JlPignVG9kb3MnKTtcbiAqXG4gKiAvLyBFeGFtcGxlIG9mIHByb3ZpZGluZyBjb250ZXh0IHRvIGNoaWxkIGNvbXBvbmVudHMuXG4gKiBleHBvcnQgY29uc3QgQXBwID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIHVzZUNvbnRleHRQcm92aWRlcihcbiAqICAgICBUb2Rvc0NvbnRleHQsXG4gKiAgICAgdXNlU3RvcmU8VG9kb3NTdG9yZT4oe1xuICogICAgICAgaXRlbXM6IFsnTGVhcm4gUXdpaycsICdCdWlsZCBRd2lrIGFwcCcsICdQcm9maXQnXSxcbiAqICAgICB9KVxuICogICApO1xuICpcbiAqICAgcmV0dXJuIDxJdGVtcyAvPjtcbiAqIH0pO1xuICpcbiAqIC8vIEV4YW1wbGUgb2YgcmV0cmlldmluZyB0aGUgY29udGV4dCBwcm92aWRlZCBieSBhIHBhcmVudCBjb21wb25lbnQuXG4gKiBleHBvcnQgY29uc3QgSXRlbXMgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgY29uc3QgdG9kb3MgPSB1c2VDb250ZXh0KFRvZG9zQ29udGV4dCk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPHVsPlxuICogICAgICAge3RvZG9zLml0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICogICAgICAgICA8bGk+e2l0ZW19PC9saT5cbiAqICAgICAgICkpfVxuICogICAgIDwvdWw+XG4gKiAgICk7XG4gKiB9KTtcbiAqXG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dElkPFNUQVRFPiB7XG4gIC8qKiBEZXNpZ24tdGltZSBwcm9wZXJ0eSB0byBzdG9yZSB0eXBlIGluZm9ybWF0aW9uIGZvciB0aGUgY29udGV4dC4gKi9cbiAgcmVhZG9ubHkgX19icmFuZF9jb250ZXh0X3R5cGVfXzogU1RBVEU7XG4gIC8qKiBBIHVuaXF1ZSBJRCBmb3IgdGhlIGNvbnRleHQuICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG59XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vcmVhZG1lLm1kI2NyZWF0ZUNvbnRleHRJZFwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uL3JlYWRtZS5tZCNjcmVhdGVDb250ZXh0SWQgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIENyZWF0ZSBhIGNvbnRleHQgSUQgdG8gYmUgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uLiBUaGUgbmFtZSBzaG91bGQgYmUgd3JpdHRlbiB3aXRoIG5vIHNwYWNlcy5cbiAqXG4gKiBDb250ZXh0IGlzIGEgd2F5IHRvIHBhc3Mgc3RvcmVzIHRvIHRoZSBjaGlsZCBjb21wb25lbnRzIHdpdGhvdXQgcHJvcC1kcmlsbGluZy5cbiAqXG4gKiBVc2UgYGNyZWF0ZUNvbnRleHRJZCgpYCB0byBjcmVhdGUgYSBgQ29udGV4dElkYC4gQSBgQ29udGV4dElkYCBpcyBqdXN0IGEgc2VyaWFsaXphYmxlIGlkZW50aWZpZXJcbiAqIGZvciB0aGUgY29udGV4dC4gSXQgaXMgbm90IHRoZSBjb250ZXh0IHZhbHVlIGl0c2VsZi4gU2VlIGB1c2VDb250ZXh0UHJvdmlkZXIoKWAgYW5kXG4gKiBgdXNlQ29udGV4dCgpYCBmb3IgdGhlIHZhbHVlcy4gUXdpayBuZWVkcyBhIHNlcmlhbGl6YWJsZSBJRCBmb3IgdGhlIGNvbnRleHQgc28gdGhhdCB0aGUgaXQgY2FuXG4gKiB0cmFjayBjb250ZXh0IHByb3ZpZGVycyBhbmQgY29uc3VtZXJzIGluIGEgd2F5IHRoYXQgc3Vydml2ZXMgcmVzdW1hYmlsaXR5LlxuICpcbiAqICMjIyBFeGFtcGxlXG4gKlxuICogYGBgdHN4XG4gKiAvLyBEZWNsYXJlIHRoZSBDb250ZXh0IHR5cGUuXG4gKiBpbnRlcmZhY2UgVG9kb3NTdG9yZSB7XG4gKiAgIGl0ZW1zOiBzdHJpbmdbXTtcbiAqIH1cbiAqIC8vIENyZWF0ZSBhIENvbnRleHQgSUQgKG5vIGRhdGEgaXMgc2F2ZWQgaGVyZS4pXG4gKiAvLyBZb3Ugd2lsbCB1c2UgdGhpcyBJRCB0byBib3RoIGNyZWF0ZSBhbmQgcmV0cmlldmUgdGhlIENvbnRleHQuXG4gKiBleHBvcnQgY29uc3QgVG9kb3NDb250ZXh0ID0gY3JlYXRlQ29udGV4dElkPFRvZG9zU3RvcmU+KCdUb2RvcycpO1xuICpcbiAqIC8vIEV4YW1wbGUgb2YgcHJvdmlkaW5nIGNvbnRleHQgdG8gY2hpbGQgY29tcG9uZW50cy5cbiAqIGV4cG9ydCBjb25zdCBBcHAgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgdXNlQ29udGV4dFByb3ZpZGVyKFxuICogICAgIFRvZG9zQ29udGV4dCxcbiAqICAgICB1c2VTdG9yZTxUb2Rvc1N0b3JlPih7XG4gKiAgICAgICBpdGVtczogWydMZWFybiBRd2lrJywgJ0J1aWxkIFF3aWsgYXBwJywgJ1Byb2ZpdCddLFxuICogICAgIH0pXG4gKiAgICk7XG4gKlxuICogICByZXR1cm4gPEl0ZW1zIC8+O1xuICogfSk7XG4gKlxuICogLy8gRXhhbXBsZSBvZiByZXRyaWV2aW5nIHRoZSBjb250ZXh0IHByb3ZpZGVkIGJ5IGEgcGFyZW50IGNvbXBvbmVudC5cbiAqIGV4cG9ydCBjb25zdCBJdGVtcyA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICBjb25zdCB0b2RvcyA9IHVzZUNvbnRleHQoVG9kb3NDb250ZXh0KTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8dWw+XG4gKiAgICAgICB7dG9kb3MuaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gKiAgICAgICAgIDxsaT57aXRlbX08L2xpPlxuICogICAgICAgKSl9XG4gKiAgICAgPC91bD5cbiAqICAgKTtcbiAqIH0pO1xuICpcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbnRleHQuXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0SWQgPSA8U1RBVEUgPSB1bmtub3duPihuYW1lOiBzdHJpbmcpOiBDb250ZXh0SWQ8U1RBVEU+ID0+IHtcbiAgYXNzZXJ0VHJ1ZSgvXltcXHcvLi1dKyQvLnRlc3QobmFtZSksICdDb250ZXh0IG5hbWUgbXVzdCBvbmx5IGNvbnRhaW4gQS1aLGEteiwwLTksIF8nLCBuYW1lKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi8gT2JqZWN0LmZyZWV6ZSh7XG4gICAgaWQ6IGZyb21DYW1lbFRvS2ViYWJDYXNlKG5hbWUpLFxuICB9IGFzIGFueSk7XG59O1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCN1c2VDb250ZXh0UHJvdmlkZXJcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlQ29udGV4dFByb3ZpZGVyIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBBc3NpZ24gYSB2YWx1ZSB0byBhIENvbnRleHQuXG4gKlxuICogVXNlIGB1c2VDb250ZXh0UHJvdmlkZXIoKWAgdG8gYXNzaWduIGEgdmFsdWUgdG8gYSBjb250ZXh0LiBUaGUgYXNzaWdubWVudCBoYXBwZW5zIGluIHRoZVxuICogY29tcG9uZW50J3MgZnVuY3Rpb24uIE9uY2UgYXNzaWduZWQsIHVzZSBgdXNlQ29udGV4dCgpYCBpbiBhbnkgY2hpbGQgY29tcG9uZW50IHRvIHJldHJpZXZlIHRoZVxuICogdmFsdWUuXG4gKlxuICogQ29udGV4dCBpcyBhIHdheSB0byBwYXNzIHN0b3JlcyB0byB0aGUgY2hpbGQgY29tcG9uZW50cyB3aXRob3V0IHByb3AtZHJpbGxpbmcuIE5vdGUgdGhhdCBzY2FsYXJcbiAqIHZhbHVlcyBhcmUgYWxsb3dlZCwgYnV0IGZvciByZWFjdGl2aXR5IHlvdSBuZWVkIHNpZ25hbHMgb3Igc3RvcmVzLlxuICpcbiAqICMjIyBFeGFtcGxlXG4gKlxuICogYGBgdHN4XG4gKiAvLyBEZWNsYXJlIHRoZSBDb250ZXh0IHR5cGUuXG4gKiBpbnRlcmZhY2UgVG9kb3NTdG9yZSB7XG4gKiAgIGl0ZW1zOiBzdHJpbmdbXTtcbiAqIH1cbiAqIC8vIENyZWF0ZSBhIENvbnRleHQgSUQgKG5vIGRhdGEgaXMgc2F2ZWQgaGVyZS4pXG4gKiAvLyBZb3Ugd2lsbCB1c2UgdGhpcyBJRCB0byBib3RoIGNyZWF0ZSBhbmQgcmV0cmlldmUgdGhlIENvbnRleHQuXG4gKiBleHBvcnQgY29uc3QgVG9kb3NDb250ZXh0ID0gY3JlYXRlQ29udGV4dElkPFRvZG9zU3RvcmU+KCdUb2RvcycpO1xuICpcbiAqIC8vIEV4YW1wbGUgb2YgcHJvdmlkaW5nIGNvbnRleHQgdG8gY2hpbGQgY29tcG9uZW50cy5cbiAqIGV4cG9ydCBjb25zdCBBcHAgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgdXNlQ29udGV4dFByb3ZpZGVyKFxuICogICAgIFRvZG9zQ29udGV4dCxcbiAqICAgICB1c2VTdG9yZTxUb2Rvc1N0b3JlPih7XG4gKiAgICAgICBpdGVtczogWydMZWFybiBRd2lrJywgJ0J1aWxkIFF3aWsgYXBwJywgJ1Byb2ZpdCddLFxuICogICAgIH0pXG4gKiAgICk7XG4gKlxuICogICByZXR1cm4gPEl0ZW1zIC8+O1xuICogfSk7XG4gKlxuICogLy8gRXhhbXBsZSBvZiByZXRyaWV2aW5nIHRoZSBjb250ZXh0IHByb3ZpZGVkIGJ5IGEgcGFyZW50IGNvbXBvbmVudC5cbiAqIGV4cG9ydCBjb25zdCBJdGVtcyA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICBjb25zdCB0b2RvcyA9IHVzZUNvbnRleHQoVG9kb3NDb250ZXh0KTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8dWw+XG4gKiAgICAgICB7dG9kb3MuaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gKiAgICAgICAgIDxsaT57aXRlbX08L2xpPlxuICogICAgICAgKSl9XG4gKiAgICAgPC91bD5cbiAqICAgKTtcbiAqIH0pO1xuICpcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNvbnRleHQgdG8gYXNzaWduIGEgdmFsdWUgdG8uXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBjb250ZXh0LlxuICogQHB1YmxpY1xuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgdXNlQ29udGV4dFByb3ZpZGVyID0gPFNUQVRFPihjb250ZXh0OiBDb250ZXh0SWQ8U1RBVEU+LCBuZXdWYWx1ZTogU1RBVEUpID0+IHtcbiAgY29uc3QgeyB2YWwsIHNldCwgaUN0eCB9ID0gdXNlU2VxdWVudGlhbFNjb3BlPDE+KCk7XG4gIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocURldikge1xuICAgIHZhbGlkYXRlQ29udGV4dChjb250ZXh0KTtcbiAgfVxuICBpZiAocURldiAmJiBxU2VyaWFsaXplKSB7XG4gICAgdmVyaWZ5U2VyaWFsaXphYmxlKG5ld1ZhbHVlKTtcbiAgfVxuICBpQ3R4LiRjb250YWluZXIkLnNldENvbnRleHQoaUN0eC4kaG9zdEVsZW1lbnQkLCBjb250ZXh0LCBuZXdWYWx1ZSk7XG4gIHNldCgxKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlQ29udGV4dCB7XG4gIDxTVEFURSwgVD4oY29udGV4dDogQ29udGV4dElkPFNUQVRFPiwgdHJhbnNmb3JtZXI6ICh2YWx1ZTogU1RBVEUpID0+IFQpOiBUO1xuICA8U1RBVEUsIFQ+KGNvbnRleHQ6IENvbnRleHRJZDxTVEFURT4sIGRlZmF1bHRWYWx1ZTogVCk6IFNUQVRFIHwgVDtcbiAgPFNUQVRFPihjb250ZXh0OiBDb250ZXh0SWQ8U1RBVEU+KTogU1RBVEU7XG59XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vcmVhZG1lLm1kI3VzZUNvbnRleHRcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlQ29udGV4dCBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogUmV0cmlldmUgQ29udGV4dCB2YWx1ZS5cbiAqXG4gKiBVc2UgYHVzZUNvbnRleHQoKWAgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mIGNvbnRleHQgaW4gYSBjb21wb25lbnQuIFRvIHJldHJpZXZlIGEgdmFsdWUgYSBwYXJlbnRcbiAqIGNvbXBvbmVudCBuZWVkcyB0byBpbnZva2UgYHVzZUNvbnRleHRQcm92aWRlcigpYCB0byBhc3NpZ24gYSB2YWx1ZS5cbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIGBgYHRzeFxuICogLy8gRGVjbGFyZSB0aGUgQ29udGV4dCB0eXBlLlxuICogaW50ZXJmYWNlIFRvZG9zU3RvcmUge1xuICogICBpdGVtczogc3RyaW5nW107XG4gKiB9XG4gKiAvLyBDcmVhdGUgYSBDb250ZXh0IElEIChubyBkYXRhIGlzIHNhdmVkIGhlcmUuKVxuICogLy8gWW91IHdpbGwgdXNlIHRoaXMgSUQgdG8gYm90aCBjcmVhdGUgYW5kIHJldHJpZXZlIHRoZSBDb250ZXh0LlxuICogZXhwb3J0IGNvbnN0IFRvZG9zQ29udGV4dCA9IGNyZWF0ZUNvbnRleHRJZDxUb2Rvc1N0b3JlPignVG9kb3MnKTtcbiAqXG4gKiAvLyBFeGFtcGxlIG9mIHByb3ZpZGluZyBjb250ZXh0IHRvIGNoaWxkIGNvbXBvbmVudHMuXG4gKiBleHBvcnQgY29uc3QgQXBwID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIHVzZUNvbnRleHRQcm92aWRlcihcbiAqICAgICBUb2Rvc0NvbnRleHQsXG4gKiAgICAgdXNlU3RvcmU8VG9kb3NTdG9yZT4oe1xuICogICAgICAgaXRlbXM6IFsnTGVhcm4gUXdpaycsICdCdWlsZCBRd2lrIGFwcCcsICdQcm9maXQnXSxcbiAqICAgICB9KVxuICogICApO1xuICpcbiAqICAgcmV0dXJuIDxJdGVtcyAvPjtcbiAqIH0pO1xuICpcbiAqIC8vIEV4YW1wbGUgb2YgcmV0cmlldmluZyB0aGUgY29udGV4dCBwcm92aWRlZCBieSBhIHBhcmVudCBjb21wb25lbnQuXG4gKiBleHBvcnQgY29uc3QgSXRlbXMgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgY29uc3QgdG9kb3MgPSB1c2VDb250ZXh0KFRvZG9zQ29udGV4dCk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPHVsPlxuICogICAgICAge3RvZG9zLml0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICogICAgICAgICA8bGk+e2l0ZW19PC9saT5cbiAqICAgICAgICkpfVxuICogICAgIDwvdWw+XG4gKiAgICk7XG4gKiB9KTtcbiAqXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSBjb250ZXh0IHRvIHJldHJpZXZlIGEgdmFsdWUgZnJvbS5cbiAqIEBwdWJsaWNcbiAqL1xuLy8gPC9kb2NzPlxuZXhwb3J0IGNvbnN0IHVzZUNvbnRleHQ6IFVzZUNvbnRleHQgPSA8U1RBVEU+KFxuICBjb250ZXh0OiBDb250ZXh0SWQ8U1RBVEU+LFxuICBkZWZhdWx0VmFsdWU/OiBTVEFURSB8ICgoY3VycmVudDogU1RBVEUgfCB1bmRlZmluZWQpID0+IFNUQVRFKVxuKSA9PiB7XG4gIGNvbnN0IHsgdmFsLCBzZXQsIGlDdHggfSA9IHVzZVNlcXVlbnRpYWxTY29wZTxTVEFURT4oKTtcbiAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBpZiAocURldikge1xuICAgIHZhbGlkYXRlQ29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlOiBTVEFURSB8IHVuZGVmaW5lZCA9IGlDdHguJGNvbnRhaW5lciQucmVzb2x2ZUNvbnRleHQoaUN0eC4kaG9zdEVsZW1lbnQkLCBjb250ZXh0KTtcbiAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2V0KGludm9rZSh1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZSBhcyBhbnksIHZhbHVlKSk7XG4gIH1cbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gc2V0KHZhbHVlKTtcbiAgfVxuICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gc2V0KGRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgdGhyb3cgcUVycm9yKFFFcnJvci5ub3RGb3VuZENvbnRleHQsIFtjb250ZXh0LmlkXSk7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDb250ZXh0ID0gKGNvbnRleHQ6IENvbnRleHRJZDxhbnk+KSA9PiB7XG4gIGlmICghaXNPYmplY3QoY29udGV4dCkgfHwgdHlwZW9mIGNvbnRleHQuaWQgIT09ICdzdHJpbmcnIHx8IGNvbnRleHQuaWQubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgcUVycm9yKFFFcnJvci5pbnZhbGlkQ29udGV4dCwgW2NvbnRleHRdKTtcbiAgfVxufTtcbiJdfQ==","import { createContextId } from '../../use/use-context';\nexport const ERROR_CONTEXT = /*#__PURE__*/ createContextId('qk-error');\nexport const isRecoverable = (err) => {\n    if (err && err instanceof Error) {\n        if ('plugin' in err) {\n            return false;\n        }\n    }\n    return true;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxpbmcuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL2Vycm9yL2Vycm9yLWhhbmRsaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU94RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBcUIsVUFBVSxDQUFDLENBQUM7QUFFM0YsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBUSxFQUFFLEVBQUU7SUFDeEMsSUFBSSxHQUFHLElBQUksR0FBRyxZQUFZLEtBQUssRUFBRSxDQUFDO1FBQ2hDLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHRJZCB9IGZyb20gJy4uLy4uL3VzZS91c2UtY29udGV4dCc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQm91bmRhcnlTdG9yZSB7XG4gIGVycm9yOiBhbnkgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBFUlJPUl9DT05URVhUID0gLyojX19QVVJFX18qLyBjcmVhdGVDb250ZXh0SWQ8RXJyb3JCb3VuZGFyeVN0b3JlPigncWstZXJyb3InKTtcblxuZXhwb3J0IGNvbnN0IGlzUmVjb3ZlcmFibGUgPSAoZXJyOiBhbnkpID0+IHtcbiAgaWYgKGVyciAmJiBlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGlmICgncGx1Z2luJyBpbiBlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuIl19","/**\n * QWIK_VERSION\n *\n * @public\n */\nexport const version = globalThis.QWIK_VERSION;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUksVUFBa0IsQ0FBQyxZQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBRV0lLX1ZFUlNJT05cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gKGdsb2JhbFRoaXMgYXMgYW55KS5RV0lLX1ZFUlNJT04gYXMgc3RyaW5nO1xuIl19","import { QSlotS } from '../utils/markers';\nimport { Virtual, _jsxSorted } from './jsx-runtime';\n/**\n * Allows to project the children of the current component. <Slot/> can only be used within the\n * context of a component defined with `component$`.\n *\n * @public\n */\nexport const Slot = (props) => {\n    return _jsxSorted(Virtual, null, { [QSlotS]: '' }, props.children, 0, props.name ?? '');\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdC5wdWJsaWMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL2pzeC9zbG90LnB1YmxpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJcEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBR1osQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNiLE9BQU8sVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUVNsb3RTIH0gZnJvbSAnLi4vdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyBWaXJ0dWFsLCBfanN4U29ydGVkIH0gZnJvbSAnLi9qc3gtcnVudGltZSc7XG5pbXBvcnQgdHlwZSB7IEZ1bmN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IEpTWENoaWxkcmVuIH0gZnJvbSAnLi90eXBlcy9qc3gtcXdpay1hdHRyaWJ1dGVzJztcblxuLyoqXG4gKiBBbGxvd3MgdG8gcHJvamVjdCB0aGUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LiA8U2xvdC8+IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIHRoZVxuICogY29udGV4dCBvZiBhIGNvbXBvbmVudCBkZWZpbmVkIHdpdGggYGNvbXBvbmVudCRgLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IFNsb3Q6IEZ1bmN0aW9uQ29tcG9uZW50PHtcbiAgbmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBKU1hDaGlsZHJlbjtcbn0+ID0gKHByb3BzKSA9PiB7XG4gIHJldHVybiBfanN4U29ydGVkKFZpcnR1YWwsIG51bGwsIHsgW1FTbG90U106ICcnIH0sIHByb3BzLmNoaWxkcmVuLCAwLCBwcm9wcy5uYW1lID8/ICcnKTtcbn07XG4iXX0=","import { STREAM_BLOCK_END_COMMENT, STREAM_BLOCK_START_COMMENT } from '../utils/markers';\nimport { jsx, RenderOnce } from './jsx-runtime';\n/** @public */\nexport const SkipRender = Symbol('skip render');\n/** @public */\nexport const SSRRaw = () => null;\n/** @public */\nexport const SSRComment = () => null;\n/** @public */\nexport const SSRStreamBlock = (props) => {\n    return [\n        jsx(SSRComment, { data: STREAM_BLOCK_START_COMMENT }),\n        props.children,\n        jsx(SSRComment, { data: STREAM_BLOCK_END_COMMENT }),\n    ];\n};\n/** @public */\nexport const SSRStream = (props, key) => jsx(RenderOnce, { children: jsx(InternalSSRStream, props) }, key);\nexport const InternalSSRStream = () => null;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMucHVibGljLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9qc3gvdXRpbHMucHVibGljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSWhELGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQVksTUFBTSxDQUFDLGFBQWEsQ0FBUSxDQUFDO0FBRWhFLGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQXdDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUV0RSxjQUFjO0FBQ2QsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUF3QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFFMUUsY0FBYztBQUNkLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBZ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNuRixPQUFPO1FBQ0wsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRSxDQUFDO1FBQ3JELEtBQUssQ0FBQyxRQUFRO1FBQ2QsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxDQUFDO0tBQ3BELENBQUM7QUFDSixDQUFDLENBQUM7QUFhRixjQUFjO0FBQ2QsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFzQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUN6RSxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBT3BFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFzQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTVFJFQU1fQkxPQ0tfRU5EX0NPTU1FTlQsIFNUUkVBTV9CTE9DS19TVEFSVF9DT01NRU5UIH0gZnJvbSAnLi4vdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgdHlwZSB7IFN0cmVhbVdyaXRlciB9IGZyb20gJy4uLy4uL3Nzci9zc3ItdHlwZXMnO1xuaW1wb3J0IHsganN4LCBSZW5kZXJPbmNlIH0gZnJvbSAnLi9qc3gtcnVudGltZSc7XG5pbXBvcnQgdHlwZSB7IEZ1bmN0aW9uQ29tcG9uZW50LCBKU1hOb2RlLCBKU1hPdXRwdXQgfSBmcm9tICcuL3R5cGVzL2pzeC1ub2RlJztcbmltcG9ydCB0eXBlIHsgSlNYQ2hpbGRyZW4gfSBmcm9tICcuL3R5cGVzL2pzeC1xd2lrLWF0dHJpYnV0ZXMnO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFNraXBSZW5kZXI6IEpTWE5vZGUgPSBTeW1ib2woJ3NraXAgcmVuZGVyJykgYXMgYW55O1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFNTUlJhdzogRnVuY3Rpb25Db21wb25lbnQ8eyBkYXRhOiBzdHJpbmcgfT4gPSAoKSA9PiBudWxsO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFNTUkNvbW1lbnQ6IEZ1bmN0aW9uQ29tcG9uZW50PHsgZGF0YTogc3RyaW5nIH0+ID0gKCkgPT4gbnVsbDtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBTU1JTdHJlYW1CbG9jazogRnVuY3Rpb25Db21wb25lbnQ8eyBjaGlsZHJlbj86IEpTWE91dHB1dCB9PiA9IChwcm9wcykgPT4ge1xuICByZXR1cm4gW1xuICAgIGpzeChTU1JDb21tZW50LCB7IGRhdGE6IFNUUkVBTV9CTE9DS19TVEFSVF9DT01NRU5UIH0pLFxuICAgIHByb3BzLmNoaWxkcmVuLFxuICAgIGpzeChTU1JDb21tZW50LCB7IGRhdGE6IFNUUkVBTV9CTE9DS19FTkRfQ09NTUVOVCB9KSxcbiAgXTtcbn07XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBTU1JTdHJlYW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFNTUlN0cmVhbUNoaWxkcmVuO1xufTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFNTUlN0cmVhbUNoaWxkcmVuID1cbiAgfCBBc3luY0dlbmVyYXRvcjxKU1hDaGlsZHJlbiwgdm9pZCwgYW55PlxuICB8ICgoc3RyZWFtOiBTdHJlYW1Xcml0ZXIpID0+IFByb21pc2U8dm9pZD4pXG4gIHwgKCgpID0+IEFzeW5jR2VuZXJhdG9yPEpTWENoaWxkcmVuLCB2b2lkLCBhbnk+KTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBTU1JTdHJlYW06IEZ1bmN0aW9uQ29tcG9uZW50PFNTUlN0cmVhbVByb3BzPiA9IChwcm9wcywga2V5KSA9PlxuICBqc3goUmVuZGVyT25jZSwgeyBjaGlsZHJlbjoganN4KEludGVybmFsU1NSU3RyZWFtLCBwcm9wcykgfSwga2V5KTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFNTUkhpbnRQcm9wcyA9IHtcbiAgZHluYW1pYz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgSW50ZXJuYWxTU1JTdHJlYW06IEZ1bmN0aW9uQ29tcG9uZW50PFNTUlN0cmVhbVByb3BzPiA9ICgpID0+IG51bGw7XG4iXX0=","/**\n * Special value used to mark that a given signal needs to be computed. This is essentially a\n * \"marked as dirty\" flag.\n */\nexport const NEEDS_COMPUTATION = Symbol('invalid');\n/** @internal */\nexport const _EFFECT_BACK_REF = Symbol('backRef');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2lnbmFsL2ZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV4RCxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayB0aGF0IGEgZ2l2ZW4gc2lnbmFsIG5lZWRzIHRvIGJlIGNvbXB1dGVkLiBUaGlzIGlzIGVzc2VudGlhbGx5IGFcbiAqIFwibWFya2VkIGFzIGRpcnR5XCIgZmxhZy5cbiAqL1xuZXhwb3J0IGNvbnN0IE5FRURTX0NPTVBVVEFUSU9OOiBhbnkgPSBTeW1ib2woJ2ludmFsaWQnKTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9FRkZFQ1RfQkFDS19SRUYgPSBTeW1ib2woJ2JhY2tSZWYnKTtcbiJdfQ==","import { QBackRefs } from '../shared/utils/markers';\nimport { _EFFECT_BACK_REF } from '../signal/flags';\nimport { isServer } from '@qwik.dev/core/build';\nexport function getSubscriber(effect, prop, data) {\n    if (!effect[_EFFECT_BACK_REF]) {\n        if (isServer && isSsrNode(effect)) {\n            effect.setProp(QBackRefs, new Map());\n        }\n        else {\n            effect[_EFFECT_BACK_REF] = new Map();\n        }\n    }\n    const subMap = effect[_EFFECT_BACK_REF];\n    let sub = subMap.get(prop);\n    if (!sub) {\n        sub = [effect, prop];\n        subMap.set(prop, sub);\n    }\n    if (data) {\n        sub[3 /* EffectSubscriptionProp.DATA */] = data;\n    }\n    return sub;\n}\nfunction isSsrNode(value) {\n    return '__brand__' in value && 'currentComponentNode' in value;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaWJlci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaWduYWwvc3Vic2NyaWJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFRcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2hELE1BQU0sVUFBVSxhQUFhLENBQzNCLE1BQWdCLEVBQ2hCLElBQTZCLEVBQzdCLElBQWM7SUFFZCxJQUFJLENBQUUsTUFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDM0MsSUFBSSxRQUFRLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxDQUFDO1lBQ0wsTUFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBSSxNQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULEdBQUcscUNBQTZCLEdBQUcsSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxLQUFVO0lBQzNCLE9BQU8sV0FBVyxJQUFJLEtBQUssSUFBSSxzQkFBc0IsSUFBSSxLQUFLLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFFCYWNrUmVmcyB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7XG4gIHR5cGUgQ29uc3VtZXIsXG4gIEVmZmVjdFByb3BlcnR5LFxuICB0eXBlIEVmZmVjdFN1YnNjcmlwdGlvbixcbiAgRWZmZWN0U3Vic2NyaXB0aW9uUHJvcCxcbn0gZnJvbSAnLi9zaWduYWwnO1xuaW1wb3J0IHR5cGUgeyBJU3NyTm9kZSB9IGZyb20gJy4uL3Nzci9zc3ItdHlwZXMnO1xuaW1wb3J0IHsgX0VGRkVDVF9CQUNLX1JFRiB9IGZyb20gJy4uL3NpZ25hbC9mbGFncyc7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IEJhY2tSZWYgfSBmcm9tICcuL3NpZ25hbC1jbGVhbnVwJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN1YnNjcmliZXIoXG4gIGVmZmVjdDogQ29uc3VtZXIsXG4gIHByb3A6IEVmZmVjdFByb3BlcnR5IHwgc3RyaW5nLFxuICBkYXRhPzogdW5rbm93blxuKTogRWZmZWN0U3Vic2NyaXB0aW9uIHtcbiAgaWYgKCEoZWZmZWN0IGFzIEJhY2tSZWYpW19FRkZFQ1RfQkFDS19SRUZdKSB7XG4gICAgaWYgKGlzU2VydmVyICYmIGlzU3NyTm9kZShlZmZlY3QpKSB7XG4gICAgICBlZmZlY3Quc2V0UHJvcChRQmFja1JlZnMsIG5ldyBNYXAoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIChlZmZlY3QgYXMgQmFja1JlZilbX0VGRkVDVF9CQUNLX1JFRl0gPSBuZXcgTWFwKCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHN1Yk1hcCA9IChlZmZlY3QgYXMgYW55KVtfRUZGRUNUX0JBQ0tfUkVGXTtcbiAgbGV0IHN1YiA9IHN1Yk1hcC5nZXQocHJvcCk7XG4gIGlmICghc3ViKSB7XG4gICAgc3ViID0gW2VmZmVjdCwgcHJvcF07XG4gICAgc3ViTWFwLnNldChwcm9wLCBzdWIpO1xuICB9XG4gIGlmIChkYXRhKSB7XG4gICAgc3ViW0VmZmVjdFN1YnNjcmlwdGlvblByb3AuREFUQV0gPSBkYXRhO1xuICB9XG4gIHJldHVybiBzdWI7XG59XG5cbmZ1bmN0aW9uIGlzU3NyTm9kZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgSVNzck5vZGUge1xuICByZXR1cm4gJ19fYnJhbmRfXycgaW4gdmFsdWUgJiYgJ2N1cnJlbnRDb21wb25lbnROb2RlJyBpbiB2YWx1ZTtcbn1cbiJdfQ==","/**\n * @file\n *\n *   Signals come in two types:\n *\n *   1. `Signal` - A storage of data\n *   2. `ComputedSignal` - A signal which is computed from other signals.\n *\n *   ## Why is `ComputedSignal` different?\n *\n *   - It needs to store a function which needs to re-run.\n *   - It is `Readonly` because it is computed.\n */\nimport { isDev } from '@qwik.dev/core/build';\nimport { isDomContainer } from '../client/dom-container';\nimport { pad, qwikDebugToString } from '../debug';\nimport { assertDefined, assertFalse, assertTrue } from '../shared/error/assert';\nimport { qError } from '../shared/error/error';\nimport { ELEMENT_PROPS, OnRenderProp } from '../shared/utils/markers';\nimport { isPromise } from '../shared/utils/promises';\nimport { qDev } from '../shared/utils/qdev';\nimport { SerializerSymbol } from '../shared/utils/serialize-utils';\nimport { trackSignal, tryGetInvokeContext } from '../use/use-core';\nimport { isTask } from '../use/use-task';\nimport { NEEDS_COMPUTATION, _EFFECT_BACK_REF } from './flags';\nimport { getSubscriber } from './subscriber';\nconst DEBUG = false;\n// eslint-disable-next-line no-console\nconst log = (...args) => console.log('SIGNAL', ...args.map(qwikDebugToString));\nexport const throwIfQRLNotResolved = (qrl) => {\n    const resolved = qrl.resolved;\n    if (!resolved) {\n        // When we are creating a signal using a use method, we need to ensure\n        // that the computation can be lazy and therefore we need to unsure\n        // that the QRL is resolved.\n        // When we re-create the signal from serialization (we don't create the signal\n        // using useMethod) it is OK to not resolve it until the graph is marked as dirty.\n        throw qrl.resolve();\n    }\n};\n/** @public */\nexport const isSignal = (value) => {\n    return value instanceof SignalImpl;\n};\n/** @internal */\nexport class SubscriptionData {\n    data;\n    constructor(data) {\n        this.data = data;\n    }\n}\nexport class SignalImpl {\n    $untrackedValue$;\n    /** Store a list of effects which are dependent on this signal. */\n    $effects$ = null;\n    $container$ = null;\n    constructor(container, value) {\n        this.$container$ = container;\n        this.$untrackedValue$ = value;\n        DEBUG && log('new', this);\n    }\n    get untrackedValue() {\n        return this.$untrackedValue$;\n    }\n    // TODO: should we disallow setting the value directly?\n    set untrackedValue(value) {\n        this.$untrackedValue$ = value;\n    }\n    get value() {\n        const ctx = tryGetInvokeContext();\n        if (ctx) {\n            if (this.$container$ === null) {\n                if (!ctx.$container$) {\n                    return this.untrackedValue;\n                }\n                // Grab the container now we have access to it\n                this.$container$ = ctx.$container$;\n            }\n            else {\n                assertTrue(!ctx.$container$ || ctx.$container$ === this.$container$, 'Do not use signals across containers');\n            }\n            const effectSubscriber = ctx.$effectSubscriber$;\n            if (effectSubscriber) {\n                const effects = (this.$effects$ ||= new Set());\n                // Let's make sure that we have a reference to this effect.\n                // Adding reference is essentially adding a subscription, so if the signal\n                // changes we know who to notify.\n                ensureContainsSubscription(effects, effectSubscriber);\n                // But when effect is scheduled in needs to be able to know which signals\n                // to unsubscribe from. So we need to store the reference from the effect back\n                // to this signal.\n                ensureContainsBackRef(effectSubscriber, this);\n                addQrlToSerializationCtx(effectSubscriber, this.$container$);\n                DEBUG && log('read->sub', pad('\\n' + this.toString(), '  '));\n            }\n        }\n        return this.untrackedValue;\n    }\n    set value(value) {\n        if (value !== this.$untrackedValue$) {\n            DEBUG &&\n                log('Signal.set', this.$untrackedValue$, '->', value, pad('\\n' + this.toString(), '  '));\n            this.$untrackedValue$ = value;\n            triggerEffects(this.$container$, this, this.$effects$);\n        }\n    }\n    // prevent accidental use as value\n    valueOf() {\n        if (qDev) {\n            throw qError(45 /* QError.cannotCoerceSignal */);\n        }\n    }\n    toString() {\n        if (isDev) {\n            return (`[${this.constructor.name}${this.$flags$ & 1 /* SignalFlags.INVALID */ ? ' INVALID' : ''} ${String(this.$untrackedValue$)}]` +\n                (Array.from(this.$effects$ || [])\n                    .map((e) => '\\n -> ' + pad(qwikDebugToString(e[0]), '    '))\n                    .join('\\n') || ''));\n        }\n        else {\n            return this.constructor.name;\n        }\n    }\n    toJSON() {\n        return { value: this.$untrackedValue$ };\n    }\n}\nexport const ensureContainsSubscription = (array, effectSubscription) => {\n    array.add(effectSubscription);\n};\n/** Ensure the item is in back refs set */\nexport const ensureContainsBackRef = (array, value) => {\n    array[2 /* EffectSubscriptionProp.BACK_REF */] ||= new Set();\n    array[2 /* EffectSubscriptionProp.BACK_REF */].add(value);\n};\nexport const addQrlToSerializationCtx = (effectSubscriber, container) => {\n    if (!!container && !isDomContainer(container)) {\n        const effect = effectSubscriber[0 /* EffectSubscriptionProp.CONSUMER */];\n        const property = effectSubscriber[1 /* EffectSubscriptionProp.PROPERTY */];\n        let qrl = null;\n        if (isTask(effect)) {\n            qrl = effect.$qrl$;\n        }\n        else if (effect instanceof ComputedSignalImpl) {\n            qrl = effect.$computeQrl$;\n        }\n        else if (property === \":\" /* EffectProperty.COMPONENT */) {\n            qrl = container.getHostProp(effect, OnRenderProp);\n        }\n        if (qrl) {\n            container.serializationCtx.$eventQrls$.add(qrl);\n        }\n    }\n};\nexport const triggerEffects = (container, signal, effects) => {\n    const isBrowser = isDomContainer(container);\n    if (effects) {\n        const scheduleEffect = (effectSubscription) => {\n            const consumer = effectSubscription[0 /* EffectSubscriptionProp.CONSUMER */];\n            const property = effectSubscription[1 /* EffectSubscriptionProp.PROPERTY */];\n            assertDefined(container, 'Container must be defined.');\n            if (isTask(consumer)) {\n                consumer.$flags$ |= 8 /* TaskFlags.DIRTY */;\n                DEBUG && log('schedule.consumer.task', pad('\\n' + String(consumer), '  '));\n                let choreType = 3 /* ChoreType.TASK */;\n                if (consumer.$flags$ & 1 /* TaskFlags.VISIBLE_TASK */) {\n                    choreType = 32 /* ChoreType.VISIBLE */;\n                }\n                container.$scheduler$(choreType, consumer);\n            }\n            else if (consumer instanceof SignalImpl) {\n                // we don't schedule ComputedSignal/DerivedSignal directly, instead we invalidate it and\n                // and schedule the signals effects (recursively)\n                if (consumer instanceof ComputedSignalImpl) {\n                    // Ensure that the computed signal's QRL is resolved.\n                    // If not resolved schedule it to be resolved.\n                    if (!consumer.$computeQrl$.resolved) {\n                        container.$scheduler$(1 /* ChoreType.QRL_RESOLVE */, null, consumer.$computeQrl$);\n                    }\n                }\n                consumer.$invalidate$();\n            }\n            else if (property === \":\" /* EffectProperty.COMPONENT */) {\n                const host = consumer;\n                const qrl = container.getHostProp(host, OnRenderProp);\n                assertDefined(qrl, 'Component must have QRL');\n                const props = container.getHostProp(host, ELEMENT_PROPS);\n                container.$scheduler$(6 /* ChoreType.COMPONENT */, host, qrl, props);\n            }\n            else if (isBrowser) {\n                if (property === \".\" /* EffectProperty.VNODE */) {\n                    const host = consumer;\n                    container.$scheduler$(4 /* ChoreType.NODE_DIFF */, host, host, signal);\n                }\n                else {\n                    const host = consumer;\n                    const effectData = effectSubscription[3 /* EffectSubscriptionProp.DATA */];\n                    if (effectData instanceof SubscriptionData) {\n                        const data = effectData.data;\n                        const payload = {\n                            ...data,\n                            $value$: signal,\n                        };\n                        container.$scheduler$(5 /* ChoreType.NODE_PROP */, host, property, payload);\n                    }\n                }\n            }\n        };\n        for (const effect of effects) {\n            scheduleEffect(effect);\n        }\n    }\n    DEBUG && log('done scheduling');\n};\n/**\n * A signal which is computed from other signals.\n *\n * The value is available synchronously, but the computation is done lazily.\n */\nexport class ComputedSignalImpl extends SignalImpl {\n    /**\n     * The compute function is stored here.\n     *\n     * The computed functions must be executed synchronously (because of this we need to eagerly\n     * resolve the QRL during the mark dirty phase so that any call to it will be synchronous). )\n     */\n    $computeQrl$;\n    $flags$;\n    $forceRunEffects$ = false;\n    [_EFFECT_BACK_REF] = null;\n    constructor(container, fn, \n    // We need a separate flag to know when the computation needs running because\n    // we need the old value to know if effects need running after computation\n    flags = 1 /* SignalFlags.INVALID */) {\n        // The value is used for comparison when signals trigger, which can only happen\n        // when it was calculated before. Therefore we can pass whatever we like.\n        super(container, NEEDS_COMPUTATION);\n        this.$computeQrl$ = fn;\n        this.$flags$ = flags;\n    }\n    $invalidate$() {\n        this.$flags$ |= 1 /* SignalFlags.INVALID */;\n        this.$forceRunEffects$ = false;\n        this.$container$?.$scheduler$(7 /* ChoreType.RECOMPUTE_AND_SCHEDULE_EFFECTS */, null, this);\n    }\n    /**\n     * Use this to force running subscribers, for example when the calculated value has mutated but\n     * remained the same object\n     */\n    force() {\n        this.$forceRunEffects$ = true;\n        this.$container$?.$scheduler$(7 /* ChoreType.RECOMPUTE_AND_SCHEDULE_EFFECTS */, null, this);\n    }\n    get untrackedValue() {\n        const didChange = this.$computeIfNeeded$();\n        if (didChange) {\n            this.$forceRunEffects$ = didChange;\n        }\n        assertFalse(this.$untrackedValue$ === NEEDS_COMPUTATION, 'Invalid state');\n        return this.$untrackedValue$;\n    }\n    $computeIfNeeded$() {\n        if (!(this.$flags$ & 1 /* SignalFlags.INVALID */)) {\n            return false;\n        }\n        const computeQrl = this.$computeQrl$;\n        throwIfQRLNotResolved(computeQrl);\n        const ctx = tryGetInvokeContext();\n        const previousEffectSubscription = ctx?.$effectSubscriber$;\n        ctx && (ctx.$effectSubscriber$ = getSubscriber(this, \".\" /* EffectProperty.VNODE */));\n        try {\n            const untrackedValue = computeQrl.getFn(ctx)();\n            if (isPromise(untrackedValue)) {\n                throw qError(46 /* QError.computedNotSync */, [\n                    computeQrl.dev ? computeQrl.dev.file : '',\n                    computeQrl.$hash$,\n                ]);\n            }\n            DEBUG && log('Signal.$compute$', untrackedValue);\n            this.$flags$ &= ~1 /* SignalFlags.INVALID */;\n            const didChange = untrackedValue !== this.$untrackedValue$;\n            if (didChange) {\n                this.$untrackedValue$ = untrackedValue;\n            }\n            return didChange;\n        }\n        finally {\n            if (ctx) {\n                ctx.$effectSubscriber$ = previousEffectSubscription;\n            }\n        }\n    }\n    // Make this signal read-only\n    set value(_) {\n        throw qError(47 /* QError.computedReadOnly */);\n    }\n    // Getters don't get inherited when overriding a setter\n    get value() {\n        return super.value;\n    }\n}\nexport class WrappedSignal extends SignalImpl {\n    $args$;\n    $func$;\n    $funcStr$;\n    $flags$;\n    $hostElement$ = null;\n    $forceRunEffects$ = false;\n    [_EFFECT_BACK_REF] = null;\n    constructor(container, fn, args, fnStr, \n    // We need a separate flag to know when the computation needs running because\n    // we need the old value to know if effects need running after computation\n    flags = 1 /* SignalFlags.INVALID */ | 2 /* WrappedSignalFlags.UNWRAP */) {\n        super(container, NEEDS_COMPUTATION);\n        this.$args$ = args;\n        this.$func$ = fn;\n        this.$funcStr$ = fnStr;\n        this.$flags$ = flags;\n    }\n    $invalidate$() {\n        this.$flags$ |= 1 /* SignalFlags.INVALID */;\n        this.$forceRunEffects$ = false;\n        // We should only call subscribers if the calculation actually changed.\n        // Therefore, we need to calculate the value now.\n        this.$container$?.$scheduler$(7 /* ChoreType.RECOMPUTE_AND_SCHEDULE_EFFECTS */, this.$hostElement$, this);\n    }\n    /**\n     * Use this to force running subscribers, for example when the calculated value has mutated but\n     * remained the same object.\n     */\n    force() {\n        this.$flags$ |= 1 /* SignalFlags.INVALID */;\n        this.$forceRunEffects$ = false;\n        triggerEffects(this.$container$, this, this.$effects$);\n    }\n    get untrackedValue() {\n        const didChange = this.$computeIfNeeded$();\n        if (didChange) {\n            this.$forceRunEffects$ = didChange;\n        }\n        assertFalse(this.$untrackedValue$ === NEEDS_COMPUTATION, 'Invalid state');\n        return this.$untrackedValue$;\n    }\n    $computeIfNeeded$() {\n        if (!(this.$flags$ & 1 /* SignalFlags.INVALID */)) {\n            return false;\n        }\n        const untrackedValue = trackSignal(() => this.$func$(...this.$args$), this, \".\" /* EffectProperty.VNODE */, this.$container$);\n        // TODO: we should remove invalid flag here\n        // this.$flags$ &= ~SignalFlags.INVALID;\n        const didChange = untrackedValue !== this.$untrackedValue$;\n        if (didChange) {\n            this.$untrackedValue$ = untrackedValue;\n        }\n        return didChange;\n    }\n    // Make this signal read-only\n    set value(_) {\n        throw qError(48 /* QError.wrappedReadOnly */);\n    }\n    // Getters don't get inherited when overriding a setter\n    get value() {\n        return super.value;\n    }\n}\n/**\n * A signal which provides a non-serializable value. It works like a computed signal, but it is\n * handled slightly differently during serdes.\n *\n * @public\n */\nexport class SerializerSignalImpl extends ComputedSignalImpl {\n    constructor(container, argQrl) {\n        super(container, argQrl);\n    }\n    $didInitialize$ = false;\n    $computeIfNeeded$() {\n        if (!(this.$flags$ & 1 /* SignalFlags.INVALID */)) {\n            return false;\n        }\n        throwIfQRLNotResolved(this.$computeQrl$);\n        let arg = this.$computeQrl$.resolved;\n        if (typeof arg === 'function') {\n            arg = arg();\n        }\n        const { deserialize, initial } = arg;\n        const update = arg.update;\n        const currentValue = this.$untrackedValue$ === NEEDS_COMPUTATION ? initial : this.$untrackedValue$;\n        const untrackedValue = trackSignal(() => this.$didInitialize$\n            ? update?.(currentValue)\n            : deserialize(currentValue), this, \".\" /* EffectProperty.VNODE */, this.$container$);\n        DEBUG && log('SerializerSignal.$compute$', untrackedValue);\n        const didChange = (this.$didInitialize$ && untrackedValue !== 'undefined') ||\n            untrackedValue !== this.$untrackedValue$;\n        this.$flags$ &= ~1 /* SignalFlags.INVALID */;\n        this.$didInitialize$ = true;\n        if (didChange) {\n            this.$untrackedValue$ = untrackedValue;\n        }\n        return didChange;\n    }\n}\n/** @internal */\nexport const isSerializerObj = (obj) => {\n    return (typeof obj === 'object' && obj !== null && typeof obj[SerializerSymbol] === 'function');\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NpZ25hbC9zaWduYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWxELE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU92RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25FLE9BQU8sRUFBbUIsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBRXBCLHNDQUFzQztBQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFH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VyxDQUFDLGdCQUFnQixDQUFDLEtBQUssVUFBVSxDQUNoRyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqICAgU2lnbmFscyBjb21lIGluIHR3byB0eXBlczpcbiAqXG4gKiAgIDEuIGBTaWduYWxgIC0gQSBzdG9yYWdlIG9mIGRhdGFcbiAqICAgMi4gYENvbXB1dGVkU2lnbmFsYCAtIEEgc2lnbmFsIHdoaWNoIGlzIGNvbXB1dGVkIGZyb20gb3RoZXIgc2lnbmFscy5cbiAqXG4gKiAgICMjIFdoeSBpcyBgQ29tcHV0ZWRTaWduYWxgIGRpZmZlcmVudD9cbiAqXG4gKiAgIC0gSXQgbmVlZHMgdG8gc3RvcmUgYSBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byByZS1ydW4uXG4gKiAgIC0gSXQgaXMgYFJlYWRvbmx5YCBiZWNhdXNlIGl0IGlzIGNvbXB1dGVkLlxuICovXG5pbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IGlzRG9tQ29udGFpbmVyIH0gZnJvbSAnLi4vY2xpZW50L2RvbS1jb250YWluZXInO1xuaW1wb3J0IHR5cGUgeyBWTm9kZSB9IGZyb20gJy4uL2NsaWVudC90eXBlcyc7XG5pbXBvcnQgeyBwYWQsIHF3aWtEZWJ1Z1RvU3RyaW5nIH0gZnJvbSAnLi4vZGVidWcnO1xuaW1wb3J0IHR5cGUgeyBPblJlbmRlckZuIH0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudC5wdWJsaWMnO1xuaW1wb3J0IHsgYXNzZXJ0RGVmaW5lZCwgYXNzZXJ0RmFsc2UsIGFzc2VydFRydWUgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvYXNzZXJ0JztcbmltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Vycm9yJztcbmltcG9ydCB0eXBlIHsgUHJvcHMgfSBmcm9tICcuLi9zaGFyZWQvanN4L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IHR5cGUgUVJMSW50ZXJuYWwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLnB1YmxpYyc7XG5pbXBvcnQgeyB0eXBlIE5vZGVQcm9wRGF0YSwgdHlwZSBOb2RlUHJvcFBheWxvYWQgfSBmcm9tICcuLi9zaGFyZWQvc2NoZWR1bGVyJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyLCBIb3N0RWxlbWVudCB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBDaG9yZVR5cGUgfSBmcm9tICcuLi9zaGFyZWQvdXRpbC1jaG9yZS10eXBlJztcbmltcG9ydCB7IEVMRU1FTlRfUFJPUFMsIE9uUmVuZGVyUHJvcCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9wcm9taXNlcyc7XG5pbXBvcnQgeyBxRGV2IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHsgU2VyaWFsaXplclN5bWJvbCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9zZXJpYWxpemUtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBJU3NyTm9kZSwgU1NSQ29udGFpbmVyIH0gZnJvbSAnLi4vc3NyL3Nzci10eXBlcyc7XG5pbXBvcnQgeyB0cmFja1NpZ25hbCwgdHJ5R2V0SW52b2tlQ29udGV4dCB9IGZyb20gJy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyBUYXNrLCBUYXNrRmxhZ3MsIGlzVGFzayB9IGZyb20gJy4uL3VzZS91c2UtdGFzayc7XG5pbXBvcnQgeyBORUVEU19DT01QVVRBVElPTiwgX0VGRkVDVF9CQUNLX1JFRiB9IGZyb20gJy4vZmxhZ3MnO1xuaW1wb3J0IHsgdHlwZSBCYWNrUmVmIH0gZnJvbSAnLi9zaWduYWwtY2xlYW51cCc7XG5pbXBvcnQgdHlwZSB7IFNpZ25hbCwgUmVhZG9ubHlTaWduYWwgfSBmcm9tICcuL3NpZ25hbC5wdWJsaWMnO1xuaW1wb3J0IHR5cGUgeyBUYXJnZXRUeXBlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgeyBnZXRTdWJzY3JpYmVyIH0gZnJvbSAnLi9zdWJzY3JpYmVyJztcblxuY29uc3QgREVCVUcgPSBmYWxzZTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbmNvbnN0IGxvZyA9ICguLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2coJ1NJR05BTCcsIC4uLmFyZ3MubWFwKHF3aWtEZWJ1Z1RvU3RyaW5nKSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuYWxSZWFkb25seVNpZ25hbDxUID0gdW5rbm93bj4gZXh0ZW5kcyBSZWFkb25seVNpZ25hbDxUPiB7XG4gIHJlYWRvbmx5IHVudHJhY2tlZFZhbHVlOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsU2lnbmFsPFQgPSBhbnk+IGV4dGVuZHMgSW50ZXJuYWxSZWFkb25seVNpZ25hbDxUPiB7XG4gIHZhbHVlOiBUO1xuICB1bnRyYWNrZWRWYWx1ZTogVDtcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gU2lnbmFsRmxhZ3Mge1xuICBJTlZBTElEID0gMSxcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gV3JhcHBlZFNpZ25hbEZsYWdzIHtcbiAgLy8gc2hvdWxkIHN1YnNjcmliZSB0byB2YWx1ZSBhbmQgYmUgdW53cmFwcGVkIGZvciBQcm9wc1Byb3h5XG4gIFVOV1JBUCA9IDIsXG59XG5cbmV4cG9ydCB0eXBlIEFsbFNpZ25hbEZsYWdzID0gU2lnbmFsRmxhZ3MgfCBXcmFwcGVkU2lnbmFsRmxhZ3M7XG5cbmV4cG9ydCBjb25zdCB0aHJvd0lmUVJMTm90UmVzb2x2ZWQgPSAocXJsOiBRUkwpID0+IHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBxcmwucmVzb2x2ZWQ7XG4gIGlmICghcmVzb2x2ZWQpIHtcbiAgICAvLyBXaGVuIHdlIGFyZSBjcmVhdGluZyBhIHNpZ25hbCB1c2luZyBhIHVzZSBtZXRob2QsIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgLy8gdGhhdCB0aGUgY29tcHV0YXRpb24gY2FuIGJlIGxhenkgYW5kIHRoZXJlZm9yZSB3ZSBuZWVkIHRvIHVuc3VyZVxuICAgIC8vIHRoYXQgdGhlIFFSTCBpcyByZXNvbHZlZC5cbiAgICAvLyBXaGVuIHdlIHJlLWNyZWF0ZSB0aGUgc2lnbmFsIGZyb20gc2VyaWFsaXphdGlvbiAod2UgZG9uJ3QgY3JlYXRlIHRoZSBzaWduYWxcbiAgICAvLyB1c2luZyB1c2VNZXRob2QpIGl0IGlzIE9LIHRvIG5vdCByZXNvbHZlIGl0IHVudGlsIHRoZSBncmFwaCBpcyBtYXJrZWQgYXMgZGlydHkuXG4gICAgdGhyb3cgcXJsLnJlc29sdmUoKTtcbiAgfVxufTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBpc1NpZ25hbCA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgU2lnbmFsPHVua25vd24+ID0+IHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2lnbmFsSW1wbDtcbn07XG5cbi8qKlxuICogRWZmZWN0IGlzIHNvbWV0aGluZyB3aGljaCBuZWVkcyB0byBoYXBwZW4gKHNpZGUtZWZmZWN0KSBkdWUgdG8gc2lnbmFsIHZhbHVlIGNoYW5nZS5cbiAqXG4gKiBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgZWZmZWN0czpcbiAqXG4gKiAtIGBUYXNrYDogYHVzZVRhc2tgLCBgdXNlVmlzaWJsZVRhc2tgLCBgdXNlUmVzb3VyY2VgXG4gKiAtIGBWTm9kZWAgYW5kIGBJU3NyTm9kZWA6IEVpdGhlciBhIGNvbXBvbmVudCBvciBgPFNpZ25hbD5gXG4gKiAtIGBTaWduYWwyYDogQSBkZXJpdmVkIHNpZ25hbCB3aGljaCBjb250YWlucyBhIGNvbXB1dGF0aW9uIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBDb25zdW1lciA9IFRhc2sgfCBWTm9kZSB8IElTc3JOb2RlIHwgU2lnbmFsSW1wbDtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvbkRhdGEge1xuICBkYXRhOiBOb2RlUHJvcERhdGE7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogTm9kZVByb3BEYXRhKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGVmZmVjdCBjb25zdW1lciBwbHVzIHR5cGUgb2YgZWZmZWN0LCBiYWNrIHJlZmVyZW5jZXMgdG8gcHJvZHVjZXJzIGFuZCBhZGRpdGlvbmFsIGRhdGFcbiAqXG4gKiBBbiBlZmZlY3QgY2FuIGJlIHRyaWdnZXIgYnkgb25lIG9yIG1vcmUgb2Ygc2lnbmFsIGlucHV0cy4gVGhlIGZpcnN0IHN0ZXAgb2YgcmUtcnVubmluZyBhbiBlZmZlY3RcbiAqIGlzIHRvIGNsZWFyIGl0cyBzdWJzY3JpcHRpb25zIHNvIHRoYXQgdGhlIGVmZmVjdCBjYW4gcmUgYWRkIG5ldyBzZXQgb2Ygc3Vic2NyaXB0aW9ucy4gSW4gb3JkZXIgdG9cbiAqIGNsZWFyIHRoZSBzdWJzY3JpcHRpb25zIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBoZXJlLlxuICpcbiAqIEltYWdpbmUgeW91IGhhdmUgZWZmZWN0IHN1Y2ggYXM6XG4gKlxuICogYGBgXG4gKiBmdW5jdGlvbiBlZmZlY3QxKCkge1xuICogICBjb25zb2xlLmxvZyhzaWduYWxBLnZhbHVlID8gc2lnbmFsQi52YWx1ZSA6ICdkZWZhdWx0Jyk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJbiB0aGUgYWJvdmUgY2FzZSB0aGUgYHNpZ25hbEJgIG5lZWRzIHRvIGJlIHVuc3Vic2NyaWJlZCB3aGVuIGBzaWduYWxBYCBpcyBmYWxzeS4gV2UgZG8gdGhpcyBieVxuICogYWx3YXlzIGNsZWFyaW5nIGFsbCBvZiB0aGUgc3Vic2NyaXB0aW9uc1xuICpcbiAqIFRoZSBgRWZmZWN0U3Vic2NyaXB0aW9uYCBzdG9yZXNcbiAqXG4gKiBgYGBcbiAqIHN1YnNjcmlwdGlvbjEgPSBbZWZmZWN0Q29uc3VtZXIxLCBFZmZlY3RQcm9wZXJ0eS5DT01QT05FTlQsIFNldFsoc2lnbmFsQSwgc2lnbmFsQildXTtcbiAqIGBgYFxuICpcbiAqIFRoZSBgc2lnbmFsMWAgYW5kIGBzaWduYWwyYCBiYWNrIHJlZmVyZW5jZXMgYXJlIG5lZWRlZCB0byBcImNsZWFyXCIgZXhpc3Rpbmcgc3Vic2NyaXB0aW9ucy5cbiAqXG4gKiBCb3RoIGBzaWduYWxBYCBhcyB3ZWxsIGFzIGBzaWduYWxCYCB3aWxsIGhhdmUgYSByZWZlcmVuY2UgdG8gYHN1YnNjcmlwdGlvbmAgdG8gdGhlIHNvIHRoYXQgdGhlXG4gKiBlZmZlY3QgY2FuIGJlIHNjaGVkdWxlZCBpZiBlaXRoZXIgYHNpZ25hbEFgIG9yIGBzaWduYWxCYCB0cmlnZ2Vycy4gVGhlIGBzdWJzY3JpcHRpb24xYCBpcyBzaGFyZWRcbiAqIGJldHdlZW4gdGhlIHNpZ25hbHMuXG4gKlxuICogVGhlIHNlY29uZCBwb3NpdGlvbiBgRWZmZWN0UHJvcGVydHl8c3RyaW5nYCBzdG9yZSB0aGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgZWZmZWN0LlxuICpcbiAqIC0gUHJvcGVydHkgbmFtZSBvZiB0aGUgVk5vZGVcbiAqIC0gYEVmZmVjdFByb3BlcnR5LkNPTVBPTkVOVGAgaWYgY29tcG9uZW50XG4gKiAtIGBFZmZlY3RQcm9wZXJ0eS5WTk9ERWAgaWYgVk5vZGVcbiAqL1xuZXhwb3J0IHR5cGUgRWZmZWN0U3Vic2NyaXB0aW9uID0gW1xuICBDb25zdW1lciwgLy8gRWZmZWN0U3Vic2NyaXB0aW9uUHJvcC5DT05TVU1FUlxuICBFZmZlY3RQcm9wZXJ0eSB8IHN0cmluZywgLy8gRWZmZWN0U3Vic2NyaXB0aW9uUHJvcC5QUk9QRVJUWSBvciBzdHJpbmcgZm9yIGF0dHJpYnV0ZXNcbiAgU2V0PFNpZ25hbEltcGwgfCBUYXJnZXRUeXBlPiB8IG51bGwsIC8vIEVmZmVjdFN1YnNjcmlwdGlvblByb3AuQkFDS19SRUZcbiAgU3Vic2NyaXB0aW9uRGF0YSB8IG51bGwsIC8vIEVmZmVjdFN1YnNjcmlwdGlvblByb3AuREFUQVxuXTtcblxuZXhwb3J0IGNvbnN0IGVudW0gRWZmZWN0U3Vic2NyaXB0aW9uUHJvcCB7XG4gIENPTlNVTUVSID0gMCxcbiAgUFJPUEVSVFkgPSAxLFxuICBCQUNLX1JFRiA9IDIsXG4gIERBVEEgPSAzLFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBFZmZlY3RQcm9wZXJ0eSB7XG4gIENPTVBPTkVOVCA9ICc6JyxcbiAgVk5PREUgPSAnLicsXG59XG5cbmV4cG9ydCBjbGFzcyBTaWduYWxJbXBsPFQgPSBhbnk+IGltcGxlbWVudHMgU2lnbmFsPFQ+IHtcbiAgJHVudHJhY2tlZFZhbHVlJDogVDtcblxuICAvKiogU3RvcmUgYSBsaXN0IG9mIGVmZmVjdHMgd2hpY2ggYXJlIGRlcGVuZGVudCBvbiB0aGlzIHNpZ25hbC4gKi9cbiAgJGVmZmVjdHMkOiBudWxsIHwgU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj4gPSBudWxsO1xuXG4gICRjb250YWluZXIkOiBDb250YWluZXIgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihjb250YWluZXI6IENvbnRhaW5lciB8IG51bGwsIHZhbHVlOiBUKSB7XG4gICAgdGhpcy4kY29udGFpbmVyJCA9IGNvbnRhaW5lcjtcbiAgICB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQgPSB2YWx1ZTtcbiAgICBERUJVRyAmJiBsb2coJ25ldycsIHRoaXMpO1xuICB9XG5cbiAgZ2V0IHVudHJhY2tlZFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQ7XG4gIH1cblxuICAvLyBUT0RPOiBzaG91bGQgd2UgZGlzYWxsb3cgc2V0dGluZyB0aGUgdmFsdWUgZGlyZWN0bHk/XG4gIHNldCB1bnRyYWNrZWRWYWx1ZSh2YWx1ZTogVCkge1xuICAgIHRoaXMuJHVudHJhY2tlZFZhbHVlJCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIGNvbnN0IGN0eCA9IHRyeUdldEludm9rZUNvbnRleHQoKTtcbiAgICBpZiAoY3R4KSB7XG4gICAgICBpZiAodGhpcy4kY29udGFpbmVyJCA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoIWN0eC4kY29udGFpbmVyJCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnVudHJhY2tlZFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdyYWIgdGhlIGNvbnRhaW5lciBub3cgd2UgaGF2ZSBhY2Nlc3MgdG8gaXRcbiAgICAgICAgdGhpcy4kY29udGFpbmVyJCA9IGN0eC4kY29udGFpbmVyJDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydFRydWUoXG4gICAgICAgICAgIWN0eC4kY29udGFpbmVyJCB8fCBjdHguJGNvbnRhaW5lciQgPT09IHRoaXMuJGNvbnRhaW5lciQsXG4gICAgICAgICAgJ0RvIG5vdCB1c2Ugc2lnbmFscyBhY3Jvc3MgY29udGFpbmVycydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVmZmVjdFN1YnNjcmliZXIgPSBjdHguJGVmZmVjdFN1YnNjcmliZXIkO1xuICAgICAgaWYgKGVmZmVjdFN1YnNjcmliZXIpIHtcbiAgICAgICAgY29uc3QgZWZmZWN0cyA9ICh0aGlzLiRlZmZlY3RzJCB8fD0gbmV3IFNldCgpKTtcbiAgICAgICAgLy8gTGV0J3MgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGlzIGVmZmVjdC5cbiAgICAgICAgLy8gQWRkaW5nIHJlZmVyZW5jZSBpcyBlc3NlbnRpYWxseSBhZGRpbmcgYSBzdWJzY3JpcHRpb24sIHNvIGlmIHRoZSBzaWduYWxcbiAgICAgICAgLy8gY2hhbmdlcyB3ZSBrbm93IHdobyB0byBub3RpZnkuXG4gICAgICAgIGVuc3VyZUNvbnRhaW5zU3Vic2NyaXB0aW9uKGVmZmVjdHMsIGVmZmVjdFN1YnNjcmliZXIpO1xuICAgICAgICAvLyBCdXQgd2hlbiBlZmZlY3QgaXMgc2NoZWR1bGVkIGluIG5lZWRzIHRvIGJlIGFibGUgdG8ga25vdyB3aGljaCBzaWduYWxzXG4gICAgICAgIC8vIHRvIHVuc3Vic2NyaWJlIGZyb20uIFNvIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBlZmZlY3QgYmFja1xuICAgICAgICAvLyB0byB0aGlzIHNpZ25hbC5cbiAgICAgICAgZW5zdXJlQ29udGFpbnNCYWNrUmVmKGVmZmVjdFN1YnNjcmliZXIsIHRoaXMpO1xuICAgICAgICBhZGRRcmxUb1NlcmlhbGl6YXRpb25DdHgoZWZmZWN0U3Vic2NyaWJlciwgdGhpcy4kY29udGFpbmVyJCk7XG4gICAgICAgIERFQlVHICYmIGxvZygncmVhZC0+c3ViJywgcGFkKCdcXG4nICsgdGhpcy50b1N0cmluZygpLCAnICAnKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVudHJhY2tlZFZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy4kdW50cmFja2VkVmFsdWUkKSB7XG4gICAgICBERUJVRyAmJlxuICAgICAgICBsb2coJ1NpZ25hbC5zZXQnLCB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQsICctPicsIHZhbHVlLCBwYWQoJ1xcbicgKyB0aGlzLnRvU3RyaW5nKCksICcgICcpKTtcbiAgICAgIHRoaXMuJHVudHJhY2tlZFZhbHVlJCA9IHZhbHVlO1xuICAgICAgdHJpZ2dlckVmZmVjdHModGhpcy4kY29udGFpbmVyJCwgdGhpcywgdGhpcy4kZWZmZWN0cyQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByZXZlbnQgYWNjaWRlbnRhbCB1c2UgYXMgdmFsdWVcbiAgdmFsdWVPZigpIHtcbiAgICBpZiAocURldikge1xuICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5jYW5ub3RDb2VyY2VTaWduYWwpO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGlmIChpc0Rldikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYFske3RoaXMuY29uc3RydWN0b3IubmFtZX0keyh0aGlzIGFzIGFueSkuJGZsYWdzJCAmIFNpZ25hbEZsYWdzLklOVkFMSUQgPyAnIElOVkFMSUQnIDogJyd9ICR7U3RyaW5nKHRoaXMuJHVudHJhY2tlZFZhbHVlJCl9XWAgK1xuICAgICAgICAoQXJyYXkuZnJvbSh0aGlzLiRlZmZlY3RzJCB8fCBbXSlcbiAgICAgICAgICAubWFwKChlKSA9PiAnXFxuIC0+ICcgKyBwYWQocXdpa0RlYnVnVG9TdHJpbmcoZVswXSksICcgICAgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcbicpIHx8ICcnKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG4gIH1cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZW5zdXJlQ29udGFpbnNTdWJzY3JpcHRpb24gPSAoXG4gIGFycmF5OiBTZXQ8RWZmZWN0U3Vic2NyaXB0aW9uPixcbiAgZWZmZWN0U3Vic2NyaXB0aW9uOiBFZmZlY3RTdWJzY3JpcHRpb25cbikgPT4ge1xuICBhcnJheS5hZGQoZWZmZWN0U3Vic2NyaXB0aW9uKTtcbn07XG5cbi8qKiBFbnN1cmUgdGhlIGl0ZW0gaXMgaW4gYmFjayByZWZzIHNldCAqL1xuZXhwb3J0IGNvbnN0IGVuc3VyZUNvbnRhaW5zQmFja1JlZiA9IChhcnJheTogRWZmZWN0U3Vic2NyaXB0aW9uLCB2YWx1ZTogYW55KSA9PiB7XG4gIGFycmF5W0VmZmVjdFN1YnNjcmlwdGlvblByb3AuQkFDS19SRUZdIHx8PSBuZXcgU2V0KCk7XG4gIGFycmF5W0VmZmVjdFN1YnNjcmlwdGlvblByb3AuQkFDS19SRUZdLmFkZCh2YWx1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkUXJsVG9TZXJpYWxpemF0aW9uQ3R4ID0gKFxuICBlZmZlY3RTdWJzY3JpYmVyOiBFZmZlY3RTdWJzY3JpcHRpb24sXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyIHwgbnVsbFxuKSA9PiB7XG4gIGlmICghIWNvbnRhaW5lciAmJiAhaXNEb21Db250YWluZXIoY29udGFpbmVyKSkge1xuICAgIGNvbnN0IGVmZmVjdCA9IGVmZmVjdFN1YnNjcmliZXJbRWZmZWN0U3Vic2NyaXB0aW9uUHJvcC5DT05TVU1FUl07XG4gICAgY29uc3QgcHJvcGVydHkgPSBlZmZlY3RTdWJzY3JpYmVyW0VmZmVjdFN1YnNjcmlwdGlvblByb3AuUFJPUEVSVFldO1xuICAgIGxldCBxcmw6IFFSTCB8IG51bGwgPSBudWxsO1xuICAgIGlmIChpc1Rhc2soZWZmZWN0KSkge1xuICAgICAgcXJsID0gZWZmZWN0LiRxcmwkO1xuICAgIH0gZWxzZSBpZiAoZWZmZWN0IGluc3RhbmNlb2YgQ29tcHV0ZWRTaWduYWxJbXBsKSB7XG4gICAgICBxcmwgPSBlZmZlY3QuJGNvbXB1dGVRcmwkO1xuICAgIH0gZWxzZSBpZiAocHJvcGVydHkgPT09IEVmZmVjdFByb3BlcnR5LkNPTVBPTkVOVCkge1xuICAgICAgcXJsID0gY29udGFpbmVyLmdldEhvc3RQcm9wPFFSTD4oZWZmZWN0IGFzIElTc3JOb2RlLCBPblJlbmRlclByb3ApO1xuICAgIH1cbiAgICBpZiAocXJsKSB7XG4gICAgICAoY29udGFpbmVyIGFzIFNTUkNvbnRhaW5lcikuc2VyaWFsaXphdGlvbkN0eC4kZXZlbnRRcmxzJC5hZGQocXJsKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0cmlnZ2VyRWZmZWN0cyA9IChcbiAgY29udGFpbmVyOiBDb250YWluZXIgfCBudWxsLFxuICBzaWduYWw6IFNpZ25hbEltcGwgfCBUYXJnZXRUeXBlLFxuICBlZmZlY3RzOiBTZXQ8RWZmZWN0U3Vic2NyaXB0aW9uPiB8IG51bGxcbikgPT4ge1xuICBjb25zdCBpc0Jyb3dzZXIgPSBpc0RvbUNvbnRhaW5lcihjb250YWluZXIpO1xuICBpZiAoZWZmZWN0cykge1xuICAgIGNvbnN0IHNjaGVkdWxlRWZmZWN0ID0gKGVmZmVjdFN1YnNjcmlwdGlvbjogRWZmZWN0U3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjb25zdW1lciA9IGVmZmVjdFN1YnNjcmlwdGlvbltFZmZlY3RTdWJzY3JpcHRpb25Qcm9wLkNPTlNVTUVSXTtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gZWZmZWN0U3Vic2NyaXB0aW9uW0VmZmVjdFN1YnNjcmlwdGlvblByb3AuUFJPUEVSVFldO1xuICAgICAgYXNzZXJ0RGVmaW5lZChjb250YWluZXIsICdDb250YWluZXIgbXVzdCBiZSBkZWZpbmVkLicpO1xuICAgICAgaWYgKGlzVGFzayhjb25zdW1lcikpIHtcbiAgICAgICAgY29uc3VtZXIuJGZsYWdzJCB8PSBUYXNrRmxhZ3MuRElSVFk7XG4gICAgICAgIERFQlVHICYmIGxvZygnc2NoZWR1bGUuY29uc3VtZXIudGFzaycsIHBhZCgnXFxuJyArIFN0cmluZyhjb25zdW1lciksICcgICcpKTtcbiAgICAgICAgbGV0IGNob3JlVHlwZSA9IENob3JlVHlwZS5UQVNLO1xuICAgICAgICBpZiAoY29uc3VtZXIuJGZsYWdzJCAmIFRhc2tGbGFncy5WSVNJQkxFX1RBU0spIHtcbiAgICAgICAgICBjaG9yZVR5cGUgPSBDaG9yZVR5cGUuVklTSUJMRTtcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXIuJHNjaGVkdWxlciQoY2hvcmVUeXBlLCBjb25zdW1lcik7XG4gICAgICB9IGVsc2UgaWYgKGNvbnN1bWVyIGluc3RhbmNlb2YgU2lnbmFsSW1wbCkge1xuICAgICAgICAvLyB3ZSBkb24ndCBzY2hlZHVsZSBDb21wdXRlZFNpZ25hbC9EZXJpdmVkU2lnbmFsIGRpcmVjdGx5LCBpbnN0ZWFkIHdlIGludmFsaWRhdGUgaXQgYW5kXG4gICAgICAgIC8vIGFuZCBzY2hlZHVsZSB0aGUgc2lnbmFscyBlZmZlY3RzIChyZWN1cnNpdmVseSlcbiAgICAgICAgaWYgKGNvbnN1bWVyIGluc3RhbmNlb2YgQ29tcHV0ZWRTaWduYWxJbXBsKSB7XG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGNvbXB1dGVkIHNpZ25hbCdzIFFSTCBpcyByZXNvbHZlZC5cbiAgICAgICAgICAvLyBJZiBub3QgcmVzb2x2ZWQgc2NoZWR1bGUgaXQgdG8gYmUgcmVzb2x2ZWQuXG4gICAgICAgICAgaWYgKCFjb25zdW1lci4kY29tcHV0ZVFybCQucmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci4kc2NoZWR1bGVyJChDaG9yZVR5cGUuUVJMX1JFU09MVkUsIG51bGwsIGNvbnN1bWVyLiRjb21wdXRlUXJsJCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgKGNvbnN1bWVyIGFzIENvbXB1dGVkU2lnbmFsSW1wbDx1bmtub3duPiB8IFdyYXBwZWRTaWduYWw8dW5rbm93bj4pLiRpbnZhbGlkYXRlJCgpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9PT0gRWZmZWN0UHJvcGVydHkuQ09NUE9ORU5UKSB7XG4gICAgICAgIGNvbnN0IGhvc3Q6IEhvc3RFbGVtZW50ID0gY29uc3VtZXIgYXMgYW55O1xuICAgICAgICBjb25zdCBxcmwgPSBjb250YWluZXIuZ2V0SG9zdFByb3A8UVJMSW50ZXJuYWw8T25SZW5kZXJGbjx1bmtub3duPj4+KGhvc3QsIE9uUmVuZGVyUHJvcCk7XG4gICAgICAgIGFzc2VydERlZmluZWQocXJsLCAnQ29tcG9uZW50IG11c3QgaGF2ZSBRUkwnKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBjb250YWluZXIuZ2V0SG9zdFByb3A8UHJvcHM+KGhvc3QsIEVMRU1FTlRfUFJPUFMpO1xuICAgICAgICBjb250YWluZXIuJHNjaGVkdWxlciQoQ2hvcmVUeXBlLkNPTVBPTkVOVCwgaG9zdCwgcXJsLCBwcm9wcyk7XG4gICAgICB9IGVsc2UgaWYgKGlzQnJvd3Nlcikge1xuICAgICAgICBpZiAocHJvcGVydHkgPT09IEVmZmVjdFByb3BlcnR5LlZOT0RFKSB7XG4gICAgICAgICAgY29uc3QgaG9zdDogSG9zdEVsZW1lbnQgPSBjb25zdW1lcjtcbiAgICAgICAgICBjb250YWluZXIuJHNjaGVkdWxlciQoQ2hvcmVUeXBlLk5PREVfRElGRiwgaG9zdCwgaG9zdCwgc2lnbmFsIGFzIFNpZ25hbEltcGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhvc3Q6IEhvc3RFbGVtZW50ID0gY29uc3VtZXI7XG4gICAgICAgICAgY29uc3QgZWZmZWN0RGF0YSA9IGVmZmVjdFN1YnNjcmlwdGlvbltFZmZlY3RTdWJzY3JpcHRpb25Qcm9wLkRBVEFdO1xuICAgICAgICAgIGlmIChlZmZlY3REYXRhIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uRGF0YSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGVmZmVjdERhdGEuZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQ6IE5vZGVQcm9wUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgJHZhbHVlJDogc2lnbmFsIGFzIFNpZ25hbEltcGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29udGFpbmVyLiRzY2hlZHVsZXIkKENob3JlVHlwZS5OT0RFX1BST1AsIGhvc3QsIHByb3BlcnR5LCBwYXlsb2FkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGZvciAoY29uc3QgZWZmZWN0IG9mIGVmZmVjdHMpIHtcbiAgICAgIHNjaGVkdWxlRWZmZWN0KGVmZmVjdCk7XG4gICAgfVxuICB9XG5cbiAgREVCVUcgJiYgbG9nKCdkb25lIHNjaGVkdWxpbmcnKTtcbn07XG5cbnR5cGUgQ29tcHV0ZVFSTDxUPiA9IFFSTEludGVybmFsPCgpID0+IFQ+O1xuXG4vKipcbiAqIEEgc2lnbmFsIHdoaWNoIGlzIGNvbXB1dGVkIGZyb20gb3RoZXIgc2lnbmFscy5cbiAqXG4gKiBUaGUgdmFsdWUgaXMgYXZhaWxhYmxlIHN5bmNocm9ub3VzbHksIGJ1dCB0aGUgY29tcHV0YXRpb24gaXMgZG9uZSBsYXppbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wdXRlZFNpZ25hbEltcGw8VD4gZXh0ZW5kcyBTaWduYWxJbXBsPFQ+IGltcGxlbWVudHMgQmFja1JlZiB7XG4gIC8qKlxuICAgKiBUaGUgY29tcHV0ZSBmdW5jdGlvbiBpcyBzdG9yZWQgaGVyZS5cbiAgICpcbiAgICogVGhlIGNvbXB1dGVkIGZ1bmN0aW9ucyBtdXN0IGJlIGV4ZWN1dGVkIHN5bmNocm9ub3VzbHkgKGJlY2F1c2Ugb2YgdGhpcyB3ZSBuZWVkIHRvIGVhZ2VybHlcbiAgICogcmVzb2x2ZSB0aGUgUVJMIGR1cmluZyB0aGUgbWFyayBkaXJ0eSBwaGFzZSBzbyB0aGF0IGFueSBjYWxsIHRvIGl0IHdpbGwgYmUgc3luY2hyb25vdXMpLiApXG4gICAqL1xuICAkY29tcHV0ZVFybCQ6IENvbXB1dGVRUkw8VD47XG4gICRmbGFncyQ6IFNpZ25hbEZsYWdzO1xuICAkZm9yY2VSdW5FZmZlY3RzJDogYm9vbGVhbiA9IGZhbHNlO1xuICBbX0VGRkVDVF9CQUNLX1JFRl06IE1hcDxFZmZlY3RQcm9wZXJ0eSB8IHN0cmluZywgRWZmZWN0U3Vic2NyaXB0aW9uPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRhaW5lcjogQ29udGFpbmVyIHwgbnVsbCxcbiAgICBmbjogQ29tcHV0ZVFSTDxUPixcbiAgICAvLyBXZSBuZWVkIGEgc2VwYXJhdGUgZmxhZyB0byBrbm93IHdoZW4gdGhlIGNvbXB1dGF0aW9uIG5lZWRzIHJ1bm5pbmcgYmVjYXVzZVxuICAgIC8vIHdlIG5lZWQgdGhlIG9sZCB2YWx1ZSB0byBrbm93IGlmIGVmZmVjdHMgbmVlZCBydW5uaW5nIGFmdGVyIGNvbXB1dGF0aW9uXG4gICAgZmxhZ3MgPSBTaWduYWxGbGFncy5JTlZBTElEXG4gICkge1xuICAgIC8vIFRoZSB2YWx1ZSBpcyB1c2VkIGZvciBjb21wYXJpc29uIHdoZW4gc2lnbmFscyB0cmlnZ2VyLCB3aGljaCBjYW4gb25seSBoYXBwZW5cbiAgICAvLyB3aGVuIGl0IHdhcyBjYWxjdWxhdGVkIGJlZm9yZS4gVGhlcmVmb3JlIHdlIGNhbiBwYXNzIHdoYXRldmVyIHdlIGxpa2UuXG4gICAgc3VwZXIoY29udGFpbmVyLCBORUVEU19DT01QVVRBVElPTik7XG4gICAgdGhpcy4kY29tcHV0ZVFybCQgPSBmbjtcbiAgICB0aGlzLiRmbGFncyQgPSBmbGFncztcbiAgfVxuXG4gICRpbnZhbGlkYXRlJCgpIHtcbiAgICB0aGlzLiRmbGFncyQgfD0gU2lnbmFsRmxhZ3MuSU5WQUxJRDtcbiAgICB0aGlzLiRmb3JjZVJ1bkVmZmVjdHMkID0gZmFsc2U7XG4gICAgdGhpcy4kY29udGFpbmVyJD8uJHNjaGVkdWxlciQoQ2hvcmVUeXBlLlJFQ09NUFVURV9BTkRfU0NIRURVTEVfRUZGRUNUUywgbnVsbCwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogVXNlIHRoaXMgdG8gZm9yY2UgcnVubmluZyBzdWJzY3JpYmVycywgZm9yIGV4YW1wbGUgd2hlbiB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBoYXMgbXV0YXRlZCBidXRcbiAgICogcmVtYWluZWQgdGhlIHNhbWUgb2JqZWN0XG4gICAqL1xuICBmb3JjZSgpIHtcbiAgICB0aGlzLiRmb3JjZVJ1bkVmZmVjdHMkID0gdHJ1ZTtcbiAgICB0aGlzLiRjb250YWluZXIkPy4kc2NoZWR1bGVyJChDaG9yZVR5cGUuUkVDT01QVVRFX0FORF9TQ0hFRFVMRV9FRkZFQ1RTLCBudWxsLCB0aGlzKTtcbiAgfVxuXG4gIGdldCB1bnRyYWNrZWRWYWx1ZSgpIHtcbiAgICBjb25zdCBkaWRDaGFuZ2UgPSB0aGlzLiRjb21wdXRlSWZOZWVkZWQkKCk7XG4gICAgaWYgKGRpZENoYW5nZSkge1xuICAgICAgdGhpcy4kZm9yY2VSdW5FZmZlY3RzJCA9IGRpZENoYW5nZTtcbiAgICB9XG4gICAgYXNzZXJ0RmFsc2UodGhpcy4kdW50cmFja2VkVmFsdWUkID09PSBORUVEU19DT01QVVRBVElPTiwgJ0ludmFsaWQgc3RhdGUnKTtcbiAgICByZXR1cm4gdGhpcy4kdW50cmFja2VkVmFsdWUkO1xuICB9XG5cbiAgJGNvbXB1dGVJZk5lZWRlZCQoKSB7XG4gICAgaWYgKCEodGhpcy4kZmxhZ3MkICYgU2lnbmFsRmxhZ3MuSU5WQUxJRCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY29tcHV0ZVFybCA9IHRoaXMuJGNvbXB1dGVRcmwkO1xuICAgIHRocm93SWZRUkxOb3RSZXNvbHZlZChjb21wdXRlUXJsKTtcblxuICAgIGNvbnN0IGN0eCA9IHRyeUdldEludm9rZUNvbnRleHQoKTtcbiAgICBjb25zdCBwcmV2aW91c0VmZmVjdFN1YnNjcmlwdGlvbiA9IGN0eD8uJGVmZmVjdFN1YnNjcmliZXIkO1xuICAgIGN0eCAmJiAoY3R4LiRlZmZlY3RTdWJzY3JpYmVyJCA9IGdldFN1YnNjcmliZXIodGhpcywgRWZmZWN0UHJvcGVydHkuVk5PREUpKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdW50cmFja2VkVmFsdWUgPSBjb21wdXRlUXJsLmdldEZuKGN0eCkoKSBhcyBUO1xuICAgICAgaWYgKGlzUHJvbWlzZSh1bnRyYWNrZWRWYWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5jb21wdXRlZE5vdFN5bmMsIFtcbiAgICAgICAgICBjb21wdXRlUXJsLmRldiA/IGNvbXB1dGVRcmwuZGV2LmZpbGUgOiAnJyxcbiAgICAgICAgICBjb21wdXRlUXJsLiRoYXNoJCxcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgICBERUJVRyAmJiBsb2coJ1NpZ25hbC4kY29tcHV0ZSQnLCB1bnRyYWNrZWRWYWx1ZSk7XG5cbiAgICAgIHRoaXMuJGZsYWdzJCAmPSB+U2lnbmFsRmxhZ3MuSU5WQUxJRDtcblxuICAgICAgY29uc3QgZGlkQ2hhbmdlID0gdW50cmFja2VkVmFsdWUgIT09IHRoaXMuJHVudHJhY2tlZFZhbHVlJDtcbiAgICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy4kdW50cmFja2VkVmFsdWUkID0gdW50cmFja2VkVmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGlkQ2hhbmdlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoY3R4KSB7XG4gICAgICAgIGN0eC4kZWZmZWN0U3Vic2NyaWJlciQgPSBwcmV2aW91c0VmZmVjdFN1YnNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNYWtlIHRoaXMgc2lnbmFsIHJlYWQtb25seVxuICBzZXQgdmFsdWUoXzogYW55KSB7XG4gICAgdGhyb3cgcUVycm9yKFFFcnJvci5jb21wdXRlZFJlYWRPbmx5KTtcbiAgfVxuICAvLyBHZXR0ZXJzIGRvbid0IGdldCBpbmhlcml0ZWQgd2hlbiBvdmVycmlkaW5nIGEgc2V0dGVyXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gc3VwZXIudmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFdyYXBwZWRTaWduYWw8VD4gZXh0ZW5kcyBTaWduYWxJbXBsPFQ+IGltcGxlbWVudHMgQmFja1JlZiB7XG4gICRhcmdzJDogYW55W107XG4gICRmdW5jJDogKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuICAkZnVuY1N0ciQ6IHN0cmluZyB8IG51bGw7XG5cbiAgJGZsYWdzJDogQWxsU2lnbmFsRmxhZ3M7XG4gICRob3N0RWxlbWVudCQ6IEhvc3RFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICRmb3JjZVJ1bkVmZmVjdHMkOiBib29sZWFuID0gZmFsc2U7XG4gIFtfRUZGRUNUX0JBQ0tfUkVGXTogTWFwPEVmZmVjdFByb3BlcnR5IHwgc3RyaW5nLCBFZmZlY3RTdWJzY3JpcHRpb24+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY29udGFpbmVyOiBDb250YWluZXIgfCBudWxsLFxuICAgIGZuOiAoLi4uYXJnczogYW55W10pID0+IFQsXG4gICAgYXJnczogYW55W10sXG4gICAgZm5TdHI6IHN0cmluZyB8IG51bGwsXG4gICAgLy8gV2UgbmVlZCBhIHNlcGFyYXRlIGZsYWcgdG8ga25vdyB3aGVuIHRoZSBjb21wdXRhdGlvbiBuZWVkcyBydW5uaW5nIGJlY2F1c2VcbiAgICAvLyB3ZSBuZWVkIHRoZSBvbGQgdmFsdWUgdG8ga25vdyBpZiBlZmZlY3RzIG5lZWQgcnVubmluZyBhZnRlciBjb21wdXRhdGlvblxuICAgIGZsYWdzOiBTaWduYWxGbGFncyA9IFNpZ25hbEZsYWdzLklOVkFMSUQgfCBXcmFwcGVkU2lnbmFsRmxhZ3MuVU5XUkFQXG4gICkge1xuICAgIHN1cGVyKGNvbnRhaW5lciwgTkVFRFNfQ09NUFVUQVRJT04pO1xuICAgIHRoaXMuJGFyZ3MkID0gYXJncztcbiAgICB0aGlzLiRmdW5jJCA9IGZuO1xuICAgIHRoaXMuJGZ1bmNTdHIkID0gZm5TdHI7XG4gICAgdGhpcy4kZmxhZ3MkID0gZmxhZ3M7XG4gIH1cblxuICAkaW52YWxpZGF0ZSQoKSB7XG4gICAgdGhpcy4kZmxhZ3MkIHw9IFNpZ25hbEZsYWdzLklOVkFMSUQ7XG4gICAgdGhpcy4kZm9yY2VSdW5FZmZlY3RzJCA9IGZhbHNlO1xuICAgIC8vIFdlIHNob3VsZCBvbmx5IGNhbGwgc3Vic2NyaWJlcnMgaWYgdGhlIGNhbGN1bGF0aW9uIGFjdHVhbGx5IGNoYW5nZWQuXG4gICAgLy8gVGhlcmVmb3JlLCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgdmFsdWUgbm93LlxuICAgIHRoaXMuJGNvbnRhaW5lciQ/LiRzY2hlZHVsZXIkKFxuICAgICAgQ2hvcmVUeXBlLlJFQ09NUFVURV9BTkRfU0NIRURVTEVfRUZGRUNUUyxcbiAgICAgIHRoaXMuJGhvc3RFbGVtZW50JCxcbiAgICAgIHRoaXNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHRvIGZvcmNlIHJ1bm5pbmcgc3Vic2NyaWJlcnMsIGZvciBleGFtcGxlIHdoZW4gdGhlIGNhbGN1bGF0ZWQgdmFsdWUgaGFzIG11dGF0ZWQgYnV0XG4gICAqIHJlbWFpbmVkIHRoZSBzYW1lIG9iamVjdC5cbiAgICovXG4gIGZvcmNlKCkge1xuICAgIHRoaXMuJGZsYWdzJCB8PSBTaWduYWxGbGFncy5JTlZBTElEO1xuICAgIHRoaXMuJGZvcmNlUnVuRWZmZWN0cyQgPSBmYWxzZTtcbiAgICB0cmlnZ2VyRWZmZWN0cyh0aGlzLiRjb250YWluZXIkLCB0aGlzLCB0aGlzLiRlZmZlY3RzJCk7XG4gIH1cblxuICBnZXQgdW50cmFja2VkVmFsdWUoKSB7XG4gICAgY29uc3QgZGlkQ2hhbmdlID0gdGhpcy4kY29tcHV0ZUlmTmVlZGVkJCgpO1xuICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgIHRoaXMuJGZvcmNlUnVuRWZmZWN0cyQgPSBkaWRDaGFuZ2U7XG4gICAgfVxuICAgIGFzc2VydEZhbHNlKHRoaXMuJHVudHJhY2tlZFZhbHVlJCA9PT0gTkVFRFNfQ09NUFVUQVRJT04sICdJbnZhbGlkIHN0YXRlJyk7XG4gICAgcmV0dXJuIHRoaXMuJHVudHJhY2tlZFZhbHVlJDtcbiAgfVxuXG4gICRjb21wdXRlSWZOZWVkZWQkKCkge1xuICAgIGlmICghKHRoaXMuJGZsYWdzJCAmIFNpZ25hbEZsYWdzLklOVkFMSUQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHVudHJhY2tlZFZhbHVlID0gdHJhY2tTaWduYWwoXG4gICAgICAoKSA9PiB0aGlzLiRmdW5jJCguLi50aGlzLiRhcmdzJCksXG4gICAgICB0aGlzLFxuICAgICAgRWZmZWN0UHJvcGVydHkuVk5PREUsXG4gICAgICB0aGlzLiRjb250YWluZXIkIVxuICAgICk7XG4gICAgLy8gVE9ETzogd2Ugc2hvdWxkIHJlbW92ZSBpbnZhbGlkIGZsYWcgaGVyZVxuICAgIC8vIHRoaXMuJGZsYWdzJCAmPSB+U2lnbmFsRmxhZ3MuSU5WQUxJRDtcbiAgICBjb25zdCBkaWRDaGFuZ2UgPSB1bnRyYWNrZWRWYWx1ZSAhPT0gdGhpcy4kdW50cmFja2VkVmFsdWUkO1xuICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgIHRoaXMuJHVudHJhY2tlZFZhbHVlJCA9IHVudHJhY2tlZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZGlkQ2hhbmdlO1xuICB9XG4gIC8vIE1ha2UgdGhpcyBzaWduYWwgcmVhZC1vbmx5XG4gIHNldCB2YWx1ZShfOiBhbnkpIHtcbiAgICB0aHJvdyBxRXJyb3IoUUVycm9yLndyYXBwZWRSZWFkT25seSk7XG4gIH1cbiAgLy8gR2V0dGVycyBkb24ndCBnZXQgaW5oZXJpdGVkIHdoZW4gb3ZlcnJpZGluZyBhIHNldHRlclxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHN1cGVyLnZhbHVlO1xuICB9XG59XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemVyQXJnT2JqZWN0PFQsIFM+ID0ge1xuICAvKipcbiAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCB3aXRoIGluaXRpYWwgb3Igc2VyaWFsaXplZCBkYXRhIHRvIHJlY29uc3RydWN0IGFuIG9iamVjdC4gSWYgbm9cbiAgICogYGluaXRpYWxEYXRhYCBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogVGhpcyBtdXN0IG5vdCByZXR1cm4gYSBQcm9taXNlLlxuICAgKi9cbiAgZGVzZXJpYWxpemU6IChkYXRhOiBBd2FpdGVkPFM+KSA9PiBUO1xuICAvKiogVGhlIGluaXRpYWwgdmFsdWUgdG8gdXNlIHdoZW4gZGVzZXJpYWxpemluZy4gKi9cbiAgaW5pdGlhbD86IFMgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIG9iamVjdCB0byBnZXQgdGhlIHNlcmlhbGl6ZWQgZGF0YS4gWW91IGNhbiByZXR1cm4gYSBQcm9taXNlIGlmIHlvdVxuICAgKiBuZWVkIHRvIGRvIGFzeW5jIHdvcmsuXG4gICAqXG4gICAqIFRoZSByZXN1bHQgbWF5IGJlIGFueXRoaW5nIHRoYXQgUXdpayBjYW4gc2VyaWFsaXplLlxuICAgKlxuICAgKiBJZiB5b3UgZG8gbm90IHByb3ZpZGUgaXQsIHRoZSBvYmplY3Qgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGB1bmRlZmluZWRgLiBIb3dldmVyLCBpZiB0aGUgb2JqZWN0XG4gICAqIGhhcyBhIGBbU2VyaWFsaXplclN5bWJvbF1gIHByb3BlcnR5LCB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc2VyaWFsaXplciBpbnN0ZWFkLlxuICAgKi9cbiAgc2VyaWFsaXplPzogKG9iajogVCkgPT4gUztcbn07XG5cbi8qKlxuICogU2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBjdXN0b20gb2JqZWN0cy5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byB1c2Ugc2NvcGVkIHN0YXRlLCB5b3UgY2FuIHBhc3MgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGFuIG9iamVjdC4gVGhlIGZ1bmN0aW9uIHdpbGxcbiAqIGJlIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IHZhbHVlLCBhbmQgeW91IGNhbiByZXR1cm4gYSBuZXcgdmFsdWUuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemVyQXJnPFQsIFM+ID1cbiAgfCBTZXJpYWxpemVyQXJnT2JqZWN0PFQsIFM+XG4gIHwgKCgpID0+IFNlcmlhbGl6ZXJBcmdPYmplY3Q8VCwgUz4gJiB7XG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiByZWFjdGl2ZSBzdGF0ZSB1c2VkIGR1cmluZyBgZGVzZXJpYWxpemVgIGNoYW5nZXMuIFlvdSBtYXkgbXV0YXRlIHRoZVxuICAgICAgICogY3VycmVudCBvYmplY3QsIG9yIHJldHVybiBhIG5ldyBvYmplY3QuXG4gICAgICAgKlxuICAgICAgICogSWYgaXQgcmV0dXJucyBhIHZhbHVlLCB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgbmV3IHZhbHVlLCBhbmQgbGlzdGVuZXJzIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgICogSWYgbm8gY2hhbmdlIGhhcHBlbmVkLCBkb24ndCByZXR1cm4gYW55dGhpbmcuXG4gICAgICAgKlxuICAgICAgICogSWYgeW91IG11dGF0ZSB0aGUgY3VycmVudCBvYmplY3QsIHlvdSBtdXN0IHJldHVybiBpdCBzbyB0aGF0IGl0IHdpbGwgdHJpZ2dlciBsaXN0ZW5lcnMuXG4gICAgICAgKi9cbiAgICAgIHVwZGF0ZT86IChjdXJyZW50OiBUKSA9PiBUIHwgdm9pZDtcbiAgICB9KTtcblxuLyoqXG4gKiBBIHNpZ25hbCB3aGljaCBwcm92aWRlcyBhIG5vbi1zZXJpYWxpemFibGUgdmFsdWUuIEl0IHdvcmtzIGxpa2UgYSBjb21wdXRlZCBzaWduYWwsIGJ1dCBpdCBpc1xuICogaGFuZGxlZCBzbGlnaHRseSBkaWZmZXJlbnRseSBkdXJpbmcgc2VyZGVzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIFNlcmlhbGl6ZXJTaWduYWxJbXBsPFQsIFM+IGV4dGVuZHMgQ29tcHV0ZWRTaWduYWxJbXBsPFQ+IHtcbiAgY29uc3RydWN0b3IoY29udGFpbmVyOiBDb250YWluZXIgfCBudWxsLCBhcmdRcmw6IFFSTEludGVybmFsPFNlcmlhbGl6ZXJBcmc8VCwgUz4+KSB7XG4gICAgc3VwZXIoY29udGFpbmVyLCBhcmdRcmwgYXMgdW5rbm93biBhcyBDb21wdXRlUVJMPFQ+KTtcbiAgfVxuICAkZGlkSW5pdGlhbGl6ZSQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAkY29tcHV0ZUlmTmVlZGVkJCgpOiBib29sZWFuIHtcbiAgICBpZiAoISh0aGlzLiRmbGFncyQgJiBTaWduYWxGbGFncy5JTlZBTElEKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aHJvd0lmUVJMTm90UmVzb2x2ZWQodGhpcy4kY29tcHV0ZVFybCQpO1xuICAgIGxldCBhcmcgPSAodGhpcy4kY29tcHV0ZVFybCQgYXMgYW55IGFzIFFSTEludGVybmFsPFNlcmlhbGl6ZXJBcmc8VCwgUz4+KS5yZXNvbHZlZCE7XG4gICAgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFyZyA9IGFyZygpO1xuICAgIH1cbiAgICBjb25zdCB7IGRlc2VyaWFsaXplLCBpbml0aWFsIH0gPSBhcmc7XG4gICAgY29uc3QgdXBkYXRlID0gKGFyZyBhcyBhbnkpLnVwZGF0ZSBhcyAoKGN1cnJlbnQ6IFQpID0+IFQpIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9XG4gICAgICB0aGlzLiR1bnRyYWNrZWRWYWx1ZSQgPT09IE5FRURTX0NPTVBVVEFUSU9OID8gaW5pdGlhbCA6IHRoaXMuJHVudHJhY2tlZFZhbHVlJDtcbiAgICBjb25zdCB1bnRyYWNrZWRWYWx1ZSA9IHRyYWNrU2lnbmFsKFxuICAgICAgKCkgPT5cbiAgICAgICAgdGhpcy4kZGlkSW5pdGlhbGl6ZSRcbiAgICAgICAgICA/IHVwZGF0ZT8uKGN1cnJlbnRWYWx1ZSBhcyBUKVxuICAgICAgICAgIDogZGVzZXJpYWxpemUoY3VycmVudFZhbHVlIGFzIEF3YWl0ZWQ8Uz4pLFxuICAgICAgdGhpcyxcbiAgICAgIEVmZmVjdFByb3BlcnR5LlZOT0RFLFxuICAgICAgdGhpcy4kY29udGFpbmVyJCFcbiAgICApO1xuICAgIERFQlVHICYmIGxvZygnU2VyaWFsaXplclNpZ25hbC4kY29tcHV0ZSQnLCB1bnRyYWNrZWRWYWx1ZSk7XG4gICAgY29uc3QgZGlkQ2hhbmdlID1cbiAgICAgICh0aGlzLiRkaWRJbml0aWFsaXplJCAmJiB1bnRyYWNrZWRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHx8XG4gICAgICB1bnRyYWNrZWRWYWx1ZSAhPT0gdGhpcy4kdW50cmFja2VkVmFsdWUkO1xuICAgIHRoaXMuJGZsYWdzJCAmPSB+U2lnbmFsRmxhZ3MuSU5WQUxJRDtcbiAgICB0aGlzLiRkaWRJbml0aWFsaXplJCA9IHRydWU7XG4gICAgaWYgKGRpZENoYW5nZSkge1xuICAgICAgdGhpcy4kdW50cmFja2VkVmFsdWUkID0gdW50cmFja2VkVmFsdWUgYXMgVDtcbiAgICB9XG4gICAgcmV0dXJuIGRpZENoYW5nZTtcbiAgfVxufVxuXG4vLyBUT0RPIG1vdmUgdG8gc2VyaWFsaXplclxuZXhwb3J0IHR5cGUgQ3VzdG9tU2VyaWFsaXphYmxlPFQgZXh0ZW5kcyB7IFtTZXJpYWxpemVyU3ltYm9sXTogKG9iajogYW55KSA9PiBhbnkgfSwgUz4gPSB7XG4gIFtTZXJpYWxpemVyU3ltYm9sXTogKG9iajogVCkgPT4gUztcbn07XG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgaXNTZXJpYWxpemVyT2JqID0gPFQgZXh0ZW5kcyB7IFtTZXJpYWxpemVyU3ltYm9sXTogKG9iajogYW55KSA9PiBhbnkgfSwgUz4oXG4gIG9iajogdW5rbm93blxuKTogb2JqIGlzIEN1c3RvbVNlcmlhbGl6YWJsZTxULCBTPiA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsICYmIHR5cGVvZiAob2JqIGFzIGFueSlbU2VyaWFsaXplclN5bWJvbF0gPT09ICdmdW5jdGlvbidcbiAgKTtcbn07XG4iXX0=","import { pad, qwikDebugToString } from '../debug';\nimport { assertTrue } from '../shared/error/assert';\nimport { tryGetInvokeContext } from '../use/use-core';\nimport { isSerializableObject } from '../shared/utils/types';\nimport { addQrlToSerializationCtx, ensureContainsBackRef, ensureContainsSubscription, triggerEffects, } from './signal';\nconst DEBUG = false;\n// eslint-disable-next-line no-console\nconst log = (...args) => console.log('STORE', ...args.map(qwikDebugToString));\nconst STORE_TARGET = Symbol('store.target');\nconst STORE_HANDLER = Symbol('store.handler');\nexport const STORE_ALL_PROPS = Symbol('store.all');\nexport const getStoreHandler = (value) => {\n    return value[STORE_HANDLER];\n};\nexport const getStoreTarget = (value) => {\n    return value?.[STORE_TARGET] || null;\n};\n/**\n * Get the original object that was wrapped by the store. Useful if you want to clone a store\n * (structuredClone, IndexedDB,...)\n *\n * @public\n */\nexport const unwrapStore = (value) => {\n    return getStoreTarget(value) || value;\n};\nexport const isStore = (value) => {\n    return STORE_TARGET in value;\n};\nexport function createStore(container, obj, flags) {\n    return new Proxy(obj, new StoreHandler(flags, container || null));\n}\nexport const getOrCreateStore = (obj, flags, container) => {\n    if (isSerializableObject(obj) && container) {\n        let store = container.$storeProxyMap$.get(obj);\n        if (!store) {\n            store = createStore(container, obj, flags);\n            container.$storeProxyMap$.set(obj, store);\n        }\n        return store;\n    }\n    return obj;\n};\nexport class StoreHandler {\n    $flags$;\n    $container$;\n    $effects$ = null;\n    constructor($flags$, $container$) {\n        this.$flags$ = $flags$;\n        this.$container$ = $container$;\n    }\n    toString() {\n        return '[Store]';\n    }\n    get(target, prop) {\n        if (typeof prop === 'symbol') {\n            if (prop === STORE_TARGET) {\n                return target;\n            }\n            if (prop === STORE_HANDLER) {\n                return this;\n            }\n            return target[prop];\n        }\n        const ctx = tryGetInvokeContext();\n        const value = target[prop];\n        if (ctx) {\n            if (this.$container$ === null) {\n                if (!ctx.$container$) {\n                    return value;\n                }\n                // Grab the container now we have access to it\n                this.$container$ = ctx.$container$;\n            }\n            else {\n                assertTrue(!ctx.$container$ || ctx.$container$ === this.$container$, 'Do not use signals across containers');\n            }\n            const effectSubscriber = ctx.$effectSubscriber$;\n            if (effectSubscriber) {\n                addStoreEffect(target, Array.isArray(target) ? STORE_ALL_PROPS : prop, this, effectSubscriber);\n            }\n        }\n        if (prop === 'toString' && value === Object.prototype.toString) {\n            return this.toString;\n        }\n        const flags = this.$flags$;\n        if (flags & 1 /* StoreFlags.RECURSIVE */ &&\n            typeof value === 'object' &&\n            value !== null &&\n            !Object.isFrozen(value) &&\n            !isStore(value) &&\n            !Object.isFrozen(target)) {\n            return getOrCreateStore(value, this.$flags$, this.$container$);\n        }\n        return value;\n    }\n    /** In the case of oldValue and value are the same, the effects are not triggered. */\n    set(target, prop, value) {\n        if (typeof prop === 'symbol') {\n            target[prop] = value;\n            return true;\n        }\n        const newValue = this.$flags$ & 1 /* StoreFlags.RECURSIVE */ ? unwrapStore(value) : value;\n        if (prop in target) {\n            const oldValue = target[prop];\n            if (newValue !== oldValue) {\n                DEBUG && log('Store.set', oldValue, '->', newValue, pad('\\n' + this.toString(), '  '));\n                setNewValueAndTriggerEffects(prop, newValue, target, this);\n            }\n        }\n        else {\n            DEBUG && log('Store.set', 'create property', newValue, pad('\\n' + this.toString(), '  '));\n            setNewValueAndTriggerEffects(prop, newValue, target, this);\n        }\n        return true;\n    }\n    deleteProperty(target, prop) {\n        if (typeof prop != 'string' || !delete target[prop]) {\n            return false;\n        }\n        triggerEffects(this.$container$, this, getEffects(target, prop, this.$effects$));\n        return true;\n    }\n    has(target, prop) {\n        if (prop === STORE_TARGET) {\n            return true;\n        }\n        if (typeof prop === 'string') {\n            const ctx = tryGetInvokeContext();\n            if (ctx) {\n                const effectSubscriber = ctx.$effectSubscriber$;\n                if (effectSubscriber) {\n                    addStoreEffect(target, Array.isArray(target) ? STORE_ALL_PROPS : prop, this, effectSubscriber);\n                }\n            }\n        }\n        return Object.prototype.hasOwnProperty.call(target, prop);\n    }\n    ownKeys(target) {\n        const ctx = tryGetInvokeContext();\n        const effectSubscriber = ctx?.$effectSubscriber$;\n        if (effectSubscriber) {\n            addStoreEffect(target, STORE_ALL_PROPS, this, effectSubscriber);\n        }\n        return Reflect.ownKeys(target);\n    }\n    getOwnPropertyDescriptor(target, prop) {\n        const descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n        if (Array.isArray(target) || typeof prop === 'symbol') {\n            return descriptor;\n        }\n        if (descriptor && !descriptor.configurable) {\n            return descriptor;\n        }\n        return {\n            enumerable: true,\n            configurable: true,\n        };\n    }\n}\nexport function addStoreEffect(target, prop, store, effectSubscription) {\n    const effectsMap = (store.$effects$ ||= new Map());\n    let effects = effectsMap.get(prop);\n    if (!effects) {\n        effects = new Set();\n        effectsMap.set(prop, effects);\n    }\n    // Let's make sure that we have a reference to this effect.\n    // Adding reference is essentially adding a subscription, so if the signal\n    // changes we know who to notify.\n    ensureContainsSubscription(effects, effectSubscription);\n    // But when effect is scheduled in needs to be able to know which signals\n    // to unsubscribe from. So we need to store the reference from the effect back\n    // to this signal.\n    ensureContainsBackRef(effectSubscription, target);\n    addQrlToSerializationCtx(effectSubscription, store.$container$);\n    DEBUG && log('sub', pad('\\n' + store.$effects$?.entries.toString(), '  '));\n}\nfunction setNewValueAndTriggerEffects(prop, value, target, currentStore) {\n    target[prop] = value;\n    triggerEffects(currentStore.$container$, currentStore, getEffects(target, prop, currentStore.$effects$));\n}\nfunction getEffects(target, prop, storeEffects) {\n    let effectsToTrigger;\n    if (storeEffects) {\n        if (Array.isArray(target)) {\n            for (const effects of storeEffects.values()) {\n                effectsToTrigger ||= new Set();\n                for (const effect of effects) {\n                    effectsToTrigger.add(effect);\n                }\n            }\n        }\n        else {\n            effectsToTrigger = storeEffects.get(prop);\n        }\n    }\n    const storeArrayValue = storeEffects?.get(STORE_ALL_PROPS);\n    if (storeArrayValue) {\n        effectsToTrigger ||= new Set();\n        for (const effect of storeArrayValue) {\n            effectsToTrigger.add(effect);\n        }\n    }\n    return effectsToTrigger || null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2lnbmFsL3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixjQUFjLEdBRWYsTUFBTSxVQUFVLENBQUM7QUFFbEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBRXBCLHNDQUFzQztBQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBRXJGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM1QyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQVVuRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFpQixFQUF1QixFQUFFO0lBQ3hFLE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBd0IsQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBdUIsS0FBUSxFQUFZLEVBQUU7SUFDekUsT0FBTyxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBSSxLQUFRLEVBQUssRUFBRTtJQUM1QyxPQUFPLGNBQWMsQ0FBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDN0MsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBaUIsRUFBVyxFQUFFO0lBQ3BELE9BQU8sWUFBWSxJQUFJLEtBQUssQ0FBQztBQUMvQixDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsV0FBVyxDQUN6QixTQUF1QyxFQUN2QyxHQUFNLEVBQ04sS0FBaUI7SUFFakIsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBTSxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUM5QixHQUFNLEVBQ04sS0FBaUIsRUFDakIsU0FBMkIsRUFDeEIsRUFBRTtJQUNMLElBQUksb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7UUFDM0MsSUFBSSxLQUFLLEdBQWtCLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLEtBQUssR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQyxTQUFTLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxPQUFPLFlBQVk7SUFJZDtJQUNBO0lBSlQsU0FBUyxHQUF5RCxJQUFJLENBQUM7SUFFdkUsWUFDUyxPQUFtQixFQUNuQixXQUE2QjtRQUQ3QixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtJQUNuQyxDQUFDO0lBRUosUUFBUTtRQUNOLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBa0IsRUFBRSxJQUFxQjtRQUMzQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUMxQixPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QsSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNyQixPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUNELDhDQUE4QztnQkFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO1lBQ3JDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixVQUFVLENBQ1IsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFDeEQsc0NBQXNDLENBQ3ZDLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUM7WUFDaEQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyQixjQUFjLENBQ1osTUFBTSxFQUNOLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUM5QyxJQUFJLEVBQ0osZ0JBQWdCLENBQ2pCLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxLQUFLLEtBQUssTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDM0IsSUFDRSxLQUFLLCtCQUF1QjtZQUM1QixPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3pCLEtBQUssS0FBSyxJQUFJO1lBQ2QsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUN2QixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDZixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQ3hCLENBQUM7WUFDRCxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQscUZBQXFGO0lBQ3JGLEdBQUcsQ0FBQyxNQUFrQixFQUFFLElBQXFCLEVBQUUsS0FBVTtRQUN2RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sK0JBQXVCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2xGLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU5QixJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdkYsNEJBQTRCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUYsNEJBQTRCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFrQixFQUFFLElBQXFCO1FBQ3RELElBQUksT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDakYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQWtCLEVBQUUsSUFBcUI7UUFDM0MsSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QixNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2xDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2hELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDckIsY0FBYyxDQUNaLE1BQU0sRUFDTixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDOUMsSUFBSSxFQUNKLGdCQUFnQixDQUNqQixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQWtCO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFDbEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7UUFDakQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELHdCQUF3QixDQUN0QixNQUFrQixFQUNsQixJQUFxQjtRQUVyQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0RCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDM0MsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUNELE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSTtZQUNoQixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBa0IsRUFDbEIsSUFBcUIsRUFDckIsS0FBbUIsRUFDbkIsa0JBQXNDO0lBRXRDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDbkQsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNwQixVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsMkRBQTJEO0lBQzNELDBFQUEwRTtJQUMxRSxpQ0FBaUM7SUFDakMsMEJBQTBCLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDeEQseUVBQXlFO0lBQ3pFLDhFQUE4RTtJQUM5RSxrQkFBa0I7SUFDbEIscUJBQXFCLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsd0JBQXdCLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRWhFLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FDbkMsSUFBcUIsRUFDckIsS0FBVSxFQUNWLE1BQVMsRUFDVCxZQUEwQjtJQUV6QixNQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzlCLGNBQWMsQ0FDWixZQUFZLENBQUMsV0FBVyxFQUN4QixZQUFZLEVBQ1osVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUNqRCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsVUFBVSxDQUNqQixNQUFTLEVBQ1QsSUFBcUIsRUFDckIsWUFBa0U7SUFFbEUsSUFBSSxnQkFBcUQsQ0FBQztJQUUxRCxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLEtBQUssTUFBTSxPQUFPLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQzVDLGdCQUFnQixLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQy9CLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQzdCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxZQUFZLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzNELElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEIsZ0JBQWdCLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMvQixLQUFLLE1BQU0sTUFBTSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3JDLGdCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sZ0JBQWdCLElBQUksSUFBSSxDQUFDO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYWQsIHF3aWtEZWJ1Z1RvU3RyaW5nIH0gZnJvbSAnLi4vZGVidWcnO1xuaW1wb3J0IHsgYXNzZXJ0VHJ1ZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHsgdHJ5R2V0SW52b2tlQ29udGV4dCB9IGZyb20gJy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyBpc1NlcmlhbGl6YWJsZU9iamVjdCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRhaW5lciB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQge1xuICBhZGRRcmxUb1NlcmlhbGl6YXRpb25DdHgsXG4gIGVuc3VyZUNvbnRhaW5zQmFja1JlZixcbiAgZW5zdXJlQ29udGFpbnNTdWJzY3JpcHRpb24sXG4gIHRyaWdnZXJFZmZlY3RzLFxuICB0eXBlIEVmZmVjdFN1YnNjcmlwdGlvbixcbn0gZnJvbSAnLi9zaWduYWwnO1xuXG5jb25zdCBERUJVRyA9IGZhbHNlO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuY29uc3QgbG9nID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmxvZygnU1RPUkUnLCAuLi5hcmdzLm1hcChxd2lrRGVidWdUb1N0cmluZykpO1xuXG5jb25zdCBTVE9SRV9UQVJHRVQgPSBTeW1ib2woJ3N0b3JlLnRhcmdldCcpO1xuY29uc3QgU1RPUkVfSEFORExFUiA9IFN5bWJvbCgnc3RvcmUuaGFuZGxlcicpO1xuZXhwb3J0IGNvbnN0IFNUT1JFX0FMTF9QUk9QUyA9IFN5bWJvbCgnc3RvcmUuYWxsJyk7XG5cbmV4cG9ydCB0eXBlIFRhcmdldFR5cGUgPSBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCBhbnk+O1xuXG5leHBvcnQgY29uc3QgZW51bSBTdG9yZUZsYWdzIHtcbiAgTk9ORSA9IDAsXG4gIFJFQ1VSU0lWRSA9IDEsXG4gIElNTVVUQUJMRSA9IDIsXG59XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9yZUhhbmRsZXIgPSAodmFsdWU6IFRhcmdldFR5cGUpOiBTdG9yZUhhbmRsZXIgfCBudWxsID0+IHtcbiAgcmV0dXJuIHZhbHVlW1NUT1JFX0hBTkRMRVJdIGFzIFN0b3JlSGFuZGxlciB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcmVUYXJnZXQgPSA8VCBleHRlbmRzIFRhcmdldFR5cGU+KHZhbHVlOiBUKTogVCB8IG51bGwgPT4ge1xuICByZXR1cm4gdmFsdWU/LltTVE9SRV9UQVJHRVRdIHx8IG51bGw7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgb3JpZ2luYWwgb2JqZWN0IHRoYXQgd2FzIHdyYXBwZWQgYnkgdGhlIHN0b3JlLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gY2xvbmUgYSBzdG9yZVxuICogKHN0cnVjdHVyZWRDbG9uZSwgSW5kZXhlZERCLC4uLilcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1bndyYXBTdG9yZSA9IDxUPih2YWx1ZTogVCk6IFQgPT4ge1xuICByZXR1cm4gZ2V0U3RvcmVUYXJnZXQ8YW55Pih2YWx1ZSkgfHwgdmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTdG9yZSA9ICh2YWx1ZTogVGFyZ2V0VHlwZSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gU1RPUkVfVEFSR0VUIGluIHZhbHVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBjb250YWluZXI6IENvbnRhaW5lciB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG9iajogVCxcbiAgZmxhZ3M6IFN0b3JlRmxhZ3Ncbik6IFQge1xuICByZXR1cm4gbmV3IFByb3h5KG9iaiwgbmV3IFN0b3JlSGFuZGxlcihmbGFncywgY29udGFpbmVyIHx8IG51bGwpKSBhcyBUO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0T3JDcmVhdGVTdG9yZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgb2JqOiBULFxuICBmbGFnczogU3RvcmVGbGFncyxcbiAgY29udGFpbmVyOiBDb250YWluZXIgfCBudWxsXG4pOiBUID0+IHtcbiAgaWYgKGlzU2VyaWFsaXphYmxlT2JqZWN0KG9iaikgJiYgY29udGFpbmVyKSB7XG4gICAgbGV0IHN0b3JlOiBUIHwgdW5kZWZpbmVkID0gY29udGFpbmVyLiRzdG9yZVByb3h5TWFwJC5nZXQob2JqKTtcbiAgICBpZiAoIXN0b3JlKSB7XG4gICAgICBzdG9yZSA9IGNyZWF0ZVN0b3JlKGNvbnRhaW5lciwgb2JqLCBmbGFncyk7XG4gICAgICBjb250YWluZXIuJHN0b3JlUHJveHlNYXAkLnNldChvYmosIHN0b3JlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3JlO1xuICB9XG4gIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnQgY2xhc3MgU3RvcmVIYW5kbGVyIGltcGxlbWVudHMgUHJveHlIYW5kbGVyPFRhcmdldFR5cGU+IHtcbiAgJGVmZmVjdHMkOiBudWxsIHwgTWFwPHN0cmluZyB8IHN5bWJvbCwgU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj4+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgJGZsYWdzJDogU3RvcmVGbGFncyxcbiAgICBwdWJsaWMgJGNvbnRhaW5lciQ6IENvbnRhaW5lciB8IG51bGxcbiAgKSB7fVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdbU3RvcmVdJztcbiAgfVxuXG4gIGdldCh0YXJnZXQ6IFRhcmdldFR5cGUsIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIGlmIChwcm9wID09PSBTVE9SRV9UQVJHRVQpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSBTVE9SRV9IQU5ETEVSKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXTtcbiAgICB9XG4gICAgY29uc3QgY3R4ID0gdHJ5R2V0SW52b2tlQ29udGV4dCgpO1xuICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W3Byb3BdO1xuICAgIGlmIChjdHgpIHtcbiAgICAgIGlmICh0aGlzLiRjb250YWluZXIkID09PSBudWxsKSB7XG4gICAgICAgIGlmICghY3R4LiRjb250YWluZXIkKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdyYWIgdGhlIGNvbnRhaW5lciBub3cgd2UgaGF2ZSBhY2Nlc3MgdG8gaXRcbiAgICAgICAgdGhpcy4kY29udGFpbmVyJCA9IGN0eC4kY29udGFpbmVyJDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydFRydWUoXG4gICAgICAgICAgIWN0eC4kY29udGFpbmVyJCB8fCBjdHguJGNvbnRhaW5lciQgPT09IHRoaXMuJGNvbnRhaW5lciQsXG4gICAgICAgICAgJ0RvIG5vdCB1c2Ugc2lnbmFscyBhY3Jvc3MgY29udGFpbmVycydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVmZmVjdFN1YnNjcmliZXIgPSBjdHguJGVmZmVjdFN1YnNjcmliZXIkO1xuICAgICAgaWYgKGVmZmVjdFN1YnNjcmliZXIpIHtcbiAgICAgICAgYWRkU3RvcmVFZmZlY3QoXG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkodGFyZ2V0KSA/IFNUT1JFX0FMTF9QUk9QUyA6IHByb3AsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBlZmZlY3RTdWJzY3JpYmVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3AgPT09ICd0b1N0cmluZycgJiYgdmFsdWUgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nO1xuICAgIH1cblxuICAgIGNvbnN0IGZsYWdzID0gdGhpcy4kZmxhZ3MkO1xuICAgIGlmIChcbiAgICAgIGZsYWdzICYgU3RvcmVGbGFncy5SRUNVUlNJVkUgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAhT2JqZWN0LmlzRnJvemVuKHZhbHVlKSAmJlxuICAgICAgIWlzU3RvcmUodmFsdWUpICYmXG4gICAgICAhT2JqZWN0LmlzRnJvemVuKHRhcmdldClcbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRPckNyZWF0ZVN0b3JlKHZhbHVlLCB0aGlzLiRmbGFncyQsIHRoaXMuJGNvbnRhaW5lciQpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKiogSW4gdGhlIGNhc2Ugb2Ygb2xkVmFsdWUgYW5kIHZhbHVlIGFyZSB0aGUgc2FtZSwgdGhlIGVmZmVjdHMgYXJlIG5vdCB0cmlnZ2VyZWQuICovXG4gIHNldCh0YXJnZXQ6IFRhcmdldFR5cGUsIHByb3A6IHN0cmluZyB8IHN5bWJvbCwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy4kZmxhZ3MkICYgU3RvcmVGbGFncy5SRUNVUlNJVkUgPyB1bndyYXBTdG9yZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICBpZiAocHJvcCBpbiB0YXJnZXQpIHtcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGFyZ2V0W3Byb3BdO1xuXG4gICAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICAgIERFQlVHICYmIGxvZygnU3RvcmUuc2V0Jywgb2xkVmFsdWUsICctPicsIG5ld1ZhbHVlLCBwYWQoJ1xcbicgKyB0aGlzLnRvU3RyaW5nKCksICcgICcpKTtcbiAgICAgICAgc2V0TmV3VmFsdWVBbmRUcmlnZ2VyRWZmZWN0cyhwcm9wLCBuZXdWYWx1ZSwgdGFyZ2V0LCB0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgREVCVUcgJiYgbG9nKCdTdG9yZS5zZXQnLCAnY3JlYXRlIHByb3BlcnR5JywgbmV3VmFsdWUsIHBhZCgnXFxuJyArIHRoaXMudG9TdHJpbmcoKSwgJyAgJykpO1xuICAgICAgc2V0TmV3VmFsdWVBbmRUcmlnZ2VyRWZmZWN0cyhwcm9wLCBuZXdWYWx1ZSwgdGFyZ2V0LCB0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBkZWxldGVQcm9wZXJ0eSh0YXJnZXQ6IFRhcmdldFR5cGUsIHByb3A6IHN0cmluZyB8IHN5bWJvbCk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgcHJvcCAhPSAnc3RyaW5nJyB8fCAhZGVsZXRlIHRhcmdldFtwcm9wXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cmlnZ2VyRWZmZWN0cyh0aGlzLiRjb250YWluZXIkLCB0aGlzLCBnZXRFZmZlY3RzKHRhcmdldCwgcHJvcCwgdGhpcy4kZWZmZWN0cyQpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhcyh0YXJnZXQ6IFRhcmdldFR5cGUsIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgIGlmIChwcm9wID09PSBTVE9SRV9UQVJHRVQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBjdHggPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gICAgICBpZiAoY3R4KSB7XG4gICAgICAgIGNvbnN0IGVmZmVjdFN1YnNjcmliZXIgPSBjdHguJGVmZmVjdFN1YnNjcmliZXIkO1xuICAgICAgICBpZiAoZWZmZWN0U3Vic2NyaWJlcikge1xuICAgICAgICAgIGFkZFN0b3JlRWZmZWN0KFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0YXJnZXQpID8gU1RPUkVfQUxMX1BST1BTIDogcHJvcCxcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBlZmZlY3RTdWJzY3JpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgcHJvcCk7XG4gIH1cblxuICBvd25LZXlzKHRhcmdldDogVGFyZ2V0VHlwZSk6IEFycmF5TGlrZTxzdHJpbmcgfCBzeW1ib2w+IHtcbiAgICBjb25zdCBjdHggPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gICAgY29uc3QgZWZmZWN0U3Vic2NyaWJlciA9IGN0eD8uJGVmZmVjdFN1YnNjcmliZXIkO1xuICAgIGlmIChlZmZlY3RTdWJzY3JpYmVyKSB7XG4gICAgICBhZGRTdG9yZUVmZmVjdCh0YXJnZXQsIFNUT1JFX0FMTF9QUk9QUywgdGhpcywgZWZmZWN0U3Vic2NyaWJlcik7XG4gICAgfVxuICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModGFyZ2V0KTtcbiAgfVxuXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICB0YXJnZXQ6IFRhcmdldFR5cGUsXG4gICAgcHJvcDogc3RyaW5nIHwgc3ltYm9sXG4gICk6IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSB8fCB0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbiAgICBpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRTdG9yZUVmZmVjdChcbiAgdGFyZ2V0OiBUYXJnZXRUeXBlLFxuICBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsXG4gIHN0b3JlOiBTdG9yZUhhbmRsZXIsXG4gIGVmZmVjdFN1YnNjcmlwdGlvbjogRWZmZWN0U3Vic2NyaXB0aW9uXG4pIHtcbiAgY29uc3QgZWZmZWN0c01hcCA9IChzdG9yZS4kZWZmZWN0cyQgfHw9IG5ldyBNYXAoKSk7XG4gIGxldCBlZmZlY3RzID0gZWZmZWN0c01hcC5nZXQocHJvcCk7XG4gIGlmICghZWZmZWN0cykge1xuICAgIGVmZmVjdHMgPSBuZXcgU2V0KCk7XG4gICAgZWZmZWN0c01hcC5zZXQocHJvcCwgZWZmZWN0cyk7XG4gIH1cbiAgLy8gTGV0J3MgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGlzIGVmZmVjdC5cbiAgLy8gQWRkaW5nIHJlZmVyZW5jZSBpcyBlc3NlbnRpYWxseSBhZGRpbmcgYSBzdWJzY3JpcHRpb24sIHNvIGlmIHRoZSBzaWduYWxcbiAgLy8gY2hhbmdlcyB3ZSBrbm93IHdobyB0byBub3RpZnkuXG4gIGVuc3VyZUNvbnRhaW5zU3Vic2NyaXB0aW9uKGVmZmVjdHMsIGVmZmVjdFN1YnNjcmlwdGlvbik7XG4gIC8vIEJ1dCB3aGVuIGVmZmVjdCBpcyBzY2hlZHVsZWQgaW4gbmVlZHMgdG8gYmUgYWJsZSB0byBrbm93IHdoaWNoIHNpZ25hbHNcbiAgLy8gdG8gdW5zdWJzY3JpYmUgZnJvbS4gU28gd2UgbmVlZCB0byBzdG9yZSB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGVmZmVjdCBiYWNrXG4gIC8vIHRvIHRoaXMgc2lnbmFsLlxuICBlbnN1cmVDb250YWluc0JhY2tSZWYoZWZmZWN0U3Vic2NyaXB0aW9uLCB0YXJnZXQpO1xuICBhZGRRcmxUb1NlcmlhbGl6YXRpb25DdHgoZWZmZWN0U3Vic2NyaXB0aW9uLCBzdG9yZS4kY29udGFpbmVyJCk7XG5cbiAgREVCVUcgJiYgbG9nKCdzdWInLCBwYWQoJ1xcbicgKyBzdG9yZS4kZWZmZWN0cyQ/LmVudHJpZXMudG9TdHJpbmcoKSwgJyAgJykpO1xufVxuXG5mdW5jdGlvbiBzZXROZXdWYWx1ZUFuZFRyaWdnZXJFZmZlY3RzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCBhbnk+PihcbiAgcHJvcDogc3RyaW5nIHwgc3ltYm9sLFxuICB2YWx1ZTogYW55LFxuICB0YXJnZXQ6IFQsXG4gIGN1cnJlbnRTdG9yZTogU3RvcmVIYW5kbGVyXG4pOiB2b2lkIHtcbiAgKHRhcmdldCBhcyBhbnkpW3Byb3BdID0gdmFsdWU7XG4gIHRyaWdnZXJFZmZlY3RzKFxuICAgIGN1cnJlbnRTdG9yZS4kY29udGFpbmVyJCxcbiAgICBjdXJyZW50U3RvcmUsXG4gICAgZ2V0RWZmZWN0cyh0YXJnZXQsIHByb3AsIGN1cnJlbnRTdG9yZS4kZWZmZWN0cyQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEVmZmVjdHM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIGFueT4+KFxuICB0YXJnZXQ6IFQsXG4gIHByb3A6IHN0cmluZyB8IHN5bWJvbCxcbiAgc3RvcmVFZmZlY3RzOiBNYXA8c3RyaW5nIHwgc3ltYm9sLCBTZXQ8RWZmZWN0U3Vic2NyaXB0aW9uPj4gfCBudWxsXG4pIHtcbiAgbGV0IGVmZmVjdHNUb1RyaWdnZXI6IFNldDxFZmZlY3RTdWJzY3JpcHRpb24+IHwgdW5kZWZpbmVkO1xuXG4gIGlmIChzdG9yZUVmZmVjdHMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICBmb3IgKGNvbnN0IGVmZmVjdHMgb2Ygc3RvcmVFZmZlY3RzLnZhbHVlcygpKSB7XG4gICAgICAgIGVmZmVjdHNUb1RyaWdnZXIgfHw9IG5ldyBTZXQoKTtcbiAgICAgICAgZm9yIChjb25zdCBlZmZlY3Qgb2YgZWZmZWN0cykge1xuICAgICAgICAgIGVmZmVjdHNUb1RyaWdnZXIuYWRkKGVmZmVjdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWZmZWN0c1RvVHJpZ2dlciA9IHN0b3JlRWZmZWN0cy5nZXQocHJvcCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RvcmVBcnJheVZhbHVlID0gc3RvcmVFZmZlY3RzPy5nZXQoU1RPUkVfQUxMX1BST1BTKTtcbiAgaWYgKHN0b3JlQXJyYXlWYWx1ZSkge1xuICAgIGVmZmVjdHNUb1RyaWdnZXIgfHw9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGNvbnN0IGVmZmVjdCBvZiBzdG9yZUFycmF5VmFsdWUpIHtcbiAgICAgIGVmZmVjdHNUb1RyaWdnZXIhLmFkZChlZmZlY3QpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWZmZWN0c1RvVHJpZ2dlciB8fCBudWxsO1xufVxuIl19","import { WrappedSignal, SignalImpl, } from './signal';\nimport { getStoreHandler } from './store';\nimport { ensureMaterialized, vnode_isElementVNode, vnode_isVNode } from '../client/vnode';\nimport { _EFFECT_BACK_REF } from './flags';\n/** Class for back reference to the EffectSubscription */\nexport class BackRef {\n    [_EFFECT_BACK_REF] = null;\n}\nexport function clearAllEffects(container, consumer) {\n    if (vnode_isVNode(consumer) && vnode_isElementVNode(consumer)) {\n        ensureMaterialized(consumer);\n    }\n    const effects = consumer[_EFFECT_BACK_REF];\n    if (!effects) {\n        return;\n    }\n    for (const [, effect] of effects) {\n        const backRefs = effect[2 /* EffectSubscriptionProp.BACK_REF */];\n        if (!backRefs) {\n            return;\n        }\n        for (const producer of backRefs) {\n            if (producer instanceof SignalImpl) {\n                clearSignal(container, producer, effect);\n            }\n            else if (container.$storeProxyMap$.has(producer)) {\n                const target = container.$storeProxyMap$.get(producer);\n                const storeHandler = getStoreHandler(target);\n                clearStore(storeHandler, effect);\n            }\n        }\n    }\n}\nfunction clearSignal(container, producer, effect) {\n    const effects = producer.$effects$;\n    if (effects) {\n        effects.delete(effect);\n    }\n    if (producer instanceof WrappedSignal) {\n        producer.$hostElement$ = null;\n        clearAllEffects(container, producer);\n    }\n}\nfunction clearStore(producer, effect) {\n    const effects = producer?.$effects$;\n    if (effects) {\n        for (const propEffects of effects.values()) {\n            propEffects.delete(effect);\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLWNsZWFudXAuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2lnbmFsL3NpZ25hbC1jbGVhbnVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxhQUFhLEVBRWIsVUFBVSxHQUdYLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXhELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFM0MseURBQXlEO0FBQ3pELE1BQU0sT0FBZ0IsT0FBTztJQUMzQixDQUFDLGdCQUFnQixDQUFDLEdBQTRELElBQUksQ0FBQztDQUNwRjtBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBb0IsRUFBRSxRQUFrQjtJQUN0RSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzlELGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBSSxRQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDeEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTztJQUNULENBQUM7SUFDRCxLQUFLLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLE1BQU0seUNBQWlDLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTztRQUNULENBQUM7UUFDRCxLQUFLLE1BQU0sUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksUUFBUSxZQUFZLFVBQVUsRUFBRSxDQUFDO2dCQUNuQyxXQUFXLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzQyxDQUFDO2lCQUFNLElBQUksU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUM7Z0JBQ3hELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUUsQ0FBQztnQkFDOUMsVUFBVSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsU0FBb0IsRUFBRSxRQUFvQixFQUFFLE1BQTBCO0lBQ3pGLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDbkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksUUFBUSxZQUFZLGFBQWEsRUFBRSxDQUFDO1FBQ3RDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzlCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxRQUFzQixFQUFFLE1BQTBCO0lBQ3BFLE1BQU0sT0FBTyxHQUFHLFFBQVEsRUFBRSxTQUFTLENBQUM7SUFDcEMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssTUFBTSxXQUFXLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDM0MsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFZmZlY3RTdWJzY3JpcHRpb25Qcm9wLFxuICBXcmFwcGVkU2lnbmFsLFxuICB0eXBlIEVmZmVjdFN1YnNjcmlwdGlvbixcbiAgU2lnbmFsSW1wbCxcbiAgdHlwZSBFZmZlY3RQcm9wZXJ0eSxcbiAgdHlwZSBDb25zdW1lcixcbn0gZnJvbSAnLi9zaWduYWwnO1xuaW1wb3J0IHsgU3RvcmVIYW5kbGVyLCBnZXRTdG9yZUhhbmRsZXIgfSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IGVuc3VyZU1hdGVyaWFsaXplZCwgdm5vZGVfaXNFbGVtZW50Vk5vZGUsIHZub2RlX2lzVk5vZGUgfSBmcm9tICcuLi9jbGllbnQvdm5vZGUnO1xuaW1wb3J0IHsgX0VGRkVDVF9CQUNLX1JFRiB9IGZyb20gJy4vZmxhZ3MnO1xuXG4vKiogQ2xhc3MgZm9yIGJhY2sgcmVmZXJlbmNlIHRvIHRoZSBFZmZlY3RTdWJzY3JpcHRpb24gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYWNrUmVmIHtcbiAgW19FRkZFQ1RfQkFDS19SRUZdOiBNYXA8RWZmZWN0UHJvcGVydHkgfCBzdHJpbmcsIEVmZmVjdFN1YnNjcmlwdGlvbj4gfCBudWxsID0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQWxsRWZmZWN0cyhjb250YWluZXI6IENvbnRhaW5lciwgY29uc3VtZXI6IENvbnN1bWVyKTogdm9pZCB7XG4gIGlmICh2bm9kZV9pc1ZOb2RlKGNvbnN1bWVyKSAmJiB2bm9kZV9pc0VsZW1lbnRWTm9kZShjb25zdW1lcikpIHtcbiAgICBlbnN1cmVNYXRlcmlhbGl6ZWQoY29uc3VtZXIpO1xuICB9XG4gIGNvbnN0IGVmZmVjdHMgPSAoY29uc3VtZXIgYXMgQmFja1JlZilbX0VGRkVDVF9CQUNLX1JFRl07XG4gIGlmICghZWZmZWN0cykge1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKGNvbnN0IFssIGVmZmVjdF0gb2YgZWZmZWN0cykge1xuICAgIGNvbnN0IGJhY2tSZWZzID0gZWZmZWN0W0VmZmVjdFN1YnNjcmlwdGlvblByb3AuQkFDS19SRUZdO1xuICAgIGlmICghYmFja1JlZnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwcm9kdWNlciBvZiBiYWNrUmVmcykge1xuICAgICAgaWYgKHByb2R1Y2VyIGluc3RhbmNlb2YgU2lnbmFsSW1wbCkge1xuICAgICAgICBjbGVhclNpZ25hbChjb250YWluZXIsIHByb2R1Y2VyLCBlZmZlY3QpO1xuICAgICAgfSBlbHNlIGlmIChjb250YWluZXIuJHN0b3JlUHJveHlNYXAkLmhhcyhwcm9kdWNlcikpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gY29udGFpbmVyLiRzdG9yZVByb3h5TWFwJC5nZXQocHJvZHVjZXIpITtcbiAgICAgICAgY29uc3Qgc3RvcmVIYW5kbGVyID0gZ2V0U3RvcmVIYW5kbGVyKHRhcmdldCkhO1xuICAgICAgICBjbGVhclN0b3JlKHN0b3JlSGFuZGxlciwgZWZmZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYXJTaWduYWwoY29udGFpbmVyOiBDb250YWluZXIsIHByb2R1Y2VyOiBTaWduYWxJbXBsLCBlZmZlY3Q6IEVmZmVjdFN1YnNjcmlwdGlvbikge1xuICBjb25zdCBlZmZlY3RzID0gcHJvZHVjZXIuJGVmZmVjdHMkO1xuICBpZiAoZWZmZWN0cykge1xuICAgIGVmZmVjdHMuZGVsZXRlKGVmZmVjdCk7XG4gIH1cblxuICBpZiAocHJvZHVjZXIgaW5zdGFuY2VvZiBXcmFwcGVkU2lnbmFsKSB7XG4gICAgcHJvZHVjZXIuJGhvc3RFbGVtZW50JCA9IG51bGw7XG4gICAgY2xlYXJBbGxFZmZlY3RzKGNvbnRhaW5lciwgcHJvZHVjZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFyU3RvcmUocHJvZHVjZXI6IFN0b3JlSGFuZGxlciwgZWZmZWN0OiBFZmZlY3RTdWJzY3JpcHRpb24pIHtcbiAgY29uc3QgZWZmZWN0cyA9IHByb2R1Y2VyPy4kZWZmZWN0cyQ7XG4gIGlmIChlZmZlY3RzKSB7XG4gICAgZm9yIChjb25zdCBwcm9wRWZmZWN0cyBvZiBlZmZlY3RzLnZhbHVlcygpKSB7XG4gICAgICBwcm9wRWZmZWN0cy5kZWxldGUoZWZmZWN0KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { assertDefined } from '../shared/error/assert';\nimport { getInvokeContext } from './use-core';\nimport { _getQContainerElement, getDomContainer } from '../client/dom-container';\nimport { assertQrl } from '../shared/qrl/qrl-utils';\n// <docs markdown=\"../readme.md#useLexicalScope\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useLexicalScope instead and run `pnpm docs.sync`)\n/**\n * Used by the Qwik Optimizer to restore the lexically scoped variables.\n *\n * This method should not be present in the application source code.\n *\n * NOTE: `useLexicalScope` method can only be used in the synchronous portion of the callback\n * (before any `await` statements.)\n *\n * @internal\n */\n// </docs>\nexport const useLexicalScope = () => {\n    const context = getInvokeContext();\n    let qrl = context.$qrl$;\n    if (!qrl) {\n        const el = context.$element$;\n        assertDefined(el, 'invoke: element must be defined inside useLexicalScope()', context);\n        const containerElement = _getQContainerElement(el);\n        assertDefined(containerElement, `invoke: cant find parent q:container of`, el);\n        const container = getDomContainer(containerElement);\n        qrl = container.parseQRL(decodeURIComponent(String(context.$url$)));\n    }\n    else {\n        assertQrl(qrl);\n        assertDefined(qrl.$captureRef$, 'invoke: qrl $captureRef$ must be defined inside useLexicalScope()', qrl);\n    }\n    return qrl.$captureRef$;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWxleGljYWwtc2NvcGUucHVibGljLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtbGV4aWNhbC1zY29wZS5wdWJsaWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU5QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELGlEQUFpRDtBQUNqRCx5Q0FBeUM7QUFDekMsdUVBQXVFO0FBQ3ZFOzs7Ozs7Ozs7R0FTRztBQUNILFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsR0FBNkIsRUFBRTtJQUM1RCxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUF5QyxDQUFDO0lBQzVELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDN0IsYUFBYSxDQUFDLEVBQUUsRUFBRSwwREFBMEQsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2RixNQUFNLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLEVBQUUsQ0FBZ0IsQ0FBQztRQUNsRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUseUNBQXlDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0UsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEQsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUF5QixDQUFDO0lBQzlGLENBQUM7U0FBTSxDQUFDO1FBQ04sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsYUFBYSxDQUNYLEdBQUcsQ0FBQyxZQUFZLEVBQ2hCLG1FQUFtRSxFQUNuRSxHQUFHLENBQ0osQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEdBQUksQ0FBQyxZQUFvQixDQUFDO0FBQ25DLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydERlZmluZWQgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvYXNzZXJ0JztcbmltcG9ydCB7IGdldEludm9rZUNvbnRleHQgfSBmcm9tICcuL3VzZS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUVJMSW50ZXJuYWwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQgeyBfZ2V0UUNvbnRhaW5lckVsZW1lbnQsIGdldERvbUNvbnRhaW5lciB9IGZyb20gJy4uL2NsaWVudC9kb20tY29udGFpbmVyJztcbmltcG9ydCB7IGFzc2VydFFybCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLXV0aWxzJztcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi9yZWFkbWUubWQjdXNlTGV4aWNhbFNjb3BlXCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vcmVhZG1lLm1kI3VzZUxleGljYWxTY29wZSBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogVXNlZCBieSB0aGUgUXdpayBPcHRpbWl6ZXIgdG8gcmVzdG9yZSB0aGUgbGV4aWNhbGx5IHNjb3BlZCB2YXJpYWJsZXMuXG4gKlxuICogVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBwcmVzZW50IGluIHRoZSBhcHBsaWNhdGlvbiBzb3VyY2UgY29kZS5cbiAqXG4gKiBOT1RFOiBgdXNlTGV4aWNhbFNjb3BlYCBtZXRob2QgY2FuIG9ubHkgYmUgdXNlZCBpbiB0aGUgc3luY2hyb25vdXMgcG9ydGlvbiBvZiB0aGUgY2FsbGJhY2tcbiAqIChiZWZvcmUgYW55IGBhd2FpdGAgc3RhdGVtZW50cy4pXG4gKlxuICogQGludGVybmFsXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCB1c2VMZXhpY2FsU2NvcGUgPSA8VkFSUyBleHRlbmRzIGFueVtdPigpOiBWQVJTID0+IHtcbiAgY29uc3QgY29udGV4dCA9IGdldEludm9rZUNvbnRleHQoKTtcbiAgbGV0IHFybCA9IGNvbnRleHQuJHFybCQgYXMgUVJMSW50ZXJuYWw8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGlmICghcXJsKSB7XG4gICAgY29uc3QgZWwgPSBjb250ZXh0LiRlbGVtZW50JDtcbiAgICBhc3NlcnREZWZpbmVkKGVsLCAnaW52b2tlOiBlbGVtZW50IG11c3QgYmUgZGVmaW5lZCBpbnNpZGUgdXNlTGV4aWNhbFNjb3BlKCknLCBjb250ZXh0KTtcbiAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gX2dldFFDb250YWluZXJFbGVtZW50KGVsKSBhcyBIVE1MRWxlbWVudDtcbiAgICBhc3NlcnREZWZpbmVkKGNvbnRhaW5lckVsZW1lbnQsIGBpbnZva2U6IGNhbnQgZmluZCBwYXJlbnQgcTpjb250YWluZXIgb2ZgLCBlbCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gZ2V0RG9tQ29udGFpbmVyKGNvbnRhaW5lckVsZW1lbnQpO1xuICAgIHFybCA9IGNvbnRhaW5lci5wYXJzZVFSTChkZWNvZGVVUklDb21wb25lbnQoU3RyaW5nKGNvbnRleHQuJHVybCQpKSkgYXMgUVJMSW50ZXJuYWw8dW5rbm93bj47XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0UXJsKHFybCk7XG4gICAgYXNzZXJ0RGVmaW5lZChcbiAgICAgIHFybC4kY2FwdHVyZVJlZiQsXG4gICAgICAnaW52b2tlOiBxcmwgJGNhcHR1cmVSZWYkIG11c3QgYmUgZGVmaW5lZCBpbnNpZGUgdXNlTGV4aWNhbFNjb3BlKCknLFxuICAgICAgcXJsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcXJsIS4kY2FwdHVyZVJlZiQgYXMgVkFSUztcbn07XG4iXX0=","import { getDomContainer } from '../client/dom-container';\nimport { qError } from '../shared/error/error';\nimport { assertQrl } from '../shared/qrl/qrl-utils';\nimport { logError } from '../shared/utils/log';\nimport { TaskEvent } from '../shared/utils/markers';\nimport { isPromise, safeCall } from '../shared/utils/promises';\nimport { noSerialize } from '../shared/utils/serialize-utils';\nimport { isFunction } from '../shared/utils/types';\nimport { isSignal } from '../signal/signal';\nimport { BackRef, clearAllEffects } from '../signal/signal-cleanup';\nimport { invoke, newInvokeContext } from './use-core';\nimport { useLexicalScope } from './use-lexical-scope.public';\nimport { useSequentialScope } from './use-sequential-scope';\nimport { getSubscriber } from '../signal/subscriber';\nimport { STORE_ALL_PROPS, addStoreEffect, getStoreHandler, getStoreTarget, isStore, } from '../signal/store';\n/** @internal */\nexport const useTaskQrl = (qrl) => {\n    const { val, set, iCtx, i } = useSequentialScope();\n    if (val) {\n        return;\n    }\n    assertQrl(qrl);\n    set(1);\n    const task = new Task(8 /* TaskFlags.DIRTY */ | 2 /* TaskFlags.TASK */, i, iCtx.$hostElement$, qrl, undefined, null);\n    // In V2 we add the task to the sequential scope. We need to do this\n    // in order to be able to retrieve it later when the parent element is\n    // deleted and we need to be able to release the task subscriptions.\n    set(task);\n    const container = iCtx.$container$;\n    const promise = container.$scheduler$(3 /* ChoreType.TASK */, task);\n    if (isPromise(promise)) {\n        // TODO: should we handle this differently?\n        promise.catch(() => { });\n    }\n};\nexport const runTask = (task, container, host) => {\n    task.$flags$ &= ~8 /* TaskFlags.DIRTY */;\n    cleanupTask(task);\n    const iCtx = newInvokeContext(container.$locale$, host, undefined, TaskEvent);\n    iCtx.$container$ = container;\n    const taskFn = task.$qrl$.getFn(iCtx, () => clearAllEffects(container, task));\n    const track = (obj, prop) => {\n        const ctx = newInvokeContext();\n        ctx.$effectSubscriber$ = getSubscriber(task, \":\" /* EffectProperty.COMPONENT */);\n        ctx.$container$ = container;\n        return invoke(ctx, () => {\n            if (isFunction(obj)) {\n                return obj();\n            }\n            if (prop) {\n                return obj[prop];\n            }\n            else if (isSignal(obj)) {\n                return obj.value;\n            }\n            else if (isStore(obj)) {\n                // track whole store\n                addStoreEffect(getStoreTarget(obj), STORE_ALL_PROPS, getStoreHandler(obj), ctx.$effectSubscriber$);\n                return obj;\n            }\n            else {\n                throw qError(2 /* QError.trackObjectWithoutProp */);\n            }\n        });\n    };\n    const handleError = (reason) => container.handleError(reason, host);\n    let cleanupFns = null;\n    const cleanup = (fn) => {\n        if (typeof fn == 'function') {\n            if (!cleanupFns) {\n                cleanupFns = [];\n                task.$destroy$ = noSerialize(() => {\n                    task.$destroy$ = null;\n                    cleanupFns.forEach((fn) => {\n                        try {\n                            fn();\n                        }\n                        catch (err) {\n                            handleError(err);\n                        }\n                    });\n                });\n            }\n            cleanupFns.push(fn);\n        }\n    };\n    const taskApi = { track, cleanup };\n    const result = safeCall(() => taskFn(taskApi), cleanup, (err) => {\n        // If a Promise is thrown, that means we need to re-run the task.\n        if (isPromise(err)) {\n            return err.then(() => runTask(task, container, host));\n        }\n        else {\n            throw err;\n        }\n    });\n    return result;\n};\nexport const cleanupTask = (task) => {\n    const destroy = task.$destroy$;\n    if (destroy) {\n        task.$destroy$ = null;\n        try {\n            destroy();\n        }\n        catch (err) {\n            logError(err);\n        }\n    }\n};\nexport class Task extends BackRef {\n    $flags$;\n    $index$;\n    $el$;\n    $qrl$;\n    $state$;\n    $destroy$;\n    constructor($flags$, $index$, $el$, $qrl$, $state$, $destroy$) {\n        super();\n        this.$flags$ = $flags$;\n        this.$index$ = $index$;\n        this.$el$ = $el$;\n        this.$qrl$ = $qrl$;\n        this.$state$ = $state$;\n        this.$destroy$ = $destroy$;\n    }\n}\nexport const isTask = (value) => {\n    return value instanceof Task;\n};\n/**\n * Used internally as a qrl event handler to schedule a task.\n *\n * @internal\n */\nexport const scheduleTask = (_event, element) => {\n    const [task] = useLexicalScope();\n    const type = task.$flags$ & 1 /* TaskFlags.VISIBLE_TASK */ ? 32 /* ChoreType.VISIBLE */ : 3 /* ChoreType.TASK */;\n    const container = getDomContainer(element);\n    container.$scheduler$(type, task);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXRhc2suanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS10YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXBELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFvQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxVQUFVLEVBQXVCLE1BQU0sdUJBQXVCLENBQUM7QUFDeEUsT0FBTyxFQUFrQixRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCxlQUFlLEVBQ2YsY0FBYyxFQUNkLE9BQU8sR0FDUixNQUFNLGlCQUFpQixDQUFDO0FBdUh6QixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FB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QUFDO0lBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLGlDQUF5QixDQUFDLENBQUMsNEJBQW1CLENBQUMsdUJBQWUsQ0FBQztJQUN4RixNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RG9tQ29udGFpbmVyIH0gZnJvbSAnLi4vY2xpZW50L2RvbS1jb250YWluZXInO1xuaW1wb3J0IHsgUUVycm9yLCBxRXJyb3IgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvZXJyb3InO1xuaW1wb3J0IHsgdHlwZSBRUkxJbnRlcm5hbCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB7IGFzc2VydFFybCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLXV0aWxzJztcbmltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwucHVibGljJztcbmltcG9ydCB7IENob3JlVHlwZSB9IGZyb20gJy4uL3NoYXJlZC91dGlsLWNob3JlLXR5cGUnO1xuaW1wb3J0IHsgdHlwZSBDb250YWluZXIsIHR5cGUgSG9zdEVsZW1lbnQgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbG9nJztcbmltcG9ydCB7IFRhc2tFdmVudCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IGlzUHJvbWlzZSwgc2FmZUNhbGwgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgbm9TZXJpYWxpemUsIHR5cGUgTm9TZXJpYWxpemUgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvc2VyaWFsaXplLXV0aWxzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIHR5cGUgVmFsdWVPclByb21pc2UgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgRWZmZWN0UHJvcGVydHksIGlzU2lnbmFsIH0gZnJvbSAnLi4vc2lnbmFsL3NpZ25hbCc7XG5pbXBvcnQgeyBCYWNrUmVmLCBjbGVhckFsbEVmZmVjdHMgfSBmcm9tICcuLi9zaWduYWwvc2lnbmFsLWNsZWFudXAnO1xuaW1wb3J0IHsgdHlwZSBTaWduYWwgfSBmcm9tICcuLi9zaWduYWwvc2lnbmFsLnB1YmxpYyc7XG5pbXBvcnQgeyBpbnZva2UsIG5ld0ludm9rZUNvbnRleHQgfSBmcm9tICcuL3VzZS1jb3JlJztcbmltcG9ydCB7IHVzZUxleGljYWxTY29wZSB9IGZyb20gJy4vdXNlLWxleGljYWwtc2NvcGUucHVibGljJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VSZXR1cm5JbnRlcm5hbCB9IGZyb20gJy4vdXNlLXJlc291cmNlJztcbmltcG9ydCB7IHVzZVNlcXVlbnRpYWxTY29wZSB9IGZyb20gJy4vdXNlLXNlcXVlbnRpYWwtc2NvcGUnO1xuaW1wb3J0IHsgZ2V0U3Vic2NyaWJlciB9IGZyb20gJy4uL3NpZ25hbC9zdWJzY3JpYmVyJztcbmltcG9ydCB7XG4gIFNUT1JFX0FMTF9QUk9QUyxcbiAgYWRkU3RvcmVFZmZlY3QsXG4gIGdldFN0b3JlSGFuZGxlcixcbiAgZ2V0U3RvcmVUYXJnZXQsXG4gIGlzU3RvcmUsXG59IGZyb20gJy4uL3NpZ25hbC9zdG9yZSc7XG5cbmV4cG9ydCBjb25zdCBlbnVtIFRhc2tGbGFncyB7XG4gIFZJU0lCTEVfVEFTSyA9IDEgPDwgMCxcbiAgVEFTSyA9IDEgPDwgMSxcbiAgUkVTT1VSQ0UgPSAxIDw8IDIsXG4gIERJUlRZID0gMSA8PCAzLFxufVxuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCNUcmFja2VyXCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vcmVhZG1lLm1kI1RyYWNrZXIgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFVzZWQgdG8gc2lnbmFsIHRvIFF3aWsgd2hpY2ggc3RhdGUgc2hvdWxkIGJlIHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gKlxuICogVGhlIGBUcmFja2VyYCBpcyBwYXNzZWQgaW50byB0aGUgYHRhc2tGbmAgb2YgYHVzZVRhc2tgLiBJdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHdyYXAgc3RhdGVcbiAqIG9iamVjdHMgaW4gYSByZWFkIHByb3h5IHdoaWNoIHNpZ25hbHMgdG8gUXdpayB3aGljaCBwcm9wZXJ0aWVzIHNob3VsZCBiZSB3YXRjaGVkIGZvciBjaGFuZ2VzLiBBXG4gKiBjaGFuZ2UgdG8gYW55IG9mIHRoZSBwcm9wZXJ0aWVzIGNhdXNlcyB0aGUgYHRhc2tGbmAgdG8gcmVydW4uXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBUaGUgYG9ic2AgcGFzc2VkIGludG8gdGhlIGB0YXNrRm5gIGlzIHVzZWQgdG8gbWFyayBgc3RhdGUuY291bnRgIGFzIGEgcHJvcGVydHkgb2YgaW50ZXJlc3QuIEFueVxuICogY2hhbmdlcyB0byB0aGUgYHN0YXRlLmNvdW50YCBwcm9wZXJ0eSB3aWxsIGNhdXNlIHRoZSBgdGFza0ZuYCB0byByZXJ1bi5cbiAqXG4gKiBgYGB0c3hcbiAqIGNvbnN0IENtcCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKHsgY291bnQ6IDAsIGRvdWJsZUNvdW50OiAwIH0pO1xuICogICBjb25zdCBzaWduYWwgPSB1c2VTaWduYWwoMCk7XG4gKiAgIHVzZVRhc2skKCh7IHRyYWNrIH0pID0+IHtcbiAqICAgICAvLyBBbnkgc2lnbmFscyBvciBzdG9yZXMgYWNjZXNzZWQgaW5zaWRlIHRoZSB0YXNrIHdpbGwgYmUgdHJhY2tlZFxuICogICAgIGNvbnN0IGNvdW50ID0gdHJhY2soKCkgPT4gc3RvcmUuY291bnQpO1xuICogICAgIC8vIFlvdSBjYW4gYWxzbyBwYXNzIGEgc2lnbmFsIHRvIHRyYWNrKCkgZGlyZWN0bHlcbiAqICAgICBjb25zdCBzaWduYWxDb3VudCA9IHRyYWNrKHNpZ25hbCk7XG4gKiAgICAgc3RvcmUuZG91YmxlQ291bnQgPSBjb3VudCArIHNpZ25hbENvdW50O1xuICogICB9KTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPHNwYW4+XG4gKiAgICAgICAgIHtzdG9yZS5jb3VudH0gLyB7c3RvcmUuZG91YmxlQ291bnR9XG4gKiAgICAgICA8L3NwYW4+XG4gKiAgICAgICA8YnV0dG9uXG4gKiAgICAgICAgIG9uQ2xpY2skPXsoKSA9PiB7XG4gKiAgICAgICAgICAgc3RvcmUuY291bnQrKztcbiAqICAgICAgICAgICBzaWduYWwudmFsdWUrKztcbiAqICAgICAgICAgfX1cbiAqICAgICAgID5cbiAqICAgICAgICAgK1xuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNcbiAqIEBzZWUgYHVzZVRhc2tgXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tlciB7XG4gIC8qKlxuICAgKiBJbmNsdWRlIHRoZSBleHByZXNzaW9uIHVzaW5nIHN0b3JlcyAvIHNpZ25hbHMgdG8gdHJhY2s6XG4gICAqXG4gICAqIGBgYHRzeFxuICAgKiB0cmFjaygoKSA9PiBzdG9yZS5jb3VudCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBUaGUgYHRyYWNrKClgIGZ1bmN0aW9uIGFsc28gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjb3BlZCBleHByZXNzaW9uOlxuICAgKlxuICAgKiBgYGB0c3hcbiAgICogY29uc3QgY291bnQgPSB0cmFjaygoKSA9PiBzdG9yZS5jb3VudCk7XG4gICAqIGBgYFxuICAgKi9cbiAgPFQ+KGZuOiAoKSA9PiBUKTogVDtcblxuICAvKipcbiAgICogVXNlZCB0byB0cmFjayB0aGUgd2hvbGUgb2JqZWN0LiBJZiBhbnkgcHJvcGVydHkgb2YgdGhlIHBhc3NlZCBzdG9yZSBjaGFuZ2VzLCB0aGUgdGFzayB3aWxsIGJlXG4gICAqIHNjaGVkdWxlZCB0byBydW4uIEFsc28gYWNjZXB0cyBzaWduYWxzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIGNoYW5nZSB0cmFja2luZyBpcyBub3QgZGVlcC4gSWYgeW91IHdhbnQgdG8gdHJhY2sgY2hhbmdlcyB0byBuZXN0ZWQgcHJvcGVydGllcyxcbiAgICogeW91IG5lZWQgdG8gdXNlIGB0cmFja2Agb24gZWFjaCBvZiB0aGVtLlxuICAgKlxuICAgKiBgYGB0c3hcbiAgICogdHJhY2soc3RvcmUpOyAvLyByZXR1cm5zIHN0b3JlXG4gICAqIHRyYWNrKHNpZ25hbCk7IC8vIHJldHVybnMgc2lnbmFsLnZhbHVlXG4gICAqIGBgYFxuICAgKi9cbiAgPFQgZXh0ZW5kcyBvYmplY3Q+KG9iajogVCk6IFQgZXh0ZW5kcyBTaWduYWw8aW5mZXIgVT4gPyBVIDogVDtcblxuICAvKipcbiAgICogVXNlZCB0byB0cmFjayB0byB0cmFjayBhIHNwZWNpZmljIHByb3BlcnR5IG9mIGFuIG9iamVjdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBjaGFuZ2UgdHJhY2tpbmcgaXMgbm90IGRlZXAuIElmIHlvdSB3YW50IHRvIHRyYWNrIGNoYW5nZXMgdG8gbmVzdGVkIHByb3BlcnRpZXMsXG4gICAqIHlvdSBuZWVkIHRvIHVzZSBgdHJhY2tgIG9uIGVhY2ggb2YgdGhlbS5cbiAgICpcbiAgICogYGBgdHN4XG4gICAqIHRyYWNrKHN0b3JlLCAncHJvcEEnKTsgLy8gcmV0dXJucyBzdG9yZS5wcm9wQVxuICAgKiBgYGBcbiAgICovXG4gIDxUIGV4dGVuZHMgb2JqZWN0LCBQIGV4dGVuZHMga2V5b2YgVD4ob2JqOiBULCBwcm9wOiBQKTogVFtQXTtcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza0N0eCB7XG4gIHRyYWNrOiBUcmFja2VyO1xuICBjbGVhbnVwKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZDtcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFRhc2tGbiA9IChjdHg6IFRhc2tDdHgpID0+IFZhbHVlT3JQcm9taXNlPHZvaWQgfCAoKCkgPT4gdm9pZCk+O1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yQmFzZTxUID0gdW5rbm93biwgQiA9IHVua25vd24+IGV4dGVuZHMgQmFja1JlZiB7XG4gICRmbGFncyQ6IG51bWJlcjtcbiAgJGluZGV4JDogbnVtYmVyO1xuICAkZWwkOiBIb3N0RWxlbWVudDtcbiAgJHFybCQ6IFFSTEludGVybmFsPFQ+O1xuICAkc3RhdGUkOiBCIHwgdW5kZWZpbmVkO1xuICAkZGVzdHJveSQ6IE5vU2VyaWFsaXplPCgpID0+IHZvaWQ+IHwgbnVsbDtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHVzZVRhc2tRcmwgPSAocXJsOiBRUkw8VGFza0ZuPik6IHZvaWQgPT4ge1xuICBjb25zdCB7IHZhbCwgc2V0LCBpQ3R4LCBpIH0gPSB1c2VTZXF1ZW50aWFsU2NvcGU8MSB8IFRhc2s+KCk7XG4gIGlmICh2YWwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXNzZXJ0UXJsKHFybCk7XG4gIHNldCgxKTtcblxuICBjb25zdCB0YXNrID0gbmV3IFRhc2soXG4gICAgVGFza0ZsYWdzLkRJUlRZIHwgVGFza0ZsYWdzLlRBU0ssXG4gICAgaSxcbiAgICBpQ3R4LiRob3N0RWxlbWVudCQsXG4gICAgcXJsLFxuICAgIHVuZGVmaW5lZCxcbiAgICBudWxsXG4gICk7XG4gIC8vIEluIFYyIHdlIGFkZCB0aGUgdGFzayB0byB0aGUgc2VxdWVudGlhbCBzY29wZS4gV2UgbmVlZCB0byBkbyB0aGlzXG4gIC8vIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmV0cmlldmUgaXQgbGF0ZXIgd2hlbiB0aGUgcGFyZW50IGVsZW1lbnQgaXNcbiAgLy8gZGVsZXRlZCBhbmQgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlbGVhc2UgdGhlIHRhc2sgc3Vic2NyaXB0aW9ucy5cbiAgc2V0KHRhc2spO1xuICBjb25zdCBjb250YWluZXIgPSBpQ3R4LiRjb250YWluZXIkO1xuICBjb25zdCBwcm9taXNlID0gY29udGFpbmVyLiRzY2hlZHVsZXIkKENob3JlVHlwZS5UQVNLLCB0YXNrKTtcbiAgaWYgKGlzUHJvbWlzZShwcm9taXNlKSkge1xuICAgIC8vIFRPRE86IHNob3VsZCB3ZSBoYW5kbGUgdGhpcyBkaWZmZXJlbnRseT9cbiAgICBwcm9taXNlLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJ1blRhc2sgPSAoXG4gIHRhc2s6IFRhc2ssXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyLFxuICBob3N0OiBIb3N0RWxlbWVudFxuKTogVmFsdWVPclByb21pc2U8dm9pZD4gPT4ge1xuICB0YXNrLiRmbGFncyQgJj0gflRhc2tGbGFncy5ESVJUWTtcbiAgY2xlYW51cFRhc2sodGFzayk7XG4gIGNvbnN0IGlDdHggPSBuZXdJbnZva2VDb250ZXh0KGNvbnRhaW5lci4kbG9jYWxlJCwgaG9zdCwgdW5kZWZpbmVkLCBUYXNrRXZlbnQpO1xuICBpQ3R4LiRjb250YWluZXIkID0gY29udGFpbmVyO1xuICBjb25zdCB0YXNrRm4gPSB0YXNrLiRxcmwkLmdldEZuKGlDdHgsICgpID0+IGNsZWFyQWxsRWZmZWN0cyhjb250YWluZXIsIHRhc2spKSBhcyBUYXNrRm47XG5cbiAgY29uc3QgdHJhY2s6IFRyYWNrZXIgPSAob2JqOiAoKCkgPT4gdW5rbm93bikgfCBvYmplY3QgfCBTaWduYWw8dW5rbm93bj4sIHByb3A/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBjdHggPSBuZXdJbnZva2VDb250ZXh0KCk7XG4gICAgY3R4LiRlZmZlY3RTdWJzY3JpYmVyJCA9IGdldFN1YnNjcmliZXIodGFzaywgRWZmZWN0UHJvcGVydHkuQ09NUE9ORU5UKTtcbiAgICBjdHguJGNvbnRhaW5lciQgPSBjb250YWluZXI7XG4gICAgcmV0dXJuIGludm9rZShjdHgsICgpID0+IHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iaigpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIChvYmogYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3Byb3BdO1xuICAgICAgfSBlbHNlIGlmIChpc1NpZ25hbChvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmoudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGlzU3RvcmUob2JqKSkge1xuICAgICAgICAvLyB0cmFjayB3aG9sZSBzdG9yZVxuICAgICAgICBhZGRTdG9yZUVmZmVjdChcbiAgICAgICAgICBnZXRTdG9yZVRhcmdldChvYmopISxcbiAgICAgICAgICBTVE9SRV9BTExfUFJPUFMsXG4gICAgICAgICAgZ2V0U3RvcmVIYW5kbGVyKG9iaikhLFxuICAgICAgICAgIGN0eC4kZWZmZWN0U3Vic2NyaWJlciQhXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnRyYWNrT2JqZWN0V2l0aG91dFByb3ApO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBoYW5kbGVFcnJvciA9IChyZWFzb246IHVua25vd24pID0+IGNvbnRhaW5lci5oYW5kbGVFcnJvcihyZWFzb24sIGhvc3QpO1xuICBsZXQgY2xlYW51cEZuczogKCgpID0+IHZvaWQpW10gfCBudWxsID0gbnVsbDtcbiAgY29uc3QgY2xlYW51cCA9IChmbjogKCkgPT4gdm9pZCkgPT4ge1xuICAgIGlmICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKCFjbGVhbnVwRm5zKSB7XG4gICAgICAgIGNsZWFudXBGbnMgPSBbXTtcbiAgICAgICAgdGFzay4kZGVzdHJveSQgPSBub1NlcmlhbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGFzay4kZGVzdHJveSQgPSBudWxsO1xuICAgICAgICAgIGNsZWFudXBGbnMhLmZvckVhY2goKGZuKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIGhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY2xlYW51cEZucy5wdXNoKGZuKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdGFza0FwaTogVGFza0N0eCA9IHsgdHJhY2ssIGNsZWFudXAgfTtcbiAgY29uc3QgcmVzdWx0OiBWYWx1ZU9yUHJvbWlzZTx2b2lkPiA9IHNhZmVDYWxsKFxuICAgICgpID0+IHRhc2tGbih0YXNrQXBpKSxcbiAgICBjbGVhbnVwLFxuICAgIChlcnI6IHVua25vd24pID0+IHtcbiAgICAgIC8vIElmIGEgUHJvbWlzZSBpcyB0aHJvd24sIHRoYXQgbWVhbnMgd2UgbmVlZCB0byByZS1ydW4gdGhlIHRhc2suXG4gICAgICBpZiAoaXNQcm9taXNlKGVycikpIHtcbiAgICAgICAgcmV0dXJuIGVyci50aGVuKCgpID0+IHJ1blRhc2sodGFzaywgY29udGFpbmVyLCBob3N0KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICApO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFudXBUYXNrID0gKHRhc2s6IFRhc2spID0+IHtcbiAgY29uc3QgZGVzdHJveSA9IHRhc2suJGRlc3Ryb3kkO1xuICBpZiAoZGVzdHJveSkge1xuICAgIHRhc2suJGRlc3Ryb3kkID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgZGVzdHJveSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nRXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjbGFzcyBUYXNrPFQgPSB1bmtub3duLCBCID0gVD5cbiAgZXh0ZW5kcyBCYWNrUmVmXG4gIGltcGxlbWVudHMgRGVzY3JpcHRvckJhc2U8dW5rbm93biwgU2lnbmFsPEI+IHwgUmVzb3VyY2VSZXR1cm5JbnRlcm5hbDxCPj5cbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljICRmbGFncyQ6IG51bWJlcixcbiAgICBwdWJsaWMgJGluZGV4JDogbnVtYmVyLFxuICAgIHB1YmxpYyAkZWwkOiBIb3N0RWxlbWVudCxcbiAgICBwdWJsaWMgJHFybCQ6IFFSTEludGVybmFsPFQ+LFxuICAgIHB1YmxpYyAkc3RhdGUkOiBTaWduYWw8Qj4gfCBSZXNvdXJjZVJldHVybkludGVybmFsPEI+IHwgdW5kZWZpbmVkLFxuICAgIHB1YmxpYyAkZGVzdHJveSQ6IE5vU2VyaWFsaXplPCgpID0+IHZvaWQ+IHwgbnVsbFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBpc1Rhc2sgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIFRhc2sgPT4ge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUYXNrO1xufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgYXMgYSBxcmwgZXZlbnQgaGFuZGxlciB0byBzY2hlZHVsZSBhIHRhc2suXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBzY2hlZHVsZVRhc2sgPSAoX2V2ZW50OiBFdmVudCwgZWxlbWVudDogRWxlbWVudCkgPT4ge1xuICBjb25zdCBbdGFza10gPSB1c2VMZXhpY2FsU2NvcGU8W1Rhc2tdPigpO1xuICBjb25zdCB0eXBlID0gdGFzay4kZmxhZ3MkICYgVGFza0ZsYWdzLlZJU0lCTEVfVEFTSyA/IENob3JlVHlwZS5WSVNJQkxFIDogQ2hvcmVUeXBlLlRBU0s7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldERvbUNvbnRhaW5lcihlbGVtZW50KTtcbiAgY29udGFpbmVyLiRzY2hlZHVsZXIkKHR5cGUsIHRhc2spO1xufTtcbiJdfQ==","import { ComponentStylesPrefixContent } from './markers';\nexport const styleContent = (styleId) => {\n    return ComponentStylesPrefixContent + styleId;\n};\nexport function hasClassAttr(props) {\n    for (const key in props) {\n        if (Object.prototype.hasOwnProperty.call(props, key) && isClassAttr(key)) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function isClassAttr(key) {\n    return key === 'class' || key === 'className';\n}\nexport function getScopedStyleIdsAsPrefix(scopedStyleIds) {\n    return Array.from(scopedStyleIds)\n        .map((styleId) => styleContent(styleId))\n        .join(' ');\n}\nexport function convertScopedStyleIdsToArray(scopedStyleIds) {\n    return scopedStyleIds?.split(' ') ?? null;\n}\nexport function convertStyleIdsToString(scopedStyleIds) {\n    return Array.from(scopedStyleIds).join(' ');\n}\nexport const addComponentStylePrefix = (styleId) => {\n    if (styleId) {\n        let idx = 0;\n        do {\n            styleId = styleId.substring(0, idx) + styleContent(styleId.substring(idx));\n        } while ((idx = styleId.indexOf(' ', idx) + 1) !== 0);\n    }\n    return styleId || null;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGVkLXN0eWxlcy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvc2NvcGVkLXN0eWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUU7SUFDdEQsT0FBTyw0QkFBNEIsR0FBRyxPQUFPLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFZO0lBQ3ZDLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQVc7SUFDckMsT0FBTyxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUcsS0FBSyxXQUFXLENBQUM7QUFDaEQsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxjQUEyQjtJQUNuRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQzlCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsNEJBQTRCLENBQUMsY0FBOEI7SUFDekUsT0FBTyxjQUFjLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUM1QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLGNBQTJCO0lBQ2pFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBdUIsRUFBaUIsRUFBRTtJQUNoRixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osR0FBRyxDQUFDO1lBQ0YsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUN4RCxDQUFDO0lBQ0QsT0FBTyxPQUFPLElBQUksSUFBSSxDQUFDO0FBQ3pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcHMgfSBmcm9tICcuLi9qc3gvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3R5bGVzUHJlZml4Q29udGVudCB9IGZyb20gJy4vbWFya2Vycyc7XG5cbmV4cG9ydCBjb25zdCBzdHlsZUNvbnRlbnQgPSAoc3R5bGVJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIENvbXBvbmVudFN0eWxlc1ByZWZpeENvbnRlbnQgKyBzdHlsZUlkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0NsYXNzQXR0cihwcm9wczogUHJvcHMpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpICYmIGlzQ2xhc3NBdHRyKGtleSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NsYXNzQXR0cihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4ga2V5ID09PSAnY2xhc3MnIHx8IGtleSA9PT0gJ2NsYXNzTmFtZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY29wZWRTdHlsZUlkc0FzUHJlZml4KHNjb3BlZFN0eWxlSWRzOiBTZXQ8c3RyaW5nPik6IHN0cmluZyB7XG4gIHJldHVybiBBcnJheS5mcm9tKHNjb3BlZFN0eWxlSWRzKVxuICAgIC5tYXAoKHN0eWxlSWQpID0+IHN0eWxlQ29udGVudChzdHlsZUlkKSlcbiAgICAuam9pbignICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNjb3BlZFN0eWxlSWRzVG9BcnJheShzY29wZWRTdHlsZUlkcz86IHN0cmluZyB8IG51bGwpOiBBcnJheTxzdHJpbmc+IHwgbnVsbCB7XG4gIHJldHVybiBzY29wZWRTdHlsZUlkcz8uc3BsaXQoJyAnKSA/PyBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFN0eWxlSWRzVG9TdHJpbmcoc2NvcGVkU3R5bGVJZHM6IFNldDxzdHJpbmc+KTogc3RyaW5nIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oc2NvcGVkU3R5bGVJZHMpLmpvaW4oJyAnKTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZENvbXBvbmVudFN0eWxlUHJlZml4ID0gKHN0eWxlSWQ/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmIChzdHlsZUlkKSB7XG4gICAgbGV0IGlkeCA9IDA7XG4gICAgZG8ge1xuICAgICAgc3R5bGVJZCA9IHN0eWxlSWQuc3Vic3RyaW5nKDAsIGlkeCkgKyBzdHlsZUNvbnRlbnQoc3R5bGVJZC5zdWJzdHJpbmcoaWR4KSk7XG4gICAgfSB3aGlsZSAoKGlkeCA9IHN0eWxlSWQuaW5kZXhPZignICcsIGlkeCkgKyAxKSAhPT0gMCk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlSWQgfHwgbnVsbDtcbn07XG4iXX0=","/**\n * A friendly name tag for a VirtualVNode.\n *\n * Theses are used to give a name to a VirtualVNode. This is useful for debugging and testing.\n *\n * The name is only added in development mode and is not included in production builds.\n */\nexport const DEBUG_TYPE = 'q:type';\nconst START = '\\x1b[34m';\nconst END = '\\x1b[0m';\nexport const VirtualTypeName = {\n    [\"V\" /* VirtualType.Virtual */]: /* ********* */ START + 'Virtual' + END, //\n    [\"F\" /* VirtualType.Fragment */]: /* ******** */ START + 'Fragment' + END, //\n    [\"S\" /* VirtualType.WrappedSignal */]: /* *** */ START + 'Signal' + END, //\n    [\"A\" /* VirtualType.Awaited */]: /* ********* */ START + 'Awaited' + END, //\n    [\"C\" /* VirtualType.Component */]: /* ******* */ START + 'Component' + END, //\n    [\"I\" /* VirtualType.InlineComponent */]: /* * */ START + 'InlineComponent' + END, //\n    [\"P\" /* VirtualType.Projection */]: /* ****** */ START + 'Projection' + END, //\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVFQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDO0FBWW5DLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUN6QixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUM7QUFFdEIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUEyQjtJQUNyRCwrQkFBcUIsRUFBRSxlQUFlLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxHQUFHLEVBQUUsRUFBRTtJQUNsRSxnQ0FBc0IsRUFBRSxjQUFjLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxHQUFHLEVBQUUsRUFBRTtJQUNuRSxxQ0FBMkIsRUFBRSxTQUFTLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxHQUFHLEVBQUUsRUFBRTtJQUNqRSwrQkFBcUIsRUFBRSxlQUFlLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxHQUFHLEVBQUUsRUFBRTtJQUNsRSxpQ0FBdUIsRUFBRSxhQUFhLENBQUMsS0FBSyxHQUFHLFdBQVcsR0FBRyxHQUFHLEVBQUUsRUFBRTtJQUNwRSx1Q0FBNkIsRUFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxFQUFFO0lBQzFFLGtDQUF3QixFQUFFLFlBQVksQ0FBQyxLQUFLLEdBQUcsWUFBWSxHQUFHLEdBQUcsRUFBRSxFQUFFO0NBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnRleHRJZCB9IGZyb20gJy4uL3VzZS91c2UtY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7IFZOb2RlIH0gZnJvbSAnLi4vY2xpZW50L3R5cGVzJztcbmltcG9ydCB0eXBlIHsgSVNzck5vZGUsIFN0cmVhbVdyaXRlciwgU3ltYm9sVG9DaHVua1Jlc29sdmVyIH0gZnJvbSAnLi4vc3NyL3Nzci10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNjaGVkdWxlciB9IGZyb20gJy4vc2NoZWR1bGVyJztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphdGlvbkNvbnRleHQgfSBmcm9tICcuL3NoYXJlZC1zZXJpYWxpemF0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBEZXNlcmlhbGl6ZUNvbnRhaW5lciB7XG4gICRnZXRPYmplY3RCeUlkJDogKGlkOiBudW1iZXIgfCBzdHJpbmcpID0+IHVua25vd247XG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgZ2V0U3luY0ZuOiAoaWQ6IG51bWJlcikgPT4gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcbiAgJHN0YXRlJD86IHVua25vd25bXTtcbiAgJHN0b3JlUHJveHlNYXAkOiBPYmpUb1Byb3h5TWFwO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lciB7XG4gIHJlYWRvbmx5ICR2ZXJzaW9uJDogc3RyaW5nO1xuICByZWFkb25seSAkc2NoZWR1bGVyJDogU2NoZWR1bGVyO1xuICByZWFkb25seSAkc3RvcmVQcm94eU1hcCQ6IE9ialRvUHJveHlNYXA7XG4gIC8vLyBDdXJyZW50IGxhbmd1YWdlIGxvY2FsZVxuICByZWFkb25seSAkbG9jYWxlJDogc3RyaW5nO1xuICAvLy8gUmV0cmlldmUgT2JqZWN0IGZyb20gcGF1c2VkIHNlcmlhbGl6ZWQgc3RhdGUuXG4gIHJlYWRvbmx5ICRnZXRPYmplY3RCeUlkJDogKGlkOiBudW1iZXIgfCBzdHJpbmcpID0+IGFueTtcbiAgcmVhZG9ubHkgJHNlcnZlckRhdGEkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAkY3VycmVudFVuaXF1ZUlkJDogbnVtYmVyO1xuICAkYnVpbGRCYXNlJDogc3RyaW5nIHwgbnVsbDtcblxuICBoYW5kbGVFcnJvcihlcnI6IGFueSwgJGhvc3QkOiBIb3N0RWxlbWVudCk6IHZvaWQ7XG4gIGdldFBhcmVudEhvc3QoaG9zdDogSG9zdEVsZW1lbnQpOiBIb3N0RWxlbWVudCB8IG51bGw7XG4gIHNldENvbnRleHQ8VD4oaG9zdDogSG9zdEVsZW1lbnQsIGNvbnRleHQ6IENvbnRleHRJZDxUPiwgdmFsdWU6IFQpOiB2b2lkO1xuICByZXNvbHZlQ29udGV4dDxUPihob3N0OiBIb3N0RWxlbWVudCwgY29udGV4dElkOiBDb250ZXh0SWQ8VD4pOiBUIHwgdW5kZWZpbmVkO1xuICBzZXRIb3N0UHJvcDxUPihob3N0OiBIb3N0RWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQ7XG4gIGdldEhvc3RQcm9wPFQ+KGhvc3Q6IEhvc3RFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiBUIHwgbnVsbDtcbiAgJGFwcGVuZFN0eWxlJChjb250ZW50OiBzdHJpbmcsIHN0eWxlSWQ6IHN0cmluZywgaG9zdDogSG9zdEVsZW1lbnQsIHNjb3BlZDogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKlxuICAgKiBXaGVuIGNvbXBvbmVudCBpcyBhYm91dCB0byBiZSBleGVjdXRlZCwgaXQgbWF5IGFkZC9yZW1vdmUgY2hpbGRyZW4uIFRoaXMgY2FuIGNhdXNlIHByb2JsZW1zXG4gICAqIHdpdGggdGhlIHByb2plY3Rpb24gYmVjYXVzZSBkZWxldGluZyBjb250ZW50IHdpbGwgcHJldmVudCB0aGUgcHJvamVjdGlvbiByZWZlcmVuY2VzIGZyb21cbiAgICogbG9va2luZyB1cCB2bm9kZXMuIFRoZXJlZm9yZSBiZWZvcmUgd2UgZXhlY3V0ZSB0aGUgY29tcG9uZW50IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsIG9mIGl0c1xuICAgKiByZWZlcmVuY2VzIHRvIHZub2RlIGFyZSByZXNvbHZlZC5cbiAgICpcbiAgICogQHBhcmFtIHJlbmRlckhvc3QgLSBIb3N0IGVsZW1lbnQgdG8gZW5zdXJlIHByb2plY3Rpb24gaXMgcmVzb2x2ZWQuXG4gICAqL1xuICBlbnN1cmVQcm9qZWN0aW9uUmVzb2x2ZWQoaG9zdDogSG9zdEVsZW1lbnQpOiB2b2lkO1xuICBzZXJpYWxpemF0aW9uQ3R4RmFjdG9yeShcbiAgICBOb2RlQ29uc3RydWN0b3I6IHtcbiAgICAgIG5ldyAoLi4ucmVzdDogYW55W10pOiB7IG5vZGVUeXBlOiBudW1iZXI7IGlkOiBzdHJpbmcgfTtcbiAgICB9IHwgbnVsbCxcbiAgICBEb21SZWZDb25zdHJ1Y3Rvcjoge1xuICAgICAgbmV3ICguLi5yZXN0OiBhbnlbXSk6IHsgJHNzck5vZGUkOiBJU3NyTm9kZSB9O1xuICAgIH0gfCBudWxsLFxuICAgIHN5bWJvbFRvQ2h1bmtSZXNvbHZlcjogU3ltYm9sVG9DaHVua1Jlc29sdmVyLFxuICAgIHdyaXRlcj86IFN0cmVhbVdyaXRlclxuICApOiBTZXJpYWxpemF0aW9uQ29udGV4dDtcbn1cblxuZXhwb3J0IHR5cGUgSG9zdEVsZW1lbnQgPSBWTm9kZSB8IElTc3JOb2RlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFFFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICBxRGlzcGF0Y2hFdmVudD86IChldmVudDogRXZlbnQsIHNjb3BlOiBRd2lrTG9hZGVyRXZlbnRTY29wZSkgPT4gYm9vbGVhbjtcbiAgdk5vZGU/OiBXZWFrUmVmPFZOb2RlPjtcbn1cblxuZXhwb3J0IHR5cGUgcVdpbmRvdyA9IFdpbmRvdyAmIHtcbiAgcXdpa2V2ZW50czoge1xuICAgIGV2ZW50czogU2V0PHN0cmluZz47XG4gICAgcm9vdHM6IFNldDxOb2RlPjtcbiAgICBwdXNoOiAoLi4uZTogKHN0cmluZyB8IChFdmVudFRhcmdldCAmIFBhcmVudE5vZGUpKVtdKSA9PiB2b2lkO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgUXdpa0xvYWRlckV2ZW50U2NvcGUgPSAnLWRvY3VtZW50JyB8ICctd2luZG93JyB8ICcnO1xuXG4vKipcbiAqIEEgZnJpZW5kbHkgbmFtZSB0YWcgZm9yIGEgVmlydHVhbFZOb2RlLlxuICpcbiAqIFRoZXNlcyBhcmUgdXNlZCB0byBnaXZlIGEgbmFtZSB0byBhIFZpcnR1YWxWTm9kZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZy5cbiAqXG4gKiBUaGUgbmFtZSBpcyBvbmx5IGFkZGVkIGluIGRldmVsb3BtZW50IG1vZGUgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFQlVHX1RZUEUgPSAncTp0eXBlJztcblxuZXhwb3J0IGNvbnN0IGVudW0gVmlydHVhbFR5cGUge1xuICBWaXJ0dWFsID0gJ1YnLFxuICBGcmFnbWVudCA9ICdGJyxcbiAgV3JhcHBlZFNpZ25hbCA9ICdTJyxcbiAgQXdhaXRlZCA9ICdBJyxcbiAgQ29tcG9uZW50ID0gJ0MnLFxuICBJbmxpbmVDb21wb25lbnQgPSAnSScsXG4gIFByb2plY3Rpb24gPSAnUCcsXG59XG5cbmNvbnN0IFNUQVJUID0gJ1xceDFiWzM0bSc7XG5jb25zdCBFTkQgPSAnXFx4MWJbMG0nO1xuXG5leHBvcnQgY29uc3QgVmlydHVhbFR5cGVOYW1lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBbVmlydHVhbFR5cGUuVmlydHVhbF06IC8qICoqKioqKioqKiAqLyBTVEFSVCArICdWaXJ0dWFsJyArIEVORCwgLy9cbiAgW1ZpcnR1YWxUeXBlLkZyYWdtZW50XTogLyogKioqKioqKiogKi8gU1RBUlQgKyAnRnJhZ21lbnQnICsgRU5ELCAvL1xuICBbVmlydHVhbFR5cGUuV3JhcHBlZFNpZ25hbF06IC8qICoqKiAqLyBTVEFSVCArICdTaWduYWwnICsgRU5ELCAvL1xuICBbVmlydHVhbFR5cGUuQXdhaXRlZF06IC8qICoqKioqKioqKiAqLyBTVEFSVCArICdBd2FpdGVkJyArIEVORCwgLy9cbiAgW1ZpcnR1YWxUeXBlLkNvbXBvbmVudF06IC8qICoqKioqKiogKi8gU1RBUlQgKyAnQ29tcG9uZW50JyArIEVORCwgLy9cbiAgW1ZpcnR1YWxUeXBlLklubGluZUNvbXBvbmVudF06IC8qICogKi8gU1RBUlQgKyAnSW5saW5lQ29tcG9uZW50JyArIEVORCwgLy9cbiAgW1ZpcnR1YWxUeXBlLlByb2plY3Rpb25dOiAvKiAqKioqKiogKi8gU1RBUlQgKyAnUHJvamVjdGlvbicgKyBFTkQsIC8vXG59O1xuXG5leHBvcnQgY29uc3QgZW51bSBRQ29udGFpbmVyVmFsdWUge1xuICBQQVVTRUQgPSAncGF1c2VkJyxcbiAgUkVTVU1FRCA9ICdyZXN1bWVkJyxcbiAgLy8gdGhlc2UgdmFsdWVzIGJlbG93IGFyZSB1c2VkIGluIHRoZSBxd2lrIGxvYWRlciBhcyBhIHBsYWluIHRleHQgZm9yIHRoZSBxOmNvbnRhaW5lciBzZWxlY3RvclxuICAvLyBzdGFuZGFyZCBkYW5nZXJvdXNseVNldElubmVySFRNTFxuICBIVE1MID0gJ2h0bWwnLFxuICAvLyB0ZXh0YXJlYVxuICBURVhUID0gJ3RleHQnLFxufVxuXG5leHBvcnQgdHlwZSBPYmpUb1Byb3h5TWFwID0gV2Vha01hcDxhbnksIGFueT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUUNvbnRhaW5lckVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgcUZ1bmNzPzogRnVuY3Rpb25bXTtcbiAgX3F3aWtqc29uXz86IGFueTtcbn1cbiJdfQ==","import { assertTrue } from '../shared/error/assert';\nexport const mapApp_findIndx = (array, key, start) => {\n    assertTrue(start % 2 === 0, 'Expecting even number.');\n    let bottom = start >> 1;\n    let top = (array.length - 2) >> 1;\n    while (bottom <= top) {\n        const mid = bottom + ((top - bottom) >> 1);\n        const midKey = array[mid << 1];\n        if (midKey === key) {\n            return mid << 1;\n        }\n        if (midKey < key) {\n            bottom = mid + 1;\n        }\n        else {\n            top = mid - 1;\n        }\n    }\n    return (bottom << 1) ^ -1;\n};\nexport const mapArray_set = (array, key, value, start) => {\n    const indx = mapApp_findIndx(array, key, start);\n    if (indx >= 0) {\n        if (value == null) {\n            array.splice(indx, 2);\n        }\n        else {\n            array[indx + 1] = value;\n        }\n    }\n    else if (value != null) {\n        array.splice(indx ^ -1, 0, key, value);\n    }\n};\nexport const mapApp_remove = (array, key, start) => {\n    const indx = mapApp_findIndx(array, key, start);\n    let value = null;\n    if (indx >= 0) {\n        value = array[indx + 1];\n        array.splice(indx, 2);\n        return value;\n    }\n    return value;\n};\nexport const mapArray_get = (array, key, start) => {\n    const indx = mapApp_findIndx(array, key, start);\n    if (indx >= 0) {\n        return array[indx + 1];\n    }\n    else {\n        return null;\n    }\n};\nexport const mapArray_has = (array, key, start) => {\n    return mapApp_findIndx(array, key, start) >= 0;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC1tYXBBcnJheS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9jbGllbnQvdXRpbC1tYXBBcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUksS0FBbUIsRUFBRSxHQUFXLEVBQUUsS0FBYSxFQUFVLEVBQUU7SUFDNUYsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDdEQsSUFBSSxNQUFNLEdBQUksS0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDcEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxPQUFPLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNyQixNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBVyxDQUFDO1FBQ3pDLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQzFCLEtBQW1CLEVBQ25CLEdBQVcsRUFDWCxLQUFlLEVBQ2YsS0FBYSxFQUNiLEVBQUU7SUFDRixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNkLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBSSxLQUFtQixFQUFFLEdBQVcsRUFBRSxLQUFhLEVBQVksRUFBRTtJQUM1RixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxJQUFJLEtBQUssR0FBYSxJQUFJLENBQUM7SUFDM0IsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDZCxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4QixLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFJLEtBQW1CLEVBQUUsR0FBVyxFQUFFLEtBQWEsRUFBWSxFQUFFO0lBQzNGLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBYSxDQUFDO0lBQ3JDLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUksS0FBbUIsRUFBRSxHQUFXLEVBQUUsS0FBYSxFQUFXLEVBQUU7SUFDMUYsT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0VHJ1ZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci9hc3NlcnQnO1xuXG5leHBvcnQgY29uc3QgbWFwQXBwX2ZpbmRJbmR4ID0gPFQ+KGFycmF5OiAoVCB8IG51bGwpW10sIGtleTogc3RyaW5nLCBzdGFydDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgYXNzZXJ0VHJ1ZShzdGFydCAlIDIgPT09IDAsICdFeHBlY3RpbmcgZXZlbiBudW1iZXIuJyk7XG4gIGxldCBib3R0b20gPSAoc3RhcnQgYXMgbnVtYmVyKSA+PiAxO1xuICBsZXQgdG9wID0gKGFycmF5Lmxlbmd0aCAtIDIpID4+IDE7XG4gIHdoaWxlIChib3R0b20gPD0gdG9wKSB7XG4gICAgY29uc3QgbWlkID0gYm90dG9tICsgKCh0b3AgLSBib3R0b20pID4+IDEpO1xuICAgIGNvbnN0IG1pZEtleSA9IGFycmF5W21pZCA8PCAxXSBhcyBzdHJpbmc7XG4gICAgaWYgKG1pZEtleSA9PT0ga2V5KSB7XG4gICAgICByZXR1cm4gbWlkIDw8IDE7XG4gICAgfVxuICAgIGlmIChtaWRLZXkgPCBrZXkpIHtcbiAgICAgIGJvdHRvbSA9IG1pZCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvcCA9IG1pZCAtIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiAoYm90dG9tIDw8IDEpIF4gLTE7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwQXJyYXlfc2V0ID0gPFQ+KFxuICBhcnJheTogKFQgfCBudWxsKVtdLFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IFQgfCBudWxsLFxuICBzdGFydDogbnVtYmVyXG4pID0+IHtcbiAgY29uc3QgaW5keCA9IG1hcEFwcF9maW5kSW5keChhcnJheSwga2V5LCBzdGFydCk7XG4gIGlmIChpbmR4ID49IDApIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgYXJyYXkuc3BsaWNlKGluZHgsIDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcnJheVtpbmR4ICsgMV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIGFycmF5LnNwbGljZShpbmR4IF4gLTEsIDAsIGtleSBhcyBhbnksIHZhbHVlKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG1hcEFwcF9yZW1vdmUgPSA8VD4oYXJyYXk6IChUIHwgbnVsbClbXSwga2V5OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIpOiBUIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGluZHggPSBtYXBBcHBfZmluZEluZHgoYXJyYXksIGtleSwgc3RhcnQpO1xuICBsZXQgdmFsdWU6IFQgfCBudWxsID0gbnVsbDtcbiAgaWYgKGluZHggPj0gMCkge1xuICAgIHZhbHVlID0gYXJyYXlbaW5keCArIDFdO1xuICAgIGFycmF5LnNwbGljZShpbmR4LCAyKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcEFycmF5X2dldCA9IDxUPihhcnJheTogKFQgfCBudWxsKVtdLCBrZXk6IHN0cmluZywgc3RhcnQ6IG51bWJlcik6IFQgfCBudWxsID0+IHtcbiAgY29uc3QgaW5keCA9IG1hcEFwcF9maW5kSW5keChhcnJheSwga2V5LCBzdGFydCk7XG4gIGlmIChpbmR4ID49IDApIHtcbiAgICByZXR1cm4gYXJyYXlbaW5keCArIDFdIGFzIFQgfCBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbWFwQXJyYXlfaGFzID0gPFQ+KGFycmF5OiAoVCB8IG51bGwpW10sIGtleTogc3RyaW5nLCBzdGFydDogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBtYXBBcHBfZmluZEluZHgoYXJyYXksIGtleSwgc3RhcnQpID49IDA7XG59O1xuIl19","import { isDev } from '@qwik.dev/core/build';\nimport { HTML_NS, MATH_NS, Q_PROPS_SEPARATOR, SVG_NS } from '../shared/utils/markers';\nimport { getDomContainerFromQContainerElement } from './dom-container';\nimport { ensureElementVNode, fastNamespaceURI, shouldIgnoreChildren, vnode_getDOMChildNodes, vnode_getDomParentVNode, vnode_getElementName, vnode_getFirstChild, vnode_getNextSibling, vnode_getParent, vnode_isElementVNode, vnode_isTextVNode, } from './vnode';\nexport const isForeignObjectElement = (elementName) => {\n    return isDev ? elementName.toLowerCase() === 'foreignobject' : elementName === 'foreignObject';\n};\nexport const isSvgElement = (elementName) => elementName === 'svg' || isForeignObjectElement(elementName);\nexport const isMathElement = (elementName) => elementName === 'math';\nexport const vnode_isDefaultNamespace = (vnode) => {\n    const flags = vnode[0 /* VNodeProps.flags */];\n    return (flags & 192 /* VNodeFlags.NAMESPACE_MASK */) === 0;\n};\nexport const vnode_getElementNamespaceFlags = (element) => {\n    const namespace = fastNamespaceURI(element);\n    switch (namespace) {\n        case SVG_NS:\n            return 64 /* VNodeFlags.NS_svg */;\n        case MATH_NS:\n            return 128 /* VNodeFlags.NS_math */;\n        default:\n            return 0 /* VNodeFlags.NS_html */;\n    }\n};\nexport function vnode_getDomChildrenWithCorrectNamespacesToInsert(journal, domParentVNode, newChild) {\n    const { elementNamespace, elementNamespaceFlag } = getNewElementNamespaceData(domParentVNode, newChild);\n    let domChildren = [];\n    if (elementNamespace === HTML_NS) {\n        // parent is in the default namespace, so just get the dom children. This is the fast path.\n        domChildren = vnode_getDOMChildNodes(journal, newChild);\n    }\n    else {\n        // parent is in a different namespace, so we need to clone the children with the correct namespace.\n        // The namespace cannot be changed on nodes, so we need to clone these nodes\n        const children = vnode_getDOMChildNodes(journal, newChild, true);\n        for (let i = 0; i < children.length; i++) {\n            const childVNode = children[i];\n            if (vnode_isTextVNode(childVNode)) {\n                // text nodes are always in the default namespace\n                domChildren.push(childVNode[4 /* TextVNodeProps.node */]);\n                continue;\n            }\n            if ((childVNode[0 /* VNodeProps.flags */] & 192 /* VNodeFlags.NAMESPACE_MASK */) ===\n                (domParentVNode[0 /* VNodeProps.flags */] & 192 /* VNodeFlags.NAMESPACE_MASK */)) {\n                // if the child and parent have the same namespace, we don't need to clone the element\n                domChildren.push(childVNode[6 /* ElementVNodeProps.element */]);\n                continue;\n            }\n            // clone the element with the correct namespace\n            const newChildElement = vnode_cloneElementWithNamespace(childVNode, domParentVNode, elementNamespace, elementNamespaceFlag);\n            if (newChildElement) {\n                domChildren.push(newChildElement);\n            }\n        }\n    }\n    return domChildren;\n}\n/** This function clones an element with a different namespace, but without the children. */\nfunction cloneElementWithNamespace(element, elementName, namespace) {\n    const newElement = element.ownerDocument.createElementNS(namespace, elementName);\n    const attributes = element.attributes;\n    for (const attribute of attributes) {\n        const name = attribute.name;\n        const value = attribute.value;\n        if (!name || name === Q_PROPS_SEPARATOR) {\n            continue;\n        }\n        newElement.setAttribute(name, value);\n    }\n    return newElement;\n}\n/**\n * This function clones an ElementVNode with a different namespace, including the children. This\n * traverse the tree using depth-first search and clones the elements using\n * `cloneElementWithNamespace`.\n */\nfunction vnode_cloneElementWithNamespace(elementVNode, parentVNode, namespace, namespaceFlag) {\n    ensureElementVNode(elementVNode);\n    let vCursor = elementVNode;\n    let vParent = null;\n    let rootElement = null;\n    let parentElement = null;\n    while (vCursor) {\n        let childElement = null;\n        let newChildElement = null;\n        if (vnode_isElementVNode(vCursor)) {\n            // Clone the element\n            childElement = vCursor[6 /* ElementVNodeProps.element */];\n            const childElementTag = vnode_getElementName(vCursor);\n            // We need to check if the parent is a foreignObject element\n            // and get a new namespace data.\n            const vCursorParent = vnode_getParent(vCursor);\n            // For the first vNode parentNode is not parent from vNode tree, but parent from DOM tree\n            // this is because vNode is not moved yet.\n            // rootElement is null only for the first vNode\n            const vCursorDomParent = rootElement == null ? parentVNode : vCursorParent && vnode_getDomParentVNode(vCursorParent);\n            if (vCursorDomParent) {\n                const namespaceData = getNewElementNamespaceData(vCursorDomParent, vnode_getElementName(vCursor));\n                namespace = namespaceData.elementNamespace;\n                namespaceFlag = namespaceData.elementNamespaceFlag;\n            }\n            newChildElement = cloneElementWithNamespace(childElement, childElementTag, namespace);\n            childElement.remove();\n            if (rootElement == null) {\n                rootElement = newChildElement;\n            }\n            if (parentElement) {\n                parentElement.appendChild(newChildElement);\n            }\n            // Descend into children\n            // We need first get the first child, if any\n            const vFirstChild = vnode_getFirstChild(vCursor);\n            // Then we can overwrite the cursor with newly created element.\n            // This is because we need to materialize the children before we assign new element\n            vCursor[6 /* ElementVNodeProps.element */] = newChildElement;\n            // Set correct namespace flag\n            vCursor[0 /* VNodeProps.flags */] &= -193 /* VNodeFlags.NEGATED_NAMESPACE_MASK */;\n            vCursor[0 /* VNodeProps.flags */] |= namespaceFlag;\n            if (vFirstChild) {\n                vCursor = vFirstChild;\n                parentElement = newChildElement;\n                continue;\n            }\n            else if (shouldIgnoreChildren(childElement)) {\n                // If we should ignore children of the element this means that the element is a container\n                // We need to get the first child of the container\n                const container = getDomContainerFromQContainerElement(childElement);\n                if (container) {\n                    const innerContainerFirstVNode = vnode_getFirstChild(container.rootVNode);\n                    if (innerContainerFirstVNode) {\n                        vCursor = innerContainerFirstVNode;\n                        parentElement = newChildElement;\n                        continue;\n                    }\n                }\n            }\n        }\n        if (vCursor === elementVNode) {\n            // we are where we started, this means that vNode has no children, so we are done.\n            return rootElement;\n        }\n        // Out of children, go to next sibling\n        const vNextSibling = vnode_getNextSibling(vCursor);\n        if (vNextSibling) {\n            vCursor = vNextSibling;\n            continue;\n        }\n        // Out of siblings, go to parent\n        vParent = vnode_getParent(vCursor);\n        while (vParent) {\n            if (vParent === elementVNode) {\n                // We are back where we started, we are done.\n                return rootElement;\n            }\n            const vNextParentSibling = vnode_getNextSibling(vParent);\n            if (vNextParentSibling) {\n                vCursor = vNextParentSibling;\n                return rootElement;\n            }\n            vParent = vnode_getParent(vParent);\n        }\n        if (vParent == null) {\n            // We are done.\n            return rootElement;\n        }\n    }\n    return rootElement;\n}\nfunction isSvg(tagOrVNode) {\n    return typeof tagOrVNode === 'string'\n        ? isSvgElement(tagOrVNode)\n        : (tagOrVNode[0 /* VNodeProps.flags */] & 64 /* VNodeFlags.NS_svg */) !== 0;\n}\nfunction isMath(tagOrVNode) {\n    return typeof tagOrVNode === 'string'\n        ? isMathElement(tagOrVNode)\n        : (tagOrVNode[0 /* VNodeProps.flags */] & 128 /* VNodeFlags.NS_math */) !== 0;\n}\nexport function getNewElementNamespaceData(domParentVNode, tagOrVNode) {\n    const parentIsDefaultNamespace = domParentVNode\n        ? !!vnode_getElementName(domParentVNode) && vnode_isDefaultNamespace(domParentVNode)\n        : true;\n    const parentIsForeignObject = !parentIsDefaultNamespace\n        ? isForeignObjectElement(vnode_getElementName(domParentVNode))\n        : false;\n    let elementNamespace = HTML_NS;\n    let elementNamespaceFlag = 0 /* VNodeFlags.NS_html */;\n    const isElementVNodeOrString = typeof tagOrVNode === 'string' || vnode_isElementVNode(tagOrVNode);\n    if (isElementVNodeOrString && isSvg(tagOrVNode)) {\n        elementNamespace = SVG_NS;\n        elementNamespaceFlag = 64 /* VNodeFlags.NS_svg */;\n    }\n    else if (isElementVNodeOrString && isMath(tagOrVNode)) {\n        elementNamespace = MATH_NS;\n        elementNamespaceFlag = 128 /* VNodeFlags.NS_math */;\n    }\n    else if (domParentVNode && !parentIsForeignObject && !parentIsDefaultNamespace) {\n        const isParentSvg = (domParentVNode[0 /* VNodeProps.flags */] & 64 /* VNodeFlags.NS_svg */) !== 0;\n        const isParentMath = (domParentVNode[0 /* VNodeProps.flags */] & 128 /* VNodeFlags.NS_math */) !== 0;\n        elementNamespace = isParentSvg ? SVG_NS : isParentMath ? MATH_NS : HTML_NS;\n        elementNamespaceFlag = domParentVNode[0 /* VNodeProps.flags */] & 192 /* VNodeFlags.NAMESPACE_MASK */;\n    }\n    return {\n        elementNamespace,\n        elementNamespaceFlag,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm5vZGUtbmFtZXNwYWNlLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL2NsaWVudC92bm9kZS1uYW1lc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBU3ZFLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsaUJBQWlCLEdBRWxCLE1BQU0sU0FBUyxDQUFDO0FBRWpCLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFO0lBQzVELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssZUFBZSxDQUFDO0FBQ2pHLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRSxDQUNsRCxXQUFXLEtBQUssS0FBSyxJQUFJLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRSxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxLQUFtQixFQUFXLEVBQUU7SUFDdkUsTUFBTSxLQUFLLEdBQUcs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QUM7UUFDakYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxjQUFjLDBCQUFrQiwrQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuRixnQkFBZ0IsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUMzRSxvQkFBb0IsR0FBRyxjQUFjLDBCQUFrQixzQ0FBNEIsQ0FBQztJQUN0RixDQUFDO0lBRUQsT0FBTztRQUNMLGdCQUFnQjtRQUNoQixvQkFBb0I7S0FDckIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IEhUTUxfTlMsIE1BVEhfTlMsIFFfUFJPUFNfU0VQQVJBVE9SLCBTVkdfTlMgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyBnZXREb21Db250YWluZXJGcm9tUUNvbnRhaW5lckVsZW1lbnQgfSBmcm9tICcuL2RvbS1jb250YWluZXInO1xuaW1wb3J0IHtcbiAgRWxlbWVudFZOb2RlUHJvcHMsXG4gIFRleHRWTm9kZVByb3BzLFxuICBWTm9kZUZsYWdzLFxuICBWTm9kZVByb3BzLFxuICB0eXBlIEVsZW1lbnRWTm9kZSxcbiAgdHlwZSBWTm9kZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBlbnN1cmVFbGVtZW50Vk5vZGUsXG4gIGZhc3ROYW1lc3BhY2VVUkksXG4gIHNob3VsZElnbm9yZUNoaWxkcmVuLFxuICB2bm9kZV9nZXRET01DaGlsZE5vZGVzLFxuICB2bm9kZV9nZXREb21QYXJlbnRWTm9kZSxcbiAgdm5vZGVfZ2V0RWxlbWVudE5hbWUsXG4gIHZub2RlX2dldEZpcnN0Q2hpbGQsXG4gIHZub2RlX2dldE5leHRTaWJsaW5nLFxuICB2bm9kZV9nZXRQYXJlbnQsXG4gIHZub2RlX2lzRWxlbWVudFZOb2RlLFxuICB2bm9kZV9pc1RleHRWTm9kZSxcbiAgdHlwZSBWTm9kZUpvdXJuYWwsXG59IGZyb20gJy4vdm5vZGUnO1xuXG5leHBvcnQgY29uc3QgaXNGb3JlaWduT2JqZWN0RWxlbWVudCA9IChlbGVtZW50TmFtZTogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBpc0RldiA/IGVsZW1lbnROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdmb3JlaWdub2JqZWN0JyA6IGVsZW1lbnROYW1lID09PSAnZm9yZWlnbk9iamVjdCc7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTdmdFbGVtZW50ID0gKGVsZW1lbnROYW1lOiBzdHJpbmcpID0+XG4gIGVsZW1lbnROYW1lID09PSAnc3ZnJyB8fCBpc0ZvcmVpZ25PYmplY3RFbGVtZW50KGVsZW1lbnROYW1lKTtcblxuZXhwb3J0IGNvbnN0IGlzTWF0aEVsZW1lbnQgPSAoZWxlbWVudE5hbWU6IHN0cmluZykgPT4gZWxlbWVudE5hbWUgPT09ICdtYXRoJztcblxuZXhwb3J0IGNvbnN0IHZub2RlX2lzRGVmYXVsdE5hbWVzcGFjZSA9ICh2bm9kZTogRWxlbWVudFZOb2RlKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGZsYWdzID0gdm5vZGVbVk5vZGVQcm9wcy5mbGFnc107XG4gIHJldHVybiAoZmxhZ3MgJiBWTm9kZUZsYWdzLk5BTUVTUEFDRV9NQVNLKSA9PT0gMDtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXRFbGVtZW50TmFtZXNwYWNlRmxhZ3MgPSAoZWxlbWVudDogRWxlbWVudCkgPT4ge1xuICBjb25zdCBuYW1lc3BhY2UgPSBmYXN0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuICBzd2l0Y2ggKG5hbWVzcGFjZSkge1xuICAgIGNhc2UgU1ZHX05TOlxuICAgICAgcmV0dXJuIFZOb2RlRmxhZ3MuTlNfc3ZnO1xuICAgIGNhc2UgTUFUSF9OUzpcbiAgICAgIHJldHVybiBWTm9kZUZsYWdzLk5TX21hdGg7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBWTm9kZUZsYWdzLk5TX2h0bWw7XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB2bm9kZV9nZXREb21DaGlsZHJlbldpdGhDb3JyZWN0TmFtZXNwYWNlc1RvSW5zZXJ0KFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIGRvbVBhcmVudFZOb2RlOiBFbGVtZW50Vk5vZGUsXG4gIG5ld0NoaWxkOiBWTm9kZVxuKSB7XG4gIGNvbnN0IHsgZWxlbWVudE5hbWVzcGFjZSwgZWxlbWVudE5hbWVzcGFjZUZsYWcgfSA9IGdldE5ld0VsZW1lbnROYW1lc3BhY2VEYXRhKFxuICAgIGRvbVBhcmVudFZOb2RlLFxuICAgIG5ld0NoaWxkXG4gICk7XG5cbiAgbGV0IGRvbUNoaWxkcmVuOiAoRWxlbWVudCB8IFRleHQpW10gPSBbXTtcbiAgaWYgKGVsZW1lbnROYW1lc3BhY2UgPT09IEhUTUxfTlMpIHtcbiAgICAvLyBwYXJlbnQgaXMgaW4gdGhlIGRlZmF1bHQgbmFtZXNwYWNlLCBzbyBqdXN0IGdldCB0aGUgZG9tIGNoaWxkcmVuLiBUaGlzIGlzIHRoZSBmYXN0IHBhdGguXG4gICAgZG9tQ2hpbGRyZW4gPSB2bm9kZV9nZXRET01DaGlsZE5vZGVzKGpvdXJuYWwsIG5ld0NoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBwYXJlbnQgaXMgaW4gYSBkaWZmZXJlbnQgbmFtZXNwYWNlLCBzbyB3ZSBuZWVkIHRvIGNsb25lIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSBjb3JyZWN0IG5hbWVzcGFjZS5cbiAgICAvLyBUaGUgbmFtZXNwYWNlIGNhbm5vdCBiZSBjaGFuZ2VkIG9uIG5vZGVzLCBzbyB3ZSBuZWVkIHRvIGNsb25lIHRoZXNlIG5vZGVzXG4gICAgY29uc3QgY2hpbGRyZW4gPSB2bm9kZV9nZXRET01DaGlsZE5vZGVzKGpvdXJuYWwsIG5ld0NoaWxkLCB0cnVlKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkVk5vZGUgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmICh2bm9kZV9pc1RleHRWTm9kZShjaGlsZFZOb2RlKSkge1xuICAgICAgICAvLyB0ZXh0IG5vZGVzIGFyZSBhbHdheXMgaW4gdGhlIGRlZmF1bHQgbmFtZXNwYWNlXG4gICAgICAgIGRvbUNoaWxkcmVuLnB1c2goY2hpbGRWTm9kZVtUZXh0Vk5vZGVQcm9wcy5ub2RlXSBhcyBUZXh0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChjaGlsZFZOb2RlW1ZOb2RlUHJvcHMuZmxhZ3NdICYgVk5vZGVGbGFncy5OQU1FU1BBQ0VfTUFTSykgPT09XG4gICAgICAgIChkb21QYXJlbnRWTm9kZVtWTm9kZVByb3BzLmZsYWdzXSAmIFZOb2RlRmxhZ3MuTkFNRVNQQUNFX01BU0spXG4gICAgICApIHtcbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGFuZCBwYXJlbnQgaGF2ZSB0aGUgc2FtZSBuYW1lc3BhY2UsIHdlIGRvbid0IG5lZWQgdG8gY2xvbmUgdGhlIGVsZW1lbnRcbiAgICAgICAgZG9tQ2hpbGRyZW4ucHVzaChjaGlsZFZOb2RlW0VsZW1lbnRWTm9kZVByb3BzLmVsZW1lbnRdIGFzIEVsZW1lbnQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gY2xvbmUgdGhlIGVsZW1lbnQgd2l0aCB0aGUgY29ycmVjdCBuYW1lc3BhY2VcbiAgICAgIGNvbnN0IG5ld0NoaWxkRWxlbWVudCA9IHZub2RlX2Nsb25lRWxlbWVudFdpdGhOYW1lc3BhY2UoXG4gICAgICAgIGNoaWxkVk5vZGUsXG4gICAgICAgIGRvbVBhcmVudFZOb2RlLFxuICAgICAgICBlbGVtZW50TmFtZXNwYWNlLFxuICAgICAgICBlbGVtZW50TmFtZXNwYWNlRmxhZ1xuICAgICAgKTtcblxuICAgICAgaWYgKG5ld0NoaWxkRWxlbWVudCkge1xuICAgICAgICBkb21DaGlsZHJlbi5wdXNoKG5ld0NoaWxkRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBkb21DaGlsZHJlbjtcbn1cblxuLyoqIFRoaXMgZnVuY3Rpb24gY2xvbmVzIGFuIGVsZW1lbnQgd2l0aCBhIGRpZmZlcmVudCBuYW1lc3BhY2UsIGJ1dCB3aXRob3V0IHRoZSBjaGlsZHJlbi4gKi9cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhOYW1lc3BhY2UoXG4gIGVsZW1lbnQ6IEVsZW1lbnQsXG4gIGVsZW1lbnROYW1lOiBzdHJpbmcsXG4gIG5hbWVzcGFjZTogc3RyaW5nXG4pOiBFbGVtZW50IHtcbiAgY29uc3QgbmV3RWxlbWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlLCBlbGVtZW50TmFtZSk7XG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSBlbGVtZW50LmF0dHJpYnV0ZXM7XG4gIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCBuYW1lID0gYXR0cmlidXRlLm5hbWU7XG4gICAgY29uc3QgdmFsdWUgPSBhdHRyaWJ1dGUudmFsdWU7XG4gICAgaWYgKCFuYW1lIHx8IG5hbWUgPT09IFFfUFJPUFNfU0VQQVJBVE9SKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2xvbmVzIGFuIEVsZW1lbnRWTm9kZSB3aXRoIGEgZGlmZmVyZW50IG5hbWVzcGFjZSwgaW5jbHVkaW5nIHRoZSBjaGlsZHJlbi4gVGhpc1xuICogdHJhdmVyc2UgdGhlIHRyZWUgdXNpbmcgZGVwdGgtZmlyc3Qgc2VhcmNoIGFuZCBjbG9uZXMgdGhlIGVsZW1lbnRzIHVzaW5nXG4gKiBgY2xvbmVFbGVtZW50V2l0aE5hbWVzcGFjZWAuXG4gKi9cbmZ1bmN0aW9uIHZub2RlX2Nsb25lRWxlbWVudFdpdGhOYW1lc3BhY2UoXG4gIGVsZW1lbnRWTm9kZTogRWxlbWVudFZOb2RlLFxuICBwYXJlbnRWTm9kZTogRWxlbWVudFZOb2RlLFxuICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgbmFtZXNwYWNlRmxhZzogVk5vZGVGbGFnc1xuKSB7XG4gIGVuc3VyZUVsZW1lbnRWTm9kZShlbGVtZW50Vk5vZGUpO1xuICBsZXQgdkN1cnNvcjogVk5vZGUgfCBudWxsID0gZWxlbWVudFZOb2RlO1xuICBsZXQgdlBhcmVudDogVk5vZGUgfCBudWxsID0gbnVsbDtcbiAgbGV0IHJvb3RFbGVtZW50OiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIGxldCBwYXJlbnRFbGVtZW50OiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHdoaWxlICh2Q3Vyc29yKSB7XG4gICAgbGV0IGNoaWxkRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBuZXdDaGlsZEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodm5vZGVfaXNFbGVtZW50Vk5vZGUodkN1cnNvcikpIHtcbiAgICAgIC8vIENsb25lIHRoZSBlbGVtZW50XG4gICAgICBjaGlsZEVsZW1lbnQgPSB2Q3Vyc29yW0VsZW1lbnRWTm9kZVByb3BzLmVsZW1lbnRdIGFzIEVsZW1lbnQ7XG4gICAgICBjb25zdCBjaGlsZEVsZW1lbnRUYWcgPSB2bm9kZV9nZXRFbGVtZW50TmFtZSh2Q3Vyc29yKTtcblxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgcGFyZW50IGlzIGEgZm9yZWlnbk9iamVjdCBlbGVtZW50XG4gICAgICAvLyBhbmQgZ2V0IGEgbmV3IG5hbWVzcGFjZSBkYXRhLlxuICAgICAgY29uc3QgdkN1cnNvclBhcmVudCA9IHZub2RlX2dldFBhcmVudCh2Q3Vyc29yKTtcbiAgICAgIC8vIEZvciB0aGUgZmlyc3Qgdk5vZGUgcGFyZW50Tm9kZSBpcyBub3QgcGFyZW50IGZyb20gdk5vZGUgdHJlZSwgYnV0IHBhcmVudCBmcm9tIERPTSB0cmVlXG4gICAgICAvLyB0aGlzIGlzIGJlY2F1c2Ugdk5vZGUgaXMgbm90IG1vdmVkIHlldC5cbiAgICAgIC8vIHJvb3RFbGVtZW50IGlzIG51bGwgb25seSBmb3IgdGhlIGZpcnN0IHZOb2RlXG4gICAgICBjb25zdCB2Q3Vyc29yRG9tUGFyZW50ID1cbiAgICAgICAgcm9vdEVsZW1lbnQgPT0gbnVsbCA/IHBhcmVudFZOb2RlIDogdkN1cnNvclBhcmVudCAmJiB2bm9kZV9nZXREb21QYXJlbnRWTm9kZSh2Q3Vyc29yUGFyZW50KTtcbiAgICAgIGlmICh2Q3Vyc29yRG9tUGFyZW50KSB7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZURhdGEgPSBnZXROZXdFbGVtZW50TmFtZXNwYWNlRGF0YShcbiAgICAgICAgICB2Q3Vyc29yRG9tUGFyZW50LFxuICAgICAgICAgIHZub2RlX2dldEVsZW1lbnROYW1lKHZDdXJzb3IpXG4gICAgICAgICk7XG4gICAgICAgIG5hbWVzcGFjZSA9IG5hbWVzcGFjZURhdGEuZWxlbWVudE5hbWVzcGFjZTtcbiAgICAgICAgbmFtZXNwYWNlRmxhZyA9IG5hbWVzcGFjZURhdGEuZWxlbWVudE5hbWVzcGFjZUZsYWc7XG4gICAgICB9XG5cbiAgICAgIG5ld0NoaWxkRWxlbWVudCA9IGNsb25lRWxlbWVudFdpdGhOYW1lc3BhY2UoY2hpbGRFbGVtZW50LCBjaGlsZEVsZW1lbnRUYWcsIG5hbWVzcGFjZSk7XG5cbiAgICAgIGNoaWxkRWxlbWVudC5yZW1vdmUoKTtcblxuICAgICAgaWYgKHJvb3RFbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBuZXdDaGlsZEVsZW1lbnQ7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKG5ld0NoaWxkRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIERlc2NlbmQgaW50byBjaGlsZHJlblxuICAgICAgLy8gV2UgbmVlZCBmaXJzdCBnZXQgdGhlIGZpcnN0IGNoaWxkLCBpZiBhbnlcbiAgICAgIGNvbnN0IHZGaXJzdENoaWxkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZCh2Q3Vyc29yKTtcbiAgICAgIC8vIFRoZW4gd2UgY2FuIG92ZXJ3cml0ZSB0aGUgY3Vyc29yIHdpdGggbmV3bHkgY3JlYXRlZCBlbGVtZW50LlxuICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG5lZWQgdG8gbWF0ZXJpYWxpemUgdGhlIGNoaWxkcmVuIGJlZm9yZSB3ZSBhc3NpZ24gbmV3IGVsZW1lbnRcbiAgICAgIHZDdXJzb3JbRWxlbWVudFZOb2RlUHJvcHMuZWxlbWVudF0gPSBuZXdDaGlsZEVsZW1lbnQ7XG4gICAgICAvLyBTZXQgY29ycmVjdCBuYW1lc3BhY2UgZmxhZ1xuICAgICAgdkN1cnNvcltWTm9kZVByb3BzLmZsYWdzXSAmPSBWTm9kZUZsYWdzLk5FR0FURURfTkFNRVNQQUNFX01BU0s7XG4gICAgICB2Q3Vyc29yW1ZOb2RlUHJvcHMuZmxhZ3NdIHw9IG5hbWVzcGFjZUZsYWc7XG4gICAgICBpZiAodkZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdkN1cnNvciA9IHZGaXJzdENoaWxkO1xuICAgICAgICBwYXJlbnRFbGVtZW50ID0gbmV3Q2hpbGRFbGVtZW50O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoc2hvdWxkSWdub3JlQ2hpbGRyZW4oY2hpbGRFbGVtZW50KSkge1xuICAgICAgICAvLyBJZiB3ZSBzaG91bGQgaWdub3JlIGNoaWxkcmVuIG9mIHRoZSBlbGVtZW50IHRoaXMgbWVhbnMgdGhhdCB0aGUgZWxlbWVudCBpcyBhIGNvbnRhaW5lclxuICAgICAgICAvLyBXZSBuZWVkIHRvIGdldCB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGNvbnRhaW5lclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBnZXREb21Db250YWluZXJGcm9tUUNvbnRhaW5lckVsZW1lbnQoY2hpbGRFbGVtZW50KTtcblxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgY29uc3QgaW5uZXJDb250YWluZXJGaXJzdFZOb2RlID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZChjb250YWluZXIucm9vdFZOb2RlKTtcbiAgICAgICAgICBpZiAoaW5uZXJDb250YWluZXJGaXJzdFZOb2RlKSB7XG4gICAgICAgICAgICB2Q3Vyc29yID0gaW5uZXJDb250YWluZXJGaXJzdFZOb2RlO1xuICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IG5ld0NoaWxkRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodkN1cnNvciA9PT0gZWxlbWVudFZOb2RlKSB7XG4gICAgICAvLyB3ZSBhcmUgd2hlcmUgd2Ugc3RhcnRlZCwgdGhpcyBtZWFucyB0aGF0IHZOb2RlIGhhcyBubyBjaGlsZHJlbiwgc28gd2UgYXJlIGRvbmUuXG4gICAgICByZXR1cm4gcm9vdEVsZW1lbnQ7XG4gICAgfVxuICAgIC8vIE91dCBvZiBjaGlsZHJlbiwgZ28gdG8gbmV4dCBzaWJsaW5nXG4gICAgY29uc3Qgdk5leHRTaWJsaW5nID0gdm5vZGVfZ2V0TmV4dFNpYmxpbmcodkN1cnNvcik7XG4gICAgaWYgKHZOZXh0U2libGluZykge1xuICAgICAgdkN1cnNvciA9IHZOZXh0U2libGluZztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBPdXQgb2Ygc2libGluZ3MsIGdvIHRvIHBhcmVudFxuICAgIHZQYXJlbnQgPSB2bm9kZV9nZXRQYXJlbnQodkN1cnNvcik7XG4gICAgd2hpbGUgKHZQYXJlbnQpIHtcbiAgICAgIGlmICh2UGFyZW50ID09PSBlbGVtZW50Vk5vZGUpIHtcbiAgICAgICAgLy8gV2UgYXJlIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCwgd2UgYXJlIGRvbmUuXG4gICAgICAgIHJldHVybiByb290RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZOZXh0UGFyZW50U2libGluZyA9IHZub2RlX2dldE5leHRTaWJsaW5nKHZQYXJlbnQpO1xuICAgICAgaWYgKHZOZXh0UGFyZW50U2libGluZykge1xuICAgICAgICB2Q3Vyc29yID0gdk5leHRQYXJlbnRTaWJsaW5nO1xuICAgICAgICByZXR1cm4gcm9vdEVsZW1lbnQ7XG4gICAgICB9XG4gICAgICB2UGFyZW50ID0gdm5vZGVfZ2V0UGFyZW50KHZQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAodlBhcmVudCA9PSBudWxsKSB7XG4gICAgICAvLyBXZSBhcmUgZG9uZS5cbiAgICAgIHJldHVybiByb290RWxlbWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJvb3RFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1N2Zyh0YWdPclZOb2RlOiBzdHJpbmcgfCBFbGVtZW50Vk5vZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB0YWdPclZOb2RlID09PSAnc3RyaW5nJ1xuICAgID8gaXNTdmdFbGVtZW50KHRhZ09yVk5vZGUpXG4gICAgOiAodGFnT3JWTm9kZVtWTm9kZVByb3BzLmZsYWdzXSAmIFZOb2RlRmxhZ3MuTlNfc3ZnKSAhPT0gMDtcbn1cblxuZnVuY3Rpb24gaXNNYXRoKHRhZ09yVk5vZGU6IHN0cmluZyB8IEVsZW1lbnRWTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHRhZ09yVk5vZGUgPT09ICdzdHJpbmcnXG4gICAgPyBpc01hdGhFbGVtZW50KHRhZ09yVk5vZGUpXG4gICAgOiAodGFnT3JWTm9kZVtWTm9kZVByb3BzLmZsYWdzXSAmIFZOb2RlRmxhZ3MuTlNfbWF0aCkgIT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdFbGVtZW50TmFtZXNwYWNlRGF0YShcbiAgZG9tUGFyZW50Vk5vZGU6IEVsZW1lbnRWTm9kZSB8IG51bGwsXG4gIGVsZW1lbnROYW1lOiBzdHJpbmdcbik6IE5ld0VsZW1lbnROYW1lc3BhY2VEYXRhO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0VsZW1lbnROYW1lc3BhY2VEYXRhKFxuICBkb21QYXJlbnRWTm9kZTogRWxlbWVudFZOb2RlIHwgbnVsbCxcbiAgdm5vZGU6IFZOb2RlXG4pOiBOZXdFbGVtZW50TmFtZXNwYWNlRGF0YTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0VsZW1lbnROYW1lc3BhY2VEYXRhKFxuICBkb21QYXJlbnRWTm9kZTogRWxlbWVudFZOb2RlIHwgbnVsbCxcbiAgdGFnT3JWTm9kZTogc3RyaW5nIHwgVk5vZGVcbik6IE5ld0VsZW1lbnROYW1lc3BhY2VEYXRhIHtcbiAgY29uc3QgcGFyZW50SXNEZWZhdWx0TmFtZXNwYWNlID0gZG9tUGFyZW50Vk5vZGVcbiAgICA/ICEhdm5vZGVfZ2V0RWxlbWVudE5hbWUoZG9tUGFyZW50Vk5vZGUpICYmIHZub2RlX2lzRGVmYXVsdE5hbWVzcGFjZShkb21QYXJlbnRWTm9kZSlcbiAgICA6IHRydWU7XG4gIGNvbnN0IHBhcmVudElzRm9yZWlnbk9iamVjdCA9ICFwYXJlbnRJc0RlZmF1bHROYW1lc3BhY2VcbiAgICA/IGlzRm9yZWlnbk9iamVjdEVsZW1lbnQodm5vZGVfZ2V0RWxlbWVudE5hbWUoZG9tUGFyZW50Vk5vZGUhKSlcbiAgICA6IGZhbHNlO1xuXG4gIGxldCBlbGVtZW50TmFtZXNwYWNlID0gSFRNTF9OUztcbiAgbGV0IGVsZW1lbnROYW1lc3BhY2VGbGFnID0gVk5vZGVGbGFncy5OU19odG1sO1xuXG4gIGNvbnN0IGlzRWxlbWVudFZOb2RlT3JTdHJpbmcgPSB0eXBlb2YgdGFnT3JWTm9kZSA9PT0gJ3N0cmluZycgfHwgdm5vZGVfaXNFbGVtZW50Vk5vZGUodGFnT3JWTm9kZSk7XG5cbiAgaWYgKGlzRWxlbWVudFZOb2RlT3JTdHJpbmcgJiYgaXNTdmcodGFnT3JWTm9kZSkpIHtcbiAgICBlbGVtZW50TmFtZXNwYWNlID0gU1ZHX05TO1xuICAgIGVsZW1lbnROYW1lc3BhY2VGbGFnID0gVk5vZGVGbGFncy5OU19zdmc7XG4gIH0gZWxzZSBpZiAoaXNFbGVtZW50Vk5vZGVPclN0cmluZyAmJiBpc01hdGgodGFnT3JWTm9kZSkpIHtcbiAgICBlbGVtZW50TmFtZXNwYWNlID0gTUFUSF9OUztcbiAgICBlbGVtZW50TmFtZXNwYWNlRmxhZyA9IFZOb2RlRmxhZ3MuTlNfbWF0aDtcbiAgfSBlbHNlIGlmIChkb21QYXJlbnRWTm9kZSAmJiAhcGFyZW50SXNGb3JlaWduT2JqZWN0ICYmICFwYXJlbnRJc0RlZmF1bHROYW1lc3BhY2UpIHtcbiAgICBjb25zdCBpc1BhcmVudFN2ZyA9IChkb21QYXJlbnRWTm9kZVtWTm9kZVByb3BzLmZsYWdzXSAmIFZOb2RlRmxhZ3MuTlNfc3ZnKSAhPT0gMDtcbiAgICBjb25zdCBpc1BhcmVudE1hdGggPSAoZG9tUGFyZW50Vk5vZGVbVk5vZGVQcm9wcy5mbGFnc10gJiBWTm9kZUZsYWdzLk5TX21hdGgpICE9PSAwO1xuXG4gICAgZWxlbWVudE5hbWVzcGFjZSA9IGlzUGFyZW50U3ZnID8gU1ZHX05TIDogaXNQYXJlbnRNYXRoID8gTUFUSF9OUyA6IEhUTUxfTlM7XG4gICAgZWxlbWVudE5hbWVzcGFjZUZsYWcgPSBkb21QYXJlbnRWTm9kZVtWTm9kZVByb3BzLmZsYWdzXSAmIFZOb2RlRmxhZ3MuTkFNRVNQQUNFX01BU0s7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVsZW1lbnROYW1lc3BhY2UsXG4gICAgZWxlbWVudE5hbWVzcGFjZUZsYWcsXG4gIH07XG59XG5cbmludGVyZmFjZSBOZXdFbGVtZW50TmFtZXNwYWNlRGF0YSB7XG4gIGVsZW1lbnROYW1lc3BhY2U6IHN0cmluZztcbiAgZWxlbWVudE5hbWVzcGFjZUZsYWc6IG51bWJlcjtcbn1cbiJdfQ==","import { isDev } from '@qwik.dev/core/build';\nimport { vnode_isVNode } from '../client/vnode';\nimport { Slot } from '../shared/jsx/slot.public';\nimport { isSignal } from '../signal/signal';\nimport { clearAllEffects } from '../signal/signal-cleanup';\nimport { invokeApply, newInvokeContext, untrack } from '../use/use-core';\nimport { isQwikComponent } from './component.public';\nimport { assertDefined } from './error/assert';\nimport { Fragment, JSXNodeImpl, _jsxSorted, isJSXNode } from './jsx/jsx-runtime';\nimport { isQrl } from './qrl/qrl-utils';\nimport { EMPTY_OBJ } from './utils/flyweight';\nimport { logWarn } from './utils/log';\nimport { ELEMENT_PROPS, ELEMENT_SEQ_IDX, OnRenderProp, RenderEvent, USE_ON_LOCAL, USE_ON_LOCAL_SEQ_IDX, } from './utils/markers';\nimport { MAX_RETRY_ON_PROMISE_COUNT, isPromise, maybeThen, safeCall } from './utils/promises';\nimport { getSubscriber } from '../signal/subscriber';\n/**\n * Use `executeComponent` to execute a component.\n *\n * Component execution can be complex because of:\n *\n * - It can by async\n * - It can contain many tasks which need to be awaited\n * - Each task can run multiple times if they track signals which change.\n * - The JSX may be re-generated multiple times of a task needs to be rerun due to signal change.\n * - It needs to keep track of hook state.\n *\n * For `component$`: `renderHost` === `subscriptionHost` For inlined-components: the\n * `subscriptionHost` is a parent `component$` which needs to re-execute.\n *\n * @param container\n * @param renderHost - VNode into which the component is rendered into.\n * @param subscriptionHost - VNode which will be re-executed if the component needs to re-render.\n * @param componentQRL\n * @param props\n * @returns\n */\nexport const executeComponent = (container, renderHost, subscriptionHost, componentQRL, props) => {\n    const iCtx = newInvokeContext(container.$locale$, subscriptionHost || undefined, undefined, RenderEvent);\n    if (subscriptionHost) {\n        iCtx.$effectSubscriber$ = getSubscriber(subscriptionHost, \":\" /* EffectProperty.COMPONENT */);\n        iCtx.$container$ = container;\n    }\n    let componentFn;\n    container.ensureProjectionResolved(renderHost);\n    let isInlineComponent = false;\n    if (componentQRL === null) {\n        componentQRL = container.getHostProp(renderHost, OnRenderProp);\n        assertDefined(componentQRL, 'No Component found at this location');\n    }\n    if (isQrl(componentQRL)) {\n        props = props || container.getHostProp(renderHost, ELEMENT_PROPS) || EMPTY_OBJ;\n        if (props.children) {\n            delete props.children;\n        }\n        componentFn = componentQRL.getFn(iCtx);\n    }\n    else if (isQwikComponent(componentQRL)) {\n        const qComponentFn = componentQRL;\n        componentFn = () => invokeApply(iCtx, qComponentFn, [props || EMPTY_OBJ, null, 0]);\n    }\n    else {\n        isInlineComponent = true;\n        const inlineComponent = componentQRL;\n        componentFn = () => invokeApply(iCtx, inlineComponent, [props || EMPTY_OBJ]);\n    }\n    const executeComponentWithPromiseExceptionRetry = (retryCount = 0) => safeCall(() => {\n        if (!isInlineComponent) {\n            container.setHostProp(renderHost, ELEMENT_SEQ_IDX, null);\n            container.setHostProp(renderHost, USE_ON_LOCAL_SEQ_IDX, null);\n            container.setHostProp(renderHost, ELEMENT_PROPS, props);\n        }\n        if (vnode_isVNode(renderHost)) {\n            clearAllEffects(container, renderHost);\n        }\n        return componentFn(props);\n    }, (jsx) => {\n        const useOnEvents = container.getHostProp(renderHost, USE_ON_LOCAL);\n        if (useOnEvents) {\n            return addUseOnEvents(jsx, useOnEvents);\n        }\n        return jsx;\n    }, (err) => {\n        if (isPromise(err) && retryCount < MAX_RETRY_ON_PROMISE_COUNT) {\n            return err.then(() => executeComponentWithPromiseExceptionRetry(retryCount++));\n        }\n        else {\n            throw err;\n        }\n    });\n    return executeComponentWithPromiseExceptionRetry();\n};\n/**\n * Stores the JSX output of the last execution of the component.\n *\n * Component can execute multiple times because:\n *\n * - Component can have multiple tasks\n * - Tasks can track signals\n * - Task A can change signal which causes Task B to rerun.\n *\n * So when executing a component we only care about its last JSX Output.\n */\nfunction addUseOnEvents(jsx, useOnEvents) {\n    const jsxElement = findFirstStringJSX(jsx);\n    let jsxResult = jsx;\n    return maybeThen(jsxElement, (jsxElement) => {\n        let isInvisibleComponent = false;\n        if (!jsxElement) {\n            /**\n             * We did not find any jsx node with a string tag. This means that we should append:\n             *\n             * ```html\n             * <script type=\"placeholder\" hidden on-document:qinit=\"...\"></script>\n             * ```\n             *\n             * This is needed because use on events should have a node to attach them to.\n             */\n            isInvisibleComponent = true;\n        }\n        for (const key in useOnEvents) {\n            if (Object.prototype.hasOwnProperty.call(useOnEvents, key)) {\n                if (isInvisibleComponent) {\n                    if (key === 'onQvisible$') {\n                        const [jsxElement, jsx] = addScriptNodeForInvisibleComponents(jsxResult);\n                        jsxResult = jsx;\n                        if (jsxElement) {\n                            addUseOnEvent(jsxElement, 'document:onQinit$', useOnEvents[key]);\n                        }\n                    }\n                    else if (key.startsWith('document:') || key.startsWith('window:')) {\n                        const [jsxElement, jsx] = addScriptNodeForInvisibleComponents(jsxResult);\n                        jsxResult = jsx;\n                        if (jsxElement) {\n                            addUseOnEvent(jsxElement, key, useOnEvents[key]);\n                        }\n                    }\n                    else if (isDev) {\n                        logWarn('You are trying to add an event \"' +\n                            key +\n                            '\" using `useOn` hook, ' +\n                            'but a node to which you can add an event is not found. ' +\n                            'Please make sure that the component has a valid element node. ');\n                    }\n                }\n                else if (jsxElement) {\n                    addUseOnEvent(jsxElement, key, useOnEvents[key]);\n                }\n            }\n        }\n        return jsxResult;\n    });\n}\nfunction addUseOnEvent(jsxElement, key, value) {\n    let props = jsxElement.props;\n    if (props === EMPTY_OBJ) {\n        props = jsxElement.props = {};\n    }\n    let propValue = props[key];\n    if (propValue === undefined) {\n        propValue = [];\n    }\n    else if (!Array.isArray(propValue)) {\n        propValue = [propValue];\n    }\n    propValue.push(...value);\n    props[key] = propValue;\n}\nfunction findFirstStringJSX(jsx) {\n    const queue = [jsx];\n    while (queue.length) {\n        const jsx = queue.shift();\n        if (isJSXNode(jsx)) {\n            if (typeof jsx.type === 'string') {\n                return jsx;\n            }\n            queue.push(jsx.children);\n        }\n        else if (Array.isArray(jsx)) {\n            queue.push(...jsx);\n        }\n        else if (isPromise(jsx)) {\n            return maybeThen(jsx, (jsx) => findFirstStringJSX(jsx));\n        }\n        else if (isSignal(jsx)) {\n            return findFirstStringJSX(untrack(() => jsx.value));\n        }\n    }\n    return null;\n}\nfunction addScriptNodeForInvisibleComponents(jsx) {\n    if (isJSXNode(jsx)) {\n        const jsxElement = new JSXNodeImpl('script', {}, {\n            type: 'placeholder',\n            hidden: '',\n        }, null, 3);\n        if (jsx.type === Slot) {\n            return [jsxElement, _jsxSorted(Fragment, null, null, [jsx, jsxElement], 0, null)];\n        }\n        if (jsx.children == null) {\n            jsx.children = jsxElement;\n        }\n        else if (Array.isArray(jsx.children)) {\n            jsx.children.push(jsxElement);\n        }\n        else {\n            jsx.children = [jsx.children, jsxElement];\n        }\n        return [jsxElement, jsx];\n    }\n    else if (Array.isArray(jsx) && jsx.length) {\n        // get first element\n        const [jsxElement, _] = addScriptNodeForInvisibleComponents(jsx[0]);\n        return [jsxElement, jsx];\n    }\n    return [null, null];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWV4ZWN1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvY29tcG9uZW50LWV4ZWN1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRCxPQUFPLEVBQWtCLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxlQUFlLEVBQW1CLE1BQU0sb0JBQW9CLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUk3RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUNMLGFBQWEsRUFDYixlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osb0JBQW9CLEdBQ3JCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUYsT0FB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Q04sR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztTQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUMsb0JBQW9CO1FBQ3BCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUNBQW1DLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXYgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyB2bm9kZV9pc1ZOb2RlIH0gZnJvbSAnLi4vY2xpZW50L3Zub2RlJztcbmltcG9ydCB7IFNsb3QgfSBmcm9tICcuLi9zaGFyZWQvanN4L3Nsb3QucHVibGljJztcbmltcG9ydCB7IEVmZmVjdFByb3BlcnR5LCBpc1NpZ25hbCB9IGZyb20gJy4uL3NpZ25hbC9zaWduYWwnO1xuaW1wb3J0IHsgY2xlYXJBbGxFZmZlY3RzIH0gZnJvbSAnLi4vc2lnbmFsL3NpZ25hbC1jbGVhbnVwJztcbmltcG9ydCB7IGludm9rZUFwcGx5LCBuZXdJbnZva2VDb250ZXh0LCB1bnRyYWNrIH0gZnJvbSAnLi4vdXNlL3VzZS1jb3JlJztcbmltcG9ydCB7IHR5cGUgRXZlbnRRUkwsIHR5cGUgVXNlT25NYXAgfSBmcm9tICcuLi91c2UvdXNlLW9uJztcbmltcG9ydCB7IGlzUXdpa0NvbXBvbmVudCwgdHlwZSBPblJlbmRlckZuIH0gZnJvbSAnLi9jb21wb25lbnQucHVibGljJztcbmltcG9ydCB7IGFzc2VydERlZmluZWQgfSBmcm9tICcuL2Vycm9yL2Fzc2VydCc7XG5pbXBvcnQgeyBGcmFnbWVudCwgSlNYTm9kZUltcGwsIF9qc3hTb3J0ZWQsIGlzSlNYTm9kZSwgdHlwZSBQcm9wcyB9IGZyb20gJy4vanN4L2pzeC1ydW50aW1lJztcbmltcG9ydCB0eXBlIHsgSlNYTm9kZUludGVybmFsLCBKU1hPdXRwdXQgfSBmcm9tICcuL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IEtub3duRXZlbnROYW1lcyB9IGZyb20gJy4vanN4L3R5cGVzL2pzeC1xd2lrLWV2ZW50cyc7XG5pbXBvcnQgdHlwZSB7IFFSTEludGVybmFsIH0gZnJvbSAnLi9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB7IGlzUXJsIH0gZnJvbSAnLi9xcmwvcXJsLXV0aWxzJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyLCBIb3N0RWxlbWVudCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRU1QVFlfT0JKIH0gZnJvbSAnLi91dGlscy9mbHl3ZWlnaHQnO1xuaW1wb3J0IHsgbG9nV2FybiB9IGZyb20gJy4vdXRpbHMvbG9nJztcbmltcG9ydCB7XG4gIEVMRU1FTlRfUFJPUFMsXG4gIEVMRU1FTlRfU0VRX0lEWCxcbiAgT25SZW5kZXJQcm9wLFxuICBSZW5kZXJFdmVudCxcbiAgVVNFX09OX0xPQ0FMLFxuICBVU0VfT05fTE9DQUxfU0VRX0lEWCxcbn0gZnJvbSAnLi91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IE1BWF9SRVRSWV9PTl9QUk9NSVNFX0NPVU5ULCBpc1Byb21pc2UsIG1heWJlVGhlbiwgc2FmZUNhbGwgfSBmcm9tICcuL3V0aWxzL3Byb21pc2VzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVPclByb21pc2UgfSBmcm9tICcuL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IGdldFN1YnNjcmliZXIgfSBmcm9tICcuLi9zaWduYWwvc3Vic2NyaWJlcic7XG5cbi8qKlxuICogVXNlIGBleGVjdXRlQ29tcG9uZW50YCB0byBleGVjdXRlIGEgY29tcG9uZW50LlxuICpcbiAqIENvbXBvbmVudCBleGVjdXRpb24gY2FuIGJlIGNvbXBsZXggYmVjYXVzZSBvZjpcbiAqXG4gKiAtIEl0IGNhbiBieSBhc3luY1xuICogLSBJdCBjYW4gY29udGFpbiBtYW55IHRhc2tzIHdoaWNoIG5lZWQgdG8gYmUgYXdhaXRlZFxuICogLSBFYWNoIHRhc2sgY2FuIHJ1biBtdWx0aXBsZSB0aW1lcyBpZiB0aGV5IHRyYWNrIHNpZ25hbHMgd2hpY2ggY2hhbmdlLlxuICogLSBUaGUgSlNYIG1heSBiZSByZS1nZW5lcmF0ZWQgbXVsdGlwbGUgdGltZXMgb2YgYSB0YXNrIG5lZWRzIHRvIGJlIHJlcnVuIGR1ZSB0byBzaWduYWwgY2hhbmdlLlxuICogLSBJdCBuZWVkcyB0byBrZWVwIHRyYWNrIG9mIGhvb2sgc3RhdGUuXG4gKlxuICogRm9yIGBjb21wb25lbnQkYDogYHJlbmRlckhvc3RgID09PSBgc3Vic2NyaXB0aW9uSG9zdGAgRm9yIGlubGluZWQtY29tcG9uZW50czogdGhlXG4gKiBgc3Vic2NyaXB0aW9uSG9zdGAgaXMgYSBwYXJlbnQgYGNvbXBvbmVudCRgIHdoaWNoIG5lZWRzIHRvIHJlLWV4ZWN1dGUuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lclxuICogQHBhcmFtIHJlbmRlckhvc3QgLSBWTm9kZSBpbnRvIHdoaWNoIHRoZSBjb21wb25lbnQgaXMgcmVuZGVyZWQgaW50by5cbiAqIEBwYXJhbSBzdWJzY3JpcHRpb25Ib3N0IC0gVk5vZGUgd2hpY2ggd2lsbCBiZSByZS1leGVjdXRlZCBpZiB0aGUgY29tcG9uZW50IG5lZWRzIHRvIHJlLXJlbmRlci5cbiAqIEBwYXJhbSBjb21wb25lbnRRUkxcbiAqIEBwYXJhbSBwcm9wc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGV4ZWN1dGVDb21wb25lbnQgPSAoXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyLFxuICByZW5kZXJIb3N0OiBIb3N0RWxlbWVudCxcbiAgc3Vic2NyaXB0aW9uSG9zdDogSG9zdEVsZW1lbnQgfCBudWxsLFxuICBjb21wb25lbnRRUkw6IE9uUmVuZGVyRm48dW5rbm93bj4gfCBRUkxJbnRlcm5hbDxPblJlbmRlckZuPHVua25vd24+PiB8IG51bGwsXG4gIHByb3BzOiBQcm9wcyB8IG51bGxcbik6IFZhbHVlT3JQcm9taXNlPEpTWE91dHB1dD4gPT4ge1xuICBjb25zdCBpQ3R4ID0gbmV3SW52b2tlQ29udGV4dChcbiAgICBjb250YWluZXIuJGxvY2FsZSQsXG4gICAgc3Vic2NyaXB0aW9uSG9zdCB8fCB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkLFxuICAgIFJlbmRlckV2ZW50XG4gICk7XG4gIGlmIChzdWJzY3JpcHRpb25Ib3N0KSB7XG4gICAgaUN0eC4kZWZmZWN0U3Vic2NyaWJlciQgPSBnZXRTdWJzY3JpYmVyKHN1YnNjcmlwdGlvbkhvc3QsIEVmZmVjdFByb3BlcnR5LkNPTVBPTkVOVCk7XG4gICAgaUN0eC4kY29udGFpbmVyJCA9IGNvbnRhaW5lcjtcbiAgfVxuICBsZXQgY29tcG9uZW50Rm46IChwcm9wczogdW5rbm93bikgPT4gVmFsdWVPclByb21pc2U8SlNYT3V0cHV0PjtcbiAgY29udGFpbmVyLmVuc3VyZVByb2plY3Rpb25SZXNvbHZlZChyZW5kZXJIb3N0KTtcbiAgbGV0IGlzSW5saW5lQ29tcG9uZW50ID0gZmFsc2U7XG4gIGlmIChjb21wb25lbnRRUkwgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnRRUkwgPSBjb250YWluZXIuZ2V0SG9zdFByb3AocmVuZGVySG9zdCwgT25SZW5kZXJQcm9wKSE7XG4gICAgYXNzZXJ0RGVmaW5lZChjb21wb25lbnRRUkwsICdObyBDb21wb25lbnQgZm91bmQgYXQgdGhpcyBsb2NhdGlvbicpO1xuICB9XG4gIGlmIChpc1FybChjb21wb25lbnRRUkwpKSB7XG4gICAgcHJvcHMgPSBwcm9wcyB8fCBjb250YWluZXIuZ2V0SG9zdFByb3AocmVuZGVySG9zdCwgRUxFTUVOVF9QUk9QUykgfHwgRU1QVFlfT0JKO1xuICAgIGlmIChwcm9wcy5jaGlsZHJlbikge1xuICAgICAgZGVsZXRlIHByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgICBjb21wb25lbnRGbiA9IGNvbXBvbmVudFFSTC5nZXRGbihpQ3R4KTtcbiAgfSBlbHNlIGlmIChpc1F3aWtDb21wb25lbnQoY29tcG9uZW50UVJMKSkge1xuICAgIGNvbnN0IHFDb21wb25lbnRGbiA9IGNvbXBvbmVudFFSTCBhcyBhbnkgYXMgKFxuICAgICAgcHJvcHM6IFByb3BzLFxuICAgICAga2V5OiBzdHJpbmcgfCBudWxsLFxuICAgICAgZmxhZ3M6IG51bWJlclxuICAgICkgPT4gSlNYTm9kZUludGVybmFsO1xuICAgIGNvbXBvbmVudEZuID0gKCkgPT4gaW52b2tlQXBwbHkoaUN0eCwgcUNvbXBvbmVudEZuLCBbcHJvcHMgfHwgRU1QVFlfT0JKLCBudWxsLCAwXSk7XG4gIH0gZWxzZSB7XG4gICAgaXNJbmxpbmVDb21wb25lbnQgPSB0cnVlO1xuICAgIGNvbnN0IGlubGluZUNvbXBvbmVudCA9IGNvbXBvbmVudFFSTCBhcyAocHJvcHM6IFByb3BzKSA9PiBKU1hPdXRwdXQ7XG4gICAgY29tcG9uZW50Rm4gPSAoKSA9PiBpbnZva2VBcHBseShpQ3R4LCBpbmxpbmVDb21wb25lbnQsIFtwcm9wcyB8fCBFTVBUWV9PQkpdKTtcbiAgfVxuXG4gIGNvbnN0IGV4ZWN1dGVDb21wb25lbnRXaXRoUHJvbWlzZUV4Y2VwdGlvblJldHJ5ID0gKHJldHJ5Q291bnQgPSAwKTogVmFsdWVPclByb21pc2U8SlNYT3V0cHV0PiA9PlxuICAgIHNhZmVDYWxsPEpTWE91dHB1dCwgSlNYT3V0cHV0LCBKU1hPdXRwdXQ+KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAoIWlzSW5saW5lQ29tcG9uZW50KSB7XG4gICAgICAgICAgY29udGFpbmVyLnNldEhvc3RQcm9wKHJlbmRlckhvc3QsIEVMRU1FTlRfU0VRX0lEWCwgbnVsbCk7XG4gICAgICAgICAgY29udGFpbmVyLnNldEhvc3RQcm9wKHJlbmRlckhvc3QsIFVTRV9PTl9MT0NBTF9TRVFfSURYLCBudWxsKTtcbiAgICAgICAgICBjb250YWluZXIuc2V0SG9zdFByb3AocmVuZGVySG9zdCwgRUxFTUVOVF9QUk9QUywgcHJvcHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZub2RlX2lzVk5vZGUocmVuZGVySG9zdCkpIHtcbiAgICAgICAgICBjbGVhckFsbEVmZmVjdHMoY29udGFpbmVyLCByZW5kZXJIb3N0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21wb25lbnRGbihwcm9wcyk7XG4gICAgICB9LFxuICAgICAgKGpzeCkgPT4ge1xuICAgICAgICBjb25zdCB1c2VPbkV2ZW50cyA9IGNvbnRhaW5lci5nZXRIb3N0UHJvcDxVc2VPbk1hcD4ocmVuZGVySG9zdCwgVVNFX09OX0xPQ0FMKTtcbiAgICAgICAgaWYgKHVzZU9uRXZlbnRzKSB7XG4gICAgICAgICAgcmV0dXJuIGFkZFVzZU9uRXZlbnRzKGpzeCwgdXNlT25FdmVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc3g7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBpZiAoaXNQcm9taXNlKGVycikgJiYgcmV0cnlDb3VudCA8IE1BWF9SRVRSWV9PTl9QUk9NSVNFX0NPVU5UKSB7XG4gICAgICAgICAgcmV0dXJuIGVyci50aGVuKCgpID0+XG4gICAgICAgICAgICBleGVjdXRlQ29tcG9uZW50V2l0aFByb21pc2VFeGNlcHRpb25SZXRyeShyZXRyeUNvdW50KyspXG4gICAgICAgICAgKSBhcyBQcm9taXNlPEpTWE91dHB1dD47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgcmV0dXJuIGV4ZWN1dGVDb21wb25lbnRXaXRoUHJvbWlzZUV4Y2VwdGlvblJldHJ5KCk7XG59O1xuXG4vKipcbiAqIFN0b3JlcyB0aGUgSlNYIG91dHB1dCBvZiB0aGUgbGFzdCBleGVjdXRpb24gb2YgdGhlIGNvbXBvbmVudC5cbiAqXG4gKiBDb21wb25lbnQgY2FuIGV4ZWN1dGUgbXVsdGlwbGUgdGltZXMgYmVjYXVzZTpcbiAqXG4gKiAtIENvbXBvbmVudCBjYW4gaGF2ZSBtdWx0aXBsZSB0YXNrc1xuICogLSBUYXNrcyBjYW4gdHJhY2sgc2lnbmFsc1xuICogLSBUYXNrIEEgY2FuIGNoYW5nZSBzaWduYWwgd2hpY2ggY2F1c2VzIFRhc2sgQiB0byByZXJ1bi5cbiAqXG4gKiBTbyB3aGVuIGV4ZWN1dGluZyBhIGNvbXBvbmVudCB3ZSBvbmx5IGNhcmUgYWJvdXQgaXRzIGxhc3QgSlNYIE91dHB1dC5cbiAqL1xuXG5mdW5jdGlvbiBhZGRVc2VPbkV2ZW50cyhcbiAganN4OiBKU1hPdXRwdXQsXG4gIHVzZU9uRXZlbnRzOiBVc2VPbk1hcFxuKTogVmFsdWVPclByb21pc2U8SlNYTm9kZUludGVybmFsPHN0cmluZz4gfCBudWxsIHwgSlNYT3V0cHV0PiB7XG4gIGNvbnN0IGpzeEVsZW1lbnQgPSBmaW5kRmlyc3RTdHJpbmdKU1goanN4KTtcbiAgbGV0IGpzeFJlc3VsdCA9IGpzeDtcbiAgcmV0dXJuIG1heWJlVGhlbihqc3hFbGVtZW50LCAoanN4RWxlbWVudCkgPT4ge1xuICAgIGxldCBpc0ludmlzaWJsZUNvbXBvbmVudCA9IGZhbHNlO1xuICAgIGlmICghanN4RWxlbWVudCkge1xuICAgICAgLyoqXG4gICAgICAgKiBXZSBkaWQgbm90IGZpbmQgYW55IGpzeCBub2RlIHdpdGggYSBzdHJpbmcgdGFnLiBUaGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIGFwcGVuZDpcbiAgICAgICAqXG4gICAgICAgKiBgYGBodG1sXG4gICAgICAgKiA8c2NyaXB0IHR5cGU9XCJwbGFjZWhvbGRlclwiIGhpZGRlbiBvbi1kb2N1bWVudDpxaW5pdD1cIi4uLlwiPjwvc2NyaXB0PlxuICAgICAgICogYGBgXG4gICAgICAgKlxuICAgICAgICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB1c2Ugb24gZXZlbnRzIHNob3VsZCBoYXZlIGEgbm9kZSB0byBhdHRhY2ggdGhlbSB0by5cbiAgICAgICAqL1xuICAgICAgaXNJbnZpc2libGVDb21wb25lbnQgPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB1c2VPbkV2ZW50cykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1c2VPbkV2ZW50cywga2V5KSkge1xuICAgICAgICBpZiAoaXNJbnZpc2libGVDb21wb25lbnQpIHtcbiAgICAgICAgICBpZiAoa2V5ID09PSAnb25RdmlzaWJsZSQnKSB7XG4gICAgICAgICAgICBjb25zdCBbanN4RWxlbWVudCwganN4XSA9IGFkZFNjcmlwdE5vZGVGb3JJbnZpc2libGVDb21wb25lbnRzKGpzeFJlc3VsdCk7XG4gICAgICAgICAgICBqc3hSZXN1bHQgPSBqc3g7XG4gICAgICAgICAgICBpZiAoanN4RWxlbWVudCkge1xuICAgICAgICAgICAgICBhZGRVc2VPbkV2ZW50KGpzeEVsZW1lbnQsICdkb2N1bWVudDpvblFpbml0JCcsIHVzZU9uRXZlbnRzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnN0YXJ0c1dpdGgoJ2RvY3VtZW50OicpIHx8IGtleS5zdGFydHNXaXRoKCd3aW5kb3c6JykpIHtcbiAgICAgICAgICAgIGNvbnN0IFtqc3hFbGVtZW50LCBqc3hdID0gYWRkU2NyaXB0Tm9kZUZvckludmlzaWJsZUNvbXBvbmVudHMoanN4UmVzdWx0KTtcbiAgICAgICAgICAgIGpzeFJlc3VsdCA9IGpzeDtcbiAgICAgICAgICAgIGlmIChqc3hFbGVtZW50KSB7XG4gICAgICAgICAgICAgIGFkZFVzZU9uRXZlbnQoanN4RWxlbWVudCwga2V5LCB1c2VPbkV2ZW50c1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRGV2KSB7XG4gICAgICAgICAgICBsb2dXYXJuKFxuICAgICAgICAgICAgICAnWW91IGFyZSB0cnlpbmcgdG8gYWRkIGFuIGV2ZW50IFwiJyArXG4gICAgICAgICAgICAgICAga2V5ICtcbiAgICAgICAgICAgICAgICAnXCIgdXNpbmcgYHVzZU9uYCBob29rLCAnICtcbiAgICAgICAgICAgICAgICAnYnV0IGEgbm9kZSB0byB3aGljaCB5b3UgY2FuIGFkZCBhbiBldmVudCBpcyBub3QgZm91bmQuICcgK1xuICAgICAgICAgICAgICAgICdQbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbXBvbmVudCBoYXMgYSB2YWxpZCBlbGVtZW50IG5vZGUuICdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGpzeEVsZW1lbnQpIHtcbiAgICAgICAgICBhZGRVc2VPbkV2ZW50KGpzeEVsZW1lbnQsIGtleSwgdXNlT25FdmVudHNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpzeFJlc3VsdDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFVzZU9uRXZlbnQoXG4gIGpzeEVsZW1lbnQ6IEpTWE5vZGVJbnRlcm5hbCxcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBFdmVudFFSTDxLbm93bkV2ZW50TmFtZXM+W11cbikge1xuICBsZXQgcHJvcHMgPSBqc3hFbGVtZW50LnByb3BzO1xuICBpZiAocHJvcHMgPT09IEVNUFRZX09CSikge1xuICAgIHByb3BzID0ganN4RWxlbWVudC5wcm9wcyA9IHt9O1xuICB9XG4gIGxldCBwcm9wVmFsdWUgPSBwcm9wc1trZXldIGFzIFVzZU9uTWFwWydhbnknXSB8IFVzZU9uTWFwWydhbnknXVswXSB8IHVuZGVmaW5lZDtcbiAgaWYgKHByb3BWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcHJvcFZhbHVlID0gW107XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgIHByb3BWYWx1ZSA9IFtwcm9wVmFsdWVdO1xuICB9XG4gIHByb3BWYWx1ZS5wdXNoKC4uLnZhbHVlKTtcbiAgcHJvcHNba2V5XSA9IHByb3BWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZmluZEZpcnN0U3RyaW5nSlNYKGpzeDogSlNYT3V0cHV0KTogVmFsdWVPclByb21pc2U8SlNYTm9kZUludGVybmFsPHN0cmluZz4gfCBudWxsPiB7XG4gIGNvbnN0IHF1ZXVlOiBhbnlbXSA9IFtqc3hdO1xuICB3aGlsZSAocXVldWUubGVuZ3RoKSB7XG4gICAgY29uc3QganN4ID0gcXVldWUuc2hpZnQoKTtcbiAgICBpZiAoaXNKU1hOb2RlKGpzeCkpIHtcbiAgICAgIGlmICh0eXBlb2YganN4LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBqc3ggYXMgSlNYTm9kZUludGVybmFsPHN0cmluZz47XG4gICAgICB9XG4gICAgICBxdWV1ZS5wdXNoKGpzeC5jaGlsZHJlbik7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGpzeCkpIHtcbiAgICAgIHF1ZXVlLnB1c2goLi4uanN4KTtcbiAgICB9IGVsc2UgaWYgKGlzUHJvbWlzZShqc3gpKSB7XG4gICAgICByZXR1cm4gbWF5YmVUaGVuPEpTWE91dHB1dCwgSlNYTm9kZUludGVybmFsPHN0cmluZz4gfCBudWxsPihqc3gsIChqc3gpID0+XG4gICAgICAgIGZpbmRGaXJzdFN0cmluZ0pTWChqc3gpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaXNTaWduYWwoanN4KSkge1xuICAgICAgcmV0dXJuIGZpbmRGaXJzdFN0cmluZ0pTWCh1bnRyYWNrKCgpID0+IGpzeC52YWx1ZSBhcyBKU1hPdXRwdXQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFkZFNjcmlwdE5vZGVGb3JJbnZpc2libGVDb21wb25lbnRzKFxuICBqc3g6IEpTWE91dHB1dFxuKTogW0pTWE5vZGVJbnRlcm5hbDxzdHJpbmc+IHwgbnVsbCwgSlNYT3V0cHV0IHwgbnVsbF0ge1xuICBpZiAoaXNKU1hOb2RlKGpzeCkpIHtcbiAgICBjb25zdCBqc3hFbGVtZW50ID0gbmV3IEpTWE5vZGVJbXBsKFxuICAgICAgJ3NjcmlwdCcsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3BsYWNlaG9sZGVyJyxcbiAgICAgICAgaGlkZGVuOiAnJyxcbiAgICAgIH0sXG4gICAgICBudWxsLFxuICAgICAgM1xuICAgICk7XG4gICAgaWYgKGpzeC50eXBlID09PSBTbG90KSB7XG4gICAgICByZXR1cm4gW2pzeEVsZW1lbnQsIF9qc3hTb3J0ZWQoRnJhZ21lbnQsIG51bGwsIG51bGwsIFtqc3gsIGpzeEVsZW1lbnRdLCAwLCBudWxsKV07XG4gICAgfVxuXG4gICAgaWYgKGpzeC5jaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICBqc3guY2hpbGRyZW4gPSBqc3hFbGVtZW50O1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShqc3guY2hpbGRyZW4pKSB7XG4gICAgICBqc3guY2hpbGRyZW4ucHVzaChqc3hFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAganN4LmNoaWxkcmVuID0gW2pzeC5jaGlsZHJlbiwganN4RWxlbWVudF07XG4gICAgfVxuICAgIHJldHVybiBbanN4RWxlbWVudCwganN4XTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGpzeCkgJiYganN4Lmxlbmd0aCkge1xuICAgIC8vIGdldCBmaXJzdCBlbGVtZW50XG4gICAgY29uc3QgW2pzeEVsZW1lbnQsIF9dID0gYWRkU2NyaXB0Tm9kZUZvckludmlzaWJsZUNvbXBvbmVudHMoanN4WzBdKTtcbiAgICByZXR1cm4gW2pzeEVsZW1lbnQsIGpzeF07XG4gIH1cblxuICByZXR1cm4gW251bGwsIG51bGxdO1xufVxuIl19","/** @internal */\nexport const _CONST_PROPS = Symbol('CONST');\n/** @internal */\nexport const _VAR_PROPS = Symbol('VAR');\n/** @internal @deprecated v1 compat */\nexport const _IMMUTABLE = Symbol('IMMUTABLE');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFeEMsc0NBQXNDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX0NPTlNUX1BST1BTID0gU3ltYm9sKCdDT05TVCcpO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9WQVJfUFJPUFMgPSBTeW1ib2woJ1ZBUicpO1xuXG4vKiogQGludGVybmFsIEBkZXByZWNhdGVkIHYxIGNvbXBhdCAqL1xuZXhwb3J0IGNvbnN0IF9JTU1VVEFCTEUgPSBTeW1ib2woJ0lNTVVUQUJMRScpO1xuIl19","import { createPropsProxy } from '../jsx/jsx-runtime';\nimport { _CONST_PROPS, _VAR_PROPS } from './constants';\nimport { NON_SERIALIZABLE_MARKER_PREFIX } from './markers';\nexport function isSlotProp(prop) {\n    return !prop.startsWith('q:') && !prop.startsWith(NON_SERIALIZABLE_MARKER_PREFIX);\n}\n/** @internal */\nexport const _restProps = (props, omit, target = {}) => {\n    let constPropsTarget = null;\n    const constProps = props[_CONST_PROPS];\n    if (constProps) {\n        for (const key in constProps) {\n            if (!omit.includes(key)) {\n                constPropsTarget ||= {};\n                constPropsTarget[key] = constProps[key];\n            }\n        }\n    }\n    const varPropsTarget = target;\n    const varProps = props[_VAR_PROPS];\n    for (const key in varProps) {\n        if (!omit.includes(key)) {\n            varPropsTarget[key] = varProps[key];\n        }\n    }\n    return createPropsProxy(varPropsTarget, constPropsTarget);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvcHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQStCLE1BQU0sb0JBQW9CLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTNELE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBWTtJQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUNwRixDQUFDO0FBRUQsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWlCLEVBQUUsSUFBYyxFQUFFLFNBQWdCLEVBQUUsRUFBRSxFQUFFO0lBQ2xGLElBQUksZ0JBQWdCLEdBQWlCLElBQUksQ0FBQztJQUMxQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsZ0JBQWdCLEtBQUssRUFBRSxDQUFDO2dCQUN4QixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxjQUFjLEdBQVUsTUFBTSxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuQyxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUHJvcHNQcm94eSwgdHlwZSBQcm9wcywgdHlwZSBQcm9wc1Byb3h5IH0gZnJvbSAnLi4vanN4L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IF9DT05TVF9QUk9QUywgX1ZBUl9QUk9QUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE5PTl9TRVJJQUxJWkFCTEVfTUFSS0VSX1BSRUZJWCB9IGZyb20gJy4vbWFya2Vycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Nsb3RQcm9wKHByb3A6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIXByb3Auc3RhcnRzV2l0aCgncTonKSAmJiAhcHJvcC5zdGFydHNXaXRoKE5PTl9TRVJJQUxJWkFCTEVfTUFSS0VSX1BSRUZJWCk7XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBfcmVzdFByb3BzID0gKHByb3BzOiBQcm9wc1Byb3h5LCBvbWl0OiBzdHJpbmdbXSwgdGFyZ2V0OiBQcm9wcyA9IHt9KSA9PiB7XG4gIGxldCBjb25zdFByb3BzVGFyZ2V0OiBQcm9wcyB8IG51bGwgPSBudWxsO1xuICBjb25zdCBjb25zdFByb3BzID0gcHJvcHNbX0NPTlNUX1BST1BTXTtcbiAgaWYgKGNvbnN0UHJvcHMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb25zdFByb3BzKSB7XG4gICAgICBpZiAoIW9taXQuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBjb25zdFByb3BzVGFyZ2V0IHx8PSB7fTtcbiAgICAgICAgY29uc3RQcm9wc1RhcmdldFtrZXldID0gY29uc3RQcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCB2YXJQcm9wc1RhcmdldDogUHJvcHMgPSB0YXJnZXQ7XG4gIGNvbnN0IHZhclByb3BzID0gcHJvcHNbX1ZBUl9QUk9QU107XG4gIGZvciAoY29uc3Qga2V5IGluIHZhclByb3BzKSB7XG4gICAgaWYgKCFvbWl0LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHZhclByb3BzVGFyZ2V0W2tleV0gPSB2YXJQcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVQcm9wc1Byb3h5KHZhclByb3BzVGFyZ2V0LCBjb25zdFByb3BzVGFyZ2V0KTtcbn07XG4iXX0=","export function escapeHTML(html) {\n    let escapedHTML = '';\n    const length = html.length;\n    let idx = 0;\n    let lastIdx = idx;\n    for (; idx < length; idx++) {\n        // We get the charCode NOT string. String would allocate memory.\n        const ch = html.charCodeAt(idx);\n        // Every time we concat a string we allocate memory. We want to minimize that.\n        if (ch === 60 /* < */) {\n            escapedHTML += html.substring(lastIdx, idx) + '&lt;';\n        }\n        else if (ch === 62 /* > */) {\n            escapedHTML += html.substring(lastIdx, idx) + '&gt;';\n        }\n        else if (ch === 38 /* & */) {\n            escapedHTML += html.substring(lastIdx, idx) + '&amp;';\n        }\n        else if (ch === 34 /* \" */) {\n            escapedHTML += html.substring(lastIdx, idx) + '&quot;';\n        }\n        else if (ch === 39 /* ' */) {\n            escapedHTML += html.substring(lastIdx, idx) + '&#39;';\n        }\n        else {\n            continue;\n        }\n        lastIdx = idx + 1;\n    }\n    if (lastIdx === 0) {\n        // This is most common case, just return previous string no memory allocation.\n        return html;\n    }\n    else {\n        // Add the tail of replacement.\n        return escapedHTML + html.substring(lastIdx);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcmFjdGVyLWVzY2FwaW5nLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9jaGFyYWN0ZXItZXNjYXBpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFZO0lBQ3JDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNyQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUNsQixPQUFPLEdBQUcsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUMzQixnRUFBZ0U7UUFDaEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyw4RUFBOEU7UUFDOUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDdkQsQ0FBQzthQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3ZELENBQUM7YUFBTSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUN4RCxDQUFDO2FBQU0sSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdCLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDekQsQ0FBQzthQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3hELENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUztRQUNYLENBQUM7UUFDRCxPQUFPLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEIsOEVBQThFO1FBQzlFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztTQUFNLENBQUM7UUFDTiwrQkFBK0I7UUFDL0IsT0FBTyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBlc2NhcGVIVE1MKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBlc2NhcGVkSFRNTCA9ICcnO1xuICBjb25zdCBsZW5ndGggPSBodG1sLmxlbmd0aDtcbiAgbGV0IGlkeCA9IDA7XG4gIGxldCBsYXN0SWR4ID0gaWR4O1xuICBmb3IgKDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgIC8vIFdlIGdldCB0aGUgY2hhckNvZGUgTk9UIHN0cmluZy4gU3RyaW5nIHdvdWxkIGFsbG9jYXRlIG1lbW9yeS5cbiAgICBjb25zdCBjaCA9IGh0bWwuY2hhckNvZGVBdChpZHgpO1xuICAgIC8vIEV2ZXJ5IHRpbWUgd2UgY29uY2F0IGEgc3RyaW5nIHdlIGFsbG9jYXRlIG1lbW9yeS4gV2Ugd2FudCB0byBtaW5pbWl6ZSB0aGF0LlxuICAgIGlmIChjaCA9PT0gNjAgLyogPCAqLykge1xuICAgICAgZXNjYXBlZEhUTUwgKz0gaHRtbC5zdWJzdHJpbmcobGFzdElkeCwgaWR4KSArICcmbHQ7JztcbiAgICB9IGVsc2UgaWYgKGNoID09PSA2MiAvKiA+ICovKSB7XG4gICAgICBlc2NhcGVkSFRNTCArPSBodG1sLnN1YnN0cmluZyhsYXN0SWR4LCBpZHgpICsgJyZndDsnO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDM4IC8qICYgKi8pIHtcbiAgICAgIGVzY2FwZWRIVE1MICs9IGh0bWwuc3Vic3RyaW5nKGxhc3RJZHgsIGlkeCkgKyAnJmFtcDsnO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDM0IC8qIFwiICovKSB7XG4gICAgICBlc2NhcGVkSFRNTCArPSBodG1sLnN1YnN0cmluZyhsYXN0SWR4LCBpZHgpICsgJyZxdW90Oyc7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gMzkgLyogJyAqLykge1xuICAgICAgZXNjYXBlZEhUTUwgKz0gaHRtbC5zdWJzdHJpbmcobGFzdElkeCwgaWR4KSArICcmIzM5Oyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsYXN0SWR4ID0gaWR4ICsgMTtcbiAgfVxuICBpZiAobGFzdElkeCA9PT0gMCkge1xuICAgIC8vIFRoaXMgaXMgbW9zdCBjb21tb24gY2FzZSwganVzdCByZXR1cm4gcHJldmlvdXMgc3RyaW5nIG5vIG1lbW9yeSBhbGxvY2F0aW9uLlxuICAgIHJldHVybiBodG1sO1xuICB9IGVsc2Uge1xuICAgIC8vIEFkZCB0aGUgdGFpbCBvZiByZXBsYWNlbWVudC5cbiAgICByZXR1cm4gZXNjYXBlZEhUTUwgKyBodG1sLnN1YnN0cmluZyhsYXN0SWR4KTtcbiAgfVxufVxuIl19","/** CSS properties which accept numbers but are not in units of \"px\". */\nconst unitlessNumbers = new Set([\n    'animationIterationCount',\n    'aspectRatio',\n    'borderImageOutset',\n    'borderImageSlice',\n    'borderImageWidth',\n    'boxFlex',\n    'boxFlexGroup',\n    'boxOrdinalGroup',\n    'columnCount',\n    'columns',\n    'flex',\n    'flexGrow',\n    'flexShrink',\n    'gridArea',\n    'gridRow',\n    'gridRowEnd',\n    'gridRowStart',\n    'gridColumn',\n    'gridColumnEnd',\n    'gridColumnStart',\n    'fontWeight',\n    'lineClamp',\n    'lineHeight',\n    'opacity',\n    'order',\n    'orphans',\n    'scale',\n    'tabSize',\n    'widows',\n    'zIndex',\n    'zoom',\n    'MozAnimationIterationCount', // Known Prefixed Properties\n    'MozBoxFlex', // TODO: Remove these since they shouldn't be used in modern code\n    'msFlex',\n    'msFlexPositive',\n    'WebkitAnimationIterationCount',\n    'WebkitBoxFlex',\n    'WebkitBoxOrdinalGroup',\n    'WebkitColumnCount',\n    'WebkitColumns',\n    'WebkitFlex',\n    'WebkitFlexGrow',\n    'WebkitFlexShrink',\n    'WebkitLineClamp',\n]);\nexport const isUnitlessNumber = (name) => {\n    return unitlessNumbers.has(name);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdGxlc3NfbnVtYmVyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy91bml0bGVzc19udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0VBQXdFO0FBQ3hFLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzlCLHlCQUF5QjtJQUN6QixhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsU0FBUztJQUNULGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsYUFBYTtJQUNiLFNBQVM7SUFDVCxNQUFNO0lBQ04sVUFBVTtJQUNWLFlBQVk7SUFDWixVQUFVO0lBQ1YsU0FBUztJQUNULFlBQVk7SUFDWixjQUFjO0lBQ2QsWUFBWTtJQUNaLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsWUFBWTtJQUNaLFdBQVc7SUFDWCxZQUFZO0lBQ1osU0FBUztJQUNULE9BQU87SUFDUCxTQUFTO0lBQ1QsT0FBTztJQUNQLFNBQVM7SUFDVCxRQUFRO0lBQ1IsUUFBUTtJQUNSLE1BQU07SUFDTiw0QkFBNEIsRUFBRSw0QkFBNEI7SUFDMUQsWUFBWSxFQUFFLGlFQUFpRTtJQUMvRSxRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLCtCQUErQjtJQUMvQixlQUFlO0lBQ2YsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsaUJBQWlCO0NBQ2xCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBWSxFQUFXLEVBQUU7SUFDeEQsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuICovXG5jb25zdCB1bml0bGVzc051bWJlcnMgPSBuZXcgU2V0KFtcbiAgJ2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50JyxcbiAgJ2FzcGVjdFJhdGlvJyxcbiAgJ2JvcmRlckltYWdlT3V0c2V0JyxcbiAgJ2JvcmRlckltYWdlU2xpY2UnLFxuICAnYm9yZGVySW1hZ2VXaWR0aCcsXG4gICdib3hGbGV4JyxcbiAgJ2JveEZsZXhHcm91cCcsXG4gICdib3hPcmRpbmFsR3JvdXAnLFxuICAnY29sdW1uQ291bnQnLFxuICAnY29sdW1ucycsXG4gICdmbGV4JyxcbiAgJ2ZsZXhHcm93JyxcbiAgJ2ZsZXhTaHJpbmsnLFxuICAnZ3JpZEFyZWEnLFxuICAnZ3JpZFJvdycsXG4gICdncmlkUm93RW5kJyxcbiAgJ2dyaWRSb3dTdGFydCcsXG4gICdncmlkQ29sdW1uJyxcbiAgJ2dyaWRDb2x1bW5FbmQnLFxuICAnZ3JpZENvbHVtblN0YXJ0JyxcbiAgJ2ZvbnRXZWlnaHQnLFxuICAnbGluZUNsYW1wJyxcbiAgJ2xpbmVIZWlnaHQnLFxuICAnb3BhY2l0eScsXG4gICdvcmRlcicsXG4gICdvcnBoYW5zJyxcbiAgJ3NjYWxlJyxcbiAgJ3RhYlNpemUnLFxuICAnd2lkb3dzJyxcbiAgJ3pJbmRleCcsXG4gICd6b29tJyxcbiAgJ01vekFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50JywgLy8gS25vd24gUHJlZml4ZWQgUHJvcGVydGllc1xuICAnTW96Qm94RmxleCcsIC8vIFRPRE86IFJlbW92ZSB0aGVzZSBzaW5jZSB0aGV5IHNob3VsZG4ndCBiZSB1c2VkIGluIG1vZGVybiBjb2RlXG4gICdtc0ZsZXgnLFxuICAnbXNGbGV4UG9zaXRpdmUnLFxuICAnV2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQnLFxuICAnV2Via2l0Qm94RmxleCcsXG4gICdXZWJraXRCb3hPcmRpbmFsR3JvdXAnLFxuICAnV2Via2l0Q29sdW1uQ291bnQnLFxuICAnV2Via2l0Q29sdW1ucycsXG4gICdXZWJraXRGbGV4JyxcbiAgJ1dlYmtpdEZsZXhHcm93JyxcbiAgJ1dlYmtpdEZsZXhTaHJpbmsnLFxuICAnV2Via2l0TGluZUNsYW1wJyxcbl0pO1xuXG5leHBvcnQgY29uc3QgaXNVbml0bGVzc051bWJlciA9IChuYW1lOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIHVuaXRsZXNzTnVtYmVycy5oYXMobmFtZSk7XG59O1xuIl19","export const hashCode = (text, hash = 0) => {\n    for (let i = 0; i < text.length; i++) {\n        const chr = text.charCodeAt(i);\n        hash = (hash << 5) - hash + chr;\n        hash |= 0; // Convert to 32bit integer\n    }\n    return Number(Math.abs(hash)).toString(36);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaF9jb2RlLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9oYXNoX2NvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBWSxFQUFFLE9BQWUsQ0FBQyxFQUFFLEVBQUU7SUFDekQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkI7SUFDeEMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGhhc2hDb2RlID0gKHRleHQ6IHN0cmluZywgaGFzaDogbnVtYmVyID0gMCkgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaHIgPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgaGFzaCA9IChoYXNoIDw8IDUpIC0gaGFzaCArIGNocjtcbiAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICB9XG4gIHJldHVybiBOdW1iZXIoTWF0aC5hYnMoaGFzaCkpLnRvU3RyaW5nKDM2KTtcbn07XG4iXX0=","import { qError } from '../error/error';\nimport { isPreventDefault } from './event-names';\nimport { isClassAttr } from './scoped-styles';\nimport { isArray, isString } from './types';\nimport { isUnitlessNumber } from './unitless_number';\nimport { assertQrl } from '../qrl/qrl-utils';\nimport { hashCode } from './hash_code';\nexport const serializeClass = (obj) => {\n    if (!obj) {\n        return '';\n    }\n    if (isString(obj)) {\n        return obj.trim();\n    }\n    const classes = [];\n    if (isArray(obj)) {\n        for (const o of obj) {\n            const classList = serializeClass(o);\n            if (classList) {\n                classes.push(classList);\n            }\n        }\n    }\n    else {\n        for (const [key, value] of Object.entries(obj)) {\n            if (value) {\n                classes.push(key.trim());\n            }\n        }\n    }\n    return classes.join(' ');\n};\n// Unlike fromCamelToKebabCase, this leaves `-` so that `background-color` stays `background-color`\nconst fromCamelToKebabCaseWithDash = (text) => {\n    return text.replace(/([A-Z])/g, '-$1').toLowerCase();\n};\nexport const stringifyStyle = (obj) => {\n    if (obj == null) {\n        return '';\n    }\n    if (typeof obj == 'object') {\n        if (isArray(obj)) {\n            throw qError(0 /* QError.stringifyClassOrStyle */, [obj, 'style']);\n        }\n        else {\n            const chunks = [];\n            for (const key in obj) {\n                if (Object.prototype.hasOwnProperty.call(obj, key)) {\n                    const value = obj[key];\n                    if (value != null && typeof value !== 'function') {\n                        if (key.startsWith('--')) {\n                            chunks.push(key + ':' + value);\n                        }\n                        else {\n                            chunks.push(fromCamelToKebabCaseWithDash(key) + ':' + setValueForStyle(key, value));\n                        }\n                    }\n                }\n            }\n            return chunks.join(';');\n        }\n    }\n    return String(obj);\n};\nexport const serializeBooleanOrNumberAttribute = (value) => {\n    return value != null ? String(value) : null;\n};\nexport function serializeAttribute(key, value, styleScopedId) {\n    if (isClassAttr(key)) {\n        const serializedClass = serializeClass(value);\n        value = styleScopedId\n            ? styleScopedId + (serializedClass.length ? ' ' + serializedClass : serializedClass)\n            : serializedClass;\n    }\n    else if (key === 'style') {\n        value = stringifyStyle(value);\n    }\n    else if (isEnumeratedBooleanAttribute(key) || typeof value === 'number') {\n        // aria attrs, tabindex etc.\n        value = serializeBooleanOrNumberAttribute(value);\n    }\n    else if (value === false || value == null) {\n        value = null;\n    }\n    else if (value === true && isPreventDefault(key)) {\n        value = '';\n    }\n    return value;\n}\nfunction isEnumeratedBooleanAttribute(key) {\n    return isAriaAttribute(key) || ['spellcheck', 'draggable', 'contenteditable'].includes(key);\n}\nexport const setValueForStyle = (styleName, value) => {\n    if (typeof value === 'number' && value !== 0 && !isUnitlessNumber(styleName)) {\n        return value + 'px';\n    }\n    return value;\n};\nexport function isAriaAttribute(prop) {\n    return prop.startsWith('aria-');\n}\nexport const styleKey = (qStyles, index) => {\n    assertQrl(qStyles);\n    return `${hashCode(qStyles.$hash$)}-${index}`;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9zdHlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBYyxFQUFVLEVBQUU7SUFDdkQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBRTdCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDakIsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNwQixNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztTQUFN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Q0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQW9CLEVBQUUsS0FBYSxFQUFVLEVBQUU7SUFDdEUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25CLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ2hELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2xhc3NMaXN0IH0gZnJvbSAnLi4vanN4L3R5cGVzL2pzeC1xd2lrLWF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgUUVycm9yLCBxRXJyb3IgfSBmcm9tICcuLi9lcnJvci9lcnJvcic7XG5pbXBvcnQgeyBpc1ByZXZlbnREZWZhdWx0IH0gZnJvbSAnLi9ldmVudC1uYW1lcyc7XG5pbXBvcnQgeyBpc0NsYXNzQXR0ciB9IGZyb20gJy4vc2NvcGVkLXN0eWxlcyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgaXNVbml0bGVzc051bWJlciB9IGZyb20gJy4vdW5pdGxlc3NfbnVtYmVyJztcbmltcG9ydCB7IGFzc2VydFFybCB9IGZyb20gJy4uL3FybC9xcmwtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICcuLi9xcmwvcXJsLnB1YmxpYyc7XG5pbXBvcnQgeyBoYXNoQ29kZSB9IGZyb20gJy4vaGFzaF9jb2RlJztcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZUNsYXNzID0gKG9iajogQ2xhc3NMaXN0KTogc3RyaW5nID0+IHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKG9iaikpIHtcbiAgICByZXR1cm4gb2JqLnRyaW0oKTtcbiAgfVxuXG4gIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIGZvciAoY29uc3QgbyBvZiBvYmopIHtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHNlcmlhbGl6ZUNsYXNzKG8pO1xuICAgICAgaWYgKGNsYXNzTGlzdCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goY2xhc3NMaXN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaChrZXkudHJpbSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG59O1xuXG4vLyBVbmxpa2UgZnJvbUNhbWVsVG9LZWJhYkNhc2UsIHRoaXMgbGVhdmVzIGAtYCBzbyB0aGF0IGBiYWNrZ3JvdW5kLWNvbG9yYCBzdGF5cyBgYmFja2dyb3VuZC1jb2xvcmBcbmNvbnN0IGZyb21DYW1lbFRvS2ViYWJDYXNlV2l0aERhc2ggPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgvKFtBLVpdKS9nLCAnLSQxJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdpZnlTdHlsZSA9IChvYmo6IGFueSk6IHN0cmluZyA9PiB7XG4gIGlmIChvYmogPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAodHlwZW9mIG9iaiA9PSAnb2JqZWN0Jykge1xuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgIHRocm93IHFFcnJvcihRRXJyb3Iuc3RyaW5naWZ5Q2xhc3NPclN0eWxlLCBbb2JqLCAnc3R5bGUnXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJy0tJykpIHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goa2V5ICsgJzonICsgdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goZnJvbUNhbWVsVG9LZWJhYkNhc2VXaXRoRGFzaChrZXkpICsgJzonICsgc2V0VmFsdWVGb3JTdHlsZShrZXksIHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2h1bmtzLmpvaW4oJzsnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFN0cmluZyhvYmopO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZUJvb2xlYW5Pck51bWJlckF0dHJpYnV0ZSA9ICh2YWx1ZTogYW55KSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsID8gU3RyaW5nKHZhbHVlKSA6IG51bGw7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQXR0cmlidXRlKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgc3R5bGVTY29wZWRJZD86IHN0cmluZyB8IG51bGxcbik6IHN0cmluZyB8IG51bGwgfCBib29sZWFuIHtcbiAgaWYgKGlzQ2xhc3NBdHRyKGtleSkpIHtcbiAgICBjb25zdCBzZXJpYWxpemVkQ2xhc3MgPSBzZXJpYWxpemVDbGFzcyh2YWx1ZSBhcyBDbGFzc0xpc3QpO1xuICAgIHZhbHVlID0gc3R5bGVTY29wZWRJZFxuICAgICAgPyBzdHlsZVNjb3BlZElkICsgKHNlcmlhbGl6ZWRDbGFzcy5sZW5ndGggPyAnICcgKyBzZXJpYWxpemVkQ2xhc3MgOiBzZXJpYWxpemVkQ2xhc3MpXG4gICAgICA6IHNlcmlhbGl6ZWRDbGFzcztcbiAgfSBlbHNlIGlmIChrZXkgPT09ICdzdHlsZScpIHtcbiAgICB2YWx1ZSA9IHN0cmluZ2lmeVN0eWxlKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChpc0VudW1lcmF0ZWRCb29sZWFuQXR0cmlidXRlKGtleSkgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIC8vIGFyaWEgYXR0cnMsIHRhYmluZGV4IGV0Yy5cbiAgICB2YWx1ZSA9IHNlcmlhbGl6ZUJvb2xlYW5Pck51bWJlckF0dHJpYnV0ZSh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICB2YWx1ZSA9IG51bGw7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IHRydWUgJiYgaXNQcmV2ZW50RGVmYXVsdChrZXkpKSB7XG4gICAgdmFsdWUgPSAnJztcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzRW51bWVyYXRlZEJvb2xlYW5BdHRyaWJ1dGUoa2V5OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGlzQXJpYUF0dHJpYnV0ZShrZXkpIHx8IFsnc3BlbGxjaGVjaycsICdkcmFnZ2FibGUnLCAnY29udGVudGVkaXRhYmxlJ10uaW5jbHVkZXMoa2V5KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNldFZhbHVlRm9yU3R5bGUgPSAoc3R5bGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDAgJiYgIWlzVW5pdGxlc3NOdW1iZXIoc3R5bGVOYW1lKSkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJpYUF0dHJpYnV0ZShwcm9wOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHByb3Auc3RhcnRzV2l0aCgnYXJpYS0nKTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0eWxlS2V5ID0gKHFTdHlsZXM6IFFSTDxzdHJpbmc+LCBpbmRleDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgYXNzZXJ0UXJsKHFTdHlsZXMpO1xuICByZXR1cm4gYCR7aGFzaENvZGUocVN0eWxlcy4kaGFzaCQpfS0ke2luZGV4fWA7XG59O1xuIl19","export function getFileLocationFromJsx(jsxDev) {\n    if (!jsxDev) {\n        return null;\n    }\n    const sanitizedFileName = jsxDev.fileName?.replace(/\\\\/g, '/');\n    if (sanitizedFileName) {\n        return `${sanitizedFileName}:${jsxDev.lineNumber}:${jsxDev.columnNumber}`;\n    }\n    return null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianN4LWZpbGVuYW1lLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9qc3gtZmlsZW5hbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BQWU7SUFDcEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDL0QsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sR0FBRyxpQkFBaUIsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEZXZKU1ggfSBmcm9tICcuLi9qc3gvdHlwZXMvanN4LW5vZGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZUxvY2F0aW9uRnJvbUpzeChqc3hEZXY/OiBEZXZKU1gpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFqc3hEZXYpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBzYW5pdGl6ZWRGaWxlTmFtZSA9IGpzeERldi5maWxlTmFtZT8ucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBpZiAoc2FuaXRpemVkRmlsZU5hbWUpIHtcbiAgICByZXR1cm4gYCR7c2FuaXRpemVkRmlsZU5hbWV9OiR7anN4RGV2LmxpbmVOdW1iZXJ9OiR7anN4RGV2LmNvbHVtbk51bWJlcn1gO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19","import { isDev } from '@qwik.dev/core/build';\nimport { SERIALIZABLE_STATE } from '../shared/component.public';\nimport { assertDefined, assertFalse, assertTrue } from '../shared/error/assert';\nimport { Fragment, JSXNodeImpl, directGetPropsProxyProp, isJSXNode, } from '../shared/jsx/jsx-runtime';\nimport { Slot } from '../shared/jsx/slot.public';\nimport { SSRComment, SSRRaw, SkipRender } from '../shared/jsx/utils.public';\nimport { trackSignalAndAssignHost } from '../use/use-core';\nimport { cleanupTask, isTask } from '../use/use-task';\nimport { EMPTY_OBJ } from '../shared/utils/flyweight';\nimport { ELEMENT_KEY, ELEMENT_PROPS, ELEMENT_SEQ, OnRenderProp, QContainerAttr, QDefaultSlot, QSlot, QSlotParent, QBackRefs, QTemplate, Q_PREFIX, dangerouslySetInnerHTML, } from '../shared/utils/markers';\nimport { isPromise } from '../shared/utils/promises';\nimport { getEventNameFromJsxEvent, getEventNameScopeFromJsxEvent, isHtmlAttributeAnEventName, isJsxPropertyAnEventName, jsxEventToHtmlAttribute, } from '../shared/utils/event-names';\nimport { hasClassAttr } from '../shared/utils/scoped-styles';\nimport { DEBUG_TYPE } from '../shared/types';\nimport { vnode_ensureElementInflated, vnode_getDomParentVNode, vnode_getElementName, vnode_getFirstChild, vnode_getNextSibling, vnode_getNode, vnode_getParent, vnode_getProjectionParentComponent, vnode_getProp, vnode_getProps, vnode_getText, vnode_getType, vnode_insertBefore, vnode_isElementVNode, vnode_isProjection, vnode_isTextVNode, vnode_isVNode, vnode_isVirtualVNode, vnode_locate, vnode_newElement, vnode_newText, vnode_newVirtual, vnode_remove, vnode_setAttr, vnode_setProp, vnode_setText, vnode_truncate, vnode_walkVNode, } from './vnode';\nimport { mapApp_findIndx } from './util-mapArray';\nimport { mapArray_set } from './util-mapArray';\nimport { getNewElementNamespaceData } from './vnode-namespace';\nimport { WrappedSignal, isSignal, SubscriptionData } from '../signal/signal';\nimport { executeComponent } from '../shared/component-execution';\nimport { isSlotProp } from '../shared/utils/prop';\nimport { escapeHTML } from '../shared/utils/character-escaping';\nimport { clearAllEffects } from '../signal/signal-cleanup';\nimport { serializeAttribute } from '../shared/utils/styles';\nimport { qError } from '../shared/error/error';\nimport { getFileLocationFromJsx } from '../shared/utils/jsx-filename';\nexport const vnode_diff = (container, jsxNode, vStartNode, scopedStyleIdPrefix) => {\n    let journal = container.$journal$;\n    /**\n     * Stack is used to keep track of the state of the traversal.\n     *\n     * We push current state into the stack before descending into the child, and we pop the state\n     * when we are done with the child.\n     */\n    const stack = [];\n    const asyncQueue = [];\n    ////////////////////////////////\n    //// Traverse state variables\n    ////////////////////////////////\n    let vParent = null;\n    /// Current node we compare against. (Think of it as a cursor.)\n    /// (Node can be null, if we are at the end of the list.)\n    let vCurrent = null;\n    /// When we insert new node we start it here so that we can descend into it.\n    /// NOTE: it can't be stored in `vCurrent` because `vNewNode` is in journal\n    /// and is not connected to the tree.\n    let vNewNode = null;\n    /// When elements have keys they can be consumed out of order and therefore we can't use nextSibling.\n    /// In such a case this array will contain the elements after the current location.\n    /// The array even indices will contains keys and odd indices the vNode.\n    let vSiblings = null;\n    let vSiblingsArray = null;\n    /// Current set of JSX children.\n    let jsxChildren = null;\n    // Current JSX child.\n    let jsxValue = null;\n    let jsxIdx = 0;\n    let jsxCount = 0;\n    // When we descend into children, we need to skip advance() because we just descended.\n    let shouldAdvance = true;\n    /**\n     * When we are rendering inside a projection we don't want to process child components. Child\n     * components will be processed only if the projection is re-projected with a `<Slot>`.\n     *\n     * Example: <Parent> <div> <Child/> </div> </Parent>\n     *\n     * In the above example, the `Child` component will not be processed because it is inside a\n     * projection. Only if the `<Parent>` projects its content with `<Slot>` will the `Child`\n     * component be processed.\n     */\n    // let inContentProjection = false;\n    ////////////////////////////////\n    diff(jsxNode, vStartNode);\n    return drainAsyncQueue();\n    //////////////////////////////////////////////\n    //////////////////////////////////////////////\n    //////////////////////////////////////////////\n    function diff(jsxNode, vStartNode) {\n        assertFalse(vnode_isVNode(jsxNode), 'JSXNode should not be a VNode');\n        assertTrue(vnode_isVNode(vStartNode), 'vStartNode should be a VNode');\n        vParent = vStartNode;\n        vNewNode = null;\n        vCurrent = vnode_getFirstChild(vStartNode);\n        stackPush(jsxNode, true);\n        while (stack.length) {\n            while (jsxIdx < jsxCount) {\n                assertFalse(vParent === vCurrent, \"Parent and current can't be the same\");\n                if (typeof jsxValue === 'string') {\n                    expectText(jsxValue);\n                }\n                else if (typeof jsxValue === 'number') {\n                    expectText(String(jsxValue));\n                }\n                else if (jsxValue && typeof jsxValue === 'object') {\n                    if (Array.isArray(jsxValue)) {\n                        descend(jsxValue, false);\n                    }\n                    else if (isSignal(jsxValue)) {\n                        if (vCurrent) {\n                            clearAllEffects(container, vCurrent);\n                        }\n                        expectVirtual(\"S\" /* VirtualType.WrappedSignal */, null);\n                        descend(trackSignalAndAssignHost(jsxValue, (vNewNode || vCurrent), \".\" /* EffectProperty.VNODE */, container), true);\n                    }\n                    else if (isPromise(jsxValue)) {\n                        expectVirtual(\"A\" /* VirtualType.Awaited */, null);\n                        asyncQueue.push(jsxValue, vNewNode || vCurrent);\n                    }\n                    else if (isJSXNode(jsxValue)) {\n                        const type = jsxValue.type;\n                        if (typeof type === 'string') {\n                            expectNoMoreTextNodes();\n                            expectElement(jsxValue, type);\n                            descend(jsxValue.children, true);\n                        }\n                        else if (typeof type === 'function') {\n                            if (type === Fragment) {\n                                expectNoMoreTextNodes();\n                                expectVirtual(\"F\" /* VirtualType.Fragment */, jsxValue.key);\n                                descend(jsxValue.children, true);\n                            }\n                            else if (type === Slot) {\n                                expectNoMoreTextNodes();\n                                if (!expectSlot()) {\n                                    // nothing to project, so try to render the Slot default content.\n                                    descend(jsxValue.children, true);\n                                }\n                            }\n                            else if (type === Projection) {\n                                expectProjection();\n                                descend(jsxValue.children, true);\n                            }\n                            else if (type === SSRComment) {\n                                expectNoMore();\n                            }\n                            else if (type === SSRRaw) {\n                                expectNoMore();\n                            }\n                            else {\n                                // Must be a component\n                                expectNoMoreTextNodes();\n                                expectComponent(type);\n                            }\n                        }\n                    }\n                }\n                else if (jsxValue === SkipRender) {\n                    // do nothing, we are skipping this node\n                    journal = [];\n                }\n                else {\n                    expectText('');\n                }\n                advance();\n            }\n            expectNoMore();\n            ascend();\n        }\n    }\n    function advance() {\n        if (!shouldAdvance) {\n            shouldAdvance = true;\n            return;\n        }\n        jsxIdx++;\n        if (jsxIdx < jsxCount) {\n            jsxValue = jsxChildren[jsxIdx];\n        }\n        else if (stack[stack.length - 1] === false) {\n            // this was special `descendVNode === false` so pop and try again\n            return ascend();\n        }\n        if (vNewNode !== null) {\n            // We have a new Node.\n            // This means that the `vCurrent` was deemed not useful and we inserted in front of it.\n            // This means that the next node we should look at is the `vCurrent` so just clear the\n            // vNewNode  and try again.\n            vNewNode = null;\n        }\n        else {\n            advanceToNextSibling();\n        }\n    }\n    /**\n     * Advance the `vCurrent` to the next sibling.\n     *\n     * Normally this is just `vCurrent = vnode_getNextSibling(vCurrent)`. However, this gets\n     * complicated if `retrieveChildWithKey` was called, because then we are consuming nodes out of\n     * order and can't rely on `vnode_getNextSibling` and instead we need to go by `vSiblings`.\n     */\n    function peekNextSibling() {\n        // If we don't have a `vNewNode`, than that means we just reconciled the current node.\n        // So advance it.\n        return vCurrent ? vnode_getNextSibling(vCurrent) : null;\n    }\n    /**\n     * Advance the `vCurrent` to the next sibling.\n     *\n     * Normally this is just `vCurrent = vnode_getNextSibling(vCurrent)`. However, this gets\n     * complicated if `retrieveChildWithKey` was called, because then we are consuming nodes out of\n     * order and can't rely on `vnode_getNextSibling` and instead we need to go by `vSiblings`.\n     */\n    function advanceToNextSibling() {\n        vCurrent = peekNextSibling();\n    }\n    /**\n     * @param children\n     * @param descendVNode - If true we are descending into vNode; This is set to false if we come\n     *   across an array in jsx, and we need to descend into the array without actually descending\n     *   into the vNode.\n     *\n     *   Example:\n     *\n     *   ```\n     *   <>\n     *   before\n     *   {[1,2].map((i) => <span>{i}</span>)}\n     *   after\n     *   </>\n     * ```\n     *\n     *   In the above example all nodes are on same level so we don't `descendVNode` even thought there\n     *   is an array produced by the `map` function.\n     */\n    function descend(children, descendVNode) {\n        if (children == null) {\n            expectNoChildren();\n            return;\n        }\n        stackPush(children, descendVNode);\n        if (descendVNode) {\n            assertDefined(vCurrent || vNewNode, 'Expecting vCurrent to be defined.');\n            vSiblings = null;\n            vSiblingsArray = null;\n            vParent = vNewNode || vCurrent;\n            vCurrent = vnode_getFirstChild(vParent);\n            vNewNode = null;\n        }\n        shouldAdvance = false;\n    }\n    function ascend() {\n        const descendVNode = stack.pop(); // boolean: descendVNode\n        if (descendVNode) {\n            vSiblings = stack.pop();\n            vSiblingsArray = stack.pop();\n            vNewNode = stack.pop();\n            vCurrent = stack.pop();\n            vParent = stack.pop();\n        }\n        jsxValue = stack.pop();\n        jsxCount = stack.pop();\n        jsxIdx = stack.pop();\n        jsxChildren = stack.pop();\n        advance();\n    }\n    function stackPush(children, descendVNode) {\n        stack.push(jsxChildren, jsxIdx, jsxCount, jsxValue);\n        if (descendVNode) {\n            stack.push(vParent, vCurrent, vNewNode, vSiblingsArray, vSiblings);\n        }\n        stack.push(descendVNode);\n        if (Array.isArray(children)) {\n            jsxIdx = 0;\n            jsxCount = children.length;\n            jsxChildren = children;\n            jsxValue = jsxCount > 0 ? children[0] : null;\n        }\n        else if (children === undefined) {\n            // no children\n            jsxIdx = 0;\n            jsxValue = null;\n            jsxChildren = null;\n            jsxCount = 0;\n        }\n        else {\n            jsxIdx = 0;\n            jsxValue = children;\n            jsxChildren = null;\n            jsxCount = 1;\n        }\n    }\n    function getInsertBefore() {\n        if (vNewNode) {\n            return vCurrent;\n        }\n        else {\n            return peekNextSibling();\n        }\n    }\n    /////////////////////////////////////////////////////////////////////////////\n    /////////////////////////////////////////////////////////////////////////////\n    /////////////////////////////////////////////////////////////////////////////\n    function descendContentToProject(children, host) {\n        const projectionChildren = Array.isArray(children) ? children : [children];\n        const createProjectionJSXNode = (slotName) => {\n            return new JSXNodeImpl(Projection, EMPTY_OBJ, null, [], 0, slotName);\n        };\n        const projections = [];\n        if (host) {\n            const props = vnode_getProps(host);\n            // we need to create empty projections for all the slots to remove unused slots content\n            for (let i = 0; i < props.length; i = i + 2) {\n                const prop = props[i];\n                if (isSlotProp(prop)) {\n                    const slotName = prop;\n                    projections.push(slotName);\n                    projections.push(createProjectionJSXNode(slotName));\n                }\n            }\n        }\n        if (projections.length === 0 && children == null) {\n            // We did not find any existing slots and we don't have any children to project.\n            return;\n        }\n        /// STEP 1: Bucketize the children based on the projection name.\n        for (let i = 0; i < projectionChildren.length; i++) {\n            const child = projectionChildren[i];\n            const slotName = String((isJSXNode(child) && directGetPropsProxyProp(child, QSlot)) || QDefaultSlot);\n            const idx = mapApp_findIndx(projections, slotName, 0);\n            let jsxBucket;\n            if (idx >= 0) {\n                jsxBucket = projections[idx + 1];\n            }\n            else {\n                projections.splice(~idx, 0, slotName, (jsxBucket = createProjectionJSXNode(slotName)));\n            }\n            const removeProjection = child === false;\n            if (!removeProjection) {\n                jsxBucket.children.push(child);\n            }\n        }\n        /// STEP 2: remove the names\n        for (let i = projections.length - 2; i >= 0; i = i - 2) {\n            projections.splice(i, 1);\n        }\n        descend(projections, true);\n    }\n    function expectProjection() {\n        const jsxNode = jsxValue;\n        const slotName = jsxNode.key;\n        // console.log('expectProjection', JSON.stringify(slotName));\n        vCurrent = vnode_getProp(vParent, // The parent is the component and it should have our portal.\n        slotName, (id) => vnode_locate(container.rootVNode, id));\n        // if projection is marked as deleted then we need to create a new one\n        vCurrent = vCurrent && vCurrent[0 /* VNodeProps.flags */] & 32 /* VNodeFlags.Deleted */ ? null : vCurrent;\n        if (vCurrent == null) {\n            vNewNode = vnode_newVirtual();\n            // you may be tempted to add the projection into the current parent, but\n            // that is wrong. We don't yet know if the projection will be projected, so\n            // we should leave it unattached.\n            // vNewNode[VNodeProps.parent] = vParent;\n            isDev && vnode_setProp(vNewNode, DEBUG_TYPE, \"P\" /* VirtualType.Projection */);\n            isDev && vnode_setProp(vNewNode, 'q:code', 'expectProjection');\n            vnode_setProp(vNewNode, QSlot, slotName);\n            vnode_setProp(vNewNode, QSlotParent, vParent);\n            vnode_setProp(vParent, slotName, vNewNode);\n        }\n    }\n    function expectSlot() {\n        const vHost = vnode_getProjectionParentComponent(vParent, container.rootVNode);\n        const slotNameKey = getSlotNameKey(vHost);\n        // console.log('expectSlot', JSON.stringify(slotNameKey));\n        const vProjectedNode = vHost\n            ? vnode_getProp(vHost, slotNameKey, \n            // for slots this id is vnode ref id\n            null // Projections should have been resolved through container.ensureProjectionResolved\n            //(id) => vnode_locate(container.rootVNode, id)\n            )\n            : null;\n        // console.log('   ', String(vHost), String(vProjectedNode));\n        if (vProjectedNode == null) {\n            // Nothing to project, so render content of the slot.\n            vnode_insertBefore(journal, vParent, (vNewNode = vnode_newVirtual()), vCurrent && getInsertBefore());\n            vnode_setProp(vNewNode, QSlot, slotNameKey);\n            vHost && vnode_setProp(vHost, slotNameKey, vNewNode);\n            isDev && vnode_setProp(vNewNode, DEBUG_TYPE, \"P\" /* VirtualType.Projection */);\n            isDev && vnode_setProp(vNewNode, 'q:code', 'expectSlot' + count++);\n            return false;\n        }\n        else if (vProjectedNode === vCurrent) {\n            // All is good.\n            // console.log('  NOOP', String(vCurrent));\n        }\n        else {\n            // move from q:template to the target node\n            vnode_insertBefore(journal, vParent, (vNewNode = vProjectedNode), vCurrent && getInsertBefore());\n            vnode_setProp(vNewNode, QSlot, slotNameKey);\n            vHost && vnode_setProp(vHost, slotNameKey, vNewNode);\n            isDev && vnode_setProp(vNewNode, DEBUG_TYPE, \"P\" /* VirtualType.Projection */);\n            isDev && vnode_setProp(vNewNode, 'q:code', 'expectSlot' + count++);\n        }\n        return true;\n    }\n    function getSlotNameKey(vHost) {\n        const jsxNode = jsxValue;\n        const constProps = jsxNode.constProps;\n        if (constProps && typeof constProps == 'object' && 'name' in constProps) {\n            const constValue = constProps.name;\n            if (vHost && constValue instanceof WrappedSignal) {\n                return trackSignalAndAssignHost(constValue, vHost, \":\" /* EffectProperty.COMPONENT */, container);\n            }\n        }\n        return directGetPropsProxyProp(jsxNode, 'name') || QDefaultSlot;\n    }\n    function drainAsyncQueue() {\n        while (asyncQueue.length) {\n            const jsxNode = asyncQueue.shift();\n            const vHostNode = asyncQueue.shift();\n            if (isPromise(jsxNode)) {\n                return jsxNode.then((jsxNode) => {\n                    diff(jsxNode, vHostNode);\n                    return drainAsyncQueue();\n                });\n            }\n            else {\n                diff(jsxNode, vHostNode);\n            }\n        }\n    }\n    function expectNoChildren() {\n        const vFirstChild = vCurrent && vnode_getFirstChild(vCurrent);\n        if (vFirstChild !== null) {\n            let vChild = vFirstChild;\n            while (vChild) {\n                cleanup(container, vChild);\n                vChild = vnode_getNextSibling(vChild);\n            }\n            vnode_truncate(journal, vCurrent, vFirstChild);\n        }\n    }\n    /** Expect no more nodes - Any nodes which are still at cursor, need to be removed. */\n    function expectNoMore() {\n        assertFalse(vParent === vCurrent, \"Parent and current can't be the same\");\n        if (vCurrent !== null) {\n            while (vCurrent) {\n                const toRemove = vCurrent;\n                advanceToNextSibling();\n                if (vParent === vnode_getParent(toRemove)) {\n                    cleanup(container, toRemove);\n                    // If we are diffing projection than the parent is not the parent of the node.\n                    // If that is the case we don't want to remove the node from the parent.\n                    vnode_remove(journal, vParent, toRemove, true);\n                }\n            }\n        }\n    }\n    function expectNoMoreTextNodes() {\n        while (vCurrent !== null && vnode_isTextVNode(vCurrent)) {\n            cleanup(container, vCurrent);\n            const toRemove = vCurrent;\n            advanceToNextSibling();\n            vnode_remove(journal, vParent, toRemove, true);\n        }\n    }\n    /**\n     * Returns whether `qDispatchEvent` needs patching. This is true when one of the `jsx` argument's\n     * const props has the name of an event.\n     *\n     * @returns {boolean}\n     */\n    function createNewElement(jsx, elementName, currentFile) {\n        const element = createElementWithNamespace(elementName);\n        const { constProps } = jsx;\n        let needsQDispatchEventPatch = false;\n        if (constProps) {\n            // Const props are, well, constant, they will never change!\n            // For this reason we can cheat and write them directly into the DOM.\n            // We never tell the vNode about them saving us time and memory.\n            for (const key in constProps) {\n                let value = constProps[key];\n                if (isJsxPropertyAnEventName(key)) {\n                    // So for event handlers we must add them to the vNode so that qwikloader can look them up\n                    // But we need to mark them so that they don't get pulled into the diff.\n                    const eventName = getEventNameFromJsxEvent(key);\n                    const scope = getEventNameScopeFromJsxEvent(key);\n                    if (eventName) {\n                        vnode_setProp(vNewNode, HANDLER_PREFIX + ':' + scope + ':' + eventName, value);\n                        registerQwikLoaderEvent(eventName);\n                    }\n                    if (scope) {\n                        // add an event attr with empty value for qwikloader element selector.\n                        // We don't need value here. For ssr this value is a QRL,\n                        // but for CSR value should be just empty\n                        const htmlEvent = jsxEventToHtmlAttribute(key);\n                        if (htmlEvent) {\n                            vnode_setAttr(journal, vNewNode, htmlEvent, '');\n                        }\n                    }\n                    needsQDispatchEventPatch = true;\n                    continue;\n                }\n                if (key === 'ref') {\n                    if (isSignal(value)) {\n                        value.value = element;\n                        continue;\n                    }\n                    else if (typeof value === 'function') {\n                        value(element);\n                        continue;\n                    }\n                    else if (value == null) {\n                        continue;\n                    }\n                    else {\n                        throw qError(32 /* QError.invalidRefValue */, [currentFile]);\n                    }\n                }\n                if (isSignal(value)) {\n                    const signalData = new SubscriptionData({\n                        $scopedStyleIdPrefix$: scopedStyleIdPrefix,\n                        $isConst$: true,\n                    });\n                    value = trackSignalAndAssignHost(value, vNewNode, key, container, signalData);\n                }\n                if (key === dangerouslySetInnerHTML) {\n                    element.innerHTML = value;\n                    element.setAttribute(QContainerAttr, \"html\" /* QContainerValue.HTML */);\n                    continue;\n                }\n                if (elementName === 'textarea' && key === 'value') {\n                    if (value && typeof value !== 'string') {\n                        if (isDev) {\n                            throw qError(40 /* QError.wrongTextareaValue */, [currentFile, value]);\n                        }\n                        continue;\n                    }\n                    element.value = escapeHTML(value || '');\n                    continue;\n                }\n                value = serializeAttribute(key, value, scopedStyleIdPrefix);\n                if (value != null) {\n                    element.setAttribute(key, String(value));\n                }\n            }\n        }\n        const key = jsx.key;\n        if (key) {\n            element.setAttribute(ELEMENT_KEY, key);\n            vnode_setProp(vNewNode, ELEMENT_KEY, key);\n        }\n        // append class attribute if styleScopedId exists and there is no class attribute\n        const classAttributeExists = hasClassAttr(jsx.varProps) || (jsx.constProps && hasClassAttr(jsx.constProps));\n        if (!classAttributeExists && scopedStyleIdPrefix) {\n            element.setAttribute('class', scopedStyleIdPrefix);\n        }\n        vnode_insertBefore(journal, vParent, vNewNode, vCurrent);\n        return needsQDispatchEventPatch;\n    }\n    function createElementWithNamespace(elementName) {\n        const domParentVNode = vnode_getDomParentVNode(vParent);\n        const { elementNamespace, elementNamespaceFlag } = getNewElementNamespaceData(domParentVNode, elementName);\n        const element = container.document.createElementNS(elementNamespace, elementName);\n        vNewNode = vnode_newElement(element, elementName);\n        vNewNode[0 /* VNodeProps.flags */] |= elementNamespaceFlag;\n        return element;\n    }\n    function expectElement(jsx, elementName) {\n        const isSameElementName = vCurrent && vnode_isElementVNode(vCurrent) && elementName === vnode_getElementName(vCurrent);\n        const jsxKey = jsx.key;\n        let needsQDispatchEventPatch = false;\n        const currentFile = getFileLocationFromJsx(jsx.dev);\n        if (!isSameElementName || jsxKey !== getKey(vCurrent)) {\n            // So we have a key and it does not match the current node.\n            // We need to do a forward search to find it.\n            // The complication is that once we start taking nodes out of order we can't use `vnode_getNextSibling`\n            vNewNode = retrieveChildWithKey(elementName, jsxKey);\n            if (vNewNode === null) {\n                // No existing node with key exists, just create a new one.\n                needsQDispatchEventPatch = createNewElement(jsx, elementName);\n            }\n            else {\n                // Existing keyed node\n                vnode_insertBefore(journal, vParent, vNewNode, vCurrent);\n                // We are here, so jsx is different from the vCurrent, so now we want to point to the moved node.\n                vCurrent = vNewNode;\n                // We need to clean up the vNewNode, because we don't want to skip advance to next sibling (see `advance` function).\n                vNewNode = null;\n            }\n        }\n        // reconcile attributes\n        const jsxAttrs = [];\n        const props = jsx.varProps;\n        for (const key in props) {\n            const value = props[key];\n            if (value != null) {\n                mapArray_set(jsxAttrs, key, value, 0);\n            }\n        }\n        if (jsxKey !== null) {\n            mapArray_set(jsxAttrs, ELEMENT_KEY, jsxKey, 0);\n        }\n        const vNode = (vNewNode || vCurrent);\n        const element = vNode[6 /* ElementVNodeProps.element */];\n        element.vNode = new WeakRef(vNode);\n        needsQDispatchEventPatch =\n            setBulkProps(vNode, jsxAttrs, currentFile) || needsQDispatchEventPatch;\n        if (needsQDispatchEventPatch) {\n            // Event handler needs to be patched onto the element.\n            if (!element.qDispatchEvent) {\n                element.qDispatchEvent = (event, scope) => {\n                    const eventName = event.type;\n                    const eventProp = ':' + scope.substring(1) + ':' + eventName;\n                    const qrls = [\n                        vnode_getProp(vNode, eventProp, null),\n                        vnode_getProp(vNode, HANDLER_PREFIX + eventProp, null),\n                    ];\n                    let returnValue = false;\n                    qrls.flat(2).forEach((qrl) => {\n                        if (qrl) {\n                            const value = container.$scheduler$(2 /* ChoreType.RUN_QRL */, vNode, qrl, [event, element]);\n                            returnValue = returnValue || value === true;\n                        }\n                    });\n                    return returnValue;\n                };\n            }\n        }\n    }\n    /** @returns True if `qDispatchEvent` needs patching */\n    function setBulkProps(vnode, srcAttrs, currentFile) {\n        vnode_ensureElementInflated(vnode);\n        const dstAttrs = vnode_getProps(vnode);\n        let srcIdx = 0;\n        const srcLength = srcAttrs.length;\n        let dstIdx = 0;\n        let dstLength = dstAttrs.length;\n        let srcKey = srcIdx < srcLength ? srcAttrs[srcIdx++] : null;\n        let dstKey = dstIdx < dstLength ? dstAttrs[dstIdx++] : null;\n        let patchEventDispatch = false;\n        const record = (key, value) => {\n            if (key.startsWith(':')) {\n                vnode_setProp(vnode, key, value);\n                return;\n            }\n            if (key === 'ref') {\n                const element = vnode_getNode(vnode);\n                if (isSignal(value)) {\n                    value.value = element;\n                    return;\n                }\n                else if (typeof value === 'function') {\n                    value(element);\n                    return;\n                }\n                // handling null value is not needed here, because we are filtering null values earlier\n                else {\n                    throw qError(32 /* QError.invalidRefValue */, [currentFile]);\n                }\n            }\n            if (isSignal(value)) {\n                const signalData = new SubscriptionData({\n                    $scopedStyleIdPrefix$: scopedStyleIdPrefix,\n                    $isConst$: false,\n                });\n                value = trackSignalAndAssignHost(value, vnode, key, container, signalData);\n            }\n            vnode_setAttr(journal, vnode, key, value !== null ? serializeAttribute(key, value, scopedStyleIdPrefix) : null);\n            if (value === null) {\n                // if we set `null` than attribute was removed and we need to shorten the dstLength\n                dstLength = dstAttrs.length;\n            }\n        };\n        const recordJsxEvent = (key, value) => {\n            const eventName = getEventNameFromJsxEvent(key);\n            const scope = getEventNameScopeFromJsxEvent(key);\n            if (eventName) {\n                record(':' + scope + ':' + eventName, value);\n                // register an event for qwik loader\n                registerQwikLoaderEvent(eventName);\n            }\n            if (scope) {\n                // add an event attr with empty value for qwikloader element selector.\n                // We don't need value here. For ssr this value is a QRL,\n                // but for CSR value should be just empty\n                const htmlEvent = jsxEventToHtmlAttribute(key);\n                if (htmlEvent) {\n                    record(htmlEvent, '');\n                }\n            }\n        };\n        while (srcKey !== null || dstKey !== null) {\n            if (dstKey?.startsWith(HANDLER_PREFIX) || dstKey?.startsWith(Q_PREFIX)) {\n                // These are a special keys which we use to mark the event handlers as immutable or\n                // element key we need to ignore them.\n                dstIdx++; // skip the destination value, we don't care about it.\n                dstKey = dstIdx < dstLength ? dstAttrs[dstIdx++] : null;\n            }\n            else if (srcKey == null) {\n                // Source has more keys, so we need to remove them from destination\n                if (dstKey && isHtmlAttributeAnEventName(dstKey)) {\n                    dstIdx++;\n                }\n                else {\n                    record(dstKey, null);\n                    dstIdx--;\n                }\n                dstKey = dstIdx < dstLength ? dstAttrs[dstIdx++] : null;\n            }\n            else if (dstKey == null) {\n                // Destination has more keys, so we need to insert them from source.\n                const isEvent = isJsxPropertyAnEventName(srcKey);\n                if (isEvent) {\n                    // Special handling for events\n                    patchEventDispatch = true;\n                    recordJsxEvent(srcKey, srcAttrs[srcIdx]);\n                }\n                else {\n                    record(srcKey, srcAttrs[srcIdx]);\n                }\n                srcIdx++;\n                srcKey = srcIdx < srcLength ? srcAttrs[srcIdx++] : null;\n                // we need to increment dstIdx too, because we added destination key and value to the VNode\n                // and dstAttrs is a reference to the VNode\n                dstIdx++;\n                dstKey = dstIdx < dstLength ? dstAttrs[dstIdx++] : null;\n            }\n            else if (srcKey == dstKey) {\n                const srcValue = srcAttrs[srcIdx++];\n                const dstValue = dstAttrs[dstIdx++];\n                if (srcValue !== dstValue) {\n                    record(dstKey, srcValue);\n                }\n                srcKey = srcIdx < srcLength ? srcAttrs[srcIdx++] : null;\n                dstKey = dstIdx < dstLength ? dstAttrs[dstIdx++] : null;\n            }\n            else if (srcKey < dstKey) {\n                // Destination is missing the key, so we need to insert it.\n                if (isJsxPropertyAnEventName(srcKey)) {\n                    // Special handling for events\n                    patchEventDispatch = true;\n                    recordJsxEvent(srcKey, srcAttrs[srcIdx]);\n                }\n                else {\n                    record(srcKey, srcAttrs[srcIdx]);\n                }\n                srcIdx++;\n                // advance srcValue\n                srcKey = srcIdx < srcLength ? srcAttrs[srcIdx++] : null;\n                // we need to increment dstIdx too, because we added destination key and value to the VNode\n                // and dstAttrs is a reference to the VNode\n                dstIdx++;\n                dstLength = dstAttrs.length;\n                dstKey = dstIdx < dstLength ? dstAttrs[dstIdx++] : null;\n            }\n            else {\n                // Source is missing the key, so we need to remove it from destination.\n                if (isHtmlAttributeAnEventName(dstKey)) {\n                    patchEventDispatch = true;\n                    dstIdx++;\n                }\n                else {\n                    record(dstKey, null);\n                    dstIdx--;\n                }\n                dstKey = dstIdx < dstLength ? dstAttrs[dstIdx++] : null;\n            }\n        }\n        return patchEventDispatch;\n    }\n    function registerQwikLoaderEvent(eventName) {\n        const window = container.document.defaultView;\n        if (window) {\n            (window.qwikevents ||= []).push(eventName);\n        }\n    }\n    /**\n     * This function is used to retrieve the child with the given key. If the child is not found, it\n     * will return null.\n     *\n     * After finding the first child with the given key we will create a map of all the keyed siblings\n     * and an array of non-keyed siblings. This is done to optimize the search for the next child with\n     * the specified key.\n     *\n     * @param nodeName - The name of the node.\n     * @param key - The key of the node.\n     * @returns The child with the given key or null if not found.\n     */\n    function retrieveChildWithKey(nodeName, key) {\n        let vNodeWithKey = null;\n        if (vSiblings === null) {\n            // it is not materialized; so materialize it.\n            vSiblings = new Map();\n            vSiblingsArray = [];\n            let vNode = vCurrent;\n            while (vNode) {\n                const name = vnode_isElementVNode(vNode) ? vnode_getElementName(vNode) : null;\n                const vKey = getKey(vNode) || getComponentHash(vNode, container.$getObjectById$);\n                if (vNodeWithKey === null && vKey == key && name == nodeName) {\n                    vNodeWithKey = vNode;\n                }\n                else {\n                    if (vKey === null) {\n                        vSiblingsArray.push(name, vNode);\n                    }\n                    else {\n                        // we only add the elements which we did not find yet.\n                        vSiblings.set(name + ':' + vKey, vNode);\n                    }\n                }\n                vNode = vnode_getNextSibling(vNode);\n            }\n        }\n        else {\n            if (key === null) {\n                for (let i = 0; i < vSiblingsArray.length; i += 2) {\n                    if (vSiblingsArray[i] === nodeName) {\n                        vNodeWithKey = vSiblingsArray[i + 1];\n                        vSiblingsArray.splice(i, 2);\n                        break;\n                    }\n                }\n            }\n            else {\n                const vSibling = vSiblings.get(nodeName + ':' + key);\n                if (vSibling) {\n                    vNodeWithKey = vSibling;\n                    vSiblings.delete(nodeName + ':' + key);\n                }\n            }\n        }\n        return vNodeWithKey;\n    }\n    function expectVirtual(type, jsxKey) {\n        if (vCurrent && vnode_isVirtualVNode(vCurrent) && getKey(vCurrent) === jsxKey && !!jsxKey) {\n            // All is good.\n            return;\n        }\n        else if (jsxKey !== null) {\n            // We have a key find it\n            vNewNode = retrieveChildWithKey(null, jsxKey);\n            if (vNewNode != null) {\n                // We found it, move it up.\n                vnode_insertBefore(journal, vParent, vNewNode, vCurrent && getInsertBefore());\n                return;\n            }\n        }\n        // Did not find it, insert a new one.\n        vnode_insertBefore(journal, vParent, (vNewNode = vnode_newVirtual()), vCurrent && getInsertBefore());\n        vnode_setProp(vNewNode, ELEMENT_KEY, jsxKey);\n        isDev && vnode_setProp((vNewNode || vCurrent), DEBUG_TYPE, type);\n    }\n    function expectComponent(component) {\n        const componentMeta = component[SERIALIZABLE_STATE];\n        let host = (vNewNode || vCurrent);\n        const jsxNode = jsxValue;\n        if (componentMeta) {\n            const jsxProps = jsxNode.props;\n            // QComponent\n            let shouldRender = false;\n            const [componentQRL] = componentMeta;\n            const componentHash = componentQRL.$hash$;\n            const vNodeComponentHash = getComponentHash(host, container.$getObjectById$);\n            const lookupKey = jsxNode.key || componentHash;\n            const vNodeLookupKey = getKey(host) || vNodeComponentHash;\n            const lookupKeysAreEqual = lookupKey === vNodeLookupKey;\n            const hashesAreEqual = componentHash === vNodeComponentHash;\n            if (!lookupKeysAreEqual) {\n                // See if we already have this component later on.\n                vNewNode = retrieveChildWithKey(null, lookupKey);\n                if (vNewNode) {\n                    // We found the component, move it up.\n                    vnode_insertBefore(journal, vParent, vNewNode, vCurrent);\n                }\n                else {\n                    // We did not find the component, create it.\n                    insertNewComponent(host, componentQRL, jsxProps);\n                }\n                host = vNewNode;\n                shouldRender = true;\n            }\n            else if (!hashesAreEqual || !jsxNode.key) {\n                insertNewComponent(host, componentQRL, jsxProps);\n                host = vNewNode;\n                shouldRender = true;\n            }\n            if (host) {\n                const vNodeProps = vnode_getProp(host, ELEMENT_PROPS, container.$getObjectById$);\n                shouldRender = shouldRender || propsDiffer(jsxProps, vNodeProps);\n                if (shouldRender) {\n                    /**\n                     * Mark host as not deleted. The host could have been marked as deleted if it there was a\n                     * cleanup run. Now we found it and want to reuse it, so we need to mark it as not\n                     * deleted.\n                     */\n                    host[0 /* VNodeProps.flags */] &= ~32 /* VNodeFlags.Deleted */;\n                    container.$scheduler$(6 /* ChoreType.COMPONENT */, host, componentQRL, jsxProps);\n                }\n            }\n            descendContentToProject(jsxNode.children, host);\n        }\n        else {\n            const lookupKey = jsxNode.key;\n            const vNodeLookupKey = getKey(host);\n            const lookupKeysAreEqual = lookupKey === vNodeLookupKey;\n            const vNodeComponentHash = getComponentHash(host, container.$getObjectById$);\n            if (!lookupKeysAreEqual) {\n                // See if we already have this inline component later on.\n                vNewNode = retrieveChildWithKey(null, lookupKey);\n                if (vNewNode) {\n                    // We found the inline component, move it up.\n                    vnode_insertBefore(journal, vParent, vNewNode, vCurrent);\n                }\n                else {\n                    // We did not find the inline component, create it.\n                    insertNewInlineComponent();\n                }\n                host = vNewNode;\n            }\n            // inline components don't have component hash - q:renderFn prop, so it should be null\n            else if (vNodeComponentHash != null) {\n                insertNewInlineComponent();\n                host = vNewNode;\n            }\n            if (host) {\n                let componentHost = host;\n                // Find the closest component host which has `OnRender` prop. This is need for subscriptions context.\n                while (componentHost &&\n                    (vnode_isVirtualVNode(componentHost)\n                        ? vnode_getProp(componentHost, OnRenderProp, null) === null\n                        : true)) {\n                    componentHost = vnode_getParent(componentHost);\n                }\n                const jsxOutput = executeComponent(container, host, (componentHost || container.rootVNode), component, jsxNode.props);\n                asyncQueue.push(jsxOutput, host);\n            }\n        }\n    }\n    function insertNewComponent(host, componentQRL, jsxProps) {\n        if (host) {\n            clearAllEffects(container, host);\n        }\n        vnode_insertBefore(journal, vParent, (vNewNode = vnode_newVirtual()), vCurrent && getInsertBefore());\n        const jsxNode = jsxValue;\n        isDev && vnode_setProp(vNewNode, DEBUG_TYPE, \"C\" /* VirtualType.Component */);\n        container.setHostProp(vNewNode, OnRenderProp, componentQRL);\n        container.setHostProp(vNewNode, ELEMENT_PROPS, jsxProps);\n        container.setHostProp(vNewNode, ELEMENT_KEY, jsxNode.key);\n    }\n    function insertNewInlineComponent() {\n        vnode_insertBefore(journal, vParent, (vNewNode = vnode_newVirtual()), vCurrent && getInsertBefore());\n        const jsxNode = jsxValue;\n        isDev && vnode_setProp(vNewNode, DEBUG_TYPE, \"I\" /* VirtualType.InlineComponent */);\n        vnode_setProp(vNewNode, ELEMENT_PROPS, jsxNode.props);\n        if (jsxNode.key) {\n            vnode_setProp(vNewNode, ELEMENT_KEY, jsxNode.key);\n        }\n    }\n    function expectText(text) {\n        if (vCurrent !== null) {\n            const type = vnode_getType(vCurrent);\n            if (type === 3 /* Text */) {\n                if (text !== vnode_getText(vCurrent)) {\n                    vnode_setText(journal, vCurrent, text);\n                    return;\n                }\n                return;\n            }\n        }\n        vnode_insertBefore(journal, vParent, (vNewNode = vnode_newText(container.document.createTextNode(text), text)), vCurrent);\n    }\n};\n/**\n * Retrieve the key from the VNode.\n *\n * @param vNode - VNode to retrieve the key from\n * @returns Key\n */\nfunction getKey(vNode) {\n    if (vNode == null) {\n        return null;\n    }\n    return vnode_getProp(vNode, ELEMENT_KEY, null);\n}\n/**\n * Retrieve the component hash from the VNode.\n *\n * @param vNode - VNode to retrieve the key from\n * @param getObject - Function to retrieve the object by id for QComponent QRL\n * @returns Hash\n */\nfunction getComponentHash(vNode, getObject) {\n    if (vNode == null) {\n        return null;\n    }\n    const qrl = vnode_getProp(vNode, OnRenderProp, getObject);\n    return qrl ? qrl.$hash$ : null;\n}\n/**\n * Marker class for JSX projection.\n *\n * Assume you have component like so\n *\n * ```\n * <SomeComponent>\n *   some-text\n *   <span q:slot=\"name\">some more text</span>\n *   more-text\n * </SomeComponent>\n * ```\n *\n * Before the `<SomeCompetent/>` is processed its children are transformed into:\n *\n * ```\n *   <Projection q:slot=\"\">\n *     some-text\n *     more-text\n *   </Projection>\n *   <Projection q:slot=\"name\">\n *     <span q:slot=\"name\">some more text</span>\n *   </Projection>\n * ```\n */\nfunction Projection() { }\nfunction propsDiffer(src, dst) {\n    if (!src || !dst) {\n        return true;\n    }\n    let srcKeys = removePropsKeys(Object.keys(src), ['children', QBackRefs]);\n    let dstKeys = removePropsKeys(Object.keys(dst), ['children', QBackRefs]);\n    if (srcKeys.length !== dstKeys.length) {\n        return true;\n    }\n    srcKeys = srcKeys.sort();\n    dstKeys = dstKeys.sort();\n    for (let idx = 0; idx < srcKeys.length; idx++) {\n        const srcKey = srcKeys[idx];\n        const dstKey = dstKeys[idx];\n        if (srcKey !== dstKey || src[srcKey] !== dst[dstKey]) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction removePropsKeys(keys, propKeys) {\n    for (let i = propKeys.length - 1; i >= 0; i--) {\n        const propKey = propKeys[i];\n        const propIdx = keys.indexOf(propKey);\n        if (propIdx !== -1) {\n            keys.splice(propIdx, 1);\n        }\n    }\n    return keys;\n}\n/**\n * If vnode is removed, it is necessary to release all subscriptions associated with it.\n *\n * This function will traverse the vnode tree in depth-first order and release all subscriptions.\n *\n * The function takes into account:\n *\n * - Projection nodes by not recursing into them.\n * - Component nodes by recursing into the component content nodes (which may be projected).\n */\nexport function cleanup(container, vNode) {\n    let vCursor = vNode;\n    // Depth first traversal\n    if (vnode_isTextVNode(vNode)) {\n        markVNodeAsDeleted(vCursor);\n        // Text nodes don't have subscriptions or children;\n        return;\n    }\n    let vParent = null;\n    do {\n        const type = vCursor[0 /* VNodeProps.flags */];\n        if (type & 3 /* VNodeFlags.ELEMENT_OR_VIRTUAL_MASK */) {\n            clearAllEffects(container, vCursor);\n            markVNodeAsDeleted(vCursor);\n            // Only elements and virtual nodes need to be traversed for children\n            if (type & 2 /* VNodeFlags.Virtual */) {\n                const seq = container.getHostProp(vCursor, ELEMENT_SEQ);\n                if (seq) {\n                    for (let i = 0; i < seq.length; i++) {\n                        const obj = seq[i];\n                        if (isTask(obj)) {\n                            const task = obj;\n                            clearAllEffects(container, task);\n                            if (task.$flags$ & 1 /* TaskFlags.VISIBLE_TASK */) {\n                                container.$scheduler$(48 /* ChoreType.CLEANUP_VISIBLE */, task);\n                            }\n                            else {\n                                cleanupTask(task);\n                            }\n                        }\n                    }\n                }\n            }\n            const isComponent = type & 2 /* VNodeFlags.Virtual */ &&\n                vnode_getProp(vCursor, OnRenderProp, null) !== null;\n            if (isComponent) {\n                // SPECIAL CASE: If we are a component, we need to descend into the projected content and release the content.\n                const attrs = vnode_getProps(vCursor);\n                for (let i = 0; i < attrs.length; i = i + 2) {\n                    const key = attrs[i];\n                    if (isSlotProp(key)) {\n                        const value = attrs[i + 1];\n                        if (value) {\n                            attrs[i + 1] = null; // prevent infinite loop\n                            const projection = typeof value === 'string'\n                                ? vnode_locate(container.rootVNode, value)\n                                : value;\n                            let projectionChild = vnode_getFirstChild(projection);\n                            while (projectionChild) {\n                                cleanup(container, projectionChild);\n                                projectionChild = vnode_getNextSibling(projectionChild);\n                            }\n                            cleanupStaleUnclaimedProjection(container.$journal$, projection);\n                        }\n                    }\n                }\n            }\n            const isProjection = vnode_isProjection(vCursor);\n            // Descend into children\n            if (!isProjection) {\n                // Only if it is not a projection\n                const vFirstChild = vnode_getFirstChild(vCursor);\n                if (vFirstChild) {\n                    vCursor = vFirstChild;\n                    continue;\n                }\n            }\n            else if (vCursor === vNode) {\n                /**\n                 * If it is a projection and we are at the root, then we should only walk the children to\n                 * materialize the projection content. This is because we could have references in the vnode\n                 * refs map which need to be materialized before cleanup.\n                 */\n                const vFirstChild = vnode_getFirstChild(vCursor);\n                if (vFirstChild) {\n                    vnode_walkVNode(vFirstChild);\n                    return;\n                }\n            }\n        }\n        else if (type & 4 /* VNodeFlags.Text */) {\n            markVNodeAsDeleted(vCursor);\n        }\n        // Out of children\n        if (vCursor === vNode) {\n            // we are where we started, this means that vNode has no children, so we are done.\n            return;\n        }\n        // Out of children, go to next sibling\n        const vNextSibling = vnode_getNextSibling(vCursor);\n        if (vNextSibling) {\n            vCursor = vNextSibling;\n            continue;\n        }\n        // Out of siblings, go to parent\n        vParent = vnode_getParent(vCursor);\n        while (vParent) {\n            if (vParent === vNode) {\n                // We are back where we started, we are done.\n                return;\n            }\n            const vNextParentSibling = vnode_getNextSibling(vParent);\n            if (vNextParentSibling) {\n                vCursor = vNextParentSibling;\n                break;\n            }\n            vParent = vnode_getParent(vParent);\n        }\n        if (vParent == null) {\n            // We are done.\n            return;\n        }\n    } while (true);\n}\nfunction cleanupStaleUnclaimedProjection(journal, projection) {\n    // we are removing a node where the projection would go after slot render.\n    // This is not needed, so we need to cleanup still unclaimed projection\n    const projectionParent = vnode_getParent(projection);\n    if (projectionParent) {\n        const projectionParentType = projectionParent[0 /* VNodeProps.flags */];\n        if (projectionParentType & 1 /* VNodeFlags.Element */ &&\n            vnode_getElementName(projectionParent) === QTemplate) {\n            // if parent is the q:template element then projection is still unclaimed - remove it\n            vnode_remove(journal, projectionParent, projection, true);\n        }\n    }\n}\nfunction markVNodeAsDeleted(vCursor) {\n    /**\n     * Marks vCursor as deleted. We need to do this to prevent chores from running after the vnode is\n     * removed. (for example signal subscriptions)\n     */\n    vCursor[0 /* VNodeProps.flags */] |= 32 /* VNodeFlags.Deleted */;\n}\n/**\n * This marks the property as immutable. It is needed for the QRLs so that QwikLoader can get a hold\n * of them. This character must be `:` so that the `vnode_getAttr` can ignore them.\n */\nexport const HANDLER_PREFIX = ':';\nlet count = 0;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm5vZGUtZGlmZi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9jbGllbnQvdm5vZGUtZGlmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFtQixNQUFNLDRCQUE0QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR2hGLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLHVCQUF1QixFQUN2QixTQUFTLEdBRVYsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFhLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsV0FBVyxFQUNYLFlBQVksRUFDWixjQUFjLEVBQ2QsWUFBWSxFQUNaLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxRQUFRLEVBQ1IsdUJBQXVCLEdBQ3hCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQix3QkFBd0IsRUFDeEIsdUJBQXVCLEdBQ3hCLE1BQU0sNkJBQTZC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QixDQUFDO0FBQ2xELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHsgU0VSSUFMSVpBQkxFX1NUQVRFLCB0eXBlIE9uUmVuZGVyRm4gfSBmcm9tICcuLi9zaGFyZWQvY29tcG9uZW50LnB1YmxpYyc7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkLCBhc3NlcnRGYWxzZSwgYXNzZXJ0VHJ1ZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHR5cGUgeyBRUkxJbnRlcm5hbCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwucHVibGljJztcbmltcG9ydCB7XG4gIEZyYWdtZW50LFxuICBKU1hOb2RlSW1wbCxcbiAgZGlyZWN0R2V0UHJvcHNQcm94eVByb3AsXG4gIGlzSlNYTm9kZSxcbiAgdHlwZSBQcm9wcyxcbn0gZnJvbSAnLi4vc2hhcmVkL2pzeC9qc3gtcnVudGltZSc7XG5pbXBvcnQgeyBTbG90IH0gZnJvbSAnLi4vc2hhcmVkL2pzeC9zbG90LnB1YmxpYyc7XG5pbXBvcnQgdHlwZSB7IEpTWE5vZGVJbnRlcm5hbCwgSlNYT3V0cHV0IH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IEpTWENoaWxkcmVuIH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtcXdpay1hdHRyaWJ1dGVzJztcbmltcG9ydCB7IFNTUkNvbW1lbnQsIFNTUlJhdywgU2tpcFJlbmRlciB9IGZyb20gJy4uL3NoYXJlZC9qc3gvdXRpbHMucHVibGljJztcbmltcG9ydCB7IHRyYWNrU2lnbmFsQW5kQXNzaWduSG9zdCB9IGZyb20gJy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyBUYXNrRmxhZ3MsIGNsZWFudXBUYXNrLCBpc1Rhc2sgfSBmcm9tICcuLi91c2UvdXNlLXRhc2snO1xuaW1wb3J0IHsgRU1QVFlfT0JKIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2ZseXdlaWdodCc7XG5pbXBvcnQge1xuICBFTEVNRU5UX0tFWSxcbiAgRUxFTUVOVF9QUk9QUyxcbiAgRUxFTUVOVF9TRVEsXG4gIE9uUmVuZGVyUHJvcCxcbiAgUUNvbnRhaW5lckF0dHIsXG4gIFFEZWZhdWx0U2xvdCxcbiAgUVNsb3QsXG4gIFFTbG90UGFyZW50LFxuICBRQmFja1JlZnMsXG4gIFFUZW1wbGF0ZSxcbiAgUV9QUkVGSVgsXG4gIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLFxufSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgdHlwZSBWYWx1ZU9yUHJvbWlzZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy90eXBlcyc7XG5pbXBvcnQge1xuICBnZXRFdmVudE5hbWVGcm9tSnN4RXZlbnQsXG4gIGdldEV2ZW50TmFtZVNjb3BlRnJvbUpzeEV2ZW50LFxuICBpc0h0bWxBdHRyaWJ1dGVBbkV2ZW50TmFtZSxcbiAgaXNKc3hQcm9wZXJ0eUFuRXZlbnROYW1lLFxuICBqc3hFdmVudFRvSHRtbEF0dHJpYnV0ZSxcbn0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2V2ZW50LW5hbWVzJztcbmltcG9ydCB7IENob3JlVHlwZSB9IGZyb20gJy4uL3NoYXJlZC91dGlsLWNob3JlLXR5cGUnO1xuaW1wb3J0IHsgaGFzQ2xhc3NBdHRyIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3Njb3BlZC1zdHlsZXMnO1xuaW1wb3J0IHR5cGUgeyBIb3N0RWxlbWVudCwgUUVsZW1lbnQsIFF3aWtMb2FkZXJFdmVudFNjb3BlLCBxV2luZG93IH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IERFQlVHX1RZUEUsIFFDb250YWluZXJWYWx1ZSwgVmlydHVhbFR5cGUgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBEb21Db250YWluZXIgfSBmcm9tICcuL2RvbS1jb250YWluZXInO1xuaW1wb3J0IHtcbiAgRWxlbWVudFZOb2RlUHJvcHMsXG4gIFZOb2RlRmxhZ3MsXG4gIFZOb2RlUHJvcHMsXG4gIHR5cGUgQ2xpZW50QXR0cktleSxcbiAgdHlwZSBDbGllbnRBdHRycyxcbiAgdHlwZSBDbGllbnRDb250YWluZXIsXG4gIHR5cGUgRWxlbWVudFZOb2RlLFxuICB0eXBlIFRleHRWTm9kZSxcbiAgdHlwZSBWTm9kZSxcbiAgdHlwZSBWaXJ0dWFsVk5vZGUsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgdm5vZGVfZW5zdXJlRWxlbWVudEluZmxhdGVkLFxuICB2bm9kZV9nZXREb21QYXJlbnRWTm9kZSxcbiAgdm5vZGVfZ2V0RWxlbWVudE5hbWUsXG4gIHZub2RlX2dldEZpcnN0Q2hpbGQsXG4gIHZub2RlX2dldE5leHRTaWJsaW5nLFxuICB2bm9kZV9nZXROb2RlLFxuICB2bm9kZV9nZXRQYXJlbnQsXG4gIHZub2RlX2dldFByb2plY3Rpb25QYXJlbnRDb21wb25lbnQsXG4gIHZub2RlX2dldFByb3AsXG4gIHZub2RlX2dldFByb3BzLFxuICB2bm9kZV9nZXRUZXh0LFxuICB2bm9kZV9nZXRUeXBlLFxuICB2bm9kZV9pbnNlcnRCZWZvcmUsXG4gIHZub2RlX2lzRWxlbWVudFZOb2RlLFxuICB2bm9kZV9pc1Byb2plY3Rpb24sXG4gIHZub2RlX2lzVGV4dFZOb2RlLFxuICB2bm9kZV9pc1ZOb2RlLFxuICB2bm9kZV9pc1ZpcnR1YWxWTm9kZSxcbiAgdm5vZGVfbG9jYXRlLFxuICB2bm9kZV9uZXdFbGVtZW50LFxuICB2bm9kZV9uZXdUZXh0LFxuICB2bm9kZV9uZXdWaXJ0dWFsLFxuICB2bm9kZV9yZW1vdmUsXG4gIHZub2RlX3NldEF0dHIsXG4gIHZub2RlX3NldFByb3AsXG4gIHZub2RlX3NldFRleHQsXG4gIHZub2RlX3RydW5jYXRlLFxuICB2bm9kZV93YWxrVk5vZGUsXG4gIHR5cGUgVk5vZGVKb3VybmFsLFxufSBmcm9tICcuL3Zub2RlJztcbmltcG9ydCB7IG1hcEFwcF9maW5kSW5keCB9IGZyb20gJy4vdXRpbC1tYXBBcnJheSc7XG5pbXBvcnQgeyBtYXBBcnJheV9zZXQgfSBmcm9tICcuL3V0aWwtbWFwQXJyYXknO1xuaW1wb3J0IHsgZ2V0TmV3RWxlbWVudE5hbWVzcGFjZURhdGEgfSBmcm9tICcuL3Zub2RlLW5hbWVzcGFjZSc7XG5pbXBvcnQgeyBXcmFwcGVkU2lnbmFsLCBFZmZlY3RQcm9wZXJ0eSwgaXNTaWduYWwsIFN1YnNjcmlwdGlvbkRhdGEgfSBmcm9tICcuLi9zaWduYWwvc2lnbmFsJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSAnLi4vc2lnbmFsL3NpZ25hbC5wdWJsaWMnO1xuaW1wb3J0IHsgZXhlY3V0ZUNvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC9jb21wb25lbnQtZXhlY3V0aW9uJztcbmltcG9ydCB7IGlzU2xvdFByb3AgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcHJvcCc7XG5pbXBvcnQgeyBlc2NhcGVIVE1MIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2NoYXJhY3Rlci1lc2NhcGluZyc7XG5pbXBvcnQgeyBjbGVhckFsbEVmZmVjdHMgfSBmcm9tICcuLi9zaWduYWwvc2lnbmFsLWNsZWFudXAnO1xuaW1wb3J0IHsgc2VyaWFsaXplQXR0cmlidXRlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3N0eWxlcyc7XG5pbXBvcnQgeyBRRXJyb3IsIHFFcnJvciB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci9lcnJvcic7XG5pbXBvcnQgeyBnZXRGaWxlTG9jYXRpb25Gcm9tSnN4IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2pzeC1maWxlbmFtZSc7XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9kaWZmID0gKFxuICBjb250YWluZXI6IENsaWVudENvbnRhaW5lcixcbiAganN4Tm9kZTogSlNYT3V0cHV0LFxuICB2U3RhcnROb2RlOiBWTm9kZSxcbiAgc2NvcGVkU3R5bGVJZFByZWZpeDogc3RyaW5nIHwgbnVsbFxuKSA9PiB7XG4gIGxldCBqb3VybmFsID0gKGNvbnRhaW5lciBhcyBEb21Db250YWluZXIpLiRqb3VybmFsJDtcblxuICAvKipcbiAgICogU3RhY2sgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsLlxuICAgKlxuICAgKiBXZSBwdXNoIGN1cnJlbnQgc3RhdGUgaW50byB0aGUgc3RhY2sgYmVmb3JlIGRlc2NlbmRpbmcgaW50byB0aGUgY2hpbGQsIGFuZCB3ZSBwb3AgdGhlIHN0YXRlXG4gICAqIHdoZW4gd2UgYXJlIGRvbmUgd2l0aCB0aGUgY2hpbGQuXG4gICAqL1xuICBjb25zdCBzdGFjazogYW55W10gPSBbXTtcblxuICBjb25zdCBhc3luY1F1ZXVlOiBBcnJheTxWTm9kZSB8IFZhbHVlT3JQcm9taXNlPEpTWE91dHB1dD4gfCBQcm9taXNlPEpTWE91dHB1dCB8IEpTWENoaWxkcmVuPj4gPVxuICAgIFtdO1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vLy8gVHJhdmVyc2Ugc3RhdGUgdmFyaWFibGVzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIGxldCB2UGFyZW50OiBWTm9kZSA9IG51bGwhO1xuXG4gIC8vLyBDdXJyZW50IG5vZGUgd2UgY29tcGFyZSBhZ2FpbnN0LiAoVGhpbmsgb2YgaXQgYXMgYSBjdXJzb3IuKVxuICAvLy8gKE5vZGUgY2FuIGJlIG51bGwsIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LilcbiAgbGV0IHZDdXJyZW50OiBWTm9kZSB8IG51bGwgPSBudWxsO1xuXG4gIC8vLyBXaGVuIHdlIGluc2VydCBuZXcgbm9kZSB3ZSBzdGFydCBpdCBoZXJlIHNvIHRoYXQgd2UgY2FuIGRlc2NlbmQgaW50byBpdC5cbiAgLy8vIE5PVEU6IGl0IGNhbid0IGJlIHN0b3JlZCBpbiBgdkN1cnJlbnRgIGJlY2F1c2UgYHZOZXdOb2RlYCBpcyBpbiBqb3VybmFsXG4gIC8vLyBhbmQgaXMgbm90IGNvbm5lY3RlZCB0byB0aGUgdHJlZS5cbiAgbGV0IHZOZXdOb2RlOiBWTm9kZSB8IG51bGwgPSBudWxsO1xuXG4gIC8vLyBXaGVuIGVsZW1lbnRzIGhhdmUga2V5cyB0aGV5IGNhbiBiZSBjb25zdW1lZCBvdXQgb2Ygb3JkZXIgYW5kIHRoZXJlZm9yZSB3ZSBjYW4ndCB1c2UgbmV4dFNpYmxpbmcuXG4gIC8vLyBJbiBzdWNoIGEgY2FzZSB0aGlzIGFycmF5IHdpbGwgY29udGFpbiB0aGUgZWxlbWVudHMgYWZ0ZXIgdGhlIGN1cnJlbnQgbG9jYXRpb24uXG4gIC8vLyBUaGUgYXJyYXkgZXZlbiBpbmRpY2VzIHdpbGwgY29udGFpbnMga2V5cyBhbmQgb2RkIGluZGljZXMgdGhlIHZOb2RlLlxuICBsZXQgdlNpYmxpbmdzOiBNYXA8c3RyaW5nLCBWTm9kZT4gfCBudWxsID0gbnVsbDtcbiAgbGV0IHZTaWJsaW5nc0FycmF5OiBBcnJheTxzdHJpbmcgfCBWTm9kZSB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8vIEN1cnJlbnQgc2V0IG9mIEpTWCBjaGlsZHJlbi5cbiAgbGV0IGpzeENoaWxkcmVuOiBKU1hDaGlsZHJlbltdID0gbnVsbCE7XG4gIC8vIEN1cnJlbnQgSlNYIGNoaWxkLlxuICBsZXQganN4VmFsdWU6IEpTWENoaWxkcmVuID0gbnVsbDtcbiAgbGV0IGpzeElkeCA9IDA7XG4gIGxldCBqc3hDb3VudCA9IDA7XG5cbiAgLy8gV2hlbiB3ZSBkZXNjZW5kIGludG8gY2hpbGRyZW4sIHdlIG5lZWQgdG8gc2tpcCBhZHZhbmNlKCkgYmVjYXVzZSB3ZSBqdXN0IGRlc2NlbmRlZC5cbiAgbGV0IHNob3VsZEFkdmFuY2UgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBXaGVuIHdlIGFyZSByZW5kZXJpbmcgaW5zaWRlIGEgcHJvamVjdGlvbiB3ZSBkb24ndCB3YW50IHRvIHByb2Nlc3MgY2hpbGQgY29tcG9uZW50cy4gQ2hpbGRcbiAgICogY29tcG9uZW50cyB3aWxsIGJlIHByb2Nlc3NlZCBvbmx5IGlmIHRoZSBwcm9qZWN0aW9uIGlzIHJlLXByb2plY3RlZCB3aXRoIGEgYDxTbG90PmAuXG4gICAqXG4gICAqIEV4YW1wbGU6IDxQYXJlbnQ+IDxkaXY+IDxDaGlsZC8+IDwvZGl2PiA8L1BhcmVudD5cbiAgICpcbiAgICogSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBgQ2hpbGRgIGNvbXBvbmVudCB3aWxsIG5vdCBiZSBwcm9jZXNzZWQgYmVjYXVzZSBpdCBpcyBpbnNpZGUgYVxuICAgKiBwcm9qZWN0aW9uLiBPbmx5IGlmIHRoZSBgPFBhcmVudD5gIHByb2plY3RzIGl0cyBjb250ZW50IHdpdGggYDxTbG90PmAgd2lsbCB0aGUgYENoaWxkYFxuICAgKiBjb21wb25lbnQgYmUgcHJvY2Vzc2VkLlxuICAgKi9cbiAgLy8gbGV0IGluQ29udGVudFByb2plY3Rpb24gPSBmYWxzZTtcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBkaWZmKGpzeE5vZGUsIHZTdGFydE5vZGUpO1xuICByZXR1cm4gZHJhaW5Bc3luY1F1ZXVlKCk7XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBmdW5jdGlvbiBkaWZmKGpzeE5vZGU6IEpTWE91dHB1dCwgdlN0YXJ0Tm9kZTogVk5vZGUpIHtcbiAgICBhc3NlcnRGYWxzZSh2bm9kZV9pc1ZOb2RlKGpzeE5vZGUpLCAnSlNYTm9kZSBzaG91bGQgbm90IGJlIGEgVk5vZGUnKTtcbiAgICBhc3NlcnRUcnVlKHZub2RlX2lzVk5vZGUodlN0YXJ0Tm9kZSksICd2U3RhcnROb2RlIHNob3VsZCBiZSBhIFZOb2RlJyk7XG4gICAgdlBhcmVudCA9IHZTdGFydE5vZGU7XG4gICAgdk5ld05vZGUgPSBudWxsO1xuICAgIHZDdXJyZW50ID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZCh2U3RhcnROb2RlKTtcbiAgICBzdGFja1B1c2goanN4Tm9kZSwgdHJ1ZSk7XG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgd2hpbGUgKGpzeElkeCA8IGpzeENvdW50KSB7XG4gICAgICAgIGFzc2VydEZhbHNlKHZQYXJlbnQgPT09IHZDdXJyZW50LCBcIlBhcmVudCBhbmQgY3VycmVudCBjYW4ndCBiZSB0aGUgc2FtZVwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBqc3hWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBleHBlY3RUZXh0KGpzeFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YganN4VmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgZXhwZWN0VGV4dChTdHJpbmcoanN4VmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmIChqc3hWYWx1ZSAmJiB0eXBlb2YganN4VmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanN4VmFsdWUpKSB7XG4gICAgICAgICAgICBkZXNjZW5kKGpzeFZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1NpZ25hbChqc3hWYWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2Q3VycmVudCkge1xuICAgICAgICAgICAgICBjbGVhckFsbEVmZmVjdHMoY29udGFpbmVyLCB2Q3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHBlY3RWaXJ0dWFsKFZpcnR1YWxUeXBlLldyYXBwZWRTaWduYWwsIG51bGwpO1xuICAgICAgICAgICAgZGVzY2VuZChcbiAgICAgICAgICAgICAgdHJhY2tTaWduYWxBbmRBc3NpZ25Ib3N0KFxuICAgICAgICAgICAgICAgIGpzeFZhbHVlIGFzIFNpZ25hbCxcbiAgICAgICAgICAgICAgICAodk5ld05vZGUgfHwgdkN1cnJlbnQpISxcbiAgICAgICAgICAgICAgICBFZmZlY3RQcm9wZXJ0eS5WTk9ERSxcbiAgICAgICAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzUHJvbWlzZShqc3hWYWx1ZSkpIHtcbiAgICAgICAgICAgIGV4cGVjdFZpcnR1YWwoVmlydHVhbFR5cGUuQXdhaXRlZCwgbnVsbCk7XG4gICAgICAgICAgICBhc3luY1F1ZXVlLnB1c2goanN4VmFsdWUsIHZOZXdOb2RlIHx8IHZDdXJyZW50KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNYTm9kZShqc3hWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBqc3hWYWx1ZS50eXBlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBleHBlY3ROb01vcmVUZXh0Tm9kZXMoKTtcbiAgICAgICAgICAgICAgZXhwZWN0RWxlbWVudChqc3hWYWx1ZSwgdHlwZSk7XG4gICAgICAgICAgICAgIGRlc2NlbmQoanN4VmFsdWUuY2hpbGRyZW4sIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICBleHBlY3ROb01vcmVUZXh0Tm9kZXMoKTtcbiAgICAgICAgICAgICAgICBleHBlY3RWaXJ0dWFsKFZpcnR1YWxUeXBlLkZyYWdtZW50LCBqc3hWYWx1ZS5rZXkpO1xuICAgICAgICAgICAgICAgIGRlc2NlbmQoanN4VmFsdWUuY2hpbGRyZW4sIHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNsb3QpIHtcbiAgICAgICAgICAgICAgICBleHBlY3ROb01vcmVUZXh0Tm9kZXMoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4cGVjdFNsb3QoKSkge1xuICAgICAgICAgICAgICAgICAgLy8gbm90aGluZyB0byBwcm9qZWN0LCBzbyB0cnkgdG8gcmVuZGVyIHRoZSBTbG90IGRlZmF1bHQgY29udGVudC5cbiAgICAgICAgICAgICAgICAgIGRlc2NlbmQoanN4VmFsdWUuY2hpbGRyZW4sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBQcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0UHJvamVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGRlc2NlbmQoanN4VmFsdWUuY2hpbGRyZW4sIHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNTUkNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICBleHBlY3ROb01vcmUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBTU1JSYXcpIHtcbiAgICAgICAgICAgICAgICBleHBlY3ROb01vcmUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNdXN0IGJlIGEgY29tcG9uZW50XG4gICAgICAgICAgICAgICAgZXhwZWN0Tm9Nb3JlVGV4dE5vZGVzKCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0Q29tcG9uZW50KHR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGpzeFZhbHVlID09PSAoU2tpcFJlbmRlciBhcyBKU1hDaGlsZHJlbikpIHtcbiAgICAgICAgICAvLyBkbyBub3RoaW5nLCB3ZSBhcmUgc2tpcHBpbmcgdGhpcyBub2RlXG4gICAgICAgICAgam91cm5hbCA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cGVjdFRleHQoJycpO1xuICAgICAgICB9XG4gICAgICAgIGFkdmFuY2UoKTtcbiAgICAgIH1cbiAgICAgIGV4cGVjdE5vTW9yZSgpO1xuICAgICAgYXNjZW5kKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgICBpZiAoIXNob3VsZEFkdmFuY2UpIHtcbiAgICAgIHNob3VsZEFkdmFuY2UgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBqc3hJZHgrKztcbiAgICBpZiAoanN4SWR4IDwganN4Q291bnQpIHtcbiAgICAgIGpzeFZhbHVlID0ganN4Q2hpbGRyZW5banN4SWR4XTtcbiAgICB9IGVsc2UgaWYgKHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdID09PSBmYWxzZSkge1xuICAgICAgLy8gdGhpcyB3YXMgc3BlY2lhbCBgZGVzY2VuZFZOb2RlID09PSBmYWxzZWAgc28gcG9wIGFuZCB0cnkgYWdhaW5cbiAgICAgIHJldHVybiBhc2NlbmQoKTtcbiAgICB9XG4gICAgaWYgKHZOZXdOb2RlICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSBoYXZlIGEgbmV3IE5vZGUuXG4gICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIGB2Q3VycmVudGAgd2FzIGRlZW1lZCBub3QgdXNlZnVsIGFuZCB3ZSBpbnNlcnRlZCBpbiBmcm9udCBvZiBpdC5cbiAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgbmV4dCBub2RlIHdlIHNob3VsZCBsb29rIGF0IGlzIHRoZSBgdkN1cnJlbnRgIHNvIGp1c3QgY2xlYXIgdGhlXG4gICAgICAvLyB2TmV3Tm9kZSAgYW5kIHRyeSBhZ2Fpbi5cbiAgICAgIHZOZXdOb2RlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWR2YW5jZVRvTmV4dFNpYmxpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWR2YW5jZSB0aGUgYHZDdXJyZW50YCB0byB0aGUgbmV4dCBzaWJsaW5nLlxuICAgKlxuICAgKiBOb3JtYWxseSB0aGlzIGlzIGp1c3QgYHZDdXJyZW50ID0gdm5vZGVfZ2V0TmV4dFNpYmxpbmcodkN1cnJlbnQpYC4gSG93ZXZlciwgdGhpcyBnZXRzXG4gICAqIGNvbXBsaWNhdGVkIGlmIGByZXRyaWV2ZUNoaWxkV2l0aEtleWAgd2FzIGNhbGxlZCwgYmVjYXVzZSB0aGVuIHdlIGFyZSBjb25zdW1pbmcgbm9kZXMgb3V0IG9mXG4gICAqIG9yZGVyIGFuZCBjYW4ndCByZWx5IG9uIGB2bm9kZV9nZXROZXh0U2libGluZ2AgYW5kIGluc3RlYWQgd2UgbmVlZCB0byBnbyBieSBgdlNpYmxpbmdzYC5cbiAgICovXG4gIGZ1bmN0aW9uIHBlZWtOZXh0U2libGluZygpIHtcbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgYHZOZXdOb2RlYCwgdGhhbiB0aGF0IG1lYW5zIHdlIGp1c3QgcmVjb25jaWxlZCB0aGUgY3VycmVudCBub2RlLlxuICAgIC8vIFNvIGFkdmFuY2UgaXQuXG4gICAgcmV0dXJuIHZDdXJyZW50ID8gdm5vZGVfZ2V0TmV4dFNpYmxpbmcodkN1cnJlbnQpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZHZhbmNlIHRoZSBgdkN1cnJlbnRgIHRvIHRoZSBuZXh0IHNpYmxpbmcuXG4gICAqXG4gICAqIE5vcm1hbGx5IHRoaXMgaXMganVzdCBgdkN1cnJlbnQgPSB2bm9kZV9nZXROZXh0U2libGluZyh2Q3VycmVudClgLiBIb3dldmVyLCB0aGlzIGdldHNcbiAgICogY29tcGxpY2F0ZWQgaWYgYHJldHJpZXZlQ2hpbGRXaXRoS2V5YCB3YXMgY2FsbGVkLCBiZWNhdXNlIHRoZW4gd2UgYXJlIGNvbnN1bWluZyBub2RlcyBvdXQgb2ZcbiAgICogb3JkZXIgYW5kIGNhbid0IHJlbHkgb24gYHZub2RlX2dldE5leHRTaWJsaW5nYCBhbmQgaW5zdGVhZCB3ZSBuZWVkIHRvIGdvIGJ5IGB2U2libGluZ3NgLlxuICAgKi9cbiAgZnVuY3Rpb24gYWR2YW5jZVRvTmV4dFNpYmxpbmcoKSB7XG4gICAgdkN1cnJlbnQgPSBwZWVrTmV4dFNpYmxpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gY2hpbGRyZW5cbiAgICogQHBhcmFtIGRlc2NlbmRWTm9kZSAtIElmIHRydWUgd2UgYXJlIGRlc2NlbmRpbmcgaW50byB2Tm9kZTsgVGhpcyBpcyBzZXQgdG8gZmFsc2UgaWYgd2UgY29tZVxuICAgKiAgIGFjcm9zcyBhbiBhcnJheSBpbiBqc3gsIGFuZCB3ZSBuZWVkIHRvIGRlc2NlbmQgaW50byB0aGUgYXJyYXkgd2l0aG91dCBhY3R1YWxseSBkZXNjZW5kaW5nXG4gICAqICAgaW50byB0aGUgdk5vZGUuXG4gICAqXG4gICAqICAgRXhhbXBsZTpcbiAgICpcbiAgICogICBgYGBcbiAgICogICA8PlxuICAgKiAgIGJlZm9yZVxuICAgKiAgIHtbMSwyXS5tYXAoKGkpID0+IDxzcGFuPntpfTwvc3Bhbj4pfVxuICAgKiAgIGFmdGVyXG4gICAqICAgPC8+XG4gICAqIGBgYFxuICAgKlxuICAgKiAgIEluIHRoZSBhYm92ZSBleGFtcGxlIGFsbCBub2RlcyBhcmUgb24gc2FtZSBsZXZlbCBzbyB3ZSBkb24ndCBgZGVzY2VuZFZOb2RlYCBldmVuIHRob3VnaHQgdGhlcmVcbiAgICogICBpcyBhbiBhcnJheSBwcm9kdWNlZCBieSB0aGUgYG1hcGAgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBkZXNjZW5kKGNoaWxkcmVuOiBKU1hDaGlsZHJlbiwgZGVzY2VuZFZOb2RlOiBib29sZWFuKSB7XG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIGV4cGVjdE5vQ2hpbGRyZW4oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhY2tQdXNoKGNoaWxkcmVuLCBkZXNjZW5kVk5vZGUpO1xuICAgIGlmIChkZXNjZW5kVk5vZGUpIHtcbiAgICAgIGFzc2VydERlZmluZWQodkN1cnJlbnQgfHwgdk5ld05vZGUsICdFeHBlY3RpbmcgdkN1cnJlbnQgdG8gYmUgZGVmaW5lZC4nKTtcbiAgICAgIHZTaWJsaW5ncyA9IG51bGw7XG4gICAgICB2U2libGluZ3NBcnJheSA9IG51bGw7XG4gICAgICB2UGFyZW50ID0gdk5ld05vZGUgfHwgdkN1cnJlbnQhO1xuICAgICAgdkN1cnJlbnQgPSB2bm9kZV9nZXRGaXJzdENoaWxkKHZQYXJlbnQpO1xuICAgICAgdk5ld05vZGUgPSBudWxsO1xuICAgIH1cbiAgICBzaG91bGRBZHZhbmNlID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBhc2NlbmQoKSB7XG4gICAgY29uc3QgZGVzY2VuZFZOb2RlID0gc3RhY2sucG9wKCk7IC8vIGJvb2xlYW46IGRlc2NlbmRWTm9kZVxuICAgIGlmIChkZXNjZW5kVk5vZGUpIHtcbiAgICAgIHZTaWJsaW5ncyA9IHN0YWNrLnBvcCgpO1xuICAgICAgdlNpYmxpbmdzQXJyYXkgPSBzdGFjay5wb3AoKTtcbiAgICAgIHZOZXdOb2RlID0gc3RhY2sucG9wKCk7XG4gICAgICB2Q3VycmVudCA9IHN0YWNrLnBvcCgpO1xuICAgICAgdlBhcmVudCA9IHN0YWNrLnBvcCgpO1xuICAgIH1cbiAgICBqc3hWYWx1ZSA9IHN0YWNrLnBvcCgpO1xuICAgIGpzeENvdW50ID0gc3RhY2sucG9wKCk7XG4gICAganN4SWR4ID0gc3RhY2sucG9wKCk7XG4gICAganN4Q2hpbGRyZW4gPSBzdGFjay5wb3AoKTtcbiAgICBhZHZhbmNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFja1B1c2goY2hpbGRyZW46IEpTWENoaWxkcmVuLCBkZXNjZW5kVk5vZGU6IGJvb2xlYW4pIHtcbiAgICBzdGFjay5wdXNoKGpzeENoaWxkcmVuLCBqc3hJZHgsIGpzeENvdW50LCBqc3hWYWx1ZSk7XG4gICAgaWYgKGRlc2NlbmRWTm9kZSkge1xuICAgICAgc3RhY2sucHVzaCh2UGFyZW50LCB2Q3VycmVudCwgdk5ld05vZGUsIHZTaWJsaW5nc0FycmF5LCB2U2libGluZ3MpO1xuICAgIH1cbiAgICBzdGFjay5wdXNoKGRlc2NlbmRWTm9kZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICBqc3hJZHggPSAwO1xuICAgICAganN4Q291bnQgPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICBqc3hDaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAganN4VmFsdWUgPSBqc3hDb3VudCA+IDAgPyBjaGlsZHJlblswXSA6IG51bGw7XG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBubyBjaGlsZHJlblxuICAgICAganN4SWR4ID0gMDtcbiAgICAgIGpzeFZhbHVlID0gbnVsbDtcbiAgICAgIGpzeENoaWxkcmVuID0gbnVsbCE7XG4gICAgICBqc3hDb3VudCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGpzeElkeCA9IDA7XG4gICAgICBqc3hWYWx1ZSA9IGNoaWxkcmVuO1xuICAgICAganN4Q2hpbGRyZW4gPSBudWxsITtcbiAgICAgIGpzeENvdW50ID0gMTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJbnNlcnRCZWZvcmUoKSB7XG4gICAgaWYgKHZOZXdOb2RlKSB7XG4gICAgICByZXR1cm4gdkN1cnJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwZWVrTmV4dFNpYmxpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGRlc2NlbmRDb250ZW50VG9Qcm9qZWN0KGNoaWxkcmVuOiBKU1hDaGlsZHJlbiwgaG9zdDogVmlydHVhbFZOb2RlIHwgbnVsbCkge1xuICAgIGNvbnN0IHByb2plY3Rpb25DaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4gOiBbY2hpbGRyZW5dO1xuICAgIGNvbnN0IGNyZWF0ZVByb2plY3Rpb25KU1hOb2RlID0gKHNsb3ROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBuZXcgSlNYTm9kZUltcGwoUHJvamVjdGlvbiwgRU1QVFlfT0JKLCBudWxsLCBbXSwgMCwgc2xvdE5hbWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcm9qZWN0aW9uczogQXJyYXk8c3RyaW5nIHwgSlNYTm9kZUludGVybmFsPiA9IFtdO1xuICAgIGlmIChob3N0KSB7XG4gICAgICBjb25zdCBwcm9wcyA9IHZub2RlX2dldFByb3BzKGhvc3QpO1xuICAgICAgLy8gd2UgbmVlZCB0byBjcmVhdGUgZW1wdHkgcHJvamVjdGlvbnMgZm9yIGFsbCB0aGUgc2xvdHMgdG8gcmVtb3ZlIHVudXNlZCBzbG90cyBjb250ZW50XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSA9IGkgKyAyKSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXSBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChpc1Nsb3RQcm9wKHByb3ApKSB7XG4gICAgICAgICAgY29uc3Qgc2xvdE5hbWUgPSBwcm9wO1xuICAgICAgICAgIHByb2plY3Rpb25zLnB1c2goc2xvdE5hbWUpO1xuICAgICAgICAgIHByb2plY3Rpb25zLnB1c2goY3JlYXRlUHJvamVjdGlvbkpTWE5vZGUoc2xvdE5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9qZWN0aW9ucy5sZW5ndGggPT09IDAgJiYgY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgLy8gV2UgZGlkIG5vdCBmaW5kIGFueSBleGlzdGluZyBzbG90cyBhbmQgd2UgZG9uJ3QgaGF2ZSBhbnkgY2hpbGRyZW4gdG8gcHJvamVjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLy8gU1RFUCAxOiBCdWNrZXRpemUgdGhlIGNoaWxkcmVuIGJhc2VkIG9uIHRoZSBwcm9qZWN0aW9uIG5hbWUuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9qZWN0aW9uQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gcHJvamVjdGlvbkNoaWxkcmVuW2ldO1xuICAgICAgY29uc3Qgc2xvdE5hbWUgPSBTdHJpbmcoXG4gICAgICAgIChpc0pTWE5vZGUoY2hpbGQpICYmIGRpcmVjdEdldFByb3BzUHJveHlQcm9wKGNoaWxkLCBRU2xvdCkpIHx8IFFEZWZhdWx0U2xvdFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGlkeCA9IG1hcEFwcF9maW5kSW5keChwcm9qZWN0aW9ucywgc2xvdE5hbWUsIDApO1xuICAgICAgbGV0IGpzeEJ1Y2tldDogSlNYTm9kZUltcGw8dHlwZW9mIFByb2plY3Rpb24+O1xuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGpzeEJ1Y2tldCA9IHByb2plY3Rpb25zW2lkeCArIDFdIGFzIGFueTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2plY3Rpb25zLnNwbGljZSh+aWR4LCAwLCBzbG90TmFtZSwgKGpzeEJ1Y2tldCA9IGNyZWF0ZVByb2plY3Rpb25KU1hOb2RlKHNsb3ROYW1lKSkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVtb3ZlUHJvamVjdGlvbiA9IGNoaWxkID09PSBmYWxzZTtcbiAgICAgIGlmICghcmVtb3ZlUHJvamVjdGlvbikge1xuICAgICAgICAoanN4QnVja2V0LmNoaWxkcmVuIGFzIEpTWENoaWxkcmVuW10pLnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLy8gU1RFUCAyOiByZW1vdmUgdGhlIG5hbWVzXG4gICAgZm9yIChsZXQgaSA9IHByb2plY3Rpb25zLmxlbmd0aCAtIDI7IGkgPj0gMDsgaSA9IGkgLSAyKSB7XG4gICAgICBwcm9qZWN0aW9ucy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICAgIGRlc2NlbmQocHJvamVjdGlvbnMsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXhwZWN0UHJvamVjdGlvbigpIHtcbiAgICBjb25zdCBqc3hOb2RlID0ganN4VmFsdWUgYXMgSlNYTm9kZUludGVybmFsO1xuICAgIGNvbnN0IHNsb3ROYW1lID0ganN4Tm9kZS5rZXkgYXMgc3RyaW5nO1xuICAgIC8vIGNvbnNvbGUubG9nKCdleHBlY3RQcm9qZWN0aW9uJywgSlNPTi5zdHJpbmdpZnkoc2xvdE5hbWUpKTtcbiAgICB2Q3VycmVudCA9IHZub2RlX2dldFByb3A8VmlydHVhbFZOb2RlIHwgbnVsbD4oXG4gICAgICB2UGFyZW50LCAvLyBUaGUgcGFyZW50IGlzIHRoZSBjb21wb25lbnQgYW5kIGl0IHNob3VsZCBoYXZlIG91ciBwb3J0YWwuXG4gICAgICBzbG90TmFtZSxcbiAgICAgIChpZCkgPT4gdm5vZGVfbG9jYXRlKGNvbnRhaW5lci5yb290Vk5vZGUsIGlkKVxuICAgICk7XG4gICAgLy8gaWYgcHJvamVjdGlvbiBpcyBtYXJrZWQgYXMgZGVsZXRlZCB0aGVuIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG9uZVxuICAgIHZDdXJyZW50ID0gdkN1cnJlbnQgJiYgdkN1cnJlbnRbVk5vZGVQcm9wcy5mbGFnc10gJiBWTm9kZUZsYWdzLkRlbGV0ZWQgPyBudWxsIDogdkN1cnJlbnQ7XG4gICAgaWYgKHZDdXJyZW50ID09IG51bGwpIHtcbiAgICAgIHZOZXdOb2RlID0gdm5vZGVfbmV3VmlydHVhbCgpO1xuICAgICAgLy8geW91IG1heSBiZSB0ZW1wdGVkIHRvIGFkZCB0aGUgcHJvamVjdGlvbiBpbnRvIHRoZSBjdXJyZW50IHBhcmVudCwgYnV0XG4gICAgICAvLyB0aGF0IGlzIHdyb25nLiBXZSBkb24ndCB5ZXQga25vdyBpZiB0aGUgcHJvamVjdGlvbiB3aWxsIGJlIHByb2plY3RlZCwgc29cbiAgICAgIC8vIHdlIHNob3VsZCBsZWF2ZSBpdCB1bmF0dGFjaGVkLlxuICAgICAgLy8gdk5ld05vZGVbVk5vZGVQcm9wcy5wYXJlbnRdID0gdlBhcmVudDtcbiAgICAgIGlzRGV2ICYmIHZub2RlX3NldFByb3Aodk5ld05vZGUsIERFQlVHX1RZUEUsIFZpcnR1YWxUeXBlLlByb2plY3Rpb24pO1xuICAgICAgaXNEZXYgJiYgdm5vZGVfc2V0UHJvcCh2TmV3Tm9kZSwgJ3E6Y29kZScsICdleHBlY3RQcm9qZWN0aW9uJyk7XG4gICAgICB2bm9kZV9zZXRQcm9wKHZOZXdOb2RlIGFzIFZpcnR1YWxWTm9kZSwgUVNsb3QsIHNsb3ROYW1lKTtcbiAgICAgIHZub2RlX3NldFByb3Aodk5ld05vZGUgYXMgVmlydHVhbFZOb2RlLCBRU2xvdFBhcmVudCwgdlBhcmVudCk7XG4gICAgICB2bm9kZV9zZXRQcm9wKHZQYXJlbnQgYXMgVmlydHVhbFZOb2RlLCBzbG90TmFtZSwgdk5ld05vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdFNsb3QoKSB7XG4gICAgY29uc3Qgdkhvc3QgPSB2bm9kZV9nZXRQcm9qZWN0aW9uUGFyZW50Q29tcG9uZW50KHZQYXJlbnQsIGNvbnRhaW5lci5yb290Vk5vZGUpO1xuXG4gICAgY29uc3Qgc2xvdE5hbWVLZXkgPSBnZXRTbG90TmFtZUtleSh2SG9zdCk7XG4gICAgLy8gY29uc29sZS5sb2coJ2V4cGVjdFNsb3QnLCBKU09OLnN0cmluZ2lmeShzbG90TmFtZUtleSkpO1xuXG4gICAgY29uc3QgdlByb2plY3RlZE5vZGUgPSB2SG9zdFxuICAgICAgPyB2bm9kZV9nZXRQcm9wPFZpcnR1YWxWTm9kZSB8IG51bGw+KFxuICAgICAgICAgIHZIb3N0LFxuICAgICAgICAgIHNsb3ROYW1lS2V5LFxuICAgICAgICAgIC8vIGZvciBzbG90cyB0aGlzIGlkIGlzIHZub2RlIHJlZiBpZFxuICAgICAgICAgIG51bGwgLy8gUHJvamVjdGlvbnMgc2hvdWxkIGhhdmUgYmVlbiByZXNvbHZlZCB0aHJvdWdoIGNvbnRhaW5lci5lbnN1cmVQcm9qZWN0aW9uUmVzb2x2ZWRcbiAgICAgICAgICAvLyhpZCkgPT4gdm5vZGVfbG9jYXRlKGNvbnRhaW5lci5yb290Vk5vZGUsIGlkKVxuICAgICAgICApXG4gICAgICA6IG51bGw7XG4gICAgLy8gY29uc29sZS5sb2coJyAgICcsIFN0cmluZyh2SG9zdCksIFN0cmluZyh2UHJvamVjdGVkTm9kZSkpO1xuICAgIGlmICh2UHJvamVjdGVkTm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIHByb2plY3QsIHNvIHJlbmRlciBjb250ZW50IG9mIHRoZSBzbG90LlxuICAgICAgdm5vZGVfaW5zZXJ0QmVmb3JlKFxuICAgICAgICBqb3VybmFsLFxuICAgICAgICB2UGFyZW50IGFzIEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSxcbiAgICAgICAgKHZOZXdOb2RlID0gdm5vZGVfbmV3VmlydHVhbCgpKSxcbiAgICAgICAgdkN1cnJlbnQgJiYgZ2V0SW5zZXJ0QmVmb3JlKClcbiAgICAgICk7XG4gICAgICB2bm9kZV9zZXRQcm9wKHZOZXdOb2RlLCBRU2xvdCwgc2xvdE5hbWVLZXkpO1xuICAgICAgdkhvc3QgJiYgdm5vZGVfc2V0UHJvcCh2SG9zdCwgc2xvdE5hbWVLZXksIHZOZXdOb2RlKTtcbiAgICAgIGlzRGV2ICYmIHZub2RlX3NldFByb3Aodk5ld05vZGUsIERFQlVHX1RZUEUsIFZpcnR1YWxUeXBlLlByb2plY3Rpb24pO1xuICAgICAgaXNEZXYgJiYgdm5vZGVfc2V0UHJvcCh2TmV3Tm9kZSwgJ3E6Y29kZScsICdleHBlY3RTbG90JyArIGNvdW50KyspO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodlByb2plY3RlZE5vZGUgPT09IHZDdXJyZW50KSB7XG4gICAgICAvLyBBbGwgaXMgZ29vZC5cbiAgICAgIC8vIGNvbnNvbGUubG9nKCcgIE5PT1AnLCBTdHJpbmcodkN1cnJlbnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbW92ZSBmcm9tIHE6dGVtcGxhdGUgdG8gdGhlIHRhcmdldCBub2RlXG4gICAgICB2bm9kZV9pbnNlcnRCZWZvcmUoXG4gICAgICAgIGpvdXJuYWwsXG4gICAgICAgIHZQYXJlbnQgYXMgRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlLFxuICAgICAgICAodk5ld05vZGUgPSB2UHJvamVjdGVkTm9kZSksXG4gICAgICAgIHZDdXJyZW50ICYmIGdldEluc2VydEJlZm9yZSgpXG4gICAgICApO1xuICAgICAgdm5vZGVfc2V0UHJvcCh2TmV3Tm9kZSwgUVNsb3QsIHNsb3ROYW1lS2V5KTtcbiAgICAgIHZIb3N0ICYmIHZub2RlX3NldFByb3Aodkhvc3QsIHNsb3ROYW1lS2V5LCB2TmV3Tm9kZSk7XG4gICAgICBpc0RldiAmJiB2bm9kZV9zZXRQcm9wKHZOZXdOb2RlLCBERUJVR19UWVBFLCBWaXJ0dWFsVHlwZS5Qcm9qZWN0aW9uKTtcbiAgICAgIGlzRGV2ICYmIHZub2RlX3NldFByb3Aodk5ld05vZGUsICdxOmNvZGUnLCAnZXhwZWN0U2xvdCcgKyBjb3VudCsrKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTbG90TmFtZUtleSh2SG9zdDogVk5vZGUgfCBudWxsKSB7XG4gICAgY29uc3QganN4Tm9kZSA9IGpzeFZhbHVlIGFzIEpTWE5vZGVJbnRlcm5hbDtcbiAgICBjb25zdCBjb25zdFByb3BzID0ganN4Tm9kZS5jb25zdFByb3BzO1xuICAgIGlmIChjb25zdFByb3BzICYmIHR5cGVvZiBjb25zdFByb3BzID09ICdvYmplY3QnICYmICduYW1lJyBpbiBjb25zdFByb3BzKSB7XG4gICAgICBjb25zdCBjb25zdFZhbHVlID0gY29uc3RQcm9wcy5uYW1lO1xuICAgICAgaWYgKHZIb3N0ICYmIGNvbnN0VmFsdWUgaW5zdGFuY2VvZiBXcmFwcGVkU2lnbmFsKSB7XG4gICAgICAgIHJldHVybiB0cmFja1NpZ25hbEFuZEFzc2lnbkhvc3QoY29uc3RWYWx1ZSwgdkhvc3QsIEVmZmVjdFByb3BlcnR5LkNPTVBPTkVOVCwgY29udGFpbmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpcmVjdEdldFByb3BzUHJveHlQcm9wKGpzeE5vZGUsICduYW1lJykgfHwgUURlZmF1bHRTbG90O1xuICB9XG5cbiAgZnVuY3Rpb24gZHJhaW5Bc3luY1F1ZXVlKCk6IFZhbHVlT3JQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAoYXN5bmNRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGpzeE5vZGUgPSBhc3luY1F1ZXVlLnNoaWZ0KCkgYXMgVmFsdWVPclByb21pc2U8SlNYTm9kZUludGVybmFsPjtcbiAgICAgIGNvbnN0IHZIb3N0Tm9kZSA9IGFzeW5jUXVldWUuc2hpZnQoKSBhcyBWTm9kZTtcbiAgICAgIGlmIChpc1Byb21pc2UoanN4Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIGpzeE5vZGUudGhlbigoanN4Tm9kZSkgPT4ge1xuICAgICAgICAgIGRpZmYoanN4Tm9kZSwgdkhvc3ROb2RlKTtcbiAgICAgICAgICByZXR1cm4gZHJhaW5Bc3luY1F1ZXVlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlmZihqc3hOb2RlLCB2SG9zdE5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdE5vQ2hpbGRyZW4oKSB7XG4gICAgY29uc3QgdkZpcnN0Q2hpbGQgPSB2Q3VycmVudCAmJiB2bm9kZV9nZXRGaXJzdENoaWxkKHZDdXJyZW50KTtcbiAgICBpZiAodkZpcnN0Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGxldCB2Q2hpbGQ6IFZOb2RlIHwgbnVsbCA9IHZGaXJzdENoaWxkO1xuICAgICAgd2hpbGUgKHZDaGlsZCkge1xuICAgICAgICBjbGVhbnVwKGNvbnRhaW5lciwgdkNoaWxkKTtcbiAgICAgICAgdkNoaWxkID0gdm5vZGVfZ2V0TmV4dFNpYmxpbmcodkNoaWxkKTtcbiAgICAgIH1cbiAgICAgIHZub2RlX3RydW5jYXRlKGpvdXJuYWwsIHZDdXJyZW50IGFzIEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSwgdkZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFeHBlY3Qgbm8gbW9yZSBub2RlcyAtIEFueSBub2RlcyB3aGljaCBhcmUgc3RpbGwgYXQgY3Vyc29yLCBuZWVkIHRvIGJlIHJlbW92ZWQuICovXG4gIGZ1bmN0aW9uIGV4cGVjdE5vTW9yZSgpIHtcbiAgICBhc3NlcnRGYWxzZSh2UGFyZW50ID09PSB2Q3VycmVudCwgXCJQYXJlbnQgYW5kIGN1cnJlbnQgY2FuJ3QgYmUgdGhlIHNhbWVcIik7XG4gICAgaWYgKHZDdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB3aGlsZSAodkN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSB2Q3VycmVudDtcbiAgICAgICAgYWR2YW5jZVRvTmV4dFNpYmxpbmcoKTtcbiAgICAgICAgaWYgKHZQYXJlbnQgPT09IHZub2RlX2dldFBhcmVudCh0b1JlbW92ZSkpIHtcbiAgICAgICAgICBjbGVhbnVwKGNvbnRhaW5lciwgdG9SZW1vdmUpO1xuICAgICAgICAgIC8vIElmIHdlIGFyZSBkaWZmaW5nIHByb2plY3Rpb24gdGhhbiB0aGUgcGFyZW50IGlzIG5vdCB0aGUgcGFyZW50IG9mIHRoZSBub2RlLlxuICAgICAgICAgIC8vIElmIHRoYXQgaXMgdGhlIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW1vdmUgdGhlIG5vZGUgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgICAgIHZub2RlX3JlbW92ZShqb3VybmFsLCB2UGFyZW50IGFzIEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSwgdG9SZW1vdmUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXhwZWN0Tm9Nb3JlVGV4dE5vZGVzKCkge1xuICAgIHdoaWxlICh2Q3VycmVudCAhPT0gbnVsbCAmJiB2bm9kZV9pc1RleHRWTm9kZSh2Q3VycmVudCkpIHtcbiAgICAgIGNsZWFudXAoY29udGFpbmVyLCB2Q3VycmVudCk7XG4gICAgICBjb25zdCB0b1JlbW92ZSA9IHZDdXJyZW50O1xuICAgICAgYWR2YW5jZVRvTmV4dFNpYmxpbmcoKTtcbiAgICAgIHZub2RlX3JlbW92ZShqb3VybmFsLCB2UGFyZW50LCB0b1JlbW92ZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBgcURpc3BhdGNoRXZlbnRgIG5lZWRzIHBhdGNoaW5nLiBUaGlzIGlzIHRydWUgd2hlbiBvbmUgb2YgdGhlIGBqc3hgIGFyZ3VtZW50J3NcbiAgICogY29uc3QgcHJvcHMgaGFzIHRoZSBuYW1lIG9mIGFuIGV2ZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZU5ld0VsZW1lbnQoXG4gICAganN4OiBKU1hOb2RlSW50ZXJuYWwsXG4gICAgZWxlbWVudE5hbWU6IHN0cmluZyxcbiAgICBjdXJyZW50RmlsZT86IHN0cmluZyB8IG51bGxcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnRXaXRoTmFtZXNwYWNlKGVsZW1lbnROYW1lKTtcblxuICAgIGNvbnN0IHsgY29uc3RQcm9wcyB9ID0ganN4O1xuICAgIGxldCBuZWVkc1FEaXNwYXRjaEV2ZW50UGF0Y2ggPSBmYWxzZTtcbiAgICBpZiAoY29uc3RQcm9wcykge1xuICAgICAgLy8gQ29uc3QgcHJvcHMgYXJlLCB3ZWxsLCBjb25zdGFudCwgdGhleSB3aWxsIG5ldmVyIGNoYW5nZSFcbiAgICAgIC8vIEZvciB0aGlzIHJlYXNvbiB3ZSBjYW4gY2hlYXQgYW5kIHdyaXRlIHRoZW0gZGlyZWN0bHkgaW50byB0aGUgRE9NLlxuICAgICAgLy8gV2UgbmV2ZXIgdGVsbCB0aGUgdk5vZGUgYWJvdXQgdGhlbSBzYXZpbmcgdXMgdGltZSBhbmQgbWVtb3J5LlxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29uc3RQcm9wcykge1xuICAgICAgICBsZXQgdmFsdWUgPSBjb25zdFByb3BzW2tleV07XG4gICAgICAgIGlmIChpc0pzeFByb3BlcnR5QW5FdmVudE5hbWUoa2V5KSkge1xuICAgICAgICAgIC8vIFNvIGZvciBldmVudCBoYW5kbGVycyB3ZSBtdXN0IGFkZCB0aGVtIHRvIHRoZSB2Tm9kZSBzbyB0aGF0IHF3aWtsb2FkZXIgY2FuIGxvb2sgdGhlbSB1cFxuICAgICAgICAgIC8vIEJ1dCB3ZSBuZWVkIHRvIG1hcmsgdGhlbSBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IHB1bGxlZCBpbnRvIHRoZSBkaWZmLlxuICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGdldEV2ZW50TmFtZUZyb21Kc3hFdmVudChrZXkpO1xuICAgICAgICAgIGNvbnN0IHNjb3BlID0gZ2V0RXZlbnROYW1lU2NvcGVGcm9tSnN4RXZlbnQoa2V5KTtcbiAgICAgICAgICBpZiAoZXZlbnROYW1lKSB7XG4gICAgICAgICAgICB2bm9kZV9zZXRQcm9wKFxuICAgICAgICAgICAgICB2TmV3Tm9kZSBhcyBFbGVtZW50Vk5vZGUsXG4gICAgICAgICAgICAgIEhBTkRMRVJfUFJFRklYICsgJzonICsgc2NvcGUgKyAnOicgKyBldmVudE5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVnaXN0ZXJRd2lrTG9hZGVyRXZlbnQoZXZlbnROYW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgICAgIC8vIGFkZCBhbiBldmVudCBhdHRyIHdpdGggZW1wdHkgdmFsdWUgZm9yIHF3aWtsb2FkZXIgZWxlbWVudCBzZWxlY3Rvci5cbiAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdmFsdWUgaGVyZS4gRm9yIHNzciB0aGlzIHZhbHVlIGlzIGEgUVJMLFxuICAgICAgICAgICAgLy8gYnV0IGZvciBDU1IgdmFsdWUgc2hvdWxkIGJlIGp1c3QgZW1wdHlcbiAgICAgICAgICAgIGNvbnN0IGh0bWxFdmVudCA9IGpzeEV2ZW50VG9IdG1sQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgICBpZiAoaHRtbEV2ZW50KSB7XG4gICAgICAgICAgICAgIHZub2RlX3NldEF0dHIoam91cm5hbCwgdk5ld05vZGUgYXMgRWxlbWVudFZOb2RlLCBodG1sRXZlbnQsICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZWVkc1FEaXNwYXRjaEV2ZW50UGF0Y2ggPSB0cnVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ3JlZicpIHtcbiAgICAgICAgICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZS52YWx1ZSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLmludmFsaWRSZWZWYWx1ZSwgW2N1cnJlbnRGaWxlXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzU2lnbmFsKHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IHNpZ25hbERhdGEgPSBuZXcgU3Vic2NyaXB0aW9uRGF0YSh7XG4gICAgICAgICAgICAkc2NvcGVkU3R5bGVJZFByZWZpeCQ6IHNjb3BlZFN0eWxlSWRQcmVmaXgsXG4gICAgICAgICAgICAkaXNDb25zdCQ6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFsdWUgPSB0cmFja1NpZ25hbEFuZEFzc2lnbkhvc3QoXG4gICAgICAgICAgICB2YWx1ZSBhcyBTaWduYWw8dW5rbm93bj4sXG4gICAgICAgICAgICB2TmV3Tm9kZSBhcyBFbGVtZW50Vk5vZGUsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBzaWduYWxEYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSB7XG4gICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB2YWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoUUNvbnRhaW5lckF0dHIsIFFDb250YWluZXJWYWx1ZS5IVE1MKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50TmFtZSA9PT0gJ3RleHRhcmVhJyAmJiBrZXkgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGlzRGV2KSB7XG4gICAgICAgICAgICAgIHRocm93IHFFcnJvcihRRXJyb3Iud3JvbmdUZXh0YXJlYVZhbHVlLCBbY3VycmVudEZpbGUsIHZhbHVlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgKGVsZW1lbnQgYXMgSFRNTFRleHRBcmVhRWxlbWVudCkudmFsdWUgPSBlc2NhcGVIVE1MKCh2YWx1ZSBhcyBzdHJpbmcpIHx8ICcnKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gc2VyaWFsaXplQXR0cmlidXRlKGtleSwgdmFsdWUsIHNjb3BlZFN0eWxlSWRQcmVmaXgpO1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qga2V5ID0ganN4LmtleTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShFTEVNRU5UX0tFWSwga2V5KTtcbiAgICAgIHZub2RlX3NldFByb3Aodk5ld05vZGUgYXMgRWxlbWVudFZOb2RlLCBFTEVNRU5UX0tFWSwga2V5KTtcbiAgICB9XG5cbiAgICAvLyBhcHBlbmQgY2xhc3MgYXR0cmlidXRlIGlmIHN0eWxlU2NvcGVkSWQgZXhpc3RzIGFuZCB0aGVyZSBpcyBubyBjbGFzcyBhdHRyaWJ1dGVcbiAgICBjb25zdCBjbGFzc0F0dHJpYnV0ZUV4aXN0cyA9XG4gICAgICBoYXNDbGFzc0F0dHIoanN4LnZhclByb3BzKSB8fCAoanN4LmNvbnN0UHJvcHMgJiYgaGFzQ2xhc3NBdHRyKGpzeC5jb25zdFByb3BzKSk7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZUV4aXN0cyAmJiBzY29wZWRTdHlsZUlkUHJlZml4KSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBzY29wZWRTdHlsZUlkUHJlZml4KTtcbiAgICB9XG5cbiAgICB2bm9kZV9pbnNlcnRCZWZvcmUoam91cm5hbCwgdlBhcmVudCBhcyBFbGVtZW50Vk5vZGUsIHZOZXdOb2RlIGFzIEVsZW1lbnRWTm9kZSwgdkN1cnJlbnQpO1xuXG4gICAgcmV0dXJuIG5lZWRzUURpc3BhdGNoRXZlbnRQYXRjaDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRXaXRoTmFtZXNwYWNlKGVsZW1lbnROYW1lOiBzdHJpbmcpOiBFbGVtZW50IHtcbiAgICBjb25zdCBkb21QYXJlbnRWTm9kZSA9IHZub2RlX2dldERvbVBhcmVudFZOb2RlKHZQYXJlbnQpO1xuICAgIGNvbnN0IHsgZWxlbWVudE5hbWVzcGFjZSwgZWxlbWVudE5hbWVzcGFjZUZsYWcgfSA9IGdldE5ld0VsZW1lbnROYW1lc3BhY2VEYXRhKFxuICAgICAgZG9tUGFyZW50Vk5vZGUsXG4gICAgICBlbGVtZW50TmFtZVxuICAgICk7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gY29udGFpbmVyLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlbGVtZW50TmFtZXNwYWNlLCBlbGVtZW50TmFtZSk7XG4gICAgdk5ld05vZGUgPSB2bm9kZV9uZXdFbGVtZW50KGVsZW1lbnQsIGVsZW1lbnROYW1lKTtcbiAgICB2TmV3Tm9kZVtWTm9kZVByb3BzLmZsYWdzXSB8PSBlbGVtZW50TmFtZXNwYWNlRmxhZztcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdEVsZW1lbnQoanN4OiBKU1hOb2RlSW50ZXJuYWwsIGVsZW1lbnROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc1NhbWVFbGVtZW50TmFtZSA9XG4gICAgICB2Q3VycmVudCAmJiB2bm9kZV9pc0VsZW1lbnRWTm9kZSh2Q3VycmVudCkgJiYgZWxlbWVudE5hbWUgPT09IHZub2RlX2dldEVsZW1lbnROYW1lKHZDdXJyZW50KTtcbiAgICBjb25zdCBqc3hLZXk6IHN0cmluZyB8IG51bGwgPSBqc3gua2V5O1xuICAgIGxldCBuZWVkc1FEaXNwYXRjaEV2ZW50UGF0Y2ggPSBmYWxzZTtcbiAgICBjb25zdCBjdXJyZW50RmlsZSA9IGdldEZpbGVMb2NhdGlvbkZyb21Kc3goanN4LmRldik7XG4gICAgaWYgKCFpc1NhbWVFbGVtZW50TmFtZSB8fCBqc3hLZXkgIT09IGdldEtleSh2Q3VycmVudCkpIHtcbiAgICAgIC8vIFNvIHdlIGhhdmUgYSBrZXkgYW5kIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IG5vZGUuXG4gICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgZm9yd2FyZCBzZWFyY2ggdG8gZmluZCBpdC5cbiAgICAgIC8vIFRoZSBjb21wbGljYXRpb24gaXMgdGhhdCBvbmNlIHdlIHN0YXJ0IHRha2luZyBub2RlcyBvdXQgb2Ygb3JkZXIgd2UgY2FuJ3QgdXNlIGB2bm9kZV9nZXROZXh0U2libGluZ2BcbiAgICAgIHZOZXdOb2RlID0gcmV0cmlldmVDaGlsZFdpdGhLZXkoZWxlbWVudE5hbWUsIGpzeEtleSk7XG4gICAgICBpZiAodk5ld05vZGUgPT09IG51bGwpIHtcbiAgICAgICAgLy8gTm8gZXhpc3Rpbmcgbm9kZSB3aXRoIGtleSBleGlzdHMsIGp1c3QgY3JlYXRlIGEgbmV3IG9uZS5cbiAgICAgICAgbmVlZHNRRGlzcGF0Y2hFdmVudFBhdGNoID0gY3JlYXRlTmV3RWxlbWVudChqc3gsIGVsZW1lbnROYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEV4aXN0aW5nIGtleWVkIG5vZGVcbiAgICAgICAgdm5vZGVfaW5zZXJ0QmVmb3JlKGpvdXJuYWwsIHZQYXJlbnQgYXMgRWxlbWVudFZOb2RlLCB2TmV3Tm9kZSwgdkN1cnJlbnQpO1xuICAgICAgICAvLyBXZSBhcmUgaGVyZSwgc28ganN4IGlzIGRpZmZlcmVudCBmcm9tIHRoZSB2Q3VycmVudCwgc28gbm93IHdlIHdhbnQgdG8gcG9pbnQgdG8gdGhlIG1vdmVkIG5vZGUuXG4gICAgICAgIHZDdXJyZW50ID0gdk5ld05vZGU7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY2xlYW4gdXAgdGhlIHZOZXdOb2RlLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gc2tpcCBhZHZhbmNlIHRvIG5leHQgc2libGluZyAoc2VlIGBhZHZhbmNlYCBmdW5jdGlvbikuXG4gICAgICAgIHZOZXdOb2RlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcmVjb25jaWxlIGF0dHJpYnV0ZXNcblxuICAgIGNvbnN0IGpzeEF0dHJzID0gW10gYXMgQ2xpZW50QXR0cnM7XG4gICAgY29uc3QgcHJvcHMgPSBqc3gudmFyUHJvcHM7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHNba2V5XTtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIG1hcEFycmF5X3NldChqc3hBdHRycywga2V5LCB2YWx1ZSwgMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChqc3hLZXkgIT09IG51bGwpIHtcbiAgICAgIG1hcEFycmF5X3NldChqc3hBdHRycywgRUxFTUVOVF9LRVksIGpzeEtleSwgMCk7XG4gICAgfVxuICAgIGNvbnN0IHZOb2RlID0gKHZOZXdOb2RlIHx8IHZDdXJyZW50KSBhcyBFbGVtZW50Vk5vZGU7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdk5vZGVbRWxlbWVudFZOb2RlUHJvcHMuZWxlbWVudF0gYXMgUUVsZW1lbnQ7XG4gICAgZWxlbWVudC52Tm9kZSA9IG5ldyBXZWFrUmVmKHZOb2RlKTtcblxuICAgIG5lZWRzUURpc3BhdGNoRXZlbnRQYXRjaCA9XG4gICAgICBzZXRCdWxrUHJvcHModk5vZGUsIGpzeEF0dHJzLCBjdXJyZW50RmlsZSkgfHwgbmVlZHNRRGlzcGF0Y2hFdmVudFBhdGNoO1xuICAgIGlmIChuZWVkc1FEaXNwYXRjaEV2ZW50UGF0Y2gpIHtcbiAgICAgIC8vIEV2ZW50IGhhbmRsZXIgbmVlZHMgdG8gYmUgcGF0Y2hlZCBvbnRvIHRoZSBlbGVtZW50LlxuICAgICAgaWYgKCFlbGVtZW50LnFEaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGVsZW1lbnQucURpc3BhdGNoRXZlbnQgPSAoZXZlbnQ6IEV2ZW50LCBzY29wZTogUXdpa0xvYWRlckV2ZW50U2NvcGUpID0+IHtcbiAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBldmVudC50eXBlO1xuICAgICAgICAgIGNvbnN0IGV2ZW50UHJvcCA9ICc6JyArIHNjb3BlLnN1YnN0cmluZygxKSArICc6JyArIGV2ZW50TmFtZTtcbiAgICAgICAgICBjb25zdCBxcmxzID0gW1xuICAgICAgICAgICAgdm5vZGVfZ2V0UHJvcDxRUkw+KHZOb2RlLCBldmVudFByb3AsIG51bGwpLFxuICAgICAgICAgICAgdm5vZGVfZ2V0UHJvcDxRUkw+KHZOb2RlLCBIQU5ETEVSX1BSRUZJWCArIGV2ZW50UHJvcCwgbnVsbCksXG4gICAgICAgICAgXTtcbiAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICBxcmxzLmZsYXQoMikuZm9yRWFjaCgocXJsKSA9PiB7XG4gICAgICAgICAgICBpZiAocXJsKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29udGFpbmVyLiRzY2hlZHVsZXIkKFxuICAgICAgICAgICAgICAgIENob3JlVHlwZS5SVU5fUVJMLFxuICAgICAgICAgICAgICAgIHZOb2RlLFxuICAgICAgICAgICAgICAgIHFybCBhcyBRUkxJbnRlcm5hbDwoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duPixcbiAgICAgICAgICAgICAgICBbZXZlbnQsIGVsZW1lbnRdXG4gICAgICAgICAgICAgICkgYXMgdW5rbm93bjtcbiAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIFRydWUgaWYgYHFEaXNwYXRjaEV2ZW50YCBuZWVkcyBwYXRjaGluZyAqL1xuICBmdW5jdGlvbiBzZXRCdWxrUHJvcHMoXG4gICAgdm5vZGU6IEVsZW1lbnRWTm9kZSxcbiAgICBzcmNBdHRyczogQ2xpZW50QXR0cnMsXG4gICAgY3VycmVudEZpbGU/OiBzdHJpbmcgfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIHZub2RlX2Vuc3VyZUVsZW1lbnRJbmZsYXRlZCh2bm9kZSk7XG4gICAgY29uc3QgZHN0QXR0cnMgPSB2bm9kZV9nZXRQcm9wcyh2bm9kZSkgYXMgQ2xpZW50QXR0cnM7XG4gICAgbGV0IHNyY0lkeCA9IDA7XG4gICAgY29uc3Qgc3JjTGVuZ3RoID0gc3JjQXR0cnMubGVuZ3RoO1xuICAgIGxldCBkc3RJZHggPSAwO1xuICAgIGxldCBkc3RMZW5ndGggPSBkc3RBdHRycy5sZW5ndGg7XG4gICAgbGV0IHNyY0tleTogQ2xpZW50QXR0cktleSB8IG51bGwgPSBzcmNJZHggPCBzcmNMZW5ndGggPyBzcmNBdHRyc1tzcmNJZHgrK10gOiBudWxsO1xuICAgIGxldCBkc3RLZXk6IENsaWVudEF0dHJLZXkgfCBudWxsID0gZHN0SWR4IDwgZHN0TGVuZ3RoID8gZHN0QXR0cnNbZHN0SWR4KytdIDogbnVsbDtcbiAgICBsZXQgcGF0Y2hFdmVudERpc3BhdGNoID0gZmFsc2U7XG5cbiAgICBjb25zdCByZWNvcmQgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnOicpKSB7XG4gICAgICAgIHZub2RlX3NldFByb3Aodm5vZGUsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09ICdyZWYnKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB2bm9kZV9nZXROb2RlKHZub2RlKSBhcyBFbGVtZW50O1xuICAgICAgICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUudmFsdWUgPSBlbGVtZW50O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YWx1ZShlbGVtZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxpbmcgbnVsbCB2YWx1ZSBpcyBub3QgbmVlZGVkIGhlcmUsIGJlY2F1c2Ugd2UgYXJlIGZpbHRlcmluZyBudWxsIHZhbHVlcyBlYXJsaWVyXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRocm93IHFFcnJvcihRRXJyb3IuaW52YWxpZFJlZlZhbHVlLCBbY3VycmVudEZpbGVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hbERhdGEgPSBuZXcgU3Vic2NyaXB0aW9uRGF0YSh7XG4gICAgICAgICAgJHNjb3BlZFN0eWxlSWRQcmVmaXgkOiBzY29wZWRTdHlsZUlkUHJlZml4LFxuICAgICAgICAgICRpc0NvbnN0JDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB2YWx1ZSA9IHRyYWNrU2lnbmFsQW5kQXNzaWduSG9zdCh2YWx1ZSwgdm5vZGUsIGtleSwgY29udGFpbmVyLCBzaWduYWxEYXRhKTtcbiAgICAgIH1cblxuICAgICAgdm5vZGVfc2V0QXR0cihcbiAgICAgICAgam91cm5hbCxcbiAgICAgICAgdm5vZGUsXG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWUgIT09IG51bGwgPyBzZXJpYWxpemVBdHRyaWJ1dGUoa2V5LCB2YWx1ZSwgc2NvcGVkU3R5bGVJZFByZWZpeCkgOiBudWxsXG4gICAgICApO1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIC8vIGlmIHdlIHNldCBgbnVsbGAgdGhhbiBhdHRyaWJ1dGUgd2FzIHJlbW92ZWQgYW5kIHdlIG5lZWQgdG8gc2hvcnRlbiB0aGUgZHN0TGVuZ3RoXG4gICAgICAgIGRzdExlbmd0aCA9IGRzdEF0dHJzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVjb3JkSnN4RXZlbnQgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGdldEV2ZW50TmFtZUZyb21Kc3hFdmVudChrZXkpO1xuICAgICAgY29uc3Qgc2NvcGUgPSBnZXRFdmVudE5hbWVTY29wZUZyb21Kc3hFdmVudChrZXkpO1xuICAgICAgaWYgKGV2ZW50TmFtZSkge1xuICAgICAgICByZWNvcmQoJzonICsgc2NvcGUgKyAnOicgKyBldmVudE5hbWUsIHZhbHVlKTtcbiAgICAgICAgLy8gcmVnaXN0ZXIgYW4gZXZlbnQgZm9yIHF3aWsgbG9hZGVyXG4gICAgICAgIHJlZ2lzdGVyUXdpa0xvYWRlckV2ZW50KGV2ZW50TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY29wZSkge1xuICAgICAgICAvLyBhZGQgYW4gZXZlbnQgYXR0ciB3aXRoIGVtcHR5IHZhbHVlIGZvciBxd2lrbG9hZGVyIGVsZW1lbnQgc2VsZWN0b3IuXG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdmFsdWUgaGVyZS4gRm9yIHNzciB0aGlzIHZhbHVlIGlzIGEgUVJMLFxuICAgICAgICAvLyBidXQgZm9yIENTUiB2YWx1ZSBzaG91bGQgYmUganVzdCBlbXB0eVxuICAgICAgICBjb25zdCBodG1sRXZlbnQgPSBqc3hFdmVudFRvSHRtbEF0dHJpYnV0ZShrZXkpO1xuICAgICAgICBpZiAoaHRtbEV2ZW50KSB7XG4gICAgICAgICAgcmVjb3JkKGh0bWxFdmVudCwgJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdoaWxlIChzcmNLZXkgIT09IG51bGwgfHwgZHN0S2V5ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZHN0S2V5Py5zdGFydHNXaXRoKEhBTkRMRVJfUFJFRklYKSB8fCBkc3RLZXk/LnN0YXJ0c1dpdGgoUV9QUkVGSVgpKSB7XG4gICAgICAgIC8vIFRoZXNlIGFyZSBhIHNwZWNpYWwga2V5cyB3aGljaCB3ZSB1c2UgdG8gbWFyayB0aGUgZXZlbnQgaGFuZGxlcnMgYXMgaW1tdXRhYmxlIG9yXG4gICAgICAgIC8vIGVsZW1lbnQga2V5IHdlIG5lZWQgdG8gaWdub3JlIHRoZW0uXG4gICAgICAgIGRzdElkeCsrOyAvLyBza2lwIHRoZSBkZXN0aW5hdGlvbiB2YWx1ZSwgd2UgZG9uJ3QgY2FyZSBhYm91dCBpdC5cbiAgICAgICAgZHN0S2V5ID0gZHN0SWR4IDwgZHN0TGVuZ3RoID8gZHN0QXR0cnNbZHN0SWR4KytdIDogbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoc3JjS2V5ID09IG51bGwpIHtcbiAgICAgICAgLy8gU291cmNlIGhhcyBtb3JlIGtleXMsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gZnJvbSBkZXN0aW5hdGlvblxuICAgICAgICBpZiAoZHN0S2V5ICYmIGlzSHRtbEF0dHJpYnV0ZUFuRXZlbnROYW1lKGRzdEtleSkpIHtcbiAgICAgICAgICBkc3RJZHgrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWNvcmQoZHN0S2V5ISwgbnVsbCk7XG4gICAgICAgICAgZHN0SWR4LS07XG4gICAgICAgIH1cbiAgICAgICAgZHN0S2V5ID0gZHN0SWR4IDwgZHN0TGVuZ3RoID8gZHN0QXR0cnNbZHN0SWR4KytdIDogbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoZHN0S2V5ID09IG51bGwpIHtcbiAgICAgICAgLy8gRGVzdGluYXRpb24gaGFzIG1vcmUga2V5cywgc28gd2UgbmVlZCB0byBpbnNlcnQgdGhlbSBmcm9tIHNvdXJjZS5cbiAgICAgICAgY29uc3QgaXNFdmVudCA9IGlzSnN4UHJvcGVydHlBbkV2ZW50TmFtZShzcmNLZXkpO1xuICAgICAgICBpZiAoaXNFdmVudCkge1xuICAgICAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGV2ZW50c1xuICAgICAgICAgIHBhdGNoRXZlbnREaXNwYXRjaCA9IHRydWU7XG4gICAgICAgICAgcmVjb3JkSnN4RXZlbnQoc3JjS2V5LCBzcmNBdHRyc1tzcmNJZHhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWNvcmQoc3JjS2V5ISwgc3JjQXR0cnNbc3JjSWR4XSk7XG4gICAgICAgIH1cbiAgICAgICAgc3JjSWR4Kys7XG4gICAgICAgIHNyY0tleSA9IHNyY0lkeCA8IHNyY0xlbmd0aCA/IHNyY0F0dHJzW3NyY0lkeCsrXSA6IG51bGw7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gaW5jcmVtZW50IGRzdElkeCB0b28sIGJlY2F1c2Ugd2UgYWRkZWQgZGVzdGluYXRpb24ga2V5IGFuZCB2YWx1ZSB0byB0aGUgVk5vZGVcbiAgICAgICAgLy8gYW5kIGRzdEF0dHJzIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBWTm9kZVxuICAgICAgICBkc3RJZHgrKztcbiAgICAgICAgZHN0S2V5ID0gZHN0SWR4IDwgZHN0TGVuZ3RoID8gZHN0QXR0cnNbZHN0SWR4KytdIDogbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoc3JjS2V5ID09IGRzdEtleSkge1xuICAgICAgICBjb25zdCBzcmNWYWx1ZSA9IHNyY0F0dHJzW3NyY0lkeCsrXTtcbiAgICAgICAgY29uc3QgZHN0VmFsdWUgPSBkc3RBdHRyc1tkc3RJZHgrK107XG4gICAgICAgIGlmIChzcmNWYWx1ZSAhPT0gZHN0VmFsdWUpIHtcbiAgICAgICAgICByZWNvcmQoZHN0S2V5LCBzcmNWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3JjS2V5ID0gc3JjSWR4IDwgc3JjTGVuZ3RoID8gc3JjQXR0cnNbc3JjSWR4KytdIDogbnVsbDtcbiAgICAgICAgZHN0S2V5ID0gZHN0SWR4IDwgZHN0TGVuZ3RoID8gZHN0QXR0cnNbZHN0SWR4KytdIDogbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoc3JjS2V5IDwgZHN0S2V5KSB7XG4gICAgICAgIC8vIERlc3RpbmF0aW9uIGlzIG1pc3NpbmcgdGhlIGtleSwgc28gd2UgbmVlZCB0byBpbnNlcnQgaXQuXG4gICAgICAgIGlmIChpc0pzeFByb3BlcnR5QW5FdmVudE5hbWUoc3JjS2V5KSkge1xuICAgICAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGV2ZW50c1xuICAgICAgICAgIHBhdGNoRXZlbnREaXNwYXRjaCA9IHRydWU7XG4gICAgICAgICAgcmVjb3JkSnN4RXZlbnQoc3JjS2V5LCBzcmNBdHRyc1tzcmNJZHhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWNvcmQoc3JjS2V5LCBzcmNBdHRyc1tzcmNJZHhdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNyY0lkeCsrO1xuICAgICAgICAvLyBhZHZhbmNlIHNyY1ZhbHVlXG4gICAgICAgIHNyY0tleSA9IHNyY0lkeCA8IHNyY0xlbmd0aCA/IHNyY0F0dHJzW3NyY0lkeCsrXSA6IG51bGw7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gaW5jcmVtZW50IGRzdElkeCB0b28sIGJlY2F1c2Ugd2UgYWRkZWQgZGVzdGluYXRpb24ga2V5IGFuZCB2YWx1ZSB0byB0aGUgVk5vZGVcbiAgICAgICAgLy8gYW5kIGRzdEF0dHJzIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBWTm9kZVxuICAgICAgICBkc3RJZHgrKztcbiAgICAgICAgZHN0TGVuZ3RoID0gZHN0QXR0cnMubGVuZ3RoO1xuICAgICAgICBkc3RLZXkgPSBkc3RJZHggPCBkc3RMZW5ndGggPyBkc3RBdHRyc1tkc3RJZHgrK10gOiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU291cmNlIGlzIG1pc3NpbmcgdGhlIGtleSwgc28gd2UgbmVlZCB0byByZW1vdmUgaXQgZnJvbSBkZXN0aW5hdGlvbi5cbiAgICAgICAgaWYgKGlzSHRtbEF0dHJpYnV0ZUFuRXZlbnROYW1lKGRzdEtleSkpIHtcbiAgICAgICAgICBwYXRjaEV2ZW50RGlzcGF0Y2ggPSB0cnVlO1xuICAgICAgICAgIGRzdElkeCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlY29yZChkc3RLZXkhLCBudWxsKTtcbiAgICAgICAgICBkc3RJZHgtLTtcbiAgICAgICAgfVxuICAgICAgICBkc3RLZXkgPSBkc3RJZHggPCBkc3RMZW5ndGggPyBkc3RBdHRyc1tkc3RJZHgrK10gOiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF0Y2hFdmVudERpc3BhdGNoO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJRd2lrTG9hZGVyRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB3aW5kb3cgPSBjb250YWluZXIuZG9jdW1lbnQuZGVmYXVsdFZpZXcgYXMgcVdpbmRvdyB8IG51bGw7XG4gICAgaWYgKHdpbmRvdykge1xuICAgICAgKHdpbmRvdy5xd2lrZXZlbnRzIHx8PSBbXSBhcyBhbnkpLnB1c2goZXZlbnROYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBjaGlsZCB3aXRoIHRoZSBnaXZlbiBrZXkuIElmIHRoZSBjaGlsZCBpcyBub3QgZm91bmQsIGl0XG4gICAqIHdpbGwgcmV0dXJuIG51bGwuXG4gICAqXG4gICAqIEFmdGVyIGZpbmRpbmcgdGhlIGZpcnN0IGNoaWxkIHdpdGggdGhlIGdpdmVuIGtleSB3ZSB3aWxsIGNyZWF0ZSBhIG1hcCBvZiBhbGwgdGhlIGtleWVkIHNpYmxpbmdzXG4gICAqIGFuZCBhbiBhcnJheSBvZiBub24ta2V5ZWQgc2libGluZ3MuIFRoaXMgaXMgZG9uZSB0byBvcHRpbWl6ZSB0aGUgc2VhcmNoIGZvciB0aGUgbmV4dCBjaGlsZCB3aXRoXG4gICAqIHRoZSBzcGVjaWZpZWQga2V5LlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbm9kZS5cbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIG5vZGUuXG4gICAqIEByZXR1cm5zIFRoZSBjaGlsZCB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gICAqL1xuICBmdW5jdGlvbiByZXRyaWV2ZUNoaWxkV2l0aEtleShcbiAgICBub2RlTmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgICBrZXk6IHN0cmluZyB8IG51bGxcbiAgKTogRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlIHwgbnVsbCB7XG4gICAgbGV0IHZOb2RlV2l0aEtleTogRWxlbWVudFZOb2RlIHwgVmlydHVhbFZOb2RlIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHZTaWJsaW5ncyA9PT0gbnVsbCkge1xuICAgICAgLy8gaXQgaXMgbm90IG1hdGVyaWFsaXplZDsgc28gbWF0ZXJpYWxpemUgaXQuXG4gICAgICB2U2libGluZ3MgPSBuZXcgTWFwPHN0cmluZywgVk5vZGU+KCk7XG4gICAgICB2U2libGluZ3NBcnJheSA9IFtdO1xuICAgICAgbGV0IHZOb2RlID0gdkN1cnJlbnQ7XG4gICAgICB3aGlsZSAodk5vZGUpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHZub2RlX2lzRWxlbWVudFZOb2RlKHZOb2RlKSA/IHZub2RlX2dldEVsZW1lbnROYW1lKHZOb2RlKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHZLZXkgPSBnZXRLZXkodk5vZGUpIHx8IGdldENvbXBvbmVudEhhc2godk5vZGUsIGNvbnRhaW5lci4kZ2V0T2JqZWN0QnlJZCQpO1xuICAgICAgICBpZiAodk5vZGVXaXRoS2V5ID09PSBudWxsICYmIHZLZXkgPT0ga2V5ICYmIG5hbWUgPT0gbm9kZU5hbWUpIHtcbiAgICAgICAgICB2Tm9kZVdpdGhLZXkgPSB2Tm9kZSBhcyBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHZLZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZTaWJsaW5nc0FycmF5LnB1c2gobmFtZSwgdk5vZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB3ZSBvbmx5IGFkZCB0aGUgZWxlbWVudHMgd2hpY2ggd2UgZGlkIG5vdCBmaW5kIHlldC5cbiAgICAgICAgICAgIHZTaWJsaW5ncy5zZXQobmFtZSArICc6JyArIHZLZXksIHZOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdk5vZGUgPSB2bm9kZV9nZXROZXh0U2libGluZyh2Tm9kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2U2libGluZ3NBcnJheSEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICBpZiAodlNpYmxpbmdzQXJyYXkhW2ldID09PSBub2RlTmFtZSkge1xuICAgICAgICAgICAgdk5vZGVXaXRoS2V5ID0gdlNpYmxpbmdzQXJyYXkhW2kgKyAxXSBhcyBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGU7XG4gICAgICAgICAgICB2U2libGluZ3NBcnJheSEuc3BsaWNlKGksIDIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2U2libGluZyA9IHZTaWJsaW5ncy5nZXQobm9kZU5hbWUgKyAnOicgKyBrZXkpO1xuICAgICAgICBpZiAodlNpYmxpbmcpIHtcbiAgICAgICAgICB2Tm9kZVdpdGhLZXkgPSB2U2libGluZyBhcyBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGU7XG4gICAgICAgICAgdlNpYmxpbmdzLmRlbGV0ZShub2RlTmFtZSArICc6JyArIGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZOb2RlV2l0aEtleTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdFZpcnR1YWwodHlwZTogVmlydHVhbFR5cGUsIGpzeEtleTogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmICh2Q3VycmVudCAmJiB2bm9kZV9pc1ZpcnR1YWxWTm9kZSh2Q3VycmVudCkgJiYgZ2V0S2V5KHZDdXJyZW50KSA9PT0ganN4S2V5ICYmICEhanN4S2V5KSB7XG4gICAgICAvLyBBbGwgaXMgZ29vZC5cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGpzeEtleSAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UgaGF2ZSBhIGtleSBmaW5kIGl0XG4gICAgICB2TmV3Tm9kZSA9IHJldHJpZXZlQ2hpbGRXaXRoS2V5KG51bGwsIGpzeEtleSk7XG4gICAgICBpZiAodk5ld05vZGUgIT0gbnVsbCkge1xuICAgICAgICAvLyBXZSBmb3VuZCBpdCwgbW92ZSBpdCB1cC5cbiAgICAgICAgdm5vZGVfaW5zZXJ0QmVmb3JlKFxuICAgICAgICAgIGpvdXJuYWwsXG4gICAgICAgICAgdlBhcmVudCBhcyBWaXJ0dWFsVk5vZGUsXG4gICAgICAgICAgdk5ld05vZGUsXG4gICAgICAgICAgdkN1cnJlbnQgJiYgZ2V0SW5zZXJ0QmVmb3JlKClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBEaWQgbm90IGZpbmQgaXQsIGluc2VydCBhIG5ldyBvbmUuXG4gICAgdm5vZGVfaW5zZXJ0QmVmb3JlKFxuICAgICAgam91cm5hbCxcbiAgICAgIHZQYXJlbnQgYXMgVmlydHVhbFZOb2RlLFxuICAgICAgKHZOZXdOb2RlID0gdm5vZGVfbmV3VmlydHVhbCgpKSxcbiAgICAgIHZDdXJyZW50ICYmIGdldEluc2VydEJlZm9yZSgpXG4gICAgKTtcbiAgICB2bm9kZV9zZXRQcm9wKHZOZXdOb2RlIGFzIFZpcnR1YWxWTm9kZSwgRUxFTUVOVF9LRVksIGpzeEtleSk7XG4gICAgaXNEZXYgJiYgdm5vZGVfc2V0UHJvcCgodk5ld05vZGUgfHwgdkN1cnJlbnQpIGFzIFZpcnR1YWxWTm9kZSwgREVCVUdfVFlQRSwgdHlwZSk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RDb21wb25lbnQoY29tcG9uZW50OiBGdW5jdGlvbikge1xuICAgIGNvbnN0IGNvbXBvbmVudE1ldGEgPSAoY29tcG9uZW50IGFzIGFueSlbU0VSSUFMSVpBQkxFX1NUQVRFXSBhcyBbUVJMSW50ZXJuYWw8T25SZW5kZXJGbjxhbnk+Pl07XG4gICAgbGV0IGhvc3QgPSAodk5ld05vZGUgfHwgdkN1cnJlbnQpIGFzIFZpcnR1YWxWTm9kZSB8IG51bGw7XG4gICAgY29uc3QganN4Tm9kZSA9IGpzeFZhbHVlIGFzIEpTWE5vZGVJbnRlcm5hbDtcbiAgICBpZiAoY29tcG9uZW50TWV0YSkge1xuICAgICAgY29uc3QganN4UHJvcHMgPSBqc3hOb2RlLnByb3BzO1xuICAgICAgLy8gUUNvbXBvbmVudFxuICAgICAgbGV0IHNob3VsZFJlbmRlciA9IGZhbHNlO1xuICAgICAgY29uc3QgW2NvbXBvbmVudFFSTF0gPSBjb21wb25lbnRNZXRhO1xuXG4gICAgICBjb25zdCBjb21wb25lbnRIYXNoID0gY29tcG9uZW50UVJMLiRoYXNoJDtcbiAgICAgIGNvbnN0IHZOb2RlQ29tcG9uZW50SGFzaCA9IGdldENvbXBvbmVudEhhc2goaG9zdCwgY29udGFpbmVyLiRnZXRPYmplY3RCeUlkJCk7XG5cbiAgICAgIGNvbnN0IGxvb2t1cEtleSA9IGpzeE5vZGUua2V5IHx8IGNvbXBvbmVudEhhc2g7XG4gICAgICBjb25zdCB2Tm9kZUxvb2t1cEtleSA9IGdldEtleShob3N0KSB8fCB2Tm9kZUNvbXBvbmVudEhhc2g7XG5cbiAgICAgIGNvbnN0IGxvb2t1cEtleXNBcmVFcXVhbCA9IGxvb2t1cEtleSA9PT0gdk5vZGVMb29rdXBLZXk7XG4gICAgICBjb25zdCBoYXNoZXNBcmVFcXVhbCA9IGNvbXBvbmVudEhhc2ggPT09IHZOb2RlQ29tcG9uZW50SGFzaDtcblxuICAgICAgaWYgKCFsb29rdXBLZXlzQXJlRXF1YWwpIHtcbiAgICAgICAgLy8gU2VlIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGlzIGNvbXBvbmVudCBsYXRlciBvbi5cbiAgICAgICAgdk5ld05vZGUgPSByZXRyaWV2ZUNoaWxkV2l0aEtleShudWxsLCBsb29rdXBLZXkpO1xuICAgICAgICBpZiAodk5ld05vZGUpIHtcbiAgICAgICAgICAvLyBXZSBmb3VuZCB0aGUgY29tcG9uZW50LCBtb3ZlIGl0IHVwLlxuICAgICAgICAgIHZub2RlX2luc2VydEJlZm9yZShqb3VybmFsLCB2UGFyZW50IGFzIFZpcnR1YWxWTm9kZSwgdk5ld05vZGUsIHZDdXJyZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXZSBkaWQgbm90IGZpbmQgdGhlIGNvbXBvbmVudCwgY3JlYXRlIGl0LlxuICAgICAgICAgIGluc2VydE5ld0NvbXBvbmVudChob3N0LCBjb21wb25lbnRRUkwsIGpzeFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBob3N0ID0gdk5ld05vZGUgYXMgVmlydHVhbFZOb2RlO1xuICAgICAgICBzaG91bGRSZW5kZXIgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICghaGFzaGVzQXJlRXF1YWwgfHwgIWpzeE5vZGUua2V5KSB7XG4gICAgICAgIGluc2VydE5ld0NvbXBvbmVudChob3N0LCBjb21wb25lbnRRUkwsIGpzeFByb3BzKTtcbiAgICAgICAgaG9zdCA9IHZOZXdOb2RlIGFzIFZpcnR1YWxWTm9kZTtcbiAgICAgICAgc2hvdWxkUmVuZGVyID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhvc3QpIHtcbiAgICAgICAgY29uc3Qgdk5vZGVQcm9wcyA9IHZub2RlX2dldFByb3A8YW55Pihob3N0LCBFTEVNRU5UX1BST1BTLCBjb250YWluZXIuJGdldE9iamVjdEJ5SWQkKTtcbiAgICAgICAgc2hvdWxkUmVuZGVyID0gc2hvdWxkUmVuZGVyIHx8IHByb3BzRGlmZmVyKGpzeFByb3BzLCB2Tm9kZVByb3BzKTtcbiAgICAgICAgaWYgKHNob3VsZFJlbmRlcikge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIE1hcmsgaG9zdCBhcyBub3QgZGVsZXRlZC4gVGhlIGhvc3QgY291bGQgaGF2ZSBiZWVuIG1hcmtlZCBhcyBkZWxldGVkIGlmIGl0IHRoZXJlIHdhcyBhXG4gICAgICAgICAgICogY2xlYW51cCBydW4uIE5vdyB3ZSBmb3VuZCBpdCBhbmQgd2FudCB0byByZXVzZSBpdCwgc28gd2UgbmVlZCB0byBtYXJrIGl0IGFzIG5vdFxuICAgICAgICAgICAqIGRlbGV0ZWQuXG4gICAgICAgICAgICovXG4gICAgICAgICAgaG9zdFtWTm9kZVByb3BzLmZsYWdzXSAmPSB+Vk5vZGVGbGFncy5EZWxldGVkO1xuICAgICAgICAgIGNvbnRhaW5lci4kc2NoZWR1bGVyJChDaG9yZVR5cGUuQ09NUE9ORU5ULCBob3N0LCBjb21wb25lbnRRUkwsIGpzeFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVzY2VuZENvbnRlbnRUb1Byb2plY3QoanN4Tm9kZS5jaGlsZHJlbiwgaG9zdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxvb2t1cEtleSA9IGpzeE5vZGUua2V5O1xuICAgICAgY29uc3Qgdk5vZGVMb29rdXBLZXkgPSBnZXRLZXkoaG9zdCk7XG4gICAgICBjb25zdCBsb29rdXBLZXlzQXJlRXF1YWwgPSBsb29rdXBLZXkgPT09IHZOb2RlTG9va3VwS2V5O1xuICAgICAgY29uc3Qgdk5vZGVDb21wb25lbnRIYXNoID0gZ2V0Q29tcG9uZW50SGFzaChob3N0LCBjb250YWluZXIuJGdldE9iamVjdEJ5SWQkKTtcblxuICAgICAgaWYgKCFsb29rdXBLZXlzQXJlRXF1YWwpIHtcbiAgICAgICAgLy8gU2VlIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGlzIGlubGluZSBjb21wb25lbnQgbGF0ZXIgb24uXG4gICAgICAgIHZOZXdOb2RlID0gcmV0cmlldmVDaGlsZFdpdGhLZXkobnVsbCwgbG9va3VwS2V5KTtcbiAgICAgICAgaWYgKHZOZXdOb2RlKSB7XG4gICAgICAgICAgLy8gV2UgZm91bmQgdGhlIGlubGluZSBjb21wb25lbnQsIG1vdmUgaXQgdXAuXG4gICAgICAgICAgdm5vZGVfaW5zZXJ0QmVmb3JlKGpvdXJuYWwsIHZQYXJlbnQgYXMgVmlydHVhbFZOb2RlLCB2TmV3Tm9kZSwgdkN1cnJlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFdlIGRpZCBub3QgZmluZCB0aGUgaW5saW5lIGNvbXBvbmVudCwgY3JlYXRlIGl0LlxuICAgICAgICAgIGluc2VydE5ld0lubGluZUNvbXBvbmVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGhvc3QgPSB2TmV3Tm9kZSBhcyBWaXJ0dWFsVk5vZGU7XG4gICAgICB9XG4gICAgICAvLyBpbmxpbmUgY29tcG9uZW50cyBkb24ndCBoYXZlIGNvbXBvbmVudCBoYXNoIC0gcTpyZW5kZXJGbiBwcm9wLCBzbyBpdCBzaG91bGQgYmUgbnVsbFxuICAgICAgZWxzZSBpZiAodk5vZGVDb21wb25lbnRIYXNoICE9IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0TmV3SW5saW5lQ29tcG9uZW50KCk7XG4gICAgICAgIGhvc3QgPSB2TmV3Tm9kZSBhcyBWaXJ0dWFsVk5vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChob3N0KSB7XG4gICAgICAgIGxldCBjb21wb25lbnRIb3N0OiBWTm9kZSB8IG51bGwgPSBob3N0O1xuICAgICAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IGNvbXBvbmVudCBob3N0IHdoaWNoIGhhcyBgT25SZW5kZXJgIHByb3AuIFRoaXMgaXMgbmVlZCBmb3Igc3Vic2NyaXB0aW9ucyBjb250ZXh0LlxuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgY29tcG9uZW50SG9zdCAmJlxuICAgICAgICAgICh2bm9kZV9pc1ZpcnR1YWxWTm9kZShjb21wb25lbnRIb3N0KVxuICAgICAgICAgICAgPyB2bm9kZV9nZXRQcm9wKGNvbXBvbmVudEhvc3QsIE9uUmVuZGVyUHJvcCwgbnVsbCkgPT09IG51bGxcbiAgICAgICAgICAgIDogdHJ1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29tcG9uZW50SG9zdCA9IHZub2RlX2dldFBhcmVudChjb21wb25lbnRIb3N0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGpzeE91dHB1dCA9IGV4ZWN1dGVDb21wb25lbnQoXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgKGNvbXBvbmVudEhvc3QgfHwgY29udGFpbmVyLnJvb3RWTm9kZSkgYXMgSG9zdEVsZW1lbnQsXG4gICAgICAgICAgY29tcG9uZW50IGFzIE9uUmVuZGVyRm48dW5rbm93bj4sXG4gICAgICAgICAganN4Tm9kZS5wcm9wc1xuICAgICAgICApO1xuXG4gICAgICAgIGFzeW5jUXVldWUucHVzaChqc3hPdXRwdXQsIGhvc3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydE5ld0NvbXBvbmVudChcbiAgICBob3N0OiBWTm9kZSB8IG51bGwsXG4gICAgY29tcG9uZW50UVJMOiBRUkxJbnRlcm5hbDxPblJlbmRlckZuPGFueT4+LFxuICAgIGpzeFByb3BzOiBQcm9wc1xuICApIHtcbiAgICBpZiAoaG9zdCkge1xuICAgICAgY2xlYXJBbGxFZmZlY3RzKGNvbnRhaW5lciwgaG9zdCk7XG4gICAgfVxuICAgIHZub2RlX2luc2VydEJlZm9yZShcbiAgICAgIGpvdXJuYWwsXG4gICAgICB2UGFyZW50IGFzIFZpcnR1YWxWTm9kZSxcbiAgICAgICh2TmV3Tm9kZSA9IHZub2RlX25ld1ZpcnR1YWwoKSksXG4gICAgICB2Q3VycmVudCAmJiBnZXRJbnNlcnRCZWZvcmUoKVxuICAgICk7XG4gICAgY29uc3QganN4Tm9kZSA9IGpzeFZhbHVlIGFzIEpTWE5vZGVJbnRlcm5hbDtcbiAgICBpc0RldiAmJiB2bm9kZV9zZXRQcm9wKHZOZXdOb2RlLCBERUJVR19UWVBFLCBWaXJ0dWFsVHlwZS5Db21wb25lbnQpO1xuICAgIGNvbnRhaW5lci5zZXRIb3N0UHJvcCh2TmV3Tm9kZSwgT25SZW5kZXJQcm9wLCBjb21wb25lbnRRUkwpO1xuICAgIGNvbnRhaW5lci5zZXRIb3N0UHJvcCh2TmV3Tm9kZSwgRUxFTUVOVF9QUk9QUywganN4UHJvcHMpO1xuICAgIGNvbnRhaW5lci5zZXRIb3N0UHJvcCh2TmV3Tm9kZSwgRUxFTUVOVF9LRVksIGpzeE5vZGUua2V5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydE5ld0lubGluZUNvbXBvbmVudCgpIHtcbiAgICB2bm9kZV9pbnNlcnRCZWZvcmUoXG4gICAgICBqb3VybmFsLFxuICAgICAgdlBhcmVudCBhcyBWaXJ0dWFsVk5vZGUsXG4gICAgICAodk5ld05vZGUgPSB2bm9kZV9uZXdWaXJ0dWFsKCkpLFxuICAgICAgdkN1cnJlbnQgJiYgZ2V0SW5zZXJ0QmVmb3JlKClcbiAgICApO1xuICAgIGNvbnN0IGpzeE5vZGUgPSBqc3hWYWx1ZSBhcyBKU1hOb2RlSW50ZXJuYWw7XG4gICAgaXNEZXYgJiYgdm5vZGVfc2V0UHJvcCh2TmV3Tm9kZSwgREVCVUdfVFlQRSwgVmlydHVhbFR5cGUuSW5saW5lQ29tcG9uZW50KTtcbiAgICB2bm9kZV9zZXRQcm9wKHZOZXdOb2RlLCBFTEVNRU5UX1BST1BTLCBqc3hOb2RlLnByb3BzKTtcbiAgICBpZiAoanN4Tm9kZS5rZXkpIHtcbiAgICAgIHZub2RlX3NldFByb3Aodk5ld05vZGUsIEVMRU1FTlRfS0VZLCBqc3hOb2RlLmtleSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXhwZWN0VGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICBpZiAodkN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB2bm9kZV9nZXRUeXBlKHZDdXJyZW50KTtcbiAgICAgIGlmICh0eXBlID09PSAzIC8qIFRleHQgKi8pIHtcbiAgICAgICAgaWYgKHRleHQgIT09IHZub2RlX2dldFRleHQodkN1cnJlbnQgYXMgVGV4dFZOb2RlKSkge1xuICAgICAgICAgIHZub2RlX3NldFRleHQoam91cm5hbCwgdkN1cnJlbnQgYXMgVGV4dFZOb2RlLCB0ZXh0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB2bm9kZV9pbnNlcnRCZWZvcmUoXG4gICAgICBqb3VybmFsLFxuICAgICAgdlBhcmVudCBhcyBWaXJ0dWFsVk5vZGUsXG4gICAgICAodk5ld05vZGUgPSB2bm9kZV9uZXdUZXh0KGNvbnRhaW5lci5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSwgdGV4dCkpLFxuICAgICAgdkN1cnJlbnRcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBrZXkgZnJvbSB0aGUgVk5vZGUuXG4gKlxuICogQHBhcmFtIHZOb2RlIC0gVk5vZGUgdG8gcmV0cmlldmUgdGhlIGtleSBmcm9tXG4gKiBAcmV0dXJucyBLZXlcbiAqL1xuZnVuY3Rpb24gZ2V0S2V5KHZOb2RlOiBWTm9kZSB8IG51bGwpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHZOb2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gdm5vZGVfZ2V0UHJvcDxzdHJpbmc+KHZOb2RlLCBFTEVNRU5UX0tFWSwgbnVsbCk7XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbXBvbmVudCBoYXNoIGZyb20gdGhlIFZOb2RlLlxuICpcbiAqIEBwYXJhbSB2Tm9kZSAtIFZOb2RlIHRvIHJldHJpZXZlIHRoZSBrZXkgZnJvbVxuICogQHBhcmFtIGdldE9iamVjdCAtIEZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBvYmplY3QgYnkgaWQgZm9yIFFDb21wb25lbnQgUVJMXG4gKiBAcmV0dXJucyBIYXNoXG4gKi9cbmZ1bmN0aW9uIGdldENvbXBvbmVudEhhc2godk5vZGU6IFZOb2RlIHwgbnVsbCwgZ2V0T2JqZWN0OiAoaWQ6IHN0cmluZykgPT4gYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh2Tm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcXJsID0gdm5vZGVfZ2V0UHJvcDxRUkxJbnRlcm5hbD4odk5vZGUsIE9uUmVuZGVyUHJvcCwgZ2V0T2JqZWN0KTtcbiAgcmV0dXJuIHFybCA/IHFybC4kaGFzaCQgOiBudWxsO1xufVxuXG4vKipcbiAqIE1hcmtlciBjbGFzcyBmb3IgSlNYIHByb2plY3Rpb24uXG4gKlxuICogQXNzdW1lIHlvdSBoYXZlIGNvbXBvbmVudCBsaWtlIHNvXG4gKlxuICogYGBgXG4gKiA8U29tZUNvbXBvbmVudD5cbiAqICAgc29tZS10ZXh0XG4gKiAgIDxzcGFuIHE6c2xvdD1cIm5hbWVcIj5zb21lIG1vcmUgdGV4dDwvc3Bhbj5cbiAqICAgbW9yZS10ZXh0XG4gKiA8L1NvbWVDb21wb25lbnQ+XG4gKiBgYGBcbiAqXG4gKiBCZWZvcmUgdGhlIGA8U29tZUNvbXBldGVudC8+YCBpcyBwcm9jZXNzZWQgaXRzIGNoaWxkcmVuIGFyZSB0cmFuc2Zvcm1lZCBpbnRvOlxuICpcbiAqIGBgYFxuICogICA8UHJvamVjdGlvbiBxOnNsb3Q9XCJcIj5cbiAqICAgICBzb21lLXRleHRcbiAqICAgICBtb3JlLXRleHRcbiAqICAgPC9Qcm9qZWN0aW9uPlxuICogICA8UHJvamVjdGlvbiBxOnNsb3Q9XCJuYW1lXCI+XG4gKiAgICAgPHNwYW4gcTpzbG90PVwibmFtZVwiPnNvbWUgbW9yZSB0ZXh0PC9zcGFuPlxuICogICA8L1Byb2plY3Rpb24+XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gUHJvamVjdGlvbigpIHt9XG5cbmZ1bmN0aW9uIHByb3BzRGlmZmVyKHNyYzogUmVjb3JkPHN0cmluZywgYW55PiwgZHN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYm9vbGVhbiB7XG4gIGlmICghc3JjIHx8ICFkc3QpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQgc3JjS2V5cyA9IHJlbW92ZVByb3BzS2V5cyhPYmplY3Qua2V5cyhzcmMpLCBbJ2NoaWxkcmVuJywgUUJhY2tSZWZzXSk7XG4gIGxldCBkc3RLZXlzID0gcmVtb3ZlUHJvcHNLZXlzKE9iamVjdC5rZXlzKGRzdCksIFsnY2hpbGRyZW4nLCBRQmFja1JlZnNdKTtcbiAgaWYgKHNyY0tleXMubGVuZ3RoICE9PSBkc3RLZXlzLmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNyY0tleXMgPSBzcmNLZXlzLnNvcnQoKTtcbiAgZHN0S2V5cyA9IGRzdEtleXMuc29ydCgpO1xuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBzcmNLZXlzLmxlbmd0aDsgaWR4KyspIHtcbiAgICBjb25zdCBzcmNLZXkgPSBzcmNLZXlzW2lkeF07XG4gICAgY29uc3QgZHN0S2V5ID0gZHN0S2V5c1tpZHhdO1xuICAgIGlmIChzcmNLZXkgIT09IGRzdEtleSB8fCBzcmNbc3JjS2V5XSAhPT0gZHN0W2RzdEtleV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVByb3BzS2V5cyhrZXlzOiBzdHJpbmdbXSwgcHJvcEtleXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBmb3IgKGxldCBpID0gcHJvcEtleXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBwcm9wS2V5ID0gcHJvcEtleXNbaV07XG4gICAgY29uc3QgcHJvcElkeCA9IGtleXMuaW5kZXhPZihwcm9wS2V5KTtcbiAgICBpZiAocHJvcElkeCAhPT0gLTEpIHtcbiAgICAgIGtleXMuc3BsaWNlKHByb3BJZHgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG4vKipcbiAqIElmIHZub2RlIGlzIHJlbW92ZWQsIGl0IGlzIG5lY2Vzc2FyeSB0byByZWxlYXNlIGFsbCBzdWJzY3JpcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdHJhdmVyc2UgdGhlIHZub2RlIHRyZWUgaW4gZGVwdGgtZmlyc3Qgb3JkZXIgYW5kIHJlbGVhc2UgYWxsIHN1YnNjcmlwdGlvbnMuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHRha2VzIGludG8gYWNjb3VudDpcbiAqXG4gKiAtIFByb2plY3Rpb24gbm9kZXMgYnkgbm90IHJlY3Vyc2luZyBpbnRvIHRoZW0uXG4gKiAtIENvbXBvbmVudCBub2RlcyBieSByZWN1cnNpbmcgaW50byB0aGUgY29tcG9uZW50IGNvbnRlbnQgbm9kZXMgKHdoaWNoIG1heSBiZSBwcm9qZWN0ZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW51cChjb250YWluZXI6IENsaWVudENvbnRhaW5lciwgdk5vZGU6IFZOb2RlKSB7XG4gIGxldCB2Q3Vyc29yOiBWTm9kZSB8IG51bGwgPSB2Tm9kZTtcbiAgLy8gRGVwdGggZmlyc3QgdHJhdmVyc2FsXG4gIGlmICh2bm9kZV9pc1RleHRWTm9kZSh2Tm9kZSkpIHtcbiAgICBtYXJrVk5vZGVBc0RlbGV0ZWQodkN1cnNvcik7XG4gICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIHN1YnNjcmlwdGlvbnMgb3IgY2hpbGRyZW47XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCB2UGFyZW50OiBWTm9kZSB8IG51bGwgPSBudWxsO1xuICBkbyB7XG4gICAgY29uc3QgdHlwZSA9IHZDdXJzb3JbVk5vZGVQcm9wcy5mbGFnc107XG4gICAgaWYgKHR5cGUgJiBWTm9kZUZsYWdzLkVMRU1FTlRfT1JfVklSVFVBTF9NQVNLKSB7XG4gICAgICBjbGVhckFsbEVmZmVjdHMoY29udGFpbmVyLCB2Q3Vyc29yKTtcbiAgICAgIG1hcmtWTm9kZUFzRGVsZXRlZCh2Q3Vyc29yKTtcbiAgICAgIC8vIE9ubHkgZWxlbWVudHMgYW5kIHZpcnR1YWwgbm9kZXMgbmVlZCB0byBiZSB0cmF2ZXJzZWQgZm9yIGNoaWxkcmVuXG4gICAgICBpZiAodHlwZSAmIFZOb2RlRmxhZ3MuVmlydHVhbCkge1xuICAgICAgICBjb25zdCBzZXEgPSBjb250YWluZXIuZ2V0SG9zdFByb3A8QXJyYXk8YW55Pj4odkN1cnNvciBhcyBWaXJ0dWFsVk5vZGUsIEVMRU1FTlRfU0VRKTtcbiAgICAgICAgaWYgKHNlcSkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBvYmogPSBzZXFbaV07XG4gICAgICAgICAgICBpZiAoaXNUYXNrKG9iaikpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGFzayA9IG9iajtcbiAgICAgICAgICAgICAgY2xlYXJBbGxFZmZlY3RzKGNvbnRhaW5lciwgdGFzayk7XG4gICAgICAgICAgICAgIGlmICh0YXNrLiRmbGFncyQgJiBUYXNrRmxhZ3MuVklTSUJMRV9UQVNLKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLiRzY2hlZHVsZXIkKENob3JlVHlwZS5DTEVBTlVQX1ZJU0lCTEUsIHRhc2spO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsZWFudXBUYXNrKHRhc2spO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzQ29tcG9uZW50ID1cbiAgICAgICAgdHlwZSAmIFZOb2RlRmxhZ3MuVmlydHVhbCAmJlxuICAgICAgICB2bm9kZV9nZXRQcm9wKHZDdXJzb3IgYXMgVmlydHVhbFZOb2RlLCBPblJlbmRlclByb3AsIG51bGwpICE9PSBudWxsO1xuICAgICAgaWYgKGlzQ29tcG9uZW50KSB7XG4gICAgICAgIC8vIFNQRUNJQUwgQ0FTRTogSWYgd2UgYXJlIGEgY29tcG9uZW50LCB3ZSBuZWVkIHRvIGRlc2NlbmQgaW50byB0aGUgcHJvamVjdGVkIGNvbnRlbnQgYW5kIHJlbGVhc2UgdGhlIGNvbnRlbnQuXG4gICAgICAgIGNvbnN0IGF0dHJzID0gdm5vZGVfZ2V0UHJvcHModkN1cnNvcik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpID0gaSArIDIpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBhdHRyc1tpXSBhcyBzdHJpbmc7XG4gICAgICAgICAgaWYgKGlzU2xvdFByb3Aoa2V5KSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhdHRyc1tpICsgMV07XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgYXR0cnNbaSArIDFdID0gbnVsbDsgLy8gcHJldmVudCBpbmZpbml0ZSBsb29wXG4gICAgICAgICAgICAgIGNvbnN0IHByb2plY3Rpb24gPVxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgID8gdm5vZGVfbG9jYXRlKGNvbnRhaW5lci5yb290Vk5vZGUsIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgOiAodmFsdWUgYXMgdW5rbm93biBhcyBWTm9kZSk7XG4gICAgICAgICAgICAgIGxldCBwcm9qZWN0aW9uQ2hpbGQgPSB2bm9kZV9nZXRGaXJzdENoaWxkKHByb2plY3Rpb24pO1xuICAgICAgICAgICAgICB3aGlsZSAocHJvamVjdGlvbkNoaWxkKSB7XG4gICAgICAgICAgICAgICAgY2xlYW51cChjb250YWluZXIsIHByb2plY3Rpb25DaGlsZCk7XG4gICAgICAgICAgICAgICAgcHJvamVjdGlvbkNoaWxkID0gdm5vZGVfZ2V0TmV4dFNpYmxpbmcocHJvamVjdGlvbkNoaWxkKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNsZWFudXBTdGFsZVVuY2xhaW1lZFByb2plY3Rpb24oY29udGFpbmVyLiRqb3VybmFsJCwgcHJvamVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzUHJvamVjdGlvbiA9IHZub2RlX2lzUHJvamVjdGlvbih2Q3Vyc29yKTtcbiAgICAgIC8vIERlc2NlbmQgaW50byBjaGlsZHJlblxuICAgICAgaWYgKCFpc1Byb2plY3Rpb24pIHtcbiAgICAgICAgLy8gT25seSBpZiBpdCBpcyBub3QgYSBwcm9qZWN0aW9uXG4gICAgICAgIGNvbnN0IHZGaXJzdENoaWxkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZCh2Q3Vyc29yKTtcbiAgICAgICAgaWYgKHZGaXJzdENoaWxkKSB7XG4gICAgICAgICAgdkN1cnNvciA9IHZGaXJzdENoaWxkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHZDdXJzb3IgPT09IHZOb2RlKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBpdCBpcyBhIHByb2plY3Rpb24gYW5kIHdlIGFyZSBhdCB0aGUgcm9vdCwgdGhlbiB3ZSBzaG91bGQgb25seSB3YWxrIHRoZSBjaGlsZHJlbiB0b1xuICAgICAgICAgKiBtYXRlcmlhbGl6ZSB0aGUgcHJvamVjdGlvbiBjb250ZW50LiBUaGlzIGlzIGJlY2F1c2Ugd2UgY291bGQgaGF2ZSByZWZlcmVuY2VzIGluIHRoZSB2bm9kZVxuICAgICAgICAgKiByZWZzIG1hcCB3aGljaCBuZWVkIHRvIGJlIG1hdGVyaWFsaXplZCBiZWZvcmUgY2xlYW51cC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IHZGaXJzdENoaWxkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZCh2Q3Vyc29yKTtcbiAgICAgICAgaWYgKHZGaXJzdENoaWxkKSB7XG4gICAgICAgICAgdm5vZGVfd2Fsa1ZOb2RlKHZGaXJzdENoaWxkKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgJiBWTm9kZUZsYWdzLlRleHQpIHtcbiAgICAgIG1hcmtWTm9kZUFzRGVsZXRlZCh2Q3Vyc29yKTtcbiAgICB9XG4gICAgLy8gT3V0IG9mIGNoaWxkcmVuXG4gICAgaWYgKHZDdXJzb3IgPT09IHZOb2RlKSB7XG4gICAgICAvLyB3ZSBhcmUgd2hlcmUgd2Ugc3RhcnRlZCwgdGhpcyBtZWFucyB0aGF0IHZOb2RlIGhhcyBubyBjaGlsZHJlbiwgc28gd2UgYXJlIGRvbmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE91dCBvZiBjaGlsZHJlbiwgZ28gdG8gbmV4dCBzaWJsaW5nXG4gICAgY29uc3Qgdk5leHRTaWJsaW5nID0gdm5vZGVfZ2V0TmV4dFNpYmxpbmcodkN1cnNvcik7XG4gICAgaWYgKHZOZXh0U2libGluZykge1xuICAgICAgdkN1cnNvciA9IHZOZXh0U2libGluZztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIE91dCBvZiBzaWJsaW5ncywgZ28gdG8gcGFyZW50XG4gICAgdlBhcmVudCA9IHZub2RlX2dldFBhcmVudCh2Q3Vyc29yKTtcbiAgICB3aGlsZSAodlBhcmVudCkge1xuICAgICAgaWYgKHZQYXJlbnQgPT09IHZOb2RlKSB7XG4gICAgICAgIC8vIFdlIGFyZSBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQsIHdlIGFyZSBkb25lLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB2TmV4dFBhcmVudFNpYmxpbmcgPSB2bm9kZV9nZXROZXh0U2libGluZyh2UGFyZW50KTtcbiAgICAgIGlmICh2TmV4dFBhcmVudFNpYmxpbmcpIHtcbiAgICAgICAgdkN1cnNvciA9IHZOZXh0UGFyZW50U2libGluZztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB2UGFyZW50ID0gdm5vZGVfZ2V0UGFyZW50KHZQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAodlBhcmVudCA9PSBudWxsKSB7XG4gICAgICAvLyBXZSBhcmUgZG9uZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUgYXMgYm9vbGVhbik7XG59XG5cbmZ1bmN0aW9uIGNsZWFudXBTdGFsZVVuY2xhaW1lZFByb2plY3Rpb24oam91cm5hbDogVk5vZGVKb3VybmFsLCBwcm9qZWN0aW9uOiBWTm9kZSkge1xuICAvLyB3ZSBhcmUgcmVtb3ZpbmcgYSBub2RlIHdoZXJlIHRoZSBwcm9qZWN0aW9uIHdvdWxkIGdvIGFmdGVyIHNsb3QgcmVuZGVyLlxuICAvLyBUaGlzIGlzIG5vdCBuZWVkZWQsIHNvIHdlIG5lZWQgdG8gY2xlYW51cCBzdGlsbCB1bmNsYWltZWQgcHJvamVjdGlvblxuICBjb25zdCBwcm9qZWN0aW9uUGFyZW50ID0gdm5vZGVfZ2V0UGFyZW50KHByb2plY3Rpb24pO1xuICBpZiAocHJvamVjdGlvblBhcmVudCkge1xuICAgIGNvbnN0IHByb2plY3Rpb25QYXJlbnRUeXBlID0gcHJvamVjdGlvblBhcmVudFtWTm9kZVByb3BzLmZsYWdzXTtcbiAgICBpZiAoXG4gICAgICBwcm9qZWN0aW9uUGFyZW50VHlwZSAmIFZOb2RlRmxhZ3MuRWxlbWVudCAmJlxuICAgICAgdm5vZGVfZ2V0RWxlbWVudE5hbWUocHJvamVjdGlvblBhcmVudCBhcyBFbGVtZW50Vk5vZGUpID09PSBRVGVtcGxhdGVcbiAgICApIHtcbiAgICAgIC8vIGlmIHBhcmVudCBpcyB0aGUgcTp0ZW1wbGF0ZSBlbGVtZW50IHRoZW4gcHJvamVjdGlvbiBpcyBzdGlsbCB1bmNsYWltZWQgLSByZW1vdmUgaXRcbiAgICAgIHZub2RlX3JlbW92ZShqb3VybmFsLCBwcm9qZWN0aW9uUGFyZW50LCBwcm9qZWN0aW9uLCB0cnVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1ZOb2RlQXNEZWxldGVkKHZDdXJzb3I6IFZOb2RlKSB7XG4gIC8qKlxuICAgKiBNYXJrcyB2Q3Vyc29yIGFzIGRlbGV0ZWQuIFdlIG5lZWQgdG8gZG8gdGhpcyB0byBwcmV2ZW50IGNob3JlcyBmcm9tIHJ1bm5pbmcgYWZ0ZXIgdGhlIHZub2RlIGlzXG4gICAqIHJlbW92ZWQuIChmb3IgZXhhbXBsZSBzaWduYWwgc3Vic2NyaXB0aW9ucylcbiAgICovXG5cbiAgdkN1cnNvcltWTm9kZVByb3BzLmZsYWdzXSB8PSBWTm9kZUZsYWdzLkRlbGV0ZWQ7XG59XG5cbi8qKlxuICogVGhpcyBtYXJrcyB0aGUgcHJvcGVydHkgYXMgaW1tdXRhYmxlLiBJdCBpcyBuZWVkZWQgZm9yIHRoZSBRUkxzIHNvIHRoYXQgUXdpa0xvYWRlciBjYW4gZ2V0IGEgaG9sZFxuICogb2YgdGhlbS4gVGhpcyBjaGFyYWN0ZXIgbXVzdCBiZSBgOmAgc28gdGhhdCB0aGUgYHZub2RlX2dldEF0dHJgIGNhbiBpZ25vcmUgdGhlbS5cbiAqL1xuZXhwb3J0IGNvbnN0IEhBTkRMRVJfUFJFRklYID0gJzonO1xubGV0IGNvdW50ID0gMDtcbiJdfQ==","import { dollar } from './qrl.public';\n// <docs markdown=\"../../readme.md#implicit$FirstArg\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../../readme.md#implicit$FirstArg instead and run `pnpm docs.sync`)\n/**\n * Create a `____$(...)` convenience method from `___(...)`.\n *\n * It is very common for functions to take a lazy-loadable resource as a first argument. For this\n * reason, the Qwik Optimizer automatically extracts the first argument from any function which ends\n * in `$`.\n *\n * This means that `foo$(arg0)` and `foo($(arg0))` are equivalent with respect to Qwik Optimizer.\n * The former is just a shorthand for the latter.\n *\n * For example, these function calls are equivalent:\n *\n * - `component$(() => {...})` is same as `component($(() => {...}))`\n *\n * ```tsx\n * export function myApi(callback: QRL<() => void>): void {\n *   // ...\n * }\n *\n * export const myApi$ = implicit$FirstArg(myApi);\n * // type of myApi$: (callback: () => void): void\n *\n * // can be used as:\n * myApi$(() => console.log('callback'));\n *\n * // will be transpiled to:\n * // FILE: <current file>\n * myApi(qrl('./chunk-abc.js', 'callback'));\n *\n * // FILE: chunk-abc.js\n * export const callback = () => console.log('callback');\n * ```\n *\n * @param fn - A function that should have its first argument automatically `$`.\n * @public\n */\n// </docs>\nexport const implicit$FirstArg = (fn) => {\n    return function (first, ...rest) {\n        return fn.call(null, dollar(first), ...rest);\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wbGljaXRfZG9sbGFyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9xcmwvaW1wbGljaXRfZG9sbGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVksTUFBTSxjQUFjLENBQUM7QUFFaEQsc0RBQXNEO0FBQ3RELHlDQUF5QztBQUN6Qyw0RUFBNEU7QUFDNUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNHO0FBQ0gsVUFBVTtBQUNWLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLEVBQTJDLEVBQ0wsRUFBRTtJQUN4QyxPQUFPLFVBQVUsS0FBWSxFQUFFLEdBQUcsSUFBVTtRQUMxQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRvbGxhciwgdHlwZSBRUkwgfSBmcm9tICcuL3FybC5wdWJsaWMnO1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uLy4uL3JlYWRtZS5tZCNpbXBsaWNpdCRGaXJzdEFyZ1wiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uLy4uL3JlYWRtZS5tZCNpbXBsaWNpdCRGaXJzdEFyZyBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogQ3JlYXRlIGEgYF9fX18kKC4uLilgIGNvbnZlbmllbmNlIG1ldGhvZCBmcm9tIGBfX18oLi4uKWAuXG4gKlxuICogSXQgaXMgdmVyeSBjb21tb24gZm9yIGZ1bmN0aW9ucyB0byB0YWtlIGEgbGF6eS1sb2FkYWJsZSByZXNvdXJjZSBhcyBhIGZpcnN0IGFyZ3VtZW50LiBGb3IgdGhpc1xuICogcmVhc29uLCB0aGUgUXdpayBPcHRpbWl6ZXIgYXV0b21hdGljYWxseSBleHRyYWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgZnJvbSBhbnkgZnVuY3Rpb24gd2hpY2ggZW5kc1xuICogaW4gYCRgLlxuICpcbiAqIFRoaXMgbWVhbnMgdGhhdCBgZm9vJChhcmcwKWAgYW5kIGBmb28oJChhcmcwKSlgIGFyZSBlcXVpdmFsZW50IHdpdGggcmVzcGVjdCB0byBRd2lrIE9wdGltaXplci5cbiAqIFRoZSBmb3JtZXIgaXMganVzdCBhIHNob3J0aGFuZCBmb3IgdGhlIGxhdHRlci5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgdGhlc2UgZnVuY3Rpb24gY2FsbHMgYXJlIGVxdWl2YWxlbnQ6XG4gKlxuICogLSBgY29tcG9uZW50JCgoKSA9PiB7Li4ufSlgIGlzIHNhbWUgYXMgYGNvbXBvbmVudCgkKCgpID0+IHsuLi59KSlgXG4gKlxuICogYGBgdHN4XG4gKiBleHBvcnQgZnVuY3Rpb24gbXlBcGkoY2FsbGJhY2s6IFFSTDwoKSA9PiB2b2lkPik6IHZvaWQge1xuICogICAvLyAuLi5cbiAqIH1cbiAqXG4gKiBleHBvcnQgY29uc3QgbXlBcGkkID0gaW1wbGljaXQkRmlyc3RBcmcobXlBcGkpO1xuICogLy8gdHlwZSBvZiBteUFwaSQ6IChjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWRcbiAqXG4gKiAvLyBjYW4gYmUgdXNlZCBhczpcbiAqIG15QXBpJCgoKSA9PiBjb25zb2xlLmxvZygnY2FsbGJhY2snKSk7XG4gKlxuICogLy8gd2lsbCBiZSB0cmFuc3BpbGVkIHRvOlxuICogLy8gRklMRTogPGN1cnJlbnQgZmlsZT5cbiAqIG15QXBpKHFybCgnLi9jaHVuay1hYmMuanMnLCAnY2FsbGJhY2snKSk7XG4gKlxuICogLy8gRklMRTogY2h1bmstYWJjLmpzXG4gKiBleHBvcnQgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiBjb25zb2xlLmxvZygnY2FsbGJhY2snKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBmbiAtIEEgZnVuY3Rpb24gdGhhdCBzaG91bGQgaGF2ZSBpdHMgZmlyc3QgYXJndW1lbnQgYXV0b21hdGljYWxseSBgJGAuXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCBpbXBsaWNpdCRGaXJzdEFyZyA9IDxGSVJTVCwgUkVTVCBleHRlbmRzIGFueVtdLCBSRVQ+KFxuICBmbjogKHFybDogUVJMPEZJUlNUPiwgLi4ucmVzdDogUkVTVCkgPT4gUkVUXG4pOiAoKHFybDogRklSU1QsIC4uLnJlc3Q6IFJFU1QpID0+IFJFVCkgPT4ge1xuICByZXR1cm4gZnVuY3Rpb24gKGZpcnN0OiBGSVJTVCwgLi4ucmVzdDogUkVTVCk6IFJFVCB7XG4gICAgcmV0dXJuIGZuLmNhbGwobnVsbCwgZG9sbGFyKGZpcnN0KSwgLi4ucmVzdCk7XG4gIH07XG59O1xuIl19","import { ComputedSignalImpl, SerializerSignalImpl, SignalImpl, throwIfQRLNotResolved, } from './signal';\n/** @internal */\nexport const createSignal = (value) => {\n    return new SignalImpl(null, value);\n};\n/** @internal */\nexport const createComputedSignal = (qrl) => {\n    throwIfQRLNotResolved(qrl);\n    return new ComputedSignalImpl(null, qrl);\n};\n/** @internal */\nexport const createSerializerSignal = (arg) => {\n    throwIfQRLNotResolved(arg);\n    return new SerializerSignalImpl(null, arg);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaWduYWwvc2lnbmFsLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YscUJBQXFCLEdBRXRCLE1BQU0sVUFBVSxDQUFDO0FBR2xCLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBSSxLQUFTLEVBQWEsRUFBRTtJQUN0RCxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxLQUFVLENBQWMsQ0FBQztBQUN2RCxDQUFDLENBQUM7QUFFRixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBSSxHQUFpQixFQUF5QixFQUFFO0lBQ2xGLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE9BQU8sSUFBSSxrQkFBa0IsQ0FBSSxJQUFJLEVBQUUsR0FBMkIsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUVGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxHQUlFLEVBQ0YsRUFBRTtJQUNGLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE9BQU8sSUFBSSxvQkFBb0IsQ0FBTyxJQUFJLEVBQUUsR0FBOEMsQ0FBQyxDQUFDO0FBQzlGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUVJMSW50ZXJuYWwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLnB1YmxpYyc7XG5pbXBvcnQge1xuICBDb21wdXRlZFNpZ25hbEltcGwsXG4gIFNlcmlhbGl6ZXJTaWduYWxJbXBsLFxuICBTaWduYWxJbXBsLFxuICB0aHJvd0lmUVJMTm90UmVzb2x2ZWQsXG4gIHR5cGUgU2VyaWFsaXplckFyZyxcbn0gZnJvbSAnLi9zaWduYWwnO1xuaW1wb3J0IHR5cGUgeyBTaWduYWwgfSBmcm9tICcuL3NpZ25hbC5wdWJsaWMnO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2lnbmFsID0gPFQ+KHZhbHVlPzogVCk6IFNpZ25hbDxUPiA9PiB7XG4gIHJldHVybiBuZXcgU2lnbmFsSW1wbChudWxsLCB2YWx1ZSBhcyBUKSBhcyBTaWduYWw8VD47XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgY3JlYXRlQ29tcHV0ZWRTaWduYWwgPSA8VD4ocXJsOiBRUkw8KCkgPT4gVD4pOiBDb21wdXRlZFNpZ25hbEltcGw8VD4gPT4ge1xuICB0aHJvd0lmUVJMTm90UmVzb2x2ZWQocXJsKTtcbiAgcmV0dXJuIG5ldyBDb21wdXRlZFNpZ25hbEltcGw8VD4obnVsbCwgcXJsIGFzIFFSTEludGVybmFsPCgpID0+IFQ+KTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTZXJpYWxpemVyU2lnbmFsID0gPFQsIFM+KFxuICBhcmc6IFFSTDx7XG4gICAgc2VyaWFsaXplOiAoZGF0YTogUyB8IHVuZGVmaW5lZCkgPT4gVDtcbiAgICBkZXNlcmlhbGl6ZTogKGRhdGE6IFQpID0+IFM7XG4gICAgaW5pdGlhbD86IFM7XG4gIH0+XG4pID0+IHtcbiAgdGhyb3dJZlFSTE5vdFJlc29sdmVkKGFyZyk7XG4gIHJldHVybiBuZXcgU2VyaWFsaXplclNpZ25hbEltcGw8VCwgUz4obnVsbCwgYXJnIGFzIGFueSBhcyBRUkxJbnRlcm5hbDxTZXJpYWxpemVyQXJnPFQsIFM+Pik7XG59O1xuIl19","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { createSignal as _createSignal, createComputedSignal as createComputedQrl, createSerializerSignal as createSerializerQrl, } from './signal-api';\nexport { isSignal } from './signal';\n/**\n * Creates a Signal with the given value. If no value is given, the signal is created with\n * `undefined`.\n *\n * @public\n */\nexport const createSignal = _createSignal;\n/**\n * Create a computed signal which is calculated from the given QRL. A computed signal is a signal\n * which is calculated from other signals. When the signals change, the computed signal is\n * recalculated.\n *\n * The QRL must be a function which returns the value of the signal. The function must not have side\n * effects, and it must be synchronous.\n *\n * If you need the function to be async, use `useSignal` and `useTask$` instead.\n *\n * @public\n */\nexport const createComputed$ = /*#__PURE__*/ implicit$FirstArg(createComputedQrl);\nexport { createComputedQrl };\n/**\n * Create a signal that holds a custom serializable value. See {@link useSerializer$} for more\n * details.\n *\n * @public\n */\nexport const createSerializer$ = implicit$FirstArg(createSerializerQrl);\nexport { createSerializerQrl };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnB1YmxpYy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaWduYWwvc2lnbmFsLnB1YmxpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQ0wsWUFBWSxJQUFJLGFBQWEsRUFDN0Isb0JBQW9CLElBQUksaUJBQWlCLEVBQ3pDLHNCQUFzQixJQUFJLG1CQUFtQixHQUM5QyxNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBZ0RwQzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FHckIsYUFBYSxDQUFDO0FBRWxCOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUU4QixhQUFhLENBQUMsaUJBQWlCLENBQ3ZGLGlCQUF3QixDQUN6QixDQUFDO0FBQ0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUM7QUFFN0I7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FFOEIsaUJBQWlCLENBQzNFLG1CQUEwQixDQUMzQixDQUFDO0FBQ0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbXBsaWNpdCRGaXJzdEFyZyB9IGZyb20gJy4uL3NoYXJlZC9xcmwvaW1wbGljaXRfZG9sbGFyJztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXplckFyZyB9IGZyb20gJy4vc2lnbmFsJztcbmltcG9ydCB7XG4gIGNyZWF0ZVNpZ25hbCBhcyBfY3JlYXRlU2lnbmFsLFxuICBjcmVhdGVDb21wdXRlZFNpZ25hbCBhcyBjcmVhdGVDb21wdXRlZFFybCxcbiAgY3JlYXRlU2VyaWFsaXplclNpZ25hbCBhcyBjcmVhdGVTZXJpYWxpemVyUXJsLFxufSBmcm9tICcuL3NpZ25hbC1hcGknO1xuXG5leHBvcnQgeyBpc1NpZ25hbCB9IGZyb20gJy4vc2lnbmFsJztcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZG9ubHlTaWduYWw8VCA9IHVua25vd24+IHtcbiAgcmVhZG9ubHkgdmFsdWU6IFQ7XG59XG5cbi8qKlxuICogQSBzaWduYWwgaXMgYSByZWFjdGl2ZSB2YWx1ZSB3aGljaCBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbi4gV2hlbiB0aGUgc2lnbmFsIGlzIHdyaXR0ZW4sIGFsbCB0YXNrc1xuICogd2hpY2ggYXJlIHRyYWNraW5nIHRoZSBzaWduYWwgd2lsbCBiZSByZS1ydW4gYW5kIGFsbCBjb21wb25lbnRzIHRoYXQgcmVhZCB0aGUgc2lnbmFsIHdpbGwgYmVcbiAqIHJlLXJlbmRlcmVkLlxuICpcbiAqIEZ1cnRoZXJtb3JlLCB3aGVuIGEgc2lnbmFsIHZhbHVlIGlzIHBhc3NlZCBhcyBhIHByb3AgdG8gYSBjb21wb25lbnQsIHRoZSBvcHRpbWl6ZXIgd2lsbFxuICogYXV0b21hdGljYWxseSBmb3J3YXJkIHRoZSBzaWduYWwuIFRoaXMgbWVhbnMgdGhhdCBgcmV0dXJuIDxkaXYgdGl0bGU9e3NpZ25hbC52YWx1ZX0+aGk8L2Rpdj5gXG4gKiB3aWxsIHVwZGF0ZSB0aGUgYHRpdGxlYCBhdHRyaWJ1dGUgd2hlbiB0aGUgc2lnbmFsIGNoYW5nZXMgd2l0aG91dCBoYXZpbmcgdG8gcmUtcmVuZGVyIHRoZVxuICogY29tcG9uZW50LlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduYWw8VCA9IGFueT4gZXh0ZW5kcyBSZWFkb25seVNpZ25hbDxUPiB7XG4gIHZhbHVlOiBUO1xufVxuXG4vKipcbiAqIEEgY29tcHV0ZWQgc2lnbmFsIGlzIGEgc2lnbmFsIHdoaWNoIGlzIGNhbGN1bGF0ZWQgZnJvbSBvdGhlciBzaWduYWxzLiBXaGVuIHRoZSBzaWduYWxzIGNoYW5nZSxcbiAqIHRoZSBjb21wdXRlZCBzaWduYWwgaXMgcmVjYWxjdWxhdGVkLCBhbmQgaWYgdGhlIHJlc3VsdCBjaGFuZ2VkLCBhbGwgdGFza3Mgd2hpY2ggYXJlIHRyYWNraW5nIHRoZVxuICogc2lnbmFsIHdpbGwgYmUgcmUtcnVuIGFuZCBhbGwgY29tcG9uZW50cyB0aGF0IHJlYWQgdGhlIHNpZ25hbCB3aWxsIGJlIHJlLXJlbmRlcmVkLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlZFNpZ25hbDxUPiBleHRlbmRzIFJlYWRvbmx5U2lnbmFsPFQ+IHtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIHRvIGZvcmNlIHJlY2FsY3VsYXRpb24gYW5kIHJ1bm5pbmcgc3Vic2NyaWJlcnMsIGZvciBleGFtcGxlIHdoZW4gdGhlIGNhbGN1bGF0ZWQgdmFsdWVcbiAgICogbXV0YXRlcyBidXQgcmVtYWlucyB0aGUgc2FtZSBvYmplY3QuIFVzZWZ1bCBmb3IgdGhpcmQtcGFydHkgbGlicmFyaWVzLlxuICAgKi9cbiAgZm9yY2UoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBIHNlcmlhbGl6ZXIgc2lnbmFsIGhvbGRzIGEgY3VzdG9tIHNlcmlhbGl6YWJsZSB2YWx1ZS4gU2VlIGB1c2VTZXJpYWxpemVyJGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplclNpZ25hbDxUPiBleHRlbmRzIENvbXB1dGVkU2lnbmFsPFQ+IHtcbiAgLyoqIEZha2UgcHJvcGVydHkgdG8gbWFrZSB0aGUgc2VyaWFsaXphdGlvbiBsaW50ZXIgaGFwcHkgKi9cbiAgX19ub19zZXJpYWxpemVfXzogdHJ1ZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU2lnbmFsIHdpdGggdGhlIGdpdmVuIHZhbHVlLiBJZiBubyB2YWx1ZSBpcyBnaXZlbiwgdGhlIHNpZ25hbCBpcyBjcmVhdGVkIHdpdGhcbiAqIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNpZ25hbDoge1xuICA8VD4oKTogU2lnbmFsPFQgfCB1bmRlZmluZWQ+O1xuICA8VD4odmFsdWU6IFQpOiBTaWduYWw8VD47XG59ID0gX2NyZWF0ZVNpZ25hbDtcblxuLyoqXG4gKiBDcmVhdGUgYSBjb21wdXRlZCBzaWduYWwgd2hpY2ggaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBnaXZlbiBRUkwuIEEgY29tcHV0ZWQgc2lnbmFsIGlzIGEgc2lnbmFsXG4gKiB3aGljaCBpcyBjYWxjdWxhdGVkIGZyb20gb3RoZXIgc2lnbmFscy4gV2hlbiB0aGUgc2lnbmFscyBjaGFuZ2UsIHRoZSBjb21wdXRlZCBzaWduYWwgaXNcbiAqIHJlY2FsY3VsYXRlZC5cbiAqXG4gKiBUaGUgUVJMIG11c3QgYmUgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc2lnbmFsLiBUaGUgZnVuY3Rpb24gbXVzdCBub3QgaGF2ZSBzaWRlXG4gKiBlZmZlY3RzLCBhbmQgaXQgbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0aGUgZnVuY3Rpb24gdG8gYmUgYXN5bmMsIHVzZSBgdXNlU2lnbmFsYCBhbmQgYHVzZVRhc2skYCBpbnN0ZWFkLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbXB1dGVkJDogPFQ+KFxuICBxcmw6ICgpID0+IFRcbikgPT4gVCBleHRlbmRzIFByb21pc2U8YW55PiA/IG5ldmVyIDogQ29tcHV0ZWRTaWduYWw8VD4gPSAvKiNfX1BVUkVfXyovIGltcGxpY2l0JEZpcnN0QXJnKFxuICBjcmVhdGVDb21wdXRlZFFybCBhcyBhbnlcbik7XG5leHBvcnQgeyBjcmVhdGVDb21wdXRlZFFybCB9O1xuXG4vKipcbiAqIENyZWF0ZSBhIHNpZ25hbCB0aGF0IGhvbGRzIGEgY3VzdG9tIHNlcmlhbGl6YWJsZSB2YWx1ZS4gU2VlIHtAbGluayB1c2VTZXJpYWxpemVyJH0gZm9yIG1vcmVcbiAqIGRldGFpbHMuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2VyaWFsaXplciQ6IDxULCBTPihcbiAgYXJnOiBTZXJpYWxpemVyQXJnPFQsIFM+XG4pID0+IFQgZXh0ZW5kcyBQcm9taXNlPGFueT4gPyBuZXZlciA6IFNlcmlhbGl6ZXJTaWduYWw8VD4gPSBpbXBsaWNpdCRGaXJzdEFyZyhcbiAgY3JlYXRlU2VyaWFsaXplclFybCBhcyBhbnlcbik7XG5leHBvcnQgeyBjcmVhdGVTZXJpYWxpemVyUXJsIH07XG4iXX0=","import { isServerPlatform } from '../shared/platform/platform';\nimport { assertQrl } from '../shared/qrl/qrl-utils';\nimport { Fragment, _jsxSorted } from '../shared/jsx/jsx-runtime';\nimport { invoke, newInvokeContext, untrack, useBindInvokeContext } from './use-core';\nimport { Task, cleanupTask } from './use-task';\nimport { delay, isPromise, safeCall } from '../shared/utils/promises';\nimport { isFunction, isObject } from '../shared/utils/types';\nimport { createStore, getStoreTarget, unwrapStore } from '../signal/store';\nimport { useSequentialScope } from './use-sequential-scope';\nimport { isSignal } from '../signal/signal';\nimport { clearAllEffects } from '../signal/signal-cleanup';\nimport { ResourceEvent } from '../shared/utils/markers';\nimport { assertDefined } from '../shared/error/assert';\nimport { noSerialize } from '../shared/utils/serialize-utils';\nimport { getSubscriber } from '../signal/subscriber';\nconst DEBUG = false;\nfunction debugLog(...arg) {\n    // eslint-disable-next-line no-console\n    console.log(arg.join(', '));\n}\n/** @internal */\nexport const useResourceQrl = (qrl, opts) => {\n    const { val, set, i, iCtx } = useSequentialScope();\n    if (val != null) {\n        return val;\n    }\n    assertQrl(qrl);\n    const container = iCtx.$container$;\n    const resource = createResourceReturn(container, opts);\n    const el = iCtx.$hostElement$;\n    const task = new Task(8 /* TaskFlags.DIRTY */ | 4 /* TaskFlags.RESOURCE */, i, el, qrl, resource, null);\n    container.$scheduler$(3 /* ChoreType.TASK */, task);\n    set(resource);\n    return resource;\n};\n// <docs markdown=\"../readme.md#useResource\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useResource instead and run `pnpm docs.sync`)\n/**\n * This method works like an async memoized function that runs whenever some tracked value changes\n * and returns some data.\n *\n * `useResource` however returns immediate a `ResourceReturn` object that contains the data and a\n * state that indicates if the data is available or not.\n *\n * The status can be one of the following:\n *\n * - `pending` - the data is not yet available.\n * - `resolved` - the data is available.\n * - `rejected` - the data is not available due to an error or timeout.\n *\n * Be careful when using a `try/catch` statement in `useResource$`. If you catch the error and don't\n * re-throw it (or a new Error), the resource status will never be `rejected`.\n *\n * ### Example\n *\n * Example showing how `useResource` to perform a fetch to request the weather, whenever the input\n * city name changes.\n *\n * ```tsx\n * const Cmp = component$(() => {\n *   const cityS = useSignal('');\n *\n *   const weatherResource = useResource$(async ({ track, cleanup }) => {\n *     const cityName = track(cityS);\n *     const abortController = new AbortController();\n *     cleanup(() => abortController.abort('cleanup'));\n *     const res = await fetch(`http://weatherdata.com?city=${cityName}`, {\n *       signal: abortController.signal,\n *     });\n *     const data = await res.json();\n *     return data as { temp: number };\n *   });\n *\n *   return (\n *     <div>\n *       <input name=\"city\" bind:value={cityS} />\n *       <Resource\n *         value={weatherResource}\n *         onResolved={(weather) => {\n *           return <div>Temperature: {weather.temp}</div>;\n *         }}\n *       />\n *     </div>\n *   );\n * });\n * ```\n *\n * @public\n * @see Resource\n * @see ResourceReturn\n */\n// </docs>\nexport const Resource = (props) => {\n    // Resource path\n    return _jsxSorted(Fragment, null, null, getResourceValueAsPromise(props), 0, null);\n};\nfunction getResourceValueAsPromise(props) {\n    const resource = props.value;\n    if (isResourceReturn(resource)) {\n        const isBrowser = !isServerPlatform();\n        if (isBrowser) {\n            // create a subscription for the resource._state changes\n            const state = resource._state;\n            DEBUG && debugLog(`RESOURCE_CMP.${state}`, 'VALUE: ' + untrack(() => resource._resolved));\n            if (state === 'pending' && props.onPending) {\n                return Promise.resolve().then(useBindInvokeContext(props.onPending));\n            }\n            else if (state === 'rejected' && props.onRejected) {\n                return Promise.resolve(resource._error).then(useBindInvokeContext(props.onRejected));\n            }\n            else {\n                const resolvedValue = untrack(() => resource._resolved);\n                if (resolvedValue !== undefined) {\n                    // resolved, pending without onPending prop or rejected without onRejected prop\n                    return Promise.resolve(resolvedValue).then(useBindInvokeContext(props.onResolved));\n                }\n            }\n        }\n        const value = resource.value;\n        if (value) {\n            return value.then(useBindInvokeContext(props.onResolved), useBindInvokeContext(props.onRejected));\n        }\n        else {\n            // this is temporary value until the `runResource` is executed and promise is assigned to the value\n            return Promise.resolve(undefined);\n        }\n    }\n    else if (isPromise(resource)) {\n        return resource.then(useBindInvokeContext(props.onResolved), useBindInvokeContext(props.onRejected));\n    }\n    else if (isSignal(resource)) {\n        return Promise.resolve(resource.value).then(useBindInvokeContext(props.onResolved), useBindInvokeContext(props.onRejected));\n    }\n    else {\n        return Promise.resolve(resource).then(useBindInvokeContext(props.onResolved), useBindInvokeContext(props.onRejected));\n    }\n}\nexport const _createResourceReturn = (opts) => {\n    const resource = {\n        __brand: 'resource',\n        value: undefined,\n        loading: isServerPlatform() ? false : true,\n        _resolved: undefined,\n        _error: undefined,\n        _state: 'pending',\n        _timeout: opts?.timeout ?? -1,\n        _cache: 0,\n    };\n    return resource;\n};\nexport const createResourceReturn = (container, opts, initialPromise) => {\n    const result = _createResourceReturn(opts);\n    result.value = initialPromise;\n    return createStore(container, result, 1 /* StoreFlags.RECURSIVE */);\n};\nexport const isResourceReturn = (obj) => {\n    return isObject(obj) && (getStoreTarget(obj) || obj).__brand === 'resource';\n};\nexport const runResource = (task, container, host) => {\n    task.$flags$ &= ~8 /* TaskFlags.DIRTY */;\n    cleanupTask(task);\n    const iCtx = newInvokeContext(container.$locale$, host, undefined, ResourceEvent);\n    iCtx.$container$ = container;\n    const taskFn = task.$qrl$.getFn(iCtx, () => clearAllEffects(container, task));\n    const resource = task.$state$;\n    assertDefined(resource, 'useResource: when running a resource, \"task.resource\" must be a defined.', task);\n    const track = (obj, prop) => {\n        const ctx = newInvokeContext();\n        ctx.$effectSubscriber$ = getSubscriber(task, \":\" /* EffectProperty.COMPONENT */);\n        ctx.$container$ = container;\n        return invoke(ctx, () => {\n            if (isFunction(obj)) {\n                return obj();\n            }\n            if (prop) {\n                return obj[prop];\n            }\n            else if (isSignal(obj)) {\n                return obj.value;\n            }\n            else {\n                return obj;\n            }\n        });\n    };\n    const handleError = (reason) => container.handleError(reason, host);\n    const cleanups = [];\n    task.$destroy$ = noSerialize(() => {\n        cleanups.forEach((fn) => {\n            try {\n                fn();\n            }\n            catch (err) {\n                handleError(err);\n            }\n        });\n        done = true;\n    });\n    const resourceTarget = unwrapStore(resource);\n    const opts = {\n        track,\n        cleanup(fn) {\n            if (typeof fn === 'function') {\n                cleanups.push(fn);\n            }\n        },\n        cache(policy) {\n            let milliseconds = 0;\n            if (policy === 'immutable') {\n                milliseconds = Infinity;\n            }\n            else {\n                milliseconds = policy;\n            }\n            resource._cache = milliseconds;\n        },\n        previous: resourceTarget._resolved,\n    };\n    let resolve;\n    let reject;\n    let done = false;\n    const setState = (resolved, value) => {\n        if (!done) {\n            done = true;\n            if (resolved) {\n                done = true;\n                resource.loading = false;\n                resource._state = 'resolved';\n                resource._resolved = value;\n                resource._error = undefined;\n                resolve(value);\n            }\n            else {\n                done = true;\n                resource.loading = false;\n                resource._state = 'rejected';\n                resource._error = value;\n                reject(value);\n            }\n            return true;\n        }\n        return false;\n    };\n    /**\n     * Add cleanup to resolve the resource if we are trying to run the same resource again while the\n     * previous one is not resolved yet. The next `runResource` run will call this cleanup\n     */\n    cleanups.push(() => {\n        if (untrack(() => resource.loading) === true) {\n            const value = untrack(() => resource._resolved);\n            setState(true, value);\n        }\n    });\n    // Execute mutation inside empty invocation\n    invoke(iCtx, () => {\n        // console.log('RESOURCE.pending: ');\n        resource._state = 'pending';\n        resource.loading = !isServerPlatform();\n        const promise = (resource.value = new Promise((r, re) => {\n            resolve = r;\n            reject = re;\n        }));\n        promise.catch(ignoreErrorToPreventNodeFromCrashing);\n    });\n    const promise = safeCall(() => Promise.resolve(taskFn(opts)), (value) => {\n        setState(true, value);\n    }, (err) => {\n        if (isPromise(err)) {\n            return err.then(() => runResource(task, container, host));\n        }\n        else {\n            setState(false, err);\n        }\n    });\n    const timeout = resourceTarget._timeout;\n    if (timeout > 0) {\n        return Promise.race([\n            promise,\n            delay(timeout).then(() => {\n                if (setState(false, new Error('timeout'))) {\n                    cleanupTask(task);\n                }\n            }),\n        ]);\n    }\n    return promise;\n};\nconst ignoreErrorToPreventNodeFromCrashing = (err) => {\n    // ignore error to prevent node from crashing\n    // node will crash in promise is rejected and no one is listening to the rejection.\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckYsT0FBTyxFQUFFLElBQUksRUFBYSxXQUFXLEVBQXFDLE1BQU0sWUFBWSxDQUFDO0FBSTdGLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFjLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFrQixRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sS0FB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SUFDeEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2xCLE9BQU87WUFDUCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDdkIsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDMUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sb0NBQW9DLEdBQUcsQ0FBQyxHQUFZLEVBQUUsRUFBRTtJQUM1RCw2Q0FBNkM7SUFDN0MsbUZBQW1GO0FBQ3JGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU2VydmVyUGxhdGZvcm0gfSBmcm9tICcuLi9zaGFyZWQvcGxhdGZvcm0vcGxhdGZvcm0nO1xuaW1wb3J0IHsgYXNzZXJ0UXJsIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtdXRpbHMnO1xuaW1wb3J0IHsgdHlwZSBRUkwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHsgRnJhZ21lbnQsIF9qc3hTb3J0ZWQgfSBmcm9tICcuLi9zaGFyZWQvanN4L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGludm9rZSwgbmV3SW52b2tlQ29udGV4dCwgdW50cmFjaywgdXNlQmluZEludm9rZUNvbnRleHQgfSBmcm9tICcuL3VzZS1jb3JlJztcbmltcG9ydCB7IFRhc2ssIFRhc2tGbGFncywgY2xlYW51cFRhc2ssIHR5cGUgRGVzY3JpcHRvckJhc2UsIHR5cGUgVHJhY2tlciB9IGZyb20gJy4vdXNlLXRhc2snO1xuXG5pbXBvcnQgdHlwZSB7IENvbnRhaW5lciwgSG9zdEVsZW1lbnQsIFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi4vLi4vc2VydmVyL3F3aWstdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBKU1hPdXRwdXQgfSBmcm9tICcuLi9zaGFyZWQvanN4L3R5cGVzL2pzeC1ub2RlJztcbmltcG9ydCB7IGRlbGF5LCBpc1Byb21pc2UsIHNhZmVDYWxsIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3Byb21pc2VzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IFN0b3JlRmxhZ3MsIGNyZWF0ZVN0b3JlLCBnZXRTdG9yZVRhcmdldCwgdW53cmFwU3RvcmUgfSBmcm9tICcuLi9zaWduYWwvc3RvcmUnO1xuaW1wb3J0IHsgdXNlU2VxdWVudGlhbFNjb3BlIH0gZnJvbSAnLi91c2Utc2VxdWVudGlhbC1zY29wZSc7XG5pbXBvcnQgeyBFZmZlY3RQcm9wZXJ0eSwgaXNTaWduYWwgfSBmcm9tICcuLi9zaWduYWwvc2lnbmFsJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSAnLi4vc2lnbmFsL3NpZ25hbC5wdWJsaWMnO1xuaW1wb3J0IHsgY2xlYXJBbGxFZmZlY3RzIH0gZnJvbSAnLi4vc2lnbmFsL3NpZ25hbC1jbGVhbnVwJztcbmltcG9ydCB7IFJlc291cmNlRXZlbnQgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Fzc2VydCc7XG5pbXBvcnQgeyBub1NlcmlhbGl6ZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9zZXJpYWxpemUtdXRpbHMnO1xuaW1wb3J0IHsgQ2hvcmVUeXBlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWwtY2hvcmUtdHlwZSc7XG5pbXBvcnQgeyBnZXRTdWJzY3JpYmVyIH0gZnJvbSAnLi4vc2lnbmFsL3N1YnNjcmliZXInO1xuXG5jb25zdCBERUJVRzogYm9vbGVhbiA9IGZhbHNlO1xuXG5mdW5jdGlvbiBkZWJ1Z0xvZyguLi5hcmc6IGFueSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhhcmcuam9pbignLCAnKSk7XG59XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ3R4PFQ+IHtcbiAgcmVhZG9ubHkgdHJhY2s6IFRyYWNrZXI7XG4gIGNsZWFudXAoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkO1xuICBjYWNoZShwb2xpY3lPck1pbGxpc2Vjb25kczogbnVtYmVyIHwgJ2ltbXV0YWJsZScpOiB2b2lkO1xuICByZWFkb25seSBwcmV2aW91czogVCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFJlc291cmNlRm48VD4gPSAoY3R4OiBSZXNvdXJjZUN0eDx1bmtub3duPikgPT4gVmFsdWVPclByb21pc2U8VD47XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZVJldHVybjxUPiA9IFJlc291cmNlUGVuZGluZzxUPiB8IFJlc291cmNlUmVzb2x2ZWQ8VD4gfCBSZXNvdXJjZVJlamVjdGVkPFQ+O1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVBlbmRpbmc8VD4ge1xuICByZWFkb25seSB2YWx1ZTogUHJvbWlzZTxUPjtcbiAgcmVhZG9ubHkgbG9hZGluZzogYm9vbGVhbjtcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VSZXNvbHZlZDxUPiB7XG4gIHJlYWRvbmx5IHZhbHVlOiBQcm9taXNlPFQ+O1xuICByZWFkb25seSBsb2FkaW5nOiBib29sZWFuO1xufVxuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVJlamVjdGVkPFQ+IHtcbiAgcmVhZG9ubHkgdmFsdWU6IFByb21pc2U8VD47XG4gIHJlYWRvbmx5IGxvYWRpbmc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VSZXR1cm5JbnRlcm5hbDxUPiB7XG4gIF9fYnJhbmQ6ICdyZXNvdXJjZSc7XG4gIF9zdGF0ZTogJ3BlbmRpbmcnIHwgJ3Jlc29sdmVkJyB8ICdyZWplY3RlZCc7XG4gIF9yZXNvbHZlZDogVCB8IHVuZGVmaW5lZDtcbiAgX2Vycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgX2NhY2hlOiBudW1iZXI7XG4gIF90aW1lb3V0OiBudW1iZXI7XG4gIHZhbHVlOiBQcm9taXNlPFQ+O1xuICBsb2FkaW5nOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gcGFzcyB0byBgdXNlUmVzb3VyY2UkKClgXG4gKlxuICogQHB1YmxpY1xuICogQHNlZSB1c2VSZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gSWYgdGhlIHJlc291cmNlIHRha2VzIG1vcmUgdGhhbiB0aGUgc3BlY2lmaWVkIG1pbGxpc2Vjb25kLCBpdCB3aWxsXG4gICAqIHRpbWVvdXQuIFJlc3VsdGluZyBvbiBhIHJlamVjdGVkIHJlc291cmNlLlxuICAgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHVzZVJlc291cmNlUXJsID0gPFQ+KFxuICBxcmw6IFFSTDxSZXNvdXJjZUZuPFQ+PixcbiAgb3B0cz86IFJlc291cmNlT3B0aW9uc1xuKTogUmVzb3VyY2VSZXR1cm48VD4gPT4ge1xuICBjb25zdCB7IHZhbCwgc2V0LCBpLCBpQ3R4IH0gPSB1c2VTZXF1ZW50aWFsU2NvcGU8UmVzb3VyY2VSZXR1cm48VD4+KCk7XG4gIGlmICh2YWwgIT0gbnVsbCkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgYXNzZXJ0UXJsKHFybCk7XG5cbiAgY29uc3QgY29udGFpbmVyID0gaUN0eC4kY29udGFpbmVyJDtcbiAgY29uc3QgcmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZVJldHVybjxUPihjb250YWluZXIsIG9wdHMpO1xuICBjb25zdCBlbCA9IGlDdHguJGhvc3RFbGVtZW50JDtcbiAgY29uc3QgdGFzayA9IG5ldyBUYXNrKFxuICAgIFRhc2tGbGFncy5ESVJUWSB8IFRhc2tGbGFncy5SRVNPVVJDRSxcbiAgICBpLFxuICAgIGVsLFxuICAgIHFybCxcbiAgICByZXNvdXJjZSxcbiAgICBudWxsXG4gICkgYXMgUmVzb3VyY2VEZXNjcmlwdG9yPGFueT47XG4gIGNvbnRhaW5lci4kc2NoZWR1bGVyJChDaG9yZVR5cGUuVEFTSywgdGFzayk7XG4gIHNldChyZXNvdXJjZSk7XG5cbiAgcmV0dXJuIHJlc291cmNlO1xufTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQcm9wczxUPiB7XG4gIHJlYWRvbmx5IHZhbHVlOiBSZXNvdXJjZVJldHVybjxUPiB8IFNpZ25hbDxQcm9taXNlPFQ+IHwgVD4gfCBQcm9taXNlPFQ+O1xuICBvblJlc29sdmVkOiAodmFsdWU6IFQpID0+IEpTWE91dHB1dDtcbiAgb25QZW5kaW5nPzogKCkgPT4gSlNYT3V0cHV0O1xuICBvblJlamVjdGVkPzogKHJlYXNvbjogRXJyb3IpID0+IEpTWE91dHB1dDtcbn1cblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi9yZWFkbWUubWQjdXNlUmVzb3VyY2VcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlUmVzb3VyY2UgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFRoaXMgbWV0aG9kIHdvcmtzIGxpa2UgYW4gYXN5bmMgbWVtb2l6ZWQgZnVuY3Rpb24gdGhhdCBydW5zIHdoZW5ldmVyIHNvbWUgdHJhY2tlZCB2YWx1ZSBjaGFuZ2VzXG4gKiBhbmQgcmV0dXJucyBzb21lIGRhdGEuXG4gKlxuICogYHVzZVJlc291cmNlYCBob3dldmVyIHJldHVybnMgaW1tZWRpYXRlIGEgYFJlc291cmNlUmV0dXJuYCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZGF0YSBhbmQgYVxuICogc3RhdGUgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGRhdGEgaXMgYXZhaWxhYmxlIG9yIG5vdC5cbiAqXG4gKiBUaGUgc3RhdHVzIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAtIGBwZW5kaW5nYCAtIHRoZSBkYXRhIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLlxuICogLSBgcmVzb2x2ZWRgIC0gdGhlIGRhdGEgaXMgYXZhaWxhYmxlLlxuICogLSBgcmVqZWN0ZWRgIC0gdGhlIGRhdGEgaXMgbm90IGF2YWlsYWJsZSBkdWUgdG8gYW4gZXJyb3Igb3IgdGltZW91dC5cbiAqXG4gKiBCZSBjYXJlZnVsIHdoZW4gdXNpbmcgYSBgdHJ5L2NhdGNoYCBzdGF0ZW1lbnQgaW4gYHVzZVJlc291cmNlJGAuIElmIHlvdSBjYXRjaCB0aGUgZXJyb3IgYW5kIGRvbid0XG4gKiByZS10aHJvdyBpdCAob3IgYSBuZXcgRXJyb3IpLCB0aGUgcmVzb3VyY2Ugc3RhdHVzIHdpbGwgbmV2ZXIgYmUgYHJlamVjdGVkYC5cbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIEV4YW1wbGUgc2hvd2luZyBob3cgYHVzZVJlc291cmNlYCB0byBwZXJmb3JtIGEgZmV0Y2ggdG8gcmVxdWVzdCB0aGUgd2VhdGhlciwgd2hlbmV2ZXIgdGhlIGlucHV0XG4gKiBjaXR5IG5hbWUgY2hhbmdlcy5cbiAqXG4gKiBgYGB0c3hcbiAqIGNvbnN0IENtcCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICBjb25zdCBjaXR5UyA9IHVzZVNpZ25hbCgnJyk7XG4gKlxuICogICBjb25zdCB3ZWF0aGVyUmVzb3VyY2UgPSB1c2VSZXNvdXJjZSQoYXN5bmMgKHsgdHJhY2ssIGNsZWFudXAgfSkgPT4ge1xuICogICAgIGNvbnN0IGNpdHlOYW1lID0gdHJhY2soY2l0eVMpO1xuICogICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAqICAgICBjbGVhbnVwKCgpID0+IGFib3J0Q29udHJvbGxlci5hYm9ydCgnY2xlYW51cCcpKTtcbiAqICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgaHR0cDovL3dlYXRoZXJkYXRhLmNvbT9jaXR5PSR7Y2l0eU5hbWV9YCwge1xuICogICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICogICAgIH0pO1xuICogICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICogICAgIHJldHVybiBkYXRhIGFzIHsgdGVtcDogbnVtYmVyIH07XG4gKiAgIH0pO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPGlucHV0IG5hbWU9XCJjaXR5XCIgYmluZDp2YWx1ZT17Y2l0eVN9IC8+XG4gKiAgICAgICA8UmVzb3VyY2VcbiAqICAgICAgICAgdmFsdWU9e3dlYXRoZXJSZXNvdXJjZX1cbiAqICAgICAgICAgb25SZXNvbHZlZD17KHdlYXRoZXIpID0+IHtcbiAqICAgICAgICAgICByZXR1cm4gPGRpdj5UZW1wZXJhdHVyZToge3dlYXRoZXIudGVtcH08L2Rpdj47XG4gKiAgICAgICAgIH19XG4gKiAgICAgICAvPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIFJlc291cmNlXG4gKiBAc2VlIFJlc291cmNlUmV0dXJuXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZSA9IDxUPihwcm9wczogUmVzb3VyY2VQcm9wczxUPik6IEpTWE91dHB1dCA9PiB7XG4gIC8vIFJlc291cmNlIHBhdGhcbiAgcmV0dXJuIF9qc3hTb3J0ZWQoRnJhZ21lbnQsIG51bGwsIG51bGwsIGdldFJlc291cmNlVmFsdWVBc1Byb21pc2UocHJvcHMpLCAwLCBudWxsKTtcbn07XG5cbmZ1bmN0aW9uIGdldFJlc291cmNlVmFsdWVBc1Byb21pc2U8VD4ocHJvcHM6IFJlc291cmNlUHJvcHM8VD4pOiBQcm9taXNlPEpTWE91dHB1dD4gfCBKU1hPdXRwdXQge1xuICBjb25zdCByZXNvdXJjZSA9IHByb3BzLnZhbHVlIGFzIFJlc291cmNlUmV0dXJuSW50ZXJuYWw8VD4gfCBQcm9taXNlPFQ+IHwgU2lnbmFsPFQ+O1xuICBpZiAoaXNSZXNvdXJjZVJldHVybihyZXNvdXJjZSkpIHtcbiAgICBjb25zdCBpc0Jyb3dzZXIgPSAhaXNTZXJ2ZXJQbGF0Zm9ybSgpO1xuICAgIGlmIChpc0Jyb3dzZXIpIHtcbiAgICAgIC8vIGNyZWF0ZSBhIHN1YnNjcmlwdGlvbiBmb3IgdGhlIHJlc291cmNlLl9zdGF0ZSBjaGFuZ2VzXG4gICAgICBjb25zdCBzdGF0ZSA9IHJlc291cmNlLl9zdGF0ZTtcbiAgICAgIERFQlVHICYmIGRlYnVnTG9nKGBSRVNPVVJDRV9DTVAuJHtzdGF0ZX1gLCAnVkFMVUU6ICcgKyB1bnRyYWNrKCgpID0+IHJlc291cmNlLl9yZXNvbHZlZCkpO1xuXG4gICAgICBpZiAoc3RhdGUgPT09ICdwZW5kaW5nJyAmJiBwcm9wcy5vblBlbmRpbmcpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4odXNlQmluZEludm9rZUNvbnRleHQocHJvcHMub25QZW5kaW5nKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAncmVqZWN0ZWQnICYmIHByb3BzLm9uUmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNvdXJjZS5fZXJyb3IhKS50aGVuKHVzZUJpbmRJbnZva2VDb250ZXh0KHByb3BzLm9uUmVqZWN0ZWQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkVmFsdWUgPSB1bnRyYWNrKCgpID0+IHJlc291cmNlLl9yZXNvbHZlZCkgYXMgVDtcbiAgICAgICAgaWYgKHJlc29sdmVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHJlc29sdmVkLCBwZW5kaW5nIHdpdGhvdXQgb25QZW5kaW5nIHByb3Agb3IgcmVqZWN0ZWQgd2l0aG91dCBvblJlamVjdGVkIHByb3BcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc29sdmVkVmFsdWUpLnRoZW4odXNlQmluZEludm9rZUNvbnRleHQocHJvcHMub25SZXNvbHZlZCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcmVzb3VyY2UudmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUudGhlbihcbiAgICAgICAgdXNlQmluZEludm9rZUNvbnRleHQocHJvcHMub25SZXNvbHZlZCksXG4gICAgICAgIHVzZUJpbmRJbnZva2VDb250ZXh0KHByb3BzLm9uUmVqZWN0ZWQpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzIGlzIHRlbXBvcmFyeSB2YWx1ZSB1bnRpbCB0aGUgYHJ1blJlc291cmNlYCBpcyBleGVjdXRlZCBhbmQgcHJvbWlzZSBpcyBhc3NpZ25lZCB0byB0aGUgdmFsdWVcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQcm9taXNlKHJlc291cmNlKSkge1xuICAgIHJldHVybiByZXNvdXJjZS50aGVuKFxuICAgICAgdXNlQmluZEludm9rZUNvbnRleHQocHJvcHMub25SZXNvbHZlZCksXG4gICAgICB1c2VCaW5kSW52b2tlQ29udGV4dChwcm9wcy5vblJlamVjdGVkKVxuICAgICk7XG4gIH0gZWxzZSBpZiAoaXNTaWduYWwocmVzb3VyY2UpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNvdXJjZS52YWx1ZSkudGhlbihcbiAgICAgIHVzZUJpbmRJbnZva2VDb250ZXh0KHByb3BzLm9uUmVzb2x2ZWQpLFxuICAgICAgdXNlQmluZEludm9rZUNvbnRleHQocHJvcHMub25SZWplY3RlZClcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzb3VyY2UgYXMgVCkudGhlbihcbiAgICAgIHVzZUJpbmRJbnZva2VDb250ZXh0KHByb3BzLm9uUmVzb2x2ZWQpLFxuICAgICAgdXNlQmluZEludm9rZUNvbnRleHQocHJvcHMub25SZWplY3RlZClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBfY3JlYXRlUmVzb3VyY2VSZXR1cm4gPSA8VD4ob3B0cz86IFJlc291cmNlT3B0aW9ucyk6IFJlc291cmNlUmV0dXJuSW50ZXJuYWw8VD4gPT4ge1xuICBjb25zdCByZXNvdXJjZTogUmVzb3VyY2VSZXR1cm5JbnRlcm5hbDxUPiA9IHtcbiAgICBfX2JyYW5kOiAncmVzb3VyY2UnLFxuICAgIHZhbHVlOiB1bmRlZmluZWQgYXMgbmV2ZXIsXG4gICAgbG9hZGluZzogaXNTZXJ2ZXJQbGF0Zm9ybSgpID8gZmFsc2UgOiB0cnVlLFxuICAgIF9yZXNvbHZlZDogdW5kZWZpbmVkIGFzIG5ldmVyLFxuICAgIF9lcnJvcjogdW5kZWZpbmVkIGFzIG5ldmVyLFxuICAgIF9zdGF0ZTogJ3BlbmRpbmcnLFxuICAgIF90aW1lb3V0OiBvcHRzPy50aW1lb3V0ID8/IC0xLFxuICAgIF9jYWNoZTogMCxcbiAgfTtcbiAgcmV0dXJuIHJlc291cmNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlc291cmNlUmV0dXJuID0gPFQ+KFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgb3B0cz86IFJlc291cmNlT3B0aW9ucyxcbiAgaW5pdGlhbFByb21pc2U/OiBQcm9taXNlPFQ+XG4pOiBSZXNvdXJjZVJldHVybkludGVybmFsPFQ+ID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gX2NyZWF0ZVJlc291cmNlUmV0dXJuPFQ+KG9wdHMpO1xuICByZXN1bHQudmFsdWUgPSBpbml0aWFsUHJvbWlzZSBhcyBQcm9taXNlPFQ+O1xuXG4gIHJldHVybiBjcmVhdGVTdG9yZShjb250YWluZXIsIHJlc3VsdCwgU3RvcmVGbGFncy5SRUNVUlNJVkUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmVzb3VyY2VSZXR1cm4gPSAob2JqOiBhbnkpOiBvYmogaXMgUmVzb3VyY2VSZXR1cm48dW5rbm93bj4gPT4ge1xuICByZXR1cm4gaXNPYmplY3Qob2JqKSAmJiAoZ2V0U3RvcmVUYXJnZXQob2JqIGFzIGFueSkgfHwgb2JqKS5fX2JyYW5kID09PSAncmVzb3VyY2UnO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZURlc2NyaXB0b3I8VD5cbiAgZXh0ZW5kcyBEZXNjcmlwdG9yQmFzZTxSZXNvdXJjZUZuPFQ+LCBSZXNvdXJjZVJldHVybkludGVybmFsPFQ+PiB7fVxuXG5leHBvcnQgY29uc3QgcnVuUmVzb3VyY2UgPSA8VD4oXG4gIHRhc2s6IFJlc291cmNlRGVzY3JpcHRvcjxUPixcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIGhvc3Q6IEhvc3RFbGVtZW50XG4pOiBWYWx1ZU9yUHJvbWlzZTx2b2lkPiA9PiB7XG4gIHRhc2suJGZsYWdzJCAmPSB+VGFza0ZsYWdzLkRJUlRZO1xuICBjbGVhbnVwVGFzayh0YXNrKTtcblxuICBjb25zdCBpQ3R4ID0gbmV3SW52b2tlQ29udGV4dChjb250YWluZXIuJGxvY2FsZSQsIGhvc3QsIHVuZGVmaW5lZCwgUmVzb3VyY2VFdmVudCk7XG4gIGlDdHguJGNvbnRhaW5lciQgPSBjb250YWluZXI7XG5cbiAgY29uc3QgdGFza0ZuID0gdGFzay4kcXJsJC5nZXRGbihpQ3R4LCAoKSA9PiBjbGVhckFsbEVmZmVjdHMoY29udGFpbmVyLCB0YXNrKSk7XG5cbiAgY29uc3QgcmVzb3VyY2UgPSB0YXNrLiRzdGF0ZSQ7XG4gIGFzc2VydERlZmluZWQoXG4gICAgcmVzb3VyY2UsXG4gICAgJ3VzZVJlc291cmNlOiB3aGVuIHJ1bm5pbmcgYSByZXNvdXJjZSwgXCJ0YXNrLnJlc291cmNlXCIgbXVzdCBiZSBhIGRlZmluZWQuJyxcbiAgICB0YXNrXG4gICk7XG5cbiAgY29uc3QgdHJhY2s6IFRyYWNrZXIgPSAob2JqOiAoKCkgPT4gdW5rbm93bikgfCBvYmplY3QgfCBTaWduYWw8dW5rbm93bj4sIHByb3A/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBjdHggPSBuZXdJbnZva2VDb250ZXh0KCk7XG4gICAgY3R4LiRlZmZlY3RTdWJzY3JpYmVyJCA9IGdldFN1YnNjcmliZXIodGFzaywgRWZmZWN0UHJvcGVydHkuQ09NUE9ORU5UKTtcbiAgICBjdHguJGNvbnRhaW5lciQgPSBjb250YWluZXI7XG4gICAgcmV0dXJuIGludm9rZShjdHgsICgpID0+IHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iaigpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIChvYmogYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3Byb3BdO1xuICAgICAgfSBlbHNlIGlmIChpc1NpZ25hbChvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmoudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUVycm9yID0gKHJlYXNvbjogdW5rbm93bikgPT4gY29udGFpbmVyLmhhbmRsZUVycm9yKHJlYXNvbiwgaG9zdCk7XG5cbiAgY29uc3QgY2xlYW51cHM6ICgoKSA9PiB2b2lkKVtdID0gW107XG4gIHRhc2suJGRlc3Ryb3kkID0gbm9TZXJpYWxpemUoKCkgPT4ge1xuICAgIGNsZWFudXBzLmZvckVhY2goKGZuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZG9uZSA9IHRydWU7XG4gIH0pO1xuXG4gIGNvbnN0IHJlc291cmNlVGFyZ2V0ID0gdW53cmFwU3RvcmUocmVzb3VyY2UpO1xuICBjb25zdCBvcHRzOiBSZXNvdXJjZUN0eDxUPiA9IHtcbiAgICB0cmFjayxcbiAgICBjbGVhbnVwKGZuKSB7XG4gICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNsZWFudXBzLnB1c2goZm4pO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2FjaGUocG9saWN5KSB7XG4gICAgICBsZXQgbWlsbGlzZWNvbmRzID0gMDtcbiAgICAgIGlmIChwb2xpY3kgPT09ICdpbW11dGFibGUnKSB7XG4gICAgICAgIG1pbGxpc2Vjb25kcyA9IEluZmluaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWlsbGlzZWNvbmRzID0gcG9saWN5O1xuICAgICAgfVxuICAgICAgcmVzb3VyY2UuX2NhY2hlID0gbWlsbGlzZWNvbmRzO1xuICAgIH0sXG4gICAgcHJldmlvdXM6IHJlc291cmNlVGFyZ2V0Ll9yZXNvbHZlZCxcbiAgfTtcblxuICBsZXQgcmVzb2x2ZTogKHY6IFQpID0+IHZvaWQ7XG4gIGxldCByZWplY3Q6ICh2OiB1bmtub3duKSA9PiB2b2lkO1xuICBsZXQgZG9uZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHNldFN0YXRlID0gKHJlc29sdmVkOiBib29sZWFuLCB2YWx1ZTogVCB8IEVycm9yKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgcmVzb3VyY2UubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICByZXNvdXJjZS5fc3RhdGUgPSAncmVzb2x2ZWQnO1xuICAgICAgICByZXNvdXJjZS5fcmVzb2x2ZWQgPSB2YWx1ZSBhcyBUO1xuICAgICAgICByZXNvdXJjZS5fZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlc29sdmUodmFsdWUgYXMgVCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgcmVzb3VyY2UubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICByZXNvdXJjZS5fc3RhdGUgPSAncmVqZWN0ZWQnO1xuICAgICAgICByZXNvdXJjZS5fZXJyb3IgPSB2YWx1ZSBhcyBFcnJvcjtcbiAgICAgICAgcmVqZWN0KHZhbHVlIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBjbGVhbnVwIHRvIHJlc29sdmUgdGhlIHJlc291cmNlIGlmIHdlIGFyZSB0cnlpbmcgdG8gcnVuIHRoZSBzYW1lIHJlc291cmNlIGFnYWluIHdoaWxlIHRoZVxuICAgKiBwcmV2aW91cyBvbmUgaXMgbm90IHJlc29sdmVkIHlldC4gVGhlIG5leHQgYHJ1blJlc291cmNlYCBydW4gd2lsbCBjYWxsIHRoaXMgY2xlYW51cFxuICAgKi9cbiAgY2xlYW51cHMucHVzaCgoKSA9PiB7XG4gICAgaWYgKHVudHJhY2soKCkgPT4gcmVzb3VyY2UubG9hZGluZykgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdW50cmFjaygoKSA9PiByZXNvdXJjZS5fcmVzb2x2ZWQpIGFzIFQ7XG4gICAgICBzZXRTdGF0ZSh0cnVlLCB2YWx1ZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBFeGVjdXRlIG11dGF0aW9uIGluc2lkZSBlbXB0eSBpbnZvY2F0aW9uXG4gIGludm9rZShpQ3R4LCAoKSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coJ1JFU09VUkNFLnBlbmRpbmc6ICcpO1xuICAgIHJlc291cmNlLl9zdGF0ZSA9ICdwZW5kaW5nJztcbiAgICByZXNvdXJjZS5sb2FkaW5nID0gIWlzU2VydmVyUGxhdGZvcm0oKTtcbiAgICBjb25zdCBwcm9taXNlID0gKHJlc291cmNlLnZhbHVlID0gbmV3IFByb21pc2UoKHIsIHJlKSA9PiB7XG4gICAgICByZXNvbHZlID0gcjtcbiAgICAgIHJlamVjdCA9IHJlO1xuICAgIH0pKTtcbiAgICBwcm9taXNlLmNhdGNoKGlnbm9yZUVycm9yVG9QcmV2ZW50Tm9kZUZyb21DcmFzaGluZyk7XG4gIH0pO1xuXG4gIGNvbnN0IHByb21pc2U6IFZhbHVlT3JQcm9taXNlPHZvaWQ+ID0gc2FmZUNhbGwoXG4gICAgKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHRhc2tGbihvcHRzKSksXG4gICAgKHZhbHVlKSA9PiB7XG4gICAgICBzZXRTdGF0ZSh0cnVlLCB2YWx1ZSk7XG4gICAgfSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBpZiAoaXNQcm9taXNlKGVycikpIHtcbiAgICAgICAgcmV0dXJuIGVyci50aGVuKCgpID0+IHJ1blJlc291cmNlKHRhc2ssIGNvbnRhaW5lciwgaG9zdCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U3RhdGUoZmFsc2UsIGVycik7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIGNvbnN0IHRpbWVvdXQgPSByZXNvdXJjZVRhcmdldC5fdGltZW91dDtcbiAgaWYgKHRpbWVvdXQgPiAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmFjZShbXG4gICAgICBwcm9taXNlLFxuICAgICAgZGVsYXkodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChzZXRTdGF0ZShmYWxzZSwgbmV3IEVycm9yKCd0aW1lb3V0JykpKSB7XG4gICAgICAgICAgY2xlYW51cFRhc2sodGFzayk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuY29uc3QgaWdub3JlRXJyb3JUb1ByZXZlbnROb2RlRnJvbUNyYXNoaW5nID0gKGVycjogdW5rbm93bikgPT4ge1xuICAvLyBpZ25vcmUgZXJyb3IgdG8gcHJldmVudCBub2RlIGZyb20gY3Jhc2hpbmdcbiAgLy8gbm9kZSB3aWxsIGNyYXNoIGluIHByb21pc2UgaXMgcmVqZWN0ZWQgYW5kIG5vIG9uZSBpcyBsaXN0ZW5pbmcgdG8gdGhlIHJlamVjdGlvbi5cbn07XG4iXX0=","import { vnode_getNextSibling, vnode_getPreviousSibling, vnode_getProp, vnode_locate, } from '../client/vnode';\nimport { QSlotParent } from './utils/markers';\n/// These global variables are used to avoid creating new arrays for each call to `vnode_documentPosition`.\nconst aVNodePath = [];\nconst bVNodePath = [];\n/**\n * Compare two VNodes and determine their document position relative to each other.\n *\n * @param a VNode to compare\n * @param b VNode to compare\n * @param rootVNode - Root VNode of a container\n * @returns -1 if `a` is before `b`, 0 if `a` is the same as `b`, 1 if `a` is after `b`.\n */\nexport const vnode_documentPosition = (a, b, rootVNode) => {\n    if (a === b) {\n        return 0;\n    }\n    let aDepth = -1;\n    let bDepth = -1;\n    while (a) {\n        const vNode = (aVNodePath[++aDepth] = a);\n        a = (vNode[1 /* VNodeProps.parent */] ||\n            (rootVNode && vnode_getProp(a, QSlotParent, (id) => vnode_locate(rootVNode, id))));\n    }\n    while (b) {\n        const vNode = (bVNodePath[++bDepth] = b);\n        b = (vNode[1 /* VNodeProps.parent */] ||\n            (rootVNode && vnode_getProp(b, QSlotParent, (id) => vnode_locate(rootVNode, id))));\n    }\n    while (aDepth >= 0 && bDepth >= 0) {\n        a = aVNodePath[aDepth];\n        b = bVNodePath[bDepth];\n        if (a === b) {\n            // if the nodes are the same, we need to check the next level.\n            aDepth--;\n            bDepth--;\n        }\n        else {\n            // We found a difference so we need to scan nodes at this level.\n            let cursor = b;\n            do {\n                cursor = vnode_getNextSibling(cursor);\n                if (cursor === a) {\n                    return 1;\n                }\n            } while (cursor);\n            cursor = b;\n            do {\n                cursor = vnode_getPreviousSibling(cursor);\n                if (cursor === a) {\n                    return -1;\n                }\n            } while (cursor);\n            if (rootVNode && vnode_getProp(b, QSlotParent, (id) => vnode_locate(rootVNode, id))) {\n                // The \"b\" node is a projection, so we need to set it after \"a\" node,\n                // because the \"a\" node could be a context provider.\n                return -1;\n            }\n            // The node is not in the list of siblings, that means it must be disconnected.\n            return 1;\n        }\n    }\n    return aDepth < bDepth ? -1 : 1;\n};\n/// These global variables are used to avoid creating new arrays for each call to `ssrNodeDocumentPosition`.\nconst aSsrNodePath = [];\nconst bSsrNodePath = [];\n/**\n * Compare two SSR nodes and determine their document position relative to each other. Compares only\n * position between parent and child.\n *\n * @param a SSR node to compare\n * @param b SSR node to compare\n * @returns -1 if `a` is before `b`, 0 if `a` is the same as `b`, 1 if `a` is after `b`.\n */\nexport const ssrNodeDocumentPosition = (a, b) => {\n    if (a === b) {\n        return 0;\n    }\n    let aDepth = -1;\n    let bDepth = -1;\n    while (a) {\n        const ssrNode = (aSsrNodePath[++aDepth] = a);\n        a = ssrNode.currentComponentNode;\n    }\n    while (b) {\n        const ssrNode = (bSsrNodePath[++bDepth] = b);\n        b = ssrNode.currentComponentNode;\n    }\n    while (aDepth >= 0 && bDepth >= 0) {\n        a = aSsrNodePath[aDepth];\n        b = bSsrNodePath[bDepth];\n        if (a === b) {\n            // if the nodes are the same, we need to check the next level.\n            aDepth--;\n            bDepth--;\n        }\n        else {\n            return 1;\n        }\n    }\n    return aDepth < bDepth ? -1 : 1;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWRvY3VtZW50LXBvc2l0aW9uLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9zY2hlZHVsZXItZG9jdW1lbnQtcG9zaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsYUFBYSxFQUNiLFlBQVksR0FDYixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QywyR0FBMkc7QUFDM0csTUFBTSxVQUFVLEdBQVksRUFBRSxDQUFDO0FBQy9CLE1BQU0sVUFBVSxHQUFZLEVBQUUsQ0FBQztBQUMvQjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FDcEMsQ0FBUSxFQUNSLENBQVEsRUFDUixTQUE4QixFQUNsQixFQUFFO0lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDWixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoQixPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDLEdBQUcsQ0FBQyxLQUFLLDJCQUFtQjtZQUMzQixDQUFDLFNBQVMsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQztJQUN4RixDQUFDO0lBQ0QsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNULE1BQU0sS0FBSyxH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LENBQUMsRUFBRSxDQUFDO1FBQ2xDLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFhLENBQUM7UUFDckMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQWEsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNaLDhEQUE4RDtZQUM5RCxNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sRUFBRSxDQUFDO1FBQ1gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZOb2RlUHJvcHMsIHR5cGUgRWxlbWVudFZOb2RlLCB0eXBlIFZOb2RlIH0gZnJvbSAnLi4vY2xpZW50L3R5cGVzJztcbmltcG9ydCB7XG4gIHZub2RlX2dldE5leHRTaWJsaW5nLFxuICB2bm9kZV9nZXRQcmV2aW91c1NpYmxpbmcsXG4gIHZub2RlX2dldFByb3AsXG4gIHZub2RlX2xvY2F0ZSxcbn0gZnJvbSAnLi4vY2xpZW50L3Zub2RlJztcbmltcG9ydCB0eXBlIHsgSVNzck5vZGUgfSBmcm9tICcuLi9zc3Ivc3NyLXR5cGVzJztcbmltcG9ydCB7IFFTbG90UGFyZW50IH0gZnJvbSAnLi91dGlscy9tYXJrZXJzJztcblxuLy8vIFRoZXNlIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHVzZWQgdG8gYXZvaWQgY3JlYXRpbmcgbmV3IGFycmF5cyBmb3IgZWFjaCBjYWxsIHRvIGB2bm9kZV9kb2N1bWVudFBvc2l0aW9uYC5cbmNvbnN0IGFWTm9kZVBhdGg6IFZOb2RlW10gPSBbXTtcbmNvbnN0IGJWTm9kZVBhdGg6IFZOb2RlW10gPSBbXTtcbi8qKlxuICogQ29tcGFyZSB0d28gVk5vZGVzIGFuZCBkZXRlcm1pbmUgdGhlaXIgZG9jdW1lbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gZWFjaCBvdGhlci5cbiAqXG4gKiBAcGFyYW0gYSBWTm9kZSB0byBjb21wYXJlXG4gKiBAcGFyYW0gYiBWTm9kZSB0byBjb21wYXJlXG4gKiBAcGFyYW0gcm9vdFZOb2RlIC0gUm9vdCBWTm9kZSBvZiBhIGNvbnRhaW5lclxuICogQHJldHVybnMgLTEgaWYgYGFgIGlzIGJlZm9yZSBgYmAsIDAgaWYgYGFgIGlzIHRoZSBzYW1lIGFzIGBiYCwgMSBpZiBgYWAgaXMgYWZ0ZXIgYGJgLlxuICovXG5leHBvcnQgY29uc3Qgdm5vZGVfZG9jdW1lbnRQb3NpdGlvbiA9IChcbiAgYTogVk5vZGUsXG4gIGI6IFZOb2RlLFxuICByb290Vk5vZGU6IEVsZW1lbnRWTm9kZSB8IG51bGxcbik6IC0xIHwgMCB8IDEgPT4ge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgbGV0IGFEZXB0aCA9IC0xO1xuICBsZXQgYkRlcHRoID0gLTE7XG4gIHdoaWxlIChhKSB7XG4gICAgY29uc3Qgdk5vZGUgPSAoYVZOb2RlUGF0aFsrK2FEZXB0aF0gPSBhKTtcbiAgICBhID0gKHZOb2RlW1ZOb2RlUHJvcHMucGFyZW50XSB8fFxuICAgICAgKHJvb3RWTm9kZSAmJiB2bm9kZV9nZXRQcm9wKGEsIFFTbG90UGFyZW50LCAoaWQpID0+IHZub2RlX2xvY2F0ZShyb290Vk5vZGUsIGlkKSkpKSE7XG4gIH1cbiAgd2hpbGUgKGIpIHtcbiAgICBjb25zdCB2Tm9kZSA9IChiVk5vZGVQYXRoWysrYkRlcHRoXSA9IGIpO1xuICAgIGIgPSAodk5vZGVbVk5vZGVQcm9wcy5wYXJlbnRdIHx8XG4gICAgICAocm9vdFZOb2RlICYmIHZub2RlX2dldFByb3AoYiwgUVNsb3RQYXJlbnQsIChpZCkgPT4gdm5vZGVfbG9jYXRlKHJvb3RWTm9kZSwgaWQpKSkpITtcbiAgfVxuXG4gIHdoaWxlIChhRGVwdGggPj0gMCAmJiBiRGVwdGggPj0gMCkge1xuICAgIGEgPSBhVk5vZGVQYXRoW2FEZXB0aF0gYXMgVk5vZGU7XG4gICAgYiA9IGJWTm9kZVBhdGhbYkRlcHRoXSBhcyBWTm9kZTtcbiAgICBpZiAoYSA9PT0gYikge1xuICAgICAgLy8gaWYgdGhlIG5vZGVzIGFyZSB0aGUgc2FtZSwgd2UgbmVlZCB0byBjaGVjayB0aGUgbmV4dCBsZXZlbC5cbiAgICAgIGFEZXB0aC0tO1xuICAgICAgYkRlcHRoLS07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIGZvdW5kIGEgZGlmZmVyZW5jZSBzbyB3ZSBuZWVkIHRvIHNjYW4gbm9kZXMgYXQgdGhpcyBsZXZlbC5cbiAgICAgIGxldCBjdXJzb3I6IFZOb2RlIHwgbnVsbCA9IGI7XG4gICAgICBkbyB7XG4gICAgICAgIGN1cnNvciA9IHZub2RlX2dldE5leHRTaWJsaW5nKGN1cnNvcik7XG4gICAgICAgIGlmIChjdXJzb3IgPT09IGEpIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoY3Vyc29yKTtcbiAgICAgIGN1cnNvciA9IGI7XG4gICAgICBkbyB7XG4gICAgICAgIGN1cnNvciA9IHZub2RlX2dldFByZXZpb3VzU2libGluZyhjdXJzb3IpO1xuICAgICAgICBpZiAoY3Vyc29yID09PSBhKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICB9IHdoaWxlIChjdXJzb3IpO1xuICAgICAgaWYgKHJvb3RWTm9kZSAmJiB2bm9kZV9nZXRQcm9wKGIsIFFTbG90UGFyZW50LCAoaWQpID0+IHZub2RlX2xvY2F0ZShyb290Vk5vZGUsIGlkKSkpIHtcbiAgICAgICAgLy8gVGhlIFwiYlwiIG5vZGUgaXMgYSBwcm9qZWN0aW9uLCBzbyB3ZSBuZWVkIHRvIHNldCBpdCBhZnRlciBcImFcIiBub2RlLFxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBcImFcIiBub2RlIGNvdWxkIGJlIGEgY29udGV4dCBwcm92aWRlci5cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgLy8gVGhlIG5vZGUgaXMgbm90IGluIHRoZSBsaXN0IG9mIHNpYmxpbmdzLCB0aGF0IG1lYW5zIGl0IG11c3QgYmUgZGlzY29ubmVjdGVkLlxuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBhRGVwdGggPCBiRGVwdGggPyAtMSA6IDE7XG59O1xuXG4vLy8gVGhlc2UgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgdXNlZCB0byBhdm9pZCBjcmVhdGluZyBuZXcgYXJyYXlzIGZvciBlYWNoIGNhbGwgdG8gYHNzck5vZGVEb2N1bWVudFBvc2l0aW9uYC5cbmNvbnN0IGFTc3JOb2RlUGF0aDogSVNzck5vZGVbXSA9IFtdO1xuY29uc3QgYlNzck5vZGVQYXRoOiBJU3NyTm9kZVtdID0gW107XG4vKipcbiAqIENvbXBhcmUgdHdvIFNTUiBub2RlcyBhbmQgZGV0ZXJtaW5lIHRoZWlyIGRvY3VtZW50IHBvc2l0aW9uIHJlbGF0aXZlIHRvIGVhY2ggb3RoZXIuIENvbXBhcmVzIG9ubHlcbiAqIHBvc2l0aW9uIGJldHdlZW4gcGFyZW50IGFuZCBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gYSBTU1Igbm9kZSB0byBjb21wYXJlXG4gKiBAcGFyYW0gYiBTU1Igbm9kZSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyAtMSBpZiBgYWAgaXMgYmVmb3JlIGBiYCwgMCBpZiBgYWAgaXMgdGhlIHNhbWUgYXMgYGJgLCAxIGlmIGBhYCBpcyBhZnRlciBgYmAuXG4gKi9cbmV4cG9ydCBjb25zdCBzc3JOb2RlRG9jdW1lbnRQb3NpdGlvbiA9IChhOiBJU3NyTm9kZSwgYjogSVNzck5vZGUpOiAtMSB8IDAgfCAxID0+IHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGxldCBhRGVwdGggPSAtMTtcbiAgbGV0IGJEZXB0aCA9IC0xO1xuICB3aGlsZSAoYSkge1xuICAgIGNvbnN0IHNzck5vZGUgPSAoYVNzck5vZGVQYXRoWysrYURlcHRoXSA9IGEpO1xuICAgIGEgPSBzc3JOb2RlLmN1cnJlbnRDb21wb25lbnROb2RlITtcbiAgfVxuICB3aGlsZSAoYikge1xuICAgIGNvbnN0IHNzck5vZGUgPSAoYlNzck5vZGVQYXRoWysrYkRlcHRoXSA9IGIpO1xuICAgIGIgPSBzc3JOb2RlLmN1cnJlbnRDb21wb25lbnROb2RlITtcbiAgfVxuXG4gIHdoaWxlIChhRGVwdGggPj0gMCAmJiBiRGVwdGggPj0gMCkge1xuICAgIGEgPSBhU3NyTm9kZVBhdGhbYURlcHRoXSBhcyBJU3NyTm9kZTtcbiAgICBiID0gYlNzck5vZGVQYXRoW2JEZXB0aF0gYXMgSVNzck5vZGU7XG4gICAgaWYgKGEgPT09IGIpIHtcbiAgICAgIC8vIGlmIHRoZSBub2RlcyBhcmUgdGhlIHNhbWUsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG5leHQgbGV2ZWwuXG4gICAgICBhRGVwdGgtLTtcbiAgICAgIGJEZXB0aC0tO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFEZXB0aCA8IGJEZXB0aCA/IC0xIDogMTtcbn07XG4iXX0=","/**\n * Scheduler is responsible for running application code in predictable order.\n *\n * ## What is a Chore?\n *\n * A Chore is a unit of work that needs to be done. It can be:\n *\n * - Task / Resource\n * - Visible Task\n * - Component\n * - Computed\n * - Node Diff\n *\n * ## Order of execution\n *\n * - Parent component chores should run before child component chores.\n * - Visible Tasks should run after journal flush (visible tasks often read DOM layout.)\n *\n * ## Example\n *\n * ```typescript\n * const Child = component$(() => {\n *   useTask$(() => {\n *     console.log('Child task');\n *   });\n *   useVisibleTask$(() => {\n *     console.log('Child visible-task');\n *   });\n *   console.log('Child render');\n *   return <div>Child</div>;\n * });\n *\n * const Parent = component$(() => {\n *   const count = useSignal(0);\n *   useTask$(() => {\n *     console.log('Parent task', count.value);\n *   });\n *   useVisibleTask$(() => {\n *     console.log('Parent visible-task', count.value);\n *     count.value++;\n *   });\n *   console.log('Parent render', count.value);\n *   return <Child/>;\n * });\n * ```\n *\n * ## In the above example, the order of execution is:\n *\n * 1. Parent task 0\n * 2. Parent render 0\n * 3. Child task 0\n * 4. Child render 0\n * 5. Journal flush\n * 6. Parent visible-task 0\n * 7. Parent render 1\n * 8. Journal flush\n * 9. Child visible-task\n *\n * If at any point a new chore is scheduled it will insert itself into the correct order.\n *\n * ## Implementation\n *\n * Chores are kept in a sorted array. When a new chore is scheduled it is inserted into the correct\n * location. Processing of the chores always starts from the beginning of the array. This ensures\n * that parent chores are processed before child chores.\n *\n * ## Sorting\n *\n * Chores are sorted in three levels:\n *\n * - Macro: beforeJournalFlush, journalFlush, afterJournalFlush\n * - Component: depth first order of components\n * - Micro: order of chores within a component.\n *\n * Example of sorting:\n *\n * - Tasks are beforeJournalFlush, than depth first on component and finally in declaration order\n *   within component.\n * - Visible Tasks are sorted afterJournalFlush, than depth first on component and finally in\n *   declaration order within component.\n */\nimport { isDomContainer } from '../client/dom-container';\nimport { vnode_isVNode, vnode_setAttr } from '../client/vnode';\nimport { vnode_diff } from '../client/vnode-diff';\nimport { triggerEffects } from '../signal/signal';\nimport { isSignal } from '../signal/signal.public';\nimport { runResource } from '../use/use-resource';\nimport { cleanupTask, runTask, } from '../use/use-task';\nimport { executeComponent } from './component-execution';\nimport { assertEqual, assertFalse } from './error/assert';\nimport { ssrNodeDocumentPosition, vnode_documentPosition } from './scheduler-document-position';\nimport { logWarn } from './utils/log';\nimport { QScopedStyle } from './utils/markers';\nimport { isPromise, retryOnPromise, safeCall } from './utils/promises';\nimport { addComponentStylePrefix } from './utils/scoped-styles';\nimport { serializeAttribute } from './utils/styles';\n// Turn this on to get debug output of what the scheduler is doing.\nconst DEBUG = false;\nconst getPromise = (chore) => (chore.$promise$ ||= new Promise((resolve) => {\n    chore.$resolve$ = resolve;\n}));\nexport const createScheduler = (container, scheduleDrain, journalFlush) => {\n    const choreQueue = [];\n    const qrlRuns = [];\n    let currentChore = null;\n    let drainScheduled = false;\n    return schedule;\n    ///// IMPLEMENTATION /////\n    function schedule(type, hostOrTask = null, targetOrQrl = null, payload = null) {\n        const isServer = !isDomContainer(container);\n        const isComponentSsr = isServer && type === 6 /* ChoreType.COMPONENT */;\n        const runLater = type !== 255 /* ChoreType.WAIT_FOR_ALL */ && !isComponentSsr && type !== 2 /* ChoreType.RUN_QRL */;\n        const isTask = type === 3 /* ChoreType.TASK */ || type === 32 /* ChoreType.VISIBLE */ || type === 48 /* ChoreType.CLEANUP_VISIBLE */;\n        const isClientOnly = type === 16 /* ChoreType.JOURNAL_FLUSH */ ||\n            type === 4 /* ChoreType.NODE_DIFF */ ||\n            type === 5 /* ChoreType.NODE_PROP */;\n        if (isServer && isClientOnly) {\n            DEBUG &&\n                debugTrace(`skip client chore ${debugChoreTypeToString(type)}`, null, currentChore, choreQueue);\n            return;\n        }\n        if (isTask) {\n            hostOrTask.$flags$ |= 8 /* TaskFlags.DIRTY */;\n        }\n        let chore = {\n            $type$: type,\n            $idx$: isTask\n                ? hostOrTask.$index$\n                : typeof targetOrQrl === 'string'\n                    ? targetOrQrl\n                    : 0,\n            $host$: isTask ? hostOrTask.$el$ : hostOrTask,\n            $target$: targetOrQrl,\n            $payload$: isTask ? hostOrTask : payload,\n            $resolve$: null,\n            $promise$: null,\n            $returnValue$: null,\n            $executed$: false,\n        };\n        chore = sortedInsert(choreQueue, chore, container.rootVNode || null);\n        DEBUG && debugTrace('schedule', chore, currentChore, choreQueue);\n        if (!drainScheduled && runLater) {\n            // If we are not currently draining, we need to schedule a drain.\n            drainScheduled = true;\n            schedule(16 /* ChoreType.JOURNAL_FLUSH */);\n            // Catch here to avoid unhandled promise rejection\n            scheduleDrain()?.catch?.(() => { });\n        }\n        // TODO figure out what to do with chore errors\n        if (runLater) {\n            return getPromise(chore);\n        }\n        else {\n            return drainUpTo(chore, isServer);\n        }\n    }\n    /** Execute all of the chores up to and including the given chore. */\n    function drainUpTo(runUptoChore, isServer) {\n        let maxRetries = 5000;\n        while (choreQueue.length) {\n            if (maxRetries-- < 0) {\n                throw new Error('drainUpTo: max retries reached');\n            }\n            if (currentChore) {\n                // Already running chore, which means we're waiting for async completion\n                return getPromise(currentChore)\n                    .then(() => drainUpTo(runUptoChore, isServer))\n                    .catch((e) => {\n                    container.handleError(e, currentChore?.$host$);\n                });\n            }\n            const nextChore = choreQueue[0];\n            if (nextChore.$executed$) {\n                choreQueue.shift();\n                if (nextChore === runUptoChore) {\n                    break;\n                }\n                continue;\n            }\n            if (vNodeAlreadyDeleted(nextChore) &&\n                // we need to process cleanup tasks for deleted nodes\n                nextChore.$type$ !== 48 /* ChoreType.CLEANUP_VISIBLE */) {\n                DEBUG && debugTrace('skip chore', nextChore, currentChore, choreQueue);\n                choreQueue.shift();\n                continue;\n            }\n            executeChore(nextChore, isServer);\n        }\n        return runUptoChore.$returnValue$;\n    }\n    function executeChore(chore, isServer) {\n        const host = chore.$host$;\n        DEBUG && debugTrace('execute', chore, currentChore, choreQueue);\n        assertEqual(currentChore, null, 'Chore already running.');\n        currentChore = chore;\n        let returnValue = null;\n        try {\n            switch (chore.$type$) {\n                case 255 /* ChoreType.WAIT_FOR_ALL */:\n                    {\n                        if (isServer) {\n                            drainScheduled = false;\n                        }\n                    }\n                    break;\n                case 16 /* ChoreType.JOURNAL_FLUSH */:\n                    {\n                        returnValue = journalFlush();\n                        drainScheduled = false;\n                    }\n                    break;\n                case 6 /* ChoreType.COMPONENT */:\n                    {\n                        returnValue = safeCall(() => executeComponent(container, host, host, chore.$target$, chore.$payload$), (jsx) => {\n                            if (isServer) {\n                                return jsx;\n                            }\n                            else {\n                                const styleScopedId = container.getHostProp(host, QScopedStyle);\n                                return retryOnPromise(() => vnode_diff(container, jsx, host, addComponentStylePrefix(styleScopedId)));\n                            }\n                        }, (err) => container.handleError(err, host));\n                    }\n                    break;\n                case 2 /* ChoreType.RUN_QRL */:\n                    {\n                        const fn = chore.$target$.getFn();\n                        const result = retryOnPromise(() => fn(...chore.$payload$));\n                        if (isPromise(result)) {\n                            const handled = result\n                                .finally(() => {\n                                qrlRuns.splice(qrlRuns.indexOf(handled), 1);\n                            })\n                                .catch((error) => {\n                                container.handleError(error, chore.$host$);\n                            });\n                            // Don't wait for the promise to resolve\n                            // TODO come up with a better solution, we also want concurrent signal handling with tasks but serial tasks\n                            qrlRuns.push(handled);\n                            DEBUG &&\n                                debugTrace('execute.DONE (but still running)', chore, currentChore, choreQueue);\n                            chore.$returnValue$ = handled;\n                            chore.$resolve$?.(handled);\n                            currentChore = null;\n                            chore.$executed$ = true;\n                            // early out so we don't call after()\n                            return;\n                        }\n                        returnValue = null;\n                    }\n                    break;\n                case 3 /* ChoreType.TASK */:\n                case 32 /* ChoreType.VISIBLE */:\n                    {\n                        const payload = chore.$payload$;\n                        if (payload.$flags$ & 4 /* TaskFlags.RESOURCE */) {\n                            const result = runResource(payload, container, host);\n                            // Don't await the return value of the resource, because async resources should not be awaited.\n                            // The reason for this is that we should be able to update for example a node with loading\n                            // text. If we await the resource, the loading text will not be displayed until the resource\n                            // is loaded.\n                            // Awaiting on the client also causes a deadlock.\n                            // In any case, the resource will never throw.\n                            returnValue = isServer ? result : null;\n                        }\n                        else {\n                            returnValue = runTask(payload, container, host);\n                        }\n                    }\n                    break;\n                case 48 /* ChoreType.CLEANUP_VISIBLE */:\n                    {\n                        const task = chore.$payload$;\n                        cleanupTask(task);\n                    }\n                    break;\n                case 4 /* ChoreType.NODE_DIFF */:\n                    {\n                        const parentVirtualNode = chore.$target$;\n                        let jsx = chore.$payload$;\n                        if (isSignal(jsx)) {\n                            jsx = jsx.value;\n                        }\n                        returnValue = retryOnPromise(() => vnode_diff(container, jsx, parentVirtualNode, null));\n                    }\n                    break;\n                case 5 /* ChoreType.NODE_PROP */:\n                    {\n                        const virtualNode = chore.$host$;\n                        const payload = chore.$payload$;\n                        let value = payload.$value$;\n                        if (isSignal(value)) {\n                            value = value.value;\n                        }\n                        const isConst = payload.$isConst$;\n                        const journal = container.$journal$;\n                        const property = chore.$idx$;\n                        const serializedValue = serializeAttribute(property, value, payload.$scopedStyleIdPrefix$);\n                        if (isConst) {\n                            const element = virtualNode[6 /* ElementVNodeProps.element */];\n                            journal.push(2 /* VNodeJournalOpCode.SetAttribute */, element, property, serializedValue);\n                        }\n                        else {\n                            vnode_setAttr(journal, virtualNode, property, serializedValue);\n                        }\n                    }\n                    break;\n                case 1 /* ChoreType.QRL_RESOLVE */: {\n                    {\n                        const target = chore.$target$;\n                        returnValue = !target.resolved ? target.resolve() : null;\n                    }\n                    break;\n                }\n                case 7 /* ChoreType.RECOMPUTE_AND_SCHEDULE_EFFECTS */: {\n                    {\n                        const target = chore.$target$;\n                        const forceRunEffects = target.$forceRunEffects$;\n                        target.$forceRunEffects$ = false;\n                        if (!target.$effects$?.size) {\n                            break;\n                        }\n                        returnValue = retryOnPromise(() => {\n                            if (target.$computeIfNeeded$() || forceRunEffects) {\n                                triggerEffects(container, target, target.$effects$);\n                            }\n                        });\n                    }\n                    break;\n                }\n            }\n        }\n        catch (e) {\n            returnValue = Promise.reject(e);\n        }\n        const after = (value, error) => {\n            currentChore = null;\n            chore.$executed$ = true;\n            if (error) {\n                DEBUG && debugTrace('execute.ERROR', chore, currentChore, choreQueue);\n                container.handleError(error, host);\n            }\n            else {\n                chore.$returnValue$ = value;\n                DEBUG && debugTrace('execute.DONE', chore, currentChore, choreQueue);\n                chore.$resolve$?.(value);\n            }\n        };\n        if (isPromise(returnValue)) {\n            chore.$promise$ = returnValue.then(after, (error) => after(undefined, error));\n            chore.$resolve$?.(chore.$promise$);\n            chore.$resolve$ = undefined;\n        }\n        else {\n            after(returnValue);\n        }\n    }\n    /**\n     * Compares two chores to determine their execution order in the scheduler's queue.\n     *\n     * @param a - The first chore to compare\n     * @param b - The second chore to compare\n     * @param rootVNode\n     * @returns A number indicating the relative order of the chores. A negative number means `a` runs\n     *   before `b`.\n     */\n    function choreComparator(a, b, rootVNode) {\n        const macroTypeDiff = (a.$type$ & 240 /* ChoreType.MACRO */) - (b.$type$ & 240 /* ChoreType.MACRO */);\n        if (macroTypeDiff !== 0) {\n            return macroTypeDiff;\n        }\n        const aHost = a.$host$;\n        const bHost = b.$host$;\n        if (aHost !== bHost && aHost !== null && bHost !== null) {\n            if (vnode_isVNode(aHost) && vnode_isVNode(bHost)) {\n                // we are running on the client.\n                const hostDiff = vnode_documentPosition(aHost, bHost, rootVNode);\n                if (hostDiff !== 0) {\n                    return hostDiff;\n                }\n            }\n            else {\n                assertFalse(vnode_isVNode(aHost), 'expected aHost to be SSRNode but it is a VNode');\n                assertFalse(vnode_isVNode(bHost), 'expected bHost to be SSRNode but it is a VNode');\n                // we are running on the server.\n                // On server we can't schedule task for a different host!\n                // Server is SSR, and therefore scheduling for anything but the current host\n                // implies that things need to be re-run nad that is not supported because of streaming.\n                const errorMessage = `SERVER: during HTML streaming, re-running tasks on a different host is not allowed.\n          You are attempting to change a state that has already been streamed to the client.\n          This can lead to inconsistencies between Server-Side Rendering (SSR) and Client-Side Rendering (CSR).\n          Problematic Node: ${aHost.toString()}`;\n                logWarn(errorMessage);\n                const hostDiff = ssrNodeDocumentPosition(aHost, bHost);\n                if (hostDiff !== 0) {\n                    return hostDiff;\n                }\n            }\n        }\n        const microTypeDiff = (a.$type$ & 15 /* ChoreType.MICRO */) - (b.$type$ & 15 /* ChoreType.MICRO */);\n        if (microTypeDiff !== 0) {\n            return microTypeDiff;\n        }\n        // types are the same\n        const idxDiff = toNumber(a.$idx$) - toNumber(b.$idx$);\n        if (idxDiff !== 0) {\n            return idxDiff;\n        }\n        // If the host is the same (or missing), and the type is the same,  we need to compare the target.\n        if (a.$target$ !== b.$target$ || a.$payload$ !== b.$payload$) {\n            // 1 means that we are going to process chores as FIFO\n            return 1;\n        }\n        // If the chore is the same as the current chore, we will run it again\n        if (b === currentChore) {\n            return 1;\n        }\n        // The chores are the same and will run only once\n        return 0;\n    }\n    function sortedFindIndex(sortedArray, value, rootVNode) {\n        /// We need to ensure that the `queue` is sorted by priority.\n        /// 1. Find a place where to insert into.\n        let bottom = 0;\n        let top = sortedArray.length;\n        while (bottom < top) {\n            const middle = bottom + ((top - bottom) >> 1);\n            const midChore = sortedArray[middle];\n            const comp = choreComparator(value, midChore, rootVNode);\n            if (comp < 0) {\n                top = middle;\n            }\n            else if (comp > 0) {\n                bottom = middle + 1;\n            }\n            else {\n                // We already have the host in the queue.\n                return middle;\n            }\n        }\n        return ~bottom;\n    }\n    function sortedInsert(sortedArray, value, rootVNode) {\n        /// We need to ensure that the `queue` is sorted by priority.\n        /// 1. Find a place where to insert into.\n        const idx = sortedFindIndex(sortedArray, value, rootVNode);\n        if (idx < 0) {\n            /// 2. Insert the chore into the queue.\n            sortedArray.splice(~idx, 0, value);\n            return value;\n        }\n        const existing = sortedArray[idx];\n        /**\n         * When a derived signal is updated we need to run vnode_diff. However the signal can update\n         * multiple times during component execution. For this reason it is necessary for us to update\n         * the chore with the latest result of the signal.\n         */\n        if (existing.$type$ === 4 /* ChoreType.NODE_DIFF */) {\n            existing.$payload$ = value.$payload$;\n        }\n        if (existing.$executed$) {\n            existing.$executed$ = false;\n        }\n        return existing;\n    }\n};\nconst toNumber = (value) => {\n    return typeof value === 'number' ? value : -1;\n};\nfunction vNodeAlreadyDeleted(chore) {\n    return !!(chore.$host$ &&\n        vnode_isVNode(chore.$host$) &&\n        chore.$host$[0 /* VNodeProps.flags */] & 32 /* VNodeFlags.Deleted */);\n}\nfunction debugChoreTypeToString(type) {\n    return ({\n        [1 /* ChoreType.QRL_RESOLVE */]: 'QRL_RESOLVE',\n        [2 /* ChoreType.RUN_QRL */]: 'RUN_QRL',\n        [3 /* ChoreType.TASK */]: 'TASK',\n        [4 /* ChoreType.NODE_DIFF */]: 'NODE_DIFF',\n        [5 /* ChoreType.NODE_PROP */]: 'NODE_PROP',\n        [6 /* ChoreType.COMPONENT */]: 'COMPONENT',\n        [7 /* ChoreType.RECOMPUTE_AND_SCHEDULE_EFFECTS */]: 'RECOMPUTE_SIGNAL',\n        [16 /* ChoreType.JOURNAL_FLUSH */]: 'JOURNAL_FLUSH',\n        [32 /* ChoreType.VISIBLE */]: 'VISIBLE',\n        [48 /* ChoreType.CLEANUP_VISIBLE */]: 'CLEANUP_VISIBLE',\n        [255 /* ChoreType.WAIT_FOR_ALL */]: 'WAIT_FOR_ALL',\n    }[type] || 'UNKNOWN: ' + type);\n}\nfunction debugChoreToString(chore) {\n    const type = debugChoreTypeToString(chore.$type$);\n    const host = String(chore.$host$).replaceAll(/\\n.*/gim, '');\n    const qrlTarget = chore.$target$?.$symbol$;\n    return `Chore(${type} ${chore.$type$ === 1 /* ChoreType.QRL_RESOLVE */ || chore.$type$ === 2 /* ChoreType.RUN_QRL */ ? qrlTarget : host} ${chore.$idx$})`;\n}\nfunction debugTrace(action, arg, currentChore, queue) {\n    const lines = ['===========================\\nScheduler: ' + action];\n    if (arg && !('$type$' in arg)) {\n        lines.push('      arg: ' + String(arg).replaceAll(/\\n.*/gim, ''));\n    }\n    if (queue) {\n        queue.forEach((chore) => {\n            const active = chore === arg ? '>>>' : '   ';\n            lines.push(`     ${active} > ` +\n                (chore === currentChore ? '[running] ' : '') +\n                debugChoreToString(chore));\n        });\n    }\n    // eslint-disable-next-line no-console\n    console.log(lines.join('\\n') + '\\n');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9zY2hlZHVsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0ZHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBcUIsTUFBTSx5QkFBeUIsQ0FBQztBQVM1RSxPQUFPLEVBQXNCLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBK0MsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsUUFBUSxFQUFlLE1BQU0seUJBQXlCLENBQUM7QUFHaEUsT0FBTyxFQUFFLFdBQVcsRUFBMkIsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRSxPQUFPLEVBR0wsV0FBVyxFQUNYLE9BQU8sR0FHUixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEUs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SUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNjaGVkdWxlciBpcyByZXNwb25zaWJsZSBmb3IgcnVubmluZyBhcHBsaWNhdGlvbiBjb2RlIGluIHByZWRpY3RhYmxlIG9yZGVyLlxuICpcbiAqICMjIFdoYXQgaXMgYSBDaG9yZT9cbiAqXG4gKiBBIENob3JlIGlzIGEgdW5pdCBvZiB3b3JrIHRoYXQgbmVlZHMgdG8gYmUgZG9uZS4gSXQgY2FuIGJlOlxuICpcbiAqIC0gVGFzayAvIFJlc291cmNlXG4gKiAtIFZpc2libGUgVGFza1xuICogLSBDb21wb25lbnRcbiAqIC0gQ29tcHV0ZWRcbiAqIC0gTm9kZSBEaWZmXG4gKlxuICogIyMgT3JkZXIgb2YgZXhlY3V0aW9uXG4gKlxuICogLSBQYXJlbnQgY29tcG9uZW50IGNob3JlcyBzaG91bGQgcnVuIGJlZm9yZSBjaGlsZCBjb21wb25lbnQgY2hvcmVzLlxuICogLSBWaXNpYmxlIFRhc2tzIHNob3VsZCBydW4gYWZ0ZXIgam91cm5hbCBmbHVzaCAodmlzaWJsZSB0YXNrcyBvZnRlbiByZWFkIERPTSBsYXlvdXQuKVxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBDaGlsZCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICB1c2VUYXNrJCgoKSA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coJ0NoaWxkIHRhc2snKTtcbiAqICAgfSk7XG4gKiAgIHVzZVZpc2libGVUYXNrJCgoKSA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coJ0NoaWxkIHZpc2libGUtdGFzaycpO1xuICogICB9KTtcbiAqICAgY29uc29sZS5sb2coJ0NoaWxkIHJlbmRlcicpO1xuICogICByZXR1cm4gPGRpdj5DaGlsZDwvZGl2PjtcbiAqIH0pO1xuICpcbiAqIGNvbnN0IFBhcmVudCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICBjb25zdCBjb3VudCA9IHVzZVNpZ25hbCgwKTtcbiAqICAgdXNlVGFzayQoKCkgPT4ge1xuICogICAgIGNvbnNvbGUubG9nKCdQYXJlbnQgdGFzaycsIGNvdW50LnZhbHVlKTtcbiAqICAgfSk7XG4gKiAgIHVzZVZpc2libGVUYXNrJCgoKSA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coJ1BhcmVudCB2aXNpYmxlLXRhc2snLCBjb3VudC52YWx1ZSk7XG4gKiAgICAgY291bnQudmFsdWUrKztcbiAqICAgfSk7XG4gKiAgIGNvbnNvbGUubG9nKCdQYXJlbnQgcmVuZGVyJywgY291bnQudmFsdWUpO1xuICogICByZXR1cm4gPENoaWxkLz47XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqICMjIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uIGlzOlxuICpcbiAqIDEuIFBhcmVudCB0YXNrIDBcbiAqIDIuIFBhcmVudCByZW5kZXIgMFxuICogMy4gQ2hpbGQgdGFzayAwXG4gKiA0LiBDaGlsZCByZW5kZXIgMFxuICogNS4gSm91cm5hbCBmbHVzaFxuICogNi4gUGFyZW50IHZpc2libGUtdGFzayAwXG4gKiA3LiBQYXJlbnQgcmVuZGVyIDFcbiAqIDguIEpvdXJuYWwgZmx1c2hcbiAqIDkuIENoaWxkIHZpc2libGUtdGFza1xuICpcbiAqIElmIGF0IGFueSBwb2ludCBhIG5ldyBjaG9yZSBpcyBzY2hlZHVsZWQgaXQgd2lsbCBpbnNlcnQgaXRzZWxmIGludG8gdGhlIGNvcnJlY3Qgb3JkZXIuXG4gKlxuICogIyMgSW1wbGVtZW50YXRpb25cbiAqXG4gKiBDaG9yZXMgYXJlIGtlcHQgaW4gYSBzb3J0ZWQgYXJyYXkuIFdoZW4gYSBuZXcgY2hvcmUgaXMgc2NoZWR1bGVkIGl0IGlzIGluc2VydGVkIGludG8gdGhlIGNvcnJlY3RcbiAqIGxvY2F0aW9uLiBQcm9jZXNzaW5nIG9mIHRoZSBjaG9yZXMgYWx3YXlzIHN0YXJ0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LiBUaGlzIGVuc3VyZXNcbiAqIHRoYXQgcGFyZW50IGNob3JlcyBhcmUgcHJvY2Vzc2VkIGJlZm9yZSBjaGlsZCBjaG9yZXMuXG4gKlxuICogIyMgU29ydGluZ1xuICpcbiAqIENob3JlcyBhcmUgc29ydGVkIGluIHRocmVlIGxldmVsczpcbiAqXG4gKiAtIE1hY3JvOiBiZWZvcmVKb3VybmFsRmx1c2gsIGpvdXJuYWxGbHVzaCwgYWZ0ZXJKb3VybmFsRmx1c2hcbiAqIC0gQ29tcG9uZW50OiBkZXB0aCBmaXJzdCBvcmRlciBvZiBjb21wb25lbnRzXG4gKiAtIE1pY3JvOiBvcmRlciBvZiBjaG9yZXMgd2l0aGluIGEgY29tcG9uZW50LlxuICpcbiAqIEV4YW1wbGUgb2Ygc29ydGluZzpcbiAqXG4gKiAtIFRhc2tzIGFyZSBiZWZvcmVKb3VybmFsRmx1c2gsIHRoYW4gZGVwdGggZmlyc3Qgb24gY29tcG9uZW50IGFuZCBmaW5hbGx5IGluIGRlY2xhcmF0aW9uIG9yZGVyXG4gKiAgIHdpdGhpbiBjb21wb25lbnQuXG4gKiAtIFZpc2libGUgVGFza3MgYXJlIHNvcnRlZCBhZnRlckpvdXJuYWxGbHVzaCwgdGhhbiBkZXB0aCBmaXJzdCBvbiBjb21wb25lbnQgYW5kIGZpbmFsbHkgaW5cbiAqICAgZGVjbGFyYXRpb24gb3JkZXIgd2l0aGluIGNvbXBvbmVudC5cbiAqL1xuXG5pbXBvcnQgeyBpc0RvbUNvbnRhaW5lciwgdHlwZSBEb21Db250YWluZXIgfSBmcm9tICcuLi9jbGllbnQvZG9tLWNvbnRhaW5lcic7XG5pbXBvcnQge1xuICBFbGVtZW50Vk5vZGVQcm9wcyxcbiAgVk5vZGVGbGFncyxcbiAgVk5vZGVQcm9wcyxcbiAgdHlwZSBDbGllbnRDb250YWluZXIsXG4gIHR5cGUgRWxlbWVudFZOb2RlLFxuICB0eXBlIFZpcnR1YWxWTm9kZSxcbn0gZnJvbSAnLi4vY2xpZW50L3R5cGVzJztcbmltcG9ydCB7IFZOb2RlSm91cm5hbE9wQ29kZSwgdm5vZGVfaXNWTm9kZSwgdm5vZGVfc2V0QXR0ciB9IGZyb20gJy4uL2NsaWVudC92bm9kZSc7XG5pbXBvcnQgeyB2bm9kZV9kaWZmIH0gZnJvbSAnLi4vY2xpZW50L3Zub2RlLWRpZmYnO1xuaW1wb3J0IHsgdHJpZ2dlckVmZmVjdHMsIHR5cGUgQ29tcHV0ZWRTaWduYWxJbXBsLCB0eXBlIFdyYXBwZWRTaWduYWwgfSBmcm9tICcuLi9zaWduYWwvc2lnbmFsJztcbmltcG9ydCB7IGlzU2lnbmFsLCB0eXBlIFNpZ25hbCB9IGZyb20gJy4uL3NpZ25hbC9zaWduYWwucHVibGljJztcbmltcG9ydCB0eXBlIHsgVGFyZ2V0VHlwZSB9IGZyb20gJy4uL3NpZ25hbC9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IElTc3JOb2RlIH0gZnJvbSAnLi4vc3NyL3Nzci10eXBlcyc7XG5pbXBvcnQgeyBydW5SZXNvdXJjZSwgdHlwZSBSZXNvdXJjZURlc2NyaXB0b3IgfSBmcm9tICcuLi91c2UvdXNlLXJlc291cmNlJztcbmltcG9ydCB7XG4gIFRhc2ssXG4gIFRhc2tGbGFncyxcbiAgY2xlYW51cFRhc2ssXG4gIHJ1blRhc2ssXG4gIHR5cGUgRGVzY3JpcHRvckJhc2UsXG4gIHR5cGUgVGFza0ZuLFxufSBmcm9tICcuLi91c2UvdXNlLXRhc2snO1xuaW1wb3J0IHsgQ2hvcmVUeXBlIH0gZnJvbSAnLi91dGlsLWNob3JlLXR5cGUnO1xuaW1wb3J0IHsgZXhlY3V0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50LWV4ZWN1dGlvbic7XG5pbXBvcnQgdHlwZSB7IE9uUmVuZGVyRm4gfSBmcm9tICcuL2NvbXBvbmVudC5wdWJsaWMnO1xuaW1wb3J0IHsgYXNzZXJ0RXF1YWwsIGFzc2VydEZhbHNlIH0gZnJvbSAnLi9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4vanN4L2pzeC1ydW50aW1lJztcbmltcG9ydCB0eXBlIHsgSlNYT3V0cHV0IH0gZnJvbSAnLi9qc3gvdHlwZXMvanN4LW5vZGUnO1xuaW1wb3J0IHsgdHlwZSBRUkxJbnRlcm5hbCB9IGZyb20gJy4vcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQgeyBzc3JOb2RlRG9jdW1lbnRQb3NpdGlvbiwgdm5vZGVfZG9jdW1lbnRQb3NpdGlvbiB9IGZyb20gJy4vc2NoZWR1bGVyLWRvY3VtZW50LXBvc2l0aW9uJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyLCBIb3N0RWxlbWVudCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgbG9nV2FybiB9IGZyb20gJy4vdXRpbHMvbG9nJztcbmltcG9ydCB7IFFTY29wZWRTdHlsZSB9IGZyb20gJy4vdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyBpc1Byb21pc2UsIHJldHJ5T25Qcm9taXNlLCBzYWZlQ2FsbCB9IGZyb20gJy4vdXRpbHMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgYWRkQ29tcG9uZW50U3R5bGVQcmVmaXggfSBmcm9tICcuL3V0aWxzL3Njb3BlZC1zdHlsZXMnO1xuaW1wb3J0IHsgc2VyaWFsaXplQXR0cmlidXRlIH0gZnJvbSAnLi91dGlscy9zdHlsZXMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZU9yUHJvbWlzZSB9IGZyb20gJy4vdXRpbHMvdHlwZXMnO1xuXG4vLyBUdXJuIHRoaXMgb24gdG8gZ2V0IGRlYnVnIG91dHB1dCBvZiB3aGF0IHRoZSBzY2hlZHVsZXIgaXMgZG9pbmcuXG5jb25zdCBERUJVRzogYm9vbGVhbiA9IGZhbHNlO1xuXG5leHBvcnQgaW50ZXJmYWNlIENob3JlIHtcbiAgJHR5cGUkOiBDaG9yZVR5cGU7XG4gICRpZHgkOiBudW1iZXIgfCBzdHJpbmc7XG4gICRob3N0JDogSG9zdEVsZW1lbnQ7XG4gICR0YXJnZXQkOiBDaG9yZVRhcmdldCB8IG51bGw7XG4gICRwYXlsb2FkJDogdW5rbm93bjtcbiAgJHJlc29sdmUkPzogKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gICRwcm9taXNlJD86IFByb21pc2U8YW55PjtcbiAgJHJldHVyblZhbHVlJDogYW55O1xuICAkZXhlY3V0ZWQkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVQcm9wRGF0YSB7XG4gICRzY29wZWRTdHlsZUlkUHJlZml4JDogc3RyaW5nIHwgbnVsbDtcbiAgJGlzQ29uc3QkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVQcm9wUGF5bG9hZCBleHRlbmRzIE5vZGVQcm9wRGF0YSB7XG4gICR2YWx1ZSQ6IFNpZ25hbDx1bmtub3duPjtcbn1cblxuZXhwb3J0IHR5cGUgU2NoZWR1bGVyID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlU2NoZWR1bGVyPjtcblxudHlwZSBDaG9yZVRhcmdldCA9IEhvc3RFbGVtZW50IHwgUVJMSW50ZXJuYWw8KC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bj4gfCBTaWduYWwgfCBUYXJnZXRUeXBlO1xuXG5jb25zdCBnZXRQcm9taXNlID0gKGNob3JlOiBDaG9yZSkgPT5cbiAgKGNob3JlLiRwcm9taXNlJCB8fD0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjaG9yZS4kcmVzb2x2ZSQgPSByZXNvbHZlO1xuICB9KSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTY2hlZHVsZXIgPSAoXG4gIGNvbnRhaW5lcjogQ29udGFpbmVyLFxuICBzY2hlZHVsZURyYWluOiAoKSA9PiB2b2lkLFxuICBqb3VybmFsRmx1c2g6ICgpID0+IHZvaWRcbikgPT4ge1xuICBjb25zdCBjaG9yZVF1ZXVlOiBDaG9yZVtdID0gW107XG4gIGNvbnN0IHFybFJ1bnM6IFByb21pc2U8YW55PltdID0gW107XG5cbiAgbGV0IGN1cnJlbnRDaG9yZTogQ2hvcmUgfCBudWxsID0gbnVsbDtcbiAgbGV0IGRyYWluU2NoZWR1bGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmV0dXJuIHNjaGVkdWxlO1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUoXG4gICAgdHlwZTogQ2hvcmVUeXBlLlFSTF9SRVNPTFZFLFxuICAgIGlnbm9yZTogbnVsbCxcbiAgICB0YXJnZXQ6IFFSTEludGVybmFsPCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24+XG4gICk6IFZhbHVlT3JQcm9taXNlPHZvaWQ+O1xuICBmdW5jdGlvbiBzY2hlZHVsZSh0eXBlOiBDaG9yZVR5cGUuSk9VUk5BTF9GTFVTSCk6IFZhbHVlT3JQcm9taXNlPHZvaWQ+O1xuICBmdW5jdGlvbiBzY2hlZHVsZSh0eXBlOiBDaG9yZVR5cGUuV0FJVF9GT1JfQUxMKTogVmFsdWVPclByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBTY2hlZHVsZSByZW5kZXJpbmcgb2YgYSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqIEBwYXJhbSBob3N0IC0gSG9zdCBlbGVtZW50IHdoZXJlIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgcmVuZGVyZWQuXG4gICAqIEBwYXJhbSB0YXJnZXRcbiAgICovXG4gIGZ1bmN0aW9uIHNjaGVkdWxlKFxuICAgIHR5cGU6IENob3JlVHlwZS5SRUNPTVBVVEVfQU5EX1NDSEVEVUxFX0VGRkVDVFMsXG4gICAgaG9zdDogSG9zdEVsZW1lbnQgfCBudWxsLFxuICAgIHRhcmdldDogU2lnbmFsXG4gICk6IFZhbHVlT3JQcm9taXNlPHZvaWQ+O1xuICBmdW5jdGlvbiBzY2hlZHVsZSh0eXBlOiBDaG9yZVR5cGUuVEFTSyB8IENob3JlVHlwZS5WSVNJQkxFLCB0YXNrOiBUYXNrKTogVmFsdWVPclByb21pc2U8dm9pZD47XG4gIGZ1bmN0aW9uIHNjaGVkdWxlKFxuICAgIHR5cGU6IENob3JlVHlwZS5SVU5fUVJMLFxuICAgIGhvc3Q6IEhvc3RFbGVtZW50LFxuICAgIHRhcmdldDogUVJMSW50ZXJuYWw8KC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bj4sXG4gICAgYXJnczogdW5rbm93bltdXG4gICk6IFZhbHVlT3JQcm9taXNlPHZvaWQ+O1xuICBmdW5jdGlvbiBzY2hlZHVsZShcbiAgICB0eXBlOiBDaG9yZVR5cGUuQ09NUE9ORU5ULFxuICAgIGhvc3Q6IEhvc3RFbGVtZW50LFxuICAgIHFybDogUVJMSW50ZXJuYWw8T25SZW5kZXJGbjx1bmtub3duPj4sXG4gICAgcHJvcHM6IFByb3BzIHwgbnVsbFxuICApOiBWYWx1ZU9yUHJvbWlzZTxKU1hPdXRwdXQ+O1xuICBmdW5jdGlvbiBzY2hlZHVsZShcbiAgICB0eXBlOiBDaG9yZVR5cGUuTk9ERV9ESUZGLFxuICAgIGhvc3Q6IEhvc3RFbGVtZW50LFxuICAgIHRhcmdldDogSG9zdEVsZW1lbnQsXG4gICAgdmFsdWU6IEpTWE91dHB1dCB8IFNpZ25hbFxuICApOiBWYWx1ZU9yUHJvbWlzZTx2b2lkPjtcbiAgZnVuY3Rpb24gc2NoZWR1bGUoXG4gICAgdHlwZTogQ2hvcmVUeXBlLk5PREVfUFJPUCxcbiAgICBob3N0OiBIb3N0RWxlbWVudCxcbiAgICBwcm9wOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueVxuICApOiBWYWx1ZU9yUHJvbWlzZTx2b2lkPjtcbiAgZnVuY3Rpb24gc2NoZWR1bGUodHlwZTogQ2hvcmVUeXBlLkNMRUFOVVBfVklTSUJMRSwgdGFzazogVGFzayk6IFZhbHVlT3JQcm9taXNlPEpTWE91dHB1dD47XG4gIC8vLy8vIElNUExFTUVOVEFUSU9OIC8vLy8vXG4gIGZ1bmN0aW9uIHNjaGVkdWxlKFxuICAgIHR5cGU6IENob3JlVHlwZSxcbiAgICBob3N0T3JUYXNrOiBIb3N0RWxlbWVudCB8IFRhc2sgfCBudWxsID0gbnVsbCxcbiAgICB0YXJnZXRPclFybDogQ2hvcmVUYXJnZXQgfCBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBwYXlsb2FkOiBhbnkgPSBudWxsXG4gICk6IFZhbHVlT3JQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGlzU2VydmVyID0gIWlzRG9tQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgY29uc3QgaXNDb21wb25lbnRTc3IgPSBpc1NlcnZlciAmJiB0eXBlID09PSBDaG9yZVR5cGUuQ09NUE9ORU5UO1xuXG4gICAgY29uc3QgcnVuTGF0ZXI6IGJvb2xlYW4gPVxuICAgICAgdHlwZSAhPT0gQ2hvcmVUeXBlLldBSVRfRk9SX0FMTCAmJiAhaXNDb21wb25lbnRTc3IgJiYgdHlwZSAhPT0gQ2hvcmVUeXBlLlJVTl9RUkw7XG4gICAgY29uc3QgaXNUYXNrID1cbiAgICAgIHR5cGUgPT09IENob3JlVHlwZS5UQVNLIHx8IHR5cGUgPT09IENob3JlVHlwZS5WSVNJQkxFIHx8IHR5cGUgPT09IENob3JlVHlwZS5DTEVBTlVQX1ZJU0lCTEU7XG4gICAgY29uc3QgaXNDbGllbnRPbmx5ID1cbiAgICAgIHR5cGUgPT09IENob3JlVHlwZS5KT1VSTkFMX0ZMVVNIIHx8XG4gICAgICB0eXBlID09PSBDaG9yZVR5cGUuTk9ERV9ESUZGIHx8XG4gICAgICB0eXBlID09PSBDaG9yZVR5cGUuTk9ERV9QUk9QO1xuICAgIGlmIChpc1NlcnZlciAmJiBpc0NsaWVudE9ubHkpIHtcbiAgICAgIERFQlVHICYmXG4gICAgICAgIGRlYnVnVHJhY2UoXG4gICAgICAgICAgYHNraXAgY2xpZW50IGNob3JlICR7ZGVidWdDaG9yZVR5cGVUb1N0cmluZyh0eXBlKX1gLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgY3VycmVudENob3JlLFxuICAgICAgICAgIGNob3JlUXVldWVcbiAgICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNUYXNrKSB7XG4gICAgICAoaG9zdE9yVGFzayBhcyBUYXNrKS4kZmxhZ3MkIHw9IFRhc2tGbGFncy5ESVJUWTtcbiAgICB9XG4gICAgbGV0IGNob3JlOiBDaG9yZSA9IHtcbiAgICAgICR0eXBlJDogdHlwZSxcbiAgICAgICRpZHgkOiBpc1Rhc2tcbiAgICAgICAgPyAoaG9zdE9yVGFzayBhcyBUYXNrKS4kaW5kZXgkXG4gICAgICAgIDogdHlwZW9mIHRhcmdldE9yUXJsID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gdGFyZ2V0T3JRcmxcbiAgICAgICAgICA6IDAsXG4gICAgICAkaG9zdCQ6IGlzVGFzayA/IChob3N0T3JUYXNrIGFzIFRhc2spLiRlbCQgOiAoaG9zdE9yVGFzayBhcyBIb3N0RWxlbWVudCksXG4gICAgICAkdGFyZ2V0JDogdGFyZ2V0T3JRcmwgYXMgQ2hvcmVUYXJnZXQgfCBudWxsLFxuICAgICAgJHBheWxvYWQkOiBpc1Rhc2sgPyBob3N0T3JUYXNrIDogcGF5bG9hZCxcbiAgICAgICRyZXNvbHZlJDogbnVsbCEsXG4gICAgICAkcHJvbWlzZSQ6IG51bGwhLFxuICAgICAgJHJldHVyblZhbHVlJDogbnVsbCxcbiAgICAgICRleGVjdXRlZCQ6IGZhbHNlLFxuICAgIH07XG5cbiAgICBjaG9yZSA9IHNvcnRlZEluc2VydChjaG9yZVF1ZXVlLCBjaG9yZSwgKGNvbnRhaW5lciBhcyBEb21Db250YWluZXIpLnJvb3RWTm9kZSB8fCBudWxsKTtcblxuICAgIERFQlVHICYmIGRlYnVnVHJhY2UoJ3NjaGVkdWxlJywgY2hvcmUsIGN1cnJlbnRDaG9yZSwgY2hvcmVRdWV1ZSk7XG4gICAgaWYgKCFkcmFpblNjaGVkdWxlZCAmJiBydW5MYXRlcikge1xuICAgICAgLy8gSWYgd2UgYXJlIG5vdCBjdXJyZW50bHkgZHJhaW5pbmcsIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBkcmFpbi5cbiAgICAgIGRyYWluU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHNjaGVkdWxlKENob3JlVHlwZS5KT1VSTkFMX0ZMVVNIKTtcbiAgICAgIC8vIENhdGNoIGhlcmUgdG8gYXZvaWQgdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXG4gICAgICAoc2NoZWR1bGVEcmFpbigpIGFzIGFueSk/LmNhdGNoPy4oKCkgPT4ge30pO1xuICAgIH1cbiAgICAvLyBUT0RPIGZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGNob3JlIGVycm9yc1xuICAgIGlmIChydW5MYXRlcikge1xuICAgICAgcmV0dXJuIGdldFByb21pc2UoY2hvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZHJhaW5VcFRvKGNob3JlLCBpc1NlcnZlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEV4ZWN1dGUgYWxsIG9mIHRoZSBjaG9yZXMgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgZ2l2ZW4gY2hvcmUuICovXG4gIGZ1bmN0aW9uIGRyYWluVXBUbyhydW5VcHRvQ2hvcmU6IENob3JlLCBpc1NlcnZlcjogYm9vbGVhbik6IFZhbHVlT3JQcm9taXNlPHVua25vd24+IHtcbiAgICBsZXQgbWF4UmV0cmllcyA9IDUwMDA7XG4gICAgd2hpbGUgKGNob3JlUXVldWUubGVuZ3RoKSB7XG4gICAgICBpZiAobWF4UmV0cmllcy0tIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RyYWluVXBUbzogbWF4IHJldHJpZXMgcmVhY2hlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudENob3JlKSB7XG4gICAgICAgIC8vIEFscmVhZHkgcnVubmluZyBjaG9yZSwgd2hpY2ggbWVhbnMgd2UncmUgd2FpdGluZyBmb3IgYXN5bmMgY29tcGxldGlvblxuICAgICAgICByZXR1cm4gZ2V0UHJvbWlzZShjdXJyZW50Q2hvcmUpXG4gICAgICAgICAgLnRoZW4oKCkgPT4gZHJhaW5VcFRvKHJ1blVwdG9DaG9yZSwgaXNTZXJ2ZXIpKVxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgY29udGFpbmVyLmhhbmRsZUVycm9yKGUsIGN1cnJlbnRDaG9yZT8uJGhvc3QkIGFzIGFueSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRDaG9yZSA9IGNob3JlUXVldWVbMF07XG5cbiAgICAgIGlmIChuZXh0Q2hvcmUuJGV4ZWN1dGVkJCkge1xuICAgICAgICBjaG9yZVF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChuZXh0Q2hvcmUgPT09IHJ1blVwdG9DaG9yZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHZOb2RlQWxyZWFkeURlbGV0ZWQobmV4dENob3JlKSAmJlxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHByb2Nlc3MgY2xlYW51cCB0YXNrcyBmb3IgZGVsZXRlZCBub2Rlc1xuICAgICAgICBuZXh0Q2hvcmUuJHR5cGUkICE9PSBDaG9yZVR5cGUuQ0xFQU5VUF9WSVNJQkxFXG4gICAgICApIHtcbiAgICAgICAgREVCVUcgJiYgZGVidWdUcmFjZSgnc2tpcCBjaG9yZScsIG5leHRDaG9yZSwgY3VycmVudENob3JlLCBjaG9yZVF1ZXVlKTtcbiAgICAgICAgY2hvcmVRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZUNob3JlKG5leHRDaG9yZSwgaXNTZXJ2ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gcnVuVXB0b0Nob3JlLiRyZXR1cm5WYWx1ZSQ7XG4gIH1cblxuICBmdW5jdGlvbiBleGVjdXRlQ2hvcmUoY2hvcmU6IENob3JlLCBpc1NlcnZlcjogYm9vbGVhbikge1xuICAgIGNvbnN0IGhvc3QgPSBjaG9yZS4kaG9zdCQ7XG4gICAgREVCVUcgJiYgZGVidWdUcmFjZSgnZXhlY3V0ZScsIGNob3JlLCBjdXJyZW50Q2hvcmUsIGNob3JlUXVldWUpO1xuICAgIGFzc2VydEVxdWFsKGN1cnJlbnRDaG9yZSwgbnVsbCwgJ0Nob3JlIGFscmVhZHkgcnVubmluZy4nKTtcbiAgICBjdXJyZW50Q2hvcmUgPSBjaG9yZTtcbiAgICBsZXQgcmV0dXJuVmFsdWU6IFZhbHVlT3JQcm9taXNlPHVua25vd24+IHwgdW5rbm93biA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAoY2hvcmUuJHR5cGUkKSB7XG4gICAgICAgIGNhc2UgQ2hvcmVUeXBlLldBSVRfRk9SX0FMTDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgZHJhaW5TY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ2hvcmVUeXBlLkpPVVJOQUxfRkxVU0g6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBqb3VybmFsRmx1c2goKTtcbiAgICAgICAgICAgIGRyYWluU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENob3JlVHlwZS5DT01QT05FTlQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBzYWZlQ2FsbChcbiAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICBleGVjdXRlQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgaG9zdCxcbiAgICAgICAgICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgICAgICAgICBjaG9yZS4kdGFyZ2V0JCBhcyBRUkxJbnRlcm5hbDxPblJlbmRlckZuPHVua25vd24+PixcbiAgICAgICAgICAgICAgICAgIGNob3JlLiRwYXlsb2FkJCBhcyBQcm9wcyB8IG51bGxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAoanN4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4ganN4O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZVNjb3BlZElkID0gY29udGFpbmVyLmdldEhvc3RQcm9wPHN0cmluZz4oaG9zdCwgUVNjb3BlZFN0eWxlKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXRyeU9uUHJvbWlzZSgoKSA9PlxuICAgICAgICAgICAgICAgICAgICB2bm9kZV9kaWZmKFxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciBhcyBDbGllbnRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAganN4LFxuICAgICAgICAgICAgICAgICAgICAgIGhvc3QgYXMgVmlydHVhbFZOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgIGFkZENvbXBvbmVudFN0eWxlUHJlZml4KHN0eWxlU2NvcGVkSWQpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IGNvbnRhaW5lci5oYW5kbGVFcnJvcihlcnIsIGhvc3QpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDaG9yZVR5cGUuUlVOX1FSTDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBmbiA9IChjaG9yZS4kdGFyZ2V0JCBhcyBRUkxJbnRlcm5hbDwoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duPikuZ2V0Rm4oKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJldHJ5T25Qcm9taXNlKCgpID0+IGZuKC4uLihjaG9yZS4kcGF5bG9hZCQgYXMgdW5rbm93bltdKSkpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGhhbmRsZWQgPSByZXN1bHRcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBxcmxSdW5zLnNwbGljZShxcmxSdW5zLmluZGV4T2YoaGFuZGxlZCksIDEpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmhhbmRsZUVycm9yKGVycm9yLCBjaG9yZS4kaG9zdCQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAvLyBEb24ndCB3YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlXG4gICAgICAgICAgICAgIC8vIFRPRE8gY29tZSB1cCB3aXRoIGEgYmV0dGVyIHNvbHV0aW9uLCB3ZSBhbHNvIHdhbnQgY29uY3VycmVudCBzaWduYWwgaGFuZGxpbmcgd2l0aCB0YXNrcyBidXQgc2VyaWFsIHRhc2tzXG4gICAgICAgICAgICAgIHFybFJ1bnMucHVzaChoYW5kbGVkKTtcbiAgICAgICAgICAgICAgREVCVUcgJiZcbiAgICAgICAgICAgICAgICBkZWJ1Z1RyYWNlKCdleGVjdXRlLkRPTkUgKGJ1dCBzdGlsbCBydW5uaW5nKScsIGNob3JlLCBjdXJyZW50Q2hvcmUsIGNob3JlUXVldWUpO1xuICAgICAgICAgICAgICBjaG9yZS4kcmV0dXJuVmFsdWUkID0gaGFuZGxlZDtcbiAgICAgICAgICAgICAgY2hvcmUuJHJlc29sdmUkPy4oaGFuZGxlZCk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaG9yZSA9IG51bGw7XG4gICAgICAgICAgICAgIGNob3JlLiRleGVjdXRlZCQgPSB0cnVlO1xuICAgICAgICAgICAgICAvLyBlYXJseSBvdXQgc28gd2UgZG9uJ3QgY2FsbCBhZnRlcigpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVyblZhbHVlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ2hvcmVUeXBlLlRBU0s6XG4gICAgICAgIGNhc2UgQ2hvcmVUeXBlLlZJU0lCTEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGNob3JlLiRwYXlsb2FkJCBhcyBEZXNjcmlwdG9yQmFzZTtcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLiRmbGFncyQgJiBUYXNrRmxhZ3MuUkVTT1VSQ0UpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcnVuUmVzb3VyY2UocGF5bG9hZCBhcyBSZXNvdXJjZURlc2NyaXB0b3I8VGFza0ZuPiwgY29udGFpbmVyLCBob3N0KTtcbiAgICAgICAgICAgICAgLy8gRG9uJ3QgYXdhaXQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcmVzb3VyY2UsIGJlY2F1c2UgYXN5bmMgcmVzb3VyY2VzIHNob3VsZCBub3QgYmUgYXdhaXRlZC5cbiAgICAgICAgICAgICAgLy8gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHdlIHNob3VsZCBiZSBhYmxlIHRvIHVwZGF0ZSBmb3IgZXhhbXBsZSBhIG5vZGUgd2l0aCBsb2FkaW5nXG4gICAgICAgICAgICAgIC8vIHRleHQuIElmIHdlIGF3YWl0IHRoZSByZXNvdXJjZSwgdGhlIGxvYWRpbmcgdGV4dCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgdW50aWwgdGhlIHJlc291cmNlXG4gICAgICAgICAgICAgIC8vIGlzIGxvYWRlZC5cbiAgICAgICAgICAgICAgLy8gQXdhaXRpbmcgb24gdGhlIGNsaWVudCBhbHNvIGNhdXNlcyBhIGRlYWRsb2NrLlxuICAgICAgICAgICAgICAvLyBJbiBhbnkgY2FzZSwgdGhlIHJlc291cmNlIHdpbGwgbmV2ZXIgdGhyb3cuXG4gICAgICAgICAgICAgIHJldHVyblZhbHVlID0gaXNTZXJ2ZXIgPyByZXN1bHQgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBydW5UYXNrKHBheWxvYWQgYXMgVGFzazxUYXNrRm4sIFRhc2tGbj4sIGNvbnRhaW5lciwgaG9zdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENob3JlVHlwZS5DTEVBTlVQX1ZJU0lCTEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdGFzayA9IGNob3JlLiRwYXlsb2FkJCBhcyBUYXNrPFRhc2tGbiwgVGFza0ZuPjtcbiAgICAgICAgICAgIGNsZWFudXBUYXNrKHRhc2spO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDaG9yZVR5cGUuTk9ERV9ESUZGOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFZpcnR1YWxOb2RlID0gY2hvcmUuJHRhcmdldCQgYXMgVmlydHVhbFZOb2RlO1xuICAgICAgICAgICAgbGV0IGpzeCA9IGNob3JlLiRwYXlsb2FkJCBhcyBKU1hPdXRwdXQ7XG4gICAgICAgICAgICBpZiAoaXNTaWduYWwoanN4KSkge1xuICAgICAgICAgICAgICBqc3ggPSBqc3gudmFsdWUgYXMgYW55O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSByZXRyeU9uUHJvbWlzZSgoKSA9PlxuICAgICAgICAgICAgICB2bm9kZV9kaWZmKGNvbnRhaW5lciBhcyBEb21Db250YWluZXIsIGpzeCwgcGFyZW50VmlydHVhbE5vZGUsIG51bGwpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDaG9yZVR5cGUuTk9ERV9QUk9QOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHZpcnR1YWxOb2RlID0gY2hvcmUuJGhvc3QkIGFzIHVua25vd24gYXMgRWxlbWVudFZOb2RlO1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGNob3JlLiRwYXlsb2FkJCBhcyBOb2RlUHJvcFBheWxvYWQ7XG4gICAgICAgICAgICBsZXQgdmFsdWU6IFNpZ25hbDxhbnk+IHwgc3RyaW5nID0gcGF5bG9hZC4kdmFsdWUkO1xuICAgICAgICAgICAgaWYgKGlzU2lnbmFsKHZhbHVlKSkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnZhbHVlIGFzIGFueTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlzQ29uc3QgPSBwYXlsb2FkLiRpc0NvbnN0JDtcbiAgICAgICAgICAgIGNvbnN0IGpvdXJuYWwgPSAoY29udGFpbmVyIGFzIERvbUNvbnRhaW5lcikuJGpvdXJuYWwkO1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBjaG9yZS4kaWR4JCBhcyBzdHJpbmc7XG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkVmFsdWUgPSBzZXJpYWxpemVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgcGF5bG9hZC4kc2NvcGVkU3R5bGVJZFByZWZpeCRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaXNDb25zdCkge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdmlydHVhbE5vZGVbRWxlbWVudFZOb2RlUHJvcHMuZWxlbWVudF0gYXMgRWxlbWVudDtcbiAgICAgICAgICAgICAgam91cm5hbC5wdXNoKFZOb2RlSm91cm5hbE9wQ29kZS5TZXRBdHRyaWJ1dGUsIGVsZW1lbnQsIHByb3BlcnR5LCBzZXJpYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdm5vZGVfc2V0QXR0cihqb3VybmFsLCB2aXJ0dWFsTm9kZSwgcHJvcGVydHksIHNlcmlhbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENob3JlVHlwZS5RUkxfUkVTT0xWRToge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGNob3JlLiR0YXJnZXQkIGFzIFFSTEludGVybmFsPGFueT47XG4gICAgICAgICAgICByZXR1cm5WYWx1ZSA9ICF0YXJnZXQucmVzb2x2ZWQgPyB0YXJnZXQucmVzb2x2ZSgpIDogbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBDaG9yZVR5cGUuUkVDT01QVVRFX0FORF9TQ0hFRFVMRV9FRkZFQ1RTOiB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gY2hvcmUuJHRhcmdldCQgYXMgQ29tcHV0ZWRTaWduYWxJbXBsPHVua25vd24+IHwgV3JhcHBlZFNpZ25hbDx1bmtub3duPjtcbiAgICAgICAgICAgIGNvbnN0IGZvcmNlUnVuRWZmZWN0cyA9IHRhcmdldC4kZm9yY2VSdW5FZmZlY3RzJDtcbiAgICAgICAgICAgIHRhcmdldC4kZm9yY2VSdW5FZmZlY3RzJCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQuJGVmZmVjdHMkPy5zaXplKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSByZXRyeU9uUHJvbWlzZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0YXJnZXQuJGNvbXB1dGVJZk5lZWRlZCQoKSB8fCBmb3JjZVJ1bkVmZmVjdHMpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRWZmZWN0cyhjb250YWluZXIsIHRhcmdldCwgdGFyZ2V0LiRlZmZlY3RzJCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVyblZhbHVlID0gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgfVxuXG4gICAgY29uc3QgYWZ0ZXIgPSAodmFsdWU/OiBhbnksIGVycm9yPzogRXJyb3IpID0+IHtcbiAgICAgIGN1cnJlbnRDaG9yZSA9IG51bGw7XG4gICAgICBjaG9yZS4kZXhlY3V0ZWQkID0gdHJ1ZTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBERUJVRyAmJiBkZWJ1Z1RyYWNlKCdleGVjdXRlLkVSUk9SJywgY2hvcmUsIGN1cnJlbnRDaG9yZSwgY2hvcmVRdWV1ZSk7XG4gICAgICAgIGNvbnRhaW5lci5oYW5kbGVFcnJvcihlcnJvciwgaG9zdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaG9yZS4kcmV0dXJuVmFsdWUkID0gdmFsdWU7XG4gICAgICAgIERFQlVHICYmIGRlYnVnVHJhY2UoJ2V4ZWN1dGUuRE9ORScsIGNob3JlLCBjdXJyZW50Q2hvcmUsIGNob3JlUXVldWUpO1xuICAgICAgICBjaG9yZS4kcmVzb2x2ZSQ/Lih2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChpc1Byb21pc2UocmV0dXJuVmFsdWUpKSB7XG4gICAgICBjaG9yZS4kcHJvbWlzZSQgPSByZXR1cm5WYWx1ZS50aGVuKGFmdGVyLCAoZXJyb3IpID0+IGFmdGVyKHVuZGVmaW5lZCwgZXJyb3IpKTtcbiAgICAgIGNob3JlLiRyZXNvbHZlJD8uKGNob3JlLiRwcm9taXNlJCk7XG4gICAgICBjaG9yZS4kcmVzb2x2ZSQgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyKHJldHVyblZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZXMgdHdvIGNob3JlcyB0byBkZXRlcm1pbmUgdGhlaXIgZXhlY3V0aW9uIG9yZGVyIGluIHRoZSBzY2hlZHVsZXIncyBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIGEgLSBUaGUgZmlyc3QgY2hvcmUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gYiAtIFRoZSBzZWNvbmQgY2hvcmUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gcm9vdFZOb2RlXG4gICAqIEByZXR1cm5zIEEgbnVtYmVyIGluZGljYXRpbmcgdGhlIHJlbGF0aXZlIG9yZGVyIG9mIHRoZSBjaG9yZXMuIEEgbmVnYXRpdmUgbnVtYmVyIG1lYW5zIGBhYCBydW5zXG4gICAqICAgYmVmb3JlIGBiYC5cbiAgICovXG4gIGZ1bmN0aW9uIGNob3JlQ29tcGFyYXRvcihhOiBDaG9yZSwgYjogQ2hvcmUsIHJvb3RWTm9kZTogRWxlbWVudFZOb2RlIHwgbnVsbCk6IG51bWJlciB7XG4gICAgY29uc3QgbWFjcm9UeXBlRGlmZiA9IChhLiR0eXBlJCAmIENob3JlVHlwZS5NQUNSTykgLSAoYi4kdHlwZSQgJiBDaG9yZVR5cGUuTUFDUk8pO1xuICAgIGlmIChtYWNyb1R5cGVEaWZmICE9PSAwKSB7XG4gICAgICByZXR1cm4gbWFjcm9UeXBlRGlmZjtcbiAgICB9XG5cbiAgICBjb25zdCBhSG9zdCA9IGEuJGhvc3QkO1xuICAgIGNvbnN0IGJIb3N0ID0gYi4kaG9zdCQ7XG5cbiAgICBpZiAoYUhvc3QgIT09IGJIb3N0ICYmIGFIb3N0ICE9PSBudWxsICYmIGJIb3N0ICE9PSBudWxsKSB7XG4gICAgICBpZiAodm5vZGVfaXNWTm9kZShhSG9zdCkgJiYgdm5vZGVfaXNWTm9kZShiSG9zdCkpIHtcbiAgICAgICAgLy8gd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGNsaWVudC5cbiAgICAgICAgY29uc3QgaG9zdERpZmYgPSB2bm9kZV9kb2N1bWVudFBvc2l0aW9uKGFIb3N0LCBiSG9zdCwgcm9vdFZOb2RlKTtcbiAgICAgICAgaWYgKGhvc3REaWZmICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGhvc3REaWZmO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnRGYWxzZSh2bm9kZV9pc1ZOb2RlKGFIb3N0KSwgJ2V4cGVjdGVkIGFIb3N0IHRvIGJlIFNTUk5vZGUgYnV0IGl0IGlzIGEgVk5vZGUnKTtcbiAgICAgICAgYXNzZXJ0RmFsc2Uodm5vZGVfaXNWTm9kZShiSG9zdCksICdleHBlY3RlZCBiSG9zdCB0byBiZSBTU1JOb2RlIGJ1dCBpdCBpcyBhIFZOb2RlJyk7XG4gICAgICAgIC8vIHdlIGFyZSBydW5uaW5nIG9uIHRoZSBzZXJ2ZXIuXG4gICAgICAgIC8vIE9uIHNlcnZlciB3ZSBjYW4ndCBzY2hlZHVsZSB0YXNrIGZvciBhIGRpZmZlcmVudCBob3N0IVxuICAgICAgICAvLyBTZXJ2ZXIgaXMgU1NSLCBhbmQgdGhlcmVmb3JlIHNjaGVkdWxpbmcgZm9yIGFueXRoaW5nIGJ1dCB0aGUgY3VycmVudCBob3N0XG4gICAgICAgIC8vIGltcGxpZXMgdGhhdCB0aGluZ3MgbmVlZCB0byBiZSByZS1ydW4gbmFkIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBiZWNhdXNlIG9mIHN0cmVhbWluZy5cbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFNFUlZFUjogZHVyaW5nIEhUTUwgc3RyZWFtaW5nLCByZS1ydW5uaW5nIHRhc2tzIG9uIGEgZGlmZmVyZW50IGhvc3QgaXMgbm90IGFsbG93ZWQuXG4gICAgICAgICAgWW91IGFyZSBhdHRlbXB0aW5nIHRvIGNoYW5nZSBhIHN0YXRlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBzdHJlYW1lZCB0byB0aGUgY2xpZW50LlxuICAgICAgICAgIFRoaXMgY2FuIGxlYWQgdG8gaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gU2VydmVyLVNpZGUgUmVuZGVyaW5nIChTU1IpIGFuZCBDbGllbnQtU2lkZSBSZW5kZXJpbmcgKENTUikuXG4gICAgICAgICAgUHJvYmxlbWF0aWMgTm9kZTogJHthSG9zdC50b1N0cmluZygpfWA7XG4gICAgICAgIGxvZ1dhcm4oZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgY29uc3QgaG9zdERpZmYgPSBzc3JOb2RlRG9jdW1lbnRQb3NpdGlvbihhSG9zdCBhcyBJU3NyTm9kZSwgYkhvc3QgYXMgSVNzck5vZGUpO1xuICAgICAgICBpZiAoaG9zdERpZmYgIT09IDApIHtcbiAgICAgICAgICByZXR1cm4gaG9zdERpZmY7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtaWNyb1R5cGVEaWZmID0gKGEuJHR5cGUkICYgQ2hvcmVUeXBlLk1JQ1JPKSAtIChiLiR0eXBlJCAmIENob3JlVHlwZS5NSUNSTyk7XG4gICAgaWYgKG1pY3JvVHlwZURpZmYgIT09IDApIHtcbiAgICAgIHJldHVybiBtaWNyb1R5cGVEaWZmO1xuICAgIH1cbiAgICAvLyB0eXBlcyBhcmUgdGhlIHNhbWVcblxuICAgIGNvbnN0IGlkeERpZmYgPSB0b051bWJlcihhLiRpZHgkKSAtIHRvTnVtYmVyKGIuJGlkeCQpO1xuICAgIGlmIChpZHhEaWZmICE9PSAwKSB7XG4gICAgICByZXR1cm4gaWR4RGlmZjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgaG9zdCBpcyB0aGUgc2FtZSAob3IgbWlzc2luZyksIGFuZCB0aGUgdHlwZSBpcyB0aGUgc2FtZSwgIHdlIG5lZWQgdG8gY29tcGFyZSB0aGUgdGFyZ2V0LlxuICAgIGlmIChhLiR0YXJnZXQkICE9PSBiLiR0YXJnZXQkIHx8IGEuJHBheWxvYWQkICE9PSBiLiRwYXlsb2FkJCkge1xuICAgICAgLy8gMSBtZWFucyB0aGF0IHdlIGFyZSBnb2luZyB0byBwcm9jZXNzIGNob3JlcyBhcyBGSUZPXG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgY2hvcmUgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgY2hvcmUsIHdlIHdpbGwgcnVuIGl0IGFnYWluXG4gICAgaWYgKGIgPT09IGN1cnJlbnRDaG9yZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLy8gVGhlIGNob3JlcyBhcmUgdGhlIHNhbWUgYW5kIHdpbGwgcnVuIG9ubHkgb25jZVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gc29ydGVkRmluZEluZGV4KFxuICAgIHNvcnRlZEFycmF5OiBDaG9yZVtdLFxuICAgIHZhbHVlOiBDaG9yZSxcbiAgICByb290Vk5vZGU6IEVsZW1lbnRWTm9kZSB8IG51bGxcbiAgKTogbnVtYmVyIHtcbiAgICAvLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgYHF1ZXVlYCBpcyBzb3J0ZWQgYnkgcHJpb3JpdHkuXG4gICAgLy8vIDEuIEZpbmQgYSBwbGFjZSB3aGVyZSB0byBpbnNlcnQgaW50by5cbiAgICBsZXQgYm90dG9tID0gMDtcbiAgICBsZXQgdG9wID0gc29ydGVkQXJyYXkubGVuZ3RoO1xuICAgIHdoaWxlIChib3R0b20gPCB0b3ApIHtcbiAgICAgIGNvbnN0IG1pZGRsZSA9IGJvdHRvbSArICgodG9wIC0gYm90dG9tKSA+PiAxKTtcbiAgICAgIGNvbnN0IG1pZENob3JlID0gc29ydGVkQXJyYXlbbWlkZGxlXTtcbiAgICAgIGNvbnN0IGNvbXAgPSBjaG9yZUNvbXBhcmF0b3IodmFsdWUsIG1pZENob3JlLCByb290Vk5vZGUpO1xuICAgICAgaWYgKGNvbXAgPCAwKSB7XG4gICAgICAgIHRvcCA9IG1pZGRsZTtcbiAgICAgIH0gZWxzZSBpZiAoY29tcCA+IDApIHtcbiAgICAgICAgYm90dG9tID0gbWlkZGxlICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSB0aGUgaG9zdCBpbiB0aGUgcXVldWUuXG4gICAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB+Ym90dG9tO1xuICB9XG5cbiAgZnVuY3Rpb24gc29ydGVkSW5zZXJ0KHNvcnRlZEFycmF5OiBDaG9yZVtdLCB2YWx1ZTogQ2hvcmUsIHJvb3RWTm9kZTogRWxlbWVudFZOb2RlIHwgbnVsbCk6IENob3JlIHtcbiAgICAvLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgYHF1ZXVlYCBpcyBzb3J0ZWQgYnkgcHJpb3JpdHkuXG4gICAgLy8vIDEuIEZpbmQgYSBwbGFjZSB3aGVyZSB0byBpbnNlcnQgaW50by5cbiAgICBjb25zdCBpZHggPSBzb3J0ZWRGaW5kSW5kZXgoc29ydGVkQXJyYXksIHZhbHVlLCByb290Vk5vZGUpO1xuXG4gICAgaWYgKGlkeCA8IDApIHtcbiAgICAgIC8vLyAyLiBJbnNlcnQgdGhlIGNob3JlIGludG8gdGhlIHF1ZXVlLlxuICAgICAgc29ydGVkQXJyYXkuc3BsaWNlKH5pZHgsIDAsIHZhbHVlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZyA9IHNvcnRlZEFycmF5W2lkeF07XG4gICAgLyoqXG4gICAgICogV2hlbiBhIGRlcml2ZWQgc2lnbmFsIGlzIHVwZGF0ZWQgd2UgbmVlZCB0byBydW4gdm5vZGVfZGlmZi4gSG93ZXZlciB0aGUgc2lnbmFsIGNhbiB1cGRhdGVcbiAgICAgKiBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgY29tcG9uZW50IGV4ZWN1dGlvbi4gRm9yIHRoaXMgcmVhc29uIGl0IGlzIG5lY2Vzc2FyeSBmb3IgdXMgdG8gdXBkYXRlXG4gICAgICogdGhlIGNob3JlIHdpdGggdGhlIGxhdGVzdCByZXN1bHQgb2YgdGhlIHNpZ25hbC5cbiAgICAgKi9cbiAgICBpZiAoZXhpc3RpbmcuJHR5cGUkID09PSBDaG9yZVR5cGUuTk9ERV9ESUZGKSB7XG4gICAgICBleGlzdGluZy4kcGF5bG9hZCQgPSB2YWx1ZS4kcGF5bG9hZCQ7XG4gICAgfVxuICAgIGlmIChleGlzdGluZy4kZXhlY3V0ZWQkKSB7XG4gICAgICBleGlzdGluZy4kZXhlY3V0ZWQkID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxufTtcblxuY29uc3QgdG9OdW1iZXIgPSAodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciA9PiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiAtMTtcbn07XG5cbmZ1bmN0aW9uIHZOb2RlQWxyZWFkeURlbGV0ZWQoY2hvcmU6IENob3JlKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIShcbiAgICBjaG9yZS4kaG9zdCQgJiZcbiAgICB2bm9kZV9pc1ZOb2RlKGNob3JlLiRob3N0JCkgJiZcbiAgICBjaG9yZS4kaG9zdCRbVk5vZGVQcm9wcy5mbGFnc10gJiBWTm9kZUZsYWdzLkRlbGV0ZWRcbiAgKTtcbn1cblxuZnVuY3Rpb24gZGVidWdDaG9yZVR5cGVUb1N0cmluZyh0eXBlOiBDaG9yZVR5cGUpOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIChcbiAgICAgIHtcbiAgICAgICAgW0Nob3JlVHlwZS5RUkxfUkVTT0xWRV06ICdRUkxfUkVTT0xWRScsXG4gICAgICAgIFtDaG9yZVR5cGUuUlVOX1FSTF06ICdSVU5fUVJMJyxcbiAgICAgICAgW0Nob3JlVHlwZS5UQVNLXTogJ1RBU0snLFxuICAgICAgICBbQ2hvcmVUeXBlLk5PREVfRElGRl06ICdOT0RFX0RJRkYnLFxuICAgICAgICBbQ2hvcmVUeXBlLk5PREVfUFJPUF06ICdOT0RFX1BST1AnLFxuICAgICAgICBbQ2hvcmVUeXBlLkNPTVBPTkVOVF06ICdDT01QT05FTlQnLFxuICAgICAgICBbQ2hvcmVUeXBlLlJFQ09NUFVURV9BTkRfU0NIRURVTEVfRUZGRUNUU106ICdSRUNPTVBVVEVfU0lHTkFMJyxcbiAgICAgICAgW0Nob3JlVHlwZS5KT1VSTkFMX0ZMVVNIXTogJ0pPVVJOQUxfRkxVU0gnLFxuICAgICAgICBbQ2hvcmVUeXBlLlZJU0lCTEVdOiAnVklTSUJMRScsXG4gICAgICAgIFtDaG9yZVR5cGUuQ0xFQU5VUF9WSVNJQkxFXTogJ0NMRUFOVVBfVklTSUJMRScsXG4gICAgICAgIFtDaG9yZVR5cGUuV0FJVF9GT1JfQUxMXTogJ1dBSVRfRk9SX0FMTCcsXG4gICAgICB9IGFzIFJlY29yZDxDaG9yZVR5cGUsIHN0cmluZz5cbiAgICApW3R5cGVdIHx8ICdVTktOT1dOOiAnICsgdHlwZVxuICApO1xufVxuZnVuY3Rpb24gZGVidWdDaG9yZVRvU3RyaW5nKGNob3JlOiBDaG9yZSk6IHN0cmluZyB7XG4gIGNvbnN0IHR5cGUgPSBkZWJ1Z0Nob3JlVHlwZVRvU3RyaW5nKGNob3JlLiR0eXBlJCk7XG4gIGNvbnN0IGhvc3QgPSBTdHJpbmcoY2hvcmUuJGhvc3QkKS5yZXBsYWNlQWxsKC9cXG4uKi9naW0sICcnKTtcbiAgY29uc3QgcXJsVGFyZ2V0ID0gKGNob3JlLiR0YXJnZXQkIGFzIFFSTEludGVybmFsPGFueT4pPy4kc3ltYm9sJDtcbiAgcmV0dXJuIGBDaG9yZSgke3R5cGV9ICR7Y2hvcmUuJHR5cGUkID09PSBDaG9yZVR5cGUuUVJMX1JFU09MVkUgfHwgY2hvcmUuJHR5cGUkID09PSBDaG9yZVR5cGUuUlVOX1FSTCA/IHFybFRhcmdldCA6IGhvc3R9ICR7Y2hvcmUuJGlkeCR9KWA7XG59XG5cbmZ1bmN0aW9uIGRlYnVnVHJhY2UoXG4gIGFjdGlvbjogc3RyaW5nLFxuICBhcmc/OiBhbnkgfCBudWxsLFxuICBjdXJyZW50Q2hvcmU/OiBDaG9yZSB8IG51bGwsXG4gIHF1ZXVlPzogQ2hvcmVbXVxuKSB7XG4gIGNvbnN0IGxpbmVzID0gWyc9PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5TY2hlZHVsZXI6ICcgKyBhY3Rpb25dO1xuICBpZiAoYXJnICYmICEoJyR0eXBlJCcgaW4gYXJnKSkge1xuICAgIGxpbmVzLnB1c2goJyAgICAgIGFyZzogJyArIFN0cmluZyhhcmcpLnJlcGxhY2VBbGwoL1xcbi4qL2dpbSwgJycpKTtcbiAgfVxuICBpZiAocXVldWUpIHtcbiAgICBxdWV1ZS5mb3JFYWNoKChjaG9yZSkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlID0gY2hvcmUgPT09IGFyZyA/ICc+Pj4nIDogJyAgICc7XG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICBgICAgICAke2FjdGl2ZX0gPiBgICtcbiAgICAgICAgICAoY2hvcmUgPT09IGN1cnJlbnRDaG9yZSA/ICdbcnVubmluZ10gJyA6ICcnKSArXG4gICAgICAgICAgZGVidWdDaG9yZVRvU3RyaW5nKGNob3JlKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhsaW5lcy5qb2luKCdcXG4nKSArICdcXG4nKTtcbn1cbiJdfQ==","import { trackSignalAndAssignHost } from '../use/use-core';\nimport { version } from '../version';\nimport { createScheduler } from './scheduler';\nimport { createSerializationContext } from './shared-serialization';\n/** @internal */\nexport class _SharedContainer {\n    $version$;\n    $scheduler$;\n    $storeProxyMap$;\n    /// Current language locale\n    $locale$;\n    /// Retrieve Object from paused serialized state.\n    $getObjectById$;\n    $serverData$;\n    $currentUniqueId$ = 0;\n    $instanceHash$ = null;\n    $buildBase$ = null;\n    constructor(scheduleDrain, journalFlush, serverData, locale) {\n        this.$serverData$ = serverData;\n        this.$locale$ = locale;\n        this.$version$ = version;\n        this.$storeProxyMap$ = new WeakMap();\n        this.$getObjectById$ = (_id) => {\n            throw Error('Not implemented');\n        };\n        this.$scheduler$ = createScheduler(this, scheduleDrain, journalFlush);\n    }\n    trackSignalValue(signal, subscriber, property, data) {\n        return trackSignalAndAssignHost(signal, subscriber, property, this, data);\n    }\n    serializationCtxFactory(NodeConstructor, DomRefConstructor, symbolToChunkResolver, writer, prepVNodeData) {\n        return createSerializationContext(NodeConstructor, DomRefConstructor, symbolToChunkResolver, this.getHostProp.bind(this), this.setHostProp.bind(this), this.$storeProxyMap$, writer, prepVNodeData);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvc2hhcmVkLWNvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBS3JDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLDBCQUEwQixFQUE2QixNQUFNLHdCQUF3QixDQUFDO0FBRy9GLGdCQUFnQjtBQUNoQixNQUFNLE9BQWdCLGdCQUFnQjtJQUMzQixTQUFTLENBQVM7SUFDbEIsV0FBVyxDQUFZO0lBQ3ZCLGVBQWUsQ0FBZ0I7SUFDeEMsMkJBQTJCO0lBQ2xCLFFBQVEsQ0FBUztJQUMxQixpREFBaUQ7SUFDeEMsZUFBZSxDQUErQjtJQUN2RCxZQUFZLENBQXNCO0lBQ2xDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUN0QixjQUFjLEdBQWtCLElBQUksQ0FBQztJQUNyQyxXQUFXLEdBQWtCLElBQUksQ0FBQztJQUVsQyxZQUNFLGFBQXlCLEVBQ3pCLFlBQXdCLEVBQ3hCLFVBQStCLEVBQy9CLE1BQWM7UUFFZCxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQW9CLEVBQUUsRUFBRTtZQUM5QyxNQUFNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGdCQUFnQixDQUNkLE1BQWMsRUFDZCxVQUF1QixFQUN2QixRQUFnQixFQUNoQixJQUFzQjtRQUV0QixPQUFPLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsdUJBQXVCLENBQ3JCLGVBRVEsRUFDUixpQkFFUSxFQUNSLHFCQUE0QyxFQUM1QyxNQUFxQixFQUNyQixhQUFvQztRQUVwQyxPQUFPLDBCQUEwQixDQUMvQixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQzNCLElBQUksQ0FBQyxlQUFlLEVBQ3BCLE1BQU0sRUFDTixhQUFhLENBQ2QsQ0FBQztJQUNKLENBQUM7Q0FlRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udGV4dElkIH0gZnJvbSAnLi4vdXNlL3VzZS1jb250ZXh0JztcbmltcG9ydCB7IHRyYWNrU2lnbmFsQW5kQXNzaWduSG9zdCB9IGZyb20gJy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vdmVyc2lvbic7XG5pbXBvcnQgdHlwZSB7IFN1YnNjcmlwdGlvbkRhdGEgfSBmcm9tICcuLi9zaWduYWwvc2lnbmFsJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSAnLi4vc2lnbmFsL3NpZ25hbC5wdWJsaWMnO1xuaW1wb3J0IHR5cGUgeyBJU3NyTm9kZSwgU3RyZWFtV3JpdGVyLCBTeW1ib2xUb0NodW5rUmVzb2x2ZXIgfSBmcm9tICcuLi9zc3Ivc3NyLXR5cGVzJztcbmltcG9ydCB0eXBlIHsgU2NoZWR1bGVyIH0gZnJvbSAnLi9zY2hlZHVsZXInO1xuaW1wb3J0IHsgY3JlYXRlU2NoZWR1bGVyIH0gZnJvbSAnLi9zY2hlZHVsZXInO1xuaW1wb3J0IHsgY3JlYXRlU2VyaWFsaXphdGlvbkNvbnRleHQsIHR5cGUgU2VyaWFsaXphdGlvbkNvbnRleHQgfSBmcm9tICcuL3NoYXJlZC1zZXJpYWxpemF0aW9uJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyLCBIb3N0RWxlbWVudCwgT2JqVG9Qcm94eU1hcCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgX1NoYXJlZENvbnRhaW5lciBpbXBsZW1lbnRzIENvbnRhaW5lciB7XG4gIHJlYWRvbmx5ICR2ZXJzaW9uJDogc3RyaW5nO1xuICByZWFkb25seSAkc2NoZWR1bGVyJDogU2NoZWR1bGVyO1xuICByZWFkb25seSAkc3RvcmVQcm94eU1hcCQ6IE9ialRvUHJveHlNYXA7XG4gIC8vLyBDdXJyZW50IGxhbmd1YWdlIGxvY2FsZVxuICByZWFkb25seSAkbG9jYWxlJDogc3RyaW5nO1xuICAvLy8gUmV0cmlldmUgT2JqZWN0IGZyb20gcGF1c2VkIHNlcmlhbGl6ZWQgc3RhdGUuXG4gIHJlYWRvbmx5ICRnZXRPYmplY3RCeUlkJDogKGlkOiBudW1iZXIgfCBzdHJpbmcpID0+IGFueTtcbiAgJHNlcnZlckRhdGEkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAkY3VycmVudFVuaXF1ZUlkJCA9IDA7XG4gICRpbnN0YW5jZUhhc2gkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgJGJ1aWxkQmFzZSQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjaGVkdWxlRHJhaW46ICgpID0+IHZvaWQsXG4gICAgam91cm5hbEZsdXNoOiAoKSA9PiB2b2lkLFxuICAgIHNlcnZlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgbG9jYWxlOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy4kc2VydmVyRGF0YSQgPSBzZXJ2ZXJEYXRhO1xuICAgIHRoaXMuJGxvY2FsZSQgPSBsb2NhbGU7XG4gICAgdGhpcy4kdmVyc2lvbiQgPSB2ZXJzaW9uO1xuICAgIHRoaXMuJHN0b3JlUHJveHlNYXAkID0gbmV3IFdlYWtNYXAoKTtcbiAgICB0aGlzLiRnZXRPYmplY3RCeUlkJCA9IChfaWQ6IG51bWJlciB8IHN0cmluZykgPT4ge1xuICAgICAgdGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH07XG5cbiAgICB0aGlzLiRzY2hlZHVsZXIkID0gY3JlYXRlU2NoZWR1bGVyKHRoaXMsIHNjaGVkdWxlRHJhaW4sIGpvdXJuYWxGbHVzaCk7XG4gIH1cblxuICB0cmFja1NpZ25hbFZhbHVlPFQ+KFxuICAgIHNpZ25hbDogU2lnbmFsLFxuICAgIHN1YnNjcmliZXI6IEhvc3RFbGVtZW50LFxuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgZGF0YTogU3Vic2NyaXB0aW9uRGF0YVxuICApOiBUIHtcbiAgICByZXR1cm4gdHJhY2tTaWduYWxBbmRBc3NpZ25Ib3N0KHNpZ25hbCwgc3Vic2NyaWJlciwgcHJvcGVydHksIHRoaXMsIGRhdGEpO1xuICB9XG5cbiAgc2VyaWFsaXphdGlvbkN0eEZhY3RvcnkoXG4gICAgTm9kZUNvbnN0cnVjdG9yOiB7XG4gICAgICBuZXcgKC4uLnJlc3Q6IGFueVtdKTogeyBub2RlVHlwZTogbnVtYmVyOyBpZDogc3RyaW5nIH07XG4gICAgfSB8IG51bGwsXG4gICAgRG9tUmVmQ29uc3RydWN0b3I6IHtcbiAgICAgIG5ldyAoLi4ucmVzdDogYW55W10pOiB7ICRzc3JOb2RlJDogSVNzck5vZGUgfTtcbiAgICB9IHwgbnVsbCxcbiAgICBzeW1ib2xUb0NodW5rUmVzb2x2ZXI6IFN5bWJvbFRvQ2h1bmtSZXNvbHZlcixcbiAgICB3cml0ZXI/OiBTdHJlYW1Xcml0ZXIsXG4gICAgcHJlcFZOb2RlRGF0YT86ICh2Tm9kZTogYW55KSA9PiB2b2lkXG4gICk6IFNlcmlhbGl6YXRpb25Db250ZXh0IHtcbiAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphdGlvbkNvbnRleHQoXG4gICAgICBOb2RlQ29uc3RydWN0b3IsXG4gICAgICBEb21SZWZDb25zdHJ1Y3RvcixcbiAgICAgIHN5bWJvbFRvQ2h1bmtSZXNvbHZlcixcbiAgICAgIHRoaXMuZ2V0SG9zdFByb3AuYmluZCh0aGlzKSxcbiAgICAgIHRoaXMuc2V0SG9zdFByb3AuYmluZCh0aGlzKSxcbiAgICAgIHRoaXMuJHN0b3JlUHJveHlNYXAkLFxuICAgICAgd3JpdGVyLFxuICAgICAgcHJlcFZOb2RlRGF0YVxuICAgICk7XG4gIH1cblxuICBhYnN0cmFjdCBlbnN1cmVQcm9qZWN0aW9uUmVzb2x2ZWQoaG9zdDogSG9zdEVsZW1lbnQpOiB2b2lkO1xuICBhYnN0cmFjdCBoYW5kbGVFcnJvcihlcnI6IGFueSwgJGhvc3QkOiBIb3N0RWxlbWVudCk6IHZvaWQ7XG4gIGFic3RyYWN0IGdldFBhcmVudEhvc3QoaG9zdDogSG9zdEVsZW1lbnQpOiBIb3N0RWxlbWVudCB8IG51bGw7XG4gIGFic3RyYWN0IHNldENvbnRleHQ8VD4oaG9zdDogSG9zdEVsZW1lbnQsIGNvbnRleHQ6IENvbnRleHRJZDxUPiwgdmFsdWU6IFQpOiB2b2lkO1xuICBhYnN0cmFjdCByZXNvbHZlQ29udGV4dDxUPihob3N0OiBIb3N0RWxlbWVudCwgY29udGV4dElkOiBDb250ZXh0SWQ8VD4pOiBUIHwgdW5kZWZpbmVkO1xuICBhYnN0cmFjdCBzZXRIb3N0UHJvcDxUPihob3N0OiBIb3N0RWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQ7XG4gIGFic3RyYWN0IGdldEhvc3RQcm9wPFQ+KGhvc3Q6IEhvc3RFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiBUIHwgbnVsbDtcbiAgYWJzdHJhY3QgJGFwcGVuZFN0eWxlJChcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgc3R5bGVJZDogc3RyaW5nLFxuICAgIGhvc3Q6IEhvc3RFbGVtZW50LFxuICAgIHNjb3BlZDogYm9vbGVhblxuICApOiB2b2lkO1xufVxuIl19","/**\n * @file\n *\n *   VNodeData is additional information which allows the `vnode` to recover virtual VNode information\n *   from the HTML.\n */\n/**\n * VNodeDataSeparator contains information about splitting up the VNodeData and attaching it to the\n * HTML.\n */\nexport const VNodeDataSeparator = {\n    REFERENCE_CH: /* ***** */ `~`, // `~` is a reference to the node. Save it.\n    REFERENCE: /* ******** */ 126, // `~` is a reference to the node. Save it.\n    ADVANCE_1_CH: /* ***** */ `!`, // `!` is vNodeData separator skipping 0. (ie next vNode)\n    ADVANCE_1: /* ********* */ 33, // `!` is vNodeData separator skipping 0. (ie next vNode)\n    ADVANCE_2_CH: /* ***** */ `\"`, // `\"` is vNodeData separator skipping 1.\n    ADVANCE_2: /* ********* */ 34, // `\"` is vNodeData separator skipping 1.\n    ADVANCE_4_CH: /* ***** */ `#`, // `#` is vNodeData separator skipping 2.\n    ADVANCE_4: /* ********* */ 35, // `#` is vNodeData separator skipping 2.\n    ADVANCE_8_CH: /* ***** */ `$`, // `$` is vNodeData separator skipping 4.\n    ADVANCE_8: /* ********* */ 36, // `$` is vNodeData separator skipping 4.\n    ADVANCE_16_CH: /* **** */ `%`, // `%` is vNodeData separator skipping 8.\n    ADVANCE_16: /* ******** */ 37, // `%` is vNodeData separator skipping 8.\n    ADVANCE_32_CH: /* **** */ `&`, // `&` is vNodeData separator skipping 16.\n    ADVANCE_32: /* ******** */ 38, // `&` is vNodeData separator skipping 16.\n    ADVANCE_64_CH: /* **** */ `'`, // `'` is vNodeData separator skipping 32.\n    ADVANCE_64: /* ******** */ 39, // `'` is vNodeData separator skipping 32.\n    ADVANCE_128_CH: /* *** */ `(`, // `(` is vNodeData separator skipping 64.\n    ADVANCE_128: /* ******* */ 40, // `(` is vNodeData separator skipping 64.\n    ADVANCE_256_CH: /* *** */ `)`, // `)` is vNodeData separator skipping 128.\n    ADVANCE_256: /* ******* */ 41, // `)` is vNodeData separator skipping 128.\n    ADVANCE_512_CH: /* *** */ `*`, // `*` is vNodeData separator skipping 256.\n    ADVANCE_512: /* ******* */ 42, // `*` is vNodeData separator skipping 256.\n    ADVANCE_1024_CH: /* ** */ `+`, // `+` is vNodeData separator skipping 512.\n    ADVANCE_1024: /* ****** */ 43, // `+` is vNodeData separator skipping 512.\n    ADVANCE_2048_CH: /* *  */ ',', // ',' is vNodeData separator skipping 1024.\n    ADVANCE_2048: /* ****** */ 44, // ',' is vNodeData separator skipping 1024.\n    ADVANCE_4096_CH: /* *  */ `-`, // `-` is vNodeData separator skipping 2048.\n    ADVANCE_4096: /* ****** */ 45, // `-` is vNodeData separator skipping 2048.\n    ADVANCE_8192_CH: /* *  */ `.`, // `.` is vNodeData separator skipping 4096.\n    ADVANCE_8192: /* ****** */ 46, // `.` is vNodeData separator skipping 4096.\n};\n/**\n * VNodeDataChar contains information about the VNodeData used for encoding props.\n *\n * Available character ranges: 59 - 64, 91 - 94, 96, 123 - 126\n */\nexport const VNodeDataChar = {\n    OPEN: /* ************** */ 123, // `{` is the start of the VNodeData for a virtual element.\n    OPEN_CHAR: /* ****** */ '{',\n    CLOSE: /* ************* */ 125, // `}` is the end of the VNodeData for a virtual element.\n    CLOSE_CHAR: /* ***** */ '}',\n    SCOPED_STYLE: /* ******* */ 59, // `;` - `q:sstyle` - Style attribute.\n    SCOPED_STYLE_CHAR: /* */ ';',\n    RENDER_FN: /* ********** */ 60, // `<` - `q:renderFn' - Component QRL render function (body)\n    RENDER_FN_CHAR: /* ** */ '<',\n    ID: /* ***************** */ 61, // `=` - `q:id` - ID of the element.\n    ID_CHAR: /* ********* */ '=',\n    PROPS: /* ************** */ 62, // `>` - `q:props' - Component Props\n    PROPS_CHAR: /* ****** */ '>',\n    SLOT_PARENT: /* ******** */ 63, // `?` - `q:sparent` - Slot parent.\n    SLOT_PARENT_CHAR: /*  */ '?',\n    KEY: /* **************** */ 64, // `@` - `q:key` - Element key.\n    KEY_CHAR: /* ******** */ '@',\n    SEQ: /* **************** */ 91, // `[` - `q:seq' - Seq value from `useSequentialScope()`\n    SEQ_CHAR: /* ******** */ '[',\n    DON_T_USE: /* ********** */ 92, // `\\` - SKIP because `\\` is used as escaping\n    DON_T_USE_CHAR: '\\\\',\n    CONTEXT: /* ************ */ 93, // `]` - `q:ctx' - Component context/props\n    CONTEXT_CHAR: /* **** */ ']',\n    SEQ_IDX: /* ************ */ 94, // `^` - `q:seqIdx' - Sequential scope id\n    SEQ_IDX_CHAR: /* **** */ '^',\n    BACK_REFS: /* ********** */ 96, // '`' - `q:brefs' - Effect dependencies/subscriptions\n    BACK_REFS_CHAR: /* ** */ '`',\n    SEPARATOR: /* ********* */ 124, // `|` - Separator char to encode any key/value pairs.\n    SEPARATOR_CHAR: /* ** */ '|',\n    SLOT: /* ************** */ 126, // `~` - `q:slot' - Slot name\n    SLOT_CHAR: /* ******* */ '~',\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm5vZGUtZGF0YS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdm5vZGUtZGF0YS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVIOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLFlBQVksRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLDJDQUEyQztJQUMxRSxTQUFTLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSwyQ0FBMkM7SUFDMUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUseURBQXlEO0lBQ3hGLFNBQVMsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLHlEQUF5RDtJQUN4RixZQUFZLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSx5Q0FBeUM7SUFDeEUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUUseUNBQXlDO0lBQ3hFLFlBQVksRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLHlDQUF5QztJQUN4RSxTQUFTLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRSx5Q0FBeUM7SUFDeEUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUseUNBQXlDO0lBQ3hFLFNBQVMsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLHlDQUF5QztJQUN4RSxhQUFhLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx5Q0FBeUM7SUFDeEUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUseUNBQXlDO0lBQ3hFLGFBQWEsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDBDQUEwQztJQUN6RSxVQUFVLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSwwQ0FBMEM7SUFDekUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMENBQTBDO0lBQ3pFLFVBQVUsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLDBDQUEwQztJQUN6RSxj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dGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogICBWTm9kZURhdGEgaXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB3aGljaCBhbGxvd3MgdGhlIGB2bm9kZWAgdG8gcmVjb3ZlciB2aXJ0dWFsIFZOb2RlIGluZm9ybWF0aW9uXG4gKiAgIGZyb20gdGhlIEhUTUwuXG4gKi9cblxuLyoqXG4gKiBWTm9kZURhdGFTZXBhcmF0b3IgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgc3BsaXR0aW5nIHVwIHRoZSBWTm9kZURhdGEgYW5kIGF0dGFjaGluZyBpdCB0byB0aGVcbiAqIEhUTUwuXG4gKi9cbmV4cG9ydCBjb25zdCBWTm9kZURhdGFTZXBhcmF0b3IgPSB7XG4gIFJFRkVSRU5DRV9DSDogLyogKioqKiogKi8gYH5gLCAvLyBgfmAgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG5vZGUuIFNhdmUgaXQuXG4gIFJFRkVSRU5DRTogLyogKioqKioqKiogKi8gMTI2LCAvLyBgfmAgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG5vZGUuIFNhdmUgaXQuXG4gIEFEVkFOQ0VfMV9DSDogLyogKioqKiogKi8gYCFgLCAvLyBgIWAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAwLiAoaWUgbmV4dCB2Tm9kZSlcbiAgQURWQU5DRV8xOiAvKiAqKioqKioqKiogKi8gMzMsIC8vIGAhYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDAuIChpZSBuZXh0IHZOb2RlKVxuICBBRFZBTkNFXzJfQ0g6IC8qICoqKioqICovIGBcImAsIC8vIGBcImAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAxLlxuICBBRFZBTkNFXzI6IC8qICoqKioqKioqKiAqLyAzNCwgLy8gYFwiYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDEuXG4gIEFEVkFOQ0VfNF9DSDogLyogKioqKiogKi8gYCNgLCAvLyBgI2AgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAyLlxuICBBRFZBTkNFXzQ6IC8qICoqKioqKioqKiAqLyAzNSwgLy8gYCNgIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgMi5cbiAgQURWQU5DRV84X0NIOiAvKiAqKioqKiAqLyBgJGAsIC8vIGAkYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDQuXG4gIEFEVkFOQ0VfODogLyogKioqKioqKioqICovIDM2LCAvLyBgJGAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyA0LlxuICBBRFZBTkNFXzE2X0NIOiAvKiAqKioqICovIGAlYCwgLy8gYCVgIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgOC5cbiAgQURWQU5DRV8xNjogLyogKioqKioqKiogKi8gMzcsIC8vIGAlYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDguXG4gIEFEVkFOQ0VfMzJfQ0g6IC8qICoqKiogKi8gYCZgLCAvLyBgJmAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAxNi5cbiAgQURWQU5DRV8zMjogLyogKioqKioqKiogKi8gMzgsIC8vIGAmYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDE2LlxuICBBRFZBTkNFXzY0X0NIOiAvKiAqKioqICovIGAnYCwgLy8gYCdgIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgMzIuXG4gIEFEVkFOQ0VfNjQ6IC8qICoqKioqKioqICovIDM5LCAvLyBgJ2AgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAzMi5cbiAgQURWQU5DRV8xMjhfQ0g6IC8qICoqKiAqLyBgKGAsIC8vIGAoYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDY0LlxuICBBRFZBTkNFXzEyODogLyogKioqKioqKiAqLyA0MCwgLy8gYChgIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgNjQuXG4gIEFEVkFOQ0VfMjU2X0NIOiAvKiAqKiogKi8gYClgLCAvLyBgKWAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAxMjguXG4gIEFEVkFOQ0VfMjU2OiAvKiAqKioqKioqICovIDQxLCAvLyBgKWAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAxMjguXG4gIEFEVkFOQ0VfNTEyX0NIOiAvKiAqKiogKi8gYCpgLCAvLyBgKmAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAyNTYuXG4gIEFEVkFOQ0VfNTEyOiAvKiAqKioqKioqICovIDQyLCAvLyBgKmAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAyNTYuXG4gIEFEVkFOQ0VfMTAyNF9DSDogLyogKiogKi8gYCtgLCAvLyBgK2AgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyA1MTIuXG4gIEFEVkFOQ0VfMTAyNDogLyogKioqKioqICovIDQzLCAvLyBgK2AgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyA1MTIuXG4gIEFEVkFOQ0VfMjA0OF9DSDogLyogKiAgKi8gJywnLCAvLyAnLCcgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAxMDI0LlxuICBBRFZBTkNFXzIwNDg6IC8qICoqKioqKiAqLyA0NCwgLy8gJywnIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgMTAyNC5cbiAgQURWQU5DRV80MDk2X0NIOiAvKiAqICAqLyBgLWAsIC8vIGAtYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDIwNDguXG4gIEFEVkFOQ0VfNDA5NjogLyogKioqKioqICovIDQ1LCAvLyBgLWAgaXMgdk5vZGVEYXRhIHNlcGFyYXRvciBza2lwcGluZyAyMDQ4LlxuICBBRFZBTkNFXzgxOTJfQ0g6IC8qICogICovIGAuYCwgLy8gYC5gIGlzIHZOb2RlRGF0YSBzZXBhcmF0b3Igc2tpcHBpbmcgNDA5Ni5cbiAgQURWQU5DRV84MTkyOiAvKiAqKioqKiogKi8gNDYsIC8vIGAuYCBpcyB2Tm9kZURhdGEgc2VwYXJhdG9yIHNraXBwaW5nIDQwOTYuXG59O1xuXG4vKipcbiAqIFZOb2RlRGF0YUNoYXIgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFZOb2RlRGF0YSB1c2VkIGZvciBlbmNvZGluZyBwcm9wcy5cbiAqXG4gKiBBdmFpbGFibGUgY2hhcmFjdGVyIHJhbmdlczogNTkgLSA2NCwgOTEgLSA5NCwgOTYsIDEyMyAtIDEyNlxuICovXG5leHBvcnQgY29uc3QgVk5vZGVEYXRhQ2hhciA9IHtcbiAgT1BFTjogLyogKioqKioqKioqKioqKiogKi8gMTIzLCAvLyBge2AgaXMgdGhlIHN0YXJ0IG9mIHRoZSBWTm9kZURhdGEgZm9yIGEgdmlydHVhbCBlbGVtZW50LlxuICBPUEVOX0NIQVI6IC8qICoqKioqKiAqLyAneycsXG4gIENMT1NFOiAvKiAqKioqKioqKioqKioqICovIDEyNSwgLy8gYH1gIGlzIHRoZSBlbmQgb2YgdGhlIFZOb2RlRGF0YSBmb3IgYSB2aXJ0dWFsIGVsZW1lbnQuXG4gIENMT1NFX0NIQVI6IC8qICoqKioqICovICd9JyxcblxuICBTQ09QRURfU1RZTEU6IC8qICoqKioqKiogKi8gNTksIC8vIGA7YCAtIGBxOnNzdHlsZWAgLSBTdHlsZSBhdHRyaWJ1dGUuXG4gIFNDT1BFRF9TVFlMRV9DSEFSOiAvKiAqLyAnOycsXG4gIFJFTkRFUl9GTjogLyogKioqKioqKioqKiAqLyA2MCwgLy8gYDxgIC0gYHE6cmVuZGVyRm4nIC0gQ29tcG9uZW50IFFSTCByZW5kZXIgZnVuY3Rpb24gKGJvZHkpXG4gIFJFTkRFUl9GTl9DSEFSOiAvKiAqKiAqLyAnPCcsXG4gIElEOiAvKiAqKioqKioqKioqKioqKioqKiAqLyA2MSwgLy8gYD1gIC0gYHE6aWRgIC0gSUQgb2YgdGhlIGVsZW1lbnQuXG4gIElEX0NIQVI6IC8qICoqKioqKioqKiAqLyAnPScsXG4gIFBST1BTOiAvKiAqKioqKioqKioqKioqKiAqLyA2MiwgLy8gYD5gIC0gYHE6cHJvcHMnIC0gQ29tcG9uZW50IFByb3BzXG4gIFBST1BTX0NIQVI6IC8qICoqKioqKiAqLyAnPicsXG4gIFNMT1RfUEFSRU5UOiAvKiAqKioqKioqKiAqLyA2MywgLy8gYD9gIC0gYHE6c3BhcmVudGAgLSBTbG90IHBhcmVudC5cbiAgU0xPVF9QQVJFTlRfQ0hBUjogLyogICovICc/JyxcbiAgS0VZOiAvKiAqKioqKioqKioqKioqKioqICovIDY0LCAvLyBgQGAgLSBgcTprZXlgIC0gRWxlbWVudCBrZXkuXG4gIEtFWV9DSEFSOiAvKiAqKioqKioqKiAqLyAnQCcsXG4gIFNFUTogLyogKioqKioqKioqKioqKioqKiAqLyA5MSwgLy8gYFtgIC0gYHE6c2VxJyAtIFNlcSB2YWx1ZSBmcm9tIGB1c2VTZXF1ZW50aWFsU2NvcGUoKWBcbiAgU0VRX0NIQVI6IC8qICoqKioqKioqICovICdbJyxcbiAgRE9OX1RfVVNFOiAvKiAqKioqKioqKioqICovIDkyLCAvLyBgXFxgIC0gU0tJUCBiZWNhdXNlIGBcXGAgaXMgdXNlZCBhcyBlc2NhcGluZ1xuICBET05fVF9VU0VfQ0hBUjogJ1xcXFwnLFxuICBDT05URVhUOiAvKiAqKioqKioqKioqKiogKi8gOTMsIC8vIGBdYCAtIGBxOmN0eCcgLSBDb21wb25lbnQgY29udGV4dC9wcm9wc1xuICBDT05URVhUX0NIQVI6IC8qICoqKiogKi8gJ10nLFxuICBTRVFfSURYOiAvKiAqKioqKioqKioqKiogKi8gOTQsIC8vIGBeYCAtIGBxOnNlcUlkeCcgLSBTZXF1ZW50aWFsIHNjb3BlIGlkXG4gIFNFUV9JRFhfQ0hBUjogLyogKioqKiAqLyAnXicsXG4gIEJBQ0tfUkVGUzogLyogKioqKioqKioqKiAqLyA5NiwgLy8gJ2AnIC0gYHE6YnJlZnMnIC0gRWZmZWN0IGRlcGVuZGVuY2llcy9zdWJzY3JpcHRpb25zXG4gIEJBQ0tfUkVGU19DSEFSOiAvKiAqKiAqLyAnYCcsXG4gIFNFUEFSQVRPUjogLyogKioqKioqKioqICovIDEyNCwgLy8gYHxgIC0gU2VwYXJhdG9yIGNoYXIgdG8gZW5jb2RlIGFueSBrZXkvdmFsdWUgcGFpcnMuXG4gIFNFUEFSQVRPUl9DSEFSOiAvKiAqKiAqLyAnfCcsXG4gIFNMT1Q6IC8qICoqKioqKioqKioqKioqICovIDEyNiwgLy8gYH5gIC0gYHE6c2xvdCcgLSBTbG90IG5hbWVcbiAgU0xPVF9DSEFSOiAvKiAqKioqKioqICovICd+Jyxcbn07XG4iXX0=","// NOTE: we want to move this function to qwikloader, and therefore this function should not have any external dependencies\nimport { VNodeDataChar, VNodeDataSeparator } from '../shared/vnode-data-types';\n/**\n * Process the VNodeData script tags and store the VNodeData in the VNodeDataMap.\n *\n * The end result of this function is that each DOM element has the associated `VNodeData` attached\n * to it, to be used later `VNode` materialization. The \"attachment\" is done through the\n * `VNodeDataMap`.\n *\n * Run this function on startup to process the `<script type=\"qwik/vnode\">` tags. The data in the\n * tags needs to be parsed and attached to the DOM elements. (We do this through `VNodeDataMap`)\n * `VNodeDataMap` is then used to lazily materialize the VNodes.\n *\n * Only one invocation of this function is needed per document/browser session.\n *\n * Below is an example of the kinds of constructs which need to be handled when dealing with\n * VNodeData deserialization.\n *\n * ```\n * <html q:container=\"paused\">\n *   <body>\n *     <div q:container=\"paused\">\n *       <script type=\"qwik/vnode\">...</script>\n *     </div>\n *     <div q:container=\"html\">...</div>\n *     before\n *     <!--q:container=ABC-->\n *     ...\n *     <!--/q:container-->\n *     after\n *     <!--q:ignore=FOO-->\n *     ...\n *        <!--q:container-island=BAR-->\n *        <div>some interactive island</div>\n *        <!--/q:container-island-->\n *     ...\n *     <!--/q:ignore-->\n *     <textarea q:container=\"text\">...</textarea>\n *     <script type=\"qwik/vnode\">...</script>\n *   </body>\n * </html>\n * ```\n *\n * Each `qwik/vnode` script assumes that the elements are numbered in depth first order. For this\n * reason, whenever the `processVNodeData` comes across a `q:container` it must ignore its\n * children.\n *\n * IMPLEMENTATION:\n *\n * - Stack to keep track of the current `q:container` being processed.\n * - Attach all `qwik/vnode` scripts (not the data contain within them) to the `q:container` element.\n * - Walk the tree and process each `q:container` element.\n */\nexport function processVNodeData(document) {\n    const Q_CONTAINER = 'q:container';\n    const Q_CONTAINER_END = '/' + Q_CONTAINER;\n    const Q_PROPS_SEPARATOR = ':';\n    const Q_SHADOW_ROOT = 'q:shadowroot';\n    const Q_IGNORE = 'q:ignore';\n    const Q_IGNORE_END = '/' + Q_IGNORE;\n    const Q_CONTAINER_ISLAND = 'q:container-island';\n    const Q_CONTAINER_ISLAND_END = '/' + Q_CONTAINER_ISLAND;\n    const qDocument = document;\n    const vNodeDataMap = qDocument.qVNodeData || (qDocument.qVNodeData = new WeakMap());\n    const prototype = document.body;\n    const getter = (prototype, name) => {\n        let getter;\n        while (prototype && !(getter = Object.getOwnPropertyDescriptor(prototype, name)?.get)) {\n            prototype = Object.getPrototypeOf(prototype);\n        }\n        return (getter ||\n            function () {\n                return this[name];\n            });\n    };\n    const getAttribute = prototype.getAttribute;\n    const hasAttribute = prototype.hasAttribute;\n    const getNodeType = getter(prototype, 'nodeType');\n    // Process all of the `qwik/vnode` script tags by attaching them to the corresponding containers.\n    const attachVnodeDataAndRefs = (element) => {\n        Array.from(element.querySelectorAll('script[type=\"qwik/vnode\"]')).forEach((script) => {\n            script.setAttribute('type', 'x-qwik/vnode');\n            const qContainerElement = script.closest('[q\\\\:container]');\n            qContainerElement.qVnodeData = script.textContent;\n            qContainerElement.qVNodeRefs = new Map();\n        });\n        element.querySelectorAll('[q\\\\:shadowroot]').forEach((parent) => {\n            const shadowRoot = parent.shadowRoot;\n            shadowRoot && attachVnodeDataAndRefs(shadowRoot);\n        });\n    };\n    attachVnodeDataAndRefs(document);\n    /**\n     * Looks up which type of node this is in a monomorphic way which should be faster.\n     *\n     * See: https://mhevery.github.io/perf-tests/DOM-megamorphic.html\n     */\n    const getFastNodeType = (node) => {\n        const nodeType = getNodeType.call(node);\n        if (nodeType === 1 /* Node.ELEMENT_NODE */) {\n            const qContainer = getAttribute.call(node, Q_CONTAINER);\n            if (qContainer === null) {\n                if (hasAttribute.call(node, Q_SHADOW_ROOT)) {\n                    return 6 /* NodeType.ELEMENT_SHADOW_ROOT */;\n                }\n                const isQElement = hasAttribute.call(node, Q_PROPS_SEPARATOR);\n                return isQElement ? 2 /* NodeType.ELEMENT */ : 0 /* NodeType.OTHER */;\n            }\n            else {\n                return 3 /* NodeType.ELEMENT_CONTAINER */;\n            }\n        }\n        else if (nodeType === 8 /* Node.COMMENT_NODE */) {\n            const nodeValue = node.nodeValue || ''; // nodeValue is monomorphic so it does not need fast path\n            if (nodeValue.startsWith(Q_CONTAINER_ISLAND)) {\n                return 65 /* NodeType.COMMENT_ISLAND_START */;\n            }\n            else if (nodeValue.startsWith(Q_IGNORE)) {\n                return 16 /* NodeType.COMMENT_IGNORE_START */;\n            }\n            else if (nodeValue.startsWith(Q_CONTAINER)) {\n                return 5 /* NodeType.COMMENT_SKIP_START */;\n            }\n            else if (nodeValue.startsWith(Q_CONTAINER_ISLAND_END)) {\n                return 128 /* NodeType.COMMENT_ISLAND_END */;\n            }\n            else if (nodeValue.startsWith(Q_IGNORE_END)) {\n                return 32 /* NodeType.COMMENT_IGNORE_END */;\n            }\n            else if (nodeValue.startsWith(Q_CONTAINER_END)) {\n                return 8 /* NodeType.COMMENT_SKIP_END */;\n            }\n        }\n        return 0 /* NodeType.OTHER */;\n    };\n    const isSeparator = (ch) => \n    /* `!` */ VNodeDataSeparator.ADVANCE_1 <= ch && ch <= VNodeDataSeparator.ADVANCE_8192; /* `.` */\n    /**\n     * Given the `vData` string, `start` index, and `end` index, find the end of the VNodeData\n     * section.\n     */\n    const findVDataSectionEnd = (vData, start, end) => {\n        let depth = 0;\n        while (true) {\n            // look for the end of VNodeData\n            if (start < end) {\n                const ch = vData.charCodeAt(start);\n                if (depth === 0 && isSeparator(ch)) {\n                    break;\n                }\n                else {\n                    if (ch === VNodeDataChar.OPEN) {\n                        depth++;\n                    }\n                    else if (ch === VNodeDataChar.CLOSE) {\n                        depth--;\n                    }\n                    start++;\n                }\n            }\n            else {\n                break;\n            }\n        }\n        return start;\n    };\n    const nextSibling = (node) => {\n        // eslint-disable-next-line no-empty\n        while (node && (node = node.nextSibling) && getFastNodeType(node) === 0 /* NodeType.OTHER */) { }\n        return node;\n    };\n    const firstChild = (node) => {\n        // eslint-disable-next-line no-empty\n        while (node && (node = node.firstChild) && getFastNodeType(node) === 0 /* NodeType.OTHER */) { }\n        return node;\n    };\n    /**\n     * Process the container\n     *\n     * @param walker TreeWalker\n     * @param containerNode The root of container element\n     * @param exitNode The node which represents the last node and we should exit.\n     * @param qVNodeRefs Place to store the VNodeRefs\n     */\n    const walkContainer = (walker, containerNode, node, exitNode, vData, qVNodeRefs, prefix) => {\n        const vData_length = vData.length;\n        /// Stores the current element index as the TreeWalker traverses the DOM.\n        let elementIdx = 0;\n        /// Stores the current VNode index as derived from the VNodeData script tag.\n        let vNodeElementIndex = -1;\n        let vData_start = 0;\n        let vData_end = 0;\n        let ch = 0;\n        let needsToStoreRef = -1;\n        let nextNode = null;\n        /** Computes number of elements which need to be skipped to get to the next VNodeData section. */\n        const howManyElementsToSkip = () => {\n            let elementsToSkip = 0;\n            while (isSeparator((ch = vData.charCodeAt(vData_start)))) {\n                // Keep consuming the separators and incrementing the vNodeIndex\n                // console.log('ADVANCE', vNodeElementIndex, ch, ch - 33);\n                elementsToSkip += 1 << (ch - VNodeDataSeparator.ADVANCE_1);\n                vData_start++;\n                if (vData_start >= vData_length) {\n                    // we reached the end of the vNodeData stop.\n                    break;\n                }\n            }\n            return elementsToSkip;\n        };\n        do {\n            if (node === exitNode) {\n                return;\n            }\n            nextNode = null;\n            const nodeType = node == containerNode ? 2 /* NodeType.ELEMENT */ : getFastNodeType(node);\n            if (nodeType === 3 /* NodeType.ELEMENT_CONTAINER */) {\n                // If we are in a container, we need to skip the children.\n                const container = node;\n                let cursor = node;\n                while (cursor && !(nextNode = nextSibling(cursor))) {\n                    cursor = cursor.parentNode;\n                }\n                // console.log('EXIT', nextNode?.outerHTML);\n                walkContainer(walker, container, node, nextNode, container.qVnodeData || '', container.qVNodeRefs, prefix + '  ');\n            }\n            else if (nodeType === 16 /* NodeType.COMMENT_IGNORE_START */) {\n                let islandNode = node;\n                do {\n                    islandNode = walker.nextNode();\n                    if (!islandNode) {\n                        throw new Error(`Island inside <!--${node?.nodeValue}--> not found!`);\n                    }\n                } while (getFastNodeType(islandNode) !== 65 /* NodeType.COMMENT_ISLAND_START */);\n                nextNode = null;\n            }\n            else if (nodeType === 128 /* NodeType.COMMENT_ISLAND_END */) {\n                nextNode = node;\n                do {\n                    nextNode = walker.nextNode();\n                    if (!nextNode) {\n                        throw new Error(`Ignore block not closed!`);\n                    }\n                } while (getFastNodeType(nextNode) !== 32 /* NodeType.COMMENT_IGNORE_END */);\n                nextNode = null;\n            }\n            else if (nodeType === 5 /* NodeType.COMMENT_SKIP_START */) {\n                // If we are in a container, we need to skip the children.\n                nextNode = node;\n                do {\n                    nextNode = nextSibling(nextNode);\n                    if (!nextNode) {\n                        throw new Error(`<!--${node?.nodeValue}--> not closed!`);\n                    }\n                } while (getFastNodeType(nextNode) !== 8 /* NodeType.COMMENT_SKIP_END */);\n                // console.log('EXIT', nextNode?.outerHTML);\n                walkContainer(walker, node, node, nextNode, '', null, prefix + '  ');\n            }\n            else if (nodeType === 6 /* NodeType.ELEMENT_SHADOW_ROOT */) {\n                // If we are in a shadow root, we need to get the shadow root element.\n                nextNode = nextSibling(node);\n                const shadowRootContainer = node;\n                const shadowRoot = shadowRootContainer?.shadowRoot;\n                if (shadowRoot) {\n                    walkContainer(\n                    // we need to create a new walker for the shadow root\n                    document.createTreeWalker(shadowRoot, 0x1 /* NodeFilter.SHOW_ELEMENT  */ | 0x80 /*  NodeFilter.SHOW_COMMENT */), null, firstChild(shadowRoot), null, '', null, prefix + '  ');\n                }\n            }\n            if ((nodeType & 2 /* NodeType.ELEMENT */) === 2 /* NodeType.ELEMENT */) {\n                if (vNodeElementIndex < elementIdx) {\n                    // VNodeData needs to catch up with the elementIdx\n                    if (vNodeElementIndex === -1) {\n                        vNodeElementIndex = 0;\n                    }\n                    vData_start = vData_end;\n                    if (vData_start < vData_length) {\n                        vNodeElementIndex += howManyElementsToSkip();\n                        const shouldStoreRef = ch === VNodeDataSeparator.REFERENCE;\n                        if (shouldStoreRef) {\n                            // if we need to store the ref handle it here.\n                            needsToStoreRef = vNodeElementIndex;\n                            vData_start++;\n                            if (vData_start < vData_length) {\n                                ch = vData.charCodeAt(vData_end);\n                            }\n                            else {\n                                // assume separator on end.\n                                ch = VNodeDataSeparator.ADVANCE_1;\n                            }\n                        }\n                        vData_end = findVDataSectionEnd(vData, vData_start, vData_length);\n                    }\n                    else {\n                        vNodeElementIndex = Number.MAX_SAFE_INTEGER;\n                    }\n                }\n                // console.log(\n                //   prefix,\n                //   'ELEMENT',\n                //   nodeType,\n                //   elementIdx,\n                //   vNodeElementIndex,\n                //   (node as any).outerHTML,\n                //   elementIdx === vNodeElementIndex ? vData.substring(vData_start, vData_end) : ''\n                // );\n                if (elementIdx === vNodeElementIndex) {\n                    if (needsToStoreRef === elementIdx) {\n                        qVNodeRefs.set(elementIdx, node);\n                    }\n                    const instructions = vData.substring(vData_start, vData_end);\n                    vNodeDataMap.set(node, instructions);\n                }\n                elementIdx++;\n            }\n        } while ((node = nextNode || walker.nextNode()));\n    };\n    // Walk the tree and process each `q:container` element.\n    const walker = document.createTreeWalker(document, 0x1 /* NodeFilter.SHOW_ELEMENT  */ | 0x80 /*  NodeFilter.SHOW_COMMENT */);\n    walkContainer(walker, null, walker.firstChild(), null, '', null, '');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy12bm9kZS1kYXRhLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL2NsaWVudC9wcm9jZXNzLXZub2RlLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkhBQTJIO0FBQzNILE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUcvRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsUUFBa0I7SUFDakQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sZUFBZSxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7SUFDMUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7SUFDOUIsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM1QixNQUFNLFlBQVksR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0lBQ3BDLE1BQU0sa0JBQWtCLEdBQUcsb0JBQW9CLENBQUM7SUFDaEQsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLEdBQUcsa0JBQWtCLENBQUM7SUFDeEQsTUFBTSxTQUFTLEdBQUcsUUFBcUIsQ0FBQztJQUN4QyxNQUFNLFlBQVksR0FDaEIsU0FBUyxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQW1CLENBQUMsQ0FBQztJQUNsRixNQUFNLFNBQVMsR0FBUSxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLENBQUMsU0FBYyxFQUFFLElBQVksRUFBRSxFQUFFO1FBQzlDLElBQUksTUFBVyxDQUFDO1FBQ2hCLE9BQU8sU0FBUyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFD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QUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFDRCxVQUFVLEVBQUUsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFO0lBQ25ELENBQUMsQ0FBQztJQUVGLHdEQUF3RDtJQUN4RCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQ3RDLFFBQVEsRUFDUixHQUFHLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUN6RSxDQUFDO0lBRUYsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOT1RFOiB3ZSB3YW50IHRvIG1vdmUgdGhpcyBmdW5jdGlvbiB0byBxd2lrbG9hZGVyLCBhbmQgdGhlcmVmb3JlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBoYXZlIGFueSBleHRlcm5hbCBkZXBlbmRlbmNpZXNcbmltcG9ydCB7IFZOb2RlRGF0YUNoYXIsIFZOb2RlRGF0YVNlcGFyYXRvciB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS1kYXRhLXR5cGVzJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyRWxlbWVudCwgRWxlbWVudFZOb2RlLCBRRG9jdW1lbnQgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBQcm9jZXNzIHRoZSBWTm9kZURhdGEgc2NyaXB0IHRhZ3MgYW5kIHN0b3JlIHRoZSBWTm9kZURhdGEgaW4gdGhlIFZOb2RlRGF0YU1hcC5cbiAqXG4gKiBUaGUgZW5kIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRoYXQgZWFjaCBET00gZWxlbWVudCBoYXMgdGhlIGFzc29jaWF0ZWQgYFZOb2RlRGF0YWAgYXR0YWNoZWRcbiAqIHRvIGl0LCB0byBiZSB1c2VkIGxhdGVyIGBWTm9kZWAgbWF0ZXJpYWxpemF0aW9uLiBUaGUgXCJhdHRhY2htZW50XCIgaXMgZG9uZSB0aHJvdWdoIHRoZVxuICogYFZOb2RlRGF0YU1hcGAuXG4gKlxuICogUnVuIHRoaXMgZnVuY3Rpb24gb24gc3RhcnR1cCB0byBwcm9jZXNzIHRoZSBgPHNjcmlwdCB0eXBlPVwicXdpay92bm9kZVwiPmAgdGFncy4gVGhlIGRhdGEgaW4gdGhlXG4gKiB0YWdzIG5lZWRzIHRvIGJlIHBhcnNlZCBhbmQgYXR0YWNoZWQgdG8gdGhlIERPTSBlbGVtZW50cy4gKFdlIGRvIHRoaXMgdGhyb3VnaCBgVk5vZGVEYXRhTWFwYClcbiAqIGBWTm9kZURhdGFNYXBgIGlzIHRoZW4gdXNlZCB0byBsYXppbHkgbWF0ZXJpYWxpemUgdGhlIFZOb2Rlcy5cbiAqXG4gKiBPbmx5IG9uZSBpbnZvY2F0aW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkIHBlciBkb2N1bWVudC9icm93c2VyIHNlc3Npb24uXG4gKlxuICogQmVsb3cgaXMgYW4gZXhhbXBsZSBvZiB0aGUga2luZHMgb2YgY29uc3RydWN0cyB3aGljaCBuZWVkIHRvIGJlIGhhbmRsZWQgd2hlbiBkZWFsaW5nIHdpdGhcbiAqIFZOb2RlRGF0YSBkZXNlcmlhbGl6YXRpb24uXG4gKlxuICogYGBgXG4gKiA8aHRtbCBxOmNvbnRhaW5lcj1cInBhdXNlZFwiPlxuICogICA8Ym9keT5cbiAqICAgICA8ZGl2IHE6Y29udGFpbmVyPVwicGF1c2VkXCI+XG4gKiAgICAgICA8c2NyaXB0IHR5cGU9XCJxd2lrL3Zub2RlXCI+Li4uPC9zY3JpcHQ+XG4gKiAgICAgPC9kaXY+XG4gKiAgICAgPGRpdiBxOmNvbnRhaW5lcj1cImh0bWxcIj4uLi48L2Rpdj5cbiAqICAgICBiZWZvcmVcbiAqICAgICA8IS0tcTpjb250YWluZXI9QUJDLS0+XG4gKiAgICAgLi4uXG4gKiAgICAgPCEtLS9xOmNvbnRhaW5lci0tPlxuICogICAgIGFmdGVyXG4gKiAgICAgPCEtLXE6aWdub3JlPUZPTy0tPlxuICogICAgIC4uLlxuICogICAgICAgIDwhLS1xOmNvbnRhaW5lci1pc2xhbmQ9QkFSLS0+XG4gKiAgICAgICAgPGRpdj5zb21lIGludGVyYWN0aXZlIGlzbGFuZDwvZGl2PlxuICogICAgICAgIDwhLS0vcTpjb250YWluZXItaXNsYW5kLS0+XG4gKiAgICAgLi4uXG4gKiAgICAgPCEtLS9xOmlnbm9yZS0tPlxuICogICAgIDx0ZXh0YXJlYSBxOmNvbnRhaW5lcj1cInRleHRcIj4uLi48L3RleHRhcmVhPlxuICogICAgIDxzY3JpcHQgdHlwZT1cInF3aWsvdm5vZGVcIj4uLi48L3NjcmlwdD5cbiAqICAgPC9ib2R5PlxuICogPC9odG1sPlxuICogYGBgXG4gKlxuICogRWFjaCBgcXdpay92bm9kZWAgc2NyaXB0IGFzc3VtZXMgdGhhdCB0aGUgZWxlbWVudHMgYXJlIG51bWJlcmVkIGluIGRlcHRoIGZpcnN0IG9yZGVyLiBGb3IgdGhpc1xuICogcmVhc29uLCB3aGVuZXZlciB0aGUgYHByb2Nlc3NWTm9kZURhdGFgIGNvbWVzIGFjcm9zcyBhIGBxOmNvbnRhaW5lcmAgaXQgbXVzdCBpZ25vcmUgaXRzXG4gKiBjaGlsZHJlbi5cbiAqXG4gKiBJTVBMRU1FTlRBVElPTjpcbiAqXG4gKiAtIFN0YWNrIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgYHE6Y29udGFpbmVyYCBiZWluZyBwcm9jZXNzZWQuXG4gKiAtIEF0dGFjaCBhbGwgYHF3aWsvdm5vZGVgIHNjcmlwdHMgKG5vdCB0aGUgZGF0YSBjb250YWluIHdpdGhpbiB0aGVtKSB0byB0aGUgYHE6Y29udGFpbmVyYCBlbGVtZW50LlxuICogLSBXYWxrIHRoZSB0cmVlIGFuZCBwcm9jZXNzIGVhY2ggYHE6Y29udGFpbmVyYCBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1ZOb2RlRGF0YShkb2N1bWVudDogRG9jdW1lbnQpIHtcbiAgY29uc3QgUV9DT05UQUlORVIgPSAncTpjb250YWluZXInO1xuICBjb25zdCBRX0NPTlRBSU5FUl9FTkQgPSAnLycgKyBRX0NPTlRBSU5FUjtcbiAgY29uc3QgUV9QUk9QU19TRVBBUkFUT1IgPSAnOic7XG4gIGNvbnN0IFFfU0hBRE9XX1JPT1QgPSAncTpzaGFkb3dyb290JztcbiAgY29uc3QgUV9JR05PUkUgPSAncTppZ25vcmUnO1xuICBjb25zdCBRX0lHTk9SRV9FTkQgPSAnLycgKyBRX0lHTk9SRTtcbiAgY29uc3QgUV9DT05UQUlORVJfSVNMQU5EID0gJ3E6Y29udGFpbmVyLWlzbGFuZCc7XG4gIGNvbnN0IFFfQ09OVEFJTkVSX0lTTEFORF9FTkQgPSAnLycgKyBRX0NPTlRBSU5FUl9JU0xBTkQ7XG4gIGNvbnN0IHFEb2N1bWVudCA9IGRvY3VtZW50IGFzIFFEb2N1bWVudDtcbiAgY29uc3Qgdk5vZGVEYXRhTWFwID1cbiAgICBxRG9jdW1lbnQucVZOb2RlRGF0YSB8fCAocURvY3VtZW50LnFWTm9kZURhdGEgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBzdHJpbmc+KCkpO1xuICBjb25zdCBwcm90b3R5cGU6IGFueSA9IGRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IGdldHRlciA9IChwcm90b3R5cGU6IGFueSwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgbGV0IGdldHRlcjogYW55O1xuICAgIHdoaWxlIChwcm90b3R5cGUgJiYgIShnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvdHlwZSwgbmFtZSk/LmdldCkpIHtcbiAgICAgIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgZ2V0dGVyIHx8XG4gICAgICBmdW5jdGlvbiAodGhpczogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzW25hbWVdO1xuICAgICAgfVxuICAgICk7XG4gIH07XG4gIGNvbnN0IGdldEF0dHJpYnV0ZSA9IHByb3RvdHlwZS5nZXRBdHRyaWJ1dGUgYXMgKHRoaXM6IE5vZGUsIG5hbWU6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcbiAgY29uc3QgaGFzQXR0cmlidXRlID0gcHJvdG90eXBlLmhhc0F0dHJpYnV0ZSBhcyAodGhpczogTm9kZSwgbmFtZTogc3RyaW5nKSA9PiBib29sZWFuO1xuICBjb25zdCBnZXROb2RlVHlwZSA9IGdldHRlcihwcm90b3R5cGUsICdub2RlVHlwZScpIGFzICh0aGlzOiBOb2RlKSA9PiBudW1iZXI7XG5cbiAgLy8gUHJvY2VzcyBhbGwgb2YgdGhlIGBxd2lrL3Zub2RlYCBzY3JpcHQgdGFncyBieSBhdHRhY2hpbmcgdGhlbSB0byB0aGUgY29ycmVzcG9uZGluZyBjb250YWluZXJzLlxuICBjb25zdCBhdHRhY2hWbm9kZURhdGFBbmRSZWZzID0gKGVsZW1lbnQ6IERvY3VtZW50IHwgU2hhZG93Um9vdCkgPT4ge1xuICAgIEFycmF5LmZyb20oZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbdHlwZT1cInF3aWsvdm5vZGVcIl0nKSkuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3gtcXdpay92bm9kZScpO1xuICAgICAgY29uc3QgcUNvbnRhaW5lckVsZW1lbnQgPSBzY3JpcHQuY2xvc2VzdCgnW3FcXFxcOmNvbnRhaW5lcl0nKSBhcyBDb250YWluZXJFbGVtZW50IHwgbnVsbDtcbiAgICAgIHFDb250YWluZXJFbGVtZW50IS5xVm5vZGVEYXRhID0gc2NyaXB0LnRleHRDb250ZW50ITtcbiAgICAgIHFDb250YWluZXJFbGVtZW50IS5xVk5vZGVSZWZzID0gbmV3IE1hcDxudW1iZXIsIEVsZW1lbnQgfCBFbGVtZW50Vk5vZGU+KCk7XG4gICAgfSk7XG4gICAgZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcVxcXFw6c2hhZG93cm9vdF0nKS5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBwYXJlbnQuc2hhZG93Um9vdDtcbiAgICAgIHNoYWRvd1Jvb3QgJiYgYXR0YWNoVm5vZGVEYXRhQW5kUmVmcyhzaGFkb3dSb290KTtcbiAgICB9KTtcbiAgfTtcbiAgYXR0YWNoVm5vZGVEYXRhQW5kUmVmcyhkb2N1bWVudCk7XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBGdW5jdGlvbnMgdG8gY29uc3VtZSB0aGUgdHJlZS5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGNvbnN0IGVudW0gTm9kZVR5cGUge1xuICAgIENPTlRBSU5FUl9NQVNLIC8qICoqKioqKioqKioqKioqKioqICovID0gMGIwMDAwMDAwMSxcbiAgICBFTEVNRU5UIC8qICoqKioqKioqKioqKioqKioqKioqKioqKiAqLyA9IDBiMDAwMDAwMTAsIC8vIHJlZ3VsYXIgZWxlbWVudFxuICAgIEVMRU1FTlRfQ09OVEFJTkVSIC8qICoqKioqKioqKioqKioqICovID0gMGIwMDAwMDAxMSwgLy8gY29udGFpbmVyIGVsZW1lbnQgbmVlZCB0byBkZXNjZW5kIGludG8gaXRcbiAgICBFTEVNRU5UX1NIQURPV19ST09UIC8qICoqKioqKioqKioqKiAqLyA9IDBiMDAwMDAxMTAsIC8vIHNoYWRvdyByb290IGVsZW1lbnRcbiAgICBDT01NRU5UX1NLSVBfU1RBUlQgLyogKioqKioqKioqKioqKiAqLyA9IDBiMDAwMDAxMDEsIC8vIENvbW1lbnQgYnV0IHNraXAgdGhlIGNvbnRlbnQgdW50aWwgQ09NTUVOVF9TS0lQX0VORFxuICAgIENPTU1FTlRfU0tJUF9FTkQgLyogKioqKioqKioqKioqKioqICovID0gMGIwMDAwMTAwMCwgLy8gQ29tbWVudCBlbmRcbiAgICBDT01NRU5UX0lHTk9SRV9TVEFSVCAvKiAqKioqKioqKioqKiAqLyA9IDBiMDAwMTAwMDAsIC8vIENvbW1lbnQgaWdub3JlLCBkZXNjZW5kIGludG8gY2hpbGRyZW4gYW5kIHNraXAgdGhlIGNvbnRlbnQgdW50aWwgQ09NTUVOVF9JU0xBTkRfU1RBUlRcbiAgICBDT01NRU5UX0lHTk9SRV9FTkQgLyogKioqKioqKioqKioqKiAqLyA9IDBiMDAxMDAwMDAsIC8vIENvbW1lbnQgaWdub3JlIGVuZFxuICAgIENPTU1FTlRfSVNMQU5EX1NUQVJUIC8qICoqKioqKioqKioqICovID0gMGIwMTAwMDAwMSwgLy8gQ29tbWVudCBpc2xhbmQsIGNvdW50IGVsZW1lbnRzIGZvciBwYXJlbnQgY29udGFpbmVyIHVudGlsIENPTU1FTlRfSVNMQU5EX0VORFxuICAgIENPTU1FTlRfSVNMQU5EX0VORCAvKiAqKioqKioqKioqKioqICovID0gMGIxMDAwMDAwMCwgLy8gQ29tbWVudCBpc2xhbmQgZW5kXG4gICAgT1RIRVIgLyogKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8gPSAwYjAwMDAwMDAwLFxuICB9XG5cbiAgLyoqXG4gICAqIExvb2tzIHVwIHdoaWNoIHR5cGUgb2Ygbm9kZSB0aGlzIGlzIGluIGEgbW9ub21vcnBoaWMgd2F5IHdoaWNoIHNob3VsZCBiZSBmYXN0ZXIuXG4gICAqXG4gICAqIFNlZTogaHR0cHM6Ly9taGV2ZXJ5LmdpdGh1Yi5pby9wZXJmLXRlc3RzL0RPTS1tZWdhbW9ycGhpYy5odG1sXG4gICAqL1xuICBjb25zdCBnZXRGYXN0Tm9kZVR5cGUgPSAobm9kZTogTm9kZSk6IE5vZGVUeXBlID0+IHtcbiAgICBjb25zdCBub2RlVHlwZSA9IGdldE5vZGVUeXBlLmNhbGwobm9kZSk7XG4gICAgaWYgKG5vZGVUeXBlID09PSAxIC8qIE5vZGUuRUxFTUVOVF9OT0RFICovKSB7XG4gICAgICBjb25zdCBxQ29udGFpbmVyID0gZ2V0QXR0cmlidXRlLmNhbGwobm9kZSwgUV9DT05UQUlORVIpO1xuICAgICAgaWYgKHFDb250YWluZXIgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKGhhc0F0dHJpYnV0ZS5jYWxsKG5vZGUsIFFfU0hBRE9XX1JPT1QpKSB7XG4gICAgICAgICAgcmV0dXJuIE5vZGVUeXBlLkVMRU1FTlRfU0hBRE9XX1JPT1Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNRRWxlbWVudCA9IGhhc0F0dHJpYnV0ZS5jYWxsKG5vZGUsIFFfUFJPUFNfU0VQQVJBVE9SKTtcbiAgICAgICAgcmV0dXJuIGlzUUVsZW1lbnQgPyBOb2RlVHlwZS5FTEVNRU5UIDogTm9kZVR5cGUuT1RIRVI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gTm9kZVR5cGUuRUxFTUVOVF9DT05UQUlORVI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlVHlwZSA9PT0gOCAvKiBOb2RlLkNPTU1FTlRfTk9ERSAqLykge1xuICAgICAgY29uc3Qgbm9kZVZhbHVlID0gbm9kZS5ub2RlVmFsdWUgfHwgJyc7IC8vIG5vZGVWYWx1ZSBpcyBtb25vbW9ycGhpYyBzbyBpdCBkb2VzIG5vdCBuZWVkIGZhc3QgcGF0aFxuICAgICAgaWYgKG5vZGVWYWx1ZS5zdGFydHNXaXRoKFFfQ09OVEFJTkVSX0lTTEFORCkpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVUeXBlLkNPTU1FTlRfSVNMQU5EX1NUQVJUO1xuICAgICAgfSBlbHNlIGlmIChub2RlVmFsdWUuc3RhcnRzV2l0aChRX0lHTk9SRSkpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVUeXBlLkNPTU1FTlRfSUdOT1JFX1NUQVJUO1xuICAgICAgfSBlbHNlIGlmIChub2RlVmFsdWUuc3RhcnRzV2l0aChRX0NPTlRBSU5FUikpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVUeXBlLkNPTU1FTlRfU0tJUF9TVEFSVDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZVZhbHVlLnN0YXJ0c1dpdGgoUV9DT05UQUlORVJfSVNMQU5EX0VORCkpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVUeXBlLkNPTU1FTlRfSVNMQU5EX0VORDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZVZhbHVlLnN0YXJ0c1dpdGgoUV9JR05PUkVfRU5EKSkge1xuICAgICAgICByZXR1cm4gTm9kZVR5cGUuQ09NTUVOVF9JR05PUkVfRU5EO1xuICAgICAgfSBlbHNlIGlmIChub2RlVmFsdWUuc3RhcnRzV2l0aChRX0NPTlRBSU5FUl9FTkQpKSB7XG4gICAgICAgIHJldHVybiBOb2RlVHlwZS5DT01NRU5UX1NLSVBfRU5EO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gTm9kZVR5cGUuT1RIRVI7XG4gIH07XG5cbiAgY29uc3QgaXNTZXBhcmF0b3IgPSAoY2g6IG51bWJlcikgPT5cbiAgICAvKiBgIWAgKi8gVk5vZGVEYXRhU2VwYXJhdG9yLkFEVkFOQ0VfMSA8PSBjaCAmJiBjaCA8PSBWTm9kZURhdGFTZXBhcmF0b3IuQURWQU5DRV84MTkyOyAvKiBgLmAgKi9cbiAgLyoqXG4gICAqIEdpdmVuIHRoZSBgdkRhdGFgIHN0cmluZywgYHN0YXJ0YCBpbmRleCwgYW5kIGBlbmRgIGluZGV4LCBmaW5kIHRoZSBlbmQgb2YgdGhlIFZOb2RlRGF0YVxuICAgKiBzZWN0aW9uLlxuICAgKi9cbiAgY29uc3QgZmluZFZEYXRhU2VjdGlvbkVuZCA9ICh2RGF0YTogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgbGV0IGRlcHRoID0gMDtcbiAgICB3aGlsZSAodHJ1ZSBhcyBib29sZWFuKSB7XG4gICAgICAvLyBsb29rIGZvciB0aGUgZW5kIG9mIFZOb2RlRGF0YVxuICAgICAgaWYgKHN0YXJ0IDwgZW5kKSB7XG4gICAgICAgIGNvbnN0IGNoID0gdkRhdGEuY2hhckNvZGVBdChzdGFydCk7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCAmJiBpc1NlcGFyYXRvcihjaCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoY2ggPT09IFZOb2RlRGF0YUNoYXIuT1BFTikge1xuICAgICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBWTm9kZURhdGFDaGFyLkNMT1NFKSB7XG4gICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFydCsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0O1xuICB9O1xuXG4gIGNvbnN0IG5leHRTaWJsaW5nID0gKG5vZGU6IE5vZGUgfCBudWxsKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgd2hpbGUgKG5vZGUgJiYgKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSAmJiBnZXRGYXN0Tm9kZVR5cGUobm9kZSkgPT09IE5vZGVUeXBlLk9USEVSKSB7fVxuICAgIHJldHVybiBub2RlO1xuICB9O1xuXG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSAobm9kZTogTm9kZSB8IG51bGwpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB3aGlsZSAobm9kZSAmJiAobm9kZSA9IG5vZGUuZmlyc3RDaGlsZCkgJiYgZ2V0RmFzdE5vZGVUeXBlKG5vZGUpID09PSBOb2RlVHlwZS5PVEhFUikge31cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICAvKipcbiAgICogUHJvY2VzcyB0aGUgY29udGFpbmVyXG4gICAqXG4gICAqIEBwYXJhbSB3YWxrZXIgVHJlZVdhbGtlclxuICAgKiBAcGFyYW0gY29udGFpbmVyTm9kZSBUaGUgcm9vdCBvZiBjb250YWluZXIgZWxlbWVudFxuICAgKiBAcGFyYW0gZXhpdE5vZGUgVGhlIG5vZGUgd2hpY2ggcmVwcmVzZW50cyB0aGUgbGFzdCBub2RlIGFuZCB3ZSBzaG91bGQgZXhpdC5cbiAgICogQHBhcmFtIHFWTm9kZVJlZnMgUGxhY2UgdG8gc3RvcmUgdGhlIFZOb2RlUmVmc1xuICAgKi9cbiAgY29uc3Qgd2Fsa0NvbnRhaW5lciA9IChcbiAgICB3YWxrZXI6IFRyZWVXYWxrZXIsXG4gICAgY29udGFpbmVyTm9kZTogTm9kZSB8IG51bGwsXG4gICAgbm9kZTogTm9kZSB8IG51bGwsXG4gICAgZXhpdE5vZGU6IE5vZGUgfCBudWxsLFxuICAgIHZEYXRhOiBzdHJpbmcsXG4gICAgcVZOb2RlUmVmczogTWFwPG51bWJlciwgRWxlbWVudCB8IEVsZW1lbnRWTm9kZT4sXG4gICAgcHJlZml4OiBzdHJpbmdcbiAgKSA9PiB7XG4gICAgY29uc3QgdkRhdGFfbGVuZ3RoID0gdkRhdGEubGVuZ3RoO1xuICAgIC8vLyBTdG9yZXMgdGhlIGN1cnJlbnQgZWxlbWVudCBpbmRleCBhcyB0aGUgVHJlZVdhbGtlciB0cmF2ZXJzZXMgdGhlIERPTS5cbiAgICBsZXQgZWxlbWVudElkeCA9IDA7XG4gICAgLy8vIFN0b3JlcyB0aGUgY3VycmVudCBWTm9kZSBpbmRleCBhcyBkZXJpdmVkIGZyb20gdGhlIFZOb2RlRGF0YSBzY3JpcHQgdGFnLlxuICAgIGxldCB2Tm9kZUVsZW1lbnRJbmRleCA9IC0xO1xuICAgIGxldCB2RGF0YV9zdGFydCA9IDA7XG4gICAgbGV0IHZEYXRhX2VuZCA9IDA7XG4gICAgbGV0IGNoID0gMDtcbiAgICBsZXQgbmVlZHNUb1N0b3JlUmVmID0gLTE7XG4gICAgbGV0IG5leHROb2RlOiBOb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQ29tcHV0ZXMgbnVtYmVyIG9mIGVsZW1lbnRzIHdoaWNoIG5lZWQgdG8gYmUgc2tpcHBlZCB0byBnZXQgdG8gdGhlIG5leHQgVk5vZGVEYXRhIHNlY3Rpb24uICovXG4gICAgY29uc3QgaG93TWFueUVsZW1lbnRzVG9Ta2lwID0gKCkgPT4ge1xuICAgICAgbGV0IGVsZW1lbnRzVG9Ta2lwID0gMDtcbiAgICAgIHdoaWxlIChpc1NlcGFyYXRvcigoY2ggPSB2RGF0YS5jaGFyQ29kZUF0KHZEYXRhX3N0YXJ0KSkpKSB7XG4gICAgICAgIC8vIEtlZXAgY29uc3VtaW5nIHRoZSBzZXBhcmF0b3JzIGFuZCBpbmNyZW1lbnRpbmcgdGhlIHZOb2RlSW5kZXhcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ0FEVkFOQ0UnLCB2Tm9kZUVsZW1lbnRJbmRleCwgY2gsIGNoIC0gMzMpO1xuICAgICAgICBlbGVtZW50c1RvU2tpcCArPSAxIDw8IChjaCAtIFZOb2RlRGF0YVNlcGFyYXRvci5BRFZBTkNFXzEpO1xuICAgICAgICB2RGF0YV9zdGFydCsrO1xuICAgICAgICBpZiAodkRhdGFfc3RhcnQgPj0gdkRhdGFfbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gd2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSB2Tm9kZURhdGEgc3RvcC5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnRzVG9Ta2lwO1xuICAgIH07XG5cbiAgICBkbyB7XG4gICAgICBpZiAobm9kZSA9PT0gZXhpdE5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbmV4dE5vZGUgPSBudWxsO1xuICAgICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlID09IGNvbnRhaW5lck5vZGUgPyBOb2RlVHlwZS5FTEVNRU5UIDogZ2V0RmFzdE5vZGVUeXBlKG5vZGUhKTtcbiAgICAgIGlmIChub2RlVHlwZSA9PT0gTm9kZVR5cGUuRUxFTUVOVF9DT05UQUlORVIpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIGEgY29udGFpbmVyLCB3ZSBuZWVkIHRvIHNraXAgdGhlIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBub2RlIGFzIENvbnRhaW5lckVsZW1lbnQ7XG4gICAgICAgIGxldCBjdXJzb3IgPSBub2RlO1xuICAgICAgICB3aGlsZSAoY3Vyc29yICYmICEobmV4dE5vZGUgPSBuZXh0U2libGluZyhjdXJzb3IpKSkge1xuICAgICAgICAgIGN1cnNvciA9IGN1cnNvciEucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZygnRVhJVCcsIG5leHROb2RlPy5vdXRlckhUTUwpO1xuICAgICAgICB3YWxrQ29udGFpbmVyKFxuICAgICAgICAgIHdhbGtlcixcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBuZXh0Tm9kZSxcbiAgICAgICAgICBjb250YWluZXIucVZub2RlRGF0YSB8fCAnJyxcbiAgICAgICAgICBjb250YWluZXIucVZOb2RlUmVmcyEsXG4gICAgICAgICAgcHJlZml4ICsgJyAgJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChub2RlVHlwZSA9PT0gTm9kZVR5cGUuQ09NTUVOVF9JR05PUkVfU1RBUlQpIHtcbiAgICAgICAgbGV0IGlzbGFuZE5vZGUgPSBub2RlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgaXNsYW5kTm9kZSA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICAgIGlmICghaXNsYW5kTm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJc2xhbmQgaW5zaWRlIDwhLS0ke25vZGU/Lm5vZGVWYWx1ZX0tLT4gbm90IGZvdW5kIWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoZ2V0RmFzdE5vZGVUeXBlKGlzbGFuZE5vZGUpICE9PSBOb2RlVHlwZS5DT01NRU5UX0lTTEFORF9TVEFSVCk7XG4gICAgICAgIG5leHROb2RlID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZVR5cGUgPT09IE5vZGVUeXBlLkNPTU1FTlRfSVNMQU5EX0VORCkge1xuICAgICAgICBuZXh0Tm9kZSA9IG5vZGU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBuZXh0Tm9kZSA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICAgIGlmICghbmV4dE5vZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSWdub3JlIGJsb2NrIG5vdCBjbG9zZWQhYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChnZXRGYXN0Tm9kZVR5cGUobmV4dE5vZGUpICE9PSBOb2RlVHlwZS5DT01NRU5UX0lHTk9SRV9FTkQpO1xuICAgICAgICBuZXh0Tm9kZSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKG5vZGVUeXBlID09PSBOb2RlVHlwZS5DT01NRU5UX1NLSVBfU1RBUlQpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIGEgY29udGFpbmVyLCB3ZSBuZWVkIHRvIHNraXAgdGhlIGNoaWxkcmVuLlxuICAgICAgICBuZXh0Tm9kZSA9IG5vZGU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBuZXh0Tm9kZSA9IG5leHRTaWJsaW5nKG5leHROb2RlKTtcbiAgICAgICAgICBpZiAoIW5leHROb2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYDwhLS0ke25vZGU/Lm5vZGVWYWx1ZX0tLT4gbm90IGNsb3NlZCFgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGdldEZhc3ROb2RlVHlwZShuZXh0Tm9kZSkgIT09IE5vZGVUeXBlLkNPTU1FTlRfU0tJUF9FTkQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnRVhJVCcsIG5leHROb2RlPy5vdXRlckhUTUwpO1xuICAgICAgICB3YWxrQ29udGFpbmVyKHdhbGtlciwgbm9kZSwgbm9kZSwgbmV4dE5vZGUsICcnLCBudWxsISwgcHJlZml4ICsgJyAgJyk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGVUeXBlID09PSBOb2RlVHlwZS5FTEVNRU5UX1NIQURPV19ST09UKSB7XG4gICAgICAgIC8vIElmIHdlIGFyZSBpbiBhIHNoYWRvdyByb290LCB3ZSBuZWVkIHRvIGdldCB0aGUgc2hhZG93IHJvb3QgZWxlbWVudC5cbiAgICAgICAgbmV4dE5vZGUgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdENvbnRhaW5lciA9IG5vZGUgYXMgRWxlbWVudCB8IG51bGw7XG4gICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290Q29udGFpbmVyPy5zaGFkb3dSb290O1xuICAgICAgICBpZiAoc2hhZG93Um9vdCkge1xuICAgICAgICAgIHdhbGtDb250YWluZXIoXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyB3YWxrZXIgZm9yIHRoZSBzaGFkb3cgcm9vdFxuICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgICAgICAgICAgc2hhZG93Um9vdCxcbiAgICAgICAgICAgICAgMHgxIC8qIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UICAqLyB8IDB4ODAgLyogIE5vZGVGaWx0ZXIuU0hPV19DT01NRU5UICovXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGZpcnN0Q2hpbGQoc2hhZG93Um9vdCksXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBudWxsISxcbiAgICAgICAgICAgIHByZWZpeCArICcgICdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgobm9kZVR5cGUgJiBOb2RlVHlwZS5FTEVNRU5UKSA9PT0gTm9kZVR5cGUuRUxFTUVOVCkge1xuICAgICAgICBpZiAodk5vZGVFbGVtZW50SW5kZXggPCBlbGVtZW50SWR4KSB7XG4gICAgICAgICAgLy8gVk5vZGVEYXRhIG5lZWRzIHRvIGNhdGNoIHVwIHdpdGggdGhlIGVsZW1lbnRJZHhcbiAgICAgICAgICBpZiAodk5vZGVFbGVtZW50SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICB2Tm9kZUVsZW1lbnRJbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZEYXRhX3N0YXJ0ID0gdkRhdGFfZW5kO1xuICAgICAgICAgIGlmICh2RGF0YV9zdGFydCA8IHZEYXRhX2xlbmd0aCkge1xuICAgICAgICAgICAgdk5vZGVFbGVtZW50SW5kZXggKz0gaG93TWFueUVsZW1lbnRzVG9Ta2lwKCk7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRTdG9yZVJlZiA9IGNoID09PSBWTm9kZURhdGFTZXBhcmF0b3IuUkVGRVJFTkNFO1xuICAgICAgICAgICAgaWYgKHNob3VsZFN0b3JlUmVmKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHJlZiBoYW5kbGUgaXQgaGVyZS5cbiAgICAgICAgICAgICAgbmVlZHNUb1N0b3JlUmVmID0gdk5vZGVFbGVtZW50SW5kZXg7XG4gICAgICAgICAgICAgIHZEYXRhX3N0YXJ0Kys7XG4gICAgICAgICAgICAgIGlmICh2RGF0YV9zdGFydCA8IHZEYXRhX2xlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gdkRhdGEuY2hhckNvZGVBdCh2RGF0YV9lbmQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFzc3VtZSBzZXBhcmF0b3Igb24gZW5kLlxuICAgICAgICAgICAgICAgIGNoID0gVk5vZGVEYXRhU2VwYXJhdG9yLkFEVkFOQ0VfMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdkRhdGFfZW5kID0gZmluZFZEYXRhU2VjdGlvbkVuZCh2RGF0YSwgdkRhdGFfc3RhcnQsIHZEYXRhX2xlbmd0aCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZOb2RlRWxlbWVudEluZGV4ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAvLyAgIHByZWZpeCxcbiAgICAgICAgLy8gICAnRUxFTUVOVCcsXG4gICAgICAgIC8vICAgbm9kZVR5cGUsXG4gICAgICAgIC8vICAgZWxlbWVudElkeCxcbiAgICAgICAgLy8gICB2Tm9kZUVsZW1lbnRJbmRleCxcbiAgICAgICAgLy8gICAobm9kZSBhcyBhbnkpLm91dGVySFRNTCxcbiAgICAgICAgLy8gICBlbGVtZW50SWR4ID09PSB2Tm9kZUVsZW1lbnRJbmRleCA/IHZEYXRhLnN1YnN0cmluZyh2RGF0YV9zdGFydCwgdkRhdGFfZW5kKSA6ICcnXG4gICAgICAgIC8vICk7XG4gICAgICAgIGlmIChlbGVtZW50SWR4ID09PSB2Tm9kZUVsZW1lbnRJbmRleCkge1xuICAgICAgICAgIGlmIChuZWVkc1RvU3RvcmVSZWYgPT09IGVsZW1lbnRJZHgpIHtcbiAgICAgICAgICAgIHFWTm9kZVJlZnMuc2V0KGVsZW1lbnRJZHgsIG5vZGUgYXMgRWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IHZEYXRhLnN1YnN0cmluZyh2RGF0YV9zdGFydCwgdkRhdGFfZW5kKTtcbiAgICAgICAgICB2Tm9kZURhdGFNYXAuc2V0KG5vZGUgYXMgRWxlbWVudCwgaW5zdHJ1Y3Rpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50SWR4Kys7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoKG5vZGUgPSBuZXh0Tm9kZSB8fCB3YWxrZXIubmV4dE5vZGUoKSkpO1xuICB9O1xuXG4gIC8vIFdhbGsgdGhlIHRyZWUgYW5kIHByb2Nlc3MgZWFjaCBgcTpjb250YWluZXJgIGVsZW1lbnQuXG4gIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgZG9jdW1lbnQsXG4gICAgMHgxIC8qIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UICAqLyB8IDB4ODAgLyogIE5vZGVGaWx0ZXIuU0hPV19DT01NRU5UICovXG4gICk7XG5cbiAgd2Fsa0NvbnRhaW5lcih3YWxrZXIsIG51bGwsIHdhbGtlci5maXJzdENoaWxkKCksIG51bGwsICcnLCBudWxsISwgJycpO1xufVxuIl19","/** @file Public APIs for the SSR */\nimport { assertTrue } from '../shared/error/assert';\nimport { qError } from '../shared/error/error';\nimport { ERROR_CONTEXT, isRecoverable } from '../shared/error/error-handling';\nimport { getPlatform } from '../shared/platform/platform';\nimport { emitEvent } from '../shared/qrl/qrl-class';\nimport { _SharedContainer } from '../shared/shared-container';\nimport { inflateQRL, parseQRL, wrapDeserializerProxy } from '../shared/shared-serialization';\nimport { EMPTY_ARRAY } from '../shared/utils/flyweight';\nimport { ELEMENT_PROPS, ELEMENT_SEQ, ELEMENT_SEQ_IDX, OnRenderProp, QBaseAttr, QContainerAttr, QContainerSelector, QCtxAttr, QInstanceAttr, QScopedStyle, QSlotParent, QStyle, QStyleSelector, QBackRefs, Q_PROPS_SEPARATOR, USE_ON_LOCAL_SEQ_IDX, getQFuncs, QLocaleAttr, QManifestHashAttr, } from '../shared/utils/markers';\nimport { isPromise } from '../shared/utils/promises';\nimport { isSlotProp } from '../shared/utils/prop';\nimport { qDev } from '../shared/utils/qdev';\nimport { convertScopedStyleIdsToArray, convertStyleIdsToString, } from '../shared/utils/scoped-styles';\nimport { processVNodeData } from './process-vnode-data';\nimport { vnode_applyJournal, vnode_getDOMChildNodes, vnode_getDomParent, vnode_getParent, vnode_getProp, vnode_getProps, vnode_insertBefore, vnode_isVirtualVNode, vnode_locate, vnode_newElement, vnode_newUnMaterializedElement, vnode_setProp, } from './vnode';\nimport { mapArray_get, mapArray_set } from './util-mapArray';\n/** @public */\nexport function getDomContainer(element) {\n    const qContainerElement = _getQContainerElement(element);\n    if (!qContainerElement) {\n        throw qError(41 /* QError.containerNotFound */);\n    }\n    return getDomContainerFromQContainerElement(qContainerElement);\n}\nexport function getDomContainerFromQContainerElement(qContainerElement) {\n    const qElement = qContainerElement;\n    let container = qElement.qContainer;\n    if (!container) {\n        container = new DomContainer(qElement);\n    }\n    return container;\n}\n/** @internal */\nexport function _getQContainerElement(element) {\n    const qContainerElement = Array.isArray(element)\n        ? vnode_getDomParent(element)\n        : element;\n    return qContainerElement.closest(QContainerSelector);\n}\nexport const isDomContainer = (container) => {\n    return container instanceof DomContainer;\n};\n/** @internal */\nexport class DomContainer extends _SharedContainer {\n    element;\n    qContainer;\n    qManifestHash;\n    rootVNode;\n    document;\n    $journal$;\n    renderDone = null;\n    $rawStateData$;\n    $storeProxyMap$ = new WeakMap();\n    $qFuncs$;\n    $instanceHash$;\n    vNodeLocate = (id) => vnode_locate(this.rootVNode, id);\n    $stateData$;\n    $styleIds$ = null;\n    $renderCount$ = 0;\n    constructor(element) {\n        super(() => this.scheduleRender(), () => vnode_applyJournal(this.$journal$), {}, element.getAttribute(QLocaleAttr));\n        this.qContainer = element.getAttribute(QContainerAttr);\n        if (!this.qContainer) {\n            throw qError(42 /* QError.elementWithoutContainer */);\n        }\n        this.$journal$ = [\n            3 /* VNodeJournalOpCode.HoistStyles */,\n            element.ownerDocument,\n        ];\n        this.document = element.ownerDocument;\n        this.element = element;\n        this.$buildBase$ = element.getAttribute(QBaseAttr);\n        this.$instanceHash$ = element.getAttribute(QInstanceAttr);\n        this.qManifestHash = element.getAttribute(QManifestHashAttr);\n        this.rootVNode = vnode_newUnMaterializedElement(this.element);\n        this.$rawStateData$ = [];\n        this.$stateData$ = [];\n        const document = this.element.ownerDocument;\n        if (!document.qVNodeData) {\n            processVNodeData(document);\n        }\n        this.$qFuncs$ = getQFuncs(document, this.$instanceHash$) || EMPTY_ARRAY;\n        this.$setServerData$();\n        element.setAttribute(QContainerAttr, \"resumed\" /* QContainerValue.RESUMED */);\n        element.qContainer = this;\n        const qwikStates = element.querySelectorAll('script[type=\"qwik/state\"]');\n        if (qwikStates.length !== 0) {\n            const lastState = qwikStates[qwikStates.length - 1];\n            this.$rawStateData$ = JSON.parse(lastState.textContent);\n            this.$stateData$ = wrapDeserializerProxy(this, this.$rawStateData$);\n        }\n    }\n    $setRawState$(id, vParent) {\n        this.$stateData$[id] = vParent;\n    }\n    parseQRL(qrl) {\n        return inflateQRL(this, parseQRL(qrl));\n    }\n    handleError(err, host) {\n        if (qDev && host) {\n            // Clean vdom\n            if (typeof document !== 'undefined') {\n                const vHost = host;\n                const errorDiv = document.createElement('errored-host');\n                if (err && err instanceof Error) {\n                    errorDiv.props = { error: err };\n                }\n                errorDiv.setAttribute('q:key', '_error_');\n                const journal = [];\n                const vErrorDiv = vnode_newElement(errorDiv, 'errored-host');\n                vnode_getDOMChildNodes(journal, vHost, true).forEach((child) => {\n                    vnode_insertBefore(journal, vErrorDiv, child, null);\n                });\n                vnode_insertBefore(journal, vHost, vErrorDiv, null);\n                vnode_applyJournal(journal);\n            }\n            if (err && err instanceof Error) {\n                if (!('hostElement' in err)) {\n                    err['hostElement'] = String(host);\n                }\n            }\n            if (!isRecoverable(err)) {\n                throw err;\n            }\n        }\n        const errorStore = host && this.resolveContext(host, ERROR_CONTEXT);\n        if (!errorStore) {\n            throw err;\n        }\n        errorStore.error = err;\n    }\n    setContext(host, context, value) {\n        let ctx = this.getHostProp(host, QCtxAttr);\n        if (!ctx) {\n            this.setHostProp(host, QCtxAttr, (ctx = []));\n        }\n        mapArray_set(ctx, context.id, value, 0);\n    }\n    resolveContext(host, contextId) {\n        while (host) {\n            const ctx = this.getHostProp(host, QCtxAttr);\n            if (ctx) {\n                const value = mapArray_get(ctx, contextId.id, 0);\n                if (value) {\n                    return value;\n                }\n            }\n            host = this.getParentHost(host);\n        }\n        return undefined;\n    }\n    getParentHost(host) {\n        let vNode = vnode_getParent(host);\n        while (vNode) {\n            if (vnode_isVirtualVNode(vNode)) {\n                if (vnode_getProp(vNode, OnRenderProp, null) !== null) {\n                    return vNode;\n                }\n                vNode =\n                    vnode_getParent(vNode) ||\n                        // If virtual node, than it could be a slot so we need to read its parent.\n                        vnode_getProp(vNode, QSlotParent, this.vNodeLocate);\n            }\n            else {\n                vNode = vnode_getParent(vNode);\n            }\n        }\n        return null;\n    }\n    setHostProp(host, name, value) {\n        const vNode = host;\n        vnode_setProp(vNode, name, value);\n    }\n    getHostProp(host, name) {\n        const vNode = host;\n        let getObjectById = null;\n        switch (name) {\n            case ELEMENT_SEQ:\n            case ELEMENT_PROPS:\n            case OnRenderProp:\n            case QCtxAttr:\n            case QBackRefs:\n                getObjectById = this.$getObjectById$;\n                break;\n            case ELEMENT_SEQ_IDX:\n            case USE_ON_LOCAL_SEQ_IDX:\n                getObjectById = parseInt;\n                break;\n        }\n        return vnode_getProp(vNode, name, getObjectById);\n    }\n    scheduleRender() {\n        this.$renderCount$++;\n        this.renderDone ||= getPlatform().nextTick(() => this.processChores());\n        return this.renderDone.finally(() => emitEvent('qrender', { instanceHash: this.$instanceHash$, renderCount: this.$renderCount$ }));\n    }\n    processChores() {\n        let renderCount = this.$renderCount$;\n        const result = this.$scheduler$(255 /* ChoreType.WAIT_FOR_ALL */);\n        if (isPromise(result)) {\n            return result.then(async () => {\n                while (renderCount !== this.$renderCount$) {\n                    renderCount = this.$renderCount$;\n                    await this.$scheduler$(255 /* ChoreType.WAIT_FOR_ALL */);\n                }\n                this.renderDone = null;\n            });\n        }\n        if (renderCount !== this.$renderCount$) {\n            this.processChores();\n            return;\n        }\n        this.renderDone = null;\n    }\n    ensureProjectionResolved(vNode) {\n        if ((vNode[0 /* VNodeProps.flags */] & 16 /* VNodeFlags.Resolved */) === 0) {\n            vNode[0 /* VNodeProps.flags */] |= 16 /* VNodeFlags.Resolved */;\n            const props = vnode_getProps(vNode);\n            for (let i = 0; i < props.length; i = i + 2) {\n                const prop = props[i];\n                if (isSlotProp(prop)) {\n                    const value = props[i + 1];\n                    if (typeof value == 'string') {\n                        props[i + 1] = this.vNodeLocate(value);\n                    }\n                }\n            }\n        }\n    }\n    $getObjectById$ = (id) => {\n        if (typeof id === 'string') {\n            id = parseFloat(id);\n        }\n        assertTrue(id < this.$rawStateData$.length / 2, `Invalid reference: ${id} >= ${this.$rawStateData$.length / 2}`);\n        return this.$stateData$[id];\n    };\n    getSyncFn(id) {\n        const fn = this.$qFuncs$[id];\n        assertTrue(typeof fn === 'function', 'Invalid reference: ' + id);\n        return fn;\n    }\n    $appendStyle$(content, styleId, host, scoped) {\n        if (scoped) {\n            const scopedStyleIdsString = this.getHostProp(host, QScopedStyle);\n            const scopedStyleIds = new Set(convertScopedStyleIdsToArray(scopedStyleIdsString));\n            scopedStyleIds.add(styleId);\n            this.setHostProp(host, QScopedStyle, convertStyleIdsToString(scopedStyleIds));\n        }\n        if (this.$styleIds$ == null) {\n            this.$styleIds$ = new Set();\n            this.element.querySelectorAll(QStyleSelector).forEach((style) => {\n                this.$styleIds$.add(style.getAttribute(QStyle));\n            });\n        }\n        if (!this.$styleIds$.has(styleId)) {\n            this.$styleIds$.add(styleId);\n            const styleElement = this.document.createElement('style');\n            styleElement.setAttribute(QStyle, styleId);\n            styleElement.textContent = content;\n            this.$journal$.push(5 /* VNodeJournalOpCode.Insert */, this.document.head, null, styleElement);\n        }\n    }\n    // TODO: should be moved to the Qwik Router?\n    /** Set the server data for the Qwik Router. */\n    $setServerData$() {\n        const containerAttributes = {};\n        const attrs = this.element.attributes;\n        if (attrs) {\n            for (let index = 0; index < attrs.length; index++) {\n                const attr = attrs[index];\n                if (attr.name === Q_PROPS_SEPARATOR) {\n                    continue;\n                }\n                containerAttributes[attr.name] = attr.value;\n            }\n        }\n        this.$serverData$ = { containerAttributes };\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9jbGllbnQvZG9tLWNvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFFcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUNMLGFBQWEsRUFDYixXQUFXLEVBQ1gsZUFBZSxFQUNmLFlBQVksRUFDWixTQUFTLEVBQ1QsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixRQUFRLEVBQ1IsYUFBYSxFQUNiLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLGNBQWMsRUFDZCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsV0FBVyxFQUNYLGlCQUFpQixHQUNsQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVD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QixNQUFNLG1CQUFtQixHQUEyQixFQUFFLENBQUM7UUFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDdEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ2xELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFLENBQUM7b0JBQ3BDLFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAZmlsZSBQdWJsaWMgQVBJcyBmb3IgdGhlIFNTUiAqL1xuXG5pbXBvcnQgeyBhc3NlcnRUcnVlIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Fzc2VydCc7XG5pbXBvcnQgeyBRRXJyb3IsIHFFcnJvciB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci9lcnJvcic7XG5pbXBvcnQgeyBFUlJPUl9DT05URVhULCBpc1JlY292ZXJhYmxlIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Vycm9yLWhhbmRsaW5nJztcbmltcG9ydCB7IGdldFBsYXRmb3JtIH0gZnJvbSAnLi4vc2hhcmVkL3BsYXRmb3JtL3BsYXRmb3JtJztcbmltcG9ydCB7IGVtaXRFdmVudCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwucHVibGljJztcbmltcG9ydCB7IENob3JlVHlwZSB9IGZyb20gJy4uL3NoYXJlZC91dGlsLWNob3JlLXR5cGUnO1xuaW1wb3J0IHsgX1NoYXJlZENvbnRhaW5lciB9IGZyb20gJy4uL3NoYXJlZC9zaGFyZWQtY29udGFpbmVyJztcbmltcG9ydCB7IGluZmxhdGVRUkwsIHBhcnNlUVJMLCB3cmFwRGVzZXJpYWxpemVyUHJveHkgfSBmcm9tICcuLi9zaGFyZWQvc2hhcmVkLXNlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHsgUUNvbnRhaW5lclZhbHVlLCB0eXBlIEhvc3RFbGVtZW50LCB0eXBlIE9ialRvUHJveHlNYXAgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgRU1QVFlfQVJSQVkgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvZmx5d2VpZ2h0JztcbmltcG9ydCB7XG4gIEVMRU1FTlRfUFJPUFMsXG4gIEVMRU1FTlRfU0VRLFxuICBFTEVNRU5UX1NFUV9JRFgsXG4gIE9uUmVuZGVyUHJvcCxcbiAgUUJhc2VBdHRyLFxuICBRQ29udGFpbmVyQXR0cixcbiAgUUNvbnRhaW5lclNlbGVjdG9yLFxuICBRQ3R4QXR0cixcbiAgUUluc3RhbmNlQXR0cixcbiAgUVNjb3BlZFN0eWxlLFxuICBRU2xvdFBhcmVudCxcbiAgUVN0eWxlLFxuICBRU3R5bGVTZWxlY3RvcixcbiAgUUJhY2tSZWZzLFxuICBRX1BST1BTX1NFUEFSQVRPUixcbiAgVVNFX09OX0xPQ0FMX1NFUV9JRFgsXG4gIGdldFFGdW5jcyxcbiAgUUxvY2FsZUF0dHIsXG4gIFFNYW5pZmVzdEhhc2hBdHRyLFxufSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgaXNTbG90UHJvcCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9wcm9wJztcbmltcG9ydCB7IHFEZXYgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcWRldic7XG5pbXBvcnQge1xuICBjb252ZXJ0U2NvcGVkU3R5bGVJZHNUb0FycmF5LFxuICBjb252ZXJ0U3R5bGVJZHNUb1N0cmluZyxcbn0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3Njb3BlZC1zdHlsZXMnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0SWQgfSBmcm9tICcuLi91c2UvdXNlLWNvbnRleHQnO1xuaW1wb3J0IHsgcHJvY2Vzc1ZOb2RlRGF0YSB9IGZyb20gJy4vcHJvY2Vzcy12bm9kZS1kYXRhJztcbmltcG9ydCB7XG4gIFZOb2RlRmxhZ3MsXG4gIFZOb2RlUHJvcHMsXG4gIHR5cGUgQ29udGFpbmVyRWxlbWVudCxcbiAgdHlwZSBFbGVtZW50Vk5vZGUsXG4gIHR5cGUgQ2xpZW50Q29udGFpbmVyIGFzIElDbGllbnRDb250YWluZXIsXG4gIHR5cGUgUURvY3VtZW50LFxuICB0eXBlIFZOb2RlLFxuICB0eXBlIFZpcnR1YWxWTm9kZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBWTm9kZUpvdXJuYWxPcENvZGUsXG4gIHZub2RlX2FwcGx5Sm91cm5hbCxcbiAgdm5vZGVfZ2V0RE9NQ2hpbGROb2RlcyxcbiAgdm5vZGVfZ2V0RG9tUGFyZW50LFxuICB2bm9kZV9nZXRQYXJlbnQsXG4gIHZub2RlX2dldFByb3AsXG4gIHZub2RlX2dldFByb3BzLFxuICB2bm9kZV9pbnNlcnRCZWZvcmUsXG4gIHZub2RlX2lzVmlydHVhbFZOb2RlLFxuICB2bm9kZV9sb2NhdGUsXG4gIHZub2RlX25ld0VsZW1lbnQsXG4gIHZub2RlX25ld1VuTWF0ZXJpYWxpemVkRWxlbWVudCxcbiAgdm5vZGVfc2V0UHJvcCxcbiAgdHlwZSBWTm9kZUpvdXJuYWwsXG59IGZyb20gJy4vdm5vZGUnO1xuaW1wb3J0IHsgbWFwQXJyYXlfZ2V0LCBtYXBBcnJheV9zZXQgfSBmcm9tICcuL3V0aWwtbWFwQXJyYXknO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERvbUNvbnRhaW5lcihlbGVtZW50OiBFbGVtZW50IHwgVk5vZGUpOiBJQ2xpZW50Q29udGFpbmVyIHtcbiAgY29uc3QgcUNvbnRhaW5lckVsZW1lbnQgPSBfZ2V0UUNvbnRhaW5lckVsZW1lbnQoZWxlbWVudCk7XG4gIGlmICghcUNvbnRhaW5lckVsZW1lbnQpIHtcbiAgICB0aHJvdyBxRXJyb3IoUUVycm9yLmNvbnRhaW5lck5vdEZvdW5kKTtcbiAgfVxuICByZXR1cm4gZ2V0RG9tQ29udGFpbmVyRnJvbVFDb250YWluZXJFbGVtZW50KHFDb250YWluZXJFbGVtZW50ISk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREb21Db250YWluZXJGcm9tUUNvbnRhaW5lckVsZW1lbnQocUNvbnRhaW5lckVsZW1lbnQ6IEVsZW1lbnQpOiBJQ2xpZW50Q29udGFpbmVyIHtcbiAgY29uc3QgcUVsZW1lbnQgPSBxQ29udGFpbmVyRWxlbWVudCBhcyBDb250YWluZXJFbGVtZW50O1xuICBsZXQgY29udGFpbmVyID0gcUVsZW1lbnQucUNvbnRhaW5lcjtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICBjb250YWluZXIgPSBuZXcgRG9tQ29udGFpbmVyKHFFbGVtZW50KTtcbiAgfVxuICByZXR1cm4gY29udGFpbmVyO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gX2dldFFDb250YWluZXJFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQgfCBWTm9kZSk6IEVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgcUNvbnRhaW5lckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gQXJyYXkuaXNBcnJheShlbGVtZW50KVxuICAgID8gKHZub2RlX2dldERvbVBhcmVudChlbGVtZW50KSBhcyBFbGVtZW50KVxuICAgIDogZWxlbWVudDtcbiAgcmV0dXJuIHFDb250YWluZXJFbGVtZW50LmNsb3Nlc3QoUUNvbnRhaW5lclNlbGVjdG9yKTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzRG9tQ29udGFpbmVyID0gKGNvbnRhaW5lcjogYW55KTogY29udGFpbmVyIGlzIERvbUNvbnRhaW5lciA9PiB7XG4gIHJldHVybiBjb250YWluZXIgaW5zdGFuY2VvZiBEb21Db250YWluZXI7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY2xhc3MgRG9tQ29udGFpbmVyIGV4dGVuZHMgX1NoYXJlZENvbnRhaW5lciBpbXBsZW1lbnRzIElDbGllbnRDb250YWluZXIge1xuICBwdWJsaWMgZWxlbWVudDogQ29udGFpbmVyRWxlbWVudDtcbiAgcHVibGljIHFDb250YWluZXI6IHN0cmluZztcbiAgcHVibGljIHFNYW5pZmVzdEhhc2g6IHN0cmluZztcbiAgcHVibGljIHJvb3RWTm9kZTogRWxlbWVudFZOb2RlO1xuICBwdWJsaWMgZG9jdW1lbnQ6IFFEb2N1bWVudDtcbiAgcHVibGljICRqb3VybmFsJDogVk5vZGVKb3VybmFsO1xuICBwdWJsaWMgcmVuZGVyRG9uZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgJHJhd1N0YXRlRGF0YSQ6IHVua25vd25bXTtcbiAgcHVibGljICRzdG9yZVByb3h5TWFwJDogT2JqVG9Qcm94eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gIHB1YmxpYyAkcUZ1bmNzJDogQXJyYXk8KC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bj47XG4gIHB1YmxpYyAkaW5zdGFuY2VIYXNoJDogc3RyaW5nO1xuICBwdWJsaWMgdk5vZGVMb2NhdGU6IChpZDogc3RyaW5nIHwgRWxlbWVudCkgPT4gVk5vZGUgPSAoaWQpID0+IHZub2RlX2xvY2F0ZSh0aGlzLnJvb3RWTm9kZSwgaWQpO1xuXG4gIHByaXZhdGUgJHN0YXRlRGF0YSQ6IHVua25vd25bXTtcbiAgcHJpdmF0ZSAkc3R5bGVJZHMkOiBTZXQ8c3RyaW5nPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlICRyZW5kZXJDb3VudCQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICBzdXBlcihcbiAgICAgICgpID0+IHRoaXMuc2NoZWR1bGVSZW5kZXIoKSxcbiAgICAgICgpID0+IHZub2RlX2FwcGx5Sm91cm5hbCh0aGlzLiRqb3VybmFsJCksXG4gICAgICB7fSxcbiAgICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFFMb2NhbGVBdHRyKSFcbiAgICApO1xuICAgIHRoaXMucUNvbnRhaW5lciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFFDb250YWluZXJBdHRyKSE7XG4gICAgaWYgKCF0aGlzLnFDb250YWluZXIpIHtcbiAgICAgIHRocm93IHFFcnJvcihRRXJyb3IuZWxlbWVudFdpdGhvdXRDb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLiRqb3VybmFsJCA9IFtcbiAgICAgIC8vIFRoZSBmaXJzdCB0aW1lIHdlIHJlbmRlciB3ZSBuZWVkIHRvIGhvaXN0IHRoZSBzdHlsZXMuXG4gICAgICAvLyAoTWVhbmluZyB3ZSBuZWVkIHRvIG1vdmUgYWxsIHN0eWxlcyBmcm9tIGNvbXBvbmVudCBpbmxpbmUgdG8gPGhlYWQ+KVxuICAgICAgLy8gV2UgYnVsayBtb3ZlIGFsbCBvZiB0aGUgc3R5bGVzLCBiZWNhdXNlIHRoZSBleHBlbnNpdmUgcGFydCBpc1xuICAgICAgLy8gZm9yIHRoZSBicm93c2VyIHRvIHJlY29tcHV0ZSB0aGUgc3R5bGVzLCAobm90IHRoZSBhY3R1YWwgRE9NIG1hbmlwdWxhdGlvbi4pXG4gICAgICAvLyBCeSBtb3ZpbmcgYWxsIG9mIHRoZW0gYXQgb25jZSB3ZSBjYW4gbWluaW1pemUgdGhlIHJlZmxvdy5cbiAgICAgIFZOb2RlSm91cm5hbE9wQ29kZS5Ib2lzdFN0eWxlcyxcbiAgICAgIGVsZW1lbnQub3duZXJEb2N1bWVudCxcbiAgICBdO1xuICAgIHRoaXMuZG9jdW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgYXMgUURvY3VtZW50O1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy4kYnVpbGRCYXNlJCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFFCYXNlQXR0cikhO1xuICAgIHRoaXMuJGluc3RhbmNlSGFzaCQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShRSW5zdGFuY2VBdHRyKSE7XG4gICAgdGhpcy5xTWFuaWZlc3RIYXNoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoUU1hbmlmZXN0SGFzaEF0dHIpITtcbiAgICB0aGlzLnJvb3RWTm9kZSA9IHZub2RlX25ld1VuTWF0ZXJpYWxpemVkRWxlbWVudCh0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMuJHJhd1N0YXRlRGF0YSQgPSBbXTtcbiAgICB0aGlzLiRzdGF0ZURhdGEkID0gW107XG4gICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudCBhcyBRRG9jdW1lbnQ7XG4gICAgaWYgKCFkb2N1bWVudC5xVk5vZGVEYXRhKSB7XG4gICAgICBwcm9jZXNzVk5vZGVEYXRhKGRvY3VtZW50KTtcbiAgICB9XG4gICAgdGhpcy4kcUZ1bmNzJCA9IGdldFFGdW5jcyhkb2N1bWVudCwgdGhpcy4kaW5zdGFuY2VIYXNoJCkgfHwgRU1QVFlfQVJSQVk7XG4gICAgdGhpcy4kc2V0U2VydmVyRGF0YSQoKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShRQ29udGFpbmVyQXR0ciwgUUNvbnRhaW5lclZhbHVlLlJFU1VNRUQpO1xuICAgIGVsZW1lbnQucUNvbnRhaW5lciA9IHRoaXM7XG5cbiAgICBjb25zdCBxd2lrU3RhdGVzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbdHlwZT1cInF3aWsvc3RhdGVcIl0nKTtcbiAgICBpZiAocXdpa1N0YXRlcy5sZW5ndGggIT09IDApIHtcbiAgICAgIGNvbnN0IGxhc3RTdGF0ZSA9IHF3aWtTdGF0ZXNbcXdpa1N0YXRlcy5sZW5ndGggLSAxXTtcbiAgICAgIHRoaXMuJHJhd1N0YXRlRGF0YSQgPSBKU09OLnBhcnNlKGxhc3RTdGF0ZS50ZXh0Q29udGVudCEpO1xuICAgICAgdGhpcy4kc3RhdGVEYXRhJCA9IHdyYXBEZXNlcmlhbGl6ZXJQcm94eSh0aGlzLCB0aGlzLiRyYXdTdGF0ZURhdGEkKSBhcyB1bmtub3duW107XG4gICAgfVxuICB9XG5cbiAgJHNldFJhd1N0YXRlJChpZDogbnVtYmVyLCB2UGFyZW50OiBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUpOiB2b2lkIHtcbiAgICB0aGlzLiRzdGF0ZURhdGEkW2lkXSA9IHZQYXJlbnQ7XG4gIH1cblxuICBwYXJzZVFSTDxUID0gdW5rbm93bj4ocXJsOiBzdHJpbmcpOiBRUkw8VD4ge1xuICAgIHJldHVybiBpbmZsYXRlUVJMKHRoaXMsIHBhcnNlUVJMKHFybCkpIGFzIFFSTDxUPjtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKGVycjogYW55LCBob3N0OiBIb3N0RWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChxRGV2ICYmIGhvc3QpIHtcbiAgICAgIC8vIENsZWFuIHZkb21cbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnN0IHZIb3N0ID0gaG9zdCBhcyBWaXJ0dWFsVk5vZGU7XG4gICAgICAgIGNvbnN0IGVycm9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZXJyb3JlZC1ob3N0Jyk7XG4gICAgICAgIGlmIChlcnIgJiYgZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAoZXJyb3JEaXYgYXMgYW55KS5wcm9wcyA9IHsgZXJyb3I6IGVyciB9O1xuICAgICAgICB9XG4gICAgICAgIGVycm9yRGl2LnNldEF0dHJpYnV0ZSgncTprZXknLCAnX2Vycm9yXycpO1xuICAgICAgICBjb25zdCBqb3VybmFsOiBWTm9kZUpvdXJuYWwgPSBbXTtcblxuICAgICAgICBjb25zdCB2RXJyb3JEaXYgPSB2bm9kZV9uZXdFbGVtZW50KGVycm9yRGl2LCAnZXJyb3JlZC1ob3N0Jyk7XG5cbiAgICAgICAgdm5vZGVfZ2V0RE9NQ2hpbGROb2Rlcyhqb3VybmFsLCB2SG9zdCwgdHJ1ZSkuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICB2bm9kZV9pbnNlcnRCZWZvcmUoam91cm5hbCwgdkVycm9yRGl2LCBjaGlsZCwgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2bm9kZV9pbnNlcnRCZWZvcmUoam91cm5hbCwgdkhvc3QsIHZFcnJvckRpdiwgbnVsbCk7XG4gICAgICAgIHZub2RlX2FwcGx5Sm91cm5hbChqb3VybmFsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVyciAmJiBlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoISgnaG9zdEVsZW1lbnQnIGluIGVycikpIHtcbiAgICAgICAgICAoZXJyIGFzIGFueSlbJ2hvc3RFbGVtZW50J10gPSBTdHJpbmcoaG9zdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghaXNSZWNvdmVyYWJsZShlcnIpKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZXJyb3JTdG9yZSA9IGhvc3QgJiYgdGhpcy5yZXNvbHZlQ29udGV4dChob3N0LCBFUlJPUl9DT05URVhUKTtcbiAgICBpZiAoIWVycm9yU3RvcmUpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgZXJyb3JTdG9yZS5lcnJvciA9IGVycjtcbiAgfVxuXG4gIHNldENvbnRleHQ8VD4oaG9zdDogSG9zdEVsZW1lbnQsIGNvbnRleHQ6IENvbnRleHRJZDxUPiwgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICBsZXQgY3R4ID0gdGhpcy5nZXRIb3N0UHJvcDxBcnJheTxzdHJpbmcgfCB1bmtub3duPj4oaG9zdCwgUUN0eEF0dHIpO1xuICAgIGlmICghY3R4KSB7XG4gICAgICB0aGlzLnNldEhvc3RQcm9wKGhvc3QsIFFDdHhBdHRyLCAoY3R4ID0gW10pKTtcbiAgICB9XG4gICAgbWFwQXJyYXlfc2V0KGN0eCwgY29udGV4dC5pZCwgdmFsdWUsIDApO1xuICB9XG5cbiAgcmVzb2x2ZUNvbnRleHQ8VD4oaG9zdDogSG9zdEVsZW1lbnQsIGNvbnRleHRJZDogQ29udGV4dElkPFQ+KTogVCB8IHVuZGVmaW5lZCB7XG4gICAgd2hpbGUgKGhvc3QpIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuZ2V0SG9zdFByb3A8QXJyYXk8c3RyaW5nIHwgdW5rbm93bj4+KGhvc3QsIFFDdHhBdHRyKTtcbiAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBtYXBBcnJheV9nZXQoY3R4LCBjb250ZXh0SWQuaWQsIDApIGFzIFQ7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZSBhcyBUO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBob3N0ID0gdGhpcy5nZXRQYXJlbnRIb3N0KGhvc3QpITtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFBhcmVudEhvc3QoaG9zdDogSG9zdEVsZW1lbnQpOiBIb3N0RWxlbWVudCB8IG51bGwge1xuICAgIGxldCB2Tm9kZSA9IHZub2RlX2dldFBhcmVudChob3N0IGFzIGFueSk7XG4gICAgd2hpbGUgKHZOb2RlKSB7XG4gICAgICBpZiAodm5vZGVfaXNWaXJ0dWFsVk5vZGUodk5vZGUpKSB7XG4gICAgICAgIGlmICh2bm9kZV9nZXRQcm9wKHZOb2RlLCBPblJlbmRlclByb3AsIG51bGwpICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHZOb2RlIGFzIGFueSBhcyBIb3N0RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICB2Tm9kZSA9XG4gICAgICAgICAgdm5vZGVfZ2V0UGFyZW50KHZOb2RlKSB8fFxuICAgICAgICAgIC8vIElmIHZpcnR1YWwgbm9kZSwgdGhhbiBpdCBjb3VsZCBiZSBhIHNsb3Qgc28gd2UgbmVlZCB0byByZWFkIGl0cyBwYXJlbnQuXG4gICAgICAgICAgdm5vZGVfZ2V0UHJvcDxWTm9kZT4odk5vZGUsIFFTbG90UGFyZW50LCB0aGlzLnZOb2RlTG9jYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZOb2RlID0gdm5vZGVfZ2V0UGFyZW50KHZOb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzZXRIb3N0UHJvcDxUPihob3N0OiBIb3N0RWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIGNvbnN0IHZOb2RlOiBWaXJ0dWFsVk5vZGUgPSBob3N0IGFzIGFueTtcbiAgICB2bm9kZV9zZXRQcm9wKHZOb2RlLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICBnZXRIb3N0UHJvcDxUPihob3N0OiBIb3N0RWxlbWVudCwgbmFtZTogc3RyaW5nKTogVCB8IG51bGwge1xuICAgIGNvbnN0IHZOb2RlOiBWaXJ0dWFsVk5vZGUgPSBob3N0IGFzIGFueTtcbiAgICBsZXQgZ2V0T2JqZWN0QnlJZDogKChpZDogc3RyaW5nKSA9PiBhbnkpIHwgbnVsbCA9IG51bGw7XG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlIEVMRU1FTlRfU0VROlxuICAgICAgY2FzZSBFTEVNRU5UX1BST1BTOlxuICAgICAgY2FzZSBPblJlbmRlclByb3A6XG4gICAgICBjYXNlIFFDdHhBdHRyOlxuICAgICAgY2FzZSBRQmFja1JlZnM6XG4gICAgICAgIGdldE9iamVjdEJ5SWQgPSB0aGlzLiRnZXRPYmplY3RCeUlkJDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVMRU1FTlRfU0VRX0lEWDpcbiAgICAgIGNhc2UgVVNFX09OX0xPQ0FMX1NFUV9JRFg6XG4gICAgICAgIGdldE9iamVjdEJ5SWQgPSBwYXJzZUludDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZV9nZXRQcm9wKHZOb2RlLCBuYW1lLCBnZXRPYmplY3RCeUlkKTtcbiAgfVxuXG4gIHNjaGVkdWxlUmVuZGVyKCkge1xuICAgIHRoaXMuJHJlbmRlckNvdW50JCsrO1xuICAgIHRoaXMucmVuZGVyRG9uZSB8fD0gZ2V0UGxhdGZvcm0oKS5uZXh0VGljaygoKSA9PiB0aGlzLnByb2Nlc3NDaG9yZXMoKSk7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyRG9uZS5maW5hbGx5KCgpID0+XG4gICAgICBlbWl0RXZlbnQoJ3FyZW5kZXInLCB7IGluc3RhbmNlSGFzaDogdGhpcy4kaW5zdGFuY2VIYXNoJCwgcmVuZGVyQ291bnQ6IHRoaXMuJHJlbmRlckNvdW50JCB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NDaG9yZXMoKSB7XG4gICAgbGV0IHJlbmRlckNvdW50ID0gdGhpcy4kcmVuZGVyQ291bnQkO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuJHNjaGVkdWxlciQoQ2hvcmVUeXBlLldBSVRfRk9SX0FMTCk7XG4gICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0LnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICB3aGlsZSAocmVuZGVyQ291bnQgIT09IHRoaXMuJHJlbmRlckNvdW50JCkge1xuICAgICAgICAgIHJlbmRlckNvdW50ID0gdGhpcy4kcmVuZGVyQ291bnQkO1xuICAgICAgICAgIGF3YWl0IHRoaXMuJHNjaGVkdWxlciQoQ2hvcmVUeXBlLldBSVRfRk9SX0FMTCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJEb25lID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocmVuZGVyQ291bnQgIT09IHRoaXMuJHJlbmRlckNvdW50JCkge1xuICAgICAgdGhpcy5wcm9jZXNzQ2hvcmVzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVuZGVyRG9uZSA9IG51bGw7XG4gIH1cblxuICBlbnN1cmVQcm9qZWN0aW9uUmVzb2x2ZWQodk5vZGU6IFZpcnR1YWxWTm9kZSk6IHZvaWQge1xuICAgIGlmICgodk5vZGVbVk5vZGVQcm9wcy5mbGFnc10gJiBWTm9kZUZsYWdzLlJlc29sdmVkKSA9PT0gMCkge1xuICAgICAgdk5vZGVbVk5vZGVQcm9wcy5mbGFnc10gfD0gVk5vZGVGbGFncy5SZXNvbHZlZDtcbiAgICAgIGNvbnN0IHByb3BzID0gdm5vZGVfZ2V0UHJvcHModk5vZGUpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkgPSBpICsgMikge1xuICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbaV0gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoaXNTbG90UHJvcChwcm9wKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHNbaSArIDFdO1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHByb3BzW2kgKyAxXSA9IHRoaXMudk5vZGVMb2NhdGUodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICRnZXRPYmplY3RCeUlkJCA9IChpZDogbnVtYmVyIHwgc3RyaW5nKTogdW5rbm93biA9PiB7XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlkID0gcGFyc2VGbG9hdChpZCk7XG4gICAgfVxuICAgIGFzc2VydFRydWUoXG4gICAgICBpZCA8IHRoaXMuJHJhd1N0YXRlRGF0YSQubGVuZ3RoIC8gMixcbiAgICAgIGBJbnZhbGlkIHJlZmVyZW5jZTogJHtpZH0gPj0gJHt0aGlzLiRyYXdTdGF0ZURhdGEkLmxlbmd0aCAvIDJ9YFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuJHN0YXRlRGF0YSRbaWRdO1xuICB9O1xuXG4gIGdldFN5bmNGbihpZDogbnVtYmVyKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biB7XG4gICAgY29uc3QgZm4gPSB0aGlzLiRxRnVuY3MkW2lkXTtcbiAgICBhc3NlcnRUcnVlKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJywgJ0ludmFsaWQgcmVmZXJlbmNlOiAnICsgaWQpO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gICRhcHBlbmRTdHlsZSQoY29udGVudDogc3RyaW5nLCBzdHlsZUlkOiBzdHJpbmcsIGhvc3Q6IFZpcnR1YWxWTm9kZSwgc2NvcGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHNjb3BlZCkge1xuICAgICAgY29uc3Qgc2NvcGVkU3R5bGVJZHNTdHJpbmcgPSB0aGlzLmdldEhvc3RQcm9wPHN0cmluZz4oaG9zdCwgUVNjb3BlZFN0eWxlKTtcbiAgICAgIGNvbnN0IHNjb3BlZFN0eWxlSWRzID0gbmV3IFNldChjb252ZXJ0U2NvcGVkU3R5bGVJZHNUb0FycmF5KHNjb3BlZFN0eWxlSWRzU3RyaW5nKSk7XG4gICAgICBzY29wZWRTdHlsZUlkcy5hZGQoc3R5bGVJZCk7XG4gICAgICB0aGlzLnNldEhvc3RQcm9wKGhvc3QsIFFTY29wZWRTdHlsZSwgY29udmVydFN0eWxlSWRzVG9TdHJpbmcoc2NvcGVkU3R5bGVJZHMpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy4kc3R5bGVJZHMkID09IG51bGwpIHtcbiAgICAgIHRoaXMuJHN0eWxlSWRzJCA9IG5ldyBTZXQoKTtcbiAgICAgIHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFFTdHlsZVNlbGVjdG9yKS5mb3JFYWNoKChzdHlsZSkgPT4ge1xuICAgICAgICB0aGlzLiRzdHlsZUlkcyQhLmFkZChzdHlsZS5nZXRBdHRyaWJ1dGUoUVN0eWxlKSEpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghdGhpcy4kc3R5bGVJZHMkLmhhcyhzdHlsZUlkKSkge1xuICAgICAgdGhpcy4kc3R5bGVJZHMkLmFkZChzdHlsZUlkKTtcbiAgICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoUVN0eWxlLCBzdHlsZUlkKTtcbiAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICB0aGlzLiRqb3VybmFsJC5wdXNoKFZOb2RlSm91cm5hbE9wQ29kZS5JbnNlcnQsIHRoaXMuZG9jdW1lbnQuaGVhZCwgbnVsbCwgc3R5bGVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFF3aWsgUm91dGVyP1xuICAvKiogU2V0IHRoZSBzZXJ2ZXIgZGF0YSBmb3IgdGhlIFF3aWsgUm91dGVyLiAqL1xuICBwcml2YXRlICRzZXRTZXJ2ZXJEYXRhJCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXJBdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgY29uc3QgYXR0cnMgPSB0aGlzLmVsZW1lbnQuYXR0cmlidXRlcztcbiAgICBpZiAoYXR0cnMpIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhdHRycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgYXR0ciA9IGF0dHJzW2luZGV4XTtcbiAgICAgICAgaWYgKGF0dHIubmFtZSA9PT0gUV9QUk9QU19TRVBBUkFUT1IpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXJBdHRyaWJ1dGVzW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLiRzZXJ2ZXJEYXRhJCA9IHsgY29udGFpbmVyQXR0cmlidXRlcyB9O1xuICB9XG59XG4iXX0=","import { assertDefined } from '../shared/error/assert';\nimport { qError } from '../shared/error/error';\nimport { RenderEvent } from '../shared/utils/markers';\nimport { seal } from '../shared/utils/qdev';\nimport { isArray } from '../shared/utils/types';\nimport { setLocale } from './use-locale';\nimport { vnode_getNode, vnode_isElementVNode, vnode_isVNode, vnode_locate } from '../client/vnode';\nimport { _getQContainerElement, getDomContainer } from '../client/dom-container';\nimport { WrappedSignal, } from '../signal/signal';\nimport { getSubscriber } from '../signal/subscriber';\nlet _context;\n/** @public */\nexport const tryGetInvokeContext = () => {\n    if (!_context) {\n        const context = typeof document !== 'undefined' && document && document.__q_context__;\n        if (!context) {\n            return undefined;\n        }\n        if (isArray(context)) {\n            return (document.__q_context__ = newInvokeContextFromTuple(context));\n        }\n        return context;\n    }\n    return _context;\n};\nexport const getInvokeContext = () => {\n    const ctx = tryGetInvokeContext();\n    if (!ctx) {\n        throw qError(14 /* QError.useMethodOutsideContext */);\n    }\n    return ctx;\n};\nexport const useInvokeContext = () => {\n    const ctx = tryGetInvokeContext();\n    if (!ctx || ctx.$event$ !== RenderEvent) {\n        throw qError(20 /* QError.useInvokeContext */);\n    }\n    assertDefined(ctx.$hostElement$, `invoke: $hostElement$ must be defined`, ctx);\n    assertDefined(ctx.$effectSubscriber$, `invoke: $effectSubscriber$ must be defined`, ctx);\n    return ctx;\n};\nexport function useBindInvokeContext(fn) {\n    if (fn == null) {\n        return fn;\n    }\n    const ctx = getInvokeContext();\n    return function (...args) {\n        return (invokeApply).call(this, ctx, fn, args);\n    };\n}\n/** Call a function with the given InvokeContext and given arguments. */\nexport function invoke(context, fn, ...args) {\n    return invokeApply.call(this, context, fn, args);\n}\n/** Call a function with the given InvokeContext and array of arguments. */\nexport function invokeApply(context, fn, args) {\n    const previousContext = _context;\n    let returnValue;\n    try {\n        _context = context;\n        returnValue = fn.apply(this, args);\n    }\n    finally {\n        _context = previousContext;\n    }\n    return returnValue;\n}\nexport const newInvokeContextFromTuple = ([element, event, url]) => {\n    const domContainer = getDomContainer(element);\n    const hostElement = vnode_locate(domContainer.rootVNode, element);\n    const locale = domContainer.$locale$;\n    locale && setLocale(locale);\n    return newInvokeContext(locale, hostElement, element, event, url);\n};\n// TODO how about putting url and locale (and event/custom?) in to a \"static\" object\nexport const newInvokeContext = (locale, hostElement, element, event, url) => {\n    // ServerRequestEvent has .locale, but it's not always defined.\n    const $locale$ = locale || (typeof event === 'object' && event && 'locale' in event ? event.locale : undefined);\n    const ctx = {\n        $url$: url,\n        $i$: 0,\n        $hostElement$: hostElement,\n        $element$: element,\n        $event$: event,\n        $qrl$: undefined,\n        $effectSubscriber$: undefined,\n        $locale$,\n        $container$: undefined,\n    };\n    seal(ctx);\n    return ctx;\n};\n/**\n * Don't track listeners for this callback\n *\n * @public\n */\nexport const untrack = (fn) => {\n    return invoke(undefined, fn);\n};\nconst trackInvocation = /*#__PURE__*/ newInvokeContext(undefined, undefined, undefined, RenderEvent);\n/**\n * @param fn\n * @param subscriber\n * @param property `true` - subscriber is component `false` - subscriber is VNode `string` -\n *   subscriber is property\n * @param container\n * @param data - Additional subscription data\n * @returns\n */\nexport const trackSignal = (fn, subscriber, property, container, data) => {\n    const previousSubscriber = trackInvocation.$effectSubscriber$;\n    const previousContainer = trackInvocation.$container$;\n    try {\n        trackInvocation.$effectSubscriber$ = getSubscriber(subscriber, property, data);\n        trackInvocation.$container$ = container;\n        return invoke(trackInvocation, fn);\n    }\n    finally {\n        trackInvocation.$effectSubscriber$ = previousSubscriber;\n        trackInvocation.$container$ = previousContainer;\n    }\n};\nexport const trackSignalAndAssignHost = (value, host, property, container, data) => {\n    if (value instanceof WrappedSignal && value.$hostElement$ !== host && host) {\n        value.$hostElement$ = host;\n    }\n    return trackSignal(() => value.value, host, property, container, data);\n};\n/** @internal */\nexport const _getContextElement = () => {\n    const iCtx = tryGetInvokeContext();\n    if (iCtx) {\n        const hostElement = iCtx.$hostElement$;\n        let element = null;\n        if (hostElement != null) {\n            if (vnode_isVNode(hostElement)) {\n                if (vnode_isElementVNode(hostElement)) {\n                    element = vnode_getNode(hostElement);\n                }\n            }\n            else {\n                // isSSRnode\n                element = hostElement;\n            }\n        }\n        return element ?? iCtx.$qrl$?.$setContainer$(undefined);\n    }\n};\n/** @internal */\nexport const _getContextEvent = () => {\n    const iCtx = tryGetInvokeContext();\n    if (iCtx) {\n        return iCtx.$event$;\n    }\n};\n/** @internal */\nexport const _jsxBranch = (input) => {\n    return input;\n};\n/** @internal */\nexport const _waitUntilRendered = (elm) => {\n    const containerEl = _getQContainerElement(elm);\n    if (!containerEl) {\n        return Promise.resolve();\n    }\n    const container = containerEl.qContainer;\n    return container?.renderDone ?? Promise.resolve();\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNvcmUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdkQsT0FBTyxFQUFpQixXQUFXLEVBQTRCLE1BQU0seUJBQXlCLENBQUM7QUFDL0YsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRixPQUFPLEVBQ0wsYUFBYSxHQUlkLE1BQU0sa0JBQWtCLENBQUM7QUFHMUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBZ0RyRCxJQUFJLFFBQW1DLENBQUM7QUFFeEMsY0FBYztBQUNkLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEdBQThCLEVBQUU7SUFDakUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxPQUFPLEdBQUcsT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQ3RGLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FB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Q29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFF3aWtEb2N1bWVudCB9IGZyb20gJy4uL2RvY3VtZW50JztcbmltcG9ydCB7IGFzc2VydERlZmluZWQgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvYXNzZXJ0JztcbmltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Vycm9yJztcbmltcG9ydCB0eXBlIHsgUVJMSW50ZXJuYWwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC1jbGFzcyc7XG5pbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLnB1YmxpYyc7XG5pbXBvcnQgeyBDb21wdXRlZEV2ZW50LCBSZW5kZXJFdmVudCwgUmVzb3VyY2VFdmVudCwgVGFza0V2ZW50IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL21hcmtlcnMnO1xuaW1wb3J0IHsgc2VhbCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9xZGV2JztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgc2V0TG9jYWxlIH0gZnJvbSAnLi91c2UtbG9jYWxlJztcbmltcG9ydCB0eXBlIHsgQ29udGFpbmVyLCBIb3N0RWxlbWVudCB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyB2bm9kZV9nZXROb2RlLCB2bm9kZV9pc0VsZW1lbnRWTm9kZSwgdm5vZGVfaXNWTm9kZSwgdm5vZGVfbG9jYXRlIH0gZnJvbSAnLi4vY2xpZW50L3Zub2RlJztcbmltcG9ydCB7IF9nZXRRQ29udGFpbmVyRWxlbWVudCwgZ2V0RG9tQ29udGFpbmVyIH0gZnJvbSAnLi4vY2xpZW50L2RvbS1jb250YWluZXInO1xuaW1wb3J0IHsgdHlwZSBDb250YWluZXJFbGVtZW50IH0gZnJvbSAnLi4vY2xpZW50L3R5cGVzJztcbmltcG9ydCB7XG4gIFdyYXBwZWRTaWduYWwsXG4gIHR5cGUgU3Vic2NyaXB0aW9uRGF0YSxcbiAgdHlwZSBFZmZlY3RTdWJzY3JpcHRpb24sXG4gIHR5cGUgRWZmZWN0U3Vic2NyaXB0aW9uUHJvcCxcbn0gZnJvbSAnLi4vc2lnbmFsL3NpZ25hbCc7XG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gJy4uL3NpZ25hbC9zaWduYWwucHVibGljJztcbmltcG9ydCB0eXBlIHsgSVNzck5vZGUgfSBmcm9tICdwYWNrYWdlcy9xd2lrL3NyYy9zZXJ2ZXIvcXdpay10eXBlcyc7XG5pbXBvcnQgeyBnZXRTdWJzY3JpYmVyIH0gZnJvbSAnLi4vc2lnbmFsL3N1YnNjcmliZXInO1xuXG5kZWNsYXJlIGNvbnN0IGRvY3VtZW50OiBRd2lrRG9jdW1lbnQ7XG5cbi8vIFNpbXBsaWZpZWQgdmVyc2lvbiBvZiBgU2VydmVyUmVxdWVzdEV2ZW50YCBmcm9tIGBAcXdpay5kZXYvcm91dGVyYCBwYWNrYWdlLlxuZXhwb3J0IGludGVyZmFjZSBTaW1wbGlmaWVkU2VydmVyUmVxdWVzdEV2ZW50PFQgPSB1bmtub3duPiB7XG4gIHVybDogVVJMO1xuICBsb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbn1cblxuZXhwb3J0IHR5cGUgUG9zc2libGVFdmVudHMgPVxuICB8IEV2ZW50XG4gIHwgU2ltcGxpZmllZFNlcnZlclJlcXVlc3RFdmVudFxuICB8IHR5cGVvZiBUYXNrRXZlbnRcbiAgfCB0eXBlb2YgUmVuZGVyRXZlbnRcbiAgfCB0eXBlb2YgQ29tcHV0ZWRFdmVudFxuICB8IHR5cGVvZiBSZXNvdXJjZUV2ZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlckludm9rZUNvbnRleHQgZXh0ZW5kcyBJbnZva2VDb250ZXh0IHtcbiAgLy8gVGhlIGJlbG93IGFyZSBqdXN0IGFsd2F5cy1kZWZpbmVkIGF0dHJpYnV0ZXMgb2YgSW52b2tlQ29udGV4dC5cbiAgJGhvc3RFbGVtZW50JDogSG9zdEVsZW1lbnQ7XG4gICRldmVudCQ6IFBvc3NpYmxlRXZlbnRzO1xuICAkd2FpdE9uJDogUHJvbWlzZTx1bmtub3duPltdO1xuICAkY29udGFpbmVyJDogQ29udGFpbmVyO1xufVxuXG5leHBvcnQgdHlwZSBJbnZva2VUdXBsZSA9IFtFbGVtZW50LCBFdmVudCwgVVJMP107XG5cbi8qKiBUaGUgc2hhcmVkIHN0YXRlIGR1cmluZyBhbiBpbnZva2UoKSBjYWxsICovXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZUNvbnRleHQge1xuICAvKiBUaGUgVVJMIG9mIHRoZSBRUkwgKi9cbiAgJHVybCQ6IFVSTCB8IHVuZGVmaW5lZDtcbiAgLyoqIFRoZSBuZXh0IGF2YWlsYWJsZSBpbmRleCBmb3IgdGhlIHNlcXVlbnRpYWxTY29wZSBhcnJheSAqL1xuICAkaSQ6IG51bWJlcjtcbiAgLyoqIFRoZSBWaXJ0dWFsIHBhcmVudCBjb21wb25lbnQgZm9yIHRoZSBjdXJyZW50IGNvbXBvbmVudCBjb2RlICovXG4gICRob3N0RWxlbWVudCQ6IEhvc3RFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAvKiogVGhlIGN1cnJlbnQgRE9NIGVsZW1lbnQgKi9cbiAgJGVsZW1lbnQkOiBFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAvKiogVGhlIGV2ZW50IHdlJ3JlIGN1cnJlbnRseSBoYW5kbGluZyAqL1xuICAkZXZlbnQkOiBQb3NzaWJsZUV2ZW50cyB8IHVuZGVmaW5lZDtcbiAgLyoqIFRoZSBRUkwgZnVuY3Rpb24gd2UncmUgY3VycmVudGx5IGV4ZWN1dGluZyAqL1xuICAkcXJsJDogUVJMIHwgdW5kZWZpbmVkO1xuICAkZWZmZWN0U3Vic2NyaWJlciQ6IEVmZmVjdFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgJGxvY2FsZSQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgJGNvbnRhaW5lciQ6IENvbnRhaW5lciB8IHVuZGVmaW5lZDtcbn1cblxubGV0IF9jb250ZXh0OiBJbnZva2VDb250ZXh0IHwgdW5kZWZpbmVkO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IHRyeUdldEludm9rZUNvbnRleHQgPSAoKTogSW52b2tlQ29udGV4dCB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghX2NvbnRleHQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5fX3FfY29udGV4dF9fO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkoY29udGV4dCkpIHtcbiAgICAgIHJldHVybiAoZG9jdW1lbnQuX19xX2NvbnRleHRfXyA9IG5ld0ludm9rZUNvbnRleHRGcm9tVHVwbGUoY29udGV4dCBhcyBJbnZva2VUdXBsZSkpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGV4dCBhcyBJbnZva2VDb250ZXh0O1xuICB9XG4gIHJldHVybiBfY29udGV4dDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbnZva2VDb250ZXh0ID0gKCk6IEludm9rZUNvbnRleHQgPT4ge1xuICBjb25zdCBjdHggPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gIGlmICghY3R4KSB7XG4gICAgdGhyb3cgcUVycm9yKFFFcnJvci51c2VNZXRob2RPdXRzaWRlQ29udGV4dCk7XG4gIH1cbiAgcmV0dXJuIGN0eDtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VJbnZva2VDb250ZXh0ID0gKCk6IFJlbmRlckludm9rZUNvbnRleHQgPT4ge1xuICBjb25zdCBjdHggPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gIGlmICghY3R4IHx8IGN0eC4kZXZlbnQkICE9PSBSZW5kZXJFdmVudCkge1xuICAgIHRocm93IHFFcnJvcihRRXJyb3IudXNlSW52b2tlQ29udGV4dCk7XG4gIH1cbiAgYXNzZXJ0RGVmaW5lZChjdHguJGhvc3RFbGVtZW50JCwgYGludm9rZTogJGhvc3RFbGVtZW50JCBtdXN0IGJlIGRlZmluZWRgLCBjdHgpO1xuICBhc3NlcnREZWZpbmVkKGN0eC4kZWZmZWN0U3Vic2NyaWJlciQsIGBpbnZva2U6ICRlZmZlY3RTdWJzY3JpYmVyJCBtdXN0IGJlIGRlZmluZWRgLCBjdHgpO1xuXG4gIHJldHVybiBjdHggYXMgUmVuZGVySW52b2tlQ29udGV4dDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VCaW5kSW52b2tlQ29udGV4dDxGTiBleHRlbmRzICguLi5hcmdzOiBhbnkpID0+IGFueT4oXG4gIHRoaXM6IHVua25vd24sXG4gIGZuOiBGTiB8IHVuZGVmaW5lZFxuKTogdHlwZW9mIGZuIHtcbiAgaWYgKGZuID09IG51bGwpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cbiAgY29uc3QgY3R4ID0gZ2V0SW52b2tlQ29udGV4dCgpO1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IHVua25vd24sIC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rk4+KSB7XG4gICAgcmV0dXJuIChpbnZva2VBcHBseTxGTj4pLmNhbGwodGhpcywgY3R4LCBmbiEsIGFyZ3MpO1xuICB9IGFzIEZOO1xufVxuXG4vKiogQ2FsbCBhIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIEludm9rZUNvbnRleHQgYW5kIGdpdmVuIGFyZ3VtZW50cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2U8Rk4gZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBhbnk+KFxuICB0aGlzOiB1bmtub3duLFxuICBjb250ZXh0OiBJbnZva2VDb250ZXh0IHwgdW5kZWZpbmVkLFxuICBmbjogRk4sXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rk4+XG4pOiBSZXR1cm5UeXBlPEZOPiB7XG4gIHJldHVybiBpbnZva2VBcHBseS5jYWxsKHRoaXMsIGNvbnRleHQsIGZuLCBhcmdzKTtcbn1cblxuLyoqIENhbGwgYSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBJbnZva2VDb250ZXh0IGFuZCBhcnJheSBvZiBhcmd1bWVudHMuICovXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlQXBwbHk8Rk4gZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBhbnk+KFxuICB0aGlzOiB1bmtub3duLFxuICBjb250ZXh0OiBJbnZva2VDb250ZXh0IHwgdW5kZWZpbmVkLFxuICBmbjogRk4sXG4gIGFyZ3M6IFBhcmFtZXRlcnM8Rk4+XG4pOiBSZXR1cm5UeXBlPEZOPiB7XG4gIGNvbnN0IHByZXZpb3VzQ29udGV4dCA9IF9jb250ZXh0O1xuICBsZXQgcmV0dXJuVmFsdWU6IFJldHVyblR5cGU8Rk4+O1xuICB0cnkge1xuICAgIF9jb250ZXh0ID0gY29udGV4dDtcbiAgICByZXR1cm5WYWx1ZSA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9IGZpbmFsbHkge1xuICAgIF9jb250ZXh0ID0gcHJldmlvdXNDb250ZXh0O1xuICB9XG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IG5ld0ludm9rZUNvbnRleHRGcm9tVHVwbGUgPSAoW2VsZW1lbnQsIGV2ZW50LCB1cmxdOiBJbnZva2VUdXBsZSkgPT4ge1xuICBjb25zdCBkb21Db250YWluZXIgPSBnZXREb21Db250YWluZXIoZWxlbWVudCk7XG4gIGNvbnN0IGhvc3RFbGVtZW50ID0gdm5vZGVfbG9jYXRlKGRvbUNvbnRhaW5lci5yb290Vk5vZGUsIGVsZW1lbnQpO1xuICBjb25zdCBsb2NhbGUgPSBkb21Db250YWluZXIuJGxvY2FsZSQ7XG4gIGxvY2FsZSAmJiBzZXRMb2NhbGUobG9jYWxlKTtcbiAgcmV0dXJuIG5ld0ludm9rZUNvbnRleHQobG9jYWxlLCBob3N0RWxlbWVudCwgZWxlbWVudCwgZXZlbnQsIHVybCk7XG59O1xuXG4vLyBUT0RPIGhvdyBhYm91dCBwdXR0aW5nIHVybCBhbmQgbG9jYWxlIChhbmQgZXZlbnQvY3VzdG9tPykgaW4gdG8gYSBcInN0YXRpY1wiIG9iamVjdFxuZXhwb3J0IGNvbnN0IG5ld0ludm9rZUNvbnRleHQgPSAoXG4gIGxvY2FsZT86IHN0cmluZyxcbiAgaG9zdEVsZW1lbnQ/OiBIb3N0RWxlbWVudCxcbiAgZWxlbWVudD86IEVsZW1lbnQsXG4gIGV2ZW50PzogUG9zc2libGVFdmVudHMsXG4gIHVybD86IFVSTFxuKTogSW52b2tlQ29udGV4dCA9PiB7XG4gIC8vIFNlcnZlclJlcXVlc3RFdmVudCBoYXMgLmxvY2FsZSwgYnV0IGl0J3Mgbm90IGFsd2F5cyBkZWZpbmVkLlxuICBjb25zdCAkbG9jYWxlJCA9XG4gICAgbG9jYWxlIHx8ICh0eXBlb2YgZXZlbnQgPT09ICdvYmplY3QnICYmIGV2ZW50ICYmICdsb2NhbGUnIGluIGV2ZW50ID8gZXZlbnQubG9jYWxlIDogdW5kZWZpbmVkKTtcbiAgY29uc3QgY3R4OiBJbnZva2VDb250ZXh0ID0ge1xuICAgICR1cmwkOiB1cmwsXG4gICAgJGkkOiAwLFxuICAgICRob3N0RWxlbWVudCQ6IGhvc3RFbGVtZW50LFxuICAgICRlbGVtZW50JDogZWxlbWVudCxcbiAgICAkZXZlbnQkOiBldmVudCxcbiAgICAkcXJsJDogdW5kZWZpbmVkLFxuICAgICRlZmZlY3RTdWJzY3JpYmVyJDogdW5kZWZpbmVkLFxuICAgICRsb2NhbGUkLFxuICAgICRjb250YWluZXIkOiB1bmRlZmluZWQsXG4gIH07XG4gIHNlYWwoY3R4KTtcbiAgcmV0dXJuIGN0eDtcbn07XG5cbi8qKlxuICogRG9uJ3QgdHJhY2sgbGlzdGVuZXJzIGZvciB0aGlzIGNhbGxiYWNrXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdW50cmFjayA9IDxUPihmbjogKCkgPT4gVCk6IFQgPT4ge1xuICByZXR1cm4gaW52b2tlKHVuZGVmaW5lZCwgZm4pO1xufTtcblxuY29uc3QgdHJhY2tJbnZvY2F0aW9uID0gLyojX19QVVJFX18qLyBuZXdJbnZva2VDb250ZXh0KFxuICB1bmRlZmluZWQsXG4gIHVuZGVmaW5lZCxcbiAgdW5kZWZpbmVkLFxuICBSZW5kZXJFdmVudFxuKTtcblxuLyoqXG4gKiBAcGFyYW0gZm5cbiAqIEBwYXJhbSBzdWJzY3JpYmVyXG4gKiBAcGFyYW0gcHJvcGVydHkgYHRydWVgIC0gc3Vic2NyaWJlciBpcyBjb21wb25lbnQgYGZhbHNlYCAtIHN1YnNjcmliZXIgaXMgVk5vZGUgYHN0cmluZ2AgLVxuICogICBzdWJzY3JpYmVyIGlzIHByb3BlcnR5XG4gKiBAcGFyYW0gY29udGFpbmVyXG4gKiBAcGFyYW0gZGF0YSAtIEFkZGl0aW9uYWwgc3Vic2NyaXB0aW9uIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB0cmFja1NpZ25hbCA9IDxUPihcbiAgZm46ICgpID0+IFQsXG4gIHN1YnNjcmliZXI6IEVmZmVjdFN1YnNjcmlwdGlvbltFZmZlY3RTdWJzY3JpcHRpb25Qcm9wLkNPTlNVTUVSXSxcbiAgcHJvcGVydHk6IEVmZmVjdFN1YnNjcmlwdGlvbltFZmZlY3RTdWJzY3JpcHRpb25Qcm9wLlBST1BFUlRZXSxcbiAgY29udGFpbmVyOiBDb250YWluZXIsXG4gIGRhdGE/OiBTdWJzY3JpcHRpb25EYXRhXG4pOiBUID0+IHtcbiAgY29uc3QgcHJldmlvdXNTdWJzY3JpYmVyID0gdHJhY2tJbnZvY2F0aW9uLiRlZmZlY3RTdWJzY3JpYmVyJDtcbiAgY29uc3QgcHJldmlvdXNDb250YWluZXIgPSB0cmFja0ludm9jYXRpb24uJGNvbnRhaW5lciQ7XG4gIHRyeSB7XG4gICAgdHJhY2tJbnZvY2F0aW9uLiRlZmZlY3RTdWJzY3JpYmVyJCA9IGdldFN1YnNjcmliZXIoc3Vic2NyaWJlciwgcHJvcGVydHksIGRhdGEpO1xuICAgIHRyYWNrSW52b2NhdGlvbi4kY29udGFpbmVyJCA9IGNvbnRhaW5lcjtcbiAgICByZXR1cm4gaW52b2tlKHRyYWNrSW52b2NhdGlvbiwgZm4pO1xuICB9IGZpbmFsbHkge1xuICAgIHRyYWNrSW52b2NhdGlvbi4kZWZmZWN0U3Vic2NyaWJlciQgPSBwcmV2aW91c1N1YnNjcmliZXI7XG4gICAgdHJhY2tJbnZvY2F0aW9uLiRjb250YWluZXIkID0gcHJldmlvdXNDb250YWluZXI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0cmFja1NpZ25hbEFuZEFzc2lnbkhvc3QgPSAoXG4gIHZhbHVlOiBTaWduYWwsXG4gIGhvc3Q6IEhvc3RFbGVtZW50LFxuICBwcm9wZXJ0eTogRWZmZWN0U3Vic2NyaXB0aW9uW0VmZmVjdFN1YnNjcmlwdGlvblByb3AuUFJPUEVSVFldLFxuICBjb250YWluZXI6IENvbnRhaW5lcixcbiAgZGF0YT86IFN1YnNjcmlwdGlvbkRhdGFcbikgPT4ge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBXcmFwcGVkU2lnbmFsICYmIHZhbHVlLiRob3N0RWxlbWVudCQgIT09IGhvc3QgJiYgaG9zdCkge1xuICAgIHZhbHVlLiRob3N0RWxlbWVudCQgPSBob3N0O1xuICB9XG4gIHJldHVybiB0cmFja1NpZ25hbCgoKSA9PiB2YWx1ZS52YWx1ZSwgaG9zdCwgcHJvcGVydHksIGNvbnRhaW5lciwgZGF0YSk7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX2dldENvbnRleHRFbGVtZW50ID0gKCk6IHVua25vd24gPT4ge1xuICBjb25zdCBpQ3R4ID0gdHJ5R2V0SW52b2tlQ29udGV4dCgpO1xuICBpZiAoaUN0eCkge1xuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gaUN0eC4kaG9zdEVsZW1lbnQkO1xuICAgIGxldCBlbGVtZW50OiBFbGVtZW50IHwgSVNzck5vZGUgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChob3N0RWxlbWVudCAhPSBudWxsKSB7XG4gICAgICBpZiAodm5vZGVfaXNWTm9kZShob3N0RWxlbWVudCkpIHtcbiAgICAgICAgaWYgKHZub2RlX2lzRWxlbWVudFZOb2RlKGhvc3RFbGVtZW50KSkge1xuICAgICAgICAgIGVsZW1lbnQgPSB2bm9kZV9nZXROb2RlKGhvc3RFbGVtZW50KSBhcyBFbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpc1NTUm5vZGVcbiAgICAgICAgZWxlbWVudCA9IGhvc3RFbGVtZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50ID8/IChpQ3R4LiRxcmwkIGFzIFFSTEludGVybmFsKT8uJHNldENvbnRhaW5lciQodW5kZWZpbmVkKTtcbiAgfVxufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9nZXRDb250ZXh0RXZlbnQgPSAoKTogdW5rbm93biA9PiB7XG4gIGNvbnN0IGlDdHggPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gIGlmIChpQ3R4KSB7XG4gICAgcmV0dXJuIGlDdHguJGV2ZW50JDtcbiAgfVxufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9qc3hCcmFuY2ggPSA8VD4oaW5wdXQ/OiBUKSA9PiB7XG4gIHJldHVybiBpbnB1dDtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBfd2FpdFVudGlsUmVuZGVyZWQgPSAoZWxtOiBFbGVtZW50KSA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lckVsID0gX2dldFFDb250YWluZXJFbGVtZW50KGVsbSk7XG4gIGlmICghY29udGFpbmVyRWwpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgY29uc3QgY29udGFpbmVyID0gKGNvbnRhaW5lckVsIGFzIENvbnRhaW5lckVsZW1lbnQpLnFDb250YWluZXI7XG4gIHJldHVybiBjb250YWluZXI/LnJlbmRlckRvbmUgPz8gUHJvbWlzZS5yZXNvbHZlKCk7XG59O1xuIl19","import { qError } from '../shared/error/error';\nimport { getInvokeContext } from '../use/use-core';\nimport { useLexicalScope } from '../use/use-lexical-scope.public';\nimport { getDomContainer } from './dom-container';\n/**\n * This is called by qwik-loader to schedule a QRL. It has to be synchronous.\n *\n * @internal\n */\nexport const queueQRL = (...args) => {\n    // This will already check container\n    const [runQrl] = useLexicalScope();\n    const context = getInvokeContext();\n    const hostElement = context.$hostElement$;\n    if (!hostElement) {\n        // silently ignore if there is no host element, the element might have been removed\n        return;\n    }\n    const container = getDomContainer(context.$element$);\n    const scheduler = container.$scheduler$;\n    if (!scheduler) {\n        throw qError(1 /* QError.schedulerNotFound */);\n    }\n    return scheduler(2 /* ChoreType.RUN_QRL */, hostElement, runQrl, args);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUtcXJsLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL2NsaWVudC9xdWV1ZS1xcmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBZSxFQUFFLEVBQUU7SUFDN0Msb0NBQW9DO0lBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxlQUFlLEVBQWtELENBQUM7SUFDbkYsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBRTFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixtRkFBbUY7UUFDbkYsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVUsQ0FBQyxDQUFDO0lBRXRELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUM7SUFDeEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxNQUFNLGtDQUEwQixDQUFDO0lBQ3pDLENBQUM7SUFFRCxPQUFPLFNBQVMsNEJBQW9CLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUUVycm9yLCBxRXJyb3IgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBRUkxJbnRlcm5hbCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB7IENob3JlVHlwZSB9IGZyb20gJy4uL3NoYXJlZC91dGlsLWNob3JlLXR5cGUnO1xuaW1wb3J0IHsgZ2V0SW52b2tlQ29udGV4dCB9IGZyb20gJy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyB1c2VMZXhpY2FsU2NvcGUgfSBmcm9tICcuLi91c2UvdXNlLWxleGljYWwtc2NvcGUucHVibGljJztcbmltcG9ydCB7IGdldERvbUNvbnRhaW5lciB9IGZyb20gJy4vZG9tLWNvbnRhaW5lcic7XG5cbi8qKlxuICogVGhpcyBpcyBjYWxsZWQgYnkgcXdpay1sb2FkZXIgdG8gc2NoZWR1bGUgYSBRUkwuIEl0IGhhcyB0byBiZSBzeW5jaHJvbm91cy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXVlUVJMID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAvLyBUaGlzIHdpbGwgYWxyZWFkeSBjaGVjayBjb250YWluZXJcbiAgY29uc3QgW3J1blFybF0gPSB1c2VMZXhpY2FsU2NvcGU8W1FSTEludGVybmFsPCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24+XT4oKTtcbiAgY29uc3QgY29udGV4dCA9IGdldEludm9rZUNvbnRleHQoKTtcbiAgY29uc3QgaG9zdEVsZW1lbnQgPSBjb250ZXh0LiRob3N0RWxlbWVudCQ7XG5cbiAgaWYgKCFob3N0RWxlbWVudCkge1xuICAgIC8vIHNpbGVudGx5IGlnbm9yZSBpZiB0aGVyZSBpcyBubyBob3N0IGVsZW1lbnQsIHRoZSBlbGVtZW50IG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyID0gZ2V0RG9tQ29udGFpbmVyKGNvbnRleHQuJGVsZW1lbnQkISk7XG5cbiAgY29uc3Qgc2NoZWR1bGVyID0gY29udGFpbmVyLiRzY2hlZHVsZXIkO1xuICBpZiAoIXNjaGVkdWxlcikge1xuICAgIHRocm93IHFFcnJvcihRRXJyb3Iuc2NoZWR1bGVyTm90Rm91bmQpO1xuICB9XG5cbiAgcmV0dXJuIHNjaGVkdWxlcihDaG9yZVR5cGUuUlVOX1FSTCwgaG9zdEVsZW1lbnQsIHJ1blFybCwgYXJncyk7XG59O1xuIl19","export function isAsyncGenerator(value) {\n    return !!value[Symbol.asyncIterator];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9hc3luYy1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWE7SUFDNUMsT0FBTyxDQUFDLENBQUUsS0FBd0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jR2VuZXJhdG9yKHZhbHVlOiBvYmplY3QpOiB2YWx1ZSBpcyBBc3luY0dlbmVyYXRvciB7XG4gIHJldHVybiAhISh2YWx1ZSBhcyBBc3luY0dlbmVyYXRvcilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO1xufVxuIl19","import { SERIALIZABLE_STATE } from '../shared/component.public';\nimport { ELEMENT_KEY, ELEMENT_PROPS, OnRenderProp } from '../shared/utils/markers';\nimport { executeComponent } from '../shared/component-execution';\nexport const applyInlineComponent = (ssr, componentHost, inlineComponentFunction, jsx) => {\n    const host = ssr.getLastNode();\n    return executeComponent(ssr, host, componentHost, inlineComponentFunction, jsx.props);\n};\nexport const applyQwikComponentBody = (ssr, jsx, component) => {\n    const host = ssr.getLastNode();\n    const [componentQrl] = component[SERIALIZABLE_STATE];\n    const srcProps = jsx.props;\n    if (srcProps && srcProps.children) {\n        delete srcProps.children;\n    }\n    const scheduler = ssr.$scheduler$;\n    host.setProp(OnRenderProp, componentQrl);\n    host.setProp(ELEMENT_PROPS, srcProps);\n    if (jsx.key !== null) {\n        host.setProp(ELEMENT_KEY, jsx.key);\n    }\n    return scheduler(6 /* ChoreType.COMPONENT */, host, componentQrl, srcProps);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLXJlbmRlci1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc3NyL3Nzci1yZW5kZXItY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBbUMsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUtqRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxHQUFpQixFQUNqQixhQUE4QixFQUM5Qix1QkFBd0MsRUFDeEMsR0FBWSxFQUNaLEVBQUU7SUFDRixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDL0IsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSx1QkFBdUIsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FDcEMsR0FBaUIsRUFDakIsR0FBWSxFQUNaLFNBQW9CLEVBQ08sRUFBRTtJQUM3QixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDL0IsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFJLFNBQWlCLENBQUMsa0JBQWtCLENBQW1DLENBQUM7SUFDaEcsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUMzQixJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEMsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELE9BQU8sU0FBUyw4QkFBc0IsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEpTWE5vZGUgfSBmcm9tICdAcXdpay5kZXYvY29yZSc7XG5pbXBvcnQgeyBTRVJJQUxJWkFCTEVfU1RBVEUsIHR5cGUgQ29tcG9uZW50LCB0eXBlIE9uUmVuZGVyRm4gfSBmcm9tICcuLi9zaGFyZWQvY29tcG9uZW50LnB1YmxpYyc7XG5pbXBvcnQgdHlwZSB7IFFSTEludGVybmFsIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHsgRUxFTUVOVF9LRVksIEVMRU1FTlRfUFJPUFMsIE9uUmVuZGVyUHJvcCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IHR5cGUgSVNzck5vZGUsIHR5cGUgU1NSQ29udGFpbmVyIH0gZnJvbSAnLi9zc3ItdHlwZXMnO1xuaW1wb3J0IHsgZXhlY3V0ZUNvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC9jb21wb25lbnQtZXhlY3V0aW9uJztcbmltcG9ydCB7IENob3JlVHlwZSB9IGZyb20gJy4uL3NoYXJlZC91dGlsLWNob3JlLXR5cGUnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZU9yUHJvbWlzZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEpTWE91dHB1dCB9IGZyb20gJy4uL3NoYXJlZC9qc3gvdHlwZXMvanN4LW5vZGUnO1xuXG5leHBvcnQgY29uc3QgYXBwbHlJbmxpbmVDb21wb25lbnQgPSAoXG4gIHNzcjogU1NSQ29udGFpbmVyLFxuICBjb21wb25lbnRIb3N0OiBJU3NyTm9kZSB8IG51bGwsXG4gIGlubGluZUNvbXBvbmVudEZ1bmN0aW9uOiBPblJlbmRlckZuPGFueT4sXG4gIGpzeDogSlNYTm9kZVxuKSA9PiB7XG4gIGNvbnN0IGhvc3QgPSBzc3IuZ2V0TGFzdE5vZGUoKTtcbiAgcmV0dXJuIGV4ZWN1dGVDb21wb25lbnQoc3NyLCBob3N0LCBjb21wb25lbnRIb3N0LCBpbmxpbmVDb21wb25lbnRGdW5jdGlvbiwganN4LnByb3BzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhcHBseVF3aWtDb21wb25lbnRCb2R5ID0gKFxuICBzc3I6IFNTUkNvbnRhaW5lcixcbiAganN4OiBKU1hOb2RlLFxuICBjb21wb25lbnQ6IENvbXBvbmVudFxuKTogVmFsdWVPclByb21pc2U8SlNYT3V0cHV0PiA9PiB7XG4gIGNvbnN0IGhvc3QgPSBzc3IuZ2V0TGFzdE5vZGUoKTtcbiAgY29uc3QgW2NvbXBvbmVudFFybF0gPSAoY29tcG9uZW50IGFzIGFueSlbU0VSSUFMSVpBQkxFX1NUQVRFXSBhcyBbUVJMSW50ZXJuYWw8T25SZW5kZXJGbjxhbnk+Pl07XG4gIGNvbnN0IHNyY1Byb3BzID0ganN4LnByb3BzO1xuICBpZiAoc3JjUHJvcHMgJiYgc3JjUHJvcHMuY2hpbGRyZW4pIHtcbiAgICBkZWxldGUgc3JjUHJvcHMuY2hpbGRyZW47XG4gIH1cbiAgY29uc3Qgc2NoZWR1bGVyID0gc3NyLiRzY2hlZHVsZXIkO1xuICBob3N0LnNldFByb3AoT25SZW5kZXJQcm9wLCBjb21wb25lbnRRcmwpO1xuICBob3N0LnNldFByb3AoRUxFTUVOVF9QUk9QUywgc3JjUHJvcHMpO1xuICBpZiAoanN4LmtleSAhPT0gbnVsbCkge1xuICAgIGhvc3Quc2V0UHJvcChFTEVNRU5UX0tFWSwganN4LmtleSk7XG4gIH1cbiAgcmV0dXJuIHNjaGVkdWxlcihDaG9yZVR5cGUuQ09NUE9ORU5ULCBob3N0LCBjb21wb25lbnRRcmwsIHNyY1Byb3BzKTtcbn07XG4iXX0=","import { isDev } from '@qwik.dev/core/build';\nimport { queueQRL } from '../client/queue-qrl';\nimport { isQwikComponent } from '../shared/component.public';\nimport { Fragment, directGetPropsProxyProp } from '../shared/jsx/jsx-runtime';\nimport { Slot } from '../shared/jsx/slot.public';\nimport { SSRComment, SSRRaw, SSRStream } from '../shared/jsx/utils.public';\nimport { createQRL } from '../shared/qrl/qrl-class';\nimport { qrlToString } from '../shared/shared-serialization';\nimport { DEBUG_TYPE } from '../shared/types';\nimport { isAsyncGenerator } from '../shared/utils/async-generator';\nimport { getEventNameFromJsxEvent, isJsxPropertyAnEventName, isPreventDefault, jsxEventToHtmlAttribute, } from '../shared/utils/event-names';\nimport { EMPTY_ARRAY } from '../shared/utils/flyweight';\nimport { getFileLocationFromJsx } from '../shared/utils/jsx-filename';\nimport { ELEMENT_KEY, FLUSH_COMMENT, QDefaultSlot, QScopedStyle, QSlot, QSlotParent, qwikInspectorAttr, } from '../shared/utils/markers';\nimport { isPromise } from '../shared/utils/promises';\nimport { qInspector } from '../shared/utils/qdev';\nimport { addComponentStylePrefix, isClassAttr } from '../shared/utils/scoped-styles';\nimport { serializeAttribute } from '../shared/utils/styles';\nimport { isFunction } from '../shared/utils/types';\nimport { WrappedSignal, isSignal } from '../signal/signal';\nimport { trackSignalAndAssignHost } from '../use/use-core';\nimport { applyInlineComponent, applyQwikComponentBody } from './ssr-render-component';\nimport { isQrl } from '../shared/qrl/qrl-utils';\nclass ParentComponentData {\n    $scopedStyle$;\n    $componentFrame$;\n    constructor($scopedStyle$, $componentFrame$) {\n        this.$scopedStyle$ = $scopedStyle$;\n        this.$componentFrame$ = $componentFrame$;\n    }\n}\n/** @internal */\nexport async function _walkJSX(ssr, value, options) {\n    const stack = [value];\n    const enqueue = (value) => stack.push(value);\n    const drain = async () => {\n        while (stack.length) {\n            const value = stack.pop();\n            if (value instanceof ParentComponentData) {\n                options.currentStyleScoped = value.$scopedStyle$;\n                options.parentComponentFrame = value.$componentFrame$;\n                continue;\n            }\n            else if (typeof value === 'function') {\n                if (value === Promise) {\n                    stack.push(await stack.pop());\n                    continue;\n                }\n                await value.apply(ssr);\n                continue;\n            }\n            processJSXNode(ssr, enqueue, value, {\n                styleScoped: options.currentStyleScoped,\n                parentComponentFrame: options.parentComponentFrame,\n            });\n        }\n    };\n    await drain();\n}\nfunction processJSXNode(ssr, enqueue, value, options) {\n    // console.log('processJSXNode', value);\n    if (value === null || value === undefined) {\n        ssr.textNode('');\n    }\n    else if (typeof value === 'boolean') {\n        ssr.textNode('');\n    }\n    else if (typeof value === 'number') {\n        ssr.textNode(String(value));\n    }\n    else if (typeof value === 'string') {\n        ssr.textNode(value);\n    }\n    else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n            for (let i = value.length - 1; i >= 0; i--) {\n                enqueue(value[i]);\n            }\n        }\n        else if (isSignal(value)) {\n            ssr.openFragment(isDev ? [DEBUG_TYPE, \"S\" /* VirtualType.WrappedSignal */] : EMPTY_ARRAY);\n            const signalNode = ssr.getLastNode();\n            enqueue(ssr.closeFragment);\n            enqueue(trackSignalAndAssignHost(value, signalNode, \".\" /* EffectProperty.VNODE */, ssr));\n        }\n        else if (isPromise(value)) {\n            ssr.openFragment(isDev ? [DEBUG_TYPE, \"A\" /* VirtualType.Awaited */] : EMPTY_ARRAY);\n            enqueue(ssr.closeFragment);\n            enqueue(value);\n            enqueue(Promise);\n            enqueue(() => ssr.commentNode(FLUSH_COMMENT));\n        }\n        else if (isAsyncGenerator(value)) {\n            enqueue(async () => {\n                for await (const chunk of value) {\n                    await _walkJSX(ssr, chunk, {\n                        currentStyleScoped: options.styleScoped,\n                        parentComponentFrame: options.parentComponentFrame,\n                    });\n                    ssr.commentNode(FLUSH_COMMENT);\n                }\n            });\n        }\n        else {\n            const jsx = value;\n            const type = jsx.type;\n            // Below, JSXChildren allows functions and regexes, but we assume the dev only uses those as appropriate.\n            if (typeof type === 'string') {\n                appendClassIfScopedStyleExists(jsx, options.styleScoped);\n                let qwikInspectorAttrValue = null;\n                if (isDev && jsx.dev && jsx.type !== 'head') {\n                    qwikInspectorAttrValue = getFileLocationFromJsx(jsx.dev);\n                    if (qInspector) {\n                        appendQwikInspectorAttribute(jsx, qwikInspectorAttrValue);\n                    }\n                }\n                const innerHTML = ssr.openElement(type, varPropsToSsrAttrs(jsx.varProps, jsx.constProps, ssr.serializationCtx, options.styleScoped, jsx.key), constPropsToSsrAttrs(jsx.constProps, jsx.varProps, ssr.serializationCtx, options.styleScoped), qwikInspectorAttrValue);\n                if (innerHTML) {\n                    ssr.htmlNode(innerHTML);\n                }\n                enqueue(ssr.closeElement);\n                if (type === 'head') {\n                    enqueue(ssr.additionalHeadNodes);\n                    enqueue(ssr.emitQwikLoaderAtTopIfNeeded);\n                }\n                else if (type === 'body') {\n                    enqueue(ssr.additionalBodyNodes);\n                }\n                const children = jsx.children;\n                children != null && enqueue(children);\n            }\n            else if (isFunction(type)) {\n                if (type === Fragment) {\n                    let attrs = jsx.key != null ? [ELEMENT_KEY, jsx.key] : EMPTY_ARRAY;\n                    if (isDev) {\n                        attrs = [DEBUG_TYPE, \"F\" /* VirtualType.Fragment */, ...attrs]; // Add debug info.\n                    }\n                    ssr.openFragment(attrs);\n                    ssr.addCurrentElementFrameAsComponentChild();\n                    enqueue(ssr.closeFragment);\n                    // In theory we could get functions or regexes, but we assume all is well\n                    const children = jsx.children;\n                    children != null && enqueue(children);\n                }\n                else if (type === Slot) {\n                    const componentFrame = options.parentComponentFrame || ssr.unclaimedProjectionComponentFrameQueue.shift();\n                    if (componentFrame) {\n                        const compId = componentFrame.componentNode.id || '';\n                        const projectionAttrs = isDev ? [DEBUG_TYPE, \"P\" /* VirtualType.Projection */] : [];\n                        projectionAttrs.push(QSlotParent, compId);\n                        ssr.openProjection(projectionAttrs);\n                        const host = componentFrame.componentNode;\n                        const node = ssr.getLastNode();\n                        const slotName = getSlotName(host, jsx, ssr);\n                        projectionAttrs.push(QSlot, slotName);\n                        enqueue(new ParentComponentData(options.styleScoped, options.parentComponentFrame));\n                        enqueue(ssr.closeProjection);\n                        const slotDefaultChildren = jsx.children || null;\n                        const slotChildren = componentFrame.consumeChildrenForSlot(node, slotName) || slotDefaultChildren;\n                        if (slotDefaultChildren && slotChildren !== slotDefaultChildren) {\n                            ssr.addUnclaimedProjection(componentFrame, QDefaultSlot, slotDefaultChildren);\n                        }\n                        enqueue(slotChildren);\n                        enqueue(new ParentComponentData(componentFrame.projectionScopedStyle, componentFrame.projectionComponentFrame));\n                    }\n                    else {\n                        // Even thought we are not projecting we still need to leave a marker for the slot.\n                        ssr.openFragment(isDev ? [DEBUG_TYPE, \"P\" /* VirtualType.Projection */] : EMPTY_ARRAY);\n                        ssr.closeFragment();\n                    }\n                }\n                else if (type === SSRComment) {\n                    ssr.commentNode(directGetPropsProxyProp(jsx, 'data') || '');\n                }\n                else if (type === SSRStream) {\n                    ssr.commentNode(FLUSH_COMMENT);\n                    const generator = jsx.children;\n                    let value;\n                    if (isFunction(generator)) {\n                        value = generator({\n                            async write(chunk) {\n                                await _walkJSX(ssr, chunk, {\n                                    currentStyleScoped: options.styleScoped,\n                                    parentComponentFrame: options.parentComponentFrame,\n                                });\n                                ssr.commentNode(FLUSH_COMMENT);\n                            },\n                        });\n                    }\n                    else {\n                        value = generator;\n                    }\n                    enqueue(value);\n                    isPromise(value) && enqueue(Promise);\n                }\n                else if (type === SSRRaw) {\n                    ssr.htmlNode(directGetPropsProxyProp(jsx, 'data'));\n                }\n                else if (isQwikComponent(type)) {\n                    // prod: use new instance of an array for props, we always modify props for a component\n                    ssr.openComponent(isDev ? [DEBUG_TYPE, \"C\" /* VirtualType.Component */] : []);\n                    const host = ssr.getLastNode();\n                    const componentFrame = ssr.getParentComponentFrame();\n                    componentFrame.distributeChildrenIntoSlots(jsx.children, options.styleScoped, options.parentComponentFrame);\n                    const jsxOutput = applyQwikComponentBody(ssr, jsx, type);\n                    const compStyleComponentId = addComponentStylePrefix(host.getProp(QScopedStyle));\n                    enqueue(new ParentComponentData(options.styleScoped, options.parentComponentFrame));\n                    enqueue(ssr.closeComponent);\n                    enqueue(jsxOutput);\n                    isPromise(jsxOutput) && enqueue(Promise);\n                    enqueue(new ParentComponentData(compStyleComponentId, componentFrame));\n                }\n                else {\n                    const inlineComponentProps = [ELEMENT_KEY, jsx.key];\n                    ssr.openFragment(isDev\n                        ? [DEBUG_TYPE, \"I\" /* VirtualType.InlineComponent */, ...inlineComponentProps]\n                        : inlineComponentProps);\n                    enqueue(ssr.closeFragment);\n                    const component = ssr.getComponentFrame(0);\n                    const jsxOutput = applyInlineComponent(ssr, component && component.componentNode, type, jsx);\n                    enqueue(jsxOutput);\n                    isPromise(jsxOutput) && enqueue(Promise);\n                }\n            }\n        }\n    }\n}\nexport function varPropsToSsrAttrs(varProps, constProps, serializationCtx, styleScopedId, key) {\n    return toSsrAttrs(varProps, constProps, serializationCtx, true, styleScopedId, key);\n}\nexport function constPropsToSsrAttrs(constProps, varProps, serializationCtx, styleScopedId) {\n    return toSsrAttrs(constProps, varProps, serializationCtx, false, styleScopedId);\n}\nexport function toSsrAttrs(record, anotherRecord, serializationCtx, pushMergedEventProps, styleScopedId, key) {\n    if (record == null) {\n        return null;\n    }\n    const ssrAttrs = [];\n    for (const key in record) {\n        let value = record[key];\n        if (isJsxPropertyAnEventName(key)) {\n            if (anotherRecord) {\n                /**\n                 * If we have two sources of the same event like this:\n                 *\n                 * ```tsx\n                 * const Counter = component$((props: { initial: number }) => {\n                 *  const count = useSignal(props.initial);\n                 *  useOnWindow(\n                 *    'dblclick',\n                 *    $(() => count.value++)\n                 *  );\n                 *  return <button window:onDblClick$={() => count.value++}>Count: {count.value}!</button>;\n                 * });\n                 * ```\n                 *\n                 * Then we can end with the const and var props with the same (doubled) event. We process\n                 * the const and var props separately, so:\n                 *\n                 * - For the var props we need to merge them into the one value (array)\n                 * - For the const props we need to just skip, because we will handle this in the var props\n                 */\n                const anotherValue = getEventProp(anotherRecord, key);\n                if (anotherValue) {\n                    if (pushMergedEventProps) {\n                        // merge values from the const props with the var props\n                        value = getMergedEventPropValues(value, anotherValue);\n                    }\n                    else {\n                        continue;\n                    }\n                }\n            }\n            const eventValue = setEvent(serializationCtx, key, value);\n            if (eventValue) {\n                ssrAttrs.push(jsxEventToHtmlAttribute(key), eventValue);\n            }\n            continue;\n        }\n        if (isSignal(value)) {\n            // write signal as is. We will track this signal inside `writeAttrs`\n            if (isClassAttr(key)) {\n                // additionally append styleScopedId for class attr\n                ssrAttrs.push(key, [value, styleScopedId]);\n            }\n            else {\n                ssrAttrs.push(key, value);\n            }\n            continue;\n        }\n        if (isPreventDefault(key)) {\n            addPreventDefaultEventToSerializationContext(serializationCtx, key);\n        }\n        value = serializeAttribute(key, value, styleScopedId);\n        ssrAttrs.push(key, value);\n    }\n    if (key != null) {\n        ssrAttrs.push(ELEMENT_KEY, key);\n    }\n    return ssrAttrs;\n}\nfunction getMergedEventPropValues(value, anotherValue) {\n    let mergedValue = value;\n    // merge values from the const props with the var props\n    if (Array.isArray(value) && Array.isArray(anotherValue)) {\n        // both values are arrays\n        mergedValue = value.concat(anotherValue);\n    }\n    else if (Array.isArray(mergedValue)) {\n        // only first value is array\n        mergedValue.push(anotherValue);\n    }\n    else if (Array.isArray(anotherValue)) {\n        // only second value is array\n        mergedValue = anotherValue;\n        mergedValue.push(value);\n    }\n    else {\n        // none of these values are array\n        mergedValue = [value, anotherValue];\n    }\n    return mergedValue;\n}\nfunction getEventProp(record, propKey) {\n    const eventProp = propKey.toLowerCase();\n    for (const prop in record) {\n        if (prop.toLowerCase() === eventProp) {\n            return record[prop];\n        }\n    }\n    return null;\n}\nfunction setEvent(serializationCtx, key, rawValue) {\n    let value = null;\n    const qrls = rawValue;\n    const appendToValue = (valueToAppend) => {\n        value = (value == null ? '' : value + '\\n') + valueToAppend;\n    };\n    const getQrlString = (qrl) => {\n        /**\n         * If there are captures we need to schedule so everything is executed in the right order + qrls\n         * are resolved.\n         *\n         * For internal qrls (starting with `_`) we assume that they do the right thing.\n         */\n        if (!qrl.$symbol$.startsWith('_') && (qrl.$captureRef$ || qrl.$capture$)) {\n            qrl = createQRL(null, '_run', queueQRL, null, null, [qrl]);\n        }\n        return qrlToString(serializationCtx, qrl);\n    };\n    if (Array.isArray(qrls)) {\n        for (let i = 0; i <= qrls.length; i++) {\n            const qrl = qrls[i];\n            if (isQrl(qrl)) {\n                appendToValue(getQrlString(qrl));\n                addQwikEventToSerializationContext(serializationCtx, key, qrl);\n            }\n            else if (qrl != null) {\n                // nested arrays etc.\n                const nestedValue = setEvent(serializationCtx, key, qrl);\n                if (nestedValue) {\n                    appendToValue(nestedValue);\n                }\n            }\n        }\n    }\n    else if (isQrl(qrls)) {\n        value = getQrlString(qrls);\n        addQwikEventToSerializationContext(serializationCtx, key, qrls);\n    }\n    return value;\n}\nfunction addQwikEventToSerializationContext(serializationCtx, key, qrl) {\n    const eventName = getEventNameFromJsxEvent(key);\n    if (eventName) {\n        serializationCtx.$eventNames$.add(eventName);\n        serializationCtx.$eventQrls$.add(qrl);\n    }\n}\nfunction addPreventDefaultEventToSerializationContext(serializationCtx, key) {\n    // skip first 15 chars, this is length of the `preventdefault:`\n    const eventName = key.substring(15);\n    if (eventName) {\n        serializationCtx.$eventNames$.add(eventName);\n    }\n}\nfunction getSlotName(host, jsx, ssr) {\n    const constProps = jsx.constProps;\n    if (constProps && typeof constProps == 'object' && 'name' in constProps) {\n        const constValue = constProps.name;\n        if (constValue instanceof WrappedSignal) {\n            return trackSignalAndAssignHost(constValue, host, \":\" /* EffectProperty.COMPONENT */, ssr);\n        }\n    }\n    return directGetPropsProxyProp(jsx, 'name') || QDefaultSlot;\n}\nfunction appendQwikInspectorAttribute(jsx, qwikInspectorAttrValue) {\n    if (qwikInspectorAttrValue && (!jsx.constProps || !(qwikInspectorAttr in jsx.constProps))) {\n        (jsx.constProps ||= {})[qwikInspectorAttr] = qwikInspectorAttrValue;\n    }\n}\n// append class attribute if styleScopedId exists and there is no class attribute\nfunction appendClassIfScopedStyleExists(jsx, styleScoped) {\n    const classAttributeExists = directGetPropsProxyProp(jsx, 'class') != null;\n    if (!classAttributeExists && styleScoped) {\n        if (!jsx.constProps) {\n            jsx.constProps = {};\n        }\n        jsx.constProps['class'] = '';\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLXJlbmRlci1qc3guanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc3NyL3Nzci1yZW5kZXItanN4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUEwQixNQUFNLDRCQUE0QixDQUFDO0FBQ25HLE9BQU8sRUFBRSxTQUFTLEVBQW9CLE1BQU0seUJBQXlCLENBQUM7QUFFdEUsT0FBTyxFQUFFLFdBQVcsRUFBNkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUNMLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixHQUN4QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsV0FBVyxFQUNYLGFBQWEsRUFDYixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxXQUFXLEVBQ1gsaUJBQWlCLEdBQ2xCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFF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dEYsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzNFLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGV2IH0gZnJvbSAnQHF3aWsuZGV2L2NvcmUvYnVpbGQnO1xuaW1wb3J0IHsgcXVldWVRUkwgfSBmcm9tICcuLi9jbGllbnQvcXVldWUtcXJsJztcbmltcG9ydCB7IGlzUXdpa0NvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC9jb21wb25lbnQucHVibGljJztcbmltcG9ydCB7IEZyYWdtZW50LCBkaXJlY3RHZXRQcm9wc1Byb3h5UHJvcCB9IGZyb20gJy4uL3NoYXJlZC9qc3gvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgU2xvdCB9IGZyb20gJy4uL3NoYXJlZC9qc3gvc2xvdC5wdWJsaWMnO1xuaW1wb3J0IHR5cGUgeyBKU1hOb2RlSW50ZXJuYWwsIEpTWE91dHB1dCB9IGZyb20gJy4uL3NoYXJlZC9qc3gvdHlwZXMvanN4LW5vZGUnO1xuaW1wb3J0IHR5cGUgeyBKU1hDaGlsZHJlbiB9IGZyb20gJy4uL3NoYXJlZC9qc3gvdHlwZXMvanN4LXF3aWstYXR0cmlidXRlcyc7XG5pbXBvcnQgeyBTU1JDb21tZW50LCBTU1JSYXcsIFNTUlN0cmVhbSwgdHlwZSBTU1JTdHJlYW1DaGlsZHJlbiB9IGZyb20gJy4uL3NoYXJlZC9qc3gvdXRpbHMucHVibGljJztcbmltcG9ydCB7IGNyZWF0ZVFSTCwgdHlwZSBRUkxJbnRlcm5hbCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB0eXBlIHsgUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwucHVibGljJztcbmltcG9ydCB7IHFybFRvU3RyaW5nLCB0eXBlIFNlcmlhbGl6YXRpb25Db250ZXh0IH0gZnJvbSAnLi4vc2hhcmVkL3NoYXJlZC1zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IERFQlVHX1RZUEUsIFZpcnR1YWxUeXBlIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IGlzQXN5bmNHZW5lcmF0b3IgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvYXN5bmMtZ2VuZXJhdG9yJztcbmltcG9ydCB7XG4gIGdldEV2ZW50TmFtZUZyb21Kc3hFdmVudCxcbiAgaXNKc3hQcm9wZXJ0eUFuRXZlbnROYW1lLFxuICBpc1ByZXZlbnREZWZhdWx0LFxuICBqc3hFdmVudFRvSHRtbEF0dHJpYnV0ZSxcbn0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2V2ZW50LW5hbWVzJztcbmltcG9ydCB7IEVNUFRZX0FSUkFZIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2ZseXdlaWdodCc7XG5pbXBvcnQgeyBnZXRGaWxlTG9jYXRpb25Gcm9tSnN4IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2pzeC1maWxlbmFtZSc7XG5pbXBvcnQge1xuICBFTEVNRU5UX0tFWSxcbiAgRkxVU0hfQ09NTUVOVCxcbiAgUURlZmF1bHRTbG90LFxuICBRU2NvcGVkU3R5bGUsXG4gIFFTbG90LFxuICBRU2xvdFBhcmVudCxcbiAgcXdpa0luc3BlY3RvckF0dHIsXG59IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9wcm9taXNlcyc7XG5pbXBvcnQgeyBxSW5zcGVjdG9yIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3FkZXYnO1xuaW1wb3J0IHsgYWRkQ29tcG9uZW50U3R5bGVQcmVmaXgsIGlzQ2xhc3NBdHRyIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3Njb3BlZC1zdHlsZXMnO1xuaW1wb3J0IHsgc2VyaWFsaXplQXR0cmlidXRlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3N0eWxlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCB0eXBlIFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IEVmZmVjdFByb3BlcnR5LCBXcmFwcGVkU2lnbmFsLCBpc1NpZ25hbCB9IGZyb20gJy4uL3NpZ25hbC9zaWduYWwnO1xuaW1wb3J0IHsgdHJhY2tTaWduYWxBbmRBc3NpZ25Ib3N0IH0gZnJvbSAnLi4vdXNlL3VzZS1jb3JlJztcbmltcG9ydCB7IGFwcGx5SW5saW5lQ29tcG9uZW50LCBhcHBseVF3aWtDb21wb25lbnRCb2R5IH0gZnJvbSAnLi9zc3ItcmVuZGVyLWNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7IElTc3JDb21wb25lbnRGcmFtZSwgSVNzck5vZGUsIFNTUkNvbnRhaW5lciwgU3NyQXR0cnMgfSBmcm9tICcuL3Nzci10eXBlcyc7XG5pbXBvcnQgeyBpc1FybCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLXV0aWxzJztcblxuY2xhc3MgUGFyZW50Q29tcG9uZW50RGF0YSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyAkc2NvcGVkU3R5bGUkOiBzdHJpbmcgfCBudWxsLFxuICAgIHB1YmxpYyAkY29tcG9uZW50RnJhbWUkOiBJU3NyQ29tcG9uZW50RnJhbWUgfCBudWxsXG4gICkge31cbn1cbnR5cGUgU3RhY2tGbiA9ICgpID0+IFZhbHVlT3JQcm9taXNlPHZvaWQ+O1xudHlwZSBTdGFja1ZhbHVlID0gVmFsdWVPclByb21pc2U8XG4gIEpTWE91dHB1dCB8IFN0YWNrRm4gfCBQcm9taXNlPEpTWE91dHB1dD4gfCB0eXBlb2YgUHJvbWlzZSB8IFBhcmVudENvbXBvbmVudERhdGEgfCBBc3luY0dlbmVyYXRvclxuPjtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF93YWxrSlNYKFxuICBzc3I6IFNTUkNvbnRhaW5lcixcbiAgdmFsdWU6IEpTWE91dHB1dCxcbiAgb3B0aW9uczoge1xuICAgIGN1cnJlbnRTdHlsZVNjb3BlZDogc3RyaW5nIHwgbnVsbDtcbiAgICBwYXJlbnRDb21wb25lbnRGcmFtZTogSVNzckNvbXBvbmVudEZyYW1lIHwgbnVsbDtcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN0YWNrOiBTdGFja1ZhbHVlW10gPSBbdmFsdWVdO1xuICBjb25zdCBlbnF1ZXVlID0gKHZhbHVlOiBTdGFja1ZhbHVlKSA9PiBzdGFjay5wdXNoKHZhbHVlKTtcbiAgY29uc3QgZHJhaW4gPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBzdGFjay5wb3AoKTtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFBhcmVudENvbXBvbmVudERhdGEpIHtcbiAgICAgICAgb3B0aW9ucy5jdXJyZW50U3R5bGVTY29wZWQgPSB2YWx1ZS4kc2NvcGVkU3R5bGUkO1xuICAgICAgICBvcHRpb25zLnBhcmVudENvbXBvbmVudEZyYW1lID0gdmFsdWUuJGNvbXBvbmVudEZyYW1lJDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAodmFsdWUgPT09IFByb21pc2UpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKGF3YWl0IChzdGFjay5wb3AoKSBhcyBQcm9taXNlPEpTWE91dHB1dD4pKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCAodmFsdWUgYXMgU3RhY2tGbikuYXBwbHkoc3NyKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBwcm9jZXNzSlNYTm9kZShzc3IsIGVucXVldWUsIHZhbHVlIGFzIEpTWE91dHB1dCwge1xuICAgICAgICBzdHlsZVNjb3BlZDogb3B0aW9ucy5jdXJyZW50U3R5bGVTY29wZWQsXG4gICAgICAgIHBhcmVudENvbXBvbmVudEZyYW1lOiBvcHRpb25zLnBhcmVudENvbXBvbmVudEZyYW1lLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBhd2FpdCBkcmFpbigpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzSlNYTm9kZShcbiAgc3NyOiBTU1JDb250YWluZXIsXG4gIGVucXVldWU6ICh2YWx1ZTogU3RhY2tWYWx1ZSkgPT4gdm9pZCxcbiAgdmFsdWU6IEpTWE91dHB1dCxcbiAgb3B0aW9uczoge1xuICAgIHN0eWxlU2NvcGVkOiBzdHJpbmcgfCBudWxsO1xuICAgIHBhcmVudENvbXBvbmVudEZyYW1lOiBJU3NyQ29tcG9uZW50RnJhbWUgfCBudWxsO1xuICB9XG4pIHtcbiAgLy8gY29uc29sZS5sb2coJ3Byb2Nlc3NKU1hOb2RlJywgdmFsdWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHNzci50ZXh0Tm9kZSgnJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICBzc3IudGV4dE5vZGUoJycpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICBzc3IudGV4dE5vZGUoU3RyaW5nKHZhbHVlKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHNzci50ZXh0Tm9kZSh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChsZXQgaSA9IHZhbHVlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGVucXVldWUodmFsdWVbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICBzc3Iub3BlbkZyYWdtZW50KGlzRGV2ID8gW0RFQlVHX1RZUEUsIFZpcnR1YWxUeXBlLldyYXBwZWRTaWduYWxdIDogRU1QVFlfQVJSQVkpO1xuICAgICAgY29uc3Qgc2lnbmFsTm9kZSA9IHNzci5nZXRMYXN0Tm9kZSgpO1xuICAgICAgZW5xdWV1ZShzc3IuY2xvc2VGcmFnbWVudCk7XG4gICAgICBlbnF1ZXVlKHRyYWNrU2lnbmFsQW5kQXNzaWduSG9zdCh2YWx1ZSwgc2lnbmFsTm9kZSwgRWZmZWN0UHJvcGVydHkuVk5PREUsIHNzcikpO1xuICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKHZhbHVlKSkge1xuICAgICAgc3NyLm9wZW5GcmFnbWVudChpc0RldiA/IFtERUJVR19UWVBFLCBWaXJ0dWFsVHlwZS5Bd2FpdGVkXSA6IEVNUFRZX0FSUkFZKTtcbiAgICAgIGVucXVldWUoc3NyLmNsb3NlRnJhZ21lbnQpO1xuICAgICAgZW5xdWV1ZSh2YWx1ZSk7XG4gICAgICBlbnF1ZXVlKFByb21pc2UpO1xuICAgICAgZW5xdWV1ZSgoKSA9PiBzc3IuY29tbWVudE5vZGUoRkxVU0hfQ09NTUVOVCkpO1xuICAgIH0gZWxzZSBpZiAoaXNBc3luY0dlbmVyYXRvcih2YWx1ZSkpIHtcbiAgICAgIGVucXVldWUoYXN5bmMgKCkgPT4ge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHZhbHVlKSB7XG4gICAgICAgICAgYXdhaXQgX3dhbGtKU1goc3NyLCBjaHVuayBhcyBKU1hPdXRwdXQsIHtcbiAgICAgICAgICAgIGN1cnJlbnRTdHlsZVNjb3BlZDogb3B0aW9ucy5zdHlsZVNjb3BlZCxcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudEZyYW1lOiBvcHRpb25zLnBhcmVudENvbXBvbmVudEZyYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNzci5jb21tZW50Tm9kZShGTFVTSF9DT01NRU5UKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGpzeCA9IHZhbHVlIGFzIEpTWE5vZGVJbnRlcm5hbDtcbiAgICAgIGNvbnN0IHR5cGUgPSBqc3gudHlwZTtcbiAgICAgIC8vIEJlbG93LCBKU1hDaGlsZHJlbiBhbGxvd3MgZnVuY3Rpb25zIGFuZCByZWdleGVzLCBidXQgd2UgYXNzdW1lIHRoZSBkZXYgb25seSB1c2VzIHRob3NlIGFzIGFwcHJvcHJpYXRlLlxuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICBhcHBlbmRDbGFzc0lmU2NvcGVkU3R5bGVFeGlzdHMoanN4LCBvcHRpb25zLnN0eWxlU2NvcGVkKTtcbiAgICAgICAgbGV0IHF3aWtJbnNwZWN0b3JBdHRyVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAoaXNEZXYgJiYganN4LmRldiAmJiBqc3gudHlwZSAhPT0gJ2hlYWQnKSB7XG4gICAgICAgICAgcXdpa0luc3BlY3RvckF0dHJWYWx1ZSA9IGdldEZpbGVMb2NhdGlvbkZyb21Kc3goanN4LmRldik7XG4gICAgICAgICAgaWYgKHFJbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGFwcGVuZFF3aWtJbnNwZWN0b3JBdHRyaWJ1dGUoanN4LCBxd2lrSW5zcGVjdG9yQXR0clZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbm5lckhUTUwgPSBzc3Iub3BlbkVsZW1lbnQoXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICB2YXJQcm9wc1RvU3NyQXR0cnMoXG4gICAgICAgICAgICBqc3gudmFyUHJvcHMsXG4gICAgICAgICAgICBqc3guY29uc3RQcm9wcyxcbiAgICAgICAgICAgIHNzci5zZXJpYWxpemF0aW9uQ3R4LFxuICAgICAgICAgICAgb3B0aW9ucy5zdHlsZVNjb3BlZCxcbiAgICAgICAgICAgIGpzeC5rZXlcbiAgICAgICAgICApLFxuICAgICAgICAgIGNvbnN0UHJvcHNUb1NzckF0dHJzKFxuICAgICAgICAgICAganN4LmNvbnN0UHJvcHMsXG4gICAgICAgICAgICBqc3gudmFyUHJvcHMsXG4gICAgICAgICAgICBzc3Iuc2VyaWFsaXphdGlvbkN0eCxcbiAgICAgICAgICAgIG9wdGlvbnMuc3R5bGVTY29wZWRcbiAgICAgICAgICApLFxuICAgICAgICAgIHF3aWtJbnNwZWN0b3JBdHRyVmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlubmVySFRNTCkge1xuICAgICAgICAgIHNzci5odG1sTm9kZShpbm5lckhUTUwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5xdWV1ZShzc3IuY2xvc2VFbGVtZW50KTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ2hlYWQnKSB7XG4gICAgICAgICAgZW5xdWV1ZShzc3IuYWRkaXRpb25hbEhlYWROb2Rlcyk7XG4gICAgICAgICAgZW5xdWV1ZShzc3IuZW1pdFF3aWtMb2FkZXJBdFRvcElmTmVlZGVkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9keScpIHtcbiAgICAgICAgICBlbnF1ZXVlKHNzci5hZGRpdGlvbmFsQm9keU5vZGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0ganN4LmNoaWxkcmVuIGFzIEpTWE91dHB1dDtcbiAgICAgICAgY2hpbGRyZW4gIT0gbnVsbCAmJiBlbnF1ZXVlKGNoaWxkcmVuKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0eXBlKSkge1xuICAgICAgICBpZiAodHlwZSA9PT0gRnJhZ21lbnQpIHtcbiAgICAgICAgICBsZXQgYXR0cnMgPSBqc3gua2V5ICE9IG51bGwgPyBbRUxFTUVOVF9LRVksIGpzeC5rZXldIDogRU1QVFlfQVJSQVk7XG4gICAgICAgICAgaWYgKGlzRGV2KSB7XG4gICAgICAgICAgICBhdHRycyA9IFtERUJVR19UWVBFLCBWaXJ0dWFsVHlwZS5GcmFnbWVudCwgLi4uYXR0cnNdOyAvLyBBZGQgZGVidWcgaW5mby5cbiAgICAgICAgICB9XG4gICAgICAgICAgc3NyLm9wZW5GcmFnbWVudChhdHRycyk7XG4gICAgICAgICAgc3NyLmFkZEN1cnJlbnRFbGVtZW50RnJhbWVBc0NvbXBvbmVudENoaWxkKCk7XG4gICAgICAgICAgZW5xdWV1ZShzc3IuY2xvc2VGcmFnbWVudCk7XG4gICAgICAgICAgLy8gSW4gdGhlb3J5IHdlIGNvdWxkIGdldCBmdW5jdGlvbnMgb3IgcmVnZXhlcywgYnV0IHdlIGFzc3VtZSBhbGwgaXMgd2VsbFxuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0ganN4LmNoaWxkcmVuIGFzIEpTWE91dHB1dDtcbiAgICAgICAgICBjaGlsZHJlbiAhPSBudWxsICYmIGVucXVldWUoY2hpbGRyZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNsb3QpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRGcmFtZSA9XG4gICAgICAgICAgICBvcHRpb25zLnBhcmVudENvbXBvbmVudEZyYW1lIHx8IHNzci51bmNsYWltZWRQcm9qZWN0aW9uQ29tcG9uZW50RnJhbWVRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgIGlmIChjb21wb25lbnRGcmFtZSkge1xuICAgICAgICAgICAgY29uc3QgY29tcElkID0gY29tcG9uZW50RnJhbWUuY29tcG9uZW50Tm9kZS5pZCB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHByb2plY3Rpb25BdHRycyA9IGlzRGV2ID8gW0RFQlVHX1RZUEUsIFZpcnR1YWxUeXBlLlByb2plY3Rpb25dIDogW107XG4gICAgICAgICAgICBwcm9qZWN0aW9uQXR0cnMucHVzaChRU2xvdFBhcmVudCwgY29tcElkKTtcbiAgICAgICAgICAgIHNzci5vcGVuUHJvamVjdGlvbihwcm9qZWN0aW9uQXR0cnMpO1xuICAgICAgICAgICAgY29uc3QgaG9zdCA9IGNvbXBvbmVudEZyYW1lLmNvbXBvbmVudE5vZGU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gc3NyLmdldExhc3ROb2RlKCk7XG4gICAgICAgICAgICBjb25zdCBzbG90TmFtZSA9IGdldFNsb3ROYW1lKGhvc3QsIGpzeCwgc3NyKTtcbiAgICAgICAgICAgIHByb2plY3Rpb25BdHRycy5wdXNoKFFTbG90LCBzbG90TmFtZSk7XG5cbiAgICAgICAgICAgIGVucXVldWUobmV3IFBhcmVudENvbXBvbmVudERhdGEob3B0aW9ucy5zdHlsZVNjb3BlZCwgb3B0aW9ucy5wYXJlbnRDb21wb25lbnRGcmFtZSkpO1xuICAgICAgICAgICAgZW5xdWV1ZShzc3IuY2xvc2VQcm9qZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IHNsb3REZWZhdWx0Q2hpbGRyZW46IEpTWENoaWxkcmVuIHwgbnVsbCA9IGpzeC5jaGlsZHJlbiB8fCBudWxsO1xuICAgICAgICAgICAgY29uc3Qgc2xvdENoaWxkcmVuID1cbiAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWUuY29uc3VtZUNoaWxkcmVuRm9yU2xvdChub2RlLCBzbG90TmFtZSkgfHwgc2xvdERlZmF1bHRDaGlsZHJlbjtcbiAgICAgICAgICAgIGlmIChzbG90RGVmYXVsdENoaWxkcmVuICYmIHNsb3RDaGlsZHJlbiAhPT0gc2xvdERlZmF1bHRDaGlsZHJlbikge1xuICAgICAgICAgICAgICBzc3IuYWRkVW5jbGFpbWVkUHJvamVjdGlvbihjb21wb25lbnRGcmFtZSwgUURlZmF1bHRTbG90LCBzbG90RGVmYXVsdENoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVucXVldWUoc2xvdENoaWxkcmVuIGFzIEpTWE91dHB1dCk7XG4gICAgICAgICAgICBlbnF1ZXVlKFxuICAgICAgICAgICAgICBuZXcgUGFyZW50Q29tcG9uZW50RGF0YShcbiAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZS5wcm9qZWN0aW9uU2NvcGVkU3R5bGUsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWUucHJvamVjdGlvbkNvbXBvbmVudEZyYW1lXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdodCB3ZSBhcmUgbm90IHByb2plY3Rpbmcgd2Ugc3RpbGwgbmVlZCB0byBsZWF2ZSBhIG1hcmtlciBmb3IgdGhlIHNsb3QuXG4gICAgICAgICAgICBzc3Iub3BlbkZyYWdtZW50KGlzRGV2ID8gW0RFQlVHX1RZUEUsIFZpcnR1YWxUeXBlLlByb2plY3Rpb25dIDogRU1QVFlfQVJSQVkpO1xuICAgICAgICAgICAgc3NyLmNsb3NlRnJhZ21lbnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gU1NSQ29tbWVudCkge1xuICAgICAgICAgIHNzci5jb21tZW50Tm9kZShkaXJlY3RHZXRQcm9wc1Byb3h5UHJvcChqc3gsICdkYXRhJykgfHwgJycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNTUlN0cmVhbSkge1xuICAgICAgICAgIHNzci5jb21tZW50Tm9kZShGTFVTSF9DT01NRU5UKTtcbiAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBqc3guY2hpbGRyZW4gYXMgU1NSU3RyZWFtQ2hpbGRyZW47XG4gICAgICAgICAgbGV0IHZhbHVlOiBBc3luY0dlbmVyYXRvciB8IFByb21pc2U8dm9pZD47XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZ2VuZXJhdG9yKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBnZW5lcmF0b3Ioe1xuICAgICAgICAgICAgICBhc3luYyB3cml0ZShjaHVuaykge1xuICAgICAgICAgICAgICAgIGF3YWl0IF93YWxrSlNYKHNzciwgY2h1bmsgYXMgSlNYT3V0cHV0LCB7XG4gICAgICAgICAgICAgICAgICBjdXJyZW50U3R5bGVTY29wZWQ6IG9wdGlvbnMuc3R5bGVTY29wZWQsXG4gICAgICAgICAgICAgICAgICBwYXJlbnRDb21wb25lbnRGcmFtZTogb3B0aW9ucy5wYXJlbnRDb21wb25lbnRGcmFtZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzc3IuY29tbWVudE5vZGUoRkxVU0hfQ09NTUVOVCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBnZW5lcmF0b3I7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW5xdWV1ZSh2YWx1ZSBhcyBTdGFja1ZhbHVlKTtcbiAgICAgICAgICBpc1Byb21pc2UodmFsdWUpICYmIGVucXVldWUoUHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gU1NSUmF3KSB7XG4gICAgICAgICAgc3NyLmh0bWxOb2RlKGRpcmVjdEdldFByb3BzUHJveHlQcm9wKGpzeCwgJ2RhdGEnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNRd2lrQ29tcG9uZW50KHR5cGUpKSB7XG4gICAgICAgICAgLy8gcHJvZDogdXNlIG5ldyBpbnN0YW5jZSBvZiBhbiBhcnJheSBmb3IgcHJvcHMsIHdlIGFsd2F5cyBtb2RpZnkgcHJvcHMgZm9yIGEgY29tcG9uZW50XG4gICAgICAgICAgc3NyLm9wZW5Db21wb25lbnQoaXNEZXYgPyBbREVCVUdfVFlQRSwgVmlydHVhbFR5cGUuQ29tcG9uZW50XSA6IFtdKTtcbiAgICAgICAgICBjb25zdCBob3N0ID0gc3NyLmdldExhc3ROb2RlKCk7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RnJhbWUgPSBzc3IuZ2V0UGFyZW50Q29tcG9uZW50RnJhbWUoKSE7XG4gICAgICAgICAgY29tcG9uZW50RnJhbWUhLmRpc3RyaWJ1dGVDaGlsZHJlbkludG9TbG90cyhcbiAgICAgICAgICAgIGpzeC5jaGlsZHJlbixcbiAgICAgICAgICAgIG9wdGlvbnMuc3R5bGVTY29wZWQsXG4gICAgICAgICAgICBvcHRpb25zLnBhcmVudENvbXBvbmVudEZyYW1lXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGpzeE91dHB1dCA9IGFwcGx5UXdpa0NvbXBvbmVudEJvZHkoc3NyLCBqc3gsIHR5cGUpO1xuICAgICAgICAgIGNvbnN0IGNvbXBTdHlsZUNvbXBvbmVudElkID0gYWRkQ29tcG9uZW50U3R5bGVQcmVmaXgoaG9zdC5nZXRQcm9wKFFTY29wZWRTdHlsZSkpO1xuICAgICAgICAgIGVucXVldWUobmV3IFBhcmVudENvbXBvbmVudERhdGEob3B0aW9ucy5zdHlsZVNjb3BlZCwgb3B0aW9ucy5wYXJlbnRDb21wb25lbnRGcmFtZSkpO1xuICAgICAgICAgIGVucXVldWUoc3NyLmNsb3NlQ29tcG9uZW50KTtcbiAgICAgICAgICBlbnF1ZXVlKGpzeE91dHB1dCk7XG4gICAgICAgICAgaXNQcm9taXNlKGpzeE91dHB1dCkgJiYgZW5xdWV1ZShQcm9taXNlKTtcbiAgICAgICAgICBlbnF1ZXVlKG5ldyBQYXJlbnRDb21wb25lbnREYXRhKGNvbXBTdHlsZUNvbXBvbmVudElkLCBjb21wb25lbnRGcmFtZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGlubGluZUNvbXBvbmVudFByb3BzID0gW0VMRU1FTlRfS0VZLCBqc3gua2V5XTtcbiAgICAgICAgICBzc3Iub3BlbkZyYWdtZW50KFxuICAgICAgICAgICAgaXNEZXZcbiAgICAgICAgICAgICAgPyBbREVCVUdfVFlQRSwgVmlydHVhbFR5cGUuSW5saW5lQ29tcG9uZW50LCAuLi5pbmxpbmVDb21wb25lbnRQcm9wc11cbiAgICAgICAgICAgICAgOiBpbmxpbmVDb21wb25lbnRQcm9wc1xuICAgICAgICAgICk7XG4gICAgICAgICAgZW5xdWV1ZShzc3IuY2xvc2VGcmFnbWVudCk7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gc3NyLmdldENvbXBvbmVudEZyYW1lKDApO1xuICAgICAgICAgIGNvbnN0IGpzeE91dHB1dCA9IGFwcGx5SW5saW5lQ29tcG9uZW50KFxuICAgICAgICAgICAgc3NyLFxuICAgICAgICAgICAgY29tcG9uZW50ICYmIGNvbXBvbmVudC5jb21wb25lbnROb2RlLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGpzeFxuICAgICAgICAgICk7XG4gICAgICAgICAgZW5xdWV1ZShqc3hPdXRwdXQpO1xuICAgICAgICAgIGlzUHJvbWlzZShqc3hPdXRwdXQpICYmIGVucXVldWUoUHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhclByb3BzVG9Tc3JBdHRycyhcbiAgdmFyUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjb25zdFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwsXG4gIHNlcmlhbGl6YXRpb25DdHg6IFNlcmlhbGl6YXRpb25Db250ZXh0LFxuICBzdHlsZVNjb3BlZElkOiBzdHJpbmcgfCBudWxsLFxuICBrZXk/OiBzdHJpbmcgfCBudWxsXG4pOiBTc3JBdHRycyB8IG51bGwge1xuICByZXR1cm4gdG9Tc3JBdHRycyh2YXJQcm9wcywgY29uc3RQcm9wcywgc2VyaWFsaXphdGlvbkN0eCwgdHJ1ZSwgc3R5bGVTY29wZWRJZCwga2V5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0UHJvcHNUb1NzckF0dHJzKFxuICBjb25zdFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwsXG4gIHZhclByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2VyaWFsaXphdGlvbkN0eDogU2VyaWFsaXphdGlvbkNvbnRleHQsXG4gIHN0eWxlU2NvcGVkSWQ6IHN0cmluZyB8IG51bGxcbik6IFNzckF0dHJzIHwgbnVsbCB7XG4gIHJldHVybiB0b1NzckF0dHJzKGNvbnN0UHJvcHMsIHZhclByb3BzLCBzZXJpYWxpemF0aW9uQ3R4LCBmYWxzZSwgc3R5bGVTY29wZWRJZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1NzckF0dHJzKFxuICByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhbm90aGVyUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2VyaWFsaXphdGlvbkN0eDogU2VyaWFsaXphdGlvbkNvbnRleHQsXG4gIHB1c2hNZXJnZWRFdmVudFByb3BzOiBib29sZWFuLFxuICBzdHlsZVNjb3BlZElkOiBzdHJpbmcgfCBudWxsLFxuICBrZXk/OiBzdHJpbmcgfCBudWxsXG4pOiBTc3JBdHRycztcbmV4cG9ydCBmdW5jdGlvbiB0b1NzckF0dHJzKFxuICByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgYW5vdGhlclJlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBzZXJpYWxpemF0aW9uQ3R4OiBTZXJpYWxpemF0aW9uQ29udGV4dCxcbiAgcHVzaE1lcmdlZEV2ZW50UHJvcHM6IGJvb2xlYW4sXG4gIHN0eWxlU2NvcGVkSWQ6IHN0cmluZyB8IG51bGwsXG4gIGtleT86IHN0cmluZyB8IG51bGxcbik6IFNzckF0dHJzIHwgbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiB0b1NzckF0dHJzKFxuICByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgYW5vdGhlclJlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBzZXJpYWxpemF0aW9uQ3R4OiBTZXJpYWxpemF0aW9uQ29udGV4dCxcbiAgcHVzaE1lcmdlZEV2ZW50UHJvcHM6IGJvb2xlYW4sXG4gIHN0eWxlU2NvcGVkSWQ6IHN0cmluZyB8IG51bGwsXG4gIGtleT86IHN0cmluZyB8IG51bGxcbik6IFNzckF0dHJzIHwgbnVsbCB7XG4gIGlmIChyZWNvcmQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHNzckF0dHJzOiBTc3JBdHRycyA9IFtdO1xuICBmb3IgKGNvbnN0IGtleSBpbiByZWNvcmQpIHtcbiAgICBsZXQgdmFsdWUgPSByZWNvcmRba2V5XTtcbiAgICBpZiAoaXNKc3hQcm9wZXJ0eUFuRXZlbnROYW1lKGtleSkpIHtcbiAgICAgIGlmIChhbm90aGVyUmVjb3JkKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB3ZSBoYXZlIHR3byBzb3VyY2VzIG9mIHRoZSBzYW1lIGV2ZW50IGxpa2UgdGhpczpcbiAgICAgICAgICpcbiAgICAgICAgICogYGBgdHN4XG4gICAgICAgICAqIGNvbnN0IENvdW50ZXIgPSBjb21wb25lbnQkKChwcm9wczogeyBpbml0aWFsOiBudW1iZXIgfSkgPT4ge1xuICAgICAgICAgKiAgY29uc3QgY291bnQgPSB1c2VTaWduYWwocHJvcHMuaW5pdGlhbCk7XG4gICAgICAgICAqICB1c2VPbldpbmRvdyhcbiAgICAgICAgICogICAgJ2RibGNsaWNrJyxcbiAgICAgICAgICogICAgJCgoKSA9PiBjb3VudC52YWx1ZSsrKVxuICAgICAgICAgKiAgKTtcbiAgICAgICAgICogIHJldHVybiA8YnV0dG9uIHdpbmRvdzpvbkRibENsaWNrJD17KCkgPT4gY291bnQudmFsdWUrK30+Q291bnQ6IHtjb3VudC52YWx1ZX0hPC9idXR0b24+O1xuICAgICAgICAgKiB9KTtcbiAgICAgICAgICogYGBgXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZW4gd2UgY2FuIGVuZCB3aXRoIHRoZSBjb25zdCBhbmQgdmFyIHByb3BzIHdpdGggdGhlIHNhbWUgKGRvdWJsZWQpIGV2ZW50LiBXZSBwcm9jZXNzXG4gICAgICAgICAqIHRoZSBjb25zdCBhbmQgdmFyIHByb3BzIHNlcGFyYXRlbHksIHNvOlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIEZvciB0aGUgdmFyIHByb3BzIHdlIG5lZWQgdG8gbWVyZ2UgdGhlbSBpbnRvIHRoZSBvbmUgdmFsdWUgKGFycmF5KVxuICAgICAgICAgKiAtIEZvciB0aGUgY29uc3QgcHJvcHMgd2UgbmVlZCB0byBqdXN0IHNraXAsIGJlY2F1c2Ugd2Ugd2lsbCBoYW5kbGUgdGhpcyBpbiB0aGUgdmFyIHByb3BzXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBhbm90aGVyVmFsdWUgPSBnZXRFdmVudFByb3AoYW5vdGhlclJlY29yZCwga2V5KTtcbiAgICAgICAgaWYgKGFub3RoZXJWYWx1ZSkge1xuICAgICAgICAgIGlmIChwdXNoTWVyZ2VkRXZlbnRQcm9wcykge1xuICAgICAgICAgICAgLy8gbWVyZ2UgdmFsdWVzIGZyb20gdGhlIGNvbnN0IHByb3BzIHdpdGggdGhlIHZhciBwcm9wc1xuICAgICAgICAgICAgdmFsdWUgPSBnZXRNZXJnZWRFdmVudFByb3BWYWx1ZXModmFsdWUsIGFub3RoZXJWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZXZlbnRWYWx1ZSA9IHNldEV2ZW50KHNlcmlhbGl6YXRpb25DdHgsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKGV2ZW50VmFsdWUpIHtcbiAgICAgICAgc3NyQXR0cnMucHVzaChqc3hFdmVudFRvSHRtbEF0dHJpYnV0ZShrZXkpLCBldmVudFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpc1NpZ25hbCh2YWx1ZSkpIHtcbiAgICAgIC8vIHdyaXRlIHNpZ25hbCBhcyBpcy4gV2Ugd2lsbCB0cmFjayB0aGlzIHNpZ25hbCBpbnNpZGUgYHdyaXRlQXR0cnNgXG4gICAgICBpZiAoaXNDbGFzc0F0dHIoa2V5KSkge1xuICAgICAgICAvLyBhZGRpdGlvbmFsbHkgYXBwZW5kIHN0eWxlU2NvcGVkSWQgZm9yIGNsYXNzIGF0dHJcbiAgICAgICAgc3NyQXR0cnMucHVzaChrZXksIFt2YWx1ZSwgc3R5bGVTY29wZWRJZF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3NyQXR0cnMucHVzaChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpc1ByZXZlbnREZWZhdWx0KGtleSkpIHtcbiAgICAgIGFkZFByZXZlbnREZWZhdWx0RXZlbnRUb1NlcmlhbGl6YXRpb25Db250ZXh0KHNlcmlhbGl6YXRpb25DdHgsIGtleSk7XG4gICAgfVxuXG4gICAgdmFsdWUgPSBzZXJpYWxpemVBdHRyaWJ1dGUoa2V5LCB2YWx1ZSwgc3R5bGVTY29wZWRJZCk7XG5cbiAgICBzc3JBdHRycy5wdXNoKGtleSwgdmFsdWUgYXMgc3RyaW5nKTtcbiAgfVxuICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICBzc3JBdHRycy5wdXNoKEVMRU1FTlRfS0VZLCBrZXkpO1xuICB9XG4gIHJldHVybiBzc3JBdHRycztcbn1cblxuZnVuY3Rpb24gZ2V0TWVyZ2VkRXZlbnRQcm9wVmFsdWVzKHZhbHVlOiB1bmtub3duLCBhbm90aGVyVmFsdWU6IHVua25vd24pIHtcbiAgbGV0IG1lcmdlZFZhbHVlID0gdmFsdWU7XG4gIC8vIG1lcmdlIHZhbHVlcyBmcm9tIHRoZSBjb25zdCBwcm9wcyB3aXRoIHRoZSB2YXIgcHJvcHNcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEFycmF5LmlzQXJyYXkoYW5vdGhlclZhbHVlKSkge1xuICAgIC8vIGJvdGggdmFsdWVzIGFyZSBhcnJheXNcbiAgICBtZXJnZWRWYWx1ZSA9IHZhbHVlLmNvbmNhdChhbm90aGVyVmFsdWUpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWVyZ2VkVmFsdWUpKSB7XG4gICAgLy8gb25seSBmaXJzdCB2YWx1ZSBpcyBhcnJheVxuICAgIG1lcmdlZFZhbHVlLnB1c2goYW5vdGhlclZhbHVlKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFub3RoZXJWYWx1ZSkpIHtcbiAgICAvLyBvbmx5IHNlY29uZCB2YWx1ZSBpcyBhcnJheVxuICAgIG1lcmdlZFZhbHVlID0gYW5vdGhlclZhbHVlO1xuICAgIChtZXJnZWRWYWx1ZSBhcyB1bmtub3duW10pLnB1c2godmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIC8vIG5vbmUgb2YgdGhlc2UgdmFsdWVzIGFyZSBhcnJheVxuICAgIG1lcmdlZFZhbHVlID0gW3ZhbHVlLCBhbm90aGVyVmFsdWVdO1xuICB9XG4gIHJldHVybiBtZXJnZWRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRQcm9wKHJlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHByb3BLZXk6IHN0cmluZyk6IHVua25vd24gfCBudWxsIHtcbiAgY29uc3QgZXZlbnRQcm9wID0gcHJvcEtleS50b0xvd2VyQ2FzZSgpO1xuICBmb3IgKGNvbnN0IHByb3AgaW4gcmVjb3JkKSB7XG4gICAgaWYgKHByb3AudG9Mb3dlckNhc2UoKSA9PT0gZXZlbnRQcm9wKSB7XG4gICAgICByZXR1cm4gcmVjb3JkW3Byb3BdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2V0RXZlbnQoXG4gIHNlcmlhbGl6YXRpb25DdHg6IFNlcmlhbGl6YXRpb25Db250ZXh0LFxuICBrZXk6IHN0cmluZyxcbiAgcmF3VmFsdWU6IHVua25vd25cbik6IHN0cmluZyB8IG51bGwge1xuICBsZXQgdmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBjb25zdCBxcmxzID0gcmF3VmFsdWU7XG5cbiAgY29uc3QgYXBwZW5kVG9WYWx1ZSA9ICh2YWx1ZVRvQXBwZW5kOiBzdHJpbmcpID0+IHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSArICdcXG4nKSArIHZhbHVlVG9BcHBlbmQ7XG4gIH07XG4gIGNvbnN0IGdldFFybFN0cmluZyA9IChxcmw6IFFSTEludGVybmFsPHVua25vd24+KSA9PiB7XG4gICAgLyoqXG4gICAgICogSWYgdGhlcmUgYXJlIGNhcHR1cmVzIHdlIG5lZWQgdG8gc2NoZWR1bGUgc28gZXZlcnl0aGluZyBpcyBleGVjdXRlZCBpbiB0aGUgcmlnaHQgb3JkZXIgKyBxcmxzXG4gICAgICogYXJlIHJlc29sdmVkLlxuICAgICAqXG4gICAgICogRm9yIGludGVybmFsIHFybHMgKHN0YXJ0aW5nIHdpdGggYF9gKSB3ZSBhc3N1bWUgdGhhdCB0aGV5IGRvIHRoZSByaWdodCB0aGluZy5cbiAgICAgKi9cbiAgICBpZiAoIXFybC4kc3ltYm9sJC5zdGFydHNXaXRoKCdfJykgJiYgKHFybC4kY2FwdHVyZVJlZiQgfHwgcXJsLiRjYXB0dXJlJCkpIHtcbiAgICAgIHFybCA9IGNyZWF0ZVFSTChudWxsLCAnX3J1bicsIHF1ZXVlUVJMLCBudWxsLCBudWxsLCBbcXJsXSk7XG4gICAgfVxuICAgIHJldHVybiBxcmxUb1N0cmluZyhzZXJpYWxpemF0aW9uQ3R4LCBxcmwpO1xuICB9O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHFybHMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcXJscy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcXJsOiB1bmtub3duID0gcXJsc1tpXTtcbiAgICAgIGlmIChpc1FybChxcmwpKSB7XG4gICAgICAgIGFwcGVuZFRvVmFsdWUoZ2V0UXJsU3RyaW5nKHFybCkpO1xuICAgICAgICBhZGRRd2lrRXZlbnRUb1NlcmlhbGl6YXRpb25Db250ZXh0KHNlcmlhbGl6YXRpb25DdHgsIGtleSwgcXJsKTtcbiAgICAgIH0gZWxzZSBpZiAocXJsICE9IG51bGwpIHtcbiAgICAgICAgLy8gbmVzdGVkIGFycmF5cyBldGMuXG4gICAgICAgIGNvbnN0IG5lc3RlZFZhbHVlID0gc2V0RXZlbnQoc2VyaWFsaXphdGlvbkN0eCwga2V5LCBxcmwpO1xuICAgICAgICBpZiAobmVzdGVkVmFsdWUpIHtcbiAgICAgICAgICBhcHBlbmRUb1ZhbHVlKG5lc3RlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1FybChxcmxzKSkge1xuICAgIHZhbHVlID0gZ2V0UXJsU3RyaW5nKHFybHMpO1xuICAgIGFkZFF3aWtFdmVudFRvU2VyaWFsaXphdGlvbkNvbnRleHQoc2VyaWFsaXphdGlvbkN0eCwga2V5LCBxcmxzKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYWRkUXdpa0V2ZW50VG9TZXJpYWxpemF0aW9uQ29udGV4dChcbiAgc2VyaWFsaXphdGlvbkN0eDogU2VyaWFsaXphdGlvbkNvbnRleHQsXG4gIGtleTogc3RyaW5nLFxuICBxcmw6IFFSTFxuKSB7XG4gIGNvbnN0IGV2ZW50TmFtZSA9IGdldEV2ZW50TmFtZUZyb21Kc3hFdmVudChrZXkpO1xuICBpZiAoZXZlbnROYW1lKSB7XG4gICAgc2VyaWFsaXphdGlvbkN0eC4kZXZlbnROYW1lcyQuYWRkKGV2ZW50TmFtZSk7XG4gICAgc2VyaWFsaXphdGlvbkN0eC4kZXZlbnRRcmxzJC5hZGQocXJsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRQcmV2ZW50RGVmYXVsdEV2ZW50VG9TZXJpYWxpemF0aW9uQ29udGV4dChcbiAgc2VyaWFsaXphdGlvbkN0eDogU2VyaWFsaXphdGlvbkNvbnRleHQsXG4gIGtleTogc3RyaW5nXG4pIHtcbiAgLy8gc2tpcCBmaXJzdCAxNSBjaGFycywgdGhpcyBpcyBsZW5ndGggb2YgdGhlIGBwcmV2ZW50ZGVmYXVsdDpgXG4gIGNvbnN0IGV2ZW50TmFtZSA9IGtleS5zdWJzdHJpbmcoMTUpO1xuICBpZiAoZXZlbnROYW1lKSB7XG4gICAgc2VyaWFsaXphdGlvbkN0eC4kZXZlbnROYW1lcyQuYWRkKGV2ZW50TmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U2xvdE5hbWUoaG9zdDogSVNzck5vZGUsIGpzeDogSlNYTm9kZUludGVybmFsLCBzc3I6IFNTUkNvbnRhaW5lcik6IHN0cmluZyB7XG4gIGNvbnN0IGNvbnN0UHJvcHMgPSBqc3guY29uc3RQcm9wcztcbiAgaWYgKGNvbnN0UHJvcHMgJiYgdHlwZW9mIGNvbnN0UHJvcHMgPT0gJ29iamVjdCcgJiYgJ25hbWUnIGluIGNvbnN0UHJvcHMpIHtcbiAgICBjb25zdCBjb25zdFZhbHVlID0gY29uc3RQcm9wcy5uYW1lO1xuICAgIGlmIChjb25zdFZhbHVlIGluc3RhbmNlb2YgV3JhcHBlZFNpZ25hbCkge1xuICAgICAgcmV0dXJuIHRyYWNrU2lnbmFsQW5kQXNzaWduSG9zdChjb25zdFZhbHVlLCBob3N0LCBFZmZlY3RQcm9wZXJ0eS5DT01QT05FTlQsIHNzcik7XG4gICAgfVxuICB9XG4gIHJldHVybiBkaXJlY3RHZXRQcm9wc1Byb3h5UHJvcChqc3gsICduYW1lJykgfHwgUURlZmF1bHRTbG90O1xufVxuXG5mdW5jdGlvbiBhcHBlbmRRd2lrSW5zcGVjdG9yQXR0cmlidXRlKGpzeDogSlNYTm9kZUludGVybmFsLCBxd2lrSW5zcGVjdG9yQXR0clZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmIChxd2lrSW5zcGVjdG9yQXR0clZhbHVlICYmICghanN4LmNvbnN0UHJvcHMgfHwgIShxd2lrSW5zcGVjdG9yQXR0ciBpbiBqc3guY29uc3RQcm9wcykpKSB7XG4gICAgKGpzeC5jb25zdFByb3BzIHx8PSB7fSlbcXdpa0luc3BlY3RvckF0dHJdID0gcXdpa0luc3BlY3RvckF0dHJWYWx1ZTtcbiAgfVxufVxuXG4vLyBhcHBlbmQgY2xhc3MgYXR0cmlidXRlIGlmIHN0eWxlU2NvcGVkSWQgZXhpc3RzIGFuZCB0aGVyZSBpcyBubyBjbGFzcyBhdHRyaWJ1dGVcbmZ1bmN0aW9uIGFwcGVuZENsYXNzSWZTY29wZWRTdHlsZUV4aXN0cyhqc3g6IEpTWE5vZGVJbnRlcm5hbCwgc3R5bGVTY29wZWQ6IHN0cmluZyB8IG51bGwpIHtcbiAgY29uc3QgY2xhc3NBdHRyaWJ1dGVFeGlzdHMgPSBkaXJlY3RHZXRQcm9wc1Byb3h5UHJvcChqc3gsICdjbGFzcycpICE9IG51bGw7XG4gIGlmICghY2xhc3NBdHRyaWJ1dGVFeGlzdHMgJiYgc3R5bGVTY29wZWQpIHtcbiAgICBpZiAoIWpzeC5jb25zdFByb3BzKSB7XG4gICAgICBqc3guY29uc3RQcm9wcyA9IHt9O1xuICAgIH1cbiAgICBqc3guY29uc3RQcm9wc1snY2xhc3MnXSA9ICcnO1xuICB9XG59XG4iXX0=","import { _CONST_PROPS, _IMMUTABLE } from '../shared/utils/constants';\nimport { assertEqual } from '../shared/error/assert';\nimport { isObject } from '../shared/utils/types';\nimport { WrappedSignal } from './signal';\nimport { isSignal } from './signal.public';\nimport { getStoreTarget } from './store';\nimport { isPropsProxy } from '../shared/jsx/jsx-runtime';\n// Keep these properties named like this so they're the same as from wrapSignal\nconst getValueProp = (p0) => p0.value;\nconst getProp = (p0, p1) => p0[p1];\nconst getWrapped = (args) => new WrappedSignal(null, args.length === 1 ? getValueProp : getProp, args, null);\n/**\n * This wraps a property access of a possible Signal/Store into a WrappedSignal. The optimizer does\n * this automatically when a prop is only used as a prop on JSX.\n *\n * When a WrappedSignal is read via the PropsProxy, it will be unwrapped. This allows forwarding the\n * reactivity of a prop to the point of actual use.\n *\n * For efficiency, if you pass only one argument, the property is 'value'.\n *\n * @internal\n */\nexport const _wrapProp = (...args) => {\n    const obj = args[0];\n    const prop = args.length < 2 ? 'value' : args[1];\n    if (!isObject(obj)) {\n        return obj[prop];\n    }\n    if (isSignal(obj)) {\n        assertEqual(prop, 'value', 'Left side is a signal, prop must be value');\n        if (obj instanceof WrappedSignal && obj.flags & 2 /* WrappedSignalFlags.UNWRAP */) {\n            return obj;\n        }\n        return getWrapped(args);\n    }\n    if (isPropsProxy(obj)) {\n        const constProps = obj[_CONST_PROPS];\n        if (constProps && prop in constProps) {\n            // Const props don't need wrapping\n            return constProps[prop];\n        }\n    }\n    else {\n        const target = getStoreTarget(obj);\n        if (target) {\n            const value = target[prop];\n            const wrappedValue = isSignal(value)\n                ? // If the value is already a signal, we don't need to wrap it again\n                    value\n                : getWrapped(args);\n            return wrappedValue;\n        }\n    }\n    // We need to forward the access to the original object\n    return getWrapped(args);\n};\n/** @internal */\nexport const _wrapStore = (obj, prop) => {\n    const target = getStoreTarget(obj);\n    const value = target[prop];\n    if (isSignal(value)) {\n        return value;\n    }\n    else {\n        return new WrappedSignal(null, getProp, [obj, prop], null, 1 /* SignalFlags.INVALID */);\n    }\n};\n/** @internal @deprecated v1 compat */\nexport const _wrapSignal = (obj, prop) => {\n    const r = _wrapProp(obj, prop);\n    if (r === _IMMUTABLE) {\n        return obj[prop];\n    }\n    return r;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLXV0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NpZ25hbC9zaWduYWwtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBZSxhQUFhLEVBQXNCLE1BQU0sVUFBVSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxRQUFRLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCwrRUFBK0U7QUFDL0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7QUFDM0MsTUFBTSxPQUFPLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFaEQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFXLEVBQUUsRUFBRSxDQUNqQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVsRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQWdELEdBQUcsSUFBYSxFQUFPLEVBQUU7SUFDaEcsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUUsQ0FBQztJQUVsRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztRQUN4RSxJQUFJLEdBQUcsWUFBWSxhQUFhLElBQUksR0FBRyxDQUFDLEtBQUssb0NBQTRCLEVBQUUsQ0FBQztZQUMxRSxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFRLENBQUM7UUFDNUMsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLGtDQUFrQztZQUNsQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsbUVBQW1FO29CQUNuRSxLQUFLO2dCQUNQLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFDRCx1REFBdUQ7SUFDdkQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQyxDQUFDO0FBRUYsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUN4QixHQUFNLEVBQ04sSUFBTyxFQUNJLEVBQUU7SUFDYixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFFLENBQUM7SUFDcEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLDhCQUFzQixDQUFDO0lBQ2xGLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixzQ0FBc0M7QUFDdEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQ3pCLEdBQU0sRUFDTixJQUFPLEVBQ0YsRUFBRTtJQUNQLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDckIsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX0NPTlNUX1BST1BTLCBfSU1NVVRBQkxFIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhc3NlcnRFcXVhbCB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgU2lnbmFsRmxhZ3MsIFdyYXBwZWRTaWduYWwsIFdyYXBwZWRTaWduYWxGbGFncyB9IGZyb20gJy4vc2lnbmFsJztcbmltcG9ydCB7IGlzU2lnbmFsLCB0eXBlIFNpZ25hbCB9IGZyb20gJy4vc2lnbmFsLnB1YmxpYyc7XG5pbXBvcnQgeyBnZXRTdG9yZVRhcmdldCB9IGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IHsgaXNQcm9wc1Byb3h5IH0gZnJvbSAnLi4vc2hhcmVkL2pzeC9qc3gtcnVudGltZSc7XG5cbi8vIEtlZXAgdGhlc2UgcHJvcGVydGllcyBuYW1lZCBsaWtlIHRoaXMgc28gdGhleSdyZSB0aGUgc2FtZSBhcyBmcm9tIHdyYXBTaWduYWxcbmNvbnN0IGdldFZhbHVlUHJvcCA9IChwMDogYW55KSA9PiBwMC52YWx1ZTtcbmNvbnN0IGdldFByb3AgPSAocDA6IGFueSwgcDE6IHN0cmluZykgPT4gcDBbcDFdO1xuXG5jb25zdCBnZXRXcmFwcGVkID0gKGFyZ3M6IGFueVtdKSA9PlxuICBuZXcgV3JhcHBlZFNpZ25hbChudWxsLCBhcmdzLmxlbmd0aCA9PT0gMSA/IGdldFZhbHVlUHJvcCA6IGdldFByb3AsIGFyZ3MsIG51bGwpO1xuXG4vKipcbiAqIFRoaXMgd3JhcHMgYSBwcm9wZXJ0eSBhY2Nlc3Mgb2YgYSBwb3NzaWJsZSBTaWduYWwvU3RvcmUgaW50byBhIFdyYXBwZWRTaWduYWwuIFRoZSBvcHRpbWl6ZXIgZG9lc1xuICogdGhpcyBhdXRvbWF0aWNhbGx5IHdoZW4gYSBwcm9wIGlzIG9ubHkgdXNlZCBhcyBhIHByb3Agb24gSlNYLlxuICpcbiAqIFdoZW4gYSBXcmFwcGVkU2lnbmFsIGlzIHJlYWQgdmlhIHRoZSBQcm9wc1Byb3h5LCBpdCB3aWxsIGJlIHVud3JhcHBlZC4gVGhpcyBhbGxvd3MgZm9yd2FyZGluZyB0aGVcbiAqIHJlYWN0aXZpdHkgb2YgYSBwcm9wIHRvIHRoZSBwb2ludCBvZiBhY3R1YWwgdXNlLlxuICpcbiAqIEZvciBlZmZpY2llbmN5LCBpZiB5b3UgcGFzcyBvbmx5IG9uZSBhcmd1bWVudCwgdGhlIHByb3BlcnR5IGlzICd2YWx1ZScuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBfd3JhcFByb3AgPSA8VCBleHRlbmRzIFJlY29yZDxhbnksIGFueT4sIFAgZXh0ZW5kcyBrZXlvZiBUPiguLi5hcmdzOiBbVCwgUD9dKTogYW55ID0+IHtcbiAgY29uc3Qgb2JqID0gYXJnc1swXTtcbiAgY29uc3QgcHJvcCA9IGFyZ3MubGVuZ3RoIDwgMiA/ICd2YWx1ZScgOiBhcmdzWzFdITtcblxuICBpZiAoIWlzT2JqZWN0KG9iaikpIHtcbiAgICByZXR1cm4gb2JqW3Byb3BdO1xuICB9XG4gIGlmIChpc1NpZ25hbChvYmopKSB7XG4gICAgYXNzZXJ0RXF1YWwocHJvcCwgJ3ZhbHVlJywgJ0xlZnQgc2lkZSBpcyBhIHNpZ25hbCwgcHJvcCBtdXN0IGJlIHZhbHVlJyk7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIFdyYXBwZWRTaWduYWwgJiYgb2JqLmZsYWdzICYgV3JhcHBlZFNpZ25hbEZsYWdzLlVOV1JBUCkge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgcmV0dXJuIGdldFdyYXBwZWQoYXJncyk7XG4gIH1cbiAgaWYgKGlzUHJvcHNQcm94eShvYmopKSB7XG4gICAgY29uc3QgY29uc3RQcm9wcyA9IG9ialtfQ09OU1RfUFJPUFNdIGFzIGFueTtcbiAgICBpZiAoY29uc3RQcm9wcyAmJiBwcm9wIGluIGNvbnN0UHJvcHMpIHtcbiAgICAgIC8vIENvbnN0IHByb3BzIGRvbid0IG5lZWQgd3JhcHBpbmdcbiAgICAgIHJldHVybiBjb25zdFByb3BzW3Byb3BdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0YXJnZXQgPSBnZXRTdG9yZVRhcmdldChvYmopO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W3Byb3BdO1xuICAgICAgY29uc3Qgd3JhcHBlZFZhbHVlID0gaXNTaWduYWwodmFsdWUpXG4gICAgICAgID8gLy8gSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSBzaWduYWwsIHdlIGRvbid0IG5lZWQgdG8gd3JhcCBpdCBhZ2FpblxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIDogZ2V0V3JhcHBlZChhcmdzKTtcbiAgICAgIHJldHVybiB3cmFwcGVkVmFsdWU7XG4gICAgfVxuICB9XG4gIC8vIFdlIG5lZWQgdG8gZm9yd2FyZCB0aGUgYWNjZXNzIHRvIHRoZSBvcmlnaW5hbCBvYmplY3RcbiAgcmV0dXJuIGdldFdyYXBwZWQoYXJncyk7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX3dyYXBTdG9yZSA9IDxUIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55PiwgUCBleHRlbmRzIGtleW9mIFQ+KFxuICBvYmo6IFQsXG4gIHByb3A6IFBcbik6IFNpZ25hbDxUPiA9PiB7XG4gIGNvbnN0IHRhcmdldCA9IGdldFN0b3JlVGFyZ2V0KG9iaikhO1xuICBjb25zdCB2YWx1ZSA9IHRhcmdldFtwcm9wXTtcbiAgaWYgKGlzU2lnbmFsKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFdyYXBwZWRTaWduYWwobnVsbCwgZ2V0UHJvcCwgW29iaiwgcHJvcF0sIG51bGwsIFNpZ25hbEZsYWdzLklOVkFMSUQpO1xuICB9XG59O1xuXG4vKiogQGludGVybmFsIEBkZXByZWNhdGVkIHYxIGNvbXBhdCAqL1xuZXhwb3J0IGNvbnN0IF93cmFwU2lnbmFsID0gPFQgZXh0ZW5kcyBSZWNvcmQ8YW55LCBhbnk+LCBQIGV4dGVuZHMga2V5b2YgVD4oXG4gIG9iajogVCxcbiAgcHJvcDogUFxuKTogYW55ID0+IHtcbiAgY29uc3QgciA9IF93cmFwUHJvcChvYmosIHByb3ApO1xuICBpZiAociA9PT0gX0lNTVVUQUJMRSkge1xuICAgIHJldHVybiBvYmpbcHJvcF07XG4gIH1cbiAgcmV0dXJuIHI7XG59O1xuIl19","import { WrappedSignal } from '../../signal/signal';\n/** @internal */\nexport const _fnSignal = (fn, args, fnStr) => {\n    return new WrappedSignal(null, fn, args, fnStr || null);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lZC1mbi5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvcXJsL2lubGluZWQtZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBELGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FDdkIsRUFBSyxFQUNMLElBQW1CLEVBQ25CLEtBQWMsRUFDZCxFQUFFO0lBQ0YsT0FBTyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3JhcHBlZFNpZ25hbCB9IGZyb20gJy4uLy4uL3NpZ25hbC9zaWduYWwnO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX2ZuU2lnbmFsID0gPFQgZXh0ZW5kcyAoLi4uYXJnczogYW55KSA9PiBhbnk+KFxuICBmbjogVCxcbiAgYXJnczogUGFyYW1ldGVyczxUPixcbiAgZm5TdHI/OiBzdHJpbmdcbikgPT4ge1xuICByZXR1cm4gbmV3IFdyYXBwZWRTaWduYWwobnVsbCwgZm4sIGFyZ3MsIGZuU3RyIHx8IG51bGwpO1xufTtcbiJdfQ==","/** @file Shared types */\n/** @internal */\nexport function isStringifiable(value) {\n    return (value === null ||\n        typeof value === 'string' ||\n        typeof value === 'number' ||\n        typeof value === 'boolean');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLXR5cGVzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5QkFBeUI7QUFLekIsZ0JBQWdCO0FBQ2hCLE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYztJQUM1QyxPQUFPLENBQ0wsS0FBSyxLQUFLLElBQUk7UUFDZCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUMzQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAZmlsZSBTaGFyZWQgdHlwZXMgKi9cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IHR5cGUgU3RyaW5naWZpYWJsZSA9IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBudWxsO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdpZmlhYmxlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU3RyaW5naWZpYWJsZSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gICk7XG59XG4iXX0=","import { _CONST_PROPS } from '../../internal';\nimport { _VAR_PROPS } from '../utils/constants';\nimport { untrack } from '../../use/use-core';\nimport { EMPTY_OBJ } from '../utils/flyweight';\nimport { logOnceWarn, logWarn } from '../utils/log';\nimport { ELEMENT_ID, OnRenderProp, QScopedStyle, QSlot, QSlotS } from '../utils/markers';\nimport { qDev, seal } from '../utils/qdev';\nimport { isArray, isObject, isString } from '../utils/types';\nimport { WrappedSignal } from '../../signal/signal';\n/**\n * Create a JSXNode with the properties fully split into variable and constant parts, and children\n * separated out. Furthermore, the varProps must be a sorted object, that is, the keys must be\n * sorted in ascending utf-8 value order.\n *\n * The constant parts are expected to be the same on every render, and are not checked for changes.\n * This means that they are constant scalars or refs. When the ref is a signal or a store, it can\n * still update the attribute on the vnode.\n *\n * @param type - The JSX type\n * @param varProps - The properties of the tag, sorted, excluding children, excluding any constProps\n * @param constProps - The properties of the tag that are known to be constant references and don't\n *   need checking for changes on re-render\n * @param children - JSX children. Any `children` in the props objects are ignored.\n * @internal\n */\nexport const _jsxSorted = (type, varProps, constProps, children, flags, key, dev) => {\n    const processed = key == null ? null : String(key);\n    const node = new JSXNodeImpl(type, varProps || {}, constProps || null, children, flags, processed);\n    if (qDev && dev) {\n        node.dev = {\n            stack: new Error().stack,\n            ...dev,\n        };\n    }\n    seal(node);\n    return node;\n};\n/**\n * Create a JSXNode, with the properties split into variable and constant parts, but the variable\n * parts could include keys from constProps, as well as `key` and `children`.\n *\n * The constant parts are expected to be the same on every render, and are not checked for changes.\n * This means that they are constant scalars or refs. When the ref is a signal or a store, it can\n * still update the attribute on the vnode.\n *\n * If `children` is defined, any `children` in the props will be ignored.\n *\n * @param type - The tag type\n * @param varProps - The properties of the tag that could change, including children\n * @param constProps - The properties of the tag that are known to be static and don't need checking\n *   for changes on re-render\n * @internal\n */\nexport const _jsxSplit = (type, varProps, constProps, children, flags, key, dev) => {\n    let sortedProps;\n    if (varProps) {\n        // filter and sort\n        sortedProps = Object.fromEntries(untrack(() => Object.entries(varProps))\n            .filter((entry) => {\n            const attr = entry[0];\n            if (attr === 'children') {\n                // side-effect!\n                children ??= entry[1];\n                return false;\n            }\n            else if (attr === 'key') {\n                key = entry[1];\n                return false;\n            }\n            return (!constProps ||\n                !(attr in constProps) ||\n                // special case for event handlers, they merge\n                /^on[A-Z].*\\$$/.test(attr));\n        })\n            // sort for fast compare in vNodes\n            // keys can never be the same so we don't check for that\n            .sort(([a], [b]) => (a < b ? -1 : 1)));\n    }\n    else {\n        sortedProps = typeof type === 'string' ? EMPTY_OBJ : {};\n    }\n    if (constProps && 'children' in constProps) {\n        children = constProps.children;\n        constProps.children = undefined;\n    }\n    return _jsxSorted(type, sortedProps, constProps, children, flags, key, dev);\n};\n/** @internal @deprecated v1 compat */\nexport const _jsxC = (type, mutable, _flags, key) => jsx(type, mutable, key);\n/** @internal @deprecated v1 compat */\nexport const _jsxS = (type, mutable, immutable, _flags, key) => jsx(type, { ...immutable, ...mutable }, key);\n/** @internal @deprecated v1 compat */\nexport const _jsxQ = (type, mutable, immutable, children, _flags, key) => jsx(type, { ...immutable, ...mutable, children }, key);\n/**\n * @public\n * Used by the JSX transpilers to create a JSXNode.\n * Note that the optimizer will not use this, instead using _jsxSplit and _jsxSorted directly.\n */\nexport const jsx = (type, props, key) => {\n    return _jsxSplit(type, props, null, null, 0, key || null);\n};\nexport const flattenArray = (array, dst) => {\n    // Yes this function is just Array.flat, but we need to run on old versions of Node.\n    if (!dst) {\n        dst = [];\n    }\n    for (const item of array) {\n        if (isArray(item)) {\n            flattenArray(item, dst);\n        }\n        else {\n            dst.push(item);\n        }\n    }\n    return dst;\n};\n/**\n * The legacy transform, used in special cases like `<div {...props} key=\"key\" />`. Note that the\n * children are spread arguments, instead of a prop like in jsx() calls.\n *\n * Also note that this disables optimizations.\n *\n * @public\n */\nexport function h(type, props, ...children) {\n    const normalizedProps = {\n        children: arguments.length > 2 ? flattenArray(children) : null,\n    };\n    let key = null;\n    for (const i in props) {\n        if (i == 'key') {\n            key = props[i];\n        }\n        else {\n            normalizedProps[i] = props[i];\n        }\n    }\n    if (typeof type === 'string' && !key && 'dangerouslySetInnerHTML' in normalizedProps) {\n        key = 'innerhtml';\n    }\n    return _jsxSplit(type, props, null, normalizedProps.children, 0, key);\n}\nexport const isPropsProxy = (obj) => {\n    return obj && obj[_VAR_PROPS] !== undefined;\n};\nexport class JSXNodeImpl {\n    type;\n    varProps;\n    constProps;\n    children;\n    flags;\n    key;\n    dev;\n    constructor(type, varProps, constProps, children, flags, key = null) {\n        this.type = type;\n        this.varProps = varProps;\n        this.constProps = constProps;\n        this.children = children;\n        this.flags = flags;\n        this.key = key;\n        if (qDev) {\n            if (typeof varProps !== 'object') {\n                throw new Error(`JSXNodeImpl: varProps must be objects: ` + JSON.stringify(varProps));\n            }\n            if (typeof constProps !== 'object') {\n                throw new Error(`JSXNodeImpl: constProps must be objects: ` + JSON.stringify(constProps));\n            }\n        }\n    }\n    _proxy = null;\n    get props() {\n        // We use a proxy to merge the constProps if they exist and to evaluate derived signals\n        if (!this._proxy) {\n            this._proxy = createPropsProxy(this.varProps, this.constProps, this.children);\n        }\n        return this._proxy;\n    }\n}\n/** @private */\nexport const Virtual = (props) => props.children;\n/** @public */\nexport const RenderOnce = (props, key) => {\n    return new JSXNodeImpl(Virtual, EMPTY_OBJ, null, props.children, 2, key);\n};\n/** @internal */\nexport const isJSXNode = (n) => {\n    if (qDev) {\n        if (n instanceof JSXNodeImpl) {\n            return true;\n        }\n        if (isObject(n) && 'key' in n && 'props' in n && 'type' in n) {\n            logWarn(`Duplicate implementations of \"JSXNode\" found`);\n            return true;\n        }\n        return false;\n    }\n    else {\n        return n instanceof JSXNodeImpl;\n    }\n};\n/** @public */\nexport const Fragment = (props) => props.children;\n/** @public */\nexport const jsxDEV = (type, props, key, _isStatic, opts, _ctx) => {\n    const processed = key == null ? null : String(key);\n    const children = untrack(() => {\n        const c = props.children;\n        if (typeof type === 'string') {\n            delete props.children;\n        }\n        return c;\n    });\n    if (isString(type)) {\n        if ('className' in props) {\n            props.class = props.className;\n            delete props.className;\n            if (qDev) {\n                logOnceWarn('jsx: `className` is deprecated. Use `class` instead.');\n            }\n        }\n    }\n    const node = new JSXNodeImpl(type, props, null, children, 0, processed);\n    node.dev = {\n        stack: new Error().stack,\n        ...opts,\n    };\n    seal(node);\n    return node;\n};\nexport function createPropsProxy(varProps, constProps, children) {\n    return new Proxy({}, new PropsProxyHandler(varProps, constProps, children));\n}\nclass PropsProxyHandler {\n    $varProps$;\n    $constProps$;\n    $children$;\n    constructor($varProps$, $constProps$, $children$) {\n        this.$varProps$ = $varProps$;\n        this.$constProps$ = $constProps$;\n        this.$children$ = $children$;\n    }\n    get(_, prop) {\n        // escape hatch to get the separated props from a component\n        if (prop === _CONST_PROPS) {\n            return this.$constProps$;\n        }\n        if (prop === _VAR_PROPS) {\n            return this.$varProps$;\n        }\n        if (this.$children$ != null && prop === 'children') {\n            return this.$children$;\n        }\n        const value = this.$constProps$ && prop in this.$constProps$\n            ? this.$constProps$[prop]\n            : this.$varProps$[prop];\n        // a proxied value that the optimizer made\n        return value instanceof WrappedSignal && value.$flags$ & 2 /* WrappedSignalFlags.UNWRAP */\n            ? value.value\n            : value;\n    }\n    set(_, prop, value) {\n        if (prop === _CONST_PROPS) {\n            this.$constProps$ = value;\n            return true;\n        }\n        if (prop === _VAR_PROPS) {\n            this.$varProps$ = value;\n            return true;\n        }\n        if (this.$constProps$ && prop in this.$constProps$) {\n            this.$constProps$[prop] = value;\n        }\n        else {\n            this.$varProps$[prop] = value;\n        }\n        return true;\n    }\n    deleteProperty(_, prop) {\n        if (typeof prop !== 'string') {\n            return false;\n        }\n        let didDelete = delete this.$varProps$[prop];\n        if (this.$constProps$) {\n            didDelete = delete this.$constProps$[prop] || didDelete;\n        }\n        if (this.$children$ != null && prop === 'children') {\n            this.$children$ = null;\n        }\n        return didDelete;\n    }\n    has(_, prop) {\n        const hasProp = (prop === 'children' && this.$children$ != null) ||\n            prop === _CONST_PROPS ||\n            prop === _VAR_PROPS ||\n            prop in this.$varProps$ ||\n            (this.$constProps$ ? prop in this.$constProps$ : false);\n        return hasProp;\n    }\n    getOwnPropertyDescriptor(_, p) {\n        const value = p === 'children' && this.$children$ != null\n            ? this.$children$\n            : this.$constProps$ && p in this.$constProps$\n                ? this.$constProps$[p]\n                : this.$varProps$[p];\n        return {\n            configurable: true,\n            enumerable: true,\n            value: value,\n        };\n    }\n    ownKeys() {\n        const out = Object.keys(this.$varProps$);\n        if (this.$children$ != null && out.indexOf('children') === -1) {\n            out.push('children');\n        }\n        if (this.$constProps$) {\n            for (const key in this.$constProps$) {\n                if (out.indexOf(key) === -1) {\n                    out.push(key);\n                }\n            }\n        }\n        return out;\n    }\n}\n/**\n * Instead of using PropsProxyHandler getter (which could create a component-level subscription).\n * Use this function to get the props directly from a const or var props.\n */\nexport const directGetPropsProxyProp = (jsx, prop) => {\n    return (jsx.constProps && prop in jsx.constProps ? jsx.constProps[prop] : jsx.varProps[prop]);\n};\nexport { jsx as jsxs };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianN4LXJ1bnRpbWUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL2pzeC9qc3gtcnVudGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBUXhFOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUN4QixJQUFPLEVBQ1AsUUFBc0IsRUFDdEIsVUFBd0IsRUFDeEIsUUFBNEIsRUFDNUIsS0FBYSxFQUNiLEdBQXVDLEVBQ3ZDLEdBQVksRUFDUSxFQUFFO0lBQ3RCLE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxDQUMxQixJQUFJLEVBQ0osUUFBUSxJQUFJ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RjtBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQVMsR0FBeUIsRUFBRSxJQUFZLEVBQUssRUFBRTtJQUM1RixPQUFPLENBQ0wsR0FBRyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDaEYsQ0FBQztBQUNULENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIE9uUmVuZGVyRm4gfSBmcm9tICcuLi9jb21wb25lbnQucHVibGljJztcbmltcG9ydCB7IF9DT05TVF9QUk9QUyB9IGZyb20gJy4uLy4uL2ludGVybmFsJztcbmltcG9ydCB7IHR5cGUgUVJMSW50ZXJuYWwgfSBmcm9tICcuLi9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB7IF9WQVJfUFJPUFMgfSBmcm9tICcuLi91dGlscy9jb25zdGFudHMnO1xuaW1wb3J0IHsgdW50cmFjayB9IGZyb20gJy4uLy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyBFTVBUWV9PQkogfSBmcm9tICcuLi91dGlscy9mbHl3ZWlnaHQnO1xuaW1wb3J0IHsgbG9nT25jZVdhcm4sIGxvZ1dhcm4gfSBmcm9tICcuLi91dGlscy9sb2cnO1xuaW1wb3J0IHsgRUxFTUVOVF9JRCwgT25SZW5kZXJQcm9wLCBRU2NvcGVkU3R5bGUsIFFTbG90LCBRU2xvdFMgfSBmcm9tICcuLi91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IHFEZXYsIHNlYWwgfSBmcm9tICcuLi91dGlscy9xZGV2JztcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IFdyYXBwZWRTaWduYWwsIFdyYXBwZWRTaWduYWxGbGFncyB9IGZyb20gJy4uLy4uL3NpZ25hbC9zaWduYWwnO1xuaW1wb3J0IHR5cGUgeyBEZXZKU1gsIEZ1bmN0aW9uQ29tcG9uZW50LCBKU1hOb2RlLCBKU1hOb2RlSW50ZXJuYWwgfSBmcm9tICcuL3R5cGVzL2pzeC1ub2RlJztcbmltcG9ydCB0eXBlIHsgUXdpa0pTWCB9IGZyb20gJy4vdHlwZXMvanN4LXF3aWsnO1xuaW1wb3J0IHR5cGUgeyBKU1hDaGlsZHJlbiB9IGZyb20gJy4vdHlwZXMvanN4LXF3aWstYXR0cmlidXRlcyc7XG5cbmV4cG9ydCB0eXBlIFByb3BzID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5leHBvcnQgdHlwZSBQcm9wc1Byb3h5ID0geyBbX1ZBUl9QUk9QU106IFByb3BzOyBbX0NPTlNUX1BST1BTXTogUHJvcHMgfCBudWxsIH07XG5cbi8qKlxuICogQ3JlYXRlIGEgSlNYTm9kZSB3aXRoIHRoZSBwcm9wZXJ0aWVzIGZ1bGx5IHNwbGl0IGludG8gdmFyaWFibGUgYW5kIGNvbnN0YW50IHBhcnRzLCBhbmQgY2hpbGRyZW5cbiAqIHNlcGFyYXRlZCBvdXQuIEZ1cnRoZXJtb3JlLCB0aGUgdmFyUHJvcHMgbXVzdCBiZSBhIHNvcnRlZCBvYmplY3QsIHRoYXQgaXMsIHRoZSBrZXlzIG11c3QgYmVcbiAqIHNvcnRlZCBpbiBhc2NlbmRpbmcgdXRmLTggdmFsdWUgb3JkZXIuXG4gKlxuICogVGhlIGNvbnN0YW50IHBhcnRzIGFyZSBleHBlY3RlZCB0byBiZSB0aGUgc2FtZSBvbiBldmVyeSByZW5kZXIsIGFuZCBhcmUgbm90IGNoZWNrZWQgZm9yIGNoYW5nZXMuXG4gKiBUaGlzIG1lYW5zIHRoYXQgdGhleSBhcmUgY29uc3RhbnQgc2NhbGFycyBvciByZWZzLiBXaGVuIHRoZSByZWYgaXMgYSBzaWduYWwgb3IgYSBzdG9yZSwgaXQgY2FuXG4gKiBzdGlsbCB1cGRhdGUgdGhlIGF0dHJpYnV0ZSBvbiB0aGUgdm5vZGUuXG4gKlxuICogQHBhcmFtIHR5cGUgLSBUaGUgSlNYIHR5cGVcbiAqIEBwYXJhbSB2YXJQcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB0YWcsIHNvcnRlZCwgZXhjbHVkaW5nIGNoaWxkcmVuLCBleGNsdWRpbmcgYW55IGNvbnN0UHJvcHNcbiAqIEBwYXJhbSBjb25zdFByb3BzIC0gVGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhZyB0aGF0IGFyZSBrbm93biB0byBiZSBjb25zdGFudCByZWZlcmVuY2VzIGFuZCBkb24ndFxuICogICBuZWVkIGNoZWNraW5nIGZvciBjaGFuZ2VzIG9uIHJlLXJlbmRlclxuICogQHBhcmFtIGNoaWxkcmVuIC0gSlNYIGNoaWxkcmVuLiBBbnkgYGNoaWxkcmVuYCBpbiB0aGUgcHJvcHMgb2JqZWN0cyBhcmUgaWdub3JlZC5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgX2pzeFNvcnRlZCA9IDxUPihcbiAgdHlwZTogVCxcbiAgdmFyUHJvcHM6IFByb3BzIHwgbnVsbCxcbiAgY29uc3RQcm9wczogUHJvcHMgfCBudWxsLFxuICBjaGlsZHJlbjogSlNYQ2hpbGRyZW4gfCBudWxsLFxuICBmbGFnczogbnVtYmVyLFxuICBrZXk6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGRldj86IERldkpTWFxuKTogSlNYTm9kZUludGVybmFsPFQ+ID0+IHtcbiAgY29uc3QgcHJvY2Vzc2VkID0ga2V5ID09IG51bGwgPyBudWxsIDogU3RyaW5nKGtleSk7XG4gIGNvbnN0IG5vZGUgPSBuZXcgSlNYTm9kZUltcGwoXG4gICAgdHlwZSxcbiAgICB2YXJQcm9wcyB8fCB7fSxcbiAgICBjb25zdFByb3BzIHx8IG51bGwsXG4gICAgY2hpbGRyZW4sXG4gICAgZmxhZ3MsXG4gICAgcHJvY2Vzc2VkXG4gICk7XG4gIGlmIChxRGV2ICYmIGRldikge1xuICAgIG5vZGUuZGV2ID0ge1xuICAgICAgc3RhY2s6IG5ldyBFcnJvcigpLnN0YWNrLFxuICAgICAgLi4uZGV2LFxuICAgIH07XG4gIH1cbiAgc2VhbChub2RlKTtcbiAgcmV0dXJuIG5vZGU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEpTWE5vZGUsIHdpdGggdGhlIHByb3BlcnRpZXMgc3BsaXQgaW50byB2YXJpYWJsZSBhbmQgY29uc3RhbnQgcGFydHMsIGJ1dCB0aGUgdmFyaWFibGVcbiAqIHBhcnRzIGNvdWxkIGluY2x1ZGUga2V5cyBmcm9tIGNvbnN0UHJvcHMsIGFzIHdlbGwgYXMgYGtleWAgYW5kIGBjaGlsZHJlbmAuXG4gKlxuICogVGhlIGNvbnN0YW50IHBhcnRzIGFyZSBleHBlY3RlZCB0byBiZSB0aGUgc2FtZSBvbiBldmVyeSByZW5kZXIsIGFuZCBhcmUgbm90IGNoZWNrZWQgZm9yIGNoYW5nZXMuXG4gKiBUaGlzIG1lYW5zIHRoYXQgdGhleSBhcmUgY29uc3RhbnQgc2NhbGFycyBvciByZWZzLiBXaGVuIHRoZSByZWYgaXMgYSBzaWduYWwgb3IgYSBzdG9yZSwgaXQgY2FuXG4gKiBzdGlsbCB1cGRhdGUgdGhlIGF0dHJpYnV0ZSBvbiB0aGUgdm5vZGUuXG4gKlxuICogSWYgYGNoaWxkcmVuYCBpcyBkZWZpbmVkLCBhbnkgYGNoaWxkcmVuYCBpbiB0aGUgcHJvcHMgd2lsbCBiZSBpZ25vcmVkLlxuICpcbiAqIEBwYXJhbSB0eXBlIC0gVGhlIHRhZyB0eXBlXG4gKiBAcGFyYW0gdmFyUHJvcHMgLSBUaGUgcHJvcGVydGllcyBvZiB0aGUgdGFnIHRoYXQgY291bGQgY2hhbmdlLCBpbmNsdWRpbmcgY2hpbGRyZW5cbiAqIEBwYXJhbSBjb25zdFByb3BzIC0gVGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhZyB0aGF0IGFyZSBrbm93biB0byBiZSBzdGF0aWMgYW5kIGRvbid0IG5lZWQgY2hlY2tpbmdcbiAqICAgZm9yIGNoYW5nZXMgb24gcmUtcmVuZGVyXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IF9qc3hTcGxpdCA9IDxUIGV4dGVuZHMgc3RyaW5nIHwgRnVuY3Rpb25Db21wb25lbnQ8YW55Pj4oXG4gIHR5cGU6IFQsXG4gIHZhclByb3BzOiBQcm9wcyB8IG51bGwsXG4gIGNvbnN0UHJvcHM6IFByb3BzIHwgbnVsbCxcbiAgY2hpbGRyZW46IEpTWENoaWxkcmVuIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgZmxhZ3M6IG51bWJlcixcbiAga2V5OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsLFxuICBkZXY/OiBEZXZKU1hcbik6IEpTWE5vZGVJbnRlcm5hbDxUPiA9PiB7XG4gIGxldCBzb3J0ZWRQcm9wcztcbiAgaWYgKHZhclByb3BzKSB7XG4gICAgLy8gZmlsdGVyIGFuZCBzb3J0XG4gICAgc29ydGVkUHJvcHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICB1bnRyYWNrKCgpID0+IE9iamVjdC5lbnRyaWVzKHZhclByb3BzISkpXG4gICAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgY29uc3QgYXR0ciA9IGVudHJ5WzBdO1xuICAgICAgICAgIGlmIChhdHRyID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICAgICAgICAvLyBzaWRlLWVmZmVjdCFcbiAgICAgICAgICAgIGNoaWxkcmVuID8/PSBlbnRyeVsxXSBhcyBKU1hDaGlsZHJlbjtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGF0dHIgPT09ICdrZXknKSB7XG4gICAgICAgICAgICBrZXkgPSBlbnRyeVsxXSBhcyBzdHJpbmc7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhY29uc3RQcm9wcyB8fFxuICAgICAgICAgICAgIShhdHRyIGluIGNvbnN0UHJvcHMpIHx8XG4gICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGV2ZW50IGhhbmRsZXJzLCB0aGV5IG1lcmdlXG4gICAgICAgICAgICAvXm9uW0EtWl0uKlxcJCQvLnRlc3QoYXR0cilcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAvLyBzb3J0IGZvciBmYXN0IGNvbXBhcmUgaW4gdk5vZGVzXG4gICAgICAgIC8vIGtleXMgY2FuIG5ldmVyIGJlIHRoZSBzYW1lIHNvIHdlIGRvbid0IGNoZWNrIGZvciB0aGF0XG4gICAgICAgIC5zb3J0KChbYV0sIFtiXSkgPT4gKGEgPCBiID8gLTEgOiAxKSlcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHNvcnRlZFByb3BzID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gRU1QVFlfT0JKIDoge307XG4gIH1cbiAgaWYgKGNvbnN0UHJvcHMgJiYgJ2NoaWxkcmVuJyBpbiBjb25zdFByb3BzKSB7XG4gICAgY2hpbGRyZW4gPSBjb25zdFByb3BzLmNoaWxkcmVuIGFzIEpTWENoaWxkcmVuO1xuICAgIGNvbnN0UHJvcHMuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIF9qc3hTb3J0ZWQodHlwZSwgc29ydGVkUHJvcHMsIGNvbnN0UHJvcHMsIGNoaWxkcmVuLCBmbGFncywga2V5LCBkZXYpO1xufTtcblxuLyoqIEBpbnRlcm5hbCBAZGVwcmVjYXRlZCB2MSBjb21wYXQgKi9cbmV4cG9ydCBjb25zdCBfanN4QyA9ICh0eXBlOiBhbnksIG11dGFibGU6IGFueSwgX2ZsYWdzOiBhbnksIGtleTogYW55KSA9PiBqc3godHlwZSwgbXV0YWJsZSwga2V5KTtcbi8qKiBAaW50ZXJuYWwgQGRlcHJlY2F0ZWQgdjEgY29tcGF0ICovXG5leHBvcnQgY29uc3QgX2pzeFMgPSAodHlwZTogYW55LCBtdXRhYmxlOiBhbnksIGltbXV0YWJsZTogYW55LCBfZmxhZ3M6IGFueSwga2V5OiBhbnkpID0+XG4gIGpzeCh0eXBlLCB7IC4uLmltbXV0YWJsZSwgLi4ubXV0YWJsZSB9LCBrZXkpO1xuLyoqIEBpbnRlcm5hbCBAZGVwcmVjYXRlZCB2MSBjb21wYXQgKi9cbmV4cG9ydCBjb25zdCBfanN4USA9IChcbiAgdHlwZTogYW55LFxuICBtdXRhYmxlOiBhbnksXG4gIGltbXV0YWJsZTogYW55LFxuICBjaGlsZHJlbjogYW55LFxuICBfZmxhZ3M6IGFueSxcbiAga2V5OiBhbnlcbikgPT4ganN4KHR5cGUsIHsgLi4uaW1tdXRhYmxlLCAuLi5tdXRhYmxlLCBjaGlsZHJlbiB9LCBrZXkpO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIFVzZWQgYnkgdGhlIEpTWCB0cmFuc3BpbGVycyB0byBjcmVhdGUgYSBKU1hOb2RlLlxuICogTm90ZSB0aGF0IHRoZSBvcHRpbWl6ZXIgd2lsbCBub3QgdXNlIHRoaXMsIGluc3RlYWQgdXNpbmcgX2pzeFNwbGl0IGFuZCBfanN4U29ydGVkIGRpcmVjdGx5LlxuICovXG5leHBvcnQgY29uc3QganN4ID0gPFQgZXh0ZW5kcyBzdHJpbmcgfCBGdW5jdGlvbkNvbXBvbmVudDxhbnk+PihcbiAgdHlwZTogVCxcbiAgcHJvcHM6IFQgZXh0ZW5kcyBGdW5jdGlvbkNvbXBvbmVudDxpbmZlciBQUk9QUz4gPyBQUk9QUyA6IFByb3BzLFxuICBrZXk/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4pOiBKU1hOb2RlPFQ+ID0+IHtcbiAgcmV0dXJuIF9qc3hTcGxpdCh0eXBlLCBwcm9wcywgbnVsbCwgbnVsbCwgMCwga2V5IHx8IG51bGwpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZsYXR0ZW5BcnJheSA9IDxUPihhcnJheTogKFQgfCBUW10pW10sIGRzdD86IFRbXSk6IFRbXSA9PiB7XG4gIC8vIFllcyB0aGlzIGZ1bmN0aW9uIGlzIGp1c3QgQXJyYXkuZmxhdCwgYnV0IHdlIG5lZWQgdG8gcnVuIG9uIG9sZCB2ZXJzaW9ucyBvZiBOb2RlLlxuICBpZiAoIWRzdCkge1xuICAgIGRzdCA9IFtdO1xuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBhcnJheSkge1xuICAgIGlmIChpc0FycmF5KGl0ZW0pKSB7XG4gICAgICBmbGF0dGVuQXJyYXkoaXRlbSwgZHN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkc3Q7XG59O1xuXG4vKipcbiAqIFRoZSBsZWdhY3kgdHJhbnNmb3JtLCB1c2VkIGluIHNwZWNpYWwgY2FzZXMgbGlrZSBgPGRpdiB7Li4ucHJvcHN9IGtleT1cImtleVwiIC8+YC4gTm90ZSB0aGF0IHRoZVxuICogY2hpbGRyZW4gYXJlIHNwcmVhZCBhcmd1bWVudHMsIGluc3RlYWQgb2YgYSBwcm9wIGxpa2UgaW4ganN4KCkgY2FsbHMuXG4gKlxuICogQWxzbyBub3RlIHRoYXQgdGhpcyBkaXNhYmxlcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGg8VFlQRSBleHRlbmRzIHN0cmluZyB8IEZ1bmN0aW9uQ29tcG9uZW50PFBST1BTPiwgUFJPUFMgZXh0ZW5kcyB7fSA9IHt9PihcbiAgdHlwZTogVFlQRSxcbiAgcHJvcHM/OiBQUk9QUyB8IG51bGwsXG4gIC4uLmNoaWxkcmVuOiBhbnlbXVxuKTogSlNYTm9kZTxUWVBFPiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQcm9wczogYW55ID0ge1xuICAgIGNoaWxkcmVuOiBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGZsYXR0ZW5BcnJheShjaGlsZHJlbikgOiBudWxsLFxuICB9O1xuXG4gIGxldCBrZXk6IGFueSA9IG51bGw7XG5cbiAgZm9yIChjb25zdCBpIGluIHByb3BzKSB7XG4gICAgaWYgKGkgPT0gJ2tleScpIHtcbiAgICAgIGtleSA9IChwcm9wcyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9ybWFsaXplZFByb3BzW2ldID0gKHByb3BzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2ldO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgJiYgIWtleSAmJiAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnIGluIG5vcm1hbGl6ZWRQcm9wcykge1xuICAgIGtleSA9ICdpbm5lcmh0bWwnO1xuICB9XG4gIHJldHVybiBfanN4U3BsaXQodHlwZSwgcHJvcHMhLCBudWxsLCBub3JtYWxpemVkUHJvcHMuY2hpbGRyZW4sIDAsIGtleSk7XG59XG5cbmV4cG9ydCBjb25zdCBpc1Byb3BzUHJveHkgPSAob2JqOiBhbnkpOiBvYmogaXMgUHJvcHNQcm94eSA9PiB7XG4gIHJldHVybiBvYmogJiYgb2JqW19WQVJfUFJPUFNdICE9PSB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgSlNYTm9kZUltcGw8VD4gaW1wbGVtZW50cyBKU1hOb2RlSW50ZXJuYWw8VD4ge1xuICBkZXY/OiBEZXZKU1g7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0eXBlOiBULFxuICAgIHB1YmxpYyB2YXJQcm9wczogUHJvcHMsXG4gICAgcHVibGljIGNvbnN0UHJvcHM6IFByb3BzIHwgbnVsbCxcbiAgICBwdWJsaWMgY2hpbGRyZW46IEpTWENoaWxkcmVuLFxuICAgIHB1YmxpYyBmbGFnczogbnVtYmVyLFxuICAgIHB1YmxpYyBrZXk6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICkge1xuICAgIGlmIChxRGV2KSB7XG4gICAgICBpZiAodHlwZW9mIHZhclByb3BzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEpTWE5vZGVJbXBsOiB2YXJQcm9wcyBtdXN0IGJlIG9iamVjdHM6IGAgKyBKU09OLnN0cmluZ2lmeSh2YXJQcm9wcykpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb25zdFByb3BzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEpTWE5vZGVJbXBsOiBjb25zdFByb3BzIG11c3QgYmUgb2JqZWN0czogYCArIEpTT04uc3RyaW5naWZ5KGNvbnN0UHJvcHMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wcm94eTogUHJvcHMgfCBudWxsID0gbnVsbDtcbiAgZ2V0IHByb3BzKCk6IFQgZXh0ZW5kcyBGdW5jdGlvbkNvbXBvbmVudDxpbmZlciBQUk9QUz4gPyBQUk9QUyA6IFByb3BzIHtcbiAgICAvLyBXZSB1c2UgYSBwcm94eSB0byBtZXJnZSB0aGUgY29uc3RQcm9wcyBpZiB0aGV5IGV4aXN0IGFuZCB0byBldmFsdWF0ZSBkZXJpdmVkIHNpZ25hbHNcbiAgICBpZiAoIXRoaXMuX3Byb3h5KSB7XG4gICAgICB0aGlzLl9wcm94eSA9IGNyZWF0ZVByb3BzUHJveHkodGhpcy52YXJQcm9wcywgdGhpcy5jb25zdFByb3BzLCB0aGlzLmNoaWxkcmVuKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Byb3h5IGFzIHR5cGVvZiB0aGlzLnByb3BzO1xuICB9XG59XG5cbi8qKiBAcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IFZpcnR1YWw6IEZ1bmN0aW9uQ29tcG9uZW50PHtcbiAgY2hpbGRyZW4/OiBKU1hDaGlsZHJlbjtcbiAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw/OiBzdHJpbmc7XG4gIFtPblJlbmRlclByb3BdPzogUVJMSW50ZXJuYWw8T25SZW5kZXJGbjxhbnk+PjtcbiAgW1FTbG90XT86IHN0cmluZztcbiAgW1FTbG90U10/OiBzdHJpbmc7XG4gIHByb3BzPzogUHJvcHM7XG4gIFtRU2NvcGVkU3R5bGVdPzogc3RyaW5nO1xuICBbRUxFTUVOVF9JRF0/OiBzdHJpbmc7XG59PiA9IChwcm9wczogYW55KSA9PiBwcm9wcy5jaGlsZHJlbjtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBSZW5kZXJPbmNlOiBGdW5jdGlvbkNvbXBvbmVudDx7XG4gIGNoaWxkcmVuPzogdW5rbm93bjtcbiAga2V5Pzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcbn0+ID0gKHByb3BzOiBhbnksIGtleSkgPT4ge1xuICByZXR1cm4gbmV3IEpTWE5vZGVJbXBsKFZpcnR1YWwsIEVNUFRZX09CSiwgbnVsbCwgcHJvcHMuY2hpbGRyZW4sIDIsIGtleSk7XG59O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgaXNKU1hOb2RlID0gPFQ+KG46IHVua25vd24pOiBuIGlzIEpTWE5vZGVJbnRlcm5hbDxUPiA9PiB7XG4gIGlmIChxRGV2KSB7XG4gICAgaWYgKG4gaW5zdGFuY2VvZiBKU1hOb2RlSW1wbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChpc09iamVjdChuKSAmJiAna2V5JyBpbiBuICYmICdwcm9wcycgaW4gbiAmJiAndHlwZScgaW4gbikge1xuICAgICAgbG9nV2FybihgRHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBvZiBcIkpTWE5vZGVcIiBmb3VuZGApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbiBpbnN0YW5jZW9mIEpTWE5vZGVJbXBsO1xuICB9XG59O1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEZyYWdtZW50OiBGdW5jdGlvbkNvbXBvbmVudDx7IGNoaWxkcmVuPzogYW55OyBrZXk/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIH0+ID0gKFxuICBwcm9wc1xuKSA9PiBwcm9wcy5jaGlsZHJlbjtcblxuaW50ZXJmYWNlIEpzeERldk9wdHMge1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBsaW5lTnVtYmVyOiBudW1iZXI7XG4gIGNvbHVtbk51bWJlcjogbnVtYmVyO1xufVxuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IGpzeERFViA9IDxUIGV4dGVuZHMgc3RyaW5nIHwgRnVuY3Rpb25Db21wb25lbnQ8UHJvcHM+PihcbiAgdHlwZTogVCxcbiAgcHJvcHM6IFQgZXh0ZW5kcyBGdW5jdGlvbkNvbXBvbmVudDxpbmZlciBQUk9QUz4gPyBQUk9QUyA6IFByb3BzLFxuICBrZXk6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsXG4gIF9pc1N0YXRpYzogYm9vbGVhbixcbiAgb3B0czogSnN4RGV2T3B0cyxcbiAgX2N0eDogdW5rbm93blxuKTogSlNYTm9kZTxUPiA9PiB7XG4gIGNvbnN0IHByb2Nlc3NlZCA9IGtleSA9PSBudWxsID8gbnVsbCA6IFN0cmluZyhrZXkpO1xuICBjb25zdCBjaGlsZHJlbiA9IHVudHJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGMgPSBwcm9wcy5jaGlsZHJlbjtcbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkZWxldGUgcHJvcHMuY2hpbGRyZW47XG4gICAgfVxuICAgIHJldHVybiBjO1xuICB9KSBhcyBKU1hDaGlsZHJlbjtcbiAgaWYgKGlzU3RyaW5nKHR5cGUpKSB7XG4gICAgaWYgKCdjbGFzc05hbWUnIGluIHByb3BzKSB7XG4gICAgICAocHJvcHMgYXMgYW55KS5jbGFzcyA9IHByb3BzLmNsYXNzTmFtZTtcbiAgICAgIGRlbGV0ZSBwcm9wcy5jbGFzc05hbWU7XG4gICAgICBpZiAocURldikge1xuICAgICAgICBsb2dPbmNlV2FybignanN4OiBgY2xhc3NOYW1lYCBpcyBkZXByZWNhdGVkLiBVc2UgYGNsYXNzYCBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBub2RlID0gbmV3IEpTWE5vZGVJbXBsPFQ+KHR5cGUsIHByb3BzLCBudWxsLCBjaGlsZHJlbiwgMCwgcHJvY2Vzc2VkKTtcbiAgbm9kZS5kZXYgPSB7XG4gICAgc3RhY2s6IG5ldyBFcnJvcigpLnN0YWNrLFxuICAgIC4uLm9wdHMsXG4gIH07XG4gIHNlYWwobm9kZSk7XG4gIHJldHVybiBub2RlO1xufTtcblxuZXhwb3J0IHR5cGUgeyBRd2lrSlNYIGFzIEpTWCB9O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvcHNQcm94eShcbiAgdmFyUHJvcHM6IFByb3BzLFxuICBjb25zdFByb3BzOiBQcm9wcyB8IG51bGwsXG4gIGNoaWxkcmVuPzogSlNYQ2hpbGRyZW4gfCB1bmRlZmluZWRcbik6IFByb3BzIHtcbiAgcmV0dXJuIG5ldyBQcm94eTxhbnk+KHt9LCBuZXcgUHJvcHNQcm94eUhhbmRsZXIodmFyUHJvcHMsIGNvbnN0UHJvcHMsIGNoaWxkcmVuKSk7XG59XG5cbmNsYXNzIFByb3BzUHJveHlIYW5kbGVyIGltcGxlbWVudHMgUHJveHlIYW5kbGVyPGFueT4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlICR2YXJQcm9wcyQ6IFByb3BzLFxuICAgIHByaXZhdGUgJGNvbnN0UHJvcHMkOiBQcm9wcyB8IG51bGwsXG4gICAgcHJpdmF0ZSAkY2hpbGRyZW4kOiBKU1hDaGlsZHJlbiB8IHVuZGVmaW5lZFxuICApIHt9XG4gIGdldChfOiBhbnksIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgIC8vIGVzY2FwZSBoYXRjaCB0byBnZXQgdGhlIHNlcGFyYXRlZCBwcm9wcyBmcm9tIGEgY29tcG9uZW50XG4gICAgaWYgKHByb3AgPT09IF9DT05TVF9QUk9QUykge1xuICAgICAgcmV0dXJuIHRoaXMuJGNvbnN0UHJvcHMkO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gX1ZBUl9QUk9QUykge1xuICAgICAgcmV0dXJuIHRoaXMuJHZhclByb3BzJDtcbiAgICB9XG4gICAgaWYgKHRoaXMuJGNoaWxkcmVuJCAhPSBudWxsICYmIHByb3AgPT09ICdjaGlsZHJlbicpIHtcbiAgICAgIHJldHVybiB0aGlzLiRjaGlsZHJlbiQ7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID1cbiAgICAgIHRoaXMuJGNvbnN0UHJvcHMkICYmIHByb3AgaW4gdGhpcy4kY29uc3RQcm9wcyRcbiAgICAgICAgPyB0aGlzLiRjb25zdFByb3BzJFtwcm9wIGFzIHN0cmluZ11cbiAgICAgICAgOiB0aGlzLiR2YXJQcm9wcyRbcHJvcCBhcyBzdHJpbmddO1xuICAgIC8vIGEgcHJveGllZCB2YWx1ZSB0aGF0IHRoZSBvcHRpbWl6ZXIgbWFkZVxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFdyYXBwZWRTaWduYWwgJiYgdmFsdWUuJGZsYWdzJCAmIFdyYXBwZWRTaWduYWxGbGFncy5VTldSQVBcbiAgICAgID8gdmFsdWUudmFsdWVcbiAgICAgIDogdmFsdWU7XG4gIH1cbiAgc2V0KF86IGFueSwgcHJvcDogc3RyaW5nIHwgc3ltYm9sLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKHByb3AgPT09IF9DT05TVF9QUk9QUykge1xuICAgICAgdGhpcy4kY29uc3RQcm9wcyQgPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gX1ZBUl9QUk9QUykge1xuICAgICAgdGhpcy4kdmFyUHJvcHMkID0gdmFsdWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuJGNvbnN0UHJvcHMkICYmIHByb3AgaW4gdGhpcy4kY29uc3RQcm9wcyQpIHtcbiAgICAgIHRoaXMuJGNvbnN0UHJvcHMkW3Byb3AgYXMgc3RyaW5nXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiR2YXJQcm9wcyRbcHJvcCBhcyBzdHJpbmddID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGRlbGV0ZVByb3BlcnR5KF86IGFueSwgcHJvcDogc3RyaW5nIHwgc3ltYm9sKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgZGlkRGVsZXRlID0gZGVsZXRlIHRoaXMuJHZhclByb3BzJFtwcm9wXTtcbiAgICBpZiAodGhpcy4kY29uc3RQcm9wcyQpIHtcbiAgICAgIGRpZERlbGV0ZSA9IGRlbGV0ZSB0aGlzLiRjb25zdFByb3BzJFtwcm9wIGFzIHN0cmluZ10gfHwgZGlkRGVsZXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy4kY2hpbGRyZW4kICE9IG51bGwgJiYgcHJvcCA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgdGhpcy4kY2hpbGRyZW4kID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGRpZERlbGV0ZTtcbiAgfVxuICBoYXMoXzogYW55LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpIHtcbiAgICBjb25zdCBoYXNQcm9wID1cbiAgICAgIChwcm9wID09PSAnY2hpbGRyZW4nICYmIHRoaXMuJGNoaWxkcmVuJCAhPSBudWxsKSB8fFxuICAgICAgcHJvcCA9PT0gX0NPTlNUX1BST1BTIHx8XG4gICAgICBwcm9wID09PSBfVkFSX1BST1BTIHx8XG4gICAgICBwcm9wIGluIHRoaXMuJHZhclByb3BzJCB8fFxuICAgICAgKHRoaXMuJGNvbnN0UHJvcHMkID8gcHJvcCBpbiB0aGlzLiRjb25zdFByb3BzJCA6IGZhbHNlKTtcbiAgICByZXR1cm4gaGFzUHJvcDtcbiAgfVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXzogYW55LCBwOiBzdHJpbmcgfCBzeW1ib2wpOiBQcm9wZXJ0eURlc2NyaXB0b3IgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlID1cbiAgICAgIHAgPT09ICdjaGlsZHJlbicgJiYgdGhpcy4kY2hpbGRyZW4kICE9IG51bGxcbiAgICAgICAgPyB0aGlzLiRjaGlsZHJlbiRcbiAgICAgICAgOiB0aGlzLiRjb25zdFByb3BzJCAmJiBwIGluIHRoaXMuJGNvbnN0UHJvcHMkXG4gICAgICAgICAgPyB0aGlzLiRjb25zdFByb3BzJFtwIGFzIHN0cmluZ11cbiAgICAgICAgICA6IHRoaXMuJHZhclByb3BzJFtwIGFzIHN0cmluZ107XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgfTtcbiAgfVxuICBvd25LZXlzKCkge1xuICAgIGNvbnN0IG91dCA9IE9iamVjdC5rZXlzKHRoaXMuJHZhclByb3BzJCk7XG4gICAgaWYgKHRoaXMuJGNoaWxkcmVuJCAhPSBudWxsICYmIG91dC5pbmRleE9mKCdjaGlsZHJlbicpID09PSAtMSkge1xuICAgICAgb3V0LnB1c2goJ2NoaWxkcmVuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLiRjb25zdFByb3BzJCkge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy4kY29uc3RQcm9wcyQpIHtcbiAgICAgICAgaWYgKG91dC5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgb3V0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG59XG5cbi8qKlxuICogSW5zdGVhZCBvZiB1c2luZyBQcm9wc1Byb3h5SGFuZGxlciBnZXR0ZXIgKHdoaWNoIGNvdWxkIGNyZWF0ZSBhIGNvbXBvbmVudC1sZXZlbCBzdWJzY3JpcHRpb24pLlxuICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSBwcm9wcyBkaXJlY3RseSBmcm9tIGEgY29uc3Qgb3IgdmFyIHByb3BzLlxuICovXG5leHBvcnQgY29uc3QgZGlyZWN0R2V0UHJvcHNQcm94eVByb3AgPSA8VCwgSlNYPihqc3g6IEpTWE5vZGVJbnRlcm5hbDxKU1g+LCBwcm9wOiBzdHJpbmcpOiBUID0+IHtcbiAgcmV0dXJuIChcbiAgICBqc3guY29uc3RQcm9wcyAmJiBwcm9wIGluIGpzeC5jb25zdFByb3BzID8ganN4LmNvbnN0UHJvcHNbcHJvcF0gOiBqc3gudmFyUHJvcHNbcHJvcF1cbiAgKSBhcyBUO1xufTtcblxuZXhwb3J0IHsganN4IGFzIGpzeHMgfTtcbiJdfQ==","import { isQrl } from '../server/prefetch-strategy';\nimport { isJSXNode } from './shared/jsx/jsx-runtime';\nimport { isTask } from './use/use-task';\nimport { vnode_getProp, vnode_isVNode } from './client/vnode';\nimport { ComputedSignalImpl, WrappedSignal, isSignal } from './signal/signal';\nimport { isStore } from './signal/store';\nimport { DEBUG_TYPE } from './shared/types';\nconst stringifyPath = [];\nexport function qwikDebugToString(value) {\n    if (value === null) {\n        return 'null';\n    }\n    else if (value === undefined) {\n        return 'undefined';\n    }\n    else if (typeof value === 'string') {\n        return '\"' + value + '\"';\n    }\n    else if (typeof value === 'number' || typeof value === 'boolean') {\n        return String(value);\n    }\n    else if (isTask(value)) {\n        return `Task(${qwikDebugToString(value.$qrl$)})`;\n    }\n    else if (isQrl(value)) {\n        return `Qrl(${value.$symbol$})`;\n    }\n    else if (typeof value === 'object' || typeof value === 'function') {\n        if (stringifyPath.includes(value)) {\n            return '*';\n        }\n        if (stringifyPath.length > 10) {\n            // debugger;\n        }\n        try {\n            stringifyPath.push(value);\n            if (Array.isArray(value)) {\n                if (vnode_isVNode(value)) {\n                    return '(' + vnode_getProp(value, DEBUG_TYPE, null) + ')';\n                }\n                else {\n                    return value.map(qwikDebugToString);\n                }\n            }\n            else if (isSignal(value)) {\n                if (value instanceof WrappedSignal) {\n                    return 'WrappedSignal';\n                }\n                else if (value instanceof ComputedSignalImpl) {\n                    return 'ComputedSignal';\n                }\n                else {\n                    return 'Signal';\n                }\n            }\n            else if (isStore(value)) {\n                return 'Store';\n            }\n            else if (isJSXNode(value)) {\n                return jsxToString(value);\n            }\n        }\n        finally {\n            stringifyPath.pop();\n        }\n    }\n    return value;\n}\nexport const pad = (text, prefix) => {\n    return String(text)\n        .split('\\n')\n        .map((line, idx) => (idx ? prefix : '') + line)\n        .join('\\n');\n};\nexport const jsxToString = (value) => {\n    if (isJSXNode(value)) {\n        let str = '<' + value.type;\n        if (value.props) {\n            for (const [key, val] of Object.entries(value.props)) {\n                str += ' ' + key + '=' + qwikDebugToString(val);\n            }\n            const children = value.children;\n            if (children != null) {\n                str += '>';\n                if (Array.isArray(children)) {\n                    children.forEach((child) => {\n                        str += jsxToString(child);\n                    });\n                }\n                else {\n                    str += jsxToString(children);\n                }\n                str += '</' + value.type + '>';\n            }\n            else {\n                str += '/>';\n            }\n        }\n        return str;\n    }\n    else {\n        return String(value);\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsTUFBTSxhQUFhLEdBQVUsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFVO0lBQzFDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ25CLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7U0FBTSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMvQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO1NBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNyQyxPQUFPLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQzNCLENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNuRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixP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QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2hDLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNyQixHQUFHLElBQUksR0FBRyxDQUFDO2dCQUNYLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUM1QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ3pCLEdBQUcsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sQ0FBQztvQkFDTixHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvQixDQUFDO2dCQUNELEdBQUcsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7WUFDakMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsSUFBSSxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNRcmwgfSBmcm9tICcuLi9zZXJ2ZXIvcHJlZmV0Y2gtc3RyYXRlZ3knO1xuaW1wb3J0IHsgaXNKU1hOb2RlIH0gZnJvbSAnLi9zaGFyZWQvanN4L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGlzVGFzayB9IGZyb20gJy4vdXNlL3VzZS10YXNrJztcbmltcG9ydCB7IHZub2RlX2dldFByb3AsIHZub2RlX2lzVk5vZGUgfSBmcm9tICcuL2NsaWVudC92bm9kZSc7XG5pbXBvcnQgeyBDb21wdXRlZFNpZ25hbEltcGwsIFdyYXBwZWRTaWduYWwsIGlzU2lnbmFsIH0gZnJvbSAnLi9zaWduYWwvc2lnbmFsJztcbmltcG9ydCB7IGlzU3RvcmUgfSBmcm9tICcuL3NpZ25hbC9zdG9yZSc7XG5pbXBvcnQgeyBERUJVR19UWVBFIH0gZnJvbSAnLi9zaGFyZWQvdHlwZXMnO1xuXG5jb25zdCBzdHJpbmdpZnlQYXRoOiBhbnlbXSA9IFtdO1xuZXhwb3J0IGZ1bmN0aW9uIHF3aWtEZWJ1Z1RvU3RyaW5nKHZhbHVlOiBhbnkpOiBhbnkge1xuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAnXCInICsgdmFsdWUgKyAnXCInO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChpc1Rhc2sodmFsdWUpKSB7XG4gICAgcmV0dXJuIGBUYXNrKCR7cXdpa0RlYnVnVG9TdHJpbmcodmFsdWUuJHFybCQpfSlgO1xuICB9IGVsc2UgaWYgKGlzUXJsKHZhbHVlKSkge1xuICAgIHJldHVybiBgUXJsKCR7dmFsdWUuJHN5bWJvbCR9KWA7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoc3RyaW5naWZ5UGF0aC5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnKic7XG4gICAgfVxuICAgIGlmIChzdHJpbmdpZnlQYXRoLmxlbmd0aCA+IDEwKSB7XG4gICAgICAvLyBkZWJ1Z2dlcjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHN0cmluZ2lmeVBhdGgucHVzaCh2YWx1ZSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKHZub2RlX2lzVk5vZGUodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuICcoJyArIHZub2RlX2dldFByb3AodmFsdWUsIERFQlVHX1RZUEUsIG51bGwpICsgJyknO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAocXdpa0RlYnVnVG9TdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzU2lnbmFsKHZhbHVlKSkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBXcmFwcGVkU2lnbmFsKSB7XG4gICAgICAgICAgcmV0dXJuICdXcmFwcGVkU2lnbmFsJztcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENvbXB1dGVkU2lnbmFsSW1wbCkge1xuICAgICAgICAgIHJldHVybiAnQ29tcHV0ZWRTaWduYWwnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnU2lnbmFsJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1N0b3JlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gJ1N0b3JlJztcbiAgICAgIH0gZWxzZSBpZiAoaXNKU1hOb2RlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4ganN4VG9TdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzdHJpbmdpZnlQYXRoLnBvcCgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBjb25zdCBwYWQgPSAodGV4dDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZykgPT4ge1xuICByZXR1cm4gU3RyaW5nKHRleHQpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUsIGlkeCkgPT4gKGlkeCA/IHByZWZpeCA6ICcnKSArIGxpbmUpXG4gICAgLmpvaW4oJ1xcbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGpzeFRvU3RyaW5nID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICBpZiAoaXNKU1hOb2RlKHZhbHVlKSkge1xuICAgIGxldCBzdHIgPSAnPCcgKyB2YWx1ZS50eXBlO1xuICAgIGlmICh2YWx1ZS5wcm9wcykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlLnByb3BzKSkge1xuICAgICAgICBzdHIgKz0gJyAnICsga2V5ICsgJz0nICsgcXdpa0RlYnVnVG9TdHJpbmcodmFsKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdmFsdWUuY2hpbGRyZW47XG4gICAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgICBzdHIgKz0gJz4nO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgc3RyICs9IGpzeFRvU3RyaW5nKGNoaWxkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgKz0ganN4VG9TdHJpbmcoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSAnPC8nICsgdmFsdWUudHlwZSArICc+JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciArPSAnLz4nO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG59O1xuIl19","export const mergeMaps = (map1, map2) => {\n    for (const [k, v] of map2) {\n        map1.set(k, v);\n    }\n    return map1;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvbWFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBTyxJQUFlLEVBQUUsSUFBZSxFQUFhLEVBQUU7SUFDN0UsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBtZXJnZU1hcHMgPSA8SywgVj4obWFwMTogTWFwPEssIFY+LCBtYXAyOiBNYXA8SywgVj4pOiBNYXA8SywgVj4gPT4ge1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBtYXAyKSB7XG4gICAgbWFwMS5zZXQoaywgdik7XG4gIH1cbiAgcmV0dXJuIG1hcDE7XG59O1xuIl19","/**\n * @file\n *\n *   VNode is a DOM like API for walking the DOM but it:\n *\n *   1. Encodes virtual nodes which don't exist in the DOM\n *   2. Can serialize as part of SSR and than deserialize on the client.\n *\n *   # Virtual\n *\n *   You can think of a Virtual node just like an additional `<div>` in that it groups related child\n *   nodes together. But unlike a `<div>` which has a real DOM node and hence implications for CSS,\n *   Virtual nodes have no DOM impact, they are invisible.\n *\n *   # Portal\n *\n *   Two Virtual nodes can be linked together to form a Portal. Portals are useful for projecting\n *   content or just rendering content in a different location in the tree, while maintaining a\n *   logical relationship.\n *\n *   Portals have:\n *\n *   - Portal Source: A Virtual node which can refer to one ore more Destination Portals by name.\n *   - Destination Portal: A Virtual node which acts as a destination but also has a pointer back to the\n *       Portal Source\n *\n *   ## Example:\n *\n *   Given this code:\n *\n *   ```typescript\n *   const Parent = component$(() => {\n *     return (\n *       <Child>\n *         Projection Content\n *         <span q:slot=\"secondary\">Secondary Content</span>\n *         <span q:slot=\"other\">Other Content</span>\n *       </Child>\n *     };\n *   });\n *\n *   const Child = component$(() => {\n *     return (\n *       <div>\n *         <Slot>Default Primary</Slot>\n *         <Slot name=\"secondary\">Default Secondary</Slot>\n *       </div>\n *     );\n *   });\n *\n *   render(<body><main><Parent/></main><body>);\n * ```\n *\n *   Will render like so:\n *\n *   ```html\n *   <body>\n *     <main>\n *       <Virtual Parent q:portal=\":3A;secondary:3B;other:5A\" q:id=\"2A\">\n *         <Virtual Child>\n *           <div>\n *             <Virtual Slot q:id=\"3A\" q:portal=\"^:2A;:3A\"> Projection Content </Virtual>\n *             <Virtual Slot q:id=\"3B\" q:portal=\"^:2A;:3B\">\n *               <span q:slot=\"secondary\">Secondary Content</span>\n *             </Virtual>\n *           </div>\n *         </Virtual>\n *       </Virtual>\n *     </main>\n *     <q:template>\n *       <Virtual q:portal=\"^:2A\" q:id=\"5A\">\n *         <span q:slot=\"other\">Other Content</span>\n *       </Virtual>\n *       <Virtual q:portal=\"^:2A\" q:id=\"3A\">\n *         Default Primary\n *       </Virtual>\n *       <Virtual q:portal=\"^:2A\" q:id=\"3B\">\n *         Default Secondary\n *       </Virtual>\n *     <q:template>\n *   </body>\n * ```\n *\n *   Explanation:\n *\n *   - `q:portal=\":3A;secondary:3B;other:5A\"`\n *\n *       - Name: ``; Ref: `3A` - Where the default content went.\n *       - Name: `secondary`; Ref: `3B` - Where the 'secondary' content went.\n *       - Name: `other`; Ref: `%A` - Where the `other` content went. (Notice in this case the content is\n *               left over and os it ends up en the `q:templates`. We can share one '<q:template>`\n *               for all left over content.)\n *   - `q:portal=\"^:2A;:3A\"`\n *\n *       - Name: `^`; Ref: `2A` - Special pointer to the parent portal\n *       - Name: ``; Ref: `3A` - Location of the default content in case there is nothing projected here.\n *\n *   ## Rendering\n *\n *   During SSR, the rendered can delay rendering the JSX nodes until correct portal comes up. The ID\n *   system is already can make lazy references to the Nodes.\n *\n *   Client side rendering does not need to deal with IDs or `<q:template>` as un-rendered vNodes do\n *   not need to be serialized into DOM, and can remain on heap.\n *\n *   ## Context\n *\n *   When looking up context it is possible to follow you real render parents or follow the portals.\n *   All information is encoded in the portals.\n *\n *   ## Slot Projection\n *\n *   The ultimate user of portals is Slot projection. But the vNode do not understand slots, rather\n *   they understand portal primitives which makes Slot implementation much simpler.\n *\n *   NOTE: The portals need to have IDs during serialization only. Once runtime takes over, there is\n *   no need to have IDs or to write overflow to the `<q:template>`\n */\nimport { isDev } from '@qwik.dev/core/build';\nimport { qwikDebugToString } from '../debug';\nimport { assertDefined, assertEqual, assertFalse, assertTrue } from '../shared/error/assert';\nimport { qError } from '../shared/error/error';\nimport { DEBUG_TYPE, VirtualTypeName, } from '../shared/types';\nimport { isText } from '../shared/utils/element';\nimport { dangerouslySetInnerHTML, ELEMENT_ID, ELEMENT_KEY, ELEMENT_PROPS, ELEMENT_SEQ, ELEMENT_SEQ_IDX, OnRenderProp, Q_PROPS_SEPARATOR, QContainerAttr, QContainerAttrEnd, QContainerIsland, QContainerIslandEnd, QCtxAttr, QIgnore, QIgnoreEnd, QScopedStyle, QSlot, QSlotParent, QStyle, QStylesAllSelector, } from '../shared/utils/markers';\nimport { isHtmlElement } from '../shared/utils/types';\nimport { VNodeDataChar } from '../shared/vnode-data-types';\nimport { getDomContainer } from './dom-container';\nimport { mapApp_findIndx, mapArray_get, mapArray_set } from './util-mapArray';\nimport { vnode_getDomChildrenWithCorrectNamespacesToInsert, vnode_getElementNamespaceFlags, } from './vnode-namespace';\nimport { mergeMaps } from '../shared/utils/maps';\nimport { _EFFECT_BACK_REF } from '../signal/flags';\n//////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const vnode_newElement = (element, elementName) => {\n    assertEqual(fastNodeType(element), 1 /* ELEMENT_NODE */, 'Expecting element node.');\n    const vnode = VNodeArray.createElement(1 /* VNodeFlags.Element */ | 8 /* VNodeFlags.Inflated */ | (-1 << 8 /* VNodeFlagsIndex.shift */), // Flag\n    null, null, null, null, null, element, elementName);\n    assertTrue(vnode_isElementVNode(vnode), 'Incorrect format of ElementVNode.');\n    assertFalse(vnode_isTextVNode(vnode), 'Incorrect format of ElementVNode.');\n    assertFalse(vnode_isVirtualVNode(vnode), 'Incorrect format of ElementVNode.');\n    element.vNode = new WeakRef(vnode);\n    return vnode;\n};\nexport const vnode_newUnMaterializedElement = (element) => {\n    assertEqual(fastNodeType(element), 1 /* ELEMENT_NODE */, 'Expecting element node.');\n    const vnode = VNodeArray.createElement(1 /* VNodeFlags.Element */ | (-1 << 8 /* VNodeFlagsIndex.shift */), // Flag\n    null, null, null, undefined, undefined, element, undefined);\n    assertTrue(vnode_isElementVNode(vnode), 'Incorrect format of ElementVNode.');\n    assertFalse(vnode_isTextVNode(vnode), 'Incorrect format of ElementVNode.');\n    assertFalse(vnode_isVirtualVNode(vnode), 'Incorrect format of ElementVNode.');\n    element.vNode = new WeakRef(vnode);\n    return vnode;\n};\nexport const vnode_newSharedText = (previousTextNode, sharedTextNode, textContent) => {\n    sharedTextNode &&\n        assertEqual(fastNodeType(sharedTextNode), 3 /* TEXT_NODE */, 'Expecting element node.');\n    const vnode = VNodeArray.createText(4 /* VNodeFlags.Text */ | (-1 << 8 /* VNodeFlagsIndex.shift */), // Flag\n    null, // Parent\n    previousTextNode, // Previous TextNode (usually first child)\n    null, // Next sibling\n    sharedTextNode, // SharedTextNode\n    textContent // Text Content\n    );\n    assertFalse(vnode_isElementVNode(vnode), 'Incorrect format of TextVNode.');\n    assertTrue(vnode_isTextVNode(vnode), 'Incorrect format of TextVNode.');\n    assertFalse(vnode_isVirtualVNode(vnode), 'Incorrect format of TextVNode.');\n    return vnode;\n};\nexport const vnode_newText = (textNode, textContent) => {\n    const vnode = VNodeArray.createText(4 /* VNodeFlags.Text */ | 8 /* VNodeFlags.Inflated */ | (-1 << 8 /* VNodeFlagsIndex.shift */), // Flags\n    null, // Parent\n    null, // No previous sibling\n    null, // We may have a next sibling.\n    textNode, // TextNode\n    textContent // Text Content\n    );\n    assertEqual(fastNodeType(textNode), 3 /* TEXT_NODE */, 'Expecting element node.');\n    assertFalse(vnode_isElementVNode(vnode), 'Incorrect format of TextVNode.');\n    assertTrue(vnode_isTextVNode(vnode), 'Incorrect format of TextVNode.');\n    assertFalse(vnode_isVirtualVNode(vnode), 'Incorrect format of TextVNode.');\n    return vnode;\n};\nexport const vnode_newVirtual = () => {\n    const vnode = VNodeArray.createVirtual(2 /* VNodeFlags.Virtual */ | (-1 << 8 /* VNodeFlagsIndex.shift */), // Flags\n    null, null, null, null, null);\n    assertFalse(vnode_isElementVNode(vnode), 'Incorrect format of TextVNode.');\n    assertFalse(vnode_isTextVNode(vnode), 'Incorrect format of TextVNode.');\n    assertTrue(vnode_isVirtualVNode(vnode), 'Incorrect format of TextVNode.');\n    return vnode;\n};\n//////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const vnode_isVNode = (vNode) => {\n    return vNode instanceof VNodeArray;\n};\nexport const vnode_isElementVNode = (vNode) => {\n    assertDefined(vNode, 'Missing vNode');\n    const flag = vNode[0 /* VNodeProps.flags */];\n    return (flag & 1 /* VNodeFlags.Element */) === 1 /* VNodeFlags.Element */;\n};\nexport const vnode_isElementOrTextVNode = (vNode) => {\n    assertDefined(vNode, 'Missing vNode');\n    const flag = vNode[0 /* VNodeProps.flags */];\n    return (flag & 5 /* VNodeFlags.ELEMENT_OR_TEXT_MASK */) !== 0;\n};\nexport const vnode_isElementOrVirtualVNode = (vNode) => {\n    assertDefined(vNode, 'Missing vNode');\n    const flag = vNode[0 /* VNodeProps.flags */];\n    return (flag & 3 /* VNodeFlags.ELEMENT_OR_VIRTUAL_MASK */) !== 0;\n};\nexport const vnode_isMaterialized = (vNode) => {\n    assertDefined(vNode, 'Missing vNode');\n    const flag = vNode[0 /* VNodeProps.flags */];\n    return ((flag & 1 /* VNodeFlags.Element */) === 1 /* VNodeFlags.Element */ &&\n        vNode[4 /* ElementVNodeProps.firstChild */] !== undefined &&\n        vNode[5 /* ElementVNodeProps.lastChild */] !== undefined);\n};\nexport const vnode_isTextVNode = (vNode) => {\n    assertDefined(vNode, 'Missing vNode');\n    const flag = vNode[0 /* VNodeProps.flags */];\n    return (flag & 4 /* VNodeFlags.Text */) === 4 /* VNodeFlags.Text */;\n};\nexport const vnode_isVirtualVNode = (vNode) => {\n    assertDefined(vNode, 'Missing vNode');\n    const flag = vNode[0 /* VNodeProps.flags */];\n    return (flag & 2 /* VNodeFlags.Virtual */) === 2 /* VNodeFlags.Virtual */;\n};\nexport const vnode_isProjection = (vNode) => {\n    assertDefined(vNode, 'Missing vNode');\n    const flag = vNode[0 /* VNodeProps.flags */];\n    return ((flag & 2 /* VNodeFlags.Virtual */) === 2 /* VNodeFlags.Virtual */ &&\n        vnode_getProp(vNode, QSlot, null) !== null);\n};\nconst ensureTextVNode = (vNode) => {\n    assertTrue(vnode_isTextVNode(vNode), 'Expecting TextVNode was: ' + vnode_getNodeTypeName(vNode));\n    return vNode;\n};\nconst ensureElementOrVirtualVNode = (vNode) => {\n    assertDefined(vNode, 'Missing vNode');\n    assertTrue((vNode[0 /* VNodeProps.flags */] & 3 /* VNodeFlags.ELEMENT_OR_VIRTUAL_MASK */) !== 0, 'Expecting ElementVNode or VirtualVNode was: ' + vnode_getNodeTypeName(vNode));\n};\nexport const ensureElementVNode = (vNode) => {\n    assertTrue(vnode_isElementVNode(vNode), 'Expecting ElementVNode was: ' + vnode_getNodeTypeName(vNode));\n    return vNode;\n};\nexport const vnode_getNodeTypeName = (vNode) => {\n    if (vNode) {\n        const flags = vNode[0 /* VNodeProps.flags */];\n        switch (flags & 7 /* VNodeFlags.TYPE_MASK */) {\n            case 1 /* VNodeFlags.Element */:\n                return 'Element';\n            case 2 /* VNodeFlags.Virtual */:\n                return 'Virtual';\n            case 4 /* VNodeFlags.Text */:\n                return 'Text';\n        }\n    }\n    return '<unknown>';\n};\nexport const vnode_ensureElementInflated = (vnode) => {\n    const flags = vnode[0 /* VNodeProps.flags */];\n    if ((flags & 15 /* VNodeFlags.INFLATED_TYPE_MASK */) === 1 /* VNodeFlags.Element */) {\n        const elementVNode = vnode;\n        elementVNode[0 /* VNodeProps.flags */] ^= 8 /* VNodeFlags.Inflated */;\n        const element = elementVNode[6 /* ElementVNodeProps.element */];\n        const attributes = element.attributes;\n        const props = vnode_getProps(elementVNode);\n        for (let idx = 0; idx < attributes.length; idx++) {\n            const attr = attributes[idx];\n            const key = attr.name;\n            if (key === Q_PROPS_SEPARATOR || !key) {\n                // SVG in Domino does not support ':' so it becomes an empty string.\n                // all attributes after the ':' are considered immutable, and so we ignore them.\n                break;\n            }\n            else if (key.startsWith(QContainerAttr)) {\n                if (attr.value === \"html\" /* QContainerValue.HTML */) {\n                    mapArray_set(props, dangerouslySetInnerHTML, element.innerHTML, 0);\n                }\n                else if (attr.value === \"text\" /* QContainerValue.TEXT */ && 'value' in element) {\n                    mapArray_set(props, 'value', element.value, 0);\n                }\n            }\n            else if (!key.startsWith('on:')) {\n                const value = attr.value;\n                mapArray_set(props, key, value, 0);\n            }\n        }\n    }\n};\n/** Walks the VNode tree and materialize it using `vnode_getFirstChild`. */\nexport function vnode_walkVNode(vNode, callback) {\n    let vCursor = vNode;\n    // Depth first traversal\n    if (vnode_isTextVNode(vNode)) {\n        // Text nodes don't have subscriptions or children;\n        return;\n    }\n    let vParent = null;\n    do {\n        if (callback?.(vCursor, vParent)) {\n            return;\n        }\n        const vFirstChild = vnode_getFirstChild(vCursor);\n        if (vFirstChild) {\n            vCursor = vFirstChild;\n            continue;\n        }\n        // Out of children\n        if (vCursor === vNode) {\n            // we are where we started, this means that vNode has no children, so we are done.\n            return;\n        }\n        // Out of children, go to next sibling\n        const vNextSibling = vnode_getNextSibling(vCursor);\n        if (vNextSibling) {\n            vCursor = vNextSibling;\n            continue;\n        }\n        // Out of siblings, go to parent\n        vParent = vnode_getParent(vCursor);\n        while (vParent) {\n            if (vParent === vNode) {\n                // We are back where we started, we are done.\n                return;\n            }\n            const vNextParentSibling = vnode_getNextSibling(vParent);\n            if (vNextParentSibling) {\n                vCursor = vNextParentSibling;\n                break;\n            }\n            vParent = vnode_getParent(vParent);\n        }\n        if (vParent == null) {\n            // We are done.\n            return;\n        }\n    } while (true);\n}\nexport function vnode_getDOMChildNodes(journal, root, isVNode = false, childNodes = []) {\n    if (vnode_isElementOrTextVNode(root)) {\n        if (vnode_isTextVNode(root)) {\n            /**\n             * If we are collecting text nodes, we need to ensure that they are inflated. If not inflated\n             * we would return a single text node which represents many actual text nodes, or removing a\n             * single text node would remove many text nodes.\n             */\n            vnode_ensureTextInflated(journal, root);\n        }\n        childNodes.push(isVNode ? root : vnode_getNode(root));\n        return childNodes;\n    }\n    let vNode = vnode_getFirstChild(root);\n    while (vNode) {\n        if (vnode_isElementVNode(vNode)) {\n            childNodes.push(isVNode ? vNode : vnode_getNode(vNode));\n        }\n        else if (vnode_isTextVNode(vNode)) {\n            /**\n             * If we are collecting text nodes, we need to ensure that they are inflated. If not inflated\n             * we would return a single text node which represents many actual text nodes, or removing a\n             * single text node would remove many text nodes.\n             */\n            vnode_ensureTextInflated(journal, vNode);\n            childNodes.push(isVNode ? vNode : vnode_getNode(vNode));\n        }\n        else {\n            isVNode\n                ? vnode_getDOMChildNodes(journal, vNode, true, childNodes)\n                : vnode_getDOMChildNodes(journal, vNode, false, childNodes);\n        }\n        vNode = vnode_getNextSibling(vNode);\n    }\n    return childNodes;\n}\n/**\n * Returns the previous/next sibling but from the point of view of the DOM.\n *\n * Given:\n *\n * ```\n * <div>\n *   <>a</>\n *   <>\n *     <></>\n *     <>b</>\n *     <></>\n *   </>\n *   <>c</>\n * </div>\n * ```\n *\n * Then:\n *\n * - Next: if we start at `a` the next DOM sibling is `b`, than `c`.\n * - Previous: if we start at `c` the next DOM sibling is `b`, than `a`.\n *\n * @param vNode - Starting node\n * @param nextDirection - Direction to search true=next, false=previous\n * @param descend - If true, than we will descend into the children first.\n * @returns\n */\nconst vnode_getDomSibling = (vNode, nextDirection, descend) => {\n    const childProp = nextDirection ? 4 /* VirtualVNodeProps.firstChild */ : 5 /* VirtualVNodeProps.lastChild */;\n    const siblingProp = nextDirection ? 3 /* VNodeProps.nextSibling */ : 2 /* VNodeProps.previousSibling */;\n    let cursor = vNode;\n    // first make sure we have a DOM node or no children.\n    while (descend && cursor && vnode_isVirtualVNode(cursor)) {\n        const child = cursor[childProp];\n        if (!child) {\n            break;\n        }\n        if (child[0 /* VNodeProps.flags */] & 5 /* VNodeFlags.ELEMENT_OR_TEXT_MASK */) {\n            return child;\n        }\n        cursor = child;\n    }\n    while (cursor) {\n        // Look at the previous/next sibling.\n        let sibling = cursor[siblingProp];\n        if (sibling && sibling[0 /* VNodeProps.flags */] & 5 /* VNodeFlags.ELEMENT_OR_TEXT_MASK */) {\n            // we found a previous/next DOM node, return it.\n            return sibling;\n        }\n        else if (!sibling) {\n            // If we don't have a sibling than walk up the tree until you find one.\n            let virtual = cursor[1 /* VNodeProps.parent */];\n            if (virtual && !vnode_isVirtualVNode(virtual)) {\n                return null;\n            }\n            while (virtual && !(sibling = virtual[siblingProp])) {\n                virtual = virtual[1 /* VNodeProps.parent */];\n                if (virtual && !vnode_isVirtualVNode(virtual)) {\n                    // the parent node is not virtual, so we are done here.\n                    return null;\n                }\n            }\n            if (!sibling) {\n                // If we did not find a sibling, than we are done.\n                return null;\n            }\n            if (vnode_isTextVNode(sibling) && virtual && vnode_isElementVNode(virtual)) {\n                // sibling to the real element is a text node, this is not a sibling\n                return null;\n            }\n        }\n        // At this point `sibling` is a next node to look at.\n        // Next step is to descend until we find a DOM done.\n        while (sibling) {\n            cursor = sibling;\n            if (cursor[0 /* VNodeProps.flags */] & 5 /* VNodeFlags.ELEMENT_OR_TEXT_MASK */ && vnode_getNode(cursor)) {\n                // we have to check that we actually have a node, because it could be a text node which is\n                // zero length and which does not have a representation in the DOM.\n                return cursor;\n            }\n            sibling = cursor[childProp];\n        }\n        // If we are here we did not find anything and we need to go up the tree again.\n    }\n    return null;\n};\nconst vnode_ensureInflatedIfText = (journal, vNode) => {\n    if (vnode_isTextVNode(vNode)) {\n        vnode_ensureTextInflated(journal, vNode);\n    }\n};\nconst vnode_ensureTextInflated = (journal, vnode) => {\n    const textVNode = ensureTextVNode(vnode);\n    const flags = textVNode[0 /* VNodeProps.flags */];\n    if ((flags & 8 /* VNodeFlags.Inflated */) === 0) {\n        const parentNode = vnode_getDomParent(vnode);\n        const sharedTextNode = textVNode[4 /* TextVNodeProps.node */];\n        const doc = parentNode.ownerDocument;\n        // Walk the previous siblings and inflate them.\n        let cursor = vnode_getDomSibling(vnode, false, true);\n        // If text node is 0 length, than there is no text node.\n        // In that case we use the next node as a reference, in which\n        // case we know that the next node MUST be either NULL or an Element.\n        const insertBeforeNode = sharedTextNode ||\n            (vnode_getDomSibling(vnode, true, true)?.[6 /* ElementVNodeProps.element */] || null);\n        let lastPreviousTextNode = insertBeforeNode;\n        while (cursor && vnode_isTextVNode(cursor)) {\n            if ((cursor[0 /* VNodeProps.flags */] & 8 /* VNodeFlags.Inflated */) === 0) {\n                const textNode = doc.createTextNode(cursor[5 /* TextVNodeProps.text */]);\n                journal.push(5 /* VNodeJournalOpCode.Insert */, parentNode, lastPreviousTextNode, textNode);\n                lastPreviousTextNode = textNode;\n                cursor[4 /* TextVNodeProps.node */] = textNode;\n                cursor[0 /* VNodeProps.flags */] |= 8 /* VNodeFlags.Inflated */;\n            }\n            cursor = vnode_getDomSibling(cursor, false, true);\n        }\n        // Walk the next siblings and inflate them.\n        cursor = vnode;\n        while (cursor && vnode_isTextVNode(cursor)) {\n            const next = vnode_getDomSibling(cursor, true, true);\n            const isLastNode = next ? !vnode_isTextVNode(next) : true;\n            if ((cursor[0 /* VNodeProps.flags */] & 8 /* VNodeFlags.Inflated */) === 0) {\n                if (isLastNode && sharedTextNode) {\n                    journal.push(1 /* VNodeJournalOpCode.SetText */, sharedTextNode, cursor[5 /* TextVNodeProps.text */]);\n                }\n                else {\n                    const textNode = doc.createTextNode(cursor[5 /* TextVNodeProps.text */]);\n                    journal.push(5 /* VNodeJournalOpCode.Insert */, parentNode, insertBeforeNode, textNode);\n                    cursor[4 /* TextVNodeProps.node */] = textNode;\n                }\n                cursor[0 /* VNodeProps.flags */] |= 8 /* VNodeFlags.Inflated */;\n            }\n            cursor = next;\n        }\n    }\n};\nexport const vnode_locate = (rootVNode, id) => {\n    ensureElementVNode(rootVNode);\n    let vNode = rootVNode;\n    const containerElement = rootVNode[6 /* ElementVNodeProps.element */];\n    const { qVNodeRefs } = containerElement;\n    let elementOffset = -1;\n    let refElement;\n    if (typeof id === 'string') {\n        assertDefined(qVNodeRefs, 'Missing qVNodeRefs.');\n        elementOffset = parseInt(id);\n        refElement = qVNodeRefs.get(elementOffset);\n    }\n    else {\n        refElement = id;\n        const vNode = refElement.vNode?.deref();\n        if (vNode) {\n            return vNode;\n        }\n    }\n    assertDefined(refElement, 'Missing refElement.');\n    if (!vnode_isVNode(refElement)) {\n        assertTrue(containerElement.contains(refElement), `Couldn't find the element inside the container while locating the VNode.`);\n        // We need to find the vnode.\n        let parent = refElement;\n        const elementPath = [refElement];\n        while (parent && parent !== containerElement) {\n            parent = parent.parentElement;\n            elementPath.push(parent);\n        }\n        // Start at rootVNode and follow the `elementPath` to find the vnode.\n        for (let i = elementPath.length - 2; i >= 0; i--) {\n            vNode = vnode_getVNodeForChildNode(vNode, elementPath[i]);\n        }\n        elementOffset != -1 && qVNodeRefs.set(elementOffset, vNode);\n    }\n    else {\n        vNode = refElement;\n    }\n    if (typeof id === 'string') {\n        // process virtual node search.\n        const idLength = id.length;\n        let idx = indexOfAlphanumeric(id, idLength);\n        let childIdx = 0;\n        while (idx < idLength) {\n            const ch = id.charCodeAt(idx);\n            childIdx *= 26 /* a-z */;\n            if (ch >= 97 /* a */) {\n                // is lowercase\n                childIdx += ch - 97 /* a */;\n            }\n            else {\n                // is uppercase\n                childIdx += ch - 65 /* A */;\n                vNode = vnode_getChildWithIdx(vNode, childIdx);\n                childIdx = 0;\n            }\n            idx++;\n        }\n    }\n    return vNode;\n};\nconst vnode_getChildWithIdx = (vNode, childIdx) => {\n    let child = vnode_getFirstChild(vNode);\n    assertDefined(child, 'Missing child.');\n    while (child[0 /* VNodeProps.flags */] >>> 8 /* VNodeFlagsIndex.shift */ !== childIdx) {\n        child = vnode_getNextSibling(child);\n        assertDefined(child, 'Missing child.');\n    }\n    return child;\n};\nconst vNodeStack = [];\nexport const vnode_getVNodeForChildNode = (vNode, childElement) => {\n    ensureElementVNode(vNode);\n    let child = vnode_getFirstChild(vNode);\n    assertDefined(child, 'Missing child.');\n    while (child && child[6 /* ElementVNodeProps.element */] !== childElement) {\n        if (vnode_isVirtualVNode(child)) {\n            const next = vnode_getNextSibling(child);\n            const firstChild = vnode_getFirstChild(child);\n            if (firstChild) {\n                next && vNodeStack.push(next);\n                child = firstChild;\n            }\n            else {\n                child = next || (vNodeStack.length ? vNodeStack.pop() : null);\n            }\n        }\n        else {\n            const next = vnode_getNextSibling(child);\n            if (next) {\n                child = next;\n            }\n            else {\n                child = next || vNodeStack.pop();\n            }\n        }\n        assertDefined(child, 'Missing child.');\n    }\n    while (vNodeStack.length) {\n        vNodeStack.pop();\n    }\n    ensureElementVNode(child);\n    assertEqual(child[6 /* ElementVNodeProps.element */], childElement, 'Child not found.');\n    // console.log('FOUND', child[VNodeProps.node]?.outerHTML);\n    return child;\n};\nconst indexOfAlphanumeric = (id, length) => {\n    let idx = 0;\n    while (idx < length) {\n        if (id.charCodeAt(idx) <= 57 /* 9 */) {\n            idx++;\n        }\n        else {\n            return idx;\n        }\n    }\n    return length;\n};\n//////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const vnode_journalToString = (journal) => {\n    const lines = ['JOURNAL:'];\n    let idx = 0;\n    const length = journal.length;\n    function stringify(...args) {\n        lines.push(args\n            .map((arg) => {\n            if (typeof arg === 'string') {\n                return arg;\n            }\n            else if (arg && isHtmlElement(arg)) {\n                const html = arg.outerHTML;\n                const hasChildNodes = !!arg.firstElementChild;\n                const idx = html.indexOf('>');\n                const lastIdx = html.lastIndexOf('<');\n                return idx > 0 && hasChildNodes\n                    ? html.substring(0, idx + 1) + '...' + html.substring(lastIdx)\n                    : html;\n            }\n            else if (arg && isText(arg)) {\n                return JSON.stringify(arg.nodeValue);\n            }\n            else {\n                return String(arg);\n            }\n        })\n            .join(' '));\n    }\n    while (idx < length) {\n        const op = journal[idx++];\n        switch (op) {\n            case 1 /* VNodeJournalOpCode.SetText */:\n                stringify('SetText');\n                stringify('  ', journal[idx++]);\n                stringify('   -->', journal[idx++]);\n                break;\n            case 2 /* VNodeJournalOpCode.SetAttribute */:\n                stringify('SetAttribute');\n                stringify('  ', journal[idx++]);\n                stringify('   key', journal[idx++]);\n                stringify('   val', journal[idx++]);\n                break;\n            case 3 /* VNodeJournalOpCode.HoistStyles */:\n                stringify('HoistStyles');\n                break;\n            case 4 /* VNodeJournalOpCode.Remove */: {\n                stringify('Remove');\n                const parent = journal[idx++];\n                stringify('  ', parent);\n                let nodeToRemove;\n                while (idx < length && typeof (nodeToRemove = journal[idx]) !== 'number') {\n                    stringify('   -->', nodeToRemove);\n                    idx++;\n                }\n                break;\n            }\n            case 5 /* VNodeJournalOpCode.Insert */: {\n                stringify('Insert');\n                const parent = journal[idx++];\n                const insertBefore = journal[idx++];\n                stringify('  ', parent);\n                let newChild;\n                while (idx < length && typeof (newChild = journal[idx]) !== 'number') {\n                    stringify('   -->', newChild);\n                    idx++;\n                }\n                if (insertBefore) {\n                    stringify('      ', insertBefore);\n                }\n                break;\n            }\n        }\n    }\n    lines.push('END JOURNAL');\n    return lines.join('\\n');\n};\nconst parseBoolean = (value) => {\n    if (value === 'false') {\n        return false;\n    }\n    return Boolean(value);\n};\nconst isBooleanAttr = (element, key) => {\n    const isBoolean = key == 'allowfullscreen' ||\n        key == 'async' ||\n        key == 'autofocus' ||\n        key == 'autoplay' ||\n        key == 'checked' ||\n        key == 'controls' ||\n        key == 'default' ||\n        key == 'defer' ||\n        key == 'disabled' ||\n        key == 'formnovalidate' ||\n        key == 'inert' ||\n        key == 'ismap' ||\n        key == 'itemscope' ||\n        key == 'loop' ||\n        key == 'multiple' ||\n        key == 'muted' ||\n        key == 'nomodule' ||\n        key == 'novalidate' ||\n        key == 'open' ||\n        key == 'playsinline' ||\n        key == 'readonly' ||\n        key == 'required' ||\n        key == 'reversed' ||\n        key == 'selected';\n    return isBoolean && key in element;\n};\nexport const vnode_applyJournal = (journal) => {\n    // console.log('APPLY JOURNAL', vnode_journalToString(journal));\n    let idx = 0;\n    const length = journal.length;\n    while (idx < length) {\n        const op = journal[idx++];\n        switch (op) {\n            case 1 /* VNodeJournalOpCode.SetText */:\n                const text = journal[idx++];\n                text.nodeValue = journal[idx++];\n                break;\n            case 2 /* VNodeJournalOpCode.SetAttribute */:\n                const element = journal[idx++];\n                let key = journal[idx++];\n                if (key === 'className') {\n                    key = 'class';\n                }\n                const value = journal[idx++];\n                if (isBooleanAttr(element, key)) {\n                    element[key] = parseBoolean(value);\n                }\n                else if (key === 'value' && key in element) {\n                    element.value = String(value);\n                }\n                else if (key === dangerouslySetInnerHTML) {\n                    element.innerHTML = value;\n                    element.setAttribute(QContainerAttr, \"html\" /* QContainerValue.HTML */);\n                }\n                else {\n                    if (value == null || value === false) {\n                        element.removeAttribute(key);\n                    }\n                    else {\n                        element.setAttribute(key, String(value));\n                    }\n                }\n                break;\n            case 3 /* VNodeJournalOpCode.HoistStyles */:\n                const document = journal[idx++];\n                const head = document.head;\n                const styles = document.querySelectorAll(QStylesAllSelector);\n                for (let i = 0; i < styles.length; i++) {\n                    head.appendChild(styles[i]);\n                }\n                break;\n            case 4 /* VNodeJournalOpCode.Remove */:\n                const removeParent = journal[idx++];\n                let nodeToRemove;\n                while (idx < length && typeof (nodeToRemove = journal[idx]) !== 'number') {\n                    removeParent.removeChild(nodeToRemove);\n                    idx++;\n                }\n                break;\n            case 5 /* VNodeJournalOpCode.Insert */:\n                const insertParent = journal[idx++];\n                const insertBefore = journal[idx++];\n                let newChild;\n                while (idx < length && typeof (newChild = journal[idx]) !== 'number') {\n                    insertParent.insertBefore(newChild, insertBefore);\n                    idx++;\n                }\n                break;\n        }\n    }\n    journal.length = 0;\n};\n//////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const vnode_insertBefore = (journal, parent, newChild, insertBefore) => {\n    ensureElementOrVirtualVNode(parent);\n    if (vnode_isElementVNode(parent)) {\n        ensureMaterialized(parent);\n    }\n    const newChildCurrentParent = newChild[1 /* VNodeProps.parent */];\n    if (newChild === insertBefore) {\n        // invalid insertBefore. We can't insert before self reference\n        // prevent infinity loop and putting self reference to next sibling\n        if (newChildCurrentParent) {\n            // early return, as the newChild is already in the tree and we are already in the correct position\n            return;\n        }\n        else {\n            // if the newChild is not in the tree, than we insert it at the end of the list\n            insertBefore = null;\n        }\n    }\n    // ensure that the previous node is unlinked.\n    if (newChildCurrentParent &&\n        (newChild[2 /* VNodeProps.previousSibling */] ||\n            newChild[3 /* VNodeProps.nextSibling */] ||\n            newChildCurrentParent !== parent)) {\n        vnode_remove(journal, newChildCurrentParent, newChild, false);\n    }\n    let adjustedInsertBefore = null;\n    if (insertBefore == null) {\n        if (vnode_isVirtualVNode(parent)) {\n            // If `insertBefore` is null, than we need to insert at the end of the list.\n            // Well, not quite. If the parent is a virtual node, our \"last node\" is not the same\n            // as the DOM \"last node\". So in that case we need to look for the \"next node\" from\n            // our parent.\n            adjustedInsertBefore = vnode_getDomSibling(parent, true, false);\n        }\n    }\n    else if (vnode_isVirtualVNode(insertBefore)) {\n        // If the `insertBefore` is virtual, than we need to descend into the virtual and find e actual\n        adjustedInsertBefore = vnode_getDomSibling(insertBefore, true, true);\n    }\n    else {\n        adjustedInsertBefore = insertBefore;\n    }\n    adjustedInsertBefore && vnode_ensureInflatedIfText(journal, adjustedInsertBefore);\n    // If `insertBefore` is null, than we need to insert at the end of the list.\n    // Well, not quite. If the parent is a virtual node, our \"last node\" is not the same\n    // as the DOM \"last node\". So in that case we need to look for the \"next node\" from\n    // our parent.\n    // const shouldWeUseParentVirtual = insertBefore == null && vnode_isVirtualVNode(parent);\n    // const insertBeforeNode = shouldWeUseParentVirtual\n    //   ? vnode_getDomSibling(parent, true)\n    //   : insertBefore;\n    const domParentVNode = vnode_getDomParentVNode(parent);\n    const parentNode = domParentVNode && domParentVNode[6 /* ElementVNodeProps.element */];\n    if (parentNode) {\n        const domChildren = vnode_getDomChildrenWithCorrectNamespacesToInsert(journal, domParentVNode, newChild);\n        domChildren.length &&\n            journal.push(5 /* VNodeJournalOpCode.Insert */, parentNode, vnode_getNode(adjustedInsertBefore), ...domChildren);\n    }\n    // link newChild into the previous/next list\n    const vNext = insertBefore;\n    const vPrevious = vNext\n        ? vNext[2 /* VNodeProps.previousSibling */]\n        : parent[5 /* ElementVNodeProps.lastChild */];\n    if (vNext) {\n        vNext[2 /* VNodeProps.previousSibling */] = newChild;\n    }\n    else {\n        parent[5 /* ElementVNodeProps.lastChild */] = newChild;\n    }\n    if (vPrevious) {\n        vPrevious[3 /* VNodeProps.nextSibling */] = newChild;\n    }\n    else {\n        parent[4 /* ElementVNodeProps.firstChild */] = newChild;\n    }\n    newChild[2 /* VNodeProps.previousSibling */] = vPrevious;\n    newChild[3 /* VNodeProps.nextSibling */] = vNext;\n    newChild[1 /* VNodeProps.parent */] = parent;\n};\nexport const vnode_getDomParent = (vnode) => {\n    vnode = vnode_getDomParentVNode(vnode);\n    return (vnode && vnode[6 /* ElementVNodeProps.element */]);\n};\nexport const vnode_getDomParentVNode = (vnode) => {\n    while (vnode && !vnode_isElementVNode(vnode)) {\n        vnode = vnode[1 /* VNodeProps.parent */];\n    }\n    return vnode;\n};\nexport const vnode_remove = (journal, vParent, vToRemove, removeDOM) => {\n    assertEqual(vParent, vnode_getParent(vToRemove), 'Parent mismatch.');\n    if (vnode_isTextVNode(vToRemove)) {\n        vnode_ensureTextInflated(journal, vToRemove);\n    }\n    if (removeDOM) {\n        const domParent = vnode_getDomParent(vParent);\n        const isInnerHTMLParent = vnode_getAttr(vParent, dangerouslySetInnerHTML);\n        if (isInnerHTMLParent) {\n            // ignore children, as they are inserted via innerHTML\n            return;\n        }\n        const children = vnode_getDOMChildNodes(journal, vToRemove);\n        domParent && children.length && journal.push(4 /* VNodeJournalOpCode.Remove */, domParent, ...children);\n    }\n    const vPrevious = vToRemove[2 /* VNodeProps.previousSibling */];\n    const vNext = vToRemove[3 /* VNodeProps.nextSibling */];\n    if (vPrevious) {\n        vPrevious[3 /* VNodeProps.nextSibling */] = vNext;\n    }\n    else {\n        vParent[4 /* ElementVNodeProps.firstChild */] = vNext;\n    }\n    if (vNext) {\n        vNext[2 /* VNodeProps.previousSibling */] = vPrevious;\n    }\n    else {\n        vParent[5 /* ElementVNodeProps.lastChild */] = vPrevious;\n    }\n    vToRemove[2 /* VNodeProps.previousSibling */] = null;\n    vToRemove[3 /* VNodeProps.nextSibling */] = null;\n};\nexport const vnode_queryDomNodes = (vNode, selector, cb) => {\n    if (vnode_isElementVNode(vNode)) {\n        const element = vnode_getNode(vNode);\n        if (element.matches(selector)) {\n            cb(element);\n        }\n        else {\n            element.querySelectorAll(selector).forEach(cb);\n        }\n    }\n    else {\n        let child = vnode_getFirstChild(vNode);\n        while (child) {\n            vnode_queryDomNodes(child, selector, cb);\n            child = vnode_getNextSibling(child);\n        }\n    }\n};\nexport const vnode_truncate = (journal, vParent, vDelete) => {\n    assertDefined(vDelete, 'Missing vDelete.');\n    const parent = vnode_getDomParent(vParent);\n    const children = vnode_getDOMChildNodes(journal, vDelete);\n    parent && children.length && journal.push(4 /* VNodeJournalOpCode.Remove */, parent, ...children);\n    const vPrevious = vDelete[2 /* VNodeProps.previousSibling */];\n    if (vPrevious) {\n        vPrevious[3 /* VNodeProps.nextSibling */] = null;\n    }\n    else {\n        vParent[4 /* ElementVNodeProps.firstChild */] = null;\n    }\n    vParent[5 /* ElementVNodeProps.lastChild */] = vPrevious;\n};\n//////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const vnode_getElementName = (vnode) => {\n    const elementVNode = ensureElementVNode(vnode);\n    let elementName = elementVNode[7 /* ElementVNodeProps.elementName */];\n    if (elementName === undefined) {\n        const element = elementVNode[6 /* ElementVNodeProps.element */];\n        const nodeName = fastNodeName(element).toLowerCase();\n        elementName = elementVNode[7 /* ElementVNodeProps.elementName */] = nodeName;\n        elementVNode[0 /* VNodeProps.flags */] |= vnode_getElementNamespaceFlags(element);\n    }\n    return elementName;\n};\nexport const vnode_getText = (vnode) => {\n    const textVNode = ensureTextVNode(vnode);\n    let text = textVNode[5 /* TextVNodeProps.text */];\n    if (text === undefined) {\n        text = textVNode[5 /* TextVNodeProps.text */] = textVNode[4 /* TextVNodeProps.node */].nodeValue;\n    }\n    return text;\n};\nexport const vnode_setText = (journal, textVNode, text) => {\n    vnode_ensureTextInflated(journal, textVNode);\n    const textNode = textVNode[4 /* TextVNodeProps.node */];\n    journal.push(1 /* VNodeJournalOpCode.SetText */, textNode, (textVNode[5 /* TextVNodeProps.text */] = text));\n};\nexport const vnode_getFirstChild = (vnode) => {\n    if (vnode_isTextVNode(vnode)) {\n        return null;\n    }\n    let vFirstChild = vnode[4 /* ElementVNodeProps.firstChild */];\n    if (vFirstChild === undefined) {\n        vFirstChild = ensureMaterialized(vnode);\n    }\n    return vFirstChild;\n};\nconst vnode_materialize = (vNode) => {\n    const element = vNode[6 /* ElementVNodeProps.element */];\n    const firstChild = fastFirstChild(element);\n    const vNodeData = element.ownerDocument?.qVNodeData?.get(element);\n    const vFirstChild = materialize(vNode, element, firstChild, vNodeData);\n    return vFirstChild;\n};\nconst materialize = (vNode, element, firstChild, vNodeData) => {\n    if (vNodeData) {\n        if (vNodeData.charCodeAt(0) === VNodeDataChar.SEPARATOR) {\n            /**\n             * If vNodeData start with the `VNodeDataChar.SEPARATOR` then it means that the vNodeData\n             * contains some data for DOM element. We need to split it to DOM element vNodeData and\n             * virtual element vNodeData.\n             *\n             * For example `|=6`4|2{J=7`3|q:type|S}` should split into `=6`4`and`2{J=7`3|q:type|S}`, where\n             * `=6`4` is vNodeData for the DOM element.\n             */\n            const elementVNodeDataStartIdx = 1;\n            let elementVNodeDataEndIdx = 1;\n            while (vNodeData.charCodeAt(elementVNodeDataEndIdx) !== VNodeDataChar.SEPARATOR) {\n                elementVNodeDataEndIdx++;\n            }\n            const elementVNodeData = vNodeData.substring(elementVNodeDataStartIdx, elementVNodeDataEndIdx);\n            // Override vNodeData variable for materializing a virtual element\n            vNodeData = vNodeData.substring(elementVNodeDataEndIdx + 1);\n            // Materialize DOM element from HTML. If the `vNodeData` is not empty,\n            // then also materialize virtual element from vNodeData\n            const vFirstChild = materializeFromDOM(vNode, firstChild, elementVNodeData);\n            if (!vNodeData) {\n                //  If it is empty then we don't need to call the `materializeFromVNodeData`.\n                return vFirstChild;\n            }\n        }\n        // Materialize virtual element form vNodeData\n        return materializeFromVNodeData(vNode, vNodeData, element, firstChild);\n    }\n    else {\n        // Materialize DOM element from HTML only\n        return materializeFromDOM(vNode, firstChild);\n    }\n};\nexport const ensureMaterialized = (vnode) => {\n    const vParent = ensureElementVNode(vnode);\n    let vFirstChild = vParent[4 /* ElementVNodeProps.firstChild */];\n    if (vFirstChild === undefined) {\n        // need to materialize the vNode.\n        const element = vParent[6 /* ElementVNodeProps.element */];\n        if (vParent[1 /* VNodeProps.parent */] && shouldIgnoreChildren(element)) {\n            // We have a container with html value, must ignore the content.\n            vFirstChild =\n                vParent[4 /* ElementVNodeProps.firstChild */] =\n                    vParent[5 /* ElementVNodeProps.lastChild */] =\n                        null;\n        }\n        else {\n            vFirstChild = vnode_materialize(vParent);\n        }\n    }\n    assertTrue(vParent[4 /* ElementVNodeProps.firstChild */] !== undefined, 'Did not materialize.');\n    assertTrue(vParent[5 /* ElementVNodeProps.lastChild */] !== undefined, 'Did not materialize.');\n    return vFirstChild;\n};\nlet _fastHasAttribute = null;\nexport const shouldIgnoreChildren = (node) => {\n    if (!_fastHasAttribute) {\n        _fastHasAttribute = node.hasAttribute;\n    }\n    return _fastHasAttribute.call(node, QContainerAttr);\n};\nlet _fastNodeType = null;\nconst fastNodeType = (node) => {\n    if (!_fastNodeType) {\n        _fastNodeType = fastGetter(node, 'nodeType');\n    }\n    return _fastNodeType.call(node);\n};\nconst fastIsTextOrElement = (node) => {\n    const type = fastNodeType(node);\n    return type === /* Node.TEXT_NODE */ 3 || type === /* Node.ELEMENT_NODE */ 1;\n};\nlet _fastNextSibling = null;\nexport const fastNextSibling = (node) => {\n    if (!_fastNextSibling) {\n        _fastNextSibling = fastGetter(node, 'nextSibling');\n    }\n    if (!_fastFirstChild) {\n        _fastFirstChild = fastGetter(node, 'firstChild');\n    }\n    while (node) {\n        node = _fastNextSibling.call(node);\n        if (node !== null) {\n            const type = fastNodeType(node);\n            if (type === /* Node.TEXT_NODE */ 3 || type === /* Node.ELEMENT_NODE */ 1) {\n                break;\n            }\n            else if (type === /* Node.COMMENT_NODE */ 8) {\n                const nodeValue = node.nodeValue;\n                if (nodeValue?.startsWith(QIgnore)) {\n                    return getNodeAfterCommentNode(node, QContainerIsland, _fastNextSibling, _fastFirstChild);\n                }\n                else if (node.nodeValue?.startsWith(QContainerIslandEnd)) {\n                    return getNodeAfterCommentNode(node, QIgnoreEnd, _fastNextSibling, _fastFirstChild);\n                }\n                else if (nodeValue?.startsWith(QContainerAttr)) {\n                    while (node && (node = _fastNextSibling.call(node))) {\n                        if (fastNodeType(node) === /* Node.COMMENT_NODE */ 8 &&\n                            node.nodeValue?.startsWith(QContainerAttrEnd)) {\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    return node;\n};\nfunction getNodeAfterCommentNode(node, commentValue, nextSibling, firstChild) {\n    while (node) {\n        if (node.nodeValue?.startsWith(commentValue)) {\n            node = nextSibling.call(node) || null;\n            return node;\n        }\n        let nextNode = firstChild.call(node);\n        if (!nextNode) {\n            nextNode = nextSibling.call(node);\n        }\n        if (!nextNode) {\n            nextNode = fastParentNode(node);\n            if (nextNode) {\n                nextNode = nextSibling.call(nextNode);\n            }\n        }\n        node = nextNode;\n    }\n    return null;\n}\nlet _fastParentNode = null;\nconst fastParentNode = (node) => {\n    if (!_fastParentNode) {\n        _fastParentNode = fastGetter(node, 'parentNode');\n    }\n    return _fastParentNode.call(node);\n};\nlet _fastFirstChild = null;\nconst fastFirstChild = (node) => {\n    if (!_fastFirstChild) {\n        _fastFirstChild = fastGetter(node, 'firstChild');\n    }\n    node = node && _fastFirstChild.call(node);\n    while (node && !fastIsTextOrElement(node)) {\n        node = fastNextSibling(node);\n    }\n    return node;\n};\nlet _fastNamespaceURI = null;\nexport const fastNamespaceURI = (element) => {\n    if (!_fastNamespaceURI) {\n        _fastNamespaceURI = fastGetter(element, 'namespaceURI');\n    }\n    return _fastNamespaceURI.call(element);\n};\nlet _fastNodeName = null;\nexport const fastNodeName = (element) => {\n    if (!_fastNodeName) {\n        _fastNodeName = fastGetter(element, 'nodeName');\n    }\n    return _fastNodeName.call(element);\n};\nconst fastGetter = (prototype, name) => {\n    let getter;\n    while (prototype && !(getter = Object.getOwnPropertyDescriptor(prototype, name)?.get)) {\n        prototype = Object.getPrototypeOf(prototype);\n    }\n    return (getter ||\n        function () {\n            return this[name];\n        });\n};\nconst isQStyleElement = (node) => {\n    return (isElement(node) &&\n        node.nodeName === 'STYLE' &&\n        (node.hasAttribute(QScopedStyle) || node.hasAttribute(QStyle)));\n};\nconst materializeFromDOM = (vParent, firstChild, vData) => {\n    let vFirstChild = null;\n    const skipStyleElements = () => {\n        while (isQStyleElement(child)) {\n            // skip over style elements, as those need to be moved to the head.\n            // VNode pretends that `<style q:style q:sstyle>` elements do not exist.\n            child = fastNextSibling(child);\n        }\n    };\n    // materialize from DOM\n    let child = firstChild;\n    skipStyleElements();\n    let vChild = null;\n    while (child) {\n        const nodeType = fastNodeType(child);\n        let vNextChild = null;\n        if (nodeType === /* Node.TEXT_NODE */ 3) {\n            vNextChild = vnode_newText(child, child.textContent ?? undefined);\n        }\n        else if (nodeType === /* Node.ELEMENT_NODE */ 1) {\n            vNextChild = vnode_newUnMaterializedElement(child);\n        }\n        if (vNextChild) {\n            vNextChild[1 /* VNodeProps.parent */] = vParent;\n            vChild && (vChild[3 /* VNodeProps.nextSibling */] = vNextChild);\n            vNextChild[2 /* VNodeProps.previousSibling */] = vChild;\n            vChild = vNextChild;\n        }\n        if (!vFirstChild) {\n            vParent[4 /* ElementVNodeProps.firstChild */] = vFirstChild = vChild;\n        }\n        child = fastNextSibling(child);\n        skipStyleElements();\n    }\n    vParent[5 /* ElementVNodeProps.lastChild */] = vChild || null;\n    vParent[4 /* ElementVNodeProps.firstChild */] = vFirstChild;\n    if (vData) {\n        /**\n         * If we need to materialize from DOM and we have vNodeData it means that we have some virtual\n         * props for that node.\n         */\n        let container = null;\n        processVNodeData(vData, (peek, consumeValue) => {\n            if (peek() === VNodeDataChar.ID) {\n                if (!container) {\n                    container = getDomContainer(vParent[6 /* ElementVNodeProps.element */]);\n                }\n                const id = consumeValue();\n                container.$setRawState$(parseInt(id), vParent);\n                isDev && vnode_setAttr(null, vParent, ELEMENT_ID, id);\n            }\n            else if (peek() === VNodeDataChar.BACK_REFS) {\n                if (!container) {\n                    container = getDomContainer(vParent[6 /* ElementVNodeProps.element */]);\n                }\n                setEffectBackRefFromVNodeData(vParent, consumeValue(), container);\n            }\n            else {\n                // prevent infinity loop if there are some characters outside the range\n                consumeValue();\n            }\n        });\n    }\n    return vFirstChild;\n};\nfunction setEffectBackRefFromVNodeData(vParent, value, container) {\n    const deserializedSubMap = container.$getObjectById$(value);\n    if (!vParent[_EFFECT_BACK_REF]) {\n        Object.defineProperty(vParent, _EFFECT_BACK_REF, {\n            value: deserializedSubMap,\n        });\n    }\n    else {\n        const subMap = vParent[_EFFECT_BACK_REF];\n        mergeMaps(subMap, deserializedSubMap);\n    }\n}\nconst processVNodeData = (vData, callback) => {\n    let nextToConsumeIdx = 0;\n    let ch = 0;\n    let peekCh = 0;\n    const peek = () => {\n        if (peekCh !== 0) {\n            return peekCh;\n        }\n        else {\n            return (peekCh = nextToConsumeIdx < vData.length ? vData.charCodeAt(nextToConsumeIdx) : 0);\n        }\n    };\n    const consume = () => {\n        ch = peek();\n        peekCh = 0;\n        nextToConsumeIdx++;\n        return ch;\n    };\n    const consumeValue = () => {\n        consume();\n        const start = nextToConsumeIdx;\n        while ((peek() <= 58 /* `:` */ && peekCh !== 0) ||\n            peekCh === 95 /* `_` */ ||\n            (peekCh >= 65 /* `A` */ && peekCh <= 90) /* `Z` */ ||\n            (peekCh >= 97 /* `a` */ && peekCh <= 122) /* `z` */) {\n            consume();\n        }\n        return vData.substring(start, nextToConsumeIdx);\n    };\n    while (peek() !== 0) {\n        callback(peek, consumeValue, consume, nextToConsumeIdx);\n    }\n};\nexport const vnode_getNextSibling = (vnode) => {\n    return vnode[3 /* VNodeProps.nextSibling */];\n};\nexport const vnode_getPreviousSibling = (vnode) => {\n    return vnode[2 /* VNodeProps.previousSibling */];\n};\nexport const vnode_getAttrKeys = (vnode) => {\n    const type = vnode[0 /* VNodeProps.flags */];\n    if ((type & 3 /* VNodeFlags.ELEMENT_OR_VIRTUAL_MASK */) !== 0) {\n        vnode_ensureElementInflated(vnode);\n        const keys = [];\n        const props = vnode_getProps(vnode);\n        for (let i = 0; i < props.length; i = i + 2) {\n            const key = props[i];\n            if (!key.startsWith(Q_PROPS_SEPARATOR)) {\n                keys.push(key);\n            }\n        }\n        return keys;\n    }\n    return [];\n};\nexport const vnode_setAttr = (journal, vnode, key, value) => {\n    const type = vnode[0 /* VNodeProps.flags */];\n    if ((type & 3 /* VNodeFlags.ELEMENT_OR_VIRTUAL_MASK */) !== 0) {\n        vnode_ensureElementInflated(vnode);\n        const props = vnode_getProps(vnode);\n        const idx = mapApp_findIndx(props, key, 0);\n        if (idx >= 0) {\n            if (props[idx + 1] != value && (type & 1 /* VNodeFlags.Element */) !== 0) {\n                // Values are different, update DOM\n                const element = vnode[6 /* ElementVNodeProps.element */];\n                journal && journal.push(2 /* VNodeJournalOpCode.SetAttribute */, element, key, value);\n            }\n            if (value == null) {\n                props.splice(idx, 2);\n            }\n            else {\n                props[idx + 1] = value;\n            }\n        }\n        else if (value != null) {\n            props.splice(idx ^ -1, 0, key, value);\n            if ((type & 1 /* VNodeFlags.Element */) !== 0) {\n                // New value, update DOM\n                const element = vnode[6 /* ElementVNodeProps.element */];\n                journal && journal.push(2 /* VNodeJournalOpCode.SetAttribute */, element, key, value);\n            }\n        }\n    }\n};\nexport const vnode_getAttr = (vnode, key) => {\n    const type = vnode[0 /* VNodeProps.flags */];\n    if ((type & 3 /* VNodeFlags.ELEMENT_OR_VIRTUAL_MASK */) !== 0) {\n        vnode_ensureElementInflated(vnode);\n        const props = vnode_getProps(vnode);\n        return mapArray_get(props, key, 0);\n    }\n    return null;\n};\nexport const vnode_getProp = (vnode, key, getObject) => {\n    const type = vnode[0 /* VNodeProps.flags */];\n    if ((type & 3 /* VNodeFlags.ELEMENT_OR_VIRTUAL_MASK */) !== 0) {\n        type & 1 /* VNodeFlags.Element */ && vnode_ensureElementInflated(vnode);\n        const props = vnode_getProps(vnode);\n        const idx = mapApp_findIndx(props, key, 0);\n        if (idx >= 0) {\n            let value = props[idx + 1];\n            if (typeof value === 'string' && getObject) {\n                props[idx + 1] = value = getObject(value);\n            }\n            return value;\n        }\n    }\n    return null;\n};\nexport const vnode_setProp = (vnode, key, value) => {\n    ensureElementOrVirtualVNode(vnode);\n    const props = vnode_getProps(vnode);\n    const idx = mapApp_findIndx(props, key, 0);\n    if (idx >= 0) {\n        props[idx + 1] = value;\n    }\n    else if (value != null) {\n        props.splice(idx ^ -1, 0, key, value);\n    }\n};\nexport const vnode_getPropStartIndex = (vnode) => {\n    const type = vnode[0 /* VNodeProps.flags */] & 7 /* VNodeFlags.TYPE_MASK */;\n    if (type === 1 /* VNodeFlags.Element */) {\n        return 8 /* ElementVNodeProps.PROPS_OFFSET */;\n    }\n    else if (type === 2 /* VNodeFlags.Virtual */) {\n        return 6 /* VirtualVNodeProps.PROPS_OFFSET */;\n    }\n    throw qError(43 /* QError.invalidVNodeType */, [type]);\n};\nexport const vnode_getProps = (vnode) => {\n    return vnode[vnode_getPropStartIndex(vnode)];\n};\nexport const vnode_getParent = (vnode) => {\n    return vnode[1 /* VNodeProps.parent */] || null;\n};\nexport const vnode_getNode = (vnode) => {\n    if (vnode === null || vnode_isVirtualVNode(vnode)) {\n        return null;\n    }\n    if (vnode_isElementVNode(vnode)) {\n        return vnode[6 /* ElementVNodeProps.element */];\n    }\n    assertTrue(vnode_isTextVNode(vnode), 'Expecting Text Node.');\n    return vnode[4 /* TextVNodeProps.node */];\n};\nexport function vnode_toString(depth = 20, offset = '', materialize = false, siblings = false) {\n    let vnode = this;\n    if (depth === 0) {\n        return '...';\n    }\n    if (vnode === null) {\n        return 'null';\n    }\n    if (vnode === undefined) {\n        return 'undefined';\n    }\n    const strings = [];\n    do {\n        if (vnode_isTextVNode(vnode)) {\n            strings.push(qwikDebugToString(vnode_getText(vnode)));\n        }\n        else if (vnode_isVirtualVNode(vnode)) {\n            const idx = vnode[0 /* VNodeProps.flags */] >>> 8 /* VNodeFlagsIndex.shift */;\n            const attrs = ['[' + String(idx) + ']'];\n            vnode_getAttrKeys(vnode).forEach((key) => {\n                if (key !== DEBUG_TYPE) {\n                    const value = vnode_getAttr(vnode, key);\n                    attrs.push(' ' + key + '=' + qwikDebugToString(value));\n                }\n            });\n            const name = VirtualTypeName[vnode_getAttr(vnode, DEBUG_TYPE) || \"V\" /* VirtualType.Virtual */] ||\n                VirtualTypeName[\"V\" /* VirtualType.Virtual */];\n            strings.push('<' + name + attrs.join('') + '>');\n            const child = vnode_getFirstChild(vnode);\n            child &&\n                strings.push('  ' + vnode_toString.call(child, depth - 1, offset + '  ', true, true));\n            strings.push('</' + name + '>');\n        }\n        else if (vnode_isElementVNode(vnode)) {\n            const tag = vnode_getElementName(vnode);\n            const attrs = [];\n            const keys = vnode_getAttrKeys(vnode);\n            keys.forEach((key) => {\n                const value = vnode_getAttr(vnode, key);\n                attrs.push(' ' + key + '=' + qwikDebugToString(value));\n            });\n            const node = vnode_getNode(vnode);\n            if (node) {\n                const vnodeData = node.ownerDocument.qVNodeData?.get(node);\n                if (vnodeData) {\n                    attrs.push(' q:vnodeData=' + qwikDebugToString(vnodeData));\n                }\n            }\n            const domAttrs = node.attributes;\n            for (let i = 0; i < domAttrs.length; i++) {\n                const attr = domAttrs[i];\n                if (keys.indexOf(attr.name) === -1) {\n                    attrs.push(' ' + attr.name + (attr.value ? '=' + qwikDebugToString(attr.value) : ''));\n                }\n            }\n            strings.push('<' + tag + attrs.join('') + '>');\n            if (vnode_isMaterialized(vnode) || materialize) {\n                const child = vnode_getFirstChild(vnode);\n                child &&\n                    strings.push('  ' + vnode_toString.call(child, depth - 1, offset + '  ', true, true));\n            }\n            else {\n                strings.push('  <!-- not materialized --!>');\n            }\n            strings.push('</' + tag + '>');\n        }\n        vnode = (siblings && vnode_getNextSibling(vnode)) || null;\n    } while (vnode);\n    return strings.join('\\n' + offset);\n}\nconst isNumber = (ch) => /* `0` */ 48 <= ch && ch <= 57; /* `9` */\nconst isLowercase = (ch) => /* `a` */ 97 <= ch && ch <= 122; /* `z` */\nconst stack = [];\nfunction materializeFromVNodeData(vParent, vData, element, child) {\n    let idx = 0;\n    let vFirst = null;\n    let vLast = null;\n    let previousTextNode = null;\n    const addVNode = (node) => {\n        node[0 /* VNodeProps.flags */] =\n            (node[0 /* VNodeProps.flags */] & 255 /* VNodeFlagsIndex.negated_mask */) | (idx << 8 /* VNodeFlagsIndex.shift */);\n        idx++;\n        vLast && (vLast[3 /* VNodeProps.nextSibling */] = node);\n        node[2 /* VNodeProps.previousSibling */] = vLast;\n        node[1 /* VNodeProps.parent */] = vParent;\n        if (!vFirst) {\n            vParent[4 /* ElementVNodeProps.firstChild */] = vFirst = node;\n        }\n        vLast = node;\n    };\n    let textIdx = 0;\n    let combinedText = null;\n    let container = null;\n    processVNodeData(vData, (peek, consumeValue, consume, nextToConsumeIdx) => {\n        if (isNumber(peek())) {\n            // Element counts get encoded as numbers.\n            while (!isElement(child)) {\n                child = fastNextSibling(child);\n                if (!child) {\n                    throw qError(44 /* QError.materializeVNodeDataError */, [vData, peek(), nextToConsumeIdx]);\n                }\n            }\n            // We pretend that style element's don't exist as they can get moved out.\n            while (isQStyleElement(child)) {\n                // skip over style elements, as those need to be moved to the head\n                // and are not included in the counts.\n                child = fastNextSibling(child);\n            }\n            combinedText = null;\n            previousTextNode = null;\n            let value = 0;\n            while (isNumber(peek())) {\n                value *= 10;\n                value += consume() - 48; /* `0` */\n            }\n            while (value--) {\n                addVNode(vnode_newUnMaterializedElement(child));\n                child = fastNextSibling(child);\n            }\n            // collect the elements;\n        }\n        else if (peek() === VNodeDataChar.SCOPED_STYLE) {\n            vnode_setAttr(null, vParent, QScopedStyle, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.RENDER_FN) {\n            vnode_setAttr(null, vParent, OnRenderProp, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.ID) {\n            if (!container) {\n                container = getDomContainer(element);\n            }\n            const id = consumeValue();\n            container.$setRawState$(parseInt(id), vParent);\n            isDev && vnode_setAttr(null, vParent, ELEMENT_ID, id);\n        }\n        else if (peek() === VNodeDataChar.PROPS) {\n            vnode_setAttr(null, vParent, ELEMENT_PROPS, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.KEY) {\n            vnode_setAttr(null, vParent, ELEMENT_KEY, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.SEQ) {\n            vnode_setAttr(null, vParent, ELEMENT_SEQ, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.SEQ_IDX) {\n            vnode_setAttr(null, vParent, ELEMENT_SEQ_IDX, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.BACK_REFS) {\n            if (!container) {\n                container = getDomContainer(element);\n            }\n            setEffectBackRefFromVNodeData(vParent, consumeValue(), container);\n        }\n        else if (peek() === VNodeDataChar.SLOT_PARENT) {\n            vnode_setProp(vParent, QSlotParent, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.CONTEXT) {\n            vnode_setAttr(null, vParent, QCtxAttr, consumeValue());\n        }\n        else if (peek() === VNodeDataChar.OPEN) {\n            consume();\n            addVNode(vnode_newVirtual());\n            stack.push(vParent, vFirst, vLast, previousTextNode, idx);\n            idx = 0;\n            vParent = vLast;\n            vFirst = vLast = null;\n        }\n        else if (peek() === VNodeDataChar.SEPARATOR) {\n            const key = consumeValue();\n            const value = consumeValue();\n            vnode_setAttr(null, vParent, key, value);\n        }\n        else if (peek() === VNodeDataChar.CLOSE) {\n            consume();\n            vParent[5 /* ElementVNodeProps.lastChild */] = vLast;\n            idx = stack.pop();\n            previousTextNode = stack.pop();\n            vLast = stack.pop();\n            vFirst = stack.pop();\n            vParent = stack.pop();\n        }\n        else if (peek() === VNodeDataChar.SLOT) {\n            vnode_setAttr(null, vParent, QSlot, consumeValue());\n        }\n        else {\n            const textNode = child && fastNodeType(child) === /* Node.TEXT_NODE */ 3 ? child : null;\n            // must be alphanumeric\n            if (combinedText === null) {\n                combinedText = textNode ? textNode.nodeValue : null;\n                textIdx = 0;\n            }\n            let length = 0;\n            while (isLowercase(peek())) {\n                length += consume() - 97; /* `a` */\n                length *= 26;\n            }\n            length += consume() - 65; /* `A` */\n            const text = combinedText === null ? '' : combinedText.substring(textIdx, textIdx + length);\n            addVNode((previousTextNode = vnode_newSharedText(previousTextNode, textNode, text)));\n            textIdx += length;\n            // Text nodes get encoded as alphanumeric characters.\n        }\n    });\n    vParent[5 /* ElementVNodeProps.lastChild */] = vLast;\n    return vFirst;\n}\nexport const vnode_getType = (vnode) => {\n    const type = vnode[0 /* VNodeProps.flags */];\n    if (type & 1 /* VNodeFlags.Element */) {\n        return 1 /* Element */;\n    }\n    else if (type & 2 /* VNodeFlags.Virtual */) {\n        return 11 /* Virtual */;\n    }\n    else if (type & 4 /* VNodeFlags.Text */) {\n        return 3 /* Text */;\n    }\n    throw qError(43 /* QError.invalidVNodeType */, [type]);\n};\nconst isElement = (node) => node && typeof node == 'object' && fastNodeType(node) === /** Node.ELEMENT_NODE* */ 1;\n/**\n * Use this method to find the parent component for projection.\n *\n * Normally the parent component is just the first component which we encounter while traversing the\n * parents.\n *\n * However, if during traversal we encounter a projection, than we have to follow the projection,\n * and node with the projection component is further away (it is the parent's parent of the\n * projection's)\n *\n * So in general we have to go up as many parent components as there are projections nestings.\n *\n * - No projection nesting first parent component.\n * - One projection nesting, second parent component (parent's parent).\n * - Three projection nesting, third parent component (parent's parent's parent).\n * - And so on.\n *\n * @param vHost\n * @param rootVNode\n * @returns\n */\nexport const vnode_getProjectionParentComponent = (vHost, rootVNode) => {\n    let projectionDepth = 1;\n    while (projectionDepth--) {\n        while (vHost &&\n            (vnode_isVirtualVNode(vHost) ? vnode_getProp(vHost, OnRenderProp, null) === null : true)) {\n            const qSlotParent = vnode_getProp(vHost, QSlotParent, (id) => vnode_locate(rootVNode, id));\n            const vProjectionParent = vnode_isVirtualVNode(vHost) && qSlotParent;\n            if (vProjectionParent) {\n                // We found a projection, so we need to go up one more level.\n                projectionDepth++;\n            }\n            vHost = vProjectionParent || vnode_getParent(vHost);\n        }\n        if (projectionDepth > 0) {\n            vHost = vnode_getParent(vHost);\n        }\n    }\n    return vHost;\n};\nconst VNodeArray = class VNode extends Array {\n    static createElement(flags, parent, previousSibling, nextSibling, firstChild, lastChild, element, elementName) {\n        return new VNode(flags, parent, previousSibling, nextSibling, firstChild, lastChild, element, elementName, []);\n    }\n    static createText(flags, parent, previousSibling, nextSibling, textNode, text) {\n        return new VNode(flags, parent, previousSibling, nextSibling, textNode, text);\n    }\n    static createVirtual(flags, parent, previousSibling, nextSibling, firstChild, lastChild) {\n        return new VNode(flags, parent, previousSibling, nextSibling, firstChild, lastChild, []);\n    }\n    constructor(flags, parent, previousSibling, nextSibling, ...rest) {\n        super(flags, parent, previousSibling, nextSibling, ...rest);\n        if (isDev) {\n            this.toString = vnode_toString;\n        }\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm5vZGUuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvY2xpZW50L3Zub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxSEc7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RixPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUNMLFVBQVUsRUFHVixlQUFlLEdBRWhCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLFdBQVcsRUFDWCxhQUFhLEVBQ2IsV0FBVyxFQUNYLGVBQWUsRUFDZixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsT0FBTyxFQUNQLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFdBQVcsRUFDWCxNQUFNLEVBQ04sa0JBQWtCLEdBQ25CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVB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QUksS0FBSyxDQUNkLEtBQUssRUFDTCxNQUFNLEVBQ04sZUFBZSxFQUNmLFdBQVcsRUFDWCxVQUFVLEVBQ1YsU0FBUyxFQUNULE9BQU8sRUFDUCxXQUFXLEVBQ1gsRUFBRSxDQUNhLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQ2YsS0FBaUIsRUFDakIsTUFBb0IsRUFDcEIsZUFBNkIsRUFDN0IsV0FBeUIsRUFDekIsUUFBcUIsRUFDckIsSUFBd0I7UUFFeEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBYyxDQUFDO0lBQzdGLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUNsQixLQUFpQixFQUNqQixNQUFvQixFQUNwQixlQUE2QixFQUM3QixXQUF5QixFQUN6QixVQUF3QixFQUN4QixTQUF1QjtRQUV2QixPQUFPLElBQUksS0FBSyxDQUNkLEtBQUssRUFDTCxNQUFNLEVBQ04sZUFBZSxFQUNmLFdBQVcsRUFDWCxVQUFVLEVBQ1YsU0FBUyxFQUNULEVBQUUsQ0FDYSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxZQUNFLEtBQWlCLEVBQ2pCLE1BQW9CLEVBQ3BCLGVBQXlDLEVBQ3pDLFdBQXFDLEVBQ3JDLEdBQUcsSUFBNEQ7UUFFL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzVELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogICBWTm9kZSBpcyBhIERPTSBsaWtlIEFQSSBmb3Igd2Fsa2luZyB0aGUgRE9NIGJ1dCBpdDpcbiAqXG4gKiAgIDEuIEVuY29kZXMgdmlydHVhbCBub2RlcyB3aGljaCBkb24ndCBleGlzdCBpbiB0aGUgRE9NXG4gKiAgIDIuIENhbiBzZXJpYWxpemUgYXMgcGFydCBvZiBTU1IgYW5kIHRoYW4gZGVzZXJpYWxpemUgb24gdGhlIGNsaWVudC5cbiAqXG4gKiAgICMgVmlydHVhbFxuICpcbiAqICAgWW91IGNhbiB0aGluayBvZiBhIFZpcnR1YWwgbm9kZSBqdXN0IGxpa2UgYW4gYWRkaXRpb25hbCBgPGRpdj5gIGluIHRoYXQgaXQgZ3JvdXBzIHJlbGF0ZWQgY2hpbGRcbiAqICAgbm9kZXMgdG9nZXRoZXIuIEJ1dCB1bmxpa2UgYSBgPGRpdj5gIHdoaWNoIGhhcyBhIHJlYWwgRE9NIG5vZGUgYW5kIGhlbmNlIGltcGxpY2F0aW9ucyBmb3IgQ1NTLFxuICogICBWaXJ0dWFsIG5vZGVzIGhhdmUgbm8gRE9NIGltcGFjdCwgdGhleSBhcmUgaW52aXNpYmxlLlxuICpcbiAqICAgIyBQb3J0YWxcbiAqXG4gKiAgIFR3byBWaXJ0dWFsIG5vZGVzIGNhbiBiZSBsaW5rZWQgdG9nZXRoZXIgdG8gZm9ybSBhIFBvcnRhbC4gUG9ydGFscyBhcmUgdXNlZnVsIGZvciBwcm9qZWN0aW5nXG4gKiAgIGNvbnRlbnQgb3IganVzdCByZW5kZXJpbmcgY29udGVudCBpbiBhIGRpZmZlcmVudCBsb2NhdGlvbiBpbiB0aGUgdHJlZSwgd2hpbGUgbWFpbnRhaW5pbmcgYVxuICogICBsb2dpY2FsIHJlbGF0aW9uc2hpcC5cbiAqXG4gKiAgIFBvcnRhbHMgaGF2ZTpcbiAqXG4gKiAgIC0gUG9ydGFsIFNvdXJjZTogQSBWaXJ0dWFsIG5vZGUgd2hpY2ggY2FuIHJlZmVyIHRvIG9uZSBvcmUgbW9yZSBEZXN0aW5hdGlvbiBQb3J0YWxzIGJ5IG5hbWUuXG4gKiAgIC0gRGVzdGluYXRpb24gUG9ydGFsOiBBIFZpcnR1YWwgbm9kZSB3aGljaCBhY3RzIGFzIGEgZGVzdGluYXRpb24gYnV0IGFsc28gaGFzIGEgcG9pbnRlciBiYWNrIHRvIHRoZVxuICogICAgICAgUG9ydGFsIFNvdXJjZVxuICpcbiAqICAgIyMgRXhhbXBsZTpcbiAqXG4gKiAgIEdpdmVuIHRoaXMgY29kZTpcbiAqXG4gKiAgIGBgYHR5cGVzY3JpcHRcbiAqICAgY29uc3QgUGFyZW50ID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgICAgcmV0dXJuIChcbiAqICAgICAgIDxDaGlsZD5cbiAqICAgICAgICAgUHJvamVjdGlvbiBDb250ZW50XG4gKiAgICAgICAgIDxzcGFuIHE6c2xvdD1cInNlY29uZGFyeVwiPlNlY29uZGFyeSBDb250ZW50PC9zcGFuPlxuICogICAgICAgICA8c3BhbiBxOnNsb3Q9XCJvdGhlclwiPk90aGVyIENvbnRlbnQ8L3NwYW4+XG4gKiAgICAgICA8L0NoaWxkPlxuICogICAgIH07XG4gKiAgIH0pO1xuICpcbiAqICAgY29uc3QgQ2hpbGQgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgICByZXR1cm4gKFxuICogICAgICAgPGRpdj5cbiAqICAgICAgICAgPFNsb3Q+RGVmYXVsdCBQcmltYXJ5PC9TbG90PlxuICogICAgICAgICA8U2xvdCBuYW1lPVwic2Vjb25kYXJ5XCI+RGVmYXVsdCBTZWNvbmRhcnk8L1Nsb3Q+XG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICApO1xuICogICB9KTtcbiAqXG4gKiAgIHJlbmRlcig8Ym9keT48bWFpbj48UGFyZW50Lz48L21haW4+PGJvZHk+KTtcbiAqIGBgYFxuICpcbiAqICAgV2lsbCByZW5kZXIgbGlrZSBzbzpcbiAqXG4gKiAgIGBgYGh0bWxcbiAqICAgPGJvZHk+XG4gKiAgICAgPG1haW4+XG4gKiAgICAgICA8VmlydHVhbCBQYXJlbnQgcTpwb3J0YWw9XCI6M0E7c2Vjb25kYXJ5OjNCO290aGVyOjVBXCIgcTppZD1cIjJBXCI+XG4gKiAgICAgICAgIDxWaXJ0dWFsIENoaWxkPlxuICogICAgICAgICAgIDxkaXY+XG4gKiAgICAgICAgICAgICA8VmlydHVhbCBTbG90IHE6aWQ9XCIzQVwiIHE6cG9ydGFsPVwiXjoyQTs6M0FcIj4gUHJvamVjdGlvbiBDb250ZW50IDwvVmlydHVhbD5cbiAqICAgICAgICAgICAgIDxWaXJ0dWFsIFNsb3QgcTppZD1cIjNCXCIgcTpwb3J0YWw9XCJeOjJBOzozQlwiPlxuICogICAgICAgICAgICAgICA8c3BhbiBxOnNsb3Q9XCJzZWNvbmRhcnlcIj5TZWNvbmRhcnkgQ29udGVudDwvc3Bhbj5cbiAqICAgICAgICAgICAgIDwvVmlydHVhbD5cbiAqICAgICAgICAgICA8L2Rpdj5cbiAqICAgICAgICAgPC9WaXJ0dWFsPlxuICogICAgICAgPC9WaXJ0dWFsPlxuICogICAgIDwvbWFpbj5cbiAqICAgICA8cTp0ZW1wbGF0ZT5cbiAqICAgICAgIDxWaXJ0dWFsIHE6cG9ydGFsPVwiXjoyQVwiIHE6aWQ9XCI1QVwiPlxuICogICAgICAgICA8c3BhbiBxOnNsb3Q9XCJvdGhlclwiPk90aGVyIENvbnRlbnQ8L3NwYW4+XG4gKiAgICAgICA8L1ZpcnR1YWw+XG4gKiAgICAgICA8VmlydHVhbCBxOnBvcnRhbD1cIl46MkFcIiBxOmlkPVwiM0FcIj5cbiAqICAgICAgICAgRGVmYXVsdCBQcmltYXJ5XG4gKiAgICAgICA8L1ZpcnR1YWw+XG4gKiAgICAgICA8VmlydHVhbCBxOnBvcnRhbD1cIl46MkFcIiBxOmlkPVwiM0JcIj5cbiAqICAgICAgICAgRGVmYXVsdCBTZWNvbmRhcnlcbiAqICAgICAgIDwvVmlydHVhbD5cbiAqICAgICA8cTp0ZW1wbGF0ZT5cbiAqICAgPC9ib2R5PlxuICogYGBgXG4gKlxuICogICBFeHBsYW5hdGlvbjpcbiAqXG4gKiAgIC0gYHE6cG9ydGFsPVwiOjNBO3NlY29uZGFyeTozQjtvdGhlcjo1QVwiYFxuICpcbiAqICAgICAgIC0gTmFtZTogYGA7IFJlZjogYDNBYCAtIFdoZXJlIHRoZSBkZWZhdWx0IGNvbnRlbnQgd2VudC5cbiAqICAgICAgIC0gTmFtZTogYHNlY29uZGFyeWA7IFJlZjogYDNCYCAtIFdoZXJlIHRoZSAnc2Vjb25kYXJ5JyBjb250ZW50IHdlbnQuXG4gKiAgICAgICAtIE5hbWU6IGBvdGhlcmA7IFJlZjogYCVBYCAtIFdoZXJlIHRoZSBgb3RoZXJgIGNvbnRlbnQgd2VudC4gKE5vdGljZSBpbiB0aGlzIGNhc2UgdGhlIGNvbnRlbnQgaXNcbiAqICAgICAgICAgICAgICAgbGVmdCBvdmVyIGFuZCBvcyBpdCBlbmRzIHVwIGVuIHRoZSBgcTp0ZW1wbGF0ZXNgLiBXZSBjYW4gc2hhcmUgb25lICc8cTp0ZW1wbGF0ZT5gXG4gKiAgICAgICAgICAgICAgIGZvciBhbGwgbGVmdCBvdmVyIGNvbnRlbnQuKVxuICogICAtIGBxOnBvcnRhbD1cIl46MkE7OjNBXCJgXG4gKlxuICogICAgICAgLSBOYW1lOiBgXmA7IFJlZjogYDJBYCAtIFNwZWNpYWwgcG9pbnRlciB0byB0aGUgcGFyZW50IHBvcnRhbFxuICogICAgICAgLSBOYW1lOiBgYDsgUmVmOiBgM0FgIC0gTG9jYXRpb24gb2YgdGhlIGRlZmF1bHQgY29udGVudCBpbiBjYXNlIHRoZXJlIGlzIG5vdGhpbmcgcHJvamVjdGVkIGhlcmUuXG4gKlxuICogICAjIyBSZW5kZXJpbmdcbiAqXG4gKiAgIER1cmluZyBTU1IsIHRoZSByZW5kZXJlZCBjYW4gZGVsYXkgcmVuZGVyaW5nIHRoZSBKU1ggbm9kZXMgdW50aWwgY29ycmVjdCBwb3J0YWwgY29tZXMgdXAuIFRoZSBJRFxuICogICBzeXN0ZW0gaXMgYWxyZWFkeSBjYW4gbWFrZSBsYXp5IHJlZmVyZW5jZXMgdG8gdGhlIE5vZGVzLlxuICpcbiAqICAgQ2xpZW50IHNpZGUgcmVuZGVyaW5nIGRvZXMgbm90IG5lZWQgdG8gZGVhbCB3aXRoIElEcyBvciBgPHE6dGVtcGxhdGU+YCBhcyB1bi1yZW5kZXJlZCB2Tm9kZXMgZG9cbiAqICAgbm90IG5lZWQgdG8gYmUgc2VyaWFsaXplZCBpbnRvIERPTSwgYW5kIGNhbiByZW1haW4gb24gaGVhcC5cbiAqXG4gKiAgICMjIENvbnRleHRcbiAqXG4gKiAgIFdoZW4gbG9va2luZyB1cCBjb250ZXh0IGl0IGlzIHBvc3NpYmxlIHRvIGZvbGxvdyB5b3UgcmVhbCByZW5kZXIgcGFyZW50cyBvciBmb2xsb3cgdGhlIHBvcnRhbHMuXG4gKiAgIEFsbCBpbmZvcm1hdGlvbiBpcyBlbmNvZGVkIGluIHRoZSBwb3J0YWxzLlxuICpcbiAqICAgIyMgU2xvdCBQcm9qZWN0aW9uXG4gKlxuICogICBUaGUgdWx0aW1hdGUgdXNlciBvZiBwb3J0YWxzIGlzIFNsb3QgcHJvamVjdGlvbi4gQnV0IHRoZSB2Tm9kZSBkbyBub3QgdW5kZXJzdGFuZCBzbG90cywgcmF0aGVyXG4gKiAgIHRoZXkgdW5kZXJzdGFuZCBwb3J0YWwgcHJpbWl0aXZlcyB3aGljaCBtYWtlcyBTbG90IGltcGxlbWVudGF0aW9uIG11Y2ggc2ltcGxlci5cbiAqXG4gKiAgIE5PVEU6IFRoZSBwb3J0YWxzIG5lZWQgdG8gaGF2ZSBJRHMgZHVyaW5nIHNlcmlhbGl6YXRpb24gb25seS4gT25jZSBydW50aW1lIHRha2VzIG92ZXIsIHRoZXJlIGlzXG4gKiAgIG5vIG5lZWQgdG8gaGF2ZSBJRHMgb3IgdG8gd3JpdGUgb3ZlcmZsb3cgdG8gdGhlIGA8cTp0ZW1wbGF0ZT5gXG4gKi9cblxuaW1wb3J0IHsgaXNEZXYgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBxd2lrRGVidWdUb1N0cmluZyB9IGZyb20gJy4uL2RlYnVnJztcbmltcG9ydCB7IGFzc2VydERlZmluZWQsIGFzc2VydEVxdWFsLCBhc3NlcnRGYWxzZSwgYXNzZXJ0VHJ1ZSB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci9hc3NlcnQnO1xuaW1wb3J0IHsgUUVycm9yLCBxRXJyb3IgfSBmcm9tICcuLi9zaGFyZWQvZXJyb3IvZXJyb3InO1xuaW1wb3J0IHtcbiAgREVCVUdfVFlQRSxcbiAgUUNvbnRhaW5lclZhbHVlLFxuICBWaXJ0dWFsVHlwZSxcbiAgVmlydHVhbFR5cGVOYW1lLFxuICB0eXBlIFFFbGVtZW50LFxufSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgaXNUZXh0IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2VsZW1lbnQnO1xuaW1wb3J0IHtcbiAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsXG4gIEVMRU1FTlRfSUQsXG4gIEVMRU1FTlRfS0VZLFxuICBFTEVNRU5UX1BST1BTLFxuICBFTEVNRU5UX1NFUSxcbiAgRUxFTUVOVF9TRVFfSURYLFxuICBPblJlbmRlclByb3AsXG4gIFFfUFJPUFNfU0VQQVJBVE9SLFxuICBRQ29udGFpbmVyQXR0cixcbiAgUUNvbnRhaW5lckF0dHJFbmQsXG4gIFFDb250YWluZXJJc2xhbmQsXG4gIFFDb250YWluZXJJc2xhbmRFbmQsXG4gIFFDdHhBdHRyLFxuICBRSWdub3JlLFxuICBRSWdub3JlRW5kLFxuICBRU2NvcGVkU3R5bGUsXG4gIFFTbG90LFxuICBRU2xvdFBhcmVudCxcbiAgUVN0eWxlLFxuICBRU3R5bGVzQWxsU2VsZWN0b3IsXG59IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IGlzSHRtbEVsZW1lbnQgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgVk5vZGVEYXRhQ2hhciB9IGZyb20gJy4uL3NoYXJlZC92bm9kZS1kYXRhLXR5cGVzJztcbmltcG9ydCB7IGdldERvbUNvbnRhaW5lciB9IGZyb20gJy4vZG9tLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBtYXBBcHBfZmluZEluZHgsIG1hcEFycmF5X2dldCwgbWFwQXJyYXlfc2V0IH0gZnJvbSAnLi91dGlsLW1hcEFycmF5JztcbmltcG9ydCB7XG4gIHR5cGUgQ2xpZW50Q29udGFpbmVyLFxuICB0eXBlIENvbnRhaW5lckVsZW1lbnQsXG4gIHR5cGUgRWxlbWVudFZOb2RlLFxuICBFbGVtZW50Vk5vZGVQcm9wcyxcbiAgdHlwZSBRRG9jdW1lbnQsXG4gIHR5cGUgVGV4dFZOb2RlLFxuICBUZXh0Vk5vZGVQcm9wcyxcbiAgdHlwZSBWaXJ0dWFsVk5vZGUsXG4gIFZpcnR1YWxWTm9kZVByb3BzLFxuICB0eXBlIFZOb2RlLFxuICBWTm9kZUZsYWdzLFxuICBWTm9kZUZsYWdzSW5kZXgsXG4gIFZOb2RlUHJvcHMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgdm5vZGVfZ2V0RG9tQ2hpbGRyZW5XaXRoQ29ycmVjdE5hbWVzcGFjZXNUb0luc2VydCxcbiAgdm5vZGVfZ2V0RWxlbWVudE5hbWVzcGFjZUZsYWdzLFxufSBmcm9tICcuL3Zub2RlLW5hbWVzcGFjZSc7XG5pbXBvcnQgeyBtZXJnZU1hcHMgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFwcyc7XG5pbXBvcnQgeyBfRUZGRUNUX0JBQ0tfUkVGIH0gZnJvbSAnLi4vc2lnbmFsL2ZsYWdzJztcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogRnVuZGFtZW50YWwgRE9NIG9wZXJhdGlvbnMgYXJlOlxuICpcbiAqIC0gSW5zZXJ0IG5ldyBET00gZWxlbWVudC90ZXh0XG4gKiAtIFJlbW92ZSBET00gZWxlbWVudC90ZXh0XG4gKiAtIFNldCBET00gZWxlbWVudCBhdHRyaWJ1dGVzXG4gKiAtIFNldCB0ZXh0IG5vZGUgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gVk5vZGVKb3VybmFsT3BDb2RlIHtcbiAgU2V0VGV4dCA9IDEsIC8vIC0tLS0tLSBbU2V0QXR0cmlidXRlLCB0YXJnZXQsIHRleHRdXG4gIFNldEF0dHJpYnV0ZSA9IDIsIC8vIC0gW1NldEF0dHJpYnV0ZSwgdGFyZ2V0LCAuLi4oa2V5LCB2YWx1ZXMpXV1cbiAgSG9pc3RTdHlsZXMgPSAzLCAvLyAtLSBbSG9pc3RTdHlsZXMsIGRvY3VtZW50XVxuICBSZW1vdmUgPSA0LCAvLyAtLS0tLS0tIFtJbnNlcnQsIHRhcmdldChwYXJlbnQpLCAuLi5ub2Rlc11cbiAgSW5zZXJ0ID0gNSwgLy8gLS0tLS0tLSBbSW5zZXJ0LCB0YXJnZXQocGFyZW50KSwgcmVmZXJlbmNlLCAuLi5ub2Rlc11cbn1cblxuZXhwb3J0IHR5cGUgVk5vZGVKb3VybmFsID0gQXJyYXk8XG4gIFZOb2RlSm91cm5hbE9wQ29kZSB8IERvY3VtZW50IHwgRWxlbWVudCB8IFRleHQgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVsbFxuPjtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCBjb25zdCB2bm9kZV9uZXdFbGVtZW50ID0gKGVsZW1lbnQ6IEVsZW1lbnQsIGVsZW1lbnROYW1lOiBzdHJpbmcpOiBFbGVtZW50Vk5vZGUgPT4ge1xuICBhc3NlcnRFcXVhbChmYXN0Tm9kZVR5cGUoZWxlbWVudCksIDEgLyogRUxFTUVOVF9OT0RFICovLCAnRXhwZWN0aW5nIGVsZW1lbnQgbm9kZS4nKTtcbiAgY29uc3Qgdm5vZGU6IEVsZW1lbnRWTm9kZSA9IFZOb2RlQXJyYXkuY3JlYXRlRWxlbWVudChcbiAgICBWTm9kZUZsYWdzLkVsZW1lbnQgfCBWTm9kZUZsYWdzLkluZmxhdGVkIHwgKC0xIDw8IFZOb2RlRmxhZ3NJbmRleC5zaGlmdCksIC8vIEZsYWdcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgZWxlbWVudCxcbiAgICBlbGVtZW50TmFtZVxuICApO1xuICBhc3NlcnRUcnVlKHZub2RlX2lzRWxlbWVudFZOb2RlKHZub2RlKSwgJ0luY29ycmVjdCBmb3JtYXQgb2YgRWxlbWVudFZOb2RlLicpO1xuICBhc3NlcnRGYWxzZSh2bm9kZV9pc1RleHRWTm9kZSh2bm9kZSksICdJbmNvcnJlY3QgZm9ybWF0IG9mIEVsZW1lbnRWTm9kZS4nKTtcbiAgYXNzZXJ0RmFsc2Uodm5vZGVfaXNWaXJ0dWFsVk5vZGUodm5vZGUpLCAnSW5jb3JyZWN0IGZvcm1hdCBvZiBFbGVtZW50Vk5vZGUuJyk7XG4gIChlbGVtZW50IGFzIFFFbGVtZW50KS52Tm9kZSA9IG5ldyBXZWFrUmVmKHZub2RlKTtcbiAgcmV0dXJuIHZub2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX25ld1VuTWF0ZXJpYWxpemVkRWxlbWVudCA9IChlbGVtZW50OiBFbGVtZW50KTogRWxlbWVudFZOb2RlID0+IHtcbiAgYXNzZXJ0RXF1YWwoZmFzdE5vZGVUeXBlKGVsZW1lbnQpLCAxIC8qIEVMRU1FTlRfTk9ERSAqLywgJ0V4cGVjdGluZyBlbGVtZW50IG5vZGUuJyk7XG4gIGNvbnN0IHZub2RlOiBFbGVtZW50Vk5vZGUgPSBWTm9kZUFycmF5LmNyZWF0ZUVsZW1lbnQoXG4gICAgVk5vZGVGbGFncy5FbGVtZW50IHwgKC0xIDw8IFZOb2RlRmxhZ3NJbmRleC5zaGlmdCksIC8vIEZsYWdcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkLFxuICAgIGVsZW1lbnQsXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIGFzc2VydFRydWUodm5vZGVfaXNFbGVtZW50Vk5vZGUodm5vZGUpLCAnSW5jb3JyZWN0IGZvcm1hdCBvZiBFbGVtZW50Vk5vZGUuJyk7XG4gIGFzc2VydEZhbHNlKHZub2RlX2lzVGV4dFZOb2RlKHZub2RlKSwgJ0luY29ycmVjdCBmb3JtYXQgb2YgRWxlbWVudFZOb2RlLicpO1xuICBhc3NlcnRGYWxzZSh2bm9kZV9pc1ZpcnR1YWxWTm9kZSh2bm9kZSksICdJbmNvcnJlY3QgZm9ybWF0IG9mIEVsZW1lbnRWTm9kZS4nKTtcbiAgKGVsZW1lbnQgYXMgUUVsZW1lbnQpLnZOb2RlID0gbmV3IFdlYWtSZWYodm5vZGUpO1xuICByZXR1cm4gdm5vZGU7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfbmV3U2hhcmVkVGV4dCA9IChcbiAgcHJldmlvdXNUZXh0Tm9kZTogVGV4dFZOb2RlIHwgbnVsbCxcbiAgc2hhcmVkVGV4dE5vZGU6IFRleHQgfCBudWxsLFxuICB0ZXh0Q29udGVudDogc3RyaW5nXG4pOiBUZXh0Vk5vZGUgPT4ge1xuICBzaGFyZWRUZXh0Tm9kZSAmJlxuICAgIGFzc2VydEVxdWFsKGZhc3ROb2RlVHlwZShzaGFyZWRUZXh0Tm9kZSksIDMgLyogVEVYVF9OT0RFICovLCAnRXhwZWN0aW5nIGVsZW1lbnQgbm9kZS4nKTtcbiAgY29uc3Qgdm5vZGU6IFRleHRWTm9kZSA9IFZOb2RlQXJyYXkuY3JlYXRlVGV4dChcbiAgICBWTm9kZUZsYWdzLlRleHQgfCAoLTEgPDwgVk5vZGVGbGFnc0luZGV4LnNoaWZ0KSwgLy8gRmxhZ1xuICAgIG51bGwsIC8vIFBhcmVudFxuICAgIHByZXZpb3VzVGV4dE5vZGUsIC8vIFByZXZpb3VzIFRleHROb2RlICh1c3VhbGx5IGZpcnN0IGNoaWxkKVxuICAgIG51bGwsIC8vIE5leHQgc2libGluZ1xuICAgIHNoYXJlZFRleHROb2RlLCAvLyBTaGFyZWRUZXh0Tm9kZVxuICAgIHRleHRDb250ZW50IC8vIFRleHQgQ29udGVudFxuICApO1xuICBhc3NlcnRGYWxzZSh2bm9kZV9pc0VsZW1lbnRWTm9kZSh2bm9kZSksICdJbmNvcnJlY3QgZm9ybWF0IG9mIFRleHRWTm9kZS4nKTtcbiAgYXNzZXJ0VHJ1ZSh2bm9kZV9pc1RleHRWTm9kZSh2bm9kZSksICdJbmNvcnJlY3QgZm9ybWF0IG9mIFRleHRWTm9kZS4nKTtcbiAgYXNzZXJ0RmFsc2Uodm5vZGVfaXNWaXJ0dWFsVk5vZGUodm5vZGUpLCAnSW5jb3JyZWN0IGZvcm1hdCBvZiBUZXh0Vk5vZGUuJyk7XG4gIHJldHVybiB2bm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9uZXdUZXh0ID0gKHRleHROb2RlOiBUZXh0LCB0ZXh0Q29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkKTogVGV4dFZOb2RlID0+IHtcbiAgY29uc3Qgdm5vZGU6IFRleHRWTm9kZSA9IFZOb2RlQXJyYXkuY3JlYXRlVGV4dChcbiAgICBWTm9kZUZsYWdzLlRleHQgfCBWTm9kZUZsYWdzLkluZmxhdGVkIHwgKC0xIDw8IFZOb2RlRmxhZ3NJbmRleC5zaGlmdCksIC8vIEZsYWdzXG4gICAgbnVsbCwgLy8gUGFyZW50XG4gICAgbnVsbCwgLy8gTm8gcHJldmlvdXMgc2libGluZ1xuICAgIG51bGwsIC8vIFdlIG1heSBoYXZlIGEgbmV4dCBzaWJsaW5nLlxuICAgIHRleHROb2RlLCAvLyBUZXh0Tm9kZVxuICAgIHRleHRDb250ZW50IC8vIFRleHQgQ29udGVudFxuICApO1xuICBhc3NlcnRFcXVhbChmYXN0Tm9kZVR5cGUodGV4dE5vZGUpLCAzIC8qIFRFWFRfTk9ERSAqLywgJ0V4cGVjdGluZyBlbGVtZW50IG5vZGUuJyk7XG4gIGFzc2VydEZhbHNlKHZub2RlX2lzRWxlbWVudFZOb2RlKHZub2RlKSwgJ0luY29ycmVjdCBmb3JtYXQgb2YgVGV4dFZOb2RlLicpO1xuICBhc3NlcnRUcnVlKHZub2RlX2lzVGV4dFZOb2RlKHZub2RlKSwgJ0luY29ycmVjdCBmb3JtYXQgb2YgVGV4dFZOb2RlLicpO1xuICBhc3NlcnRGYWxzZSh2bm9kZV9pc1ZpcnR1YWxWTm9kZSh2bm9kZSksICdJbmNvcnJlY3QgZm9ybWF0IG9mIFRleHRWTm9kZS4nKTtcbiAgcmV0dXJuIHZub2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX25ld1ZpcnR1YWwgPSAoKTogVmlydHVhbFZOb2RlID0+IHtcbiAgY29uc3Qgdm5vZGU6IFZpcnR1YWxWTm9kZSA9IFZOb2RlQXJyYXkuY3JlYXRlVmlydHVhbChcbiAgICBWTm9kZUZsYWdzLlZpcnR1YWwgfCAoLTEgPDwgVk5vZGVGbGFnc0luZGV4LnNoaWZ0KSwgLy8gRmxhZ3NcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIG51bGxcbiAgKTtcbiAgYXNzZXJ0RmFsc2Uodm5vZGVfaXNFbGVtZW50Vk5vZGUodm5vZGUpLCAnSW5jb3JyZWN0IGZvcm1hdCBvZiBUZXh0Vk5vZGUuJyk7XG4gIGFzc2VydEZhbHNlKHZub2RlX2lzVGV4dFZOb2RlKHZub2RlKSwgJ0luY29ycmVjdCBmb3JtYXQgb2YgVGV4dFZOb2RlLicpO1xuICBhc3NlcnRUcnVlKHZub2RlX2lzVmlydHVhbFZOb2RlKHZub2RlKSwgJ0luY29ycmVjdCBmb3JtYXQgb2YgVGV4dFZOb2RlLicpO1xuICByZXR1cm4gdm5vZGU7XG59O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IHZub2RlX2lzVk5vZGUgPSAodk5vZGU6IGFueSk6IHZOb2RlIGlzIFZOb2RlID0+IHtcbiAgcmV0dXJuIHZOb2RlIGluc3RhbmNlb2YgVk5vZGVBcnJheTtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9pc0VsZW1lbnRWTm9kZSA9ICh2Tm9kZTogVk5vZGUpOiB2Tm9kZSBpcyBFbGVtZW50Vk5vZGUgPT4ge1xuICBhc3NlcnREZWZpbmVkKHZOb2RlLCAnTWlzc2luZyB2Tm9kZScpO1xuICBjb25zdCBmbGFnID0gKHZOb2RlIGFzIFZOb2RlKVtWTm9kZVByb3BzLmZsYWdzXTtcbiAgcmV0dXJuIChmbGFnICYgVk5vZGVGbGFncy5FbGVtZW50KSA9PT0gVk5vZGVGbGFncy5FbGVtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2lzRWxlbWVudE9yVGV4dFZOb2RlID0gKHZOb2RlOiBWTm9kZSk6IHZOb2RlIGlzIEVsZW1lbnRWTm9kZSA9PiB7XG4gIGFzc2VydERlZmluZWQodk5vZGUsICdNaXNzaW5nIHZOb2RlJyk7XG4gIGNvbnN0IGZsYWcgPSAodk5vZGUgYXMgVk5vZGUpW1ZOb2RlUHJvcHMuZmxhZ3NdO1xuICByZXR1cm4gKGZsYWcgJiBWTm9kZUZsYWdzLkVMRU1FTlRfT1JfVEVYVF9NQVNLKSAhPT0gMDtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9pc0VsZW1lbnRPclZpcnR1YWxWTm9kZSA9IChcbiAgdk5vZGU6IFZOb2RlXG4pOiB2Tm9kZSBpcyBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUgPT4ge1xuICBhc3NlcnREZWZpbmVkKHZOb2RlLCAnTWlzc2luZyB2Tm9kZScpO1xuICBjb25zdCBmbGFnID0gKHZOb2RlIGFzIFZOb2RlKVtWTm9kZVByb3BzLmZsYWdzXTtcbiAgcmV0dXJuIChmbGFnICYgVk5vZGVGbGFncy5FTEVNRU5UX09SX1ZJUlRVQUxfTUFTSykgIT09IDA7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfaXNNYXRlcmlhbGl6ZWQgPSAodk5vZGU6IFZOb2RlKTogYm9vbGVhbiA9PiB7XG4gIGFzc2VydERlZmluZWQodk5vZGUsICdNaXNzaW5nIHZOb2RlJyk7XG4gIGNvbnN0IGZsYWcgPSAodk5vZGUgYXMgVk5vZGUpW1ZOb2RlUHJvcHMuZmxhZ3NdO1xuICByZXR1cm4gKFxuICAgIChmbGFnICYgVk5vZGVGbGFncy5FbGVtZW50KSA9PT0gVk5vZGVGbGFncy5FbGVtZW50ICYmXG4gICAgdk5vZGVbRWxlbWVudFZOb2RlUHJvcHMuZmlyc3RDaGlsZF0gIT09IHVuZGVmaW5lZCAmJlxuICAgIHZOb2RlW0VsZW1lbnRWTm9kZVByb3BzLmxhc3RDaGlsZF0gIT09IHVuZGVmaW5lZFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2lzVGV4dFZOb2RlID0gKHZOb2RlOiBWTm9kZSk6IHZOb2RlIGlzIFRleHRWTm9kZSA9PiB7XG4gIGFzc2VydERlZmluZWQodk5vZGUsICdNaXNzaW5nIHZOb2RlJyk7XG4gIGNvbnN0IGZsYWcgPSAodk5vZGUgYXMgVk5vZGUpW1ZOb2RlUHJvcHMuZmxhZ3NdO1xuICByZXR1cm4gKGZsYWcgJiBWTm9kZUZsYWdzLlRleHQpID09PSBWTm9kZUZsYWdzLlRleHQ7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfaXNWaXJ0dWFsVk5vZGUgPSAodk5vZGU6IFZOb2RlKTogdk5vZGUgaXMgVmlydHVhbFZOb2RlID0+IHtcbiAgYXNzZXJ0RGVmaW5lZCh2Tm9kZSwgJ01pc3Npbmcgdk5vZGUnKTtcbiAgY29uc3QgZmxhZyA9ICh2Tm9kZSBhcyBWTm9kZSlbVk5vZGVQcm9wcy5mbGFnc107XG4gIHJldHVybiAoZmxhZyAmIFZOb2RlRmxhZ3MuVmlydHVhbCkgPT09IFZOb2RlRmxhZ3MuVmlydHVhbDtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9pc1Byb2plY3Rpb24gPSAodk5vZGU6IFZOb2RlKTogdk5vZGUgaXMgVmlydHVhbFZOb2RlID0+IHtcbiAgYXNzZXJ0RGVmaW5lZCh2Tm9kZSwgJ01pc3Npbmcgdk5vZGUnKTtcbiAgY29uc3QgZmxhZyA9ICh2Tm9kZSBhcyBWTm9kZSlbVk5vZGVQcm9wcy5mbGFnc107XG4gIHJldHVybiAoXG4gICAgKGZsYWcgJiBWTm9kZUZsYWdzLlZpcnR1YWwpID09PSBWTm9kZUZsYWdzLlZpcnR1YWwgJiZcbiAgICB2bm9kZV9nZXRQcm9wKHZOb2RlIGFzIFZpcnR1YWxWTm9kZSwgUVNsb3QsIG51bGwpICE9PSBudWxsXG4gICk7XG59O1xuXG5jb25zdCBlbnN1cmVUZXh0Vk5vZGUgPSAodk5vZGU6IFZOb2RlKTogVGV4dFZOb2RlID0+IHtcbiAgYXNzZXJ0VHJ1ZSh2bm9kZV9pc1RleHRWTm9kZSh2Tm9kZSksICdFeHBlY3RpbmcgVGV4dFZOb2RlIHdhczogJyArIHZub2RlX2dldE5vZGVUeXBlTmFtZSh2Tm9kZSkpO1xuICByZXR1cm4gdk5vZGUgYXMgVGV4dFZOb2RlO1xufTtcblxuY29uc3QgZW5zdXJlRWxlbWVudE9yVmlydHVhbFZOb2RlID0gKHZOb2RlOiBWTm9kZSkgPT4ge1xuICBhc3NlcnREZWZpbmVkKHZOb2RlLCAnTWlzc2luZyB2Tm9kZScpO1xuICBhc3NlcnRUcnVlKFxuICAgICh2Tm9kZVtWTm9kZVByb3BzLmZsYWdzXSAmIFZOb2RlRmxhZ3MuRUxFTUVOVF9PUl9WSVJUVUFMX01BU0spICE9PSAwLFxuICAgICdFeHBlY3RpbmcgRWxlbWVudFZOb2RlIG9yIFZpcnR1YWxWTm9kZSB3YXM6ICcgKyB2bm9kZV9nZXROb2RlVHlwZU5hbWUodk5vZGUpXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5zdXJlRWxlbWVudFZOb2RlID0gKHZOb2RlOiBWTm9kZSk6IEVsZW1lbnRWTm9kZSA9PiB7XG4gIGFzc2VydFRydWUoXG4gICAgdm5vZGVfaXNFbGVtZW50Vk5vZGUodk5vZGUpLFxuICAgICdFeHBlY3RpbmcgRWxlbWVudFZOb2RlIHdhczogJyArIHZub2RlX2dldE5vZGVUeXBlTmFtZSh2Tm9kZSlcbiAgKTtcbiAgcmV0dXJuIHZOb2RlIGFzIEVsZW1lbnRWTm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXROb2RlVHlwZU5hbWUgPSAodk5vZGU6IFZOb2RlKTogc3RyaW5nID0+IHtcbiAgaWYgKHZOb2RlKSB7XG4gICAgY29uc3QgZmxhZ3MgPSB2Tm9kZVtWTm9kZVByb3BzLmZsYWdzXTtcbiAgICBzd2l0Y2ggKGZsYWdzICYgVk5vZGVGbGFncy5UWVBFX01BU0spIHtcbiAgICAgIGNhc2UgVk5vZGVGbGFncy5FbGVtZW50OlxuICAgICAgICByZXR1cm4gJ0VsZW1lbnQnO1xuICAgICAgY2FzZSBWTm9kZUZsYWdzLlZpcnR1YWw6XG4gICAgICAgIHJldHVybiAnVmlydHVhbCc7XG4gICAgICBjYXNlIFZOb2RlRmxhZ3MuVGV4dDpcbiAgICAgICAgcmV0dXJuICdUZXh0JztcbiAgICB9XG4gIH1cbiAgcmV0dXJuICc8dW5rbm93bj4nO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2Vuc3VyZUVsZW1lbnRJbmZsYXRlZCA9ICh2bm9kZTogVk5vZGUpID0+IHtcbiAgY29uc3QgZmxhZ3MgPSB2bm9kZVtWTm9kZVByb3BzLmZsYWdzXTtcbiAgaWYgKChmbGFncyAmIFZOb2RlRmxhZ3MuSU5GTEFURURfVFlQRV9NQVNLKSA9PT0gVk5vZGVGbGFncy5FbGVtZW50KSB7XG4gICAgY29uc3QgZWxlbWVudFZOb2RlID0gdm5vZGUgYXMgRWxlbWVudFZOb2RlO1xuICAgIGVsZW1lbnRWTm9kZVtWTm9kZVByb3BzLmZsYWdzXSBePSBWTm9kZUZsYWdzLkluZmxhdGVkO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50Vk5vZGVbRWxlbWVudFZOb2RlUHJvcHMuZWxlbWVudF07XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuYXR0cmlidXRlcztcbiAgICBjb25zdCBwcm9wcyA9IHZub2RlX2dldFByb3BzKGVsZW1lbnRWTm9kZSk7XG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgYXR0cmlidXRlcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICBjb25zdCBhdHRyID0gYXR0cmlidXRlc1tpZHhdO1xuICAgICAgY29uc3Qga2V5ID0gYXR0ci5uYW1lO1xuICAgICAgaWYgKGtleSA9PT0gUV9QUk9QU19TRVBBUkFUT1IgfHwgIWtleSkge1xuICAgICAgICAvLyBTVkcgaW4gRG9taW5vIGRvZXMgbm90IHN1cHBvcnQgJzonIHNvIGl0IGJlY29tZXMgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICAvLyBhbGwgYXR0cmlidXRlcyBhZnRlciB0aGUgJzonIGFyZSBjb25zaWRlcmVkIGltbXV0YWJsZSwgYW5kIHNvIHdlIGlnbm9yZSB0aGVtLlxuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAoa2V5LnN0YXJ0c1dpdGgoUUNvbnRhaW5lckF0dHIpKSB7XG4gICAgICAgIGlmIChhdHRyLnZhbHVlID09PSBRQ29udGFpbmVyVmFsdWUuSFRNTCkge1xuICAgICAgICAgIG1hcEFycmF5X3NldChwcm9wcywgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsIGVsZW1lbnQuaW5uZXJIVE1MLCAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChhdHRyLnZhbHVlID09PSBRQ29udGFpbmVyVmFsdWUuVEVYVCAmJiAndmFsdWUnIGluIGVsZW1lbnQpIHtcbiAgICAgICAgICBtYXBBcnJheV9zZXQocHJvcHMsICd2YWx1ZScsIGVsZW1lbnQudmFsdWUsIDApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFrZXkuc3RhcnRzV2l0aCgnb246JykpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhdHRyLnZhbHVlO1xuICAgICAgICBtYXBBcnJheV9zZXQocHJvcHMsIGtleSwgdmFsdWUsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqIFdhbGtzIHRoZSBWTm9kZSB0cmVlIGFuZCBtYXRlcmlhbGl6ZSBpdCB1c2luZyBgdm5vZGVfZ2V0Rmlyc3RDaGlsZGAuICovXG5leHBvcnQgZnVuY3Rpb24gdm5vZGVfd2Fsa1ZOb2RlKFxuICB2Tm9kZTogVk5vZGUsXG4gIGNhbGxiYWNrPzogKHZOb2RlOiBWTm9kZSwgdlBhcmVudDogVk5vZGUgfCBudWxsKSA9PiBib29sZWFuIHwgdm9pZFxuKTogdm9pZCB7XG4gIGxldCB2Q3Vyc29yOiBWTm9kZSB8IG51bGwgPSB2Tm9kZTtcbiAgLy8gRGVwdGggZmlyc3QgdHJhdmVyc2FsXG4gIGlmICh2bm9kZV9pc1RleHRWTm9kZSh2Tm9kZSkpIHtcbiAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUgc3Vic2NyaXB0aW9ucyBvciBjaGlsZHJlbjtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHZQYXJlbnQ6IFZOb2RlIHwgbnVsbCA9IG51bGw7XG4gIGRvIHtcbiAgICBpZiAoY2FsbGJhY2s/Lih2Q3Vyc29yLCB2UGFyZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2Rmlyc3RDaGlsZCA9IHZub2RlX2dldEZpcnN0Q2hpbGQodkN1cnNvcik7XG4gICAgaWYgKHZGaXJzdENoaWxkKSB7XG4gICAgICB2Q3Vyc29yID0gdkZpcnN0Q2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gT3V0IG9mIGNoaWxkcmVuXG4gICAgaWYgKHZDdXJzb3IgPT09IHZOb2RlKSB7XG4gICAgICAvLyB3ZSBhcmUgd2hlcmUgd2Ugc3RhcnRlZCwgdGhpcyBtZWFucyB0aGF0IHZOb2RlIGhhcyBubyBjaGlsZHJlbiwgc28gd2UgYXJlIGRvbmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE91dCBvZiBjaGlsZHJlbiwgZ28gdG8gbmV4dCBzaWJsaW5nXG4gICAgY29uc3Qgdk5leHRTaWJsaW5nID0gdm5vZGVfZ2V0TmV4dFNpYmxpbmcodkN1cnNvcik7XG4gICAgaWYgKHZOZXh0U2libGluZykge1xuICAgICAgdkN1cnNvciA9IHZOZXh0U2libGluZztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBPdXQgb2Ygc2libGluZ3MsIGdvIHRvIHBhcmVudFxuICAgIHZQYXJlbnQgPSB2bm9kZV9nZXRQYXJlbnQodkN1cnNvcik7XG4gICAgd2hpbGUgKHZQYXJlbnQpIHtcbiAgICAgIGlmICh2UGFyZW50ID09PSB2Tm9kZSkge1xuICAgICAgICAvLyBXZSBhcmUgYmFjayB3aGVyZSB3ZSBzdGFydGVkLCB3ZSBhcmUgZG9uZS5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgdk5leHRQYXJlbnRTaWJsaW5nID0gdm5vZGVfZ2V0TmV4dFNpYmxpbmcodlBhcmVudCk7XG4gICAgICBpZiAodk5leHRQYXJlbnRTaWJsaW5nKSB7XG4gICAgICAgIHZDdXJzb3IgPSB2TmV4dFBhcmVudFNpYmxpbmc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdlBhcmVudCA9IHZub2RlX2dldFBhcmVudCh2UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKHZQYXJlbnQgPT0gbnVsbCkge1xuICAgICAgLy8gV2UgYXJlIGRvbmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IHdoaWxlICh0cnVlIGFzIGJvb2xlYW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdm5vZGVfZ2V0RE9NQ2hpbGROb2RlcyhcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICByb290OiBWTm9kZSxcbiAgaXNWTm9kZTogdHJ1ZSxcbiAgY2hpbGROb2Rlcz86IChFbGVtZW50Vk5vZGUgfCBUZXh0Vk5vZGUpW11cbik6IChFbGVtZW50Vk5vZGUgfCBUZXh0Vk5vZGUpW107XG5leHBvcnQgZnVuY3Rpb24gdm5vZGVfZ2V0RE9NQ2hpbGROb2RlcyhcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICByb290OiBWTm9kZSxcbiAgaXNWTm9kZT86IGZhbHNlLFxuICBjaGlsZE5vZGVzPzogKEVsZW1lbnQgfCBUZXh0KVtdXG4pOiAoRWxlbWVudCB8IFRleHQpW107XG5leHBvcnQgZnVuY3Rpb24gdm5vZGVfZ2V0RE9NQ2hpbGROb2RlcyhcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICByb290OiBWTm9kZSxcbiAgaXNWTm9kZTogYm9vbGVhbiA9IGZhbHNlLFxuICBjaGlsZE5vZGVzOiAoRWxlbWVudFZOb2RlIHwgVGV4dFZOb2RlIHwgRWxlbWVudCB8IFRleHQpW10gPSBbXVxuKTogKEVsZW1lbnRWTm9kZSB8IFRleHRWTm9kZSB8IEVsZW1lbnQgfCBUZXh0KVtdIHtcbiAgaWYgKHZub2RlX2lzRWxlbWVudE9yVGV4dFZOb2RlKHJvb3QpKSB7XG4gICAgaWYgKHZub2RlX2lzVGV4dFZOb2RlKHJvb3QpKSB7XG4gICAgICAvKipcbiAgICAgICAqIElmIHdlIGFyZSBjb2xsZWN0aW5nIHRleHQgbm9kZXMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgaW5mbGF0ZWQuIElmIG5vdCBpbmZsYXRlZFxuICAgICAgICogd2Ugd291bGQgcmV0dXJuIGEgc2luZ2xlIHRleHQgbm9kZSB3aGljaCByZXByZXNlbnRzIG1hbnkgYWN0dWFsIHRleHQgbm9kZXMsIG9yIHJlbW92aW5nIGFcbiAgICAgICAqIHNpbmdsZSB0ZXh0IG5vZGUgd291bGQgcmVtb3ZlIG1hbnkgdGV4dCBub2Rlcy5cbiAgICAgICAqL1xuICAgICAgdm5vZGVfZW5zdXJlVGV4dEluZmxhdGVkKGpvdXJuYWwsIHJvb3QpO1xuICAgIH1cbiAgICBjaGlsZE5vZGVzLnB1c2goaXNWTm9kZSA/IHJvb3QgOiB2bm9kZV9nZXROb2RlKHJvb3QpISk7XG4gICAgcmV0dXJuIGNoaWxkTm9kZXM7XG4gIH1cbiAgbGV0IHZOb2RlID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZChyb290KTtcbiAgd2hpbGUgKHZOb2RlKSB7XG4gICAgaWYgKHZub2RlX2lzRWxlbWVudFZOb2RlKHZOb2RlKSkge1xuICAgICAgY2hpbGROb2Rlcy5wdXNoKGlzVk5vZGUgPyB2Tm9kZSA6IHZub2RlX2dldE5vZGUodk5vZGUpISk7XG4gICAgfSBlbHNlIGlmICh2bm9kZV9pc1RleHRWTm9kZSh2Tm9kZSkpIHtcbiAgICAgIC8qKlxuICAgICAgICogSWYgd2UgYXJlIGNvbGxlY3RpbmcgdGV4dCBub2Rlcywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBpbmZsYXRlZC4gSWYgbm90IGluZmxhdGVkXG4gICAgICAgKiB3ZSB3b3VsZCByZXR1cm4gYSBzaW5nbGUgdGV4dCBub2RlIHdoaWNoIHJlcHJlc2VudHMgbWFueSBhY3R1YWwgdGV4dCBub2Rlcywgb3IgcmVtb3ZpbmcgYVxuICAgICAgICogc2luZ2xlIHRleHQgbm9kZSB3b3VsZCByZW1vdmUgbWFueSB0ZXh0IG5vZGVzLlxuICAgICAgICovXG4gICAgICB2bm9kZV9lbnN1cmVUZXh0SW5mbGF0ZWQoam91cm5hbCwgdk5vZGUpO1xuICAgICAgY2hpbGROb2Rlcy5wdXNoKGlzVk5vZGUgPyB2Tm9kZSA6IHZub2RlX2dldE5vZGUodk5vZGUpISk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzVk5vZGVcbiAgICAgICAgPyB2bm9kZV9nZXRET01DaGlsZE5vZGVzKGpvdXJuYWwsIHZOb2RlLCB0cnVlLCBjaGlsZE5vZGVzIGFzIChFbGVtZW50Vk5vZGUgfCBUZXh0Vk5vZGUpW10pXG4gICAgICAgIDogdm5vZGVfZ2V0RE9NQ2hpbGROb2Rlcyhqb3VybmFsLCB2Tm9kZSwgZmFsc2UsIGNoaWxkTm9kZXMgYXMgKEVsZW1lbnQgfCBUZXh0KVtdKTtcbiAgICB9XG4gICAgdk5vZGUgPSB2bm9kZV9nZXROZXh0U2libGluZyh2Tm9kZSk7XG4gIH1cbiAgcmV0dXJuIGNoaWxkTm9kZXM7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJldmlvdXMvbmV4dCBzaWJsaW5nIGJ1dCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBET00uXG4gKlxuICogR2l2ZW46XG4gKlxuICogYGBgXG4gKiA8ZGl2PlxuICogICA8PmE8Lz5cbiAqICAgPD5cbiAqICAgICA8PjwvPlxuICogICAgIDw+YjwvPlxuICogICAgIDw+PC8+XG4gKiAgIDwvPlxuICogICA8PmM8Lz5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICogVGhlbjpcbiAqXG4gKiAtIE5leHQ6IGlmIHdlIHN0YXJ0IGF0IGBhYCB0aGUgbmV4dCBET00gc2libGluZyBpcyBgYmAsIHRoYW4gYGNgLlxuICogLSBQcmV2aW91czogaWYgd2Ugc3RhcnQgYXQgYGNgIHRoZSBuZXh0IERPTSBzaWJsaW5nIGlzIGBiYCwgdGhhbiBgYWAuXG4gKlxuICogQHBhcmFtIHZOb2RlIC0gU3RhcnRpbmcgbm9kZVxuICogQHBhcmFtIG5leHREaXJlY3Rpb24gLSBEaXJlY3Rpb24gdG8gc2VhcmNoIHRydWU9bmV4dCwgZmFsc2U9cHJldmlvdXNcbiAqIEBwYXJhbSBkZXNjZW5kIC0gSWYgdHJ1ZSwgdGhhbiB3ZSB3aWxsIGRlc2NlbmQgaW50byB0aGUgY2hpbGRyZW4gZmlyc3QuXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCB2bm9kZV9nZXREb21TaWJsaW5nID0gKFxuICB2Tm9kZTogVk5vZGUsXG4gIG5leHREaXJlY3Rpb246IGJvb2xlYW4sXG4gIGRlc2NlbmQ6IGJvb2xlYW5cbik6IFZOb2RlIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNoaWxkUHJvcCA9IG5leHREaXJlY3Rpb24gPyBWaXJ0dWFsVk5vZGVQcm9wcy5maXJzdENoaWxkIDogVmlydHVhbFZOb2RlUHJvcHMubGFzdENoaWxkO1xuICBjb25zdCBzaWJsaW5nUHJvcCA9IG5leHREaXJlY3Rpb24gPyBWTm9kZVByb3BzLm5leHRTaWJsaW5nIDogVk5vZGVQcm9wcy5wcmV2aW91c1NpYmxpbmc7XG4gIGxldCBjdXJzb3I6IFZOb2RlIHwgbnVsbCA9IHZOb2RlO1xuICAvLyBmaXJzdCBtYWtlIHN1cmUgd2UgaGF2ZSBhIERPTSBub2RlIG9yIG5vIGNoaWxkcmVuLlxuICB3aGlsZSAoZGVzY2VuZCAmJiBjdXJzb3IgJiYgdm5vZGVfaXNWaXJ0dWFsVk5vZGUoY3Vyc29yKSkge1xuICAgIGNvbnN0IGNoaWxkOiBWTm9kZSB8IG51bGwgPSBjdXJzb3JbY2hpbGRQcm9wXTtcbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGNoaWxkW1ZOb2RlUHJvcHMuZmxhZ3NdICYgVk5vZGVGbGFncy5FTEVNRU5UX09SX1RFWFRfTUFTSykge1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBjdXJzb3IgPSBjaGlsZDtcbiAgfVxuICB3aGlsZSAoY3Vyc29yKSB7XG4gICAgLy8gTG9vayBhdCB0aGUgcHJldmlvdXMvbmV4dCBzaWJsaW5nLlxuICAgIGxldCBzaWJsaW5nOiBWTm9kZSB8IG51bGwgPSBjdXJzb3Jbc2libGluZ1Byb3BdO1xuICAgIGlmIChzaWJsaW5nICYmIHNpYmxpbmdbVk5vZGVQcm9wcy5mbGFnc10gJiBWTm9kZUZsYWdzLkVMRU1FTlRfT1JfVEVYVF9NQVNLKSB7XG4gICAgICAvLyB3ZSBmb3VuZCBhIHByZXZpb3VzL25leHQgRE9NIG5vZGUsIHJldHVybiBpdC5cbiAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgIH0gZWxzZSBpZiAoIXNpYmxpbmcpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzaWJsaW5nIHRoYW4gd2FsayB1cCB0aGUgdHJlZSB1bnRpbCB5b3UgZmluZCBvbmUuXG4gICAgICBsZXQgdmlydHVhbDogVk5vZGUgfCBudWxsID0gY3Vyc29yW1ZOb2RlUHJvcHMucGFyZW50XTtcbiAgICAgIGlmICh2aXJ0dWFsICYmICF2bm9kZV9pc1ZpcnR1YWxWTm9kZSh2aXJ0dWFsKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHdoaWxlICh2aXJ0dWFsICYmICEoc2libGluZyA9IHZpcnR1YWxbc2libGluZ1Byb3BdKSkge1xuICAgICAgICB2aXJ0dWFsID0gdmlydHVhbFtWTm9kZVByb3BzLnBhcmVudF07XG5cbiAgICAgICAgaWYgKHZpcnR1YWwgJiYgIXZub2RlX2lzVmlydHVhbFZOb2RlKHZpcnR1YWwpKSB7XG4gICAgICAgICAgLy8gdGhlIHBhcmVudCBub2RlIGlzIG5vdCB2aXJ0dWFsLCBzbyB3ZSBhcmUgZG9uZSBoZXJlLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXNpYmxpbmcpIHtcbiAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBmaW5kIGEgc2libGluZywgdGhhbiB3ZSBhcmUgZG9uZS5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodm5vZGVfaXNUZXh0Vk5vZGUoc2libGluZykgJiYgdmlydHVhbCAmJiB2bm9kZV9pc0VsZW1lbnRWTm9kZSh2aXJ0dWFsKSkge1xuICAgICAgICAvLyBzaWJsaW5nIHRvIHRoZSByZWFsIGVsZW1lbnQgaXMgYSB0ZXh0IG5vZGUsIHRoaXMgaXMgbm90IGEgc2libGluZ1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQXQgdGhpcyBwb2ludCBgc2libGluZ2AgaXMgYSBuZXh0IG5vZGUgdG8gbG9vayBhdC5cbiAgICAvLyBOZXh0IHN0ZXAgaXMgdG8gZGVzY2VuZCB1bnRpbCB3ZSBmaW5kIGEgRE9NIGRvbmUuXG4gICAgd2hpbGUgKHNpYmxpbmcpIHtcbiAgICAgIGN1cnNvciA9IHNpYmxpbmc7XG4gICAgICBpZiAoY3Vyc29yW1ZOb2RlUHJvcHMuZmxhZ3NdICYgVk5vZGVGbGFncy5FTEVNRU5UX09SX1RFWFRfTUFTSyAmJiB2bm9kZV9nZXROb2RlKGN1cnNvcikpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgYSBub2RlLCBiZWNhdXNlIGl0IGNvdWxkIGJlIGEgdGV4dCBub2RlIHdoaWNoIGlzXG4gICAgICAgIC8vIHplcm8gbGVuZ3RoIGFuZCB3aGljaCBkb2VzIG5vdCBoYXZlIGEgcmVwcmVzZW50YXRpb24gaW4gdGhlIERPTS5cbiAgICAgICAgcmV0dXJuIGN1cnNvcjtcbiAgICAgIH1cbiAgICAgIHNpYmxpbmcgPSAoY3Vyc29yIGFzIFZpcnR1YWxWTm9kZSlbY2hpbGRQcm9wXTtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIGhlcmUgd2UgZGlkIG5vdCBmaW5kIGFueXRoaW5nIGFuZCB3ZSBuZWVkIHRvIGdvIHVwIHRoZSB0cmVlIGFnYWluLlxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3Qgdm5vZGVfZW5zdXJlSW5mbGF0ZWRJZlRleHQgPSAoam91cm5hbDogVk5vZGVKb3VybmFsLCB2Tm9kZTogVk5vZGUpOiB2b2lkID0+IHtcbiAgaWYgKHZub2RlX2lzVGV4dFZOb2RlKHZOb2RlKSkge1xuICAgIHZub2RlX2Vuc3VyZVRleHRJbmZsYXRlZChqb3VybmFsLCB2Tm9kZSk7XG4gIH1cbn07XG5cbmNvbnN0IHZub2RlX2Vuc3VyZVRleHRJbmZsYXRlZCA9IChqb3VybmFsOiBWTm9kZUpvdXJuYWwsIHZub2RlOiBUZXh0Vk5vZGUpID0+IHtcbiAgY29uc3QgdGV4dFZOb2RlID0gZW5zdXJlVGV4dFZOb2RlKHZub2RlKTtcbiAgY29uc3QgZmxhZ3MgPSB0ZXh0Vk5vZGVbVk5vZGVQcm9wcy5mbGFnc107XG4gIGlmICgoZmxhZ3MgJiBWTm9kZUZsYWdzLkluZmxhdGVkKSA9PT0gMCkge1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB2bm9kZV9nZXREb21QYXJlbnQodm5vZGUpITtcbiAgICBjb25zdCBzaGFyZWRUZXh0Tm9kZSA9IHRleHRWTm9kZVtUZXh0Vk5vZGVQcm9wcy5ub2RlXSBhcyBUZXh0O1xuICAgIGNvbnN0IGRvYyA9IHBhcmVudE5vZGUub3duZXJEb2N1bWVudDtcbiAgICAvLyBXYWxrIHRoZSBwcmV2aW91cyBzaWJsaW5ncyBhbmQgaW5mbGF0ZSB0aGVtLlxuICAgIGxldCBjdXJzb3IgPSB2bm9kZV9nZXREb21TaWJsaW5nKHZub2RlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgLy8gSWYgdGV4dCBub2RlIGlzIDAgbGVuZ3RoLCB0aGFuIHRoZXJlIGlzIG5vIHRleHQgbm9kZS5cbiAgICAvLyBJbiB0aGF0IGNhc2Ugd2UgdXNlIHRoZSBuZXh0IG5vZGUgYXMgYSByZWZlcmVuY2UsIGluIHdoaWNoXG4gICAgLy8gY2FzZSB3ZSBrbm93IHRoYXQgdGhlIG5leHQgbm9kZSBNVVNUIGJlIGVpdGhlciBOVUxMIG9yIGFuIEVsZW1lbnQuXG4gICAgY29uc3QgaW5zZXJ0QmVmb3JlTm9kZTogRWxlbWVudCB8IFRleHQgfCBudWxsID1cbiAgICAgIHNoYXJlZFRleHROb2RlIHx8XG4gICAgICAoKHZub2RlX2dldERvbVNpYmxpbmcodm5vZGUsIHRydWUsIHRydWUpPy5bRWxlbWVudFZOb2RlUHJvcHMuZWxlbWVudF0gfHwgbnVsbCkgYXNcbiAgICAgICAgfCBFbGVtZW50XG4gICAgICAgIHwgVGV4dFxuICAgICAgICB8IG51bGwpO1xuXG4gICAgbGV0IGxhc3RQcmV2aW91c1RleHROb2RlID0gaW5zZXJ0QmVmb3JlTm9kZTtcbiAgICB3aGlsZSAoY3Vyc29yICYmIHZub2RlX2lzVGV4dFZOb2RlKGN1cnNvcikpIHtcbiAgICAgIGlmICgoY3Vyc29yW1ZOb2RlUHJvcHMuZmxhZ3NdICYgVk5vZGVGbGFncy5JbmZsYXRlZCkgPT09IDApIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoY3Vyc29yW1RleHRWTm9kZVByb3BzLnRleHRdKTtcbiAgICAgICAgam91cm5hbC5wdXNoKFZOb2RlSm91cm5hbE9wQ29kZS5JbnNlcnQsIHBhcmVudE5vZGUsIGxhc3RQcmV2aW91c1RleHROb2RlLCB0ZXh0Tm9kZSk7XG4gICAgICAgIGxhc3RQcmV2aW91c1RleHROb2RlID0gdGV4dE5vZGU7XG4gICAgICAgIGN1cnNvcltUZXh0Vk5vZGVQcm9wcy5ub2RlXSA9IHRleHROb2RlO1xuICAgICAgICBjdXJzb3JbVk5vZGVQcm9wcy5mbGFnc10gfD0gVk5vZGVGbGFncy5JbmZsYXRlZDtcbiAgICAgIH1cbiAgICAgIGN1cnNvciA9IHZub2RlX2dldERvbVNpYmxpbmcoY3Vyc29yLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuICAgIC8vIFdhbGsgdGhlIG5leHQgc2libGluZ3MgYW5kIGluZmxhdGUgdGhlbS5cbiAgICBjdXJzb3IgPSB2bm9kZTtcbiAgICB3aGlsZSAoY3Vyc29yICYmIHZub2RlX2lzVGV4dFZOb2RlKGN1cnNvcikpIHtcbiAgICAgIGNvbnN0IG5leHQgPSB2bm9kZV9nZXREb21TaWJsaW5nKGN1cnNvciwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBjb25zdCBpc0xhc3ROb2RlID0gbmV4dCA/ICF2bm9kZV9pc1RleHRWTm9kZShuZXh0KSA6IHRydWU7XG4gICAgICBpZiAoKGN1cnNvcltWTm9kZVByb3BzLmZsYWdzXSAmIFZOb2RlRmxhZ3MuSW5mbGF0ZWQpID09PSAwKSB7XG4gICAgICAgIGlmIChpc0xhc3ROb2RlICYmIHNoYXJlZFRleHROb2RlKSB7XG4gICAgICAgICAgam91cm5hbC5wdXNoKFZOb2RlSm91cm5hbE9wQ29kZS5TZXRUZXh0LCBzaGFyZWRUZXh0Tm9kZSwgY3Vyc29yW1RleHRWTm9kZVByb3BzLnRleHRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZShjdXJzb3JbVGV4dFZOb2RlUHJvcHMudGV4dF0pO1xuICAgICAgICAgIGpvdXJuYWwucHVzaChWTm9kZUpvdXJuYWxPcENvZGUuSW5zZXJ0LCBwYXJlbnROb2RlLCBpbnNlcnRCZWZvcmVOb2RlLCB0ZXh0Tm9kZSk7XG4gICAgICAgICAgY3Vyc29yW1RleHRWTm9kZVByb3BzLm5vZGVdID0gdGV4dE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgY3Vyc29yW1ZOb2RlUHJvcHMuZmxhZ3NdIHw9IFZOb2RlRmxhZ3MuSW5mbGF0ZWQ7XG4gICAgICB9XG4gICAgICBjdXJzb3IgPSBuZXh0O1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2xvY2F0ZSA9IChyb290Vk5vZGU6IEVsZW1lbnRWTm9kZSwgaWQ6IHN0cmluZyB8IEVsZW1lbnQpOiBWTm9kZSA9PiB7XG4gIGVuc3VyZUVsZW1lbnRWTm9kZShyb290Vk5vZGUpO1xuICBsZXQgdk5vZGU6IFZOb2RlIHwgRWxlbWVudCA9IHJvb3RWTm9kZTtcbiAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHJvb3RWTm9kZVtFbGVtZW50Vk5vZGVQcm9wcy5lbGVtZW50XSBhcyBDb250YWluZXJFbGVtZW50O1xuICBjb25zdCB7IHFWTm9kZVJlZnMgfSA9IGNvbnRhaW5lckVsZW1lbnQ7XG4gIGxldCBlbGVtZW50T2Zmc2V0OiBudW1iZXIgPSAtMTtcbiAgbGV0IHJlZkVsZW1lbnQ6IEVsZW1lbnQgfCBWTm9kZTtcbiAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHtcbiAgICBhc3NlcnREZWZpbmVkKHFWTm9kZVJlZnMsICdNaXNzaW5nIHFWTm9kZVJlZnMuJyk7XG4gICAgZWxlbWVudE9mZnNldCA9IHBhcnNlSW50KGlkKTtcbiAgICByZWZFbGVtZW50ID0gcVZOb2RlUmVmcy5nZXQoZWxlbWVudE9mZnNldCkhO1xuICB9IGVsc2Uge1xuICAgIHJlZkVsZW1lbnQgPSBpZDtcblxuICAgIGNvbnN0IHZOb2RlID0gKHJlZkVsZW1lbnQgYXMgUUVsZW1lbnQpLnZOb2RlPy5kZXJlZigpO1xuICAgIGlmICh2Tm9kZSkge1xuICAgICAgcmV0dXJuIHZOb2RlO1xuICAgIH1cbiAgfVxuICBhc3NlcnREZWZpbmVkKHJlZkVsZW1lbnQsICdNaXNzaW5nIHJlZkVsZW1lbnQuJyk7XG4gIGlmICghdm5vZGVfaXNWTm9kZShyZWZFbGVtZW50KSkge1xuICAgIGFzc2VydFRydWUoXG4gICAgICBjb250YWluZXJFbGVtZW50LmNvbnRhaW5zKHJlZkVsZW1lbnQpLFxuICAgICAgYENvdWxkbid0IGZpbmQgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBjb250YWluZXIgd2hpbGUgbG9jYXRpbmcgdGhlIFZOb2RlLmBcbiAgICApO1xuICAgIC8vIFdlIG5lZWQgdG8gZmluZCB0aGUgdm5vZGUuXG4gICAgbGV0IHBhcmVudCA9IHJlZkVsZW1lbnQ7XG4gICAgY29uc3QgZWxlbWVudFBhdGg6IEVsZW1lbnRbXSA9IFtyZWZFbGVtZW50XTtcbiAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudCAhPT0gY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQhO1xuICAgICAgZWxlbWVudFBhdGgucHVzaChwYXJlbnQpO1xuICAgIH1cbiAgICAvLyBTdGFydCBhdCByb290Vk5vZGUgYW5kIGZvbGxvdyB0aGUgYGVsZW1lbnRQYXRoYCB0byBmaW5kIHRoZSB2bm9kZS5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudFBhdGgubGVuZ3RoIC0gMjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZOb2RlID0gdm5vZGVfZ2V0Vk5vZGVGb3JDaGlsZE5vZGUodk5vZGUsIGVsZW1lbnRQYXRoW2ldKTtcbiAgICB9XG4gICAgZWxlbWVudE9mZnNldCAhPSAtMSAmJiBxVk5vZGVSZWZzIS5zZXQoZWxlbWVudE9mZnNldCwgdk5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHZOb2RlID0gcmVmRWxlbWVudDtcbiAgfVxuICBpZiAodHlwZW9mIGlkID09PSAnc3RyaW5nJykge1xuICAgIC8vIHByb2Nlc3MgdmlydHVhbCBub2RlIHNlYXJjaC5cbiAgICBjb25zdCBpZExlbmd0aCA9IGlkLmxlbmd0aDtcbiAgICBsZXQgaWR4ID0gaW5kZXhPZkFscGhhbnVtZXJpYyhpZCwgaWRMZW5ndGgpO1xuICAgIGxldCBjaGlsZElkeCA9IDA7XG4gICAgd2hpbGUgKGlkeCA8IGlkTGVuZ3RoKSB7XG4gICAgICBjb25zdCBjaCA9IGlkLmNoYXJDb2RlQXQoaWR4KTtcbiAgICAgIGNoaWxkSWR4ICo9IDI2IC8qIGEteiAqLztcbiAgICAgIGlmIChjaCA+PSA5NyAvKiBhICovKSB7XG4gICAgICAgIC8vIGlzIGxvd2VyY2FzZVxuICAgICAgICBjaGlsZElkeCArPSBjaCAtIDk3IC8qIGEgKi87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpcyB1cHBlcmNhc2VcbiAgICAgICAgY2hpbGRJZHggKz0gY2ggLSA2NSAvKiBBICovO1xuICAgICAgICB2Tm9kZSA9IHZub2RlX2dldENoaWxkV2l0aElkeCh2Tm9kZSwgY2hpbGRJZHgpO1xuICAgICAgICBjaGlsZElkeCA9IDA7XG4gICAgICB9XG4gICAgICBpZHgrKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZOb2RlO1xufTtcblxuY29uc3Qgdm5vZGVfZ2V0Q2hpbGRXaXRoSWR4ID0gKHZOb2RlOiBWTm9kZSwgY2hpbGRJZHg6IG51bWJlcik6IFZOb2RlID0+IHtcbiAgbGV0IGNoaWxkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZCh2Tm9kZSk7XG4gIGFzc2VydERlZmluZWQoY2hpbGQsICdNaXNzaW5nIGNoaWxkLicpO1xuICB3aGlsZSAoY2hpbGRbVk5vZGVQcm9wcy5mbGFnc10gPj4+IFZOb2RlRmxhZ3NJbmRleC5zaGlmdCAhPT0gY2hpbGRJZHgpIHtcbiAgICBjaGlsZCA9IHZub2RlX2dldE5leHRTaWJsaW5nKGNoaWxkKTtcbiAgICBhc3NlcnREZWZpbmVkKGNoaWxkLCAnTWlzc2luZyBjaGlsZC4nKTtcbiAgfVxuICByZXR1cm4gY2hpbGQ7XG59O1xuXG5jb25zdCB2Tm9kZVN0YWNrOiBWTm9kZVtdID0gW107XG5leHBvcnQgY29uc3Qgdm5vZGVfZ2V0Vk5vZGVGb3JDaGlsZE5vZGUgPSAoXG4gIHZOb2RlOiBFbGVtZW50Vk5vZGUsXG4gIGNoaWxkRWxlbWVudDogRWxlbWVudFxuKTogRWxlbWVudFZOb2RlID0+IHtcbiAgZW5zdXJlRWxlbWVudFZOb2RlKHZOb2RlKTtcbiAgbGV0IGNoaWxkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZCh2Tm9kZSk7XG4gIGFzc2VydERlZmluZWQoY2hpbGQsICdNaXNzaW5nIGNoaWxkLicpO1xuICB3aGlsZSAoY2hpbGQgJiYgY2hpbGRbRWxlbWVudFZOb2RlUHJvcHMuZWxlbWVudF0gIT09IGNoaWxkRWxlbWVudCkge1xuICAgIGlmICh2bm9kZV9pc1ZpcnR1YWxWTm9kZShjaGlsZCkpIHtcbiAgICAgIGNvbnN0IG5leHQgPSB2bm9kZV9nZXROZXh0U2libGluZyhjaGlsZCk7XG4gICAgICBjb25zdCBmaXJzdENoaWxkID0gdm5vZGVfZ2V0Rmlyc3RDaGlsZChjaGlsZCk7XG4gICAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgICBuZXh0ICYmIHZOb2RlU3RhY2sucHVzaChuZXh0KTtcbiAgICAgICAgY2hpbGQgPSBmaXJzdENoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGQgPSBuZXh0IHx8ICh2Tm9kZVN0YWNrLmxlbmd0aCA/IHZOb2RlU3RhY2sucG9wKCkhIDogbnVsbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5leHQgPSB2bm9kZV9nZXROZXh0U2libGluZyhjaGlsZCk7XG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICBjaGlsZCA9IG5leHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZCA9IG5leHQgfHwgdk5vZGVTdGFjay5wb3AoKSE7XG4gICAgICB9XG4gICAgfVxuICAgIGFzc2VydERlZmluZWQoY2hpbGQsICdNaXNzaW5nIGNoaWxkLicpO1xuICB9XG4gIHdoaWxlICh2Tm9kZVN0YWNrLmxlbmd0aCkge1xuICAgIHZOb2RlU3RhY2sucG9wKCk7XG4gIH1cbiAgZW5zdXJlRWxlbWVudFZOb2RlKGNoaWxkKTtcbiAgYXNzZXJ0RXF1YWwoY2hpbGRbRWxlbWVudFZOb2RlUHJvcHMuZWxlbWVudF0sIGNoaWxkRWxlbWVudCwgJ0NoaWxkIG5vdCBmb3VuZC4nKTtcbiAgLy8gY29uc29sZS5sb2coJ0ZPVU5EJywgY2hpbGRbVk5vZGVQcm9wcy5ub2RlXT8ub3V0ZXJIVE1MKTtcbiAgcmV0dXJuIGNoaWxkIGFzIEVsZW1lbnRWTm9kZTtcbn07XG5cbmNvbnN0IGluZGV4T2ZBbHBoYW51bWVyaWMgPSAoaWQ6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBsZXQgaWR4ID0gMDtcbiAgd2hpbGUgKGlkeCA8IGxlbmd0aCkge1xuICAgIGlmIChpZC5jaGFyQ29kZUF0KGlkeCkgPD0gNTcgLyogOSAqLykge1xuICAgICAgaWR4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9XG4gIHJldHVybiBsZW5ndGg7XG59O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IHZub2RlX2pvdXJuYWxUb1N0cmluZyA9IChqb3VybmFsOiBWTm9kZUpvdXJuYWwpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsaW5lcyA9IFsnSk9VUk5BTDonXTtcbiAgbGV0IGlkeCA9IDA7XG4gIGNvbnN0IGxlbmd0aCA9IGpvdXJuYWwubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIHN0cmluZ2lmeSguLi5hcmdzOiBhbnlbXSkge1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBhcmdzXG4gICAgICAgIC5tYXAoKGFyZykgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgICB9IGVsc2UgaWYgKGFyZyAmJiBpc0h0bWxFbGVtZW50KGFyZykpIHtcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBhcmcub3V0ZXJIVE1MO1xuICAgICAgICAgICAgY29uc3QgaGFzQ2hpbGROb2RlcyA9ICEhYXJnLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gaHRtbC5pbmRleE9mKCc+Jyk7XG4gICAgICAgICAgICBjb25zdCBsYXN0SWR4ID0gaHRtbC5sYXN0SW5kZXhPZignPCcpO1xuICAgICAgICAgICAgcmV0dXJuIGlkeCA+IDAgJiYgaGFzQ2hpbGROb2Rlc1xuICAgICAgICAgICAgICA/IGh0bWwuc3Vic3RyaW5nKDAsIGlkeCArIDEpICsgJy4uLicgKyBodG1sLnN1YnN0cmluZyhsYXN0SWR4KVxuICAgICAgICAgICAgICA6IGh0bWw7XG4gICAgICAgICAgfSBlbHNlIGlmIChhcmcgJiYgaXNUZXh0KGFyZykpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmcubm9kZVZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJyAnKVxuICAgICk7XG4gIH1cblxuICB3aGlsZSAoaWR4IDwgbGVuZ3RoKSB7XG4gICAgY29uc3Qgb3AgPSBqb3VybmFsW2lkeCsrXSBhcyBWTm9kZUpvdXJuYWxPcENvZGU7XG4gICAgc3dpdGNoIChvcCkge1xuICAgICAgY2FzZSBWTm9kZUpvdXJuYWxPcENvZGUuU2V0VGV4dDpcbiAgICAgICAgc3RyaW5naWZ5KCdTZXRUZXh0Jyk7XG4gICAgICAgIHN0cmluZ2lmeSgnICAnLCBqb3VybmFsW2lkeCsrXSk7XG4gICAgICAgIHN0cmluZ2lmeSgnICAgLS0+Jywgam91cm5hbFtpZHgrK10pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVk5vZGVKb3VybmFsT3BDb2RlLlNldEF0dHJpYnV0ZTpcbiAgICAgICAgc3RyaW5naWZ5KCdTZXRBdHRyaWJ1dGUnKTtcbiAgICAgICAgc3RyaW5naWZ5KCcgICcsIGpvdXJuYWxbaWR4KytdKTtcbiAgICAgICAgc3RyaW5naWZ5KCcgICBrZXknLCBqb3VybmFsW2lkeCsrXSk7XG4gICAgICAgIHN0cmluZ2lmeSgnICAgdmFsJywgam91cm5hbFtpZHgrK10pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVk5vZGVKb3VybmFsT3BDb2RlLkhvaXN0U3R5bGVzOlxuICAgICAgICBzdHJpbmdpZnkoJ0hvaXN0U3R5bGVzJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWTm9kZUpvdXJuYWxPcENvZGUuUmVtb3ZlOiB7XG4gICAgICAgIHN0cmluZ2lmeSgnUmVtb3ZlJyk7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGpvdXJuYWxbaWR4KytdO1xuICAgICAgICBzdHJpbmdpZnkoJyAgJywgcGFyZW50KTtcbiAgICAgICAgbGV0IG5vZGVUb1JlbW92ZTogYW55O1xuICAgICAgICB3aGlsZSAoaWR4IDwgbGVuZ3RoICYmIHR5cGVvZiAobm9kZVRvUmVtb3ZlID0gam91cm5hbFtpZHhdKSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICBzdHJpbmdpZnkoJyAgIC0tPicsIG5vZGVUb1JlbW92ZSk7XG4gICAgICAgICAgaWR4Kys7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFZOb2RlSm91cm5hbE9wQ29kZS5JbnNlcnQ6IHtcbiAgICAgICAgc3RyaW5naWZ5KCdJbnNlcnQnKTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gam91cm5hbFtpZHgrK107XG4gICAgICAgIGNvbnN0IGluc2VydEJlZm9yZSA9IGpvdXJuYWxbaWR4KytdO1xuICAgICAgICBzdHJpbmdpZnkoJyAgJywgcGFyZW50KTtcbiAgICAgICAgbGV0IG5ld0NoaWxkOiBhbnk7XG4gICAgICAgIHdoaWxlIChpZHggPCBsZW5ndGggJiYgdHlwZW9mIChuZXdDaGlsZCA9IGpvdXJuYWxbaWR4XSkgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgc3RyaW5naWZ5KCcgICAtLT4nLCBuZXdDaGlsZCk7XG4gICAgICAgICAgaWR4Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc2VydEJlZm9yZSkge1xuICAgICAgICAgIHN0cmluZ2lmeSgnICAgICAgJywgaW5zZXJ0QmVmb3JlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbGluZXMucHVzaCgnRU5EIEpPVVJOQUwnKTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufTtcblxuY29uc3QgcGFyc2VCb29sZWFuID0gKHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCk6IGJvb2xlYW4gPT4ge1xuICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufTtcblxuY29uc3QgaXNCb29sZWFuQXR0ciA9IChlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBpc0Jvb2xlYW4gPVxuICAgIGtleSA9PSAnYWxsb3dmdWxsc2NyZWVuJyB8fFxuICAgIGtleSA9PSAnYXN5bmMnIHx8XG4gICAga2V5ID09ICdhdXRvZm9jdXMnIHx8XG4gICAga2V5ID09ICdhdXRvcGxheScgfHxcbiAgICBrZXkgPT0gJ2NoZWNrZWQnIHx8XG4gICAga2V5ID09ICdjb250cm9scycgfHxcbiAgICBrZXkgPT0gJ2RlZmF1bHQnIHx8XG4gICAga2V5ID09ICdkZWZlcicgfHxcbiAgICBrZXkgPT0gJ2Rpc2FibGVkJyB8fFxuICAgIGtleSA9PSAnZm9ybW5vdmFsaWRhdGUnIHx8XG4gICAga2V5ID09ICdpbmVydCcgfHxcbiAgICBrZXkgPT0gJ2lzbWFwJyB8fFxuICAgIGtleSA9PSAnaXRlbXNjb3BlJyB8fFxuICAgIGtleSA9PSAnbG9vcCcgfHxcbiAgICBrZXkgPT0gJ211bHRpcGxlJyB8fFxuICAgIGtleSA9PSAnbXV0ZWQnIHx8XG4gICAga2V5ID09ICdub21vZHVsZScgfHxcbiAgICBrZXkgPT0gJ25vdmFsaWRhdGUnIHx8XG4gICAga2V5ID09ICdvcGVuJyB8fFxuICAgIGtleSA9PSAncGxheXNpbmxpbmUnIHx8XG4gICAga2V5ID09ICdyZWFkb25seScgfHxcbiAgICBrZXkgPT0gJ3JlcXVpcmVkJyB8fFxuICAgIGtleSA9PSAncmV2ZXJzZWQnIHx8XG4gICAga2V5ID09ICdzZWxlY3RlZCc7XG4gIHJldHVybiBpc0Jvb2xlYW4gJiYga2V5IGluIGVsZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfYXBwbHlKb3VybmFsID0gKGpvdXJuYWw6IFZOb2RlSm91cm5hbCkgPT4ge1xuICAvLyBjb25zb2xlLmxvZygnQVBQTFkgSk9VUk5BTCcsIHZub2RlX2pvdXJuYWxUb1N0cmluZyhqb3VybmFsKSk7XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBsZW5ndGggPSBqb3VybmFsLmxlbmd0aDtcbiAgd2hpbGUgKGlkeCA8IGxlbmd0aCkge1xuICAgIGNvbnN0IG9wID0gam91cm5hbFtpZHgrK10gYXMgVk5vZGVKb3VybmFsT3BDb2RlO1xuICAgIHN3aXRjaCAob3ApIHtcbiAgICAgIGNhc2UgVk5vZGVKb3VybmFsT3BDb2RlLlNldFRleHQ6XG4gICAgICAgIGNvbnN0IHRleHQgPSBqb3VybmFsW2lkeCsrXSBhcyBUZXh0O1xuICAgICAgICB0ZXh0Lm5vZGVWYWx1ZSA9IGpvdXJuYWxbaWR4KytdIGFzIHN0cmluZztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZOb2RlSm91cm5hbE9wQ29kZS5TZXRBdHRyaWJ1dGU6XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBqb3VybmFsW2lkeCsrXSBhcyBFbGVtZW50O1xuICAgICAgICBsZXQga2V5ID0gam91cm5hbFtpZHgrK10gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3NOYW1lJykge1xuICAgICAgICAgIGtleSA9ICdjbGFzcyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSBqb3VybmFsW2lkeCsrXSBhcyBzdHJpbmcgfCBudWxsIHwgYm9vbGVhbjtcbiAgICAgICAgaWYgKGlzQm9vbGVhbkF0dHIoZWxlbWVudCwga2V5KSkge1xuICAgICAgICAgIChlbGVtZW50IGFzIGFueSlba2V5XSA9IHBhcnNlQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndmFsdWUnICYmIGtleSBpbiBlbGVtZW50KSB7XG4gICAgICAgICAgKGVsZW1lbnQgYXMgYW55KS52YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBkYW5nZXJvdXNseVNldElubmVySFRNTCkge1xuICAgICAgICAgIChlbGVtZW50IGFzIGFueSkuaW5uZXJIVE1MID0gdmFsdWUhO1xuICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFFDb250YWluZXJBdHRyLCBRQ29udGFpbmVyVmFsdWUuSFRNTCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVk5vZGVKb3VybmFsT3BDb2RlLkhvaXN0U3R5bGVzOlxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGpvdXJuYWxbaWR4KytdIGFzIERvY3VtZW50O1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuaGVhZDtcbiAgICAgICAgY29uc3Qgc3R5bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChRU3R5bGVzQWxsU2VsZWN0b3IpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVk5vZGVKb3VybmFsT3BDb2RlLlJlbW92ZTpcbiAgICAgICAgY29uc3QgcmVtb3ZlUGFyZW50ID0gam91cm5hbFtpZHgrK10gYXMgRWxlbWVudDtcbiAgICAgICAgbGV0IG5vZGVUb1JlbW92ZTogYW55O1xuICAgICAgICB3aGlsZSAoaWR4IDwgbGVuZ3RoICYmIHR5cGVvZiAobm9kZVRvUmVtb3ZlID0gam91cm5hbFtpZHhdKSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZW1vdmVQYXJlbnQucmVtb3ZlQ2hpbGQobm9kZVRvUmVtb3ZlIGFzIEVsZW1lbnQgfCBUZXh0KTtcbiAgICAgICAgICBpZHgrKztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVk5vZGVKb3VybmFsT3BDb2RlLkluc2VydDpcbiAgICAgICAgY29uc3QgaW5zZXJ0UGFyZW50ID0gam91cm5hbFtpZHgrK10gYXMgRWxlbWVudDtcbiAgICAgICAgY29uc3QgaW5zZXJ0QmVmb3JlID0gam91cm5hbFtpZHgrK10gYXMgRWxlbWVudCB8IFRleHQgfCBudWxsO1xuICAgICAgICBsZXQgbmV3Q2hpbGQ6IGFueTtcbiAgICAgICAgd2hpbGUgKGlkeCA8IGxlbmd0aCAmJiB0eXBlb2YgKG5ld0NoaWxkID0gam91cm5hbFtpZHhdKSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICBpbnNlcnRQYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBpbnNlcnRCZWZvcmUpO1xuICAgICAgICAgIGlkeCsrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBqb3VybmFsLmxlbmd0aCA9IDA7XG59O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IGNvbnN0IHZub2RlX2luc2VydEJlZm9yZSA9IChcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICBwYXJlbnQ6IEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSxcbiAgbmV3Q2hpbGQ6IFZOb2RlLFxuICBpbnNlcnRCZWZvcmU6IFZOb2RlIHwgbnVsbFxuKSA9PiB7XG4gIGVuc3VyZUVsZW1lbnRPclZpcnR1YWxWTm9kZShwYXJlbnQpO1xuICBpZiAodm5vZGVfaXNFbGVtZW50Vk5vZGUocGFyZW50KSkge1xuICAgIGVuc3VyZU1hdGVyaWFsaXplZChwYXJlbnQpO1xuICB9XG4gIGNvbnN0IG5ld0NoaWxkQ3VycmVudFBhcmVudCA9IG5ld0NoaWxkW1ZOb2RlUHJvcHMucGFyZW50XTtcbiAgaWYgKG5ld0NoaWxkID09PSBpbnNlcnRCZWZvcmUpIHtcbiAgICAvLyBpbnZhbGlkIGluc2VydEJlZm9yZS4gV2UgY2FuJ3QgaW5zZXJ0IGJlZm9yZSBzZWxmIHJlZmVyZW5jZVxuICAgIC8vIHByZXZlbnQgaW5maW5pdHkgbG9vcCBhbmQgcHV0dGluZyBzZWxmIHJlZmVyZW5jZSB0byBuZXh0IHNpYmxpbmdcbiAgICBpZiAobmV3Q2hpbGRDdXJyZW50UGFyZW50KSB7XG4gICAgICAvLyBlYXJseSByZXR1cm4sIGFzIHRoZSBuZXdDaGlsZCBpcyBhbHJlYWR5IGluIHRoZSB0cmVlIGFuZCB3ZSBhcmUgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiB0aGUgbmV3Q2hpbGQgaXMgbm90IGluIHRoZSB0cmVlLCB0aGFuIHdlIGluc2VydCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICBpbnNlcnRCZWZvcmUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVuc3VyZSB0aGF0IHRoZSBwcmV2aW91cyBub2RlIGlzIHVubGlua2VkLlxuICBpZiAoXG4gICAgbmV3Q2hpbGRDdXJyZW50UGFyZW50ICYmXG4gICAgKG5ld0NoaWxkW1ZOb2RlUHJvcHMucHJldmlvdXNTaWJsaW5nXSB8fFxuICAgICAgbmV3Q2hpbGRbVk5vZGVQcm9wcy5uZXh0U2libGluZ10gfHxcbiAgICAgIG5ld0NoaWxkQ3VycmVudFBhcmVudCAhPT0gcGFyZW50KVxuICApIHtcbiAgICB2bm9kZV9yZW1vdmUoam91cm5hbCwgbmV3Q2hpbGRDdXJyZW50UGFyZW50LCBuZXdDaGlsZCwgZmFsc2UpO1xuICB9XG5cbiAgbGV0IGFkanVzdGVkSW5zZXJ0QmVmb3JlOiBWTm9kZSB8IG51bGwgPSBudWxsO1xuICBpZiAoaW5zZXJ0QmVmb3JlID09IG51bGwpIHtcbiAgICBpZiAodm5vZGVfaXNWaXJ0dWFsVk5vZGUocGFyZW50KSkge1xuICAgICAgLy8gSWYgYGluc2VydEJlZm9yZWAgaXMgbnVsbCwgdGhhbiB3ZSBuZWVkIHRvIGluc2VydCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuICAgICAgLy8gV2VsbCwgbm90IHF1aXRlLiBJZiB0aGUgcGFyZW50IGlzIGEgdmlydHVhbCBub2RlLCBvdXIgXCJsYXN0IG5vZGVcIiBpcyBub3QgdGhlIHNhbWVcbiAgICAgIC8vIGFzIHRoZSBET00gXCJsYXN0IG5vZGVcIi4gU28gaW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gbG9vayBmb3IgdGhlIFwibmV4dCBub2RlXCIgZnJvbVxuICAgICAgLy8gb3VyIHBhcmVudC5cblxuICAgICAgYWRqdXN0ZWRJbnNlcnRCZWZvcmUgPSB2bm9kZV9nZXREb21TaWJsaW5nKHBhcmVudCwgdHJ1ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh2bm9kZV9pc1ZpcnR1YWxWTm9kZShpbnNlcnRCZWZvcmUpKSB7XG4gICAgLy8gSWYgdGhlIGBpbnNlcnRCZWZvcmVgIGlzIHZpcnR1YWwsIHRoYW4gd2UgbmVlZCB0byBkZXNjZW5kIGludG8gdGhlIHZpcnR1YWwgYW5kIGZpbmQgZSBhY3R1YWxcbiAgICBhZGp1c3RlZEluc2VydEJlZm9yZSA9IHZub2RlX2dldERvbVNpYmxpbmcoaW5zZXJ0QmVmb3JlLCB0cnVlLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBhZGp1c3RlZEluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZTtcbiAgfVxuICBhZGp1c3RlZEluc2VydEJlZm9yZSAmJiB2bm9kZV9lbnN1cmVJbmZsYXRlZElmVGV4dChqb3VybmFsLCBhZGp1c3RlZEluc2VydEJlZm9yZSk7XG4gIC8vIElmIGBpbnNlcnRCZWZvcmVgIGlzIG51bGwsIHRoYW4gd2UgbmVlZCB0byBpbnNlcnQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgLy8gV2VsbCwgbm90IHF1aXRlLiBJZiB0aGUgcGFyZW50IGlzIGEgdmlydHVhbCBub2RlLCBvdXIgXCJsYXN0IG5vZGVcIiBpcyBub3QgdGhlIHNhbWVcbiAgLy8gYXMgdGhlIERPTSBcImxhc3Qgbm9kZVwiLiBTbyBpbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBsb29rIGZvciB0aGUgXCJuZXh0IG5vZGVcIiBmcm9tXG4gIC8vIG91ciBwYXJlbnQuXG4gIC8vIGNvbnN0IHNob3VsZFdlVXNlUGFyZW50VmlydHVhbCA9IGluc2VydEJlZm9yZSA9PSBudWxsICYmIHZub2RlX2lzVmlydHVhbFZOb2RlKHBhcmVudCk7XG4gIC8vIGNvbnN0IGluc2VydEJlZm9yZU5vZGUgPSBzaG91bGRXZVVzZVBhcmVudFZpcnR1YWxcbiAgLy8gICA/IHZub2RlX2dldERvbVNpYmxpbmcocGFyZW50LCB0cnVlKVxuICAvLyAgIDogaW5zZXJ0QmVmb3JlO1xuICBjb25zdCBkb21QYXJlbnRWTm9kZSA9IHZub2RlX2dldERvbVBhcmVudFZOb2RlKHBhcmVudCk7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBkb21QYXJlbnRWTm9kZSAmJiBkb21QYXJlbnRWTm9kZVtFbGVtZW50Vk5vZGVQcm9wcy5lbGVtZW50XTtcblxuICBpZiAocGFyZW50Tm9kZSkge1xuICAgIGNvbnN0IGRvbUNoaWxkcmVuID0gdm5vZGVfZ2V0RG9tQ2hpbGRyZW5XaXRoQ29ycmVjdE5hbWVzcGFjZXNUb0luc2VydChcbiAgICAgIGpvdXJuYWwsXG4gICAgICBkb21QYXJlbnRWTm9kZSxcbiAgICAgIG5ld0NoaWxkXG4gICAgKTtcbiAgICBkb21DaGlsZHJlbi5sZW5ndGggJiZcbiAgICAgIGpvdXJuYWwucHVzaChcbiAgICAgICAgVk5vZGVKb3VybmFsT3BDb2RlLkluc2VydCxcbiAgICAgICAgcGFyZW50Tm9kZSxcbiAgICAgICAgdm5vZGVfZ2V0Tm9kZShhZGp1c3RlZEluc2VydEJlZm9yZSksXG4gICAgICAgIC4uLmRvbUNoaWxkcmVuXG4gICAgICApO1xuICB9XG5cbiAgLy8gbGluayBuZXdDaGlsZCBpbnRvIHRoZSBwcmV2aW91cy9uZXh0IGxpc3RcbiAgY29uc3Qgdk5leHQgPSBpbnNlcnRCZWZvcmU7XG4gIGNvbnN0IHZQcmV2aW91cyA9IHZOZXh0XG4gICAgPyB2TmV4dFtWTm9kZVByb3BzLnByZXZpb3VzU2libGluZ11cbiAgICA6IChwYXJlbnRbRWxlbWVudFZOb2RlUHJvcHMubGFzdENoaWxkXSBhcyBWTm9kZSB8IG51bGwpO1xuICBpZiAodk5leHQpIHtcbiAgICB2TmV4dFtWTm9kZVByb3BzLnByZXZpb3VzU2libGluZ10gPSBuZXdDaGlsZDtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnRbRWxlbWVudFZOb2RlUHJvcHMubGFzdENoaWxkXSA9IG5ld0NoaWxkO1xuICB9XG4gIGlmICh2UHJldmlvdXMpIHtcbiAgICB2UHJldmlvdXNbVk5vZGVQcm9wcy5uZXh0U2libGluZ10gPSBuZXdDaGlsZDtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnRbRWxlbWVudFZOb2RlUHJvcHMuZmlyc3RDaGlsZF0gPSBuZXdDaGlsZDtcbiAgfVxuICBuZXdDaGlsZFtWTm9kZVByb3BzLnByZXZpb3VzU2libGluZ10gPSB2UHJldmlvdXM7XG4gIG5ld0NoaWxkW1ZOb2RlUHJvcHMubmV4dFNpYmxpbmddID0gdk5leHQ7XG4gIG5ld0NoaWxkW1ZOb2RlUHJvcHMucGFyZW50XSA9IHBhcmVudDtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXREb21QYXJlbnQgPSAodm5vZGU6IFZOb2RlKTogRWxlbWVudCB8IFRleHQgfCBudWxsID0+IHtcbiAgdm5vZGUgPSB2bm9kZV9nZXREb21QYXJlbnRWTm9kZSh2bm9kZSkgYXMgVk5vZGU7XG4gIHJldHVybiAodm5vZGUgJiYgdm5vZGVbRWxlbWVudFZOb2RlUHJvcHMuZWxlbWVudF0pIGFzIEVsZW1lbnQgfCBUZXh0IHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXREb21QYXJlbnRWTm9kZSA9ICh2bm9kZTogVk5vZGUpOiBFbGVtZW50Vk5vZGUgfCBudWxsID0+IHtcbiAgd2hpbGUgKHZub2RlICYmICF2bm9kZV9pc0VsZW1lbnRWTm9kZSh2bm9kZSkpIHtcbiAgICB2bm9kZSA9IHZub2RlW1ZOb2RlUHJvcHMucGFyZW50XSE7XG4gIH1cbiAgcmV0dXJuIHZub2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX3JlbW92ZSA9IChcbiAgam91cm5hbDogVk5vZGVKb3VybmFsLFxuICB2UGFyZW50OiBWTm9kZSxcbiAgdlRvUmVtb3ZlOiBWTm9kZSxcbiAgcmVtb3ZlRE9NOiBib29sZWFuXG4pID0+IHtcbiAgYXNzZXJ0RXF1YWwodlBhcmVudCwgdm5vZGVfZ2V0UGFyZW50KHZUb1JlbW92ZSksICdQYXJlbnQgbWlzbWF0Y2guJyk7XG4gIGlmICh2bm9kZV9pc1RleHRWTm9kZSh2VG9SZW1vdmUpKSB7XG4gICAgdm5vZGVfZW5zdXJlVGV4dEluZmxhdGVkKGpvdXJuYWwsIHZUb1JlbW92ZSk7XG4gIH1cblxuICBpZiAocmVtb3ZlRE9NKSB7XG4gICAgY29uc3QgZG9tUGFyZW50ID0gdm5vZGVfZ2V0RG9tUGFyZW50KHZQYXJlbnQpO1xuICAgIGNvbnN0IGlzSW5uZXJIVE1MUGFyZW50ID0gdm5vZGVfZ2V0QXR0cih2UGFyZW50LCBkYW5nZXJvdXNseVNldElubmVySFRNTCk7XG4gICAgaWYgKGlzSW5uZXJIVE1MUGFyZW50KSB7XG4gICAgICAvLyBpZ25vcmUgY2hpbGRyZW4sIGFzIHRoZXkgYXJlIGluc2VydGVkIHZpYSBpbm5lckhUTUxcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRyZW4gPSB2bm9kZV9nZXRET01DaGlsZE5vZGVzKGpvdXJuYWwsIHZUb1JlbW92ZSk7XG4gICAgZG9tUGFyZW50ICYmIGNoaWxkcmVuLmxlbmd0aCAmJiBqb3VybmFsLnB1c2goVk5vZGVKb3VybmFsT3BDb2RlLlJlbW92ZSwgZG9tUGFyZW50LCAuLi5jaGlsZHJlbik7XG4gIH1cblxuICBjb25zdCB2UHJldmlvdXMgPSB2VG9SZW1vdmVbVk5vZGVQcm9wcy5wcmV2aW91c1NpYmxpbmddO1xuICBjb25zdCB2TmV4dCA9IHZUb1JlbW92ZVtWTm9kZVByb3BzLm5leHRTaWJsaW5nXTtcbiAgaWYgKHZQcmV2aW91cykge1xuICAgIHZQcmV2aW91c1tWTm9kZVByb3BzLm5leHRTaWJsaW5nXSA9IHZOZXh0O1xuICB9IGVsc2Uge1xuICAgIHZQYXJlbnRbRWxlbWVudFZOb2RlUHJvcHMuZmlyc3RDaGlsZF0gPSB2TmV4dDtcbiAgfVxuICBpZiAodk5leHQpIHtcbiAgICB2TmV4dFtWTm9kZVByb3BzLnByZXZpb3VzU2libGluZ10gPSB2UHJldmlvdXM7XG4gIH0gZWxzZSB7XG4gICAgdlBhcmVudFtFbGVtZW50Vk5vZGVQcm9wcy5sYXN0Q2hpbGRdID0gdlByZXZpb3VzO1xuICB9XG4gIHZUb1JlbW92ZVtWTm9kZVByb3BzLnByZXZpb3VzU2libGluZ10gPSBudWxsO1xuICB2VG9SZW1vdmVbVk5vZGVQcm9wcy5uZXh0U2libGluZ10gPSBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX3F1ZXJ5RG9tTm9kZXMgPSAoXG4gIHZOb2RlOiBWTm9kZSxcbiAgc2VsZWN0b3I6IHN0cmluZyxcbiAgY2I6IChlbGVtZW50OiBFbGVtZW50KSA9PiB2b2lkXG4pID0+IHtcbiAgaWYgKHZub2RlX2lzRWxlbWVudFZOb2RlKHZOb2RlKSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB2bm9kZV9nZXROb2RlKHZOb2RlKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgY2IoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikuZm9yRWFjaChjYik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBjaGlsZCA9IHZub2RlX2dldEZpcnN0Q2hpbGQodk5vZGUpO1xuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgdm5vZGVfcXVlcnlEb21Ob2RlcyhjaGlsZCwgc2VsZWN0b3IsIGNiKTtcbiAgICAgIGNoaWxkID0gdm5vZGVfZ2V0TmV4dFNpYmxpbmcoY2hpbGQpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX3RydW5jYXRlID0gKFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwsXG4gIHZQYXJlbnQ6IEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZSxcbiAgdkRlbGV0ZTogVk5vZGVcbikgPT4ge1xuICBhc3NlcnREZWZpbmVkKHZEZWxldGUsICdNaXNzaW5nIHZEZWxldGUuJyk7XG4gIGNvbnN0IHBhcmVudCA9IHZub2RlX2dldERvbVBhcmVudCh2UGFyZW50KTtcbiAgY29uc3QgY2hpbGRyZW4gPSB2bm9kZV9nZXRET01DaGlsZE5vZGVzKGpvdXJuYWwsIHZEZWxldGUpO1xuICBwYXJlbnQgJiYgY2hpbGRyZW4ubGVuZ3RoICYmIGpvdXJuYWwucHVzaChWTm9kZUpvdXJuYWxPcENvZGUuUmVtb3ZlLCBwYXJlbnQsIC4uLmNoaWxkcmVuKTtcbiAgY29uc3QgdlByZXZpb3VzID0gdkRlbGV0ZVtWTm9kZVByb3BzLnByZXZpb3VzU2libGluZ107XG4gIGlmICh2UHJldmlvdXMpIHtcbiAgICB2UHJldmlvdXNbVk5vZGVQcm9wcy5uZXh0U2libGluZ10gPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHZQYXJlbnRbRWxlbWVudFZOb2RlUHJvcHMuZmlyc3RDaGlsZF0gPSBudWxsO1xuICB9XG4gIHZQYXJlbnRbRWxlbWVudFZOb2RlUHJvcHMubGFzdENoaWxkXSA9IHZQcmV2aW91cztcbn07XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfZ2V0RWxlbWVudE5hbWUgPSAodm5vZGU6IEVsZW1lbnRWTm9kZSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGVsZW1lbnRWTm9kZSA9IGVuc3VyZUVsZW1lbnRWTm9kZSh2bm9kZSk7XG4gIGxldCBlbGVtZW50TmFtZSA9IGVsZW1lbnRWTm9kZVtFbGVtZW50Vk5vZGVQcm9wcy5lbGVtZW50TmFtZV07XG4gIGlmIChlbGVtZW50TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRWTm9kZVtFbGVtZW50Vk5vZGVQcm9wcy5lbGVtZW50XTtcbiAgICBjb25zdCBub2RlTmFtZSA9IGZhc3ROb2RlTmFtZShlbGVtZW50KSEudG9Mb3dlckNhc2UoKTtcbiAgICBlbGVtZW50TmFtZSA9IGVsZW1lbnRWTm9kZVtFbGVtZW50Vk5vZGVQcm9wcy5lbGVtZW50TmFtZV0gPSBub2RlTmFtZTtcbiAgICBlbGVtZW50Vk5vZGVbVk5vZGVQcm9wcy5mbGFnc10gfD0gdm5vZGVfZ2V0RWxlbWVudE5hbWVzcGFjZUZsYWdzKGVsZW1lbnQpO1xuICB9XG4gIHJldHVybiBlbGVtZW50TmFtZTtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXRUZXh0ID0gKHZub2RlOiBUZXh0Vk5vZGUpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB0ZXh0Vk5vZGUgPSBlbnN1cmVUZXh0Vk5vZGUodm5vZGUpO1xuICBsZXQgdGV4dCA9IHRleHRWTm9kZVtUZXh0Vk5vZGVQcm9wcy50ZXh0XTtcbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRleHQgPSB0ZXh0Vk5vZGVbVGV4dFZOb2RlUHJvcHMudGV4dF0gPSB0ZXh0Vk5vZGVbVGV4dFZOb2RlUHJvcHMubm9kZV0hLm5vZGVWYWx1ZSE7XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfc2V0VGV4dCA9IChqb3VybmFsOiBWTm9kZUpvdXJuYWwsIHRleHRWTm9kZTogVGV4dFZOb2RlLCB0ZXh0OiBzdHJpbmcpID0+IHtcbiAgdm5vZGVfZW5zdXJlVGV4dEluZmxhdGVkKGpvdXJuYWwsIHRleHRWTm9kZSk7XG4gIGNvbnN0IHRleHROb2RlID0gdGV4dFZOb2RlW1RleHRWTm9kZVByb3BzLm5vZGVdITtcbiAgam91cm5hbC5wdXNoKFZOb2RlSm91cm5hbE9wQ29kZS5TZXRUZXh0LCB0ZXh0Tm9kZSwgKHRleHRWTm9kZVtUZXh0Vk5vZGVQcm9wcy50ZXh0XSA9IHRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXRGaXJzdENoaWxkID0gKHZub2RlOiBWTm9kZSk6IFZOb2RlIHwgbnVsbCA9PiB7XG4gIGlmICh2bm9kZV9pc1RleHRWTm9kZSh2bm9kZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBsZXQgdkZpcnN0Q2hpbGQgPSB2bm9kZVtFbGVtZW50Vk5vZGVQcm9wcy5maXJzdENoaWxkXTtcbiAgaWYgKHZGaXJzdENoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICB2Rmlyc3RDaGlsZCA9IGVuc3VyZU1hdGVyaWFsaXplZCh2bm9kZSBhcyBFbGVtZW50Vk5vZGUpO1xuICB9XG4gIHJldHVybiB2Rmlyc3RDaGlsZDtcbn07XG5cbmNvbnN0IHZub2RlX21hdGVyaWFsaXplID0gKHZOb2RlOiBFbGVtZW50Vk5vZGUpID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IHZOb2RlW0VsZW1lbnRWTm9kZVByb3BzLmVsZW1lbnRdO1xuICBjb25zdCBmaXJzdENoaWxkID0gZmFzdEZpcnN0Q2hpbGQoZWxlbWVudCk7XG4gIGNvbnN0IHZOb2RlRGF0YSA9IChlbGVtZW50Lm93bmVyRG9jdW1lbnQgYXMgUURvY3VtZW50KT8ucVZOb2RlRGF0YT8uZ2V0KGVsZW1lbnQpO1xuXG4gIGNvbnN0IHZGaXJzdENoaWxkID0gbWF0ZXJpYWxpemUodk5vZGUsIGVsZW1lbnQsIGZpcnN0Q2hpbGQsIHZOb2RlRGF0YSk7XG4gIHJldHVybiB2Rmlyc3RDaGlsZDtcbn07XG5cbmNvbnN0IG1hdGVyaWFsaXplID0gKFxuICB2Tm9kZTogRWxlbWVudFZOb2RlLFxuICBlbGVtZW50OiBFbGVtZW50LFxuICBmaXJzdENoaWxkOiBOb2RlIHwgbnVsbCxcbiAgdk5vZGVEYXRhPzogc3RyaW5nXG4pOiBWTm9kZSB8IG51bGwgPT4ge1xuICBpZiAodk5vZGVEYXRhKSB7XG4gICAgaWYgKHZOb2RlRGF0YS5jaGFyQ29kZUF0KDApID09PSBWTm9kZURhdGFDaGFyLlNFUEFSQVRPUikge1xuICAgICAgLyoqXG4gICAgICAgKiBJZiB2Tm9kZURhdGEgc3RhcnQgd2l0aCB0aGUgYFZOb2RlRGF0YUNoYXIuU0VQQVJBVE9SYCB0aGVuIGl0IG1lYW5zIHRoYXQgdGhlIHZOb2RlRGF0YVxuICAgICAgICogY29udGFpbnMgc29tZSBkYXRhIGZvciBET00gZWxlbWVudC4gV2UgbmVlZCB0byBzcGxpdCBpdCB0byBET00gZWxlbWVudCB2Tm9kZURhdGEgYW5kXG4gICAgICAgKiB2aXJ0dWFsIGVsZW1lbnQgdk5vZGVEYXRhLlxuICAgICAgICpcbiAgICAgICAqIEZvciBleGFtcGxlIGB8PTZgNHwye0o9N2AzfHE6dHlwZXxTfWAgc2hvdWxkIHNwbGl0IGludG8gYD02YDRgYW5kYDJ7Sj03YDN8cTp0eXBlfFN9YCwgd2hlcmVcbiAgICAgICAqIGA9NmA0YCBpcyB2Tm9kZURhdGEgZm9yIHRoZSBET00gZWxlbWVudC5cbiAgICAgICAqL1xuXG4gICAgICBjb25zdCBlbGVtZW50Vk5vZGVEYXRhU3RhcnRJZHggPSAxO1xuICAgICAgbGV0IGVsZW1lbnRWTm9kZURhdGFFbmRJZHggPSAxO1xuICAgICAgd2hpbGUgKHZOb2RlRGF0YS5jaGFyQ29kZUF0KGVsZW1lbnRWTm9kZURhdGFFbmRJZHgpICE9PSBWTm9kZURhdGFDaGFyLlNFUEFSQVRPUikge1xuICAgICAgICBlbGVtZW50Vk5vZGVEYXRhRW5kSWR4Kys7XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50Vk5vZGVEYXRhID0gdk5vZGVEYXRhLnN1YnN0cmluZyhcbiAgICAgICAgZWxlbWVudFZOb2RlRGF0YVN0YXJ0SWR4LFxuICAgICAgICBlbGVtZW50Vk5vZGVEYXRhRW5kSWR4XG4gICAgICApO1xuXG4gICAgICAvLyBPdmVycmlkZSB2Tm9kZURhdGEgdmFyaWFibGUgZm9yIG1hdGVyaWFsaXppbmcgYSB2aXJ0dWFsIGVsZW1lbnRcbiAgICAgIHZOb2RlRGF0YSA9IHZOb2RlRGF0YS5zdWJzdHJpbmcoZWxlbWVudFZOb2RlRGF0YUVuZElkeCArIDEpO1xuXG4gICAgICAvLyBNYXRlcmlhbGl6ZSBET00gZWxlbWVudCBmcm9tIEhUTUwuIElmIHRoZSBgdk5vZGVEYXRhYCBpcyBub3QgZW1wdHksXG4gICAgICAvLyB0aGVuIGFsc28gbWF0ZXJpYWxpemUgdmlydHVhbCBlbGVtZW50IGZyb20gdk5vZGVEYXRhXG4gICAgICBjb25zdCB2Rmlyc3RDaGlsZCA9IG1hdGVyaWFsaXplRnJvbURPTSh2Tm9kZSwgZmlyc3RDaGlsZCwgZWxlbWVudFZOb2RlRGF0YSk7XG4gICAgICBpZiAoIXZOb2RlRGF0YSkge1xuICAgICAgICAvLyAgSWYgaXQgaXMgZW1wdHkgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgdGhlIGBtYXRlcmlhbGl6ZUZyb21WTm9kZURhdGFgLlxuICAgICAgICByZXR1cm4gdkZpcnN0Q2hpbGQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE1hdGVyaWFsaXplIHZpcnR1YWwgZWxlbWVudCBmb3JtIHZOb2RlRGF0YVxuICAgIHJldHVybiBtYXRlcmlhbGl6ZUZyb21WTm9kZURhdGEodk5vZGUsIHZOb2RlRGF0YSwgZWxlbWVudCwgZmlyc3RDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTWF0ZXJpYWxpemUgRE9NIGVsZW1lbnQgZnJvbSBIVE1MIG9ubHlcbiAgICByZXR1cm4gbWF0ZXJpYWxpemVGcm9tRE9NKHZOb2RlLCBmaXJzdENoaWxkKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGVuc3VyZU1hdGVyaWFsaXplZCA9ICh2bm9kZTogRWxlbWVudFZOb2RlKTogVk5vZGUgfCBudWxsID0+IHtcbiAgY29uc3QgdlBhcmVudCA9IGVuc3VyZUVsZW1lbnRWTm9kZSh2bm9kZSk7XG4gIGxldCB2Rmlyc3RDaGlsZCA9IHZQYXJlbnRbRWxlbWVudFZOb2RlUHJvcHMuZmlyc3RDaGlsZF07XG4gIGlmICh2Rmlyc3RDaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gbmVlZCB0byBtYXRlcmlhbGl6ZSB0aGUgdk5vZGUuXG4gICAgY29uc3QgZWxlbWVudCA9IHZQYXJlbnRbRWxlbWVudFZOb2RlUHJvcHMuZWxlbWVudF07XG5cbiAgICBpZiAodlBhcmVudFtWTm9kZVByb3BzLnBhcmVudF0gJiYgc2hvdWxkSWdub3JlQ2hpbGRyZW4oZWxlbWVudCkpIHtcbiAgICAgIC8vIFdlIGhhdmUgYSBjb250YWluZXIgd2l0aCBodG1sIHZhbHVlLCBtdXN0IGlnbm9yZSB0aGUgY29udGVudC5cbiAgICAgIHZGaXJzdENoaWxkID1cbiAgICAgICAgdlBhcmVudFtFbGVtZW50Vk5vZGVQcm9wcy5maXJzdENoaWxkXSA9XG4gICAgICAgIHZQYXJlbnRbRWxlbWVudFZOb2RlUHJvcHMubGFzdENoaWxkXSA9XG4gICAgICAgICAgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdkZpcnN0Q2hpbGQgPSB2bm9kZV9tYXRlcmlhbGl6ZSh2UGFyZW50KTtcbiAgICB9XG4gIH1cbiAgYXNzZXJ0VHJ1ZSh2UGFyZW50W0VsZW1lbnRWTm9kZVByb3BzLmZpcnN0Q2hpbGRdICE9PSB1bmRlZmluZWQsICdEaWQgbm90IG1hdGVyaWFsaXplLicpO1xuICBhc3NlcnRUcnVlKHZQYXJlbnRbRWxlbWVudFZOb2RlUHJvcHMubGFzdENoaWxkXSAhPT0gdW5kZWZpbmVkLCAnRGlkIG5vdCBtYXRlcmlhbGl6ZS4nKTtcbiAgcmV0dXJuIHZGaXJzdENoaWxkO1xufTtcblxubGV0IF9mYXN0SGFzQXR0cmlidXRlOiAoKHRoaXM6IEVsZW1lbnQsIGtleTogc3RyaW5nKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuZXhwb3J0IGNvbnN0IHNob3VsZElnbm9yZUNoaWxkcmVuID0gKG5vZGU6IEVsZW1lbnQpOiBib29sZWFuID0+IHtcbiAgaWYgKCFfZmFzdEhhc0F0dHJpYnV0ZSkge1xuICAgIF9mYXN0SGFzQXR0cmlidXRlID0gbm9kZS5oYXNBdHRyaWJ1dGU7XG4gIH1cbiAgcmV0dXJuIF9mYXN0SGFzQXR0cmlidXRlLmNhbGwobm9kZSwgUUNvbnRhaW5lckF0dHIpO1xufTtcblxubGV0IF9mYXN0Tm9kZVR5cGU6ICgodGhpczogTm9kZSkgPT4gbnVtYmVyKSB8IG51bGwgPSBudWxsO1xuY29uc3QgZmFzdE5vZGVUeXBlID0gKG5vZGU6IE5vZGUpOiBudW1iZXIgPT4ge1xuICBpZiAoIV9mYXN0Tm9kZVR5cGUpIHtcbiAgICBfZmFzdE5vZGVUeXBlID0gZmFzdEdldHRlcjx0eXBlb2YgX2Zhc3ROb2RlVHlwZT4obm9kZSwgJ25vZGVUeXBlJykhO1xuICB9XG4gIHJldHVybiBfZmFzdE5vZGVUeXBlLmNhbGwobm9kZSk7XG59O1xuY29uc3QgZmFzdElzVGV4dE9yRWxlbWVudCA9IChub2RlOiBOb2RlKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHR5cGUgPSBmYXN0Tm9kZVR5cGUobm9kZSk7XG4gIHJldHVybiB0eXBlID09PSAvKiBOb2RlLlRFWFRfTk9ERSAqLyAzIHx8IHR5cGUgPT09IC8qIE5vZGUuRUxFTUVOVF9OT0RFICovIDE7XG59O1xuXG5sZXQgX2Zhc3ROZXh0U2libGluZzogKCh0aGlzOiBOb2RlKSA9PiBOb2RlIHwgbnVsbCkgfCBudWxsID0gbnVsbDtcbmV4cG9ydCBjb25zdCBmYXN0TmV4dFNpYmxpbmcgPSAobm9kZTogTm9kZSB8IG51bGwpOiBOb2RlIHwgbnVsbCA9PiB7XG4gIGlmICghX2Zhc3ROZXh0U2libGluZykge1xuICAgIF9mYXN0TmV4dFNpYmxpbmcgPSBmYXN0R2V0dGVyPHR5cGVvZiBfZmFzdE5leHRTaWJsaW5nPihub2RlLCAnbmV4dFNpYmxpbmcnKSE7XG4gIH1cbiAgaWYgKCFfZmFzdEZpcnN0Q2hpbGQpIHtcbiAgICBfZmFzdEZpcnN0Q2hpbGQgPSBmYXN0R2V0dGVyPHR5cGVvZiBfZmFzdEZpcnN0Q2hpbGQ+KG5vZGUsICdmaXJzdENoaWxkJykhO1xuICB9XG4gIHdoaWxlIChub2RlKSB7XG4gICAgbm9kZSA9IF9mYXN0TmV4dFNpYmxpbmcuY2FsbChub2RlKTtcbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IGZhc3ROb2RlVHlwZShub2RlKTtcbiAgICAgIGlmICh0eXBlID09PSAvKiBOb2RlLlRFWFRfTk9ERSAqLyAzIHx8IHR5cGUgPT09IC8qIE5vZGUuRUxFTUVOVF9OT0RFICovIDEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IC8qIE5vZGUuQ09NTUVOVF9OT0RFICovIDgpIHtcbiAgICAgICAgY29uc3Qgbm9kZVZhbHVlID0gbm9kZS5ub2RlVmFsdWU7XG4gICAgICAgIGlmIChub2RlVmFsdWU/LnN0YXJ0c1dpdGgoUUlnbm9yZSkpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0Tm9kZUFmdGVyQ29tbWVudE5vZGUobm9kZSwgUUNvbnRhaW5lcklzbGFuZCwgX2Zhc3ROZXh0U2libGluZywgX2Zhc3RGaXJzdENoaWxkKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLm5vZGVWYWx1ZT8uc3RhcnRzV2l0aChRQ29udGFpbmVySXNsYW5kRW5kKSkge1xuICAgICAgICAgIHJldHVybiBnZXROb2RlQWZ0ZXJDb21tZW50Tm9kZShub2RlLCBRSWdub3JlRW5kLCBfZmFzdE5leHRTaWJsaW5nLCBfZmFzdEZpcnN0Q2hpbGQpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGVWYWx1ZT8uc3RhcnRzV2l0aChRQ29udGFpbmVyQXR0cikpIHtcbiAgICAgICAgICB3aGlsZSAobm9kZSAmJiAobm9kZSA9IF9mYXN0TmV4dFNpYmxpbmcuY2FsbChub2RlKSkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmFzdE5vZGVUeXBlKG5vZGUpID09PSAvKiBOb2RlLkNPTU1FTlRfTk9ERSAqLyA4ICYmXG4gICAgICAgICAgICAgIG5vZGUubm9kZVZhbHVlPy5zdGFydHNXaXRoKFFDb250YWluZXJBdHRyRW5kKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbm9kZTtcbn07XG5cbmZ1bmN0aW9uIGdldE5vZGVBZnRlckNvbW1lbnROb2RlKFxuICBub2RlOiBOb2RlIHwgbnVsbCxcbiAgY29tbWVudFZhbHVlOiBzdHJpbmcsXG4gIG5leHRTaWJsaW5nOiBOb25OdWxsYWJsZTx0eXBlb2YgX2Zhc3ROZXh0U2libGluZz4sXG4gIGZpcnN0Q2hpbGQ6IE5vbk51bGxhYmxlPHR5cGVvZiBfZmFzdEZpcnN0Q2hpbGQ+XG4pOiBOb2RlIHwgbnVsbCB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVZhbHVlPy5zdGFydHNXaXRoKGNvbW1lbnRWYWx1ZSkpIHtcbiAgICAgIG5vZGUgPSBuZXh0U2libGluZy5jYWxsKG5vZGUpIHx8IG51bGw7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBsZXQgbmV4dE5vZGU6IE5vZGUgfCBudWxsID0gZmlyc3RDaGlsZC5jYWxsKG5vZGUpO1xuICAgIGlmICghbmV4dE5vZGUpIHtcbiAgICAgIG5leHROb2RlID0gbmV4dFNpYmxpbmcuY2FsbChub2RlKTtcbiAgICB9XG4gICAgaWYgKCFuZXh0Tm9kZSkge1xuICAgICAgbmV4dE5vZGUgPSBmYXN0UGFyZW50Tm9kZShub2RlKTtcbiAgICAgIGlmIChuZXh0Tm9kZSkge1xuICAgICAgICBuZXh0Tm9kZSA9IG5leHRTaWJsaW5nLmNhbGwobmV4dE5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBub2RlID0gbmV4dE5vZGU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmxldCBfZmFzdFBhcmVudE5vZGU6ICgodGhpczogTm9kZSkgPT4gTm9kZSB8IG51bGwpIHwgbnVsbCA9IG51bGw7XG5jb25zdCBmYXN0UGFyZW50Tm9kZSA9IChub2RlOiBOb2RlKTogTm9kZSB8IG51bGwgPT4ge1xuICBpZiAoIV9mYXN0UGFyZW50Tm9kZSkge1xuICAgIF9mYXN0UGFyZW50Tm9kZSA9IGZhc3RHZXR0ZXI8dHlwZW9mIF9mYXN0UGFyZW50Tm9kZT4obm9kZSwgJ3BhcmVudE5vZGUnKSE7XG4gIH1cbiAgcmV0dXJuIF9mYXN0UGFyZW50Tm9kZS5jYWxsKG5vZGUpO1xufTtcblxubGV0IF9mYXN0Rmlyc3RDaGlsZDogKCh0aGlzOiBOb2RlKSA9PiBOb2RlIHwgbnVsbCkgfCBudWxsID0gbnVsbDtcbmNvbnN0IGZhc3RGaXJzdENoaWxkID0gKG5vZGU6IE5vZGUgfCBudWxsKTogTm9kZSB8IG51bGwgPT4ge1xuICBpZiAoIV9mYXN0Rmlyc3RDaGlsZCkge1xuICAgIF9mYXN0Rmlyc3RDaGlsZCA9IGZhc3RHZXR0ZXI8dHlwZW9mIF9mYXN0Rmlyc3RDaGlsZD4obm9kZSwgJ2ZpcnN0Q2hpbGQnKSE7XG4gIH1cbiAgbm9kZSA9IG5vZGUgJiYgX2Zhc3RGaXJzdENoaWxkLmNhbGwobm9kZSk7XG4gIHdoaWxlIChub2RlICYmICFmYXN0SXNUZXh0T3JFbGVtZW50KG5vZGUpKSB7XG4gICAgbm9kZSA9IGZhc3ROZXh0U2libGluZyhub2RlKTtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn07XG5cbmxldCBfZmFzdE5hbWVzcGFjZVVSSTogKCh0aGlzOiBFbGVtZW50KSA9PiBzdHJpbmcgfCBudWxsKSB8IG51bGwgPSBudWxsO1xuZXhwb3J0IGNvbnN0IGZhc3ROYW1lc3BhY2VVUkkgPSAoZWxlbWVudDogRWxlbWVudCk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBpZiAoIV9mYXN0TmFtZXNwYWNlVVJJKSB7XG4gICAgX2Zhc3ROYW1lc3BhY2VVUkkgPSBmYXN0R2V0dGVyPHR5cGVvZiBfZmFzdE5hbWVzcGFjZVVSST4oZWxlbWVudCwgJ25hbWVzcGFjZVVSSScpITtcbiAgfVxuICByZXR1cm4gX2Zhc3ROYW1lc3BhY2VVUkkuY2FsbChlbGVtZW50KTtcbn07XG5cbmxldCBfZmFzdE5vZGVOYW1lOiAoKHRoaXM6IEVsZW1lbnQpID0+IHN0cmluZyB8IG51bGwpIHwgbnVsbCA9IG51bGw7XG5leHBvcnQgY29uc3QgZmFzdE5vZGVOYW1lID0gKGVsZW1lbnQ6IEVsZW1lbnQpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKCFfZmFzdE5vZGVOYW1lKSB7XG4gICAgX2Zhc3ROb2RlTmFtZSA9IGZhc3RHZXR0ZXI8dHlwZW9mIF9mYXN0Tm9kZU5hbWU+KGVsZW1lbnQsICdub2RlTmFtZScpITtcbiAgfVxuICByZXR1cm4gX2Zhc3ROb2RlTmFtZS5jYWxsKGVsZW1lbnQpO1xufTtcblxuY29uc3QgZmFzdEdldHRlciA9IDxUPihwcm90b3R5cGU6IGFueSwgbmFtZTogc3RyaW5nKTogVCA9PiB7XG4gIGxldCBnZXR0ZXI6IGFueTtcbiAgd2hpbGUgKHByb3RvdHlwZSAmJiAhKGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG90eXBlLCBuYW1lKT8uZ2V0KSkge1xuICAgIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICB9XG4gIHJldHVybiAoXG4gICAgZ2V0dGVyIHx8XG4gICAgZnVuY3Rpb24gKHRoaXM6IGFueSkge1xuICAgICAgcmV0dXJuIHRoaXNbbmFtZV07XG4gICAgfVxuICApO1xufTtcblxuY29uc3QgaXNRU3R5bGVFbGVtZW50ID0gKG5vZGU6IE5vZGUgfCBudWxsKTogbm9kZSBpcyBFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICBpc0VsZW1lbnQobm9kZSkgJiZcbiAgICBub2RlLm5vZGVOYW1lID09PSAnU1RZTEUnICYmXG4gICAgKG5vZGUuaGFzQXR0cmlidXRlKFFTY29wZWRTdHlsZSkgfHwgbm9kZS5oYXNBdHRyaWJ1dGUoUVN0eWxlKSlcbiAgKTtcbn07XG5cbmNvbnN0IG1hdGVyaWFsaXplRnJvbURPTSA9ICh2UGFyZW50OiBFbGVtZW50Vk5vZGUsIGZpcnN0Q2hpbGQ6IE5vZGUgfCBudWxsLCB2RGF0YT86IHN0cmluZykgPT4ge1xuICBsZXQgdkZpcnN0Q2hpbGQ6IFZOb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3Qgc2tpcFN0eWxlRWxlbWVudHMgPSAoKSA9PiB7XG4gICAgd2hpbGUgKGlzUVN0eWxlRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIC8vIHNraXAgb3ZlciBzdHlsZSBlbGVtZW50cywgYXMgdGhvc2UgbmVlZCB0byBiZSBtb3ZlZCB0byB0aGUgaGVhZC5cbiAgICAgIC8vIFZOb2RlIHByZXRlbmRzIHRoYXQgYDxzdHlsZSBxOnN0eWxlIHE6c3N0eWxlPmAgZWxlbWVudHMgZG8gbm90IGV4aXN0LlxuICAgICAgY2hpbGQgPSBmYXN0TmV4dFNpYmxpbmcoY2hpbGQpO1xuICAgIH1cbiAgfTtcbiAgLy8gbWF0ZXJpYWxpemUgZnJvbSBET01cbiAgbGV0IGNoaWxkID0gZmlyc3RDaGlsZDtcbiAgc2tpcFN0eWxlRWxlbWVudHMoKTtcbiAgbGV0IHZDaGlsZDogVk5vZGUgfCBudWxsID0gbnVsbDtcbiAgd2hpbGUgKGNoaWxkKSB7XG4gICAgY29uc3Qgbm9kZVR5cGUgPSBmYXN0Tm9kZVR5cGUoY2hpbGQpO1xuICAgIGxldCB2TmV4dENoaWxkOiBWTm9kZSB8IG51bGwgPSBudWxsO1xuICAgIGlmIChub2RlVHlwZSA9PT0gLyogTm9kZS5URVhUX05PREUgKi8gMykge1xuICAgICAgdk5leHRDaGlsZCA9IHZub2RlX25ld1RleHQoY2hpbGQgYXMgVGV4dCwgY2hpbGQudGV4dENvbnRlbnQgPz8gdW5kZWZpbmVkKTtcbiAgICB9IGVsc2UgaWYgKG5vZGVUeXBlID09PSAvKiBOb2RlLkVMRU1FTlRfTk9ERSAqLyAxKSB7XG4gICAgICB2TmV4dENoaWxkID0gdm5vZGVfbmV3VW5NYXRlcmlhbGl6ZWRFbGVtZW50KGNoaWxkIGFzIEVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAodk5leHRDaGlsZCkge1xuICAgICAgdk5leHRDaGlsZFtWTm9kZVByb3BzLnBhcmVudF0gPSB2UGFyZW50O1xuICAgICAgdkNoaWxkICYmICh2Q2hpbGRbVk5vZGVQcm9wcy5uZXh0U2libGluZ10gPSB2TmV4dENoaWxkKTtcbiAgICAgIHZOZXh0Q2hpbGRbVk5vZGVQcm9wcy5wcmV2aW91c1NpYmxpbmddID0gdkNoaWxkO1xuICAgICAgdkNoaWxkID0gdk5leHRDaGlsZDtcbiAgICB9XG4gICAgaWYgKCF2Rmlyc3RDaGlsZCkge1xuICAgICAgdlBhcmVudFtFbGVtZW50Vk5vZGVQcm9wcy5maXJzdENoaWxkXSA9IHZGaXJzdENoaWxkID0gdkNoaWxkO1xuICAgIH1cbiAgICBjaGlsZCA9IGZhc3ROZXh0U2libGluZyhjaGlsZCk7XG4gICAgc2tpcFN0eWxlRWxlbWVudHMoKTtcbiAgfVxuICB2UGFyZW50W0VsZW1lbnRWTm9kZVByb3BzLmxhc3RDaGlsZF0gPSB2Q2hpbGQgfHwgbnVsbDtcbiAgdlBhcmVudFtFbGVtZW50Vk5vZGVQcm9wcy5maXJzdENoaWxkXSA9IHZGaXJzdENoaWxkO1xuXG4gIGlmICh2RGF0YSkge1xuICAgIC8qKlxuICAgICAqIElmIHdlIG5lZWQgdG8gbWF0ZXJpYWxpemUgZnJvbSBET00gYW5kIHdlIGhhdmUgdk5vZGVEYXRhIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBzb21lIHZpcnR1YWxcbiAgICAgKiBwcm9wcyBmb3IgdGhhdCBub2RlLlxuICAgICAqL1xuICAgIGxldCBjb250YWluZXI6IENsaWVudENvbnRhaW5lciB8IG51bGwgPSBudWxsO1xuICAgIHByb2Nlc3NWTm9kZURhdGEodkRhdGEsIChwZWVrLCBjb25zdW1lVmFsdWUpID0+IHtcbiAgICAgIGlmIChwZWVrKCkgPT09IFZOb2RlRGF0YUNoYXIuSUQpIHtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICBjb250YWluZXIgPSBnZXREb21Db250YWluZXIodlBhcmVudFtFbGVtZW50Vk5vZGVQcm9wcy5lbGVtZW50XSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSBjb25zdW1lVmFsdWUoKTtcbiAgICAgICAgY29udGFpbmVyLiRzZXRSYXdTdGF0ZSQocGFyc2VJbnQoaWQpLCB2UGFyZW50KTtcbiAgICAgICAgaXNEZXYgJiYgdm5vZGVfc2V0QXR0cihudWxsLCB2UGFyZW50LCBFTEVNRU5UX0lELCBpZCk7XG4gICAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5CQUNLX1JFRlMpIHtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICBjb250YWluZXIgPSBnZXREb21Db250YWluZXIodlBhcmVudFtFbGVtZW50Vk5vZGVQcm9wcy5lbGVtZW50XSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0RWZmZWN0QmFja1JlZkZyb21WTm9kZURhdGEodlBhcmVudCwgY29uc3VtZVZhbHVlKCksIGNvbnRhaW5lcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwcmV2ZW50IGluZmluaXR5IGxvb3AgaWYgdGhlcmUgYXJlIHNvbWUgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSByYW5nZVxuICAgICAgICBjb25zdW1lVmFsdWUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB2Rmlyc3RDaGlsZDtcbn07XG5cbmZ1bmN0aW9uIHNldEVmZmVjdEJhY2tSZWZGcm9tVk5vZGVEYXRhKFxuICB2UGFyZW50OiBWTm9kZSxcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcixcbiAgY29udGFpbmVyOiBDbGllbnRDb250YWluZXJcbikge1xuICBjb25zdCBkZXNlcmlhbGl6ZWRTdWJNYXAgPSBjb250YWluZXIuJGdldE9iamVjdEJ5SWQkKHZhbHVlKTtcbiAgaWYgKCEodlBhcmVudCBhcyBhbnkpW19FRkZFQ1RfQkFDS19SRUZdKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZQYXJlbnQsIF9FRkZFQ1RfQkFDS19SRUYsIHtcbiAgICAgIHZhbHVlOiBkZXNlcmlhbGl6ZWRTdWJNYXAsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3ViTWFwID0gKHZQYXJlbnQgYXMgYW55KVtfRUZGRUNUX0JBQ0tfUkVGXSBhcyBNYXA8c3RyaW5nLCBhbnk+O1xuICAgIG1lcmdlTWFwcyhzdWJNYXAsIGRlc2VyaWFsaXplZFN1Yk1hcCk7XG4gIH1cbn1cblxuY29uc3QgcHJvY2Vzc1ZOb2RlRGF0YSA9IChcbiAgdkRhdGE6IHN0cmluZyxcbiAgY2FsbGJhY2s6IChcbiAgICBwZWVrOiAoKSA9PiBudW1iZXIsXG4gICAgY29uc3VtZVZhbHVlOiAoKSA9PiBzdHJpbmcsXG4gICAgY29uc3VtZTogKCkgPT4gbnVtYmVyLFxuICAgIG5leHRUb0NvbnN1bWVJZHg6IG51bWJlclxuICApID0+IHZvaWRcbikgPT4ge1xuICBsZXQgbmV4dFRvQ29uc3VtZUlkeCA9IDA7XG4gIGxldCBjaCA9IDA7XG4gIGxldCBwZWVrQ2ggPSAwO1xuICBjb25zdCBwZWVrID0gKCkgPT4ge1xuICAgIGlmIChwZWVrQ2ggIT09IDApIHtcbiAgICAgIHJldHVybiBwZWVrQ2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAocGVla0NoID0gbmV4dFRvQ29uc3VtZUlkeCA8IHZEYXRhLmxlbmd0aCA/IHZEYXRhLmNoYXJDb2RlQXQobmV4dFRvQ29uc3VtZUlkeCkgOiAwKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNvbnN1bWUgPSAoKSA9PiB7XG4gICAgY2ggPSBwZWVrKCk7XG4gICAgcGVla0NoID0gMDtcbiAgICBuZXh0VG9Db25zdW1lSWR4Kys7XG4gICAgcmV0dXJuIGNoO1xuICB9O1xuXG4gIGNvbnN0IGNvbnN1bWVWYWx1ZSA9ICgpID0+IHtcbiAgICBjb25zdW1lKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBuZXh0VG9Db25zdW1lSWR4O1xuICAgIHdoaWxlIChcbiAgICAgIChwZWVrKCkgPD0gNTggLyogYDpgICovICYmIHBlZWtDaCAhPT0gMCkgfHxcbiAgICAgIHBlZWtDaCA9PT0gOTUgLyogYF9gICovIHx8XG4gICAgICAocGVla0NoID49IDY1IC8qIGBBYCAqLyAmJiBwZWVrQ2ggPD0gOTApIC8qIGBaYCAqLyB8fFxuICAgICAgKHBlZWtDaCA+PSA5NyAvKiBgYWAgKi8gJiYgcGVla0NoIDw9IDEyMikgLyogYHpgICovXG4gICAgKSB7XG4gICAgICBjb25zdW1lKCk7XG4gICAgfVxuICAgIHJldHVybiB2RGF0YS5zdWJzdHJpbmcoc3RhcnQsIG5leHRUb0NvbnN1bWVJZHgpO1xuICB9O1xuXG4gIHdoaWxlIChwZWVrKCkgIT09IDApIHtcbiAgICBjYWxsYmFjayhwZWVrLCBjb25zdW1lVmFsdWUsIGNvbnN1bWUsIG5leHRUb0NvbnN1bWVJZHgpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfZ2V0TmV4dFNpYmxpbmcgPSAodm5vZGU6IFZOb2RlKTogVk5vZGUgfCBudWxsID0+IHtcbiAgcmV0dXJuIHZub2RlW1ZOb2RlUHJvcHMubmV4dFNpYmxpbmddO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2dldFByZXZpb3VzU2libGluZyA9ICh2bm9kZTogVk5vZGUpOiBWTm9kZSB8IG51bGwgPT4ge1xuICByZXR1cm4gdm5vZGVbVk5vZGVQcm9wcy5wcmV2aW91c1NpYmxpbmddO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2dldEF0dHJLZXlzID0gKHZub2RlOiBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHR5cGUgPSB2bm9kZVtWTm9kZVByb3BzLmZsYWdzXTtcbiAgaWYgKCh0eXBlICYgVk5vZGVGbGFncy5FTEVNRU5UX09SX1ZJUlRVQUxfTUFTSykgIT09IDApIHtcbiAgICB2bm9kZV9lbnN1cmVFbGVtZW50SW5mbGF0ZWQodm5vZGUpO1xuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcHJvcHMgPSB2bm9kZV9nZXRQcm9wcyh2bm9kZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkgPSBpICsgMikge1xuICAgICAgY29uc3Qga2V5ID0gcHJvcHNbaV0gYXMgc3RyaW5nO1xuICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChRX1BST1BTX1NFUEFSQVRPUikpIHtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xuICB9XG4gIHJldHVybiBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9zZXRBdHRyID0gKFxuICBqb3VybmFsOiBWTm9kZUpvdXJuYWwgfCBudWxsLFxuICB2bm9kZTogVk5vZGUsXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IGJvb2xlYW5cbik6IHZvaWQgPT4ge1xuICBjb25zdCB0eXBlID0gdm5vZGVbVk5vZGVQcm9wcy5mbGFnc107XG4gIGlmICgodHlwZSAmIFZOb2RlRmxhZ3MuRUxFTUVOVF9PUl9WSVJUVUFMX01BU0spICE9PSAwKSB7XG4gICAgdm5vZGVfZW5zdXJlRWxlbWVudEluZmxhdGVkKHZub2RlKTtcbiAgICBjb25zdCBwcm9wcyA9IHZub2RlX2dldFByb3BzKHZub2RlKTtcbiAgICBjb25zdCBpZHggPSBtYXBBcHBfZmluZEluZHgocHJvcHMsIGtleSwgMCk7XG5cbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGlmIChwcm9wc1tpZHggKyAxXSAhPSB2YWx1ZSAmJiAodHlwZSAmIFZOb2RlRmxhZ3MuRWxlbWVudCkgIT09IDApIHtcbiAgICAgICAgLy8gVmFsdWVzIGFyZSBkaWZmZXJlbnQsIHVwZGF0ZSBET01cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHZub2RlW0VsZW1lbnRWTm9kZVByb3BzLmVsZW1lbnRdIGFzIEVsZW1lbnQ7XG4gICAgICAgIGpvdXJuYWwgJiYgam91cm5hbC5wdXNoKFZOb2RlSm91cm5hbE9wQ29kZS5TZXRBdHRyaWJ1dGUsIGVsZW1lbnQsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcHJvcHMuc3BsaWNlKGlkeCwgMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wc1tpZHggKyAxXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgcHJvcHMuc3BsaWNlKGlkeCBeIC0xLCAwLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICgodHlwZSAmIFZOb2RlRmxhZ3MuRWxlbWVudCkgIT09IDApIHtcbiAgICAgICAgLy8gTmV3IHZhbHVlLCB1cGRhdGUgRE9NXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB2bm9kZVtFbGVtZW50Vk5vZGVQcm9wcy5lbGVtZW50XSBhcyBFbGVtZW50O1xuICAgICAgICBqb3VybmFsICYmIGpvdXJuYWwucHVzaChWTm9kZUpvdXJuYWxPcENvZGUuU2V0QXR0cmlidXRlLCBlbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXRBdHRyID0gKHZub2RlOiBWTm9kZSwga2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgdHlwZSA9IHZub2RlW1ZOb2RlUHJvcHMuZmxhZ3NdO1xuICBpZiAoKHR5cGUgJiBWTm9kZUZsYWdzLkVMRU1FTlRfT1JfVklSVFVBTF9NQVNLKSAhPT0gMCkge1xuICAgIHZub2RlX2Vuc3VyZUVsZW1lbnRJbmZsYXRlZCh2bm9kZSk7XG4gICAgY29uc3QgcHJvcHMgPSB2bm9kZV9nZXRQcm9wcyh2bm9kZSk7XG4gICAgcmV0dXJuIG1hcEFycmF5X2dldChwcm9wcyBhcyBzdHJpbmdbXSwga2V5LCAwKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXRQcm9wID0gPFQ+KFxuICB2bm9kZTogVk5vZGUsXG4gIGtleTogc3RyaW5nLFxuICBnZXRPYmplY3Q6ICgoaWQ6IHN0cmluZykgPT4gYW55KSB8IG51bGxcbik6IFQgfCBudWxsID0+IHtcbiAgY29uc3QgdHlwZSA9IHZub2RlW1ZOb2RlUHJvcHMuZmxhZ3NdO1xuICBpZiAoKHR5cGUgJiBWTm9kZUZsYWdzLkVMRU1FTlRfT1JfVklSVFVBTF9NQVNLKSAhPT0gMCkge1xuICAgIHR5cGUgJiBWTm9kZUZsYWdzLkVsZW1lbnQgJiYgdm5vZGVfZW5zdXJlRWxlbWVudEluZmxhdGVkKHZub2RlKTtcbiAgICBjb25zdCBwcm9wcyA9IHZub2RlX2dldFByb3BzKHZub2RlKTtcbiAgICBjb25zdCBpZHggPSBtYXBBcHBfZmluZEluZHgocHJvcHMgYXMgYW55LCBrZXksIDApO1xuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgbGV0IHZhbHVlID0gcHJvcHNbaWR4ICsgMV0gYXMgYW55O1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgZ2V0T2JqZWN0KSB7XG4gICAgICAgIHByb3BzW2lkeCArIDFdID0gdmFsdWUgPSBnZXRPYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9zZXRQcm9wID0gKHZub2RlOiBWaXJ0dWFsVk5vZGUgfCBFbGVtZW50Vk5vZGUsIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICBlbnN1cmVFbGVtZW50T3JWaXJ0dWFsVk5vZGUodm5vZGUpO1xuICBjb25zdCBwcm9wcyA9IHZub2RlX2dldFByb3BzKHZub2RlKTtcbiAgY29uc3QgaWR4ID0gbWFwQXBwX2ZpbmRJbmR4KHByb3BzLCBrZXksIDApO1xuICBpZiAoaWR4ID49IDApIHtcbiAgICBwcm9wc1tpZHggKyAxXSA9IHZhbHVlIGFzIGFueTtcbiAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgcHJvcHMuc3BsaWNlKGlkeCBeIC0xLCAwLCBrZXksIHZhbHVlIGFzIGFueSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB2bm9kZV9nZXRQcm9wU3RhcnRJbmRleCA9ICh2bm9kZTogVk5vZGUpOiBudW1iZXIgPT4ge1xuICBjb25zdCB0eXBlID0gdm5vZGVbVk5vZGVQcm9wcy5mbGFnc10gJiBWTm9kZUZsYWdzLlRZUEVfTUFTSztcbiAgaWYgKHR5cGUgPT09IFZOb2RlRmxhZ3MuRWxlbWVudCkge1xuICAgIHJldHVybiBFbGVtZW50Vk5vZGVQcm9wcy5QUk9QU19PRkZTRVQ7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVk5vZGVGbGFncy5WaXJ0dWFsKSB7XG4gICAgcmV0dXJuIFZpcnR1YWxWTm9kZVByb3BzLlBST1BTX09GRlNFVDtcbiAgfVxuICB0aHJvdyBxRXJyb3IoUUVycm9yLmludmFsaWRWTm9kZVR5cGUsIFt0eXBlXSk7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfZ2V0UHJvcHMgPSAodm5vZGU6IFZOb2RlKTogdW5rbm93bltdID0+IHtcbiAgcmV0dXJuIHZub2RlW3Zub2RlX2dldFByb3BTdGFydEluZGV4KHZub2RlKV0gYXMgdW5rbm93bltdO1xufTtcblxuZXhwb3J0IGNvbnN0IHZub2RlX2dldFBhcmVudCA9ICh2bm9kZTogVk5vZGUpOiBWTm9kZSB8IG51bGwgPT4ge1xuICByZXR1cm4gdm5vZGVbVk5vZGVQcm9wcy5wYXJlbnRdIHx8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3Qgdm5vZGVfZ2V0Tm9kZSA9ICh2bm9kZTogVk5vZGUgfCBudWxsKTogRWxlbWVudCB8IFRleHQgfCBudWxsID0+IHtcbiAgaWYgKHZub2RlID09PSBudWxsIHx8IHZub2RlX2lzVmlydHVhbFZOb2RlKHZub2RlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICh2bm9kZV9pc0VsZW1lbnRWTm9kZSh2bm9kZSkpIHtcbiAgICByZXR1cm4gdm5vZGVbRWxlbWVudFZOb2RlUHJvcHMuZWxlbWVudF07XG4gIH1cbiAgYXNzZXJ0VHJ1ZSh2bm9kZV9pc1RleHRWTm9kZSh2bm9kZSksICdFeHBlY3RpbmcgVGV4dCBOb2RlLicpO1xuICByZXR1cm4gdm5vZGVbVGV4dFZOb2RlUHJvcHMubm9kZV0hO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZub2RlX3RvU3RyaW5nKFxuICB0aGlzOiBWTm9kZSB8IG51bGwsXG4gIGRlcHRoOiBudW1iZXIgPSAyMCxcbiAgb2Zmc2V0OiBzdHJpbmcgPSAnJyxcbiAgbWF0ZXJpYWxpemU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgc2libGluZ3MgPSBmYWxzZVxuKTogc3RyaW5nIHtcbiAgbGV0IHZub2RlID0gdGhpcztcbiAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgcmV0dXJuICcuLi4nO1xuICB9XG4gIGlmICh2bm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cbiAgaWYgKHZub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH1cbiAgY29uc3Qgc3RyaW5nczogc3RyaW5nW10gPSBbXTtcbiAgZG8ge1xuICAgIGlmICh2bm9kZV9pc1RleHRWTm9kZSh2bm9kZSkpIHtcbiAgICAgIHN0cmluZ3MucHVzaChxd2lrRGVidWdUb1N0cmluZyh2bm9kZV9nZXRUZXh0KHZub2RlKSkpO1xuICAgIH0gZWxzZSBpZiAodm5vZGVfaXNWaXJ0dWFsVk5vZGUodm5vZGUpKSB7XG4gICAgICBjb25zdCBpZHggPSB2bm9kZVtWTm9kZVByb3BzLmZsYWdzXSA+Pj4gVk5vZGVGbGFnc0luZGV4LnNoaWZ0O1xuICAgICAgY29uc3QgYXR0cnM6IHN0cmluZ1tdID0gWydbJyArIFN0cmluZyhpZHgpICsgJ10nXTtcbiAgICAgIHZub2RlX2dldEF0dHJLZXlzKHZub2RlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleSAhPT0gREVCVUdfVFlQRSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdm5vZGVfZ2V0QXR0cih2bm9kZSEsIGtleSk7XG4gICAgICAgICAgYXR0cnMucHVzaCgnICcgKyBrZXkgKyAnPScgKyBxd2lrRGVidWdUb1N0cmluZyh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICBWaXJ0dWFsVHlwZU5hbWVbdm5vZGVfZ2V0QXR0cih2bm9kZSwgREVCVUdfVFlQRSkgfHwgVmlydHVhbFR5cGUuVmlydHVhbF0gfHxcbiAgICAgICAgVmlydHVhbFR5cGVOYW1lW1ZpcnR1YWxUeXBlLlZpcnR1YWxdO1xuICAgICAgc3RyaW5ncy5wdXNoKCc8JyArIG5hbWUgKyBhdHRycy5qb2luKCcnKSArICc+Jyk7XG4gICAgICBjb25zdCBjaGlsZCA9IHZub2RlX2dldEZpcnN0Q2hpbGQodm5vZGUpO1xuICAgICAgY2hpbGQgJiZcbiAgICAgICAgc3RyaW5ncy5wdXNoKCcgICcgKyB2bm9kZV90b1N0cmluZy5jYWxsKGNoaWxkLCBkZXB0aCAtIDEsIG9mZnNldCArICcgICcsIHRydWUsIHRydWUpKTtcbiAgICAgIHN0cmluZ3MucHVzaCgnPC8nICsgbmFtZSArICc+Jyk7XG4gICAgfSBlbHNlIGlmICh2bm9kZV9pc0VsZW1lbnRWTm9kZSh2bm9kZSkpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHZub2RlX2dldEVsZW1lbnROYW1lKHZub2RlKTtcbiAgICAgIGNvbnN0IGF0dHJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgY29uc3Qga2V5cyA9IHZub2RlX2dldEF0dHJLZXlzKHZub2RlKTtcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdm5vZGVfZ2V0QXR0cih2bm9kZSEsIGtleSk7XG4gICAgICAgIGF0dHJzLnB1c2goJyAnICsga2V5ICsgJz0nICsgcXdpa0RlYnVnVG9TdHJpbmcodmFsdWUpKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgbm9kZSA9IHZub2RlX2dldE5vZGUodm5vZGUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgY29uc3Qgdm5vZGVEYXRhID0gKG5vZGUub3duZXJEb2N1bWVudCBhcyBRRG9jdW1lbnQpLnFWTm9kZURhdGE/LmdldChub2RlKTtcbiAgICAgICAgaWYgKHZub2RlRGF0YSkge1xuICAgICAgICAgIGF0dHJzLnB1c2goJyBxOnZub2RlRGF0YT0nICsgcXdpa0RlYnVnVG9TdHJpbmcodm5vZGVEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvbUF0dHJzID0gbm9kZS5hdHRyaWJ1dGVzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21BdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhdHRyID0gZG9tQXR0cnNbaV07XG4gICAgICAgIGlmIChrZXlzLmluZGV4T2YoYXR0ci5uYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICBhdHRycy5wdXNoKCcgJyArIGF0dHIubmFtZSArIChhdHRyLnZhbHVlID8gJz0nICsgcXdpa0RlYnVnVG9TdHJpbmcoYXR0ci52YWx1ZSkgOiAnJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdHJpbmdzLnB1c2goJzwnICsgdGFnICsgYXR0cnMuam9pbignJykgKyAnPicpO1xuICAgICAgaWYgKHZub2RlX2lzTWF0ZXJpYWxpemVkKHZub2RlKSB8fCBtYXRlcmlhbGl6ZSkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IHZub2RlX2dldEZpcnN0Q2hpbGQodm5vZGUpO1xuICAgICAgICBjaGlsZCAmJlxuICAgICAgICAgIHN0cmluZ3MucHVzaCgnICAnICsgdm5vZGVfdG9TdHJpbmcuY2FsbChjaGlsZCwgZGVwdGggLSAxLCBvZmZzZXQgKyAnICAnLCB0cnVlLCB0cnVlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJpbmdzLnB1c2goJyAgPCEtLSBub3QgbWF0ZXJpYWxpemVkIC0tIT4nKTtcbiAgICAgIH1cbiAgICAgIHN0cmluZ3MucHVzaCgnPC8nICsgdGFnICsgJz4nKTtcbiAgICB9XG4gICAgdm5vZGUgPSAoc2libGluZ3MgJiYgdm5vZGVfZ2V0TmV4dFNpYmxpbmcodm5vZGUpKSB8fCBudWxsO1xuICB9IHdoaWxlICh2bm9kZSk7XG4gIHJldHVybiBzdHJpbmdzLmpvaW4oJ1xcbicgKyBvZmZzZXQpO1xufVxuXG5jb25zdCBpc051bWJlciA9IChjaDogbnVtYmVyKSA9PiAvKiBgMGAgKi8gNDggPD0gY2ggJiYgY2ggPD0gNTc7IC8qIGA5YCAqL1xuY29uc3QgaXNMb3dlcmNhc2UgPSAoY2g6IG51bWJlcikgPT4gLyogYGFgICovIDk3IDw9IGNoICYmIGNoIDw9IDEyMjsgLyogYHpgICovXG5cbmNvbnN0IHN0YWNrOiBhbnlbXSA9IFtdO1xuZnVuY3Rpb24gbWF0ZXJpYWxpemVGcm9tVk5vZGVEYXRhKFxuICB2UGFyZW50OiBFbGVtZW50Vk5vZGUgfCBWaXJ0dWFsVk5vZGUsXG4gIHZEYXRhOiBzdHJpbmcsXG4gIGVsZW1lbnQ6IEVsZW1lbnQsXG4gIGNoaWxkOiBOb2RlIHwgbnVsbFxuKTogVk5vZGUge1xuICBsZXQgaWR4ID0gMDtcbiAgbGV0IHZGaXJzdDogVk5vZGUgfCBudWxsID0gbnVsbDtcbiAgbGV0IHZMYXN0OiBWTm9kZSB8IG51bGwgPSBudWxsO1xuICBsZXQgcHJldmlvdXNUZXh0Tm9kZTogVGV4dFZOb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgYWRkVk5vZGUgPSAobm9kZTogVk5vZGUpID0+IHtcbiAgICBub2RlW1ZOb2RlUHJvcHMuZmxhZ3NdID1cbiAgICAgIChub2RlW1ZOb2RlUHJvcHMuZmxhZ3NdICYgVk5vZGVGbGFnc0luZGV4Lm5lZ2F0ZWRfbWFzaykgfCAoaWR4IDw8IFZOb2RlRmxhZ3NJbmRleC5zaGlmdCk7XG4gICAgaWR4Kys7XG4gICAgdkxhc3QgJiYgKHZMYXN0W1ZOb2RlUHJvcHMubmV4dFNpYmxpbmddID0gbm9kZSk7XG4gICAgbm9kZVtWTm9kZVByb3BzLnByZXZpb3VzU2libGluZ10gPSB2TGFzdDtcbiAgICBub2RlW1ZOb2RlUHJvcHMucGFyZW50XSA9IHZQYXJlbnQ7XG4gICAgaWYgKCF2Rmlyc3QpIHtcbiAgICAgIHZQYXJlbnRbRWxlbWVudFZOb2RlUHJvcHMuZmlyc3RDaGlsZF0gPSB2Rmlyc3QgPSBub2RlO1xuICAgIH1cbiAgICB2TGFzdCA9IG5vZGU7XG4gIH07XG5cbiAgbGV0IHRleHRJZHggPSAwO1xuICBsZXQgY29tYmluZWRUZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgbGV0IGNvbnRhaW5lcjogQ2xpZW50Q29udGFpbmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJvY2Vzc1ZOb2RlRGF0YSh2RGF0YSwgKHBlZWssIGNvbnN1bWVWYWx1ZSwgY29uc3VtZSwgbmV4dFRvQ29uc3VtZUlkeCkgPT4ge1xuICAgIGlmIChpc051bWJlcihwZWVrKCkpKSB7XG4gICAgICAvLyBFbGVtZW50IGNvdW50cyBnZXQgZW5jb2RlZCBhcyBudW1iZXJzLlxuICAgICAgd2hpbGUgKCFpc0VsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIGNoaWxkID0gZmFzdE5leHRTaWJsaW5nKGNoaWxkKTtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgIHRocm93IHFFcnJvcihRRXJyb3IubWF0ZXJpYWxpemVWTm9kZURhdGFFcnJvciwgW3ZEYXRhLCBwZWVrKCksIG5leHRUb0NvbnN1bWVJZHhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gV2UgcHJldGVuZCB0aGF0IHN0eWxlIGVsZW1lbnQncyBkb24ndCBleGlzdCBhcyB0aGV5IGNhbiBnZXQgbW92ZWQgb3V0LlxuICAgICAgd2hpbGUgKGlzUVN0eWxlRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgLy8gc2tpcCBvdmVyIHN0eWxlIGVsZW1lbnRzLCBhcyB0aG9zZSBuZWVkIHRvIGJlIG1vdmVkIHRvIHRoZSBoZWFkXG4gICAgICAgIC8vIGFuZCBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBjb3VudHMuXG4gICAgICAgIGNoaWxkID0gZmFzdE5leHRTaWJsaW5nKGNoaWxkKTtcbiAgICAgIH1cbiAgICAgIGNvbWJpbmVkVGV4dCA9IG51bGw7XG4gICAgICBwcmV2aW91c1RleHROb2RlID0gbnVsbDtcbiAgICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgICB3aGlsZSAoaXNOdW1iZXIocGVlaygpKSkge1xuICAgICAgICB2YWx1ZSAqPSAxMDtcbiAgICAgICAgdmFsdWUgKz0gY29uc3VtZSgpIC0gNDg7IC8qIGAwYCAqL1xuICAgICAgfVxuICAgICAgd2hpbGUgKHZhbHVlLS0pIHtcbiAgICAgICAgYWRkVk5vZGUodm5vZGVfbmV3VW5NYXRlcmlhbGl6ZWRFbGVtZW50KGNoaWxkIGFzIEVsZW1lbnQpKTtcbiAgICAgICAgY2hpbGQgPSBmYXN0TmV4dFNpYmxpbmcoY2hpbGQpO1xuICAgICAgfVxuICAgICAgLy8gY29sbGVjdCB0aGUgZWxlbWVudHM7XG4gICAgfSBlbHNlIGlmIChwZWVrKCkgPT09IFZOb2RlRGF0YUNoYXIuU0NPUEVEX1NUWUxFKSB7XG4gICAgICB2bm9kZV9zZXRBdHRyKG51bGwsIHZQYXJlbnQsIFFTY29wZWRTdHlsZSwgY29uc3VtZVZhbHVlKCkpO1xuICAgIH0gZWxzZSBpZiAocGVlaygpID09PSBWTm9kZURhdGFDaGFyLlJFTkRFUl9GTikge1xuICAgICAgdm5vZGVfc2V0QXR0cihudWxsLCB2UGFyZW50LCBPblJlbmRlclByb3AsIGNvbnN1bWVWYWx1ZSgpKTtcbiAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5JRCkge1xuICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgY29udGFpbmVyID0gZ2V0RG9tQ29udGFpbmVyKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgaWQgPSBjb25zdW1lVmFsdWUoKTtcbiAgICAgIGNvbnRhaW5lci4kc2V0UmF3U3RhdGUkKHBhcnNlSW50KGlkKSwgdlBhcmVudCk7XG4gICAgICBpc0RldiAmJiB2bm9kZV9zZXRBdHRyKG51bGwsIHZQYXJlbnQsIEVMRU1FTlRfSUQsIGlkKTtcbiAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5QUk9QUykge1xuICAgICAgdm5vZGVfc2V0QXR0cihudWxsLCB2UGFyZW50LCBFTEVNRU5UX1BST1BTLCBjb25zdW1lVmFsdWUoKSk7XG4gICAgfSBlbHNlIGlmIChwZWVrKCkgPT09IFZOb2RlRGF0YUNoYXIuS0VZKSB7XG4gICAgICB2bm9kZV9zZXRBdHRyKG51bGwsIHZQYXJlbnQsIEVMRU1FTlRfS0VZLCBjb25zdW1lVmFsdWUoKSk7XG4gICAgfSBlbHNlIGlmIChwZWVrKCkgPT09IFZOb2RlRGF0YUNoYXIuU0VRKSB7XG4gICAgICB2bm9kZV9zZXRBdHRyKG51bGwsIHZQYXJlbnQsIEVMRU1FTlRfU0VRLCBjb25zdW1lVmFsdWUoKSk7XG4gICAgfSBlbHNlIGlmIChwZWVrKCkgPT09IFZOb2RlRGF0YUNoYXIuU0VRX0lEWCkge1xuICAgICAgdm5vZGVfc2V0QXR0cihudWxsLCB2UGFyZW50LCBFTEVNRU5UX1NFUV9JRFgsIGNvbnN1bWVWYWx1ZSgpKTtcbiAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5CQUNLX1JFRlMpIHtcbiAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgIGNvbnRhaW5lciA9IGdldERvbUNvbnRhaW5lcihlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIHNldEVmZmVjdEJhY2tSZWZGcm9tVk5vZGVEYXRhKHZQYXJlbnQsIGNvbnN1bWVWYWx1ZSgpLCBjb250YWluZXIpO1xuICAgIH0gZWxzZSBpZiAocGVlaygpID09PSBWTm9kZURhdGFDaGFyLlNMT1RfUEFSRU5UKSB7XG4gICAgICB2bm9kZV9zZXRQcm9wKHZQYXJlbnQsIFFTbG90UGFyZW50LCBjb25zdW1lVmFsdWUoKSk7XG4gICAgfSBlbHNlIGlmIChwZWVrKCkgPT09IFZOb2RlRGF0YUNoYXIuQ09OVEVYVCkge1xuICAgICAgdm5vZGVfc2V0QXR0cihudWxsLCB2UGFyZW50LCBRQ3R4QXR0ciwgY29uc3VtZVZhbHVlKCkpO1xuICAgIH0gZWxzZSBpZiAocGVlaygpID09PSBWTm9kZURhdGFDaGFyLk9QRU4pIHtcbiAgICAgIGNvbnN1bWUoKTtcbiAgICAgIGFkZFZOb2RlKHZub2RlX25ld1ZpcnR1YWwoKSk7XG4gICAgICBzdGFjay5wdXNoKHZQYXJlbnQsIHZGaXJzdCwgdkxhc3QsIHByZXZpb3VzVGV4dE5vZGUsIGlkeCk7XG4gICAgICBpZHggPSAwO1xuICAgICAgdlBhcmVudCA9IHZMYXN0IGFzIEVsZW1lbnRWTm9kZSB8IFZpcnR1YWxWTm9kZTtcbiAgICAgIHZGaXJzdCA9IHZMYXN0ID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHBlZWsoKSA9PT0gVk5vZGVEYXRhQ2hhci5TRVBBUkFUT1IpIHtcbiAgICAgIGNvbnN0IGtleSA9IGNvbnN1bWVWYWx1ZSgpO1xuICAgICAgY29uc3QgdmFsdWUgPSBjb25zdW1lVmFsdWUoKTtcbiAgICAgIHZub2RlX3NldEF0dHIobnVsbCwgdlBhcmVudCBhcyBWaXJ0dWFsVk5vZGUsIGtleSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocGVlaygpID09PSBWTm9kZURhdGFDaGFyLkNMT1NFKSB7XG4gICAgICBjb25zdW1lKCk7XG4gICAgICB2UGFyZW50W0VsZW1lbnRWTm9kZVByb3BzLmxhc3RDaGlsZF0gPSB2TGFzdDtcbiAgICAgIGlkeCA9IHN0YWNrLnBvcCgpO1xuICAgICAgcHJldmlvdXNUZXh0Tm9kZSA9IHN0YWNrLnBvcCgpO1xuICAgICAgdkxhc3QgPSBzdGFjay5wb3AoKTtcbiAgICAgIHZGaXJzdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgdlBhcmVudCA9IHN0YWNrLnBvcCgpO1xuICAgIH0gZWxzZSBpZiAocGVlaygpID09PSBWTm9kZURhdGFDaGFyLlNMT1QpIHtcbiAgICAgIHZub2RlX3NldEF0dHIobnVsbCwgdlBhcmVudCwgUVNsb3QsIGNvbnN1bWVWYWx1ZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGV4dE5vZGUgPVxuICAgICAgICBjaGlsZCAmJiBmYXN0Tm9kZVR5cGUoY2hpbGQpID09PSAvKiBOb2RlLlRFWFRfTk9ERSAqLyAzID8gKGNoaWxkIGFzIFRleHQpIDogbnVsbDtcbiAgICAgIC8vIG11c3QgYmUgYWxwaGFudW1lcmljXG4gICAgICBpZiAoY29tYmluZWRUZXh0ID09PSBudWxsKSB7XG4gICAgICAgIGNvbWJpbmVkVGV4dCA9IHRleHROb2RlID8gdGV4dE5vZGUubm9kZVZhbHVlIDogbnVsbDtcbiAgICAgICAgdGV4dElkeCA9IDA7XG4gICAgICB9XG4gICAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICAgIHdoaWxlIChpc0xvd2VyY2FzZShwZWVrKCkpKSB7XG4gICAgICAgIGxlbmd0aCArPSBjb25zdW1lKCkgLSA5NzsgLyogYGFgICovXG4gICAgICAgIGxlbmd0aCAqPSAyNjtcbiAgICAgIH1cbiAgICAgIGxlbmd0aCArPSBjb25zdW1lKCkgLSA2NTsgLyogYEFgICovXG4gICAgICBjb25zdCB0ZXh0ID0gY29tYmluZWRUZXh0ID09PSBudWxsID8gJycgOiBjb21iaW5lZFRleHQuc3Vic3RyaW5nKHRleHRJZHgsIHRleHRJZHggKyBsZW5ndGgpO1xuXG4gICAgICBhZGRWTm9kZShcbiAgICAgICAgKHByZXZpb3VzVGV4dE5vZGUgPSB2bm9kZV9uZXdTaGFyZWRUZXh0KHByZXZpb3VzVGV4dE5vZGUsIHRleHROb2RlIGFzIFRleHQgfCBudWxsLCB0ZXh0KSlcbiAgICAgICk7XG4gICAgICB0ZXh0SWR4ICs9IGxlbmd0aDtcbiAgICAgIC8vIFRleHQgbm9kZXMgZ2V0IGVuY29kZWQgYXMgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuXG4gICAgfVxuICB9KTtcbiAgdlBhcmVudFtFbGVtZW50Vk5vZGVQcm9wcy5sYXN0Q2hpbGRdID0gdkxhc3Q7XG4gIHJldHVybiB2Rmlyc3QhO1xufVxuXG5leHBvcnQgY29uc3Qgdm5vZGVfZ2V0VHlwZSA9ICh2bm9kZTogVk5vZGUpOiAxIHwgMyB8IDExID0+IHtcbiAgY29uc3QgdHlwZSA9IHZub2RlW1ZOb2RlUHJvcHMuZmxhZ3NdO1xuICBpZiAodHlwZSAmIFZOb2RlRmxhZ3MuRWxlbWVudCkge1xuICAgIHJldHVybiAxIC8qIEVsZW1lbnQgKi87XG4gIH0gZWxzZSBpZiAodHlwZSAmIFZOb2RlRmxhZ3MuVmlydHVhbCkge1xuICAgIHJldHVybiAxMSAvKiBWaXJ0dWFsICovO1xuICB9IGVsc2UgaWYgKHR5cGUgJiBWTm9kZUZsYWdzLlRleHQpIHtcbiAgICByZXR1cm4gMyAvKiBUZXh0ICovO1xuICB9XG4gIHRocm93IHFFcnJvcihRRXJyb3IuaW52YWxpZFZOb2RlVHlwZSwgW3R5cGVdKTtcbn07XG5cbmNvbnN0IGlzRWxlbWVudCA9IChub2RlOiBhbnkpOiBub2RlIGlzIEVsZW1lbnQgPT5cbiAgbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PSAnb2JqZWN0JyAmJiBmYXN0Tm9kZVR5cGUobm9kZSkgPT09IC8qKiBOb2RlLkVMRU1FTlRfTk9ERSogKi8gMTtcblxuLyoqXG4gKiBVc2UgdGhpcyBtZXRob2QgdG8gZmluZCB0aGUgcGFyZW50IGNvbXBvbmVudCBmb3IgcHJvamVjdGlvbi5cbiAqXG4gKiBOb3JtYWxseSB0aGUgcGFyZW50IGNvbXBvbmVudCBpcyBqdXN0IHRoZSBmaXJzdCBjb21wb25lbnQgd2hpY2ggd2UgZW5jb3VudGVyIHdoaWxlIHRyYXZlcnNpbmcgdGhlXG4gKiBwYXJlbnRzLlxuICpcbiAqIEhvd2V2ZXIsIGlmIGR1cmluZyB0cmF2ZXJzYWwgd2UgZW5jb3VudGVyIGEgcHJvamVjdGlvbiwgdGhhbiB3ZSBoYXZlIHRvIGZvbGxvdyB0aGUgcHJvamVjdGlvbixcbiAqIGFuZCBub2RlIHdpdGggdGhlIHByb2plY3Rpb24gY29tcG9uZW50IGlzIGZ1cnRoZXIgYXdheSAoaXQgaXMgdGhlIHBhcmVudCdzIHBhcmVudCBvZiB0aGVcbiAqIHByb2plY3Rpb24ncylcbiAqXG4gKiBTbyBpbiBnZW5lcmFsIHdlIGhhdmUgdG8gZ28gdXAgYXMgbWFueSBwYXJlbnQgY29tcG9uZW50cyBhcyB0aGVyZSBhcmUgcHJvamVjdGlvbnMgbmVzdGluZ3MuXG4gKlxuICogLSBObyBwcm9qZWN0aW9uIG5lc3RpbmcgZmlyc3QgcGFyZW50IGNvbXBvbmVudC5cbiAqIC0gT25lIHByb2plY3Rpb24gbmVzdGluZywgc2Vjb25kIHBhcmVudCBjb21wb25lbnQgKHBhcmVudCdzIHBhcmVudCkuXG4gKiAtIFRocmVlIHByb2plY3Rpb24gbmVzdGluZywgdGhpcmQgcGFyZW50IGNvbXBvbmVudCAocGFyZW50J3MgcGFyZW50J3MgcGFyZW50KS5cbiAqIC0gQW5kIHNvIG9uLlxuICpcbiAqIEBwYXJhbSB2SG9zdFxuICogQHBhcmFtIHJvb3RWTm9kZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHZub2RlX2dldFByb2plY3Rpb25QYXJlbnRDb21wb25lbnQgPSAoXG4gIHZIb3N0OiBWTm9kZSxcbiAgcm9vdFZOb2RlOiBFbGVtZW50Vk5vZGVcbik6IFZpcnR1YWxWTm9kZSB8IG51bGwgPT4ge1xuICBsZXQgcHJvamVjdGlvbkRlcHRoID0gMTtcbiAgd2hpbGUgKHByb2plY3Rpb25EZXB0aC0tKSB7XG4gICAgd2hpbGUgKFxuICAgICAgdkhvc3QgJiZcbiAgICAgICh2bm9kZV9pc1ZpcnR1YWxWTm9kZSh2SG9zdCkgPyB2bm9kZV9nZXRQcm9wKHZIb3N0LCBPblJlbmRlclByb3AsIG51bGwpID09PSBudWxsIDogdHJ1ZSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHFTbG90UGFyZW50ID0gdm5vZGVfZ2V0UHJvcDxWTm9kZSB8IG51bGw+KHZIb3N0LCBRU2xvdFBhcmVudCwgKGlkKSA9PlxuICAgICAgICB2bm9kZV9sb2NhdGUocm9vdFZOb2RlLCBpZClcbiAgICAgICk7XG4gICAgICBjb25zdCB2UHJvamVjdGlvblBhcmVudCA9IHZub2RlX2lzVmlydHVhbFZOb2RlKHZIb3N0KSAmJiBxU2xvdFBhcmVudDtcbiAgICAgIGlmICh2UHJvamVjdGlvblBhcmVudCkge1xuICAgICAgICAvLyBXZSBmb3VuZCBhIHByb2plY3Rpb24sIHNvIHdlIG5lZWQgdG8gZ28gdXAgb25lIG1vcmUgbGV2ZWwuXG4gICAgICAgIHByb2plY3Rpb25EZXB0aCsrO1xuICAgICAgfVxuICAgICAgdkhvc3QgPSB2UHJvamVjdGlvblBhcmVudCB8fCB2bm9kZV9nZXRQYXJlbnQodkhvc3QpITtcbiAgICB9XG4gICAgaWYgKHByb2plY3Rpb25EZXB0aCA+IDApIHtcbiAgICAgIHZIb3N0ID0gdm5vZGVfZ2V0UGFyZW50KHZIb3N0KSE7XG4gICAgfVxuICB9XG4gIHJldHVybiB2SG9zdCBhcyBWaXJ0dWFsVk5vZGUgfCBudWxsO1xufTtcblxuY29uc3QgVk5vZGVBcnJheSA9IGNsYXNzIFZOb2RlIGV4dGVuZHMgQXJyYXk8YW55PiB7XG4gIHN0YXRpYyBjcmVhdGVFbGVtZW50KFxuICAgIGZsYWdzOiBWTm9kZUZsYWdzLFxuICAgIHBhcmVudDogVk5vZGUgfCBudWxsLFxuICAgIHByZXZpb3VzU2libGluZzogVk5vZGUgfCBudWxsLFxuICAgIG5leHRTaWJsaW5nOiBWTm9kZSB8IG51bGwsXG4gICAgZmlyc3RDaGlsZDogVk5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIGxhc3RDaGlsZDogVk5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIGVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgZWxlbWVudE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gbmV3IFZOb2RlKFxuICAgICAgZmxhZ3MsXG4gICAgICBwYXJlbnQsXG4gICAgICBwcmV2aW91c1NpYmxpbmcsXG4gICAgICBuZXh0U2libGluZyxcbiAgICAgIGZpcnN0Q2hpbGQsXG4gICAgICBsYXN0Q2hpbGQsXG4gICAgICBlbGVtZW50LFxuICAgICAgZWxlbWVudE5hbWUsXG4gICAgICBbXVxuICAgICkgYXMgRWxlbWVudFZOb2RlO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVRleHQoXG4gICAgZmxhZ3M6IFZOb2RlRmxhZ3MsXG4gICAgcGFyZW50OiBWTm9kZSB8IG51bGwsXG4gICAgcHJldmlvdXNTaWJsaW5nOiBWTm9kZSB8IG51bGwsXG4gICAgbmV4dFNpYmxpbmc6IFZOb2RlIHwgbnVsbCxcbiAgICB0ZXh0Tm9kZTogVGV4dCB8IG51bGwsXG4gICAgdGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiBuZXcgVk5vZGUoZmxhZ3MsIHBhcmVudCwgcHJldmlvdXNTaWJsaW5nLCBuZXh0U2libGluZywgdGV4dE5vZGUsIHRleHQpIGFzIFRleHRWTm9kZTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVWaXJ0dWFsKFxuICAgIGZsYWdzOiBWTm9kZUZsYWdzLFxuICAgIHBhcmVudDogVk5vZGUgfCBudWxsLFxuICAgIHByZXZpb3VzU2libGluZzogVk5vZGUgfCBudWxsLFxuICAgIG5leHRTaWJsaW5nOiBWTm9kZSB8IG51bGwsXG4gICAgZmlyc3RDaGlsZDogVk5vZGUgfCBudWxsLFxuICAgIGxhc3RDaGlsZDogVk5vZGUgfCBudWxsXG4gICkge1xuICAgIHJldHVybiBuZXcgVk5vZGUoXG4gICAgICBmbGFncyxcbiAgICAgIHBhcmVudCxcbiAgICAgIHByZXZpb3VzU2libGluZyxcbiAgICAgIG5leHRTaWJsaW5nLFxuICAgICAgZmlyc3RDaGlsZCxcbiAgICAgIGxhc3RDaGlsZCxcbiAgICAgIFtdXG4gICAgKSBhcyBWaXJ0dWFsVk5vZGU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBmbGFnczogVk5vZGVGbGFncyxcbiAgICBwYXJlbnQ6IFZOb2RlIHwgbnVsbCxcbiAgICBwcmV2aW91c1NpYmxpbmc6IFZOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICBuZXh0U2libGluZzogVk5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIC4uLnJlc3Q6IChWTm9kZSB8IEVsZW1lbnQgfCBUZXh0IHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZClbXVxuICApIHtcbiAgICBzdXBlcihmbGFncywgcGFyZW50LCBwcmV2aW91c1NpYmxpbmcsIG5leHRTaWJsaW5nLCAuLi5yZXN0KTtcbiAgICBpZiAoaXNEZXYpIHtcbiAgICAgIHRoaXMudG9TdHJpbmcgPSB2bm9kZV90b1N0cmluZztcbiAgICB9XG4gIH1cbn07XG4iXX0=","/** There's [documentation](./serialization.md) */\nimport { isDev } from '../../build/index.dev';\nimport { vnode_getNode, vnode_isVNode, vnode_locate, vnode_toString } from '../client/vnode';\nimport { _EFFECT_BACK_REF, NEEDS_COMPUTATION } from '../signal/flags';\nimport { ComputedSignalImpl, SerializerSignalImpl, SignalImpl, SubscriptionData, WrappedSignal, isSerializerObj, } from '../signal/signal';\nimport { getOrCreateStore, getStoreHandler, getStoreTarget, isStore, STORE_ALL_PROPS, } from '../signal/store';\nimport { untrack } from '../use/use-core';\nimport { createResourceReturn } from '../use/use-resource';\nimport { isTask, Task } from '../use/use-task';\nimport { componentQrl, isQwikComponent, SERIALIZABLE_STATE } from './component.public';\nimport { assertDefined, assertTrue } from './error/assert';\nimport { qError } from './error/error';\nimport { createPropsProxy, Fragment, isJSXNode, isPropsProxy, JSXNodeImpl, } from './jsx/jsx-runtime';\nimport { Slot } from './jsx/slot.public';\nimport { getPlatform } from './platform/platform';\nimport { createQRL } from './qrl/qrl-class';\nimport { isQrl, isSyncQrl } from './qrl/qrl-utils';\nimport { _CONST_PROPS, _VAR_PROPS } from './utils/constants';\nimport { isElement, isNode } from './utils/element';\nimport { EMPTY_ARRAY, EMPTY_OBJ } from './utils/flyweight';\nimport { ELEMENT_ID } from './utils/markers';\nimport { isPromise } from './utils/promises';\nimport { SerializerSymbol, fastSkipSerialize } from './utils/serialize-utils';\nconst deserializedProxyMap = new WeakMap();\nexport const isDeserializerProxy = (value) => {\n    return typeof value === 'object' && value !== null && SERIALIZER_PROXY_UNWRAP in value;\n};\nexport const SERIALIZER_PROXY_UNWRAP = Symbol('UNWRAP');\n/** Call this on the serialized root state */\nexport const wrapDeserializerProxy = (container, data) => {\n    if (!Array.isArray(data) || // must be an array\n        vnode_isVNode(data) || // and not a VNode or Slot\n        isDeserializerProxy(data) // and not already wrapped\n    ) {\n        return data;\n    }\n    let proxy = deserializedProxyMap.get(data);\n    if (!proxy) {\n        const target = Array(data.length / 2).fill(undefined);\n        proxy = new Proxy(target, new DeserializationHandler(container, data));\n        deserializedProxyMap.set(data, proxy);\n    }\n    return proxy;\n};\nclass DeserializationHandler {\n    $container$;\n    $data$;\n    $length$;\n    constructor($container$, $data$) {\n        this.$container$ = $container$;\n        this.$data$ = $data$;\n        this.$length$ = this.$data$.length / 2;\n    }\n    get(target, property, receiver) {\n        if (property === SERIALIZER_PROXY_UNWRAP) {\n            // Note that this will only be partially filled in\n            return target;\n        }\n        const i = typeof property === 'number'\n            ? property\n            : typeof property === 'string'\n                ? parseInt(property, 10)\n                : NaN;\n        if (Number.isNaN(i) || i < 0 || i >= this.$length$) {\n            return Reflect.get(target, property, receiver);\n        }\n        // The serialized data is an array with 2 values for each item\n        const idx = i * 2;\n        const typeId = this.$data$[idx];\n        const value = this.$data$[idx + 1];\n        if (typeId === undefined) {\n            // The value is already cached\n            return value;\n        }\n        const container = this.$container$;\n        let propValue = allocate(container, typeId, value);\n        /** We stored the reference, so now we can inflate, allowing cycles. */\n        if (typeId >= 12 /* TypeIds.Error */) {\n            propValue = inflate(container, propValue, typeId, value);\n        }\n        Reflect.set(target, property, propValue);\n        this.$data$[idx] = undefined;\n        this.$data$[idx + 1] = propValue;\n        return propValue;\n    }\n    has(target, property) {\n        if (property === SERIALIZER_PROXY_UNWRAP) {\n            return true;\n        }\n        return Object.prototype.hasOwnProperty.call(target, property);\n    }\n    set(target, property, value, receiver) {\n        if (property === SERIALIZER_PROXY_UNWRAP) {\n            return false;\n        }\n        const out = Reflect.set(target, property, value, receiver);\n        const i = typeof property === 'number' ? property : parseInt(property, 10);\n        if (Number.isNaN(i) || i < 0 || i >= this.$data$.length / 2) {\n            return out;\n        }\n        const idx = i * 2;\n        this.$data$[idx] = undefined;\n        this.$data$[idx + 1] = value;\n        return true;\n    }\n}\n/**\n * Restores an array eagerly. If you need it lazily, use `deserializeData(container, TypeIds.Array,\n * array)` instead\n */\nexport const _eagerDeserializeArray = (container, data) => {\n    const out = Array(data.length / 2);\n    for (let i = 0; i < data.length; i += 2) {\n        out[i / 2] = deserializeData(container, data[i], data[i + 1]);\n    }\n    return out;\n};\nconst resolvers = new WeakMap();\nconst inflate = (container, target, typeId, data) => {\n    if (typeId === undefined) {\n        // Already processed\n        return target;\n    }\n    // restore the complex data, except for plain objects\n    if (typeId !== 13 /* TypeIds.Object */ && Array.isArray(data)) {\n        data = _eagerDeserializeArray(container, data);\n    }\n    switch (typeId) {\n        case 13 /* TypeIds.Object */:\n            // We use getters for making complex values lazy\n            // TODO scan the data for computeQRLs and schedule resolve chores\n            for (let i = 0; i < data.length; i += 4) {\n                const key = deserializeData(container, data[i], data[i + 1]);\n                const valType = data[i + 2];\n                const valData = data[i + 3];\n                if (valType === 0 /* TypeIds.RootRef */ || valType >= 12 /* TypeIds.Error */) {\n                    Object.defineProperty(target, key, {\n                        get() {\n                            const value = deserializeData(container, valType, valData);\n                            // after first deserialize, we can replace the Object.defineProperty with the value\n                            target[key] = value;\n                            return value;\n                        },\n                        set(value) {\n                            Object.defineProperty(target, key, {\n                                value,\n                                writable: true,\n                                enumerable: true,\n                                configurable: true,\n                            });\n                        },\n                        enumerable: true,\n                        configurable: true,\n                    });\n                }\n                else {\n                    target[key] = deserializeData(container, valType, valData);\n                }\n            }\n            break;\n        case 18 /* TypeIds.QRL */:\n            inflateQRL(container, target);\n            break;\n        case 19 /* TypeIds.Task */:\n            const task = target;\n            const v = data;\n            task.$qrl$ = inflateQRL(container, v[0]);\n            task.$flags$ = v[1];\n            task.$index$ = v[2];\n            task.$el$ = v[3];\n            task[_EFFECT_BACK_REF] = v[4];\n            task.$state$ = v[5];\n            break;\n        case 20 /* TypeIds.Resource */:\n            const [resolved, result, effects] = data;\n            const resource = target;\n            if (resolved) {\n                resource.value = Promise.resolve(result);\n                resource._resolved = result;\n                resource._state = 'resolved';\n            }\n            else {\n                resource.value = Promise.reject(result);\n                resource._error = result;\n                resource._state = 'rejected';\n            }\n            getStoreHandler(target).$effects$ = effects;\n            break;\n        case 21 /* TypeIds.Component */:\n            target[SERIALIZABLE_STATE][0] = data[0];\n            break;\n        case 26 /* TypeIds.Store */:\n        case 27 /* TypeIds.StoreArray */: {\n            const [value, flags, effects] = data;\n            const store = getOrCreateStore(value, flags, container);\n            const storeHandler = getStoreHandler(store);\n            storeHandler.$effects$ = effects;\n            target = store;\n            break;\n        }\n        case 22 /* TypeIds.Signal */: {\n            const signal = target;\n            const d = data;\n            signal.$untrackedValue$ = d[0];\n            signal.$effects$ = new Set(d.slice(1));\n            break;\n        }\n        case 23 /* TypeIds.WrappedSignal */: {\n            const signal = target;\n            const d = data;\n            signal.$func$ = container.getSyncFn(d[0]);\n            signal.$args$ = d[1];\n            signal[_EFFECT_BACK_REF] = d[2];\n            signal.$untrackedValue$ = d[3];\n            signal.$flags$ = d[4];\n            signal.$hostElement$ = d[5];\n            signal.$effects$ = new Set(d.slice(6));\n            break;\n        }\n        // Inflating a SerializerSignal is the same as inflating a ComputedSignal\n        case 25 /* TypeIds.SerializerSignal */:\n        case 24 /* TypeIds.ComputedSignal */: {\n            const computed = target;\n            const d = data;\n            computed.$computeQrl$ = d[0];\n            computed.$effects$ = new Set(d[1]);\n            const hasValue = d.length > 2;\n            if (hasValue) {\n                computed.$untrackedValue$ = d[2];\n                // The serialized signal is always invalid so it can recreate the custom object\n                if (typeId === 25 /* TypeIds.SerializerSignal */) {\n                    computed.$flags$ |= 1 /* SignalFlags.INVALID */;\n                }\n            }\n            else {\n                computed.$flags$ |= 1 /* SignalFlags.INVALID */;\n                /**\n                 * If we try to compute value and the qrl is not resolved, then system throws an error with\n                 * qrl promise. To prevent that we should early resolve computed qrl while computed\n                 * deserialization. This also prevents anything from firing while computed qrls load,\n                 * because of scheduler\n                 */\n                // try to download qrl in this tick\n                computed.$computeQrl$.resolve();\n                container.$scheduler$?.(1 /* ChoreType.QRL_RESOLVE */, null, computed.$computeQrl$);\n            }\n            break;\n        }\n        case 12 /* TypeIds.Error */: {\n            const d = data;\n            target.message = d[0];\n            const second = d[1];\n            if (second && Array.isArray(second)) {\n                for (let i = 0; i < second.length; i++) {\n                    target[second[i++]] = second[i];\n                }\n                target.stack = d[2];\n            }\n            else {\n                target.stack = second;\n            }\n            break;\n        }\n        case 28 /* TypeIds.FormData */: {\n            const formData = target;\n            const d = data;\n            for (let i = 0; i < d.length; i++) {\n                formData.append(d[i++], d[i]);\n            }\n            break;\n        }\n        case 29 /* TypeIds.JSXNode */: {\n            const jsx = target;\n            const [type, varProps, constProps, children, flags, key] = data;\n            jsx.type = type;\n            jsx.varProps = varProps;\n            jsx.constProps = constProps;\n            jsx.children = children;\n            jsx.flags = flags;\n            jsx.key = key;\n            break;\n        }\n        case 15 /* TypeIds.Set */: {\n            const set = target;\n            const d = data;\n            for (let i = 0; i < d.length; i++) {\n                set.add(d[i]);\n            }\n            break;\n        }\n        case 16 /* TypeIds.Map */: {\n            const map = target;\n            const d = data;\n            for (let i = 0; i < d.length; i++) {\n                map.set(d[i++], d[i]);\n            }\n            break;\n        }\n        case 14 /* TypeIds.Promise */: {\n            const promise = target;\n            const [resolved, result] = data;\n            const [resolve, reject] = resolvers.get(promise);\n            if (resolved) {\n                resolve(result);\n            }\n            else {\n                reject(result);\n            }\n            break;\n        }\n        case 17 /* TypeIds.Uint8Array */:\n            const bytes = target;\n            const buf = atob(data);\n            let i = 0;\n            for (const s of buf) {\n                bytes[i++] = s.charCodeAt(0);\n            }\n            break;\n        case 30 /* TypeIds.PropsProxy */:\n            const propsProxy = target;\n            propsProxy[_VAR_PROPS] = data === 0 ? {} : data[0];\n            propsProxy[_CONST_PROPS] = data[1];\n            break;\n        case 31 /* TypeIds.EffectData */: {\n            const effectData = target;\n            effectData.data.$scopedStyleIdPrefix$ = data[0];\n            effectData.data.$isConst$ = data[1];\n            break;\n        }\n        default:\n            throw qError(33 /* QError.serializeErrorNotImplemented */, [typeId]);\n    }\n    return target;\n};\nexport const _constants = [\n    undefined,\n    null,\n    true,\n    false,\n    '',\n    EMPTY_ARRAY,\n    EMPTY_OBJ,\n    NEEDS_COMPUTATION,\n    STORE_ALL_PROPS,\n    Slot,\n    Fragment,\n    NaN,\n    Infinity,\n    -Infinity,\n    Number.MAX_SAFE_INTEGER,\n    Number.MAX_SAFE_INTEGER - 1,\n    Number.MIN_SAFE_INTEGER,\n];\nconst _constantNames = [\n    'undefined',\n    'null',\n    'true',\n    'false',\n    \"''\",\n    'EMPTY_ARRAY',\n    'EMPTY_OBJ',\n    'NEEDS_COMPUTATION',\n    'STORE_ALL_PROPS',\n    'Slot',\n    'Fragment',\n    'NaN',\n    'Infinity',\n    '-Infinity',\n    'MAX_SAFE_INTEGER',\n    'MAX_SAFE_INTEGER-1',\n    'MIN_SAFE_INTEGER',\n];\nconst allocate = (container, typeId, value) => {\n    if (value === undefined) {\n        // When a value was already processed, the result is stored in type\n        return typeId;\n    }\n    switch (typeId) {\n        case 0 /* TypeIds.RootRef */:\n            return container.$getObjectById$(value);\n        case 1 /* TypeIds.Constant */:\n            return _constants[value];\n        case 2 /* TypeIds.Number */:\n            return value;\n        case 4 /* TypeIds.Array */:\n            return wrapDeserializerProxy(container, value);\n        case 13 /* TypeIds.Object */:\n            return {};\n        case 18 /* TypeIds.QRL */:\n            const qrl = container.$getObjectById$(value);\n            return parseQRL(qrl);\n        case 19 /* TypeIds.Task */:\n            return new Task(-1, -1, null, null, null, null);\n        case 20 /* TypeIds.Resource */: {\n            const res = createResourceReturn(container, \n            // we don't care about the timeout value\n            undefined, undefined);\n            res.loading = false;\n            return res;\n        }\n        case 5 /* TypeIds.URL */:\n            return new URL(value);\n        case 6 /* TypeIds.Date */:\n            return new Date(value);\n        case 7 /* TypeIds.Regex */:\n            const idx = value.lastIndexOf('/');\n            return new RegExp(value.slice(1, idx), value.slice(idx + 1));\n        case 12 /* TypeIds.Error */:\n            return new Error();\n        case 21 /* TypeIds.Component */:\n            return componentQrl(null);\n        case 22 /* TypeIds.Signal */:\n            return new SignalImpl(container, 0);\n        case 23 /* TypeIds.WrappedSignal */:\n            return new WrappedSignal(container, null, null, null);\n        case 24 /* TypeIds.ComputedSignal */:\n            return new ComputedSignalImpl(container, null);\n        case 25 /* TypeIds.SerializerSignal */:\n            return new SerializerSignalImpl(container, null);\n        case 26 /* TypeIds.Store */:\n        case 27 /* TypeIds.StoreArray */:\n            // ignore allocate, we need to assign target while creating store\n            return null;\n        case 11 /* TypeIds.URLSearchParams */:\n            return new URLSearchParams(value);\n        case 28 /* TypeIds.FormData */:\n            return new FormData();\n        case 29 /* TypeIds.JSXNode */:\n            return new JSXNodeImpl(null, null, null, null, -1, null);\n        case 10 /* TypeIds.BigInt */:\n            return BigInt(value);\n        case 15 /* TypeIds.Set */:\n            return new Set();\n        case 16 /* TypeIds.Map */:\n            return new Map();\n        case 3 /* TypeIds.String */:\n            return value;\n        case 14 /* TypeIds.Promise */:\n            let resolve;\n            let reject;\n            const promise = new Promise((res, rej) => {\n                resolve = res;\n                reject = rej;\n            });\n            resolvers.set(promise, [resolve, reject]);\n            // Don't leave unhandled promise rejections\n            promise.catch(() => { });\n            return promise;\n        case 17 /* TypeIds.Uint8Array */:\n            const encodedLength = value.length;\n            const blocks = encodedLength >>> 2;\n            const rest = encodedLength & 3;\n            const decodedLength = blocks * 3 + (rest ? rest - 1 : 0);\n            return new Uint8Array(decodedLength);\n        case 30 /* TypeIds.PropsProxy */:\n            return createPropsProxy(null, null);\n        case 8 /* TypeIds.VNode */:\n            return retrieveVNodeOrDocument(container, value);\n        case 9 /* TypeIds.RefVNode */:\n            const vNode = retrieveVNodeOrDocument(container, value);\n            if (vnode_isVNode(vNode)) {\n                return vnode_getNode(vNode);\n            }\n            else {\n                throw qError(34 /* QError.serializeErrorExpectedVNode */, [typeof vNode]);\n            }\n        case 31 /* TypeIds.EffectData */:\n            return new SubscriptionData({});\n        default:\n            throw qError(35 /* QError.serializeErrorCannotAllocate */, [typeId]);\n    }\n};\nfunction retrieveVNodeOrDocument(container, value) {\n    return value\n        ? container.rootVNode\n            ? vnode_locate(container.rootVNode, value)\n            : undefined\n        : container.element?.ownerDocument;\n}\n/** Parses \"chunk#hash[...rootRef]\" */\nexport function parseQRL(qrl) {\n    const hashIdx = qrl.indexOf('#');\n    const captureStart = qrl.indexOf('[', hashIdx);\n    const captureEnd = qrl.indexOf(']', captureStart);\n    const chunk = hashIdx > -1 ? qrl.slice(0, hashIdx) : qrl.slice(0, captureStart);\n    const symbol = captureStart > -1 ? qrl.slice(hashIdx + 1, captureStart) : qrl.slice(hashIdx + 1);\n    const captureIds = captureStart > -1 && captureEnd > -1\n        ? qrl\n            .slice(captureStart + 1, captureEnd)\n            .split(' ')\n            .filter((v) => v.length)\n            .map((s) => parseInt(s, 10))\n        : null;\n    let qrlRef = null;\n    if (isDev && chunk === QRL_RUNTIME_CHUNK) {\n        const backChannel = globalThis[QRL_RUNTIME_CHUNK];\n        assertDefined(backChannel, 'Missing QRL_RUNTIME_CHUNK');\n        qrlRef = backChannel.get(symbol);\n    }\n    return createQRL(chunk, symbol, qrlRef, null, captureIds, null);\n}\nexport function inflateQRL(container, qrl) {\n    const captureIds = qrl.$capture$;\n    qrl.$captureRef$ = captureIds ? captureIds.map((id) => container.$getObjectById$(id)) : null;\n    if (container.element) {\n        qrl.$setContainer$(container.element);\n    }\n    return qrl;\n}\nlet isDomRef = (obj) => false;\nexport const createSerializationContext = (\n/**\n * Node constructor, for instanceof checks.\n *\n * A node constructor can be null. For example on the client we can't serialize DOM nodes as\n * server will not know what to do with them.\n */\nNodeConstructor, \n/** DomRef constructor, for instanceof checks. */\nDomRefConstructor, symbolToChunkResolver, getProp, setProp, storeProxyMap, writer, \n// temporary until we serdes the vnode data here\nprepVNodeData) => {\n    if (!writer) {\n        const buffer = [];\n        writer = {\n            write: (text) => buffer.push(text),\n            toString: () => buffer.join(''),\n        };\n    }\n    const map = new Map();\n    const syncFnMap = new Map();\n    const syncFns = [];\n    const roots = [];\n    const $wasSeen$ = (obj) => map.get(obj);\n    const $seen$ = (obj) => map.set(obj, -1);\n    const $addRoot$ = (obj) => {\n        let id = map.get(obj);\n        if (typeof id !== 'number' || id === -1) {\n            id = roots.length;\n            map.set(obj, id);\n            roots.push(obj);\n        }\n        return id;\n    };\n    const isSsrNode = (NodeConstructor ? (obj) => obj instanceof NodeConstructor : () => false);\n    isDomRef = (DomRefConstructor ? (obj) => obj instanceof DomRefConstructor : (() => false));\n    return {\n        $serialize$() {\n            serialize(this);\n        },\n        $isSsrNode$: isSsrNode,\n        $isDomRef$: isDomRef,\n        $symbolToChunkResolver$: symbolToChunkResolver,\n        $wasSeen$,\n        $roots$: roots,\n        $seen$,\n        $hasRootId$: (obj) => {\n            const id = map.get(obj);\n            return id === undefined || id === -1 ? undefined : id;\n        },\n        $addRoot$,\n        $getRootId$: (obj) => {\n            const id = map.get(obj);\n            if (!id || id === -1) {\n                throw qError(36 /* QError.serializeErrorMissingRootId */, [obj]);\n            }\n            return id;\n        },\n        $syncFns$: syncFns,\n        $addSyncFn$: (funcStr, argCount, fn) => {\n            const isFullFn = funcStr == null;\n            if (isFullFn) {\n                funcStr = fn.serialized || fn.toString();\n            }\n            let id = syncFnMap.get(funcStr);\n            if (id === undefined) {\n                id = syncFns.length;\n                syncFnMap.set(funcStr, id);\n                if (isFullFn) {\n                    syncFns.push(funcStr);\n                }\n                else {\n                    let code = '(';\n                    for (let i = 0; i < argCount; i++) {\n                        code += (i == 0 ? 'p' : ',p') + i;\n                    }\n                    syncFns.push((code += ')=>' + funcStr));\n                }\n            }\n            return id;\n        },\n        $writer$: writer,\n        $breakCircularDepsAndAwaitPromises$: breakCircularDependenciesAndResolvePromises,\n        $eventQrls$: new Set(),\n        $eventNames$: new Set(),\n        $resources$: new Set(),\n        $renderSymbols$: new Set(),\n        $storeProxyMap$: storeProxyMap,\n        $getProp$: getProp,\n        $setProp$: setProp,\n        $prepVNodeData$: prepVNodeData,\n    };\n    async function breakCircularDependenciesAndResolvePromises() {\n        // As we walk the object graph we insert newly discovered objects which need to be scanned here.\n        const discoveredValues = [];\n        const promises = [];\n        /**\n         * Note on out of order streaming:\n         *\n         * When we implement that, we may need to send a reference to an object that was streamed\n         * earlier but wasn't a root. This means we'll have to keep track of all objects on both send\n         * and receive ends, which means we'll just have to make everything a root anyway, so `visit()`\n         * won't be needed.\n         */\n        /** Visit an object, adding anything that will be serialized as to scan */\n        const visit = (obj) => {\n            if (typeof obj === 'function') {\n                if (isQrl(obj)) {\n                    if (obj.$captureRef$) {\n                        discoveredValues.push(...obj.$captureRef$);\n                    }\n                }\n                else if (isQwikComponent(obj)) {\n                    const [qrl] = obj[SERIALIZABLE_STATE];\n                    discoveredValues.push(qrl);\n                }\n            }\n            else if (\n            // skip as these are primitives\n            typeof obj !== 'object' ||\n                obj === null ||\n                obj instanceof URL ||\n                obj instanceof Date ||\n                obj instanceof RegExp ||\n                obj instanceof Uint8Array ||\n                obj instanceof URLSearchParams ||\n                vnode_isVNode(obj) ||\n                (typeof FormData !== 'undefined' && obj instanceof FormData) ||\n                // Ignore the no serialize objects\n                fastSkipSerialize(obj)) {\n                // ignore\n            }\n            else if (obj instanceof Error) {\n                discoveredValues.push(...Object.values(obj));\n            }\n            else if (isStore(obj)) {\n                const target = getStoreTarget(obj);\n                const effects = getStoreHandler(obj).$effects$;\n                discoveredValues.push(target, effects);\n                for (const prop in target) {\n                    const propValue = target[prop];\n                    if (storeProxyMap.has(propValue)) {\n                        discoveredValues.push(prop, storeProxyMap.get(propValue));\n                    }\n                }\n            }\n            else if (obj instanceof Set) {\n                discoveredValues.push(...obj.values());\n            }\n            else if (obj instanceof Map) {\n                obj.forEach((v, k) => {\n                    discoveredValues.push(k, v);\n                });\n            }\n            else if (obj instanceof SignalImpl) {\n                /**\n                 * ComputedSignal can be left un-calculated if invalid.\n                 *\n                 * SerializerSignal is always serialized if it was already calculated.\n                 */\n                const toSerialize = obj instanceof ComputedSignalImpl &&\n                    !(obj instanceof SerializerSignalImpl) &&\n                    (obj.$flags$ & 1 /* SignalFlags.INVALID */ || fastSkipSerialize(obj))\n                    ? NEEDS_COMPUTATION\n                    : obj.$untrackedValue$;\n                if (toSerialize !== NEEDS_COMPUTATION) {\n                    if (obj instanceof SerializerSignalImpl) {\n                        promises.push(obj.$computeQrl$\n                            .resolve()\n                            .then((arg) => {\n                            let data;\n                            if (arg.serialize) {\n                                data = arg.serialize(toSerialize);\n                            }\n                            else if (SerializerSymbol in toSerialize) {\n                                data = toSerialize[SerializerSymbol](toSerialize);\n                            }\n                            if (data === undefined) {\n                                data = NEEDS_COMPUTATION;\n                            }\n                            serializationResults.set(obj, data);\n                            discoveredValues.push(data);\n                        }));\n                    }\n                    else {\n                        discoveredValues.push(toSerialize);\n                    }\n                }\n                if (obj.$effects$) {\n                    discoveredValues.push(obj.$effects$);\n                }\n                // WrappedSignal uses syncQrl which has no captured refs\n                if (obj instanceof WrappedSignal) {\n                    discoverEffectBackRefs(obj[_EFFECT_BACK_REF], discoveredValues);\n                    if (obj.$args$) {\n                        discoveredValues.push(...obj.$args$);\n                    }\n                    if (obj.$hostElement$) {\n                        discoveredValues.push(obj.$hostElement$);\n                    }\n                }\n                else if (obj instanceof ComputedSignalImpl) {\n                    discoverEffectBackRefs(obj[_EFFECT_BACK_REF], discoveredValues);\n                    discoveredValues.push(obj.$computeQrl$);\n                }\n            }\n            else if (obj instanceof Task) {\n                discoveredValues.push(obj.$el$, obj.$qrl$, obj.$state$);\n                discoverEffectBackRefs(obj[_EFFECT_BACK_REF], discoveredValues);\n            }\n            else if (isSsrNode(obj)) {\n                discoverValuesForVNodeData(obj.vnodeData, discoveredValues);\n                if (obj.childrenVNodeData && obj.childrenVNodeData.length) {\n                    for (const data of obj.childrenVNodeData) {\n                        discoverValuesForVNodeData(data, discoveredValues);\n                    }\n                }\n            }\n            else if (isDomRef(obj)) {\n                discoveredValues.push(obj.$ssrNode$.id);\n            }\n            else if (isJSXNode(obj)) {\n                discoveredValues.push(obj.type, obj.props, obj.constProps, obj.children);\n            }\n            else if (isQrl(obj)) {\n                obj.$captureRef$ && obj.$captureRef$.length && discoveredValues.push(...obj.$captureRef$);\n            }\n            else if (isPropsProxy(obj)) {\n                discoveredValues.push(obj[_VAR_PROPS], obj[_CONST_PROPS]);\n            }\n            else if (isPromise(obj)) {\n                obj.then((value) => {\n                    promiseResults.set(obj, [true, value]);\n                    discoveredValues.push(value);\n                }, (error) => {\n                    promiseResults.set(obj, [false, error]);\n                    discoveredValues.push(error);\n                });\n                promises.push(obj);\n            }\n            else if (obj instanceof SubscriptionData) {\n                discoveredValues.push(obj.data);\n            }\n            else if (Array.isArray(obj)) {\n                discoveredValues.push(...obj);\n            }\n            else if (isSerializerObj(obj)) {\n                const result = obj[SerializerSymbol](obj);\n                serializationResults.set(obj, result);\n                discoveredValues.push(result);\n            }\n            else if (isObjectLiteral(obj)) {\n                Object.entries(obj).forEach(([key, value]) => {\n                    discoveredValues.push(key, value);\n                });\n            }\n            else {\n                throw qError(37 /* QError.serializeErrorUnknownType */, [obj]);\n            }\n        };\n        // Prime the pump with the root objects.\n        for (const root of roots) {\n            visit(root);\n        }\n        do {\n            while (discoveredValues.length) {\n                const obj = discoveredValues.pop();\n                if (!(shouldTrackObj(obj) || frameworkType(obj))) {\n                    continue;\n                }\n                const id = $wasSeen$(obj);\n                if (id === undefined) {\n                    // Object has not been seen yet, must scan content\n                    $seen$(obj);\n                    visit(obj);\n                }\n                else if (id === -1) {\n                    // We are seeing this object second time => promote it.\n                    $addRoot$(obj);\n                    // we don't need to scan the children, since we have already seen them.\n                }\n            }\n            // We have scanned all the objects, but we still have promises to resolve.\n            await Promise.allSettled(promises);\n            promises.length = 0;\n        } while (discoveredValues.length);\n    }\n};\nconst isSsrAttrs = (value) => Array.isArray(value) && value.length > 0;\nconst discoverValuesForVNodeData = (vnodeData, discoveredValues) => {\n    for (const value of vnodeData) {\n        if (isSsrAttrs(value)) {\n            for (let i = 1; i < value.length; i += 2) {\n                const attrValue = value[i];\n                if (typeof attrValue === 'string') {\n                    continue;\n                }\n                discoveredValues.push(attrValue);\n            }\n        }\n    }\n};\nconst discoverEffectBackRefs = (effectsBackRefs, discoveredValues) => {\n    if (effectsBackRefs) {\n        discoveredValues.push(effectsBackRefs);\n    }\n};\n/** The results of Promises we encountered during serialization. */\nconst promiseResults = new WeakMap();\n/** The results of custom serializing objects we encountered during serialization. */\nconst serializationResults = new WeakMap();\n/**\n * Format:\n *\n * - This encodes the $roots$ array.\n * - The output is a string of comma separated JSON values.\n * - Even values are always numbers, specifying the type of the next value.\n * - Odd values are numbers, strings (JSON stringified with `</` escaping) or arrays (same format).\n * - Therefore root indexes need to be doubled to get the actual index.\n */\nfunction serialize(serializationContext) {\n    const { $writer$, $isSsrNode$, $isDomRef$, $setProp$, $storeProxyMap$ } = serializationContext;\n    let depth = -1;\n    // Skip the type for the roots output\n    let writeType = false;\n    const output = (type, value) => {\n        if (writeType) {\n            $writer$.write(`${type},`);\n        }\n        else {\n            writeType = true;\n        }\n        if (typeof value === 'number') {\n            $writer$.write(value.toString());\n        }\n        else if (typeof value === 'string') {\n            const s = JSON.stringify(value);\n            let angleBracketIdx = -1;\n            let lastIdx = 0;\n            while ((angleBracketIdx = s.indexOf('</', lastIdx)) !== -1) {\n                $writer$.write(s.slice(lastIdx, angleBracketIdx));\n                $writer$.write('<\\\\/');\n                lastIdx = angleBracketIdx + 2;\n            }\n            $writer$.write(lastIdx === 0 ? s : s.slice(lastIdx));\n        }\n        else {\n            depth++;\n            $writer$.write('[');\n            let separator = false;\n            // TODO only until last non-null value\n            for (let i = 0; i < value.length; i++) {\n                if (separator) {\n                    $writer$.write(',');\n                }\n                else {\n                    separator = true;\n                }\n                writeValue(value[i], i);\n            }\n            $writer$.write(']');\n            depth--;\n        }\n    };\n    const writeValue = (value, idx) => {\n        if (fastSkipSerialize(value)) {\n            output(1 /* TypeIds.Constant */, 0 /* Constants.Undefined */);\n        }\n        else if (typeof value === 'bigint') {\n            output(10 /* TypeIds.BigInt */, value.toString());\n        }\n        else if (typeof value === 'boolean') {\n            output(1 /* TypeIds.Constant */, value ? 2 /* Constants.True */ : 3 /* Constants.False */);\n        }\n        else if (typeof value === 'function') {\n            if (value === Slot) {\n                output(1 /* TypeIds.Constant */, 9 /* Constants.Slot */);\n            }\n            else if (value === Fragment) {\n                output(1 /* TypeIds.Constant */, 10 /* Constants.Fragment */);\n            }\n            else if (isQrl(value)) {\n                const qrl = qrlToString(serializationContext, value);\n                const id = serializationContext.$addRoot$(qrl);\n                output(18 /* TypeIds.QRL */, id);\n            }\n            else if (isQwikComponent(value)) {\n                const [qrl] = value[SERIALIZABLE_STATE];\n                serializationContext.$renderSymbols$.add(qrl.$symbol$);\n                output(21 /* TypeIds.Component */, [qrl]);\n            }\n            else {\n                // TODO this happens for inline components with render props like Resource\n                console.error('Cannot serialize function (ignoring for now): ' + value.toString());\n                output(1 /* TypeIds.Constant */, 0 /* Constants.Undefined */);\n            }\n        }\n        else if (typeof value === 'number') {\n            if (Number.isNaN(value)) {\n                output(1 /* TypeIds.Constant */, 11 /* Constants.NaN */);\n            }\n            else if (!Number.isFinite(value)) {\n                output(1 /* TypeIds.Constant */, value < 0 ? 13 /* Constants.NegativeInfinity */ : 12 /* Constants.PositiveInfinity */);\n            }\n            else if (value === Number.MAX_SAFE_INTEGER) {\n                output(1 /* TypeIds.Constant */, 14 /* Constants.MaxSafeInt */);\n            }\n            else if (value === Number.MAX_SAFE_INTEGER - 1) {\n                output(1 /* TypeIds.Constant */, 15 /* Constants.AlmostMaxSafeInt */);\n            }\n            else if (value === Number.MIN_SAFE_INTEGER) {\n                output(1 /* TypeIds.Constant */, 16 /* Constants.MinSafeInt */);\n            }\n            else {\n                output(2 /* TypeIds.Number */, value);\n            }\n        }\n        else if (typeof value === 'object') {\n            if (value === EMPTY_ARRAY) {\n                output(1 /* TypeIds.Constant */, 5 /* Constants.EMPTY_ARRAY */);\n            }\n            else if (value === EMPTY_OBJ) {\n                output(1 /* TypeIds.Constant */, 6 /* Constants.EMPTY_OBJ */);\n            }\n            else if (value === null) {\n                output(1 /* TypeIds.Constant */, 1 /* Constants.Null */);\n            }\n            else {\n                depth++;\n                writeObjectValue(value, idx);\n                depth--;\n            }\n        }\n        else if (typeof value === 'string') {\n            if (value.length === 0) {\n                output(1 /* TypeIds.Constant */, 4 /* Constants.EmptyString */);\n            }\n            else {\n                // Note, in v1 we were reusing DOM text, but that is too dangerous with translation extensions changing the text\n                const seen = depth > 1 && serializationContext.$wasSeen$(value);\n                if (typeof seen === 'number' && seen >= 0) {\n                    output(0 /* TypeIds.RootRef */, seen);\n                }\n                else {\n                    output(3 /* TypeIds.String */, value);\n                }\n            }\n        }\n        else if (typeof value === 'undefined') {\n            output(1 /* TypeIds.Constant */, 0 /* Constants.Undefined */);\n        }\n        else if (value === NEEDS_COMPUTATION) {\n            output(1 /* TypeIds.Constant */, 7 /* Constants.NEEDS_COMPUTATION */);\n        }\n        else if (value === STORE_ALL_PROPS) {\n            output(1 /* TypeIds.Constant */, 8 /* Constants.STORE_ALL_PROPS */);\n        }\n        else {\n            throw qError(37 /* QError.serializeErrorUnknownType */, [typeof value]);\n        }\n    };\n    const writeObjectValue = (value, idx) => {\n        /**\n         * We start at -1 and then serialize the roots array, which is an object so increases depth to\n         * 0. The object writer then outputs an array object (without type prefix) and this increases\n         * the depth for the objects within (depth 1). Then when writeValue encounters each root object,\n         * it will increase the depth again, so it's at 2.\n         */\n        const isRootObject = depth === 2;\n        // Objects are the only way to create circular dependencies.\n        // So the first thing to to is to see if we have a circular dependency.\n        // (NOTE: For root objects we need to serialize them regardless if we have seen\n        //        them before, otherwise the root object reference will point to itself.)\n        // Also note that depth will be 2 for objects in root\n        if (depth > 2) {\n            const seen = serializationContext.$wasSeen$(value);\n            if (typeof seen === 'number' && seen >= 0) {\n                // We have seen this object before, so we can serialize it as a reference.\n                // Otherwise serialize as normal\n                output(0 /* TypeIds.RootRef */, seen);\n                return;\n            }\n        }\n        if (isPropsProxy(value)) {\n            const varProps = value[_VAR_PROPS];\n            const constProps = value[_CONST_PROPS];\n            const out = constProps\n                ? [varProps, constProps]\n                : Object.keys(varProps).length\n                    ? [varProps]\n                    : 0;\n            output(30 /* TypeIds.PropsProxy */, out);\n        }\n        else if (value instanceof SubscriptionData) {\n            output(31 /* TypeIds.EffectData */, [value.data.$scopedStyleIdPrefix$, value.data.$isConst$]);\n        }\n        else if (isStore(value)) {\n            if (isResource(value)) {\n                // let render know about the resource\n                serializationContext.$resources$.add(value);\n                const res = promiseResults.get(value.value);\n                if (!res) {\n                    throw qError(38 /* QError.serializeErrorUnvisited */, ['resource']);\n                }\n                // TODO the effects include the resourcereturn which has duplicate data\n                output(20 /* TypeIds.Resource */, [...res, getStoreHandler(value).$effects$]);\n            }\n            else {\n                const storeHandler = getStoreHandler(value);\n                const storeTarget = getStoreTarget(value);\n                const flags = storeHandler.$flags$;\n                const effects = storeHandler.$effects$;\n                const innerStores = [];\n                for (const prop in storeTarget) {\n                    const propValue = storeTarget[prop];\n                    if ($storeProxyMap$.has(propValue)) {\n                        const innerStore = $storeProxyMap$.get(propValue);\n                        innerStores.push(innerStore);\n                        serializationContext.$addRoot$(innerStore);\n                    }\n                }\n                const out = [storeTarget, flags, effects, ...innerStores];\n                while (out[out.length - 1] == null) {\n                    out.pop();\n                }\n                output(Array.isArray(storeTarget) ? 27 /* TypeIds.StoreArray */ : 26 /* TypeIds.Store */, out);\n            }\n        }\n        else if (isSerializerObj(value)) {\n            let result = serializationResults.get(value);\n            // special case: we unwrap Promises\n            if (isPromise(result)) {\n                const promiseResult = promiseResults.get(result);\n                if (!promiseResult[0]) {\n                    console.error(promiseResult[1]);\n                    throw qError(50 /* QError.serializerSymbolRejectedPromise */);\n                }\n                result = promiseResult[1];\n            }\n            depth--;\n            writeValue(result, idx);\n            depth++;\n        }\n        else if (isObjectLiteral(value)) {\n            if (Array.isArray(value)) {\n                output(4 /* TypeIds.Array */, value);\n            }\n            else {\n                const out = [];\n                for (const key in value) {\n                    if (Object.prototype.hasOwnProperty.call(value, key) &&\n                        !fastSkipSerialize(value[key])) {\n                        out.push(key, value[key]);\n                    }\n                }\n                // TODO if !out.length, output 0 and restore as {}\n                output(13 /* TypeIds.Object */, out);\n            }\n        }\n        else if ($isDomRef$(value)) {\n            value.$ssrNode$.vnodeData[0] |= 16 /* VNodeDataFlag.SERIALIZE */;\n            output(9 /* TypeIds.RefVNode */, value.$ssrNode$.id);\n        }\n        else if (value instanceof SignalImpl) {\n            /**\n             * Special case: when a Signal value is an SSRNode, it always needs to be a DOM ref instead.\n             * It can never be meant to become a vNode, because vNodes are internal only.\n             */\n            const isSerialized = value instanceof SerializerSignalImpl;\n            const v = !isSerialized &&\n                value instanceof ComputedSignalImpl &&\n                (value.$flags$ & 1 /* SignalFlags.INVALID */ || fastSkipSerialize(value.$untrackedValue$))\n                ? NEEDS_COMPUTATION\n                : value.$untrackedValue$;\n            if (value instanceof WrappedSignal) {\n                output(23 /* TypeIds.WrappedSignal */, [\n                    ...serializeWrappingFn(serializationContext, value),\n                    filterEffectBackRefs(value[_EFFECT_BACK_REF]),\n                    v,\n                    value.$flags$,\n                    value.$hostElement$,\n                    ...(value.$effects$ || []),\n                ]);\n            }\n            else if (value instanceof ComputedSignalImpl) {\n                const out = [\n                    value.$computeQrl$,\n                    // TODO check if we can use domVRef for effects\n                    value.$effects$,\n                ];\n                if (v !== NEEDS_COMPUTATION) {\n                    if (isSerialized) {\n                        out.push(serializationResults.get(value));\n                    }\n                    else {\n                        out.push(v);\n                    }\n                }\n                output(isSerialized ? 25 /* TypeIds.SerializerSignal */ : 24 /* TypeIds.ComputedSignal */, out);\n            }\n            else {\n                output(22 /* TypeIds.Signal */, [v, ...(value.$effects$ || [])]);\n            }\n        }\n        else if (value instanceof URL) {\n            output(5 /* TypeIds.URL */, value.href);\n        }\n        else if (value instanceof Date) {\n            output(6 /* TypeIds.Date */, Number.isNaN(value.valueOf()) ? '' : value.valueOf());\n        }\n        else if (value instanceof RegExp) {\n            output(7 /* TypeIds.Regex */, value.toString());\n        }\n        else if (value instanceof Error) {\n            const out = [value.message];\n            const extraProps = Object.entries(value).flat();\n            if (extraProps.length) {\n                out.push(extraProps);\n            }\n            /// In production we don't want to leak the stack trace.\n            if (isDev) {\n                out.push(value.stack);\n            }\n            output(12 /* TypeIds.Error */, out);\n        }\n        else if ($isSsrNode$(value)) {\n            if (isRootObject) {\n                // Tell the SsrNode which root id it is\n                $setProp$(value, ELEMENT_ID, String(idx));\n                // we need to output before the vnode overwrites its values\n                output(8 /* TypeIds.VNode */, value.id);\n                const vNodeData = value.vnodeData;\n                if (vNodeData) {\n                    serializationContext.$prepVNodeData$?.(vNodeData);\n                    vNodeData[0] |= 16 /* VNodeDataFlag.SERIALIZE */;\n                }\n                if (value.childrenVNodeData) {\n                    for (const vNodeData of value.childrenVNodeData) {\n                        vNodeData[0] |= 16 /* VNodeDataFlag.SERIALIZE */;\n                    }\n                }\n            }\n            else {\n                // Promote the vnode to a root\n                serializationContext.$addRoot$(value);\n                output(0 /* TypeIds.RootRef */, serializationContext.$roots$.length - 1);\n            }\n        }\n        else if (typeof FormData !== 'undefined' && value instanceof FormData) {\n            // FormData is generally used only once so don't bother with references\n            const array = [];\n            value.forEach((value, key) => {\n                if (typeof value === 'string') {\n                    array.push(key, value);\n                }\n                else {\n                    array.push(key, value.name);\n                }\n            });\n            output(28 /* TypeIds.FormData */, array);\n        }\n        else if (value instanceof URLSearchParams) {\n            output(11 /* TypeIds.URLSearchParams */, value.toString());\n        }\n        else if (value instanceof Set) {\n            output(15 /* TypeIds.Set */, [...value.values()]);\n        }\n        else if (value instanceof Map) {\n            const combined = [];\n            for (const [k, v] of value.entries()) {\n                combined.push(k, v);\n            }\n            output(16 /* TypeIds.Map */, combined);\n        }\n        else if (isJSXNode(value)) {\n            output(29 /* TypeIds.JSXNode */, [\n                value.type,\n                value.varProps,\n                value.constProps,\n                value.children,\n                value.flags,\n                value.key,\n            ]);\n        }\n        else if (value instanceof Task) {\n            const out = [\n                value.$qrl$,\n                value.$flags$,\n                value.$index$,\n                value.$el$,\n                value[_EFFECT_BACK_REF],\n                value.$state$,\n            ];\n            while (out[out.length - 1] == null) {\n                out.pop();\n            }\n            output(19 /* TypeIds.Task */, out);\n        }\n        else if (isPromise(value)) {\n            const res = promiseResults.get(value);\n            if (!res) {\n                throw qError(38 /* QError.serializeErrorUnvisited */, ['promise']);\n            }\n            output(14 /* TypeIds.Promise */, res);\n        }\n        else if (value instanceof Uint8Array) {\n            let buf = '';\n            for (const c of value) {\n                buf += String.fromCharCode(c);\n            }\n            const out = btoa(buf).replace(/=+$/, '');\n            output(17 /* TypeIds.Uint8Array */, out);\n        }\n        else if (vnode_isVNode(value)) {\n            output(1 /* TypeIds.Constant */, 0 /* Constants.Undefined */);\n        }\n        else {\n            throw qError(37 /* QError.serializeErrorUnknownType */, [typeof value]);\n        }\n    };\n    writeValue(serializationContext.$roots$, -1);\n}\nfunction filterEffectBackRefs(effectBackRef) {\n    let effectBackRefToSerialize = null;\n    if (effectBackRef) {\n        for (const [effectProp, effect] of effectBackRef) {\n            if (effect[2 /* EffectSubscriptionProp.BACK_REF */]) {\n                effectBackRefToSerialize ||= new Map();\n                effectBackRefToSerialize.set(effectProp, effect);\n            }\n        }\n    }\n    return effectBackRefToSerialize;\n}\nfunction serializeWrappingFn(serializationContext, value) {\n    // if value is an object then we need to wrap this in ()\n    if (value.$funcStr$ && value.$funcStr$[0] === '{') {\n        value.$funcStr$ = `(${value.$funcStr$})`;\n    }\n    const syncFnId = serializationContext.$addSyncFn$(value.$funcStr$, value.$args$.length, value.$func$);\n    // TODO null if no args\n    return [syncFnId, value.$args$];\n}\nexport function qrlToString(serializationContext, value) {\n    let symbol = value.$symbol$;\n    let chunk = value.$chunk$;\n    const platform = getPlatform();\n    if (platform) {\n        const result = platform.chunkForSymbol(symbol, chunk, value.dev?.file);\n        if (result) {\n            chunk = result[1];\n            symbol = result[0];\n        }\n    }\n    const isSync = isSyncQrl(value);\n    if (!isSync) {\n        // If we have a symbol we need to resolve the chunk.\n        if (!chunk) {\n            chunk = serializationContext.$symbolToChunkResolver$(value.$hash$);\n        }\n        // in Dev mode we need to keep track of the symbols\n        if (isDev) {\n            let backChannel = globalThis[QRL_RUNTIME_CHUNK];\n            if (!backChannel) {\n                backChannel = globalThis[QRL_RUNTIME_CHUNK] = new Map();\n            }\n            backChannel.set(value.$symbol$, value._devOnlySymbolRef);\n            if (!chunk) {\n                chunk = QRL_RUNTIME_CHUNK;\n            }\n        }\n        if (!chunk) {\n            throw qError(31 /* QError.qrlMissingChunk */, [value.$symbol$]);\n        }\n        if (chunk.startsWith('./')) {\n            chunk = chunk.slice(2);\n        }\n    }\n    else {\n        const fn = value.resolved;\n        chunk = '';\n        // TODO test that provided stringified fn is used\n        symbol = String(serializationContext.$addSyncFn$(null, 0, fn));\n    }\n    let qrlStringInline = `${chunk}#${symbol}`;\n    if (Array.isArray(value.$captureRef$) && value.$captureRef$.length > 0) {\n        let serializedReferences = '';\n        // hot-path optimization\n        for (let i = 0; i < value.$captureRef$.length; i++) {\n            if (i > 0) {\n                serializedReferences += ' ';\n            }\n            // We refer by id so every capture needs to be a root\n            serializedReferences += serializationContext.$addRoot$(value.$captureRef$[i]);\n        }\n        qrlStringInline += `[${serializedReferences}]`;\n    }\n    else if (value.$capture$ && value.$capture$.length > 0) {\n        qrlStringInline += `[${value.$capture$.join(' ')}]`;\n    }\n    return qrlStringInline;\n}\n/**\n * Serialize data to string using SerializationContext.\n *\n * @param data - Data to serialize\n * @internal\n */\nexport async function _serialize(data) {\n    const serializationContext = createSerializationContext(null, null, () => '', () => '', () => { }, new WeakMap());\n    for (const root of data) {\n        serializationContext.$addRoot$(root);\n    }\n    await serializationContext.$breakCircularDepsAndAwaitPromises$();\n    serializationContext.$serialize$();\n    return serializationContext.$writer$.toString();\n}\n/**\n * Deserialize data from string to an array of objects.\n *\n * @param rawStateData - Data to deserialize\n * @param element - Container element\n * @internal\n */\nexport function _deserialize(rawStateData, element) {\n    if (rawStateData == null) {\n        return [];\n    }\n    const stateData = JSON.parse(rawStateData);\n    if (!Array.isArray(stateData)) {\n        return [];\n    }\n    let container;\n    if (isNode(element) && isElement(element)) {\n        container = _createDeserializeContainer(stateData, element);\n    }\n    else {\n        container = _createDeserializeContainer(stateData);\n    }\n    const output = [];\n    for (let i = 0; i < stateData.length; i += 2) {\n        output[i / 2] = deserializeData(container, stateData[i], stateData[i + 1]);\n    }\n    return output;\n}\nfunction deserializeData(container, typeId, value) {\n    if (typeId === undefined) {\n        return value;\n    }\n    let propValue = allocate(container, typeId, value);\n    if (typeId >= 12 /* TypeIds.Error */) {\n        propValue = inflate(container, propValue, typeId, value);\n    }\n    return propValue;\n}\nfunction getObjectById(id, stateData) {\n    if (typeof id === 'string') {\n        id = parseInt(id, 10);\n    }\n    assertTrue(id < stateData.length, `Invalid reference ${id} >= ${stateData.length}`);\n    return stateData[id];\n}\nexport function _createDeserializeContainer(stateData, element) {\n    // eslint-disable-next-line prefer-const\n    let state;\n    const container = {\n        $getObjectById$: (id) => getObjectById(id, state),\n        getSyncFn: (_) => {\n            const fn = () => { };\n            return fn;\n        },\n        $storeProxyMap$: new WeakMap(),\n        element: null,\n    };\n    state = wrapDeserializerProxy(container, stateData);\n    container.$state$ = state;\n    if (element) {\n        container.element = element;\n    }\n    return container;\n}\n/**\n * Tracking all objects in the map would be expensive. For this reason we only track some of the\n * objects.\n *\n * For example we skip:\n *\n * - Short strings\n * - Anything which is not an object. (ie. number, boolean, null, undefined)\n *\n * @param obj\n * @returns\n */\nfunction shouldTrackObj(obj) {\n    return (\n    // THINK: Not sure if we need to keep track of functions (QRLs) Let's skip them for now.\n    // and see if we have a test case which requires them.\n    (typeof obj === 'object' && obj !== null) ||\n        /**\n         * We track all strings greater than 1 character, because those take at least 6 bytes to encode\n         * and even with 999 root objects it saves one byte per reference. Tracking more objects makes\n         * the map bigger so we want to strike a balance\n         */ (typeof obj === 'string' && obj.length > 1));\n}\n/**\n * When serializing the object we need check if it is URL, RegExp, Map, Set, etc. This is time\n * consuming. So if we could know that this is a basic object literal we could skip the check, and\n * only run the checks for objects which are not object literals.\n *\n * So this function is here for performance to short circuit many checks later.\n *\n * @param obj\n */\nfunction isObjectLiteral(obj) {\n    // We are an object literal if:\n    // - we are a direct instance of object OR\n    // - we are an array\n    // In all other cases it is a subclass which requires more checks.\n    const prototype = Object.getPrototypeOf(obj);\n    return prototype == null || prototype === Object.prototype || prototype === Array.prototype;\n}\nfunction isResource(value) {\n    return '__brand' in value && value.__brand === 'resource';\n}\nconst frameworkType = (obj) => {\n    return ((typeof obj === 'object' &&\n        obj !== null &&\n        (obj instanceof SignalImpl || obj instanceof Task || isJSXNode(obj))) ||\n        isQrl(obj));\n};\nexport const canSerialize = (value, seen = new WeakSet()) => {\n    if (value == null ||\n        typeof value === 'string' ||\n        typeof value === 'number' ||\n        typeof value === 'boolean' ||\n        typeof value === 'bigint') {\n        return true;\n    }\n    else if (typeof value === 'object') {\n        if (seen.has(value)) {\n            return true;\n        }\n        seen.add(value);\n        const proto = Object.getPrototypeOf(value);\n        if (isStore(value)) {\n            value = getStoreTarget(value);\n        }\n        if (proto == Object.prototype) {\n            for (const key in value) {\n                // if the value is a props proxy, then sometimes we could create a component-level subscription,\n                // so we should call untrack here to avoid tracking the value\n                if (!canSerialize(untrack(() => value[key]), seen)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        else if (proto == Array.prototype) {\n            for (let i = 0; i < value.length; i++) {\n                if (!canSerialize(value[i], seen)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        else if (isTask(value)) {\n            return true;\n        }\n        else if (isPropsProxy(value)) {\n            return true;\n        }\n        else if (isPromise(value)) {\n            return true;\n        }\n        else if (isJSXNode(value)) {\n            return true;\n        }\n        else if (value instanceof Error) {\n            return true;\n        }\n        else if (value instanceof URL) {\n            return true;\n        }\n        else if (value instanceof Date) {\n            return true;\n        }\n        else if (value instanceof RegExp) {\n            return true;\n        }\n        else if (value instanceof URLSearchParams) {\n            return true;\n        }\n        else if (value instanceof FormData) {\n            return true;\n        }\n        else if (value instanceof Set) {\n            return true;\n        }\n        else if (value instanceof Map) {\n            return true;\n        }\n        else if (value instanceof Uint8Array) {\n            return true;\n        }\n        else if (isDomRef?.(value)) {\n            return true;\n        }\n    }\n    else if (typeof value === 'function') {\n        if (isQrl(value) || isQwikComponent(value)) {\n            return true;\n        }\n    }\n    return false;\n};\nconst QRL_RUNTIME_CHUNK = 'mock-chunk';\nexport const _typeIdNames = [\n    'RootRef',\n    'Constant',\n    'Number',\n    'String',\n    'Array',\n    'URL',\n    'Date',\n    'Regex',\n    'VNode',\n    'RefVNode',\n    'BigInt',\n    'URLSearchParams',\n    'Error',\n    'Object',\n    'Promise',\n    'Set',\n    'Map',\n    'Uint8Array',\n    'QRL',\n    'Task',\n    'Resource',\n    'Component',\n    'Signal',\n    'WrappedSignal',\n    'ComputedSignal',\n    'SerializerSignal',\n    'Store',\n    'StoreArray',\n    'FormData',\n    'JSXNode',\n    'PropsProxy',\n    'EffectData',\n];\nconst circularProofJson = (obj, indent) => {\n    const seen = new WeakSet();\n    return JSON.stringify(obj, (key, value) => {\n        if (typeof value === 'object' && value !== null) {\n            if (seen.has(value)) {\n                return `[Circular ${value.constructor.name}]`;\n            }\n            seen.add(value);\n        }\n        return value;\n    }, indent);\n};\nconst printRaw = (value, prefix) => {\n    let result = vnode_isVNode(value)\n        ? vnode_toString.call(value, 1, '', true).replaceAll(/\\n.*/gm, '')\n        : typeof value === 'function'\n            ? String(value)\n            : circularProofJson(value, 2);\n    if (result.length > 500) {\n        result = result.slice(0, 500) + '\"...';\n    }\n    result = result.replace(/\\n/g, '\\n' + prefix);\n    return result.includes('\\n') ? (result = `\\n${prefix}${result}`) : result;\n};\nlet hasRaw = false;\nexport const dumpState = (state, color = false, prefix = '', limit = 20) => {\n    const RED = color ? '\\x1b[31m' : '';\n    const RESET = color ? '\\x1b[0m' : '';\n    const isRoot = prefix === '';\n    const out = [];\n    for (let i = 0; i < state.length; i++) {\n        if (limit && i > 2 * limit) {\n            out.push('...');\n            break;\n        }\n        const key = state[i];\n        let value = state[++i];\n        if (key === undefined) {\n            hasRaw = true;\n            out.push(`${RED}[raw${typeof value === 'object' && value ? ` ${value.constructor.name}` : ''}]${RESET} ${printRaw(value, `${prefix}  `)}`);\n        }\n        else {\n            if (key === 1 /* TypeIds.Constant */) {\n                value = constantToName(value);\n            }\n            else if (typeof value === 'string') {\n                value = JSON.stringify(value);\n                if (value.length > 120) {\n                    value = value.slice(0, 120) + '\"...';\n                }\n            }\n            else if (Array.isArray(value)) {\n                value = value.length ? `[\\n${dumpState(value, color, `${prefix}  `)}\\n${prefix}]` : '[]';\n            }\n            out.push(`${RED}${typeIdToName(key)}${RESET} ${value}`);\n        }\n    }\n    const result = out.map((v, i) => `${prefix}${isRoot ? `${i} ` : ''}${v}`).join('\\n');\n    if (isRoot) {\n        const count = hasRaw ? '' : `(${JSON.stringify(state).length} chars)`;\n        hasRaw = false;\n        return `\\n${result}\\n${count}`;\n    }\n    return result;\n};\nexport const typeIdToName = (code) => {\n    return _typeIdNames[code] || `Unknown(${code})`;\n};\nconst constantToName = (code) => {\n    return _constantNames[code] || `Unknown(${code})`;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLXNlcmlhbGl6YXRpb24uanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3NoYXJlZC1zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtEQUFrRDtBQUVsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFDTCxrQkFBa0IsRUFJbEIsb0JBQW9CLEVBQ3BCLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsR0FJaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixjQUFjLEVBQ2QsT0FBTyxFQUNQLGVBQWUsR0FDaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLG9CQUFvQixFQUErQixNQUFNLHFCQUFxQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEdBQ1os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RSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksTUFBTSxFQUFFLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksZUFBZSxFQUFFLENBQUM7WUFDNUMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksUUFBUSxFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3ZDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzND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SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFhLEVBQUUsRUFBRTtJQUM1QyxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLElBQUksR0FBRyxDQUFDO0FBQ2xELENBQUMsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBZSxFQUFFLEVBQUU7SUFDekMsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxJQUFJLEdBQUcsQ0FBQztBQUNwRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVGhlcmUncyBbZG9jdW1lbnRhdGlvbl0oLi9zZXJpYWxpemF0aW9uLm1kKSAqL1xuXG5pbXBvcnQgeyBpc0RldiB9IGZyb20gJy4uLy4uL2J1aWxkL2luZGV4LmRldic7XG5pbXBvcnQgdHlwZSB7IFN0cmVhbVdyaXRlciB9IGZyb20gJy4uLy4uL3NlcnZlci90eXBlcyc7XG5pbXBvcnQgeyBWTm9kZURhdGFGbGFnIH0gZnJvbSAnLi4vLi4vc2VydmVyL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgVk5vZGVEYXRhIH0gZnJvbSAnLi4vLi4vc2VydmVyL3Zub2RlLWRhdGEnO1xuaW1wb3J0IHsgdHlwZSBEb21Db250YWluZXIgfSBmcm9tICcuLi9jbGllbnQvZG9tLWNvbnRhaW5lcic7XG5pbXBvcnQgdHlwZSB7IFZOb2RlIH0gZnJvbSAnLi4vY2xpZW50L3R5cGVzJztcbmltcG9ydCB7IHZub2RlX2dldE5vZGUsIHZub2RlX2lzVk5vZGUsIHZub2RlX2xvY2F0ZSwgdm5vZGVfdG9TdHJpbmcgfSBmcm9tICcuLi9jbGllbnQvdm5vZGUnO1xuaW1wb3J0IHsgX0VGRkVDVF9CQUNLX1JFRiwgTkVFRFNfQ09NUFVUQVRJT04gfSBmcm9tICcuLi9zaWduYWwvZmxhZ3MnO1xuaW1wb3J0IHtcbiAgQ29tcHV0ZWRTaWduYWxJbXBsLFxuICB0eXBlIEVmZmVjdFByb3BlcnR5LFxuICB0eXBlIEVmZmVjdFN1YnNjcmlwdGlvbixcbiAgRWZmZWN0U3Vic2NyaXB0aW9uUHJvcCxcbiAgU2VyaWFsaXplclNpZ25hbEltcGwsXG4gIFNpZ25hbEltcGwsXG4gIFN1YnNjcmlwdGlvbkRhdGEsXG4gIFdyYXBwZWRTaWduYWwsXG4gIGlzU2VyaWFsaXplck9iaixcbiAgU2lnbmFsRmxhZ3MsXG4gIHR5cGUgQWxsU2lnbmFsRmxhZ3MsXG4gIHR5cGUgU2VyaWFsaXplckFyZyxcbn0gZnJvbSAnLi4vc2lnbmFsL3NpZ25hbCc7XG5pbXBvcnQge1xuICBnZXRPckNyZWF0ZVN0b3JlLFxuICBnZXRTdG9yZUhhbmRsZXIsXG4gIGdldFN0b3JlVGFyZ2V0LFxuICBpc1N0b3JlLFxuICBTVE9SRV9BTExfUFJPUFMsXG59IGZyb20gJy4uL3NpZ25hbC9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IElTc3JOb2RlLCBTc3JBdHRycywgU3ltYm9sVG9DaHVua1Jlc29sdmVyIH0gZnJvbSAnLi4vc3NyL3Nzci10eXBlcyc7XG5pbXBvcnQgeyB1bnRyYWNrIH0gZnJvbSAnLi4vdXNlL3VzZS1jb3JlJztcbmltcG9ydCB7IGNyZWF0ZVJlc291cmNlUmV0dXJuLCB0eXBlIFJlc291cmNlUmV0dXJuSW50ZXJuYWwgfSBmcm9tICcuLi91c2UvdXNlLXJlc291cmNlJztcbmltcG9ydCB7IGlzVGFzaywgVGFzayB9IGZyb20gJy4uL3VzZS91c2UtdGFzayc7XG5pbXBvcnQgeyBjb21wb25lbnRRcmwsIGlzUXdpa0NvbXBvbmVudCwgU0VSSUFMSVpBQkxFX1NUQVRFIH0gZnJvbSAnLi9jb21wb25lbnQucHVibGljJztcbmltcG9ydCB7IGFzc2VydERlZmluZWQsIGFzc2VydFRydWUgfSBmcm9tICcuL2Vycm9yL2Fzc2VydCc7XG5pbXBvcnQgeyBRRXJyb3IsIHFFcnJvciB9IGZyb20gJy4vZXJyb3IvZXJyb3InO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvcHNQcm94eSxcbiAgRnJhZ21lbnQsXG4gIGlzSlNYTm9kZSxcbiAgaXNQcm9wc1Byb3h5LFxuICBKU1hOb2RlSW1wbCxcbn0gZnJvbSAnLi9qc3gvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgU2xvdCB9IGZyb20gJy4vanN4L3Nsb3QucHVibGljJztcbmltcG9ydCB7IGdldFBsYXRmb3JtIH0gZnJvbSAnLi9wbGF0Zm9ybS9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBjcmVhdGVRUkwsIHR5cGUgUVJMSW50ZXJuYWwsIHR5cGUgU3luY1FSTEludGVybmFsIH0gZnJvbSAnLi9xcmwvcXJsLWNsYXNzJztcbmltcG9ydCB7IGlzUXJsLCBpc1N5bmNRcmwgfSBmcm9tICcuL3FybC9xcmwtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICcuL3FybC9xcmwucHVibGljJztcbmltcG9ydCB7IHR5cGUgTm9kZVByb3BEYXRhIH0gZnJvbSAnLi9zY2hlZHVsZXInO1xuaW1wb3J0IHsgQ2hvcmVUeXBlIH0gZnJvbSAnLi91dGlsLWNob3JlLXR5cGUnO1xuaW1wb3J0IHR5cGUgeyBEZXNlcmlhbGl6ZUNvbnRhaW5lciwgSG9zdEVsZW1lbnQsIE9ialRvUHJveHlNYXAgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IF9DT05TVF9QUk9QUywgX1ZBUl9QUk9QUyB9IGZyb20gJy4vdXRpbHMvY29uc3RhbnRzJztcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNOb2RlIH0gZnJvbSAnLi91dGlscy9lbGVtZW50JztcbmltcG9ydCB7IEVNUFRZX0FSUkFZLCBFTVBUWV9PQkogfSBmcm9tICcuL3V0aWxzL2ZseXdlaWdodCc7XG5pbXBvcnQgeyBFTEVNRU5UX0lEIH0gZnJvbSAnLi91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4vdXRpbHMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgU2VyaWFsaXplclN5bWJvbCwgZmFzdFNraXBTZXJpYWxpemUgfSBmcm9tICcuL3V0aWxzL3NlcmlhbGl6ZS11dGlscyc7XG5pbXBvcnQgeyB0eXBlIFZhbHVlT3JQcm9taXNlIH0gZnJvbSAnLi91dGlscy90eXBlcyc7XG5cbmNvbnN0IGRlc2VyaWFsaXplZFByb3h5TWFwID0gbmV3IFdlYWtNYXA8b2JqZWN0LCB1bmtub3duW10+KCk7XG5cbnR5cGUgRGVzZXJpYWxpemVyUHJveHk8VCBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4gPSBUICYgeyBbU0VSSUFMSVpFUl9QUk9YWV9VTldSQVBdOiBvYmplY3QgfTtcblxuZXhwb3J0IGNvbnN0IGlzRGVzZXJpYWxpemVyUHJveHkgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBEZXNlcmlhbGl6ZXJQcm94eSA9PiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIFNFUklBTElaRVJfUFJPWFlfVU5XUkFQIGluIHZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IFNFUklBTElaRVJfUFJPWFlfVU5XUkFQID0gU3ltYm9sKCdVTldSQVAnKTtcbi8qKiBDYWxsIHRoaXMgb24gdGhlIHNlcmlhbGl6ZWQgcm9vdCBzdGF0ZSAqL1xuZXhwb3J0IGNvbnN0IHdyYXBEZXNlcmlhbGl6ZXJQcm94eSA9IChjb250YWluZXI6IERvbUNvbnRhaW5lciwgZGF0YTogdW5rbm93bik6IHVua25vd25bXSA9PiB7XG4gIGlmIChcbiAgICAhQXJyYXkuaXNBcnJheShkYXRhKSB8fCAvLyBtdXN0IGJlIGFuIGFycmF5XG4gICAgdm5vZGVfaXNWTm9kZShkYXRhKSB8fCAvLyBhbmQgbm90IGEgVk5vZGUgb3IgU2xvdFxuICAgIGlzRGVzZXJpYWxpemVyUHJveHkoZGF0YSkgLy8gYW5kIG5vdCBhbHJlYWR5IHdyYXBwZWRcbiAgKSB7XG4gICAgcmV0dXJuIGRhdGEgYXMgYW55O1xuICB9XG4gIGxldCBwcm94eSA9IGRlc2VyaWFsaXplZFByb3h5TWFwLmdldChkYXRhKTtcbiAgaWYgKCFwcm94eSkge1xuICAgIGNvbnN0IHRhcmdldCA9IEFycmF5KGRhdGEubGVuZ3RoIC8gMikuZmlsbCh1bmRlZmluZWQpO1xuICAgIHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgbmV3IERlc2VyaWFsaXphdGlvbkhhbmRsZXIoY29udGFpbmVyLCBkYXRhKSkgYXMgdW5rbm93bltdO1xuICAgIGRlc2VyaWFsaXplZFByb3h5TWFwLnNldChkYXRhLCBwcm94eSk7XG4gIH1cbiAgcmV0dXJuIHByb3h5O1xufTtcblxuY2xhc3MgRGVzZXJpYWxpemF0aW9uSGFuZGxlciBpbXBsZW1lbnRzIFByb3h5SGFuZGxlcjxvYmplY3Q+IHtcbiAgcHVibGljICRsZW5ndGgkOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljICRjb250YWluZXIkOiBEb21Db250YWluZXIsXG4gICAgcHVibGljICRkYXRhJDogdW5rbm93bltdXG4gICkge1xuICAgIHRoaXMuJGxlbmd0aCQgPSB0aGlzLiRkYXRhJC5sZW5ndGggLyAyO1xuICB9XG5cbiAgZ2V0KHRhcmdldDogdW5rbm93bltdLCBwcm9wZXJ0eTogUHJvcGVydHlLZXksIHJlY2VpdmVyOiBvYmplY3QpIHtcbiAgICBpZiAocHJvcGVydHkgPT09IFNFUklBTElaRVJfUFJPWFlfVU5XUkFQKSB7XG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkgYmUgcGFydGlhbGx5IGZpbGxlZCBpblxuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgY29uc3QgaSA9XG4gICAgICB0eXBlb2YgcHJvcGVydHkgPT09ICdudW1iZXInXG4gICAgICAgID8gcHJvcGVydHlcbiAgICAgICAgOiB0eXBlb2YgcHJvcGVydHkgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBwYXJzZUludChwcm9wZXJ0eSBhcyBzdHJpbmcsIDEwKVxuICAgICAgICAgIDogTmFOO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oaSkgfHwgaSA8IDAgfHwgaSA+PSB0aGlzLiRsZW5ndGgkKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICAvLyBUaGUgc2VyaWFsaXplZCBkYXRhIGlzIGFuIGFycmF5IHdpdGggMiB2YWx1ZXMgZm9yIGVhY2ggaXRlbVxuICAgIGNvbnN0IGlkeCA9IGkgKiAyO1xuICAgIGNvbnN0IHR5cGVJZCA9IHRoaXMuJGRhdGEkW2lkeF0gYXMgbnVtYmVyO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy4kZGF0YSRbaWR4ICsgMV07XG4gICAgaWYgKHR5cGVJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGUgdmFsdWUgaXMgYWxyZWFkeSBjYWNoZWRcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLiRjb250YWluZXIkO1xuICAgIGxldCBwcm9wVmFsdWUgPSBhbGxvY2F0ZShjb250YWluZXIsIHR5cGVJZCwgdmFsdWUpO1xuICAgIC8qKiBXZSBzdG9yZWQgdGhlIHJlZmVyZW5jZSwgc28gbm93IHdlIGNhbiBpbmZsYXRlLCBhbGxvd2luZyBjeWNsZXMuICovXG4gICAgaWYgKHR5cGVJZCA+PSBUeXBlSWRzLkVycm9yKSB7XG4gICAgICBwcm9wVmFsdWUgPSBpbmZsYXRlKGNvbnRhaW5lciwgcHJvcFZhbHVlLCB0eXBlSWQsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5LCBwcm9wVmFsdWUpO1xuICAgIHRoaXMuJGRhdGEkW2lkeF0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy4kZGF0YSRbaWR4ICsgMV0gPSBwcm9wVmFsdWU7XG4gICAgcmV0dXJuIHByb3BWYWx1ZTtcbiAgfVxuXG4gIGhhcyh0YXJnZXQ6IG9iamVjdCwgcHJvcGVydHk6IFByb3BlcnR5S2V5KSB7XG4gICAgaWYgKHByb3BlcnR5ID09PSBTRVJJQUxJWkVSX1BST1hZX1VOV1JBUCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gIH1cblxuICBzZXQodGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5OiBQcm9wZXJ0eUtleSwgdmFsdWU6IGFueSwgcmVjZWl2ZXI6IG9iamVjdCkge1xuICAgIGlmIChwcm9wZXJ0eSA9PT0gU0VSSUFMSVpFUl9QUk9YWV9VTldSQVApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgb3V0ID0gUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIHJlY2VpdmVyKTtcbiAgICBjb25zdCBpID0gdHlwZW9mIHByb3BlcnR5ID09PSAnbnVtYmVyJyA/IHByb3BlcnR5IDogcGFyc2VJbnQocHJvcGVydHkgYXMgc3RyaW5nLCAxMCk7XG4gICAgaWYgKE51bWJlci5pc05hTihpKSB8fCBpIDwgMCB8fCBpID49IHRoaXMuJGRhdGEkLmxlbmd0aCAvIDIpIHtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGNvbnN0IGlkeCA9IGkgKiAyO1xuICAgIHRoaXMuJGRhdGEkW2lkeF0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy4kZGF0YSRbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc3RvcmVzIGFuIGFycmF5IGVhZ2VybHkuIElmIHlvdSBuZWVkIGl0IGxhemlseSwgdXNlIGBkZXNlcmlhbGl6ZURhdGEoY29udGFpbmVyLCBUeXBlSWRzLkFycmF5LFxuICogYXJyYXkpYCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBjb25zdCBfZWFnZXJEZXNlcmlhbGl6ZUFycmF5ID0gKFxuICBjb250YWluZXI6IERlc2VyaWFsaXplQ29udGFpbmVyLFxuICBkYXRhOiB1bmtub3duW11cbik6IHVua25vd25bXSA9PiB7XG4gIGNvbnN0IG91dCA9IEFycmF5KGRhdGEubGVuZ3RoIC8gMik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gMikge1xuICAgIG91dFtpIC8gMl0gPSBkZXNlcmlhbGl6ZURhdGEoY29udGFpbmVyLCBkYXRhW2ldIGFzIFR5cGVJZHMsIGRhdGFbaSArIDFdKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufTtcblxuY29uc3QgcmVzb2x2ZXJzID0gbmV3IFdlYWtNYXA8UHJvbWlzZTxhbnk+LCBbRnVuY3Rpb24sIEZ1bmN0aW9uXT4oKTtcblxuY29uc3QgaW5mbGF0ZSA9IChcbiAgY29udGFpbmVyOiBEZXNlcmlhbGl6ZUNvbnRhaW5lcixcbiAgdGFyZ2V0OiBhbnksXG4gIHR5cGVJZDogVHlwZUlkcyxcbiAgZGF0YTogdW5rbm93blxuKTogdW5rbm93biA9PiB7XG4gIGlmICh0eXBlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIEFscmVhZHkgcHJvY2Vzc2VkXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuICAvLyByZXN0b3JlIHRoZSBjb21wbGV4IGRhdGEsIGV4Y2VwdCBmb3IgcGxhaW4gb2JqZWN0c1xuICBpZiAodHlwZUlkICE9PSBUeXBlSWRzLk9iamVjdCAmJiBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgZGF0YSA9IF9lYWdlckRlc2VyaWFsaXplQXJyYXkoY29udGFpbmVyLCBkYXRhKTtcbiAgfVxuICBzd2l0Y2ggKHR5cGVJZCkge1xuICAgIGNhc2UgVHlwZUlkcy5PYmplY3Q6XG4gICAgICAvLyBXZSB1c2UgZ2V0dGVycyBmb3IgbWFraW5nIGNvbXBsZXggdmFsdWVzIGxhenlcbiAgICAgIC8vIFRPRE8gc2NhbiB0aGUgZGF0YSBmb3IgY29tcHV0ZVFSTHMgYW5kIHNjaGVkdWxlIHJlc29sdmUgY2hvcmVzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChkYXRhIGFzIGFueVtdKS5sZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICBjb25zdCBrZXkgPSBkZXNlcmlhbGl6ZURhdGEoXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIChkYXRhIGFzIGFueVtdKVtpXSBhcyBUeXBlSWRzLFxuICAgICAgICAgIChkYXRhIGFzIGFueVtdKVtpICsgMV1cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdmFsVHlwZSA9IChkYXRhIGFzIFR5cGVJZHNbXSlbaSArIDJdO1xuICAgICAgICBjb25zdCB2YWxEYXRhID0gKGRhdGEgYXMgYW55W10pW2kgKyAzXTtcbiAgICAgICAgaWYgKHZhbFR5cGUgPT09IFR5cGVJZHMuUm9vdFJlZiB8fCB2YWxUeXBlID49IFR5cGVJZHMuRXJyb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkZXNlcmlhbGl6ZURhdGEoY29udGFpbmVyLCB2YWxUeXBlLCB2YWxEYXRhKTtcbiAgICAgICAgICAgICAgLy8gYWZ0ZXIgZmlyc3QgZGVzZXJpYWxpemUsIHdlIGNhbiByZXBsYWNlIHRoZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgd2l0aCB0aGUgdmFsdWVcbiAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh2YWx1ZTogdW5rbm93bikge1xuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IGRlc2VyaWFsaXplRGF0YShjb250YWluZXIsIHZhbFR5cGUsIHZhbERhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFR5cGVJZHMuUVJMOlxuICAgICAgaW5mbGF0ZVFSTChjb250YWluZXIsIHRhcmdldCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFR5cGVJZHMuVGFzazpcbiAgICAgIGNvbnN0IHRhc2sgPSB0YXJnZXQgYXMgVGFzaztcbiAgICAgIGNvbnN0IHYgPSBkYXRhIGFzIGFueVtdO1xuICAgICAgdGFzay4kcXJsJCA9IGluZmxhdGVRUkwoY29udGFpbmVyLCB2WzBdKTtcbiAgICAgIHRhc2suJGZsYWdzJCA9IHZbMV07XG4gICAgICB0YXNrLiRpbmRleCQgPSB2WzJdO1xuICAgICAgdGFzay4kZWwkID0gdlszXSBhcyBIb3N0RWxlbWVudDtcbiAgICAgIHRhc2tbX0VGRkVDVF9CQUNLX1JFRl0gPSB2WzRdIGFzIE1hcDxFZmZlY3RQcm9wZXJ0eSB8IHN0cmluZywgRWZmZWN0U3Vic2NyaXB0aW9uPiB8IG51bGw7XG4gICAgICB0YXNrLiRzdGF0ZSQgPSB2WzVdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBUeXBlSWRzLlJlc291cmNlOlxuICAgICAgY29uc3QgW3Jlc29sdmVkLCByZXN1bHQsIGVmZmVjdHNdID0gZGF0YSBhcyBbYm9vbGVhbiwgdW5rbm93biwgYW55XTtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGFyZ2V0IGFzIFJlc291cmNlUmV0dXJuSW50ZXJuYWw8dW5rbm93bj47XG4gICAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgcmVzb3VyY2UudmFsdWUgPSBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgcmVzb3VyY2UuX3Jlc29sdmVkID0gcmVzdWx0O1xuICAgICAgICByZXNvdXJjZS5fc3RhdGUgPSAncmVzb2x2ZWQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb3VyY2UudmFsdWUgPSBQcm9taXNlLnJlamVjdChyZXN1bHQpO1xuICAgICAgICByZXNvdXJjZS5fZXJyb3IgPSByZXN1bHQgYXMgRXJyb3I7XG4gICAgICAgIHJlc291cmNlLl9zdGF0ZSA9ICdyZWplY3RlZCc7XG4gICAgICB9XG4gICAgICBnZXRTdG9yZUhhbmRsZXIodGFyZ2V0KSEuJGVmZmVjdHMkID0gZWZmZWN0cztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVHlwZUlkcy5Db21wb25lbnQ6XG4gICAgICB0YXJnZXRbU0VSSUFMSVpBQkxFX1NUQVRFXVswXSA9IChkYXRhIGFzIGFueVtdKVswXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVHlwZUlkcy5TdG9yZTpcbiAgICBjYXNlIFR5cGVJZHMuU3RvcmVBcnJheToge1xuICAgICAgY29uc3QgW3ZhbHVlLCBmbGFncywgZWZmZWN0c10gPSBkYXRhIGFzIHVua25vd25bXTtcbiAgICAgIGNvbnN0IHN0b3JlID0gZ2V0T3JDcmVhdGVTdG9yZSh2YWx1ZSBhcyBvYmplY3QsIGZsYWdzIGFzIG51bWJlciwgY29udGFpbmVyIGFzIERvbUNvbnRhaW5lcik7XG4gICAgICBjb25zdCBzdG9yZUhhbmRsZXIgPSBnZXRTdG9yZUhhbmRsZXIoc3RvcmUpITtcbiAgICAgIHN0b3JlSGFuZGxlci4kZWZmZWN0cyQgPSBlZmZlY3RzIGFzIGFueTtcbiAgICAgIHRhcmdldCA9IHN0b3JlO1xuXG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLlNpZ25hbDoge1xuICAgICAgY29uc3Qgc2lnbmFsID0gdGFyZ2V0IGFzIFNpZ25hbEltcGw8dW5rbm93bj47XG4gICAgICBjb25zdCBkID0gZGF0YSBhcyBbdW5rbm93biwgLi4uRWZmZWN0U3Vic2NyaXB0aW9uW11dO1xuICAgICAgc2lnbmFsLiR1bnRyYWNrZWRWYWx1ZSQgPSBkWzBdO1xuICAgICAgc2lnbmFsLiRlZmZlY3RzJCA9IG5ldyBTZXQoZC5zbGljZSgxKSBhcyBFZmZlY3RTdWJzY3JpcHRpb25bXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLldyYXBwZWRTaWduYWw6IHtcbiAgICAgIGNvbnN0IHNpZ25hbCA9IHRhcmdldCBhcyBXcmFwcGVkU2lnbmFsPHVua25vd24+O1xuICAgICAgY29uc3QgZCA9IGRhdGEgYXMgW1xuICAgICAgICBudW1iZXIsXG4gICAgICAgIHVua25vd25bXSxcbiAgICAgICAgTWFwPEVmZmVjdFByb3BlcnR5IHwgc3RyaW5nLCBFZmZlY3RTdWJzY3JpcHRpb24+IHwgbnVsbCxcbiAgICAgICAgdW5rbm93bixcbiAgICAgICAgQWxsU2lnbmFsRmxhZ3MsXG4gICAgICAgIEhvc3RFbGVtZW50LFxuICAgICAgICAuLi5FZmZlY3RTdWJzY3JpcHRpb25bXSxcbiAgICAgIF07XG4gICAgICBzaWduYWwuJGZ1bmMkID0gY29udGFpbmVyLmdldFN5bmNGbihkWzBdKTtcbiAgICAgIHNpZ25hbC4kYXJncyQgPSBkWzFdO1xuICAgICAgc2lnbmFsW19FRkZFQ1RfQkFDS19SRUZdID0gZFsyXTtcbiAgICAgIHNpZ25hbC4kdW50cmFja2VkVmFsdWUkID0gZFszXTtcbiAgICAgIHNpZ25hbC4kZmxhZ3MkID0gZFs0XTtcbiAgICAgIHNpZ25hbC4kaG9zdEVsZW1lbnQkID0gZFs1XTtcbiAgICAgIHNpZ25hbC4kZWZmZWN0cyQgPSBuZXcgU2V0KGQuc2xpY2UoNikgYXMgRWZmZWN0U3Vic2NyaXB0aW9uW10pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIEluZmxhdGluZyBhIFNlcmlhbGl6ZXJTaWduYWwgaXMgdGhlIHNhbWUgYXMgaW5mbGF0aW5nIGEgQ29tcHV0ZWRTaWduYWxcbiAgICBjYXNlIFR5cGVJZHMuU2VyaWFsaXplclNpZ25hbDpcbiAgICBjYXNlIFR5cGVJZHMuQ29tcHV0ZWRTaWduYWw6IHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkID0gdGFyZ2V0IGFzIENvbXB1dGVkU2lnbmFsSW1wbDx1bmtub3duPjtcbiAgICAgIGNvbnN0IGQgPSBkYXRhIGFzIFtRUkxJbnRlcm5hbDwoKSA9PiB7fT4sIEVmZmVjdFN1YnNjcmlwdGlvbltdIHwgbnVsbCwgdW5rbm93bj9dO1xuICAgICAgY29tcHV0ZWQuJGNvbXB1dGVRcmwkID0gZFswXTtcbiAgICAgIGNvbXB1dGVkLiRlZmZlY3RzJCA9IG5ldyBTZXQoZFsxXSk7XG4gICAgICBjb25zdCBoYXNWYWx1ZSA9IGQubGVuZ3RoID4gMjtcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICBjb21wdXRlZC4kdW50cmFja2VkVmFsdWUkID0gZFsyXTtcbiAgICAgICAgLy8gVGhlIHNlcmlhbGl6ZWQgc2lnbmFsIGlzIGFsd2F5cyBpbnZhbGlkIHNvIGl0IGNhbiByZWNyZWF0ZSB0aGUgY3VzdG9tIG9iamVjdFxuICAgICAgICBpZiAodHlwZUlkID09PSBUeXBlSWRzLlNlcmlhbGl6ZXJTaWduYWwpIHtcbiAgICAgICAgICBjb21wdXRlZC4kZmxhZ3MkIHw9IFNpZ25hbEZsYWdzLklOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXB1dGVkLiRmbGFncyQgfD0gU2lnbmFsRmxhZ3MuSU5WQUxJRDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHdlIHRyeSB0byBjb21wdXRlIHZhbHVlIGFuZCB0aGUgcXJsIGlzIG5vdCByZXNvbHZlZCwgdGhlbiBzeXN0ZW0gdGhyb3dzIGFuIGVycm9yIHdpdGhcbiAgICAgICAgICogcXJsIHByb21pc2UuIFRvIHByZXZlbnQgdGhhdCB3ZSBzaG91bGQgZWFybHkgcmVzb2x2ZSBjb21wdXRlZCBxcmwgd2hpbGUgY29tcHV0ZWRcbiAgICAgICAgICogZGVzZXJpYWxpemF0aW9uLiBUaGlzIGFsc28gcHJldmVudHMgYW55dGhpbmcgZnJvbSBmaXJpbmcgd2hpbGUgY29tcHV0ZWQgcXJscyBsb2FkLFxuICAgICAgICAgKiBiZWNhdXNlIG9mIHNjaGVkdWxlclxuICAgICAgICAgKi9cbiAgICAgICAgLy8gdHJ5IHRvIGRvd25sb2FkIHFybCBpbiB0aGlzIHRpY2tcbiAgICAgICAgY29tcHV0ZWQuJGNvbXB1dGVRcmwkLnJlc29sdmUoKTtcbiAgICAgICAgKGNvbnRhaW5lciBhcyBEb21Db250YWluZXIpLiRzY2hlZHVsZXIkPy4oXG4gICAgICAgICAgQ2hvcmVUeXBlLlFSTF9SRVNPTFZFLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgY29tcHV0ZWQuJGNvbXB1dGVRcmwkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLkVycm9yOiB7XG4gICAgICBjb25zdCBkID0gZGF0YSBhcyB1bmtub3duW107XG4gICAgICB0YXJnZXQubWVzc2FnZSA9IGRbMF07XG4gICAgICBjb25zdCBzZWNvbmQgPSBkWzFdO1xuICAgICAgaWYgKHNlY29uZCAmJiBBcnJheS5pc0FycmF5KHNlY29uZCkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWNvbmQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0YXJnZXRbc2Vjb25kW2krK11dID0gc2Vjb25kW2ldO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldC5zdGFjayA9IGRbMl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQuc3RhY2sgPSBzZWNvbmQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLkZvcm1EYXRhOiB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IHRhcmdldCBhcyBGb3JtRGF0YTtcbiAgICAgIGNvbnN0IGQgPSBkYXRhIGFzIGFueVtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChkW2krK10sIGRbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgVHlwZUlkcy5KU1hOb2RlOiB7XG4gICAgICBjb25zdCBqc3ggPSB0YXJnZXQgYXMgSlNYTm9kZUltcGw8dW5rbm93bj47XG4gICAgICBjb25zdCBbdHlwZSwgdmFyUHJvcHMsIGNvbnN0UHJvcHMsIGNoaWxkcmVuLCBmbGFncywga2V5XSA9IGRhdGEgYXMgYW55W107XG4gICAgICBqc3gudHlwZSA9IHR5cGU7XG4gICAgICBqc3gudmFyUHJvcHMgPSB2YXJQcm9wcztcbiAgICAgIGpzeC5jb25zdFByb3BzID0gY29uc3RQcm9wcztcbiAgICAgIGpzeC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAganN4LmZsYWdzID0gZmxhZ3M7XG4gICAgICBqc3gua2V5ID0ga2V5O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgVHlwZUlkcy5TZXQ6IHtcbiAgICAgIGNvbnN0IHNldCA9IHRhcmdldCBhcyBTZXQ8dW5rbm93bj47XG4gICAgICBjb25zdCBkID0gZGF0YSBhcyBhbnlbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBzZXQuYWRkKGRbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgVHlwZUlkcy5NYXA6IHtcbiAgICAgIGNvbnN0IG1hcCA9IHRhcmdldCBhcyBNYXA8dW5rbm93biwgdW5rbm93bj47XG4gICAgICBjb25zdCBkID0gZGF0YSBhcyBhbnlbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXAuc2V0KGRbaSsrXSwgZFtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLlByb21pc2U6IHtcbiAgICAgIGNvbnN0IHByb21pc2UgPSB0YXJnZXQgYXMgUHJvbWlzZTx1bmtub3duPjtcbiAgICAgIGNvbnN0IFtyZXNvbHZlZCwgcmVzdWx0XSA9IGRhdGEgYXMgW2Jvb2xlYW4sIHVua25vd25dO1xuICAgICAgY29uc3QgW3Jlc29sdmUsIHJlamVjdF0gPSByZXNvbHZlcnMuZ2V0KHByb21pc2UpITtcbiAgICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFR5cGVJZHMuVWludDhBcnJheTpcbiAgICAgIGNvbnN0IGJ5dGVzID0gdGFyZ2V0IGFzIFVpbnQ4QXJyYXk7XG4gICAgICBjb25zdCBidWYgPSBhdG9iKGRhdGEgYXMgc3RyaW5nKTtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGZvciAoY29uc3QgcyBvZiBidWYpIHtcbiAgICAgICAgYnl0ZXNbaSsrXSA9IHMuY2hhckNvZGVBdCgwKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVHlwZUlkcy5Qcm9wc1Byb3h5OlxuICAgICAgY29uc3QgcHJvcHNQcm94eSA9IHRhcmdldCBhcyBhbnk7XG4gICAgICBwcm9wc1Byb3h5W19WQVJfUFJPUFNdID0gZGF0YSA9PT0gMCA/IHt9IDogKGRhdGEgYXMgYW55KVswXTtcbiAgICAgIHByb3BzUHJveHlbX0NPTlNUX1BST1BTXSA9IChkYXRhIGFzIGFueSlbMV07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFR5cGVJZHMuRWZmZWN0RGF0YToge1xuICAgICAgY29uc3QgZWZmZWN0RGF0YSA9IHRhcmdldCBhcyBTdWJzY3JpcHRpb25EYXRhO1xuICAgICAgZWZmZWN0RGF0YS5kYXRhLiRzY29wZWRTdHlsZUlkUHJlZml4JCA9IChkYXRhIGFzIGFueVtdKVswXTtcbiAgICAgIGVmZmVjdERhdGEuZGF0YS4kaXNDb25zdCQgPSAoZGF0YSBhcyBhbnlbXSlbMV07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IHFFcnJvcihRRXJyb3Iuc2VyaWFsaXplRXJyb3JOb3RJbXBsZW1lbnRlZCwgW3R5cGVJZF0pO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgX2NvbnN0YW50cyA9IFtcbiAgdW5kZWZpbmVkLFxuICBudWxsLFxuICB0cnVlLFxuICBmYWxzZSxcbiAgJycsXG4gIEVNUFRZX0FSUkFZLFxuICBFTVBUWV9PQkosXG4gIE5FRURTX0NPTVBVVEFUSU9OLFxuICBTVE9SRV9BTExfUFJPUFMsXG4gIFNsb3QsXG4gIEZyYWdtZW50LFxuICBOYU4sXG4gIEluZmluaXR5LFxuICAtSW5maW5pdHksXG4gIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAtIDEsXG4gIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuXSBhcyBjb25zdDtcbmNvbnN0IF9jb25zdGFudE5hbWVzID0gW1xuICAndW5kZWZpbmVkJyxcbiAgJ251bGwnLFxuICAndHJ1ZScsXG4gICdmYWxzZScsXG4gIFwiJydcIixcbiAgJ0VNUFRZX0FSUkFZJyxcbiAgJ0VNUFRZX09CSicsXG4gICdORUVEU19DT01QVVRBVElPTicsXG4gICdTVE9SRV9BTExfUFJPUFMnLFxuICAnU2xvdCcsXG4gICdGcmFnbWVudCcsXG4gICdOYU4nLFxuICAnSW5maW5pdHknLFxuICAnLUluZmluaXR5JyxcbiAgJ01BWF9TQUZFX0lOVEVHRVInLFxuICAnTUFYX1NBRkVfSU5URUdFUi0xJyxcbiAgJ01JTl9TQUZFX0lOVEVHRVInLFxuXSBhcyBjb25zdDtcblxuY29uc3QgYWxsb2NhdGUgPSAoY29udGFpbmVyOiBEZXNlcmlhbGl6ZUNvbnRhaW5lciwgdHlwZUlkOiBudW1iZXIsIHZhbHVlOiB1bmtub3duKTogYW55ID0+IHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBXaGVuIGEgdmFsdWUgd2FzIGFscmVhZHkgcHJvY2Vzc2VkLCB0aGUgcmVzdWx0IGlzIHN0b3JlZCBpbiB0eXBlXG4gICAgcmV0dXJuIHR5cGVJZDtcbiAgfVxuICBzd2l0Y2ggKHR5cGVJZCkge1xuICAgIGNhc2UgVHlwZUlkcy5Sb290UmVmOlxuICAgICAgcmV0dXJuIGNvbnRhaW5lci4kZ2V0T2JqZWN0QnlJZCQodmFsdWUgYXMgbnVtYmVyKTtcbiAgICBjYXNlIFR5cGVJZHMuQ29uc3RhbnQ6XG4gICAgICByZXR1cm4gX2NvbnN0YW50c1t2YWx1ZSBhcyBDb25zdGFudHNdO1xuICAgIGNhc2UgVHlwZUlkcy5OdW1iZXI6XG4gICAgICByZXR1cm4gdmFsdWUgYXMgbnVtYmVyO1xuICAgIGNhc2UgVHlwZUlkcy5BcnJheTpcbiAgICAgIHJldHVybiB3cmFwRGVzZXJpYWxpemVyUHJveHkoY29udGFpbmVyIGFzIGFueSwgdmFsdWUgYXMgYW55W10pO1xuICAgIGNhc2UgVHlwZUlkcy5PYmplY3Q6XG4gICAgICByZXR1cm4ge307XG4gICAgY2FzZSBUeXBlSWRzLlFSTDpcbiAgICAgIGNvbnN0IHFybCA9IGNvbnRhaW5lci4kZ2V0T2JqZWN0QnlJZCQodmFsdWUgYXMgbnVtYmVyKTtcbiAgICAgIHJldHVybiBwYXJzZVFSTChxcmwgYXMgc3RyaW5nKTtcbiAgICBjYXNlIFR5cGVJZHMuVGFzazpcbiAgICAgIHJldHVybiBuZXcgVGFzaygtMSwgLTEsIG51bGwhLCBudWxsISwgbnVsbCEsIG51bGwpO1xuICAgIGNhc2UgVHlwZUlkcy5SZXNvdXJjZToge1xuICAgICAgY29uc3QgcmVzID0gY3JlYXRlUmVzb3VyY2VSZXR1cm4oXG4gICAgICAgIGNvbnRhaW5lciBhcyBhbnksXG4gICAgICAgIC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHRpbWVvdXQgdmFsdWVcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICByZXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgY2FzZSBUeXBlSWRzLlVSTDpcbiAgICAgIHJldHVybiBuZXcgVVJMKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgY2FzZSBUeXBlSWRzLkRhdGU6XG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUgYXMgbnVtYmVyKTtcbiAgICBjYXNlIFR5cGVJZHMuUmVnZXg6XG4gICAgICBjb25zdCBpZHggPSAodmFsdWUgYXMgc3RyaW5nKS5sYXN0SW5kZXhPZignLycpO1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoKHZhbHVlIGFzIHN0cmluZykuc2xpY2UoMSwgaWR4KSwgKHZhbHVlIGFzIHN0cmluZykuc2xpY2UoaWR4ICsgMSkpO1xuICAgIGNhc2UgVHlwZUlkcy5FcnJvcjpcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoKTtcbiAgICBjYXNlIFR5cGVJZHMuQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGNvbXBvbmVudFFybChudWxsISk7XG4gICAgY2FzZSBUeXBlSWRzLlNpZ25hbDpcbiAgICAgIHJldHVybiBuZXcgU2lnbmFsSW1wbChjb250YWluZXIgYXMgYW55LCAwKTtcbiAgICBjYXNlIFR5cGVJZHMuV3JhcHBlZFNpZ25hbDpcbiAgICAgIHJldHVybiBuZXcgV3JhcHBlZFNpZ25hbChjb250YWluZXIgYXMgYW55LCBudWxsISwgbnVsbCEsIG51bGwhKTtcbiAgICBjYXNlIFR5cGVJZHMuQ29tcHV0ZWRTaWduYWw6XG4gICAgICByZXR1cm4gbmV3IENvbXB1dGVkU2lnbmFsSW1wbChjb250YWluZXIgYXMgYW55LCBudWxsISk7XG4gICAgY2FzZSBUeXBlSWRzLlNlcmlhbGl6ZXJTaWduYWw6XG4gICAgICByZXR1cm4gbmV3IFNlcmlhbGl6ZXJTaWduYWxJbXBsKGNvbnRhaW5lciBhcyBhbnksIG51bGwhKTtcbiAgICBjYXNlIFR5cGVJZHMuU3RvcmU6XG4gICAgY2FzZSBUeXBlSWRzLlN0b3JlQXJyYXk6XG4gICAgICAvLyBpZ25vcmUgYWxsb2NhdGUsIHdlIG5lZWQgdG8gYXNzaWduIHRhcmdldCB3aGlsZSBjcmVhdGluZyBzdG9yZVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSBUeXBlSWRzLlVSTFNlYXJjaFBhcmFtczpcbiAgICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgY2FzZSBUeXBlSWRzLkZvcm1EYXRhOlxuICAgICAgcmV0dXJuIG5ldyBGb3JtRGF0YSgpO1xuICAgIGNhc2UgVHlwZUlkcy5KU1hOb2RlOlxuICAgICAgcmV0dXJuIG5ldyBKU1hOb2RlSW1wbChudWxsISwgbnVsbCEsIG51bGwhLCBudWxsISwgLTEsIG51bGwpO1xuICAgIGNhc2UgVHlwZUlkcy5CaWdJbnQ6XG4gICAgICByZXR1cm4gQmlnSW50KHZhbHVlIGFzIHN0cmluZyk7XG4gICAgY2FzZSBUeXBlSWRzLlNldDpcbiAgICAgIHJldHVybiBuZXcgU2V0KCk7XG4gICAgY2FzZSBUeXBlSWRzLk1hcDpcbiAgICAgIHJldHVybiBuZXcgTWFwKCk7XG4gICAgY2FzZSBUeXBlSWRzLlN0cmluZzpcbiAgICAgIHJldHVybiB2YWx1ZSBhcyBzdHJpbmc7XG4gICAgY2FzZSBUeXBlSWRzLlByb21pc2U6XG4gICAgICBsZXQgcmVzb2x2ZSE6ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuICAgICAgbGV0IHJlamVjdCE6IChlcnJvcjogYW55KSA9PiB2b2lkO1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgICByZWplY3QgPSByZWo7XG4gICAgICB9KTtcbiAgICAgIHJlc29sdmVycy5zZXQocHJvbWlzZSwgW3Jlc29sdmUsIHJlamVjdF0pO1xuICAgICAgLy8gRG9uJ3QgbGVhdmUgdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uc1xuICAgICAgcHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICBjYXNlIFR5cGVJZHMuVWludDhBcnJheTpcbiAgICAgIGNvbnN0IGVuY29kZWRMZW5ndGggPSAodmFsdWUgYXMgc3RyaW5nKS5sZW5ndGg7XG4gICAgICBjb25zdCBibG9ja3MgPSBlbmNvZGVkTGVuZ3RoID4+PiAyO1xuICAgICAgY29uc3QgcmVzdCA9IGVuY29kZWRMZW5ndGggJiAzO1xuICAgICAgY29uc3QgZGVjb2RlZExlbmd0aCA9IGJsb2NrcyAqIDMgKyAocmVzdCA/IHJlc3QgLSAxIDogMCk7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjb2RlZExlbmd0aCk7XG4gICAgY2FzZSBUeXBlSWRzLlByb3BzUHJveHk6XG4gICAgICByZXR1cm4gY3JlYXRlUHJvcHNQcm94eShudWxsISwgbnVsbCk7XG4gICAgY2FzZSBUeXBlSWRzLlZOb2RlOlxuICAgICAgcmV0dXJuIHJldHJpZXZlVk5vZGVPckRvY3VtZW50KGNvbnRhaW5lciwgdmFsdWUpO1xuICAgIGNhc2UgVHlwZUlkcy5SZWZWTm9kZTpcbiAgICAgIGNvbnN0IHZOb2RlID0gcmV0cmlldmVWTm9kZU9yRG9jdW1lbnQoY29udGFpbmVyLCB2YWx1ZSk7XG4gICAgICBpZiAodm5vZGVfaXNWTm9kZSh2Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHZub2RlX2dldE5vZGUodk5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5zZXJpYWxpemVFcnJvckV4cGVjdGVkVk5vZGUsIFt0eXBlb2Ygdk5vZGVdKTtcbiAgICAgIH1cbiAgICBjYXNlIFR5cGVJZHMuRWZmZWN0RGF0YTpcbiAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uRGF0YSh7fSBhcyBOb2RlUHJvcERhdGEpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IHFFcnJvcihRRXJyb3Iuc2VyaWFsaXplRXJyb3JDYW5ub3RBbGxvY2F0ZSwgW3R5cGVJZF0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiByZXRyaWV2ZVZOb2RlT3JEb2N1bWVudChcbiAgY29udGFpbmVyOiBEZXNlcmlhbGl6ZUNvbnRhaW5lcixcbiAgdmFsdWU6IHVua25vd24gfCBudWxsXG4pOiBWTm9kZSB8IERvY3VtZW50IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgPyAoY29udGFpbmVyIGFzIGFueSkucm9vdFZOb2RlXG4gICAgICA/IHZub2RlX2xvY2F0ZSgoY29udGFpbmVyIGFzIGFueSkucm9vdFZOb2RlLCB2YWx1ZSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIDogY29udGFpbmVyLmVsZW1lbnQ/Lm93bmVyRG9jdW1lbnQ7XG59XG5cbi8qKiBQYXJzZXMgXCJjaHVuayNoYXNoWy4uLnJvb3RSZWZdXCIgKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVFSTChxcmw6IHN0cmluZyk6IFFSTEludGVybmFsPGFueT4ge1xuICBjb25zdCBoYXNoSWR4ID0gcXJsLmluZGV4T2YoJyMnKTtcbiAgY29uc3QgY2FwdHVyZVN0YXJ0ID0gcXJsLmluZGV4T2YoJ1snLCBoYXNoSWR4KTtcbiAgY29uc3QgY2FwdHVyZUVuZCA9IHFybC5pbmRleE9mKCddJywgY2FwdHVyZVN0YXJ0KTtcbiAgY29uc3QgY2h1bmsgPSBoYXNoSWR4ID4gLTEgPyBxcmwuc2xpY2UoMCwgaGFzaElkeCkgOiBxcmwuc2xpY2UoMCwgY2FwdHVyZVN0YXJ0KTtcblxuICBjb25zdCBzeW1ib2wgPSBjYXB0dXJlU3RhcnQgPiAtMSA/IHFybC5zbGljZShoYXNoSWR4ICsgMSwgY2FwdHVyZVN0YXJ0KSA6IHFybC5zbGljZShoYXNoSWR4ICsgMSk7XG4gIGNvbnN0IGNhcHR1cmVJZHMgPVxuICAgIGNhcHR1cmVTdGFydCA+IC0xICYmIGNhcHR1cmVFbmQgPiAtMVxuICAgICAgPyBxcmxcbiAgICAgICAgICAuc2xpY2UoY2FwdHVyZVN0YXJ0ICsgMSwgY2FwdHVyZUVuZClcbiAgICAgICAgICAuc3BsaXQoJyAnKVxuICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYubGVuZ3RoKVxuICAgICAgICAgIC5tYXAoKHMpID0+IHBhcnNlSW50KHMsIDEwKSlcbiAgICAgIDogbnVsbDtcbiAgbGV0IHFybFJlZiA9IG51bGw7XG4gIGlmIChpc0RldiAmJiBjaHVuayA9PT0gUVJMX1JVTlRJTUVfQ0hVTkspIHtcbiAgICBjb25zdCBiYWNrQ2hhbm5lbDogTWFwPHN0cmluZywgRnVuY3Rpb24+ID0gKGdsb2JhbFRoaXMgYXMgYW55KVtRUkxfUlVOVElNRV9DSFVOS107XG4gICAgYXNzZXJ0RGVmaW5lZChiYWNrQ2hhbm5lbCwgJ01pc3NpbmcgUVJMX1JVTlRJTUVfQ0hVTksnKTtcbiAgICBxcmxSZWYgPSBiYWNrQ2hhbm5lbC5nZXQoc3ltYm9sKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlUVJMKGNodW5rLCBzeW1ib2wsIHFybFJlZiwgbnVsbCwgY2FwdHVyZUlkcywgbnVsbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZsYXRlUVJMKGNvbnRhaW5lcjogRGVzZXJpYWxpemVDb250YWluZXIsIHFybDogUVJMSW50ZXJuYWw8YW55Pikge1xuICBjb25zdCBjYXB0dXJlSWRzID0gcXJsLiRjYXB0dXJlJDtcbiAgcXJsLiRjYXB0dXJlUmVmJCA9IGNhcHR1cmVJZHMgPyBjYXB0dXJlSWRzLm1hcCgoaWQpID0+IGNvbnRhaW5lci4kZ2V0T2JqZWN0QnlJZCQoaWQpKSA6IG51bGw7XG4gIGlmIChjb250YWluZXIuZWxlbWVudCkge1xuICAgIHFybC4kc2V0Q29udGFpbmVyJChjb250YWluZXIuZWxlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHFybDtcbn1cblxuLyoqIEEgc2VsZWN0aW9uIG9mIGF0dHJpYnV0ZXMgb2YgdGhlIHJlYWwgdGhpbmcgKi9cbnR5cGUgU3NyTm9kZSA9IHtcbiAgbm9kZVR5cGU6IG51bWJlcjtcbiAgaWQ6IHN0cmluZztcbiAgY2hpbGRyZW5WTm9kZURhdGE6IFZOb2RlRGF0YVtdIHwgbnVsbDtcbiAgdm5vZGVEYXRhOiBWTm9kZURhdGE7XG4gIFtfRUZGRUNUX0JBQ0tfUkVGXTogTWFwPEVmZmVjdFByb3BlcnR5IHwgc3RyaW5nLCBFZmZlY3RTdWJzY3JpcHRpb24+IHwgbnVsbDtcbn07XG5cbnR5cGUgRG9tUmVmID0ge1xuICAkc3NyTm9kZSQ6IFNzck5vZGU7XG59O1xuXG5sZXQgaXNEb21SZWYgPSAob2JqOiB1bmtub3duKTogb2JqIGlzIERvbVJlZiA9PiBmYWxzZTtcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemF0aW9uQ29udGV4dCB7XG4gICRzZXJpYWxpemUkOiAoKSA9PiB2b2lkO1xuXG4gICRzeW1ib2xUb0NodW5rUmVzb2x2ZXIkOiBTeW1ib2xUb0NodW5rUmVzb2x2ZXI7XG5cbiAgLyoqXG4gICAqIE1hcCBmcm9tIG9iamVjdCB0byByb290IGluZGV4LlxuICAgKlxuICAgKiBJZiBvYmplY3QgaXMgZm91bmQgaW4gYG9iak1hcGAgd2lsbCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBvYmplY3QgaW4gdGhlIGBvYmpSb290c2Agb3JcbiAgICogYHNlY29uZGFyeU9ialJvb3RzYC5cbiAgICpcbiAgICogYG9iak1hcGAgcmV0dXJuOlxuICAgKlxuICAgKiAtIGA+PTBgIC0gaW5kZXggb2YgdGhlIG9iamVjdCBpbiBgb2JqUm9vdHNgLlxuICAgKiAtIGAtMWAgLSBvYmplY3QgaGFzIGJlZW4gc2Vlbiwgb25seSBvbmNlLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IG5lZWQgdG8gYmUgcHJvbW90ZWQgaW50byBhIHJvb3RcbiAgICogICB5ZXQuXG4gICAqL1xuICAkd2FzU2VlbiQ6IChvYmo6IHVua25vd24pID0+IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAkaGFzUm9vdElkJDogKG9iajogdW5rbm93bikgPT4gbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBSb290IG9iamVjdHMgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkLlxuICAgKlxuICAgKiBSb290cyBhcmUgZW50cnkgcG9pbnRzIGludG8gdGhlIG9iamVjdCBncmFwaC4gVHlwaWNhbGx5IHRoZSByb290cyBhcmUgaGVsZCBieSB0aGUgbGlzdGVuZXJzLlxuICAgKi9cbiAgJGFkZFJvb3QkOiAob2JqOiB1bmtub3duKSA9PiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdldCByb290IGluZGV4IG9mIHRoZSBvYmplY3Qgd2l0aG91dCBjcmVhdGUgYSBuZXcgcm9vdC5cbiAgICpcbiAgICogVGhpcyBpcyB1c2VkIGR1cmluZyBzZXJpYWxpemF0aW9uLCBhcyBuZXcgcm9vdHMgY2FuJ3QgYmUgY3JlYXRlZCBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHRocm93cyBpZiB0aGUgcm9vdCB3YXMgbm90IGZvdW5kLlxuICAgKi9cbiAgJGdldFJvb3RJZCQ6IChvYmo6IHVua25vd24pID0+IG51bWJlcjtcblxuICAkc2VlbiQ6IChvYmo6IHVua25vd24pID0+IHZvaWQ7XG5cbiAgJHJvb3RzJDogdW5rbm93bltdO1xuXG4gICRhZGRTeW5jRm4kKCRmdW5jU3RyJDogc3RyaW5nIHwgbnVsbCwgYXJnc0NvdW50OiBudW1iZXIsIGZuOiBGdW5jdGlvbik6IG51bWJlcjtcblxuICAkYnJlYWtDaXJjdWxhckRlcHNBbmRBd2FpdFByb21pc2VzJDogKCkgPT4gVmFsdWVPclByb21pc2U8dm9pZD47XG5cbiAgJGlzU3NyTm9kZSQ6IChvYmo6IHVua25vd24pID0+IG9iaiBpcyBTc3JOb2RlO1xuICAkaXNEb21SZWYkOiAob2JqOiB1bmtub3duKSA9PiBvYmogaXMgRG9tUmVmO1xuXG4gICR3cml0ZXIkOiBTdHJlYW1Xcml0ZXI7XG4gICRzeW5jRm5zJDogc3RyaW5nW107XG5cbiAgJGV2ZW50UXJscyQ6IFNldDxRUkw+O1xuICAkZXZlbnROYW1lcyQ6IFNldDxzdHJpbmc+O1xuICAkcmVzb3VyY2VzJDogU2V0PFJlc291cmNlUmV0dXJuSW50ZXJuYWw8dW5rbm93bj4+O1xuICAkcmVuZGVyU3ltYm9scyQ6IFNldDxzdHJpbmc+O1xuICAkc3RvcmVQcm94eU1hcCQ6IE9ialRvUHJveHlNYXA7XG5cbiAgJGdldFByb3AkOiAob2JqOiBhbnksIHByb3A6IHN0cmluZykgPT4gYW55O1xuICAkc2V0UHJvcCQ6IChvYmo6IGFueSwgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkO1xuICAkcHJlcFZOb2RlRGF0YSQ/OiAodk5vZGVEYXRhOiBWTm9kZURhdGEpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTZXJpYWxpemF0aW9uQ29udGV4dCA9IChcbiAgLyoqXG4gICAqIE5vZGUgY29uc3RydWN0b3IsIGZvciBpbnN0YW5jZW9mIGNoZWNrcy5cbiAgICpcbiAgICogQSBub2RlIGNvbnN0cnVjdG9yIGNhbiBiZSBudWxsLiBGb3IgZXhhbXBsZSBvbiB0aGUgY2xpZW50IHdlIGNhbid0IHNlcmlhbGl6ZSBET00gbm9kZXMgYXNcbiAgICogc2VydmVyIHdpbGwgbm90IGtub3cgd2hhdCB0byBkbyB3aXRoIHRoZW0uXG4gICAqL1xuICBOb2RlQ29uc3RydWN0b3I6IHtcbiAgICBuZXcgKC4uLnJlc3Q6IGFueVtdKTogeyBub2RlVHlwZTogbnVtYmVyOyBpZDogc3RyaW5nIH07XG4gIH0gfCBudWxsLFxuICAvKiogRG9tUmVmIGNvbnN0cnVjdG9yLCBmb3IgaW5zdGFuY2VvZiBjaGVja3MuICovXG4gIERvbVJlZkNvbnN0cnVjdG9yOiB7XG4gICAgbmV3ICguLi5yZXN0OiBhbnlbXSk6IHsgJHNzck5vZGUkOiBJU3NyTm9kZSB9O1xuICB9IHwgbnVsbCxcbiAgc3ltYm9sVG9DaHVua1Jlc29sdmVyOiBTeW1ib2xUb0NodW5rUmVzb2x2ZXIsXG4gIGdldFByb3A6IChvYmo6IGFueSwgcHJvcDogc3RyaW5nKSA9PiBhbnksXG4gIHNldFByb3A6IChvYmo6IGFueSwgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkLFxuICBzdG9yZVByb3h5TWFwOiBPYmpUb1Byb3h5TWFwLFxuICB3cml0ZXI/OiBTdHJlYW1Xcml0ZXIsXG4gIC8vIHRlbXBvcmFyeSB1bnRpbCB3ZSBzZXJkZXMgdGhlIHZub2RlIGRhdGEgaGVyZVxuICBwcmVwVk5vZGVEYXRhPzogKHZOb2RlRGF0YTogVk5vZGVEYXRhKSA9PiB2b2lkXG4pOiBTZXJpYWxpemF0aW9uQ29udGV4dCA9PiB7XG4gIGlmICghd3JpdGVyKSB7XG4gICAgY29uc3QgYnVmZmVyOiBzdHJpbmdbXSA9IFtdO1xuICAgIHdyaXRlciA9IHtcbiAgICAgIHdyaXRlOiAodGV4dDogc3RyaW5nKSA9PiBidWZmZXIucHVzaCh0ZXh0KSxcbiAgICAgIHRvU3RyaW5nOiAoKSA9PiBidWZmZXIuam9pbignJyksXG4gICAgfSBhcyBTdHJlYW1Xcml0ZXI7XG4gIH1cbiAgY29uc3QgbWFwID0gbmV3IE1hcDxhbnksIG51bWJlcj4oKTtcbiAgY29uc3Qgc3luY0ZuTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgY29uc3Qgc3luY0Zuczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgcm9vdHM6IGFueVtdID0gW107XG4gIGNvbnN0ICR3YXNTZWVuJCA9IChvYmo6IGFueSkgPT4gbWFwLmdldChvYmopO1xuICBjb25zdCAkc2VlbiQgPSAob2JqOiBhbnkpID0+IG1hcC5zZXQob2JqLCAtMSk7XG4gIGNvbnN0ICRhZGRSb290JCA9IChvYmo6IGFueSkgPT4ge1xuICAgIGxldCBpZCA9IG1hcC5nZXQob2JqKTtcbiAgICBpZiAodHlwZW9mIGlkICE9PSAnbnVtYmVyJyB8fCBpZCA9PT0gLTEpIHtcbiAgICAgIGlkID0gcm9vdHMubGVuZ3RoO1xuICAgICAgbWFwLnNldChvYmosIGlkKTtcbiAgICAgIHJvb3RzLnB1c2gob2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICBjb25zdCBpc1Nzck5vZGUgPSAoTm9kZUNvbnN0cnVjdG9yID8gKG9iaikgPT4gb2JqIGluc3RhbmNlb2YgTm9kZUNvbnN0cnVjdG9yIDogKCkgPT4gZmFsc2UpIGFzIChcbiAgICBvYmo6IHVua25vd25cbiAgKSA9PiBvYmogaXMgU3NyTm9kZTtcbiAgaXNEb21SZWYgPSAoXG4gICAgRG9tUmVmQ29uc3RydWN0b3IgPyAob2JqKSA9PiBvYmogaW5zdGFuY2VvZiBEb21SZWZDb25zdHJ1Y3RvciA6ICgoKCkgPT4gZmFsc2UpIGFzIGFueSlcbiAgKSBhcyAob2JqOiB1bmtub3duKSA9PiBvYmogaXMgRG9tUmVmO1xuXG4gIHJldHVybiB7XG4gICAgJHNlcmlhbGl6ZSQoKTogdm9pZCB7XG4gICAgICBzZXJpYWxpemUodGhpcyk7XG4gICAgfSxcbiAgICAkaXNTc3JOb2RlJDogaXNTc3JOb2RlLFxuICAgICRpc0RvbVJlZiQ6IGlzRG9tUmVmLFxuICAgICRzeW1ib2xUb0NodW5rUmVzb2x2ZXIkOiBzeW1ib2xUb0NodW5rUmVzb2x2ZXIsXG4gICAgJHdhc1NlZW4kLFxuICAgICRyb290cyQ6IHJvb3RzLFxuICAgICRzZWVuJCxcbiAgICAkaGFzUm9vdElkJDogKG9iajogYW55KSA9PiB7XG4gICAgICBjb25zdCBpZCA9IG1hcC5nZXQob2JqKTtcbiAgICAgIHJldHVybiBpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSAtMSA/IHVuZGVmaW5lZCA6IGlkO1xuICAgIH0sXG4gICAgJGFkZFJvb3QkLFxuICAgICRnZXRSb290SWQkOiAob2JqOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gbWFwLmdldChvYmopO1xuICAgICAgaWYgKCFpZCB8fCBpZCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5zZXJpYWxpemVFcnJvck1pc3NpbmdSb290SWQsIFtvYmpdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpZDtcbiAgICB9LFxuICAgICRzeW5jRm5zJDogc3luY0ZucyxcbiAgICAkYWRkU3luY0ZuJDogKGZ1bmNTdHI6IHN0cmluZyB8IG51bGwsIGFyZ0NvdW50OiBudW1iZXIsIGZuOiBGdW5jdGlvbikgPT4ge1xuICAgICAgY29uc3QgaXNGdWxsRm4gPSBmdW5jU3RyID09IG51bGw7XG4gICAgICBpZiAoaXNGdWxsRm4pIHtcbiAgICAgICAgZnVuY1N0ciA9ICgoZm4gYXMgYW55KS5zZXJpYWxpemVkIGFzIHN0cmluZykgfHwgZm4udG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGxldCBpZCA9IHN5bmNGbk1hcC5nZXQoZnVuY1N0ciEpO1xuICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWQgPSBzeW5jRm5zLmxlbmd0aDtcbiAgICAgICAgc3luY0ZuTWFwLnNldChmdW5jU3RyISwgaWQpO1xuICAgICAgICBpZiAoaXNGdWxsRm4pIHtcbiAgICAgICAgICBzeW5jRm5zLnB1c2goZnVuY1N0ciEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBjb2RlID0gJygnO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29kZSArPSAoaSA9PSAwID8gJ3AnIDogJyxwJykgKyBpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzeW5jRm5zLnB1c2goKGNvZGUgKz0gJyk9PicgKyBmdW5jU3RyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpZDtcbiAgICB9LFxuICAgICR3cml0ZXIkOiB3cml0ZXIsXG4gICAgJGJyZWFrQ2lyY3VsYXJEZXBzQW5kQXdhaXRQcm9taXNlcyQ6IGJyZWFrQ2lyY3VsYXJEZXBlbmRlbmNpZXNBbmRSZXNvbHZlUHJvbWlzZXMsXG4gICAgJGV2ZW50UXJscyQ6IG5ldyBTZXQ8UVJMPigpLFxuICAgICRldmVudE5hbWVzJDogbmV3IFNldDxzdHJpbmc+KCksXG4gICAgJHJlc291cmNlcyQ6IG5ldyBTZXQ8UmVzb3VyY2VSZXR1cm5JbnRlcm5hbDx1bmtub3duPj4oKSxcbiAgICAkcmVuZGVyU3ltYm9scyQ6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICRzdG9yZVByb3h5TWFwJDogc3RvcmVQcm94eU1hcCxcbiAgICAkZ2V0UHJvcCQ6IGdldFByb3AsXG4gICAgJHNldFByb3AkOiBzZXRQcm9wLFxuICAgICRwcmVwVk5vZGVEYXRhJDogcHJlcFZOb2RlRGF0YSxcbiAgfTtcblxuICBhc3luYyBmdW5jdGlvbiBicmVha0NpcmN1bGFyRGVwZW5kZW5jaWVzQW5kUmVzb2x2ZVByb21pc2VzKCkge1xuICAgIC8vIEFzIHdlIHdhbGsgdGhlIG9iamVjdCBncmFwaCB3ZSBpbnNlcnQgbmV3bHkgZGlzY292ZXJlZCBvYmplY3RzIHdoaWNoIG5lZWQgdG8gYmUgc2Nhbm5lZCBoZXJlLlxuICAgIGNvbnN0IGRpc2NvdmVyZWRWYWx1ZXM6IHVua25vd25bXSA9IFtdO1xuICAgIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIE5vdGUgb24gb3V0IG9mIG9yZGVyIHN0cmVhbWluZzpcbiAgICAgKlxuICAgICAqIFdoZW4gd2UgaW1wbGVtZW50IHRoYXQsIHdlIG1heSBuZWVkIHRvIHNlbmQgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgd2FzIHN0cmVhbWVkXG4gICAgICogZWFybGllciBidXQgd2Fzbid0IGEgcm9vdC4gVGhpcyBtZWFucyB3ZSdsbCBoYXZlIHRvIGtlZXAgdHJhY2sgb2YgYWxsIG9iamVjdHMgb24gYm90aCBzZW5kXG4gICAgICogYW5kIHJlY2VpdmUgZW5kcywgd2hpY2ggbWVhbnMgd2UnbGwganVzdCBoYXZlIHRvIG1ha2UgZXZlcnl0aGluZyBhIHJvb3QgYW55d2F5LCBzbyBgdmlzaXQoKWBcbiAgICAgKiB3b24ndCBiZSBuZWVkZWQuXG4gICAgICovXG4gICAgLyoqIFZpc2l0IGFuIG9iamVjdCwgYWRkaW5nIGFueXRoaW5nIHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIHRvIHNjYW4gKi9cbiAgICBjb25zdCB2aXNpdCA9IChvYmo6IHVua25vd24pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChpc1FybChvYmopKSB7XG4gICAgICAgICAgaWYgKG9iai4kY2FwdHVyZVJlZiQpIHtcbiAgICAgICAgICAgIGRpc2NvdmVyZWRWYWx1ZXMucHVzaCguLi5vYmouJGNhcHR1cmVSZWYkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNRd2lrQ29tcG9uZW50KG9iaikpIHtcbiAgICAgICAgICBjb25zdCBbcXJsXTogW1FSTEludGVybmFsXSA9IChvYmogYXMgYW55KVtTRVJJQUxJWkFCTEVfU1RBVEVdO1xuICAgICAgICAgIGRpc2NvdmVyZWRWYWx1ZXMucHVzaChxcmwpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAvLyBza2lwIGFzIHRoZXNlIGFyZSBwcmltaXRpdmVzXG4gICAgICAgIHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8XG4gICAgICAgIG9iaiA9PT0gbnVsbCB8fFxuICAgICAgICBvYmogaW5zdGFuY2VvZiBVUkwgfHxcbiAgICAgICAgb2JqIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICBvYmogaW5zdGFuY2VvZiBSZWdFeHAgfHxcbiAgICAgICAgb2JqIGluc3RhbmNlb2YgVWludDhBcnJheSB8fFxuICAgICAgICBvYmogaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMgfHxcbiAgICAgICAgdm5vZGVfaXNWTm9kZShvYmopIHx8XG4gICAgICAgICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnICYmIG9iaiBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fFxuICAgICAgICAvLyBJZ25vcmUgdGhlIG5vIHNlcmlhbGl6ZSBvYmplY3RzXG4gICAgICAgIGZhc3RTa2lwU2VyaWFsaXplKG9iaiBhcyBvYmplY3QpXG4gICAgICApIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGRpc2NvdmVyZWRWYWx1ZXMucHVzaCguLi5PYmplY3QudmFsdWVzKG9iaikpO1xuICAgICAgfSBlbHNlIGlmIChpc1N0b3JlKG9iaikpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZ2V0U3RvcmVUYXJnZXQob2JqKSE7XG4gICAgICAgIGNvbnN0IGVmZmVjdHMgPSBnZXRTdG9yZUhhbmRsZXIob2JqKSEuJGVmZmVjdHMkO1xuICAgICAgICBkaXNjb3ZlcmVkVmFsdWVzLnB1c2godGFyZ2V0LCBlZmZlY3RzKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgY29uc3QgcHJvcFZhbHVlID0gKHRhcmdldCBhcyBhbnkpW3Byb3BdO1xuICAgICAgICAgIGlmIChzdG9yZVByb3h5TWFwLmhhcyhwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgICBkaXNjb3ZlcmVkVmFsdWVzLnB1c2gocHJvcCwgc3RvcmVQcm94eU1hcC5nZXQocHJvcFZhbHVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICBkaXNjb3ZlcmVkVmFsdWVzLnB1c2goLi4ub2JqLnZhbHVlcygpKTtcbiAgICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIG9iai5mb3JFYWNoKCh2LCBrKSA9PiB7XG4gICAgICAgICAgZGlzY292ZXJlZFZhbHVlcy5wdXNoKGssIHYpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgU2lnbmFsSW1wbCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcHV0ZWRTaWduYWwgY2FuIGJlIGxlZnQgdW4tY2FsY3VsYXRlZCBpZiBpbnZhbGlkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBTZXJpYWxpemVyU2lnbmFsIGlzIGFsd2F5cyBzZXJpYWxpemVkIGlmIGl0IHdhcyBhbHJlYWR5IGNhbGN1bGF0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCB0b1NlcmlhbGl6ZSA9XG4gICAgICAgICAgb2JqIGluc3RhbmNlb2YgQ29tcHV0ZWRTaWduYWxJbXBsICYmXG4gICAgICAgICAgIShvYmogaW5zdGFuY2VvZiBTZXJpYWxpemVyU2lnbmFsSW1wbCkgJiZcbiAgICAgICAgICAob2JqLiRmbGFncyQgJiBTaWduYWxGbGFncy5JTlZBTElEIHx8IGZhc3RTa2lwU2VyaWFsaXplKG9iaikpXG4gICAgICAgICAgICA/IE5FRURTX0NPTVBVVEFUSU9OXG4gICAgICAgICAgICA6IG9iai4kdW50cmFja2VkVmFsdWUkO1xuICAgICAgICBpZiAodG9TZXJpYWxpemUgIT09IE5FRURTX0NPTVBVVEFUSU9OKSB7XG4gICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNlcmlhbGl6ZXJTaWduYWxJbXBsKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAob2JqLiRjb21wdXRlUXJsJCBhcyBhbnkgYXMgUVJMSW50ZXJuYWw8U2VyaWFsaXplckFyZzxhbnksIGFueT4+KVxuICAgICAgICAgICAgICAgIC5yZXNvbHZlKClcbiAgICAgICAgICAgICAgICAudGhlbigoYXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgICAgICAgIGlmICgoYXJnIGFzIGFueSkuc2VyaWFsaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSAoYXJnIGFzIGFueSkuc2VyaWFsaXplKHRvU2VyaWFsaXplKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoU2VyaWFsaXplclN5bWJvbCBpbiB0b1NlcmlhbGl6ZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gKHRvU2VyaWFsaXplIGFzIGFueSlbU2VyaWFsaXplclN5bWJvbF0odG9TZXJpYWxpemUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gTkVFRFNfQ09NUFVUQVRJT047XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uUmVzdWx0cy5zZXQob2JqLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgIGRpc2NvdmVyZWRWYWx1ZXMucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlzY292ZXJlZFZhbHVlcy5wdXNoKHRvU2VyaWFsaXplKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iai4kZWZmZWN0cyQpIHtcbiAgICAgICAgICBkaXNjb3ZlcmVkVmFsdWVzLnB1c2gob2JqLiRlZmZlY3RzJCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV3JhcHBlZFNpZ25hbCB1c2VzIHN5bmNRcmwgd2hpY2ggaGFzIG5vIGNhcHR1cmVkIHJlZnNcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFdyYXBwZWRTaWduYWwpIHtcbiAgICAgICAgICBkaXNjb3ZlckVmZmVjdEJhY2tSZWZzKG9ialtfRUZGRUNUX0JBQ0tfUkVGXSwgZGlzY292ZXJlZFZhbHVlcyk7XG4gICAgICAgICAgaWYgKG9iai4kYXJncyQpIHtcbiAgICAgICAgICAgIGRpc2NvdmVyZWRWYWx1ZXMucHVzaCguLi5vYmouJGFyZ3MkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9iai4kaG9zdEVsZW1lbnQkKSB7XG4gICAgICAgICAgICBkaXNjb3ZlcmVkVmFsdWVzLnB1c2gob2JqLiRob3N0RWxlbWVudCQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBDb21wdXRlZFNpZ25hbEltcGwpIHtcbiAgICAgICAgICBkaXNjb3ZlckVmZmVjdEJhY2tSZWZzKG9ialtfRUZGRUNUX0JBQ0tfUkVGXSwgZGlzY292ZXJlZFZhbHVlcyk7XG4gICAgICAgICAgZGlzY292ZXJlZFZhbHVlcy5wdXNoKG9iai4kY29tcHV0ZVFybCQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFRhc2spIHtcbiAgICAgICAgZGlzY292ZXJlZFZhbHVlcy5wdXNoKG9iai4kZWwkLCBvYmouJHFybCQsIG9iai4kc3RhdGUkKTtcbiAgICAgICAgZGlzY292ZXJFZmZlY3RCYWNrUmVmcyhvYmpbX0VGRkVDVF9CQUNLX1JFRl0sIGRpc2NvdmVyZWRWYWx1ZXMpO1xuICAgICAgfSBlbHNlIGlmIChpc1Nzck5vZGUob2JqKSkge1xuICAgICAgICBkaXNjb3ZlclZhbHVlc0ZvclZOb2RlRGF0YShvYmoudm5vZGVEYXRhLCBkaXNjb3ZlcmVkVmFsdWVzKTtcblxuICAgICAgICBpZiAob2JqLmNoaWxkcmVuVk5vZGVEYXRhICYmIG9iai5jaGlsZHJlblZOb2RlRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGRhdGEgb2Ygb2JqLmNoaWxkcmVuVk5vZGVEYXRhKSB7XG4gICAgICAgICAgICBkaXNjb3ZlclZhbHVlc0ZvclZOb2RlRGF0YShkYXRhLCBkaXNjb3ZlcmVkVmFsdWVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNEb21SZWYhKG9iaikpIHtcbiAgICAgICAgZGlzY292ZXJlZFZhbHVlcy5wdXNoKG9iai4kc3NyTm9kZSQuaWQpO1xuICAgICAgfSBlbHNlIGlmIChpc0pTWE5vZGUob2JqKSkge1xuICAgICAgICBkaXNjb3ZlcmVkVmFsdWVzLnB1c2gob2JqLnR5cGUsIG9iai5wcm9wcywgb2JqLmNvbnN0UHJvcHMsIG9iai5jaGlsZHJlbik7XG4gICAgICB9IGVsc2UgaWYgKGlzUXJsKG9iaikpIHtcbiAgICAgICAgb2JqLiRjYXB0dXJlUmVmJCAmJiBvYmouJGNhcHR1cmVSZWYkLmxlbmd0aCAmJiBkaXNjb3ZlcmVkVmFsdWVzLnB1c2goLi4ub2JqLiRjYXB0dXJlUmVmJCk7XG4gICAgICB9IGVsc2UgaWYgKGlzUHJvcHNQcm94eShvYmopKSB7XG4gICAgICAgIGRpc2NvdmVyZWRWYWx1ZXMucHVzaChvYmpbX1ZBUl9QUk9QU10sIG9ialtfQ09OU1RfUFJPUFNdKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKG9iaikpIHtcbiAgICAgICAgb2JqLnRoZW4oXG4gICAgICAgICAgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBwcm9taXNlUmVzdWx0cy5zZXQob2JqLCBbdHJ1ZSwgdmFsdWVdKTtcbiAgICAgICAgICAgIGRpc2NvdmVyZWRWYWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHByb21pc2VSZXN1bHRzLnNldChvYmosIFtmYWxzZSwgZXJyb3JdKTtcbiAgICAgICAgICAgIGRpc2NvdmVyZWRWYWx1ZXMucHVzaChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBwcm9taXNlcy5wdXNoKG9iaik7XG4gICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbkRhdGEpIHtcbiAgICAgICAgZGlzY292ZXJlZFZhbHVlcy5wdXNoKG9iai5kYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIGRpc2NvdmVyZWRWYWx1ZXMucHVzaCguLi5vYmopO1xuICAgICAgfSBlbHNlIGlmIChpc1NlcmlhbGl6ZXJPYmoob2JqKSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBvYmpbU2VyaWFsaXplclN5bWJvbF0ob2JqKTtcbiAgICAgICAgc2VyaWFsaXphdGlvblJlc3VsdHMuc2V0KG9iaiwgcmVzdWx0KTtcbiAgICAgICAgZGlzY292ZXJlZFZhbHVlcy5wdXNoKHJlc3VsdCk7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0TGl0ZXJhbChvYmopKSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG9iaikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgZGlzY292ZXJlZFZhbHVlcy5wdXNoKGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHFFcnJvcihRRXJyb3Iuc2VyaWFsaXplRXJyb3JVbmtub3duVHlwZSwgW29ial0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBQcmltZSB0aGUgcHVtcCB3aXRoIHRoZSByb290IG9iamVjdHMuXG4gICAgZm9yIChjb25zdCByb290IG9mIHJvb3RzKSB7XG4gICAgICB2aXNpdChyb290KTtcbiAgICB9XG5cbiAgICBkbyB7XG4gICAgICB3aGlsZSAoZGlzY292ZXJlZFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gZGlzY292ZXJlZFZhbHVlcy5wb3AoKTtcbiAgICAgICAgaWYgKCEoc2hvdWxkVHJhY2tPYmoob2JqKSB8fCBmcmFtZXdvcmtUeXBlKG9iaikpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSAkd2FzU2VlbiQob2JqKTtcbiAgICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBPYmplY3QgaGFzIG5vdCBiZWVuIHNlZW4geWV0LCBtdXN0IHNjYW4gY29udGVudFxuICAgICAgICAgICRzZWVuJChvYmopO1xuICAgICAgICAgIHZpc2l0KG9iaik7XG4gICAgICAgIH0gZWxzZSBpZiAoaWQgPT09IC0xKSB7XG4gICAgICAgICAgLy8gV2UgYXJlIHNlZWluZyB0aGlzIG9iamVjdCBzZWNvbmQgdGltZSA9PiBwcm9tb3RlIGl0LlxuICAgICAgICAgICRhZGRSb290JChvYmopO1xuICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gc2NhbiB0aGUgY2hpbGRyZW4sIHNpbmNlIHdlIGhhdmUgYWxyZWFkeSBzZWVuIHRoZW0uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGhhdmUgc2Nhbm5lZCBhbGwgdGhlIG9iamVjdHMsIGJ1dCB3ZSBzdGlsbCBoYXZlIHByb21pc2VzIHRvIHJlc29sdmUuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuICAgICAgcHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICB9IHdoaWxlIChkaXNjb3ZlcmVkVmFsdWVzLmxlbmd0aCk7XG4gIH1cbn07XG5cbmNvbnN0IGlzU3NyQXR0cnMgPSAodmFsdWU6IG51bWJlciB8IFNzckF0dHJzKTogdmFsdWUgaXMgU3NyQXR0cnMgPT5cbiAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMDtcblxuY29uc3QgZGlzY292ZXJWYWx1ZXNGb3JWTm9kZURhdGEgPSAodm5vZGVEYXRhOiBWTm9kZURhdGEsIGRpc2NvdmVyZWRWYWx1ZXM6IHVua25vd25bXSkgPT4ge1xuICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZub2RlRGF0YSkge1xuICAgIGlmIChpc1NzckF0dHJzKHZhbHVlKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB2YWx1ZS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBjb25zdCBhdHRyVmFsdWUgPSB2YWx1ZVtpXTtcbiAgICAgICAgaWYgKHR5cGVvZiBhdHRyVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZGlzY292ZXJlZFZhbHVlcy5wdXNoKGF0dHJWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBkaXNjb3ZlckVmZmVjdEJhY2tSZWZzID0gKFxuICBlZmZlY3RzQmFja1JlZnM6IE1hcDxzdHJpbmcsIEVmZmVjdFN1YnNjcmlwdGlvbj4gfCBudWxsLFxuICBkaXNjb3ZlcmVkVmFsdWVzOiB1bmtub3duW11cbikgPT4ge1xuICBpZiAoZWZmZWN0c0JhY2tSZWZzKSB7XG4gICAgZGlzY292ZXJlZFZhbHVlcy5wdXNoKGVmZmVjdHNCYWNrUmVmcyk7XG4gIH1cbn07XG5cbi8qKiBUaGUgcmVzdWx0cyBvZiBQcm9taXNlcyB3ZSBlbmNvdW50ZXJlZCBkdXJpbmcgc2VyaWFsaXphdGlvbi4gKi9cbmNvbnN0IHByb21pc2VSZXN1bHRzID0gbmV3IFdlYWtNYXA8UHJvbWlzZTxhbnk+LCBbYm9vbGVhbiwgdW5rbm93bl0+KCk7XG4vKiogVGhlIHJlc3VsdHMgb2YgY3VzdG9tIHNlcmlhbGl6aW5nIG9iamVjdHMgd2UgZW5jb3VudGVyZWQgZHVyaW5nIHNlcmlhbGl6YXRpb24uICovXG5jb25zdCBzZXJpYWxpemF0aW9uUmVzdWx0cyA9IG5ldyBXZWFrTWFwPG9iamVjdCwgdW5rbm93bj4oKTtcblxuLyoqXG4gKiBGb3JtYXQ6XG4gKlxuICogLSBUaGlzIGVuY29kZXMgdGhlICRyb290cyQgYXJyYXkuXG4gKiAtIFRoZSBvdXRwdXQgaXMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIEpTT04gdmFsdWVzLlxuICogLSBFdmVuIHZhbHVlcyBhcmUgYWx3YXlzIG51bWJlcnMsIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgdGhlIG5leHQgdmFsdWUuXG4gKiAtIE9kZCB2YWx1ZXMgYXJlIG51bWJlcnMsIHN0cmluZ3MgKEpTT04gc3RyaW5naWZpZWQgd2l0aCBgPC9gIGVzY2FwaW5nKSBvciBhcnJheXMgKHNhbWUgZm9ybWF0KS5cbiAqIC0gVGhlcmVmb3JlIHJvb3QgaW5kZXhlcyBuZWVkIHRvIGJlIGRvdWJsZWQgdG8gZ2V0IHRoZSBhY3R1YWwgaW5kZXguXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZShzZXJpYWxpemF0aW9uQ29udGV4dDogU2VyaWFsaXphdGlvbkNvbnRleHQpOiB2b2lkIHtcbiAgY29uc3QgeyAkd3JpdGVyJCwgJGlzU3NyTm9kZSQsICRpc0RvbVJlZiQsICRzZXRQcm9wJCwgJHN0b3JlUHJveHlNYXAkIH0gPSBzZXJpYWxpemF0aW9uQ29udGV4dDtcbiAgbGV0IGRlcHRoID0gLTE7XG4gIC8vIFNraXAgdGhlIHR5cGUgZm9yIHRoZSByb290cyBvdXRwdXRcbiAgbGV0IHdyaXRlVHlwZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG91dHB1dCA9ICh0eXBlOiBudW1iZXIsIHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBhbnlbXSkgPT4ge1xuICAgIGlmICh3cml0ZVR5cGUpIHtcbiAgICAgICR3cml0ZXIkLndyaXRlKGAke3R5cGV9LGApO1xuICAgIH0gZWxzZSB7XG4gICAgICB3cml0ZVR5cGUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgJHdyaXRlciQud3JpdGUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBzID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgbGV0IGFuZ2xlQnJhY2tldElkeDogbnVtYmVyID0gLTE7XG4gICAgICBsZXQgbGFzdElkeCA9IDA7XG4gICAgICB3aGlsZSAoKGFuZ2xlQnJhY2tldElkeCA9IHMuaW5kZXhPZignPC8nLCBsYXN0SWR4KSkgIT09IC0xKSB7XG4gICAgICAgICR3cml0ZXIkLndyaXRlKHMuc2xpY2UobGFzdElkeCwgYW5nbGVCcmFja2V0SWR4KSk7XG4gICAgICAgICR3cml0ZXIkLndyaXRlKCc8XFxcXC8nKTtcbiAgICAgICAgbGFzdElkeCA9IGFuZ2xlQnJhY2tldElkeCArIDI7XG4gICAgICB9XG4gICAgICAkd3JpdGVyJC53cml0ZShsYXN0SWR4ID09PSAwID8gcyA6IHMuc2xpY2UobGFzdElkeCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXB0aCsrO1xuICAgICAgJHdyaXRlciQud3JpdGUoJ1snKTtcbiAgICAgIGxldCBzZXBhcmF0b3IgPSBmYWxzZTtcbiAgICAgIC8vIFRPRE8gb25seSB1bnRpbCBsYXN0IG5vbi1udWxsIHZhbHVlXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzZXBhcmF0b3IpIHtcbiAgICAgICAgICAkd3JpdGVyJC53cml0ZSgnLCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlcGFyYXRvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVWYWx1ZSh2YWx1ZVtpXSwgaSk7XG4gICAgICB9XG4gICAgICAkd3JpdGVyJC53cml0ZSgnXScpO1xuICAgICAgZGVwdGgtLTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgd3JpdGVWYWx1ZSA9ICh2YWx1ZTogdW5rbm93biwgaWR4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoZmFzdFNraXBTZXJpYWxpemUodmFsdWUgYXMgb2JqZWN0KSkge1xuICAgICAgb3V0cHV0KFR5cGVJZHMuQ29uc3RhbnQsIENvbnN0YW50cy5VbmRlZmluZWQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgICAgb3V0cHV0KFR5cGVJZHMuQmlnSW50LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBvdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgdmFsdWUgPyBDb25zdGFudHMuVHJ1ZSA6IENvbnN0YW50cy5GYWxzZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gU2xvdCkge1xuICAgICAgICBvdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLlNsb3QpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gRnJhZ21lbnQpIHtcbiAgICAgICAgb3V0cHV0KFR5cGVJZHMuQ29uc3RhbnQsIENvbnN0YW50cy5GcmFnbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKGlzUXJsKHZhbHVlKSkge1xuICAgICAgICBjb25zdCBxcmwgPSBxcmxUb1N0cmluZyhzZXJpYWxpemF0aW9uQ29udGV4dCwgdmFsdWUpO1xuICAgICAgICBjb25zdCBpZCA9IHNlcmlhbGl6YXRpb25Db250ZXh0LiRhZGRSb290JChxcmwpO1xuICAgICAgICBvdXRwdXQoVHlwZUlkcy5RUkwsIGlkKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNRd2lrQ29tcG9uZW50KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBbcXJsXTogW1FSTEludGVybmFsXSA9ICh2YWx1ZSBhcyBhbnkpW1NFUklBTElaQUJMRV9TVEFURV07XG4gICAgICAgIHNlcmlhbGl6YXRpb25Db250ZXh0LiRyZW5kZXJTeW1ib2xzJC5hZGQocXJsLiRzeW1ib2wkKTtcbiAgICAgICAgb3V0cHV0KFR5cGVJZHMuQ29tcG9uZW50LCBbcXJsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPIHRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGNvbXBvbmVudHMgd2l0aCByZW5kZXIgcHJvcHMgbGlrZSBSZXNvdXJjZVxuICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3Qgc2VyaWFsaXplIGZ1bmN0aW9uIChpZ25vcmluZyBmb3Igbm93KTogJyArIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICBvdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLlVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICBvdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLk5hTik7XG4gICAgICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgIG91dHB1dChcbiAgICAgICAgICBUeXBlSWRzLkNvbnN0YW50LFxuICAgICAgICAgIHZhbHVlIDwgMCA/IENvbnN0YW50cy5OZWdhdGl2ZUluZmluaXR5IDogQ29uc3RhbnRzLlBvc2l0aXZlSW5maW5pdHlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgIG91dHB1dChUeXBlSWRzLkNvbnN0YW50LCBDb25zdGFudHMuTWF4U2FmZUludCk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAtIDEpIHtcbiAgICAgICAgb3V0cHV0KFR5cGVJZHMuQ29uc3RhbnQsIENvbnN0YW50cy5BbG1vc3RNYXhTYWZlSW50KTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgIG91dHB1dChUeXBlSWRzLkNvbnN0YW50LCBDb25zdGFudHMuTWluU2FmZUludCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQoVHlwZUlkcy5OdW1iZXIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gRU1QVFlfQVJSQVkpIHtcbiAgICAgICAgb3V0cHV0KFR5cGVJZHMuQ29uc3RhbnQsIENvbnN0YW50cy5FTVBUWV9BUlJBWSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBFTVBUWV9PQkopIHtcbiAgICAgICAgb3V0cHV0KFR5cGVJZHMuQ29uc3RhbnQsIENvbnN0YW50cy5FTVBUWV9PQkopO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBvdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLk51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgICAgd3JpdGVPYmplY3RWYWx1ZSh2YWx1ZSwgaWR4KTtcbiAgICAgICAgZGVwdGgtLTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgb3V0cHV0KFR5cGVJZHMuQ29uc3RhbnQsIENvbnN0YW50cy5FbXB0eVN0cmluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBOb3RlLCBpbiB2MSB3ZSB3ZXJlIHJldXNpbmcgRE9NIHRleHQsIGJ1dCB0aGF0IGlzIHRvbyBkYW5nZXJvdXMgd2l0aCB0cmFuc2xhdGlvbiBleHRlbnNpb25zIGNoYW5naW5nIHRoZSB0ZXh0XG4gICAgICAgIGNvbnN0IHNlZW4gPSBkZXB0aCA+IDEgJiYgc2VyaWFsaXphdGlvbkNvbnRleHQuJHdhc1NlZW4kKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWVuID09PSAnbnVtYmVyJyAmJiBzZWVuID49IDApIHtcbiAgICAgICAgICBvdXRwdXQoVHlwZUlkcy5Sb290UmVmLCBzZWVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXQoVHlwZUlkcy5TdHJpbmcsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3V0cHV0KFR5cGVJZHMuQ29uc3RhbnQsIENvbnN0YW50cy5VbmRlZmluZWQpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IE5FRURTX0NPTVBVVEFUSU9OKSB7XG4gICAgICBvdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLk5FRURTX0NPTVBVVEFUSU9OKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTVE9SRV9BTExfUFJPUFMpIHtcbiAgICAgIG91dHB1dChUeXBlSWRzLkNvbnN0YW50LCBDb25zdGFudHMuU1RPUkVfQUxMX1BST1BTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5zZXJpYWxpemVFcnJvclVua25vd25UeXBlLCBbdHlwZW9mIHZhbHVlXSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHdyaXRlT2JqZWN0VmFsdWUgPSAodmFsdWU6IHt9LCBpZHg6IG51bWJlcikgPT4ge1xuICAgIC8qKlxuICAgICAqIFdlIHN0YXJ0IGF0IC0xIGFuZCB0aGVuIHNlcmlhbGl6ZSB0aGUgcm9vdHMgYXJyYXksIHdoaWNoIGlzIGFuIG9iamVjdCBzbyBpbmNyZWFzZXMgZGVwdGggdG9cbiAgICAgKiAwLiBUaGUgb2JqZWN0IHdyaXRlciB0aGVuIG91dHB1dHMgYW4gYXJyYXkgb2JqZWN0ICh3aXRob3V0IHR5cGUgcHJlZml4KSBhbmQgdGhpcyBpbmNyZWFzZXNcbiAgICAgKiB0aGUgZGVwdGggZm9yIHRoZSBvYmplY3RzIHdpdGhpbiAoZGVwdGggMSkuIFRoZW4gd2hlbiB3cml0ZVZhbHVlIGVuY291bnRlcnMgZWFjaCByb290IG9iamVjdCxcbiAgICAgKiBpdCB3aWxsIGluY3JlYXNlIHRoZSBkZXB0aCBhZ2Fpbiwgc28gaXQncyBhdCAyLlxuICAgICAqL1xuICAgIGNvbnN0IGlzUm9vdE9iamVjdCA9IGRlcHRoID09PSAyO1xuICAgIC8vIE9iamVjdHMgYXJlIHRoZSBvbmx5IHdheSB0byBjcmVhdGUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIC8vIFNvIHRoZSBmaXJzdCB0aGluZyB0byB0byBpcyB0byBzZWUgaWYgd2UgaGF2ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG4gICAgLy8gKE5PVEU6IEZvciByb290IG9iamVjdHMgd2UgbmVlZCB0byBzZXJpYWxpemUgdGhlbSByZWdhcmRsZXNzIGlmIHdlIGhhdmUgc2VlblxuICAgIC8vICAgICAgICB0aGVtIGJlZm9yZSwgb3RoZXJ3aXNlIHRoZSByb290IG9iamVjdCByZWZlcmVuY2Ugd2lsbCBwb2ludCB0byBpdHNlbGYuKVxuICAgIC8vIEFsc28gbm90ZSB0aGF0IGRlcHRoIHdpbGwgYmUgMiBmb3Igb2JqZWN0cyBpbiByb290XG4gICAgaWYgKGRlcHRoID4gMikge1xuICAgICAgY29uc3Qgc2VlbiA9IHNlcmlhbGl6YXRpb25Db250ZXh0LiR3YXNTZWVuJCh2YWx1ZSk7XG4gICAgICBpZiAodHlwZW9mIHNlZW4gPT09ICdudW1iZXInICYmIHNlZW4gPj0gMCkge1xuICAgICAgICAvLyBXZSBoYXZlIHNlZW4gdGhpcyBvYmplY3QgYmVmb3JlLCBzbyB3ZSBjYW4gc2VyaWFsaXplIGl0IGFzIGEgcmVmZXJlbmNlLlxuICAgICAgICAvLyBPdGhlcndpc2Ugc2VyaWFsaXplIGFzIG5vcm1hbFxuICAgICAgICBvdXRwdXQoVHlwZUlkcy5Sb290UmVmLCBzZWVuKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNQcm9wc1Byb3h5KHZhbHVlKSkge1xuICAgICAgY29uc3QgdmFyUHJvcHMgPSB2YWx1ZVtfVkFSX1BST1BTXTtcbiAgICAgIGNvbnN0IGNvbnN0UHJvcHMgPSB2YWx1ZVtfQ09OU1RfUFJPUFNdO1xuICAgICAgY29uc3Qgb3V0ID0gY29uc3RQcm9wc1xuICAgICAgICA/IFt2YXJQcm9wcywgY29uc3RQcm9wc11cbiAgICAgICAgOiBPYmplY3Qua2V5cyh2YXJQcm9wcykubGVuZ3RoXG4gICAgICAgICAgPyBbdmFyUHJvcHNdXG4gICAgICAgICAgOiAwO1xuICAgICAgb3V0cHV0KFR5cGVJZHMuUHJvcHNQcm94eSwgb3V0KTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uRGF0YSkge1xuICAgICAgb3V0cHV0KFR5cGVJZHMuRWZmZWN0RGF0YSwgW3ZhbHVlLmRhdGEuJHNjb3BlZFN0eWxlSWRQcmVmaXgkLCB2YWx1ZS5kYXRhLiRpc0NvbnN0JF0pO1xuICAgIH0gZWxzZSBpZiAoaXNTdG9yZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChpc1Jlc291cmNlKHZhbHVlKSkge1xuICAgICAgICAvLyBsZXQgcmVuZGVyIGtub3cgYWJvdXQgdGhlIHJlc291cmNlXG4gICAgICAgIHNlcmlhbGl6YXRpb25Db250ZXh0LiRyZXNvdXJjZXMkLmFkZCh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHByb21pc2VSZXN1bHRzLmdldCh2YWx1ZS52YWx1ZSk7XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5zZXJpYWxpemVFcnJvclVudmlzaXRlZCwgWydyZXNvdXJjZSddKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIHRoZSBlZmZlY3RzIGluY2x1ZGUgdGhlIHJlc291cmNlcmV0dXJuIHdoaWNoIGhhcyBkdXBsaWNhdGUgZGF0YVxuICAgICAgICBvdXRwdXQoVHlwZUlkcy5SZXNvdXJjZSwgWy4uLnJlcywgZ2V0U3RvcmVIYW5kbGVyKHZhbHVlKSEuJGVmZmVjdHMkXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdG9yZUhhbmRsZXIgPSBnZXRTdG9yZUhhbmRsZXIodmFsdWUpITtcbiAgICAgICAgY29uc3Qgc3RvcmVUYXJnZXQgPSBnZXRTdG9yZVRhcmdldCh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGZsYWdzID0gc3RvcmVIYW5kbGVyLiRmbGFncyQ7XG4gICAgICAgIGNvbnN0IGVmZmVjdHMgPSBzdG9yZUhhbmRsZXIuJGVmZmVjdHMkO1xuXG4gICAgICAgIGNvbnN0IGlubmVyU3RvcmVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzdG9yZVRhcmdldCkge1xuICAgICAgICAgIGNvbnN0IHByb3BWYWx1ZSA9IChzdG9yZVRhcmdldCBhcyBhbnkpW3Byb3BdO1xuICAgICAgICAgIGlmICgkc3RvcmVQcm94eU1hcCQuaGFzKHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyU3RvcmUgPSAkc3RvcmVQcm94eU1hcCQuZ2V0KHByb3BWYWx1ZSk7XG4gICAgICAgICAgICBpbm5lclN0b3Jlcy5wdXNoKGlubmVyU3RvcmUpO1xuICAgICAgICAgICAgc2VyaWFsaXphdGlvbkNvbnRleHQuJGFkZFJvb3QkKGlubmVyU3RvcmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG91dCA9IFtzdG9yZVRhcmdldCwgZmxhZ3MsIGVmZmVjdHMsIC4uLmlubmVyU3RvcmVzXTtcbiAgICAgICAgd2hpbGUgKG91dFtvdXQubGVuZ3RoIC0gMV0gPT0gbnVsbCkge1xuICAgICAgICAgIG91dC5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXQoQXJyYXkuaXNBcnJheShzdG9yZVRhcmdldCkgPyBUeXBlSWRzLlN0b3JlQXJyYXkgOiBUeXBlSWRzLlN0b3JlLCBvdXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTZXJpYWxpemVyT2JqKHZhbHVlKSkge1xuICAgICAgbGV0IHJlc3VsdCA9IHNlcmlhbGl6YXRpb25SZXN1bHRzLmdldCh2YWx1ZSk7XG4gICAgICAvLyBzcGVjaWFsIGNhc2U6IHdlIHVud3JhcCBQcm9taXNlc1xuICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VSZXN1bHQgPSBwcm9taXNlUmVzdWx0cy5nZXQocmVzdWx0KSE7XG4gICAgICAgIGlmICghcHJvbWlzZVJlc3VsdFswXSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocHJvbWlzZVJlc3VsdFsxXSk7XG4gICAgICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5zZXJpYWxpemVyU3ltYm9sUmVqZWN0ZWRQcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSBwcm9taXNlUmVzdWx0WzFdO1xuICAgICAgfVxuICAgICAgZGVwdGgtLTtcbiAgICAgIHdyaXRlVmFsdWUocmVzdWx0LCBpZHgpO1xuICAgICAgZGVwdGgrKztcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0TGl0ZXJhbCh2YWx1ZSkpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBvdXRwdXQoVHlwZUlkcy5BcnJheSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3V0OiBhbnlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSAmJlxuICAgICAgICAgICAgIWZhc3RTa2lwU2VyaWFsaXplKCh2YWx1ZSBhcyBhbnkpW2tleV0pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBvdXQucHVzaChrZXksICh2YWx1ZSBhcyBhbnkpW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIGlmICFvdXQubGVuZ3RoLCBvdXRwdXQgMCBhbmQgcmVzdG9yZSBhcyB7fVxuICAgICAgICBvdXRwdXQoVHlwZUlkcy5PYmplY3QsIG91dCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgkaXNEb21SZWYkKHZhbHVlKSkge1xuICAgICAgdmFsdWUuJHNzck5vZGUkLnZub2RlRGF0YVswXSB8PSBWTm9kZURhdGFGbGFnLlNFUklBTElaRTtcbiAgICAgIG91dHB1dChUeXBlSWRzLlJlZlZOb2RlLCB2YWx1ZS4kc3NyTm9kZSQuaWQpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTaWduYWxJbXBsKSB7XG4gICAgICAvKipcbiAgICAgICAqIFNwZWNpYWwgY2FzZTogd2hlbiBhIFNpZ25hbCB2YWx1ZSBpcyBhbiBTU1JOb2RlLCBpdCBhbHdheXMgbmVlZHMgdG8gYmUgYSBET00gcmVmIGluc3RlYWQuXG4gICAgICAgKiBJdCBjYW4gbmV2ZXIgYmUgbWVhbnQgdG8gYmVjb21lIGEgdk5vZGUsIGJlY2F1c2Ugdk5vZGVzIGFyZSBpbnRlcm5hbCBvbmx5LlxuICAgICAgICovXG4gICAgICBjb25zdCBpc1NlcmlhbGl6ZWQgPSB2YWx1ZSBpbnN0YW5jZW9mIFNlcmlhbGl6ZXJTaWduYWxJbXBsO1xuICAgICAgY29uc3QgdjogdW5rbm93biA9XG4gICAgICAgICFpc1NlcmlhbGl6ZWQgJiZcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBDb21wdXRlZFNpZ25hbEltcGwgJiZcbiAgICAgICAgKHZhbHVlLiRmbGFncyQgJiBTaWduYWxGbGFncy5JTlZBTElEIHx8IGZhc3RTa2lwU2VyaWFsaXplKHZhbHVlLiR1bnRyYWNrZWRWYWx1ZSQpKVxuICAgICAgICAgID8gTkVFRFNfQ09NUFVUQVRJT05cbiAgICAgICAgICA6IHZhbHVlLiR1bnRyYWNrZWRWYWx1ZSQ7XG5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFdyYXBwZWRTaWduYWwpIHtcbiAgICAgICAgb3V0cHV0KFR5cGVJZHMuV3JhcHBlZFNpZ25hbCwgW1xuICAgICAgICAgIC4uLnNlcmlhbGl6ZVdyYXBwaW5nRm4oc2VyaWFsaXphdGlvbkNvbnRleHQsIHZhbHVlKSxcbiAgICAgICAgICBmaWx0ZXJFZmZlY3RCYWNrUmVmcyh2YWx1ZVtfRUZGRUNUX0JBQ0tfUkVGXSksXG4gICAgICAgICAgdixcbiAgICAgICAgICB2YWx1ZS4kZmxhZ3MkLFxuICAgICAgICAgIHZhbHVlLiRob3N0RWxlbWVudCQsXG4gICAgICAgICAgLi4uKHZhbHVlLiRlZmZlY3RzJCB8fCBbXSksXG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENvbXB1dGVkU2lnbmFsSW1wbCkge1xuICAgICAgICBjb25zdCBvdXQ6IFtRUkxJbnRlcm5hbCwgU2V0PEVmZmVjdFN1YnNjcmlwdGlvbj4gfCBudWxsLCB1bmtub3duP10gPSBbXG4gICAgICAgICAgdmFsdWUuJGNvbXB1dGVRcmwkLFxuICAgICAgICAgIC8vIFRPRE8gY2hlY2sgaWYgd2UgY2FuIHVzZSBkb21WUmVmIGZvciBlZmZlY3RzXG4gICAgICAgICAgdmFsdWUuJGVmZmVjdHMkLFxuICAgICAgICBdO1xuICAgICAgICBpZiAodiAhPT0gTkVFRFNfQ09NUFVUQVRJT04pIHtcbiAgICAgICAgICBpZiAoaXNTZXJpYWxpemVkKSB7XG4gICAgICAgICAgICBvdXQucHVzaChzZXJpYWxpemF0aW9uUmVzdWx0cy5nZXQodmFsdWUpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0LnB1c2godik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG91dHB1dChpc1NlcmlhbGl6ZWQgPyBUeXBlSWRzLlNlcmlhbGl6ZXJTaWduYWwgOiBUeXBlSWRzLkNvbXB1dGVkU2lnbmFsLCBvdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0KFR5cGVJZHMuU2lnbmFsLCBbdiwgLi4uKHZhbHVlLiRlZmZlY3RzJCB8fCBbXSldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgICBvdXRwdXQoVHlwZUlkcy5VUkwsIHZhbHVlLmhyZWYpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBvdXRwdXQoVHlwZUlkcy5EYXRlLCBOdW1iZXIuaXNOYU4odmFsdWUudmFsdWVPZigpKSA/ICcnIDogdmFsdWUudmFsdWVPZigpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBvdXRwdXQoVHlwZUlkcy5SZWdleCwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBjb25zdCBvdXQ6IGFueVtdID0gW3ZhbHVlLm1lc3NhZ2VdO1xuICAgICAgY29uc3QgZXh0cmFQcm9wcyA9IE9iamVjdC5lbnRyaWVzKHZhbHVlKS5mbGF0KCk7XG4gICAgICBpZiAoZXh0cmFQcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgb3V0LnB1c2goZXh0cmFQcm9wcyk7XG4gICAgICB9XG4gICAgICAvLy8gSW4gcHJvZHVjdGlvbiB3ZSBkb24ndCB3YW50IHRvIGxlYWsgdGhlIHN0YWNrIHRyYWNlLlxuICAgICAgaWYgKGlzRGV2KSB7XG4gICAgICAgIG91dC5wdXNoKHZhbHVlLnN0YWNrKTtcbiAgICAgIH1cbiAgICAgIG91dHB1dChUeXBlSWRzLkVycm9yLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAoJGlzU3NyTm9kZSQodmFsdWUpKSB7XG4gICAgICBpZiAoaXNSb290T2JqZWN0KSB7XG4gICAgICAgIC8vIFRlbGwgdGhlIFNzck5vZGUgd2hpY2ggcm9vdCBpZCBpdCBpc1xuICAgICAgICAkc2V0UHJvcCQodmFsdWUsIEVMRU1FTlRfSUQsIFN0cmluZyhpZHgpKTtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBvdXRwdXQgYmVmb3JlIHRoZSB2bm9kZSBvdmVyd3JpdGVzIGl0cyB2YWx1ZXNcbiAgICAgICAgb3V0cHV0KFR5cGVJZHMuVk5vZGUsIHZhbHVlLmlkKTtcbiAgICAgICAgY29uc3Qgdk5vZGVEYXRhID0gdmFsdWUudm5vZGVEYXRhO1xuICAgICAgICBpZiAodk5vZGVEYXRhKSB7XG4gICAgICAgICAgc2VyaWFsaXphdGlvbkNvbnRleHQuJHByZXBWTm9kZURhdGEkPy4odk5vZGVEYXRhKTtcbiAgICAgICAgICB2Tm9kZURhdGFbMF0gfD0gVk5vZGVEYXRhRmxhZy5TRVJJQUxJWkU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmNoaWxkcmVuVk5vZGVEYXRhKSB7XG4gICAgICAgICAgZm9yIChjb25zdCB2Tm9kZURhdGEgb2YgdmFsdWUuY2hpbGRyZW5WTm9kZURhdGEpIHtcbiAgICAgICAgICAgIHZOb2RlRGF0YVswXSB8PSBWTm9kZURhdGFGbGFnLlNFUklBTElaRTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFByb21vdGUgdGhlIHZub2RlIHRvIGEgcm9vdFxuICAgICAgICBzZXJpYWxpemF0aW9uQ29udGV4dC4kYWRkUm9vdCQodmFsdWUpO1xuICAgICAgICBvdXRwdXQoVHlwZUlkcy5Sb290UmVmLCBzZXJpYWxpemF0aW9uQ29udGV4dC4kcm9vdHMkLmxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAvLyBGb3JtRGF0YSBpcyBnZW5lcmFsbHkgdXNlZCBvbmx5IG9uY2Ugc28gZG9uJ3QgYm90aGVyIHdpdGggcmVmZXJlbmNlc1xuICAgICAgY29uc3QgYXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgICB2YWx1ZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgYXJyYXkucHVzaChrZXksIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcnJheS5wdXNoKGtleSwgdmFsdWUubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb3V0cHV0KFR5cGVJZHMuRm9ybURhdGEsIGFycmF5KTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgICBvdXRwdXQoVHlwZUlkcy5VUkxTZWFyY2hQYXJhbXMsIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgIG91dHB1dChUeXBlSWRzLlNldCwgWy4uLnZhbHVlLnZhbHVlcygpXSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgY29uc3QgY29tYmluZWQgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHZhbHVlLmVudHJpZXMoKSkge1xuICAgICAgICBjb21iaW5lZC5wdXNoKGssIHYpO1xuICAgICAgfVxuICAgICAgb3V0cHV0KFR5cGVJZHMuTWFwLCBjb21iaW5lZCk7XG4gICAgfSBlbHNlIGlmIChpc0pTWE5vZGUodmFsdWUpKSB7XG4gICAgICBvdXRwdXQoVHlwZUlkcy5KU1hOb2RlLCBbXG4gICAgICAgIHZhbHVlLnR5cGUsXG4gICAgICAgIHZhbHVlLnZhclByb3BzLFxuICAgICAgICB2YWx1ZS5jb25zdFByb3BzLFxuICAgICAgICB2YWx1ZS5jaGlsZHJlbixcbiAgICAgICAgdmFsdWUuZmxhZ3MsXG4gICAgICAgIHZhbHVlLmtleSxcbiAgICAgIF0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBUYXNrKSB7XG4gICAgICBjb25zdCBvdXQ6IHVua25vd25bXSA9IFtcbiAgICAgICAgdmFsdWUuJHFybCQsXG4gICAgICAgIHZhbHVlLiRmbGFncyQsXG4gICAgICAgIHZhbHVlLiRpbmRleCQsXG4gICAgICAgIHZhbHVlLiRlbCQsXG4gICAgICAgIHZhbHVlW19FRkZFQ1RfQkFDS19SRUZdLFxuICAgICAgICB2YWx1ZS4kc3RhdGUkLFxuICAgICAgXTtcbiAgICAgIHdoaWxlIChvdXRbb3V0Lmxlbmd0aCAtIDFdID09IG51bGwpIHtcbiAgICAgICAgb3V0LnBvcCgpO1xuICAgICAgfVxuICAgICAgb3V0cHV0KFR5cGVJZHMuVGFzaywgb3V0KTtcbiAgICB9IGVsc2UgaWYgKGlzUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHByb21pc2VSZXN1bHRzLmdldCh2YWx1ZSk7XG4gICAgICBpZiAoIXJlcykge1xuICAgICAgICB0aHJvdyBxRXJyb3IoUUVycm9yLnNlcmlhbGl6ZUVycm9yVW52aXNpdGVkLCBbJ3Byb21pc2UnXSk7XG4gICAgICB9XG4gICAgICBvdXRwdXQoVHlwZUlkcy5Qcm9taXNlLCByZXMpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICBsZXQgYnVmID0gJyc7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgdmFsdWUpIHtcbiAgICAgICAgYnVmICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICB9XG4gICAgICBjb25zdCBvdXQgPSBidG9hKGJ1ZikucmVwbGFjZSgvPSskLywgJycpO1xuICAgICAgb3V0cHV0KFR5cGVJZHMuVWludDhBcnJheSwgb3V0KTtcbiAgICB9IGVsc2UgaWYgKHZub2RlX2lzVk5vZGUodmFsdWUpKSB7XG4gICAgICBvdXRwdXQoVHlwZUlkcy5Db25zdGFudCwgQ29uc3RhbnRzLlVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IHFFcnJvcihRRXJyb3Iuc2VyaWFsaXplRXJyb3JVbmtub3duVHlwZSwgW3R5cGVvZiB2YWx1ZV0pO1xuICAgIH1cbiAgfTtcblxuICB3cml0ZVZhbHVlKHNlcmlhbGl6YXRpb25Db250ZXh0LiRyb290cyQsIC0xKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRWZmZWN0QmFja1JlZnMoZWZmZWN0QmFja1JlZjogTWFwPHN0cmluZywgRWZmZWN0U3Vic2NyaXB0aW9uPiB8IG51bGwpIHtcbiAgbGV0IGVmZmVjdEJhY2tSZWZUb1NlcmlhbGl6ZTogTWFwPHN0cmluZywgRWZmZWN0U3Vic2NyaXB0aW9uPiB8IG51bGwgPSBudWxsO1xuICBpZiAoZWZmZWN0QmFja1JlZikge1xuICAgIGZvciAoY29uc3QgW2VmZmVjdFByb3AsIGVmZmVjdF0gb2YgZWZmZWN0QmFja1JlZikge1xuICAgICAgaWYgKGVmZmVjdFtFZmZlY3RTdWJzY3JpcHRpb25Qcm9wLkJBQ0tfUkVGXSkge1xuICAgICAgICBlZmZlY3RCYWNrUmVmVG9TZXJpYWxpemUgfHw9IG5ldyBNYXA8c3RyaW5nLCBFZmZlY3RTdWJzY3JpcHRpb24+KCk7XG4gICAgICAgIGVmZmVjdEJhY2tSZWZUb1NlcmlhbGl6ZS5zZXQoZWZmZWN0UHJvcCwgZWZmZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVmZmVjdEJhY2tSZWZUb1NlcmlhbGl6ZTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplV3JhcHBpbmdGbihcbiAgc2VyaWFsaXphdGlvbkNvbnRleHQ6IFNlcmlhbGl6YXRpb25Db250ZXh0LFxuICB2YWx1ZTogV3JhcHBlZFNpZ25hbDxhbnk+XG4pIHtcbiAgLy8gaWYgdmFsdWUgaXMgYW4gb2JqZWN0IHRoZW4gd2UgbmVlZCB0byB3cmFwIHRoaXMgaW4gKClcbiAgaWYgKHZhbHVlLiRmdW5jU3RyJCAmJiB2YWx1ZS4kZnVuY1N0ciRbMF0gPT09ICd7Jykge1xuICAgIHZhbHVlLiRmdW5jU3RyJCA9IGAoJHt2YWx1ZS4kZnVuY1N0ciR9KWA7XG4gIH1cbiAgY29uc3Qgc3luY0ZuSWQgPSBzZXJpYWxpemF0aW9uQ29udGV4dC4kYWRkU3luY0ZuJChcbiAgICB2YWx1ZS4kZnVuY1N0ciQsXG4gICAgdmFsdWUuJGFyZ3MkLmxlbmd0aCxcbiAgICB2YWx1ZS4kZnVuYyRcbiAgKTtcbiAgLy8gVE9ETyBudWxsIGlmIG5vIGFyZ3NcbiAgcmV0dXJuIFtzeW5jRm5JZCwgdmFsdWUuJGFyZ3MkXSBhcyBjb25zdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHFybFRvU3RyaW5nKFxuICBzZXJpYWxpemF0aW9uQ29udGV4dDogU2VyaWFsaXphdGlvbkNvbnRleHQsXG4gIHZhbHVlOiBRUkxJbnRlcm5hbCB8IFN5bmNRUkxJbnRlcm5hbFxuKSB7XG4gIGxldCBzeW1ib2wgPSB2YWx1ZS4kc3ltYm9sJDtcbiAgbGV0IGNodW5rID0gdmFsdWUuJGNodW5rJDtcblxuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIGlmIChwbGF0Zm9ybSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHBsYXRmb3JtLmNodW5rRm9yU3ltYm9sKHN5bWJvbCwgY2h1bmssIHZhbHVlLmRldj8uZmlsZSk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY2h1bmsgPSByZXN1bHRbMV07XG4gICAgICBzeW1ib2wgPSByZXN1bHRbMF07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaXNTeW5jID0gaXNTeW5jUXJsKHZhbHVlKTtcbiAgaWYgKCFpc1N5bmMpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgc3ltYm9sIHdlIG5lZWQgdG8gcmVzb2x2ZSB0aGUgY2h1bmsuXG4gICAgaWYgKCFjaHVuaykge1xuICAgICAgY2h1bmsgPSBzZXJpYWxpemF0aW9uQ29udGV4dC4kc3ltYm9sVG9DaHVua1Jlc29sdmVyJCh2YWx1ZS4kaGFzaCQpO1xuICAgIH1cbiAgICAvLyBpbiBEZXYgbW9kZSB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHN5bWJvbHNcbiAgICBpZiAoaXNEZXYpIHtcbiAgICAgIGxldCBiYWNrQ2hhbm5lbDogTWFwPHN0cmluZywgRnVuY3Rpb24+ID0gKGdsb2JhbFRoaXMgYXMgYW55KVtRUkxfUlVOVElNRV9DSFVOS107XG4gICAgICBpZiAoIWJhY2tDaGFubmVsKSB7XG4gICAgICAgIGJhY2tDaGFubmVsID0gKGdsb2JhbFRoaXMgYXMgYW55KVtRUkxfUlVOVElNRV9DSFVOS10gPSBuZXcgTWFwKCk7XG4gICAgICB9XG4gICAgICBiYWNrQ2hhbm5lbC5zZXQodmFsdWUuJHN5bWJvbCQsICh2YWx1ZSBhcyBhbnkpLl9kZXZPbmx5U3ltYm9sUmVmKTtcbiAgICAgIGlmICghY2h1bmspIHtcbiAgICAgICAgY2h1bmsgPSBRUkxfUlVOVElNRV9DSFVOSztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjaHVuaykge1xuICAgICAgdGhyb3cgcUVycm9yKFFFcnJvci5xcmxNaXNzaW5nQ2h1bmssIFt2YWx1ZS4kc3ltYm9sJF0pO1xuICAgIH1cbiAgICBpZiAoY2h1bmsuc3RhcnRzV2l0aCgnLi8nKSkge1xuICAgICAgY2h1bmsgPSBjaHVuay5zbGljZSgyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZm4gPSB2YWx1ZS5yZXNvbHZlZCBhcyBGdW5jdGlvbjtcbiAgICBjaHVuayA9ICcnO1xuICAgIC8vIFRPRE8gdGVzdCB0aGF0IHByb3ZpZGVkIHN0cmluZ2lmaWVkIGZuIGlzIHVzZWRcbiAgICBzeW1ib2wgPSBTdHJpbmcoc2VyaWFsaXphdGlvbkNvbnRleHQuJGFkZFN5bmNGbiQobnVsbCwgMCwgZm4pKTtcbiAgfVxuXG4gIGxldCBxcmxTdHJpbmdJbmxpbmUgPSBgJHtjaHVua30jJHtzeW1ib2x9YDtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuJGNhcHR1cmVSZWYkKSAmJiB2YWx1ZS4kY2FwdHVyZVJlZiQubGVuZ3RoID4gMCkge1xuICAgIGxldCBzZXJpYWxpemVkUmVmZXJlbmNlcyA9ICcnO1xuICAgIC8vIGhvdC1wYXRoIG9wdGltaXphdGlvblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUuJGNhcHR1cmVSZWYkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgc2VyaWFsaXplZFJlZmVyZW5jZXMgKz0gJyAnO1xuICAgICAgfVxuICAgICAgLy8gV2UgcmVmZXIgYnkgaWQgc28gZXZlcnkgY2FwdHVyZSBuZWVkcyB0byBiZSBhIHJvb3RcbiAgICAgIHNlcmlhbGl6ZWRSZWZlcmVuY2VzICs9IHNlcmlhbGl6YXRpb25Db250ZXh0LiRhZGRSb290JCh2YWx1ZS4kY2FwdHVyZVJlZiRbaV0pO1xuICAgIH1cbiAgICBxcmxTdHJpbmdJbmxpbmUgKz0gYFske3NlcmlhbGl6ZWRSZWZlcmVuY2VzfV1gO1xuICB9IGVsc2UgaWYgKHZhbHVlLiRjYXB0dXJlJCAmJiB2YWx1ZS4kY2FwdHVyZSQubGVuZ3RoID4gMCkge1xuICAgIHFybFN0cmluZ0lubGluZSArPSBgWyR7dmFsdWUuJGNhcHR1cmUkLmpvaW4oJyAnKX1dYDtcbiAgfVxuICByZXR1cm4gcXJsU3RyaW5nSW5saW5lO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSBkYXRhIHRvIHN0cmluZyB1c2luZyBTZXJpYWxpemF0aW9uQ29udGV4dC5cbiAqXG4gKiBAcGFyYW0gZGF0YSAtIERhdGEgdG8gc2VyaWFsaXplXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9zZXJpYWxpemUoZGF0YTogdW5rbm93bltdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2VyaWFsaXphdGlvbkNvbnRleHQgPSBjcmVhdGVTZXJpYWxpemF0aW9uQ29udGV4dChcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgKCkgPT4gJycsXG4gICAgKCkgPT4gJycsXG4gICAgKCkgPT4ge30sXG4gICAgbmV3IFdlYWtNYXA8YW55LCBhbnk+KClcbiAgKTtcblxuICBmb3IgKGNvbnN0IHJvb3Qgb2YgZGF0YSkge1xuICAgIHNlcmlhbGl6YXRpb25Db250ZXh0LiRhZGRSb290JChyb290KTtcbiAgfVxuICBhd2FpdCBzZXJpYWxpemF0aW9uQ29udGV4dC4kYnJlYWtDaXJjdWxhckRlcHNBbmRBd2FpdFByb21pc2VzJCgpO1xuICBzZXJpYWxpemF0aW9uQ29udGV4dC4kc2VyaWFsaXplJCgpO1xuICByZXR1cm4gc2VyaWFsaXphdGlvbkNvbnRleHQuJHdyaXRlciQudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSBkYXRhIGZyb20gc3RyaW5nIHRvIGFuIGFycmF5IG9mIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIHJhd1N0YXRlRGF0YSAtIERhdGEgdG8gZGVzZXJpYWxpemVcbiAqIEBwYXJhbSBlbGVtZW50IC0gQ29udGFpbmVyIGVsZW1lbnRcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX2Rlc2VyaWFsaXplKHJhd1N0YXRlRGF0YTogc3RyaW5nIHwgbnVsbCwgZWxlbWVudD86IHVua25vd24pOiB1bmtub3duW10ge1xuICBpZiAocmF3U3RhdGVEYXRhID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3Qgc3RhdGVEYXRhID0gSlNPTi5wYXJzZShyYXdTdGF0ZURhdGEpO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGVEYXRhKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGxldCBjb250YWluZXI6IERlc2VyaWFsaXplQ29udGFpbmVyIHwgdW5kZWZpbmVkO1xuICBpZiAoaXNOb2RlKGVsZW1lbnQpICYmIGlzRWxlbWVudChlbGVtZW50KSkge1xuICAgIGNvbnRhaW5lciA9IF9jcmVhdGVEZXNlcmlhbGl6ZUNvbnRhaW5lcihzdGF0ZURhdGEsIGVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lciA9IF9jcmVhdGVEZXNlcmlhbGl6ZUNvbnRhaW5lcihzdGF0ZURhdGEpO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRlRGF0YS5sZW5ndGg7IGkgKz0gMikge1xuICAgIG91dHB1dFtpIC8gMl0gPSBkZXNlcmlhbGl6ZURhdGEoY29udGFpbmVyLCBzdGF0ZURhdGFbaV0sIHN0YXRlRGF0YVtpICsgMV0pO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplRGF0YShjb250YWluZXI6IERlc2VyaWFsaXplQ29udGFpbmVyLCB0eXBlSWQ6IG51bWJlciwgdmFsdWU6IHVua25vd24pIHtcbiAgaWYgKHR5cGVJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGxldCBwcm9wVmFsdWUgPSBhbGxvY2F0ZShjb250YWluZXIsIHR5cGVJZCwgdmFsdWUpO1xuICBpZiAodHlwZUlkID49IFR5cGVJZHMuRXJyb3IpIHtcbiAgICBwcm9wVmFsdWUgPSBpbmZsYXRlKGNvbnRhaW5lciwgcHJvcFZhbHVlLCB0eXBlSWQsIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcHJvcFZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRPYmplY3RCeUlkKGlkOiBudW1iZXIgfCBzdHJpbmcsIHN0YXRlRGF0YTogdW5rbm93bltdKTogdW5rbm93biB7XG4gIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgaWQgPSBwYXJzZUludChpZCwgMTApO1xuICB9XG4gIGFzc2VydFRydWUoaWQgPCBzdGF0ZURhdGEubGVuZ3RoLCBgSW52YWxpZCByZWZlcmVuY2UgJHtpZH0gPj0gJHtzdGF0ZURhdGEubGVuZ3RofWApO1xuICByZXR1cm4gc3RhdGVEYXRhW2lkXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9jcmVhdGVEZXNlcmlhbGl6ZUNvbnRhaW5lcihcbiAgc3RhdGVEYXRhOiB1bmtub3duW10sXG4gIGVsZW1lbnQ/OiBIVE1MRWxlbWVudFxuKTogRGVzZXJpYWxpemVDb250YWluZXIge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCBzdGF0ZTogdW5rbm93bltdO1xuICBjb25zdCBjb250YWluZXI6IERlc2VyaWFsaXplQ29udGFpbmVyID0ge1xuICAgICRnZXRPYmplY3RCeUlkJDogKGlkOiBudW1iZXIgfCBzdHJpbmcpID0+IGdldE9iamVjdEJ5SWQoaWQsIHN0YXRlKSxcbiAgICBnZXRTeW5jRm46IChfOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGZuID0gKCkgPT4ge307XG4gICAgICByZXR1cm4gZm47XG4gICAgfSxcbiAgICAkc3RvcmVQcm94eU1hcCQ6IG5ldyBXZWFrTWFwKCksXG4gICAgZWxlbWVudDogbnVsbCxcbiAgfTtcbiAgc3RhdGUgPSB3cmFwRGVzZXJpYWxpemVyUHJveHkoY29udGFpbmVyIGFzIGFueSwgc3RhdGVEYXRhKTtcbiAgY29udGFpbmVyLiRzdGF0ZSQgPSBzdGF0ZTtcbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBjb250YWluZXIuZWxlbWVudCA9IGVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGNvbnRhaW5lcjtcbn1cblxuLyoqXG4gKiBUcmFja2luZyBhbGwgb2JqZWN0cyBpbiB0aGUgbWFwIHdvdWxkIGJlIGV4cGVuc2l2ZS4gRm9yIHRoaXMgcmVhc29uIHdlIG9ubHkgdHJhY2sgc29tZSBvZiB0aGVcbiAqIG9iamVjdHMuXG4gKlxuICogRm9yIGV4YW1wbGUgd2Ugc2tpcDpcbiAqXG4gKiAtIFNob3J0IHN0cmluZ3NcbiAqIC0gQW55dGhpbmcgd2hpY2ggaXMgbm90IGFuIG9iamVjdC4gKGllLiBudW1iZXIsIGJvb2xlYW4sIG51bGwsIHVuZGVmaW5lZClcbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBzaG91bGRUcmFja09iaihvYmo6IHVua25vd24pIHtcbiAgcmV0dXJuIChcbiAgICAvLyBUSElOSzogTm90IHN1cmUgaWYgd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGZ1bmN0aW9ucyAoUVJMcykgTGV0J3Mgc2tpcCB0aGVtIGZvciBub3cuXG4gICAgLy8gYW5kIHNlZSBpZiB3ZSBoYXZlIGEgdGVzdCBjYXNlIHdoaWNoIHJlcXVpcmVzIHRoZW0uXG4gICAgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgfHxcbiAgICAvKipcbiAgICAgKiBXZSB0cmFjayBhbGwgc3RyaW5ncyBncmVhdGVyIHRoYW4gMSBjaGFyYWN0ZXIsIGJlY2F1c2UgdGhvc2UgdGFrZSBhdCBsZWFzdCA2IGJ5dGVzIHRvIGVuY29kZVxuICAgICAqIGFuZCBldmVuIHdpdGggOTk5IHJvb3Qgb2JqZWN0cyBpdCBzYXZlcyBvbmUgYnl0ZSBwZXIgcmVmZXJlbmNlLiBUcmFja2luZyBtb3JlIG9iamVjdHMgbWFrZXNcbiAgICAgKiB0aGUgbWFwIGJpZ2dlciBzbyB3ZSB3YW50IHRvIHN0cmlrZSBhIGJhbGFuY2VcbiAgICAgKi8gKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnICYmIG9iai5sZW5ndGggPiAxKVxuICApO1xufVxuXG4vKipcbiAqIFdoZW4gc2VyaWFsaXppbmcgdGhlIG9iamVjdCB3ZSBuZWVkIGNoZWNrIGlmIGl0IGlzIFVSTCwgUmVnRXhwLCBNYXAsIFNldCwgZXRjLiBUaGlzIGlzIHRpbWVcbiAqIGNvbnN1bWluZy4gU28gaWYgd2UgY291bGQga25vdyB0aGF0IHRoaXMgaXMgYSBiYXNpYyBvYmplY3QgbGl0ZXJhbCB3ZSBjb3VsZCBza2lwIHRoZSBjaGVjaywgYW5kXG4gKiBvbmx5IHJ1biB0aGUgY2hlY2tzIGZvciBvYmplY3RzIHdoaWNoIGFyZSBub3Qgb2JqZWN0IGxpdGVyYWxzLlxuICpcbiAqIFNvIHRoaXMgZnVuY3Rpb24gaXMgaGVyZSBmb3IgcGVyZm9ybWFuY2UgdG8gc2hvcnQgY2lyY3VpdCBtYW55IGNoZWNrcyBsYXRlci5cbiAqXG4gKiBAcGFyYW0gb2JqXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGl0ZXJhbChvYmo6IHVua25vd24pOiBvYmogaXMgb2JqZWN0IHtcbiAgLy8gV2UgYXJlIGFuIG9iamVjdCBsaXRlcmFsIGlmOlxuICAvLyAtIHdlIGFyZSBhIGRpcmVjdCBpbnN0YW5jZSBvZiBvYmplY3QgT1JcbiAgLy8gLSB3ZSBhcmUgYW4gYXJyYXlcbiAgLy8gSW4gYWxsIG90aGVyIGNhc2VzIGl0IGlzIGEgc3ViY2xhc3Mgd2hpY2ggcmVxdWlyZXMgbW9yZSBjaGVja3MuXG4gIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICByZXR1cm4gcHJvdG90eXBlID09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvdHlwZSA9PT0gQXJyYXkucHJvdG90eXBlO1xufVxuXG5mdW5jdGlvbiBpc1Jlc291cmNlPFQgPSB1bmtub3duPih2YWx1ZTogb2JqZWN0KTogdmFsdWUgaXMgUmVzb3VyY2VSZXR1cm5JbnRlcm5hbDxUPiB7XG4gIHJldHVybiAnX19icmFuZCcgaW4gdmFsdWUgJiYgdmFsdWUuX19icmFuZCA9PT0gJ3Jlc291cmNlJztcbn1cblxuY29uc3QgZnJhbWV3b3JrVHlwZSA9IChvYmo6IGFueSkgPT4ge1xuICByZXR1cm4gKFxuICAgICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJlxuICAgICAgb2JqICE9PSBudWxsICYmXG4gICAgICAob2JqIGluc3RhbmNlb2YgU2lnbmFsSW1wbCB8fCBvYmogaW5zdGFuY2VvZiBUYXNrIHx8IGlzSlNYTm9kZShvYmopKSkgfHxcbiAgICBpc1FybChvYmopXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY2FuU2VyaWFsaXplID0gKHZhbHVlOiBhbnksIHNlZW46IFdlYWtTZXQ8YW55PiA9IG5ldyBXZWFrU2V0KCkpOiBib29sZWFuID0+IHtcbiAgaWYgKFxuICAgIHZhbHVlID09IG51bGwgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnYmlnaW50J1xuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gICAgaWYgKGlzU3RvcmUodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IGdldFN0b3JlVGFyZ2V0KHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHByb3RvID09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhIHByb3BzIHByb3h5LCB0aGVuIHNvbWV0aW1lcyB3ZSBjb3VsZCBjcmVhdGUgYSBjb21wb25lbnQtbGV2ZWwgc3Vic2NyaXB0aW9uLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCB1bnRyYWNrIGhlcmUgdG8gYXZvaWQgdHJhY2tpbmcgdGhlIHZhbHVlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhY2FuU2VyaWFsaXplKFxuICAgICAgICAgICAgdW50cmFjaygoKSA9PiB2YWx1ZVtrZXldKSxcbiAgICAgICAgICAgIHNlZW5cbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChwcm90byA9PSBBcnJheS5wcm90b3R5cGUpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFjYW5TZXJpYWxpemUodmFsdWVbaV0sIHNlZW4pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGlzVGFzayh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaXNQcm9wc1Byb3h5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChpc1Byb21pc2UodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGlzSlNYTm9kZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVSTCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaXNEb21SZWY/Lih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoaXNRcmwodmFsdWUpIHx8IGlzUXdpa0NvbXBvbmVudCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBRUkxfUlVOVElNRV9DSFVOSyA9ICdtb2NrLWNodW5rJztcblxuZXhwb3J0IGNvbnN0IGVudW0gVHlwZUlkcyB7XG4gIFJvb3RSZWYsXG4gIC8qKiBVbmRlZmluZWQsIG51bGwsIHRydWUsIGZhbHNlLCBOYU4sICtJbmYsIC1JbmYsIFNsb3QsIEZyYWdtZW50ICovXG4gIENvbnN0YW50LFxuICBOdW1iZXIsXG4gIFN0cmluZyxcbiAgQXJyYXksXG4gIFVSTCxcbiAgRGF0ZSxcbiAgUmVnZXgsXG4gIFZOb2RlLFxuICBSZWZWTm9kZSxcbiAgQmlnSW50LFxuICBVUkxTZWFyY2hQYXJhbXMsXG4gIC8vLyBBbGwgdmFsdWVzIGJlbG93IG5lZWQgaW5mbGF0aW9uIGJlY2F1c2UgdGhleSBtYXkgaGF2ZSByZWZlcmVuY2UgY3ljbGVzXG4gIEVycm9yLFxuICBPYmplY3QsXG4gIFByb21pc2UsXG4gIFNldCxcbiAgTWFwLFxuICBVaW50OEFycmF5LFxuICBRUkwsXG4gIFRhc2ssXG4gIFJlc291cmNlLFxuICBDb21wb25lbnQsXG4gIFNpZ25hbCxcbiAgV3JhcHBlZFNpZ25hbCxcbiAgQ29tcHV0ZWRTaWduYWwsXG4gIFNlcmlhbGl6ZXJTaWduYWwsXG4gIFN0b3JlLFxuICBTdG9yZUFycmF5LFxuICBGb3JtRGF0YSxcbiAgSlNYTm9kZSxcbiAgUHJvcHNQcm94eSxcbiAgRWZmZWN0RGF0YSxcbn1cbmV4cG9ydCBjb25zdCBfdHlwZUlkTmFtZXMgPSBbXG4gICdSb290UmVmJyxcbiAgJ0NvbnN0YW50JyxcbiAgJ051bWJlcicsXG4gICdTdHJpbmcnLFxuICAnQXJyYXknLFxuICAnVVJMJyxcbiAgJ0RhdGUnLFxuICAnUmVnZXgnLFxuICAnVk5vZGUnLFxuICAnUmVmVk5vZGUnLFxuICAnQmlnSW50JyxcbiAgJ1VSTFNlYXJjaFBhcmFtcycsXG4gICdFcnJvcicsXG4gICdPYmplY3QnLFxuICAnUHJvbWlzZScsXG4gICdTZXQnLFxuICAnTWFwJyxcbiAgJ1VpbnQ4QXJyYXknLFxuICAnUVJMJyxcbiAgJ1Rhc2snLFxuICAnUmVzb3VyY2UnLFxuICAnQ29tcG9uZW50JyxcbiAgJ1NpZ25hbCcsXG4gICdXcmFwcGVkU2lnbmFsJyxcbiAgJ0NvbXB1dGVkU2lnbmFsJyxcbiAgJ1NlcmlhbGl6ZXJTaWduYWwnLFxuICAnU3RvcmUnLFxuICAnU3RvcmVBcnJheScsXG4gICdGb3JtRGF0YScsXG4gICdKU1hOb2RlJyxcbiAgJ1Byb3BzUHJveHknLFxuICAnRWZmZWN0RGF0YScsXG5dO1xuXG5leHBvcnQgY29uc3QgZW51bSBDb25zdGFudHMge1xuICBVbmRlZmluZWQsXG4gIE51bGwsXG4gIFRydWUsXG4gIEZhbHNlLFxuICBFbXB0eVN0cmluZyxcbiAgRU1QVFlfQVJSQVksXG4gIEVNUFRZX09CSixcbiAgTkVFRFNfQ09NUFVUQVRJT04sXG4gIFNUT1JFX0FMTF9QUk9QUyxcbiAgU2xvdCxcbiAgRnJhZ21lbnQsXG4gIE5hTixcbiAgUG9zaXRpdmVJbmZpbml0eSxcbiAgTmVnYXRpdmVJbmZpbml0eSxcbiAgTWF4U2FmZUludCxcbiAgLy8gdXNlZCBmb3IgY2xvc2UgZnJhZ21lbnRcbiAgQWxtb3N0TWF4U2FmZUludCxcbiAgTWluU2FmZUludCxcbn1cblxuY29uc3QgY2lyY3VsYXJQcm9vZkpzb24gPSAob2JqOiB1bmtub3duLCBpbmRlbnQ/OiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBvYmosXG4gICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gYFtDaXJjdWxhciAke3ZhbHVlLmNvbnN0cnVjdG9yLm5hbWV9XWA7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgaW5kZW50XG4gICk7XG59O1xuY29uc3QgcHJpbnRSYXcgPSAodmFsdWU6IGFueSwgcHJlZml4OiBzdHJpbmcpID0+IHtcbiAgbGV0IHJlc3VsdCA9IHZub2RlX2lzVk5vZGUodmFsdWUpXG4gICAgPyB2bm9kZV90b1N0cmluZy5jYWxsKHZhbHVlLCAxLCAnJywgdHJ1ZSkucmVwbGFjZUFsbCgvXFxuLiovZ20sICcnKVxuICAgIDogdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICA/IFN0cmluZyh2YWx1ZSlcbiAgICAgIDogY2lyY3VsYXJQcm9vZkpzb24odmFsdWUsIDIpO1xuICBpZiAocmVzdWx0Lmxlbmd0aCA+IDUwMCkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCA1MDApICsgJ1wiLi4uJztcbiAgfVxuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXFxuL2csICdcXG4nICsgcHJlZml4KTtcbiAgcmV0dXJuIHJlc3VsdC5pbmNsdWRlcygnXFxuJykgPyAocmVzdWx0ID0gYFxcbiR7cHJlZml4fSR7cmVzdWx0fWApIDogcmVzdWx0O1xufTtcbmxldCBoYXNSYXcgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBkdW1wU3RhdGUgPSAoXG4gIHN0YXRlOiB1bmtub3duW10sXG4gIGNvbG9yID0gZmFsc2UsXG4gIHByZWZpeCA9ICcnLFxuICBsaW1pdDogbnVtYmVyIHwgbnVsbCA9IDIwXG4pID0+IHtcbiAgY29uc3QgUkVEID0gY29sb3IgPyAnXFx4MWJbMzFtJyA6ICcnO1xuICBjb25zdCBSRVNFVCA9IGNvbG9yID8gJ1xceDFiWzBtJyA6ICcnO1xuICBjb25zdCBpc1Jvb3QgPSBwcmVmaXggPT09ICcnO1xuICBjb25zdCBvdXQ6IGFueVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdGUubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobGltaXQgJiYgaSA+IDIgKiBsaW1pdCkge1xuICAgICAgb3V0LnB1c2goJy4uLicpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHN0YXRlW2ldO1xuICAgIGxldCB2YWx1ZSA9IHN0YXRlWysraV07XG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNSYXcgPSB0cnVlO1xuICAgICAgb3V0LnB1c2goXG4gICAgICAgIGAke1JFRH1bcmF3JHt0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlID8gYCAke3ZhbHVlLmNvbnN0cnVjdG9yLm5hbWV9YCA6ICcnfV0ke1JFU0VUfSAke3ByaW50UmF3KHZhbHVlLCBgJHtwcmVmaXh9ICBgKX1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoa2V5ID09PSBUeXBlSWRzLkNvbnN0YW50KSB7XG4gICAgICAgIHZhbHVlID0gY29uc3RhbnRUb05hbWUodmFsdWUgYXMgQ29uc3RhbnRzKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgaWYgKCh2YWx1ZSBhcyBzdHJpbmcpLmxlbmd0aCA+IDEyMCkge1xuICAgICAgICAgIHZhbHVlID0gKHZhbHVlIGFzIHN0cmluZykuc2xpY2UoMCwgMTIwKSArICdcIi4uLic7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5sZW5ndGggPyBgW1xcbiR7ZHVtcFN0YXRlKHZhbHVlLCBjb2xvciwgYCR7cHJlZml4fSAgYCl9XFxuJHtwcmVmaXh9XWAgOiAnW10nO1xuICAgICAgfVxuICAgICAgb3V0LnB1c2goYCR7UkVEfSR7dHlwZUlkVG9OYW1lKGtleSBhcyBUeXBlSWRzKX0ke1JFU0VUfSAke3ZhbHVlfWApO1xuICAgIH1cbiAgfVxuICBjb25zdCByZXN1bHQgPSBvdXQubWFwKCh2LCBpKSA9PiBgJHtwcmVmaXh9JHtpc1Jvb3QgPyBgJHtpfSBgIDogJyd9JHt2fWApLmpvaW4oJ1xcbicpO1xuICBpZiAoaXNSb290KSB7XG4gICAgY29uc3QgY291bnQgPSBoYXNSYXcgPyAnJyA6IGAoJHtKU09OLnN0cmluZ2lmeShzdGF0ZSkubGVuZ3RofSBjaGFycylgO1xuICAgIGhhc1JhdyA9IGZhbHNlO1xuICAgIHJldHVybiBgXFxuJHtyZXN1bHR9XFxuJHtjb3VudH1gO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgdHlwZUlkVG9OYW1lID0gKGNvZGU6IFR5cGVJZHMpID0+IHtcbiAgcmV0dXJuIF90eXBlSWROYW1lc1tjb2RlXSB8fCBgVW5rbm93bigke2NvZGV9KWA7XG59O1xuXG5jb25zdCBjb25zdGFudFRvTmFtZSA9IChjb2RlOiBDb25zdGFudHMpID0+IHtcbiAgcmV0dXJuIF9jb25zdGFudE5hbWVzW2NvZGVdIHx8IGBVbmtub3duKCR7Y29kZX0pYDtcbn07XG4iXX0=","import { qError } from '../error/error';\nimport { isNode } from './element';\nimport { isPromise } from './promises';\nimport { isArray, isFunction, isObject, isSerializableObject } from './types';\nimport { canSerialize } from '../shared-serialization';\nimport { isSignal } from '../../signal/signal';\nimport { unwrapStore } from '../../signal/store';\n/** @internal */\nexport const verifySerializable = (value, preMessage) => {\n    const seen = new WeakSet();\n    return _verifySerializable(value, seen, '_', preMessage);\n};\nconst _verifySerializable = (value, seen, ctx, preMessage) => {\n    const unwrapped = unwrapStore(value);\n    if (unwrapped == null) {\n        return value;\n    }\n    if (shouldSerialize(unwrapped)) {\n        if (typeof unwrapped === 'object') {\n            if (seen.has(unwrapped)) {\n                return value;\n            }\n            seen.add(unwrapped);\n        }\n        if (isSignal(unwrapped)) {\n            return value;\n        }\n        if (canSerialize(unwrapped)) {\n            return value;\n        }\n        const typeObj = typeof unwrapped;\n        switch (typeObj) {\n            case 'object':\n                if (isPromise(unwrapped)) {\n                    return value;\n                }\n                if (isNode(unwrapped)) {\n                    return value;\n                }\n                if (isArray(unwrapped)) {\n                    let expectIndex = 0;\n                    // Make sure the array has no holes\n                    unwrapped.forEach((v, i) => {\n                        if (i !== expectIndex) {\n                            throw qError(3 /* QError.verifySerializable */, [unwrapped]);\n                        }\n                        _verifySerializable(v, seen, ctx + '[' + i + ']');\n                        expectIndex = i + 1;\n                    });\n                    return value;\n                }\n                if (isSerializableObject(unwrapped)) {\n                    for (const [key, item] of Object.entries(unwrapped)) {\n                        _verifySerializable(item, seen, ctx + '.' + key);\n                    }\n                    return value;\n                }\n                break;\n            case 'boolean':\n            case 'string':\n            case 'number':\n                return value;\n        }\n        let message;\n        if (preMessage) {\n            message = preMessage;\n        }\n        else {\n            message = 'Value cannot be serialized';\n        }\n        if (ctx !== '_') {\n            message += ` in ${ctx},`;\n        }\n        if (typeObj === 'object') {\n            message += ` because it's an instance of \"${value?.constructor.name}\". You might need to use 'noSerialize()' or use an object literal instead. Check out https://qwik.dev/docs/advanced/dollar/`;\n        }\n        else if (typeObj === 'function') {\n            const fnName = value.name;\n            message += ` because it's a function named \"${fnName}\". You might need to convert it to a QRL using $(fn):\\n\\nconst ${fnName} = $(${String(value)});\\n\\nPlease check out https://qwik.dev/docs/advanced/qrl/ for more information.`;\n        }\n        throw qError(3 /* QError.verifySerializable */, [message]);\n    }\n    return value;\n};\nconst noSerializeSet = /*#__PURE__*/ new WeakSet();\nconst weakSerializeSet = /*#__PURE__*/ new WeakSet();\nexport const shouldSerialize = (obj) => {\n    if (isObject(obj) || isFunction(obj)) {\n        return !noSerializeSet.has(obj);\n    }\n    return true;\n};\nexport const fastSkipSerialize = (obj) => {\n    return typeof obj === 'object' && obj && (NoSerializeSymbol in obj || noSerializeSet.has(obj));\n};\nexport const fastWeakSerialize = (obj) => {\n    return weakSerializeSet.has(obj);\n};\n// <docs markdown=\"../../readme.md#noSerialize\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../../readme.md#noSerialize instead and run `pnpm docs.sync`)\n/**\n * Marks a property on a store as non-serializable.\n *\n * At times it is necessary to store values on a store that are non-serializable. Normally this is a\n * runtime error as Store wants to eagerly report when a non-serializable property is assigned to\n * it.\n *\n * You can use `noSerialize()` to mark a value as non-serializable. The value is persisted in the\n * Store but does not survive serialization. The implication is that when your application is\n * resumed, the value of this object will be `undefined`. You will be responsible for recovering\n * from this.\n *\n * See: [noSerialize Tutorial](http://qwik.dev/tutorial/store/no-serialize)\n *\n * @public\n */\n// </docs>\nexport const noSerialize = (input) => {\n    if (input != null) {\n        noSerializeSet.add(input);\n    }\n    return input;\n};\n/** @internal */\nexport const _weakSerialize = (input) => {\n    weakSerializeSet.add(input);\n    return input;\n};\n/**\n * If an object has this property, it will not be serialized. Use this on prototypes to avoid having\n * to call `noSerialize()` on every object.\n *\n * @public\n */\nexport const NoSerializeSymbol = Symbol('noSerialize');\n/**\n * If an object has this property as a function, it will be called with the object and should return\n * a serializable value.\n *\n * This can be used to clean up, integrate with other libraries, etc.\n *\n * The type your object should conform to is:\n *\n * ```ts\n * {\n *   [SerializerSymbol]: (this: YourType, toSerialize: YourType) => YourSerializableType;\n * }\n * ```\n *\n * @public\n */\nexport const SerializerSymbol = Symbol('serialize');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplLXV0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC91dGlscy9zZXJpYWxpemUtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFakQsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUksS0FBUSxFQUFFLFVBQW1CLEVBQUssRUFBRTtJQUN4RSxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE9BQU8sbUJBQW1CLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDM0QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixLQUFRLEVBQ1IsSUFBa0IsRUFDbEIsR0FBVyxFQUNYLFVBQW1CLEVBQ2hCLEVBQUU7SUFDTCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLEVB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Q0FBQztJQUM1QixDQUFDO0lBQ0QsT0FBTyxLQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUYsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFtQixLQUFRLEVBQWMsRUFBRTtJQUN2RSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsT0FBTyxLQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdkQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUUVycm9yLCBxRXJyb3IgfSBmcm9tICcuLi9lcnJvci9lcnJvcic7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi9wcm9taXNlcyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNTZXJpYWxpemFibGVPYmplY3QgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGNhblNlcmlhbGl6ZSB9IGZyb20gJy4uL3NoYXJlZC1zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGlzU2lnbmFsIH0gZnJvbSAnLi4vLi4vc2lnbmFsL3NpZ25hbCc7XG5pbXBvcnQgeyB1bndyYXBTdG9yZSB9IGZyb20gJy4uLy4uL3NpZ25hbC9zdG9yZSc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCB2ZXJpZnlTZXJpYWxpemFibGUgPSA8VD4odmFsdWU6IFQsIHByZU1lc3NhZ2U/OiBzdHJpbmcpOiBUID0+IHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gIHJldHVybiBfdmVyaWZ5U2VyaWFsaXphYmxlKHZhbHVlLCBzZWVuLCAnXycsIHByZU1lc3NhZ2UpO1xufTtcblxuY29uc3QgX3ZlcmlmeVNlcmlhbGl6YWJsZSA9IDxUPihcbiAgdmFsdWU6IFQsXG4gIHNlZW46IFdlYWtTZXQ8YW55PixcbiAgY3R4OiBzdHJpbmcsXG4gIHByZU1lc3NhZ2U/OiBzdHJpbmdcbik6IFQgPT4ge1xuICBjb25zdCB1bndyYXBwZWQgPSB1bndyYXBTdG9yZSh2YWx1ZSk7XG4gIGlmICh1bndyYXBwZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoc2hvdWxkU2VyaWFsaXplKHVud3JhcHBlZCkpIHtcbiAgICBpZiAodHlwZW9mIHVud3JhcHBlZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChzZWVuLmhhcyh1bndyYXBwZWQpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHNlZW4uYWRkKHVud3JhcHBlZCk7XG4gICAgfVxuICAgIGlmIChpc1NpZ25hbCh1bndyYXBwZWQpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChjYW5TZXJpYWxpemUodW53cmFwcGVkKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjb25zdCB0eXBlT2JqID0gdHlwZW9mIHVud3JhcHBlZDtcbiAgICBzd2l0Y2ggKHR5cGVPYmopIHtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmIChpc1Byb21pc2UodW53cmFwcGVkKSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOb2RlKHVud3JhcHBlZCkpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXkodW53cmFwcGVkKSkge1xuICAgICAgICAgIGxldCBleHBlY3RJbmRleCA9IDA7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJheSBoYXMgbm8gaG9sZXNcbiAgICAgICAgICB1bndyYXBwZWQuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGkgIT09IGV4cGVjdEluZGV4KSB7XG4gICAgICAgICAgICAgIHRocm93IHFFcnJvcihRRXJyb3IudmVyaWZ5U2VyaWFsaXphYmxlLCBbdW53cmFwcGVkXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdmVyaWZ5U2VyaWFsaXphYmxlKHYsIHNlZW4sIGN0eCArICdbJyArIGkgKyAnXScpO1xuICAgICAgICAgICAgZXhwZWN0SW5kZXggPSBpICsgMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU2VyaWFsaXphYmxlT2JqZWN0KHVud3JhcHBlZCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKHVud3JhcHBlZCkpIHtcbiAgICAgICAgICAgIF92ZXJpZnlTZXJpYWxpemFibGUoaXRlbSwgc2VlbiwgY3R4ICsgJy4nICsga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xuICAgIGlmIChwcmVNZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID0gcHJlTWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSA9ICdWYWx1ZSBjYW5ub3QgYmUgc2VyaWFsaXplZCc7XG4gICAgfVxuICAgIGlmIChjdHggIT09ICdfJykge1xuICAgICAgbWVzc2FnZSArPSBgIGluICR7Y3R4fSxgO1xuICAgIH1cbiAgICBpZiAodHlwZU9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCBiZWNhdXNlIGl0J3MgYW4gaW5zdGFuY2Ugb2YgXCIke3ZhbHVlPy5jb25zdHJ1Y3Rvci5uYW1lfVwiLiBZb3UgbWlnaHQgbmVlZCB0byB1c2UgJ25vU2VyaWFsaXplKCknIG9yIHVzZSBhbiBvYmplY3QgbGl0ZXJhbCBpbnN0ZWFkLiBDaGVjayBvdXQgaHR0cHM6Ly9xd2lrLmRldi9kb2NzL2FkdmFuY2VkL2RvbGxhci9gO1xuICAgIH0gZWxzZSBpZiAodHlwZU9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgZm5OYW1lID0gKHZhbHVlIGFzIEZ1bmN0aW9uKS5uYW1lO1xuICAgICAgbWVzc2FnZSArPSBgIGJlY2F1c2UgaXQncyBhIGZ1bmN0aW9uIG5hbWVkIFwiJHtmbk5hbWV9XCIuIFlvdSBtaWdodCBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gYSBRUkwgdXNpbmcgJChmbik6XFxuXFxuY29uc3QgJHtmbk5hbWV9ID0gJCgke1N0cmluZyhcbiAgICAgICAgdmFsdWVcbiAgICAgICl9KTtcXG5cXG5QbGVhc2UgY2hlY2sgb3V0IGh0dHBzOi8vcXdpay5kZXYvZG9jcy9hZHZhbmNlZC9xcmwvIGZvciBtb3JlIGluZm9ybWF0aW9uLmA7XG4gICAgfVxuICAgIHRocm93IHFFcnJvcihRRXJyb3IudmVyaWZ5U2VyaWFsaXphYmxlLCBbbWVzc2FnZV0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5jb25zdCBub1NlcmlhbGl6ZVNldCA9IC8qI19fUFVSRV9fKi8gbmV3IFdlYWtTZXQ8b2JqZWN0PigpO1xuY29uc3Qgd2Vha1NlcmlhbGl6ZVNldCA9IC8qI19fUFVSRV9fKi8gbmV3IFdlYWtTZXQ8b2JqZWN0PigpO1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2VyaWFsaXplID0gKG9iajogdW5rbm93bik6IGJvb2xlYW4gPT4ge1xuICBpZiAoaXNPYmplY3Qob2JqKSB8fCBpc0Z1bmN0aW9uKG9iaikpIHtcbiAgICByZXR1cm4gIW5vU2VyaWFsaXplU2V0LmhhcyhvYmopO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGZhc3RTa2lwU2VyaWFsaXplID0gKG9iajogb2JqZWN0KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogJiYgKE5vU2VyaWFsaXplU3ltYm9sIGluIG9iaiB8fCBub1NlcmlhbGl6ZVNldC5oYXMob2JqKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZmFzdFdlYWtTZXJpYWxpemUgPSAob2JqOiBvYmplY3QpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIHdlYWtTZXJpYWxpemVTZXQuaGFzKG9iaik7XG59O1xuXG4vKipcbiAqIFJldHVybmVkIHR5cGUgb2YgdGhlIGBub1NlcmlhbGl6ZSgpYCBmdW5jdGlvbi4gSXQgd2lsbCBiZSBUWVBFIG9yIHVuZGVmaW5lZC5cbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIG5vU2VyaWFsaXplXG4gKi9cbmV4cG9ydCB0eXBlIE5vU2VyaWFsaXplPFQ+ID0gKFQgJiB7IF9fbm9fc2VyaWFsaXplX186IHRydWUgfSkgfCB1bmRlZmluZWQ7XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vLi4vcmVhZG1lLm1kI25vU2VyaWFsaXplXCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vLi4vcmVhZG1lLm1kI25vU2VyaWFsaXplIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBNYXJrcyBhIHByb3BlcnR5IG9uIGEgc3RvcmUgYXMgbm9uLXNlcmlhbGl6YWJsZS5cbiAqXG4gKiBBdCB0aW1lcyBpdCBpcyBuZWNlc3NhcnkgdG8gc3RvcmUgdmFsdWVzIG9uIGEgc3RvcmUgdGhhdCBhcmUgbm9uLXNlcmlhbGl6YWJsZS4gTm9ybWFsbHkgdGhpcyBpcyBhXG4gKiBydW50aW1lIGVycm9yIGFzIFN0b3JlIHdhbnRzIHRvIGVhZ2VybHkgcmVwb3J0IHdoZW4gYSBub24tc2VyaWFsaXphYmxlIHByb3BlcnR5IGlzIGFzc2lnbmVkIHRvXG4gKiBpdC5cbiAqXG4gKiBZb3UgY2FuIHVzZSBgbm9TZXJpYWxpemUoKWAgdG8gbWFyayBhIHZhbHVlIGFzIG5vbi1zZXJpYWxpemFibGUuIFRoZSB2YWx1ZSBpcyBwZXJzaXN0ZWQgaW4gdGhlXG4gKiBTdG9yZSBidXQgZG9lcyBub3Qgc3Vydml2ZSBzZXJpYWxpemF0aW9uLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB3aGVuIHlvdXIgYXBwbGljYXRpb24gaXNcbiAqIHJlc3VtZWQsIHRoZSB2YWx1ZSBvZiB0aGlzIG9iamVjdCB3aWxsIGJlIGB1bmRlZmluZWRgLiBZb3Ugd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgcmVjb3ZlcmluZ1xuICogZnJvbSB0aGlzLlxuICpcbiAqIFNlZTogW25vU2VyaWFsaXplIFR1dG9yaWFsXShodHRwOi8vcXdpay5kZXYvdHV0b3JpYWwvc3RvcmUvbm8tc2VyaWFsaXplKVxuICpcbiAqIEBwdWJsaWNcbiAqL1xuLy8gPC9kb2NzPlxuZXhwb3J0IGNvbnN0IG5vU2VyaWFsaXplID0gPFQgZXh0ZW5kcyBvYmplY3QgfCB1bmRlZmluZWQ+KGlucHV0OiBUKTogTm9TZXJpYWxpemU8VD4gPT4ge1xuICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgIG5vU2VyaWFsaXplU2V0LmFkZChpbnB1dCk7XG4gIH1cbiAgcmV0dXJuIGlucHV0IGFzIGFueTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBfd2Vha1NlcmlhbGl6ZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihpbnB1dDogVCk6IFBhcnRpYWw8VD4gPT4ge1xuICB3ZWFrU2VyaWFsaXplU2V0LmFkZChpbnB1dCk7XG4gIHJldHVybiBpbnB1dCBhcyBhbnk7XG59O1xuXG4vKipcbiAqIElmIGFuIG9iamVjdCBoYXMgdGhpcyBwcm9wZXJ0eSwgaXQgd2lsbCBub3QgYmUgc2VyaWFsaXplZC4gVXNlIHRoaXMgb24gcHJvdG90eXBlcyB0byBhdm9pZCBoYXZpbmdcbiAqIHRvIGNhbGwgYG5vU2VyaWFsaXplKClgIG9uIGV2ZXJ5IG9iamVjdC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBOb1NlcmlhbGl6ZVN5bWJvbCA9IFN5bWJvbCgnbm9TZXJpYWxpemUnKTtcbi8qKlxuICogSWYgYW4gb2JqZWN0IGhhcyB0aGlzIHByb3BlcnR5IGFzIGEgZnVuY3Rpb24sIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIG9iamVjdCBhbmQgc2hvdWxkIHJldHVyblxuICogYSBzZXJpYWxpemFibGUgdmFsdWUuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBjbGVhbiB1cCwgaW50ZWdyYXRlIHdpdGggb3RoZXIgbGlicmFyaWVzLCBldGMuXG4gKlxuICogVGhlIHR5cGUgeW91ciBvYmplY3Qgc2hvdWxkIGNvbmZvcm0gdG8gaXM6XG4gKlxuICogYGBgdHNcbiAqIHtcbiAqICAgW1NlcmlhbGl6ZXJTeW1ib2xdOiAodGhpczogWW91clR5cGUsIHRvU2VyaWFsaXplOiBZb3VyVHlwZSkgPT4gWW91clNlcmlhbGl6YWJsZVR5cGU7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemVyU3ltYm9sID0gU3ltYm9sKCdzZXJpYWxpemUnKTtcbiJdfQ==","import { isDev } from '@qwik.dev/core/build';\nimport { assertDefined } from '../error/assert';\nimport { qError } from '../error/error';\nimport { getPlatform, isServerPlatform } from '../platform/platform';\nimport { verifySerializable } from '../utils/serialize-utils';\nimport { invoke, newInvokeContext, newInvokeContextFromTuple, tryGetInvokeContext, } from '../../use/use-core';\nimport { getQFuncs, QInstanceAttr } from '../utils/markers';\nimport { isPromise, maybeThen } from '../utils/promises';\nimport { qDev, qSerialize, qTest, seal } from '../utils/qdev';\nimport { isArray, isFunction } from '../utils/types';\nimport { getSymbolHash } from './qrl-utils';\nexport const createQRL = (chunk, symbol, symbolRef, symbolFn, capture, captureRef) => {\n    if (qDev && qSerialize) {\n        if (captureRef) {\n            for (const item of captureRef) {\n                verifySerializable(item, 'Captured variable in the closure can not be serialized');\n            }\n        }\n    }\n    let _containerEl;\n    const qrl = async function (...args) {\n        const boundedFn = bindFnToContext.call(this, tryGetInvokeContext());\n        const result = await boundedFn(...args);\n        return result;\n    };\n    const setContainer = (el) => {\n        if (!_containerEl) {\n            _containerEl = el;\n        }\n        return _containerEl;\n    };\n    function bindFnToContext(currentCtx, beforeFn) {\n        // Note that we bind the current `this`\n        const bound = (...args) => {\n            if (!qrl.resolved) {\n                return qrl.resolve().then((fn) => {\n                    if (!isFunction(fn)) {\n                        throw qError(10 /* QError.qrlIsNotFunction */);\n                    }\n                    return bound(...args);\n                });\n            }\n            if (beforeFn && beforeFn() === false) {\n                return;\n            }\n            const context = createOrReuseInvocationContext(currentCtx);\n            const prevQrl = context.$qrl$;\n            const prevEvent = context.$event$;\n            // Note that we set the qrl here instead of in wrapFn because\n            // it is possible we're called on a copied qrl\n            context.$qrl$ = qrl;\n            context.$event$ ||= this;\n            try {\n                return invoke.call(this, context, symbolRef, ...args);\n            }\n            finally {\n                context.$qrl$ = prevQrl;\n                context.$event$ = prevEvent;\n            }\n        };\n        return bound;\n    }\n    const resolveLazy = (containerEl) => {\n        return symbolRef !== null ? symbolRef : resolve(containerEl);\n    };\n    // Wrap functions to provide their lexical scope\n    const wrapFn = (fn) => {\n        if (typeof fn !== 'function' || (!capture?.length && !captureRef?.length)) {\n            return fn;\n        }\n        return function (...args) {\n            let context = tryGetInvokeContext();\n            // use the given qrl if it is the right one\n            if (context) {\n                // TODO check if this is necessary in production\n                if (context.$qrl$?.$symbol$ === qrl.$symbol$) {\n                    return fn.apply(this, args);\n                }\n                const prevQrl = context.$qrl$;\n                context.$qrl$ = qrl;\n                try {\n                    return fn.apply(this, args);\n                }\n                finally {\n                    context.$qrl$ = prevQrl;\n                }\n            }\n            context = newInvokeContext();\n            context.$qrl$ = qrl;\n            context.$event$ = this;\n            return invoke.call(this, context, fn, ...args);\n        };\n    };\n    const resolve = async (containerEl) => {\n        if (symbolRef !== null) {\n            // Resolving (Promise) or already resolved (value)\n            return symbolRef;\n        }\n        if (containerEl) {\n            setContainer(containerEl);\n        }\n        if (chunk === '') {\n            // Sync QRL\n            assertDefined(_containerEl, 'Sync QRL must have container element');\n            const hash = _containerEl.getAttribute(QInstanceAttr);\n            const doc = _containerEl.ownerDocument;\n            const qFuncs = getQFuncs(doc, hash);\n            // No need to wrap, syncQRLs can't have captured scope\n            return (qrl.resolved = symbolRef = qFuncs[Number(symbol)]);\n        }\n        const start = now();\n        const ctx = tryGetInvokeContext();\n        if (symbolFn !== null) {\n            symbolRef = symbolFn().then((module) => (qrl.resolved = wrapFn((symbolRef = module[symbol]))));\n        }\n        else {\n            const imported = getPlatform().importSymbol(_containerEl, chunk, symbol);\n            symbolRef = maybeThen(imported, (ref) => (qrl.resolved = wrapFn((symbolRef = ref))));\n        }\n        if (typeof symbolRef === 'object' && isPromise(symbolRef)) {\n            symbolRef.then(() => emitUsedSymbol(symbol, ctx?.$element$, start), (err) => {\n                console.error(`qrl ${symbol} failed to load`, err);\n                // We shouldn't cache rejections, we can try again later\n                symbolRef = null;\n                throw err;\n            });\n        }\n        return symbolRef;\n    };\n    const createOrReuseInvocationContext = (invoke) => {\n        if (invoke == null) {\n            return newInvokeContext();\n        }\n        else if (isArray(invoke)) {\n            return newInvokeContextFromTuple(invoke);\n        }\n        else {\n            return invoke;\n        }\n    };\n    const hash = getSymbolHash(symbol);\n    Object.assign(qrl, {\n        getSymbol: () => symbol,\n        getHash: () => hash,\n        getCaptured: () => captureRef,\n        resolve,\n        $resolveLazy$: resolveLazy,\n        $setContainer$: setContainer,\n        $chunk$: chunk,\n        $symbol$: symbol,\n        $hash$: hash,\n        getFn: bindFnToContext,\n        $capture$: capture,\n        $captureRef$: captureRef,\n        dev: null,\n        resolved: undefined,\n    });\n    if (symbolRef) {\n        // Unwrap any promises\n        symbolRef = maybeThen(symbolRef, (resolved) => (qrl.resolved = wrapFn((symbolRef = resolved))));\n    }\n    if (isDev) {\n        Object.defineProperty(qrl, '_devOnlySymbolRef', {\n            get() {\n                return symbolRef;\n            },\n        });\n    }\n    if (qDev) {\n        seal(qrl);\n    }\n    return qrl;\n};\nconst EMITTED = /*#__PURE__*/ new Set();\nexport const emitUsedSymbol = (symbol, element, reqTime) => {\n    if (!EMITTED.has(symbol)) {\n        EMITTED.add(symbol);\n        emitEvent('qsymbol', {\n            symbol,\n            element,\n            reqTime,\n        });\n    }\n};\nexport const emitEvent = (eventName, detail) => {\n    if (!qTest && !isServerPlatform() && typeof document === 'object') {\n        document.dispatchEvent(new CustomEvent(eventName, {\n            bubbles: false,\n            detail,\n        }));\n    }\n};\nconst now = () => {\n    if (qTest || isServerPlatform()) {\n        return 0;\n    }\n    if (typeof performance === 'object') {\n        return performance.now();\n    }\n    return 0;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLWNsYXNzLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3NoYXJlZC9xcmwvcXJsLWNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsTUFBTSxFQUNOLGdCQUFnQixFQUNoQix5QkFBeUIsRUFDekIsbUJBQW1CLEdBR3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQXVCLE1BQU0sZ0JBQWdCLENBQUM7QUFHMUUsT0FBTyxFQUFFLGFBQWEsRUFBWSxNQUFNLGFBQWEsQ0FBQztBQXFDdEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQ3ZCLEtBQW9CLEVBQ3BCLE1BQWMsRUFDZCxTQUFzQyxFQUN0QyxRQUFzRCxFQUN0RCxPQUFrQyxFQUNsQyxVQUFzQyxFQUNuQixFQUFFO0lBQ3JCLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixL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QUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsRSxRQUFRLENBQUMsYUFBYSxDQUNwQixJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUU7WUFDekIsT0FBTyxFQUFFLEtBQUs7WUFDZCxNQUFNO1NBQ1AsQ0FBTSxDQUNSLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFO0lBQ2YsSUFBSSxLQUFLLElBQUksZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNELElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEMsT0FBTyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXYgfSBmcm9tICdAcXdpay5kZXYvY29yZS9idWlsZCc7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkIH0gZnJvbSAnLi4vZXJyb3IvYXNzZXJ0JztcbmltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vZXJyb3IvZXJyb3InO1xuaW1wb3J0IHsgZ2V0UGxhdGZvcm0sIGlzU2VydmVyUGxhdGZvcm0gfSBmcm9tICcuLi9wbGF0Zm9ybS9wbGF0Zm9ybSc7XG5pbXBvcnQgeyB2ZXJpZnlTZXJpYWxpemFibGUgfSBmcm9tICcuLi91dGlscy9zZXJpYWxpemUtdXRpbHMnO1xuaW1wb3J0IHtcbiAgaW52b2tlLFxuICBuZXdJbnZva2VDb250ZXh0LFxuICBuZXdJbnZva2VDb250ZXh0RnJvbVR1cGxlLFxuICB0cnlHZXRJbnZva2VDb250ZXh0LFxuICB0eXBlIEludm9rZUNvbnRleHQsXG4gIHR5cGUgSW52b2tlVHVwbGUsXG59IGZyb20gJy4uLy4uL3VzZS91c2UtY29yZSc7XG5pbXBvcnQgeyBnZXRRRnVuY3MsIFFJbnN0YW5jZUF0dHIgfSBmcm9tICcuLi91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IGlzUHJvbWlzZSwgbWF5YmVUaGVuIH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcURldiwgcVNlcmlhbGl6ZSwgcVRlc3QsIHNlYWwgfSBmcm9tICcuLi91dGlscy9xZGV2JztcbmltcG9ydCB7IGlzQXJyYXksIGlzRnVuY3Rpb24sIHR5cGUgVmFsdWVPclByb21pc2UgfSBmcm9tICcuLi91dGlscy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFFSTERldiB9IGZyb20gJy4vcXJsJztcbmltcG9ydCB0eXBlIHsgUVJMLCBRcmxBcmdzLCBRcmxSZXR1cm4gfSBmcm9tICcuL3FybC5wdWJsaWMnO1xuaW1wb3J0IHsgZ2V0U3ltYm9sSGFzaCwgU1lOQ19RUkwgfSBmcm9tICcuL3FybC11dGlscyc7XG5cbmludGVyZmFjZSBTeW5jUVJMU3ltYm9sIHtcbiAgJHN5bWJvbCQ6IHR5cGVvZiBTWU5DX1FSTDtcbn1cblxuZXhwb3J0IHR5cGUgU3luY1FSTEludGVybmFsID0gUVJMSW50ZXJuYWwgJiBTeW5jUVJMU3ltYm9sO1xuXG5leHBvcnQgdHlwZSBRUkxJbnRlcm5hbE1ldGhvZHM8VFlQRT4gPSB7XG4gIHJlYWRvbmx5ICRjaHVuayQ6IHN0cmluZyB8IG51bGw7XG4gIHJlYWRvbmx5ICRzeW1ib2wkOiBzdHJpbmc7XG4gIHJlYWRvbmx5ICRoYXNoJDogc3RyaW5nO1xuXG4gICRjYXB0dXJlJDogc3RyaW5nW10gfCBudWxsO1xuICAkY2FwdHVyZVJlZiQ6IHVua25vd25bXSB8IG51bGw7XG4gIGRldjogUVJMRGV2IHwgbnVsbDtcblxuICByZXNvbHZlZDogdW5kZWZpbmVkIHwgVFlQRTtcblxuICByZXNvbHZlKCk6IFByb21pc2U8VFlQRT47XG4gIGdldFN5bWJvbCgpOiBzdHJpbmc7XG4gIGdldEhhc2goKTogc3RyaW5nO1xuICBnZXRDYXB0dXJlZCgpOiB1bmtub3duW10gfCBudWxsO1xuICBnZXRGbihcbiAgICBjdXJyZW50Q3R4PzogSW52b2tlQ29udGV4dCB8IEludm9rZVR1cGxlLFxuICAgIGJlZm9yZUZuPzogKCkgPT4gdm9pZFxuICApOiBUWVBFIGV4dGVuZHMgKC4uLmFyZ3M6IGFueSkgPT4gYW55XG4gICAgPyAoLi4uYXJnczogUGFyYW1ldGVyczxUWVBFPikgPT4gVmFsdWVPclByb21pc2U8UmV0dXJuVHlwZTxUWVBFPj5cbiAgICA6IC8vIHVua25vd24gc28gd2UgYWxsb3cgYXNzaWduaW5nIGZ1bmN0aW9uIFFSTHMgdG8gYW55XG4gICAgICB1bmtub3duO1xuXG4gICRzZXRDb250YWluZXIkKGNvbnRhaW5lckVsOiBFbGVtZW50IHwgdW5kZWZpbmVkKTogRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgJHJlc29sdmVMYXp5JChjb250YWluZXJFbD86IEVsZW1lbnQpOiBWYWx1ZU9yUHJvbWlzZTxUWVBFPjtcbn07XG5cbmV4cG9ydCB0eXBlIFFSTEludGVybmFsPFRZUEUgPSB1bmtub3duPiA9IFFSTDxUWVBFPiAmIFFSTEludGVybmFsTWV0aG9kczxUWVBFPjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVFSTCA9IDxUWVBFPihcbiAgY2h1bms6IHN0cmluZyB8IG51bGwsXG4gIHN5bWJvbDogc3RyaW5nLFxuICBzeW1ib2xSZWY6IG51bGwgfCBWYWx1ZU9yUHJvbWlzZTxUWVBFPixcbiAgc3ltYm9sRm46IG51bGwgfCAoKCkgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBUWVBFPj4pLFxuICBjYXB0dXJlOiBudWxsIHwgUmVhZG9ubHk8bnVtYmVyW10+LFxuICBjYXB0dXJlUmVmOiBSZWFkb25seTx1bmtub3duW10+IHwgbnVsbFxuKTogUVJMSW50ZXJuYWw8VFlQRT4gPT4ge1xuICBpZiAocURldiAmJiBxU2VyaWFsaXplKSB7XG4gICAgaWYgKGNhcHR1cmVSZWYpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjYXB0dXJlUmVmKSB7XG4gICAgICAgIHZlcmlmeVNlcmlhbGl6YWJsZShpdGVtLCAnQ2FwdHVyZWQgdmFyaWFibGUgaW4gdGhlIGNsb3N1cmUgY2FuIG5vdCBiZSBzZXJpYWxpemVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IF9jb250YWluZXJFbDogRWxlbWVudCB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBxcmwgPSBhc3luYyBmdW5jdGlvbiAodGhpczogdW5rbm93biwgLi4uYXJnczogUXJsQXJnczxUWVBFPikge1xuICAgIGNvbnN0IGJvdW5kZWRGbiA9IGJpbmRGblRvQ29udGV4dC5jYWxsKHRoaXMsIHRyeUdldEludm9rZUNvbnRleHQoKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYm91bmRlZEZuKC4uLmFyZ3MpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gYXMgUVJMSW50ZXJuYWw8VFlQRT47XG5cbiAgY29uc3Qgc2V0Q29udGFpbmVyID0gKGVsOiBFbGVtZW50IHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKCFfY29udGFpbmVyRWwpIHtcbiAgICAgIF9jb250YWluZXJFbCA9IGVsO1xuICAgIH1cbiAgICByZXR1cm4gX2NvbnRhaW5lckVsO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGJpbmRGblRvQ29udGV4dChcbiAgICB0aGlzOiB1bmtub3duLFxuICAgIGN1cnJlbnRDdHg/OiBJbnZva2VDb250ZXh0IHwgSW52b2tlVHVwbGUsXG4gICAgYmVmb3JlRm4/OiAoKSA9PiB2b2lkIHwgYm9vbGVhblxuICApIHtcbiAgICAvLyBOb3RlIHRoYXQgd2UgYmluZCB0aGUgY3VycmVudCBgdGhpc2BcbiAgICBjb25zdCBib3VuZCA9ICguLi5hcmdzOiBRcmxBcmdzPFRZUEU+KTogVmFsdWVPclByb21pc2U8UXJsUmV0dXJuPFRZUEU+IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICBpZiAoIXFybC5yZXNvbHZlZCkge1xuICAgICAgICByZXR1cm4gcXJsLnJlc29sdmUoKS50aGVuKChmbikgPT4ge1xuICAgICAgICAgIGlmICghaXNGdW5jdGlvbihmbikpIHtcbiAgICAgICAgICAgIHRocm93IHFFcnJvcihRRXJyb3IucXJsSXNOb3RGdW5jdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBib3VuZCguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoYmVmb3JlRm4gJiYgYmVmb3JlRm4oKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGV4dCA9IGNyZWF0ZU9yUmV1c2VJbnZvY2F0aW9uQ29udGV4dChjdXJyZW50Q3R4KTtcbiAgICAgIGNvbnN0IHByZXZRcmwgPSBjb250ZXh0LiRxcmwkO1xuICAgICAgY29uc3QgcHJldkV2ZW50ID0gY29udGV4dC4kZXZlbnQkO1xuICAgICAgLy8gTm90ZSB0aGF0IHdlIHNldCB0aGUgcXJsIGhlcmUgaW5zdGVhZCBvZiBpbiB3cmFwRm4gYmVjYXVzZVxuICAgICAgLy8gaXQgaXMgcG9zc2libGUgd2UncmUgY2FsbGVkIG9uIGEgY29waWVkIHFybFxuICAgICAgY29udGV4dC4kcXJsJCA9IHFybDtcbiAgICAgIGNvbnRleHQuJGV2ZW50JCB8fD0gdGhpcyBhcyBFdmVudDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBpbnZva2UuY2FsbCh0aGlzLCBjb250ZXh0LCBzeW1ib2xSZWYgYXMgYW55LCAuLi4oYXJncyBhcyBhbnkpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnRleHQuJHFybCQgPSBwcmV2UXJsO1xuICAgICAgICBjb250ZXh0LiRldmVudCQgPSBwcmV2RXZlbnQ7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH1cblxuICBjb25zdCByZXNvbHZlTGF6eSA9IChjb250YWluZXJFbD86IEVsZW1lbnQpOiBWYWx1ZU9yUHJvbWlzZTxUWVBFPiA9PiB7XG4gICAgcmV0dXJuIHN5bWJvbFJlZiAhPT0gbnVsbCA/IHN5bWJvbFJlZiA6IHJlc29sdmUoY29udGFpbmVyRWwpO1xuICB9O1xuXG4gIC8vIFdyYXAgZnVuY3Rpb25zIHRvIHByb3ZpZGUgdGhlaXIgbGV4aWNhbCBzY29wZVxuICBjb25zdCB3cmFwRm4gPSAoZm46IFRZUEUpOiBUWVBFID0+IHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nIHx8ICghY2FwdHVyZT8ubGVuZ3RoICYmICFjYXB0dXJlUmVmPy5sZW5ndGgpKSB7XG4gICAgICByZXR1cm4gZm47XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAodGhpczogdW5rbm93biwgLi4uYXJnczogUXJsQXJnczxUWVBFPikge1xuICAgICAgbGV0IGNvbnRleHQgPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gICAgICAvLyB1c2UgdGhlIGdpdmVuIHFybCBpZiBpdCBpcyB0aGUgcmlnaHQgb25lXG4gICAgICBpZiAoY29udGV4dCkge1xuICAgICAgICAvLyBUT0RPIGNoZWNrIGlmIHRoaXMgaXMgbmVjZXNzYXJ5IGluIHByb2R1Y3Rpb25cbiAgICAgICAgaWYgKChjb250ZXh0LiRxcmwkIGFzIFFSTEludGVybmFsKT8uJHN5bWJvbCQgPT09IHFybC4kc3ltYm9sJCkge1xuICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2UXJsID0gY29udGV4dC4kcXJsJDtcbiAgICAgICAgY29udGV4dC4kcXJsJCA9IHFybDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgY29udGV4dC4kcXJsJCA9IHByZXZRcmw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRleHQgPSBuZXdJbnZva2VDb250ZXh0KCk7XG4gICAgICBjb250ZXh0LiRxcmwkID0gcXJsO1xuICAgICAgY29udGV4dC4kZXZlbnQkID0gdGhpcyBhcyBFdmVudDtcbiAgICAgIHJldHVybiBpbnZva2UuY2FsbCh0aGlzLCBjb250ZXh0LCBmbiBhcyBhbnksIC4uLmFyZ3MpO1xuICAgIH0gYXMgVFlQRTtcbiAgfTtcblxuICBjb25zdCByZXNvbHZlID0gYXN5bmMgKGNvbnRhaW5lckVsPzogRWxlbWVudCk6IFByb21pc2U8VFlQRT4gPT4ge1xuICAgIGlmIChzeW1ib2xSZWYgIT09IG51bGwpIHtcbiAgICAgIC8vIFJlc29sdmluZyAoUHJvbWlzZSkgb3IgYWxyZWFkeSByZXNvbHZlZCAodmFsdWUpXG4gICAgICByZXR1cm4gc3ltYm9sUmVmO1xuICAgIH1cbiAgICBpZiAoY29udGFpbmVyRWwpIHtcbiAgICAgIHNldENvbnRhaW5lcihjb250YWluZXJFbCk7XG4gICAgfVxuICAgIGlmIChjaHVuayA9PT0gJycpIHtcbiAgICAgIC8vIFN5bmMgUVJMXG4gICAgICBhc3NlcnREZWZpbmVkKF9jb250YWluZXJFbCwgJ1N5bmMgUVJMIG11c3QgaGF2ZSBjb250YWluZXIgZWxlbWVudCcpO1xuICAgICAgY29uc3QgaGFzaCA9IF9jb250YWluZXJFbC5nZXRBdHRyaWJ1dGUoUUluc3RhbmNlQXR0cikhO1xuICAgICAgY29uc3QgZG9jID0gX2NvbnRhaW5lckVsLm93bmVyRG9jdW1lbnQhO1xuICAgICAgY29uc3QgcUZ1bmNzID0gZ2V0UUZ1bmNzKGRvYywgaGFzaCk7XG4gICAgICAvLyBObyBuZWVkIHRvIHdyYXAsIHN5bmNRUkxzIGNhbid0IGhhdmUgY2FwdHVyZWQgc2NvcGVcbiAgICAgIHJldHVybiAocXJsLnJlc29sdmVkID0gc3ltYm9sUmVmID0gcUZ1bmNzW051bWJlcihzeW1ib2wpXSBhcyBUWVBFKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IG5vdygpO1xuICAgIGNvbnN0IGN0eCA9IHRyeUdldEludm9rZUNvbnRleHQoKTtcbiAgICBpZiAoc3ltYm9sRm4gIT09IG51bGwpIHtcbiAgICAgIHN5bWJvbFJlZiA9IHN5bWJvbEZuKCkudGhlbihcbiAgICAgICAgKG1vZHVsZSkgPT4gKHFybC5yZXNvbHZlZCA9IHdyYXBGbigoc3ltYm9sUmVmID0gbW9kdWxlW3N5bWJvbF0pKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGltcG9ydGVkID0gZ2V0UGxhdGZvcm0oKS5pbXBvcnRTeW1ib2woX2NvbnRhaW5lckVsLCBjaHVuaywgc3ltYm9sKTtcbiAgICAgIHN5bWJvbFJlZiA9IG1heWJlVGhlbihpbXBvcnRlZCwgKHJlZikgPT4gKHFybC5yZXNvbHZlZCA9IHdyYXBGbigoc3ltYm9sUmVmID0gcmVmKSkpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzeW1ib2xSZWYgPT09ICdvYmplY3QnICYmIGlzUHJvbWlzZShzeW1ib2xSZWYpKSB7XG4gICAgICBzeW1ib2xSZWYudGhlbihcbiAgICAgICAgKCkgPT4gZW1pdFVzZWRTeW1ib2woc3ltYm9sLCBjdHg/LiRlbGVtZW50JCwgc3RhcnQpLFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgcXJsICR7c3ltYm9sfSBmYWlsZWQgdG8gbG9hZGAsIGVycik7XG4gICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IGNhY2hlIHJlamVjdGlvbnMsIHdlIGNhbiB0cnkgYWdhaW4gbGF0ZXJcbiAgICAgICAgICBzeW1ib2xSZWYgPSBudWxsO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN5bWJvbFJlZjtcbiAgfTtcblxuICBjb25zdCBjcmVhdGVPclJldXNlSW52b2NhdGlvbkNvbnRleHQgPSAoaW52b2tlOiBJbnZva2VDb250ZXh0IHwgSW52b2tlVHVwbGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoaW52b2tlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXdJbnZva2VDb250ZXh0KCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KGludm9rZSkpIHtcbiAgICAgIHJldHVybiBuZXdJbnZva2VDb250ZXh0RnJvbVR1cGxlKGludm9rZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbnZva2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhc2ggPSBnZXRTeW1ib2xIYXNoKHN5bWJvbCk7XG5cbiAgT2JqZWN0LmFzc2lnbihxcmwsIHtcbiAgICBnZXRTeW1ib2w6ICgpID0+IHN5bWJvbCxcbiAgICBnZXRIYXNoOiAoKSA9PiBoYXNoLFxuICAgIGdldENhcHR1cmVkOiAoKSA9PiBjYXB0dXJlUmVmLFxuICAgIHJlc29sdmUsXG4gICAgJHJlc29sdmVMYXp5JDogcmVzb2x2ZUxhenksXG4gICAgJHNldENvbnRhaW5lciQ6IHNldENvbnRhaW5lcixcbiAgICAkY2h1bmskOiBjaHVuayxcbiAgICAkc3ltYm9sJDogc3ltYm9sLFxuICAgICRoYXNoJDogaGFzaCxcbiAgICBnZXRGbjogYmluZEZuVG9Db250ZXh0LFxuXG4gICAgJGNhcHR1cmUkOiBjYXB0dXJlLFxuICAgICRjYXB0dXJlUmVmJDogY2FwdHVyZVJlZixcbiAgICBkZXY6IG51bGwsXG4gICAgcmVzb2x2ZWQ6IHVuZGVmaW5lZCxcbiAgfSk7XG4gIGlmIChzeW1ib2xSZWYpIHtcbiAgICAvLyBVbndyYXAgYW55IHByb21pc2VzXG4gICAgc3ltYm9sUmVmID0gbWF5YmVUaGVuKHN5bWJvbFJlZiwgKHJlc29sdmVkKSA9PiAocXJsLnJlc29sdmVkID0gd3JhcEZuKChzeW1ib2xSZWYgPSByZXNvbHZlZCkpKSk7XG4gIH1cblxuICBpZiAoaXNEZXYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXJsLCAnX2Rldk9ubHlTeW1ib2xSZWYnLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xSZWY7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIGlmIChxRGV2KSB7XG4gICAgc2VhbChxcmwpO1xuICB9XG4gIHJldHVybiBxcmw7XG59O1xuXG5jb25zdCBFTUlUVEVEID0gLyojX19QVVJFX18qLyBuZXcgU2V0KCk7XG5cbmV4cG9ydCBjb25zdCBlbWl0VXNlZFN5bWJvbCA9IChzeW1ib2w6IHN0cmluZywgZWxlbWVudDogRWxlbWVudCB8IHVuZGVmaW5lZCwgcmVxVGltZTogbnVtYmVyKSA9PiB7XG4gIGlmICghRU1JVFRFRC5oYXMoc3ltYm9sKSkge1xuICAgIEVNSVRURUQuYWRkKHN5bWJvbCk7XG4gICAgZW1pdEV2ZW50KCdxc3ltYm9sJywge1xuICAgICAgc3ltYm9sLFxuICAgICAgZWxlbWVudCxcbiAgICAgIHJlcVRpbWUsXG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBlbWl0RXZlbnQgPSA8VCBleHRlbmRzIEN1c3RvbUV2ZW50ID0gYW55PihldmVudE5hbWU6IHN0cmluZywgZGV0YWlsOiBUWydkZXRhaWwnXSkgPT4ge1xuICBpZiAoIXFUZXN0ICYmICFpc1NlcnZlclBsYXRmb3JtKCkgJiYgdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0Jykge1xuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7XG4gICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICBkZXRhaWwsXG4gICAgICB9KSBhcyBUXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3Qgbm93ID0gKCkgPT4ge1xuICBpZiAocVRlc3QgfHwgaXNTZXJ2ZXJQbGF0Zm9ybSgpKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuIl19","import { qDev, qRuntimeQrl } from '../utils/qdev';\nimport { createQRL } from './qrl-class';\nimport { SYNC_QRL } from './qrl-utils';\nlet runtimeSymbolId = 0;\n// <docs markdown=\"../../readme.md#$\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../../readme.md#$ instead and run `pnpm docs.sync`)\n/**\n * Qwik Optimizer marker function.\n *\n * Use `$(...)` to tell Qwik Optimizer to extract the expression in `$(...)` into a lazy-loadable\n * resource referenced by `QRL`.\n *\n * @param expression - Expression which should be lazy loaded\n * @public\n * @see `implicit$FirstArg` for additional `____$(...)` rules.\n *\n * In this example, `$(...)` is used to capture the callback function of `onmousemove` into a\n * lazy-loadable reference. This allows the code to refer to the function without actually\n * loading the function. In this example, the callback function does not get loaded until\n * `mousemove` event fires.\n *\n * ```tsx\n * useOnDocument(\n *   'mousemove',\n *   $((event) => console.log('mousemove', event))\n * );\n * ```\n *\n * In this code, the Qwik Optimizer detects `$(...)` and transforms the code into:\n *\n * ```tsx\n * // FILE: <current file>\n * useOnDocument('mousemove', qrl('./chunk-abc.js', 'onMousemove'));\n *\n * // FILE: chunk-abc.js\n * export const onMousemove = () => console.log('mousemove');\n * ```\n *\n * ## Special Rules\n *\n * The Qwik Optimizer places special rules on functions that can be lazy-loaded.\n *\n * 1. The expression of the `$(expression)` function must be importable by the system.\n * (expression shows up in `import` or has `export`)\n * 2. If inlined function, then all lexically captured values must be:\n *    - importable (vars show up in `import`s or `export`s)\n *    - const (The capturing process differs from JS capturing in that writing to captured\n * variables does not update them, and therefore writes are forbidden. The best practice is that\n * all captured variables are constants.)\n *    - Must be runtime serializable.\n *\n * ```tsx\n *\n * import { createContextId, useContext, useContextProvider } from './use/use-context';\n * import { Resource } from './use/use-resource';\n * import { useResource$ } from './use/use-resource-dollar';\n * import { useSignal } from './use/use-signal';\n *\n * export const greet = () => console.log('greet');\n * function topLevelFn() {}\n *\n * function myCode() {\n *   const store = useStore({});\n *   function localFn() {}\n *   // Valid Examples\n *   $(greet); // greet is importable\n *   $(() => greet()); // greet is importable;\n *   $(() => console.log(store)); // store is serializable.\n *\n *   // Compile time errors\n *   $(topLevelFn); // ERROR: `topLevelFn` not importable\n *   $(() => topLevelFn()); // ERROR: `topLevelFn` not importable\n *\n *   // Runtime errors\n *   $(localFn); // ERROR: `localFn` fails serialization\n *   $(() => localFn()); // ERROR: `localFn` fails serialization\n * }\n *\n * ```\n */\n// </docs>\nexport const $ = (expression) => {\n    if (!qRuntimeQrl && qDev) {\n        throw new Error('Optimizer should replace all usages of $() with some special syntax. If you need to create a QRL manually, use inlinedQrl() instead.');\n    }\n    return createQRL(null, 's' + runtimeSymbolId++, expression, null, null, null);\n};\n/** @private Use To avoid optimizer replacement */\nexport const dollar = $;\n/** @internal */\nexport const eventQrl = (qrl) => {\n    return qrl;\n};\n/**\n * Extract function into a synchronously loadable QRL.\n *\n * NOTE: Synchronous QRLs functions can't close over any variables, including exports.\n *\n * @param fn - Function to extract.\n * @returns\n * @public\n */\nexport const sync$ = (fn) => {\n    if (!qRuntimeQrl && qDev) {\n        throw new Error('Optimizer should replace all usages of sync$() with some special syntax. If you need to create a QRL manually, use inlinedSyncQrl() instead.');\n    }\n    if (qDev) {\n        // To make sure that in dev mode we don't accidentally capture context in `sync$()` we serialize and deserialize the function.\n        // eslint-disable-next-line no-new-func\n        fn = new Function('return ' + fn.toString())();\n    }\n    return createQRL('', SYNC_QRL, fn, null, null, null);\n};\n/**\n * Extract function into a synchronously loadable QRL.\n *\n * NOTE: Synchronous QRLs functions can't close over any variables, including exports.\n *\n * @param fn - Extracted function\n * @param serializedFn - Serialized function in string form.\n * @returns\n * @internal\n */\nexport const _qrlSync = function (fn, serializedFn) {\n    if (serializedFn === undefined) {\n        serializedFn = fn.toString();\n    }\n    fn.serialized = serializedFn;\n    return createQRL('', SYNC_QRL, fn, null, null, null);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLnB1YmxpYy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvcXJsL3FybC5wdWJsaWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBK0p2QyxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFTeEIsc0NBQXNDO0FBQ3RDLHlDQUF5QztBQUN6Qyw0REFBNEQ7QUFDNUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RUc7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUksVUFBYSxFQUFVLEVBQUU7SUFDNUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUNiLHNJQUFzSSxDQUN2SSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFJLElBQUksRUFBRSxHQUFHLEdBQUcsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkYsQ0FBQyxDQUFDO0FBQ0Ysa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFFeEIsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFJLEdBQVcsRUFBVSxFQUFFO0lBQ2pELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBb0JGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQXFCLEVBQUssRUFBYyxFQUFFO0lBQzdELElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FDYiw4SUFBOEksQ0FDL0ksQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsOEhBQThIO1FBQzlILHVDQUF1QztRQUN2QyxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFTLENBQUM7SUFDeEQsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFRLENBQUM7QUFDakUsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFVBQ3RCLEVBQVEsRUFDUixZQUFxQjtJQUVyQixJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMvQixZQUFZLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFDQSxFQUFVLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztJQUN0QyxPQUFPLFNBQVMsQ0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBUSxDQUFDO0FBQ3BFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHFEZXYsIHFSdW50aW1lUXJsIH0gZnJvbSAnLi4vdXRpbHMvcWRldic7XG5pbXBvcnQgdHlwZSB7IFFSTERldiB9IGZyb20gJy4vcXJsJztcbmltcG9ydCB7IGNyZWF0ZVFSTCB9IGZyb20gJy4vcXJsLWNsYXNzJztcbmltcG9ydCB7IFNZTkNfUVJMIH0gZnJvbSAnLi9xcmwtdXRpbHMnO1xuXG4vLyBXZSB1c2UgYHVua25vd25gIGluc3RlYWQgb2YgYG5ldmVyYCB3aGVuIGl0J3Mgbm90IGEgZnVuY3Rpb24gc28gd2UgYWxsb3cgYXNzaWduaW5nIFFSTDxmdW5jdGlvbj4gdG8gUVJMPGFueT5cbmV4cG9ydCB0eXBlIFFybEFyZ3M8VD4gPSBUIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIEFSR1MpID0+IGFueSA/IEFSR1MgOiB1bmtub3duW107XG5leHBvcnQgdHlwZSBRcmxSZXR1cm48VD4gPSBUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueSkgPT4gaW5mZXIgUiA/IEF3YWl0ZWQ8Uj4gOiB1bmtub3duO1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uLy4uL3JlYWRtZS5tZCNRUkxcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi8uLi9yZWFkbWUubWQjUVJMIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBUaGUgYFFSTGAgdHlwZSByZXByZXNlbnRzIGEgbGF6eS1sb2FkYWJsZSBBTkQgc2VyaWFsaXphYmxlIHJlc291cmNlLlxuICpcbiAqIFFSTCBzdGFuZHMgZm9yIFF3aWsgVVJMLlxuICpcbiAqIFVzZSBgUVJMYCB3aGVuIHlvdSB3YW50IHRvIHJlZmVyIHRvIGEgbGF6eS1sb2FkZWQgcmVzb3VyY2UuIGBRUkxgcyBhcmUgbW9zdCBvZnRlbiB1c2VkIGZvciBjb2RlXG4gKiAoZnVuY3Rpb25zKSBidXQgY2FuIGFsc28gYmUgdXNlZCBmb3Igb3RoZXIgcmVzb3VyY2VzIHN1Y2ggYXMgYHN0cmluZ2BzIGluIHRoZSBjYXNlIG9mIHN0eWxlcy5cbiAqXG4gKiBgUVJMYCBpcyBhbiBvcGFxdWUgdG9rZW4gdGhhdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIFF3aWsgT3B0aW1pemVyLiAoRG8gbm90IHJlbHkgb24gYW55IHByb3BlcnRpZXNcbiAqIGluIGBRUkxgIGFzIGl0IG1heSBjaGFuZ2UgYmV0d2VlbiB2ZXJzaW9ucy4pXG4gKlxuICogIyMgQ3JlYXRpbmcgYFFSTGAgcmVmZXJlbmNlc1xuICpcbiAqIENyZWF0aW5nIGBRUkxgIGlzIGRvbmUgdXNpbmcgYCQoLi4uKWAgZnVuY3Rpb24uIGAkKC4uLilgIGlzIGEgc3BlY2lhbCBtYXJrZXIgZm9yIHRoZSBRd2lrXG4gKiBPcHRpbWl6ZXIgdGhhdCBtYXJrcyB0aGF0IHRoZSBjb2RlIHNob3VsZCBiZSBleHRyYWN0ZWQgaW50byBhIGxhenktbG9hZGVkIHN5bWJvbC5cbiAqXG4gKiBgYGB0c3hcbiAqIHVzZU9uRG9jdW1lbnQoXG4gKiAgICdtb3VzZW1vdmUnLFxuICogICAkKChldmVudCkgPT4gY29uc29sZS5sb2coJ21vdXNlbW92ZScsIGV2ZW50KSlcbiAqICk7XG4gKiBgYGBcbiAqXG4gKiBJbiB0aGUgYWJvdmUgY29kZSwgdGhlIFF3aWsgT3B0aW1pemVyIGRldGVjdHMgYCQoLi4uKWAgYW5kIHRyYW5zZm9ybXMgdGhlIGNvZGUgYXMgc2hvd24gYmVsb3c6XG4gKlxuICogYGBgdHN4XG4gKiAvLyBGSUxFOiA8Y3VycmVudCBmaWxlPlxuICogdXNlT25Eb2N1bWVudCgnbW91c2Vtb3ZlJywgcXJsKCcuL2NodW5rLWFiYy5qcycsICdvbk1vdXNlbW92ZScpKTtcbiAqXG4gKiAvLyBGSUxFOiBjaHVuay1hYmMuanNcbiAqIGV4cG9ydCBjb25zdCBvbk1vdXNlbW92ZSA9ICgpID0+IGNvbnNvbGUubG9nKCdtb3VzZW1vdmUnKTtcbiAqIGBgYFxuICpcbiAqIE5PVEU6IGBxcmwoLi4uKWAgaXMgYSByZXN1bHQgb2YgUXdpayBPcHRpbWl6ZXIgdHJhbnNmb3JtYXRpb24uIFlvdSBzaG91bGQgbmV2ZXIgaGF2ZSB0byBpbnZva2VcbiAqIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaW4geW91ciBhcHBsaWNhdGlvbi4gVGhlIGBxcmwoLi4uKWAgZnVuY3Rpb24gc2hvdWxkIGJlIGludm9rZWQgb25seSBhZnRlclxuICogdGhlIFF3aWsgT3B0aW1pemVyIHRyYW5zZm9ybWF0aW9uLlxuICpcbiAqICMjIFVzaW5nIGBRUkxgc1xuICpcbiAqIFVzZSBgUVJMYCB0eXBlIGluIHlvdXIgYXBwbGljYXRpb24gd2hlbiB5b3Ugd2FudCB0byBnZXQgYSBsYXp5LWxvYWRhYmxlIHJlZmVyZW5jZSB0byBhIHJlc291cmNlXG4gKiAobW9zdCBsaWtlbHkgYSBmdW5jdGlvbikuXG4gKlxuICogYGBgdHN4XG4gKiAvLyBFeGFtcGxlIG9mIGRlY2xhcmluZyBhIGN1c3RvbSBmdW5jdGlvbnMgd2hpY2ggdGFrZXMgY2FsbGJhY2sgYXMgUVJMLlxuICogZXhwb3J0IGZ1bmN0aW9uIHVzZU15RnVuY3Rpb24oY2FsbGJhY2s6IFFSTDwoKSA9PiB2b2lkPikge1xuICogICBkb0V4dHJhU3R1ZmYoKTtcbiAqICAgLy8gVGhlIGNhbGxiYWNrIHBhc3NlZCB0byBgb25Eb2N1bWVudGAgcmVxdWlyZXMgYFFSTGAuXG4gKiAgIHVzZU9uRG9jdW1lbnQoJ21vdXNlbW92ZScsIGNhbGxiYWNrKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgd2F5IHRvIHRoaW5rIGFib3V0IHRoZSBjb2RlIGlzIHRoYXQgeW91IGFyZSBub3QgYXNraW5nIGZvciBhIGNhbGxiYWNrXG4gKiBmdW5jdGlvbiBidXQgcmF0aGVyIGEgcmVmZXJlbmNlIHRvIGEgbGF6eS1sb2FkYWJsZSBjYWxsYmFjayBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb25cbiAqIGxvYWRpbmcgc2hvdWxkIGJlIGRlbGF5ZWQgdW50aWwgaXQgaXMgYWN0dWFsbHkgbmVlZGVkLiBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIHdvdWxkXG4gKiBub3QgbG9hZCB1bnRpbCBhZnRlciBhIGBtb3VzZW1vdmVgIGV2ZW50IG9uIGBkb2N1bWVudGAgZmlyZXMuXG4gKlxuICogIyMgUmVzb2x2aW5nIGBRUkxgIHJlZmVyZW5jZXNcbiAqXG4gKiBBdCB0aW1lcyBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHJlc29sdmUgYSBgUVJMYCByZWZlcmVuY2UgdG8gdGhlIGFjdHVhbCB2YWx1ZS4gVGhpcyBjYW4gYmVcbiAqIHBlcmZvcm1lZCB1c2luZyBgUVJMLnJlc29sdmUoLi4pYCBmdW5jdGlvbi5cbiAqXG4gKiBgYGB0c3hcbiAqIC8vIEFzc3VtZSB5b3UgaGF2ZSBRUkwgcmVmZXJlbmNlIHRvIGEgZ3JlZXQgZnVuY3Rpb25cbiAqIGNvbnN0IGxhenlHcmVldDogUVJMPCgpID0+IHZvaWQ+ID0gJCgoKSA9PiBjb25zb2xlLmxvZygnSGVsbG8gV29ybGQhJykpO1xuICpcbiAqIC8vIFVzZSBgcXJsSW1wb3J0YCB0byBsb2FkIC8gcmVzb2x2ZSB0aGUgcmVmZXJlbmNlLlxuICogY29uc3QgZ3JlZXQ6ICgpID0+IHZvaWQgPSBhd2FpdCBsYXp5R3JlZXQucmVzb2x2ZSgpO1xuICpcbiAqIC8vICBJbnZva2UgaXRcbiAqIGdyZWV0KCk7XG4gKiBgYGBcbiAqXG4gKiBOT1RFOiBgZWxlbWVudGAgaXMgbmVlZGVkIGJlY2F1c2UgYFFSTGBzIGFyZSByZWxhdGl2ZSBhbmQgbmVlZCBhIGJhc2UgbG9jYXRpb24gdG8gcmVzb2x2ZVxuICogYWdhaW5zdC4gVGhlIGJhc2UgbG9jYXRpb24gaXMgZW5jb2RlZCBpbiB0aGUgSFRNTCBpbiB0aGUgZm9ybSBvZiBgPGRpdiBxOmJhc2U9XCIvdXJsXCI+YC5cbiAqXG4gKiAjIyBgUVJMLnJlc29sdmVkYFxuICpcbiAqIE9uY2UgYFFSTC5yZXNvbHZlKClgIHJldHVybnMsIHRoZSB2YWx1ZSBpcyBzdG9yZWQgdW5kZXIgYFFSTC5yZXNvbHZlZGAuIFRoaXMgYWxsb3dzIHRoZSB2YWx1ZSB0b1xuICogYmUgdXNlZCB3aXRob3V0IGhhdmluZyB0byBhd2FpdCBgUVJMLnJlc29sdmUoKWAgYWdhaW4uXG4gKlxuICogIyMgUXVlc3Rpb246IFdoeSBub3QganVzdCB1c2UgYGltcG9ydCgpYD9cbiAqXG4gKiBBdCBmaXJzdCBnbGFuY2UsIGBRUkxgIHNlcnZlcyB0aGUgc2FtZSBwdXJwb3NlIGFzIGBpbXBvcnQoKWAuIEhvd2V2ZXIsIHRoZXJlIGFyZSB0aHJlZSBzdWJ0bGVcbiAqIGRpZmZlcmVuY2VzIHRoYXQgbmVlZCB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQuXG4gKlxuICogMS4gYFFSTGBzIG11c3QgYmUgc2VyaWFsaXphYmxlIGludG8gSFRNTC5cbiAqIDIuIGBRUkxgcyBtdXN0IGJlIHJlc29sdmVkIGJ5IGZyYW1ld29yayByZWxhdGl2ZSB0byBgcTpiYXNlYC5cbiAqIDMuIGBRUkxgcyBtdXN0IGJlIGFibGUgdG8gY2FwdHVyZSBsZXhpY2FsbHkgc2NvcGVkIHZhcmlhYmxlcy5cbiAqIDQuIGBRUkxgcyBlbmNhcHN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHJ1bm5pbmcgd2l0aCBhbmQgd2l0aG91dCBRd2lrIE9wdGltaXplci5cbiAqIDUuIGBRUkxgcyBhbGxvdyBleHByZXNzaW5nIGxhenktbG9hZGVkIGJvdW5kYXJpZXMgd2l0aG91dCB0aGlua2luZyBhYm91dCBjaHVuayBhbmQgc3ltYm9sIG5hbWVzLlxuICpcbiAqIExldCdzIGFzc3VtZSB0aGF0IHlvdSBpbnRlbmQgdG8gd3JpdGUgY29kZSBzdWNoIGFzIHRoaXM6XG4gKlxuICogYGBgdHN4XG4gKiByZXR1cm4gPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiAoYXdhaXQgaW1wb3J0KCcuL2NodW5rLWFiYy5qcycpKS5vbkNsaWNrfT5cbiAqIGBgYFxuICpcbiAqIFRoZSBhYm92ZSBjb2RlIG5lZWRzIHRvIGJlIHNlcmlhbGl6ZWQgaW50byBET00gc3VjaCBhczpcbiAqXG4gKiBgYGBcbiAqIDxkaXYgcTpiYXNlPVwiL2J1aWxkL1wiPlxuICogICA8YnV0dG9uIG9uOmNsaWNrPVwiLi9jaHVuay1hYmMuanMjb25DbGlja1wiPi4uLjwvYnV0dG9uPlxuICogPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiAxLiBOb3RpY2UgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZXh0cmFjdCBjaHVuayAoYC4vY2h1bmstYWJjLmpzYCkgYW5kIHN5bWJvbCAoYG9uQ2xpY2tgKSBpbnRvIEhUTUwuXG4gKiAyLiBOb3RpY2UgdGhhdCBldmVuIGlmIHlvdSBjb3VsZCBleHRyYWN0IGl0LCB0aGUgYGltcG9ydCgnLi9jaHVuay1hYmMuanMnKWAgd291bGQgYmVjb21lIHJlbGF0aXZlIHRvXG4gKiAgICB3aGVyZSB0aGUgYGltcG9ydCgpYCBmaWxlIGlzIGRlY2xhcmVkLiBCZWNhdXNlIGl0IGlzIG91ciBmcmFtZXdvcmsgZG9pbmcgdGhlIGxvYWQsIHRoZVxuICogICAgYC4vY2h1bmstYWJjLmpzYCB3b3VsZCBiZWNvbWUgcmVsYXRpdmUgdG8gdGhlIGZyYW1ld29yayBmaWxlLiBUaGlzIGlzIG5vdCBjb3JyZWN0LCBhcyBpdFxuICogICAgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBvcmlnaW5hbCBmaWxlIGdlbmVyYXRlZCBieSB0aGUgYnVuZGxlci5cbiAqIDMuIE5leHQsIHRoZSBmcmFtZXdvcmsgbmVlZHMgdG8gcmVzb2x2ZSB0aGUgYC4vY2h1bmstYWJjLmpzYCBhbmQgbmVlZHMgYSBiYXNlIGxvY2F0aW9uIHRoYXQgaXNcbiAqICAgIGVuY29kZWQgaW4gdGhlIEhUTUwuXG4gKiA0LiBUaGUgUVJMIG5lZWRzIHRvIGJlIGFibGUgdG8gY2FwdHVyZSBsZXhpY2FsbHkgc2NvcGVkIHZhcmlhYmxlcy4gKGBpbXBvcnQoKWAgb25seSBhbGxvd3MgbG9hZGluZ1xuICogICAgdG9wLWxldmVsIHN5bWJvbHMgd2hpY2ggZG9uJ3QgY2FwdHVyZSB2YXJpYWJsZXMuKVxuICogNS4gQXMgYSBkZXZlbG9wZXIsIHlvdSBkb24ndCB3YW50IHRvIHRoaW5rIGFib3V0IGBpbXBvcnRgIGFuZCBuYW1pbmcgdGhlIGNodW5rcyBhbmQgc3ltYm9scy4gWW91XG4gKiAgICBqdXN0IHdhbnQgdG8gc2F5OiBcInRoaXMgc2hvdWxkIGJlIGxhenkuXCJcbiAqXG4gKiBUaGVzZSBhcmUgdGhlIG1haW4gcmVhc29ucyB3aHkgUXdpayBpbnRyb2R1Y2VzIGl0cyBvd24gY29uY2VwdCBvZiBgUVJMYC5cbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIGAkYFxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgdHlwZSBRUkw8VFlQRSA9IHVua25vd24+ID0ge1xuICAvLyBTcGVjaWFsIHR5cGUgYnJhbmQgdG8gbGV0IGVzbGludCB0aGF0IHRoZSBUeXBlIGlzIHNlcmlhbGl6YWJsZVxuICBfX3F3aWtfc2VyaWFsaXphYmxlX18/OiBhbnk7XG4gIF9fYnJhbmRfX1FSTF9fOiBUWVBFO1xuXG4gIC8qKiBSZXNvbHZlIHRoZSBRUkwgYW5kIHJldHVybiB0aGUgYWN0dWFsIHZhbHVlLiAqL1xuICByZXNvbHZlKCk6IFByb21pc2U8VFlQRT47XG4gIC8qKiBUaGUgcmVzb2x2ZWQgdmFsdWUsIG9uY2UgYHJlc29sdmUoKWAgcmV0dXJucy4gKi9cbiAgcmVzb2x2ZWQ6IHVuZGVmaW5lZCB8IFRZUEU7XG5cbiAgZ2V0Q2FwdHVyZWQoKTogdW5rbm93bltdIHwgbnVsbDtcbiAgZ2V0U3ltYm9sKCk6IHN0cmluZztcbiAgZ2V0SGFzaCgpOiBzdHJpbmc7XG4gIGRldjogUVJMRGV2IHwgbnVsbDtcbn0gJiBCaXZhcmlhbnRRcmxGbjxRcmxBcmdzPFRZUEU+LCBRcmxSZXR1cm48VFlQRT4+O1xuXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MjY2Nzk1OS93aGF0LWlzLXRoZS1wdXJwb3NlLW9mLWJpdmFyaWFuY2VoYWNrLWluLXR5cGVzY3JpcHQtdHlwZXMvNTI2NjgxMzMjNTI2NjgxMzNcbnR5cGUgQml2YXJpYW50UXJsRm48QVJHUyBleHRlbmRzIGFueVtdLCBSRVRVUk4+ID0ge1xuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgUVJMIG9mIGNsb3N1cmUgYW5kIGludm9rZSBpdC5cbiAgICpcbiAgICogQHBhcmFtIGFyZ3MgLSBDbG9zdXJlIGFyZ3VtZW50cy5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNsb3N1cmUuXG4gICAqL1xuICBiaXZhcmlhbmNlSGFjayguLi5hcmdzOiBBUkdTKTogUHJvbWlzZTxSRVRVUk4+O1xufVsnYml2YXJpYW5jZUhhY2snXTtcblxubGV0IHJ1bnRpbWVTeW1ib2xJZCA9IDA7XG5cbi8qKlxuICogQWxpYXMgZm9yIGBRUkw8VD5gLiBPZiBoaXN0b3JpYyByZWxldmFuY2Ugb25seS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFByb3BGdW5jdGlvbjxUPiA9IFFSTDxUPjtcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi8uLi9yZWFkbWUubWQjJFwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uLy4uL3JlYWRtZS5tZCMkIGluc3RlYWQgYW5kIHJ1biBgcG5wbSBkb2NzLnN5bmNgKVxuLyoqXG4gKiBRd2lrIE9wdGltaXplciBtYXJrZXIgZnVuY3Rpb24uXG4gKlxuICogVXNlIGAkKC4uLilgIHRvIHRlbGwgUXdpayBPcHRpbWl6ZXIgdG8gZXh0cmFjdCB0aGUgZXhwcmVzc2lvbiBpbiBgJCguLi4pYCBpbnRvIGEgbGF6eS1sb2FkYWJsZVxuICogcmVzb3VyY2UgcmVmZXJlbmNlZCBieSBgUVJMYC5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gd2hpY2ggc2hvdWxkIGJlIGxhenkgbG9hZGVkXG4gKiBAcHVibGljXG4gKiBAc2VlIGBpbXBsaWNpdCRGaXJzdEFyZ2AgZm9yIGFkZGl0aW9uYWwgYF9fX18kKC4uLilgIHJ1bGVzLlxuICpcbiAqIEluIHRoaXMgZXhhbXBsZSwgYCQoLi4uKWAgaXMgdXNlZCB0byBjYXB0dXJlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBvZiBgb25tb3VzZW1vdmVgIGludG8gYVxuICogbGF6eS1sb2FkYWJsZSByZWZlcmVuY2UuIFRoaXMgYWxsb3dzIHRoZSBjb2RlIHRvIHJlZmVyIHRvIHRoZSBmdW5jdGlvbiB3aXRob3V0IGFjdHVhbGx5XG4gKiBsb2FkaW5nIHRoZSBmdW5jdGlvbi4gSW4gdGhpcyBleGFtcGxlLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZG9lcyBub3QgZ2V0IGxvYWRlZCB1bnRpbFxuICogYG1vdXNlbW92ZWAgZXZlbnQgZmlyZXMuXG4gKlxuICogYGBgdHN4XG4gKiB1c2VPbkRvY3VtZW50KFxuICogICAnbW91c2Vtb3ZlJyxcbiAqICAgJCgoZXZlbnQpID0+IGNvbnNvbGUubG9nKCdtb3VzZW1vdmUnLCBldmVudCkpXG4gKiApO1xuICogYGBgXG4gKlxuICogSW4gdGhpcyBjb2RlLCB0aGUgUXdpayBPcHRpbWl6ZXIgZGV0ZWN0cyBgJCguLi4pYCBhbmQgdHJhbnNmb3JtcyB0aGUgY29kZSBpbnRvOlxuICpcbiAqIGBgYHRzeFxuICogLy8gRklMRTogPGN1cnJlbnQgZmlsZT5cbiAqIHVzZU9uRG9jdW1lbnQoJ21vdXNlbW92ZScsIHFybCgnLi9jaHVuay1hYmMuanMnLCAnb25Nb3VzZW1vdmUnKSk7XG4gKlxuICogLy8gRklMRTogY2h1bmstYWJjLmpzXG4gKiBleHBvcnQgY29uc3Qgb25Nb3VzZW1vdmUgPSAoKSA9PiBjb25zb2xlLmxvZygnbW91c2Vtb3ZlJyk7XG4gKiBgYGBcbiAqXG4gKiAjIyBTcGVjaWFsIFJ1bGVzXG4gKlxuICogVGhlIFF3aWsgT3B0aW1pemVyIHBsYWNlcyBzcGVjaWFsIHJ1bGVzIG9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBsYXp5LWxvYWRlZC5cbiAqXG4gKiAxLiBUaGUgZXhwcmVzc2lvbiBvZiB0aGUgYCQoZXhwcmVzc2lvbilgIGZ1bmN0aW9uIG11c3QgYmUgaW1wb3J0YWJsZSBieSB0aGUgc3lzdGVtLlxuICogKGV4cHJlc3Npb24gc2hvd3MgdXAgaW4gYGltcG9ydGAgb3IgaGFzIGBleHBvcnRgKVxuICogMi4gSWYgaW5saW5lZCBmdW5jdGlvbiwgdGhlbiBhbGwgbGV4aWNhbGx5IGNhcHR1cmVkIHZhbHVlcyBtdXN0IGJlOlxuICogICAgLSBpbXBvcnRhYmxlICh2YXJzIHNob3cgdXAgaW4gYGltcG9ydGBzIG9yIGBleHBvcnRgcylcbiAqICAgIC0gY29uc3QgKFRoZSBjYXB0dXJpbmcgcHJvY2VzcyBkaWZmZXJzIGZyb20gSlMgY2FwdHVyaW5nIGluIHRoYXQgd3JpdGluZyB0byBjYXB0dXJlZFxuICogdmFyaWFibGVzIGRvZXMgbm90IHVwZGF0ZSB0aGVtLCBhbmQgdGhlcmVmb3JlIHdyaXRlcyBhcmUgZm9yYmlkZGVuLiBUaGUgYmVzdCBwcmFjdGljZSBpcyB0aGF0XG4gKiBhbGwgY2FwdHVyZWQgdmFyaWFibGVzIGFyZSBjb25zdGFudHMuKVxuICogICAgLSBNdXN0IGJlIHJ1bnRpbWUgc2VyaWFsaXphYmxlLlxuICpcbiAqIGBgYHRzeFxuICpcbiAqIGltcG9ydCB7IGNyZWF0ZUNvbnRleHRJZCwgdXNlQ29udGV4dCwgdXNlQ29udGV4dFByb3ZpZGVyIH0gZnJvbSAnLi91c2UvdXNlLWNvbnRleHQnO1xuICogaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICcuL3VzZS91c2UtcmVzb3VyY2UnO1xuICogaW1wb3J0IHsgdXNlUmVzb3VyY2UkIH0gZnJvbSAnLi91c2UvdXNlLXJlc291cmNlLWRvbGxhcic7XG4gKiBpbXBvcnQgeyB1c2VTaWduYWwgfSBmcm9tICcuL3VzZS91c2Utc2lnbmFsJztcbiAqXG4gKiBleHBvcnQgY29uc3QgZ3JlZXQgPSAoKSA9PiBjb25zb2xlLmxvZygnZ3JlZXQnKTtcbiAqIGZ1bmN0aW9uIHRvcExldmVsRm4oKSB7fVxuICpcbiAqIGZ1bmN0aW9uIG15Q29kZSgpIHtcbiAqICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSh7fSk7XG4gKiAgIGZ1bmN0aW9uIGxvY2FsRm4oKSB7fVxuICogICAvLyBWYWxpZCBFeGFtcGxlc1xuICogICAkKGdyZWV0KTsgLy8gZ3JlZXQgaXMgaW1wb3J0YWJsZVxuICogICAkKCgpID0+IGdyZWV0KCkpOyAvLyBncmVldCBpcyBpbXBvcnRhYmxlO1xuICogICAkKCgpID0+IGNvbnNvbGUubG9nKHN0b3JlKSk7IC8vIHN0b3JlIGlzIHNlcmlhbGl6YWJsZS5cbiAqXG4gKiAgIC8vIENvbXBpbGUgdGltZSBlcnJvcnNcbiAqICAgJCh0b3BMZXZlbEZuKTsgLy8gRVJST1I6IGB0b3BMZXZlbEZuYCBub3QgaW1wb3J0YWJsZVxuICogICAkKCgpID0+IHRvcExldmVsRm4oKSk7IC8vIEVSUk9SOiBgdG9wTGV2ZWxGbmAgbm90IGltcG9ydGFibGVcbiAqXG4gKiAgIC8vIFJ1bnRpbWUgZXJyb3JzXG4gKiAgICQobG9jYWxGbik7IC8vIEVSUk9SOiBgbG9jYWxGbmAgZmFpbHMgc2VyaWFsaXphdGlvblxuICogICAkKCgpID0+IGxvY2FsRm4oKSk7IC8vIEVSUk9SOiBgbG9jYWxGbmAgZmFpbHMgc2VyaWFsaXphdGlvblxuICogfVxuICpcbiAqIGBgYFxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgJCA9IDxUPihleHByZXNzaW9uOiBUKTogUVJMPFQ+ID0+IHtcbiAgaWYgKCFxUnVudGltZVFybCAmJiBxRGV2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ09wdGltaXplciBzaG91bGQgcmVwbGFjZSBhbGwgdXNhZ2VzIG9mICQoKSB3aXRoIHNvbWUgc3BlY2lhbCBzeW50YXguIElmIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIFFSTCBtYW51YWxseSwgdXNlIGlubGluZWRRcmwoKSBpbnN0ZWFkLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVFSTDxUPihudWxsLCAncycgKyBydW50aW1lU3ltYm9sSWQrKywgZXhwcmVzc2lvbiwgbnVsbCwgbnVsbCwgbnVsbCk7XG59O1xuLyoqIEBwcml2YXRlIFVzZSBUbyBhdm9pZCBvcHRpbWl6ZXIgcmVwbGFjZW1lbnQgKi9cbmV4cG9ydCBjb25zdCBkb2xsYXIgPSAkO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgZXZlbnRRcmwgPSA8VD4ocXJsOiBRUkw8VD4pOiBRUkw8VD4gPT4ge1xuICByZXR1cm4gcXJsO1xufTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3luY1FSTDxUWVBFIGV4dGVuZHMgRnVuY3Rpb24gPSBhbnk+IGV4dGVuZHMgUVJMPFRZUEU+IHtcbiAgX19icmFuZF9fU3luY1FSTF9fOiBUWVBFO1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBRUkwgb2YgY2xvc3VyZSBhbmQgaW52b2tlIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gYXJncyAtIENsb3N1cmUgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyBBIHJldHVybiB2YWx1ZSBvZiB0aGUgY2xvc3VyZS5cbiAgICovXG4gIChcbiAgICAuLi5hcmdzOiBUWVBFIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIEFSR1MpID0+IGFueSA/IEFSR1MgOiBuZXZlclxuICApOiBUWVBFIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBpbmZlciBSRVRVUk4gPyBSRVRVUk4gOiBuZXZlcjtcblxuICByZXNvbHZlZDogVFlQRTtcbiAgZGV2OiBRUkxEZXYgfCBudWxsO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgZnVuY3Rpb24gaW50byBhIHN5bmNocm9ub3VzbHkgbG9hZGFibGUgUVJMLlxuICpcbiAqIE5PVEU6IFN5bmNocm9ub3VzIFFSTHMgZnVuY3Rpb25zIGNhbid0IGNsb3NlIG92ZXIgYW55IHZhcmlhYmxlcywgaW5jbHVkaW5nIGV4cG9ydHMuXG4gKlxuICogQHBhcmFtIGZuIC0gRnVuY3Rpb24gdG8gZXh0cmFjdC5cbiAqIEByZXR1cm5zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzeW5jJCA9IDxUIGV4dGVuZHMgRnVuY3Rpb24+KGZuOiBUKTogU3luY1FSTDxUPiA9PiB7XG4gIGlmICghcVJ1bnRpbWVRcmwgJiYgcURldikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdPcHRpbWl6ZXIgc2hvdWxkIHJlcGxhY2UgYWxsIHVzYWdlcyBvZiBzeW5jJCgpIHdpdGggc29tZSBzcGVjaWFsIHN5bnRheC4gSWYgeW91IG5lZWQgdG8gY3JlYXRlIGEgUVJMIG1hbnVhbGx5LCB1c2UgaW5saW5lZFN5bmNRcmwoKSBpbnN0ZWFkLidcbiAgICApO1xuICB9XG4gIGlmIChxRGV2KSB7XG4gICAgLy8gVG8gbWFrZSBzdXJlIHRoYXQgaW4gZGV2IG1vZGUgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IGNhcHR1cmUgY29udGV4dCBpbiBgc3luYyQoKWAgd2Ugc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZm4gPSBuZXcgRnVuY3Rpb24oJ3JldHVybiAnICsgZm4udG9TdHJpbmcoKSkoKSBhcyBhbnk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUVJMPFQ+KCcnLCBTWU5DX1FSTCwgZm4sIG51bGwsIG51bGwsIG51bGwpIGFzIGFueTtcbn07XG5cbi8qKlxuICogRXh0cmFjdCBmdW5jdGlvbiBpbnRvIGEgc3luY2hyb25vdXNseSBsb2FkYWJsZSBRUkwuXG4gKlxuICogTk9URTogU3luY2hyb25vdXMgUVJMcyBmdW5jdGlvbnMgY2FuJ3QgY2xvc2Ugb3ZlciBhbnkgdmFyaWFibGVzLCBpbmNsdWRpbmcgZXhwb3J0cy5cbiAqXG4gKiBAcGFyYW0gZm4gLSBFeHRyYWN0ZWQgZnVuY3Rpb25cbiAqIEBwYXJhbSBzZXJpYWxpemVkRm4gLSBTZXJpYWxpemVkIGZ1bmN0aW9uIGluIHN0cmluZyBmb3JtLlxuICogQHJldHVybnNcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgX3FybFN5bmMgPSBmdW5jdGlvbiA8VFlQRSBleHRlbmRzIEZ1bmN0aW9uPihcbiAgZm46IFRZUEUsXG4gIHNlcmlhbGl6ZWRGbj86IHN0cmluZ1xuKTogU3luY1FSTDxUWVBFPiB7XG4gIGlmIChzZXJpYWxpemVkRm4gPT09IHVuZGVmaW5lZCkge1xuICAgIHNlcmlhbGl6ZWRGbiA9IGZuLnRvU3RyaW5nKCk7XG4gIH1cbiAgKGZuIGFzIGFueSkuc2VyaWFsaXplZCA9IHNlcmlhbGl6ZWRGbjtcbiAgcmV0dXJuIGNyZWF0ZVFSTDxUWVBFPignJywgU1lOQ19RUkwsIGZuLCBudWxsLCBudWxsLCBudWxsKSBhcyBhbnk7XG59O1xuIl19","import { dollar } from './qrl/qrl.public';\nimport { _jsxSplit } from '../internal';\nimport { assertNumber } from './error/assert';\nimport { qTest } from './utils/qdev';\nimport { assertQrl } from './qrl/qrl-utils';\n/** @internal */\nexport const componentQrl = (componentQrl) => {\n    // Return a QComponent Factory function.\n    function QwikComponent(props, key, flags = 0) {\n        assertQrl(componentQrl);\n        assertNumber(flags, 'The Qwik Component was not invoked correctly');\n        const hash = qTest ? 'sX' : componentQrl.$hash$.slice(0, 4);\n        const finalKey = hash + ':' + (key ? key : '');\n        const InnerCmp = () => { };\n        InnerCmp[SERIALIZABLE_STATE] = [componentQrl];\n        return _jsxSplit(InnerCmp, props, null, props.children, flags, finalKey);\n    }\n    QwikComponent[SERIALIZABLE_STATE] = [componentQrl];\n    return QwikComponent;\n};\nexport const SERIALIZABLE_STATE = Symbol('serializable-data');\nexport const isQwikComponent = (component) => {\n    return typeof component == 'function' && component[SERIALIZABLE_STATE] !== undefined;\n};\n// <docs markdown=\"../readme.md#component\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#component instead and run `pnpm docs.sync`)\n/**\n * Declare a Qwik component that can be used to create UI.\n *\n * Use `component$` to declare a Qwik component. A Qwik component is a special kind of component\n * that allows the Qwik framework to lazy load and execute the component independently of other Qwik\n * components as well as lazy load the component's life-cycle hooks and event handlers.\n *\n * Side note: You can also declare regular (standard JSX) components that will have standard\n * synchronous behavior.\n *\n * Qwik component is a facade that describes how the component should be used without forcing the\n * implementation of the component to be eagerly loaded. A minimum Qwik definition consists of:\n *\n * ### Example\n *\n * An example showing how to create a counter component:\n *\n * ```tsx\n * export interface CounterProps {\n *   initialValue?: number;\n *   step?: number;\n * }\n * export const Counter = component$((props: CounterProps) => {\n *   const state = useStore({ count: props.initialValue || 0 });\n *   return (\n *     <div>\n *       <span>{state.count}</span>\n *       <button onClick$={() => (state.count += props.step || 1)}>+</button>\n *     </div>\n *   );\n * });\n * ```\n *\n * - `component$` is how a component gets declared.\n * - `{ value?: number; step?: number }` declares the public (props) interface of the component.\n * - `{ count: number }` declares the private (state) interface of the component.\n *\n * The above can then be used like so:\n *\n * ```tsx\n * export const OtherComponent = component$(() => {\n *   return <Counter initialValue={100} />;\n * });\n * ```\n *\n * See also: `component`, `useCleanup`, `onResume`, `onPause`, `useOn`, `useOnDocument`,\n * `useOnWindow`, `useStyles`\n *\n * @public\n */\n// </docs>\nexport const component$ = (onMount) => {\n    return componentQrl(dollar(onMount));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LnB1YmxpYy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvY29tcG9uZW50LnB1YmxpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFTcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFpSDVDLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FDMUIsWUFBb0MsRUFDbEIsRUFBRTtJQUNwQix3Q0FBd0M7SUFDeEMsU0FBUyxhQUFhLENBQ3BCLEtBQXlCLEVBQ3pCLEdBQWtCLEVBQ2xCLFFBQWdCLENBQUM7UUFFakIsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hCLFlBQVksQ0FBQyxLQUFLLEVBQUUsOENBQThDLENBQUMsQ0FBQztRQUNwRSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQ3pCLFFBQWdCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sU0FBUyxDQUFDLFFBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFDQSxhQUFxQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1RCxPQUFPLGFBQW9CLENBQUM7QUFDOUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFOUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQTJCLFNBQWtCLEVBQWtCLEVBQUU7SUFDOUYsT0FBTyxPQUFPLFNBQVMsSUFBSSxVQUFVLElBQUssU0FBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUNoRyxDQUFDLENBQUM7QUFFRiwyQ0FBMkM7QUFDM0MseUNBQXlDO0FBQ3pDLGlFQUFpRTtBQUNqRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQUNILFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBa0IsT0FBMEIsRUFBb0IsRUFBRTtJQUMxRixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkb2xsYXIsIHR5cGUgUVJMIH0gZnJvbSAnLi9xcmwvcXJsLnB1YmxpYyc7XG5pbXBvcnQgdHlwZSB7IEpTWE5vZGVJbnRlcm5hbCwgSlNYT3V0cHV0IH0gZnJvbSAnLi9qc3gvdHlwZXMvanN4LW5vZGUnO1xuaW1wb3J0IHR5cGUge1xuICBDb21wb25lbnRCYXNlUHJvcHMsXG4gIEV2ZW50SGFuZGxlcixcbiAgSlNYQ2hpbGRyZW4sXG4gIFFSTEV2ZW50SGFuZGxlck11bHRpLFxufSBmcm9tICcuL2pzeC90eXBlcy9qc3gtcXdpay1hdHRyaWJ1dGVzJztcbmltcG9ydCB0eXBlIHsgRnVuY3Rpb25Db21wb25lbnQgfSBmcm9tICcuL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5pbXBvcnQgeyBfanN4U3BsaXQgfSBmcm9tICcuLi9pbnRlcm5hbCc7XG5pbXBvcnQgdHlwZSB7IFF3aWtJbnRyaW5zaWNFbGVtZW50cyB9IGZyb20gJy4vanN4L3R5cGVzL2pzeC1xd2lrLWVsZW1lbnRzJztcbmltcG9ydCB7IGFzc2VydE51bWJlciB9IGZyb20gJy4vZXJyb3IvYXNzZXJ0JztcbmltcG9ydCB7IHFUZXN0IH0gZnJvbSAnLi91dGlscy9xZGV2JztcbmltcG9ydCB7IGFzc2VydFFybCB9IGZyb20gJy4vcXJsL3FybC11dGlscyc7XG5cbi8vIFRTIHdheSB0byBjaGVjayBmb3IgYW55XG50eXBlIElzQW55PFQ+ID0gMCBleHRlbmRzIFQgJiAxID8gdHJ1ZSA6IGZhbHNlO1xuXG50eXBlIE9iamVjdFByb3BzPFQ+ID1cbiAgSXNBbnk8VD4gZXh0ZW5kcyB0cnVlXG4gICAgPyBhbnlcbiAgICA6IC8vIHVua25vd24gbWVhbnMgd2UgZG9uJ3QgYWNjZXB0IGFueSBwcm9wc1xuICAgICAgdW5rbm93biBleHRlbmRzIFRcbiAgICAgID8gbmV2ZXJcbiAgICAgIDogVCBleHRlbmRzIFJlY29yZDxhbnksIGFueT5cbiAgICAgICAgPyBUXG4gICAgICAgIDogbmV2ZXI7XG5cbi8qKlxuICogSW5mZXJzIGBQcm9wc2AgZnJvbSB0aGUgY29tcG9uZW50IG9yIHRhZy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzeFxuICogY29uc3QgRGVzYyA9IGNvbXBvbmVudCQoKHtkZXNjLCAuLi5wcm9wc306IHsgZGVzYzogc3RyaW5nIH0gJiBQcm9wc09mPCdkaXYnPikgPT4ge1xuICogIHJldHVybiA8ZGl2IHsuLi5wcm9wc30+e2Rlc2N9PC9kaXY+O1xuICogfSk7XG4gKlxuICogY29uc3QgVGl0bGVCb3ggPSBjb21wb25lbnQkKCh7dGl0bGUsIC4uLnByb3BzfTogeyB0aXRsZTogc3RyaW5nIH0gJiBQcm9wc09mPEJveD4pID0+IHtcbiAqICAgcmV0dXJuIDxCb3ggey4uLnByb3BzfT48aDE+e3RpdGxlfTwvaDE+PC9Cb3g+O1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCB0eXBlIFByb3BzT2Y8Q09NUD4gPSBDT01QIGV4dGVuZHMgc3RyaW5nXG4gID8gQ09NUCBleHRlbmRzIGtleW9mIFF3aWtJbnRyaW5zaWNFbGVtZW50c1xuICAgID8gUXdpa0ludHJpbnNpY0VsZW1lbnRzW0NPTVBdXG4gICAgOiAvLyBgPHNwYW4vPmAgaGFzIG5vIHNwZWNpYWwgYXR0cmlidXRlc1xuICAgICAgUXdpa0ludHJpbnNpY0VsZW1lbnRzWydzcGFuJ11cbiAgOiBOb25OdWxsYWJsZTxDT01QPiBleHRlbmRzIG5ldmVyXG4gICAgPyBuZXZlclxuICAgIDogQ09NUCBleHRlbmRzIEZ1bmN0aW9uQ29tcG9uZW50PGluZmVyIFBST1BTPlxuICAgICAgPyBQUk9QUyBleHRlbmRzIFJlY29yZDxhbnksIGluZmVyIFY+XG4gICAgICAgID8gSXNBbnk8Vj4gZXh0ZW5kcyB0cnVlXG4gICAgICAgICAgPyAvLyB3ZSBjb3VsZG4ndCBmaWd1cmUgaXQgb3V0XG4gICAgICAgICAgICBuZXZlclxuICAgICAgICAgIDogT2JqZWN0UHJvcHM8UFJPUFM+XG4gICAgICAgIDogQ09NUCBleHRlbmRzIENvbXBvbmVudDxpbmZlciBPcmlnUHJvcHM+XG4gICAgICAgICAgPyBPYmplY3RQcm9wczxPcmlnUHJvcHM+XG4gICAgICAgICAgOiAvLyBzb21ldGhpbmcgY29tcGxleCwganVzdCByZXR1cm4gYXMtaXNcbiAgICAgICAgICAgIFBST1BTXG4gICAgICA6IG5ldmVyO1xuXG4vKipcbiAqIFR5cGUgcmVwcmVzZW50aW5nIHRoZSBRd2lrIGNvbXBvbmVudC5cbiAqXG4gKiBgQ29tcG9uZW50YCBpcyB0aGUgdHlwZSByZXR1cm5lZCBieSBpbnZva2luZyBgY29tcG9uZW50JGAuXG4gKlxuICogYGBgdHN4XG4gKiBpbnRlcmZhY2UgTXlDb21wb25lbnRQcm9wcyB7XG4gKiAgIHNvbWVQcm9wOiBzdHJpbmc7XG4gKiB9XG4gKiBjb25zdCBNeUNvbXBvbmVudDogQ29tcG9uZW50PE15Q29tcG9uZW50UHJvcHM+ID0gY29tcG9uZW50JCgocHJvcHM6IE15Q29tcG9uZW50UHJvcHMpID0+IHtcbiAqICAgcmV0dXJuIDxzcGFuPntwcm9wcy5zb21lUHJvcH08L3NwYW4+O1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbi8vIEluIHJlYWxpdHksIENvbXBvbmVudCBpcyBhIFFSTCBidXQgdGhhdCBtYWtlcyB0aGUgdHlwZXMgdG9vIGNvbXBsZXhcbmV4cG9ydCB0eXBlIENvbXBvbmVudDxQUk9QUyA9IHVua25vd24+ID0gRnVuY3Rpb25Db21wb25lbnQ8UHVibGljUHJvcHM8UFJPUFM+PjtcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW48UFJPUFM+ID0gUFJPUFMgZXh0ZW5kcyB7XG4gIGNoaWxkcmVuOiBhbnk7XG59XG4gID8gbmV2ZXJcbiAgOiB7IGNoaWxkcmVuPzogSlNYQ2hpbGRyZW4gfTtcbi8qKlxuICogRXh0ZW5kcyB0aGUgZGVmaW5lZCBjb21wb25lbnQgUFJPUFMsIGFkZGluZyB0aGUgZGVmYXVsdCBvbmVzIChjaGlsZHJlbiBhbmQgcTpzbG90KSBhbmQgYWxsb3dpbmdcbiAqIHBsYWluIGZ1bmN0aW9ucyB0byBRUkwgYXJndW1lbnRzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUHVibGljUHJvcHM8UFJPUFM+ID1cbiAgLy8gVXNlIE9taXQgKyBfT25seSQgc28gdGhhdCBpbmZlcnJpbmcgcG9seW1vcnBpYyBjb21wb25lbnRzIHdvcmtzXG4gIC8vIE1hcHBpbmcgdGhlIGVudGlyZSBQUk9QUyBkb2Vzbid0IHdvcmssIG1heWJlIFRTIGRvZXNuJ3QgbGlrZSBpbmZlcnJpbmcgdGhyb3VnaCBjb25kaXRpb25hbCB0eXBlc1xuICAoUFJPUFMgZXh0ZW5kcyBSZWNvcmQ8YW55LCBhbnk+XG4gICAgPyBPbWl0PFBST1BTLCBgJHtzdHJpbmd9JGA+ICYgX09ubHkkPFBST1BTPlxuICAgIDogdW5rbm93biBleHRlbmRzIFBST1BTXG4gICAgICA/IHt9XG4gICAgICA6IFBST1BTKSAmXG4gICAgQ29tcG9uZW50QmFzZVByb3BzICZcbiAgICBDb21wb25lbnRDaGlsZHJlbjxQUk9QUz47XG5cbnR5cGUgX0FsbG93UGxhaW5Rcmw8UT4gPVxuICAvLyBRUkxFdmVudEhhbmRsZXJNdWx0aSBnZXRzIGEgc3BlY2lhbCBjYXNlIHRvIHNpbXBsaWZ5IHRoZSByZXN1bHRcbiAgLy8gSXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBjYXJlZnVsbHkgYmVjYXVzZSBpdCBtYXRjaGVzIHJlZ3VsYXIgZnVuY3Rpb25zIHRvb1xuICBRUkxFdmVudEhhbmRsZXJNdWx0aTxhbnksIGFueT4gZXh0ZW5kcyBRXG4gICAgPyBRIGV4dGVuZHMgUVJMRXZlbnRIYW5kbGVyTXVsdGk8aW5mZXIgRVYsIGluZmVyIEVMPlxuICAgICAgP1xuICAgICAgICAgIHwgUVxuICAgICAgICAgIC8vIEl0IGNhbiBpbmZlciB1bmtub3duIGFuZCB0aGF0IGJyZWFrcyB0aGluZ3NcbiAgICAgICAgICB8IChFTCBleHRlbmRzIEVsZW1lbnQgPyBFdmVudEhhbmRsZXI8RVYsIEVMPiA6IG5ldmVyKVxuICAgICAgOiBRXG4gICAgOiBRIGV4dGVuZHMgUVJMPGluZmVyIFU+XG4gICAgICA/IFEgfCBVXG4gICAgICA6IE5vbk51bGxhYmxlPFE+IGV4dGVuZHMgbmV2ZXJcbiAgICAgICAgPyBRXG4gICAgICAgIDogUVJMPFE+IHwgUTtcblxudHlwZSBfT25seSQ8UD4gPSB7XG4gIFtLIGluIGtleW9mIFAgYXMgSyBleHRlbmRzIGAke3N0cmluZ30kYCA/IEsgOiBuZXZlcl06IF9BbGxvd1BsYWluUXJsPFBbS10+O1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGNvbXBvbmVudFFybCA9IDxQUk9QUyBleHRlbmRzIFJlY29yZDxhbnksIGFueT4+KFxuICBjb21wb25lbnRRcmw6IFFSTDxPblJlbmRlckZuPFBST1BTPj5cbik6IENvbXBvbmVudDxQUk9QUz4gPT4ge1xuICAvLyBSZXR1cm4gYSBRQ29tcG9uZW50IEZhY3RvcnkgZnVuY3Rpb24uXG4gIGZ1bmN0aW9uIFF3aWtDb21wb25lbnQoXG4gICAgcHJvcHM6IFB1YmxpY1Byb3BzPFBST1BTPixcbiAgICBrZXk6IHN0cmluZyB8IG51bGwsXG4gICAgZmxhZ3M6IG51bWJlciA9IDBcbiAgKTogSlNYTm9kZUludGVybmFsIHtcbiAgICBhc3NlcnRRcmwoY29tcG9uZW50UXJsKTtcbiAgICBhc3NlcnROdW1iZXIoZmxhZ3MsICdUaGUgUXdpayBDb21wb25lbnQgd2FzIG5vdCBpbnZva2VkIGNvcnJlY3RseScpO1xuICAgIGNvbnN0IGhhc2ggPSBxVGVzdCA/ICdzWCcgOiBjb21wb25lbnRRcmwuJGhhc2gkLnNsaWNlKDAsIDQpO1xuICAgIGNvbnN0IGZpbmFsS2V5ID0gaGFzaCArICc6JyArIChrZXkgPyBrZXkgOiAnJyk7XG4gICAgY29uc3QgSW5uZXJDbXAgPSAoKSA9PiB7fTtcbiAgICAoSW5uZXJDbXAgYXMgYW55KVtTRVJJQUxJWkFCTEVfU1RBVEVdID0gW2NvbXBvbmVudFFybF07XG4gICAgcmV0dXJuIF9qc3hTcGxpdChJbm5lckNtcCBhcyBhbnksIHByb3BzLCBudWxsLCBwcm9wcy5jaGlsZHJlbiwgZmxhZ3MsIGZpbmFsS2V5KTtcbiAgfVxuICAoUXdpa0NvbXBvbmVudCBhcyBhbnkpW1NFUklBTElaQUJMRV9TVEFURV0gPSBbY29tcG9uZW50UXJsXTtcbiAgcmV0dXJuIFF3aWtDb21wb25lbnQgYXMgYW55O1xufTtcblxuZXhwb3J0IGNvbnN0IFNFUklBTElaQUJMRV9TVEFURSA9IFN5bWJvbCgnc2VyaWFsaXphYmxlLWRhdGEnKTtcblxuZXhwb3J0IGNvbnN0IGlzUXdpa0NvbXBvbmVudCA9IDxUIGV4dGVuZHMgQ29tcG9uZW50PGFueT4+KGNvbXBvbmVudDogdW5rbm93bik6IGNvbXBvbmVudCBpcyBUID0+IHtcbiAgcmV0dXJuIHR5cGVvZiBjb21wb25lbnQgPT0gJ2Z1bmN0aW9uJyAmJiAoY29tcG9uZW50IGFzIGFueSlbU0VSSUFMSVpBQkxFX1NUQVRFXSAhPT0gdW5kZWZpbmVkO1xufTtcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi9yZWFkbWUubWQjY29tcG9uZW50XCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vcmVhZG1lLm1kI2NvbXBvbmVudCBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogRGVjbGFyZSBhIFF3aWsgY29tcG9uZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIFVJLlxuICpcbiAqIFVzZSBgY29tcG9uZW50JGAgdG8gZGVjbGFyZSBhIFF3aWsgY29tcG9uZW50LiBBIFF3aWsgY29tcG9uZW50IGlzIGEgc3BlY2lhbCBraW5kIG9mIGNvbXBvbmVudFxuICogdGhhdCBhbGxvd3MgdGhlIFF3aWsgZnJhbWV3b3JrIHRvIGxhenkgbG9hZCBhbmQgZXhlY3V0ZSB0aGUgY29tcG9uZW50IGluZGVwZW5kZW50bHkgb2Ygb3RoZXIgUXdpa1xuICogY29tcG9uZW50cyBhcyB3ZWxsIGFzIGxhenkgbG9hZCB0aGUgY29tcG9uZW50J3MgbGlmZS1jeWNsZSBob29rcyBhbmQgZXZlbnQgaGFuZGxlcnMuXG4gKlxuICogU2lkZSBub3RlOiBZb3UgY2FuIGFsc28gZGVjbGFyZSByZWd1bGFyIChzdGFuZGFyZCBKU1gpIGNvbXBvbmVudHMgdGhhdCB3aWxsIGhhdmUgc3RhbmRhcmRcbiAqIHN5bmNocm9ub3VzIGJlaGF2aW9yLlxuICpcbiAqIFF3aWsgY29tcG9uZW50IGlzIGEgZmFjYWRlIHRoYXQgZGVzY3JpYmVzIGhvdyB0aGUgY29tcG9uZW50IHNob3VsZCBiZSB1c2VkIHdpdGhvdXQgZm9yY2luZyB0aGVcbiAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgZWFnZXJseSBsb2FkZWQuIEEgbWluaW11bSBRd2lrIGRlZmluaXRpb24gY29uc2lzdHMgb2Y6XG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBBbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIGNyZWF0ZSBhIGNvdW50ZXIgY29tcG9uZW50OlxuICpcbiAqIGBgYHRzeFxuICogZXhwb3J0IGludGVyZmFjZSBDb3VudGVyUHJvcHMge1xuICogICBpbml0aWFsVmFsdWU/OiBudW1iZXI7XG4gKiAgIHN0ZXA/OiBudW1iZXI7XG4gKiB9XG4gKiBleHBvcnQgY29uc3QgQ291bnRlciA9IGNvbXBvbmVudCQoKHByb3BzOiBDb3VudGVyUHJvcHMpID0+IHtcbiAqICAgY29uc3Qgc3RhdGUgPSB1c2VTdG9yZSh7IGNvdW50OiBwcm9wcy5pbml0aWFsVmFsdWUgfHwgMCB9KTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPHNwYW4+e3N0YXRlLmNvdW50fTwvc3Bhbj5cbiAqICAgICAgIDxidXR0b24gb25DbGljayQ9eygpID0+IChzdGF0ZS5jb3VudCArPSBwcm9wcy5zdGVwIHx8IDEpfT4rPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIC0gYGNvbXBvbmVudCRgIGlzIGhvdyBhIGNvbXBvbmVudCBnZXRzIGRlY2xhcmVkLlxuICogLSBgeyB2YWx1ZT86IG51bWJlcjsgc3RlcD86IG51bWJlciB9YCBkZWNsYXJlcyB0aGUgcHVibGljIChwcm9wcykgaW50ZXJmYWNlIG9mIHRoZSBjb21wb25lbnQuXG4gKiAtIGB7IGNvdW50OiBudW1iZXIgfWAgZGVjbGFyZXMgdGhlIHByaXZhdGUgKHN0YXRlKSBpbnRlcmZhY2Ugb2YgdGhlIGNvbXBvbmVudC5cbiAqXG4gKiBUaGUgYWJvdmUgY2FuIHRoZW4gYmUgdXNlZCBsaWtlIHNvOlxuICpcbiAqIGBgYHRzeFxuICogZXhwb3J0IGNvbnN0IE90aGVyQ29tcG9uZW50ID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIHJldHVybiA8Q291bnRlciBpbml0aWFsVmFsdWU9ezEwMH0gLz47XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIFNlZSBhbHNvOiBgY29tcG9uZW50YCwgYHVzZUNsZWFudXBgLCBgb25SZXN1bWVgLCBgb25QYXVzZWAsIGB1c2VPbmAsIGB1c2VPbkRvY3VtZW50YCxcbiAqIGB1c2VPbldpbmRvd2AsIGB1c2VTdHlsZXNgXG4gKlxuICogQHB1YmxpY1xuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgY29tcG9uZW50JCA9IDxQUk9QUyA9IHVua25vd24+KG9uTW91bnQ6IE9uUmVuZGVyRm48UFJPUFM+KTogQ29tcG9uZW50PFBST1BTPiA9PiB7XG4gIHJldHVybiBjb21wb25lbnRRcmwoZG9sbGFyKG9uTW91bnQpKTtcbn07XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBPblJlbmRlckZuPFBST1BTPiA9IChwcm9wczogUFJPUFMpID0+IEpTWE91dHB1dDtcbiJdfQ==","import { eventQrl } from './qrl.public';\nimport { implicit$FirstArg } from './implicit_dollar';\n/** @public */\nexport const event$ = implicit$FirstArg(eventQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJsLnB1YmxpYy5kb2xsYXIuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3FybC9xcmwucHVibGljLmRvbGxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBldmVudFFybCB9IGZyb20gJy4vcXJsLnB1YmxpYyc7XG5pbXBvcnQgeyBpbXBsaWNpdCRGaXJzdEFyZyB9IGZyb20gJy4vaW1wbGljaXRfZG9sbGFyJztcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBldmVudCQgPSBpbXBsaWNpdCRGaXJzdEFyZyhldmVudFFybCk7XG4iXX0=","import { isDocument, isElement } from '../shared/utils/element';\nimport { getDomContainer } from './dom-container';\nimport { cleanup } from './vnode-diff';\nimport { QContainerAttr } from '../shared/utils/markers';\nimport { qDev } from '../shared/utils/qdev';\nimport { qError } from '../shared/error/error';\n/**\n * Render JSX.\n *\n * Use this method to render JSX. This function does reconciling which means it always tries to\n * reuse what is already in the DOM (rather then destroy and recreate content.) It returns a cleanup\n * function you could use for cleaning up subscriptions.\n *\n * @param parent - Element which will act as a parent to `jsxNode`. When possible the rendering will\n *   try to reuse existing nodes.\n * @param jsxNode - JSX to render\n * @returns An object containing a cleanup function.\n * @public\n */\nexport const render = async (parent, jsxNode, opts = {}) => {\n    if (isDocument(parent)) {\n        let child = parent.firstChild;\n        while (child && !isElement(child)) {\n            child = child.nextSibling;\n        }\n        parent = child;\n    }\n    if (qDev && parent.hasAttribute(QContainerAttr)) {\n        throw qError(5 /* QError.cannotRenderOverExistingContainer */, [parent]);\n    }\n    parent.setAttribute(QContainerAttr, \"resumed\" /* QContainerValue.RESUMED */);\n    const container = getDomContainer(parent);\n    container.$serverData$ = opts.serverData || {};\n    const host = container.rootVNode;\n    container.$scheduler$(4 /* ChoreType.NODE_DIFF */, host, host, jsxNode);\n    await container.$scheduler$(255 /* ChoreType.WAIT_FOR_ALL */);\n    return {\n        cleanup: () => {\n            cleanup(container, container.rootVNode);\n        },\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXJlbmRlci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9jbGllbnQvZG9tLXJlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR2hFLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUN6QixNQUEwQixFQUMxQixPQUEyQyxFQUMzQyxPQUFzQixFQUFFLEVBQ0QsRUFBRTtJQUN6QixJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksS0FBSyxHQUFnQixNQUFNLENBQUMsVUFBVSxDQUFDO1FBQzNDLE9BQU8sS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDNUIsQ0FBQztRQUNELE1BQU0sR0FBRyxLQUFnQixDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsTUFBTSxNQUFNLG1EQUEyQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUNBLE1BQWtCLENBQUMsWUFBWSxDQUFDLGNBQWMsMENBQTBCLENBQUM7SUFFMUUsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQXFCLENBQWlCLENBQUM7SUFDekUsU0FBUyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQ2pDLFNBQVMsQ0FBQyxXQUFXLDhCQUFzQixJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQWtCLENBQUMsQ0FBQztJQUMzRSxNQUFNLFNBQVMsQ0FBQyxXQUFXLGtDQUF3QixDQUFDO0lBQ3BELE9BQU87UUFDTCxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZ1bmN0aW9uQ29tcG9uZW50LCBKU1hOb2RlLCBKU1hPdXRwdXQgfSBmcm9tICcuLi9zaGFyZWQvanN4L3R5cGVzL2pzeC1ub2RlJztcbmltcG9ydCB7IGlzRG9jdW1lbnQsIGlzRWxlbWVudCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9lbGVtZW50JztcbmltcG9ydCB7IENob3JlVHlwZSB9IGZyb20gJy4uL3NoYXJlZC91dGlsLWNob3JlLXR5cGUnO1xuaW1wb3J0IHsgUUNvbnRhaW5lclZhbHVlIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IERvbUNvbnRhaW5lciwgZ2V0RG9tQ29udGFpbmVyIH0gZnJvbSAnLi9kb20tY29udGFpbmVyJztcbmltcG9ydCB7IGNsZWFudXAgfSBmcm9tICcuL3Zub2RlLWRpZmYnO1xuaW1wb3J0IHsgUUNvbnRhaW5lckF0dHIgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgdHlwZSB7IFJlbmRlck9wdGlvbnMsIFJlbmRlclJlc3VsdCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgcURldiB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9xZGV2JztcbmltcG9ydCB7IFFFcnJvciwgcUVycm9yIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Vycm9yJztcblxuLyoqXG4gKiBSZW5kZXIgSlNYLlxuICpcbiAqIFVzZSB0aGlzIG1ldGhvZCB0byByZW5kZXIgSlNYLiBUaGlzIGZ1bmN0aW9uIGRvZXMgcmVjb25jaWxpbmcgd2hpY2ggbWVhbnMgaXQgYWx3YXlzIHRyaWVzIHRvXG4gKiByZXVzZSB3aGF0IGlzIGFscmVhZHkgaW4gdGhlIERPTSAocmF0aGVyIHRoZW4gZGVzdHJveSBhbmQgcmVjcmVhdGUgY29udGVudC4pIEl0IHJldHVybnMgYSBjbGVhbnVwXG4gKiBmdW5jdGlvbiB5b3UgY291bGQgdXNlIGZvciBjbGVhbmluZyB1cCBzdWJzY3JpcHRpb25zLlxuICpcbiAqIEBwYXJhbSBwYXJlbnQgLSBFbGVtZW50IHdoaWNoIHdpbGwgYWN0IGFzIGEgcGFyZW50IHRvIGBqc3hOb2RlYC4gV2hlbiBwb3NzaWJsZSB0aGUgcmVuZGVyaW5nIHdpbGxcbiAqICAgdHJ5IHRvIHJldXNlIGV4aXN0aW5nIG5vZGVzLlxuICogQHBhcmFtIGpzeE5vZGUgLSBKU1ggdG8gcmVuZGVyXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBhIGNsZWFudXAgZnVuY3Rpb24uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW5kZXIgPSBhc3luYyAoXG4gIHBhcmVudDogRWxlbWVudCB8IERvY3VtZW50LFxuICBqc3hOb2RlOiBKU1hPdXRwdXQgfCBGdW5jdGlvbkNvbXBvbmVudDxhbnk+LFxuICBvcHRzOiBSZW5kZXJPcHRpb25zID0ge31cbik6IFByb21pc2U8UmVuZGVyUmVzdWx0PiA9PiB7XG4gIGlmIChpc0RvY3VtZW50KHBhcmVudCkpIHtcbiAgICBsZXQgY2hpbGQ6IE5vZGUgfCBudWxsID0gcGFyZW50LmZpcnN0Q2hpbGQ7XG4gICAgd2hpbGUgKGNoaWxkICYmICFpc0VsZW1lbnQoY2hpbGQpKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuICAgIH1cbiAgICBwYXJlbnQgPSBjaGlsZCBhcyBFbGVtZW50O1xuICB9XG4gIGlmIChxRGV2ICYmIHBhcmVudC5oYXNBdHRyaWJ1dGUoUUNvbnRhaW5lckF0dHIpKSB7XG4gICAgdGhyb3cgcUVycm9yKFFFcnJvci5jYW5ub3RSZW5kZXJPdmVyRXhpc3RpbmdDb250YWluZXIsIFtwYXJlbnRdKTtcbiAgfVxuICAocGFyZW50IGFzIEVsZW1lbnQpLnNldEF0dHJpYnV0ZShRQ29udGFpbmVyQXR0ciwgUUNvbnRhaW5lclZhbHVlLlJFU1VNRUQpO1xuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldERvbUNvbnRhaW5lcihwYXJlbnQgYXMgSFRNTEVsZW1lbnQpIGFzIERvbUNvbnRhaW5lcjtcbiAgY29udGFpbmVyLiRzZXJ2ZXJEYXRhJCA9IG9wdHMuc2VydmVyRGF0YSB8fCB7fTtcbiAgY29uc3QgaG9zdCA9IGNvbnRhaW5lci5yb290Vk5vZGU7XG4gIGNvbnRhaW5lci4kc2NoZWR1bGVyJChDaG9yZVR5cGUuTk9ERV9ESUZGLCBob3N0LCBob3N0LCBqc3hOb2RlIGFzIEpTWE5vZGUpO1xuICBhd2FpdCBjb250YWluZXIuJHNjaGVkdWxlciQoQ2hvcmVUeXBlLldBSVRfRk9SX0FMTCk7XG4gIHJldHVybiB7XG4gICAgY2xlYW51cDogKCkgPT4ge1xuICAgICAgY2xlYW51cChjb250YWluZXIsIGNvbnRhaW5lci5yb290Vk5vZGUpO1xuICAgIH0sXG4gIH07XG59O1xuIl19","import { isFunction } from '../shared/utils/types';\nimport { getOrCreateStore } from '../signal/store';\nimport { invoke } from './use-core';\nimport { useSequentialScope } from './use-sequential-scope';\nexport { unwrapStore } from '../signal/store';\n// <docs markdown=\"../readme.md#useStore\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useStore instead and run `pnpm docs.sync`)\n/**\n * Creates an object that Qwik can track across serializations.\n *\n * Use `useStore` to create a state for your application. The returned object is a proxy that has a\n * unique ID. The ID of the object is used in the `QRL`s to refer to the store.\n *\n * ### Example\n *\n * Example showing how `useStore` is used in Counter example to keep track of the count.\n *\n * ```tsx\n * const Stores = component$(() => {\n *   const counter = useCounter(1);\n *\n *   // Reactivity happens even for nested objects and arrays\n *   const userData = useStore({\n *     name: 'Manu',\n *     address: {\n *       address: '',\n *       city: '',\n *     },\n *     orgs: [],\n *   });\n *\n *   // useStore() can also accept a function to calculate the initial value\n *   const state = useStore(() => {\n *     return {\n *       value: expensiveInitialValue(),\n *     };\n *   });\n *\n *   return (\n *     <div>\n *       <div>Counter: {counter.value}</div>\n *       <Child userData={userData} state={state} />\n *     </div>\n *   );\n * });\n *\n * function useCounter(step: number) {\n *   // Multiple stores can be created in custom hooks for convenience and composability\n *   const counterStore = useStore({\n *     value: 0,\n *   });\n *   useVisibleTask$(() => {\n *     // Only runs in the client\n *     const timer = setInterval(() => {\n *       counterStore.value += step;\n *     }, 500);\n *     return () => {\n *       clearInterval(timer);\n *     };\n *   });\n *   return counterStore;\n * }\n * ```\n *\n * @public\n */\n// </docs>\nexport const useStore = (initialState, opts) => {\n    const { val, set, iCtx } = useSequentialScope();\n    if (val != null) {\n        return val;\n    }\n    const value = isFunction(initialState) ? invoke(undefined, initialState) : initialState;\n    if (opts?.reactive === false) {\n        set(value);\n        return value;\n    }\n    else {\n        const containerState = iCtx.$container$;\n        const recursive = opts?.deep ?? true;\n        const flags = recursive ? 1 /* StoreFlags.RECURSIVE */ : 0 /* StoreFlags.NONE */;\n        const newStore = getOrCreateStore(value, flags, containerState);\n        set(newStore);\n        return newStore;\n    }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXN0b3JlLnB1YmxpYy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLXN0b3JlLnB1YmxpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFjLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFXOUMsMENBQTBDO0FBQzFDLHlDQUF5QztBQUN6QyxnRUFBZ0U7QUFDaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwREc7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQ3RCLFlBQW1DLEVBQ25DLElBQXNCLEVBQ2YsRUFBRTtJQUNULE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLGtCQUFrQixFQUFTLENBQUM7SUFDdkQsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDeEYsSUFBSSxJQUFJLEVBQUUsUUFBUSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLDhCQUFzQixDQUFDLHdCQUFnQixDQUFDO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDaEUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgU3RvcmVGbGFncywgZ2V0T3JDcmVhdGVTdG9yZSB9IGZyb20gJy4uL3NpZ25hbC9zdG9yZSc7XG5pbXBvcnQgeyBpbnZva2UgfSBmcm9tICcuL3VzZS1jb3JlJztcbmltcG9ydCB7IHVzZVNlcXVlbnRpYWxTY29wZSB9IGZyb20gJy4vdXNlLXNlcXVlbnRpYWwtc2NvcGUnO1xuXG5leHBvcnQgeyB1bndyYXBTdG9yZSB9IGZyb20gJy4uL3NpZ25hbC9zdG9yZSc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZVN0b3JlT3B0aW9ucyB7XG4gIC8qKiBJZiBgdHJ1ZWAgdGhlbiBhbGwgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cyB3aWxsIGJlIHRyYWNrZWQgYXMgd2VsbC4gRGVmYXVsdCBpcyBgdHJ1ZWAuICovXG4gIGRlZXA/OiBib29sZWFuO1xuXG4gIC8qKiBJZiBgZmFsc2VgIHRoZW4gdGhlIG9iamVjdCB3aWxsIG5vdCBiZSB0cmFja2VkIGZvciBjaGFuZ2VzLiBEZWZhdWx0IGlzIGB0cnVlYC4gKi9cbiAgcmVhY3RpdmU/OiBib29sZWFuO1xufVxuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCN1c2VTdG9yZVwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uL3JlYWRtZS5tZCN1c2VTdG9yZSBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBRd2lrIGNhbiB0cmFjayBhY3Jvc3Mgc2VyaWFsaXphdGlvbnMuXG4gKlxuICogVXNlIGB1c2VTdG9yZWAgdG8gY3JlYXRlIGEgc3RhdGUgZm9yIHlvdXIgYXBwbGljYXRpb24uIFRoZSByZXR1cm5lZCBvYmplY3QgaXMgYSBwcm94eSB0aGF0IGhhcyBhXG4gKiB1bmlxdWUgSUQuIFRoZSBJRCBvZiB0aGUgb2JqZWN0IGlzIHVzZWQgaW4gdGhlIGBRUkxgcyB0byByZWZlciB0byB0aGUgc3RvcmUuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBFeGFtcGxlIHNob3dpbmcgaG93IGB1c2VTdG9yZWAgaXMgdXNlZCBpbiBDb3VudGVyIGV4YW1wbGUgdG8ga2VlcCB0cmFjayBvZiB0aGUgY291bnQuXG4gKlxuICogYGBgdHN4XG4gKiBjb25zdCBTdG9yZXMgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgY29uc3QgY291bnRlciA9IHVzZUNvdW50ZXIoMSk7XG4gKlxuICogICAvLyBSZWFjdGl2aXR5IGhhcHBlbnMgZXZlbiBmb3IgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5c1xuICogICBjb25zdCB1c2VyRGF0YSA9IHVzZVN0b3JlKHtcbiAqICAgICBuYW1lOiAnTWFudScsXG4gKiAgICAgYWRkcmVzczoge1xuICogICAgICAgYWRkcmVzczogJycsXG4gKiAgICAgICBjaXR5OiAnJyxcbiAqICAgICB9LFxuICogICAgIG9yZ3M6IFtdLFxuICogICB9KTtcbiAqXG4gKiAgIC8vIHVzZVN0b3JlKCkgY2FuIGFsc28gYWNjZXB0IGEgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSBpbml0aWFsIHZhbHVlXG4gKiAgIGNvbnN0IHN0YXRlID0gdXNlU3RvcmUoKCkgPT4ge1xuICogICAgIHJldHVybiB7XG4gKiAgICAgICB2YWx1ZTogZXhwZW5zaXZlSW5pdGlhbFZhbHVlKCksXG4gKiAgICAgfTtcbiAqICAgfSk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8ZGl2PkNvdW50ZXI6IHtjb3VudGVyLnZhbHVlfTwvZGl2PlxuICogICAgICAgPENoaWxkIHVzZXJEYXRhPXt1c2VyRGF0YX0gc3RhdGU9e3N0YXRlfSAvPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfSk7XG4gKlxuICogZnVuY3Rpb24gdXNlQ291bnRlcihzdGVwOiBudW1iZXIpIHtcbiAqICAgLy8gTXVsdGlwbGUgc3RvcmVzIGNhbiBiZSBjcmVhdGVkIGluIGN1c3RvbSBob29rcyBmb3IgY29udmVuaWVuY2UgYW5kIGNvbXBvc2FiaWxpdHlcbiAqICAgY29uc3QgY291bnRlclN0b3JlID0gdXNlU3RvcmUoe1xuICogICAgIHZhbHVlOiAwLFxuICogICB9KTtcbiAqICAgdXNlVmlzaWJsZVRhc2skKCgpID0+IHtcbiAqICAgICAvLyBPbmx5IHJ1bnMgaW4gdGhlIGNsaWVudFxuICogICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICogICAgICAgY291bnRlclN0b3JlLnZhbHVlICs9IHN0ZXA7XG4gKiAgICAgfSwgNTAwKTtcbiAqICAgICByZXR1cm4gKCkgPT4ge1xuICogICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gKiAgICAgfTtcbiAqICAgfSk7XG4gKiAgIHJldHVybiBjb3VudGVyU3RvcmU7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCB1c2VTdG9yZSA9IDxTVEFURSBleHRlbmRzIG9iamVjdD4oXG4gIGluaXRpYWxTdGF0ZTogU1RBVEUgfCAoKCkgPT4gU1RBVEUpLFxuICBvcHRzPzogVXNlU3RvcmVPcHRpb25zXG4pOiBTVEFURSA9PiB7XG4gIGNvbnN0IHsgdmFsLCBzZXQsIGlDdHggfSA9IHVzZVNlcXVlbnRpYWxTY29wZTxTVEFURT4oKTtcbiAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBjb25zdCB2YWx1ZSA9IGlzRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSA/IGludm9rZSh1bmRlZmluZWQsIGluaXRpYWxTdGF0ZSkgOiBpbml0aWFsU3RhdGU7XG4gIGlmIChvcHRzPy5yZWFjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICBzZXQodmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjb250YWluZXJTdGF0ZSA9IGlDdHguJGNvbnRhaW5lciQ7XG4gICAgY29uc3QgcmVjdXJzaXZlID0gb3B0cz8uZGVlcCA/PyB0cnVlO1xuICAgIGNvbnN0IGZsYWdzID0gcmVjdXJzaXZlID8gU3RvcmVGbGFncy5SRUNVUlNJVkUgOiBTdG9yZUZsYWdzLk5PTkU7XG4gICAgY29uc3QgbmV3U3RvcmUgPSBnZXRPckNyZWF0ZVN0b3JlKHZhbHVlLCBmbGFncywgY29udGFpbmVyU3RhdGUpO1xuICAgIHNldChuZXdTdG9yZSk7XG4gICAgcmV0dXJuIG5ld1N0b3JlO1xuICB9XG59O1xuIl19","export const intToStr = (nu) => {\n    return nu.toString(36);\n};\nexport const getNextUniqueIndex = (container) => {\n    return intToStr(container.$currentUniqueId$++);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlLWluZGV4LWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS9zaGFyZWQvdXRpbHMvdW5pcXVlLWluZGV4LWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRTtJQUNyQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxTQUFvQixFQUFFLEVBQUU7SUFDekQsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnRhaW5lciB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGludFRvU3RyID0gKG51OiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIG51LnRvU3RyaW5nKDM2KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXh0VW5pcXVlSW5kZXggPSAoY29udGFpbmVyOiBDb250YWluZXIpID0+IHtcbiAgcmV0dXJuIGludFRvU3RyKGNvbnRhaW5lci4kY3VycmVudFVuaXF1ZUlkJCsrKTtcbn07XG4iXX0=","import { hashCode } from '../shared/utils/hash_code';\nimport { OnRenderProp } from '../shared/utils/markers';\nimport { useSequentialScope } from './use-sequential-scope';\nimport { getNextUniqueIndex } from '../shared/utils/unique-index-generator';\n/** @public */\nexport const useId = () => {\n    const { val, set, iCtx } = useSequentialScope();\n    if (val != null) {\n        return val;\n    }\n    const containerBase = iCtx.$container$.$buildBase$ || '';\n    const base = containerBase ? hashCode(containerBase).substring(0, 3) : '';\n    const componentQrl = iCtx.$container$.getHostProp(iCtx.$hostElement$, OnRenderProp);\n    const hash = componentQrl?.getHash().substring(0, 3) || '';\n    const counter = getNextUniqueIndex(iCtx.$container$) || '';\n    let id = `${base}${hash}${counter}`;\n    let firstChar = id.charCodeAt(0);\n    // convert first char to letter if starts with a number, because CSS does not allow class names to start with a number\n    if (firstChar >= 48 /* 0 */ && firstChar <= 57 /* 9 */) {\n        // 48 is char code for '0', 65 is char code for 'A'\n        // 65 - 48 = 17, so we add 17 to the char code of the first char to convert it to a letter\n        firstChar += 17;\n        id = String.fromCharCode(firstChar) + id.substring(1);\n    }\n    return set(id);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWlkLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU1RSxjQUFjO0FBQ2QsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLEdBQVcsRUFBRTtJQUNoQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsRUFBVSxDQUFDO0lBQ3hELElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUN6RCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN6RixNQUFNLElBQUksR0FBRyxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0QsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzRCxJQUFJLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFFcEMsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxzSEFBc0g7SUFDdEgsSUFBSSxTQUFTLElBQUksRUFBRSxDQUFDLE9BQU8sSUFBSSxTQUFTLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZELG1EQUFtRDtRQUNuRCwwRkFBMEY7UUFDMUYsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUNoQixFQUFFLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uJztcbmltcG9ydCB7IGhhc2hDb2RlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2hhc2hfY29kZSc7XG5pbXBvcnQgeyBPblJlbmRlclByb3AgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgeyB1c2VTZXF1ZW50aWFsU2NvcGUgfSBmcm9tICcuL3VzZS1zZXF1ZW50aWFsLXNjb3BlJztcbmltcG9ydCB7IGdldE5leHRVbmlxdWVJbmRleCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy91bmlxdWUtaW5kZXgtZ2VuZXJhdG9yJztcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCB1c2VJZCA9ICgpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7IHZhbCwgc2V0LCBpQ3R4IH0gPSB1c2VTZXF1ZW50aWFsU2NvcGU8c3RyaW5nPigpO1xuICBpZiAodmFsICE9IG51bGwpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIGNvbnN0IGNvbnRhaW5lckJhc2UgPSBpQ3R4LiRjb250YWluZXIkLiRidWlsZEJhc2UkIHx8ICcnO1xuICBjb25zdCBiYXNlID0gY29udGFpbmVyQmFzZSA/IGhhc2hDb2RlKGNvbnRhaW5lckJhc2UpLnN1YnN0cmluZygwLCAzKSA6ICcnO1xuICBjb25zdCBjb21wb25lbnRRcmwgPSBpQ3R4LiRjb250YWluZXIkLmdldEhvc3RQcm9wPFFSTD4oaUN0eC4kaG9zdEVsZW1lbnQkLCBPblJlbmRlclByb3ApO1xuICBjb25zdCBoYXNoID0gY29tcG9uZW50UXJsPy5nZXRIYXNoKCkuc3Vic3RyaW5nKDAsIDMpIHx8ICcnO1xuICBjb25zdCBjb3VudGVyID0gZ2V0TmV4dFVuaXF1ZUluZGV4KGlDdHguJGNvbnRhaW5lciQpIHx8ICcnO1xuICBsZXQgaWQgPSBgJHtiYXNlfSR7aGFzaH0ke2NvdW50ZXJ9YDtcblxuICBsZXQgZmlyc3RDaGFyID0gaWQuY2hhckNvZGVBdCgwKTtcbiAgLy8gY29udmVydCBmaXJzdCBjaGFyIHRvIGxldHRlciBpZiBzdGFydHMgd2l0aCBhIG51bWJlciwgYmVjYXVzZSBDU1MgZG9lcyBub3QgYWxsb3cgY2xhc3MgbmFtZXMgdG8gc3RhcnQgd2l0aCBhIG51bWJlclxuICBpZiAoZmlyc3RDaGFyID49IDQ4IC8qIDAgKi8gJiYgZmlyc3RDaGFyIDw9IDU3IC8qIDkgKi8pIHtcbiAgICAvLyA0OCBpcyBjaGFyIGNvZGUgZm9yICcwJywgNjUgaXMgY2hhciBjb2RlIGZvciAnQSdcbiAgICAvLyA2NSAtIDQ4ID0gMTcsIHNvIHdlIGFkZCAxNyB0byB0aGUgY2hhciBjb2RlIG9mIHRoZSBmaXJzdCBjaGFyIHRvIGNvbnZlcnQgaXQgdG8gYSBsZXR0ZXJcbiAgICBmaXJzdENoYXIgKz0gMTc7XG4gICAgaWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGZpcnN0Q2hhcikgKyBpZC5zdWJzdHJpbmcoMSk7XG4gIH1cbiAgcmV0dXJuIHNldChpZCk7XG59O1xuIl19","import { tryGetInvokeContext } from './use-core';\n/** @public */\nexport function useServerData(key, defaultValue) {\n    const ctx = tryGetInvokeContext();\n    return ctx?.$container$?.$serverData$[key] ?? defaultValue;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWVudi1kYXRhLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtZW52LWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBUWpELGNBQWM7QUFDZCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQVcsRUFBRSxZQUFrQjtJQUMzRCxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2xDLE9BQU8sR0FBRyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDO0FBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0cnlHZXRJbnZva2VDb250ZXh0IH0gZnJvbSAnLi91c2UtY29yZSc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VydmVyRGF0YTxUPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQ7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VydmVyRGF0YTxULCBCID0gVD4oa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogQik6IFQgfCBCO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNlcnZlckRhdGEoa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSkge1xuICBjb25zdCBjdHggPSB0cnlHZXRJbnZva2VDb250ZXh0KCk7XG4gIHJldHVybiBjdHg/LiRjb250YWluZXIkPy4kc2VydmVyRGF0YSRba2V5XSA/PyBkZWZhdWx0VmFsdWU7XG59XG4iXX0=","/* eslint-disable no-console */\nimport { ComponentStylesPrefixContent } from './markers';\nimport { qDev } from './qdev';\n// Make sure this is always set to `false` in production, but it is useful to set for `true` in development for debugging.\nconst DEBUG = false;\nexport const STYLE_CACHE = /*#__PURE__*/ new Map();\nexport const getScopedStyles = (css, scopeId) => {\n    if (qDev) {\n        return scopeStylesheet(css, scopeId);\n    }\n    let styleCss = STYLE_CACHE.get(scopeId);\n    if (!styleCss) {\n        STYLE_CACHE.set(scopeId, (styleCss = scopeStylesheet(css, scopeId)));\n    }\n    return styleCss;\n};\nexport const scopeStylesheet = (css, scopeId) => {\n    const end = css.length;\n    const out = [];\n    const stack = [];\n    let idx = 0;\n    let lastIdx = idx;\n    let mode = rule;\n    let lastCh = 0;\n    DEBUG && console.log('--------------------------');\n    while (idx < end) {\n        DEBUG && console.log(css);\n        DEBUG && console.log(new Array(idx).fill(' ').join('') + '^');\n        DEBUG && console.log('MODE', ...stack.map(modeToString), modeToString(mode));\n        const chIdx = idx;\n        let ch = css.charCodeAt(idx++);\n        if (ch === BACKSLASH) {\n            idx++;\n            ch = A; // Pretend it's a letter\n        }\n        const arcs = STATE_MACHINE[mode];\n        for (let i = 0; i < arcs.length; i++) {\n            const arc = arcs[i];\n            const [expectLastCh, expectCh, newMode] = arc;\n            if (expectLastCh === lastCh ||\n                expectLastCh === ANY ||\n                (expectLastCh === IDENT && isIdent(lastCh)) ||\n                (expectLastCh === WHITESPACE && isWhiteSpace(lastCh))) {\n                if (expectCh === ch ||\n                    expectCh === ANY ||\n                    (expectCh === IDENT && isIdent(ch)) ||\n                    (expectCh === NOT_IDENT && !isIdent(ch) && ch !== DOT) ||\n                    (expectCh === WHITESPACE && isWhiteSpace(ch))) {\n                    if (arc.length == 3 || lookAhead(arc)) {\n                        if (arc.length > 3) {\n                            // If matched on lookAhead than we we have to update current `ch`\n                            ch = css.charCodeAt(idx - 1);\n                        }\n                        DEBUG &&\n                            console.log('MATCH', charToString(expectLastCh), charToString(expectCh), modeToString(newMode));\n                        // We found a match!\n                        if (newMode === EXIT || newMode == EXIT_INSERT_SCOPE) {\n                            if (newMode === EXIT_INSERT_SCOPE) {\n                                if (mode === starSelector && !shouldNotInsertScoping()) {\n                                    // Replace `*` with the scoping elementClassIdSelector.\n                                    if (isChainedSelector(ch)) {\n                                        // *foo\n                                        flush(idx - 2);\n                                    }\n                                    else {\n                                        // * (by itself)\n                                        insertScopingSelector(idx - 2);\n                                    }\n                                    lastIdx++;\n                                }\n                                else {\n                                    if (!isChainedSelector(ch)) {\n                                        // We are exiting one of the Selector so we may need to\n                                        const offset = expectCh == NOT_IDENT ? 1 : expectCh == CLOSE_PARENTHESIS ? 2 : 0;\n                                        insertScopingSelector(idx - offset);\n                                    }\n                                }\n                            }\n                            if (expectCh === NOT_IDENT) {\n                                // NOT_IDENT is not a real character more like lack of what we expected.\n                                // if pseudoGlobal we need to give it a chance to exit as well.\n                                // For this reason we need to reparse the last character again.\n                                idx--;\n                                ch = lastCh;\n                            }\n                            do {\n                                mode = stack.pop() || rule;\n                                if (mode === pseudoGlobal) {\n                                    // Skip over the `)` in `:global(...)`.\n                                    flush(idx - 1);\n                                    lastIdx++;\n                                }\n                            } while (isSelfClosingRule(mode));\n                        }\n                        else {\n                            stack.push(mode);\n                            if (mode === pseudoGlobal && newMode === rule) {\n                                flush(idx - 8); // `:global(`.length\n                                lastIdx = idx; // skip over \":global(\"\n                            }\n                            else if (newMode === pseudoElement) {\n                                // We are entering pseudoElement `::foo`; insert scoping in front of it.\n                                insertScopingSelector(chIdx);\n                            }\n                            mode = newMode;\n                            ch == SPACE; // Pretend not an identifier so that we don't flush again on elementClassIdSelector\n                        }\n                        break; // get out of the for loop as we found a match\n                    }\n                }\n            }\n        }\n        lastCh = ch;\n    }\n    flush(idx);\n    return out.join('');\n    function flush(idx) {\n        out.push(css.substring(lastIdx, idx));\n        DEBUG && console.log('FLUSH', out.join(''));\n        lastIdx = idx;\n    }\n    function insertScopingSelector(idx) {\n        if (mode === pseudoGlobal || shouldNotInsertScoping()) {\n            return;\n        }\n        flush(idx);\n        out.push('.', ComponentStylesPrefixContent, scopeId);\n        DEBUG && console.log('INSERT', out.join(''));\n    }\n    function lookAhead(arc) {\n        let prefix = 0; // Ignore vendor prefixes such as `-webkit-`.\n        if (css.charCodeAt(idx) === DASH) {\n            for (let i = 1; i < 10; i++) {\n                // give up after 10 characters\n                if (css.charCodeAt(idx + i) === DASH) {\n                    prefix = i + 1;\n                    break;\n                }\n            }\n        }\n        words: for (let arcIndx = 3; arcIndx < arc.length; arcIndx++) {\n            const txt = arc[arcIndx];\n            for (let i = 0; i < txt.length; i++) {\n                if ((css.charCodeAt(idx + i + prefix) | LOWERCASE) !== txt.charCodeAt(i)) {\n                    continue words;\n                }\n            }\n            // we found a match;\n            idx += txt.length + prefix;\n            return true;\n        }\n        return false;\n    }\n    function shouldNotInsertScoping() {\n        return stack.indexOf(pseudoGlobal) !== -1 || stack.indexOf(atRuleSelector) !== -1;\n    }\n};\nconst isIdent = (ch) => {\n    return ((ch >= _0 && ch <= _9) ||\n        (ch >= A && ch <= Z) ||\n        (ch >= a && ch <= z) ||\n        ch >= 0x80 ||\n        ch === UNDERSCORE ||\n        ch === DASH);\n};\nconst isChainedSelector = (ch) => {\n    return ch === COLON || ch === DOT || ch === OPEN_BRACKET || ch === HASH || isIdent(ch);\n};\nconst isSelfClosingRule = (mode) => {\n    return (mode === atRuleBlock || mode === atRuleSelector || mode === atRuleInert || mode === pseudoGlobal);\n};\nconst isWhiteSpace = (ch) => {\n    return ch === SPACE || ch === TAB || ch === NEWLINE || ch === CARRIAGE_RETURN;\n};\nconst modeToString = (mode) => {\n    return [\n        'rule',\n        'elementClassIdSelector',\n        'starSelector',\n        'pseudoClassWithSelector',\n        'pseudoClass',\n        'pseudoGlobal',\n        'pseudoElement',\n        'attrSelector',\n        'inertParenthesis',\n        'inertBlock',\n        'atRuleSelector',\n        'atRuleBlock',\n        'atInert',\n        'body',\n        'stringSingle',\n        'stringDouble',\n        'commentMultiline',\n        'EXIT',\n        'EXIT_INSERT_SCOPE',\n    ][mode];\n};\nconst charToString = (ch) => {\n    return ['ANY', 'IDENT', 'NOT_IDENT', 'WHITESPACE'][ch] || String.fromCharCode(ch);\n};\nconst rule = 0; // top level initial space.\nconst elementClassIdSelector = 1; // .elementClassIdSelector {}\nconst starSelector = 2; // * {}\nconst pseudoClassWithSelector = 3; // :pseudoClass(elementClassIdSelector) {}\nconst pseudoClass = 4; // :pseudoClass {}\nconst pseudoGlobal = 5; // :global(elementClassIdSelector)\nconst pseudoElement = 6; // ::pseudoElement {}\nconst attrSelector = 7; // [attr] {}\nconst inertParenthesis = 8; // (ignored)\nconst inertBlock = 9; // {ignored}\nconst atRuleSelector = 10; // @keyframe elementClassIdSelector {}\nconst atRuleBlock = 11; // @media {elementClassIdSelector {}}\nconst atRuleInert = 12; // @atRule something;\nconst body = 13; // .elementClassIdSelector {body}\nconst stringSingle = 14; // 'text'\nconst stringDouble = 15; // 'text'\nconst commentMultiline = 16; // /* ... */\n// NOT REAL MODES\nconst EXIT = 17; // Exit the mode\nconst EXIT_INSERT_SCOPE = 18; // Exit the mode INSERT SCOPE\nconst ANY = 0;\nconst IDENT = 1;\nconst NOT_IDENT = 2;\nconst WHITESPACE = 3;\nconst TAB = 9; // `\\t`.charCodeAt(0);\nconst NEWLINE = 10; // `\\n`.charCodeAt(0);\nconst CARRIAGE_RETURN = 13; // `\\r`.charCodeAt(0);\nconst SPACE = 32; // ` `.charCodeAt(0);\nconst DOUBLE_QUOTE = 34; // `\"`.charCodeAt(0);\nconst HASH = 35; // `#`.charCodeAt(0);\nconst SINGLE_QUOTE = 39; // `'`.charCodeAt(0);\nconst OPEN_PARENTHESIS = 40; // `(`.charCodeAt(0);\nconst CLOSE_PARENTHESIS = 41; // `)`.charCodeAt(0);\nconst STAR = 42; // `*`.charCodeAt(0);\n// const COMMA = 44; // `,`.charCodeAt(0);\nconst DASH = 45; // `-`.charCodeAt(0);\nconst DOT = 46; // `.`.charCodeAt(0);\nconst FORWARD_SLASH = 47; // `/`.charCodeAt(0);\nconst _0 = 48; // `0`.charCodeAt(0);\nconst _9 = 57; // `9`.charCodeAt(0);\nconst COLON = 58; // `:`.charCodeAt(0);\nconst SEMICOLON = 59; // `;`.charCodeAt(0);\n// const LESS_THAN = 60; // `<`.charCodeAt(0);\nconst AT = 64; // `@`.charCodeAt(0);\nconst A = 65; // `A`.charCodeAt(0);\nconst Z = 90; // `Z`.charCodeAt(0);\nconst OPEN_BRACKET = 91; // `[`.charCodeAt(0);\nconst CLOSE_BRACKET = 93; // `]`.charCodeAt(0);\nconst BACKSLASH = 92; // `\\\\`.charCodeAt(0);\nconst UNDERSCORE = 95; // `_`.charCodeAt(0);\nconst LOWERCASE = 0x20; // `a`.charCodeAt(0);\nconst a = 97; // `a`.charCodeAt(0);\n// const d = 100; // `d`.charCodeAt(0);\n// const g = 103; // 'g'.charCodeAt(0);\n// const h = 104; // `h`.charCodeAt(0);\n// const i = 105; // `i`.charCodeAt(0);\n// const l = 108; // `l`.charCodeAt(0);\n// const t = 116; // `t`.charCodeAt(0);\nconst z = 122; // `z`.charCodeAt(0);\nconst OPEN_BRACE = 123; // `{`.charCodeAt(0);\nconst CLOSE_BRACE = 125; // `}`.charCodeAt(0);\nconst STRINGS_COMMENTS = /*__PURE__*/ (() => [\n    [ANY, SINGLE_QUOTE, stringSingle],\n    [ANY, DOUBLE_QUOTE, stringDouble],\n    [ANY, FORWARD_SLASH, commentMultiline, '*'],\n])();\nconst STATE_MACHINE = /*__PURE__*/ (() => [\n    [\n        /// rule\n        [ANY, STAR, starSelector],\n        [ANY, OPEN_BRACKET, attrSelector],\n        [ANY, COLON, pseudoElement, ':', 'before', 'after', 'first-letter', 'first-line'],\n        [ANY, COLON, pseudoGlobal, 'global'],\n        [\n            ANY,\n            COLON,\n            pseudoClassWithSelector,\n            'has',\n            'host-context',\n            'not',\n            'where',\n            'is',\n            'matches',\n            'any',\n        ],\n        [ANY, COLON, pseudoClass],\n        [ANY, IDENT, elementClassIdSelector],\n        [ANY, DOT, elementClassIdSelector],\n        [ANY, HASH, elementClassIdSelector],\n        [ANY, AT, atRuleSelector, 'keyframe'],\n        [ANY, AT, atRuleBlock, 'media', 'supports', 'container'],\n        [ANY, AT, atRuleInert],\n        [ANY, OPEN_BRACE, body],\n        [FORWARD_SLASH, STAR, commentMultiline],\n        [ANY, SEMICOLON, EXIT],\n        [ANY, CLOSE_BRACE, EXIT],\n        [ANY, CLOSE_PARENTHESIS, EXIT],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// elementClassIdSelector\n        [ANY, NOT_IDENT, EXIT_INSERT_SCOPE],\n    ],\n    [\n        /// starSelector\n        [ANY, NOT_IDENT, EXIT_INSERT_SCOPE],\n    ],\n    [\n        /// pseudoClassWithSelector\n        [ANY, OPEN_PARENTHESIS, rule],\n        [ANY, NOT_IDENT, EXIT_INSERT_SCOPE],\n    ],\n    [\n        /// pseudoClass\n        [ANY, OPEN_PARENTHESIS, inertParenthesis],\n        [ANY, NOT_IDENT, EXIT_INSERT_SCOPE],\n    ],\n    [\n        /// pseudoGlobal\n        [ANY, OPEN_PARENTHESIS, rule],\n        [ANY, NOT_IDENT, EXIT],\n    ],\n    [\n        /// pseudoElement\n        [ANY, NOT_IDENT, EXIT],\n    ],\n    [\n        /// attrSelector\n        [ANY, CLOSE_BRACKET, EXIT_INSERT_SCOPE],\n        [ANY, SINGLE_QUOTE, stringSingle],\n        [ANY, DOUBLE_QUOTE, stringDouble],\n    ],\n    [\n        /// inertParenthesis\n        [ANY, CLOSE_PARENTHESIS, EXIT],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// inertBlock\n        [ANY, CLOSE_BRACE, EXIT],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// atRuleSelector\n        [ANY, CLOSE_BRACE, EXIT],\n        [WHITESPACE, IDENT, elementClassIdSelector],\n        [ANY, COLON, pseudoGlobal, 'global'],\n        [ANY, OPEN_BRACE, body],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// atRuleBlock\n        [ANY, OPEN_BRACE, rule],\n        [ANY, SEMICOLON, EXIT],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// atRuleInert\n        [ANY, SEMICOLON, EXIT],\n        [ANY, OPEN_BRACE, inertBlock],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// body\n        [ANY, CLOSE_BRACE, EXIT],\n        [ANY, OPEN_BRACE, body],\n        [ANY, OPEN_PARENTHESIS, inertParenthesis],\n        ...STRINGS_COMMENTS,\n    ],\n    [\n        /// stringSingle\n        [ANY, SINGLE_QUOTE, EXIT],\n    ],\n    [\n        /// stringDouble\n        [ANY, DOUBLE_QUOTE, EXIT],\n    ],\n    [\n        /// commentMultiline\n        [STAR, FORWARD_SLASH, EXIT],\n    ],\n])();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGVkLXN0eWxlc2hlZXQuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3V0aWxzL3Njb3BlZC1zdHlsZXNoZWV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU5QiwwSEFBMEg7QUFDMUgsTUFBTSxLQUFLLEdBQVksS0FBSyxDQUFDO0FBRTdCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFVLEVBQUU7SUFDdEUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sZUFBZSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBVSxFQUFFO0lBQ3RFLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDdkIsTUFBTSxHQUFHLEdBQWEsRUFBRSxDQUFDO0lBQ3pCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixJQUFJ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QUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQztRQUN0QixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO1FBQzdCLEdBQUcsZ0JBQWdCO0tBQ3BCO0lBQ0Q7UUFDRSxRQUFRO1FBQ1IsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQztRQUN4QixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDO1FBQ3ZCLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO1FBQ3pDLEdBQUcsZ0JBQWdCO0tBQ3BCO0lBQ0Q7UUFDRSxnQkFBZ0I7UUFDaEIsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQztLQUMxQjtJQUNEO1FBQ0UsZ0JBQWdCO1FBQ2hCLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUM7S0FDMUI7SUFDRDtRQUNFLG9CQUFvQjtRQUNwQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDO0tBQzVCO0NBQ0YsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgeyBDb21wb25lbnRTdHlsZXNQcmVmaXhDb250ZW50IH0gZnJvbSAnLi9tYXJrZXJzJztcbmltcG9ydCB7IHFEZXYgfSBmcm9tICcuL3FkZXYnO1xuXG4vLyBNYWtlIHN1cmUgdGhpcyBpcyBhbHdheXMgc2V0IHRvIGBmYWxzZWAgaW4gcHJvZHVjdGlvbiwgYnV0IGl0IGlzIHVzZWZ1bCB0byBzZXQgZm9yIGB0cnVlYCBpbiBkZXZlbG9wbWVudCBmb3IgZGVidWdnaW5nLlxuY29uc3QgREVCVUc6IGJvb2xlYW4gPSBmYWxzZTtcblxuZXhwb3J0IGNvbnN0IFNUWUxFX0NBQ0hFID0gLyojX19QVVJFX18qLyBuZXcgTWFwKCk7XG5cbmV4cG9ydCBjb25zdCBnZXRTY29wZWRTdHlsZXMgPSAoY3NzOiBzdHJpbmcsIHNjb3BlSWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmIChxRGV2KSB7XG4gICAgcmV0dXJuIHNjb3BlU3R5bGVzaGVldChjc3MsIHNjb3BlSWQpO1xuICB9XG4gIGxldCBzdHlsZUNzcyA9IFNUWUxFX0NBQ0hFLmdldChzY29wZUlkKTtcbiAgaWYgKCFzdHlsZUNzcykge1xuICAgIFNUWUxFX0NBQ0hFLnNldChzY29wZUlkLCAoc3R5bGVDc3MgPSBzY29wZVN0eWxlc2hlZXQoY3NzLCBzY29wZUlkKSkpO1xuICB9XG4gIHJldHVybiBzdHlsZUNzcztcbn07XG5cbmV4cG9ydCBjb25zdCBzY29wZVN0eWxlc2hlZXQgPSAoY3NzOiBzdHJpbmcsIHNjb3BlSWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGVuZCA9IGNzcy5sZW5ndGg7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc3RhY2s6IG51bWJlcltdID0gW107XG4gIGxldCBpZHggPSAwO1xuICBsZXQgbGFzdElkeCA9IGlkeDtcbiAgbGV0IG1vZGU6IG51bWJlciA9IHJ1bGU7XG4gIGxldCBsYXN0Q2ggPSAwO1xuICBERUJVRyAmJiBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTtcbiAgd2hpbGUgKGlkeCA8IGVuZCkge1xuICAgIERFQlVHICYmIGNvbnNvbGUubG9nKGNzcyk7XG4gICAgREVCVUcgJiYgY29uc29sZS5sb2cobmV3IEFycmF5KGlkeCkuZmlsbCgnICcpLmpvaW4oJycpICsgJ14nKTtcbiAgICBERUJVRyAmJiBjb25zb2xlLmxvZygnTU9ERScsIC4uLnN0YWNrLm1hcChtb2RlVG9TdHJpbmcpLCBtb2RlVG9TdHJpbmcobW9kZSkpO1xuICAgIGNvbnN0IGNoSWR4ID0gaWR4O1xuICAgIGxldCBjaCA9IGNzcy5jaGFyQ29kZUF0KGlkeCsrKTtcbiAgICBpZiAoY2ggPT09IEJBQ0tTTEFTSCkge1xuICAgICAgaWR4Kys7XG4gICAgICBjaCA9IEE7IC8vIFByZXRlbmQgaXQncyBhIGxldHRlclxuICAgIH1cbiAgICBjb25zdCBhcmNzID0gU1RBVEVfTUFDSElORVttb2RlXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGFyYyA9IGFyY3NbaV07XG4gICAgICBjb25zdCBbZXhwZWN0TGFzdENoLCBleHBlY3RDaCwgbmV3TW9kZV0gPSBhcmM7XG4gICAgICBpZiAoXG4gICAgICAgIGV4cGVjdExhc3RDaCA9PT0gbGFzdENoIHx8XG4gICAgICAgIGV4cGVjdExhc3RDaCA9PT0gQU5ZIHx8XG4gICAgICAgIChleHBlY3RMYXN0Q2ggPT09IElERU5UICYmIGlzSWRlbnQobGFzdENoKSkgfHxcbiAgICAgICAgKGV4cGVjdExhc3RDaCA9PT0gV0hJVEVTUEFDRSAmJiBpc1doaXRlU3BhY2UobGFzdENoKSlcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXhwZWN0Q2ggPT09IGNoIHx8XG4gICAgICAgICAgZXhwZWN0Q2ggPT09IEFOWSB8fFxuICAgICAgICAgIChleHBlY3RDaCA9PT0gSURFTlQgJiYgaXNJZGVudChjaCkpIHx8XG4gICAgICAgICAgKGV4cGVjdENoID09PSBOT1RfSURFTlQgJiYgIWlzSWRlbnQoY2gpICYmIGNoICE9PSBET1QpIHx8XG4gICAgICAgICAgKGV4cGVjdENoID09PSBXSElURVNQQUNFICYmIGlzV2hpdGVTcGFjZShjaCkpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChhcmMubGVuZ3RoID09IDMgfHwgbG9va0FoZWFkKGFyYykpIHtcbiAgICAgICAgICAgIGlmIChhcmMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAvLyBJZiBtYXRjaGVkIG9uIGxvb2tBaGVhZCB0aGFuIHdlIHdlIGhhdmUgdG8gdXBkYXRlIGN1cnJlbnQgYGNoYFxuICAgICAgICAgICAgICBjaCA9IGNzcy5jaGFyQ29kZUF0KGlkeCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgREVCVUcgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ01BVENIJyxcbiAgICAgICAgICAgICAgICBjaGFyVG9TdHJpbmcoZXhwZWN0TGFzdENoKSxcbiAgICAgICAgICAgICAgICBjaGFyVG9TdHJpbmcoZXhwZWN0Q2gpLFxuICAgICAgICAgICAgICAgIG1vZGVUb1N0cmluZyhuZXdNb2RlKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBtYXRjaCFcbiAgICAgICAgICAgIGlmIChuZXdNb2RlID09PSBFWElUIHx8IG5ld01vZGUgPT0gRVhJVF9JTlNFUlRfU0NPUEUpIHtcbiAgICAgICAgICAgICAgaWYgKG5ld01vZGUgPT09IEVYSVRfSU5TRVJUX1NDT1BFKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09IHN0YXJTZWxlY3RvciAmJiAhc2hvdWxkTm90SW5zZXJ0U2NvcGluZygpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGAqYCB3aXRoIHRoZSBzY29waW5nIGVsZW1lbnRDbGFzc0lkU2VsZWN0b3IuXG4gICAgICAgICAgICAgICAgICBpZiAoaXNDaGFpbmVkU2VsZWN0b3IoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmb29cbiAgICAgICAgICAgICAgICAgICAgZmx1c2goaWR4IC0gMik7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyAqIChieSBpdHNlbGYpXG4gICAgICAgICAgICAgICAgICAgIGluc2VydFNjb3BpbmdTZWxlY3RvcihpZHggLSAyKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGxhc3RJZHgrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKCFpc0NoYWluZWRTZWxlY3RvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGV4aXRpbmcgb25lIG9mIHRoZSBTZWxlY3RvciBzbyB3ZSBtYXkgbmVlZCB0b1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPVxuICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdENoID09IE5PVF9JREVOVCA/IDEgOiBleHBlY3RDaCA9PSBDTE9TRV9QQVJFTlRIRVNJUyA/IDIgOiAwO1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRTY29waW5nU2VsZWN0b3IoaWR4IC0gb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGV4cGVjdENoID09PSBOT1RfSURFTlQpIHtcbiAgICAgICAgICAgICAgICAvLyBOT1RfSURFTlQgaXMgbm90IGEgcmVhbCBjaGFyYWN0ZXIgbW9yZSBsaWtlIGxhY2sgb2Ygd2hhdCB3ZSBleHBlY3RlZC5cbiAgICAgICAgICAgICAgICAvLyBpZiBwc2V1ZG9HbG9iYWwgd2UgbmVlZCB0byBnaXZlIGl0IGEgY2hhbmNlIHRvIGV4aXQgYXMgd2VsbC5cbiAgICAgICAgICAgICAgICAvLyBGb3IgdGhpcyByZWFzb24gd2UgbmVlZCB0byByZXBhcnNlIHRoZSBsYXN0IGNoYXJhY3RlciBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBpZHgtLTtcbiAgICAgICAgICAgICAgICBjaCA9IGxhc3RDaDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgbW9kZSA9IHN0YWNrLnBvcCgpIHx8IHJ1bGU7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09IHBzZXVkb0dsb2JhbCkge1xuICAgICAgICAgICAgICAgICAgLy8gU2tpcCBvdmVyIHRoZSBgKWAgaW4gYDpnbG9iYWwoLi4uKWAuXG4gICAgICAgICAgICAgICAgICBmbHVzaChpZHggLSAxKTtcbiAgICAgICAgICAgICAgICAgIGxhc3RJZHgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gd2hpbGUgKGlzU2VsZkNsb3NpbmdSdWxlKG1vZGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2gobW9kZSk7XG4gICAgICAgICAgICAgIGlmIChtb2RlID09PSBwc2V1ZG9HbG9iYWwgJiYgbmV3TW9kZSA9PT0gcnVsZSkge1xuICAgICAgICAgICAgICAgIGZsdXNoKGlkeCAtIDgpOyAvLyBgOmdsb2JhbChgLmxlbmd0aFxuICAgICAgICAgICAgICAgIGxhc3RJZHggPSBpZHg7IC8vIHNraXAgb3ZlciBcIjpnbG9iYWwoXCJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdNb2RlID09PSBwc2V1ZG9FbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIGVudGVyaW5nIHBzZXVkb0VsZW1lbnQgYDo6Zm9vYDsgaW5zZXJ0IHNjb3BpbmcgaW4gZnJvbnQgb2YgaXQuXG4gICAgICAgICAgICAgICAgaW5zZXJ0U2NvcGluZ1NlbGVjdG9yKGNoSWR4KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBtb2RlID0gbmV3TW9kZTtcbiAgICAgICAgICAgICAgY2ggPT0gU1BBQ0U7IC8vIFByZXRlbmQgbm90IGFuIGlkZW50aWZpZXIgc28gdGhhdCB3ZSBkb24ndCBmbHVzaCBhZ2FpbiBvbiBlbGVtZW50Q2xhc3NJZFNlbGVjdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhazsgLy8gZ2V0IG91dCBvZiB0aGUgZm9yIGxvb3AgYXMgd2UgZm91bmQgYSBtYXRjaFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsYXN0Q2ggPSBjaDtcbiAgfVxuICBmbHVzaChpZHgpO1xuICByZXR1cm4gb3V0LmpvaW4oJycpO1xuXG4gIGZ1bmN0aW9uIGZsdXNoKGlkeDogbnVtYmVyKSB7XG4gICAgb3V0LnB1c2goY3NzLnN1YnN0cmluZyhsYXN0SWR4LCBpZHgpKTtcbiAgICBERUJVRyAmJiBjb25zb2xlLmxvZygnRkxVU0gnLCBvdXQuam9pbignJykpO1xuICAgIGxhc3RJZHggPSBpZHg7XG4gIH1cbiAgZnVuY3Rpb24gaW5zZXJ0U2NvcGluZ1NlbGVjdG9yKGlkeDogbnVtYmVyKSB7XG4gICAgaWYgKG1vZGUgPT09IHBzZXVkb0dsb2JhbCB8fCBzaG91bGROb3RJbnNlcnRTY29waW5nKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmbHVzaChpZHgpO1xuICAgIG91dC5wdXNoKCcuJywgQ29tcG9uZW50U3R5bGVzUHJlZml4Q29udGVudCwgc2NvcGVJZCk7XG4gICAgREVCVUcgJiYgY29uc29sZS5sb2coJ0lOU0VSVCcsIG91dC5qb2luKCcnKSk7XG4gIH1cbiAgZnVuY3Rpb24gbG9va0FoZWFkKGFyYzogU3RhdGVBcmMpOiBib29sZWFuIHtcbiAgICBsZXQgcHJlZml4ID0gMDsgLy8gSWdub3JlIHZlbmRvciBwcmVmaXhlcyBzdWNoIGFzIGAtd2Via2l0LWAuXG4gICAgaWYgKGNzcy5jaGFyQ29kZUF0KGlkeCkgPT09IERBU0gpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMTA7IGkrKykge1xuICAgICAgICAvLyBnaXZlIHVwIGFmdGVyIDEwIGNoYXJhY3RlcnNcbiAgICAgICAgaWYgKGNzcy5jaGFyQ29kZUF0KGlkeCArIGkpID09PSBEQVNIKSB7XG4gICAgICAgICAgcHJlZml4ID0gaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgd29yZHM6IGZvciAobGV0IGFyY0luZHggPSAzOyBhcmNJbmR4IDwgYXJjLmxlbmd0aDsgYXJjSW5keCsrKSB7XG4gICAgICBjb25zdCB0eHQgPSBhcmNbYXJjSW5keF0gYXMgc3RyaW5nO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKChjc3MuY2hhckNvZGVBdChpZHggKyBpICsgcHJlZml4KSB8IExPV0VSQ0FTRSkgIT09IHR4dC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICAgICAgY29udGludWUgd29yZHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHdlIGZvdW5kIGEgbWF0Y2g7XG4gICAgICBpZHggKz0gdHh0Lmxlbmd0aCArIHByZWZpeDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGROb3RJbnNlcnRTY29waW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGFjay5pbmRleE9mKHBzZXVkb0dsb2JhbCkgIT09IC0xIHx8IHN0YWNrLmluZGV4T2YoYXRSdWxlU2VsZWN0b3IpICE9PSAtMTtcbiAgfVxufTtcblxuY29uc3QgaXNJZGVudCA9IChjaDogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiAoXG4gICAgKGNoID49IF8wICYmIGNoIDw9IF85KSB8fFxuICAgIChjaCA+PSBBICYmIGNoIDw9IFopIHx8XG4gICAgKGNoID49IGEgJiYgY2ggPD0geikgfHxcbiAgICBjaCA+PSAweDgwIHx8XG4gICAgY2ggPT09IFVOREVSU0NPUkUgfHxcbiAgICBjaCA9PT0gREFTSFxuICApO1xufTtcblxuY29uc3QgaXNDaGFpbmVkU2VsZWN0b3IgPSAoY2g6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gY2ggPT09IENPTE9OIHx8IGNoID09PSBET1QgfHwgY2ggPT09IE9QRU5fQlJBQ0tFVCB8fCBjaCA9PT0gSEFTSCB8fCBpc0lkZW50KGNoKTtcbn07XG5cbmNvbnN0IGlzU2VsZkNsb3NpbmdSdWxlID0gKG1vZGU6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgIG1vZGUgPT09IGF0UnVsZUJsb2NrIHx8IG1vZGUgPT09IGF0UnVsZVNlbGVjdG9yIHx8IG1vZGUgPT09IGF0UnVsZUluZXJ0IHx8IG1vZGUgPT09IHBzZXVkb0dsb2JhbFxuICApO1xufTtcblxuY29uc3QgaXNXaGl0ZVNwYWNlID0gKGNoOiBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGNoID09PSBTUEFDRSB8fCBjaCA9PT0gVEFCIHx8IGNoID09PSBORVdMSU5FIHx8IGNoID09PSBDQVJSSUFHRV9SRVRVUk47XG59O1xuXG5jb25zdCBtb2RlVG9TdHJpbmcgPSAobW9kZTogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIFtcbiAgICAncnVsZScsXG4gICAgJ2VsZW1lbnRDbGFzc0lkU2VsZWN0b3InLFxuICAgICdzdGFyU2VsZWN0b3InLFxuICAgICdwc2V1ZG9DbGFzc1dpdGhTZWxlY3RvcicsXG4gICAgJ3BzZXVkb0NsYXNzJyxcbiAgICAncHNldWRvR2xvYmFsJyxcbiAgICAncHNldWRvRWxlbWVudCcsXG4gICAgJ2F0dHJTZWxlY3RvcicsXG4gICAgJ2luZXJ0UGFyZW50aGVzaXMnLFxuICAgICdpbmVydEJsb2NrJyxcbiAgICAnYXRSdWxlU2VsZWN0b3InLFxuICAgICdhdFJ1bGVCbG9jaycsXG4gICAgJ2F0SW5lcnQnLFxuICAgICdib2R5JyxcbiAgICAnc3RyaW5nU2luZ2xlJyxcbiAgICAnc3RyaW5nRG91YmxlJyxcbiAgICAnY29tbWVudE11bHRpbGluZScsXG4gICAgJ0VYSVQnLFxuICAgICdFWElUX0lOU0VSVF9TQ09QRScsXG4gIF1bbW9kZV07XG59O1xuXG5jb25zdCBjaGFyVG9TdHJpbmcgPSAoY2g6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIHJldHVybiBbJ0FOWScsICdJREVOVCcsICdOT1RfSURFTlQnLCAnV0hJVEVTUEFDRSddW2NoXSB8fCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbn07XG5cbmNvbnN0IHJ1bGUgPSAwOyAvLyB0b3AgbGV2ZWwgaW5pdGlhbCBzcGFjZS5cbmNvbnN0IGVsZW1lbnRDbGFzc0lkU2VsZWN0b3IgPSAxOyAvLyAuZWxlbWVudENsYXNzSWRTZWxlY3RvciB7fVxuY29uc3Qgc3RhclNlbGVjdG9yID0gMjsgLy8gKiB7fVxuY29uc3QgcHNldWRvQ2xhc3NXaXRoU2VsZWN0b3IgPSAzOyAvLyA6cHNldWRvQ2xhc3MoZWxlbWVudENsYXNzSWRTZWxlY3Rvcikge31cbmNvbnN0IHBzZXVkb0NsYXNzID0gNDsgLy8gOnBzZXVkb0NsYXNzIHt9XG5jb25zdCBwc2V1ZG9HbG9iYWwgPSA1OyAvLyA6Z2xvYmFsKGVsZW1lbnRDbGFzc0lkU2VsZWN0b3IpXG5jb25zdCBwc2V1ZG9FbGVtZW50ID0gNjsgLy8gOjpwc2V1ZG9FbGVtZW50IHt9XG5jb25zdCBhdHRyU2VsZWN0b3IgPSA3OyAvLyBbYXR0cl0ge31cbmNvbnN0IGluZXJ0UGFyZW50aGVzaXMgPSA4OyAvLyAoaWdub3JlZClcbmNvbnN0IGluZXJ0QmxvY2sgPSA5OyAvLyB7aWdub3JlZH1cbmNvbnN0IGF0UnVsZVNlbGVjdG9yID0gMTA7IC8vIEBrZXlmcmFtZSBlbGVtZW50Q2xhc3NJZFNlbGVjdG9yIHt9XG5jb25zdCBhdFJ1bGVCbG9jayA9IDExOyAvLyBAbWVkaWEge2VsZW1lbnRDbGFzc0lkU2VsZWN0b3Ige319XG5jb25zdCBhdFJ1bGVJbmVydCA9IDEyOyAvLyBAYXRSdWxlIHNvbWV0aGluZztcbmNvbnN0IGJvZHkgPSAxMzsgLy8gLmVsZW1lbnRDbGFzc0lkU2VsZWN0b3Ige2JvZHl9XG5jb25zdCBzdHJpbmdTaW5nbGUgPSAxNDsgLy8gJ3RleHQnXG5jb25zdCBzdHJpbmdEb3VibGUgPSAxNTsgLy8gJ3RleHQnXG5jb25zdCBjb21tZW50TXVsdGlsaW5lID0gMTY7IC8vIC8qIC4uLiAqL1xuLy8gTk9UIFJFQUwgTU9ERVNcbmNvbnN0IEVYSVQgPSAxNzsgLy8gRXhpdCB0aGUgbW9kZVxuY29uc3QgRVhJVF9JTlNFUlRfU0NPUEUgPSAxODsgLy8gRXhpdCB0aGUgbW9kZSBJTlNFUlQgU0NPUEVcblxuY29uc3QgQU5ZID0gMDtcbmNvbnN0IElERU5UID0gMTtcbmNvbnN0IE5PVF9JREVOVCA9IDI7XG5jb25zdCBXSElURVNQQUNFID0gMztcbmNvbnN0IFRBQiA9IDk7IC8vIGBcXHRgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBORVdMSU5FID0gMTA7IC8vIGBcXG5gLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBDQVJSSUFHRV9SRVRVUk4gPSAxMzsgLy8gYFxccmAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IFNQQUNFID0gMzI7IC8vIGAgYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgRE9VQkxFX1FVT1RFID0gMzQ7IC8vIGBcImAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IEhBU0ggPSAzNTsgLy8gYCNgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBTSU5HTEVfUVVPVEUgPSAzOTsgLy8gYCdgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBPUEVOX1BBUkVOVEhFU0lTID0gNDA7IC8vIGAoYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgQ0xPU0VfUEFSRU5USEVTSVMgPSA0MTsgLy8gYClgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBTVEFSID0gNDI7IC8vIGAqYC5jaGFyQ29kZUF0KDApO1xuLy8gY29uc3QgQ09NTUEgPSA0NDsgLy8gYCxgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBEQVNIID0gNDU7IC8vIGAtYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgRE9UID0gNDY7IC8vIGAuYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgRk9SV0FSRF9TTEFTSCA9IDQ3OyAvLyBgL2AuY2hhckNvZGVBdCgwKTtcbmNvbnN0IF8wID0gNDg7IC8vIGAwYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgXzkgPSA1NzsgLy8gYDlgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBDT0xPTiA9IDU4OyAvLyBgOmAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IFNFTUlDT0xPTiA9IDU5OyAvLyBgO2AuY2hhckNvZGVBdCgwKTtcbi8vIGNvbnN0IExFU1NfVEhBTiA9IDYwOyAvLyBgPGAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IEFUID0gNjQ7IC8vIGBAYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgQSA9IDY1OyAvLyBgQWAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IFogPSA5MDsgLy8gYFpgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBPUEVOX0JSQUNLRVQgPSA5MTsgLy8gYFtgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBDTE9TRV9CUkFDS0VUID0gOTM7IC8vIGBdYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgQkFDS1NMQVNIID0gOTI7IC8vIGBcXFxcYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgVU5ERVJTQ09SRSA9IDk1OyAvLyBgX2AuY2hhckNvZGVBdCgwKTtcbmNvbnN0IExPV0VSQ0FTRSA9IDB4MjA7IC8vIGBhYC5jaGFyQ29kZUF0KDApO1xuY29uc3QgYSA9IDk3OyAvLyBgYWAuY2hhckNvZGVBdCgwKTtcbi8vIGNvbnN0IGQgPSAxMDA7IC8vIGBkYC5jaGFyQ29kZUF0KDApO1xuLy8gY29uc3QgZyA9IDEwMzsgLy8gJ2cnLmNoYXJDb2RlQXQoMCk7XG4vLyBjb25zdCBoID0gMTA0OyAvLyBgaGAuY2hhckNvZGVBdCgwKTtcbi8vIGNvbnN0IGkgPSAxMDU7IC8vIGBpYC5jaGFyQ29kZUF0KDApO1xuLy8gY29uc3QgbCA9IDEwODsgLy8gYGxgLmNoYXJDb2RlQXQoMCk7XG4vLyBjb25zdCB0ID0gMTE2OyAvLyBgdGAuY2hhckNvZGVBdCgwKTtcbmNvbnN0IHogPSAxMjI7IC8vIGB6YC5jaGFyQ29kZUF0KDApO1xuY29uc3QgT1BFTl9CUkFDRSA9IDEyMzsgLy8gYHtgLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBDTE9TRV9CUkFDRSA9IDEyNTsgLy8gYH1gLmNoYXJDb2RlQXQoMCk7XG5cbnR5cGUgU3RhdGVBcmMgPSBbXG4gIC8vLyBJZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMgdGhpczpcbiAgbnVtYmVyLFxuICAvLy8gSWYgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIHRoaXM6XG4gIG51bWJlcixcbiAgLy8vIFRoZW4gdHJhbnNpdGlvbiB0byB0aGlzIHN0YXRlOlxuICBudW1iZXIsXG4gIC8vLyBPcHRpb25hbCBsb29rIGFoZWFkIHN0cmluZ3NcbiAgLi4uc3RyaW5nW10sXG5dO1xuXG5jb25zdCBTVFJJTkdTX0NPTU1FTlRTOiBTdGF0ZUFyY1tdID0gLypfX1BVUkVfXyovICgoKSA9PiBbXG4gIFtBTlksIFNJTkdMRV9RVU9URSwgc3RyaW5nU2luZ2xlXSxcbiAgW0FOWSwgRE9VQkxFX1FVT1RFLCBzdHJpbmdEb3VibGVdLFxuICBbQU5ZLCBGT1JXQVJEX1NMQVNILCBjb21tZW50TXVsdGlsaW5lLCAnKiddLFxuXSkoKTtcblxuY29uc3QgU1RBVEVfTUFDSElORTogU3RhdGVBcmNbXVtdID0gLypfX1BVUkVfXyovICgoKSA9PiBbXG4gIFtcbiAgICAvLy8gcnVsZVxuICAgIFtBTlksIFNUQVIsIHN0YXJTZWxlY3Rvcl0sXG4gICAgW0FOWSwgT1BFTl9CUkFDS0VULCBhdHRyU2VsZWN0b3JdLFxuICAgIFtBTlksIENPTE9OLCBwc2V1ZG9FbGVtZW50LCAnOicsICdiZWZvcmUnLCAnYWZ0ZXInLCAnZmlyc3QtbGV0dGVyJywgJ2ZpcnN0LWxpbmUnXSxcbiAgICBbQU5ZLCBDT0xPTiwgcHNldWRvR2xvYmFsLCAnZ2xvYmFsJ10sXG4gICAgW1xuICAgICAgQU5ZLFxuICAgICAgQ09MT04sXG4gICAgICBwc2V1ZG9DbGFzc1dpdGhTZWxlY3RvcixcbiAgICAgICdoYXMnLFxuICAgICAgJ2hvc3QtY29udGV4dCcsXG4gICAgICAnbm90JyxcbiAgICAgICd3aGVyZScsXG4gICAgICAnaXMnLFxuICAgICAgJ21hdGNoZXMnLFxuICAgICAgJ2FueScsXG4gICAgXSxcbiAgICBbQU5ZLCBDT0xPTiwgcHNldWRvQ2xhc3NdLFxuICAgIFtBTlksIElERU5ULCBlbGVtZW50Q2xhc3NJZFNlbGVjdG9yXSxcbiAgICBbQU5ZLCBET1QsIGVsZW1lbnRDbGFzc0lkU2VsZWN0b3JdLFxuICAgIFtBTlksIEhBU0gsIGVsZW1lbnRDbGFzc0lkU2VsZWN0b3JdLFxuICAgIFtBTlksIEFULCBhdFJ1bGVTZWxlY3RvciwgJ2tleWZyYW1lJ10sXG4gICAgW0FOWSwgQVQsIGF0UnVsZUJsb2NrLCAnbWVkaWEnLCAnc3VwcG9ydHMnLCAnY29udGFpbmVyJ10sXG4gICAgW0FOWSwgQVQsIGF0UnVsZUluZXJ0XSxcbiAgICBbQU5ZLCBPUEVOX0JSQUNFLCBib2R5XSxcbiAgICBbRk9SV0FSRF9TTEFTSCwgU1RBUiwgY29tbWVudE11bHRpbGluZV0sXG4gICAgW0FOWSwgU0VNSUNPTE9OLCBFWElUXSxcbiAgICBbQU5ZLCBDTE9TRV9CUkFDRSwgRVhJVF0sXG4gICAgW0FOWSwgQ0xPU0VfUEFSRU5USEVTSVMsIEVYSVRdLFxuICAgIC4uLlNUUklOR1NfQ09NTUVOVFMsXG4gIF0sXG4gIFtcbiAgICAvLy8gZWxlbWVudENsYXNzSWRTZWxlY3RvclxuICAgIFtBTlksIE5PVF9JREVOVCwgRVhJVF9JTlNFUlRfU0NPUEVdLFxuICBdLFxuICBbXG4gICAgLy8vIHN0YXJTZWxlY3RvclxuICAgIFtBTlksIE5PVF9JREVOVCwgRVhJVF9JTlNFUlRfU0NPUEVdLFxuICBdLFxuICBbXG4gICAgLy8vIHBzZXVkb0NsYXNzV2l0aFNlbGVjdG9yXG4gICAgW0FOWSwgT1BFTl9QQVJFTlRIRVNJUywgcnVsZV0sXG4gICAgW0FOWSwgTk9UX0lERU5ULCBFWElUX0lOU0VSVF9TQ09QRV0sXG4gIF0sXG4gIFtcbiAgICAvLy8gcHNldWRvQ2xhc3NcbiAgICBbQU5ZLCBPUEVOX1BBUkVOVEhFU0lTLCBpbmVydFBhcmVudGhlc2lzXSxcbiAgICBbQU5ZLCBOT1RfSURFTlQsIEVYSVRfSU5TRVJUX1NDT1BFXSxcbiAgXSxcbiAgW1xuICAgIC8vLyBwc2V1ZG9HbG9iYWxcbiAgICBbQU5ZLCBPUEVOX1BBUkVOVEhFU0lTLCBydWxlXSxcbiAgICBbQU5ZLCBOT1RfSURFTlQsIEVYSVRdLFxuICBdLFxuICBbXG4gICAgLy8vIHBzZXVkb0VsZW1lbnRcbiAgICBbQU5ZLCBOT1RfSURFTlQsIEVYSVRdLFxuICBdLFxuICBbXG4gICAgLy8vIGF0dHJTZWxlY3RvclxuICAgIFtBTlksIENMT1NFX0JSQUNLRVQsIEVYSVRfSU5TRVJUX1NDT1BFXSxcbiAgICBbQU5ZLCBTSU5HTEVfUVVPVEUsIHN0cmluZ1NpbmdsZV0sXG4gICAgW0FOWSwgRE9VQkxFX1FVT1RFLCBzdHJpbmdEb3VibGVdLFxuICBdLFxuICBbXG4gICAgLy8vIGluZXJ0UGFyZW50aGVzaXNcbiAgICBbQU5ZLCBDTE9TRV9QQVJFTlRIRVNJUywgRVhJVF0sXG4gICAgLi4uU1RSSU5HU19DT01NRU5UUyxcbiAgXSxcbiAgW1xuICAgIC8vLyBpbmVydEJsb2NrXG4gICAgW0FOWSwgQ0xPU0VfQlJBQ0UsIEVYSVRdLFxuICAgIC4uLlNUUklOR1NfQ09NTUVOVFMsXG4gIF0sXG4gIFtcbiAgICAvLy8gYXRSdWxlU2VsZWN0b3JcbiAgICBbQU5ZLCBDTE9TRV9CUkFDRSwgRVhJVF0sXG4gICAgW1dISVRFU1BBQ0UsIElERU5ULCBlbGVtZW50Q2xhc3NJZFNlbGVjdG9yXSxcbiAgICBbQU5ZLCBDT0xPTiwgcHNldWRvR2xvYmFsLCAnZ2xvYmFsJ10sXG4gICAgW0FOWSwgT1BFTl9CUkFDRSwgYm9keV0sXG4gICAgLi4uU1RSSU5HU19DT01NRU5UUyxcbiAgXSxcbiAgW1xuICAgIC8vLyBhdFJ1bGVCbG9ja1xuICAgIFtBTlksIE9QRU5fQlJBQ0UsIHJ1bGVdLFxuICAgIFtBTlksIFNFTUlDT0xPTiwgRVhJVF0sXG4gICAgLi4uU1RSSU5HU19DT01NRU5UUyxcbiAgXSxcbiAgW1xuICAgIC8vLyBhdFJ1bGVJbmVydFxuICAgIFtBTlksIFNFTUlDT0xPTiwgRVhJVF0sXG4gICAgW0FOWSwgT1BFTl9CUkFDRSwgaW5lcnRCbG9ja10sXG4gICAgLi4uU1RSSU5HU19DT01NRU5UUyxcbiAgXSxcbiAgW1xuICAgIC8vLyBib2R5XG4gICAgW0FOWSwgQ0xPU0VfQlJBQ0UsIEVYSVRdLFxuICAgIFtBTlksIE9QRU5fQlJBQ0UsIGJvZHldLFxuICAgIFtBTlksIE9QRU5fUEFSRU5USEVTSVMsIGluZXJ0UGFyZW50aGVzaXNdLFxuICAgIC4uLlNUUklOR1NfQ09NTUVOVFMsXG4gIF0sXG4gIFtcbiAgICAvLy8gc3RyaW5nU2luZ2xlXG4gICAgW0FOWSwgU0lOR0xFX1FVT1RFLCBFWElUXSxcbiAgXSxcbiAgW1xuICAgIC8vLyBzdHJpbmdEb3VibGVcbiAgICBbQU5ZLCBET1VCTEVfUVVPVEUsIEVYSVRdLFxuICBdLFxuICBbXG4gICAgLy8vIGNvbW1lbnRNdWx0aWxpbmVcbiAgICBbU1RBUiwgRk9SV0FSRF9TTEFTSCwgRVhJVF0sXG4gIF0sXG5dKSgpO1xuIl19","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { getScopedStyles } from '../shared/utils/scoped-stylesheet';\nimport { useSequentialScope } from './use-sequential-scope';\nimport { assertQrl } from '../shared/qrl/qrl-utils';\nimport { isPromise } from '../shared/utils/promises';\nimport { ComponentStylesPrefixContent } from '../shared/utils/markers';\nimport { styleKey } from '../shared/utils/styles';\n/** @internal */\nexport const useStylesQrl = (styles) => {\n    return {\n        styleId: _useStyles(styles, (str) => str, false),\n    };\n};\n// <docs markdown=\"../readme.md#useStyles\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useStyles instead and run `pnpm docs.sync`)\n/**\n * A lazy-loadable reference to a component's styles.\n *\n * Component styles allow Qwik to lazy load the style information for the component only when\n * needed. (And avoid double loading it in case of SSR hydration.)\n *\n * ```tsx\n * import styles from './code-block.css?inline';\n *\n * export const CmpStyles = component$(() => {\n *   useStyles$(styles);\n *\n *   return <div>Some text</div>;\n * });\n * ```\n *\n * @public\n * @see `useStylesScoped`\n */\n// </docs>\nexport const useStyles$ = /*#__PURE__*/ implicit$FirstArg(useStylesQrl);\n/** @internal */\nexport const useStylesScopedQrl = (styles) => {\n    return {\n        scopeId: ComponentStylesPrefixContent + _useStyles(styles, getScopedStyles, true),\n    };\n};\n// <docs markdown=\"../readme.md#useStylesScoped\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useStylesScoped instead and run `pnpm docs.sync`)\n/**\n * A lazy-loadable reference to a component's styles, that is scoped to the component.\n *\n * Component styles allow Qwik to lazy load the style information for the component only when\n * needed. (And avoid double loading it in case of SSR hydration.)\n *\n * ```tsx\n * import scoped from './code-block.css?inline';\n *\n * export const CmpScopedStyles = component$(() => {\n *   useStylesScoped$(scoped);\n *\n *   return <div>Some text</div>;\n * });\n * ```\n *\n * @public\n * @see `useStyles`\n */\n// </docs>\nexport const useStylesScoped$ = /*#__PURE__*/ implicit$FirstArg(useStylesScopedQrl);\nconst _useStyles = (styleQrl, transform, scoped) => {\n    assertQrl(styleQrl);\n    const { val, set, iCtx, i } = useSequentialScope();\n    if (val) {\n        return val;\n    }\n    const styleId = styleKey(styleQrl, i);\n    const host = iCtx.$hostElement$;\n    set(styleId);\n    const value = styleQrl.$resolveLazy$(iCtx.$element$);\n    if (isPromise(value)) {\n        value.then((val) => iCtx.$container$.$appendStyle$(transform(val, styleId), styleId, host, scoped));\n        throw value;\n    }\n    else {\n        iCtx.$container$.$appendStyle$(transform(value, styleId), styleId, host, scoped);\n    }\n    return styleId;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXN0eWxlcy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLXN0eWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFZbEQsZ0JBQWdCO0FBQ2hCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQW1CLEVBQWEsRUFBRTtJQUM3RCxPQUFPO1FBQ0wsT0FBTyxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7S0FDakQsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsaUVBQWlFO0FBQ2pFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxVQUFVO0FBQ1YsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUV4RSxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUFtQixFQUFtQixFQUFFO0lBQ3pFLE9BQU87UUFDTCxPQUFPLEVBQUUsNEJBQTRCLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDO0tBQ2xGLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixpREFBaUQ7QUFDakQseUNBQXlDO0FBQ3pDLHVFQUF1RTtBQUN2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsVUFBVTtBQUNWLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRXBGLE1BQU0sVUFBVSxHQUFHLENBQ2pCLFFBQXFCLEVBQ3JCLFNBQW1ELEVBQ25ELE1BQWUsRUFDUCxFQUFFO0lBQ1YsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXBCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxrQkFBa0IsRUFBVSxDQUFDO0lBQzNELElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDaEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRWIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckQsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUMvRSxDQUFDO1FBQ0YsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBRUkwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHsgaW1wbGljaXQkRmlyc3RBcmcgfSBmcm9tICcuLi9zaGFyZWQvcXJsL2ltcGxpY2l0X2RvbGxhcic7XG5pbXBvcnQgeyBnZXRTY29wZWRTdHlsZXMgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvc2NvcGVkLXN0eWxlc2hlZXQnO1xuaW1wb3J0IHsgdXNlU2VxdWVudGlhbFNjb3BlIH0gZnJvbSAnLi91c2Utc2VxdWVudGlhbC1zY29wZSc7XG5pbXBvcnQgeyBhc3NlcnRRcmwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC11dGlscyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3R5bGVzUHJlZml4Q29udGVudCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7IHN0eWxlS2V5IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL3N0eWxlcyc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZVN0eWxlc1Njb3BlZCB7XG4gIHNjb3BlSWQ6IHN0cmluZztcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlU3R5bGVzIHtcbiAgc3R5bGVJZDogc3RyaW5nO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgdXNlU3R5bGVzUXJsID0gKHN0eWxlczogUVJMPHN0cmluZz4pOiBVc2VTdHlsZXMgPT4ge1xuICByZXR1cm4ge1xuICAgIHN0eWxlSWQ6IF91c2VTdHlsZXMoc3R5bGVzLCAoc3RyKSA9PiBzdHIsIGZhbHNlKSxcbiAgfTtcbn07XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vcmVhZG1lLm1kI3VzZVN0eWxlc1wiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uL3JlYWRtZS5tZCN1c2VTdHlsZXMgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIEEgbGF6eS1sb2FkYWJsZSByZWZlcmVuY2UgdG8gYSBjb21wb25lbnQncyBzdHlsZXMuXG4gKlxuICogQ29tcG9uZW50IHN0eWxlcyBhbGxvdyBRd2lrIHRvIGxhenkgbG9hZCB0aGUgc3R5bGUgaW5mb3JtYXRpb24gZm9yIHRoZSBjb21wb25lbnQgb25seSB3aGVuXG4gKiBuZWVkZWQuIChBbmQgYXZvaWQgZG91YmxlIGxvYWRpbmcgaXQgaW4gY2FzZSBvZiBTU1IgaHlkcmF0aW9uLilcbiAqXG4gKiBgYGB0c3hcbiAqIGltcG9ydCBzdHlsZXMgZnJvbSAnLi9jb2RlLWJsb2NrLmNzcz9pbmxpbmUnO1xuICpcbiAqIGV4cG9ydCBjb25zdCBDbXBTdHlsZXMgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgdXNlU3R5bGVzJChzdHlsZXMpO1xuICpcbiAqICAgcmV0dXJuIDxkaXY+U29tZSB0ZXh0PC9kaXY+O1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIGB1c2VTdHlsZXNTY29wZWRgXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCB1c2VTdHlsZXMkID0gLyojX19QVVJFX18qLyBpbXBsaWNpdCRGaXJzdEFyZyh1c2VTdHlsZXNRcmwpO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgdXNlU3R5bGVzU2NvcGVkUXJsID0gKHN0eWxlczogUVJMPHN0cmluZz4pOiBVc2VTdHlsZXNTY29wZWQgPT4ge1xuICByZXR1cm4ge1xuICAgIHNjb3BlSWQ6IENvbXBvbmVudFN0eWxlc1ByZWZpeENvbnRlbnQgKyBfdXNlU3R5bGVzKHN0eWxlcywgZ2V0U2NvcGVkU3R5bGVzLCB0cnVlKSxcbiAgfTtcbn07XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vcmVhZG1lLm1kI3VzZVN0eWxlc1Njb3BlZFwiPlxuLy8gISFETyBOT1QgRURJVCBUSElTIENPTU1FTlQgRElSRUNUTFkhISFcbi8vIChlZGl0IC4uL3JlYWRtZS5tZCN1c2VTdHlsZXNTY29wZWQgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIEEgbGF6eS1sb2FkYWJsZSByZWZlcmVuY2UgdG8gYSBjb21wb25lbnQncyBzdHlsZXMsIHRoYXQgaXMgc2NvcGVkIHRvIHRoZSBjb21wb25lbnQuXG4gKlxuICogQ29tcG9uZW50IHN0eWxlcyBhbGxvdyBRd2lrIHRvIGxhenkgbG9hZCB0aGUgc3R5bGUgaW5mb3JtYXRpb24gZm9yIHRoZSBjb21wb25lbnQgb25seSB3aGVuXG4gKiBuZWVkZWQuIChBbmQgYXZvaWQgZG91YmxlIGxvYWRpbmcgaXQgaW4gY2FzZSBvZiBTU1IgaHlkcmF0aW9uLilcbiAqXG4gKiBgYGB0c3hcbiAqIGltcG9ydCBzY29wZWQgZnJvbSAnLi9jb2RlLWJsb2NrLmNzcz9pbmxpbmUnO1xuICpcbiAqIGV4cG9ydCBjb25zdCBDbXBTY29wZWRTdHlsZXMgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgdXNlU3R5bGVzU2NvcGVkJChzY29wZWQpO1xuICpcbiAqICAgcmV0dXJuIDxkaXY+U29tZSB0ZXh0PC9kaXY+O1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIGB1c2VTdHlsZXNgXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCB1c2VTdHlsZXNTY29wZWQkID0gLyojX19QVVJFX18qLyBpbXBsaWNpdCRGaXJzdEFyZyh1c2VTdHlsZXNTY29wZWRRcmwpO1xuXG5jb25zdCBfdXNlU3R5bGVzID0gKFxuICBzdHlsZVFybDogUVJMPHN0cmluZz4sXG4gIHRyYW5zZm9ybTogKHN0cjogc3RyaW5nLCBzdHlsZUlkOiBzdHJpbmcpID0+IHN0cmluZyxcbiAgc2NvcGVkOiBib29sZWFuXG4pOiBzdHJpbmcgPT4ge1xuICBhc3NlcnRRcmwoc3R5bGVRcmwpO1xuXG4gIGNvbnN0IHsgdmFsLCBzZXQsIGlDdHgsIGkgfSA9IHVzZVNlcXVlbnRpYWxTY29wZTxzdHJpbmc+KCk7XG4gIGlmICh2YWwpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIGNvbnN0IHN0eWxlSWQgPSBzdHlsZUtleShzdHlsZVFybCwgaSk7XG4gIGNvbnN0IGhvc3QgPSBpQ3R4LiRob3N0RWxlbWVudCQ7XG4gIHNldChzdHlsZUlkKTtcblxuICBjb25zdCB2YWx1ZSA9IHN0eWxlUXJsLiRyZXNvbHZlTGF6eSQoaUN0eC4kZWxlbWVudCQpO1xuICBpZiAoaXNQcm9taXNlKHZhbHVlKSkge1xuICAgIHZhbHVlLnRoZW4oKHZhbCkgPT5cbiAgICAgIGlDdHguJGNvbnRhaW5lciQuJGFwcGVuZFN0eWxlJCh0cmFuc2Zvcm0odmFsLCBzdHlsZUlkKSwgc3R5bGVJZCwgaG9zdCwgc2NvcGVkKVxuICAgICk7XG4gICAgdGhyb3cgdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgaUN0eC4kY29udGFpbmVyJC4kYXBwZW5kU3R5bGUkKHRyYW5zZm9ybSh2YWx1ZSwgc3R5bGVJZCksIHN0eWxlSWQsIGhvc3QsIHNjb3BlZCk7XG4gIH1cblxuICByZXR1cm4gc3R5bGVJZDtcbn07XG4iXX0=","import { useInvokeContext } from './use-core';\nimport { USE_ON_LOCAL, USE_ON_LOCAL_FLAGS, USE_ON_LOCAL_SEQ_IDX } from '../shared/utils/markers';\nimport { DOMContentLoadedEvent, eventNameToJsxEvent, } from '../shared/utils/event-names';\n// <docs markdown=\"../readme.md#useOn\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useOn instead and run `pnpm docs.sync`)\n/**\n * Register a listener on the current component's host element.\n *\n * Used to programmatically add event listeners. Useful from custom `use*` methods, which do not\n * have access to the JSX. Otherwise, it's adding a JSX listener in the `<div>` is a better idea.\n *\n * @public\n * @see `useOn`, `useOnWindow`, `useOnDocument`.\n */\n// </docs>\nexport const useOn = (event, eventQrl) => {\n    _useOn(createEventName(event, \"on\" /* EventNameJSXScope.on */), eventQrl);\n};\n// <docs markdown=\"../readme.md#useOnDocument\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useOnDocument instead and run `pnpm docs.sync`)\n/**\n * Register a listener on `document`.\n *\n * Used to programmatically add event listeners. Useful from custom `use*` methods, which do not\n * have access to the JSX.\n *\n * @public\n * @see `useOn`, `useOnWindow`, `useOnDocument`.\n *\n * ```tsx\n * function useScroll() {\n *   useOnDocument(\n *     'scroll',\n *     $((event) => {\n *       console.log('body scrolled', event);\n *     })\n *   );\n * }\n *\n * const Cmp = component$(() => {\n *   useScroll();\n *   return <div>Profit!</div>;\n * });\n * ```\n */\n// </docs>\nexport const useOnDocument = (event, eventQrl) => {\n    _useOn(createEventName(event, \"document:on\" /* EventNameJSXScope.document */), eventQrl);\n};\n// <docs markdown=\"../readme.md#useOnWindow\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useOnWindow instead and run `pnpm docs.sync`)\n/**\n * Register a listener on `window`.\n *\n * Used to programmatically add event listeners. Useful from custom `use*` methods, which do not\n * have access to the JSX.\n *\n * @public\n * @see `useOn`, `useOnWindow`, `useOnDocument`.\n *\n * ```tsx\n * function useAnalytics() {\n *   useOnWindow(\n *     'popstate',\n *     $((event) => {\n *       console.log('navigation happened', event);\n *       // report to analytics\n *     })\n *   );\n * }\n *\n * const Cmp = component$(() => {\n *   useAnalytics();\n *   return <div>Profit!</div>;\n * });\n * ```\n */\n// </docs>\nexport const useOnWindow = (event, eventQrl) => {\n    _useOn(createEventName(event, \"window:on\" /* EventNameJSXScope.window */), eventQrl);\n};\nconst createEventName = (event, eventScope) => {\n    const map = (name) => {\n        let prefix = eventScope;\n        if (name === DOMContentLoadedEvent) {\n            prefix += '-'; // Add hyphen at the start if case-sensitive\n        }\n        return eventNameToJsxEvent(name, prefix);\n    };\n    return Array.isArray(event) ? event.map(map) : map(event);\n};\nconst _useOn = (eventName, eventQrl) => {\n    const { isAdded, addEvent } = useOnEventsSequentialScope();\n    if (isAdded) {\n        return;\n    }\n    if (eventQrl) {\n        Array.isArray(eventName)\n            ? eventName.forEach((event) => addEvent(event, eventQrl))\n            : addEvent(eventName, eventQrl);\n    }\n};\n/**\n * This hook is like the `useSequentialScope` but it is specifically for `useOn`. This is needed\n * because we want to execute the `useOn` hooks only once and store the event listeners on the host\n * element. From Qwik V2 the component is rerunning when the promise is thrown, so we need to make\n * sure that the event listeners are not added multiple times.\n *\n * - The event listeners are stored in the `USE_ON_LOCAL` property.\n * - The `USE_ON_LOCAL_SEQ_IDX` is used to keep track of the index of the hook that calls this.\n * - The `USE_ON_LOCAL_FLAGS` is used to keep track of whether the event listener has been added or\n *   not.\n */\nconst useOnEventsSequentialScope = () => {\n    const iCtx = useInvokeContext();\n    const hostElement = iCtx.$hostElement$;\n    const host = hostElement;\n    let onMap = iCtx.$container$.getHostProp(host, USE_ON_LOCAL);\n    if (onMap === null) {\n        onMap = {};\n        iCtx.$container$.setHostProp(host, USE_ON_LOCAL, onMap);\n    }\n    let seqIdx = iCtx.$container$.getHostProp(host, USE_ON_LOCAL_SEQ_IDX);\n    if (seqIdx === null) {\n        seqIdx = 0;\n    }\n    iCtx.$container$.setHostProp(host, USE_ON_LOCAL_SEQ_IDX, seqIdx + 1);\n    let addedFlags = iCtx.$container$.getHostProp(host, USE_ON_LOCAL_FLAGS);\n    if (addedFlags === null) {\n        addedFlags = [];\n        iCtx.$container$.setHostProp(host, USE_ON_LOCAL_FLAGS, addedFlags);\n    }\n    while (addedFlags.length <= seqIdx) {\n        addedFlags.push(false);\n    }\n    const addEvent = (eventName, eventQrl) => {\n        addedFlags[seqIdx] = true;\n        let events = onMap[eventName];\n        if (!events) {\n            onMap[eventName] = events = [];\n        }\n        events.push(eventQrl);\n    };\n    return {\n        isAdded: addedFlags[seqIdx],\n        addEvent,\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLW9uLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2Utb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBUTlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRyxPQUFPLEVBQ0wscUJBQXFCLEVBRXJCLG1CQUFtQixHQUNwQixNQUFNLDZCQUE2QixDQUFDO0FBTXJDLHVDQUF1QztBQUN2Qyx5Q0FBeUM7QUFDekMsNkRBQTZEO0FBQzdEOzs7Ozs7OztHQVFHO0FBQ0gsVUFBVTtBQUNWLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUE0QixLQUFjLEVBQUUsUUFBcUIsRUFBRSxFQUFFO0lBQ3hGLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxrQ0FBdUIsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFFRiwrQ0FBK0M7QUFDL0MseUNBQXlDO0FBQ3pDLHFFQUFxRTtBQUNyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsVUFBVTtBQUNWLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUE0QixLQUFjLEVBQUUsUUFBcUIsRUFBRSxFQUFFO0lBQ2hHLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxpREFBNkIsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN2RSxDQUFDLENBQUM7QUFFRiw2Q0FBNkM7QUFDN0MseUNBQXlDO0FBQ3pDLG1FQUFtRTtBQUNuRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBNEIsS0FBYyxFQUFFLFFBQXFCLEVBQUUsRUFBRTtJQUM5RixNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssNkNBQTJCLEVB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QUFpQixFQUFFLFFBQW1DLEVBQUUsRUFBRTtRQUMxRSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksTUFBTSxHQUFHLEtBQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixLQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsT0FBTyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDM0IsUUFBUTtLQUNULENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFFSTCB9IGZyb20gJy4uL3NoYXJlZC9xcmwvcXJsLnB1YmxpYyc7XG5pbXBvcnQgeyB1c2VJbnZva2VDb250ZXh0IH0gZnJvbSAnLi91c2UtY29yZSc7XG5pbXBvcnQgeyB0eXBlIEtub3duRXZlbnROYW1lcyB9IGZyb20gJy4uL3NoYXJlZC9qc3gvdHlwZXMvanN4LXF3aWstZXZlbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgRXZlbnRIYW5kbGVyLFxuICBFdmVudEZyb21OYW1lLFxuICBBbGxFdmVudEtleXMsXG59IGZyb20gJy4uL3NoYXJlZC9qc3gvdHlwZXMvanN4LXF3aWstYXR0cmlidXRlcyc7XG5pbXBvcnQgdHlwZSB7IEhvc3RFbGVtZW50IH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IFVTRV9PTl9MT0NBTCwgVVNFX09OX0xPQ0FMX0ZMQUdTLCBVU0VfT05fTE9DQUxfU0VRX0lEWCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy9tYXJrZXJzJztcbmltcG9ydCB7XG4gIERPTUNvbnRlbnRMb2FkZWRFdmVudCxcbiAgRXZlbnROYW1lSlNYU2NvcGUsXG4gIGV2ZW50TmFtZVRvSnN4RXZlbnQsXG59IGZyb20gJy4uL3NoYXJlZC91dGlscy9ldmVudC1uYW1lcyc7XG5cbmV4cG9ydCB0eXBlIEV2ZW50UVJMPFQgZXh0ZW5kcyBzdHJpbmcgPSBBbGxFdmVudEtleXM+ID1cbiAgfCBRUkw8RXZlbnRIYW5kbGVyPEV2ZW50RnJvbU5hbWU8VD4sIEVsZW1lbnQ+PlxuICB8IHVuZGVmaW5lZDtcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi9yZWFkbWUubWQjdXNlT25cIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlT24gaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgb24gdGhlIGN1cnJlbnQgY29tcG9uZW50J3MgaG9zdCBlbGVtZW50LlxuICpcbiAqIFVzZWQgdG8gcHJvZ3JhbW1hdGljYWxseSBhZGQgZXZlbnQgbGlzdGVuZXJzLiBVc2VmdWwgZnJvbSBjdXN0b20gYHVzZSpgIG1ldGhvZHMsIHdoaWNoIGRvIG5vdFxuICogaGF2ZSBhY2Nlc3MgdG8gdGhlIEpTWC4gT3RoZXJ3aXNlLCBpdCdzIGFkZGluZyBhIEpTWCBsaXN0ZW5lciBpbiB0aGUgYDxkaXY+YCBpcyBhIGJldHRlciBpZGVhLlxuICpcbiAqIEBwdWJsaWNcbiAqIEBzZWUgYHVzZU9uYCwgYHVzZU9uV2luZG93YCwgYHVzZU9uRG9jdW1lbnRgLlxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgdXNlT24gPSA8VCBleHRlbmRzIEtub3duRXZlbnROYW1lcz4oZXZlbnQ6IFQgfCBUW10sIGV2ZW50UXJsOiBFdmVudFFSTDxUPikgPT4ge1xuICBfdXNlT24oY3JlYXRlRXZlbnROYW1lKGV2ZW50LCBFdmVudE5hbWVKU1hTY29wZS5vbiksIGV2ZW50UXJsKTtcbn07XG5cbi8vIDxkb2NzIG1hcmtkb3duPVwiLi4vcmVhZG1lLm1kI3VzZU9uRG9jdW1lbnRcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlT25Eb2N1bWVudCBpbnN0ZWFkIGFuZCBydW4gYHBucG0gZG9jcy5zeW5jYClcbi8qKlxuICogUmVnaXN0ZXIgYSBsaXN0ZW5lciBvbiBgZG9jdW1lbnRgLlxuICpcbiAqIFVzZWQgdG8gcHJvZ3JhbW1hdGljYWxseSBhZGQgZXZlbnQgbGlzdGVuZXJzLiBVc2VmdWwgZnJvbSBjdXN0b20gYHVzZSpgIG1ldGhvZHMsIHdoaWNoIGRvIG5vdFxuICogaGF2ZSBhY2Nlc3MgdG8gdGhlIEpTWC5cbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIGB1c2VPbmAsIGB1c2VPbldpbmRvd2AsIGB1c2VPbkRvY3VtZW50YC5cbiAqXG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIHVzZVNjcm9sbCgpIHtcbiAqICAgdXNlT25Eb2N1bWVudChcbiAqICAgICAnc2Nyb2xsJyxcbiAqICAgICAkKChldmVudCkgPT4ge1xuICogICAgICAgY29uc29sZS5sb2coJ2JvZHkgc2Nyb2xsZWQnLCBldmVudCk7XG4gKiAgICAgfSlcbiAqICAgKTtcbiAqIH1cbiAqXG4gKiBjb25zdCBDbXAgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgdXNlU2Nyb2xsKCk7XG4gKiAgIHJldHVybiA8ZGl2PlByb2ZpdCE8L2Rpdj47XG4gKiB9KTtcbiAqIGBgYFxuICovXG4vLyA8L2RvY3M+XG5leHBvcnQgY29uc3QgdXNlT25Eb2N1bWVudCA9IDxUIGV4dGVuZHMgS25vd25FdmVudE5hbWVzPihldmVudDogVCB8IFRbXSwgZXZlbnRRcmw6IEV2ZW50UVJMPFQ+KSA9PiB7XG4gIF91c2VPbihjcmVhdGVFdmVudE5hbWUoZXZlbnQsIEV2ZW50TmFtZUpTWFNjb3BlLmRvY3VtZW50KSwgZXZlbnRRcmwpO1xufTtcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi9yZWFkbWUubWQjdXNlT25XaW5kb3dcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlT25XaW5kb3cgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgb24gYHdpbmRvd2AuXG4gKlxuICogVXNlZCB0byBwcm9ncmFtbWF0aWNhbGx5IGFkZCBldmVudCBsaXN0ZW5lcnMuIFVzZWZ1bCBmcm9tIGN1c3RvbSBgdXNlKmAgbWV0aG9kcywgd2hpY2ggZG8gbm90XG4gKiBoYXZlIGFjY2VzcyB0byB0aGUgSlNYLlxuICpcbiAqIEBwdWJsaWNcbiAqIEBzZWUgYHVzZU9uYCwgYHVzZU9uV2luZG93YCwgYHVzZU9uRG9jdW1lbnRgLlxuICpcbiAqIGBgYHRzeFxuICogZnVuY3Rpb24gdXNlQW5hbHl0aWNzKCkge1xuICogICB1c2VPbldpbmRvdyhcbiAqICAgICAncG9wc3RhdGUnLFxuICogICAgICQoKGV2ZW50KSA9PiB7XG4gKiAgICAgICBjb25zb2xlLmxvZygnbmF2aWdhdGlvbiBoYXBwZW5lZCcsIGV2ZW50KTtcbiAqICAgICAgIC8vIHJlcG9ydCB0byBhbmFseXRpY3NcbiAqICAgICB9KVxuICogICApO1xuICogfVxuICpcbiAqIGNvbnN0IENtcCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICB1c2VBbmFseXRpY3MoKTtcbiAqICAgcmV0dXJuIDxkaXY+UHJvZml0ITwvZGl2PjtcbiAqIH0pO1xuICogYGBgXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCB1c2VPbldpbmRvdyA9IDxUIGV4dGVuZHMgS25vd25FdmVudE5hbWVzPihldmVudDogVCB8IFRbXSwgZXZlbnRRcmw6IEV2ZW50UVJMPFQ+KSA9PiB7XG4gIF91c2VPbihjcmVhdGVFdmVudE5hbWUoZXZlbnQsIEV2ZW50TmFtZUpTWFNjb3BlLndpbmRvdyksIGV2ZW50UXJsKTtcbn07XG5cbmNvbnN0IGNyZWF0ZUV2ZW50TmFtZSA9IChcbiAgZXZlbnQ6IEtub3duRXZlbnROYW1lcyB8IEtub3duRXZlbnROYW1lc1tdLFxuICBldmVudFNjb3BlOiBFdmVudE5hbWVKU1hTY29wZVxuKSA9PiB7XG4gIGNvbnN0IG1hcCA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBsZXQgcHJlZml4OiBzdHJpbmcgPSBldmVudFNjb3BlO1xuICAgIGlmIChuYW1lID09PSBET01Db250ZW50TG9hZGVkRXZlbnQpIHtcbiAgICAgIHByZWZpeCArPSAnLSc7IC8vIEFkZCBoeXBoZW4gYXQgdGhlIHN0YXJ0IGlmIGNhc2Utc2Vuc2l0aXZlXG4gICAgfVxuICAgIHJldHVybiBldmVudE5hbWVUb0pzeEV2ZW50KG5hbWUsIHByZWZpeCk7XG4gIH07XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGV2ZW50KSA/IGV2ZW50Lm1hcChtYXApIDogbWFwKGV2ZW50KTtcbn07XG5cbmNvbnN0IF91c2VPbiA9IChldmVudE5hbWU6IHN0cmluZyB8IHN0cmluZ1tdLCBldmVudFFybDogRXZlbnRRUkwpID0+IHtcbiAgY29uc3QgeyBpc0FkZGVkLCBhZGRFdmVudCB9ID0gdXNlT25FdmVudHNTZXF1ZW50aWFsU2NvcGUoKTtcbiAgaWYgKGlzQWRkZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGV2ZW50UXJsKSB7XG4gICAgQXJyYXkuaXNBcnJheShldmVudE5hbWUpXG4gICAgICA/IGV2ZW50TmFtZS5mb3JFYWNoKChldmVudCkgPT4gYWRkRXZlbnQoZXZlbnQsIGV2ZW50UXJsKSlcbiAgICAgIDogYWRkRXZlbnQoZXZlbnROYW1lLCBldmVudFFybCk7XG4gIH1cbn07XG5cbi8qKlxuICogVGhpcyBob29rIGlzIGxpa2UgdGhlIGB1c2VTZXF1ZW50aWFsU2NvcGVgIGJ1dCBpdCBpcyBzcGVjaWZpY2FsbHkgZm9yIGB1c2VPbmAuIFRoaXMgaXMgbmVlZGVkXG4gKiBiZWNhdXNlIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgYHVzZU9uYCBob29rcyBvbmx5IG9uY2UgYW5kIHN0b3JlIHRoZSBldmVudCBsaXN0ZW5lcnMgb24gdGhlIGhvc3RcbiAqIGVsZW1lbnQuIEZyb20gUXdpayBWMiB0aGUgY29tcG9uZW50IGlzIHJlcnVubmluZyB3aGVuIHRoZSBwcm9taXNlIGlzIHRocm93biwgc28gd2UgbmVlZCB0byBtYWtlXG4gKiBzdXJlIHRoYXQgdGhlIGV2ZW50IGxpc3RlbmVycyBhcmUgbm90IGFkZGVkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIC0gVGhlIGV2ZW50IGxpc3RlbmVycyBhcmUgc3RvcmVkIGluIHRoZSBgVVNFX09OX0xPQ0FMYCBwcm9wZXJ0eS5cbiAqIC0gVGhlIGBVU0VfT05fTE9DQUxfU0VRX0lEWGAgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBpbmRleCBvZiB0aGUgaG9vayB0aGF0IGNhbGxzIHRoaXMuXG4gKiAtIFRoZSBgVVNFX09OX0xPQ0FMX0ZMQUdTYCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGUgZXZlbnQgbGlzdGVuZXIgaGFzIGJlZW4gYWRkZWQgb3JcbiAqICAgbm90LlxuICovXG5jb25zdCB1c2VPbkV2ZW50c1NlcXVlbnRpYWxTY29wZSA9ICgpID0+IHtcbiAgY29uc3QgaUN0eCA9IHVzZUludm9rZUNvbnRleHQoKTtcbiAgY29uc3QgaG9zdEVsZW1lbnQgPSBpQ3R4LiRob3N0RWxlbWVudCQ7XG4gIGNvbnN0IGhvc3Q6IEhvc3RFbGVtZW50ID0gaG9zdEVsZW1lbnQgYXMgYW55O1xuICBsZXQgb25NYXAgPSBpQ3R4LiRjb250YWluZXIkLmdldEhvc3RQcm9wPFVzZU9uTWFwPihob3N0LCBVU0VfT05fTE9DQUwpO1xuICBpZiAob25NYXAgPT09IG51bGwpIHtcbiAgICBvbk1hcCA9IHt9O1xuICAgIGlDdHguJGNvbnRhaW5lciQuc2V0SG9zdFByb3AoaG9zdCwgVVNFX09OX0xPQ0FMLCBvbk1hcCk7XG4gIH1cbiAgbGV0IHNlcUlkeCA9IGlDdHguJGNvbnRhaW5lciQuZ2V0SG9zdFByb3A8bnVtYmVyPihob3N0LCBVU0VfT05fTE9DQUxfU0VRX0lEWCk7XG4gIGlmIChzZXFJZHggPT09IG51bGwpIHtcbiAgICBzZXFJZHggPSAwO1xuICB9XG4gIGlDdHguJGNvbnRhaW5lciQuc2V0SG9zdFByb3AoaG9zdCwgVVNFX09OX0xPQ0FMX1NFUV9JRFgsIHNlcUlkeCArIDEpO1xuICBsZXQgYWRkZWRGbGFncyA9IGlDdHguJGNvbnRhaW5lciQuZ2V0SG9zdFByb3A8Ym9vbGVhbltdPihob3N0LCBVU0VfT05fTE9DQUxfRkxBR1MpO1xuICBpZiAoYWRkZWRGbGFncyA9PT0gbnVsbCkge1xuICAgIGFkZGVkRmxhZ3MgPSBbXTtcbiAgICBpQ3R4LiRjb250YWluZXIkLnNldEhvc3RQcm9wKGhvc3QsIFVTRV9PTl9MT0NBTF9GTEFHUywgYWRkZWRGbGFncyk7XG4gIH1cbiAgd2hpbGUgKGFkZGVkRmxhZ3MubGVuZ3RoIDw9IHNlcUlkeCkge1xuICAgIGFkZGVkRmxhZ3MucHVzaChmYWxzZSk7XG4gIH1cbiAgY29uc3QgYWRkRXZlbnQgPSAoZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50UXJsOiBFdmVudFFSTDxLbm93bkV2ZW50TmFtZXM+KSA9PiB7XG4gICAgYWRkZWRGbGFnc1tzZXFJZHhdID0gdHJ1ZTtcbiAgICBsZXQgZXZlbnRzID0gb25NYXAhW2V2ZW50TmFtZV07XG4gICAgaWYgKCFldmVudHMpIHtcbiAgICAgIG9uTWFwIVtldmVudE5hbWVdID0gZXZlbnRzID0gW107XG4gICAgfVxuICAgIGV2ZW50cy5wdXNoKGV2ZW50UXJsKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGlzQWRkZWQ6IGFkZGVkRmxhZ3Nbc2VxSWR4XSxcbiAgICBhZGRFdmVudCxcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFVzZU9uTWFwID0gUmVjb3JkPHN0cmluZywgRXZlbnRRUkw8S25vd25FdmVudE5hbWVzPltdPjtcbiJdfQ==","import { isQwikComponent } from '../shared/component.public';\nimport { isFunction } from '../shared/utils/types';\nimport { createSignal } from '../signal/signal.public';\nimport { invoke } from './use-core';\nimport { useSequentialScope } from './use-sequential-scope';\n/** @public */\nexport const useSignal = (initialState) => {\n    return useConstant(() => {\n        const value = isFunction(initialState) && !isQwikComponent(initialState)\n            ? invoke(undefined, initialState)\n            : initialState;\n        return createSignal(value);\n    });\n};\n/**\n * Stores a value which is retained for the lifetime of the component. Subsequent calls to\n * `useConstant` will always return the first value given.\n *\n * If the value is a function, the function is invoked once to calculate the actual value.\n *\n * @public\n */\nexport const useConstant = (value) => {\n    const { val, set } = useSequentialScope();\n    if (val != null) {\n        return val;\n    }\n    // Note: We are not using `invoke` here because we don't want to clear the context\n    value = isFunction(value) && !isQwikComponent(value) ? value() : value;\n    return set(value);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXNpZ25hbC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLXNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBUTVELGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWMsQ0FBUSxZQUFvQixFQUFpQixFQUFFO0lBQ2pGLE9BQU8sV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUN0QixNQUFNLEtBQUssR0FDVCxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO1lBQ3hELENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQW1CLENBQUM7WUFDeEMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNuQixPQUFPLFlBQVksQ0FBUSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBSSxLQUFvQixFQUFLLEVBQUU7SUFDeEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsRUFBSyxDQUFDO0lBQzdDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELGtGQUFrRjtJQUNsRixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3ZFLE9BQU8sR0FBRyxDQUFDLEtBQVUsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUXdpa0NvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC9jb21wb25lbnQucHVibGljJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCB0eXBlIFNpZ25hbCB9IGZyb20gJy4uL3NpZ25hbC9zaWduYWwucHVibGljJztcbmltcG9ydCB7IGludm9rZSB9IGZyb20gJy4vdXNlLWNvcmUnO1xuaW1wb3J0IHsgdXNlU2VxdWVudGlhbFNjb3BlIH0gZnJvbSAnLi91c2Utc2VxdWVudGlhbC1zY29wZSc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZVNpZ25hbCB7XG4gIDxUPigpOiBTaWduYWw8VCB8IHVuZGVmaW5lZD47XG4gIDxUPih2YWx1ZTogVCB8ICgoKSA9PiBUKSk6IFNpZ25hbDxUPjtcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCB1c2VTaWduYWw6IFVzZVNpZ25hbCA9IDxTVEFURT4oaW5pdGlhbFN0YXRlPzogU1RBVEUpOiBTaWduYWw8U1RBVEU+ID0+IHtcbiAgcmV0dXJuIHVzZUNvbnN0YW50KCgpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9XG4gICAgICBpc0Z1bmN0aW9uKGluaXRpYWxTdGF0ZSkgJiYgIWlzUXdpa0NvbXBvbmVudChpbml0aWFsU3RhdGUpXG4gICAgICAgID8gaW52b2tlKHVuZGVmaW5lZCwgaW5pdGlhbFN0YXRlIGFzIGFueSlcbiAgICAgICAgOiBpbml0aWFsU3RhdGU7XG4gICAgcmV0dXJuIGNyZWF0ZVNpZ25hbDxTVEFURT4odmFsdWUpO1xuICB9KTtcbn07XG5cbi8qKlxuICogU3RvcmVzIGEgdmFsdWUgd2hpY2ggaXMgcmV0YWluZWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBTdWJzZXF1ZW50IGNhbGxzIHRvXG4gKiBgdXNlQ29uc3RhbnRgIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgZmlyc3QgdmFsdWUgZ2l2ZW4uXG4gKlxuICogSWYgdGhlIHZhbHVlIGlzIGEgZnVuY3Rpb24sIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkIG9uY2UgdG8gY2FsY3VsYXRlIHRoZSBhY3R1YWwgdmFsdWUuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXNlQ29uc3RhbnQgPSA8VD4odmFsdWU6ICgoKSA9PiBUKSB8IFQpOiBUID0+IHtcbiAgY29uc3QgeyB2YWwsIHNldCB9ID0gdXNlU2VxdWVudGlhbFNjb3BlPFQ+KCk7XG4gIGlmICh2YWwgIT0gbnVsbCkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgLy8gTm90ZTogV2UgYXJlIG5vdCB1c2luZyBgaW52b2tlYCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjbGVhciB0aGUgY29udGV4dFxuICB2YWx1ZSA9IGlzRnVuY3Rpb24odmFsdWUpICYmICFpc1F3aWtDb21wb25lbnQodmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlO1xuICByZXR1cm4gc2V0KHZhbHVlIGFzIFQpO1xufTtcbiJdfQ==","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { assertQrl } from '../shared/qrl/qrl-utils';\nimport { ComputedSignalImpl, throwIfQRLNotResolved } from '../signal/signal';\nimport { useSequentialScope } from './use-sequential-scope';\nexport const useComputedCommon = (qrl, Class) => {\n    const { val, set } = useSequentialScope();\n    if (val) {\n        return val;\n    }\n    assertQrl(qrl);\n    const signal = new Class(null, qrl);\n    set(signal);\n    // Note that we first save the signal\n    // and then we throw to load the qrl\n    // This is why we can't use useConstant, we need to keep using the same qrl object\n    throwIfQRLNotResolved(qrl);\n    return signal;\n};\n/** @internal */\nexport const useComputedQrl = (qrl) => {\n    return useComputedCommon(qrl, ComputedSignalImpl);\n};\n/**\n * Creates a computed signal which is calculated from the given function. A computed signal is a\n * signal which is calculated from other signals. When the signals change, the computed signal is\n * recalculated, and if the result changed, all tasks which are tracking the signal will be re-run\n * and all components that read the signal will be re-rendered.\n *\n * The function must be synchronous and must not have any side effects.\n *\n * @public\n */\nexport const useComputed$ = implicit$FirstArg(useComputedQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNvbXB1dGVkLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtY29tcHV0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSzVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLEdBQXVCLEVBQ3ZCLEtBQWdDLEVBQ29CLEVBQUU7SUFDdEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsRUFBYSxDQUFDO0lBQ3JELElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixPQUFPLEdBQVUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVaLHFDQUFxQztJQUNyQyxvQ0FBb0M7SUFDcEMsa0ZBQWtGO0lBQ2xGLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE9BQU8sTUFBYSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FDNUIsR0FBdUIsRUFDNkIsRUFBRTtJQUN0RCxPQUFPLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcGxpY2l0JEZpcnN0QXJnIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9pbXBsaWNpdF9kb2xsYXInO1xuaW1wb3J0IHsgYXNzZXJ0UXJsIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHsgQ29tcHV0ZWRTaWduYWxJbXBsLCB0aHJvd0lmUVJMTm90UmVzb2x2ZWQgfSBmcm9tICcuLi9zaWduYWwvc2lnbmFsJztcbmltcG9ydCB0eXBlIHsgUmVhZG9ubHlTaWduYWwsIFNpZ25hbCB9IGZyb20gJy4uL3NpZ25hbC9zaWduYWwucHVibGljJztcbmltcG9ydCB7IHVzZVNlcXVlbnRpYWxTY29wZSB9IGZyb20gJy4vdXNlLXNlcXVlbnRpYWwtc2NvcGUnO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRGbjxUPiA9ICgpID0+IFQ7XG5cbmV4cG9ydCBjb25zdCB1c2VDb21wdXRlZENvbW1vbiA9IDxUPihcbiAgcXJsOiBRUkw8Q29tcHV0ZWRGbjxUPj4sXG4gIENsYXNzOiB0eXBlb2YgQ29tcHV0ZWRTaWduYWxJbXBsXG4pOiBUIGV4dGVuZHMgUHJvbWlzZTxhbnk+ID8gbmV2ZXIgOiBSZWFkb25seVNpZ25hbDxUPiA9PiB7XG4gIGNvbnN0IHsgdmFsLCBzZXQgfSA9IHVzZVNlcXVlbnRpYWxTY29wZTxTaWduYWw8VD4+KCk7XG4gIGlmICh2YWwpIHtcbiAgICByZXR1cm4gdmFsIGFzIGFueTtcbiAgfVxuICBhc3NlcnRRcmwocXJsKTtcbiAgY29uc3Qgc2lnbmFsID0gbmV3IENsYXNzKG51bGwsIHFybCk7XG4gIHNldChzaWduYWwpO1xuXG4gIC8vIE5vdGUgdGhhdCB3ZSBmaXJzdCBzYXZlIHRoZSBzaWduYWxcbiAgLy8gYW5kIHRoZW4gd2UgdGhyb3cgdG8gbG9hZCB0aGUgcXJsXG4gIC8vIFRoaXMgaXMgd2h5IHdlIGNhbid0IHVzZSB1c2VDb25zdGFudCwgd2UgbmVlZCB0byBrZWVwIHVzaW5nIHRoZSBzYW1lIHFybCBvYmplY3RcbiAgdGhyb3dJZlFSTE5vdFJlc29sdmVkKHFybCk7XG4gIHJldHVybiBzaWduYWwgYXMgYW55O1xufTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IHVzZUNvbXB1dGVkUXJsID0gPFQ+KFxuICBxcmw6IFFSTDxDb21wdXRlZEZuPFQ+PlxuKTogVCBleHRlbmRzIFByb21pc2U8YW55PiA/IG5ldmVyIDogUmVhZG9ubHlTaWduYWw8VD4gPT4ge1xuICByZXR1cm4gdXNlQ29tcHV0ZWRDb21tb24ocXJsLCBDb21wdXRlZFNpZ25hbEltcGwpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcHV0ZWQgc2lnbmFsIHdoaWNoIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZ2l2ZW4gZnVuY3Rpb24uIEEgY29tcHV0ZWQgc2lnbmFsIGlzIGFcbiAqIHNpZ25hbCB3aGljaCBpcyBjYWxjdWxhdGVkIGZyb20gb3RoZXIgc2lnbmFscy4gV2hlbiB0aGUgc2lnbmFscyBjaGFuZ2UsIHRoZSBjb21wdXRlZCBzaWduYWwgaXNcbiAqIHJlY2FsY3VsYXRlZCwgYW5kIGlmIHRoZSByZXN1bHQgY2hhbmdlZCwgYWxsIHRhc2tzIHdoaWNoIGFyZSB0cmFja2luZyB0aGUgc2lnbmFsIHdpbGwgYmUgcmUtcnVuXG4gKiBhbmQgYWxsIGNvbXBvbmVudHMgdGhhdCByZWFkIHRoZSBzaWduYWwgd2lsbCBiZSByZS1yZW5kZXJlZC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBzeW5jaHJvbm91cyBhbmQgbXVzdCBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3RzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUNvbXB1dGVkJCA9IGltcGxpY2l0JEZpcnN0QXJnKHVzZUNvbXB1dGVkUXJsKTtcbiJdfQ==","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { SerializerSignalImpl, } from '../signal/signal';\nimport { useComputedCommon } from './use-computed';\n/** @internal */\nexport const useSerializerQrl = (qrl) => useComputedCommon(qrl, SerializerSignalImpl);\n/**\n * Creates a signal which holds a custom serializable value. It requires that the value implements\n * the `CustomSerializable` type, which means having a function under the `[SerializeSymbol]`\n * property that returns a serializable value when called.\n *\n * The `fn` you pass is called with the result of the serialization (in the browser, only when the\n * value is needed), or `undefined` when not yet initialized. If you refer to other signals, `fn`\n * will be called when those change just like computed signals, and then the argument will be the\n * previous output, not the serialized result.\n *\n * This is useful when using third party libraries that use custom objects that are not\n * serializable.\n *\n * Note that the `fn` is called lazily, so it won't impact container resume.\n *\n * @example\n *\n * ```tsx\n * class MyCustomSerializable {\n *   constructor(public n: number) {}\n *   inc() {\n *     this.n++;\n *   }\n * }\n * const Cmp = component$(() => {\n *   const custom = useSerializer$({\n *     deserialize: (data) => new MyCustomSerializable(data),\n *     serialize: (data) => data.n,\n *     initial: 2,\n *   });\n *   return <div onClick$={() => custom.value.inc()}>{custom.value.n}</div>;\n * });\n * ```\n *\n * @example\n *\n * When using a Signal as the data to create the object, you need to pass the configuration as a\n * function, and you can then also provide the `update` function to update the object when the\n * signal changes.\n *\n * By returning an object from `update`, you signal that the listeners have to be notified. You can\n * mutate the current object but you should return it so that it will trigger listeners.\n *\n * ```tsx\n * const Cmp = component$(() => {\n *   const n = useSignal(2);\n *   const custom = useSerializer$(() =>\n *     ({\n *       deserialize: () => new MyCustomSerializable(n.value),\n *       update: (current) => {\n *         current.n = n.value;\n *         return current;\n *       }\n *     })\n *   );\n *   return <div onClick$={() => n.value++}>{custom.value.n}</div>;\n * });\n * ```\n *\n * @public\n */\nexport const useSerializer$ = implicit$FirstArg(useSerializerQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXNlcmlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS1zZXJpYWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWxFLE9BQU8sRUFDTCxvQkFBb0IsR0FHckIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBTyxHQUE2QixFQUFFLEVBQUUsQ0FDdEUsaUJBQWlCLENBQUMsR0FBVSxFQUFFLG9CQUFpRCxDQUFDLENBQUM7QUFFbkY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRERztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBNkIsaUJBQWlCLENBQUMsZ0JBQXVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcGxpY2l0JEZpcnN0QXJnIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9pbXBsaWNpdF9kb2xsYXInO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHtcbiAgU2VyaWFsaXplclNpZ25hbEltcGwsXG4gIHR5cGUgQ29tcHV0ZWRTaWduYWxJbXBsLFxuICB0eXBlIFNlcmlhbGl6ZXJBcmcsXG59IGZyb20gJy4uL3NpZ25hbC9zaWduYWwnO1xuaW1wb3J0IHR5cGUgeyBjcmVhdGVTZXJpYWxpemVyJCB9IGZyb20gJy4uL3NpZ25hbC9zaWduYWwucHVibGljJztcbmltcG9ydCB7IHVzZUNvbXB1dGVkQ29tbW9uIH0gZnJvbSAnLi91c2UtY29tcHV0ZWQnO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgdXNlU2VyaWFsaXplclFybCA9IDxULCBTPihxcmw6IFFSTDxTZXJpYWxpemVyQXJnPFQsIFM+PikgPT5cbiAgdXNlQ29tcHV0ZWRDb21tb24ocXJsIGFzIGFueSwgU2VyaWFsaXplclNpZ25hbEltcGwgYXMgdHlwZW9mIENvbXB1dGVkU2lnbmFsSW1wbCk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNpZ25hbCB3aGljaCBob2xkcyBhIGN1c3RvbSBzZXJpYWxpemFibGUgdmFsdWUuIEl0IHJlcXVpcmVzIHRoYXQgdGhlIHZhbHVlIGltcGxlbWVudHNcbiAqIHRoZSBgQ3VzdG9tU2VyaWFsaXphYmxlYCB0eXBlLCB3aGljaCBtZWFucyBoYXZpbmcgYSBmdW5jdGlvbiB1bmRlciB0aGUgYFtTZXJpYWxpemVTeW1ib2xdYFxuICogcHJvcGVydHkgdGhhdCByZXR1cm5zIGEgc2VyaWFsaXphYmxlIHZhbHVlIHdoZW4gY2FsbGVkLlxuICpcbiAqIFRoZSBgZm5gIHlvdSBwYXNzIGlzIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHNlcmlhbGl6YXRpb24gKGluIHRoZSBicm93c2VyLCBvbmx5IHdoZW4gdGhlXG4gKiB2YWx1ZSBpcyBuZWVkZWQpLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuIElmIHlvdSByZWZlciB0byBvdGhlciBzaWduYWxzLCBgZm5gXG4gKiB3aWxsIGJlIGNhbGxlZCB3aGVuIHRob3NlIGNoYW5nZSBqdXN0IGxpa2UgY29tcHV0ZWQgc2lnbmFscywgYW5kIHRoZW4gdGhlIGFyZ3VtZW50IHdpbGwgYmUgdGhlXG4gKiBwcmV2aW91cyBvdXRwdXQsIG5vdCB0aGUgc2VyaWFsaXplZCByZXN1bHQuXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgd2hlbiB1c2luZyB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMgdGhhdCB1c2UgY3VzdG9tIG9iamVjdHMgdGhhdCBhcmUgbm90XG4gKiBzZXJpYWxpemFibGUuXG4gKlxuICogTm90ZSB0aGF0IHRoZSBgZm5gIGlzIGNhbGxlZCBsYXppbHksIHNvIGl0IHdvbid0IGltcGFjdCBjb250YWluZXIgcmVzdW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHN4XG4gKiBjbGFzcyBNeUN1c3RvbVNlcmlhbGl6YWJsZSB7XG4gKiAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuOiBudW1iZXIpIHt9XG4gKiAgIGluYygpIHtcbiAqICAgICB0aGlzLm4rKztcbiAqICAgfVxuICogfVxuICogY29uc3QgQ21wID0gY29tcG9uZW50JCgoKSA9PiB7XG4gKiAgIGNvbnN0IGN1c3RvbSA9IHVzZVNlcmlhbGl6ZXIkKHtcbiAqICAgICBkZXNlcmlhbGl6ZTogKGRhdGEpID0+IG5ldyBNeUN1c3RvbVNlcmlhbGl6YWJsZShkYXRhKSxcbiAqICAgICBzZXJpYWxpemU6IChkYXRhKSA9PiBkYXRhLm4sXG4gKiAgICAgaW5pdGlhbDogMixcbiAqICAgfSk7XG4gKiAgIHJldHVybiA8ZGl2IG9uQ2xpY2skPXsoKSA9PiBjdXN0b20udmFsdWUuaW5jKCl9PntjdXN0b20udmFsdWUubn08L2Rpdj47XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogV2hlbiB1c2luZyBhIFNpZ25hbCBhcyB0aGUgZGF0YSB0byBjcmVhdGUgdGhlIG9iamVjdCwgeW91IG5lZWQgdG8gcGFzcyB0aGUgY29uZmlndXJhdGlvbiBhcyBhXG4gKiBmdW5jdGlvbiwgYW5kIHlvdSBjYW4gdGhlbiBhbHNvIHByb3ZpZGUgdGhlIGB1cGRhdGVgIGZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgb2JqZWN0IHdoZW4gdGhlXG4gKiBzaWduYWwgY2hhbmdlcy5cbiAqXG4gKiBCeSByZXR1cm5pbmcgYW4gb2JqZWN0IGZyb20gYHVwZGF0ZWAsIHlvdSBzaWduYWwgdGhhdCB0aGUgbGlzdGVuZXJzIGhhdmUgdG8gYmUgbm90aWZpZWQuIFlvdSBjYW5cbiAqIG11dGF0ZSB0aGUgY3VycmVudCBvYmplY3QgYnV0IHlvdSBzaG91bGQgcmV0dXJuIGl0IHNvIHRoYXQgaXQgd2lsbCB0cmlnZ2VyIGxpc3RlbmVycy5cbiAqXG4gKiBgYGB0c3hcbiAqIGNvbnN0IENtcCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICBjb25zdCBuID0gdXNlU2lnbmFsKDIpO1xuICogICBjb25zdCBjdXN0b20gPSB1c2VTZXJpYWxpemVyJCgoKSA9PlxuICogICAgICh7XG4gKiAgICAgICBkZXNlcmlhbGl6ZTogKCkgPT4gbmV3IE15Q3VzdG9tU2VyaWFsaXphYmxlKG4udmFsdWUpLFxuICogICAgICAgdXBkYXRlOiAoY3VycmVudCkgPT4ge1xuICogICAgICAgICBjdXJyZW50Lm4gPSBuLnZhbHVlO1xuICogICAgICAgICByZXR1cm4gY3VycmVudDtcbiAqICAgICAgIH1cbiAqICAgICB9KVxuICogICApO1xuICogICByZXR1cm4gPGRpdiBvbkNsaWNrJD17KCkgPT4gbi52YWx1ZSsrfT57Y3VzdG9tLnZhbHVlLm59PC9kaXY+O1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VTZXJpYWxpemVyJDogdHlwZW9mIGNyZWF0ZVNlcmlhbGl6ZXIkID0gaW1wbGljaXQkRmlyc3RBcmcodXNlU2VyaWFsaXplclFybCBhcyBhbnkpO1xuIl19","import { isServerPlatform } from '../shared/platform/platform';\nimport { createQRL } from '../shared/qrl/qrl-class';\nimport { assertQrl } from '../shared/qrl/qrl-utils';\nimport { useOn, useOnDocument } from './use-on';\nimport { useSequentialScope } from './use-sequential-scope';\nimport { Task, scheduleTask } from './use-task';\n/** @internal */\nexport const useVisibleTaskQrl = (qrl, opts) => {\n    const { val, set, i, iCtx } = useSequentialScope();\n    const eagerness = opts?.strategy ?? 'intersection-observer';\n    if (val) {\n        if (isServerPlatform()) {\n            useRunTask(val, eagerness);\n        }\n        return;\n    }\n    assertQrl(qrl);\n    const task = new Task(1 /* TaskFlags.VISIBLE_TASK */, i, iCtx.$hostElement$, qrl, undefined, null);\n    set(task);\n    useRunTask(task, eagerness);\n    if (!isServerPlatform()) {\n        qrl.$resolveLazy$(iCtx.$element$);\n        iCtx.$container$.$scheduler$(32 /* ChoreType.VISIBLE */, task);\n    }\n};\nexport const useRunTask = (task, eagerness) => {\n    if (eagerness === 'intersection-observer') {\n        useOn('qvisible', getTaskHandlerQrl(task));\n    }\n    else if (eagerness === 'document-ready') {\n        useOnDocument('qinit', getTaskHandlerQrl(task));\n    }\n    else if (eagerness === 'document-idle') {\n        useOnDocument('qidle', getTaskHandlerQrl(task));\n    }\n};\nconst getTaskHandlerQrl = (task) => {\n    const taskHandler = createQRL(null, '_task', scheduleTask, null, null, [task]);\n    return taskHandler;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXZpc2libGUtdGFzay5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLXZpc2libGUtdGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQWEsWUFBWSxFQUFlLE1BQU0sWUFBWSxDQUFDO0FBb0J4RSxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFnQixFQUFFLElBQTJCLEVBQVEsRUFBRTtJQUN2RixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsa0JBQWtCLEVBQWdCLENBQUM7SUFDakUsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLFFBQVEsSUFBSSx1QkFBdUIsQ0FBQztJQUM1RCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7WUFDdkIsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFDRCxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFZixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksaUNBQXlCLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0YsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ1YsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyw2QkFBb0IsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQVUsRUFBRSxTQUEwQyxFQUFFLEVBQUU7SUFDbkYsSUFBSSxTQUFTLEtBQUssdUJBQXVCLEVBQUUsQ0FBQztRQUMxQyxLQUFLLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztTQUFNLElBQUksU0FBUyxLQUFLLGdCQUFnQixFQUFFLENBQUM7UUFDMUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxlQUFlLEVBQUUsQ0FBQztRQUN6QyxhQUFhLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUFVLEVBQXFCLEVBQUU7SUFDMUQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFlLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdGLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vc2hhcmVkL2pzeC90eXBlcy9qc3gtcXdpay1hdHRyaWJ1dGVzJztcbmltcG9ydCB7IGlzU2VydmVyUGxhdGZvcm0gfSBmcm9tICcuLi9zaGFyZWQvcGxhdGZvcm0vcGxhdGZvcm0nO1xuaW1wb3J0IHsgY3JlYXRlUVJMIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtY2xhc3MnO1xuaW1wb3J0IHsgYXNzZXJ0UXJsIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9xcmwtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBRUkwgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHsgQ2hvcmVUeXBlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWwtY2hvcmUtdHlwZSc7XG5pbXBvcnQgeyB1c2VPbiwgdXNlT25Eb2N1bWVudCB9IGZyb20gJy4vdXNlLW9uJztcbmltcG9ydCB7IHVzZVNlcXVlbnRpYWxTY29wZSB9IGZyb20gJy4vdXNlLXNlcXVlbnRpYWwtc2NvcGUnO1xuaW1wb3J0IHsgVGFzaywgVGFza0ZsYWdzLCBzY2hlZHVsZVRhc2ssIHR5cGUgVGFza0ZuIH0gZnJvbSAnLi91c2UtdGFzayc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBWaXNpYmxlVGFza1N0cmF0ZWd5ID0gJ2ludGVyc2VjdGlvbi1vYnNlcnZlcicgfCAnZG9jdW1lbnQtcmVhZHknIHwgJ2RvY3VtZW50LWlkbGUnO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGludGVyZmFjZSBPblZpc2libGVUYXNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc3RyYXRlZ3kgdG8gdXNlIHRvIGRldGVybWluZSB3aGVuIHRoZSBcIlZpc2libGVUYXNrXCIgc2hvdWxkIGZpcnN0IGV4ZWN1dGUuXG4gICAqXG4gICAqIC0gYGludGVyc2VjdGlvbi1vYnNlcnZlcmA6IHRoZSB0YXNrIHdpbGwgZmlyc3QgZXhlY3V0ZSB3aGVuIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlXG4gICAqICAgdmlld3BvcnQsIHVuZGVyIHRoZSBob29kIGl0IHVzZXMgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyIEFQSS5cbiAgICogLSBgZG9jdW1lbnQtcmVhZHlgOiB0aGUgdGFzayB3aWxsIGZpcnN0IGV4ZWN1dGUgd2hlbiB0aGUgZG9jdW1lbnQgaXMgcmVhZHksIHVuZGVyIHRoZSBob29kIGl0XG4gICAqICAgdXNlcyB0aGUgZG9jdW1lbnQgYGxvYWRgIGV2ZW50LlxuICAgKiAtIGBkb2N1bWVudC1pZGxlYDogdGhlIHRhc2sgd2lsbCBmaXJzdCBleGVjdXRlIHdoZW4gdGhlIGRvY3VtZW50IGlzIGlkbGUsIHVuZGVyIHRoZSBob29kIGl0IHVzZXNcbiAgICogICB0aGUgcmVxdWVzdElkbGVDYWxsYmFjayBBUEkuXG4gICAqL1xuICBzdHJhdGVneT86IFZpc2libGVUYXNrU3RyYXRlZ3k7XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCB1c2VWaXNpYmxlVGFza1FybCA9IChxcmw6IFFSTDxUYXNrRm4+LCBvcHRzPzogT25WaXNpYmxlVGFza09wdGlvbnMpOiB2b2lkID0+IHtcbiAgY29uc3QgeyB2YWwsIHNldCwgaSwgaUN0eCB9ID0gdXNlU2VxdWVudGlhbFNjb3BlPFRhc2s8VGFza0ZuPj4oKTtcbiAgY29uc3QgZWFnZXJuZXNzID0gb3B0cz8uc3RyYXRlZ3kgPz8gJ2ludGVyc2VjdGlvbi1vYnNlcnZlcic7XG4gIGlmICh2YWwpIHtcbiAgICBpZiAoaXNTZXJ2ZXJQbGF0Zm9ybSgpKSB7XG4gICAgICB1c2VSdW5UYXNrKHZhbCwgZWFnZXJuZXNzKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGFzc2VydFFybChxcmwpO1xuXG4gIGNvbnN0IHRhc2sgPSBuZXcgVGFzayhUYXNrRmxhZ3MuVklTSUJMRV9UQVNLLCBpLCBpQ3R4LiRob3N0RWxlbWVudCQsIHFybCwgdW5kZWZpbmVkLCBudWxsKTtcbiAgc2V0KHRhc2spO1xuICB1c2VSdW5UYXNrKHRhc2ssIGVhZ2VybmVzcyk7XG4gIGlmICghaXNTZXJ2ZXJQbGF0Zm9ybSgpKSB7XG4gICAgcXJsLiRyZXNvbHZlTGF6eSQoaUN0eC4kZWxlbWVudCQpO1xuICAgIGlDdHguJGNvbnRhaW5lciQuJHNjaGVkdWxlciQoQ2hvcmVUeXBlLlZJU0lCTEUsIHRhc2spO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXNlUnVuVGFzayA9ICh0YXNrOiBUYXNrLCBlYWdlcm5lc3M6IFZpc2libGVUYXNrU3RyYXRlZ3kgfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKGVhZ2VybmVzcyA9PT0gJ2ludGVyc2VjdGlvbi1vYnNlcnZlcicpIHtcbiAgICB1c2VPbigncXZpc2libGUnLCBnZXRUYXNrSGFuZGxlclFybCh0YXNrKSk7XG4gIH0gZWxzZSBpZiAoZWFnZXJuZXNzID09PSAnZG9jdW1lbnQtcmVhZHknKSB7XG4gICAgdXNlT25Eb2N1bWVudCgncWluaXQnLCBnZXRUYXNrSGFuZGxlclFybCh0YXNrKSk7XG4gIH0gZWxzZSBpZiAoZWFnZXJuZXNzID09PSAnZG9jdW1lbnQtaWRsZScpIHtcbiAgICB1c2VPbkRvY3VtZW50KCdxaWRsZScsIGdldFRhc2tIYW5kbGVyUXJsKHRhc2spKTtcbiAgfVxufTtcblxuY29uc3QgZ2V0VGFza0hhbmRsZXJRcmwgPSAodGFzazogVGFzayk6IFFSTDxFdmVudEhhbmRsZXI+ID0+IHtcbiAgY29uc3QgdGFza0hhbmRsZXIgPSBjcmVhdGVRUkw8RXZlbnRIYW5kbGVyPihudWxsLCAnX3Rhc2snLCBzY2hlZHVsZVRhc2ssIG51bGwsIG51bGwsIFt0YXNrXSk7XG4gIHJldHVybiB0YXNrSGFuZGxlcjtcbn07XG4iXX0=","import { dollar } from '../shared/qrl/qrl.public';\nimport { useResourceQrl, } from './use-resource';\n// <docs markdown=\"../readme.md#useResource\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useResource instead and run `pnpm docs.sync`)\n/**\n * This method works like an async memoized function that runs whenever some tracked value changes\n * and returns some data.\n *\n * `useResource` however returns immediate a `ResourceReturn` object that contains the data and a\n * state that indicates if the data is available or not.\n *\n * The status can be one of the following:\n *\n * - `pending` - the data is not yet available.\n * - `resolved` - the data is available.\n * - `rejected` - the data is not available due to an error or timeout.\n *\n * Be careful when using a `try/catch` statement in `useResource$`. If you catch the error and don't\n * re-throw it (or a new Error), the resource status will never be `rejected`.\n *\n * ### Example\n *\n * Example showing how `useResource` to perform a fetch to request the weather, whenever the input\n * city name changes.\n *\n * ```tsx\n * const Cmp = component$(() => {\n *   const cityS = useSignal('');\n *\n *   const weatherResource = useResource$(async ({ track, cleanup }) => {\n *     const cityName = track(cityS);\n *     const abortController = new AbortController();\n *     cleanup(() => abortController.abort('cleanup'));\n *     const res = await fetch(`http://weatherdata.com?city=${cityName}`, {\n *       signal: abortController.signal,\n *     });\n *     const data = await res.json();\n *     return data as { temp: number };\n *   });\n *\n *   return (\n *     <div>\n *       <input name=\"city\" bind:value={cityS} />\n *       <Resource\n *         value={weatherResource}\n *         onResolved={(weather) => {\n *           return <div>Temperature: {weather.temp}</div>;\n *         }}\n *       />\n *     </div>\n *   );\n * });\n * ```\n *\n * @public\n * @see Resource\n * @see ResourceReturn\n */\n// </docs>\nexport const useResource$ = (generatorFn, opts) => {\n    return useResourceQrl(dollar(generatorFn), opts);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXJlc291cmNlLWRvbGxhci5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvcXdpay9zcmMvY29yZS91c2UvdXNlLXJlc291cmNlLWRvbGxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUNMLGNBQWMsR0FJZixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLDZDQUE2QztBQUM3Qyx5Q0FBeUM7QUFDekMsbUVBQW1FO0FBQ25FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFERztBQUNILFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FDMUIsV0FBMEIsRUFDMUIsSUFBc0IsRUFDSCxFQUFFO0lBQ3JCLE9BQU8sY0FBYyxDQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkb2xsYXIgfSBmcm9tICcuLi9zaGFyZWQvcXJsL3FybC5wdWJsaWMnO1xuaW1wb3J0IHtcbiAgdXNlUmVzb3VyY2VRcmwsXG4gIHR5cGUgUmVzb3VyY2VGbixcbiAgdHlwZSBSZXNvdXJjZU9wdGlvbnMsXG4gIHR5cGUgUmVzb3VyY2VSZXR1cm4sXG59IGZyb20gJy4vdXNlLXJlc291cmNlJztcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi9yZWFkbWUubWQjdXNlUmVzb3VyY2VcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlUmVzb3VyY2UgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFRoaXMgbWV0aG9kIHdvcmtzIGxpa2UgYW4gYXN5bmMgbWVtb2l6ZWQgZnVuY3Rpb24gdGhhdCBydW5zIHdoZW5ldmVyIHNvbWUgdHJhY2tlZCB2YWx1ZSBjaGFuZ2VzXG4gKiBhbmQgcmV0dXJucyBzb21lIGRhdGEuXG4gKlxuICogYHVzZVJlc291cmNlYCBob3dldmVyIHJldHVybnMgaW1tZWRpYXRlIGEgYFJlc291cmNlUmV0dXJuYCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZGF0YSBhbmQgYVxuICogc3RhdGUgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGRhdGEgaXMgYXZhaWxhYmxlIG9yIG5vdC5cbiAqXG4gKiBUaGUgc3RhdHVzIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAtIGBwZW5kaW5nYCAtIHRoZSBkYXRhIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLlxuICogLSBgcmVzb2x2ZWRgIC0gdGhlIGRhdGEgaXMgYXZhaWxhYmxlLlxuICogLSBgcmVqZWN0ZWRgIC0gdGhlIGRhdGEgaXMgbm90IGF2YWlsYWJsZSBkdWUgdG8gYW4gZXJyb3Igb3IgdGltZW91dC5cbiAqXG4gKiBCZSBjYXJlZnVsIHdoZW4gdXNpbmcgYSBgdHJ5L2NhdGNoYCBzdGF0ZW1lbnQgaW4gYHVzZVJlc291cmNlJGAuIElmIHlvdSBjYXRjaCB0aGUgZXJyb3IgYW5kIGRvbid0XG4gKiByZS10aHJvdyBpdCAob3IgYSBuZXcgRXJyb3IpLCB0aGUgcmVzb3VyY2Ugc3RhdHVzIHdpbGwgbmV2ZXIgYmUgYHJlamVjdGVkYC5cbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIEV4YW1wbGUgc2hvd2luZyBob3cgYHVzZVJlc291cmNlYCB0byBwZXJmb3JtIGEgZmV0Y2ggdG8gcmVxdWVzdCB0aGUgd2VhdGhlciwgd2hlbmV2ZXIgdGhlIGlucHV0XG4gKiBjaXR5IG5hbWUgY2hhbmdlcy5cbiAqXG4gKiBgYGB0c3hcbiAqIGNvbnN0IENtcCA9IGNvbXBvbmVudCQoKCkgPT4ge1xuICogICBjb25zdCBjaXR5UyA9IHVzZVNpZ25hbCgnJyk7XG4gKlxuICogICBjb25zdCB3ZWF0aGVyUmVzb3VyY2UgPSB1c2VSZXNvdXJjZSQoYXN5bmMgKHsgdHJhY2ssIGNsZWFudXAgfSkgPT4ge1xuICogICAgIGNvbnN0IGNpdHlOYW1lID0gdHJhY2soY2l0eVMpO1xuICogICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAqICAgICBjbGVhbnVwKCgpID0+IGFib3J0Q29udHJvbGxlci5hYm9ydCgnY2xlYW51cCcpKTtcbiAqICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgaHR0cDovL3dlYXRoZXJkYXRhLmNvbT9jaXR5PSR7Y2l0eU5hbWV9YCwge1xuICogICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICogICAgIH0pO1xuICogICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICogICAgIHJldHVybiBkYXRhIGFzIHsgdGVtcDogbnVtYmVyIH07XG4gKiAgIH0pO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPGlucHV0IG5hbWU9XCJjaXR5XCIgYmluZDp2YWx1ZT17Y2l0eVN9IC8+XG4gKiAgICAgICA8UmVzb3VyY2VcbiAqICAgICAgICAgdmFsdWU9e3dlYXRoZXJSZXNvdXJjZX1cbiAqICAgICAgICAgb25SZXNvbHZlZD17KHdlYXRoZXIpID0+IHtcbiAqICAgICAgICAgICByZXR1cm4gPGRpdj5UZW1wZXJhdHVyZToge3dlYXRoZXIudGVtcH08L2Rpdj47XG4gKiAgICAgICAgIH19XG4gKiAgICAgICAvPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKiBAc2VlIFJlc291cmNlXG4gKiBAc2VlIFJlc291cmNlUmV0dXJuXG4gKi9cbi8vIDwvZG9jcz5cbmV4cG9ydCBjb25zdCB1c2VSZXNvdXJjZSQgPSA8VD4oXG4gIGdlbmVyYXRvckZuOiBSZXNvdXJjZUZuPFQ+LFxuICBvcHRzPzogUmVzb3VyY2VPcHRpb25zXG4pOiBSZXNvdXJjZVJldHVybjxUPiA9PiB7XG4gIHJldHVybiB1c2VSZXNvdXJjZVFybDxUPihkb2xsYXIoZ2VuZXJhdG9yRm4pLCBvcHRzKTtcbn07XG4iXX0=","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { useTaskQrl } from './use-task';\n// <docs markdown=\"../readme.md#useTask\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useTask instead and run `pnpm docs.sync`)\n/**\n * Reruns the `taskFn` when the observed inputs change.\n *\n * Use `useTask` to observe changes on a set of inputs, and then re-execute the `taskFn` when those\n * inputs change.\n *\n * The `taskFn` only executes if the observed inputs change. To observe the inputs, use the `obs`\n * function to wrap property reads. This creates subscriptions that will trigger the `taskFn` to\n * rerun.\n *\n * @param task - Function which should be re-executed when changes to the inputs are detected\n * @public\n *\n * ### Example\n *\n * The `useTask` function is used to observe the `store.count` property. Any changes to the\n * `store.count` cause the `taskFn` to execute which in turn updates the `store.doubleCount` to\n * the double of `store.count`.\n *\n * ```tsx\n * const Cmp = component$(() => {\n *   const store = useStore({\n *     count: 0,\n *     doubleCount: 0,\n *     debounced: 0,\n *   });\n *\n *   // Double count task\n *   useTask$(({ track }) => {\n *     const count = track(() => store.count);\n *     store.doubleCount = 2 * count;\n *   });\n *\n *   // Debouncer task\n *   useTask$(({ track }) => {\n *     const doubleCount = track(() => store.doubleCount);\n *     const timer = setTimeout(() => {\n *       store.debounced = doubleCount;\n *     }, 2000);\n *     return () => {\n *       clearTimeout(timer);\n *     };\n *   });\n *   return (\n *     <div>\n *       <div>\n *         {store.count} / {store.doubleCount}\n *       </div>\n *       <div>{store.debounced}</div>\n *     </div>\n *   );\n * });\n * ```\n *\n * @public\n * @see `Tracker`\n */\n// </docs>\n// We need to cast to help out the api extractor\nexport const useTask$ = /*#__PURE__*/ implicit$FirstArg(useTaskQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXRhc2stZG9sbGFyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtdGFzay1kb2xsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBZSxNQUFNLFlBQVksQ0FBQztBQUVyRCx5Q0FBeUM7QUFDekMseUNBQXlDO0FBQ3pDLCtEQUErRDtBQUMvRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3REc7QUFDSCxVQUFVO0FBQ1YsZ0RBQWdEO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW1wbGljaXQkRmlyc3RBcmcgfSBmcm9tICcuLi9zaGFyZWQvcXJsL2ltcGxpY2l0X2RvbGxhcic7XG5pbXBvcnQgeyB1c2VUYXNrUXJsLCB0eXBlIFRhc2tGbiB9IGZyb20gJy4vdXNlLXRhc2snO1xuXG4vLyA8ZG9jcyBtYXJrZG93bj1cIi4uL3JlYWRtZS5tZCN1c2VUYXNrXCI+XG4vLyAhIURPIE5PVCBFRElUIFRISVMgQ09NTUVOVCBESVJFQ1RMWSEhIVxuLy8gKGVkaXQgLi4vcmVhZG1lLm1kI3VzZVRhc2sgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIFJlcnVucyB0aGUgYHRhc2tGbmAgd2hlbiB0aGUgb2JzZXJ2ZWQgaW5wdXRzIGNoYW5nZS5cbiAqXG4gKiBVc2UgYHVzZVRhc2tgIHRvIG9ic2VydmUgY2hhbmdlcyBvbiBhIHNldCBvZiBpbnB1dHMsIGFuZCB0aGVuIHJlLWV4ZWN1dGUgdGhlIGB0YXNrRm5gIHdoZW4gdGhvc2VcbiAqIGlucHV0cyBjaGFuZ2UuXG4gKlxuICogVGhlIGB0YXNrRm5gIG9ubHkgZXhlY3V0ZXMgaWYgdGhlIG9ic2VydmVkIGlucHV0cyBjaGFuZ2UuIFRvIG9ic2VydmUgdGhlIGlucHV0cywgdXNlIHRoZSBgb2JzYFxuICogZnVuY3Rpb24gdG8gd3JhcCBwcm9wZXJ0eSByZWFkcy4gVGhpcyBjcmVhdGVzIHN1YnNjcmlwdGlvbnMgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIGB0YXNrRm5gIHRvXG4gKiByZXJ1bi5cbiAqXG4gKiBAcGFyYW0gdGFzayAtIEZ1bmN0aW9uIHdoaWNoIHNob3VsZCBiZSByZS1leGVjdXRlZCB3aGVuIGNoYW5nZXMgdG8gdGhlIGlucHV0cyBhcmUgZGV0ZWN0ZWRcbiAqIEBwdWJsaWNcbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIFRoZSBgdXNlVGFza2AgZnVuY3Rpb24gaXMgdXNlZCB0byBvYnNlcnZlIHRoZSBgc3RvcmUuY291bnRgIHByb3BlcnR5LiBBbnkgY2hhbmdlcyB0byB0aGVcbiAqIGBzdG9yZS5jb3VudGAgY2F1c2UgdGhlIGB0YXNrRm5gIHRvIGV4ZWN1dGUgd2hpY2ggaW4gdHVybiB1cGRhdGVzIHRoZSBgc3RvcmUuZG91YmxlQ291bnRgIHRvXG4gKiB0aGUgZG91YmxlIG9mIGBzdG9yZS5jb3VudGAuXG4gKlxuICogYGBgdHN4XG4gKiBjb25zdCBDbXAgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSh7XG4gKiAgICAgY291bnQ6IDAsXG4gKiAgICAgZG91YmxlQ291bnQ6IDAsXG4gKiAgICAgZGVib3VuY2VkOiAwLFxuICogICB9KTtcbiAqXG4gKiAgIC8vIERvdWJsZSBjb3VudCB0YXNrXG4gKiAgIHVzZVRhc2skKCh7IHRyYWNrIH0pID0+IHtcbiAqICAgICBjb25zdCBjb3VudCA9IHRyYWNrKCgpID0+IHN0b3JlLmNvdW50KTtcbiAqICAgICBzdG9yZS5kb3VibGVDb3VudCA9IDIgKiBjb3VudDtcbiAqICAgfSk7XG4gKlxuICogICAvLyBEZWJvdW5jZXIgdGFza1xuICogICB1c2VUYXNrJCgoeyB0cmFjayB9KSA9PiB7XG4gKiAgICAgY29uc3QgZG91YmxlQ291bnQgPSB0cmFjaygoKSA9PiBzdG9yZS5kb3VibGVDb3VudCk7XG4gKiAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAqICAgICAgIHN0b3JlLmRlYm91bmNlZCA9IGRvdWJsZUNvdW50O1xuICogICAgIH0sIDIwMDApO1xuICogICAgIHJldHVybiAoKSA9PiB7XG4gKiAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICogICAgIH07XG4gKiAgIH0pO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8ZGl2PlxuICogICAgICAgICB7c3RvcmUuY291bnR9IC8ge3N0b3JlLmRvdWJsZUNvdW50fVxuICogICAgICAgPC9kaXY+XG4gKiAgICAgICA8ZGl2PntzdG9yZS5kZWJvdW5jZWR9PC9kaXY+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNcbiAqIEBzZWUgYFRyYWNrZXJgXG4gKi9cbi8vIDwvZG9jcz5cbi8vIFdlIG5lZWQgdG8gY2FzdCB0byBoZWxwIG91dCB0aGUgYXBpIGV4dHJhY3RvclxuZXhwb3J0IGNvbnN0IHVzZVRhc2skID0gLyojX19QVVJFX18qLyBpbXBsaWNpdCRGaXJzdEFyZyh1c2VUYXNrUXJsKSBhcyAoZm46IFRhc2tGbikgPT4gdm9pZDtcbiJdfQ==","import { implicit$FirstArg } from '../shared/qrl/implicit_dollar';\nimport { useVisibleTaskQrl } from './use-visible-task';\n// <docs markdown=\"../readme.md#useVisibleTask\">\n// !!DO NOT EDIT THIS COMMENT DIRECTLY!!!\n// (edit ../readme.md#useVisibleTask instead and run `pnpm docs.sync`)\n/**\n * ```tsx\n * const Timer = component$(() => {\n *   const store = useStore({\n *     count: 0,\n *   });\n *\n *   useVisibleTask$(() => {\n *     // Only runs in the client\n *     const timer = setInterval(() => {\n *       store.count++;\n *     }, 500);\n *     return () => {\n *       clearInterval(timer);\n *     };\n *   });\n *\n *   return <div>{store.count}</div>;\n * });\n * ```\n *\n * @public\n */\n// </docs>\n// We need to cast to help out the api extractor\nexport const useVisibleTask$ = /*#__PURE__*/ implicit$FirstArg(useVisibleTaskQrl);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXZpc2libGUtdGFzay1kb2xsYXIuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvdXNlL3VzZS12aXNpYmxlLXRhc2stZG9sbGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxpQkFBaUIsRUFBNkIsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRixnREFBZ0Q7QUFDaEQseUNBQXlDO0FBQ3pDLHNFQUFzRTtBQUN0RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFVBQVU7QUFDVixnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FHdkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcGxpY2l0JEZpcnN0QXJnIH0gZnJvbSAnLi4vc2hhcmVkL3FybC9pbXBsaWNpdF9kb2xsYXInO1xuaW1wb3J0IHR5cGUgeyBUYXNrRm4gfSBmcm9tICcuL3VzZS10YXNrJztcbmltcG9ydCB7IHVzZVZpc2libGVUYXNrUXJsLCB0eXBlIE9uVmlzaWJsZVRhc2tPcHRpb25zIH0gZnJvbSAnLi91c2UtdmlzaWJsZS10YXNrJztcblxuLy8gPGRvY3MgbWFya2Rvd249XCIuLi9yZWFkbWUubWQjdXNlVmlzaWJsZVRhc2tcIj5cbi8vICEhRE8gTk9UIEVESVQgVEhJUyBDT01NRU5UIERJUkVDVExZISEhXG4vLyAoZWRpdCAuLi9yZWFkbWUubWQjdXNlVmlzaWJsZVRhc2sgaW5zdGVhZCBhbmQgcnVuIGBwbnBtIGRvY3Muc3luY2ApXG4vKipcbiAqIGBgYHRzeFxuICogY29uc3QgVGltZXIgPSBjb21wb25lbnQkKCgpID0+IHtcbiAqICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSh7XG4gKiAgICAgY291bnQ6IDAsXG4gKiAgIH0pO1xuICpcbiAqICAgdXNlVmlzaWJsZVRhc2skKCgpID0+IHtcbiAqICAgICAvLyBPbmx5IHJ1bnMgaW4gdGhlIGNsaWVudFxuICogICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICogICAgICAgc3RvcmUuY291bnQrKztcbiAqICAgICB9LCA1MDApO1xuICogICAgIHJldHVybiAoKSA9PiB7XG4gKiAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAqICAgICB9O1xuICogICB9KTtcbiAqXG4gKiAgIHJldHVybiA8ZGl2PntzdG9yZS5jb3VudH08L2Rpdj47XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuLy8gPC9kb2NzPlxuLy8gV2UgbmVlZCB0byBjYXN0IHRvIGhlbHAgb3V0IHRoZSBhcGkgZXh0cmFjdG9yXG5leHBvcnQgY29uc3QgdXNlVmlzaWJsZVRhc2skID0gLyojX19QVVJFX18qLyBpbXBsaWNpdCRGaXJzdEFyZyh1c2VWaXNpYmxlVGFza1FybCkgYXMgKFxuICBmbjogVGFza0ZuLFxuICBvcHRzPzogT25WaXNpYmxlVGFza09wdGlvbnNcbikgPT4gdm9pZDtcbiJdfQ==","import { ERROR_CONTEXT } from '../shared/error/error-handling';\nimport { useContextProvider } from './use-context';\nimport { useStore } from './use-store.public';\n/** @public */\nexport const useErrorBoundary = () => {\n    const error = useStore({ error: undefined });\n    useContextProvider(ERROR_CONTEXT, error);\n    return error;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWVycm9yLWJvdW5kYXJ5LmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJwYWNrYWdlcy9xd2lrL3NyYy9jb3JlL3VzZS91c2UtZXJyb3ItYm91bmRhcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBMkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7SUFDbkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFxQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV6QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVSUk9SX0NPTlRFWFQsIHR5cGUgRXJyb3JCb3VuZGFyeVN0b3JlIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9yL2Vycm9yLWhhbmRsaW5nJztcbmltcG9ydCB7IHVzZUNvbnRleHRQcm92aWRlciB9IGZyb20gJy4vdXNlLWNvbnRleHQnO1xuaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tICcuL3VzZS1zdG9yZS5wdWJsaWMnO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IHVzZUVycm9yQm91bmRhcnkgPSAoKSA9PiB7XG4gIGNvbnN0IGVycm9yID0gdXNlU3RvcmU8RXJyb3JCb3VuZGFyeVN0b3JlPih7IGVycm9yOiB1bmRlZmluZWQgfSk7XG4gIHVzZUNvbnRleHRQcm92aWRlcihFUlJPUl9DT05URVhULCBlcnJvcik7XG5cbiAgcmV0dXJuIGVycm9yO1xufTtcbiJdfQ==","// keep this import from core/build so the cjs build works\nimport { isDev } from '@qwik.dev/core/build';\nimport { _jsxSorted } from '../../internal';\nimport { useServerData } from '../../use/use-env-data';\nimport { QBaseAttr, QManifestHashAttr } from '../utils/markers';\n/**\n * Install a service worker which will prefetch the bundles.\n *\n * There can only be one service worker per page. Because there can be many separate Qwik Containers\n * on the page each container needs to load its prefetch graph using `PrefetchGraph` component.\n *\n * @param opts - Options for the prefetch service worker.\n *\n *   - `base` - Base URL for the service worker. Default is `import.meta.env.BASE_URL`, which is defined\n *       by Vite's `config.base` and defaults to `/`.\n *   - `scope` - Base URL for when the service-worker will activate. Default is `/`\n *   - `path` - Path to the service worker. Default is `qwik-prefetch-service-worker.js` unless you pass\n *       a path that starts with a `/` then the base is ignored. Default is\n *       `qwik-prefetch-service-worker.js`\n *   - `verbose` - Verbose logging for the service worker installation. Default is `false`\n *   - `nonce` - Optional nonce value for security purposes, defaults to `undefined`.\n *\n * @beta\n */\nexport const PrefetchServiceWorker = (opts) => {\n    const isTest = import.meta.env.TEST;\n    if (isDev && !isTest) {\n        const props = {\n            dangerouslySetInnerHTML: '<!-- PrefetchServiceWorker is disabled in dev mode. -->',\n        };\n        return _jsxSorted('script', null, props, null, 0, 'prefetch-service-worker');\n    }\n    const serverData = useServerData('containerAttributes', {});\n    // if an MFE app has a custom BASE_URL then this will be the correct value\n    // if you're not using MFE from another codebase then you want to override this value to your custom setup\n    const baseUrl = import.meta.env.BASE_URL || '/';\n    const resolvedOpts = {\n        base: serverData['q:base'],\n        manifestHash: serverData['q:manifest-hash'],\n        scope: '/',\n        verbose: false,\n        path: 'qwik-prefetch-service-worker.js',\n        ...opts,\n    };\n    if (opts?.path?.startsWith?.('/')) {\n        // allow different path and base\n        resolvedOpts.path = opts.path;\n    }\n    else {\n        // baseUrl: '/'\n        // path: 'qwik-prefetch-service-worker.js'\n        // the file 'qwik-prefetch-service-worker.js' is not located in /build/\n        resolvedOpts.path = baseUrl + resolvedOpts.path;\n    }\n    let code = PREFETCH_CODE.replace('URL', resolvedOpts.path).replace('SCOPE', resolvedOpts.scope);\n    if (!isDev) {\n        code = code.replaceAll(/\\s+/gm, '');\n    }\n    const props = {\n        dangerouslySetInnerHTML: [\n            '(' + code + ')(',\n            [\n                JSON.stringify(resolvedOpts.base),\n                JSON.stringify(resolvedOpts.manifestHash),\n                'navigator.serviceWorker',\n                'window.qwikPrefetchSW||(window.qwikPrefetchSW=[])',\n                resolvedOpts.verbose,\n            ].join(','),\n            ');',\n        ].join(''),\n        nonce: resolvedOpts.nonce,\n    };\n    return _jsxSorted('script', null, props, null, 0, 'prefetch-service-worker');\n};\nconst PREFETCH_CODE = /*#__PURE__*/ ((b, // base\nh, // manifest hash\nc, // Service worker container\nq, // Queue of messages to send to the service worker.\nv // Verbose mode\n) => {\n    c.register('URL', { scope: 'SCOPE' }).then((sw, onReady) => {\n        onReady = () => q.forEach((q.push = (v) => sw.active.postMessage(v)));\n        sw.installing\n            ? sw.installing.addEventListener('statechange', (e) => e.target.state == 'activated' && onReady())\n            : onReady();\n    });\n    v && q.push(['verbose']);\n    document.addEventListener('qprefetch', (e) => e.detail.bundles && q.push(['prefetch', b, ...e.detail.bundles]));\n}).toString();\n/**\n * Load the prefetch graph for the container.\n *\n * Each Qwik container needs to include its own prefetch graph.\n *\n * @param opts - Options for the loading prefetch graph.\n *\n *   - `base` - Base of the graph. For a default installation this will default to the q:base value\n *       `/build/`. But if more than one MFE is installed on the page, then each MFE needs to have\n *       its own base.\n *   - `manifestHash` - Hash of the manifest file to load. If not provided the hash will be extracted\n *       from the container attribute `q:manifest-hash` and assume the default build file\n *       `${base}/q-bundle-graph-${manifestHash}.json`.\n *   - `manifestURL` - URL of the manifest file to load if non-standard bundle graph location name.\n *\n * @beta\n */\nexport const PrefetchGraph = (opts = {}) => {\n    const isTest = import.meta.env.TEST;\n    if (isDev && !isTest) {\n        const props = {\n            dangerouslySetInnerHTML: '<!-- PrefetchGraph is disabled in dev mode. -->',\n        };\n        return _jsxSorted('script', null, props, null, 0, 'prefetch-graph');\n    }\n    const serverData = useServerData('containerAttributes', {});\n    const resolvedOpts = {\n        // /build/q-bundle-graph-${manifestHash}.json is always within the q:base location /build/\n        base: serverData[QBaseAttr],\n        manifestHash: serverData[QManifestHashAttr],\n        scope: '/',\n        verbose: false,\n        path: 'qwik-prefetch-service-worker.js',\n        ...opts,\n    };\n    const args = JSON.stringify([\n        'graph-url',\n        resolvedOpts.base,\n        `q-bundle-graph-${resolvedOpts.manifestHash}.json`,\n    ]);\n    const code = `(window.qwikPrefetchSW||(window.qwikPrefetchSW=[])).push(${args})`;\n    const props = {\n        dangerouslySetInnerHTML: code,\n        nonce: opts.nonce,\n    };\n    return _jsxSorted('script', null, props, null, 0, 'prefetch-graph');\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmV0Y2guanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL3F3aWsvc3JjL2NvcmUvc2hhcmVkL3ByZWZldGNoLXNlcnZpY2Utd29ya2VyL3ByZWZldGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBEQUEwRDtBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHaEU7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsSUFPckMsRUFBYSxFQUFFO0lBQ2QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ3BDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckIsTUFBTSxLQUFLLEdBQUc7WUFDWix1QkFBdUIsRUFBRSx5REFBeUQ7U0FDbkYsQ0FBQztRQUNGLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUseUJBQXlCLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUF5QixxQkFBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRiwwRUFBMEU7SUFDMUUsMEdBQTBHO0lBQzFHLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUM7SUFDaEQsTUFBTSxZQUFZLEdBQUc7UUFDbkIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7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RyxDQUFDO0lBQ2pGLE1BQU0sS0FBSyxHQUFHO1FBQ1osdUJBQXVCLEVBQUUsSUFBSTtRQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7S0FDbEIsQ0FBQztJQUNGLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBrZWVwIHRoaXMgaW1wb3J0IGZyb20gY29yZS9idWlsZCBzbyB0aGUgY2pzIGJ1aWxkIHdvcmtzXG5pbXBvcnQgeyBpc0RldiB9IGZyb20gJ0Bxd2lrLmRldi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IF9qc3hTb3J0ZWQgfSBmcm9tICcuLi8uLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyB1c2VTZXJ2ZXJEYXRhIH0gZnJvbSAnLi4vLi4vdXNlL3VzZS1lbnYtZGF0YSc7XG5pbXBvcnQgeyBRQmFzZUF0dHIsIFFNYW5pZmVzdEhhc2hBdHRyIH0gZnJvbSAnLi4vdXRpbHMvbWFya2Vycyc7XG5pbXBvcnQgdHlwZSB7IEpTWE91dHB1dCB9IGZyb20gJy4uL2pzeC90eXBlcy9qc3gtbm9kZSc7XG5cbi8qKlxuICogSW5zdGFsbCBhIHNlcnZpY2Ugd29ya2VyIHdoaWNoIHdpbGwgcHJlZmV0Y2ggdGhlIGJ1bmRsZXMuXG4gKlxuICogVGhlcmUgY2FuIG9ubHkgYmUgb25lIHNlcnZpY2Ugd29ya2VyIHBlciBwYWdlLiBCZWNhdXNlIHRoZXJlIGNhbiBiZSBtYW55IHNlcGFyYXRlIFF3aWsgQ29udGFpbmVyc1xuICogb24gdGhlIHBhZ2UgZWFjaCBjb250YWluZXIgbmVlZHMgdG8gbG9hZCBpdHMgcHJlZmV0Y2ggZ3JhcGggdXNpbmcgYFByZWZldGNoR3JhcGhgIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0gb3B0cyAtIE9wdGlvbnMgZm9yIHRoZSBwcmVmZXRjaCBzZXJ2aWNlIHdvcmtlci5cbiAqXG4gKiAgIC0gYGJhc2VgIC0gQmFzZSBVUkwgZm9yIHRoZSBzZXJ2aWNlIHdvcmtlci4gRGVmYXVsdCBpcyBgaW1wb3J0Lm1ldGEuZW52LkJBU0VfVVJMYCwgd2hpY2ggaXMgZGVmaW5lZFxuICogICAgICAgYnkgVml0ZSdzIGBjb25maWcuYmFzZWAgYW5kIGRlZmF1bHRzIHRvIGAvYC5cbiAqICAgLSBgc2NvcGVgIC0gQmFzZSBVUkwgZm9yIHdoZW4gdGhlIHNlcnZpY2Utd29ya2VyIHdpbGwgYWN0aXZhdGUuIERlZmF1bHQgaXMgYC9gXG4gKiAgIC0gYHBhdGhgIC0gUGF0aCB0byB0aGUgc2VydmljZSB3b3JrZXIuIERlZmF1bHQgaXMgYHF3aWstcHJlZmV0Y2gtc2VydmljZS13b3JrZXIuanNgIHVubGVzcyB5b3UgcGFzc1xuICogICAgICAgYSBwYXRoIHRoYXQgc3RhcnRzIHdpdGggYSBgL2AgdGhlbiB0aGUgYmFzZSBpcyBpZ25vcmVkLiBEZWZhdWx0IGlzXG4gKiAgICAgICBgcXdpay1wcmVmZXRjaC1zZXJ2aWNlLXdvcmtlci5qc2BcbiAqICAgLSBgdmVyYm9zZWAgLSBWZXJib3NlIGxvZ2dpbmcgZm9yIHRoZSBzZXJ2aWNlIHdvcmtlciBpbnN0YWxsYXRpb24uIERlZmF1bHQgaXMgYGZhbHNlYFxuICogICAtIGBub25jZWAgLSBPcHRpb25hbCBub25jZSB2YWx1ZSBmb3Igc2VjdXJpdHkgcHVycG9zZXMsIGRlZmF1bHRzIHRvIGB1bmRlZmluZWRgLlxuICpcbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCBjb25zdCBQcmVmZXRjaFNlcnZpY2VXb3JrZXIgPSAob3B0czoge1xuICBiYXNlPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcbiAgdmVyYm9zZT86IGJvb2xlYW47XG4gIGZldGNoQnVuZGxlR3JhcGg/OiBib29sZWFuO1xuICBub25jZT86IHN0cmluZztcbn0pOiBKU1hPdXRwdXQgPT4ge1xuICBjb25zdCBpc1Rlc3QgPSBpbXBvcnQubWV0YS5lbnYuVEVTVDtcbiAgaWYgKGlzRGV2ICYmICFpc1Rlc3QpIHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiAnPCEtLSBQcmVmZXRjaFNlcnZpY2VXb3JrZXIgaXMgZGlzYWJsZWQgaW4gZGV2IG1vZGUuIC0tPicsXG4gICAgfTtcbiAgICByZXR1cm4gX2pzeFNvcnRlZCgnc2NyaXB0JywgbnVsbCwgcHJvcHMsIG51bGwsIDAsICdwcmVmZXRjaC1zZXJ2aWNlLXdvcmtlcicpO1xuICB9XG5cbiAgY29uc3Qgc2VydmVyRGF0YSA9IHVzZVNlcnZlckRhdGE8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oJ2NvbnRhaW5lckF0dHJpYnV0ZXMnLCB7fSk7XG4gIC8vIGlmIGFuIE1GRSBhcHAgaGFzIGEgY3VzdG9tIEJBU0VfVVJMIHRoZW4gdGhpcyB3aWxsIGJlIHRoZSBjb3JyZWN0IHZhbHVlXG4gIC8vIGlmIHlvdSdyZSBub3QgdXNpbmcgTUZFIGZyb20gYW5vdGhlciBjb2RlYmFzZSB0aGVuIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgdmFsdWUgdG8geW91ciBjdXN0b20gc2V0dXBcbiAgY29uc3QgYmFzZVVybCA9IGltcG9ydC5tZXRhLmVudi5CQVNFX1VSTCB8fCAnLyc7XG4gIGNvbnN0IHJlc29sdmVkT3B0cyA9IHtcbiAgICBiYXNlOiBzZXJ2ZXJEYXRhWydxOmJhc2UnXSxcbiAgICBtYW5pZmVzdEhhc2g6IHNlcnZlckRhdGFbJ3E6bWFuaWZlc3QtaGFzaCddLFxuICAgIHNjb3BlOiAnLycsXG4gICAgdmVyYm9zZTogZmFsc2UsXG4gICAgcGF0aDogJ3F3aWstcHJlZmV0Y2gtc2VydmljZS13b3JrZXIuanMnLFxuICAgIC4uLm9wdHMsXG4gIH07XG4gIGlmIChvcHRzPy5wYXRoPy5zdGFydHNXaXRoPy4oJy8nKSkge1xuICAgIC8vIGFsbG93IGRpZmZlcmVudCBwYXRoIGFuZCBiYXNlXG4gICAgcmVzb2x2ZWRPcHRzLnBhdGggPSBvcHRzLnBhdGg7XG4gIH0gZWxzZSB7XG4gICAgLy8gYmFzZVVybDogJy8nXG4gICAgLy8gcGF0aDogJ3F3aWstcHJlZmV0Y2gtc2VydmljZS13b3JrZXIuanMnXG4gICAgLy8gdGhlIGZpbGUgJ3F3aWstcHJlZmV0Y2gtc2VydmljZS13b3JrZXIuanMnIGlzIG5vdCBsb2NhdGVkIGluIC9idWlsZC9cbiAgICByZXNvbHZlZE9wdHMucGF0aCA9IGJhc2VVcmwgKyByZXNvbHZlZE9wdHMucGF0aDtcbiAgfVxuICBsZXQgY29kZSA9IFBSRUZFVENIX0NPREUucmVwbGFjZSgnVVJMJywgcmVzb2x2ZWRPcHRzLnBhdGgpLnJlcGxhY2UoJ1NDT1BFJywgcmVzb2x2ZWRPcHRzLnNjb3BlKTtcbiAgaWYgKCFpc0Rldikge1xuICAgIGNvZGUgPSBjb2RlLnJlcGxhY2VBbGwoL1xccysvZ20sICcnKTtcbiAgfVxuICBjb25zdCBwcm9wcyA9IHtcbiAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDogW1xuICAgICAgJygnICsgY29kZSArICcpKCcsXG4gICAgICBbXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHJlc29sdmVkT3B0cy5iYXNlKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocmVzb2x2ZWRPcHRzLm1hbmlmZXN0SGFzaCksXG4gICAgICAgICduYXZpZ2F0b3Iuc2VydmljZVdvcmtlcicsXG4gICAgICAgICd3aW5kb3cucXdpa1ByZWZldGNoU1d8fCh3aW5kb3cucXdpa1ByZWZldGNoU1c9W10pJyxcbiAgICAgICAgcmVzb2x2ZWRPcHRzLnZlcmJvc2UsXG4gICAgICBdLmpvaW4oJywnKSxcbiAgICAgICcpOycsXG4gICAgXS5qb2luKCcnKSxcbiAgICBub25jZTogcmVzb2x2ZWRPcHRzLm5vbmNlLFxuICB9O1xuICByZXR1cm4gX2pzeFNvcnRlZCgnc2NyaXB0JywgbnVsbCwgcHJvcHMsIG51bGwsIDAsICdwcmVmZXRjaC1zZXJ2aWNlLXdvcmtlcicpO1xufTtcblxuY29uc3QgUFJFRkVUQ0hfQ09ERSA9IC8qI19fUFVSRV9fKi8gKChcbiAgYjogc3RyaW5nLCAvLyBiYXNlXG4gIGg6IHN0cmluZywgLy8gbWFuaWZlc3QgaGFzaFxuICBjOiBTZXJ2aWNlV29ya2VyQ29udGFpbmVyLCAvLyBTZXJ2aWNlIHdvcmtlciBjb250YWluZXJcbiAgcTogQXJyYXk8YW55W10+LCAvLyBRdWV1ZSBvZiBtZXNzYWdlcyB0byBzZW5kIHRvIHRoZSBzZXJ2aWNlIHdvcmtlci5cbiAgdjogYm9vbGVhbiAvLyBWZXJib3NlIG1vZGVcbikgPT4ge1xuICBjLnJlZ2lzdGVyKCdVUkwnLCB7IHNjb3BlOiAnU0NPUEUnIH0pLnRoZW4oXG4gICAgKHN3OiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uLCBvblJlYWR5PzogKCkgPT4gdm9pZCkgPT4ge1xuICAgICAgb25SZWFkeSA9ICgpID0+IHEuZm9yRWFjaCgocS5wdXNoID0gKHYpID0+IHN3LmFjdGl2ZSEucG9zdE1lc3NhZ2UodikgYXMgYW55KSk7XG4gICAgICBzdy5pbnN0YWxsaW5nXG4gICAgICAgID8gc3cuaW5zdGFsbGluZy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgJ3N0YXRlY2hhbmdlJyxcbiAgICAgICAgICAgIChlOiBhbnkpID0+IGUudGFyZ2V0LnN0YXRlID09ICdhY3RpdmF0ZWQnICYmIG9uUmVhZHkhKClcbiAgICAgICAgICApXG4gICAgICAgIDogb25SZWFkeSgpO1xuICAgIH1cbiAgKTtcbiAgdiAmJiBxLnB1c2goWyd2ZXJib3NlJ10pO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICdxcHJlZmV0Y2gnLFxuICAgIChlOiBhbnkpID0+IGUuZGV0YWlsLmJ1bmRsZXMgJiYgcS5wdXNoKFsncHJlZmV0Y2gnLCBiLCAuLi5lLmRldGFpbC5idW5kbGVzXSlcbiAgKTtcbn0pLnRvU3RyaW5nKCk7XG5cbi8qKlxuICogTG9hZCB0aGUgcHJlZmV0Y2ggZ3JhcGggZm9yIHRoZSBjb250YWluZXIuXG4gKlxuICogRWFjaCBRd2lrIGNvbnRhaW5lciBuZWVkcyB0byBpbmNsdWRlIGl0cyBvd24gcHJlZmV0Y2ggZ3JhcGguXG4gKlxuICogQHBhcmFtIG9wdHMgLSBPcHRpb25zIGZvciB0aGUgbG9hZGluZyBwcmVmZXRjaCBncmFwaC5cbiAqXG4gKiAgIC0gYGJhc2VgIC0gQmFzZSBvZiB0aGUgZ3JhcGguIEZvciBhIGRlZmF1bHQgaW5zdGFsbGF0aW9uIHRoaXMgd2lsbCBkZWZhdWx0IHRvIHRoZSBxOmJhc2UgdmFsdWVcbiAqICAgICAgIGAvYnVpbGQvYC4gQnV0IGlmIG1vcmUgdGhhbiBvbmUgTUZFIGlzIGluc3RhbGxlZCBvbiB0aGUgcGFnZSwgdGhlbiBlYWNoIE1GRSBuZWVkcyB0byBoYXZlXG4gKiAgICAgICBpdHMgb3duIGJhc2UuXG4gKiAgIC0gYG1hbmlmZXN0SGFzaGAgLSBIYXNoIG9mIHRoZSBtYW5pZmVzdCBmaWxlIHRvIGxvYWQuIElmIG5vdCBwcm92aWRlZCB0aGUgaGFzaCB3aWxsIGJlIGV4dHJhY3RlZFxuICogICAgICAgZnJvbSB0aGUgY29udGFpbmVyIGF0dHJpYnV0ZSBgcTptYW5pZmVzdC1oYXNoYCBhbmQgYXNzdW1lIHRoZSBkZWZhdWx0IGJ1aWxkIGZpbGVcbiAqICAgICAgIGAke2Jhc2V9L3EtYnVuZGxlLWdyYXBoLSR7bWFuaWZlc3RIYXNofS5qc29uYC5cbiAqICAgLSBgbWFuaWZlc3RVUkxgIC0gVVJMIG9mIHRoZSBtYW5pZmVzdCBmaWxlIHRvIGxvYWQgaWYgbm9uLXN0YW5kYXJkIGJ1bmRsZSBncmFwaCBsb2NhdGlvbiBuYW1lLlxuICpcbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCBjb25zdCBQcmVmZXRjaEdyYXBoID0gKFxuICBvcHRzOiB7IGJhc2U/OiBzdHJpbmc7IG1hbmlmZXN0SGFzaD86IHN0cmluZzsgbWFuaWZlc3RVUkw/OiBzdHJpbmc7IG5vbmNlPzogc3RyaW5nIH0gPSB7fVxuKTogSlNYT3V0cHV0ID0+IHtcbiAgY29uc3QgaXNUZXN0ID0gaW1wb3J0Lm1ldGEuZW52LlRFU1Q7XG4gIGlmIChpc0RldiAmJiAhaXNUZXN0KSB7XG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDogJzwhLS0gUHJlZmV0Y2hHcmFwaCBpcyBkaXNhYmxlZCBpbiBkZXYgbW9kZS4gLS0+JyxcbiAgICB9O1xuICAgIHJldHVybiBfanN4U29ydGVkKCdzY3JpcHQnLCBudWxsLCBwcm9wcywgbnVsbCwgMCwgJ3ByZWZldGNoLWdyYXBoJyk7XG4gIH1cbiAgY29uc3Qgc2VydmVyRGF0YSA9IHVzZVNlcnZlckRhdGE8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oJ2NvbnRhaW5lckF0dHJpYnV0ZXMnLCB7fSk7XG4gIGNvbnN0IHJlc29sdmVkT3B0cyA9IHtcbiAgICAvLyAvYnVpbGQvcS1idW5kbGUtZ3JhcGgtJHttYW5pZmVzdEhhc2h9Lmpzb24gaXMgYWx3YXlzIHdpdGhpbiB0aGUgcTpiYXNlIGxvY2F0aW9uIC9idWlsZC9cbiAgICBiYXNlOiBzZXJ2ZXJEYXRhW1FCYXNlQXR0cl0sXG4gICAgbWFuaWZlc3RIYXNoOiBzZXJ2ZXJEYXRhW1FNYW5pZmVzdEhhc2hBdHRyXSxcbiAgICBzY29wZTogJy8nLFxuICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgIHBhdGg6ICdxd2lrLXByZWZldGNoLXNlcnZpY2Utd29ya2VyLmpzJyxcbiAgICAuLi5vcHRzLFxuICB9O1xuICBjb25zdCBhcmdzID0gSlNPTi5zdHJpbmdpZnkoW1xuICAgICdncmFwaC11cmwnLFxuICAgIHJlc29sdmVkT3B0cy5iYXNlLFxuICAgIGBxLWJ1bmRsZS1ncmFwaC0ke3Jlc29sdmVkT3B0cy5tYW5pZmVzdEhhc2h9Lmpzb25gLFxuICBdKTtcbiAgY29uc3QgY29kZSA9IGAod2luZG93LnF3aWtQcmVmZXRjaFNXfHwod2luZG93LnF3aWtQcmVmZXRjaFNXPVtdKSkucHVzaCgke2FyZ3N9KWA7XG4gIGNvbnN0IHByb3BzID0ge1xuICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiBjb2RlLFxuICAgIG5vbmNlOiBvcHRzLm5vbmNlLFxuICB9O1xuICByZXR1cm4gX2pzeFNvcnRlZCgnc2NyaXB0JywgbnVsbCwgcHJvcHMsIG51bGwsIDAsICdwcmVmZXRjaC1ncmFwaCcpO1xufTtcbiJdfQ=="],"names":["isQrl","isElement","DEBUG","createSignal","_createSignal","createComputedQrl","createSerializerQrl","processVNodeData"],"mappings":"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zD,CAAC;;AC3KD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,CAAC,IAAI,KAAK;AACzC,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,+CAA+C,EAAE,IAAI,CAAC;AAC9F,IAAI,qBAAqB,MAAM,CAAC,MAAM,CAAC;AACvC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,IAAI,CAAC;AACtC,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,kBAAkB,GAAG,CAAC,OAAO,EAAE,QAAQ,KAAK;AACzD,IAAI,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,kBAAkB,EAAE;AACnD,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;AAC3B,QAAQ;AACR;AACA,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,eAAe,CAAC,OAAO,CAAC;AAChC;AACA,IAAI,IAAI,IAAI,IAAI,UAAU,EAAE;AAC5B,QAAQ,kBAAkB,CAAC,QAAQ,CAAC;AACpC;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC;AACtE,IAAI,GAAG,CAAC,CAAC,CAAC;AACV;AACA;AACA;AA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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,YAAY,GAAG,CAAC,WAAW,EAAE,IAAI,KAAK;AACnD,IAAI,OAAO,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;AACpD;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,QAAQ,iBAAiB,iBAAiB,CAAC,UAAU;;AC9DlE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,iBAAiB,iBAAiB,CAAC,iBAAiB;;AC3BhF;AACY,MAAC,gBAAgB,GAAG,MAAM;AACtC,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAChD,IAAI,kBAAkB,CAAC,aAAa,EAAE,KAAK,CAAC;AAC5C,IAAI,OAAO,KAAK;AAChB;;ACRA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,qBAAqB,GAAG,CAAC,IAAI,KAAK;AAC/C,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;AACvC,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AAC1B,QAAQ,MAAM,KAAK,GAAG;AACtB,YAAY,uBAAuB,EAAE,yDAAyD;AAC9F,SAAS;AACT,QAAQ,OAAO,UAAU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"}